X-Git-Url: https://www.ginac.de/ginac.git//ginac.git?p=ginac.git;a=blobdiff_plain;f=ginac%2Flortensor.h;h=8fbadd3de9426344d62be55ced5ea42cdf2ef5b7;hp=86bf70a04e9d46c6be033ae9fc9e1388bc8327d7;hb=dad107ff48f68d45e72469a8716df375ae145cf3;hpb=5378fa494d21758a9c750efa2a90b49f34692e4b diff --git a/ginac/lortensor.h b/ginac/lortensor.h index 86bf70a0..8fbadd3d 100644 --- a/ginac/lortensor.h +++ b/ginac/lortensor.h @@ -1,9 +1,9 @@ /** @file lortensor.h * - * Interface to GiNaCĀ“s lortensor objects. */ + * Interface to GiNaC's Lorentz tensors. */ /* - * GiNaC Copyright (C) 1999-2000 Johannes Gutenberg University Mainz, Germany + * GiNaC Copyright (C) 1999-2001 Johannes Gutenberg University Mainz, Germany * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -29,106 +29,91 @@ #include "indexed.h" #include "lorentzidx.h" -#ifndef NO_NAMESPACE_GINAC namespace GiNaC { -#endif // ndef NO_NAMESPACE_GINAC -/** Base class for lortensor object */ + +/** This class holds an object carrying Lorentz indices (of class + * lorentzidx). It can represent a general (symbolic) tensor of type + * (p,q), or one of the constant tensors g (the metric), delta (unity + * matrix) or epsilon (4-dimensional totally antisymmetric tensor). */ class lortensor : public indexed { - // friends - friend lortensor lortensor_g(const ex & mu, const ex & nu); - // friend lortensor lortensor_delta(const ex & mu, const ex & nu); - friend lortensor lortensor_epsilon(const ex & mu, const ex & nu, - const ex & rho, const ex & sigma); - // friend lortensor lortensor_rankn(const string & n, const exvector & iv); - friend lortensor lortensor_rank1(const string & n, const ex & mu); - friend lortensor lortensor_rank2(const string & n, const ex & mu, const ex & nu); - friend ex simplify_lortensor_mul(const ex & m); - friend ex simplify_lortensor(const ex & e); - - // types + GINAC_DECLARE_REGISTERED_CLASS(lortensor, indexed) + +// friends + + friend lortensor lortensor_g(const ex & mu, const ex & nu); + friend lortensor lortensor_delta(const ex & mu, const ex & nu); + friend lortensor lortensor_epsilon(const ex & mu, const ex & nu, + const ex & rho, const ex & sigma); + friend lortensor lortensor_vector(const std::string & n, const ex & mu); + friend lortensor lortensor_symbolic(const std::string & name, const exvector & iv); + + friend ex simplify_lortensor_mul(const ex & m); + friend ex simplify_lortensor(const ex & e); + +// types public: - typedef enum { invalid, - lortensor_g, - lortensor_rankn, - lortensor_rank1, - lortensor_rank2, - // lortensor_delta, - lortensor_epsilon - } lortensor_types; - - // member functions - - // default constructor, destructor, copy constructor assignment operator and helpers -public: - lortensor(); - ~lortensor(); - lortensor(const lortensor & other); - const lortensor & operator=(const lortensor & other); -protected: - void copy(const lortensor & other); - void destroy(bool call_parent); + typedef enum { + invalid, /**< not properly constructed */ + lortensor_g, /**< metric tensor */ + lortensor_delta, /**< unity matrix */ + lortensor_epsilon, /**< four-dimensional totally antisymmetric tensor */ + lortensor_symbolic /**< general symbolic Lorentz tensor */ + } lortensor_types; + +// member functions - // other constructors + // other constructors protected: - lortensor(lortensor_types const lt, const string & n); - lortensor(lortensor_types const lt, const string & n, const ex & mu); - lortensor(lortensor_types const lt, const string & n, const ex & mu, const ex & nu); - lortensor(lortensor_types const lt, const string & n, const ex & mu, const ex & nu, - const ex & rho); - lortensor(lortensor_types const lt, const string & n, const ex & mu, const ex & nu, const ex & rho, const ex & sigma); - lortensor(lortensor_types const lt, const string & n, const exvector & iv); - lortensor(lortensor_types const lt, const string & n, unsigned s, const exvector & iv); - lortensor(lortensor_types const lt, const string & n, unsigned s, exvector * ivp); - - //functions overriding virtual functions from base classes + lortensor(lortensor_types const lt, const std::string & n); + lortensor(lortensor_types const lt, const std::string & n, const ex & mu); + lortensor(lortensor_types const lt, const std::string & n, const ex & mu, const ex & nu); + lortensor(lortensor_types const lt, const std::string & n, const ex & mu, const ex & nu, const ex & rho); + lortensor(lortensor_types const lt, const std::string & n, const ex & mu, const ex & nu, const ex & rho, const ex & sigma); + lortensor(lortensor_types const lt, const std::string & n, const exvector & iv); + lortensor(lortensor_types const lt, const std::string & n, unsigned s, const exvector & iv); + lortensor(lortensor_types const lt, const std::string & n, unsigned s, exvector * ivp); + + //functions overriding virtual functions from base classes public: - basic * duplicate() const; - void printraw(ostream & os) const; - void printtree(ostream & os, unsigned indent) const; - void print(ostream & os, unsigned upper_precedence=0) const; - void printcsrc(ostream & os, unsigned type, unsigned upper_precedence=0) const; - bool info(unsigned inf) const; - ex eval(int level=0) const; + void printraw(std::ostream & os) const; + void printtree(std::ostream & os, unsigned indent) const; + void print(std::ostream & os, unsigned upper_precedence=0) const; + bool info(unsigned inf) const; + ex eval(int level=0) const; protected: - int compare_same_type(const basic & other) const; - bool is_equal_same_type(const basic & other) const; - unsigned return_type(void) const; - unsigned return_type_tinfo(void) const; - ex thisexprseq(const exvector & v) const; - ex thisexprseq(exvector * vp) const; + bool is_equal_same_type(const basic & other) const; + unsigned return_type(void) const; + unsigned return_type_tinfo(void) const; + ex thisexprseq(const exvector & v) const; + ex thisexprseq(exvector * vp) const; - // new virtual functions which can be overridden by derived classes - // none + // new virtual functions which can be overridden by derived classes + // none - //non virtual functions in this class + //non virtual functions in this class public: - void setname(const string & n); - string getname(void) const {return name;} + void setname(const std::string & n) {name = n;} + std::string getname(void) const {return name;} protected: - bool all_of_type_lorentzidx(void) const; + bool all_of_type_lorentzidx(void) const; private: - string & autoname_prefix(void); + std::string & autoname_prefix(void); - //member variables + //member variables protected: - lortensor_types type; - string name; - unsigned serial; + lortensor_types type; /**< Type of object */ + std::string name; /**< Name of symbolic tensor */ + unsigned serial; /**< Unique serial number for comparing symbolic tensors */ private: - static unsigned next_serial; + static unsigned next_serial; }; -// global constants - -extern const lortensor some_lortensor; -extern const type_info & typeid_lortensor; - // utility functions - + inline const lortensor & ex_to_lortensor(const ex &e) { return static_cast(*e.bp); @@ -140,12 +125,15 @@ inline lortensor &ex_to_nonconst_lortensor(const ex &e) } lortensor lortensor_g(const ex & mu, const ex & nu); +lortensor lortensor_delta(const ex & mu, const ex & nu); +lortensor lortensor_epsilon(const ex & mu, const ex & nu, + const ex & rho, const ex & sigma); +lortensor lortensor_vector(const std::string & n, const ex & mu); +lortensor lortensor_symbolic(const std::string & name, const exvector & iv); + ex simplify_lortensor_mul(const ex & m); ex simplify_lortensor(const ex & e); -ex Dim(void); -#ifndef NO_NAMESPACE_GINAC } // namespace GiNaC -#endif // ndef NO_NAMESPACE_GINAC #endif // ndef __GINAC_LORTENSOR_H__