KADATH
domain_spheric_periodic_compact_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 "spheric_periodic.hpp"
22 #include "val_domain.hpp"
23 #include "array_math.hpp"
24 namespace Kadath {
25 int div_xm1_1d (int, Array<double>&) ;
26 int mult_xm1_1d (int, Array<double>&) ;
27 
29  so.coef() ;
30  Val_domain res(this) ;
31 
32  res.base= so.base ;
33 
34  res.cf = new Array<double> (so.base.ope_1d(mult_xm1_1d, 0, *so.cf, res.base)) ;
35  res.in_coef = true ;
36  return res ;
37 }
38 
40  so.coef() ;
41  Val_domain res(this) ;
42 
43  res.base = so.base ;
44 
45  res.cf = new Array<double> (so.base.ope_1d(div_xm1_1d, 0, *so.cf, res.base)) ;
46  res.in_coef = true ;
47  return res ;
48 }
49 
51  so.coef() ;
52  Val_domain res(div_xm1(so)) ;
53  res /= alpha ;
54  return res ;
55 }
56 
58  so.coef() ;
59  Val_domain res(mult_xm1(so)) ;
60  res *= alpha ;
61  return res ;
62 }
63 
65  return (so.der_var(2).der_var(2)*ome*ome) ;
66 }
67 
69  return (so.der_var(2)*ome) ;
70 }
71 
73  return (-alpha*so.der_var(1).mult_xm1().mult_xm1()) ;
74 }
75 
77  if (m!=0) {
78  cerr << "Laplacian only defiend for m=0 for Domain_spheric_nucleus" << endl ;
79  abort() ;
80  }
81  Val_domain derr (-alpha*so.der_var(1).mult_xm1().mult_xm1()) ;
82  Val_domain dderr (-alpha*derr.der_var(1).mult_xm1().mult_xm1()) ;
83  Val_domain res (dderr + div_r(2*derr)) ;
84  return res ;
85 }}
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 laplacian(const Val_domain &, int) const
Computes the ordinary flat Laplacian for a scalar field with an harmonic index m.
virtual Val_domain div_r(const Val_domain &) const
Division by .
double ome
Relates the numerical time to the physical one.
virtual Val_domain dtime(const Val_domain &) const
Computes the time derivative of a field.
virtual Val_domain ddtime(const Val_domain &) const
Computes the second time derivative of a field.
virtual Val_domain mult_xm1(const Val_domain &) const
Multiplication by .
virtual Val_domain div_xm1(const Val_domain &) const
Division by .
double alpha
Relates the numerical radius to the physical one.
virtual Val_domain der_r(const Val_domain &) const
Compute the radial derivative of a scalar field.
virtual Val_domain mult_r(const Val_domain &) const
Multiplication by .
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
Array< double > * cf
Pointer on the Array of the values in the coefficients space.
Definition: val_domain.hpp:77
Val_domain mult_xm1() const
Multiplication by .
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