boxproperties.hh 5.74 KB
Newer Older
1
2
// -*- mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
// vi: set et ts=4 sw=4 sts=4:
Andreas Lauser's avatar
Andreas Lauser committed
3
4
5
/*****************************************************************************
 *   Copyright (C) 2009 by Andreas Lauser                                    *
 *   Copyright (C) 2008 by Bernd Flemisch                                    *
Andreas Lauser's avatar
Andreas Lauser committed
6
 *   Institute for Modelling Hydraulic and Environmental Systems             *
Andreas Lauser's avatar
Andreas Lauser committed
7
8
9
 *   University of Stuttgart, Germany                                        *
 *   email: <givenname>.<name>@iws.uni-stuttgart.de                          *
 *                                                                           *
10
 *   This program is free software: you can redistribute it and/or modify    *
Andreas Lauser's avatar
Andreas Lauser committed
11
 *   it under the terms of the GNU General Public License as published by    *
12
13
 *   the Free Software Foundation, either version 2 of the License, or       *
 *   (at your option) any later version.                                     *
Andreas Lauser's avatar
Andreas Lauser committed
14
 *                                                                           *
15
16
17
18
19
20
21
 *   This program 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 this program.  If not, see <http://www.gnu.org/licenses/>.   *
Andreas Lauser's avatar
Andreas Lauser committed
22
23
24
25
26
27
 *****************************************************************************/
#ifndef DUMUX_BOX_PROPERTIES_HH
#define DUMUX_BOX_PROPERTIES_HH

#include <dumux/common/propertysystem.hh>

28
#include <dumux/common/basicproperties.hh>
29
#include <dumux/linear/linearsolverproperties.hh>
30
#include <dumux/nonlinear/newtonmethod.hh>
31

Andreas Lauser's avatar
Andreas Lauser committed
32
/*!
33
34
35
 * \ingroup Properties
 * \ingroup BoxProperties
 * \ingroup BoxModel
Andreas Lauser's avatar
Andreas Lauser committed
36
37
38
39
40
41
42
43
44
45
 * \file
 * \brief Specify the shape functions, operator assemblers, etc
 *        used for the BoxModel.
 */
namespace Dumux
{

namespace Properties
{
/*!
46
 * \ingroup BoxModel
Andreas Lauser's avatar
Andreas Lauser committed
47
48
49
50
 */
// \{

//////////////////////////////////////////////////////////////////
51
// Type tags
Andreas Lauser's avatar
Andreas Lauser committed
52
53
54
//////////////////////////////////////////////////////////////////

//! The type tag for models based on the box-scheme
55
NEW_TYPE_TAG(BoxModel, INHERITS_FROM(NewtonMethod, LinearSolverTypeTag, ImplicitModel));
Andreas Lauser's avatar
Andreas Lauser committed
56
57
58
59
60
61
62
63
64
65

//////////////////////////////////////////////////////////////////
// Property tags
//////////////////////////////////////////////////////////////////

NEW_PROP_TAG(Grid);     //!< The type of the DUNE grid
NEW_PROP_TAG(GridView); //!< The type of the grid view

NEW_PROP_TAG(FVElementGeometry); //! The type of the finite-volume geometry in the box scheme

66
67
68
69
NEW_PROP_TAG(Problem); //!< The type of the problem
NEW_PROP_TAG(Model); //!< The type of the discretization
NEW_PROP_TAG(NumEq); //!< Number of equations in the system of PDEs
NEW_PROP_TAG(BaseLocalResidual); //!< The type of the base class of the local residual
Andreas Lauser's avatar
Andreas Lauser committed
70
71
72
73
74
75
76
77
NEW_PROP_TAG(LocalResidual); //!< The type of the local residual function
NEW_PROP_TAG(LocalJacobian); //!< The type of the local jacobian operator

NEW_PROP_TAG(JacobianAssembler); //!< Assembles the global jacobian matrix
NEW_PROP_TAG(JacobianMatrix); //!< Type of the global jacobian matrix
NEW_PROP_TAG(BoundaryTypes); //!< Stores the boundary types of a single degree of freedom
NEW_PROP_TAG(ElementBoundaryTypes); //!< Stores the boundary types on an element

78
NEW_PROP_TAG(PrimaryVariables); //!< A vector of primary variables within a sub-control volume
Andreas Lauser's avatar
Andreas Lauser committed
79
80
81
NEW_PROP_TAG(SolutionVector); //!< Vector containing all primary variable vector of the grid
NEW_PROP_TAG(ElementSolutionVector); //!< A vector of primary variables within a sub-control volume

82
NEW_PROP_TAG(VolumeVariables);  //!< The secondary variables within a sub-control volume
83
NEW_PROP_TAG(ElementVolumeVariables); //!< The secondary variables of all sub-control volumes in an element
84
NEW_PROP_TAG(FluxVariables); //!< Data required to calculate a flux over a face
85
NEW_PROP_TAG(BoundaryVariables); //!< Data required to calculate fluxes over boundary faces (outflow)
Andreas Lauser's avatar
Andreas Lauser committed
86
87

// high level simulation control
88
NEW_PROP_TAG(TimeManager);  //!< Manages the simulation time
Andreas Lauser's avatar
Andreas Lauser committed
89
90
91
NEW_PROP_TAG(NewtonMethod);     //!< The type of the newton method
NEW_PROP_TAG(NewtonController); //!< The type of the newton controller

92
93
94
95
96
//! Specify whether the jacobian matrix of the last iteration of a
//! time step should be re-used as the jacobian of the first iteration
//! of the next time step.
NEW_PROP_TAG(EnableJacobianRecycling);

97
98
99
100
101
//! Specify whether the jacobian matrix should be only reassembled for
//! elements where at least one vertex is above the specified
//! tolerance
NEW_PROP_TAG(EnablePartialReassemble);

102
103
104
105
106
107
108
/*!
 * \brief Specify the maximum size of a time integration [s].
 *
 * The default is to not limit the step size.
 */
NEW_PROP_TAG(MaxTimeStepSize);

109
110
111
112
113
114
115
116
117
/*!
 * \brief Specify which kind of method should be used to numerically
 * calculate the partial derivatives of the residual.
 *
 * -1 means backward differences, 0 means central differences, 1 means
 * forward differences. By default we use central differences.
 */
NEW_PROP_TAG(NumericDifferenceMethod);

Andreas Lauser's avatar
Andreas Lauser committed
118
/*!
Andreas Lauser's avatar
Andreas Lauser committed
119
 * \brief Specify whether to use the already calculated solutions as
Andreas Lauser's avatar
Andreas Lauser committed
120
121
122
123
124
125
126
127
 *        starting values of the volume variables.
 *
 * This only makes sense if the calculation of the volume variables is
 * very expensive (e.g. for non-linear fugacity functions where the
 * solver converges faster).
 */
NEW_PROP_TAG(EnableHints);

Andreas Lauser's avatar
Andreas Lauser committed
128
// mappers from local to global indices
129

130
//! maper for vertices
Andreas Lauser's avatar
Andreas Lauser committed
131
NEW_PROP_TAG(VertexMapper);
132
//! maper for elements
Andreas Lauser's avatar
Andreas Lauser committed
133
NEW_PROP_TAG(ElementMapper);
134
//! maper for degrees of freedom
Andreas Lauser's avatar
Andreas Lauser committed
135
136
137
138
139
140
141
NEW_PROP_TAG(DofMapper);
}
}

// \}

#endif