Flow123d  master-7bf36fe
field_add_potential.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 field_add_potential.hh
15  * @brief
16  */
17 
18 #ifndef FIELD_ADD_POTENTIAL_HH_
19 #define FIELD_ADD_POTENTIAL_HH_
20 
21 #include <armadillo>
22 #include <memory>
23 
24 #include "fields/field.hh"
26 #include "fields/field_model.hh"
27 #include "fields/field_coords.hh"
28 
29 
30 /*******************************************************************************
31  * Functors of FieldModels
32  */
33 using Sclr = double;
34 using Vect = arma::vec3;
35 
36 // Functor computing piezo_head_p0
38  inline Sclr operator() (Vect gravity, Vect coords, Sclr pressure) {
39  return arma::dot(gravity, coords) + pressure;
40  }
41 };
42 
43 
44 /**
45  * Factory class (descendant of @p Field<...>::FactoryBase) that is necessary
46  * for setting pressure values are piezometric head values.
47  */
48 template <int spacedim, class Value> // <3, FieldValue<3>::Scalar>
49 class AddPotentialFactory : public Field<spacedim, Value>::FactoryBase {
50 public:
51  /// Constructor.
53  : gravity_(gravity),
54  coords_(coords),
55  inner_field_(inner_field),
56  field_name_(inner_field.input_name())
57  {}
58 
60  Input::AbstractRecord field_a_rec;
61  if (rec.opt_val(field_name_, field_a_rec)) {
63 
64  } else {
65  return typename Field<spacedim,Value>::FieldBasePtr();
66  }
67  }
68 
69  bool is_active_field_descriptor(const Input::Record &in_rec, FMT_UNUSED const std::string &input_name) override {
70  return in_rec.find<Input::AbstractRecord>(field_name_);
71  }
72 
76  std::string field_name_;
77 };
78 
79 #endif /* FIELD_ADD_POTENTIAL_HH_ */
AddPotentialFactory::field_name_
std::string field_name_
Definition: field_add_potential.hh:76
FieldCoords
Definition: field_coords.hh:36
AddPotentialFactory::inner_field_
Field< 3, FieldValue< 3 >::Scalar > & inner_field_
Definition: field_add_potential.hh:75
fn_add_potential
Definition: field_add_potential.hh:37
field_algo_base.hh
AddPotentialFactory::create_field
Field< spacedim, Value >::FieldBasePtr create_field(Input::Record rec, const FieldCommon &) override
Definition: field_add_potential.hh:59
arma::vec3
Definition: doxy_dummy_defs.hh:17
fn_add_potential::operator()
Sclr operator()(Vect gravity, Vect coords, Sclr pressure)
Definition: field_add_potential.hh:38
AddPotentialFactory::gravity_
Field< 3, FieldValue< 3 >::VectorFixed > & gravity_
Definition: field_add_potential.hh:73
AddPotentialFactory
Definition: field_add_potential.hh:49
AddPotentialFactory::is_active_field_descriptor
bool is_active_field_descriptor(const Input::Record &in_rec, FMT_UNUSED const std::string &input_name) override
Definition: field_add_potential.hh:69
Input::Record
Accessor to the data with type Type::Record.
Definition: accessors.hh:291
field_model.hh
Input::AbstractRecord
Accessor to the polymorphic input data of a type given by an AbstracRecord object.
Definition: accessors.hh:458
FieldCommon
Common abstract parent of all Field<...> classes.
Definition: field_common.hh:77
Input::Record::opt_val
bool opt_val(const string &key, Ret &value) const
Definition: accessors_impl.hh:107
Input::Record::find
Iterator< Ret > find(const string &key) const
Definition: accessors_impl.hh:91
Sclr
double Sclr
Definition: field_add_potential.hh:33
Field::FieldBasePtr
std::shared_ptr< FieldBaseType > FieldBasePtr
Definition: field.hh:96
Model
Definition: field_model.hh:291
AddPotentialFactory::coords_
FieldCoords & coords_
Definition: field_add_potential.hh:74
Field
Class template representing a field with values dependent on: point, element, and region.
Definition: field.hh:92
field.hh
field_coords.hh
AddPotentialFactory::AddPotentialFactory
AddPotentialFactory(Field< 3, FieldValue< 3 >::VectorFixed > &gravity, FieldCoords &coords, Field< 3, FieldValue< 3 >::Scalar > &inner_field)
Constructor.
Definition: field_add_potential.hh:52
FieldValue
Definition: field_values.hh:645
FMT_UNUSED
#define FMT_UNUSED
Definition: posix.h:75