diff --git a/examples/lens_immiscible_ecfv_ad.cpp b/examples/lens_immiscible_ecfv_ad.cpp index 52f1ded53..06aeedad7 100644 --- a/examples/lens_immiscible_ecfv_ad.cpp +++ b/examples/lens_immiscible_ecfv_ad.cpp @@ -28,25 +28,9 @@ */ #include "config.h" +#include "lens_immiscible_ecfv_ad.hh" + #include -#include -#include -#include "problems/lensproblem.hh" - -namespace Ewoms { -namespace Properties { -NEW_TYPE_TAG(LensProblemEcfvAd, INHERITS_FROM(ImmiscibleTwoPhaseModel, LensBaseProblem)); - -// use the element centered finite volume spatial discretization -SET_TAG_PROP(LensProblemEcfvAd, SpatialDiscretizationSplice, EcfvDiscretization); - -// use automatic differentiation for this simulator -SET_TAG_PROP(LensProblemEcfvAd, LocalLinearizerSplice, AutoDiffLocalLinearizer); - -// this problem works fine if the linear solver uses single precision scalars -SET_TYPE_PROP(LensProblemEcfvAd, LinearSolverScalar, float); - -}} int main(int argc, char **argv) { diff --git a/examples/lens_immiscible_ecfv_ad.hh b/examples/lens_immiscible_ecfv_ad.hh new file mode 100644 index 000000000..e418879f5 --- /dev/null +++ b/examples/lens_immiscible_ecfv_ad.hh @@ -0,0 +1,50 @@ +// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- +// vi: set et ts=4 sw=4 sts=4: +/* + 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 . + + Consult the COPYING file in the top-level source directory of this + module for the precise wording of the license and the list of + copyright holders. +*/ +/*! + * \file + * + * \brief Two-phase test for the immiscible model which uses the element-centered finite + * volume discretization in conjunction with automatic differentiation + */ +#ifndef EWOMS_LENS_IMMISCIBLE_ECFV_AD_HH +#define EWOMS_LENS_IMMISCIBLE_ECFV_AD_HH + +#include +#include +#include "problems/lensproblem.hh" + +namespace Ewoms { +namespace Properties { +NEW_TYPE_TAG(LensProblemEcfvAd, INHERITS_FROM(ImmiscibleTwoPhaseModel, LensBaseProblem)); + +// use the element centered finite volume spatial discretization +SET_TAG_PROP(LensProblemEcfvAd, SpatialDiscretizationSplice, EcfvDiscretization); + +// use automatic differentiation for this simulator +SET_TAG_PROP(LensProblemEcfvAd, LocalLinearizerSplice, AutoDiffLocalLinearizer); + +// this problem works fine if the linear solver uses single precision scalars +SET_TYPE_PROP(LensProblemEcfvAd, LinearSolverScalar, float); +}} + +#endif // EWOMS_LENS_IMMISCIBLE_ECFV_AD_HH diff --git a/examples/lens_immiscible_ecfv_ad_cu1.cpp b/examples/lens_immiscible_ecfv_ad_cu1.cpp new file mode 100644 index 000000000..643a18976 --- /dev/null +++ b/examples/lens_immiscible_ecfv_ad_cu1.cpp @@ -0,0 +1,45 @@ +// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- +// vi: set et ts=4 sw=4 sts=4: +/* + 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 . + + Consult the COPYING file in the top-level source directory of this + module for the precise wording of the license and the list of + copyright holders. +*/ +/*! + * \file + * + * \brief This test is identical to the simulation of the lens problem that uses the + * element centered finite volume discretization in conjunction with automatic + * differentiation (lens_immiscible_ecfv_ad). + * + * The only difference is that it uses multiple compile units in order to ensure that + * eWoms code can be used within libraries that use the same type tag within multiple + * compile units. This file represents the first compile unit and just defines an startup + * function for the simulator. + */ +#include "config.h" + +#include "lens_immiscible_ecfv_ad.hh" + +#include + +int mainCU1(int argc, char **argv) +{ + typedef TTAG(LensProblemEcfvAd) ProblemTypeTag; + return Ewoms::start(argc, argv); +} diff --git a/examples/lens_immiscible_ecfv_ad_cu2.cpp b/examples/lens_immiscible_ecfv_ad_cu2.cpp new file mode 100644 index 000000000..e18ac0ad3 --- /dev/null +++ b/examples/lens_immiscible_ecfv_ad_cu2.cpp @@ -0,0 +1,45 @@ +// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- +// vi: set et ts=4 sw=4 sts=4: +/* + 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 . + + Consult the COPYING file in the top-level source directory of this + module for the precise wording of the license and the list of + copyright holders. +*/ +/*! + * \file + * + * \brief This test is identical to the simulation of the lens problem that uses the + * element centered finite volume discretization in conjunction with automatic + * differentiation (lens_immiscible_ecfv_ad). + * + * The only difference is that it uses multiple compile units in order to ensure that + * eWoms code can be used within libraries that use the same type tag within multiple + * compile units. This file represents the second compile unit and just defines an + * startup function for the simulator. + */ +#include "config.h" + +#include "lens_immiscible_ecfv_ad.hh" + +#include + +int mainCU2(int argc, char **argv) +{ + typedef TTAG(LensProblemEcfvAd) ProblemTypeTag; + return Ewoms::start(argc, argv); +} diff --git a/examples/lens_immiscible_ecfv_ad_main.cpp b/examples/lens_immiscible_ecfv_ad_main.cpp new file mode 100644 index 000000000..8e40ee737 --- /dev/null +++ b/examples/lens_immiscible_ecfv_ad_main.cpp @@ -0,0 +1,41 @@ +// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- +// vi: set et ts=4 sw=4 sts=4: +/* + 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 . + + Consult the COPYING file in the top-level source directory of this + module for the precise wording of the license and the list of + copyright holders. +*/ +/*! + * \file + * + * \brief This test is identical to the simulation of the lens problem that uses the + * element centered finite volume discretization in conjunction with automatic + * differentiation (lens_immiscible_ecfv_ad). + * + * The only difference is that it uses multiple compile units in order to ensure that + * eWoms code can be used within libraries that use the same type tag within multiple + * compile units. This file calls contains main() and just calls the main entry point + * defined by the first compile unit. + */ +int mainCU1(int argc, char **argv); +int mainCU2(int argc, char **argv); + +int main(int argc, char **argv) +{ + return mainCU1(argc, argv); +}