mirror of
https://github.com/OPM/opm-simulators.git
synced 2024-11-22 09:16:27 -06:00
9b5a5d7d6c
These used to be needed to be enabled by the problem, but doing it in the generic code is more fool proof and thus better. On my laptop, volume variable caching caused the linearization time for first time step of the isothermal vertex-centered CO2 injection problem using the flash model go from 33.7 to 15.7 seconds, and enabling thermodynamic hints in addition yielded a linearization time of "only" 9.5 seconds. (that is for a debug build compiled with clang 3.3.)
63 lines
2.1 KiB
C++
63 lines
2.1 KiB
C++
/*
|
|
Copyright (C) 2012-2013 by Andreas Lauser
|
|
|
|
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 2 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 <http://www.gnu.org/licenses/>.
|
|
*/
|
|
/*!
|
|
* \file
|
|
*
|
|
* \brief Test for the non-isothermal compositional model based on flash
|
|
* calculations.
|
|
*/
|
|
#include "config.h"
|
|
|
|
#include <ewoms/common/quad.hh>
|
|
#include <ewoms/common/start.hh>
|
|
#include <ewoms/models/flash/flashmodel.hh>
|
|
#include <ewoms/disc/ecfv/ecfvdiscretization.hh>
|
|
#include "problems/co2injectionflash.hh"
|
|
#include "problems/co2injectionproblem.hh"
|
|
|
|
namespace Opm {
|
|
namespace Properties {
|
|
NEW_TYPE_TAG(Co2InjectionFlashNiEcfvProblem, INHERITS_FROM(FlashModel, Co2InjectionBaseProblem));
|
|
SET_TAG_PROP(Co2InjectionFlashNiEcfvProblem, SpatialDiscretizationSplice, EcfvDiscretization);
|
|
|
|
SET_BOOL_PROP(Co2InjectionFlashNiEcfvProblem, EnableEnergy, true);
|
|
|
|
// use the CO2 injection problem adapted flash solver
|
|
SET_TYPE_PROP(
|
|
Co2InjectionFlashNiEcfvProblem, FlashSolver,
|
|
Ewoms::Co2InjectionFlash<typename GET_PROP_TYPE(TypeTag, Scalar),
|
|
typename GET_PROP_TYPE(TypeTag, FluidSystem)>);
|
|
|
|
// the flash model has serious problems with the numerical
|
|
// precision. if quadruple precision math is available, we use it,
|
|
// else we increase the tolerance of the Newton solver
|
|
#if HAVE_QUAD
|
|
SET_TYPE_PROP(Co2InjectionFlashNiEcfvProblem, Scalar, quad);
|
|
#else
|
|
SET_SCALAR_PROP(Co2InjectionFlashNiEcfvProblem, NewtonTolerance, 1e-5);
|
|
#endif
|
|
}
|
|
}
|
|
|
|
int main(int argc, char **argv)
|
|
{
|
|
typedef TTAG(Co2InjectionFlashNiEcfvProblem) EcfvProblemTypeTag;
|
|
return Ewoms::start<EcfvProblemTypeTag>(argc, argv);
|
|
}
|