Flow123d  3.9.0-be1f591da
assembly_reaction.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 assembly_reaction.hh
15  * @brief
16  */
17 
18 #ifndef ASSEMBLY_REACTION_HH_
19 #define ASSEMBLY_REACTION_HH_
20 
24 #include "reaction/isotherm.hh"
25 #include "fem/fe_p.hh"
26 #include "fem/fe_values.hh"
28 //#include "coupling/balance.hh"
30 
31 
32 
33 template <unsigned int dim>
35 {
36 public:
37  typedef typename DualPorosity::EqFields EqFields;
38  typedef typename DualPorosity::EqData EqData;
39 
40  static constexpr const char * name() { return "InitConditionAssemblyDp"; }
41 
42  /// Constructor.
43  InitConditionAssemblyDp(EqFields *eq_fields, EqData *eq_data)
44  : AssemblyBase<dim>(0), eq_fields_(eq_fields), eq_data_(eq_data) {
47  }
48 
49  /// Destructor.
51 
52  /// Initialize auxiliary vectors and other data members
53  void initialize(ElementCacheMap *element_cache_map) {
54  //this->balance_ = eq_data_->balance_;
55  this->element_cache_map_ = element_cache_map;
56  }
57 
58 
59  /// Assemble integral over element
60  inline void cell_integral(DHCellAccessor cell, unsigned int element_patch_idx)
61  {
62  ASSERT_EQ(cell.dim(), dim).error("Dimension of element mismatch!");
63 
64  dof_p0_ = cell.get_loc_dof_indices()[0];
65  auto p = *( this->bulk_points(element_patch_idx).begin() );
66 
67  //setting initial solid concentration for substances involved in adsorption
68  for (unsigned int sbi = 0; sbi < eq_data_->substances_.size(); sbi++)
69  {
70  eq_fields_->conc_immobile_fe[sbi]->vec().set( dof_p0_, eq_fields_->init_conc_immobile[sbi](p) );
71  }
72  }
73 
74 
75 private:
76  /// Data objects shared with Elasticity
79 
80  /// Sub field set contains fields used in calculation.
82 
83  IntIdx dof_p0_; ///< Index of local DOF
84 
85  template < template<IntDim...> class DimAssembly>
86  friend class GenericAssembly;
87 };
88 
89 template <unsigned int dim>
90 class ReactionAssemblyDp : public AssemblyBase<dim>
91 {
92 public:
93  typedef typename DualPorosity::EqFields EqFields;
94  typedef typename DualPorosity::EqData EqData;
95 
96  static constexpr const char * name() { return "InitConditionAssemblyDp"; }
97 
98  /// Constructor.
99  ReactionAssemblyDp(EqFields *eq_fields, EqData *eq_data)
100  : AssemblyBase<dim>(0), eq_fields_(eq_fields), eq_data_(eq_data) {
102  this->used_fields_ += eq_fields_->porosity;
105  }
106 
107  /// Destructor.
109 
110  /// Initialize auxiliary vectors and other data members
111  void initialize(ElementCacheMap *element_cache_map) {
112  //this->balance_ = eq_data_->balance_;
113  this->element_cache_map_ = element_cache_map;
114  }
115 
116 
117  /// Assemble integral over element
118  inline void cell_integral(DHCellAccessor cell, unsigned int element_patch_idx)
119  {
120  ASSERT_EQ(cell.dim(), dim).error("Dimension of element mismatch!");
121 
122  auto p = *( this->bulk_points(element_patch_idx).begin() );
123 
124  // if porosity_immobile == 0 then mobile concentration stays the same
125  // and immobile concentration cannot change
127  if (por_immob_ == 0.0) return;
128 
129  // get data from fields
130  dof_p0_ = cell.get_loc_dof_indices()[0];
132  arma::Col<double> diff_vec(eq_data_->substances_.size());
133  for (sbi_=0; sbi_<eq_data_->substances_.size(); sbi_++) // Optimize: SWAP LOOPS
134  diff_vec[sbi_] = eq_fields_->diffusion_rate_immobile[sbi_](p);
135 
137 
138  for (sbi_ = 0; sbi_ < eq_data_->substances_.size(); sbi_++) //over all substances
139  {
140  exponent_ = diff_vec[sbi_] * temp_exponent_;
141  //previous values
144 
145  // ---compute average concentration------------------------------------------
147  / (por_mob_ + por_immob_);
148 
150 
151  // the following 2 conditions guarantee:
152  // 1) stability of forward Euler's method
153  // 2) the error of forward Euler's method will not be large
154  if(eq_data_->time_->dt() <= por_mob_*por_immob_/(max(diff_vec)*(por_mob_+por_immob_)) &&
156  {
158  // ---compute concentration in mobile area
160 
161  // ---compute concentration in immobile area
163  }
164  else //analytic solution
165  {
166  temp_ = exp(-exponent_);
167  // ---compute concentration in mobile area
169 
170  // ---compute concentration in immobile area
172  }
173 
176  }
177  }
178 
179 
180 private:
181  /// Data objects shared with Elasticity
184 
185  /// Sub field set contains fields used in calculation.
187 
188  unsigned int sbi_; ///< Index of substance
189  IntIdx dof_p0_; ///< Index of local DOF
190  double conc_average_; ///< weighted (by porosity) average of concentration
191  double conc_mob_, conc_immob_; ///< new mobile and immobile concentration
192  double previous_conc_mob_, previous_conc_immob_; ///< mobile and immobile concentration in previous time step
193  double conc_max_; ///< difference between concentration and average concentration
194  double por_mob_, por_immob_; ///< mobile and immobile porosity
195  double exponent_, temp_exponent_, temp_; ///< Precomputed values
196 
197  template < template<IntDim...> class DimAssembly>
198  friend class GenericAssembly;
199 };
200 
201 template <unsigned int dim>
203 {
204 public:
206  typedef typename SorptionBase::EqData EqData;
207 
208  static constexpr const char * name() { return "InitConditionAssemblySorp"; }
209 
210  /// Constructor.
212  : AssemblyBase<dim>(0), eq_fields_(eq_fields), eq_data_(eq_data) {
215  }
216 
217  /// Destructor.
219 
220  /// Initialize auxiliary vectors and other data members
221  void initialize(ElementCacheMap *element_cache_map) {
222  //this->balance_ = eq_data_->balance_;
223  this->element_cache_map_ = element_cache_map;
224  }
225 
226 
227  /// Assemble integral over element
228  inline void cell_integral(DHCellAccessor cell, unsigned int element_patch_idx)
229  {
230  ASSERT_EQ(cell.dim(), dim).error("Dimension of element mismatch!");
231 
232  dof_p0_ = cell.get_loc_dof_indices()[0];
233  auto p = *( this->bulk_points(element_patch_idx).begin() );
234 
235  //setting initial solid concentration for substances involved in adsorption
236  for (unsigned int sbi = 0; sbi < eq_data_->n_substances_; sbi++)
237  {
239  }
240  }
241 
242 
243 private:
244  /// Data objects shared with Elasticity
247 
248  /// Sub field set contains fields used in calculation.
250 
251  IntIdx dof_p0_; ///< Index of local DOF
252 
253  template < template<IntDim...> class DimAssembly>
254  friend class GenericAssembly;
255 };
256 
257 template <unsigned int dim>
259 {
260 public:
262  typedef typename SorptionBase::EqData EqData;
263 
264  static constexpr const char * name() { return "ReactionAssemblySorp"; }
265 
266  /// Constructor.
267  ReactionAssemblySorp(EqFields *eq_fields, EqData *eq_data)
268  : AssemblyBase<dim>(0), eq_fields_(eq_fields), eq_data_(eq_data) {
276  }
277 
278  /// Destructor.
280 
281  /// Initialize auxiliary vectors and other data members
282  void initialize(ElementCacheMap *element_cache_map) {
283  //this->balance_ = eq_data_->balance_;
284  this->element_cache_map_ = element_cache_map;
285  }
286 
287 
288  /// Assemble integral over element
289  inline void cell_integral(DHCellAccessor cell, unsigned int element_patch_idx)
290  {
291  ASSERT_EQ(cell.dim(), dim).error("Dimension of element mismatch!");
292 
293  unsigned int i_subst, subst_id;
294  auto p = *( this->bulk_points(element_patch_idx).begin() );
295 
296  reg_idx_ = cell.elm().region().bulk_idx();
297  dof_p0_ = cell.get_loc_dof_indices()[0];
298 
299  double scale_aqua = eq_fields_->scale_aqua(p);
300  double scale_sorbed = eq_fields_->scale_sorbed(p);
301  double no_sorbing_surface_cond = eq_fields_->no_sorbing_surface_cond(p);
302 
303  for(i_subst = 0; i_subst < eq_data_->n_substances_; i_subst++)
304  {
305  subst_id = eq_data_->substance_global_idx_[i_subst];
306 
307  Isotherm & isotherm = eq_data_->isotherms[reg_idx_][i_subst];
308 
309  bool limited_solubility_on = eq_data_->solubility_vec_[i_subst] > 0.0;
310 
311  // in case of no sorbing surface, set isotherm type None
312  if( no_sorbing_surface_cond <= std::numeric_limits<double>::epsilon())
313  {
315  scale_aqua, scale_sorbed,
316  0,0,0);
317  } else {
318  if ( scale_sorbed <= 0.0)
319  THROW( SorptionBase::ExcNotPositiveScaling() << SorptionBase::EI_Subst(i_subst) );
320 
321  isotherm.reinit(Isotherm::SorptionType(eq_fields_->sorption_type[i_subst](p)),
322  limited_solubility_on, eq_data_->solvent_density_,
323  scale_aqua, scale_sorbed,
324  eq_data_->solubility_vec_[i_subst],
326  eq_fields_->isotherm_other[i_subst](p));
327  }
328 
329  double c_aqua = eq_fields_->conc_mobile_fe[subst_id]->vec().get(dof_p0_);
330  double c_sorbed = eq_fields_->conc_solid_fe[subst_id]->vec().get(dof_p0_);
331  isotherm.compute(c_aqua, c_sorbed);
332  eq_fields_->conc_mobile_fe[subst_id]->vec().set(dof_p0_, c_aqua);
333  eq_fields_->conc_solid_fe[subst_id]->vec().set(dof_p0_, c_sorbed);
334 
335  // update maximal concentration per region (optimization for interpolation)
336  if(eq_data_->table_limit_[i_subst] < 0)
337  eq_data_->max_conc[reg_idx_][i_subst] = std::max(eq_data_->max_conc[reg_idx_][i_subst],
338  eq_fields_->conc_mobile_fe[subst_id]->vec().get(dof_p0_));
339  }
340  }
341 
342 
343 private:
344  /// Data objects shared with Elasticity
347 
348  /// Sub field set contains fields used in calculation.
350 
351  IntIdx dof_p0_; ///< Index of local DOF
352  int reg_idx_; ///< Bulk region idx
353  //unsigned int sbi_; ///< Index of substance
354 
355  template < template<IntDim...> class DimAssembly>
356  friend class GenericAssembly;
357 };
358 
359 #endif /* ASSEMBLY_REACTION_HH_ */
360 
SorptionBase::EqFields::sorption_type
MultiField< 3, FieldValue< 3 >::Enum > sorption_type
Discrete need Selection for initialization.
Definition: sorption_base.hh:94
ReactionAssemblySorp::~ReactionAssemblySorp
~ReactionAssemblySorp()
Destructor.
Definition: assembly_reaction.hh:279
DualPorosity::EqFields::diffusion_rate_immobile
MultiField< 3, FieldValue< 3 >::Scalar > diffusion_rate_immobile
Mass transfer coefficients between mobile and immobile pores.
Definition: dual_porosity.hh:71
InitConditionAssemblyDp::used_fields_
FieldSet used_fields_
Sub field set contains fields used in calculation.
Definition: assembly_reaction.hh:81
ReactionAssemblyDp::sbi_
unsigned int sbi_
Index of substance.
Definition: assembly_reaction.hh:188
InitConditionAssemblyDp::EqData
DualPorosity::EqData EqData
Definition: assembly_reaction.hh:38
InitConditionAssemblySorp::used_fields_
FieldSet used_fields_
Sub field set contains fields used in calculation.
Definition: assembly_reaction.hh:249
ReactionAssemblyDp::name
static constexpr const char * name()
Definition: assembly_reaction.hh:96
SorptionBase::EqFields::conc_solid_fe
FieldFEScalarVec conc_solid_fe
Underlaying FieldFE for each substance of conc_solid.
Definition: sorption_base.hh:107
TimeGovernor::dt
double dt() const
Definition: time_governor.hh:565
InitConditionAssemblyDp::EqFields
DualPorosity::EqFields EqFields
Definition: assembly_reaction.hh:37
SorptionBase::EqFields::no_sorbing_surface_cond
Field< 3, FieldValue< 3 >::Scalar > no_sorbing_surface_cond
Definition: sorption_base.hh:118
ReactionAssemblyDp::dof_p0_
IntIdx dof_p0_
Index of local DOF.
Definition: assembly_reaction.hh:189
ReactionAssemblyDp::initialize
void initialize(ElementCacheMap *element_cache_map)
Initialize auxiliary vectors and other data members.
Definition: assembly_reaction.hh:111
SorptionBase::EqFields::distribution_coefficient
MultiField< 3, FieldValue< 3 >::Scalar > distribution_coefficient
Multiplication coefficients (k, omega) for all types of isotherms.
Definition: sorption_base.hh:99
ReactionAssemblyDp::previous_conc_mob_
double previous_conc_mob_
Definition: assembly_reaction.hh:192
SorptionBase::EqData::isotherms
std::vector< std::vector< Isotherm > > isotherms
Definition: sorption_base.hh:159
ReactionAssemblySorp::cell_integral
void cell_integral(DHCellAccessor cell, unsigned int element_patch_idx)
Assemble integral over element.
Definition: assembly_reaction.hh:289
DualPorosity::EqData::scheme_tolerance_
double scheme_tolerance_
Dual porosity computational scheme tolerance.
Definition: dual_porosity.hh:98
SubstanceList::size
unsigned int size() const
Definition: substance.hh:87
ReactionAssemblyDp
Definition: assembly_reaction.hh:90
ReactionAssemblyDp::cell_integral
void cell_integral(DHCellAccessor cell, unsigned int element_patch_idx)
Assemble integral over element.
Definition: assembly_reaction.hh:118
InitConditionAssemblySorp
Definition: assembly_reaction.hh:202
SorptionBase::EqData::n_substances_
unsigned int n_substances_
number of substances that take part in the sorption mode
Definition: sorption_base.hh:134
ReactionAssemblySorp::ReactionAssemblySorp
ReactionAssemblySorp(EqFields *eq_fields, EqData *eq_data)
Constructor.
Definition: assembly_reaction.hh:267
InitConditionAssemblySorp::eq_fields_
EqFields * eq_fields_
Data objects shared with Elasticity.
Definition: assembly_reaction.hh:245
ElementCacheMap
Directing class of FieldValueCache.
Definition: field_value_cache.hh:151
IntIdx
int IntIdx
Definition: index_types.hh:25
InitConditionAssemblyDp::dof_p0_
IntIdx dof_p0_
Index of local DOF.
Definition: assembly_reaction.hh:83
fe_values.hh
Class FEValues calculates finite element data on the actual cells such as shape function values,...
InitConditionAssemblyDp::eq_fields_
EqFields * eq_fields_
Data objects shared with Elasticity.
Definition: assembly_reaction.hh:77
THROW
#define THROW(whole_exception_expr)
Wrapper for throw. Saves the throwing point.
Definition: exceptions.hh:53
ReactionAssemblySorp::initialize
void initialize(ElementCacheMap *element_cache_map)
Initialize auxiliary vectors and other data members.
Definition: assembly_reaction.hh:282
DualPorosity::EqFields::init_conc_immobile
MultiField< 3, FieldValue< 3 >::Scalar > init_conc_immobile
Initial concentrations in the immobile zone.
Definition: dual_porosity.hh:74
DHCellAccessor::dim
unsigned int dim() const
Return dimension of element appropriate to cell.
Definition: dh_cell_accessor.hh:101
DualPorosity::EqFields::conc_immobile_fe
FieldFEScalarVec conc_immobile_fe
Underlaying FieldFE for each substance of conc_immobile.
Definition: dual_porosity.hh:79
InitConditionAssemblyDp
Definition: assembly_reaction.hh:34
InitConditionAssemblyDp::initialize
void initialize(ElementCacheMap *element_cache_map)
Initialize auxiliary vectors and other data members.
Definition: assembly_reaction.hh:53
ReactionAssemblySorp::eq_fields_
EqFields * eq_fields_
Data objects shared with Elasticity.
Definition: assembly_reaction.hh:345
assembly_base.hh
SorptionBase::EqFields
Definition: sorption_base.hh:83
fe_p.hh
Definitions of basic Lagrangean finite elements with polynomial shape functions.
Isotherm::compute
void compute(double &c_aqua, double &c_sorbed)
Definition: isotherm.cc:68
SorptionBase::EqFields::isotherm_other
MultiField< 3, FieldValue< 3 >::Scalar > isotherm_other
Langmuir sorption coeficients alpha (in fraction c_s = omega * (alpha*c_a)/(1- alpha*c_a)).
Definition: sorption_base.hh:101
Isotherm::SorptionType
SorptionType
Type of adsorption isotherm.
Definition: isotherm.hh:174
SorptionBase::EqFields::init_conc_solid
MultiField< 3, FieldValue< 3 >::Scalar > init_conc_solid
Initial sorbed concentrations.
Definition: sorption_base.hh:103
DualPorosity::EqData::time_
TimeGovernor * time_
TimeGovernor object shared with assembly classes.
Definition: dual_porosity.hh:101
InitConditionAssemblySorp::name
static constexpr const char * name()
Definition: assembly_reaction.hh:208
SorptionBase::EqData::table_limit_
std::vector< double > table_limit_
Definition: sorption_base.hh:147
Isotherm::none
@ none
Definition: isotherm.hh:175
ReactionAssemblyDp::conc_max_
double conc_max_
difference between concentration and average concentration
Definition: assembly_reaction.hh:193
ReactionAssemblyDp::eq_data_
EqData * eq_data_
Definition: assembly_reaction.hh:183
SorptionBase::EqData
DualPorosity data.
Definition: sorption_base.hh:124
ReactionAssemblySorp
Definition: assembly_reaction.hh:258
InitConditionAssemblyDp::InitConditionAssemblyDp
InitConditionAssemblyDp(EqFields *eq_fields, EqData *eq_data)
Constructor.
Definition: assembly_reaction.hh:43
InitConditionAssemblySorp::EqFields
SorptionBase::EqFields EqFields
Definition: assembly_reaction.hh:205
DualPorosity::EqData
DualPorosity data.
Definition: dual_porosity.hh:87
ReactionAssemblyDp::eq_fields_
EqFields * eq_fields_
Data objects shared with Elasticity.
Definition: assembly_reaction.hh:182
generic_assembly.hh
quadrature_lib.hh
Definitions of particular quadrature rules on simplices.
ReactionAssemblyDp::ReactionAssemblyDp
ReactionAssemblyDp(EqFields *eq_fields, EqData *eq_data)
Constructor.
Definition: assembly_reaction.hh:99
ReactionAssemblyDp::por_immob_
double por_immob_
mobile and immobile porosity
Definition: assembly_reaction.hh:194
ReactionAssemblyDp::previous_conc_immob_
double previous_conc_immob_
mobile and immobile concentration in previous time step
Definition: assembly_reaction.hh:192
ReactionAssemblyDp::temp_exponent_
double temp_exponent_
Definition: assembly_reaction.hh:195
SorptionBase::EqData::substance_global_idx_
std::vector< unsigned int > substance_global_idx_
Mapping from local indexing of substances to global.
Definition: sorption_base.hh:132
DHCellAccessor::elm
const ElementAccessor< 3 > elm() const
Return ElementAccessor to element of loc_ele_idx_.
Definition: dh_cell_accessor.hh:71
ReactionAssemblyDp::~ReactionAssemblyDp
~ReactionAssemblyDp()
Destructor.
Definition: assembly_reaction.hh:108
DualPorosity::EqFields::porosity_immobile
Field< 3, FieldValue< 3 >::Scalar > porosity_immobile
Immobile porosity field.
Definition: dual_porosity.hh:72
InitConditionAssemblySorp::initialize
void initialize(ElementCacheMap *element_cache_map)
Initialize auxiliary vectors and other data members.
Definition: assembly_reaction.hh:221
ReactionAssemblyDp::conc_mob_
double conc_mob_
Definition: assembly_reaction.hh:191
ASSERT_EQ
#define ASSERT_EQ(a, b)
Definition of comparative assert macro (EQual) only for debug mode.
Definition: asserts.hh:333
ReactionAssemblySorp::name
static constexpr const char * name()
Definition: assembly_reaction.hh:264
isotherm.hh
FieldSet
Container for various descendants of FieldCommonBase.
Definition: field_set.hh:159
DualPorosity::EqFields::porosity
Field< 3, FieldValue< 3 >::Scalar > porosity
Porosity field.
Definition: dual_porosity.hh:76
InitConditionAssemblySorp::InitConditionAssemblySorp
InitConditionAssemblySorp(EqFields *eq_fields, EqData *eq_data)
Constructor.
Definition: assembly_reaction.hh:211
SorptionBase::EqData::solubility_vec_
std::vector< double > solubility_vec_
Definition: sorption_base.hh:143
SorptionBase::EqData::max_conc
std::vector< std::vector< double > > max_conc
Definition: sorption_base.hh:152
ReactionAssemblySorp::reg_idx_
int reg_idx_
Bulk region idx.
Definition: assembly_reaction.hh:352
ReactionAssemblyDp::EqFields
DualPorosity::EqFields EqFields
Definition: assembly_reaction.hh:93
AssemblyBase::bulk_points
Range< BulkPoint > bulk_points(unsigned int element_patch_idx) const
Return BulkPoint range of appropriate dimension.
Definition: assembly_base.hh:104
ReactionAssemblySorp::EqData
SorptionBase::EqData EqData
Definition: assembly_reaction.hh:262
InitConditionAssemblySorp::eq_data_
EqData * eq_data_
Definition: assembly_reaction.hh:246
DualPorosity::EqFields
DualPorosity fields.
Definition: dual_porosity.hh:64
bulk
@ bulk
Definition: generic_assembly.hh:33
dual_porosity.hh
Class Dual_por_exchange implements the model of dual porosity.
DHCellAccessor
Cell accessor allow iterate over DOF handler cells.
Definition: dh_cell_accessor.hh:43
ReactionAssemblyDp::conc_average_
double conc_average_
weighted (by porosity) average of concentration
Definition: assembly_reaction.hh:190
InitConditionAssemblyDp::~InitConditionAssemblyDp
~InitConditionAssemblyDp()
Destructor.
Definition: assembly_reaction.hh:50
InitConditionAssemblySorp::dof_p0_
IntIdx dof_p0_
Index of local DOF.
Definition: assembly_reaction.hh:251
ElementAccessor::region
Region region() const
Definition: accessors.hh:198
field_value_cache.hh
Isotherm
Definition: isotherm.hh:158
AssemblyBase::active_integrals_
int active_integrals_
Holds mask of active integrals.
Definition: assembly_base.hh:191
SorptionBase::EqFields::scale_aqua
Field< 3, FieldValue< 3 >::Scalar > scale_aqua
Instances of FieldModel used in assembly methods.
Definition: sorption_base.hh:116
DHCellAccessor::get_loc_dof_indices
LocDofVec get_loc_dof_indices() const
Returns the local indices of dofs associated to the cell on the local process.
Definition: dh_cell_accessor.hh:88
SorptionBase::EqData::solvent_density_
double solvent_density_
Definition: sorption_base.hh:139
ReactionTerm::EqData::substances_
SubstanceList substances_
Definition: reaction_term.hh:88
ReactionAssemblySorp::dof_p0_
IntIdx dof_p0_
Index of local DOF.
Definition: assembly_reaction.hh:351
AssemblyBase
Definition: assembly_base.hh:34
ReactionAssemblyDp::conc_immob_
double conc_immob_
new mobile and immobile concentration
Definition: assembly_reaction.hh:191
InitConditionAssemblyDp::eq_data_
EqData * eq_data_
Definition: assembly_reaction.hh:78
ReactionTerm::EqFields::conc_mobile_fe
FieldFEScalarVec conc_mobile_fe
FieldFEs representing P0 interpolation of mobile concentration (passed from transport).
Definition: reaction_term.hh:73
ReactionAssemblyDp::used_fields_
FieldSet used_fields_
Sub field set contains fields used in calculation.
Definition: assembly_reaction.hh:186
InitConditionAssemblyDp::cell_integral
void cell_integral(DHCellAccessor cell, unsigned int element_patch_idx)
Assemble integral over element.
Definition: assembly_reaction.hh:60
ReactionAssemblyDp::temp_
double temp_
Precomputed values.
Definition: assembly_reaction.hh:195
InitConditionAssemblyDp::name
static constexpr const char * name()
Definition: assembly_reaction.hh:40
RegionIdx::bulk_idx
unsigned int bulk_idx() const
Returns index of the region in the bulk set.
Definition: region.hh:90
GenericAssembly
Generic class of assemblation.
Definition: generic_assembly.hh:160
ReactionAssemblyDp::por_mob_
double por_mob_
Definition: assembly_reaction.hh:194
SorptionBase::EqFields::scale_sorbed
Field< 3, FieldValue< 3 >::Scalar > scale_sorbed
Definition: sorption_base.hh:117
InitConditionAssemblySorp::EqData
SorptionBase::EqData EqData
Definition: assembly_reaction.hh:206
AssemblyBase::element_cache_map_
ElementCacheMap * element_cache_map_
ElementCacheMap shared with GenericAssembly object.
Definition: assembly_base.hh:193
Isotherm::reinit
void reinit(enum SorptionType sorption_type, bool limited_solubility_on, double aqua_density, double scale_aqua, double scale_sorbed, double c_aqua_limit, double mult_coef, double second_coef)
Definition: isotherm.cc:44
ReactionAssemblySorp::used_fields_
FieldSet used_fields_
Sub field set contains fields used in calculation.
Definition: assembly_reaction.hh:349
InitConditionAssemblySorp::cell_integral
void cell_integral(DHCellAccessor cell, unsigned int element_patch_idx)
Assemble integral over element.
Definition: assembly_reaction.hh:228
InitConditionAssemblySorp::~InitConditionAssemblySorp
~InitConditionAssemblySorp()
Destructor.
Definition: assembly_reaction.hh:218
ReactionAssemblyDp::exponent_
double exponent_
Definition: assembly_reaction.hh:195
ReactionAssemblySorp::EqFields
SorptionBase::EqFields EqFields
Definition: assembly_reaction.hh:261
ReactionAssemblySorp::eq_data_
EqData * eq_data_
Definition: assembly_reaction.hh:346
ReactionAssemblyDp::EqData
DualPorosity::EqData EqData
Definition: assembly_reaction.hh:94
IntDim
unsigned int IntDim
A dimension index type.
Definition: mixed.hh:19