Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
dumux-repositories
dumux-course
Commits
c2330116
Commit
c2330116
authored
Nov 28, 2018
by
Theresa Schollenberger
Browse files
[exercise-runtimeparams] update to dumux 3.0
parent
56ec173c
Changes
4
Hide whitespace changes
Inline
Side-by-side
exercises/exercise-runtimeparams/exercise_runtimeparams.cc
View file @
c2330116
...
...
@@ -41,10 +41,11 @@
#include
<dumux/assembly/fvassembler.hh>
#include
<dumux/assembly/diffmethod.hh>
#include
<dumux/discretization/method
s
.hh>
#include
<dumux/discretization/method.hh>
#include
<dumux/io/vtkoutputmodule.hh>
#include
<dumux/io/grid/gridmanager.hh>
#include
<dumux/io/loadsolution.hh>
// The problem file, where setup-specific boundary and initial conditions are defined.
#include
"injection2pproblem.hh"
...
...
@@ -57,7 +58,7 @@ int main(int argc, char** argv) try
using
namespace
Dumux
;
// define the type tag for this problem
using
TypeTag
=
TTAG
(
Injection2pCCTypeTag
)
;
using
TypeTag
=
Properties
::
TTag
::
Injection2pCCTypeTag
;
// initialize MPI, finalize is done automatically on exit
const
auto
&
mpiHelper
=
Dune
::
MPIHelper
::
instance
(
argc
,
argv
);
...
...
@@ -70,7 +71,7 @@ int main(int argc, char** argv) try
Parameters
::
init
(
argc
,
argv
);
// try to create a grid (from the given grid file or the input file)
GridManager
<
typename
GET_PROP_TYPE
(
TypeTag
,
Grid
)
>
gridManager
;
GridManager
<
GetPropType
<
TypeTag
,
Properties
::
Grid
>
>
gridManager
;
gridManager
.
init
();
////////////////////////////////////////////////////////////
...
...
@@ -81,37 +82,55 @@ int main(int argc, char** argv) try
const
auto
&
leafGridView
=
gridManager
.
grid
().
leafGridView
();
// create the finite volume grid geometry
using
FVGridGeometry
=
typename
GET_PROP_TYPE
(
TypeTag
,
FVGridGeometry
)
;
using
FVGridGeometry
=
GetPropType
<
TypeTag
,
Properties
::
FVGridGeometry
>
;
auto
fvGridGeometry
=
std
::
make_shared
<
FVGridGeometry
>
(
leafGridView
);
fvGridGeometry
->
update
();
// the problem (initial and boundary conditions)
using
Problem
=
typename
GET_PROP_TYPE
(
TypeTag
,
Problem
)
;
using
Problem
=
GetPropType
<
TypeTag
,
Properties
::
Problem
>
;
auto
problem
=
std
::
make_shared
<
Problem
>
(
fvGridGeometry
);
// check if we are about to restart a previously interrupted simulation
using
Scalar
=
GetPropType
<
TypeTag
,
Properties
::
Scalar
>
;
Scalar
restartTime
=
getParam
<
Scalar
>
(
"Restart.Time"
,
0
);
// the solution vector
using
SolutionVector
=
typename
GET_PROP_TYPE
(
TypeTag
,
SolutionVector
)
;
using
SolutionVector
=
GetPropType
<
TypeTag
,
Properties
::
SolutionVector
>
;
SolutionVector
x
(
fvGridGeometry
->
numDofs
());
problem
->
applyInitialSolution
(
x
);
if
(
restartTime
>
0
)
{
using
IOFields
=
GetPropType
<
TypeTag
,
Properties
::
IOFields
>
;
using
PrimaryVariables
=
GetPropType
<
TypeTag
,
Properties
::
PrimaryVariables
>
;
using
ModelTraits
=
GetPropType
<
TypeTag
,
Properties
::
ModelTraits
>
;
using
FluidSystem
=
GetPropType
<
TypeTag
,
Properties
::
FluidSystem
>
;
const
auto
fileName
=
getParam
<
std
::
string
>
(
"Restart.File"
);
const
auto
pvName
=
createPVNameFunction
<
IOFields
,
PrimaryVariables
,
ModelTraits
,
FluidSystem
>
();
loadSolution
(
x
,
fileName
,
pvName
,
*
fvGridGeometry
);
}
else
problem
->
applyInitialSolution
(
x
);
auto
xOld
=
x
;
// the grid variables
using
GridVariables
=
typename
GET_PROP_TYPE
(
TypeTag
,
GridVariables
)
;
using
GridVariables
=
GetPropType
<
TypeTag
,
Properties
::
GridVariables
>
;
auto
gridVariables
=
std
::
make_shared
<
GridVariables
>
(
problem
,
fvGridGeometry
);
gridVariables
->
init
(
x
,
xOld
);
gridVariables
->
init
(
x
);
// get some time loop parameters
// getParam<TYPE>("GROUPNAME.PARAMNAME") reads and sets parameter PARAMNAME
// of type TYPE given in the group GROUPNAME from the input file
using
Scalar
=
typename
GET_PROP_TYPE
(
TypeTag
,
Scalar
)
;
using
Scalar
=
GetPropType
<
TypeTag
,
Properties
::
Scalar
>
;
const
auto
tEnd
=
getParam
<
Scalar
>
(
"TimeLoop.TEnd"
);
const
auto
maxDt
=
getParam
<
Scalar
>
(
"TimeLoop.MaxTimeStepSize"
);
auto
dt
=
getParam
<
Scalar
>
(
"TimeLoop.DtInitial"
);
// intialize the vtk output module
using
VtkOutputFields
=
typename
GET_PROP_TYPE
(
TypeTag
,
VtkOutputFields
);
VtkOutputModule
<
TypeTag
>
vtkWriter
(
*
problem
,
*
fvGridGeometry
,
*
gridVariables
,
x
,
problem
->
name
());
VtkOutputFields
::
init
(
vtkWriter
);
//! Add model specific output fields
using
VtkOutputFields
=
GetPropType
<
TypeTag
,
Properties
::
VtkOutputFields
>
;
VtkOutputModule
<
GridVariables
,
SolutionVector
>
vtkWriter
(
*
gridVariables
,
x
,
problem
->
name
());
using
VelocityOutput
=
GetPropType
<
TypeTag
,
Properties
::
VelocityOutput
>
;
vtkWriter
.
addVelocityOutput
(
std
::
make_shared
<
VelocityOutput
>
(
*
gridVariables
));
VtkOutputFields
::
initOutputModule
(
vtkWriter
);
//!< Add model specific output fields
vtkWriter
.
write
(
restartTime
);
// instantiate time loop
auto
timeLoop
=
std
::
make_shared
<
TimeLoop
<
Scalar
>>
(
0.0
,
dt
,
tEnd
);
...
...
exercises/exercise-runtimeparams/injection2pproblem.hh
View file @
c2330116
...
...
@@ -40,22 +40,28 @@ class InjectionProblem2P;
namespace
Properties
{
// define the TypeTag for this problem with a cell-centered two-point flux approximation spatial discretization.
NEW_TYPE_TAG
(
Injection2pTypeTag
,
INHERITS_FROM
(
TwoP
));
NEW_TYPE_TAG
(
Injection2pCCTypeTag
,
INHERITS_FROM
(
CCTpfaModel
,
Injection2pTypeTag
));
// Create new type tags
namespace
TTag
{
struct
Injection2pTypeTag
{
using
InheritsFrom
=
std
::
tuple
<
TwoP
>
;
};
struct
Injection2pCCTypeTag
{
using
InheritsFrom
=
std
::
tuple
<
Injection2pTypeTag
,
CCTpfaModel
>
;
};
}
// end namespace TTag
// Set the grid type
SET_TYPE_PROP
(
Injection2pTypeTag
,
Grid
,
Dune
::
YaspGrid
<
2
>
);
template
<
class
TypeTag
>
struct
Grid
<
TypeTag
,
TTag
::
Injection2pTypeTag
>
{
using
type
=
Dune
::
YaspGrid
<
2
>
;
};
// Set the problem property
SET_TYPE_PROP
(
Injection2pTypeTag
,
Problem
,
InjectionProblem2P
<
TypeTag
>
);
template
<
class
TypeTag
>
struct
Problem
<
TypeTag
,
TTag
::
Injection2pTypeTag
>
{
using
type
=
InjectionProblem2P
<
TypeTag
>
;
};
// Set the spatial parameters
SET_TYPE_PROP
(
Injection2pTypeTag
,
SpatialParams
,
InjectionSpatialParams
<
typename
GET_PROP_TYPE
(
TypeTag
,
FVGridGeometry
)
,
typename
GET_PROP_TYPE
(
TypeTag
,
Scalar
)
>
);
InjectionSpatialParams
<
GetPropType
<
TypeTag
,
Properties
::
FVGridGeometry
>
,
GetPropType
<
TypeTag
,
Properties
::
Scalar
>
>
);
// Set fluid configuration
SET_TYPE_PROP
(
Injection2pTypeTag
,
FluidSystem
,
FluidSystems
::
H2ON2
<
typename
GET_PROP_TYPE
(
TypeTag
,
Scalar
),
FluidSystems
::
H2ON2DefaultPolicy
<
/*fastButSimplifiedRelations=*/
true
>
>
);
template
<
class
TypeTag
>
struct
FluidSystem
<
TypeTag
,
TTag
::
Injection2pTypeTag
>
{
using
type
=
FluidSystems
::
H2ON2
<
GetPropType
<
TypeTag
,
Properties
::
Scalar
>
,
FluidSystems
::
H2ON2DefaultPolicy
<
/*fastButSimplifiedRelations=*/
true
>
>
;
};
}
// end namespace Properties
/*!
...
...
@@ -83,14 +89,14 @@ template<class TypeTag>
class
InjectionProblem2P
:
public
PorousMediumFlowProblem
<
TypeTag
>
{
using
ParentType
=
PorousMediumFlowProblem
<
TypeTag
>
;
using
GridView
=
typename
GET_PROP_TYPE
(
TypeTag
,
GridView
)
;
using
Scalar
=
typename
GET_PROP_TYPE
(
TypeTag
,
Scalar
)
;
using
Indices
=
typename
G
ET_PROP_TYPE
(
TypeTag
,
ModelTraits
)
::
Indices
;
using
PrimaryVariables
=
typename
GET_PROP_TYPE
(
TypeTag
,
PrimaryVariables
)
;
using
BoundaryTypes
=
typename
GET_PROP_TYPE
(
TypeTag
,
BoundaryTypes
)
;
using
FVGridGeometry
=
typename
GET_PROP_TYPE
(
TypeTag
,
FVGridGeometry
)
;
using
FVElementGeometry
=
typename
G
ET_PROP_TYPE
(
TypeTag
,
FVGridGeometry
)
::
LocalView
;
using
FluidSystem
=
typename
GET_PROP_TYPE
(
TypeTag
,
FluidSystem
)
;
using
GridView
=
GetPropType
<
TypeTag
,
Properties
::
GridView
>
;
using
Scalar
=
GetPropType
<
TypeTag
,
Properties
::
Scalar
>
;
using
Indices
=
typename
G
etPropType
<
TypeTag
,
Properties
::
ModelTraits
>
::
Indices
;
using
PrimaryVariables
=
GetPropType
<
TypeTag
,
Properties
::
PrimaryVariables
>
;
using
BoundaryTypes
=
GetPropType
<
TypeTag
,
Properties
::
BoundaryTypes
>
;
using
FVGridGeometry
=
GetPropType
<
TypeTag
,
Properties
::
FVGridGeometry
>
;
using
FVElementGeometry
=
typename
G
etPropType
<
TypeTag
,
Properties
::
FVGridGeometry
>
::
LocalView
;
using
FluidSystem
=
GetPropType
<
TypeTag
,
Properties
::
FluidSystem
>
;
enum
{
dimWorld
=
GridView
::
dimensionworld
};
using
Element
=
typename
GridView
::
template
Codim
<
0
>
::
Entity
;
...
...
exercises/solution/exercise-runtimeparams/exercise_runtimeparams_solution.cc
View file @
c2330116
...
...
@@ -41,10 +41,11 @@
#include
<dumux/assembly/fvassembler.hh>
#include
<dumux/assembly/diffmethod.hh>
#include
<dumux/discretization/method
s
.hh>
#include
<dumux/discretization/method.hh>
#include
<dumux/io/vtkoutputmodule.hh>
#include
<dumux/io/grid/gridmanager.hh>
#include
<dumux/io/loadsolution.hh>
// The problem file, where setup-specific boundary and initial conditions are defined.
#include
"injection2pproblem.hh"
...
...
@@ -57,7 +58,7 @@ int main(int argc, char** argv) try
using
namespace
Dumux
;
// define the type tag for this problem
using
TypeTag
=
TTAG
(
Injection2pCCTypeTag
)
;
using
TypeTag
=
Properties
::
TTag
::
Injection2pCCTypeTag
;
// initialize MPI, finalize is done automatically on exit
const
auto
&
mpiHelper
=
Dune
::
MPIHelper
::
instance
(
argc
,
argv
);
...
...
@@ -70,7 +71,7 @@ int main(int argc, char** argv) try
Parameters
::
init
(
argc
,
argv
);
// try to create a grid (from the given grid file or the input file)
GridManager
<
typename
GET_PROP_TYPE
(
TypeTag
,
Grid
)
>
gridManager
;
GridManager
<
GetPropType
<
TypeTag
,
Properties
::
Grid
>
>
gridManager
;
gridManager
.
init
();
////////////////////////////////////////////////////////////
...
...
@@ -81,37 +82,55 @@ int main(int argc, char** argv) try
const
auto
&
leafGridView
=
gridManager
.
grid
().
leafGridView
();
// create the finite volume grid geometry
using
FVGridGeometry
=
typename
GET_PROP_TYPE
(
TypeTag
,
FVGridGeometry
)
;
using
FVGridGeometry
=
GetPropType
<
TypeTag
,
Properties
::
FVGridGeometry
>
;
auto
fvGridGeometry
=
std
::
make_shared
<
FVGridGeometry
>
(
leafGridView
);
fvGridGeometry
->
update
();
// the problem (initial and boundary conditions)
using
Problem
=
typename
GET_PROP_TYPE
(
TypeTag
,
Problem
)
;
using
Problem
=
GetPropType
<
TypeTag
,
Properties
::
Problem
>
;
auto
problem
=
std
::
make_shared
<
Problem
>
(
fvGridGeometry
);
// check if we are about to restart a previously interrupted simulation
using
Scalar
=
GetPropType
<
TypeTag
,
Properties
::
Scalar
>
;
Scalar
restartTime
=
getParam
<
Scalar
>
(
"Restart.Time"
,
0
);
// the solution vector
using
SolutionVector
=
typename
GET_PROP_TYPE
(
TypeTag
,
SolutionVector
)
;
using
SolutionVector
=
GetPropType
<
TypeTag
,
Properties
::
SolutionVector
>
;
SolutionVector
x
(
fvGridGeometry
->
numDofs
());
problem
->
applyInitialSolution
(
x
);
if
(
restartTime
>
0
)
{
using
IOFields
=
GetPropType
<
TypeTag
,
Properties
::
IOFields
>
;
using
PrimaryVariables
=
GetPropType
<
TypeTag
,
Properties
::
PrimaryVariables
>
;
using
ModelTraits
=
GetPropType
<
TypeTag
,
Properties
::
ModelTraits
>
;
using
FluidSystem
=
GetPropType
<
TypeTag
,
Properties
::
FluidSystem
>
;
const
auto
fileName
=
getParam
<
std
::
string
>
(
"Restart.File"
);
const
auto
pvName
=
createPVNameFunction
<
IOFields
,
PrimaryVariables
,
ModelTraits
,
FluidSystem
>
();
loadSolution
(
x
,
fileName
,
pvName
,
*
fvGridGeometry
);
}
else
problem
->
applyInitialSolution
(
x
);
auto
xOld
=
x
;
// the grid variables
using
GridVariables
=
typename
GET_PROP_TYPE
(
TypeTag
,
GridVariables
)
;
using
GridVariables
=
GetPropType
<
TypeTag
,
Properties
::
GridVariables
>
;
auto
gridVariables
=
std
::
make_shared
<
GridVariables
>
(
problem
,
fvGridGeometry
);
gridVariables
->
init
(
x
,
xOld
);
gridVariables
->
init
(
x
);
// get some time loop parameters
// getParam<TYPE>("GROUPNAME.PARAMNAME") reads and sets parameter PARAMNAME
// of type TYPE given in the group GROUPNAME from the input file
using
Scalar
=
typename
GET_PROP_TYPE
(
TypeTag
,
Scalar
)
;
using
Scalar
=
GetPropType
<
TypeTag
,
Properties
::
Scalar
>
;
const
auto
tEnd
=
getParam
<
Scalar
>
(
"TimeLoop.TEnd"
);
const
auto
maxDt
=
getParam
<
Scalar
>
(
"TimeLoop.MaxTimeStepSize"
);
auto
dt
=
getParam
<
Scalar
>
(
"TimeLoop.DtInitial"
);
// intialize the vtk output module
using
VtkOutputFields
=
typename
GET_PROP_TYPE
(
TypeTag
,
VtkOutputFields
);
VtkOutputModule
<
TypeTag
>
vtkWriter
(
*
problem
,
*
fvGridGeometry
,
*
gridVariables
,
x
,
problem
->
name
());
VtkOutputFields
::
init
(
vtkWriter
);
//! Add model specific output fields
using
VtkOutputFields
=
GetPropType
<
TypeTag
,
Properties
::
VtkOutputFields
>
;
VtkOutputModule
<
GridVariables
,
SolutionVector
>
vtkWriter
(
*
gridVariables
,
x
,
problem
->
name
());
using
VelocityOutput
=
GetPropType
<
TypeTag
,
Properties
::
VelocityOutput
>
;
vtkWriter
.
addVelocityOutput
(
std
::
make_shared
<
VelocityOutput
>
(
*
gridVariables
));
VtkOutputFields
::
initOutputModule
(
vtkWriter
);
//!< Add model specific output fields
vtkWriter
.
write
(
restartTime
);
// instantiate time loop
auto
timeLoop
=
std
::
make_shared
<
TimeLoop
<
Scalar
>>
(
0.0
,
dt
,
tEnd
);
...
...
exercises/solution/exercise-runtimeparams/injection2pproblem.hh
View file @
c2330116
...
...
@@ -40,22 +40,28 @@ class InjectionProblem2P;
namespace
Properties
{
// define the TypeTag for this problem with a cell-centered two-point flux approximation spatial discretization.
NEW_TYPE_TAG
(
Injection2pTypeTag
,
INHERITS_FROM
(
TwoP
));
NEW_TYPE_TAG
(
Injection2pCCTypeTag
,
INHERITS_FROM
(
CCTpfaModel
,
Injection2pTypeTag
));
// Create new type tags
namespace
TTag
{
struct
Injection2pTypeTag
{
using
InheritsFrom
=
std
::
tuple
<
TwoP
>
;
};
struct
Injection2pCCTypeTag
{
using
InheritsFrom
=
std
::
tuple
<
Injection2pTypeTag
,
CCTpfaModel
>
;
};
}
// end namespace TTag
// Set the grid type
SET_TYPE_PROP
(
Injection2pTypeTag
,
Grid
,
Dune
::
YaspGrid
<
2
>
);
template
<
class
TypeTag
>
struct
Grid
<
TypeTag
,
TTag
::
Injection2pTypeTag
>
{
using
type
=
Dune
::
YaspGrid
<
2
>
;
};
// Set the problem property
SET_TYPE_PROP
(
Injection2pTypeTag
,
Problem
,
InjectionProblem2P
<
TypeTag
>
);
template
<
class
TypeTag
>
struct
Problem
<
TypeTag
,
TTag
::
Injection2pTypeTag
>
{
using
type
=
InjectionProblem2P
<
TypeTag
>
;
};
// Set the spatial parameters
SET_TYPE_PROP
(
Injection2pTypeTag
,
SpatialParams
,
InjectionSpatialParams
<
typename
GET_PROP_TYPE
(
TypeTag
,
FVGridGeometry
)
,
typename
GET_PROP_TYPE
(
TypeTag
,
Scalar
)
>
);
InjectionSpatialParams
<
GetPropType
<
TypeTag
,
Properties
::
FVGridGeometry
>
,
GetPropType
<
TypeTag
,
Properties
::
Scalar
>
>
);
// Set fluid configuration
SET_TYPE_PROP
(
Injection2pTypeTag
,
FluidSystem
,
FluidSystems
::
H2ON2
<
typename
GET_PROP_TYPE
(
TypeTag
,
Scalar
),
FluidSystems
::
H2ON2DefaultPolicy
<
/*fastButSimplifiedRelations=*/
true
>>
);
template
<
class
TypeTag
>
struct
FluidSystem
<
TypeTag
,
TTag
::
Injection2pTypeTag
>
{
using
type
=
FluidSystems
::
H2ON2
<
GetPropType
<
TypeTag
,
Properties
::
Scalar
>
,
FluidSystems
::
H2ON2DefaultPolicy
<
/*fastButSimplifiedRelations=*/
true
>>
;
};
}
// end namespace Properties
/*!
...
...
@@ -83,14 +89,14 @@ template<class TypeTag>
class
InjectionProblem2P
:
public
PorousMediumFlowProblem
<
TypeTag
>
{
using
ParentType
=
PorousMediumFlowProblem
<
TypeTag
>
;
using
GridView
=
typename
GET_PROP_TYPE
(
TypeTag
,
GridView
)
;
using
Scalar
=
typename
GET_PROP_TYPE
(
TypeTag
,
Scalar
)
;
using
Indices
=
typename
G
ET_PROP_TYPE
(
TypeTag
,
ModelTraits
)
::
Indices
;
using
PrimaryVariables
=
typename
GET_PROP_TYPE
(
TypeTag
,
PrimaryVariables
)
;
using
BoundaryTypes
=
typename
GET_PROP_TYPE
(
TypeTag
,
BoundaryTypes
)
;
using
FVGridGeometry
=
typename
GET_PROP_TYPE
(
TypeTag
,
FVGridGeometry
)
;
using
FVElementGeometry
=
typename
G
ET_PROP_TYPE
(
TypeTag
,
FVGridGeometry
)
::
LocalView
;
using
FluidSystem
=
typename
GET_PROP_TYPE
(
TypeTag
,
FluidSystem
)
;
using
GridView
=
GetPropType
<
TypeTag
,
Properties
::
GridView
>
;
using
Scalar
=
GetPropType
<
TypeTag
,
Properties
::
Scalar
>
;
using
Indices
=
typename
G
etPropType
<
TypeTag
,
Properties
::
ModelTraits
>
::
Indices
;
using
PrimaryVariables
=
GetPropType
<
TypeTag
,
Properties
::
PrimaryVariables
>
;
using
BoundaryTypes
=
GetPropType
<
TypeTag
,
Properties
::
BoundaryTypes
>
;
using
FVGridGeometry
=
GetPropType
<
TypeTag
,
Properties
::
FVGridGeometry
>
;
using
FVElementGeometry
=
typename
G
etPropType
<
TypeTag
,
Properties
::
FVGridGeometry
>
::
LocalView
;
using
FluidSystem
=
GetPropType
<
TypeTag
,
Properties
::
FluidSystem
>
;
enum
{
dimWorld
=
GridView
::
dimensionworld
};
using
Element
=
typename
GridView
::
template
Codim
<
0
>
::
Entity
;
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment