Flow123d  release_1.8.2-1603-g0109a2b
richards_lmh.hh
Go to the documentation of this file.
1 /*
2  * richards_lmh.hh
3  *
4  * Created on: Sep 16, 2015
5  * Author: jb
6  */
7 
8 #ifndef SRC_FLOW_RICHARDS_LMH_HH_
9 #define SRC_FLOW_RICHARDS_LMH_HH_
10 
11 #include "flow/darcy_flow_mh.hh"
12 
13 /**
14  * @brief Edge lumped mixed-hybrid solution of unsteady Darcy flow.
15  *
16  * The time term and sources are evenly distributed form an element to its edges.
17  * This applies directly to the second Schur complement. After this system for pressure traces is solved we reconstruct pressures and side flows as follows:
18  *
19  * -# Element pressure is average of edge pressure. This is in fact same as the MH for steady case so we let SchurComplement class do its job.
20  *
21  * -# We let SchurComplement to reconstruct fluxes and then account time term and sources which are evenly distributed from an element to its sides.
22  * It can be proved, that this keeps continuity of the fluxes over the edges.
23  *
24  * This lumping technique preserves discrete maximum principle for any time step provided one use acute mesh. But in practice even worse meshes are tractable.
25  *
26  * Ideas how to unify steady and unsteady flow:
27  * zero_time_step:
28  *
29  * -# Set initial time.
30  * -# Read initial condition. Reconstruct pressures.
31  * -# Assembly system (possibly in matrix free way).
32  * -# Reconstruct velocities (schur complement resolve).
33  * -# Solve iteratively as regular time step if an input flag "steady_initial_time" is set.
34  * -# (Detect that there is no time term. I such case use arbitrary long time step up to next change of data.
35  * Some kind of time step estimator would be nice.
36  *
37  * update solution:
38  *
39  * -# Move to the next time.
40  * -# Update fields
41  * -# Nonlinear solve.
42  * -# In case of slow convergence, use shorter time-step, within estimated limits. Otherwise there is a different problem.
43  */
45 {
46 public:
47 
49 
50  static const Input::Type::Record & get_input_type();
51 protected:
52  /// Registrar of class to factory
53  static const int registrar;
54 
55  void read_initial_condition() override;
56  void modify_system() override;
57  void assembly_source_term() override;
58  void setup_time_term();
59  virtual void postprocess();
60 private:
61 
66  //Vec time_term;
67 };
68 
69 
70 
71 
72 #endif /* SRC_FLOW_RICHARDS_LMH_HH_ */
virtual void postprocess()
postprocess velocity field (add sources)
static const int registrar
Registrar of class to factory.
Definition: richards_lmh.hh:53
Definition: mesh.h:99
DarcyFlowLMH_Unsteady(Mesh &mesh, const Input::Record in_rec)
Definition: richards_lmh.cc:47
void modify_system() override
Mesh & mesh()
Definition: equation.hh:174
Accessor to the data with type Type::Record.
Definition: accessors.hh:277
void read_initial_condition() override
Definition: richards_lmh.cc:79
Edge lumped mixed-hybrid solution of unsteady Darcy flow.
Definition: richards_lmh.hh:44
Mixed-hybrid model of linear Darcy flow, possibly unsteady.
void assembly_source_term() override
Source term is implemented differently in LMH version.
mixed-hybrid model of linear Darcy flow, possibly unsteady.
static const Input::Type::Record & get_input_type()
Definition: richards_lmh.cc:31
Record type proxy class.
Definition: type_record.hh:171