LORENE
tensor.h
1/*
2 * Definition of Lorene classes Tensor and Sym_tensor
3 *
4 */
5
6/*
7 * Copyright (c) 2003-2004 Eric Gourgoulhon & Jerome Novak
8 *
9 * Copyright (c) 1999-2001 Philippe Grandclement (for preceding class Tenseur)
10 * Copyright (c) 2000-2001 Eric Gourgoulhon (for preceding class Tenseur)
11 * Copyright (c) 2002 Jerome Novak (for preceding class Tenseur)
12 *
13 * This file is part of LORENE.
14 *
15 * LORENE is free software; you can redistribute it and/or modify
16 * it under the terms of the GNU General Public License as published by
17 * the Free Software Foundation; either version 2 of the License, or
18 * (at your option) any later version.
19 *
20 * LORENE is distributed in the hope that it will be useful,
21 * but WITHOUT ANY WARRANTY; without even the implied warranty of
22 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23 * GNU General Public License for more details.
24 *
25 * You should have received a copy of the GNU General Public License
26 * along with LORENE; if not, write to the Free Software
27 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
28 *
29 */
30
31
32#ifndef __TENSOR_H_
33#define __TENSOR_H_
34
35
36/*
37 * $Id: tensor.h,v 1.63 2023/08/31 08:27:26 g_servignat Exp $
38 * $Log: tensor.h,v $
39 * Revision 1.63 2023/08/31 08:27:26 g_servignat
40 * Added the possibility to filter in the r direction within the ylm filter. An order filtering of 0 means no filtering (for all 3 directions).
41 *
42 * Revision 1.62 2023/08/28 09:53:33 g_servignat
43 * Added ylm filter for Tensor and Scalar in theta + phi directions
44 *
45 * Revision 1.61 2014/10/13 08:52:37 j_novak
46 * Lorene classes and functions now belong to the namespace Lorene.
47 *
48 * Revision 1.60 2013/06/05 15:43:49 j_novak
49 * Suppression of leg_spectral_base()
50 *
51 * Revision 1.59 2013/01/11 15:44:54 j_novak
52 * Addition of Legendre bases (part 2).
53 *
54 * Revision 1.58 2008/12/05 08:44:02 j_novak
55 * New flag to control the "verbosity" of maxabs.
56 *
57 * Revision 1.57 2007/12/21 16:06:16 j_novak
58 * Methods to filter Tensor, Vector and Sym_tensor objects.
59 *
60 * Revision 1.56 2006/06/07 14:08:58 j_novak
61 * New methods set_index_type( / int).
62 *
63 * Revision 1.55 2005/10/25 08:56:34 p_grandclement
64 * addition of std_spectral_base in the case of odd functions near the origin
65 *
66 * Revision 1.54 2004/07/08 12:21:51 j_novak
67 * Replaced tensor::annule_extern_c2 with tensor::annule_extern_cn for a
68 * more general transition.
69 *
70 * Revision 1.53 2004/06/17 06:54:23 e_gourgoulhon
71 * Added method annule_extern_c2.
72 *
73 * Revision 1.52 2004/05/13 21:29:27 e_gourgoulhon
74 * Added (external) functions central_value, max_all_domains,
75 * min_all_domains and maxabs_all_domains.
76 *
77 * Revision 1.51 2004/03/24 14:53:39 j_novak
78 * Double declarations suppressed
79 *
80 * Revision 1.50 2004/03/22 13:12:43 j_novak
81 * Modification of comments to use doxygen instead of doc++
82 *
83 * Revision 1.49 2004/02/27 21:12:44 e_gourgoulhon
84 * Suppressed function contract_desal (since contract has now the
85 * boolean argument "desaliasing").
86 *
87 * Revision 1.48 2004/02/26 22:44:37 e_gourgoulhon
88 * -- constructor of Tensor from Map is now declared explicit.
89 * -- class Tensor: added methods compute_derive_lie and derive_lie
90 * -- class Tensor_sym: added methods derive_cov, derive_con and derive_lie.
91 *
92 * Revision 1.47 2004/02/19 22:08:51 e_gourgoulhon
93 * Added argument "comment" in method spectral_display,
94 * as well as in external functions min, max, maxabs, etc...
95 *
96 * Revision 1.46 2004/02/18 18:42:41 e_gourgoulhon
97 * -- Added methods trace.
98 * -- Method scontract suppressed ( since it is the same as trace(int, int) ).
99 *
100 * Revision 1.45 2004/02/18 15:52:39 e_gourgoulhon
101 * -- Added optional argument desaliasing in function contract.
102 * -- Added new function contract for double contraction.
103 *
104 * Revision 1.44 2004/02/16 10:48:06 e_gourgoulhon
105 * Added "class Tensor_sym;" at the beginning.
106 *
107 * Revision 1.43 2004/02/15 21:53:48 e_gourgoulhon
108 * Modif. comments: suppressed the mention *** under development ***.
109 *
110 * Revision 1.42 2004/01/30 12:44:17 e_gourgoulhon
111 * Added Tensor_sym operator*(const Tensor_sym&, const Tensor_sym& ).
112 *
113 * Revision 1.41 2004/01/27 13:05:10 j_novak
114 * Removed the method Tensor::mult_r_ced()
115 *
116 * Revision 1.40 2004/01/19 16:31:40 e_gourgoulhon
117 * Added operator()(int, int, int, int) and set(int, int, int, int)
118 * for direct access to components of valence 4 tensors.
119 *
120 * Revision 1.39 2004/01/15 11:09:27 f_limousin
121 * Modif in method contract_desal
122 *
123 * Revision 1.38 2004/01/15 11:00:44 f_limousin
124 * Added method contract_desal for the contraction of two tensors with desaliasing
125 *
126 * Revision 1.37 2004/01/14 11:39:00 f_limousin
127 * Added method contract for one tensor
128 *
129 * Revision 1.36 2004/01/08 09:21:39 e_gourgoulhon
130 * Added arithmetics of Tensor_sym.
131 * Added arithmetics with Scalar (to solve some ambiguities with respect
132 * to the Scalar arithmetics).
133 * Added Tensor_sym tensorial product.
134 *
135 * Revision 1.35 2004/01/04 20:47:37 e_gourgoulhon
136 * -- Introduction of new derived class Tensor_sym to store tensor with
137 * two symmetric indices
138 * -- Suppression of class Tensor_delta (now a special case of Tensor_sym).
139 *
140 * Revision 1.34 2003/12/27 14:58:01 e_gourgoulhon
141 * Improved documentation. In particular, better description of methods
142 * derive_cov(), derive_con() and divergence(), taking into account the
143 * new index convention for covariant derivatives.
144 *
145 * Revision 1.33 2003/12/05 16:41:05 f_limousin
146 * Added method operator*
147 *
148 * Revision 1.32 2003/11/06 14:43:37 e_gourgoulhon
149 * Gave a name to const arguments in certain method prototypes (e.g.
150 * constructors) to correct a bug of DOC++.
151 *
152 * Revision 1.31 2003/11/05 15:25:57 e_gourgoulhon
153 * Added declaration of external functions:
154 * max, min, maxabs, diffrel and diffrelmax.
155 *
156 * Revision 1.30 2003/11/03 10:58:00 j_novak
157 * Suppressed the constructor from a Sym_tensor.
158 *
159 * Revision 1.29 2003/10/29 11:00:42 e_gourgoulhon
160 * Virtual functions dec_dzpuis and inc_dzpuis have now an integer argument to
161 * specify by which amount dzpuis is to be increased.
162 * Accordingly virtual methods dec2_dzpuis and inc2_dzpuis have been suppressed.
163 *
164 * Revision 1.28 2003/10/28 21:21:50 e_gourgoulhon
165 * Member function Tensor::contract(int, int) renamed
166 * Tensor::scontract(int, int) in order not to mask
167 * the non-member function contract.
168 *
169 * Revision 1.27 2003/10/27 10:44:00 e_gourgoulhon
170 * Declaration of class Sym_tensor is now in file sym_tensor.h.
171 *
172 * Revision 1.26 2003/10/24 15:00:19 j_novak
173 * Forgotten Class declaration... thanks IBM aix!
174 *
175 * Revision 1.25 2003/10/20 14:26:02 j_novak
176 * New assignement operators.
177 *
178 * Revision 1.24 2003/10/20 09:32:10 j_novak
179 * Members p_potential and p_div_free of the Helmholtz decomposition
180 * + the method decompose_div(Metric).
181 *
182 * Revision 1.23 2003/10/19 19:47:31 e_gourgoulhon
183 * Introduced new virtual method spectral_display.
184 *
185 * Revision 1.22 2003/10/16 15:24:30 e_gourgoulhon
186 * Name of method annule(int ) changed to annule_domain(int ).
187 *
188 * Revision 1.21 2003/10/16 14:21:33 j_novak
189 * The calculation of the divergence of a Tensor is now possible.
190 *
191 * Revision 1.20 2003/10/13 13:52:39 j_novak
192 * Better managment of derived quantities.
193 *
194 * Revision 1.19 2003/10/08 14:24:08 j_novak
195 * replaced mult_r_zec with mult_r_ced
196 *
197 * Revision 1.18 2003/10/06 20:48:23 e_gourgoulhon
198 * Added methods down and up_down.
199 *
200 * Revision 1.17 2003/10/06 16:17:29 j_novak
201 * Calculation of contravariant derivative and Ricci scalar.
202 *
203 * Revision 1.16 2003/10/06 15:12:56 e_gourgoulhon
204 * Added tensor contraction and raising of index.
205 *
206 * Revision 1.15 2003/10/06 13:58:45 j_novak
207 * The memory management has been improved.
208 * Implementation of the covariant derivative with respect to the exact Tensor
209 * type.
210 *
211 * Revision 1.14 2003/10/05 21:07:27 e_gourgoulhon
212 * Method std_spectral_base() is now virtual.
213 *
214 * Revision 1.13 2003/10/03 11:21:45 j_novak
215 * More methods for the class Metric
216 *
217 * Revision 1.12 2003/10/02 15:45:48 j_novak
218 * New class Metric
219 *
220 * Revision 1.11 2003/10/01 15:41:14 e_gourgoulhon
221 * class name Delta changed to Tensor_delta.
222 *
223 * Revision 1.10 2003/10/01 13:03:52 e_gourgoulhon
224 * The method get_mp() returns now a reference (and not a pointer)
225 * onto a mapping.
226 *
227 * Revision 1.9 2003/09/29 13:48:17 j_novak
228 * New class Delta.
229 *
230 * Revision 1.8 2003/09/26 14:33:51 j_novak
231 * Arithmetic functions for the class Tensor
232 *
233 * Revision 1.7 2003/09/26 08:05:29 j_novak
234 * New class Vector.
235 *
236 * Revision 1.6 2003/09/25 21:01:50 e_gourgoulhon
237 * Improved comments.
238 *
239 * Revision 1.5 2003/09/25 13:37:38 j_novak
240 * Symmetric tensors of valence 2 are now implemented (not tested yet).
241 *
242 * Revision 1.4 2003/09/24 15:10:54 j_novak
243 * Suppression of the etat flag in class Tensor (still present in Scalar)
244 *
245 * Revision 1.3 2003/09/24 08:46:31 j_novak
246 * Added tensor.h and scalar.h to the documentation
247 *
248 * Revision 1.2 2003/09/23 08:53:11 e_gourgoulhon
249 * not ready yet
250 *
251 * Revision 1.1 2003/09/22 12:50:47 e_gourgoulhon
252 * First version: not ready yet!
253 *
254 *
255 * $Header: /cvsroot/Lorene/C++/Include/tensor.h,v 1.63 2023/08/31 08:27:26 g_servignat Exp $
256 *
257 */
258
259#define COV -1
260#define CON +1
261
262#define N_MET_MAX 5
263
264// Headers Lorene
265#include "itbl.h"
266#include "base_vect.h"
267#include "map.h"
268
269namespace Lorene {
270class Scalar ;
271class Vector ;
272class Tensor_sym ;
273class Sym_tensor ;
274class Metric ;
275
276 //-------------------------//
277 // class Tensor //
278 //-------------------------//
279
280
294class Tensor {
295
296 // Data :
297 // -----
298 protected:
299
301 const Map* const mp ;
302
304 int valence ;
305
309 const Base_vect* triad ;
310
317
318 int n_comp ;
319
321 Scalar** cmp ;
322
323
324 // Derived data :
325 // ------------
326 protected:
333 mutable const Metric* met_depend[N_MET_MAX] ;
334
341 mutable Tensor* p_derive_cov[N_MET_MAX];
342
349 mutable Tensor* p_derive_con[N_MET_MAX];
350
357 mutable Tensor* p_divergence[N_MET_MAX];
358
359
360 // Constructors - Destructor :
361 // -------------------------
362
363 public:
364
380 Tensor(const Map& map, int val, const Itbl& tipe,
381 const Base_vect& triad_i) ;
382
399 Tensor(const Map& map, int val, const Itbl& tipe,
400 const Base_vect* triad_i) ;
401
411 Tensor(const Map& map, int val, int tipe,
412 const Base_vect& triad_i) ;
413
414 Tensor(const Tensor&) ;
415
426 Tensor(const Map& map, const Base_vect& triad_i, FILE* fich) ;
427
428 protected:
434 explicit Tensor(const Map& map) ;
435
457 Tensor(const Map& map, int val, const Itbl& tipe, int n_comp_i,
458 const Base_vect& triad_i) ;
459
474 Tensor(const Map& map, int val, int tipe, int n_comp_i,
475 const Base_vect& triad_i) ;
476
477
478 public:
479
480 virtual ~Tensor() ;
481
482 // Memory management
483 // -----------------
484 protected:
485 virtual void del_deriv() const ;
486
488 void set_der_0x0() const ;
489
494 virtual void del_derive_met(int) const ;
495
500 void set_der_met_0x0(int) const ;
501
511 void set_dependance (const Metric&) const ;
512
518 int get_place_met(const Metric&) const ;
519
520 // Mutators / assignment
521 // ---------------------
522 public:
527 virtual void set_etat_nondef() ;
528
533 virtual void set_etat_zero() ;
534
539 virtual void set_etat_qcq() ;
540
549 virtual void allocate_all() ;
550
554 virtual void change_triad(const Base_vect& new_triad) ;
555
562 void set_triad(const Base_vect& new_triad) ;
563
564
565 virtual void operator=(const Tensor&) ;
566
578 Scalar& set(const Itbl& ind) ;
579
589 Scalar& set(int i1, int i2) ;
590
591
602 Scalar& set(int i1, int i2, int i3) ;
603
616 Scalar& set(int i1, int i2, int i3, int i4) ;
617
623 void annule_domain(int l) ;
624
636 virtual void annule(int l_min, int l_max) ;
637
649 void annule_extern_cn(int l_0, int deg) ;
650
655 virtual void std_spectral_base() ;
656
661 virtual void std_spectral_base_odd() ;
662
667 virtual void dec_dzpuis(int dec = 1) ;
668
673 virtual void inc_dzpuis(int inc = 1) ;
674
679 virtual void exponential_filter_r(int lzmin, int lzmax, int p,
680 double alpha= -16.) ;
681
686 virtual void exponential_filter_ylm(int lzmin, int lzmax, int p,
687 double alpha= -16.) ;
688
693 virtual void exponential_filter_ylm_phi(int lzmin, int lzmax, int p_r, int p_tet, int p_phi,
694 double alpha= -16.) ;
695
696 // Computational methods
697 // ---------------------
698
699 protected:
704 void compute_derive_lie(const Vector& v, Tensor& resu) const ;
705
706
707 public:
730 const Tensor& derive_cov(const Metric& gam) const ;
731
737 const Tensor& derive_con(const Metric& gam) const ;
738
756 const Tensor& divergence(const Metric& gam) const ;
757
758
762 Tensor derive_lie(const Vector& v) const ;
763
776 Tensor up(int ind, const Metric& gam) const ;
777
790 Tensor down(int ind, const Metric& gam) const ;
791
799 Tensor up_down(const Metric& gam) const ;
800
809 Tensor trace(int ind1, int ind2) const ;
810
821 Tensor trace(int ind1, int ind2, const Metric& gam) const ;
822
825 Scalar trace() const ;
826
831 Scalar trace(const Metric& gam) const ;
832
833
834 // Accessors
835 // ---------
836 public:
852 virtual int position(const Itbl& ind) const ;
853
870 virtual Itbl indices(int pos) const ;
871
872 public:
874 const Map& get_mp() const {return *mp ;} ;
875
879 const Base_vect* get_triad() const {return triad;} ;
880
882 int get_valence() const {return valence ; } ;
883
885 int get_n_comp() const {return n_comp ;} ;
886
899 int get_index_type(int i) const {return type_indice(i) ;};
900
909 Itbl get_index_type() const {return type_indice ; } ;
910
922 int& set_index_type(int i) {return type_indice.set(i) ;};
923
932
933
945 const Scalar& operator()(const Itbl& ind) const ;
946
956 const Scalar& operator()(int i1, int i2) const ;
957
968 const Scalar& operator()(int i1, int i2, int i3) const ;
969
981 const Scalar& operator()(int i1, int i2, int i3, int i4) const ;
982
983 // Member arithmetics
984 // ------------------
985 public:
986 void operator+=(const Tensor &) ;
987 void operator-=(const Tensor &) ;
988
989 // Outputs
990 // -------
991 public:
992 virtual void sauve(FILE *) const ;
993
1004 virtual void spectral_display(const char* comment = 0x0,
1005 double threshold = 1.e-7, int precision = 4,
1006 ostream& ostr = cout) const ;
1007
1008 friend ostream& operator<<(ostream& , const Tensor & ) ;
1009
1010
1011 // Friend classes
1012 // ---------------
1013 friend class Scalar ;
1014 friend class Vector ;
1015 friend class Sym_tensor ;
1016 friend class Tensor_sym ;
1017 friend class Metric ;
1018
1019 // Mathematical operators
1020 // ----------------------
1021
1022 friend Scalar operator+(const Tensor&, const Scalar&) ;
1023 friend Scalar operator+(const Scalar&, const Tensor&) ;
1024 friend Scalar operator-(const Tensor&, const Scalar&) ;
1025 friend Scalar operator-(const Scalar&, const Tensor&) ;
1026 friend Tensor operator*(const Tensor&, const Tensor&) ;
1027 friend Tensor_sym operator*(const Tensor&, const Tensor_sym&) ;
1028 friend Tensor_sym operator*(const Tensor_sym&, const Tensor&) ;
1029 friend Tensor_sym operator*(const Tensor_sym&, const Tensor_sym&) ;
1030
1031};
1032
1033
1034
1035 //-------------------------//
1036 // class Tensor_sym //
1037 //-------------------------//
1038
1050class Tensor_sym : public Tensor {
1051
1052 // Data :
1053 // -----
1054 protected:
1055
1058
1063
1064
1065 // Constructors - Destructor :
1066 // -------------------------
1067
1068 public:
1069
1089 Tensor_sym(const Map& map, int val, const Itbl& tipe,
1090 const Base_vect& triad_i, int index_sym1,
1091 int index_sym2) ;
1092
1106 Tensor_sym(const Map& map, int val, int tipe, const Base_vect& triad_i,
1107 int index_sym1, int index_sym2) ;
1108
1122 Tensor_sym(const Map& map, int tipe0, int tipe1, int tipe2,
1123 const Base_vect& triad_i,
1124 int index_sym1, int index_sym2) ;
1125
1126 Tensor_sym(const Tensor_sym& a) ;
1127
1138 Tensor_sym(const Map& map, const Base_vect& triad_i, FILE* fich) ;
1139
1140 public:
1141
1142 virtual ~Tensor_sym() ;
1143
1144 // Mutators / assignment
1145 // ---------------------
1146 public:
1147
1149 virtual void operator=(const Tensor_sym& a) ;
1150
1155 virtual void operator=(const Tensor& a) ;
1156
1157
1158 // Accessors
1159 // ---------
1160 public:
1162 int sym_index1() const {return id_sym1;} ;
1163
1167 int sym_index2() const {return id_sym2;} ;
1168
1184 virtual int position(const Itbl& ind) const ;
1185
1202 virtual Itbl indices(int pos) const ;
1203
1204
1205 // Outputs
1206 // -------
1207 public:
1208 virtual void sauve(FILE *) const ;
1209
1210
1211 // Tensor calculus
1212 // ---------------
1213 public:
1214
1229 const Tensor_sym& derive_cov(const Metric& gam) const ;
1230
1236 const Tensor_sym& derive_con(const Metric& gam) const ;
1237
1241 Tensor_sym derive_lie(const Vector& v) const ;
1242
1243
1244 // Mathematical operators
1245 // ----------------------
1246
1247 friend Tensor_sym operator*(const Tensor&, const Tensor_sym&) ;
1248 friend Tensor_sym operator*(const Tensor_sym&, const Tensor&) ;
1249
1250};
1251
1252
1253
1259
1261Tensor operator*(const Tensor& a, const Tensor& b) ;
1262
1264Tensor_sym operator*(const Tensor& a, const Tensor_sym& b) ;
1265
1267Tensor_sym operator*(const Tensor_sym& a, const Tensor& b) ;
1268
1277Tensor_sym operator*(const Tensor_sym& a, const Tensor_sym& b) ;
1278
1279
1299Tensor contract(const Tensor& t1, int ind1, const Tensor& t2, int ind2,
1300 bool desaliasing = false) ;
1301
1328Tensor contract(const Tensor& t1, int ind_i1, int ind_j1,
1329 const Tensor& t2, int ind_i2, int ind_j2,
1330 bool desaliasing = false) ;
1331
1332
1348Tensor contract(const Tensor& t1, int ind1, int ind2) ;
1349
1350
1362Tbl max(const Tensor& aa, const char* comment = 0x0, ostream& ost = cout) ;
1363
1364
1376Tbl min(const Tensor& aa, const char* comment = 0x0, ostream& ost = cout) ;
1377
1389Tbl maxabs(const Tensor& aa, const char* comment = 0x0, ostream& ost = cout,
1390 bool verb = true) ;
1391
1392
1407Tbl diffrel(const Tensor& aa, const Tensor& bb, const char* comment = 0x0,
1408 ostream& ost = cout) ;
1409
1424Tbl diffrelmax(const Tensor& aa, const Tensor& bb, const char* comment = 0x0,
1425 ostream& ost = cout) ;
1426
1437Tbl central_value(const Tensor& aa, const char* comment = 0x0, ostream& ost = cout) ;
1438
1451Tbl max_all_domains(const Tensor& aa, int l_excluded = -1, const char* comment = 0x0,
1452 ostream& ost = cout) ;
1453
1454
1467Tbl min_all_domains(const Tensor& aa, int l_excluded = -1, const char* comment = 0x0,
1468 ostream& ost = cout) ;
1469
1482Tbl maxabs_all_domains(const Tensor& aa, int l_excluded = -1, const char* comment = 0x0,
1483 ostream& ost = cout, bool verb = true) ;
1484
1485
1486
1488
1489
1495
1496Tensor operator+(const Tensor& ) ;
1497Tensor operator-(const Tensor& ) ;
1498Tensor operator+(const Tensor& a, const Tensor& b) ;
1499
1501Scalar operator+(const Tensor& a, const Scalar& b) ;
1502
1504Scalar operator+(const Scalar& a, const Tensor& b) ;
1505
1506Tensor operator-(const Tensor& a, const Tensor& b) ;
1507
1509Scalar operator-(const Tensor& a, const Scalar& b) ;
1510
1512Scalar operator-(const Scalar& a, const Tensor& b) ;
1513
1514Tensor operator*(const Scalar& a , const Tensor& b) ;
1515Tensor operator*(const Tensor& a, const Scalar& b) ;
1516Tensor operator*(double , const Tensor&) ;
1517Tensor operator* (const Tensor&, double) ;
1518Tensor operator*(int, const Tensor &) ;
1519Tensor operator*(const Tensor&, int) ;
1520Tensor operator/(const Tensor&, const Scalar&) ;
1521Tensor operator/(const Tensor&, double) ;
1522Tensor operator/(const Tensor&, int) ;
1523
1525
1530
1533Tensor_sym operator+(const Tensor_sym&) ;
1534
1538Tensor_sym operator-(const Tensor_sym&) ;
1539
1544Tensor_sym operator+(const Tensor_sym&, const Tensor_sym&) ;
1545
1550Tensor_sym operator-(const Tensor_sym&, const Tensor_sym&) ;
1551
1555Tensor_sym operator*(const Scalar& a, const Tensor_sym& b) ;
1556
1560Tensor_sym operator*(const Tensor_sym& a, const Scalar& b) ;
1561
1565Tensor_sym operator*(double, const Tensor_sym&) ;
1566
1570Tensor_sym operator*(const Tensor_sym&, double) ;
1571
1575Tensor_sym operator*(int, const Tensor_sym&) ;
1576
1580Tensor_sym operator*(const Tensor_sym&, int) ;
1581
1585Tensor_sym operator/(const Tensor_sym&, const Scalar&) ;
1586
1590Tensor_sym operator/(const Tensor_sym&, double) ;
1591
1595Tensor_sym operator/(const Tensor_sym&, int) ;
1596
1598
1599}
1600#include "scalar.h"
1601
1602#include "vector.h"
1603
1604#include "sym_tensor.h"
1605
1606
1607#endif
Vectorial bases (triads) with respect to which the tensorial components are defined.
Definition base_vect.h:105
Basic integer array class.
Definition itbl.h:122
Metric for tensor calculation.
Definition metric.h:90
Tensor field of valence 0 (or component of a tensorial field).
Definition scalar.h:393
Class intended to describe valence-2 symmetric tensors.
Definition sym_tensor.h:226
Symmetric tensors (with respect to two of their arguments).
Definition tensor.h:1050
Tensor handling.
Definition tensor.h:294
Tensor field of valence 1.
Definition vector.h:188
Base_val operator*(const Base_val &, const Base_val &)
This operator is used when calling multiplication or division of Valeur .
Cmp operator-(const Cmp &)
- Cmp
Definition cmp_arithm.C:111
Cmp operator/(const Cmp &, const Cmp &)
Cmp / Cmp.
Definition cmp_arithm.C:460
Tbl diffrel(const Cmp &a, const Cmp &b)
Relative difference between two Cmp (norme version).
Definition cmp_math.C:507
Tbl min(const Cmp &)
Minimum values of a Cmp in each domain.
Definition cmp_math.C:461
Tbl max(const Cmp &)
Maximum values of a Cmp in each domain.
Definition cmp_math.C:438
Tbl diffrelmax(const Cmp &a, const Cmp &b)
Relative difference between two Cmp (max version).
Definition cmp_math.C:542
Cmp operator+(const Cmp &)
Definition cmp_arithm.C:107
Itbl & set_index_type()
Sets the types of all the indices.
Definition tensor.h:931
Tensor_sym derive_lie(const Vector &v) const
Computes the Lie derivative of this with respect to some vector field v.
virtual void exponential_filter_ylm(int lzmin, int lzmax, int p, double alpha=-16.)
Applies exponential filters to all components (see Scalar::exponential_filter_ylm ).
Definition tensor.C:1088
const Map & get_mp() const
Returns the mapping.
Definition tensor.h:874
virtual void operator=(const Tensor &)
Assignment to a Tensor.
Definition tensor.C:562
int sym_index1() const
Number of the first symmetric index (0<= id_sym1 < valence ).
Definition tensor.h:1162
virtual void sauve(FILE *) const
Save in a binary file.
Definition tensor.C:915
const Tensor_sym & derive_cov(const Metric &gam) const
Returns the covariant derivative of this with respect to some metric .
virtual void del_derive_met(int) const
Logical destructor of the derivatives depending on the i-th element of met_depend .
Definition tensor.C:423
int get_index_type(int i) const
Gives the type (covariant or contravariant) of the index number i .
Definition tensor.h:899
virtual void dec_dzpuis(int dec=1)
Decreases by dec units the value of dzpuis and changes accordingly the values in the compactified ext...
Definition tensor.C:817
const Map *const mp
Mapping on which the numerical values at the grid points are defined.
Definition tensor.h:301
virtual Itbl indices(int pos) const
Returns the indices of a component given by its position in the array cmp .
Definition tensor_sym.C:313
friend Scalar operator-(const Tensor &, const Scalar &)
Tensor - Scalar. The Tensor must be of valence 0.
void set_triad(const Base_vect &new_triad)
Assigns a new vectorial basis (triad) of decomposition.
Definition tensor.C:528
virtual void allocate_all()
Performs the memory allocation of all the elements, down to the double arrays of the Tbl s.
Definition tensor.C:517
virtual void std_spectral_base_odd()
Sets the standard odd spectal bases of decomposition for each component.
Definition tensor.C:991
virtual void operator=(const Tensor_sym &a)
Assignment to another Tensor_sym.
Definition tensor_sym.C:201
Tensor * p_divergence[N_MET_MAX]
Array of pointers on the divergence of this with respect to various metrics.
Definition tensor.h:357
friend Scalar operator+(const Tensor &, const Scalar &)
Tensor + Scalar. The Tensor must be of valence 0.
Tensor up_down(const Metric &gam) const
Computes a new tensor by raising or lowering all the indices of *this .
void annule_extern_cn(int l_0, int deg)
Performs a smooth (C^n) transition in a given domain to zero.
Definition tensor.C:699
int get_place_met(const Metric &) const
Returns the position of the pointer on metre in the array met_depend .
Definition tensor.C:452
void set_der_0x0() const
Sets the pointers on derived quantities to 0x0.
Definition tensor.C:416
virtual void spectral_display(const char *comment=0x0, double threshold=1.e-7, int precision=4, ostream &ostr=cout) const
Displays the spectral coefficients and the associated basis functions of each component.
Definition tensor.C:883
int sym_index2() const
Number of the second symmetric index (id_sym1 < id_sym2 < valence ).
Definition tensor.h:1167
int get_valence() const
Returns the valence.
Definition tensor.h:882
Scalar trace() const
Trace on two different type indices for a valence 2 tensor.
virtual void sauve(FILE *) const
Save in a binary file.
Definition tensor_sym.C:375
const Tensor & derive_con(const Metric &gam) const
Returns the "contravariant" derivative of this with respect to some metric , by raising the last inde...
Definition tensor.C:1023
Tensor * p_derive_cov[N_MET_MAX]
Array of pointers on the covariant derivatives of this with respect to various metrics.
Definition tensor.h:341
const Metric * met_depend[N_MET_MAX]
Array on the Metric 's which were used to compute derived quantities, like p_derive_cov ,...
Definition tensor.h:333
friend Tensor operator*(const Tensor &, const Tensor &)
Tensorial product.
virtual void change_triad(const Base_vect &new_triad)
Sets a new vectorial basis (triad) of decomposition and modifies the components accordingly.
virtual Itbl indices(int pos) const
Returns the indices of a component given by its position in the array cmp .
Definition tensor.C:548
int & set_index_type(int i)
Sets the type of the index number i .
Definition tensor.h:922
virtual int position(const Itbl &ind) const
Returns the position in the array cmp of a component given by its indices.
Definition tensor.C:534
int id_sym1
Number of the first symmetric index (0<= id_sym1 < valence ).
Definition tensor.h:1057
Tensor(const Map &map, int val, const Itbl &tipe, const Base_vect &triad_i)
Standard constructor.
Definition tensor.C:211
int valence
Valence of the tensor (0 = scalar, 1 = vector, etc...).
Definition tensor.h:304
virtual void set_etat_nondef()
Sets the logical state of all components to ETATNONDEF (undefined state).
Definition tensor.C:498
virtual void annule(int l_min, int l_max)
Sets the Tensor to zero in several domains.
Definition tensor.C:680
virtual ~Tensor()
Destructor.
Definition tensor.C:394
int get_n_comp() const
Returns the number of stored components.
Definition tensor.h:885
Tensor_sym(const Map &map, int val, const Itbl &tipe, const Base_vect &triad_i, int index_sym1, int index_sym2)
Standard constructor.
Definition tensor_sym.C:72
Tensor down(int ind, const Metric &gam) const
Computes a new tensor by lowering an index of *this.
virtual void inc_dzpuis(int inc=1)
Increases by inc units the value of dzpuis and changes accordingly the values in the compactified ext...
Definition tensor.C:825
const Scalar & operator()(const Itbl &ind) const
Returns the value of a component (read-only version).
Definition tensor.C:807
virtual void exponential_filter_ylm_phi(int lzmin, int lzmax, int p_r, int p_tet, int p_phi, double alpha=-16.)
Applies exponential filters to all components (see Scalar::exponential_filter_ylm_phi ).
Definition tensor.C:1101
void set_dependance(const Metric &) const
To be used to describe the fact that the derivatives members have been calculated with met .
Definition tensor.C:462
Scalar ** cmp
Array of size n_comp of pointers onto the components.
Definition tensor.h:321
int id_sym2
Number of the second symmetric index (id_sym1 < id_sym2 < valence ).
Definition tensor.h:1062
void compute_derive_lie(const Vector &v, Tensor &resu) const
Computes the Lie derivative of this with respect to some vector field v (protected method; the public...
const Base_vect * get_triad() const
Returns the vectorial basis (triad) on which the components are defined.
Definition tensor.h:879
int n_comp
Number of stored components, depending on the symmetry.
Definition tensor.h:318
const Tensor_sym & derive_con(const Metric &gam) const
Returns the "contravariant" derivative of this with respect to some metric , by raising the last inde...
void operator-=(const Tensor &)
-= Tensor
Definition tensor.C:596
Tensor derive_lie(const Vector &v) const
Computes the Lie derivative of this with respect to some vector field v.
void set_der_met_0x0(int) const
Sets all the i-th components of met_depend , p_derive_cov , etc... to 0x0.
Definition tensor.C:442
void annule_domain(int l)
Sets the Tensor to zero in a given domain.
Definition tensor.C:675
friend Tensor_sym operator*(const Tensor &, const Tensor_sym &)
Tensorial product with symmetries.
virtual void del_deriv() const
Deletes the derived quantities.
Definition tensor.C:407
void operator+=(const Tensor &)
+= Tensor
Definition tensor.C:580
const Tensor & divergence(const Metric &gam) const
Computes the divergence of this with respect to some metric .
Definition tensor.C:1064
virtual void set_etat_qcq()
Sets the logical state of all components to ETATQCQ (ordinary state).
Definition tensor.C:490
virtual int position(const Itbl &ind) const
Returns the position in the array cmp of a component given by its indices.
Definition tensor_sym.C:248
const Tensor & derive_cov(const Metric &gam) const
Returns the covariant derivative of this with respect to some metric .
Definition tensor.C:1011
Tensor up(int ind, const Metric &gam) const
Computes a new tensor by raising an index of *this.
Itbl type_indice
1D array of integers (class Itbl ) of size valence containing the type of each index: COV for a cov...
Definition tensor.h:316
virtual ~Tensor_sym()
Destructor.
Definition tensor_sym.C:192
virtual void exponential_filter_r(int lzmin, int lzmax, int p, double alpha=-16.)
Applies exponential filters to all components (see Scalar::exponential_filter_r ).
Definition tensor.C:1075
Tensor * p_derive_con[N_MET_MAX]
Array of pointers on the contravariant derivatives of this with respect to various metrics.
Definition tensor.h:349
virtual void set_etat_zero()
Sets the logical state of all components to ETATZERO (zero state).
Definition tensor.C:506
Scalar & set(const Itbl &ind)
Returns the value of a component (read/write version).
Definition tensor.C:663
Itbl get_index_type() const
Returns the types of all the indices.
Definition tensor.h:909
const Base_vect * triad
Vectorial basis (triad) with respect to which the tensor components are defined.
Definition tensor.h:309
virtual void std_spectral_base()
Sets the standard spectal bases of decomposition for each component.
Definition tensor.C:935
Tenseur contract(const Tenseur &, int id1, int id2)
Self contraction of two indices of a Tenseur .
Tbl maxabs_all_domains(const Tensor &aa, int l_excluded=-1, const char *comment=0x0, ostream &ost=cout, bool verb=true)
Maximum of the absolute value of each component of a tensor over all the domains.
Tbl maxabs(const Tensor &aa, const char *comment=0x0, ostream &ost=cout, bool verb=true)
Maxima in each domain of the absolute values of the tensor components.
Tbl max_all_domains(const Tensor &aa, int l_excluded=-1, const char *comment=0x0, ostream &ost=cout)
Maximum value of each component of a tensor over all the domains.
Tbl central_value(const Tensor &aa, const char *comment=0x0, ostream &ost=cout)
Central value of each component of a tensor.
Tbl min_all_domains(const Tensor &aa, int l_excluded=-1, const char *comment=0x0, ostream &ost=cout)
Minimum value of each component of a tensor over all the domains.
Lorene prototypes.
Definition app_hor.h:67
Map(const Mg3d &)
Constructor from a multi-domain 3D grid.
Definition map.C:142