]> www.ginac.de Git - ginac.git/blobdiff - ginac/tensor.h
added predefined epsilon tensor
[ginac.git] / ginac / tensor.h
index 9c4d2c36137a8a6dd7b049bf3d055b639b7f4398..b8a65455f7ea6ae9ba71c031914644980d1c8b51 100644 (file)
@@ -104,9 +104,19 @@ class tensepsilon : public tensor
 {
        GINAC_DECLARE_REGISTERED_CLASS(tensepsilon, tensor)
 
 {
        GINAC_DECLARE_REGISTERED_CLASS(tensepsilon, tensor)
 
+       // other constructors
+public:
+       tensepsilon(bool minkowski, bool pos_sig);
+
        // functions overriding virtual functions from bases classes
 public:
        void print(std::ostream & os, unsigned upper_precedence=0) const;
        // functions overriding virtual functions from bases classes
 public:
        void print(std::ostream & os, unsigned upper_precedence=0) const;
+       ex eval_indexed(const basic & i) const;
+
+       // member variables
+private:
+       bool minkowski; /**< If true, tensor is in Minkowski-type space. Otherwise it is in a Euclidean space. */
+       bool pos_sig;  /**< If true, the metric is assumed to be diag(-1,1,1...). Otherwise it is diag(1,-1,-1,...). This is only relevant if minkowski = true. */
 };
 
 
 };
 
 
@@ -145,14 +155,34 @@ ex metric_tensor(const ex & i1, const ex & i2);
  *  @return newly constructed Lorentz metric tensor */
 ex lorentz_g(const ex & i1, const ex & i2, bool pos_sig = false);
 
  *  @return newly constructed Lorentz metric tensor */
 ex lorentz_g(const ex & i1, const ex & i2, bool pos_sig = false);
 
-/** Create an epsilon tensor with two indices. The indices must be of class
- *  idx or a subclass, and have a dimension of 2.
+/** Create an epsilon tensor in a Euclidean space with two indices. The
+ *  indices must be of class idx or a subclass, and have a dimension of 2.
  *
  *  @param i1 First index
  *  @param i2 Second index
  *  @return newly constructed epsilon tensor */
 ex epsilon_tensor(const ex & i1, const ex & i2);
 
  *
  *  @param i1 First index
  *  @param i2 Second index
  *  @return newly constructed epsilon tensor */
 ex epsilon_tensor(const ex & i1, const ex & i2);
 
+/** Create an epsilon tensor in a Euclidean space with three indices. The
+ *  indices must be of class idx or a subclass, and have a dimension of 3.
+ *
+ *  @param i1 First index
+ *  @param i2 Second index
+ *  @param i3 Third index
+ *  @return newly constructed epsilon tensor */
+ex epsilon_tensor(const ex & i1, const ex & i2, const ex & i3);
+
+/** Create an epsilon tensor in a Minkowski space with four indices. The
+ *  indices must be of class varidx or a subclass, and have a dimension of 4.
+ *
+ *  @param i1 First index
+ *  @param i2 Second index
+ *  @param i3 Third index
+ *  @param i4 Fourth index
+ *  @param pos_sig Whether the signature of the metric is positive
+ *  @return newly constructed epsilon tensor */
+ex lorentz_eps(const ex & i1, const ex & i2, const ex & i3, const ex & i4, bool pos_sig = false);
+
 } // namespace GiNaC
 
 #endif // ndef __GINAC_TENSOR_H__
 } // namespace GiNaC
 
 #endif // ndef __GINAC_TENSOR_H__