X-Git-Url: https://www.ginac.de/ginac.git//ginac.git?p=ginac.git;a=blobdiff_plain;f=ginac%2Flortensor.h;h=8fbadd3de9426344d62be55ced5ea42cdf2ef5b7;hp=c259a4343203d8f55a5a9782a2df3472a17bc989;hb=dad107ff48f68d45e72469a8716df375ae145cf3;hpb=703c6cebb5d3d395437e73e6935f3691aed68e0a diff --git a/ginac/lortensor.h b/ginac/lortensor.h index c259a434..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,71 +29,61 @@ #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 + 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_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 std::string & n, const ex & mu); - friend lortensor lortensor_rank2(const std::string & n, const ex & mu, const ex & nu); + 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 +// types public: - typedef enum { invalid, - lortensor_g, - lortensor_rankn, - lortensor_rank1, - lortensor_rank2, - // lortensor_delta, - lortensor_epsilon + 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 - - // 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); +// member functions // other constructors protected: 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); 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(std::ostream & os) const; void printtree(std::ostream & os, unsigned indent) const; void print(std::ostream & os, unsigned upper_precedence=0) const; - void printcsrc(std::ostream & os, unsigned type, 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; @@ -105,7 +95,7 @@ protected: //non virtual functions in this class public: - void setname(const std::string & n); + void setname(const std::string & n) {name = n;} std::string getname(void) const {return name;} protected: bool all_of_type_lorentzidx(void) const; @@ -115,18 +105,13 @@ private: //member variables protected: - lortensor_types type; - std::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; }; -// global constants - -extern const lortensor some_lortensor; -extern const type_info & typeid_lortensor; - // utility functions inline const lortensor & ex_to_lortensor(const ex &e) @@ -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__