Flow123d
jenkins-Flow123d-windows-release-multijob-285
|
Transport with dispersion implemented using discontinuous Galerkin method. More...
#include <transport_dg.hh>
Classes | |
class | EqData |
Public Types | |
enum | DGVariant { non_symmetric = -1, incomplete = 0, symmetric = 1 } |
Public Member Functions | |
TransportDG (Mesh &init_mesh, const Input::Record &in_rec) | |
Constructor. More... | |
void | zero_time_step () override |
Initialize solution in the zero time. More... | |
void | update_solution () override |
Computes the solution in one time instant. More... | |
virtual void | set_velocity_field (const MH_DofHandler &dh) |
Updates the velocity field which determines some coefficients of the transport equation. More... | |
void | output_data () |
Postprocesses the solution and writes to output file. More... | |
virtual EqData * | get_data () |
Getter for field data. More... | |
~TransportDG () | |
Destructor. More... | |
template<unsigned int dim> | |
void | calculate_velocity (const typename DOFHandlerBase::CellIterator &cell, vector< arma::vec3 > &velocity, FEValuesBase< dim, 3 > &fv) |
Public Member Functions inherited from TransportBase | |
TransportBase (Mesh &mesh, const Input::Record in_rec) | |
virtual | ~TransportBase () |
unsigned int | n_substances () override |
Returns number of trnasported substances. More... | |
SubstanceList & | substances () override |
Returns reference to the vector of substnace names. More... | |
virtual void | set_concentration_vector (Vec &vec) |
Public Member Functions inherited from AdvectionProcessBase | |
AdvectionProcessBase (Mesh &mesh, const Input::Record in_rec) | |
Public Member Functions inherited from EquationBase | |
EquationBase () | |
EquationBase (Mesh &mesh, const Input::Record in_rec) | |
virtual | ~EquationBase () |
virtual void | initialize () |
Initialize fields. More... | |
virtual void | choose_next_time () |
virtual void | set_time_upper_constraint (double dt) |
virtual void | set_time_lower_constraint (double dt) |
TimeGovernor const & | time () |
virtual void | set_time_governor (TimeGovernor &time) |
double | planned_time () |
double | solved_time () |
Mesh & | mesh () |
TimeMark::Type | mark_type () |
FieldSet & | data () |
virtual void | get_solution_vector (double *&vector, unsigned int &size) |
virtual void | get_parallel_solution_vector (Vec &vector) |
Static Public Attributes | |
static Input::Type::Record | input_type |
Declare input record type for the equation TransportDG. More... | |
static Input::Type::Selection | dg_variant_selection_input_type |
Input type for the DG variant selection. More... | |
Static Public Attributes inherited from TransportBase | |
static Input::Type::Record | input_type_output_record |
Static Public Attributes inherited from AdvectionProcessBase | |
static Input::Type::AbstractRecord | input_type |
Common specification of the input record for secondary equations. More... | |
Private Member Functions | |
Model::ModelEqData & | data () |
void | output_vector_gather () |
void | preallocate () |
void | assemble_mass_matrix () |
Assembles the mass matrix. More... | |
template<unsigned int dim> | |
void | assemble_mass_matrix () |
Assembles the mass matrix for the given dimension. More... | |
void | assemble_stiffness_matrix () |
Assembles the stiffness matrix. More... | |
template<unsigned int dim> | |
void | assemble_volume_integrals () |
Assembles the volume integrals into the stiffness matrix. More... | |
void | set_sources () |
Assembles the right hand side due to volume sources. More... | |
template<unsigned int dim> | |
void | set_sources () |
Assembles the right hand side vector due to volume sources. More... | |
template<unsigned int dim> | |
void | assemble_fluxes_boundary () |
Assembles the fluxes on the boundary. More... | |
template<unsigned int dim> | |
void | assemble_fluxes_element_element () |
Assembles the fluxes between elements of the same dimension. More... | |
template<unsigned int dim> | |
void | assemble_fluxes_element_side () |
Assembles the fluxes between elements of different dimensions. More... | |
void | set_boundary_conditions () |
Assembles the r.h.s. components corresponding to the Dirichlet boundary conditions. More... | |
template<unsigned int dim> | |
void | set_boundary_conditions () |
Assembles the r.h.s. components corresponding to the Dirichlet boundary conditions for a given space dimension. More... | |
template<unsigned int dim> | |
void | calculate_velocity (const ElementFullIter &cell, std::vector< arma::vec3 > &velocity, FEValuesBase< dim, 3 > &fv) |
Calculates the velocity field on a given dim dimensional cell. More... | |
void | calculate_dispersivity_tensor (arma::mat33 &K, const arma::vec3 &velocity, double Dm, double alphaL, double alphaT, double porosity, double cross_cut) |
Calculates the dispersivity (diffusivity) tensor from the velocity field. More... | |
void | set_DG_parameters_edge (const Edge &edg, const int s1, const int s2, const int K_size, const std::vector< arma::mat33 > &K1, const std::vector< arma::mat33 > &K2, const std::vector< double > &fluxes, const arma::vec3 &normal_vector, const double alpha1, const double alpha2, double &gamma, double *omega, double &transport_flux) |
Sets up some parameters of the DG method for two sides of an edge. More... | |
void | set_DG_parameters_boundary (const SideIter side, const int K_size, const std::vector< arma::mat33 > &K, const double flux, const arma::vec3 &normal_vector, const double alpha, double &gamma) |
Sets up parameters of the DG method on a given boundary edge. More... | |
void | set_initial_condition () |
Sets the initial condition. More... | |
template<unsigned int dim> | |
void | prepare_initial_condition () |
Assembles the auxiliary linear system to calculate the initial solution as L^2-projection of the prescribed initial condition. More... | |
void | calc_fluxes (vector< vector< double > > &bcd_balance, vector< vector< double > > &bcd_plus_balance, vector< vector< double > > &bcd_minus_balance) |
Calculates flux through boundary of each region. More... | |
template<unsigned int dim> | |
void | calc_fluxes (vector< vector< double > > &bcd_balance, vector< vector< double > > &bcd_plus_balance, vector< vector< double > > &bcd_minus_balance) |
Calculates flux through boundary of each region of specific dimension. More... | |
void | calc_elem_sources (vector< vector< double > > &mass, vector< vector< double > > &src_balance) |
Calculates volume sources for each region. More... | |
template<unsigned int dim> | |
void | calc_elem_sources (vector< vector< double > > &mass, vector< vector< double > > &src_balance) |
Calculates volume sources for each region of specific dimension. More... | |
Private Attributes | |
Physical parameters | |
EqData | data_ |
Field data for model parameters. More... | |
Parameters of the numerical method | |
FEObjects * | feo |
Finite element objects. More... | |
std::vector< std::vector< double > > | gamma |
Penalty parameters. More... | |
int | dg_variant |
DG variant ((non-)symmetric/incomplete. More... | |
unsigned int | dg_order |
Polynomial order of finite elements. More... | |
Solution of algebraic system | |
Vec * | rhs |
Vector of right hand side. More... | |
Mat * | stiffness_matrix |
The stiffness matrix. More... | |
Mat | mass_matrix |
The mass matrix. More... | |
Vec * | mass_vec |
Mass from previous time instant (necessary when coefficients of mass matrix change in time). More... | |
LinSys ** | ls |
Linear algebra system for the transport equation. More... | |
LinSys * | ls_dt |
Linear algebra system for the time derivative (actually it is used only for handling the matrix structures). More... | |
Output to file | |
vector< double * > | output_solution |
Array for storing the output solution data. More... | |
vector< Vec > | output_vec |
Vector of solution data. More... | |
Input::Record | output_rec |
Record with output specification. More... | |
OutputTime * | output_stream |
Auxiliary fields used during assembly | |
vector< double > | mm_coef |
Mass matrix coefficients. More... | |
vector< vector< arma::vec3 > > | ad_coef |
Advection coefficients. More... | |
vector< vector< arma::mat33 > > | dif_coef |
Diffusion coefficients. More... | |
vector< vector< vector< arma::vec3 > > > | ad_coef_edg |
Advection coefficients on edges. More... | |
vector< vector< vector< arma::mat33 > > > | dif_coef_edg |
Diffusion coefficients on edges. More... | |
vector< unsigned int > | subst_idx |
List of indices used to call balance methods for a set of quantities. More... | |
Other | |
bool | allocation_done |
Indicates whether matrices have been preallocated. More... | |
Additional Inherited Members | |
Protected Member Functions inherited from TransportBase | |
const RegionDB * | region_db () |
Returns the region database. More... | |
Protected Attributes inherited from TransportBase | |
unsigned int | n_subst_ |
Number of transported substances. More... | |
SubstanceList | substances_ |
Transported substances. More... | |
const MH_DofHandler * | mh_dh |
boost::shared_ptr< Balance > | balance_ |
(new) object for calculation and writing the mass balance to file. More... | |
Protected Attributes inherited from EquationBase | |
bool | equation_empty_ |
flag is true if only default constructor was called More... | |
Mesh * | mesh_ |
TimeGovernor * | time_ |
Input::Record | input_record_ |
FieldSet * | eq_data_ |
Transport with dispersion implemented using discontinuous Galerkin method.
TransportDG implements the discontinuous Galerkin method for the transport and diffusion of substances. The concentration of the i-th substance is governed by the advection-diffusion equation
where is the fluid velocity and the -dimensional domain, respectively. The hydrodynamic dispersivity tensor is given by:
The molecular dispersivity , as well as the longitudal and transversal dispersivity are input parameters of the model.
For lower dimensions the advection-diffusion equation is multiplied by the fracture cross-cut .
The boundary is divided into three disjoint parts . We prescribe the following boundary conditions:
The transfer of mass through fractures is described by the transmission conditions on :
Here stands for the unit outward normal vector to . The coefficient determines the transfer of mass through fractures due to diffusion.
Definition at line 137 of file transport_dg.hh.
TransportDG< Model >::TransportDG | ( | Mesh & | init_mesh, |
const Input::Record & | in_rec | ||
) |
Constructor.
init_mesh | computational mesh |
in_rec | input record |
Definition at line 249 of file transport_dg.cc.
TransportDG< Model >::~TransportDG | ( | ) |
Destructor.
Definition at line 382 of file transport_dg.cc.
|
private |
Assembles the fluxes on the boundary.
Definition at line 1023 of file transport_dg.cc.
|
private |
Assembles the fluxes between elements of the same dimension.
Definition at line 892 of file transport_dg.cc.
|
private |
Assembles the fluxes between elements of different dimensions.
Definition at line 1116 of file transport_dg.cc.
|
private |
Assembles the mass matrix.
The routine just calls templated method assemble_mass_matrix() for each space dimension.
Definition at line 663 of file transport_dg.cc.
|
private |
Assembles the mass matrix for the given dimension.
|
private |
Assembles the stiffness matrix.
This routine just calls assemble_volume_integrals(), assemble_fluxes_boundary(), assemble_fluxes_element_element() and assemble_fluxes_element_side() for each space dimension.
Definition at line 728 of file transport_dg.cc.
|
private |
Assembles the volume integrals into the stiffness matrix.
Definition at line 761 of file transport_dg.cc.
|
private |
Calculates volume sources for each region.
This method actually calls calc_elem_sources<dim>() for each space dimension.
mass | Vector of substance mass per region. |
src_balance | Vector of sources per region. |
Definition at line 1728 of file transport_dg.cc.
|
private |
Calculates volume sources for each region of specific dimension.
mass | Vector of substance mass per region. |
src_balance | Vector of sources per region. |
|
private |
Calculates flux through boundary of each region.
This actually calls calc_fluxes<dim>() for each space dimension.
bcd_balance | Total fluxes. |
bcd_plus_balance | Incoming fluxes. |
bcd_minus_balance | Outgoing fluxes. |
Definition at line 1629 of file transport_dg.cc.
|
private |
Calculates flux through boundary of each region of specific dimension.
bcd_balance | Total fluxes. |
bcd_plus_balance | Incoming fluxes. |
bcd_minus_balance | Outgoing fluxes. |
|
private |
Calculates the dispersivity (diffusivity) tensor from the velocity field.
K | The computed dispersivity tensor. |
velocity | The velocity field (at quadrature points). |
Dm | Molecular diffusivities. |
alphaL | Longitudal dispersivities. |
alphaT | Transversal dispersivities. |
porosity | Porosities. |
cross_cut | Cross-cuts of higher dimension. |
|
private |
Calculates the velocity field on a given dim
dimensional cell.
cell | The cell. |
velocity | The computed velocity field (at quadrature points). |
fv | The FEValues class providing the quadrature points and the shape functions for velocity. |
void TransportDG< Model >::calculate_velocity | ( | const typename DOFHandlerBase::CellIterator & | cell, |
vector< arma::vec3 > & | velocity, | ||
FEValuesBase< dim, 3 > & | fv | ||
) |
Definition at line 1389 of file transport_dg.cc.
|
inlineprivate |
Definition at line 235 of file transport_dg.hh.
|
inlinevirtual |
Getter for field data.
Definition at line 226 of file transport_dg.hh.
|
virtual |
Postprocesses the solution and writes to output file.
Reimplemented from EquationBase.
Definition at line 643 of file transport_dg.cc.
|
private |
Definition at line 415 of file transport_dg.cc.
|
private |
Definition at line 467 of file transport_dg.cc.
|
private |
Assembles the auxiliary linear system to calculate the initial solution as L^2-projection of the prescribed initial condition.
Definition at line 1578 of file transport_dg.cc.
|
private |
Assembles the r.h.s. components corresponding to the Dirichlet boundary conditions.
The routine just calls templated method set_boundary_condition() for each space dimension.
Definition at line 1230 of file transport_dg.cc.
|
private |
Assembles the r.h.s. components corresponding to the Dirichlet boundary conditions for a given space dimension.
|
private |
Sets up parameters of the DG method on a given boundary edge.
Assumption is that the edge consists of only 1 side.
side | The boundary side. |
K_size | Size of vector of tensors K. |
K | Dispersivity tensor. |
ad_vector | Advection vector. |
normal_vector | Normal vector (assumed constant along the edge). |
alpha | Penalty parameter that influences the continuity of the solution (large value=more continuity). |
gamma | Computed penalty parameters. |
Definition at line 1518 of file transport_dg.cc.
|
private |
Sets up some parameters of the DG method for two sides of an edge.
edg | The edge. |
s1 | Side 1. |
s2 | Side 2. |
K_size | Size of vector of tensors K. |
K1 | Dispersivity tensors on side s1 (in quadrature points). |
K2 | Dispersivity tensors on side s2 (in quadrature points). |
normal_vector | Normal vector to side 0 of the neighbour (assumed constant along the side). |
alpha1,alpha2 | Penalty parameter that influences the continuity of the solution (large value=more continuity). |
gamma | Computed penalty parameters. |
omega | Computed weights. |
transport_flux | Computed flux from side s1 to side s2. |
Definition at line 1416 of file transport_dg.cc.
|
private |
Sets the initial condition.
Definition at line 1553 of file transport_dg.cc.
|
private |
Assembles the right hand side due to volume sources.
This method just calls set_sources() for each space dimension.
Definition at line 815 of file transport_dg.cc.
Assembles the right hand side vector due to volume sources.
|
virtual |
Updates the velocity field which determines some coefficients of the transport equation.
dh | mixed hybrid dof handler |
(So far it does not work since the flow module returns a vector of zeros.)
velocity_vector | Input array of velocity values. |
Reimplemented from TransportBase.
Definition at line 631 of file transport_dg.cc.
|
overridevirtual |
Computes the solution in one time instant.
Reimplemented from EquationBase.
Definition at line 491 of file transport_dg.cc.
|
overridevirtual |
Initialize solution in the zero time.
Reimplemented from EquationBase.
Definition at line 435 of file transport_dg.cc.
|
private |
Advection coefficients.
Definition at line 521 of file transport_dg.hh.
|
private |
Advection coefficients on edges.
Definition at line 525 of file transport_dg.hh.
|
private |
Indicates whether matrices have been preallocated.
Definition at line 540 of file transport_dg.hh.
|
private |
Field data for model parameters.
Definition at line 449 of file transport_dg.hh.
|
private |
Polynomial order of finite elements.
Definition at line 467 of file transport_dg.hh.
|
private |
DG variant ((non-)symmetric/incomplete.
Definition at line 464 of file transport_dg.hh.
|
static |
Input type for the DG variant selection.
Definition at line 196 of file transport_dg.hh.
|
private |
Diffusion coefficients.
Definition at line 523 of file transport_dg.hh.
|
private |
Diffusion coefficients on edges.
Definition at line 527 of file transport_dg.hh.
|
private |
Finite element objects.
Definition at line 458 of file transport_dg.hh.
|
private |
Penalty parameters.
Definition at line 461 of file transport_dg.hh.
|
static |
Declare input record type for the equation TransportDG.
Definition at line 191 of file transport_dg.hh.
|
private |
Linear algebra system for the transport equation.
Definition at line 489 of file transport_dg.hh.
|
private |
Linear algebra system for the time derivative (actually it is used only for handling the matrix structures).
Definition at line 492 of file transport_dg.hh.
|
private |
The mass matrix.
Definition at line 483 of file transport_dg.hh.
|
private |
Mass from previous time instant (necessary when coefficients of mass matrix change in time).
Definition at line 486 of file transport_dg.hh.
|
private |
Mass matrix coefficients.
Definition at line 519 of file transport_dg.hh.
|
private |
Record with output specification.
Definition at line 507 of file transport_dg.hh.
|
private |
Array for storing the output solution data.
Definition at line 501 of file transport_dg.hh.
|
private |
Definition at line 509 of file transport_dg.hh.
|
private |
Vector of solution data.
Definition at line 504 of file transport_dg.hh.
|
private |
Vector of right hand side.
Definition at line 477 of file transport_dg.hh.
|
private |
The stiffness matrix.
Definition at line 480 of file transport_dg.hh.
|
private |
List of indices used to call balance methods for a set of quantities.
Definition at line 529 of file transport_dg.hh.