libMesh
fe_compute_data.C
Go to the documentation of this file.
1 // The libMesh Finite Element Library.
2 // Copyright (C) 2002-2017 Benjamin S. Kirk, John W. Peterson, Roy H. Stogner
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License, or (at your option) any later version.
7 
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 // Lesser General Public License for more details.
12 
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16 
17 #include "libmesh/fe_compute_data.h"
18 #include "libmesh/equation_systems.h"
19 
20 namespace libMesh
21 {
22 
23 
24 
26 {
27  this->shape.clear();
28 #if defined(LIBMESH_ENABLE_INFINITE_ELEMENTS) && !defined(LIBMESH_USE_COMPLEX_NUMBERS)
29  this->phase = 0.;
30  this->speed = 1.;
31 #endif
32 
33 #if defined (LIBMESH_ENABLE_INFINITE_ELEMENTS) && defined(LIBMESH_USE_COMPLEX_NUMBERS)
34  //lets default speed and frequency to 1; 0 leads to troubles with the wavenumber.
35  this->speed = 1.;
36  this->frequency = 1.;
37 
38 #endif
39 }
40 
41 
42 
44 {
45  if (!(this->shape.empty()))
46  std::fill (this->shape.begin(), this->shape.end(), 0.);
47 
48 #if defined(LIBMESH_ENABLE_INFINITE_ELEMENTS) && !defined(LIBMESH_USE_COMPLEX_NUMBERS)
49  this->phase = 0.;
50 
52  this->speed = this->equation_systems.parameters.get<Real>("speed");
53 #endif
54 
55 #if defined (LIBMESH_ENABLE_INFINITE_ELEMENTS) && defined(LIBMESH_USE_COMPLEX_NUMBERS)
57  this->speed = this->equation_systems.parameters.get<Real>("speed");
58 
59  if (equation_systems.parameters.have_parameter<Real>("current frequency"))
60  {
61 
62  // please use the type Number instead.
63  libmesh_deprecated();
64  this->frequency = static_cast<Number> (this->equation_systems.parameters.get<Real>("current frequency"));
65  }
66 
67  else if (equation_systems.parameters.have_parameter<Number>("current frequency"))
68 
69  this->frequency = this->equation_systems.parameters.get<Number>("current frequency");
70 
71 #endif
72  // ensure that the wavenumber k=2. * libMesh::pi * this->frequency / this->speed
73  // in src/fe/inf_fe_static.C: 310
74  // is well-defined. 0 as well as NaN will lead to problems here.
75 #if defined(LIBMESH_ENABLE_INFINITE_ELEMENTS) && defined(LIBMESH_USE_COMPLEX_NUMBERS)
76  libmesh_assert_not_equal_to(this->frequency, 0.);
77 #endif
78 #if defined(LIBMESH_ENABLE_INFINITE_ELEMENTS)
79  libmesh_assert_not_equal_to(this->speed, 0);
80 #endif
81 
82 }
83 
84 
85 } // namespace libMesh
const EquationSystems & equation_systems
Const reference to the EquationSystems object that contains simulation-specific data.
Real phase
Storage for the computed phase lag.
const T & get(const std::string &) const
Definition: parameters.h:430
The libMesh namespace provides an interface to certain functionality in the library.
Real speed
The wave speed.
void clear()
Clears the output data completely.
void init()
Inits the output data to default values, provided the fields are correctly resized.
Number frequency
The frequency to evaluate shape functions including the wave number depending terms.
std::vector< Number > shape
Storage for the computed shape function values.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
Parameters parameters
Data structure holding arbitrary parameters.
bool have_parameter(const std::string &) const
Definition: parameters.h:411