KADATH
domain_polar_periodic_shell_ope.cpp
1 /*
2  Copyright 2017 Philippe Grandclement
3 
4  This file is part of Kadath.
5 
6  Kadath is free software: you can redistribute it and/or modify
7  it under the terms of the GNU General Public License as published by
8  the Free Software Foundation, either version 3 of the License, or
9  (at your option) any later version.
10 
11  Kadath is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  GNU General Public License for more details.
15 
16  You should have received a copy of the GNU General Public License
17  along with Kadath. If not, see <http://www.gnu.org/licenses/>.
18 */
19 
20 #include "headcpp.hpp"
21 #include "polar_periodic.hpp"
22 #include "val_domain.hpp"
23 #include "array_math.hpp"
24 
25 namespace Kadath {
26 int mult_cos_1d (int, Array<double>&) ;
27 int mult_sin_1d (int, Array<double>&) ;
28 int div_sin_1d (int, Array<double>&) ;
29 int div_x_1d (int, Array<double>&) ;
30 int mult_x_1d (int, Array<double>&) ;
31 int div_xm1_1d (int, Array<double>&) ;
32 
34  so.coef() ;
35  Val_domain res(this) ;
36  res.base = so.base ;
37  res.cf = new Array<double> (so.base.ope_1d(mult_cos_1d, 1, *so.cf, res.base)) ;
38  res.in_coef = true ;
39  return res ;
40 }
41 
43 
44  so.coef() ;
45  Val_domain res(this) ;
46 
47  res.base= so.base ;
48  res.cf = new Array<double> (so.base.ope_1d(mult_sin_1d, 1, *so.cf, res.base)) ;
49  res.in_coef = true ;
50  return res ;
51 }
52 
54  so.coef() ;
55  Val_domain res(this) ;
56 
57  res.base = so.base ;
58 
59  res.cf = new Array<double> (so.base.ope_1d(div_sin_1d, 1, *so.cf, res.base)) ;
60  res.in_coef = true ;
61  return res ;
62 }
63 
64 
66  so.coef() ;
67  Val_domain res(this) ;
68 
69  res.base= so.base ;
70 
71  res.cf = new Array<double> (so.base.ope_1d(mult_x_1d, 0, *so.cf, res.base)*alpha + (*so.cf)*beta) ;
72  res.in_coef = true ;
73  return res ;
74 }
75 
76 
78  Val_domain res (so / get_radius()) ;
79  res.base = so.base ;
80  return (res) ;
81 }
82 
83 
85  if (so.check_if_zero())
86  return so;
87  so.coef() ;
88  Val_domain res(this) ;
89 
90  res.base= so.base ;
91 
92  res.cf = new Array<double> (-(alpha+beta)/alpha*so.base.ope_1d(div_xm1_1d, 0, *so.cf, res.base)) ;
93  res.in_coef = true ;
94  return res ;
95 }
96 
97 
98 
100  return (so.der_var(1)/alpha) ;
101 }
102 
104  return (so.der_var(2)) ;
105 }
106 
108  return (so.der_var(3)*ome) ;
109 }
110 
111 
113  so.coef() ;
114  Val_domain res(this) ;
115  res.base = so.base ;
116  res.cf = new Array<double> (so.base.ope_1d(mult_cos_1d, 2, *so.cf, res.base)) ;
117  res.in_coef = true ;
118  return res ;
119 }
120 
122 
123  so.coef() ;
124  Val_domain res(this) ;
125 
126  res.base= so.base ;
127  res.cf = new Array<double> (so.base.ope_1d(mult_sin_1d, 2, *so.cf, res.base)) ;
128  res.in_coef = true ;
129  return res ;
130 }
131 }
132 
Array< double > ope_1d(int(*function)(int, Array< double > &), int var, const Array< double > &so, Base_spectral &base) const
One-dimensional operator acting in the coefficient space.
Definition: ope_1d.cpp:26
virtual Val_domain dt(const Val_domain &) const
Compute the derivative with respect to of a scalar field.
virtual Val_domain div_1mrsL(const Val_domain &) const
Division by .
virtual Val_domain div_r(const Val_domain &) const
Division by .
virtual Val_domain mult_r(const Val_domain &) const
Multiplication by .
virtual Val_domain mult_cos_time(const Val_domain &) const
Multiplication by .
virtual Val_domain mult_sin_theta(const Val_domain &) const
Multiplication by .
virtual Val_domain dtime(const Val_domain &) const
Computes the time derivative of a field.
double alpha
Relates the numerical radius to the physical one.
double beta
Relates the numerical radius to the physical one.
virtual Val_domain mult_cos_theta(const Val_domain &) const
Multiplication by .
virtual Val_domain div_sin_theta(const Val_domain &) const
Division by .
virtual Val_domain mult_sin_time(const Val_domain &) const
Multiplication by .
virtual Val_domain der_r(const Val_domain &) const
Compute the radial derivative of a scalar field.
Val_domain const & get_radius() const
Returns the generalized radius.
Definition: space.hpp:1465
Class for storing the basis of decompositions of a field and its values on both the configuration and...
Definition: val_domain.hpp:69
Base_spectral base
Spectral basis of the field.
Definition: val_domain.hpp:72
bool check_if_zero() const
Check whether the logical state is zero or not.
Definition: val_domain.hpp:142
Array< double > * cf
Pointer on the Array of the values in the coefficients space.
Definition: val_domain.hpp:77
bool in_coef
Is the field known in the coefficient space ?
Definition: val_domain.hpp:79
void coef() const
Computes the coefficients.
Definition: val_domain.cpp:622
Val_domain der_var(int i) const
Computes the derivative with respect to a numerical coordinate.
Definition: val_domain.cpp:670