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
{
+ 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 string & n, const ex & mu);
+ friend lortensor lortensor_symbolic(const 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
+ 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
+// member functions
// default constructor, destructor, copy constructor assignment operator and helpers
public:
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:
//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;
//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;
};
}
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 string & n, const ex & mu);
+lortensor lortensor_symbolic(const 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