X-Git-Url: https://www.ginac.de/ginac.git//ginac.git?p=ginac.git;a=blobdiff_plain;f=ginac%2Flortensor.h;h=8fbadd3de9426344d62be55ced5ea42cdf2ef5b7;hp=e3cb75d09513907688f2f2bd811f58cff2588cc6;hb=dad107ff48f68d45e72469a8716df375ae145cf3;hpb=2565309dd7c38635c191eacf2a4af9b23fc0d310 diff --git a/ginac/lortensor.h b/ginac/lortensor.h index e3cb75d0..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 @@ -25,111 +25,95 @@ #include #include -#include "config.h" #include -#include -#include +#include "indexed.h" +#include "lorentzidx.h" -#ifndef NO_GINAC_NAMESPACE namespace GiNaC { -#endif // ndef NO_GINAC_NAMESPACE -/** 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); @@ -141,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_GINAC_NAMESPACE } // namespace GiNaC -#endif // ndef NO_GINAC_NAMESPACE #endif // ndef __GINAC_LORTENSOR_H__