tensor.h

00001 /*
00002  *  Definition of Lorene classes Tensor and Sym_tensor
00003  *
00004  */
00005 
00006 /*
00007  *   Copyright (c) 2003-2004 Eric Gourgoulhon & Jerome Novak
00008  *
00009  *   Copyright (c) 1999-2001 Philippe Grandclement (for preceding class Tenseur)
00010  *   Copyright (c) 2000-2001 Eric Gourgoulhon      (for preceding class Tenseur)
00011  *   Copyright (c) 2002 Jerome Novak               (for preceding class Tenseur)
00012  *
00013  *   This file is part of LORENE.
00014  *
00015  *   LORENE is free software; you can redistribute it and/or modify
00016  *   it under the terms of the GNU General Public License as published by
00017  *   the Free Software Foundation; either version 2 of the License, or
00018  *   (at your option) any later version.
00019  *
00020  *   LORENE is distributed in the hope that it will be useful,
00021  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
00022  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00023  *   GNU General Public License for more details.
00024  *
00025  *   You should have received a copy of the GNU General Public License
00026  *   along with LORENE; if not, write to the Free Software
00027  *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00028  *
00029  */
00030 
00031 
00032 #ifndef __TENSOR_H_ 
00033 #define __TENSOR_H_ 
00034 
00035 
00036 /*
00037  * $Id: tensor.h,v 1.58 2008/12/05 08:44:02 j_novak Exp $
00038  * $Log: tensor.h,v $
00039  * Revision 1.58  2008/12/05 08:44:02  j_novak
00040  * New flag to control the "verbosity" of maxabs.
00041  *
00042  * Revision 1.57  2007/12/21 16:06:16  j_novak
00043  * Methods to filter Tensor, Vector and Sym_tensor objects.
00044  *
00045  * Revision 1.56  2006/06/07 14:08:58  j_novak
00046  * New methods set_index_type( / int).
00047  *
00048  * Revision 1.55  2005/10/25 08:56:34  p_grandclement
00049  * addition of std_spectral_base in the case of odd functions near the origin
00050  *
00051  * Revision 1.54  2004/07/08 12:21:51  j_novak
00052  * Replaced tensor::annule_extern_c2 with tensor::annule_extern_cn for a
00053  * more general transition.
00054  *
00055  * Revision 1.53  2004/06/17 06:54:23  e_gourgoulhon
00056  * Added method annule_extern_c2.
00057  *
00058  * Revision 1.52  2004/05/13 21:29:27  e_gourgoulhon
00059  * Added (external) functions central_value, max_all_domains,
00060  * min_all_domains and maxabs_all_domains.
00061  *
00062  * Revision 1.51  2004/03/24 14:53:39  j_novak
00063  * Double declarations suppressed
00064  *
00065  * Revision 1.50  2004/03/22 13:12:43  j_novak
00066  * Modification of comments to use doxygen instead of doc++
00067  *
00068  * Revision 1.49  2004/02/27 21:12:44  e_gourgoulhon
00069  * Suppressed function contract_desal (since contract has now the
00070  * boolean argument "desaliasing").
00071  *
00072  * Revision 1.48  2004/02/26 22:44:37  e_gourgoulhon
00073  * -- constructor of Tensor from Map is now declared explicit.
00074  * -- class Tensor: added methods compute_derive_lie and derive_lie
00075  * -- class Tensor_sym: added methods derive_cov, derive_con and derive_lie.
00076  *
00077  * Revision 1.47  2004/02/19 22:08:51  e_gourgoulhon
00078  * Added argument "comment" in method spectral_display,
00079  * as well as in external functions min, max, maxabs, etc...
00080  *
00081  * Revision 1.46  2004/02/18 18:42:41  e_gourgoulhon
00082  * -- Added methods trace.
00083  * -- Method scontract suppressed ( since it is the same as trace(int, int) ).
00084  *
00085  * Revision 1.45  2004/02/18 15:52:39  e_gourgoulhon
00086  * -- Added optional argument desaliasing in function contract.
00087  * -- Added new function contract for double contraction.
00088  *
00089  * Revision 1.44  2004/02/16 10:48:06  e_gourgoulhon
00090  * Added "class Tensor_sym;" at the beginning.
00091  *
00092  * Revision 1.43  2004/02/15 21:53:48  e_gourgoulhon
00093  * Modif. comments: suppressed the mention *** under development ***.
00094  *
00095  * Revision 1.42  2004/01/30 12:44:17  e_gourgoulhon
00096  * Added Tensor_sym operator*(const Tensor_sym&, const Tensor_sym& ).
00097  *
00098  * Revision 1.41  2004/01/27 13:05:10  j_novak
00099  * Removed the method Tensor::mult_r_ced()
00100  *
00101  * Revision 1.40  2004/01/19 16:31:40  e_gourgoulhon
00102  * Added operator()(int, int, int, int) and set(int, int, int, int)
00103  * for direct access to components of valence 4 tensors.
00104  *
00105  * Revision 1.39  2004/01/15 11:09:27  f_limousin
00106  * Modif in method contract_desal
00107  *
00108  * Revision 1.38  2004/01/15 11:00:44  f_limousin
00109  * Added method contract_desal for the contraction of two tensors with desaliasing
00110  *
00111  * Revision 1.37  2004/01/14 11:39:00  f_limousin
00112  * Added method contract for one tensor
00113  *
00114  * Revision 1.36  2004/01/08 09:21:39  e_gourgoulhon
00115  * Added arithmetics of Tensor_sym.
00116  * Added arithmetics with Scalar (to solve some ambiguities with respect
00117  * to the Scalar arithmetics).
00118  * Added Tensor_sym tensorial product.
00119  *
00120  * Revision 1.35  2004/01/04 20:47:37  e_gourgoulhon
00121  * -- Introduction of new derived class Tensor_sym to store tensor with
00122  *    two symmetric indices
00123  * -- Suppression of class Tensor_delta (now a special case of Tensor_sym).
00124  *
00125  * Revision 1.34  2003/12/27 14:58:01  e_gourgoulhon
00126  * Improved documentation. In particular, better description of methods
00127  * derive_cov(), derive_con() and divergence(), taking into account the
00128  * new index convention for covariant derivatives.
00129  *
00130  * Revision 1.33  2003/12/05 16:41:05  f_limousin
00131  * Added method operator*
00132  *
00133  * Revision 1.32  2003/11/06 14:43:37  e_gourgoulhon
00134  * Gave a name to const arguments in certain method prototypes (e.g.
00135  * constructors) to correct a bug of DOC++.
00136  *
00137  * Revision 1.31  2003/11/05 15:25:57  e_gourgoulhon
00138  * Added declaration of external functions:
00139  * max, min, maxabs, diffrel and diffrelmax.
00140  *
00141  * Revision 1.30  2003/11/03 10:58:00  j_novak
00142  * Suppressed the constructor from a Sym_tensor.
00143  *
00144  * Revision 1.29  2003/10/29 11:00:42  e_gourgoulhon
00145  * Virtual functions dec_dzpuis and inc_dzpuis have now an integer argument to
00146  *  specify by which amount dzpuis is to be increased.
00147  * Accordingly virtual methods dec2_dzpuis and inc2_dzpuis have been suppressed.
00148  *
00149  * Revision 1.28  2003/10/28 21:21:50  e_gourgoulhon
00150  * Member function Tensor::contract(int, int) renamed
00151  *  Tensor::scontract(int, int) in order not to mask
00152  * the non-member function contract.
00153  *
00154  * Revision 1.27  2003/10/27 10:44:00  e_gourgoulhon
00155  * Declaration of class Sym_tensor is now in file sym_tensor.h.
00156  *
00157  * Revision 1.26  2003/10/24 15:00:19  j_novak
00158  * Forgotten Class declaration... thanks IBM aix!
00159  *
00160  * Revision 1.25  2003/10/20 14:26:02  j_novak
00161  * New assignement operators.
00162  *
00163  * Revision 1.24  2003/10/20 09:32:10  j_novak
00164  * Members p_potential and p_div_free of the Helmholtz decomposition
00165  * + the method decompose_div(Metric).
00166  *
00167  * Revision 1.23  2003/10/19 19:47:31  e_gourgoulhon
00168  * Introduced new virtual method spectral_display.
00169  *
00170  * Revision 1.22  2003/10/16 15:24:30  e_gourgoulhon
00171  * Name of method annule(int ) changed to annule_domain(int ).
00172  *
00173  * Revision 1.21  2003/10/16 14:21:33  j_novak
00174  * The calculation of the divergence of a Tensor is now possible.
00175  *
00176  * Revision 1.20  2003/10/13 13:52:39  j_novak
00177  * Better managment of derived quantities.
00178  *
00179  * Revision 1.19  2003/10/08 14:24:08  j_novak
00180  * replaced mult_r_zec with mult_r_ced
00181  *
00182  * Revision 1.18  2003/10/06 20:48:23  e_gourgoulhon
00183  * Added methods down and up_down.
00184  *
00185  * Revision 1.17  2003/10/06 16:17:29  j_novak
00186  * Calculation of contravariant derivative and Ricci scalar.
00187  *
00188  * Revision 1.16  2003/10/06 15:12:56  e_gourgoulhon
00189  * Added tensor contraction and raising of index.
00190  *
00191  * Revision 1.15  2003/10/06 13:58:45  j_novak
00192  * The memory management has been improved.
00193  * Implementation of the covariant derivative with respect to the exact Tensor
00194  * type.
00195  *
00196  * Revision 1.14  2003/10/05 21:07:27  e_gourgoulhon
00197  * Method std_spectral_base() is now virtual.
00198  *
00199  * Revision 1.13  2003/10/03 11:21:45  j_novak
00200  * More methods for the class Metric
00201  *
00202  * Revision 1.12  2003/10/02 15:45:48  j_novak
00203  * New class Metric
00204  *
00205  * Revision 1.11  2003/10/01 15:41:14  e_gourgoulhon
00206  * class name Delta changed to Tensor_delta.
00207  *
00208  * Revision 1.10  2003/10/01 13:03:52  e_gourgoulhon
00209  * The method get_mp() returns now a reference (and not a pointer)
00210  * onto a mapping.
00211  *
00212  * Revision 1.9  2003/09/29 13:48:17  j_novak
00213  * New class Delta.
00214  *
00215  * Revision 1.8  2003/09/26 14:33:51  j_novak
00216  * Arithmetic functions for the class Tensor
00217  *
00218  * Revision 1.7  2003/09/26 08:05:29  j_novak
00219  * New class Vector.
00220  *
00221  * Revision 1.6  2003/09/25 21:01:50  e_gourgoulhon
00222  * Improved comments.
00223  *
00224  * Revision 1.5  2003/09/25 13:37:38  j_novak
00225  * Symmetric tensors of valence 2 are now implemented (not tested yet).
00226  *
00227  * Revision 1.4  2003/09/24 15:10:54  j_novak
00228  * Suppression of the etat flag in class Tensor (still present in Scalar)
00229  *
00230  * Revision 1.3  2003/09/24 08:46:31  j_novak
00231  * Added tensor.h and scalar.h to the documentation
00232  *
00233  * Revision 1.2  2003/09/23 08:53:11  e_gourgoulhon
00234  * not ready yet
00235  *
00236  * Revision 1.1  2003/09/22 12:50:47  e_gourgoulhon
00237  * First version: not ready yet!
00238  *
00239  *
00240  * $Header: /cvsroot/Lorene/C++/Include/tensor.h,v 1.58 2008/12/05 08:44:02 j_novak Exp $
00241  *
00242  */
00243 
00244 #define COV -1
00245 #define CON +1
00246 
00247 #define N_MET_MAX 5
00248 
00249 // Headers Lorene 
00250 #include "itbl.h"
00251 #include "base_vect.h"
00252 #include "map.h"
00253 
00254 class Scalar ;
00255 class Vector ; 
00256 class Tensor_sym ;
00257 class Sym_tensor ;
00258 class Metric ;
00259 
00260             //-------------------------//
00261             //       class Tensor      //
00262             //-------------------------//
00263             
00264 
00278 class Tensor { 
00279 
00280     // Data : 
00281     // -----
00282     protected:
00283     
00285     const Map* const mp ;   
00286 
00288     int valence ;   
00289             
00293     const Base_vect* triad ; 
00294 
00300     Itbl type_indice ;  
00301     
00302     int n_comp ;    
00303 
00305     Scalar** cmp ;   
00306 
00307 
00308     // Derived data : 
00309     // ------------
00310      protected:
00317     mutable const Metric* met_depend[N_MET_MAX] ; 
00318 
00325     mutable Tensor* p_derive_cov[N_MET_MAX];
00326     
00333     mutable Tensor* p_derive_con[N_MET_MAX];
00334 
00341     mutable Tensor* p_divergence[N_MET_MAX];
00342 
00343    
00344     // Constructors - Destructor :
00345     // -------------------------
00346     
00347     public: 
00348 
00364     Tensor(const Map& map, int val, const Itbl& tipe, 
00365             const Base_vect& triad_i) ;
00366 
00383     Tensor(const Map& map, int val, const Itbl& tipe, 
00384             const Base_vect* triad_i) ;
00385 
00395     Tensor(const Map& map, int val, int tipe, 
00396             const Base_vect& triad_i) ;
00397 
00398     Tensor(const Tensor&) ;  
00399 
00410     Tensor(const Map& map, const Base_vect& triad_i, FILE* fich) ;
00411 
00412     protected:
00418      explicit Tensor(const Map& map) ;
00419 
00441     Tensor(const Map& map, int val, const Itbl& tipe, int n_comp_i,
00442             const Base_vect& triad_i) ;
00443 
00458     Tensor(const Map& map, int val, int tipe, int n_comp_i, 
00459          const Base_vect& triad_i) ;
00460 
00461 
00462     public: 
00463 
00464     virtual ~Tensor() ; 
00465     
00466     // Memory management
00467     // -----------------
00468     protected:
00469     virtual void del_deriv() const ;    
00470 
00472     void set_der_0x0() const ; 
00473 
00478     virtual void del_derive_met(int) const ;
00479 
00484     void set_der_met_0x0(int) const ;
00485 
00495     void set_dependance (const Metric&) const ;
00496 
00502     int get_place_met(const Metric&) const ;
00503     
00504     // Mutators / assignment
00505     // ---------------------
00506     public:
00511     virtual void set_etat_nondef() ;
00512     
00517     virtual void set_etat_zero() ;
00518 
00523     virtual void set_etat_qcq() ;
00524     
00533     virtual void allocate_all() ; 
00534 
00538     virtual void change_triad(const Base_vect& new_triad) ; 
00539     
00546     void set_triad(const Base_vect& new_triad) ; 
00547 
00548     
00549     virtual void operator=(const Tensor&) ;
00550     
00562     Scalar& set(const Itbl& ind) ; 
00563     
00573     Scalar& set(int i1, int i2) ; 
00574     
00575     
00586     Scalar& set(int i1, int i2, int i3) ; 
00587     
00600     Scalar& set(int i1, int i2, int i3, int i4) ; 
00601     
00607     void annule_domain(int l) ; 
00608 
00620     virtual void annule(int l_min, int l_max) ; 
00621 
00633          void annule_extern_cn(int l_0, int deg) ;
00634 
00639     virtual void std_spectral_base() ; 
00640     
00645     virtual void std_spectral_base_odd() ; 
00646     
00651     virtual void dec_dzpuis(int dec = 1) ; 
00652 
00657     virtual void inc_dzpuis(int inc = 1) ; 
00658     
00663     virtual void  exponential_filter_r(int lzmin, int lzmax, int p, 
00664                 double alpha= -16.) ;
00665 
00670     virtual void exponential_filter_ylm(int lzmin, int lzmax, int p, 
00671                 double alpha= -16.) ;
00672 
00673     // Computational methods
00674     // ---------------------
00675     
00676     protected: 
00681         void compute_derive_lie(const Vector& v, Tensor& resu) const ; 
00682 
00683     
00684     public:
00707     const Tensor& derive_cov(const Metric& gam) const ; 
00708 
00714     const Tensor& derive_con(const Metric& gam) const ; 
00715 
00733     const Tensor& divergence(const Metric& gam) const ; 
00734 
00735 
00739         Tensor derive_lie(const Vector& v) const ; 
00740 
00753     Tensor up(int ind, const Metric& gam) const ; 
00754 
00767     Tensor down(int ind, const Metric& gam) const ; 
00768 
00776     Tensor up_down(const Metric& gam) const ; 
00777 
00786     Tensor trace(int ind1, int ind2) const ; 
00787 
00798     Tensor trace(int ind1, int ind2, const Metric& gam) const ; 
00799 
00802     Scalar trace() const ; 
00803 
00808     Scalar trace(const Metric& gam) const ; 
00809 
00810 
00811     // Accessors
00812     // ---------
00813         public:
00829     virtual int position(const Itbl& ind) const ;
00830 
00847     virtual Itbl indices(int pos) const ;
00848     
00849     public:
00851     const Map& get_mp() const {return *mp ;} ; 
00852 
00856     const Base_vect* get_triad() const {return triad;} ; 
00857     
00859     int get_valence() const {return valence ; } ; 
00860 
00862     int get_n_comp() const {return n_comp ;} ; 
00863     
00876     int get_index_type(int i) const {return type_indice(i) ;};
00877 
00886     Itbl get_index_type() const {return type_indice ; } ;
00887 
00899     int& set_index_type(int i) {return type_indice.set(i) ;};
00900 
00908     Itbl& set_index_type() {return type_indice ; } ;
00909 
00910     
00922     const Scalar& operator()(const Itbl& ind) const ; 
00923 
00933     const Scalar& operator()(int i1, int i2) const ; 
00934 
00945     const Scalar& operator()(int i1, int i2, int i3) const ; 
00946     
00958     const Scalar& operator()(int i1, int i2, int i3, int i4) const ; 
00959     
00960     // Member arithmetics
00961     // ------------------
00962     public:
00963     void operator+=(const Tensor &) ;           
00964     void operator-=(const Tensor &) ;           
00965 
00966     // Outputs
00967     // -------
00968     public:
00969     virtual void sauve(FILE *) const ;      
00970 
00981     virtual void spectral_display(const char* comment = 0x0, 
00982                             double threshold = 1.e-7, int precision = 4, 
00983                 ostream& ostr = cout) const ;
00984 
00985     friend ostream& operator<<(ostream& , const Tensor & ) ;
00986     
00987 
00988     // Friend classes 
00989     // ---------------
00990     friend class Scalar ;
00991     friend class Vector ;
00992     friend class Sym_tensor ;
00993     friend class Tensor_sym ; 
00994     friend class Metric ;
00995   
00996     // Mathematical operators
00997     // ----------------------
00998     
00999     friend Scalar operator+(const Tensor&, const Scalar&) ;
01000     friend Scalar operator+(const Scalar&, const Tensor&) ;
01001     friend Scalar operator-(const Tensor&, const Scalar&) ;
01002     friend Scalar operator-(const Scalar&, const Tensor&) ;
01003     friend Tensor operator*(const Tensor&, const Tensor&) ; 
01004     friend Tensor_sym operator*(const Tensor&, const Tensor_sym&) ; 
01005     friend Tensor_sym operator*(const Tensor_sym&, const Tensor&) ;     
01006     friend Tensor_sym operator*(const Tensor_sym&, const Tensor_sym&) ;     
01007    
01008 };
01009 
01010 
01011 
01012             //-------------------------//
01013             //    class Tensor_sym     //
01014             //-------------------------//
01015 
01027 class Tensor_sym : public Tensor { 
01028 
01029     // Data : 
01030     // -----
01031     protected:
01032     
01034         int id_sym1 ;
01035         
01039         int id_sym2 ;
01040         
01041          
01042     // Constructors - Destructor :
01043     // -------------------------
01044     
01045     public: 
01046 
01066     Tensor_sym(const Map& map, int val, const Itbl& tipe, 
01067             const Base_vect& triad_i, int index_sym1, 
01068                         int index_sym2) ;
01069 
01083     Tensor_sym(const Map& map, int val, int tipe, const Base_vect& triad_i,
01084                     int index_sym1, int index_sym2) ;
01085 
01099     Tensor_sym(const Map& map, int tipe0, int tipe1, int tipe2, 
01100                    const Base_vect& triad_i,
01101                    int index_sym1, int index_sym2) ;
01102 
01103     Tensor_sym(const Tensor_sym& a) ;  
01104 
01115     Tensor_sym(const Map& map, const Base_vect& triad_i, FILE* fich) ;
01116 
01117     public: 
01118 
01119     virtual ~Tensor_sym() ; 
01120     
01121     // Mutators / assignment
01122     // ---------------------
01123     public:
01124     
01126     virtual void operator=(const Tensor_sym& a) ;
01127     
01132     virtual void operator=(const Tensor& a) ; 
01133     
01134 
01135     // Accessors
01136     // ---------
01137         public:
01139         int sym_index1() const {return id_sym1;} ;
01140         
01144         int sym_index2() const {return id_sym2;} ;
01145         
01161     virtual int position(const Itbl& ind) const ;
01162 
01179     virtual Itbl indices(int pos) const ;
01180         
01181             
01182     // Outputs
01183     // -------
01184     public:
01185     virtual void sauve(FILE *) const ;      
01186     
01187 
01188     // Tensor calculus
01189     // ---------------
01190     public:
01191     
01206     const Tensor_sym& derive_cov(const Metric& gam) const ; 
01207 
01213     const Tensor_sym& derive_con(const Metric& gam) const ; 
01214 
01218         Tensor_sym derive_lie(const Vector& v) const ; 
01219 
01220 
01221     // Mathematical operators
01222     // ----------------------
01223     
01224     friend Tensor_sym operator*(const Tensor&, const Tensor_sym&) ; 
01225     friend Tensor_sym operator*(const Tensor_sym&, const Tensor&) ; 
01226     
01227 }; 
01228 
01229 
01230 
01237 
01238 Tensor operator*(const Tensor& a, const Tensor& b) ; 
01239 
01241 Tensor_sym operator*(const Tensor& a, const Tensor_sym& b) ; 
01242 
01244 Tensor_sym operator*(const Tensor_sym& a, const Tensor& b) ; 
01245 
01254 Tensor_sym operator*(const Tensor_sym& a, const Tensor_sym& b) ; 
01255 
01256 
01276 Tensor contract(const Tensor& t1, int ind1, const Tensor& t2, int ind2, 
01277         bool desaliasing = false) ;
01278 
01305 Tensor contract(const Tensor& t1, int ind_i1, int ind_j1, 
01306                 const Tensor& t2, int ind_i2, int ind_j2,
01307                 bool desaliasing = false) ;
01308 
01309 
01325 Tensor contract(const Tensor& t1, int ind1, int ind2) ;
01326 
01327 
01339 Tbl max(const Tensor& aa, const char* comment = 0x0, ostream& ost = cout) ; 
01340 
01341 
01353 Tbl min(const Tensor& aa, const char* comment = 0x0, ostream& ost = cout) ; 
01354 
01366 Tbl maxabs(const Tensor& aa, const char* comment = 0x0, ostream& ost = cout, 
01367        bool verb = true) ; 
01368 
01369 
01384 Tbl diffrel(const Tensor& aa, const Tensor& bb, const char* comment = 0x0,
01385             ostream& ost = cout) ; 
01386 
01401 Tbl diffrelmax(const Tensor& aa, const Tensor& bb, const char* comment = 0x0,
01402                ostream& ost = cout) ; 
01403 
01414 Tbl central_value(const Tensor& aa, const char* comment = 0x0, ostream& ost = cout) ; 
01415 
01428 Tbl max_all_domains(const Tensor& aa, int l_excluded = -1, const char* comment = 0x0, 
01429     ostream& ost = cout) ; 
01430 
01431 
01444 Tbl min_all_domains(const Tensor& aa, int l_excluded = -1, const char* comment = 0x0, 
01445     ostream& ost = cout) ; 
01446 
01459 Tbl maxabs_all_domains(const Tensor& aa, int l_excluded = -1, const char* comment = 0x0, 
01460     ostream& ost = cout, bool verb = true) ; 
01461 
01462 
01463 
01473 Tensor operator+(const Tensor& ) ;          
01474 Tensor operator-(const Tensor& ) ;          
01475 Tensor operator+(const Tensor& a, const Tensor& b) ;    
01476 
01478 Scalar operator+(const Tensor& a, const Scalar& b) ;    
01479 
01481 Scalar operator+(const Scalar& a, const Tensor& b) ;    
01482 
01483 Tensor operator-(const Tensor& a, const Tensor& b) ;    
01484 
01486 Scalar operator-(const Tensor& a, const Scalar& b) ;    
01487 
01489 Scalar operator-(const Scalar& a, const Tensor& b) ;    
01490 
01491 Tensor operator*(const Scalar& a , const Tensor& b) ;   
01492 Tensor operator*(const Tensor& a, const Scalar& b) ;    
01493 Tensor operator*(double , const Tensor&) ;              
01494 Tensor operator* (const Tensor&, double) ;              
01495 Tensor operator*(int, const Tensor &) ;                 
01496 Tensor operator*(const Tensor&, int) ;                 
01497 Tensor operator/(const Tensor&, const Scalar&) ;       
01498 Tensor operator/(const Tensor&, double) ;              
01499 Tensor operator/(const Tensor&, int) ;                 
01500 
01502 
01510 Tensor_sym operator+(const Tensor_sym&) ;  
01511 
01515 Tensor_sym operator-(const Tensor_sym&) ;  
01516 
01521 Tensor_sym operator+(const Tensor_sym&, const Tensor_sym&) ;  
01522 
01527 Tensor_sym operator-(const Tensor_sym&, const Tensor_sym&) ;  
01528 
01532 Tensor_sym operator*(const Scalar& a, const Tensor_sym& b) ;   
01533 
01537 Tensor_sym operator*(const Tensor_sym& a, const Scalar& b) ;  
01538 
01542 Tensor_sym operator*(double, const Tensor_sym&) ;  
01543 
01547 Tensor_sym operator*(const Tensor_sym&, double) ;  
01548 
01552 Tensor_sym operator*(int, const Tensor_sym&) ;  
01553 
01557 Tensor_sym operator*(const Tensor_sym&, int) ;  
01558 
01562 Tensor_sym operator/(const Tensor_sym&, const Scalar&) ;  
01563 
01567 Tensor_sym operator/(const Tensor_sym&, double) ;  
01568 
01572 Tensor_sym operator/(const Tensor_sym&, int) ;  
01573 
01577 #include "scalar.h"
01578 
01579 #include "vector.h"
01580 
01581 #include "sym_tensor.h"
01582 
01583 
01584 #endif

Generated on Tue Feb 7 01:35:21 2012 for LORENE by  doxygen 1.4.6