mirror of
https://github.com/OPM/opm-simulators.git
synced 2024-12-30 11:06:55 -06:00
Apply the swatinit scaling to new_props
The capillary pressure function in new_props is scaled to match the capillary pressure function in props. This is a temporary workaround while the simulator uses two different property object.
This commit is contained in:
parent
46cfaa1432
commit
013d1d3499
@ -170,6 +170,16 @@ try
|
|||||||
initBlackoilStateFromDeck(*grid->c_grid(), *props, deck, gravity[2], state);
|
initBlackoilStateFromDeck(*grid->c_grid(), *props, deck, gravity[2], state);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// The capillary pressure is scaled in new_props to match the scaled capillary pressure in props.
|
||||||
|
if (deck->hasKeyword("SWATINIT")) {
|
||||||
|
const int nc = grid->c_grid()->number_of_cells;
|
||||||
|
std::vector<int> cells(nc);
|
||||||
|
for (int c = 0; c < nc; ++c) { cells[c] = c; }
|
||||||
|
std::vector<double> pc = state.saturation();
|
||||||
|
props->capPress(nc, state.saturation().data(), cells.data(), pc.data(),NULL);
|
||||||
|
new_props->swatinit(state.saturation(),pc);
|
||||||
|
}
|
||||||
|
|
||||||
bool use_gravity = (gravity[0] != 0.0 || gravity[1] != 0.0 || gravity[2] != 0.0);
|
bool use_gravity = (gravity[0] != 0.0 || gravity[1] != 0.0 || gravity[2] != 0.0);
|
||||||
const double *grav = use_gravity ? &gravity[0] : 0;
|
const double *grav = use_gravity ? &gravity[0] : 0;
|
||||||
|
|
||||||
|
@ -936,5 +936,14 @@ namespace Opm
|
|||||||
OPM_THROW(std::logic_error, "BlackoilPropsAd class does not support this functionality.");
|
OPM_THROW(std::logic_error, "BlackoilPropsAd class does not support this functionality.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Update capillary pressure scaling according to pressure diff. and initial water saturation.
|
||||||
|
/// \param[in] saturation Array of n*numPhases cell indices to be associated with the saturation values.
|
||||||
|
/// \param[in] pc Array of n*numPhases cell indices to be associated with the capillary pressure values.
|
||||||
|
void BlackoilPropsAd::swatinit(const std::vector<double>& /*saturation*/,
|
||||||
|
const std::vector<double>& /*pc*/)
|
||||||
|
{
|
||||||
|
OPM_THROW(std::logic_error, "BlackoilPropsAd class does not support this functionality.");
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace Opm
|
} // namespace Opm
|
||||||
|
|
||||||
|
@ -387,6 +387,12 @@ namespace Opm
|
|||||||
/// Update for max oil saturation.
|
/// Update for max oil saturation.
|
||||||
void updateSatOilMax(const std::vector<double>& saturation);
|
void updateSatOilMax(const std::vector<double>& saturation);
|
||||||
|
|
||||||
|
/// Update capillary pressure scaling according to pressure diff. and initial water saturation.
|
||||||
|
/// \param[in] saturation Array of n*numPhases cell indices to be associated with the saturation values.
|
||||||
|
/// \param[in] pc Array of n*numPhases cell indices to be associated with the capillary pressure values.
|
||||||
|
void swatinit(const std::vector<double>& saturation,
|
||||||
|
const std::vector<double>& pc);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const BlackoilPropertiesInterface& props_;
|
const BlackoilPropertiesInterface& props_;
|
||||||
PhaseUsage pu_;
|
PhaseUsage pu_;
|
||||||
|
@ -1166,6 +1166,22 @@ BlackoilPropsAdFromDeck::BlackoilPropsAdFromDeck(const BlackoilPropsAdFromDeck&
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Update capillary pressure scaling according to pressure diff. and initial water saturation.
|
||||||
|
/// \param[in] saturation Array of n*numPhases cell indices to be associated with the saturation values.
|
||||||
|
/// \param[in] pc Array of n*numPhases cell indices to be associated with the capillary pressure values.
|
||||||
|
void BlackoilPropsAdFromDeck::swatinit(const std::vector<double>& saturation,
|
||||||
|
const std::vector<double>& pc)
|
||||||
|
{
|
||||||
|
const int nc = rock_.numCells();
|
||||||
|
const int numActivePhases = numPhases();
|
||||||
|
for (int i = 0; i < nc; ++i) {
|
||||||
|
double pcow = pc[numActivePhases*i + phase_usage_.phase_pos[Water]];
|
||||||
|
double swat = saturation[numActivePhases*i + phase_usage_.phase_pos[Water]];
|
||||||
|
satprops_->swatInitScaling(i,pcow,swat);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/// Apply correction to rs/rv according to kw VAPPARS
|
/// Apply correction to rs/rv according to kw VAPPARS
|
||||||
/// \param[in/out] r Array of n rs/rv values.
|
/// \param[in/out] r Array of n rs/rv values.
|
||||||
|
@ -425,6 +425,13 @@ namespace Opm
|
|||||||
/// Update for max oil saturation.
|
/// Update for max oil saturation.
|
||||||
void updateSatOilMax(const std::vector<double>& saturation);
|
void updateSatOilMax(const std::vector<double>& saturation);
|
||||||
|
|
||||||
|
/// Update capillary pressure scaling according to pressure diff. and initial water saturation.
|
||||||
|
/// \param[in] saturation Array of n*numPhases cell indices to be associated with the saturation values.
|
||||||
|
/// \param[in] pc Array of n*numPhases cell indices to be associated with the capillary pressure values.
|
||||||
|
void swatinit(const std::vector<double>& saturation,
|
||||||
|
const std::vector<double>& pc);
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/// Initializes the properties.
|
/// Initializes the properties.
|
||||||
template <class CentroidIterator>
|
template <class CentroidIterator>
|
||||||
|
@ -400,6 +400,13 @@ namespace Opm
|
|||||||
/// Update for max oil saturation.
|
/// Update for max oil saturation.
|
||||||
virtual
|
virtual
|
||||||
void updateSatOilMax(const std::vector<double>& saturation) = 0;
|
void updateSatOilMax(const std::vector<double>& saturation) = 0;
|
||||||
|
|
||||||
|
/// Update capillary pressure scaling according to pressure diff. and initial water saturation.
|
||||||
|
/// \param[in] saturation Array of n*numPhases cell indices to be associated with the saturation values.
|
||||||
|
/// \param[in] pc Array of n*numPhases cell indices to be associated with the capillary pressure values.
|
||||||
|
virtual
|
||||||
|
void swatinit(const std::vector<double>& saturation,
|
||||||
|
const std::vector<double>& pc ) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace Opm
|
} // namespace Opm
|
||||||
|
Loading…
Reference in New Issue
Block a user