KADATH
space_spheric_time.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_time.hpp"
22 #include "utilities.hpp"
23 #include "point.hpp"
24 #include "scalar.hpp"
25 #include "tensor_impl.hpp"
26 namespace Kadath {
27 Space_spheric_time::Space_spheric_time(int ttype, const Dim_array& res, const Array<double>& bounds, double ttmin, double ttmax, bool wc) : tmin(ttmin), tmax (ttmax), withcompact (wc) {
28 
29  // Verif :
30  assert (bounds.get_ndim()== 1) ;
31 
32  ndim = 3 ;
33 
34  nbr_domains = (withcompact) ? bounds.get_size(0)+1 : bounds.get_size(0) ;
35  type_base = ttype ;
36  domains = new Domain* [nbr_domains] ;
37  // Nucleus
38  domains[0] = new Domain_spheric_time_nucleus(0, ttype, tmin, tmax, bounds(0), res) ;
39  if (!withcompact) {
40  for (int i=1 ; i<nbr_domains ; i++)
41  domains[i] = new Domain_spheric_time_shell(i, ttype, tmin, tmax, bounds(i-1), bounds(i), res) ;
42  }
43  else {
44  for (int i=1 ; i<nbr_domains-1 ; i++)
45  domains[i] = new Domain_spheric_time_shell(i, ttype, tmin, tmax, bounds(i-1), bounds(i), res) ;
46  domains[nbr_domains-1] = new Domain_spheric_time_compact (nbr_domains-1, ttype, tmin, tmax, bounds(nbr_domains-2), res) ;
47  }
48 }
49 
51  fread_be (&nbr_domains, sizeof(int), 1, fd) ;
52  fread_be (&ndim, sizeof(int), 1, fd) ;
53  fread_be (&type_base, sizeof(int), 1, fd) ;
54  fread_be (&tmin, sizeof(double), 1, fd) ;
55  fread_be (&tmax, sizeof(double), 1, fd) ;
56  int indcomp ;
57  fread_be (&indcomp, sizeof(int), 1, fd) ;
58  withcompact = (indcomp==1) ? true : false ;
59  domains = new Domain* [nbr_domains] ;
60  //nucleus :
61  domains[0] = new Domain_spheric_time_nucleus(0, fd) ;
62 
63  if (!withcompact) {
64  //Shells :
65  for (int i=1 ; i<nbr_domains ; i++)
66  domains[i] = new Domain_spheric_time_shell(i, fd) ;
67  }
68  else {
69  //Shells :
70  for (int i=1 ; i<nbr_domains-1 ; i++)
71  domains[i] = new Domain_spheric_time_shell(i, fd) ;
73  }
74 }
75 
76 Space_spheric_time::~Space_spheric_time() {
77 }
78 
79 void Space_spheric_time::save (FILE* fd) const {
80  fwrite_be (&nbr_domains, sizeof(int), 1, fd) ;
81  fwrite_be (&ndim, sizeof(int), 1, fd) ;
82  fwrite_be (&type_base, sizeof(int), 1, fd) ;
83  fwrite_be (&tmin, sizeof(double), 1, fd) ;
84  fwrite_be (&tmax, sizeof(double), 1, fd) ;
85  int indcomp = (withcompact) ? 1 : 0 ;
86  fwrite_be (&indcomp, sizeof(int), 1, fd) ;
87  for (int i=0 ; i<nbr_domains ; i++)
88  domains[i]->save(fd) ;
89 }}
int get_ndim() const
Returns the number of dimensions.
Definition: array.hpp:323
int get_size(int i) const
Returns the size of a given dimension.
Definition: array.hpp:331
Class for storing the dimensions of an array.
Definition: dim_array.hpp:34
Class for a 2-dimensional compactified spherical domain and a symetry with respect to the plane .
Class for a 2-dimensional spherical domain containing the origin and a symetry with respect to the pl...
Class for a 2-dimensional spherical domain bounded between two finite radii and a symetry with respec...
Abstract class that implements the fonctionnalities common to all the type of domains.
Definition: space.hpp:60
bool withcompact
Indicator of the presence of a compactified Domain.
Space_spheric_time(int ttype, const Dim_array &nbr, const Array< double > &bounds, double tmmin, double tmmax, bool wc=false)
Standard constructor.
double tmax
Final time .
double tmin
Initial time .
virtual void save(FILE *) const
Saving function.
int type_base
Type of basis used (i.e. using either Chebyshev or Legendre polynomials).
Definition: space.hpp:1367
int ndim
Number of dimensions (should be the same for all the Domains).
Definition: space.hpp:1366
Domain ** domains
Pointers on the various Domains.
Definition: space.hpp:1368
int nbr_domains
Number od Domains.
Definition: space.hpp:1365