LORENE
tabspec.h
1  /*
2  * Definition of Lorene class TabSpec
3  *
4  */
5 
6 /*
7  * Copyright (c) 2019 Jerome Novak
8  *
9  * This file is part of LORENE.
10  *
11  * LORENE is free software; you can redistribute it and/or modify
12  * it under the terms of the GNU General Public License version 2
13  * as published by the Free Software Foundation.
14  *
15  * LORENE is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18  * GNU General Public License for more details.
19  *
20  * You should have received a copy of the GNU General Public License
21  * along with LORENE; if not, write to the Free Software
22  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23  *
24  */
25 
26 #ifndef __TABSPEC_H_
27 #define __TABSPEC_H_
28 
29 #include<string>
30 #include<iostream>
31 #include<fftw3.h>
32 
33 using namespace std ;
34 
35 namespace Lorene {
36 
41  class TabSpec {
42 
43  // Donnees :
44  // -------
45  protected:
46  int sizex ;
47  int sizey ;
48  int sizez ;
49  double* tableau ;
50 
51  // Constructeurs - Destructeur
52  // ---------------------------
53  public:
54  explicit TabSpec(int dim1, int dim2=1, int dim3=1) ; //constructeur standard
55  explicit TabSpec(const string& ) ; // constructeur depuis un fichier
56  TabSpec(const TabSpec&) ; //constructeur par recopie
57 
58  virtual ~TabSpec() ; //destructeur
59 
60  // Affectation
61  // -----------
62  void operator=(const TabSpec&) ; //affectation depuis un autre TabSpec
63  void operator=(double) ; //affectation depuis un double
64 
65  // Acces aux donnees
66  // -----------------
67  int get_sizex() const {return sizex ; };
68  int get_sizey() const {return sizey ; };
69  int get_sizez() const {return sizez ; };
70  int get_nelt() const {return sizex*sizey*sizez ; } ;
71  int get_dim() const ;
72 
73  double operator()(int i, int j=0, int k=0) const ;
74 
75  double& set(int i, int j=0, int k=0) ;
76 
77  // Sauvegarde dans un fichier
78  // --------------------------
79  void write_file(const string&) const ;
80 
81  protected:
82  // Verif des tailles
83  bool check_sizes(const TabSpec&) const ;
84  void resize(int, int=1, int=1) ;
85 
86  // Affichage
87  virtual void display(ostream& ) const ; //pour utiliser le polymorphisme
88 
89  public: //"public" inutile ici...
90  friend ostream& operator<<(ostream&, const TabSpec& ) ; //la fonction externe
91  //a appeler
92  // operations mathematiques:
93  friend TabSpec apply(const TabSpec& t, double (*p_fonc)(double));
94  friend TabSpec apply(const TabSpec& t1, const TabSpec& t2,
95  double (*p_fonc)(double,double));
96  friend TabSpec apply(const TabSpec& t, double r,
97  double (*p_fonc)(double,double));
98  friend TabSpec apply(double r, const TabSpec& t,
99  double (*p_fonc)(double,double));
100  friend double max(const TabSpec& t);
101  friend TabSpec operator-(const TabSpec&) ;
102 
103  friend class FuncSpec ;
104  friend fftw_plan prepare_fft(int, TabSpec*&) ;
105  friend fftw_plan back_fft(int, TabSpec*&) ;
106 
107  };
108 
109  TabSpec operator+(const TabSpec&, const TabSpec&) ;
110  TabSpec operator+(const TabSpec&, double) ;
111  TabSpec operator+(double, const TabSpec&) ;
112  TabSpec operator-(const TabSpec&, const TabSpec&) ;
113  TabSpec operator-(const TabSpec&, double) ;
114  TabSpec operator-(double, const TabSpec&) ;
115  TabSpec operator-(const TabSpec&) ;
116  TabSpec operator*(const TabSpec&, const TabSpec&) ;
117  TabSpec operator*(const TabSpec&, double) ;
118  TabSpec operator*(double, const TabSpec&) ;
119  TabSpec operator/(const TabSpec&, const TabSpec&) ;
120  TabSpec operator/(const TabSpec&, double) ;
121  TabSpec operator/(double, const TabSpec&) ;
122 
123  TabSpec sin(const TabSpec&) ;
124  TabSpec cos(const TabSpec&) ;
125  TabSpec tan(const TabSpec&) ;
126  TabSpec exp(const TabSpec&) ;
127  TabSpec log(const TabSpec&) ;
128  TabSpec sqrt(const TabSpec&) ;
129  TabSpec pow(const TabSpec&, double) ;
130  TabSpec abs(const TabSpec&) ;
131  double max(const TabSpec&) ;
132 
133 }
134 #endif
Cmp log(const Cmp &)
Neperian logarithm.
Definition: cmp_math.C:299
Cmp exp(const Cmp &)
Exponential.
Definition: cmp_math.C:273
Cmp sqrt(const Cmp &)
Square root.
Definition: cmp_math.C:223
3-indices array to be used with the representation of functions with Cartesian coordinates.
Definition: tabspec.h:41
Lorene prototypes.
Definition: app_hor.h:67
Base_val operator*(const Base_val &, const Base_val &)
This operator is used when calling multiplication or division of Valeur .
Cmp operator/(const Cmp &, const Cmp &)
Cmp / Cmp.
Definition: cmp_arithm.C:460
Cmp cos(const Cmp &)
Cosine.
Definition: cmp_math.C:97
Cmp tan(const Cmp &)
Tangent.
Definition: cmp_math.C:123
Class for representing functions of 3 variables, supposed to be Cartesian coordinates ...
Definition: funcspec.h:40
Cmp operator+(const Cmp &)
Definition: cmp_arithm.C:107
Tbl max(const Cmp &)
Maximum values of a Cmp in each domain.
Definition: cmp_math.C:438
Cmp pow(const Cmp &, int)
Power .
Definition: cmp_math.C:351
Cmp abs(const Cmp &)
Absolute value.
Definition: cmp_math.C:413
Cmp operator-(const Cmp &)
- Cmp
Definition: cmp_arithm.C:111
Cmp sin(const Cmp &)
Sine.
Definition: cmp_math.C:72