Files
ResInsight/docs/fractureGridResultsForUnitSystem.md
T

5.6 KiB
Raw Blame History

fractureGridResultsForUnitSystem — How It Is Used

Overview

fractureGridResultsForUnitSystem is a pure virtual method declared in RimMeshFractureTemplate and implemented by both RimStimPlanFractureTemplate and RimThermalFractureTemplate. It returns per-cell result values from the fracture grid, converting them to the unit system of the fracture template (metric or field).

Declaration

RimMeshFractureTemplate.h:85

virtual std::vector<double> fractureGridResultsForUnitSystem(
    const QString&                resultName,
    const QString&                unitName,
    size_t                        timeStepIndex,
    RiaDefines::EclipseUnitSystem requiredUnitSystem ) const = 0;
Parameter Description
resultName Name of the fracture property (e.g. width, conductivity)
unitName Unit string as stored in the fracture definition file (e.g. "m", "ft", "/m")
timeStepIndex Index into the fracture time step data
requiredUnitSystem Target unit system (currently always passed as fractureTemplateUnit())

Return value: one double per fracture grid cell, converted to the template's unit system.


Implementation: RimStimPlanFractureTemplate

RimStimPlanFractureTemplate.cpp:287

std::vector<double> RimStimPlanFractureTemplate::fractureGridResultsForUnitSystem(
    const QString& resultName, const QString& unitName,
    size_t timeStepIndex, RiaDefines::EclipseUnitSystem requiredUnitSystem ) const
{
    auto resultValues = m_stimPlanFractureDefinitionData->fractureGridResults(
        resultName, unitName, m_activeTimeStepIndex );

    if ( fractureTemplateUnit() == UNITS_METRIC )
        for ( auto& v : resultValues )
            v = RiaEclipseUnitTools::convertToMeter( v, unitName );
    else if ( fractureTemplateUnit() == UNITS_FIELD )
        for ( auto& v : resultValues )
            v = RiaEclipseUnitTools::convertToFeet( v, unitName );

    return resultValues;
}
  1. Fetches raw cell values from RigStimPlanFractureDefinition::fractureGridResults.
  2. Converts each value using RiaEclipseUnitTools::convertToMeter or convertToFeet based on the template's unit system.
  3. The requiredUnitSystem parameter is accepted but the actual conversion uses fractureTemplateUnit() — the two are expected to match at all call sites.

RimThermalFractureTemplate follows the same pattern, but sources data from RigThermalFractureDefinition instead.


Call Sites in RimMeshFractureTemplate

All call sites are in RimMeshFractureTemplate.cpp. The method is never called from outside the template hierarchy.

1. wellFractureIntersectionData — along-well-path orientation

RimMeshFractureTemplate.cpp:239247

Width and conductivity values are fetched for every fracture grid cell, then a length-weighted mean is computed over the cells intersected by the well path:

auto nameUnit = widthParameterNameAndUnit();
widthResultValues = fractureGridResultsForUnitSystem(
    nameUnit.first, nameUnit.second, m_activeTimeStepIndex, fractureTemplateUnit() );

auto nameUnit2 = conductivityParameterNameAndUnit();
conductivityResultValues = fractureGridResultsForUnitSystem(
    nameUnit2.first, nameUnit2.second, m_activeTimeStepIndex, fractureTemplateUnit() );

The intersection lengths come from RigWellPathStimplanIntersector. The weighted means are used to populate WellFractureIntersectionData::m_width, m_conductivity, and m_permeability.

2. wellFractureIntersectionData — transverse/default orientation

RimMeshFractureTemplate.cpp:335

Only width is needed here (conductivity is read directly from the RigFractureCell). The value at the well-center cell index is extracted:

auto resultValues = fractureGridResultsForUnitSystem(
    nameUnit.first, nameUnit.second, m_activeTimeStepIndex, fractureTemplateUnit() );

if ( wellCellIndex < resultValues.size() )
    widthInRequiredUnit = resultValues[wellCellIndex];

Width and permeability are then set on the intersection data struct.

3. widthResultValues

RimMeshFractureTemplate.cpp:437

A thin wrapper that fetches the full width array for the active time step:

std::vector<double> RimMeshFractureTemplate::widthResultValues() const
{
    auto nameUnit = widthParameterNameAndUnit();
    return fractureGridResultsForUnitSystem(
        nameUnit.first, nameUnit.second, m_activeTimeStepIndex, fractureTemplateUnit() );
}

This is used by callers that need the complete per-cell width grid (e.g. for visualization).


Data Flow

Fracture definition file (.xml / thermal)
        |
        v
RigStimPlanFractureDefinition::fractureGridResults()   (raw values, native file units)
        |
        v
RimStimPlanFractureTemplate::fractureGridResultsForUnitSystem()   (unit-converted)
        |
        v
RimMeshFractureTemplate::wellFractureIntersectionData()
    ├── along-well-path: length-weighted mean → WellFractureIntersectionData
    └── transverse:      single cell lookup   → WellFractureIntersectionData
        |
        v
RimMeshFractureTemplate::widthResultValues()   (full grid, for visualization)

Key Files

File Role
ApplicationLibCode/ProjectDataModel/Completions/RimMeshFractureTemplate.h Pure virtual declaration
ApplicationLibCode/ProjectDataModel/Completions/RimMeshFractureTemplate.cpp All call sites
ApplicationLibCode/ProjectDataModel/Completions/RimStimPlanFractureTemplate.cpp StimPlan implementation
ApplicationLibCode/ProjectDataModel/Completions/RimThermalFractureTemplate.cpp Thermal implementation
ApplicationLibCode/Application/Tools/RiaEclipseUnitTools.h Unit conversion helpers