Hello,
I am using the 2pnc model for compositional gas+oil simulation and I
think the way TwoPNCVolumeVariables::completeFluidState works now does
not satisfy my needs. One thing is MiscibleMultiPhaseComposition being
not designed for non-ideal mixtures, the other is
ComputeFromReferencePhase machinery which I find puzzling, interfering
and not related to the problem I am trying to solve.
So I thought, DuMux is flexible and I should be able to set my own
properties for my problem tag. I added the following into problem.hh
template<class TypeTag>
struct VolumeVariables<TypeTag, TTag::My>
{
private:
using PV = GetPropType<TypeTag, Properties::PrimaryVariables>;
using FSY = GetPropType<TypeTag, Properties::FluidSystem>;
using FST = GetPropType<TypeTag, Properties::FluidState>;
using SSY = GetPropType<TypeTag, Properties::SolidSystem>;
using SST = GetPropType<TypeTag, Properties::SolidState>;
using PT = typename GetPropType<TypeTag,
Properties::SpatialParams>::PermeabilityType;
using MT = GetPropType<TypeTag, Properties::ModelTraits>;
static constexpr auto DM = GetPropType<TypeTag,
Properties::GridGeometry>::discMethod;
static constexpr bool enableIS = getPropValue<TypeTag,
Properties::EnableBoxInterfaceSolver>();
using SR = TwoPScvSaturationReconstruction<DM, enableIS>;
using BaseTraits = TwoPVolumeVariablesTraits<PV, FSY, FST,
SSY, SST, PT, MT, SR>;
using DT = GetPropType<TypeTag,
Properties::MolecularDiffusionType>;
using EDM = GetPropType<TypeTag,
Properties::EffectiveDiffusivityModel>;
template<class BaseTraits, class DT, class EDM>
struct NCTraits : public BaseTraits
{
using DiffusionType = DT;
using EffectiveDiffusivityModel = EDM;
};
public:
using type = MyVolumeVariables<NCTraits<BaseTraits, DT, EDM>>;
};
It partially works because I am
using PrimaryVariableSwitch = MyPrimaryVariableSwitch;
in MyVolumeVariables and it gets properly called.
But the following line the VtkOutputModule
auto elemVolVars =
localView(gridVariables_.curGridVolVars());
is template-instantiated with VolumeVariables = TwoPNCVolumeVariables,
not MyVolumeVariables. I tried tracking down why, got lost in
GridVariables and GridVolumeVariables, tried as the last resort adding
the following in problem.hh
//! The grid volume variables vector class
template<class TypeTag>
struct GridVolumeVariables<TypeTag, TTag::My>
{
private:
static constexpr bool enableCache = getPropValue<TypeTag,
Properties::EnableGridVolumeVariablesCache>();
using Problem = GetPropType<TypeTag, Properties::Problem>;
using PV = GetPropType<TypeTag, Properties::PrimaryVariables>;
[...]
using VolumeVariables =
MyVolumeVariables<NCTraits<BaseTraits, DT, EDM>>;
public:
using type = BoxGridVolumeVariables<Problem,
VolumeVariables, enableCache>;
};
template<class TypeTag>
struct GridVariables<TypeTag, TTag::My>
{
private:
using GG = GetPropType<TypeTag, Properties::GridGeometry>;
using GVV = GetPropType<TypeTag,
Properties::GridVolumeVariables>;
using GFVC = GetPropType<TypeTag,
Properties::GridFluxVariablesCache>;
public:
using type = FVGridVariables<GG, GVV, GFVC>;
};
And got the following error from
dumux/dumux/assembly/fvlocalassemblerbase.hh:315:29: error: invalid
initialization of reference of type ...
The problematic line is
{ return elemVolVars[scv]; }
At this point I am not sure I am on the right path. Any help will be
much appreciated.
Best regards,
Dmitry
_______________________________________________
DuMux mailing list
[email protected]
https://listserv.uni-stuttgart.de/mailman/listinfo/dumux