diff --git a/CMakeLists.txt b/CMakeLists.txt index 0d83dce1a..f93137085 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -163,6 +163,22 @@ opm_add_test(flow_blackoil_dunecpr DEPENDS "opmsimulators" LIBRARIES "opmsimulators") +opm_add_test(flow_onephase + ONLY_COMPILE + DEFAULT_ENABLE_IF ${FLOW_DEFAULT_ENABLE_IF} + SOURCES flow/flow_onephase.cpp + EXE_NAME flow_onephase + DEPENDS "opmsimulators" + LIBRARIES "opmsimulators") + +opm_add_test(flow_onephase_energy + ONLY_COMPILE + DEFAULT_ENABLE_IF ${FLOW_DEFAULT_ENABLE_IF} + SOURCES flow/flow_onephase_energy.cpp + EXE_NAME flow_onephase_energy + DEPENDS "opmsimulators" + LIBRARIES "opmsimulators") + if (BUILD_FLOW) diff --git a/flow/flow_onephase.cpp b/flow/flow_onephase.cpp new file mode 100644 index 000000000..4c3497d0b --- /dev/null +++ b/flow/flow_onephase.cpp @@ -0,0 +1,84 @@ +/* + Copyright 2013, 2014, 2015 SINTEF ICT, Applied Mathematics. + Copyright 2014 Dr. Blatt - HPC-Simulation-Software & Services + Copyright 2015, 2017 IRIS AS + + This file is part of the Open Porous Media project (OPM). + + OPM is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OPM is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OPM. If not, see . +*/ +#include "config.h" +#include "flow/flow_tag.hpp" +#include + + +BEGIN_PROPERTIES + NEW_TYPE_TAG(EclFlowProblemSimple, INHERITS_FROM(EclFlowProblem)); + NEW_PROP_TAG(FluidState); + NEW_PROP_TAG(FluidSystem); + //! The indices required by the model + SET_PROP(EclFlowProblemSimple, Indices) + { + private: + // it is unfortunately not possible to simply use 'TypeTag' here because this leads + // to cyclic definitions of some properties. if this happens the compiler error + // messages unfortunately are *really* confusing and not really helpful. + typedef TTAG(EclFlowProblem) BaseTypeTag; + typedef typename GET_PROP_TYPE(BaseTypeTag, FluidSystem) FluidSystem; + + public: + typedef Ewoms::BlackOilOnePhaseIndices type; + + }; + SET_PROP(EclFlowProblemSimple, FluidState) + { + private: + typedef typename GET_PROP_TYPE(TypeTag, FluidSystem) FluidSystem; + typedef typename GET_PROP_TYPE(TypeTag, Indices) Indices; + enum { enableTemperature = GET_PROP_VALUE(TypeTag, EnableTemperature) }; + enum { enableSolvent = GET_PROP_VALUE(TypeTag, EnableSolvent) }; + enum { enableEnergy = GET_PROP_VALUE(TypeTag, EnableEnergy) }; + enum { numPhases = GET_PROP_VALUE(TypeTag, NumPhases) }; + typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar; + typedef typename GET_PROP_TYPE(TypeTag, Evaluation) Evaluation; + static const bool compositionSwitchEnabled = Indices::gasEnabled; + + public: + //typedef Opm::BlackOilFluidSystemSimple type; + typedef Opm::BlackOilFluidState type; + }; + + // SET_PROP(EclFlowProblemSimple, FluidSystem) + // { + // private: + // //typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar; + // typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar; + // typedef typename GET_PROP_TYPE(TypeTag, Evaluation) Evaluation; + // typedef typename GET_PROP_TYPE(TypeTag, Indices) Indices; + + // public: + // typedef Opm::BlackOilFluidSystem type; + // }; +END_PROPERTIES + +int main(int argc, char** argv) +{ + typedef TTAG(EclFlowProblemSimple) TypeTag; + return mainFlow(argc, argv); +} diff --git a/flow/flow_onephase_energy.cpp b/flow/flow_onephase_energy.cpp new file mode 100644 index 000000000..7b91a9939 --- /dev/null +++ b/flow/flow_onephase_energy.cpp @@ -0,0 +1,86 @@ +/* + Copyright 2013, 2014, 2015 SINTEF ICT, Applied Mathematics. + Copyright 2014 Dr. Blatt - HPC-Simulation-Software & Services + Copyright 2015, 2017 IRIS AS + + This file is part of the Open Porous Media project (OPM). + + OPM is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + OPM is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with OPM. If not, see . +*/ +#include "config.h" +#include "flow/flow_tag.hpp" +#include + + +BEGIN_PROPERTIES + NEW_TYPE_TAG(EclFlowProblemSimple, INHERITS_FROM(EclFlowProblem)); + SET_BOOL_PROP(EclFlowProblemSimple, EnableEnergy, true); + NEW_PROP_TAG(FluidState); + NEW_PROP_TAG(FluidSystem); + //! The indices required by the model + SET_PROP(EclFlowProblemSimple, Indices) + { + private: + // it is unfortunately not possible to simply use 'TypeTag' here because this leads + // to cyclic definitions of some properties. if this happens the compiler error + // messages unfortunately are *really* confusing and not really helpful. + typedef TTAG(EclFlowProblem) BaseTypeTag; + typedef typename GET_PROP_TYPE(BaseTypeTag, FluidSystem) FluidSystem; + + public: + typedef Ewoms::BlackOilOnePhaseIndices type; + + }; + SET_PROP(EclFlowProblemSimple, FluidState) + { + private: + typedef typename GET_PROP_TYPE(TypeTag, FluidSystem) FluidSystem; + typedef typename GET_PROP_TYPE(TypeTag, Indices) Indices; + enum { enableTemperature = GET_PROP_VALUE(TypeTag, EnableTemperature) }; + enum { enableSolvent = GET_PROP_VALUE(TypeTag, EnableSolvent) }; + enum { enableEnergy = GET_PROP_VALUE(TypeTag, EnableEnergy) }; + enum { numPhases = GET_PROP_VALUE(TypeTag, NumPhases) }; + typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar; + typedef typename GET_PROP_TYPE(TypeTag, Evaluation) Evaluation; + static const bool compositionSwitchEnabled = Indices::gasEnabled; + + public: + //typedef Opm::BlackOilFluidSystemSimple type; + typedef Opm::BlackOilFluidState type; + }; + + // SET_PROP(EclFlowProblemSimple, FluidSystem) + // { + // private: + // //typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar; + // typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar; + // typedef typename GET_PROP_TYPE(TypeTag, Evaluation) Evaluation; + // typedef typename GET_PROP_TYPE(TypeTag, Indices) Indices; + + // public: + // typedef Opm::BlackOilFluidSystem type; + // }; +END_PROPERTIES + + +int main(int argc, char** argv) +{ + typedef TTAG(EclFlowProblemSimple) TypeTag; + return mainFlow(argc, argv); +}