Flow123d  3.9.0-9663d1cde
hc_explicit_sequential.hh
Go to the documentation of this file.
1 /*!
2  *
3  * Copyright (C) 2015 Technical University of Liberec. All rights reserved.
4  *
5  * This program is free software; you can redistribute it and/or modify it under
6  * the terms of the GNU General Public License version 3 as published by the
7  * Free Software Foundation. (http://www.gnu.org/licenses/gpl-3.0.en.html)
8  *
9  * This program is distributed in the hope that it will be useful, but WITHOUT
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11  * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
12  *
13  *
14  * @file hc_explicit_sequential.hh
15  * @brief
16  * @author Jan Brezina
17  */
18 
19 #ifndef HC_EXPLICIT_SEQUENTIAL_HH_
20 #define HC_EXPLICIT_SEQUENTIAL_HH_
21 
22 #include <memory>
23 #include <string>
24 #include <vector>
27 #include "coupling/equation.hh"
28 
29 class DarcyFlowInterface;
30 class Mesh;
32 class FieldCommon;
33 
34 
35 /**
36  * TODO: should be derived from EquationBase in order to chain couplings
37  */
38 class CouplingBase : public EquationBase {
39 public:
41 
42 };
43 
44 
45 /**
46  * @brief Class for solution of steady or unsteady flow with sequentially coupled explicit transport.
47  *
48  */
50 public:
51  static const Input::Type::Record & get_input_type();
52 
54  void run_simulation();
56 
57 private:
58  typedef std::shared_ptr<AdvectionProcessBase> AdvectionPtr;
59 
60  struct AdvectionData {
62  : process(p), velocity_changed(false), velocity_time(0.0)
63  {}
64 
67  double velocity_time;
68  };
69 
70  /**
71  * Create an advection process for given input key.
72  */
73  AdvectionPtr make_advection_process(std::string process_key);
74 
75  /**
76  * Perform a single time step of given advection process.
77  */
79 
80  /**
81  * Perform a single time step of flow model.
82  * Test if flow solution at @p requested_time is already available.
83  */
84  void flow_step(double requested_time);
85 
86  static const int registrar;
87 
88  ///
90 
91  /// mesh common to darcy flow and transport
93 
94  /// steady or unsteady water flow simulator based on MH scheme
95  std::shared_ptr<DarcyFlowInterface> water;
96 
97  /// solute transport with chemistry through operator splitting
99 
100  ///
102 
104 
107 };
108 
109 #endif /* HC_EXPLICIT_SEQUENTIAL_HH_ */
HC_ExplicitSequential::HC_ExplicitSequential
HC_ExplicitSequential(Input::Record in_record)
Definition: hc_explicit_sequential.cc:120
CouplingBase::get_input_type
static Input::Type::Abstract & get_input_type()
Definition: hc_explicit_sequential.cc:53
HC_ExplicitSequential::is_end_all_
bool is_end_all_
Definition: hc_explicit_sequential.hh:103
HC_ExplicitSequential::advection_process_step
void advection_process_step(AdvectionData &pdata)
Definition: hc_explicit_sequential.cc:165
HC_ExplicitSequential::water_content_p0_
FieldCommon * water_content_p0_
Definition: hc_explicit_sequential.hh:106
std::vector
Definition: doxy_dummy_defs.hh:7
HC_ExplicitSequential::water
std::shared_ptr< DarcyFlowInterface > water
steady or unsteady water flow simulator based on MH scheme
Definition: hc_explicit_sequential.hh:95
HC_ExplicitSequential::in_record_
Input::Record in_record_
Definition: hc_explicit_sequential.hh:89
input_type_forward.hh
HC_ExplicitSequential::AdvectionPtr
std::shared_ptr< AdvectionProcessBase > AdvectionPtr
Definition: hc_explicit_sequential.hh:58
HC_ExplicitSequential::min_velocity_time
double min_velocity_time
Definition: hc_explicit_sequential.hh:101
HC_ExplicitSequential::mesh
Mesh * mesh
mesh common to darcy flow and transport
Definition: hc_explicit_sequential.hh:92
HC_ExplicitSequential::registrar
static const int registrar
Definition: hc_explicit_sequential.hh:86
HC_ExplicitSequential::AdvectionData
Definition: hc_explicit_sequential.hh:60
HC_ExplicitSequential::make_advection_process
AdvectionPtr make_advection_process(std::string process_key)
Definition: hc_explicit_sequential.cc:84
Input::Record
Accessor to the data with type Type::Record.
Definition: accessors.hh:291
AdvectionProcessBase
Definition: advection_process_base.hh:19
HC_ExplicitSequential::processes_
std::vector< AdvectionData > processes_
solute transport with chemistry through operator splitting
Definition: hc_explicit_sequential.hh:98
HC_ExplicitSequential::water_content_saturated_
FieldCommon * water_content_saturated_
Definition: hc_explicit_sequential.hh:105
FieldCommon
Common abstract parent of all Field<...> classes.
Definition: field_common.hh:76
Input::Type::Abstract
Class for declaration of polymorphic Record.
Definition: type_abstract.hh:62
HC_ExplicitSequential::~HC_ExplicitSequential
~HC_ExplicitSequential()
Definition: hc_explicit_sequential.cc:295
CouplingBase
Definition: hc_explicit_sequential.hh:38
HC_ExplicitSequential::AdvectionData::velocity_changed
bool velocity_changed
Definition: hc_explicit_sequential.hh:66
equation.hh
Abstract base class for equation clasess.
EquationBase
Definition: equation.hh:56
Input::Type::Record
Record type proxy class.
Definition: type_record.hh:182
Mesh
Definition: mesh.h:361
HC_ExplicitSequential::run_simulation
void run_simulation()
Definition: hc_explicit_sequential.cc:217
HC_ExplicitSequential::AdvectionData::velocity_time
double velocity_time
Definition: hc_explicit_sequential.hh:67
accessors_forward.hh
HC_ExplicitSequential
Class for solution of steady or unsteady flow with sequentially coupled explicit transport.
Definition: hc_explicit_sequential.hh:49
HC_ExplicitSequential::get_input_type
static const Input::Type::Record & get_input_type()
Definition: hc_explicit_sequential.cc:59
HC_ExplicitSequential::flow_step
void flow_step(double requested_time)
Definition: hc_explicit_sequential.cc:190
HC_ExplicitSequential::AdvectionData::process
AdvectionPtr process
Definition: hc_explicit_sequential.hh:65
HC_ExplicitSequential::AdvectionData::AdvectionData
AdvectionData(AdvectionPtr p)
Definition: hc_explicit_sequential.hh:61
DarcyFlowInterface
Definition: darcy_flow_interface.hh:15