opm-simulators/examples/tutorial1problem.hh

334 lines
13 KiB
C++
Raw Normal View History

// -*- 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 <http://www.gnu.org/licenses/>.
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.
*/
2010-11-11 09:01:37 -06:00
/*!
* \file
*
* \copydoc Opm::Tutorial1Problem
2010-11-11 09:01:37 -06:00
*/
Implement the element centered finite volume spatial discretization This makes eWoms multi-discretization capable. Along the way, this fixes some bugs and does a medium sized reorganization of the source tree. This is a squashed patch of the following commits: -------- 1st commit message: add initial version of the element centered finite volume discretization currently, it is a misnomer as it is just a copy of the vertex centered discretization plus some renames... -------- 2nd commit message: rename [VE]cfvModel -> [VE]cfvDiscretization -------- 3rd commit message: ecfv: prelimary changes required to make it compile but not work yet... -------- 4th commit message: Rename *FvElementGeometry to *Stencil "Stencil" seems to be the standard expression for this concept... (also, it is not specific to finite volume methods and is shorter.) -------- 5th commit message: refactor the stencil class for the element centered finite volume discretization -------- 6th commit message: ECFV: some work on the stencil class -------- 7th commit message: ECFV: make the boundary handling code compile -------- 8th commit message: rename elemContext() to elementContext() -------- 9th commit message: ECFV: make the VTK output modules compile -------- 10th commit message: stencil: introduce the concept of primary DOFs also save an vector of all element pointers in the stencil. -------- 11th commit message: ECFV: try to fix assembly; add missing timeIdx arguments to the num*() methods -------- 12th commit message: ECFV: fix stupid mistake in the assembler -------- 13th commit message: ECFV: remove a few implicit DOF == vertex assumptions the black-oil example now runs without valgrind complaints until it encounters a negative oil mole fraction. -------- 14th commit message: VCFV: make everything compile again all vertex centered FV examples should now work again... -------- 15th commit message: rename [ev]cfvmodel.hh to [ev]cfvdiscretization.hh the classes have already been renamed. -------- 16th commit message: ECFV: make it work to the point where it can write out the initial solution. -------- 17th commit message: ECFV: make it work the local residual/jacobian needed some work in distinguishing primary and secondary DOFs and there was an minor issue with the serialization code. for some reason, it seems still not correct. (-> convergence is too slow.) -------- 18th commit message: VCFV: make it compile for the black oil model again -------- 19th commit message: VCFV: make it compile with the remaining models again -------- 20th commit message: flash model: make it work with ECFV although this breaks its compatibility with VCFV. (-> next commit) -------- 21st commit message: adapt the VCFV to make it compatible with the flash model again -------- 22nd commit message: make all models compile with VCFV again -------- 23rd commit message: VCFV: more cleanups of the stencil VcfvStencil now does not have any public attributes anymore. TODO: do not export attributes in the SubControlVolume and SubControlVolumeFace classes. -------- 24th commit message: VCFV: actually update the element pointer -------- 25th commit message: change the blackoil model back to ECFV -------- 26th commit message: immiscible model: make it compatible with the ECFV discretization -------- 27th commit message: PVS model: make it work with ECFV -------- 28th commit message: NCP model: make it work with ECFV -------- 29th commit message: rename Vcfv*VelocityModule to *VelocityModule -------- 30th commit message: richards model: make it work with ECFV -------- 31st commit message: unify the ECFV and the VCFV VTK output modules and other cleanups -------- 32nd commit message: unify the common code of the VCFV and the ECFV disctretizations -------- 33rd commit message: unify the element contexts between element and vertex centered finite volumes -------- 34th commit message: unify the local jacobian class of the finite volume discretizations -------- 35th commit message: replace [VE]vcf(LocalResidual|ElementContext|BoundaryContext|ConstraintsContext) by generic code -------- 36th commit message: replace the [EV]cfvLocalResidual by generic code -------- 37th commit message: unify the MultiPhaseProblem and Problem classes, introduce NullBorderListCreator -------- 38th commit message: remove the discretization specific boundary context -------- 39th commit message: unify the [EV]cfvDiscretization classes -------- 40th commit message: Unify [EV]cfvMultiPhaseFluxVariables -------- 41st commit message: Unify the [EC]cfvNewton* classes -------- 42nd commit message: Unify [EV]cfvVolumeVariables -------- 43rd commit message: unify [EV]cfvAssembler -------- 44th commit message: unified flux variables: fix stupid mistake when calculating pressure gradients -------- 45th commit message: unify what's to unify for the [EV]CFV properties -------- 46th commit message: make the method to calculate gradients and values at flux approximation points changeable Currently, this is used by the vertex centered finite volume method to be able to use P1-finite element gradients instead of two-point ones... -------- 47th commit message: make the restart code work correctly, use the correct DofMapper for VCFV -------- 48th commit message: actually use the gradient calculator in a model the immiscible model in this case -------- 49th commit message: move some files around to where they belong, use the new gradient calculation code in all models TODO: proper handling of boundary gradients -------- 50th commit message: fix the stokes model currently it only works with the vertex centered finite volume discretization, but the plan is to soon move it to a staggered grid scheme anyway... -------- 51st commit message: move all models back to using the vertex centered finite volume discretization by default -------- 52nd commit message: models: some variable renames and documentation fixes - scv -> dof - vert -> dof - vertex -> dof - replace 'VCFV' - fix some typos -------- 53rd commit message: don't expect UG anymore since it is quite non-free and hard to get. we now use ALUGrid instead! -------- 54th commit message: temporarily disable jacobian recycling -------- 55th commit message: fix writing/reading restart files using the generic code -------- 56th commit message: fix bug where fluxes were only counted once in the stencil this only affected the vertex centered finite volumes discretization... -------- 57th commit message: boundary gradients: use the center of the sub-control volume adjacent to a boundary segment -------- 58th commit message: make it compile on GCC -------- 59th commit message: get rid of most hacks for this, partial reassemble and jacobian recycling was brought back. For the this and the remaining stuff the main trick is the introduction of the GridCommHandleFactory concept which constructs communication handles suited for the respective spatial discretization... -------- 60th commit message: fix a few annoying bugs first, default the convergence criterion for the linear solver did not honor the initial residual which lead to linear solver breakdowns, then some debugging code was left in the discrete fracture model and then there was a bug in the TP gradient approximation class... this has the consequence that we need a new reference solution for the discrete fracture problem... -------- 61st commit message: iterative linear solver: remove the code for the non-default convergence criteria -------- 62nd commit message: provide the FE cache instead of the local FE this fixes a segfault in the stokes model caused by the fact that the local FE was not initialized at this point. -------- 63rd commit message: (Navier-)Stokes: fix bug due to the transition to unit normals now, all tests pass for this branch. The only things which need to be fixed are some annoying performance regressions compared to master and some bug in the splices feature of the property system... -------- 64th commit message: some fix for the local residual of the immiscible model -------- 65th commit message: Navier-Stokes: implement SCV center gradients There seems to be a bug in the previous implementation (the jacobian inverse transposed is evaluated using the local, not the global geometry), so the reference solution for the stokes2c test problem has also been updated... -------- 66th commit message: remove the ALUGrid specialization of the LensGridCreator and the YaspGrid one for the fingerproblem using different grid seems to sometimes cause a different vertex order, which in turn causes the respective test to fail if the reference solution was computed using the other grid... -------- 67th commit message: VCFV: use the correct BorderListCreator this makes MPI parallel computations work again. apart from performance regressions, this branch does not exhibit any known regressions compared to master anymore... -------- 68th commit message: make verything compile with the element centered finite volume discretization except the Navier-Stokes and the two-phase DFM models, of course... -------- 69th commit message: minor fixes - make the navier-stokes model slighly more generic by using the proper (in,ex)teriorIndex() methods on sub-control volumes - make the signature of the calculateValue() template method of the common two-point gradient approximator match the one of the vertex centered finite volume one -------- 70th commit message: fix fallout from the Big Rebase -------- 71st commit message: ECFV: some bugs in the boundary -------- 72nd commit message: make computeFlux() compute area-specific quantities -------- 73rd commit message: fix more bugs in the element centered FV discretization now eWoms should match Dumux pretty closely... -------- 74th commit message: coalesce the common code of the multi phase porous medium models into "MultiPhaseBaseModel" -------- 75th commit message: update reference solutions these were changed because of the screw-up with the area of boundary segments... -------- 76th commit message: rename "ImplicitBase" to "FvBase" because in eWoms, everything is implicit and these are currently the base classes for all finite volume discretizations. -------- 77th commit message: make the spatial discretization selectable using a splice This requires an opm-core with a the patches from https://github.com/OPM/opm-core/pull/446 merged... -------- 78th commit message: rename the properties used for splices to *Splice -------- 79th commit message: move the files in 'tests/models' to 'tests' since 'tests' was empty except for the 'models' subdirectory... -------- 80th commit message: improve and fix the tutorial -------- 81st commit message: remove the -fno-strict-aliasing flag from the provided option files seems like recent versions of Dune have been adapted... -------- 82nd commit message: also compile all CO2 injection simulations using the element centered finite volume discretization -------- 83rd commit message: PVS model: make it work properly with the element-centered finite volume discretiation because DOF != number of vertices
2013-12-12 05:52:44 -06:00
#ifndef EWOMS_TUTORIAL1_PROBLEM_HH /*@\label{tutorial1:guardian1}@*/
#define EWOMS_TUTORIAL1_PROBLEM_HH /*@\label{tutorial1:guardian2}@*/
// The numerical model
#include <opm/models/immiscible/immisciblemodel.hh>
Implement the element centered finite volume spatial discretization This makes eWoms multi-discretization capable. Along the way, this fixes some bugs and does a medium sized reorganization of the source tree. This is a squashed patch of the following commits: -------- 1st commit message: add initial version of the element centered finite volume discretization currently, it is a misnomer as it is just a copy of the vertex centered discretization plus some renames... -------- 2nd commit message: rename [VE]cfvModel -> [VE]cfvDiscretization -------- 3rd commit message: ecfv: prelimary changes required to make it compile but not work yet... -------- 4th commit message: Rename *FvElementGeometry to *Stencil "Stencil" seems to be the standard expression for this concept... (also, it is not specific to finite volume methods and is shorter.) -------- 5th commit message: refactor the stencil class for the element centered finite volume discretization -------- 6th commit message: ECFV: some work on the stencil class -------- 7th commit message: ECFV: make the boundary handling code compile -------- 8th commit message: rename elemContext() to elementContext() -------- 9th commit message: ECFV: make the VTK output modules compile -------- 10th commit message: stencil: introduce the concept of primary DOFs also save an vector of all element pointers in the stencil. -------- 11th commit message: ECFV: try to fix assembly; add missing timeIdx arguments to the num*() methods -------- 12th commit message: ECFV: fix stupid mistake in the assembler -------- 13th commit message: ECFV: remove a few implicit DOF == vertex assumptions the black-oil example now runs without valgrind complaints until it encounters a negative oil mole fraction. -------- 14th commit message: VCFV: make everything compile again all vertex centered FV examples should now work again... -------- 15th commit message: rename [ev]cfvmodel.hh to [ev]cfvdiscretization.hh the classes have already been renamed. -------- 16th commit message: ECFV: make it work to the point where it can write out the initial solution. -------- 17th commit message: ECFV: make it work the local residual/jacobian needed some work in distinguishing primary and secondary DOFs and there was an minor issue with the serialization code. for some reason, it seems still not correct. (-> convergence is too slow.) -------- 18th commit message: VCFV: make it compile for the black oil model again -------- 19th commit message: VCFV: make it compile with the remaining models again -------- 20th commit message: flash model: make it work with ECFV although this breaks its compatibility with VCFV. (-> next commit) -------- 21st commit message: adapt the VCFV to make it compatible with the flash model again -------- 22nd commit message: make all models compile with VCFV again -------- 23rd commit message: VCFV: more cleanups of the stencil VcfvStencil now does not have any public attributes anymore. TODO: do not export attributes in the SubControlVolume and SubControlVolumeFace classes. -------- 24th commit message: VCFV: actually update the element pointer -------- 25th commit message: change the blackoil model back to ECFV -------- 26th commit message: immiscible model: make it compatible with the ECFV discretization -------- 27th commit message: PVS model: make it work with ECFV -------- 28th commit message: NCP model: make it work with ECFV -------- 29th commit message: rename Vcfv*VelocityModule to *VelocityModule -------- 30th commit message: richards model: make it work with ECFV -------- 31st commit message: unify the ECFV and the VCFV VTK output modules and other cleanups -------- 32nd commit message: unify the common code of the VCFV and the ECFV disctretizations -------- 33rd commit message: unify the element contexts between element and vertex centered finite volumes -------- 34th commit message: unify the local jacobian class of the finite volume discretizations -------- 35th commit message: replace [VE]vcf(LocalResidual|ElementContext|BoundaryContext|ConstraintsContext) by generic code -------- 36th commit message: replace the [EV]cfvLocalResidual by generic code -------- 37th commit message: unify the MultiPhaseProblem and Problem classes, introduce NullBorderListCreator -------- 38th commit message: remove the discretization specific boundary context -------- 39th commit message: unify the [EV]cfvDiscretization classes -------- 40th commit message: Unify [EV]cfvMultiPhaseFluxVariables -------- 41st commit message: Unify the [EC]cfvNewton* classes -------- 42nd commit message: Unify [EV]cfvVolumeVariables -------- 43rd commit message: unify [EV]cfvAssembler -------- 44th commit message: unified flux variables: fix stupid mistake when calculating pressure gradients -------- 45th commit message: unify what's to unify for the [EV]CFV properties -------- 46th commit message: make the method to calculate gradients and values at flux approximation points changeable Currently, this is used by the vertex centered finite volume method to be able to use P1-finite element gradients instead of two-point ones... -------- 47th commit message: make the restart code work correctly, use the correct DofMapper for VCFV -------- 48th commit message: actually use the gradient calculator in a model the immiscible model in this case -------- 49th commit message: move some files around to where they belong, use the new gradient calculation code in all models TODO: proper handling of boundary gradients -------- 50th commit message: fix the stokes model currently it only works with the vertex centered finite volume discretization, but the plan is to soon move it to a staggered grid scheme anyway... -------- 51st commit message: move all models back to using the vertex centered finite volume discretization by default -------- 52nd commit message: models: some variable renames and documentation fixes - scv -> dof - vert -> dof - vertex -> dof - replace 'VCFV' - fix some typos -------- 53rd commit message: don't expect UG anymore since it is quite non-free and hard to get. we now use ALUGrid instead! -------- 54th commit message: temporarily disable jacobian recycling -------- 55th commit message: fix writing/reading restart files using the generic code -------- 56th commit message: fix bug where fluxes were only counted once in the stencil this only affected the vertex centered finite volumes discretization... -------- 57th commit message: boundary gradients: use the center of the sub-control volume adjacent to a boundary segment -------- 58th commit message: make it compile on GCC -------- 59th commit message: get rid of most hacks for this, partial reassemble and jacobian recycling was brought back. For the this and the remaining stuff the main trick is the introduction of the GridCommHandleFactory concept which constructs communication handles suited for the respective spatial discretization... -------- 60th commit message: fix a few annoying bugs first, default the convergence criterion for the linear solver did not honor the initial residual which lead to linear solver breakdowns, then some debugging code was left in the discrete fracture model and then there was a bug in the TP gradient approximation class... this has the consequence that we need a new reference solution for the discrete fracture problem... -------- 61st commit message: iterative linear solver: remove the code for the non-default convergence criteria -------- 62nd commit message: provide the FE cache instead of the local FE this fixes a segfault in the stokes model caused by the fact that the local FE was not initialized at this point. -------- 63rd commit message: (Navier-)Stokes: fix bug due to the transition to unit normals now, all tests pass for this branch. The only things which need to be fixed are some annoying performance regressions compared to master and some bug in the splices feature of the property system... -------- 64th commit message: some fix for the local residual of the immiscible model -------- 65th commit message: Navier-Stokes: implement SCV center gradients There seems to be a bug in the previous implementation (the jacobian inverse transposed is evaluated using the local, not the global geometry), so the reference solution for the stokes2c test problem has also been updated... -------- 66th commit message: remove the ALUGrid specialization of the LensGridCreator and the YaspGrid one for the fingerproblem using different grid seems to sometimes cause a different vertex order, which in turn causes the respective test to fail if the reference solution was computed using the other grid... -------- 67th commit message: VCFV: use the correct BorderListCreator this makes MPI parallel computations work again. apart from performance regressions, this branch does not exhibit any known regressions compared to master anymore... -------- 68th commit message: make verything compile with the element centered finite volume discretization except the Navier-Stokes and the two-phase DFM models, of course... -------- 69th commit message: minor fixes - make the navier-stokes model slighly more generic by using the proper (in,ex)teriorIndex() methods on sub-control volumes - make the signature of the calculateValue() template method of the common two-point gradient approximator match the one of the vertex centered finite volume one -------- 70th commit message: fix fallout from the Big Rebase -------- 71st commit message: ECFV: some bugs in the boundary -------- 72nd commit message: make computeFlux() compute area-specific quantities -------- 73rd commit message: fix more bugs in the element centered FV discretization now eWoms should match Dumux pretty closely... -------- 74th commit message: coalesce the common code of the multi phase porous medium models into "MultiPhaseBaseModel" -------- 75th commit message: update reference solutions these were changed because of the screw-up with the area of boundary segments... -------- 76th commit message: rename "ImplicitBase" to "FvBase" because in eWoms, everything is implicit and these are currently the base classes for all finite volume discretizations. -------- 77th commit message: make the spatial discretization selectable using a splice This requires an opm-core with a the patches from https://github.com/OPM/opm-core/pull/446 merged... -------- 78th commit message: rename the properties used for splices to *Splice -------- 79th commit message: move the files in 'tests/models' to 'tests' since 'tests' was empty except for the 'models' subdirectory... -------- 80th commit message: improve and fix the tutorial -------- 81st commit message: remove the -fno-strict-aliasing flag from the provided option files seems like recent versions of Dune have been adapted... -------- 82nd commit message: also compile all CO2 injection simulations using the element centered finite volume discretization -------- 83rd commit message: PVS model: make it work properly with the element-centered finite volume discretiation because DOF != number of vertices
2013-12-12 05:52:44 -06:00
// The spatial discretization (VCFV == Vertex-Centered Finite Volumes)
#include <opm/models/discretization/vcfv/vcfvdiscretization.hh> /*@\label{tutorial1:include-discretization}@*/
Implement the element centered finite volume spatial discretization This makes eWoms multi-discretization capable. Along the way, this fixes some bugs and does a medium sized reorganization of the source tree. This is a squashed patch of the following commits: -------- 1st commit message: add initial version of the element centered finite volume discretization currently, it is a misnomer as it is just a copy of the vertex centered discretization plus some renames... -------- 2nd commit message: rename [VE]cfvModel -> [VE]cfvDiscretization -------- 3rd commit message: ecfv: prelimary changes required to make it compile but not work yet... -------- 4th commit message: Rename *FvElementGeometry to *Stencil "Stencil" seems to be the standard expression for this concept... (also, it is not specific to finite volume methods and is shorter.) -------- 5th commit message: refactor the stencil class for the element centered finite volume discretization -------- 6th commit message: ECFV: some work on the stencil class -------- 7th commit message: ECFV: make the boundary handling code compile -------- 8th commit message: rename elemContext() to elementContext() -------- 9th commit message: ECFV: make the VTK output modules compile -------- 10th commit message: stencil: introduce the concept of primary DOFs also save an vector of all element pointers in the stencil. -------- 11th commit message: ECFV: try to fix assembly; add missing timeIdx arguments to the num*() methods -------- 12th commit message: ECFV: fix stupid mistake in the assembler -------- 13th commit message: ECFV: remove a few implicit DOF == vertex assumptions the black-oil example now runs without valgrind complaints until it encounters a negative oil mole fraction. -------- 14th commit message: VCFV: make everything compile again all vertex centered FV examples should now work again... -------- 15th commit message: rename [ev]cfvmodel.hh to [ev]cfvdiscretization.hh the classes have already been renamed. -------- 16th commit message: ECFV: make it work to the point where it can write out the initial solution. -------- 17th commit message: ECFV: make it work the local residual/jacobian needed some work in distinguishing primary and secondary DOFs and there was an minor issue with the serialization code. for some reason, it seems still not correct. (-> convergence is too slow.) -------- 18th commit message: VCFV: make it compile for the black oil model again -------- 19th commit message: VCFV: make it compile with the remaining models again -------- 20th commit message: flash model: make it work with ECFV although this breaks its compatibility with VCFV. (-> next commit) -------- 21st commit message: adapt the VCFV to make it compatible with the flash model again -------- 22nd commit message: make all models compile with VCFV again -------- 23rd commit message: VCFV: more cleanups of the stencil VcfvStencil now does not have any public attributes anymore. TODO: do not export attributes in the SubControlVolume and SubControlVolumeFace classes. -------- 24th commit message: VCFV: actually update the element pointer -------- 25th commit message: change the blackoil model back to ECFV -------- 26th commit message: immiscible model: make it compatible with the ECFV discretization -------- 27th commit message: PVS model: make it work with ECFV -------- 28th commit message: NCP model: make it work with ECFV -------- 29th commit message: rename Vcfv*VelocityModule to *VelocityModule -------- 30th commit message: richards model: make it work with ECFV -------- 31st commit message: unify the ECFV and the VCFV VTK output modules and other cleanups -------- 32nd commit message: unify the common code of the VCFV and the ECFV disctretizations -------- 33rd commit message: unify the element contexts between element and vertex centered finite volumes -------- 34th commit message: unify the local jacobian class of the finite volume discretizations -------- 35th commit message: replace [VE]vcf(LocalResidual|ElementContext|BoundaryContext|ConstraintsContext) by generic code -------- 36th commit message: replace the [EV]cfvLocalResidual by generic code -------- 37th commit message: unify the MultiPhaseProblem and Problem classes, introduce NullBorderListCreator -------- 38th commit message: remove the discretization specific boundary context -------- 39th commit message: unify the [EV]cfvDiscretization classes -------- 40th commit message: Unify [EV]cfvMultiPhaseFluxVariables -------- 41st commit message: Unify the [EC]cfvNewton* classes -------- 42nd commit message: Unify [EV]cfvVolumeVariables -------- 43rd commit message: unify [EV]cfvAssembler -------- 44th commit message: unified flux variables: fix stupid mistake when calculating pressure gradients -------- 45th commit message: unify what's to unify for the [EV]CFV properties -------- 46th commit message: make the method to calculate gradients and values at flux approximation points changeable Currently, this is used by the vertex centered finite volume method to be able to use P1-finite element gradients instead of two-point ones... -------- 47th commit message: make the restart code work correctly, use the correct DofMapper for VCFV -------- 48th commit message: actually use the gradient calculator in a model the immiscible model in this case -------- 49th commit message: move some files around to where they belong, use the new gradient calculation code in all models TODO: proper handling of boundary gradients -------- 50th commit message: fix the stokes model currently it only works with the vertex centered finite volume discretization, but the plan is to soon move it to a staggered grid scheme anyway... -------- 51st commit message: move all models back to using the vertex centered finite volume discretization by default -------- 52nd commit message: models: some variable renames and documentation fixes - scv -> dof - vert -> dof - vertex -> dof - replace 'VCFV' - fix some typos -------- 53rd commit message: don't expect UG anymore since it is quite non-free and hard to get. we now use ALUGrid instead! -------- 54th commit message: temporarily disable jacobian recycling -------- 55th commit message: fix writing/reading restart files using the generic code -------- 56th commit message: fix bug where fluxes were only counted once in the stencil this only affected the vertex centered finite volumes discretization... -------- 57th commit message: boundary gradients: use the center of the sub-control volume adjacent to a boundary segment -------- 58th commit message: make it compile on GCC -------- 59th commit message: get rid of most hacks for this, partial reassemble and jacobian recycling was brought back. For the this and the remaining stuff the main trick is the introduction of the GridCommHandleFactory concept which constructs communication handles suited for the respective spatial discretization... -------- 60th commit message: fix a few annoying bugs first, default the convergence criterion for the linear solver did not honor the initial residual which lead to linear solver breakdowns, then some debugging code was left in the discrete fracture model and then there was a bug in the TP gradient approximation class... this has the consequence that we need a new reference solution for the discrete fracture problem... -------- 61st commit message: iterative linear solver: remove the code for the non-default convergence criteria -------- 62nd commit message: provide the FE cache instead of the local FE this fixes a segfault in the stokes model caused by the fact that the local FE was not initialized at this point. -------- 63rd commit message: (Navier-)Stokes: fix bug due to the transition to unit normals now, all tests pass for this branch. The only things which need to be fixed are some annoying performance regressions compared to master and some bug in the splices feature of the property system... -------- 64th commit message: some fix for the local residual of the immiscible model -------- 65th commit message: Navier-Stokes: implement SCV center gradients There seems to be a bug in the previous implementation (the jacobian inverse transposed is evaluated using the local, not the global geometry), so the reference solution for the stokes2c test problem has also been updated... -------- 66th commit message: remove the ALUGrid specialization of the LensGridCreator and the YaspGrid one for the fingerproblem using different grid seems to sometimes cause a different vertex order, which in turn causes the respective test to fail if the reference solution was computed using the other grid... -------- 67th commit message: VCFV: use the correct BorderListCreator this makes MPI parallel computations work again. apart from performance regressions, this branch does not exhibit any known regressions compared to master anymore... -------- 68th commit message: make verything compile with the element centered finite volume discretization except the Navier-Stokes and the two-phase DFM models, of course... -------- 69th commit message: minor fixes - make the navier-stokes model slighly more generic by using the proper (in,ex)teriorIndex() methods on sub-control volumes - make the signature of the calculateValue() template method of the common two-point gradient approximator match the one of the vertex centered finite volume one -------- 70th commit message: fix fallout from the Big Rebase -------- 71st commit message: ECFV: some bugs in the boundary -------- 72nd commit message: make computeFlux() compute area-specific quantities -------- 73rd commit message: fix more bugs in the element centered FV discretization now eWoms should match Dumux pretty closely... -------- 74th commit message: coalesce the common code of the multi phase porous medium models into "MultiPhaseBaseModel" -------- 75th commit message: update reference solutions these were changed because of the screw-up with the area of boundary segments... -------- 76th commit message: rename "ImplicitBase" to "FvBase" because in eWoms, everything is implicit and these are currently the base classes for all finite volume discretizations. -------- 77th commit message: make the spatial discretization selectable using a splice This requires an opm-core with a the patches from https://github.com/OPM/opm-core/pull/446 merged... -------- 78th commit message: rename the properties used for splices to *Splice -------- 79th commit message: move the files in 'tests/models' to 'tests' since 'tests' was empty except for the 'models' subdirectory... -------- 80th commit message: improve and fix the tutorial -------- 81st commit message: remove the -fno-strict-aliasing flag from the provided option files seems like recent versions of Dune have been adapted... -------- 82nd commit message: also compile all CO2 injection simulations using the element centered finite volume discretization -------- 83rd commit message: PVS model: make it work properly with the element-centered finite volume discretiation because DOF != number of vertices
2013-12-12 05:52:44 -06:00
// The chemical species that are used
#include <opm/material/components/SimpleH2O.hpp>
#include <opm/material/components/Lnapl.hpp>
2013-11-06 07:50:01 -06:00
// Headers required for the capillary pressure law
Implement the element centered finite volume spatial discretization This makes eWoms multi-discretization capable. Along the way, this fixes some bugs and does a medium sized reorganization of the source tree. This is a squashed patch of the following commits: -------- 1st commit message: add initial version of the element centered finite volume discretization currently, it is a misnomer as it is just a copy of the vertex centered discretization plus some renames... -------- 2nd commit message: rename [VE]cfvModel -> [VE]cfvDiscretization -------- 3rd commit message: ecfv: prelimary changes required to make it compile but not work yet... -------- 4th commit message: Rename *FvElementGeometry to *Stencil "Stencil" seems to be the standard expression for this concept... (also, it is not specific to finite volume methods and is shorter.) -------- 5th commit message: refactor the stencil class for the element centered finite volume discretization -------- 6th commit message: ECFV: some work on the stencil class -------- 7th commit message: ECFV: make the boundary handling code compile -------- 8th commit message: rename elemContext() to elementContext() -------- 9th commit message: ECFV: make the VTK output modules compile -------- 10th commit message: stencil: introduce the concept of primary DOFs also save an vector of all element pointers in the stencil. -------- 11th commit message: ECFV: try to fix assembly; add missing timeIdx arguments to the num*() methods -------- 12th commit message: ECFV: fix stupid mistake in the assembler -------- 13th commit message: ECFV: remove a few implicit DOF == vertex assumptions the black-oil example now runs without valgrind complaints until it encounters a negative oil mole fraction. -------- 14th commit message: VCFV: make everything compile again all vertex centered FV examples should now work again... -------- 15th commit message: rename [ev]cfvmodel.hh to [ev]cfvdiscretization.hh the classes have already been renamed. -------- 16th commit message: ECFV: make it work to the point where it can write out the initial solution. -------- 17th commit message: ECFV: make it work the local residual/jacobian needed some work in distinguishing primary and secondary DOFs and there was an minor issue with the serialization code. for some reason, it seems still not correct. (-> convergence is too slow.) -------- 18th commit message: VCFV: make it compile for the black oil model again -------- 19th commit message: VCFV: make it compile with the remaining models again -------- 20th commit message: flash model: make it work with ECFV although this breaks its compatibility with VCFV. (-> next commit) -------- 21st commit message: adapt the VCFV to make it compatible with the flash model again -------- 22nd commit message: make all models compile with VCFV again -------- 23rd commit message: VCFV: more cleanups of the stencil VcfvStencil now does not have any public attributes anymore. TODO: do not export attributes in the SubControlVolume and SubControlVolumeFace classes. -------- 24th commit message: VCFV: actually update the element pointer -------- 25th commit message: change the blackoil model back to ECFV -------- 26th commit message: immiscible model: make it compatible with the ECFV discretization -------- 27th commit message: PVS model: make it work with ECFV -------- 28th commit message: NCP model: make it work with ECFV -------- 29th commit message: rename Vcfv*VelocityModule to *VelocityModule -------- 30th commit message: richards model: make it work with ECFV -------- 31st commit message: unify the ECFV and the VCFV VTK output modules and other cleanups -------- 32nd commit message: unify the common code of the VCFV and the ECFV disctretizations -------- 33rd commit message: unify the element contexts between element and vertex centered finite volumes -------- 34th commit message: unify the local jacobian class of the finite volume discretizations -------- 35th commit message: replace [VE]vcf(LocalResidual|ElementContext|BoundaryContext|ConstraintsContext) by generic code -------- 36th commit message: replace the [EV]cfvLocalResidual by generic code -------- 37th commit message: unify the MultiPhaseProblem and Problem classes, introduce NullBorderListCreator -------- 38th commit message: remove the discretization specific boundary context -------- 39th commit message: unify the [EV]cfvDiscretization classes -------- 40th commit message: Unify [EV]cfvMultiPhaseFluxVariables -------- 41st commit message: Unify the [EC]cfvNewton* classes -------- 42nd commit message: Unify [EV]cfvVolumeVariables -------- 43rd commit message: unify [EV]cfvAssembler -------- 44th commit message: unified flux variables: fix stupid mistake when calculating pressure gradients -------- 45th commit message: unify what's to unify for the [EV]CFV properties -------- 46th commit message: make the method to calculate gradients and values at flux approximation points changeable Currently, this is used by the vertex centered finite volume method to be able to use P1-finite element gradients instead of two-point ones... -------- 47th commit message: make the restart code work correctly, use the correct DofMapper for VCFV -------- 48th commit message: actually use the gradient calculator in a model the immiscible model in this case -------- 49th commit message: move some files around to where they belong, use the new gradient calculation code in all models TODO: proper handling of boundary gradients -------- 50th commit message: fix the stokes model currently it only works with the vertex centered finite volume discretization, but the plan is to soon move it to a staggered grid scheme anyway... -------- 51st commit message: move all models back to using the vertex centered finite volume discretization by default -------- 52nd commit message: models: some variable renames and documentation fixes - scv -> dof - vert -> dof - vertex -> dof - replace 'VCFV' - fix some typos -------- 53rd commit message: don't expect UG anymore since it is quite non-free and hard to get. we now use ALUGrid instead! -------- 54th commit message: temporarily disable jacobian recycling -------- 55th commit message: fix writing/reading restart files using the generic code -------- 56th commit message: fix bug where fluxes were only counted once in the stencil this only affected the vertex centered finite volumes discretization... -------- 57th commit message: boundary gradients: use the center of the sub-control volume adjacent to a boundary segment -------- 58th commit message: make it compile on GCC -------- 59th commit message: get rid of most hacks for this, partial reassemble and jacobian recycling was brought back. For the this and the remaining stuff the main trick is the introduction of the GridCommHandleFactory concept which constructs communication handles suited for the respective spatial discretization... -------- 60th commit message: fix a few annoying bugs first, default the convergence criterion for the linear solver did not honor the initial residual which lead to linear solver breakdowns, then some debugging code was left in the discrete fracture model and then there was a bug in the TP gradient approximation class... this has the consequence that we need a new reference solution for the discrete fracture problem... -------- 61st commit message: iterative linear solver: remove the code for the non-default convergence criteria -------- 62nd commit message: provide the FE cache instead of the local FE this fixes a segfault in the stokes model caused by the fact that the local FE was not initialized at this point. -------- 63rd commit message: (Navier-)Stokes: fix bug due to the transition to unit normals now, all tests pass for this branch. The only things which need to be fixed are some annoying performance regressions compared to master and some bug in the splices feature of the property system... -------- 64th commit message: some fix for the local residual of the immiscible model -------- 65th commit message: Navier-Stokes: implement SCV center gradients There seems to be a bug in the previous implementation (the jacobian inverse transposed is evaluated using the local, not the global geometry), so the reference solution for the stokes2c test problem has also been updated... -------- 66th commit message: remove the ALUGrid specialization of the LensGridCreator and the YaspGrid one for the fingerproblem using different grid seems to sometimes cause a different vertex order, which in turn causes the respective test to fail if the reference solution was computed using the other grid... -------- 67th commit message: VCFV: use the correct BorderListCreator this makes MPI parallel computations work again. apart from performance regressions, this branch does not exhibit any known regressions compared to master anymore... -------- 68th commit message: make verything compile with the element centered finite volume discretization except the Navier-Stokes and the two-phase DFM models, of course... -------- 69th commit message: minor fixes - make the navier-stokes model slighly more generic by using the proper (in,ex)teriorIndex() methods on sub-control volumes - make the signature of the calculateValue() template method of the common two-point gradient approximator match the one of the vertex centered finite volume one -------- 70th commit message: fix fallout from the Big Rebase -------- 71st commit message: ECFV: some bugs in the boundary -------- 72nd commit message: make computeFlux() compute area-specific quantities -------- 73rd commit message: fix more bugs in the element centered FV discretization now eWoms should match Dumux pretty closely... -------- 74th commit message: coalesce the common code of the multi phase porous medium models into "MultiPhaseBaseModel" -------- 75th commit message: update reference solutions these were changed because of the screw-up with the area of boundary segments... -------- 76th commit message: rename "ImplicitBase" to "FvBase" because in eWoms, everything is implicit and these are currently the base classes for all finite volume discretizations. -------- 77th commit message: make the spatial discretization selectable using a splice This requires an opm-core with a the patches from https://github.com/OPM/opm-core/pull/446 merged... -------- 78th commit message: rename the properties used for splices to *Splice -------- 79th commit message: move the files in 'tests/models' to 'tests' since 'tests' was empty except for the 'models' subdirectory... -------- 80th commit message: improve and fix the tutorial -------- 81st commit message: remove the -fno-strict-aliasing flag from the provided option files seems like recent versions of Dune have been adapted... -------- 82nd commit message: also compile all CO2 injection simulations using the element centered finite volume discretization -------- 83rd commit message: PVS model: make it work properly with the element-centered finite volume discretiation because DOF != number of vertices
2013-12-12 05:52:44 -06:00
#include <opm/material/fluidmatrixinteractions/RegularizedBrooksCorey.hpp> /*@\label{tutorial1:rawLawInclude}@*/
2013-11-06 07:50:01 -06:00
#include <opm/material/fluidmatrixinteractions/EffToAbsLaw.hpp>
#include <opm/material/fluidmatrixinteractions/MaterialTraits.hpp>
// For the DUNE grid
Implement the element centered finite volume spatial discretization This makes eWoms multi-discretization capable. Along the way, this fixes some bugs and does a medium sized reorganization of the source tree. This is a squashed patch of the following commits: -------- 1st commit message: add initial version of the element centered finite volume discretization currently, it is a misnomer as it is just a copy of the vertex centered discretization plus some renames... -------- 2nd commit message: rename [VE]cfvModel -> [VE]cfvDiscretization -------- 3rd commit message: ecfv: prelimary changes required to make it compile but not work yet... -------- 4th commit message: Rename *FvElementGeometry to *Stencil "Stencil" seems to be the standard expression for this concept... (also, it is not specific to finite volume methods and is shorter.) -------- 5th commit message: refactor the stencil class for the element centered finite volume discretization -------- 6th commit message: ECFV: some work on the stencil class -------- 7th commit message: ECFV: make the boundary handling code compile -------- 8th commit message: rename elemContext() to elementContext() -------- 9th commit message: ECFV: make the VTK output modules compile -------- 10th commit message: stencil: introduce the concept of primary DOFs also save an vector of all element pointers in the stencil. -------- 11th commit message: ECFV: try to fix assembly; add missing timeIdx arguments to the num*() methods -------- 12th commit message: ECFV: fix stupid mistake in the assembler -------- 13th commit message: ECFV: remove a few implicit DOF == vertex assumptions the black-oil example now runs without valgrind complaints until it encounters a negative oil mole fraction. -------- 14th commit message: VCFV: make everything compile again all vertex centered FV examples should now work again... -------- 15th commit message: rename [ev]cfvmodel.hh to [ev]cfvdiscretization.hh the classes have already been renamed. -------- 16th commit message: ECFV: make it work to the point where it can write out the initial solution. -------- 17th commit message: ECFV: make it work the local residual/jacobian needed some work in distinguishing primary and secondary DOFs and there was an minor issue with the serialization code. for some reason, it seems still not correct. (-> convergence is too slow.) -------- 18th commit message: VCFV: make it compile for the black oil model again -------- 19th commit message: VCFV: make it compile with the remaining models again -------- 20th commit message: flash model: make it work with ECFV although this breaks its compatibility with VCFV. (-> next commit) -------- 21st commit message: adapt the VCFV to make it compatible with the flash model again -------- 22nd commit message: make all models compile with VCFV again -------- 23rd commit message: VCFV: more cleanups of the stencil VcfvStencil now does not have any public attributes anymore. TODO: do not export attributes in the SubControlVolume and SubControlVolumeFace classes. -------- 24th commit message: VCFV: actually update the element pointer -------- 25th commit message: change the blackoil model back to ECFV -------- 26th commit message: immiscible model: make it compatible with the ECFV discretization -------- 27th commit message: PVS model: make it work with ECFV -------- 28th commit message: NCP model: make it work with ECFV -------- 29th commit message: rename Vcfv*VelocityModule to *VelocityModule -------- 30th commit message: richards model: make it work with ECFV -------- 31st commit message: unify the ECFV and the VCFV VTK output modules and other cleanups -------- 32nd commit message: unify the common code of the VCFV and the ECFV disctretizations -------- 33rd commit message: unify the element contexts between element and vertex centered finite volumes -------- 34th commit message: unify the local jacobian class of the finite volume discretizations -------- 35th commit message: replace [VE]vcf(LocalResidual|ElementContext|BoundaryContext|ConstraintsContext) by generic code -------- 36th commit message: replace the [EV]cfvLocalResidual by generic code -------- 37th commit message: unify the MultiPhaseProblem and Problem classes, introduce NullBorderListCreator -------- 38th commit message: remove the discretization specific boundary context -------- 39th commit message: unify the [EV]cfvDiscretization classes -------- 40th commit message: Unify [EV]cfvMultiPhaseFluxVariables -------- 41st commit message: Unify the [EC]cfvNewton* classes -------- 42nd commit message: Unify [EV]cfvVolumeVariables -------- 43rd commit message: unify [EV]cfvAssembler -------- 44th commit message: unified flux variables: fix stupid mistake when calculating pressure gradients -------- 45th commit message: unify what's to unify for the [EV]CFV properties -------- 46th commit message: make the method to calculate gradients and values at flux approximation points changeable Currently, this is used by the vertex centered finite volume method to be able to use P1-finite element gradients instead of two-point ones... -------- 47th commit message: make the restart code work correctly, use the correct DofMapper for VCFV -------- 48th commit message: actually use the gradient calculator in a model the immiscible model in this case -------- 49th commit message: move some files around to where they belong, use the new gradient calculation code in all models TODO: proper handling of boundary gradients -------- 50th commit message: fix the stokes model currently it only works with the vertex centered finite volume discretization, but the plan is to soon move it to a staggered grid scheme anyway... -------- 51st commit message: move all models back to using the vertex centered finite volume discretization by default -------- 52nd commit message: models: some variable renames and documentation fixes - scv -> dof - vert -> dof - vertex -> dof - replace 'VCFV' - fix some typos -------- 53rd commit message: don't expect UG anymore since it is quite non-free and hard to get. we now use ALUGrid instead! -------- 54th commit message: temporarily disable jacobian recycling -------- 55th commit message: fix writing/reading restart files using the generic code -------- 56th commit message: fix bug where fluxes were only counted once in the stencil this only affected the vertex centered finite volumes discretization... -------- 57th commit message: boundary gradients: use the center of the sub-control volume adjacent to a boundary segment -------- 58th commit message: make it compile on GCC -------- 59th commit message: get rid of most hacks for this, partial reassemble and jacobian recycling was brought back. For the this and the remaining stuff the main trick is the introduction of the GridCommHandleFactory concept which constructs communication handles suited for the respective spatial discretization... -------- 60th commit message: fix a few annoying bugs first, default the convergence criterion for the linear solver did not honor the initial residual which lead to linear solver breakdowns, then some debugging code was left in the discrete fracture model and then there was a bug in the TP gradient approximation class... this has the consequence that we need a new reference solution for the discrete fracture problem... -------- 61st commit message: iterative linear solver: remove the code for the non-default convergence criteria -------- 62nd commit message: provide the FE cache instead of the local FE this fixes a segfault in the stokes model caused by the fact that the local FE was not initialized at this point. -------- 63rd commit message: (Navier-)Stokes: fix bug due to the transition to unit normals now, all tests pass for this branch. The only things which need to be fixed are some annoying performance regressions compared to master and some bug in the splices feature of the property system... -------- 64th commit message: some fix for the local residual of the immiscible model -------- 65th commit message: Navier-Stokes: implement SCV center gradients There seems to be a bug in the previous implementation (the jacobian inverse transposed is evaluated using the local, not the global geometry), so the reference solution for the stokes2c test problem has also been updated... -------- 66th commit message: remove the ALUGrid specialization of the LensGridCreator and the YaspGrid one for the fingerproblem using different grid seems to sometimes cause a different vertex order, which in turn causes the respective test to fail if the reference solution was computed using the other grid... -------- 67th commit message: VCFV: use the correct BorderListCreator this makes MPI parallel computations work again. apart from performance regressions, this branch does not exhibit any known regressions compared to master anymore... -------- 68th commit message: make verything compile with the element centered finite volume discretization except the Navier-Stokes and the two-phase DFM models, of course... -------- 69th commit message: minor fixes - make the navier-stokes model slighly more generic by using the proper (in,ex)teriorIndex() methods on sub-control volumes - make the signature of the calculateValue() template method of the common two-point gradient approximator match the one of the vertex centered finite volume one -------- 70th commit message: fix fallout from the Big Rebase -------- 71st commit message: ECFV: some bugs in the boundary -------- 72nd commit message: make computeFlux() compute area-specific quantities -------- 73rd commit message: fix more bugs in the element centered FV discretization now eWoms should match Dumux pretty closely... -------- 74th commit message: coalesce the common code of the multi phase porous medium models into "MultiPhaseBaseModel" -------- 75th commit message: update reference solutions these were changed because of the screw-up with the area of boundary segments... -------- 76th commit message: rename "ImplicitBase" to "FvBase" because in eWoms, everything is implicit and these are currently the base classes for all finite volume discretizations. -------- 77th commit message: make the spatial discretization selectable using a splice This requires an opm-core with a the patches from https://github.com/OPM/opm-core/pull/446 merged... -------- 78th commit message: rename the properties used for splices to *Splice -------- 79th commit message: move the files in 'tests/models' to 'tests' since 'tests' was empty except for the 'models' subdirectory... -------- 80th commit message: improve and fix the tutorial -------- 81st commit message: remove the -fno-strict-aliasing flag from the provided option files seems like recent versions of Dune have been adapted... -------- 82nd commit message: also compile all CO2 injection simulations using the element centered finite volume discretization -------- 83rd commit message: PVS model: make it work properly with the element-centered finite volume discretiation because DOF != number of vertices
2013-12-12 05:52:44 -06:00
#include <dune/grid/yaspgrid.hh> /*@\label{tutorial1:include-grid-manager}@*/
2019-09-16 03:09:33 -05:00
#include <opm/models/io/cubegridvanguard.hh> /*@\label{tutorial1:include-grid-manager}@*/
// For Dune::FieldMatrix
#include <dune/common/fmatrix.hh>
#include <dune/common/version.hh>
namespace Opm {
// forward declaration of the problem class
template <class TypeTag>
Implement the element centered finite volume spatial discretization This makes eWoms multi-discretization capable. Along the way, this fixes some bugs and does a medium sized reorganization of the source tree. This is a squashed patch of the following commits: -------- 1st commit message: add initial version of the element centered finite volume discretization currently, it is a misnomer as it is just a copy of the vertex centered discretization plus some renames... -------- 2nd commit message: rename [VE]cfvModel -> [VE]cfvDiscretization -------- 3rd commit message: ecfv: prelimary changes required to make it compile but not work yet... -------- 4th commit message: Rename *FvElementGeometry to *Stencil "Stencil" seems to be the standard expression for this concept... (also, it is not specific to finite volume methods and is shorter.) -------- 5th commit message: refactor the stencil class for the element centered finite volume discretization -------- 6th commit message: ECFV: some work on the stencil class -------- 7th commit message: ECFV: make the boundary handling code compile -------- 8th commit message: rename elemContext() to elementContext() -------- 9th commit message: ECFV: make the VTK output modules compile -------- 10th commit message: stencil: introduce the concept of primary DOFs also save an vector of all element pointers in the stencil. -------- 11th commit message: ECFV: try to fix assembly; add missing timeIdx arguments to the num*() methods -------- 12th commit message: ECFV: fix stupid mistake in the assembler -------- 13th commit message: ECFV: remove a few implicit DOF == vertex assumptions the black-oil example now runs without valgrind complaints until it encounters a negative oil mole fraction. -------- 14th commit message: VCFV: make everything compile again all vertex centered FV examples should now work again... -------- 15th commit message: rename [ev]cfvmodel.hh to [ev]cfvdiscretization.hh the classes have already been renamed. -------- 16th commit message: ECFV: make it work to the point where it can write out the initial solution. -------- 17th commit message: ECFV: make it work the local residual/jacobian needed some work in distinguishing primary and secondary DOFs and there was an minor issue with the serialization code. for some reason, it seems still not correct. (-> convergence is too slow.) -------- 18th commit message: VCFV: make it compile for the black oil model again -------- 19th commit message: VCFV: make it compile with the remaining models again -------- 20th commit message: flash model: make it work with ECFV although this breaks its compatibility with VCFV. (-> next commit) -------- 21st commit message: adapt the VCFV to make it compatible with the flash model again -------- 22nd commit message: make all models compile with VCFV again -------- 23rd commit message: VCFV: more cleanups of the stencil VcfvStencil now does not have any public attributes anymore. TODO: do not export attributes in the SubControlVolume and SubControlVolumeFace classes. -------- 24th commit message: VCFV: actually update the element pointer -------- 25th commit message: change the blackoil model back to ECFV -------- 26th commit message: immiscible model: make it compatible with the ECFV discretization -------- 27th commit message: PVS model: make it work with ECFV -------- 28th commit message: NCP model: make it work with ECFV -------- 29th commit message: rename Vcfv*VelocityModule to *VelocityModule -------- 30th commit message: richards model: make it work with ECFV -------- 31st commit message: unify the ECFV and the VCFV VTK output modules and other cleanups -------- 32nd commit message: unify the common code of the VCFV and the ECFV disctretizations -------- 33rd commit message: unify the element contexts between element and vertex centered finite volumes -------- 34th commit message: unify the local jacobian class of the finite volume discretizations -------- 35th commit message: replace [VE]vcf(LocalResidual|ElementContext|BoundaryContext|ConstraintsContext) by generic code -------- 36th commit message: replace the [EV]cfvLocalResidual by generic code -------- 37th commit message: unify the MultiPhaseProblem and Problem classes, introduce NullBorderListCreator -------- 38th commit message: remove the discretization specific boundary context -------- 39th commit message: unify the [EV]cfvDiscretization classes -------- 40th commit message: Unify [EV]cfvMultiPhaseFluxVariables -------- 41st commit message: Unify the [EC]cfvNewton* classes -------- 42nd commit message: Unify [EV]cfvVolumeVariables -------- 43rd commit message: unify [EV]cfvAssembler -------- 44th commit message: unified flux variables: fix stupid mistake when calculating pressure gradients -------- 45th commit message: unify what's to unify for the [EV]CFV properties -------- 46th commit message: make the method to calculate gradients and values at flux approximation points changeable Currently, this is used by the vertex centered finite volume method to be able to use P1-finite element gradients instead of two-point ones... -------- 47th commit message: make the restart code work correctly, use the correct DofMapper for VCFV -------- 48th commit message: actually use the gradient calculator in a model the immiscible model in this case -------- 49th commit message: move some files around to where they belong, use the new gradient calculation code in all models TODO: proper handling of boundary gradients -------- 50th commit message: fix the stokes model currently it only works with the vertex centered finite volume discretization, but the plan is to soon move it to a staggered grid scheme anyway... -------- 51st commit message: move all models back to using the vertex centered finite volume discretization by default -------- 52nd commit message: models: some variable renames and documentation fixes - scv -> dof - vert -> dof - vertex -> dof - replace 'VCFV' - fix some typos -------- 53rd commit message: don't expect UG anymore since it is quite non-free and hard to get. we now use ALUGrid instead! -------- 54th commit message: temporarily disable jacobian recycling -------- 55th commit message: fix writing/reading restart files using the generic code -------- 56th commit message: fix bug where fluxes were only counted once in the stencil this only affected the vertex centered finite volumes discretization... -------- 57th commit message: boundary gradients: use the center of the sub-control volume adjacent to a boundary segment -------- 58th commit message: make it compile on GCC -------- 59th commit message: get rid of most hacks for this, partial reassemble and jacobian recycling was brought back. For the this and the remaining stuff the main trick is the introduction of the GridCommHandleFactory concept which constructs communication handles suited for the respective spatial discretization... -------- 60th commit message: fix a few annoying bugs first, default the convergence criterion for the linear solver did not honor the initial residual which lead to linear solver breakdowns, then some debugging code was left in the discrete fracture model and then there was a bug in the TP gradient approximation class... this has the consequence that we need a new reference solution for the discrete fracture problem... -------- 61st commit message: iterative linear solver: remove the code for the non-default convergence criteria -------- 62nd commit message: provide the FE cache instead of the local FE this fixes a segfault in the stokes model caused by the fact that the local FE was not initialized at this point. -------- 63rd commit message: (Navier-)Stokes: fix bug due to the transition to unit normals now, all tests pass for this branch. The only things which need to be fixed are some annoying performance regressions compared to master and some bug in the splices feature of the property system... -------- 64th commit message: some fix for the local residual of the immiscible model -------- 65th commit message: Navier-Stokes: implement SCV center gradients There seems to be a bug in the previous implementation (the jacobian inverse transposed is evaluated using the local, not the global geometry), so the reference solution for the stokes2c test problem has also been updated... -------- 66th commit message: remove the ALUGrid specialization of the LensGridCreator and the YaspGrid one for the fingerproblem using different grid seems to sometimes cause a different vertex order, which in turn causes the respective test to fail if the reference solution was computed using the other grid... -------- 67th commit message: VCFV: use the correct BorderListCreator this makes MPI parallel computations work again. apart from performance regressions, this branch does not exhibit any known regressions compared to master anymore... -------- 68th commit message: make verything compile with the element centered finite volume discretization except the Navier-Stokes and the two-phase DFM models, of course... -------- 69th commit message: minor fixes - make the navier-stokes model slighly more generic by using the proper (in,ex)teriorIndex() methods on sub-control volumes - make the signature of the calculateValue() template method of the common two-point gradient approximator match the one of the vertex centered finite volume one -------- 70th commit message: fix fallout from the Big Rebase -------- 71st commit message: ECFV: some bugs in the boundary -------- 72nd commit message: make computeFlux() compute area-specific quantities -------- 73rd commit message: fix more bugs in the element centered FV discretization now eWoms should match Dumux pretty closely... -------- 74th commit message: coalesce the common code of the multi phase porous medium models into "MultiPhaseBaseModel" -------- 75th commit message: update reference solutions these were changed because of the screw-up with the area of boundary segments... -------- 76th commit message: rename "ImplicitBase" to "FvBase" because in eWoms, everything is implicit and these are currently the base classes for all finite volume discretizations. -------- 77th commit message: make the spatial discretization selectable using a splice This requires an opm-core with a the patches from https://github.com/OPM/opm-core/pull/446 merged... -------- 78th commit message: rename the properties used for splices to *Splice -------- 79th commit message: move the files in 'tests/models' to 'tests' since 'tests' was empty except for the 'models' subdirectory... -------- 80th commit message: improve and fix the tutorial -------- 81st commit message: remove the -fno-strict-aliasing flag from the provided option files seems like recent versions of Dune have been adapted... -------- 82nd commit message: also compile all CO2 injection simulations using the element centered finite volume discretization -------- 83rd commit message: PVS model: make it work properly with the element-centered finite volume discretiation because DOF != number of vertices
2013-12-12 05:52:44 -06:00
class Tutorial1Problem;
}
namespace Opm::Properties {
// Create a new type tag for the problem
// Create new type tags
namespace TTag {
struct Tutorial1Problem { using InheritsFrom = std::tuple<ImmiscibleTwoPhaseModel>; };
} // end namespace TTag
Implement the element centered finite volume spatial discretization This makes eWoms multi-discretization capable. Along the way, this fixes some bugs and does a medium sized reorganization of the source tree. This is a squashed patch of the following commits: -------- 1st commit message: add initial version of the element centered finite volume discretization currently, it is a misnomer as it is just a copy of the vertex centered discretization plus some renames... -------- 2nd commit message: rename [VE]cfvModel -> [VE]cfvDiscretization -------- 3rd commit message: ecfv: prelimary changes required to make it compile but not work yet... -------- 4th commit message: Rename *FvElementGeometry to *Stencil "Stencil" seems to be the standard expression for this concept... (also, it is not specific to finite volume methods and is shorter.) -------- 5th commit message: refactor the stencil class for the element centered finite volume discretization -------- 6th commit message: ECFV: some work on the stencil class -------- 7th commit message: ECFV: make the boundary handling code compile -------- 8th commit message: rename elemContext() to elementContext() -------- 9th commit message: ECFV: make the VTK output modules compile -------- 10th commit message: stencil: introduce the concept of primary DOFs also save an vector of all element pointers in the stencil. -------- 11th commit message: ECFV: try to fix assembly; add missing timeIdx arguments to the num*() methods -------- 12th commit message: ECFV: fix stupid mistake in the assembler -------- 13th commit message: ECFV: remove a few implicit DOF == vertex assumptions the black-oil example now runs without valgrind complaints until it encounters a negative oil mole fraction. -------- 14th commit message: VCFV: make everything compile again all vertex centered FV examples should now work again... -------- 15th commit message: rename [ev]cfvmodel.hh to [ev]cfvdiscretization.hh the classes have already been renamed. -------- 16th commit message: ECFV: make it work to the point where it can write out the initial solution. -------- 17th commit message: ECFV: make it work the local residual/jacobian needed some work in distinguishing primary and secondary DOFs and there was an minor issue with the serialization code. for some reason, it seems still not correct. (-> convergence is too slow.) -------- 18th commit message: VCFV: make it compile for the black oil model again -------- 19th commit message: VCFV: make it compile with the remaining models again -------- 20th commit message: flash model: make it work with ECFV although this breaks its compatibility with VCFV. (-> next commit) -------- 21st commit message: adapt the VCFV to make it compatible with the flash model again -------- 22nd commit message: make all models compile with VCFV again -------- 23rd commit message: VCFV: more cleanups of the stencil VcfvStencil now does not have any public attributes anymore. TODO: do not export attributes in the SubControlVolume and SubControlVolumeFace classes. -------- 24th commit message: VCFV: actually update the element pointer -------- 25th commit message: change the blackoil model back to ECFV -------- 26th commit message: immiscible model: make it compatible with the ECFV discretization -------- 27th commit message: PVS model: make it work with ECFV -------- 28th commit message: NCP model: make it work with ECFV -------- 29th commit message: rename Vcfv*VelocityModule to *VelocityModule -------- 30th commit message: richards model: make it work with ECFV -------- 31st commit message: unify the ECFV and the VCFV VTK output modules and other cleanups -------- 32nd commit message: unify the common code of the VCFV and the ECFV disctretizations -------- 33rd commit message: unify the element contexts between element and vertex centered finite volumes -------- 34th commit message: unify the local jacobian class of the finite volume discretizations -------- 35th commit message: replace [VE]vcf(LocalResidual|ElementContext|BoundaryContext|ConstraintsContext) by generic code -------- 36th commit message: replace the [EV]cfvLocalResidual by generic code -------- 37th commit message: unify the MultiPhaseProblem and Problem classes, introduce NullBorderListCreator -------- 38th commit message: remove the discretization specific boundary context -------- 39th commit message: unify the [EV]cfvDiscretization classes -------- 40th commit message: Unify [EV]cfvMultiPhaseFluxVariables -------- 41st commit message: Unify the [EC]cfvNewton* classes -------- 42nd commit message: Unify [EV]cfvVolumeVariables -------- 43rd commit message: unify [EV]cfvAssembler -------- 44th commit message: unified flux variables: fix stupid mistake when calculating pressure gradients -------- 45th commit message: unify what's to unify for the [EV]CFV properties -------- 46th commit message: make the method to calculate gradients and values at flux approximation points changeable Currently, this is used by the vertex centered finite volume method to be able to use P1-finite element gradients instead of two-point ones... -------- 47th commit message: make the restart code work correctly, use the correct DofMapper for VCFV -------- 48th commit message: actually use the gradient calculator in a model the immiscible model in this case -------- 49th commit message: move some files around to where they belong, use the new gradient calculation code in all models TODO: proper handling of boundary gradients -------- 50th commit message: fix the stokes model currently it only works with the vertex centered finite volume discretization, but the plan is to soon move it to a staggered grid scheme anyway... -------- 51st commit message: move all models back to using the vertex centered finite volume discretization by default -------- 52nd commit message: models: some variable renames and documentation fixes - scv -> dof - vert -> dof - vertex -> dof - replace 'VCFV' - fix some typos -------- 53rd commit message: don't expect UG anymore since it is quite non-free and hard to get. we now use ALUGrid instead! -------- 54th commit message: temporarily disable jacobian recycling -------- 55th commit message: fix writing/reading restart files using the generic code -------- 56th commit message: fix bug where fluxes were only counted once in the stencil this only affected the vertex centered finite volumes discretization... -------- 57th commit message: boundary gradients: use the center of the sub-control volume adjacent to a boundary segment -------- 58th commit message: make it compile on GCC -------- 59th commit message: get rid of most hacks for this, partial reassemble and jacobian recycling was brought back. For the this and the remaining stuff the main trick is the introduction of the GridCommHandleFactory concept which constructs communication handles suited for the respective spatial discretization... -------- 60th commit message: fix a few annoying bugs first, default the convergence criterion for the linear solver did not honor the initial residual which lead to linear solver breakdowns, then some debugging code was left in the discrete fracture model and then there was a bug in the TP gradient approximation class... this has the consequence that we need a new reference solution for the discrete fracture problem... -------- 61st commit message: iterative linear solver: remove the code for the non-default convergence criteria -------- 62nd commit message: provide the FE cache instead of the local FE this fixes a segfault in the stokes model caused by the fact that the local FE was not initialized at this point. -------- 63rd commit message: (Navier-)Stokes: fix bug due to the transition to unit normals now, all tests pass for this branch. The only things which need to be fixed are some annoying performance regressions compared to master and some bug in the splices feature of the property system... -------- 64th commit message: some fix for the local residual of the immiscible model -------- 65th commit message: Navier-Stokes: implement SCV center gradients There seems to be a bug in the previous implementation (the jacobian inverse transposed is evaluated using the local, not the global geometry), so the reference solution for the stokes2c test problem has also been updated... -------- 66th commit message: remove the ALUGrid specialization of the LensGridCreator and the YaspGrid one for the fingerproblem using different grid seems to sometimes cause a different vertex order, which in turn causes the respective test to fail if the reference solution was computed using the other grid... -------- 67th commit message: VCFV: use the correct BorderListCreator this makes MPI parallel computations work again. apart from performance regressions, this branch does not exhibit any known regressions compared to master anymore... -------- 68th commit message: make verything compile with the element centered finite volume discretization except the Navier-Stokes and the two-phase DFM models, of course... -------- 69th commit message: minor fixes - make the navier-stokes model slighly more generic by using the proper (in,ex)teriorIndex() methods on sub-control volumes - make the signature of the calculateValue() template method of the common two-point gradient approximator match the one of the vertex centered finite volume one -------- 70th commit message: fix fallout from the Big Rebase -------- 71st commit message: ECFV: some bugs in the boundary -------- 72nd commit message: make computeFlux() compute area-specific quantities -------- 73rd commit message: fix more bugs in the element centered FV discretization now eWoms should match Dumux pretty closely... -------- 74th commit message: coalesce the common code of the multi phase porous medium models into "MultiPhaseBaseModel" -------- 75th commit message: update reference solutions these were changed because of the screw-up with the area of boundary segments... -------- 76th commit message: rename "ImplicitBase" to "FvBase" because in eWoms, everything is implicit and these are currently the base classes for all finite volume discretizations. -------- 77th commit message: make the spatial discretization selectable using a splice This requires an opm-core with a the patches from https://github.com/OPM/opm-core/pull/446 merged... -------- 78th commit message: rename the properties used for splices to *Splice -------- 79th commit message: move the files in 'tests/models' to 'tests' since 'tests' was empty except for the 'models' subdirectory... -------- 80th commit message: improve and fix the tutorial -------- 81st commit message: remove the -fno-strict-aliasing flag from the provided option files seems like recent versions of Dune have been adapted... -------- 82nd commit message: also compile all CO2 injection simulations using the element centered finite volume discretization -------- 83rd commit message: PVS model: make it work properly with the element-centered finite volume discretiation because DOF != number of vertices
2013-12-12 05:52:44 -06:00
// Select the vertex centered finite volume method as spatial discretization
template<class TypeTag>
struct SpatialDiscretizationSplice<TypeTag, TTag::Tutorial1Problem>
{ using type = TTag::VcfvDiscretization; }; /*@\label{tutorial1:set-spatial-discretization}@*/
// Set the "Problem" property
template<class TypeTag>
struct Problem<TypeTag, TTag::Tutorial1Problem>
{ using type = Opm::Tutorial1Problem<TypeTag>; }; /*@\label{tutorial1:set-problem}@*/
// Set grid and the grid manager to be used
template<class TypeTag>
struct Grid<TypeTag, TTag::Tutorial1Problem> { using type = Dune::YaspGrid</*dim=*/2>; }; /*@\label{tutorial1:set-grid}@*/
template<class TypeTag>
struct Vanguard<TypeTag, TTag::Tutorial1Problem> { using type = Opm::CubeGridVanguard<TypeTag>; }; /*@\label{tutorial1:set-grid-manager}@*/
Implement the element centered finite volume spatial discretization This makes eWoms multi-discretization capable. Along the way, this fixes some bugs and does a medium sized reorganization of the source tree. This is a squashed patch of the following commits: -------- 1st commit message: add initial version of the element centered finite volume discretization currently, it is a misnomer as it is just a copy of the vertex centered discretization plus some renames... -------- 2nd commit message: rename [VE]cfvModel -> [VE]cfvDiscretization -------- 3rd commit message: ecfv: prelimary changes required to make it compile but not work yet... -------- 4th commit message: Rename *FvElementGeometry to *Stencil "Stencil" seems to be the standard expression for this concept... (also, it is not specific to finite volume methods and is shorter.) -------- 5th commit message: refactor the stencil class for the element centered finite volume discretization -------- 6th commit message: ECFV: some work on the stencil class -------- 7th commit message: ECFV: make the boundary handling code compile -------- 8th commit message: rename elemContext() to elementContext() -------- 9th commit message: ECFV: make the VTK output modules compile -------- 10th commit message: stencil: introduce the concept of primary DOFs also save an vector of all element pointers in the stencil. -------- 11th commit message: ECFV: try to fix assembly; add missing timeIdx arguments to the num*() methods -------- 12th commit message: ECFV: fix stupid mistake in the assembler -------- 13th commit message: ECFV: remove a few implicit DOF == vertex assumptions the black-oil example now runs without valgrind complaints until it encounters a negative oil mole fraction. -------- 14th commit message: VCFV: make everything compile again all vertex centered FV examples should now work again... -------- 15th commit message: rename [ev]cfvmodel.hh to [ev]cfvdiscretization.hh the classes have already been renamed. -------- 16th commit message: ECFV: make it work to the point where it can write out the initial solution. -------- 17th commit message: ECFV: make it work the local residual/jacobian needed some work in distinguishing primary and secondary DOFs and there was an minor issue with the serialization code. for some reason, it seems still not correct. (-> convergence is too slow.) -------- 18th commit message: VCFV: make it compile for the black oil model again -------- 19th commit message: VCFV: make it compile with the remaining models again -------- 20th commit message: flash model: make it work with ECFV although this breaks its compatibility with VCFV. (-> next commit) -------- 21st commit message: adapt the VCFV to make it compatible with the flash model again -------- 22nd commit message: make all models compile with VCFV again -------- 23rd commit message: VCFV: more cleanups of the stencil VcfvStencil now does not have any public attributes anymore. TODO: do not export attributes in the SubControlVolume and SubControlVolumeFace classes. -------- 24th commit message: VCFV: actually update the element pointer -------- 25th commit message: change the blackoil model back to ECFV -------- 26th commit message: immiscible model: make it compatible with the ECFV discretization -------- 27th commit message: PVS model: make it work with ECFV -------- 28th commit message: NCP model: make it work with ECFV -------- 29th commit message: rename Vcfv*VelocityModule to *VelocityModule -------- 30th commit message: richards model: make it work with ECFV -------- 31st commit message: unify the ECFV and the VCFV VTK output modules and other cleanups -------- 32nd commit message: unify the common code of the VCFV and the ECFV disctretizations -------- 33rd commit message: unify the element contexts between element and vertex centered finite volumes -------- 34th commit message: unify the local jacobian class of the finite volume discretizations -------- 35th commit message: replace [VE]vcf(LocalResidual|ElementContext|BoundaryContext|ConstraintsContext) by generic code -------- 36th commit message: replace the [EV]cfvLocalResidual by generic code -------- 37th commit message: unify the MultiPhaseProblem and Problem classes, introduce NullBorderListCreator -------- 38th commit message: remove the discretization specific boundary context -------- 39th commit message: unify the [EV]cfvDiscretization classes -------- 40th commit message: Unify [EV]cfvMultiPhaseFluxVariables -------- 41st commit message: Unify the [EC]cfvNewton* classes -------- 42nd commit message: Unify [EV]cfvVolumeVariables -------- 43rd commit message: unify [EV]cfvAssembler -------- 44th commit message: unified flux variables: fix stupid mistake when calculating pressure gradients -------- 45th commit message: unify what's to unify for the [EV]CFV properties -------- 46th commit message: make the method to calculate gradients and values at flux approximation points changeable Currently, this is used by the vertex centered finite volume method to be able to use P1-finite element gradients instead of two-point ones... -------- 47th commit message: make the restart code work correctly, use the correct DofMapper for VCFV -------- 48th commit message: actually use the gradient calculator in a model the immiscible model in this case -------- 49th commit message: move some files around to where they belong, use the new gradient calculation code in all models TODO: proper handling of boundary gradients -------- 50th commit message: fix the stokes model currently it only works with the vertex centered finite volume discretization, but the plan is to soon move it to a staggered grid scheme anyway... -------- 51st commit message: move all models back to using the vertex centered finite volume discretization by default -------- 52nd commit message: models: some variable renames and documentation fixes - scv -> dof - vert -> dof - vertex -> dof - replace 'VCFV' - fix some typos -------- 53rd commit message: don't expect UG anymore since it is quite non-free and hard to get. we now use ALUGrid instead! -------- 54th commit message: temporarily disable jacobian recycling -------- 55th commit message: fix writing/reading restart files using the generic code -------- 56th commit message: fix bug where fluxes were only counted once in the stencil this only affected the vertex centered finite volumes discretization... -------- 57th commit message: boundary gradients: use the center of the sub-control volume adjacent to a boundary segment -------- 58th commit message: make it compile on GCC -------- 59th commit message: get rid of most hacks for this, partial reassemble and jacobian recycling was brought back. For the this and the remaining stuff the main trick is the introduction of the GridCommHandleFactory concept which constructs communication handles suited for the respective spatial discretization... -------- 60th commit message: fix a few annoying bugs first, default the convergence criterion for the linear solver did not honor the initial residual which lead to linear solver breakdowns, then some debugging code was left in the discrete fracture model and then there was a bug in the TP gradient approximation class... this has the consequence that we need a new reference solution for the discrete fracture problem... -------- 61st commit message: iterative linear solver: remove the code for the non-default convergence criteria -------- 62nd commit message: provide the FE cache instead of the local FE this fixes a segfault in the stokes model caused by the fact that the local FE was not initialized at this point. -------- 63rd commit message: (Navier-)Stokes: fix bug due to the transition to unit normals now, all tests pass for this branch. The only things which need to be fixed are some annoying performance regressions compared to master and some bug in the splices feature of the property system... -------- 64th commit message: some fix for the local residual of the immiscible model -------- 65th commit message: Navier-Stokes: implement SCV center gradients There seems to be a bug in the previous implementation (the jacobian inverse transposed is evaluated using the local, not the global geometry), so the reference solution for the stokes2c test problem has also been updated... -------- 66th commit message: remove the ALUGrid specialization of the LensGridCreator and the YaspGrid one for the fingerproblem using different grid seems to sometimes cause a different vertex order, which in turn causes the respective test to fail if the reference solution was computed using the other grid... -------- 67th commit message: VCFV: use the correct BorderListCreator this makes MPI parallel computations work again. apart from performance regressions, this branch does not exhibit any known regressions compared to master anymore... -------- 68th commit message: make verything compile with the element centered finite volume discretization except the Navier-Stokes and the two-phase DFM models, of course... -------- 69th commit message: minor fixes - make the navier-stokes model slighly more generic by using the proper (in,ex)teriorIndex() methods on sub-control volumes - make the signature of the calculateValue() template method of the common two-point gradient approximator match the one of the vertex centered finite volume one -------- 70th commit message: fix fallout from the Big Rebase -------- 71st commit message: ECFV: some bugs in the boundary -------- 72nd commit message: make computeFlux() compute area-specific quantities -------- 73rd commit message: fix more bugs in the element centered FV discretization now eWoms should match Dumux pretty closely... -------- 74th commit message: coalesce the common code of the multi phase porous medium models into "MultiPhaseBaseModel" -------- 75th commit message: update reference solutions these were changed because of the screw-up with the area of boundary segments... -------- 76th commit message: rename "ImplicitBase" to "FvBase" because in eWoms, everything is implicit and these are currently the base classes for all finite volume discretizations. -------- 77th commit message: make the spatial discretization selectable using a splice This requires an opm-core with a the patches from https://github.com/OPM/opm-core/pull/446 merged... -------- 78th commit message: rename the properties used for splices to *Splice -------- 79th commit message: move the files in 'tests/models' to 'tests' since 'tests' was empty except for the 'models' subdirectory... -------- 80th commit message: improve and fix the tutorial -------- 81st commit message: remove the -fno-strict-aliasing flag from the provided option files seems like recent versions of Dune have been adapted... -------- 82nd commit message: also compile all CO2 injection simulations using the element centered finite volume discretization -------- 83rd commit message: PVS model: make it work properly with the element-centered finite volume discretiation because DOF != number of vertices
2013-12-12 05:52:44 -06:00
// Set the wetting phase /*@\label{tutorial1:2p-system-start}@*/
template<class TypeTag>
struct WettingPhase<TypeTag, TTag::Tutorial1Problem> /*@\label{tutorial1:wettingPhase}@*/
{
using Scalar = GetPropType<TypeTag, Properties::Scalar>;
using type = Opm::LiquidPhase<Scalar, Opm::SimpleH2O<Scalar> >;
};
// Set the non-wetting phase
template<class TypeTag>
struct NonwettingPhase<TypeTag, TTag::Tutorial1Problem> /*@\label{tutorial1:nonwettingPhase}@*/
{
using Scalar = GetPropType<TypeTag, Properties::Scalar>;
using type = Opm::LiquidPhase<Scalar, Opm::LNAPL<Scalar> >;
}; /*@\label{tutorial1:2p-system-end}@*/
// Set the material law
template<class TypeTag>
struct MaterialLaw<TypeTag, TTag::Tutorial1Problem>
{
private:
2013-11-06 07:50:01 -06:00
// create a class holding the necessary information for a
// two-phase capillary pressure law
2020-06-10 06:49:42 -05:00
using Scalar = GetPropType<TypeTag, Properties::Scalar>;
using FluidSystem = GetPropType<TypeTag, Properties::FluidSystem>;
enum { wettingPhaseIdx = FluidSystem::wettingPhaseIdx };
enum { nonWettingPhaseIdx = FluidSystem::nonWettingPhaseIdx };
2020-06-10 06:49:42 -05:00
using Traits = Opm::TwoPhaseMaterialTraits<Scalar, wettingPhaseIdx, nonWettingPhaseIdx>;
2013-11-06 07:50:01 -06:00
// define the material law which is parameterized by effective
// saturations
2020-06-10 06:49:42 -05:00
using RawMaterialLaw = Opm::RegularizedBrooksCorey<Traits>; /*@\label{tutorial1:rawlaw}@*/
public:
2013-11-06 07:50:01 -06:00
// Convert absolute saturations into effective ones before passing
// it to the base capillary pressure law
2020-06-10 06:49:42 -05:00
using type = Opm::EffToAbsLaw<RawMaterialLaw>; /*@\label{tutorial1:eff2abs}@*/
};
} // namespace Opm::Properties
namespace Opm {
Implement the element centered finite volume spatial discretization This makes eWoms multi-discretization capable. Along the way, this fixes some bugs and does a medium sized reorganization of the source tree. This is a squashed patch of the following commits: -------- 1st commit message: add initial version of the element centered finite volume discretization currently, it is a misnomer as it is just a copy of the vertex centered discretization plus some renames... -------- 2nd commit message: rename [VE]cfvModel -> [VE]cfvDiscretization -------- 3rd commit message: ecfv: prelimary changes required to make it compile but not work yet... -------- 4th commit message: Rename *FvElementGeometry to *Stencil "Stencil" seems to be the standard expression for this concept... (also, it is not specific to finite volume methods and is shorter.) -------- 5th commit message: refactor the stencil class for the element centered finite volume discretization -------- 6th commit message: ECFV: some work on the stencil class -------- 7th commit message: ECFV: make the boundary handling code compile -------- 8th commit message: rename elemContext() to elementContext() -------- 9th commit message: ECFV: make the VTK output modules compile -------- 10th commit message: stencil: introduce the concept of primary DOFs also save an vector of all element pointers in the stencil. -------- 11th commit message: ECFV: try to fix assembly; add missing timeIdx arguments to the num*() methods -------- 12th commit message: ECFV: fix stupid mistake in the assembler -------- 13th commit message: ECFV: remove a few implicit DOF == vertex assumptions the black-oil example now runs without valgrind complaints until it encounters a negative oil mole fraction. -------- 14th commit message: VCFV: make everything compile again all vertex centered FV examples should now work again... -------- 15th commit message: rename [ev]cfvmodel.hh to [ev]cfvdiscretization.hh the classes have already been renamed. -------- 16th commit message: ECFV: make it work to the point where it can write out the initial solution. -------- 17th commit message: ECFV: make it work the local residual/jacobian needed some work in distinguishing primary and secondary DOFs and there was an minor issue with the serialization code. for some reason, it seems still not correct. (-> convergence is too slow.) -------- 18th commit message: VCFV: make it compile for the black oil model again -------- 19th commit message: VCFV: make it compile with the remaining models again -------- 20th commit message: flash model: make it work with ECFV although this breaks its compatibility with VCFV. (-> next commit) -------- 21st commit message: adapt the VCFV to make it compatible with the flash model again -------- 22nd commit message: make all models compile with VCFV again -------- 23rd commit message: VCFV: more cleanups of the stencil VcfvStencil now does not have any public attributes anymore. TODO: do not export attributes in the SubControlVolume and SubControlVolumeFace classes. -------- 24th commit message: VCFV: actually update the element pointer -------- 25th commit message: change the blackoil model back to ECFV -------- 26th commit message: immiscible model: make it compatible with the ECFV discretization -------- 27th commit message: PVS model: make it work with ECFV -------- 28th commit message: NCP model: make it work with ECFV -------- 29th commit message: rename Vcfv*VelocityModule to *VelocityModule -------- 30th commit message: richards model: make it work with ECFV -------- 31st commit message: unify the ECFV and the VCFV VTK output modules and other cleanups -------- 32nd commit message: unify the common code of the VCFV and the ECFV disctretizations -------- 33rd commit message: unify the element contexts between element and vertex centered finite volumes -------- 34th commit message: unify the local jacobian class of the finite volume discretizations -------- 35th commit message: replace [VE]vcf(LocalResidual|ElementContext|BoundaryContext|ConstraintsContext) by generic code -------- 36th commit message: replace the [EV]cfvLocalResidual by generic code -------- 37th commit message: unify the MultiPhaseProblem and Problem classes, introduce NullBorderListCreator -------- 38th commit message: remove the discretization specific boundary context -------- 39th commit message: unify the [EV]cfvDiscretization classes -------- 40th commit message: Unify [EV]cfvMultiPhaseFluxVariables -------- 41st commit message: Unify the [EC]cfvNewton* classes -------- 42nd commit message: Unify [EV]cfvVolumeVariables -------- 43rd commit message: unify [EV]cfvAssembler -------- 44th commit message: unified flux variables: fix stupid mistake when calculating pressure gradients -------- 45th commit message: unify what's to unify for the [EV]CFV properties -------- 46th commit message: make the method to calculate gradients and values at flux approximation points changeable Currently, this is used by the vertex centered finite volume method to be able to use P1-finite element gradients instead of two-point ones... -------- 47th commit message: make the restart code work correctly, use the correct DofMapper for VCFV -------- 48th commit message: actually use the gradient calculator in a model the immiscible model in this case -------- 49th commit message: move some files around to where they belong, use the new gradient calculation code in all models TODO: proper handling of boundary gradients -------- 50th commit message: fix the stokes model currently it only works with the vertex centered finite volume discretization, but the plan is to soon move it to a staggered grid scheme anyway... -------- 51st commit message: move all models back to using the vertex centered finite volume discretization by default -------- 52nd commit message: models: some variable renames and documentation fixes - scv -> dof - vert -> dof - vertex -> dof - replace 'VCFV' - fix some typos -------- 53rd commit message: don't expect UG anymore since it is quite non-free and hard to get. we now use ALUGrid instead! -------- 54th commit message: temporarily disable jacobian recycling -------- 55th commit message: fix writing/reading restart files using the generic code -------- 56th commit message: fix bug where fluxes were only counted once in the stencil this only affected the vertex centered finite volumes discretization... -------- 57th commit message: boundary gradients: use the center of the sub-control volume adjacent to a boundary segment -------- 58th commit message: make it compile on GCC -------- 59th commit message: get rid of most hacks for this, partial reassemble and jacobian recycling was brought back. For the this and the remaining stuff the main trick is the introduction of the GridCommHandleFactory concept which constructs communication handles suited for the respective spatial discretization... -------- 60th commit message: fix a few annoying bugs first, default the convergence criterion for the linear solver did not honor the initial residual which lead to linear solver breakdowns, then some debugging code was left in the discrete fracture model and then there was a bug in the TP gradient approximation class... this has the consequence that we need a new reference solution for the discrete fracture problem... -------- 61st commit message: iterative linear solver: remove the code for the non-default convergence criteria -------- 62nd commit message: provide the FE cache instead of the local FE this fixes a segfault in the stokes model caused by the fact that the local FE was not initialized at this point. -------- 63rd commit message: (Navier-)Stokes: fix bug due to the transition to unit normals now, all tests pass for this branch. The only things which need to be fixed are some annoying performance regressions compared to master and some bug in the splices feature of the property system... -------- 64th commit message: some fix for the local residual of the immiscible model -------- 65th commit message: Navier-Stokes: implement SCV center gradients There seems to be a bug in the previous implementation (the jacobian inverse transposed is evaluated using the local, not the global geometry), so the reference solution for the stokes2c test problem has also been updated... -------- 66th commit message: remove the ALUGrid specialization of the LensGridCreator and the YaspGrid one for the fingerproblem using different grid seems to sometimes cause a different vertex order, which in turn causes the respective test to fail if the reference solution was computed using the other grid... -------- 67th commit message: VCFV: use the correct BorderListCreator this makes MPI parallel computations work again. apart from performance regressions, this branch does not exhibit any known regressions compared to master anymore... -------- 68th commit message: make verything compile with the element centered finite volume discretization except the Navier-Stokes and the two-phase DFM models, of course... -------- 69th commit message: minor fixes - make the navier-stokes model slighly more generic by using the proper (in,ex)teriorIndex() methods on sub-control volumes - make the signature of the calculateValue() template method of the common two-point gradient approximator match the one of the vertex centered finite volume one -------- 70th commit message: fix fallout from the Big Rebase -------- 71st commit message: ECFV: some bugs in the boundary -------- 72nd commit message: make computeFlux() compute area-specific quantities -------- 73rd commit message: fix more bugs in the element centered FV discretization now eWoms should match Dumux pretty closely... -------- 74th commit message: coalesce the common code of the multi phase porous medium models into "MultiPhaseBaseModel" -------- 75th commit message: update reference solutions these were changed because of the screw-up with the area of boundary segments... -------- 76th commit message: rename "ImplicitBase" to "FvBase" because in eWoms, everything is implicit and these are currently the base classes for all finite volume discretizations. -------- 77th commit message: make the spatial discretization selectable using a splice This requires an opm-core with a the patches from https://github.com/OPM/opm-core/pull/446 merged... -------- 78th commit message: rename the properties used for splices to *Splice -------- 79th commit message: move the files in 'tests/models' to 'tests' since 'tests' was empty except for the 'models' subdirectory... -------- 80th commit message: improve and fix the tutorial -------- 81st commit message: remove the -fno-strict-aliasing flag from the provided option files seems like recent versions of Dune have been adapted... -------- 82nd commit message: also compile all CO2 injection simulations using the element centered finite volume discretization -------- 83rd commit message: PVS model: make it work properly with the element-centered finite volume discretiation because DOF != number of vertices
2013-12-12 05:52:44 -06:00
//! Tutorial problem using the "immiscible" model.
template <class TypeTag>
Implement the element centered finite volume spatial discretization This makes eWoms multi-discretization capable. Along the way, this fixes some bugs and does a medium sized reorganization of the source tree. This is a squashed patch of the following commits: -------- 1st commit message: add initial version of the element centered finite volume discretization currently, it is a misnomer as it is just a copy of the vertex centered discretization plus some renames... -------- 2nd commit message: rename [VE]cfvModel -> [VE]cfvDiscretization -------- 3rd commit message: ecfv: prelimary changes required to make it compile but not work yet... -------- 4th commit message: Rename *FvElementGeometry to *Stencil "Stencil" seems to be the standard expression for this concept... (also, it is not specific to finite volume methods and is shorter.) -------- 5th commit message: refactor the stencil class for the element centered finite volume discretization -------- 6th commit message: ECFV: some work on the stencil class -------- 7th commit message: ECFV: make the boundary handling code compile -------- 8th commit message: rename elemContext() to elementContext() -------- 9th commit message: ECFV: make the VTK output modules compile -------- 10th commit message: stencil: introduce the concept of primary DOFs also save an vector of all element pointers in the stencil. -------- 11th commit message: ECFV: try to fix assembly; add missing timeIdx arguments to the num*() methods -------- 12th commit message: ECFV: fix stupid mistake in the assembler -------- 13th commit message: ECFV: remove a few implicit DOF == vertex assumptions the black-oil example now runs without valgrind complaints until it encounters a negative oil mole fraction. -------- 14th commit message: VCFV: make everything compile again all vertex centered FV examples should now work again... -------- 15th commit message: rename [ev]cfvmodel.hh to [ev]cfvdiscretization.hh the classes have already been renamed. -------- 16th commit message: ECFV: make it work to the point where it can write out the initial solution. -------- 17th commit message: ECFV: make it work the local residual/jacobian needed some work in distinguishing primary and secondary DOFs and there was an minor issue with the serialization code. for some reason, it seems still not correct. (-> convergence is too slow.) -------- 18th commit message: VCFV: make it compile for the black oil model again -------- 19th commit message: VCFV: make it compile with the remaining models again -------- 20th commit message: flash model: make it work with ECFV although this breaks its compatibility with VCFV. (-> next commit) -------- 21st commit message: adapt the VCFV to make it compatible with the flash model again -------- 22nd commit message: make all models compile with VCFV again -------- 23rd commit message: VCFV: more cleanups of the stencil VcfvStencil now does not have any public attributes anymore. TODO: do not export attributes in the SubControlVolume and SubControlVolumeFace classes. -------- 24th commit message: VCFV: actually update the element pointer -------- 25th commit message: change the blackoil model back to ECFV -------- 26th commit message: immiscible model: make it compatible with the ECFV discretization -------- 27th commit message: PVS model: make it work with ECFV -------- 28th commit message: NCP model: make it work with ECFV -------- 29th commit message: rename Vcfv*VelocityModule to *VelocityModule -------- 30th commit message: richards model: make it work with ECFV -------- 31st commit message: unify the ECFV and the VCFV VTK output modules and other cleanups -------- 32nd commit message: unify the common code of the VCFV and the ECFV disctretizations -------- 33rd commit message: unify the element contexts between element and vertex centered finite volumes -------- 34th commit message: unify the local jacobian class of the finite volume discretizations -------- 35th commit message: replace [VE]vcf(LocalResidual|ElementContext|BoundaryContext|ConstraintsContext) by generic code -------- 36th commit message: replace the [EV]cfvLocalResidual by generic code -------- 37th commit message: unify the MultiPhaseProblem and Problem classes, introduce NullBorderListCreator -------- 38th commit message: remove the discretization specific boundary context -------- 39th commit message: unify the [EV]cfvDiscretization classes -------- 40th commit message: Unify [EV]cfvMultiPhaseFluxVariables -------- 41st commit message: Unify the [EC]cfvNewton* classes -------- 42nd commit message: Unify [EV]cfvVolumeVariables -------- 43rd commit message: unify [EV]cfvAssembler -------- 44th commit message: unified flux variables: fix stupid mistake when calculating pressure gradients -------- 45th commit message: unify what's to unify for the [EV]CFV properties -------- 46th commit message: make the method to calculate gradients and values at flux approximation points changeable Currently, this is used by the vertex centered finite volume method to be able to use P1-finite element gradients instead of two-point ones... -------- 47th commit message: make the restart code work correctly, use the correct DofMapper for VCFV -------- 48th commit message: actually use the gradient calculator in a model the immiscible model in this case -------- 49th commit message: move some files around to where they belong, use the new gradient calculation code in all models TODO: proper handling of boundary gradients -------- 50th commit message: fix the stokes model currently it only works with the vertex centered finite volume discretization, but the plan is to soon move it to a staggered grid scheme anyway... -------- 51st commit message: move all models back to using the vertex centered finite volume discretization by default -------- 52nd commit message: models: some variable renames and documentation fixes - scv -> dof - vert -> dof - vertex -> dof - replace 'VCFV' - fix some typos -------- 53rd commit message: don't expect UG anymore since it is quite non-free and hard to get. we now use ALUGrid instead! -------- 54th commit message: temporarily disable jacobian recycling -------- 55th commit message: fix writing/reading restart files using the generic code -------- 56th commit message: fix bug where fluxes were only counted once in the stencil this only affected the vertex centered finite volumes discretization... -------- 57th commit message: boundary gradients: use the center of the sub-control volume adjacent to a boundary segment -------- 58th commit message: make it compile on GCC -------- 59th commit message: get rid of most hacks for this, partial reassemble and jacobian recycling was brought back. For the this and the remaining stuff the main trick is the introduction of the GridCommHandleFactory concept which constructs communication handles suited for the respective spatial discretization... -------- 60th commit message: fix a few annoying bugs first, default the convergence criterion for the linear solver did not honor the initial residual which lead to linear solver breakdowns, then some debugging code was left in the discrete fracture model and then there was a bug in the TP gradient approximation class... this has the consequence that we need a new reference solution for the discrete fracture problem... -------- 61st commit message: iterative linear solver: remove the code for the non-default convergence criteria -------- 62nd commit message: provide the FE cache instead of the local FE this fixes a segfault in the stokes model caused by the fact that the local FE was not initialized at this point. -------- 63rd commit message: (Navier-)Stokes: fix bug due to the transition to unit normals now, all tests pass for this branch. The only things which need to be fixed are some annoying performance regressions compared to master and some bug in the splices feature of the property system... -------- 64th commit message: some fix for the local residual of the immiscible model -------- 65th commit message: Navier-Stokes: implement SCV center gradients There seems to be a bug in the previous implementation (the jacobian inverse transposed is evaluated using the local, not the global geometry), so the reference solution for the stokes2c test problem has also been updated... -------- 66th commit message: remove the ALUGrid specialization of the LensGridCreator and the YaspGrid one for the fingerproblem using different grid seems to sometimes cause a different vertex order, which in turn causes the respective test to fail if the reference solution was computed using the other grid... -------- 67th commit message: VCFV: use the correct BorderListCreator this makes MPI parallel computations work again. apart from performance regressions, this branch does not exhibit any known regressions compared to master anymore... -------- 68th commit message: make verything compile with the element centered finite volume discretization except the Navier-Stokes and the two-phase DFM models, of course... -------- 69th commit message: minor fixes - make the navier-stokes model slighly more generic by using the proper (in,ex)teriorIndex() methods on sub-control volumes - make the signature of the calculateValue() template method of the common two-point gradient approximator match the one of the vertex centered finite volume one -------- 70th commit message: fix fallout from the Big Rebase -------- 71st commit message: ECFV: some bugs in the boundary -------- 72nd commit message: make computeFlux() compute area-specific quantities -------- 73rd commit message: fix more bugs in the element centered FV discretization now eWoms should match Dumux pretty closely... -------- 74th commit message: coalesce the common code of the multi phase porous medium models into "MultiPhaseBaseModel" -------- 75th commit message: update reference solutions these were changed because of the screw-up with the area of boundary segments... -------- 76th commit message: rename "ImplicitBase" to "FvBase" because in eWoms, everything is implicit and these are currently the base classes for all finite volume discretizations. -------- 77th commit message: make the spatial discretization selectable using a splice This requires an opm-core with a the patches from https://github.com/OPM/opm-core/pull/446 merged... -------- 78th commit message: rename the properties used for splices to *Splice -------- 79th commit message: move the files in 'tests/models' to 'tests' since 'tests' was empty except for the 'models' subdirectory... -------- 80th commit message: improve and fix the tutorial -------- 81st commit message: remove the -fno-strict-aliasing flag from the provided option files seems like recent versions of Dune have been adapted... -------- 82nd commit message: also compile all CO2 injection simulations using the element centered finite volume discretization -------- 83rd commit message: PVS model: make it work properly with the element-centered finite volume discretiation because DOF != number of vertices
2013-12-12 05:52:44 -06:00
class Tutorial1Problem
: public GetPropType<TypeTag, Properties::BaseProblem> /*@\label{tutorial1:def-problem}@*/
{
2020-06-10 06:49:42 -05:00
using ParentType = GetPropType<TypeTag, Properties::BaseProblem>;
using Scalar = GetPropType<TypeTag, Properties::Scalar>;
using GridView = GetPropType<TypeTag, Properties::GridView>;
// Grid dimension
enum {
dim = GridView::dimension,
dimWorld = GridView::dimensionworld
};
// The type of the intrinsic permeability tensor
2020-06-10 06:49:42 -05:00
using DimMatrix = Dune::FieldMatrix<Scalar, dimWorld, dimWorld>;
2010-08-03 12:11:34 -05:00
// eWoms specific types are specified via the property system
2020-06-10 06:49:42 -05:00
using Simulator = GetPropType<TypeTag, Properties::Simulator>;
using PrimaryVariables = GetPropType<TypeTag, Properties::PrimaryVariables>;
using RateVector = GetPropType<TypeTag, Properties::RateVector>;
using BoundaryRateVector = GetPropType<TypeTag, Properties::BoundaryRateVector>;
using FluidSystem = GetPropType<TypeTag, Properties::FluidSystem>;
using Indices = GetPropType<TypeTag, Properties::Indices>;
using MaterialLaw = GetPropType<TypeTag, Properties::MaterialLaw>;
using MaterialLawParams = GetPropType<TypeTag, Properties::MaterialLawParams>; /*@\label{tutorial1:matLawObjectType}@*/
// phase indices
enum { numPhases = FluidSystem::numPhases };
enum { wettingPhaseIdx = FluidSystem::wettingPhaseIdx };
enum { nonWettingPhaseIdx = FluidSystem::nonWettingPhaseIdx };
// Indices of the conservation equations
enum { contiWettingEqIdx = Indices::conti0EqIdx + wettingPhaseIdx };
enum { contiNonWettingEqIdx = Indices::conti0EqIdx + nonWettingPhaseIdx };
public:
//! The constructor of the problem. This only _allocates_ the memory required by the
//! problem. The constructor is supposed to _never ever_ throw an exception.
fix most pedantic compiler warnings in the basic infrastructure i.e., using clang 3.8 to compile the test suite with the following flags: ``` -Weverything -Wno-documentation -Wno-documentation-unknown-command -Wno-c++98-compat -Wno-c++98-compat-pedantic -Wno-undef -Wno-padded -Wno-global-constructors -Wno-exit-time-destructors -Wno-weak-vtables -Wno-float-equal ``` should not produce any warnings anymore. In my opinion the only flag which would produce beneficial warnings is -Wdocumentation. This has not been fixed in this patch because writing documentation is left for another day (or, more likely, year). note that this patch consists of a heavy dose of the OPM_UNUSED macro and plenty of static_casts (to fix signedness issues). Fixing the singedness issues were quite a nightmare and the fact that the Dune API is quite inconsistent in that regard was not exactly helpful. :/ Finally this patch includes quite a few formatting changes (e.g., all occurences of 'T &t' should be changed to `T& t`) and some fixes for minor issues which I've found during the excercise. I've made sure that all unit tests the test suite still pass successfully and I've made sure that flow_ebos still works for Norne and that it did not regress w.r.t. performance. (Note that this patch does not fix compiler warnings triggered `ebos` and `flow_ebos` but only those caused by the basic infrastructure or the unit tests.) v2: fix the warnings that occur if the dune-localfunctions module is not available. thanks to [at]atgeirr for testing. v3: fix dune 2.3 build issue
2016-11-07 08:14:07 -06:00
Tutorial1Problem(Simulator& simulator)
: ParentType(simulator)
, eps_(3e-6)
{ }
//! This method initializes the data structures allocated by the problem
//! constructor. In contrast to the constructor, exceptions thrown from within this
//! method won't lead to segmentation faults.
void finishInit()
2010-10-15 10:11:37 -05:00
{
ParentType::finishInit();
// Use an isotropic and homogeneous intrinsic permeability
K_ = this->toDimMatrix_(1e-7);
// Parameters of the Brooks-Corey law
Implement the element centered finite volume spatial discretization This makes eWoms multi-discretization capable. Along the way, this fixes some bugs and does a medium sized reorganization of the source tree. This is a squashed patch of the following commits: -------- 1st commit message: add initial version of the element centered finite volume discretization currently, it is a misnomer as it is just a copy of the vertex centered discretization plus some renames... -------- 2nd commit message: rename [VE]cfvModel -> [VE]cfvDiscretization -------- 3rd commit message: ecfv: prelimary changes required to make it compile but not work yet... -------- 4th commit message: Rename *FvElementGeometry to *Stencil "Stencil" seems to be the standard expression for this concept... (also, it is not specific to finite volume methods and is shorter.) -------- 5th commit message: refactor the stencil class for the element centered finite volume discretization -------- 6th commit message: ECFV: some work on the stencil class -------- 7th commit message: ECFV: make the boundary handling code compile -------- 8th commit message: rename elemContext() to elementContext() -------- 9th commit message: ECFV: make the VTK output modules compile -------- 10th commit message: stencil: introduce the concept of primary DOFs also save an vector of all element pointers in the stencil. -------- 11th commit message: ECFV: try to fix assembly; add missing timeIdx arguments to the num*() methods -------- 12th commit message: ECFV: fix stupid mistake in the assembler -------- 13th commit message: ECFV: remove a few implicit DOF == vertex assumptions the black-oil example now runs without valgrind complaints until it encounters a negative oil mole fraction. -------- 14th commit message: VCFV: make everything compile again all vertex centered FV examples should now work again... -------- 15th commit message: rename [ev]cfvmodel.hh to [ev]cfvdiscretization.hh the classes have already been renamed. -------- 16th commit message: ECFV: make it work to the point where it can write out the initial solution. -------- 17th commit message: ECFV: make it work the local residual/jacobian needed some work in distinguishing primary and secondary DOFs and there was an minor issue with the serialization code. for some reason, it seems still not correct. (-> convergence is too slow.) -------- 18th commit message: VCFV: make it compile for the black oil model again -------- 19th commit message: VCFV: make it compile with the remaining models again -------- 20th commit message: flash model: make it work with ECFV although this breaks its compatibility with VCFV. (-> next commit) -------- 21st commit message: adapt the VCFV to make it compatible with the flash model again -------- 22nd commit message: make all models compile with VCFV again -------- 23rd commit message: VCFV: more cleanups of the stencil VcfvStencil now does not have any public attributes anymore. TODO: do not export attributes in the SubControlVolume and SubControlVolumeFace classes. -------- 24th commit message: VCFV: actually update the element pointer -------- 25th commit message: change the blackoil model back to ECFV -------- 26th commit message: immiscible model: make it compatible with the ECFV discretization -------- 27th commit message: PVS model: make it work with ECFV -------- 28th commit message: NCP model: make it work with ECFV -------- 29th commit message: rename Vcfv*VelocityModule to *VelocityModule -------- 30th commit message: richards model: make it work with ECFV -------- 31st commit message: unify the ECFV and the VCFV VTK output modules and other cleanups -------- 32nd commit message: unify the common code of the VCFV and the ECFV disctretizations -------- 33rd commit message: unify the element contexts between element and vertex centered finite volumes -------- 34th commit message: unify the local jacobian class of the finite volume discretizations -------- 35th commit message: replace [VE]vcf(LocalResidual|ElementContext|BoundaryContext|ConstraintsContext) by generic code -------- 36th commit message: replace the [EV]cfvLocalResidual by generic code -------- 37th commit message: unify the MultiPhaseProblem and Problem classes, introduce NullBorderListCreator -------- 38th commit message: remove the discretization specific boundary context -------- 39th commit message: unify the [EV]cfvDiscretization classes -------- 40th commit message: Unify [EV]cfvMultiPhaseFluxVariables -------- 41st commit message: Unify the [EC]cfvNewton* classes -------- 42nd commit message: Unify [EV]cfvVolumeVariables -------- 43rd commit message: unify [EV]cfvAssembler -------- 44th commit message: unified flux variables: fix stupid mistake when calculating pressure gradients -------- 45th commit message: unify what's to unify for the [EV]CFV properties -------- 46th commit message: make the method to calculate gradients and values at flux approximation points changeable Currently, this is used by the vertex centered finite volume method to be able to use P1-finite element gradients instead of two-point ones... -------- 47th commit message: make the restart code work correctly, use the correct DofMapper for VCFV -------- 48th commit message: actually use the gradient calculator in a model the immiscible model in this case -------- 49th commit message: move some files around to where they belong, use the new gradient calculation code in all models TODO: proper handling of boundary gradients -------- 50th commit message: fix the stokes model currently it only works with the vertex centered finite volume discretization, but the plan is to soon move it to a staggered grid scheme anyway... -------- 51st commit message: move all models back to using the vertex centered finite volume discretization by default -------- 52nd commit message: models: some variable renames and documentation fixes - scv -> dof - vert -> dof - vertex -> dof - replace 'VCFV' - fix some typos -------- 53rd commit message: don't expect UG anymore since it is quite non-free and hard to get. we now use ALUGrid instead! -------- 54th commit message: temporarily disable jacobian recycling -------- 55th commit message: fix writing/reading restart files using the generic code -------- 56th commit message: fix bug where fluxes were only counted once in the stencil this only affected the vertex centered finite volumes discretization... -------- 57th commit message: boundary gradients: use the center of the sub-control volume adjacent to a boundary segment -------- 58th commit message: make it compile on GCC -------- 59th commit message: get rid of most hacks for this, partial reassemble and jacobian recycling was brought back. For the this and the remaining stuff the main trick is the introduction of the GridCommHandleFactory concept which constructs communication handles suited for the respective spatial discretization... -------- 60th commit message: fix a few annoying bugs first, default the convergence criterion for the linear solver did not honor the initial residual which lead to linear solver breakdowns, then some debugging code was left in the discrete fracture model and then there was a bug in the TP gradient approximation class... this has the consequence that we need a new reference solution for the discrete fracture problem... -------- 61st commit message: iterative linear solver: remove the code for the non-default convergence criteria -------- 62nd commit message: provide the FE cache instead of the local FE this fixes a segfault in the stokes model caused by the fact that the local FE was not initialized at this point. -------- 63rd commit message: (Navier-)Stokes: fix bug due to the transition to unit normals now, all tests pass for this branch. The only things which need to be fixed are some annoying performance regressions compared to master and some bug in the splices feature of the property system... -------- 64th commit message: some fix for the local residual of the immiscible model -------- 65th commit message: Navier-Stokes: implement SCV center gradients There seems to be a bug in the previous implementation (the jacobian inverse transposed is evaluated using the local, not the global geometry), so the reference solution for the stokes2c test problem has also been updated... -------- 66th commit message: remove the ALUGrid specialization of the LensGridCreator and the YaspGrid one for the fingerproblem using different grid seems to sometimes cause a different vertex order, which in turn causes the respective test to fail if the reference solution was computed using the other grid... -------- 67th commit message: VCFV: use the correct BorderListCreator this makes MPI parallel computations work again. apart from performance regressions, this branch does not exhibit any known regressions compared to master anymore... -------- 68th commit message: make verything compile with the element centered finite volume discretization except the Navier-Stokes and the two-phase DFM models, of course... -------- 69th commit message: minor fixes - make the navier-stokes model slighly more generic by using the proper (in,ex)teriorIndex() methods on sub-control volumes - make the signature of the calculateValue() template method of the common two-point gradient approximator match the one of the vertex centered finite volume one -------- 70th commit message: fix fallout from the Big Rebase -------- 71st commit message: ECFV: some bugs in the boundary -------- 72nd commit message: make computeFlux() compute area-specific quantities -------- 73rd commit message: fix more bugs in the element centered FV discretization now eWoms should match Dumux pretty closely... -------- 74th commit message: coalesce the common code of the multi phase porous medium models into "MultiPhaseBaseModel" -------- 75th commit message: update reference solutions these were changed because of the screw-up with the area of boundary segments... -------- 76th commit message: rename "ImplicitBase" to "FvBase" because in eWoms, everything is implicit and these are currently the base classes for all finite volume discretizations. -------- 77th commit message: make the spatial discretization selectable using a splice This requires an opm-core with a the patches from https://github.com/OPM/opm-core/pull/446 merged... -------- 78th commit message: rename the properties used for splices to *Splice -------- 79th commit message: move the files in 'tests/models' to 'tests' since 'tests' was empty except for the 'models' subdirectory... -------- 80th commit message: improve and fix the tutorial -------- 81st commit message: remove the -fno-strict-aliasing flag from the provided option files seems like recent versions of Dune have been adapted... -------- 82nd commit message: also compile all CO2 injection simulations using the element centered finite volume discretization -------- 83rd commit message: PVS model: make it work properly with the element-centered finite volume discretiation because DOF != number of vertices
2013-12-12 05:52:44 -06:00
materialParams_.setEntryPressure(500.0 /*Pa*/); /*@\label{tutorial1:setLawParams}@*/
materialParams_.setLambda(2); // shape parameter
// Set the residual saturations
materialParams_.setResidualSaturation(wettingPhaseIdx, 0.0);
materialParams_.setResidualSaturation(nonWettingPhaseIdx, 0.0);
2013-11-06 07:50:01 -06:00
// wrap up the initialization of the material law's parameters
materialParams_.finalize();
2010-10-15 10:11:37 -05:00
}
/*!
* \copydoc FvBaseMultiPhaseProblem::registerParameters
*/
static void registerParameters()
{
ParentType::registerParameters();
Parameters::SetDefault<Parameters::CellsX>(100);
Parameters::SetDefault<Parameters::CellsY>(1);
Parameters::SetDefault<Parameters::DomainSizeX<Scalar>>(300.0);
Parameters::SetDefault<Parameters::DomainSizeY<Scalar>>(60.0);
if constexpr (dim == 3) {
Parameters::SetDefault<Parameters::CellsZ>(1);
Parameters::SetDefault<Parameters::DomainSizeZ<Scalar>>(0.0);
}
Parameters::SetDefault<Parameters::EndTime<Scalar>>(100e3);
Parameters::SetDefault<Parameters::InitialTimeStepSize<Scalar>>(125.0);
}
Implement the element centered finite volume spatial discretization This makes eWoms multi-discretization capable. Along the way, this fixes some bugs and does a medium sized reorganization of the source tree. This is a squashed patch of the following commits: -------- 1st commit message: add initial version of the element centered finite volume discretization currently, it is a misnomer as it is just a copy of the vertex centered discretization plus some renames... -------- 2nd commit message: rename [VE]cfvModel -> [VE]cfvDiscretization -------- 3rd commit message: ecfv: prelimary changes required to make it compile but not work yet... -------- 4th commit message: Rename *FvElementGeometry to *Stencil "Stencil" seems to be the standard expression for this concept... (also, it is not specific to finite volume methods and is shorter.) -------- 5th commit message: refactor the stencil class for the element centered finite volume discretization -------- 6th commit message: ECFV: some work on the stencil class -------- 7th commit message: ECFV: make the boundary handling code compile -------- 8th commit message: rename elemContext() to elementContext() -------- 9th commit message: ECFV: make the VTK output modules compile -------- 10th commit message: stencil: introduce the concept of primary DOFs also save an vector of all element pointers in the stencil. -------- 11th commit message: ECFV: try to fix assembly; add missing timeIdx arguments to the num*() methods -------- 12th commit message: ECFV: fix stupid mistake in the assembler -------- 13th commit message: ECFV: remove a few implicit DOF == vertex assumptions the black-oil example now runs without valgrind complaints until it encounters a negative oil mole fraction. -------- 14th commit message: VCFV: make everything compile again all vertex centered FV examples should now work again... -------- 15th commit message: rename [ev]cfvmodel.hh to [ev]cfvdiscretization.hh the classes have already been renamed. -------- 16th commit message: ECFV: make it work to the point where it can write out the initial solution. -------- 17th commit message: ECFV: make it work the local residual/jacobian needed some work in distinguishing primary and secondary DOFs and there was an minor issue with the serialization code. for some reason, it seems still not correct. (-> convergence is too slow.) -------- 18th commit message: VCFV: make it compile for the black oil model again -------- 19th commit message: VCFV: make it compile with the remaining models again -------- 20th commit message: flash model: make it work with ECFV although this breaks its compatibility with VCFV. (-> next commit) -------- 21st commit message: adapt the VCFV to make it compatible with the flash model again -------- 22nd commit message: make all models compile with VCFV again -------- 23rd commit message: VCFV: more cleanups of the stencil VcfvStencil now does not have any public attributes anymore. TODO: do not export attributes in the SubControlVolume and SubControlVolumeFace classes. -------- 24th commit message: VCFV: actually update the element pointer -------- 25th commit message: change the blackoil model back to ECFV -------- 26th commit message: immiscible model: make it compatible with the ECFV discretization -------- 27th commit message: PVS model: make it work with ECFV -------- 28th commit message: NCP model: make it work with ECFV -------- 29th commit message: rename Vcfv*VelocityModule to *VelocityModule -------- 30th commit message: richards model: make it work with ECFV -------- 31st commit message: unify the ECFV and the VCFV VTK output modules and other cleanups -------- 32nd commit message: unify the common code of the VCFV and the ECFV disctretizations -------- 33rd commit message: unify the element contexts between element and vertex centered finite volumes -------- 34th commit message: unify the local jacobian class of the finite volume discretizations -------- 35th commit message: replace [VE]vcf(LocalResidual|ElementContext|BoundaryContext|ConstraintsContext) by generic code -------- 36th commit message: replace the [EV]cfvLocalResidual by generic code -------- 37th commit message: unify the MultiPhaseProblem and Problem classes, introduce NullBorderListCreator -------- 38th commit message: remove the discretization specific boundary context -------- 39th commit message: unify the [EV]cfvDiscretization classes -------- 40th commit message: Unify [EV]cfvMultiPhaseFluxVariables -------- 41st commit message: Unify the [EC]cfvNewton* classes -------- 42nd commit message: Unify [EV]cfvVolumeVariables -------- 43rd commit message: unify [EV]cfvAssembler -------- 44th commit message: unified flux variables: fix stupid mistake when calculating pressure gradients -------- 45th commit message: unify what's to unify for the [EV]CFV properties -------- 46th commit message: make the method to calculate gradients and values at flux approximation points changeable Currently, this is used by the vertex centered finite volume method to be able to use P1-finite element gradients instead of two-point ones... -------- 47th commit message: make the restart code work correctly, use the correct DofMapper for VCFV -------- 48th commit message: actually use the gradient calculator in a model the immiscible model in this case -------- 49th commit message: move some files around to where they belong, use the new gradient calculation code in all models TODO: proper handling of boundary gradients -------- 50th commit message: fix the stokes model currently it only works with the vertex centered finite volume discretization, but the plan is to soon move it to a staggered grid scheme anyway... -------- 51st commit message: move all models back to using the vertex centered finite volume discretization by default -------- 52nd commit message: models: some variable renames and documentation fixes - scv -> dof - vert -> dof - vertex -> dof - replace 'VCFV' - fix some typos -------- 53rd commit message: don't expect UG anymore since it is quite non-free and hard to get. we now use ALUGrid instead! -------- 54th commit message: temporarily disable jacobian recycling -------- 55th commit message: fix writing/reading restart files using the generic code -------- 56th commit message: fix bug where fluxes were only counted once in the stencil this only affected the vertex centered finite volumes discretization... -------- 57th commit message: boundary gradients: use the center of the sub-control volume adjacent to a boundary segment -------- 58th commit message: make it compile on GCC -------- 59th commit message: get rid of most hacks for this, partial reassemble and jacobian recycling was brought back. For the this and the remaining stuff the main trick is the introduction of the GridCommHandleFactory concept which constructs communication handles suited for the respective spatial discretization... -------- 60th commit message: fix a few annoying bugs first, default the convergence criterion for the linear solver did not honor the initial residual which lead to linear solver breakdowns, then some debugging code was left in the discrete fracture model and then there was a bug in the TP gradient approximation class... this has the consequence that we need a new reference solution for the discrete fracture problem... -------- 61st commit message: iterative linear solver: remove the code for the non-default convergence criteria -------- 62nd commit message: provide the FE cache instead of the local FE this fixes a segfault in the stokes model caused by the fact that the local FE was not initialized at this point. -------- 63rd commit message: (Navier-)Stokes: fix bug due to the transition to unit normals now, all tests pass for this branch. The only things which need to be fixed are some annoying performance regressions compared to master and some bug in the splices feature of the property system... -------- 64th commit message: some fix for the local residual of the immiscible model -------- 65th commit message: Navier-Stokes: implement SCV center gradients There seems to be a bug in the previous implementation (the jacobian inverse transposed is evaluated using the local, not the global geometry), so the reference solution for the stokes2c test problem has also been updated... -------- 66th commit message: remove the ALUGrid specialization of the LensGridCreator and the YaspGrid one for the fingerproblem using different grid seems to sometimes cause a different vertex order, which in turn causes the respective test to fail if the reference solution was computed using the other grid... -------- 67th commit message: VCFV: use the correct BorderListCreator this makes MPI parallel computations work again. apart from performance regressions, this branch does not exhibit any known regressions compared to master anymore... -------- 68th commit message: make verything compile with the element centered finite volume discretization except the Navier-Stokes and the two-phase DFM models, of course... -------- 69th commit message: minor fixes - make the navier-stokes model slighly more generic by using the proper (in,ex)teriorIndex() methods on sub-control volumes - make the signature of the calculateValue() template method of the common two-point gradient approximator match the one of the vertex centered finite volume one -------- 70th commit message: fix fallout from the Big Rebase -------- 71st commit message: ECFV: some bugs in the boundary -------- 72nd commit message: make computeFlux() compute area-specific quantities -------- 73rd commit message: fix more bugs in the element centered FV discretization now eWoms should match Dumux pretty closely... -------- 74th commit message: coalesce the common code of the multi phase porous medium models into "MultiPhaseBaseModel" -------- 75th commit message: update reference solutions these were changed because of the screw-up with the area of boundary segments... -------- 76th commit message: rename "ImplicitBase" to "FvBase" because in eWoms, everything is implicit and these are currently the base classes for all finite volume discretizations. -------- 77th commit message: make the spatial discretization selectable using a splice This requires an opm-core with a the patches from https://github.com/OPM/opm-core/pull/446 merged... -------- 78th commit message: rename the properties used for splices to *Splice -------- 79th commit message: move the files in 'tests/models' to 'tests' since 'tests' was empty except for the 'models' subdirectory... -------- 80th commit message: improve and fix the tutorial -------- 81st commit message: remove the -fno-strict-aliasing flag from the provided option files seems like recent versions of Dune have been adapted... -------- 82nd commit message: also compile all CO2 injection simulations using the element centered finite volume discretization -------- 83rd commit message: PVS model: make it work properly with the element-centered finite volume discretiation because DOF != number of vertices
2013-12-12 05:52:44 -06:00
//! Specifies the problem name. This is used for files generated by the simulation.
std::string name() const
{ return "tutorial1"; }
//! Returns the temperature at a given position.
template <class Context>
fix most pedantic compiler warnings in the basic infrastructure i.e., using clang 3.8 to compile the test suite with the following flags: ``` -Weverything -Wno-documentation -Wno-documentation-unknown-command -Wno-c++98-compat -Wno-c++98-compat-pedantic -Wno-undef -Wno-padded -Wno-global-constructors -Wno-exit-time-destructors -Wno-weak-vtables -Wno-float-equal ``` should not produce any warnings anymore. In my opinion the only flag which would produce beneficial warnings is -Wdocumentation. This has not been fixed in this patch because writing documentation is left for another day (or, more likely, year). note that this patch consists of a heavy dose of the OPM_UNUSED macro and plenty of static_casts (to fix signedness issues). Fixing the singedness issues were quite a nightmare and the fact that the Dune API is quite inconsistent in that regard was not exactly helpful. :/ Finally this patch includes quite a few formatting changes (e.g., all occurences of 'T &t' should be changed to `T& t`) and some fixes for minor issues which I've found during the excercise. I've made sure that all unit tests the test suite still pass successfully and I've made sure that flow_ebos still works for Norne and that it did not regress w.r.t. performance. (Note that this patch does not fix compiler warnings triggered `ebos` and `flow_ebos` but only those caused by the basic infrastructure or the unit tests.) v2: fix the warnings that occur if the dune-localfunctions module is not available. thanks to [at]atgeirr for testing. v3: fix dune 2.3 build issue
2016-11-07 08:14:07 -06:00
Scalar temperature(const Context& /*context*/,
unsigned /*spaceIdx*/, unsigned /*timeIdx*/) const
{ return 283.15; }
//! Returns the intrinsic permeability tensor [m^2] at a position.
template <class Context>
fix most pedantic compiler warnings in the basic infrastructure i.e., using clang 3.8 to compile the test suite with the following flags: ``` -Weverything -Wno-documentation -Wno-documentation-unknown-command -Wno-c++98-compat -Wno-c++98-compat-pedantic -Wno-undef -Wno-padded -Wno-global-constructors -Wno-exit-time-destructors -Wno-weak-vtables -Wno-float-equal ``` should not produce any warnings anymore. In my opinion the only flag which would produce beneficial warnings is -Wdocumentation. This has not been fixed in this patch because writing documentation is left for another day (or, more likely, year). note that this patch consists of a heavy dose of the OPM_UNUSED macro and plenty of static_casts (to fix signedness issues). Fixing the singedness issues were quite a nightmare and the fact that the Dune API is quite inconsistent in that regard was not exactly helpful. :/ Finally this patch includes quite a few formatting changes (e.g., all occurences of 'T &t' should be changed to `T& t`) and some fixes for minor issues which I've found during the excercise. I've made sure that all unit tests the test suite still pass successfully and I've made sure that flow_ebos still works for Norne and that it did not regress w.r.t. performance. (Note that this patch does not fix compiler warnings triggered `ebos` and `flow_ebos` but only those caused by the basic infrastructure or the unit tests.) v2: fix the warnings that occur if the dune-localfunctions module is not available. thanks to [at]atgeirr for testing. v3: fix dune 2.3 build issue
2016-11-07 08:14:07 -06:00
const DimMatrix& intrinsicPermeability(const Context& /*context*/, /*@\label{tutorial1:permeability}@*/
unsigned /*spaceIdx*/, unsigned /*timeIdx*/) const
{ return K_; }
//! Defines the porosity [-] of the medium at a given position
template <class Context>
fix most pedantic compiler warnings in the basic infrastructure i.e., using clang 3.8 to compile the test suite with the following flags: ``` -Weverything -Wno-documentation -Wno-documentation-unknown-command -Wno-c++98-compat -Wno-c++98-compat-pedantic -Wno-undef -Wno-padded -Wno-global-constructors -Wno-exit-time-destructors -Wno-weak-vtables -Wno-float-equal ``` should not produce any warnings anymore. In my opinion the only flag which would produce beneficial warnings is -Wdocumentation. This has not been fixed in this patch because writing documentation is left for another day (or, more likely, year). note that this patch consists of a heavy dose of the OPM_UNUSED macro and plenty of static_casts (to fix signedness issues). Fixing the singedness issues were quite a nightmare and the fact that the Dune API is quite inconsistent in that regard was not exactly helpful. :/ Finally this patch includes quite a few formatting changes (e.g., all occurences of 'T &t' should be changed to `T& t`) and some fixes for minor issues which I've found during the excercise. I've made sure that all unit tests the test suite still pass successfully and I've made sure that flow_ebos still works for Norne and that it did not regress w.r.t. performance. (Note that this patch does not fix compiler warnings triggered `ebos` and `flow_ebos` but only those caused by the basic infrastructure or the unit tests.) v2: fix the warnings that occur if the dune-localfunctions module is not available. thanks to [at]atgeirr for testing. v3: fix dune 2.3 build issue
2016-11-07 08:14:07 -06:00
Scalar porosity(const Context& /*context*/,
unsigned /*spaceIdx*/, unsigned /*timeIdx*/) const /*@\label{tutorial1:porosity}@*/
{ return 0.2; }
//! Returns the parameter object for the material law at a given position
template <class Context>
fix most pedantic compiler warnings in the basic infrastructure i.e., using clang 3.8 to compile the test suite with the following flags: ``` -Weverything -Wno-documentation -Wno-documentation-unknown-command -Wno-c++98-compat -Wno-c++98-compat-pedantic -Wno-undef -Wno-padded -Wno-global-constructors -Wno-exit-time-destructors -Wno-weak-vtables -Wno-float-equal ``` should not produce any warnings anymore. In my opinion the only flag which would produce beneficial warnings is -Wdocumentation. This has not been fixed in this patch because writing documentation is left for another day (or, more likely, year). note that this patch consists of a heavy dose of the OPM_UNUSED macro and plenty of static_casts (to fix signedness issues). Fixing the singedness issues were quite a nightmare and the fact that the Dune API is quite inconsistent in that regard was not exactly helpful. :/ Finally this patch includes quite a few formatting changes (e.g., all occurences of 'T &t' should be changed to `T& t`) and some fixes for minor issues which I've found during the excercise. I've made sure that all unit tests the test suite still pass successfully and I've made sure that flow_ebos still works for Norne and that it did not regress w.r.t. performance. (Note that this patch does not fix compiler warnings triggered `ebos` and `flow_ebos` but only those caused by the basic infrastructure or the unit tests.) v2: fix the warnings that occur if the dune-localfunctions module is not available. thanks to [at]atgeirr for testing. v3: fix dune 2.3 build issue
2016-11-07 08:14:07 -06:00
const MaterialLawParams& materialLawParams(const Context& /*context*/, /*@\label{tutorial1:matLawParams}@*/
unsigned /*spaceIdx*/, unsigned /*timeIdx*/) const
{ return materialParams_; }
//! Evaluates the boundary conditions.
template <class Context>
fix most pedantic compiler warnings in the basic infrastructure i.e., using clang 3.8 to compile the test suite with the following flags: ``` -Weverything -Wno-documentation -Wno-documentation-unknown-command -Wno-c++98-compat -Wno-c++98-compat-pedantic -Wno-undef -Wno-padded -Wno-global-constructors -Wno-exit-time-destructors -Wno-weak-vtables -Wno-float-equal ``` should not produce any warnings anymore. In my opinion the only flag which would produce beneficial warnings is -Wdocumentation. This has not been fixed in this patch because writing documentation is left for another day (or, more likely, year). note that this patch consists of a heavy dose of the OPM_UNUSED macro and plenty of static_casts (to fix signedness issues). Fixing the singedness issues were quite a nightmare and the fact that the Dune API is quite inconsistent in that regard was not exactly helpful. :/ Finally this patch includes quite a few formatting changes (e.g., all occurences of 'T &t' should be changed to `T& t`) and some fixes for minor issues which I've found during the excercise. I've made sure that all unit tests the test suite still pass successfully and I've made sure that flow_ebos still works for Norne and that it did not regress w.r.t. performance. (Note that this patch does not fix compiler warnings triggered `ebos` and `flow_ebos` but only those caused by the basic infrastructure or the unit tests.) v2: fix the warnings that occur if the dune-localfunctions module is not available. thanks to [at]atgeirr for testing. v3: fix dune 2.3 build issue
2016-11-07 08:14:07 -06:00
void boundary(BoundaryRateVector& values, const Context& context,
unsigned spaceIdx, unsigned timeIdx) const
{
fix most pedantic compiler warnings in the basic infrastructure i.e., using clang 3.8 to compile the test suite with the following flags: ``` -Weverything -Wno-documentation -Wno-documentation-unknown-command -Wno-c++98-compat -Wno-c++98-compat-pedantic -Wno-undef -Wno-padded -Wno-global-constructors -Wno-exit-time-destructors -Wno-weak-vtables -Wno-float-equal ``` should not produce any warnings anymore. In my opinion the only flag which would produce beneficial warnings is -Wdocumentation. This has not been fixed in this patch because writing documentation is left for another day (or, more likely, year). note that this patch consists of a heavy dose of the OPM_UNUSED macro and plenty of static_casts (to fix signedness issues). Fixing the singedness issues were quite a nightmare and the fact that the Dune API is quite inconsistent in that regard was not exactly helpful. :/ Finally this patch includes quite a few formatting changes (e.g., all occurences of 'T &t' should be changed to `T& t`) and some fixes for minor issues which I've found during the excercise. I've made sure that all unit tests the test suite still pass successfully and I've made sure that flow_ebos still works for Norne and that it did not regress w.r.t. performance. (Note that this patch does not fix compiler warnings triggered `ebos` and `flow_ebos` but only those caused by the basic infrastructure or the unit tests.) v2: fix the warnings that occur if the dune-localfunctions module is not available. thanks to [at]atgeirr for testing. v3: fix dune 2.3 build issue
2016-11-07 08:14:07 -06:00
const auto& pos = context.pos(spaceIdx, timeIdx);
if (pos[0] < eps_) {
// Free-flow conditions on left boundary
fix most pedantic compiler warnings in the basic infrastructure i.e., using clang 3.8 to compile the test suite with the following flags: ``` -Weverything -Wno-documentation -Wno-documentation-unknown-command -Wno-c++98-compat -Wno-c++98-compat-pedantic -Wno-undef -Wno-padded -Wno-global-constructors -Wno-exit-time-destructors -Wno-weak-vtables -Wno-float-equal ``` should not produce any warnings anymore. In my opinion the only flag which would produce beneficial warnings is -Wdocumentation. This has not been fixed in this patch because writing documentation is left for another day (or, more likely, year). note that this patch consists of a heavy dose of the OPM_UNUSED macro and plenty of static_casts (to fix signedness issues). Fixing the singedness issues were quite a nightmare and the fact that the Dune API is quite inconsistent in that regard was not exactly helpful. :/ Finally this patch includes quite a few formatting changes (e.g., all occurences of 'T &t' should be changed to `T& t`) and some fixes for minor issues which I've found during the excercise. I've made sure that all unit tests the test suite still pass successfully and I've made sure that flow_ebos still works for Norne and that it did not regress w.r.t. performance. (Note that this patch does not fix compiler warnings triggered `ebos` and `flow_ebos` but only those caused by the basic infrastructure or the unit tests.) v2: fix the warnings that occur if the dune-localfunctions module is not available. thanks to [at]atgeirr for testing. v3: fix dune 2.3 build issue
2016-11-07 08:14:07 -06:00
const auto& materialParams = this->materialLawParams(context, spaceIdx, timeIdx);
Opm::ImmiscibleFluidState<Scalar, FluidSystem> fs;
Scalar Sw = 1.0;
fs.setSaturation(wettingPhaseIdx, Sw);
fs.setSaturation(nonWettingPhaseIdx, 1.0 - Sw);
fs.setTemperature(temperature(context, spaceIdx, timeIdx));
Scalar pC[numPhases];
MaterialLaw::capillaryPressures(pC, materialParams, fs);
fs.setPressure(wettingPhaseIdx, 200e3);
fs.setPressure(nonWettingPhaseIdx, 200e3 + pC[nonWettingPhaseIdx] - pC[nonWettingPhaseIdx]);
typename FluidSystem::template ParameterCache<Scalar> paramCache;
paramCache.updateAll(fs);
for (unsigned phaseIdx = 0; phaseIdx < numPhases; ++ phaseIdx) {
fs.setDensity(phaseIdx, FluidSystem::density(fs, paramCache, phaseIdx));
fs.setViscosity(phaseIdx, FluidSystem::viscosity(fs, paramCache, phaseIdx));
}
values.setFreeFlow(context, spaceIdx, timeIdx, fs);
}
2013-12-27 11:25:54 -06:00
else if (pos[0] > this->boundingBoxMax()[0] - eps_) {
// forced outflow at the right boundary
RateVector massRate(0.0);
massRate[contiWettingEqIdx] = 0.0; // [kg / (s m^2)]
massRate[contiNonWettingEqIdx] = 3e-2; // [kg / (s m^2)]
values.setMassRate(massRate);
}
else // no flow at the remaining boundaries
values.setNoFlow();
}
//! Evaluates the source term for all conserved quantities at a given
Implement the element centered finite volume spatial discretization This makes eWoms multi-discretization capable. Along the way, this fixes some bugs and does a medium sized reorganization of the source tree. This is a squashed patch of the following commits: -------- 1st commit message: add initial version of the element centered finite volume discretization currently, it is a misnomer as it is just a copy of the vertex centered discretization plus some renames... -------- 2nd commit message: rename [VE]cfvModel -> [VE]cfvDiscretization -------- 3rd commit message: ecfv: prelimary changes required to make it compile but not work yet... -------- 4th commit message: Rename *FvElementGeometry to *Stencil "Stencil" seems to be the standard expression for this concept... (also, it is not specific to finite volume methods and is shorter.) -------- 5th commit message: refactor the stencil class for the element centered finite volume discretization -------- 6th commit message: ECFV: some work on the stencil class -------- 7th commit message: ECFV: make the boundary handling code compile -------- 8th commit message: rename elemContext() to elementContext() -------- 9th commit message: ECFV: make the VTK output modules compile -------- 10th commit message: stencil: introduce the concept of primary DOFs also save an vector of all element pointers in the stencil. -------- 11th commit message: ECFV: try to fix assembly; add missing timeIdx arguments to the num*() methods -------- 12th commit message: ECFV: fix stupid mistake in the assembler -------- 13th commit message: ECFV: remove a few implicit DOF == vertex assumptions the black-oil example now runs without valgrind complaints until it encounters a negative oil mole fraction. -------- 14th commit message: VCFV: make everything compile again all vertex centered FV examples should now work again... -------- 15th commit message: rename [ev]cfvmodel.hh to [ev]cfvdiscretization.hh the classes have already been renamed. -------- 16th commit message: ECFV: make it work to the point where it can write out the initial solution. -------- 17th commit message: ECFV: make it work the local residual/jacobian needed some work in distinguishing primary and secondary DOFs and there was an minor issue with the serialization code. for some reason, it seems still not correct. (-> convergence is too slow.) -------- 18th commit message: VCFV: make it compile for the black oil model again -------- 19th commit message: VCFV: make it compile with the remaining models again -------- 20th commit message: flash model: make it work with ECFV although this breaks its compatibility with VCFV. (-> next commit) -------- 21st commit message: adapt the VCFV to make it compatible with the flash model again -------- 22nd commit message: make all models compile with VCFV again -------- 23rd commit message: VCFV: more cleanups of the stencil VcfvStencil now does not have any public attributes anymore. TODO: do not export attributes in the SubControlVolume and SubControlVolumeFace classes. -------- 24th commit message: VCFV: actually update the element pointer -------- 25th commit message: change the blackoil model back to ECFV -------- 26th commit message: immiscible model: make it compatible with the ECFV discretization -------- 27th commit message: PVS model: make it work with ECFV -------- 28th commit message: NCP model: make it work with ECFV -------- 29th commit message: rename Vcfv*VelocityModule to *VelocityModule -------- 30th commit message: richards model: make it work with ECFV -------- 31st commit message: unify the ECFV and the VCFV VTK output modules and other cleanups -------- 32nd commit message: unify the common code of the VCFV and the ECFV disctretizations -------- 33rd commit message: unify the element contexts between element and vertex centered finite volumes -------- 34th commit message: unify the local jacobian class of the finite volume discretizations -------- 35th commit message: replace [VE]vcf(LocalResidual|ElementContext|BoundaryContext|ConstraintsContext) by generic code -------- 36th commit message: replace the [EV]cfvLocalResidual by generic code -------- 37th commit message: unify the MultiPhaseProblem and Problem classes, introduce NullBorderListCreator -------- 38th commit message: remove the discretization specific boundary context -------- 39th commit message: unify the [EV]cfvDiscretization classes -------- 40th commit message: Unify [EV]cfvMultiPhaseFluxVariables -------- 41st commit message: Unify the [EC]cfvNewton* classes -------- 42nd commit message: Unify [EV]cfvVolumeVariables -------- 43rd commit message: unify [EV]cfvAssembler -------- 44th commit message: unified flux variables: fix stupid mistake when calculating pressure gradients -------- 45th commit message: unify what's to unify for the [EV]CFV properties -------- 46th commit message: make the method to calculate gradients and values at flux approximation points changeable Currently, this is used by the vertex centered finite volume method to be able to use P1-finite element gradients instead of two-point ones... -------- 47th commit message: make the restart code work correctly, use the correct DofMapper for VCFV -------- 48th commit message: actually use the gradient calculator in a model the immiscible model in this case -------- 49th commit message: move some files around to where they belong, use the new gradient calculation code in all models TODO: proper handling of boundary gradients -------- 50th commit message: fix the stokes model currently it only works with the vertex centered finite volume discretization, but the plan is to soon move it to a staggered grid scheme anyway... -------- 51st commit message: move all models back to using the vertex centered finite volume discretization by default -------- 52nd commit message: models: some variable renames and documentation fixes - scv -> dof - vert -> dof - vertex -> dof - replace 'VCFV' - fix some typos -------- 53rd commit message: don't expect UG anymore since it is quite non-free and hard to get. we now use ALUGrid instead! -------- 54th commit message: temporarily disable jacobian recycling -------- 55th commit message: fix writing/reading restart files using the generic code -------- 56th commit message: fix bug where fluxes were only counted once in the stencil this only affected the vertex centered finite volumes discretization... -------- 57th commit message: boundary gradients: use the center of the sub-control volume adjacent to a boundary segment -------- 58th commit message: make it compile on GCC -------- 59th commit message: get rid of most hacks for this, partial reassemble and jacobian recycling was brought back. For the this and the remaining stuff the main trick is the introduction of the GridCommHandleFactory concept which constructs communication handles suited for the respective spatial discretization... -------- 60th commit message: fix a few annoying bugs first, default the convergence criterion for the linear solver did not honor the initial residual which lead to linear solver breakdowns, then some debugging code was left in the discrete fracture model and then there was a bug in the TP gradient approximation class... this has the consequence that we need a new reference solution for the discrete fracture problem... -------- 61st commit message: iterative linear solver: remove the code for the non-default convergence criteria -------- 62nd commit message: provide the FE cache instead of the local FE this fixes a segfault in the stokes model caused by the fact that the local FE was not initialized at this point. -------- 63rd commit message: (Navier-)Stokes: fix bug due to the transition to unit normals now, all tests pass for this branch. The only things which need to be fixed are some annoying performance regressions compared to master and some bug in the splices feature of the property system... -------- 64th commit message: some fix for the local residual of the immiscible model -------- 65th commit message: Navier-Stokes: implement SCV center gradients There seems to be a bug in the previous implementation (the jacobian inverse transposed is evaluated using the local, not the global geometry), so the reference solution for the stokes2c test problem has also been updated... -------- 66th commit message: remove the ALUGrid specialization of the LensGridCreator and the YaspGrid one for the fingerproblem using different grid seems to sometimes cause a different vertex order, which in turn causes the respective test to fail if the reference solution was computed using the other grid... -------- 67th commit message: VCFV: use the correct BorderListCreator this makes MPI parallel computations work again. apart from performance regressions, this branch does not exhibit any known regressions compared to master anymore... -------- 68th commit message: make verything compile with the element centered finite volume discretization except the Navier-Stokes and the two-phase DFM models, of course... -------- 69th commit message: minor fixes - make the navier-stokes model slighly more generic by using the proper (in,ex)teriorIndex() methods on sub-control volumes - make the signature of the calculateValue() template method of the common two-point gradient approximator match the one of the vertex centered finite volume one -------- 70th commit message: fix fallout from the Big Rebase -------- 71st commit message: ECFV: some bugs in the boundary -------- 72nd commit message: make computeFlux() compute area-specific quantities -------- 73rd commit message: fix more bugs in the element centered FV discretization now eWoms should match Dumux pretty closely... -------- 74th commit message: coalesce the common code of the multi phase porous medium models into "MultiPhaseBaseModel" -------- 75th commit message: update reference solutions these were changed because of the screw-up with the area of boundary segments... -------- 76th commit message: rename "ImplicitBase" to "FvBase" because in eWoms, everything is implicit and these are currently the base classes for all finite volume discretizations. -------- 77th commit message: make the spatial discretization selectable using a splice This requires an opm-core with a the patches from https://github.com/OPM/opm-core/pull/446 merged... -------- 78th commit message: rename the properties used for splices to *Splice -------- 79th commit message: move the files in 'tests/models' to 'tests' since 'tests' was empty except for the 'models' subdirectory... -------- 80th commit message: improve and fix the tutorial -------- 81st commit message: remove the -fno-strict-aliasing flag from the provided option files seems like recent versions of Dune have been adapted... -------- 82nd commit message: also compile all CO2 injection simulations using the element centered finite volume discretization -------- 83rd commit message: PVS model: make it work properly with the element-centered finite volume discretiation because DOF != number of vertices
2013-12-12 05:52:44 -06:00
//! position of the domain [kg/(m^3 * s)]. Positive values mean that
//! mass is created.
template <class Context>
void source(RateVector& sourceRate, const Context& /*context*/,
fix most pedantic compiler warnings in the basic infrastructure i.e., using clang 3.8 to compile the test suite with the following flags: ``` -Weverything -Wno-documentation -Wno-documentation-unknown-command -Wno-c++98-compat -Wno-c++98-compat-pedantic -Wno-undef -Wno-padded -Wno-global-constructors -Wno-exit-time-destructors -Wno-weak-vtables -Wno-float-equal ``` should not produce any warnings anymore. In my opinion the only flag which would produce beneficial warnings is -Wdocumentation. This has not been fixed in this patch because writing documentation is left for another day (or, more likely, year). note that this patch consists of a heavy dose of the OPM_UNUSED macro and plenty of static_casts (to fix signedness issues). Fixing the singedness issues were quite a nightmare and the fact that the Dune API is quite inconsistent in that regard was not exactly helpful. :/ Finally this patch includes quite a few formatting changes (e.g., all occurences of 'T &t' should be changed to `T& t`) and some fixes for minor issues which I've found during the excercise. I've made sure that all unit tests the test suite still pass successfully and I've made sure that flow_ebos still works for Norne and that it did not regress w.r.t. performance. (Note that this patch does not fix compiler warnings triggered `ebos` and `flow_ebos` but only those caused by the basic infrastructure or the unit tests.) v2: fix the warnings that occur if the dune-localfunctions module is not available. thanks to [at]atgeirr for testing. v3: fix dune 2.3 build issue
2016-11-07 08:14:07 -06:00
unsigned /*spaceIdx*/, unsigned /*timeIdx*/) const
{
sourceRate[contiWettingEqIdx] = 0.0;
sourceRate[contiNonWettingEqIdx] = 0.0;
}
//! Evaluates the initial value at a given position in the domain.
template <class Context>
fix most pedantic compiler warnings in the basic infrastructure i.e., using clang 3.8 to compile the test suite with the following flags: ``` -Weverything -Wno-documentation -Wno-documentation-unknown-command -Wno-c++98-compat -Wno-c++98-compat-pedantic -Wno-undef -Wno-padded -Wno-global-constructors -Wno-exit-time-destructors -Wno-weak-vtables -Wno-float-equal ``` should not produce any warnings anymore. In my opinion the only flag which would produce beneficial warnings is -Wdocumentation. This has not been fixed in this patch because writing documentation is left for another day (or, more likely, year). note that this patch consists of a heavy dose of the OPM_UNUSED macro and plenty of static_casts (to fix signedness issues). Fixing the singedness issues were quite a nightmare and the fact that the Dune API is quite inconsistent in that regard was not exactly helpful. :/ Finally this patch includes quite a few formatting changes (e.g., all occurences of 'T &t' should be changed to `T& t`) and some fixes for minor issues which I've found during the excercise. I've made sure that all unit tests the test suite still pass successfully and I've made sure that flow_ebos still works for Norne and that it did not regress w.r.t. performance. (Note that this patch does not fix compiler warnings triggered `ebos` and `flow_ebos` but only those caused by the basic infrastructure or the unit tests.) v2: fix the warnings that occur if the dune-localfunctions module is not available. thanks to [at]atgeirr for testing. v3: fix dune 2.3 build issue
2016-11-07 08:14:07 -06:00
void initial(PrimaryVariables& values, const Context& context,
unsigned spaceIdx, unsigned timeIdx) const
{
Opm::ImmiscibleFluidState<Scalar, FluidSystem> fs;
// the domain is initially fully saturated by LNAPL
Scalar Sw = 0.0;
fs.setSaturation(wettingPhaseIdx, Sw);
fs.setSaturation(nonWettingPhaseIdx, 1.0 - Sw);
// the temperature is given by the temperature() method
fs.setTemperature(temperature(context, spaceIdx, timeIdx));
// set pressure of the wetting phase to 200 kPa = 2 bar
Scalar pC[numPhases];
fix most pedantic compiler warnings in the basic infrastructure i.e., using clang 3.8 to compile the test suite with the following flags: ``` -Weverything -Wno-documentation -Wno-documentation-unknown-command -Wno-c++98-compat -Wno-c++98-compat-pedantic -Wno-undef -Wno-padded -Wno-global-constructors -Wno-exit-time-destructors -Wno-weak-vtables -Wno-float-equal ``` should not produce any warnings anymore. In my opinion the only flag which would produce beneficial warnings is -Wdocumentation. This has not been fixed in this patch because writing documentation is left for another day (or, more likely, year). note that this patch consists of a heavy dose of the OPM_UNUSED macro and plenty of static_casts (to fix signedness issues). Fixing the singedness issues were quite a nightmare and the fact that the Dune API is quite inconsistent in that regard was not exactly helpful. :/ Finally this patch includes quite a few formatting changes (e.g., all occurences of 'T &t' should be changed to `T& t`) and some fixes for minor issues which I've found during the excercise. I've made sure that all unit tests the test suite still pass successfully and I've made sure that flow_ebos still works for Norne and that it did not regress w.r.t. performance. (Note that this patch does not fix compiler warnings triggered `ebos` and `flow_ebos` but only those caused by the basic infrastructure or the unit tests.) v2: fix the warnings that occur if the dune-localfunctions module is not available. thanks to [at]atgeirr for testing. v3: fix dune 2.3 build issue
2016-11-07 08:14:07 -06:00
MaterialLaw::capillaryPressures(pC, materialLawParams(context, spaceIdx, timeIdx),
fs);
fs.setPressure(wettingPhaseIdx, 200e3);
fs.setPressure(nonWettingPhaseIdx, 200e3 + pC[nonWettingPhaseIdx] - pC[nonWettingPhaseIdx]);
values.assignNaive(fs);
}
private:
DimMatrix K_;
Implement the element centered finite volume spatial discretization This makes eWoms multi-discretization capable. Along the way, this fixes some bugs and does a medium sized reorganization of the source tree. This is a squashed patch of the following commits: -------- 1st commit message: add initial version of the element centered finite volume discretization currently, it is a misnomer as it is just a copy of the vertex centered discretization plus some renames... -------- 2nd commit message: rename [VE]cfvModel -> [VE]cfvDiscretization -------- 3rd commit message: ecfv: prelimary changes required to make it compile but not work yet... -------- 4th commit message: Rename *FvElementGeometry to *Stencil "Stencil" seems to be the standard expression for this concept... (also, it is not specific to finite volume methods and is shorter.) -------- 5th commit message: refactor the stencil class for the element centered finite volume discretization -------- 6th commit message: ECFV: some work on the stencil class -------- 7th commit message: ECFV: make the boundary handling code compile -------- 8th commit message: rename elemContext() to elementContext() -------- 9th commit message: ECFV: make the VTK output modules compile -------- 10th commit message: stencil: introduce the concept of primary DOFs also save an vector of all element pointers in the stencil. -------- 11th commit message: ECFV: try to fix assembly; add missing timeIdx arguments to the num*() methods -------- 12th commit message: ECFV: fix stupid mistake in the assembler -------- 13th commit message: ECFV: remove a few implicit DOF == vertex assumptions the black-oil example now runs without valgrind complaints until it encounters a negative oil mole fraction. -------- 14th commit message: VCFV: make everything compile again all vertex centered FV examples should now work again... -------- 15th commit message: rename [ev]cfvmodel.hh to [ev]cfvdiscretization.hh the classes have already been renamed. -------- 16th commit message: ECFV: make it work to the point where it can write out the initial solution. -------- 17th commit message: ECFV: make it work the local residual/jacobian needed some work in distinguishing primary and secondary DOFs and there was an minor issue with the serialization code. for some reason, it seems still not correct. (-> convergence is too slow.) -------- 18th commit message: VCFV: make it compile for the black oil model again -------- 19th commit message: VCFV: make it compile with the remaining models again -------- 20th commit message: flash model: make it work with ECFV although this breaks its compatibility with VCFV. (-> next commit) -------- 21st commit message: adapt the VCFV to make it compatible with the flash model again -------- 22nd commit message: make all models compile with VCFV again -------- 23rd commit message: VCFV: more cleanups of the stencil VcfvStencil now does not have any public attributes anymore. TODO: do not export attributes in the SubControlVolume and SubControlVolumeFace classes. -------- 24th commit message: VCFV: actually update the element pointer -------- 25th commit message: change the blackoil model back to ECFV -------- 26th commit message: immiscible model: make it compatible with the ECFV discretization -------- 27th commit message: PVS model: make it work with ECFV -------- 28th commit message: NCP model: make it work with ECFV -------- 29th commit message: rename Vcfv*VelocityModule to *VelocityModule -------- 30th commit message: richards model: make it work with ECFV -------- 31st commit message: unify the ECFV and the VCFV VTK output modules and other cleanups -------- 32nd commit message: unify the common code of the VCFV and the ECFV disctretizations -------- 33rd commit message: unify the element contexts between element and vertex centered finite volumes -------- 34th commit message: unify the local jacobian class of the finite volume discretizations -------- 35th commit message: replace [VE]vcf(LocalResidual|ElementContext|BoundaryContext|ConstraintsContext) by generic code -------- 36th commit message: replace the [EV]cfvLocalResidual by generic code -------- 37th commit message: unify the MultiPhaseProblem and Problem classes, introduce NullBorderListCreator -------- 38th commit message: remove the discretization specific boundary context -------- 39th commit message: unify the [EV]cfvDiscretization classes -------- 40th commit message: Unify [EV]cfvMultiPhaseFluxVariables -------- 41st commit message: Unify the [EC]cfvNewton* classes -------- 42nd commit message: Unify [EV]cfvVolumeVariables -------- 43rd commit message: unify [EV]cfvAssembler -------- 44th commit message: unified flux variables: fix stupid mistake when calculating pressure gradients -------- 45th commit message: unify what's to unify for the [EV]CFV properties -------- 46th commit message: make the method to calculate gradients and values at flux approximation points changeable Currently, this is used by the vertex centered finite volume method to be able to use P1-finite element gradients instead of two-point ones... -------- 47th commit message: make the restart code work correctly, use the correct DofMapper for VCFV -------- 48th commit message: actually use the gradient calculator in a model the immiscible model in this case -------- 49th commit message: move some files around to where they belong, use the new gradient calculation code in all models TODO: proper handling of boundary gradients -------- 50th commit message: fix the stokes model currently it only works with the vertex centered finite volume discretization, but the plan is to soon move it to a staggered grid scheme anyway... -------- 51st commit message: move all models back to using the vertex centered finite volume discretization by default -------- 52nd commit message: models: some variable renames and documentation fixes - scv -> dof - vert -> dof - vertex -> dof - replace 'VCFV' - fix some typos -------- 53rd commit message: don't expect UG anymore since it is quite non-free and hard to get. we now use ALUGrid instead! -------- 54th commit message: temporarily disable jacobian recycling -------- 55th commit message: fix writing/reading restart files using the generic code -------- 56th commit message: fix bug where fluxes were only counted once in the stencil this only affected the vertex centered finite volumes discretization... -------- 57th commit message: boundary gradients: use the center of the sub-control volume adjacent to a boundary segment -------- 58th commit message: make it compile on GCC -------- 59th commit message: get rid of most hacks for this, partial reassemble and jacobian recycling was brought back. For the this and the remaining stuff the main trick is the introduction of the GridCommHandleFactory concept which constructs communication handles suited for the respective spatial discretization... -------- 60th commit message: fix a few annoying bugs first, default the convergence criterion for the linear solver did not honor the initial residual which lead to linear solver breakdowns, then some debugging code was left in the discrete fracture model and then there was a bug in the TP gradient approximation class... this has the consequence that we need a new reference solution for the discrete fracture problem... -------- 61st commit message: iterative linear solver: remove the code for the non-default convergence criteria -------- 62nd commit message: provide the FE cache instead of the local FE this fixes a segfault in the stokes model caused by the fact that the local FE was not initialized at this point. -------- 63rd commit message: (Navier-)Stokes: fix bug due to the transition to unit normals now, all tests pass for this branch. The only things which need to be fixed are some annoying performance regressions compared to master and some bug in the splices feature of the property system... -------- 64th commit message: some fix for the local residual of the immiscible model -------- 65th commit message: Navier-Stokes: implement SCV center gradients There seems to be a bug in the previous implementation (the jacobian inverse transposed is evaluated using the local, not the global geometry), so the reference solution for the stokes2c test problem has also been updated... -------- 66th commit message: remove the ALUGrid specialization of the LensGridCreator and the YaspGrid one for the fingerproblem using different grid seems to sometimes cause a different vertex order, which in turn causes the respective test to fail if the reference solution was computed using the other grid... -------- 67th commit message: VCFV: use the correct BorderListCreator this makes MPI parallel computations work again. apart from performance regressions, this branch does not exhibit any known regressions compared to master anymore... -------- 68th commit message: make verything compile with the element centered finite volume discretization except the Navier-Stokes and the two-phase DFM models, of course... -------- 69th commit message: minor fixes - make the navier-stokes model slighly more generic by using the proper (in,ex)teriorIndex() methods on sub-control volumes - make the signature of the calculateValue() template method of the common two-point gradient approximator match the one of the vertex centered finite volume one -------- 70th commit message: fix fallout from the Big Rebase -------- 71st commit message: ECFV: some bugs in the boundary -------- 72nd commit message: make computeFlux() compute area-specific quantities -------- 73rd commit message: fix more bugs in the element centered FV discretization now eWoms should match Dumux pretty closely... -------- 74th commit message: coalesce the common code of the multi phase porous medium models into "MultiPhaseBaseModel" -------- 75th commit message: update reference solutions these were changed because of the screw-up with the area of boundary segments... -------- 76th commit message: rename "ImplicitBase" to "FvBase" because in eWoms, everything is implicit and these are currently the base classes for all finite volume discretizations. -------- 77th commit message: make the spatial discretization selectable using a splice This requires an opm-core with a the patches from https://github.com/OPM/opm-core/pull/446 merged... -------- 78th commit message: rename the properties used for splices to *Splice -------- 79th commit message: move the files in 'tests/models' to 'tests' since 'tests' was empty except for the 'models' subdirectory... -------- 80th commit message: improve and fix the tutorial -------- 81st commit message: remove the -fno-strict-aliasing flag from the provided option files seems like recent versions of Dune have been adapted... -------- 82nd commit message: also compile all CO2 injection simulations using the element centered finite volume discretization -------- 83rd commit message: PVS model: make it work properly with the element-centered finite volume discretiation because DOF != number of vertices
2013-12-12 05:52:44 -06:00
// Object that holds the parameters of required by the capillary pressure law.
MaterialLawParams materialParams_; /*@\label{tutorial1:matParamsObject}@*/
// small epsilon value
Scalar eps_;
};
} // namespace Opm
#endif