File: GyotoComplexMetric.h

package info (click to toggle)
gyoto 2.0.2-7
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 9,444 kB
  • sloc: cpp: 42,330; sh: 4,512; python: 3,436; xml: 2,865; makefile: 691; ansic: 346
file content (107 lines) | stat: -rw-r--r-- 2,953 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
/**
 * \file GyotoCompexMetric.h
 * \brief Combine metrics
 * 
 */

/*
    Copyright 2020 Thibaut Paumard

    This file is part of Gyoto.

    Gyoto is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    Gyoto is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with Gyoto.  If not, see <http://www.gnu.org/licenses/>.
 */


#ifndef __GyotoComplexMetric_H_
#define __GyotoComplexMetric_H_

#include <GyotoMetric.h>
#include <GyotoWIP.h>

namespace Gyoto {
  namespace Metric { class Complex; }
}

/**
 * \class Gyoto::Metric::Complex
 * \brief Combine several metrics
 * 
 * Adds linearly the contribution of several metrics. All suv-metrics
 * must use a common coordinate system.
 *
 */

class Gyoto::Metric::Complex
  : public Gyoto::Metric::Generic, Gyoto::WIP
{
  friend class Gyoto::SmartPointer<Gyoto::Metric::Complex>;

  // Data : 
  // -----
 protected:

  /**
   * \brief Number of objects
   */
  size_t cardinal_;

  /**
   * \brief Array of Astrobj::Generic
   */
  Gyoto::SmartPointer<Gyoto::Metric::Generic> * elements_;

 public:
  GYOTO_OBJECT_THREAD_SAFETY;
  Complex(); ///< Default constructor.
  Complex(const Complex& ) ; ///< Copy constructor.
  virtual Complex* clone() const; ///< "Virtual" copy constructor
  /**
   *  Frees every SmartPointer<Metric::Generic> before freed the array itself.
   */
  virtual ~Complex() ; ///< Destructor
  void append(Gyoto::SmartPointer<Gyoto::Metric::Generic> element);
  ///< Add element at the end of the array.
  void remove(size_t i);
  ///< Remove i-th element from the array.
  size_t getCardinal() const;
  ///< Get the number of elements in the array.
#ifdef GYOTO_USE_XERCES
  virtual void fillElement(FactoryMessenger *fmp) const ;
  virtual void setParameters(FactoryMessenger *fmp);
#endif
  /**
   * This should work as expected:
   * \code
   *   SmartPointer<Metric::Complex> cplx;
   *   SmartPointer<Metric::TypeA> objA;
   *   SmartPointer<Metric::TypeB> objB;
   *   cplx -> append(objA);
   *   cplx[0] = objB;
   * \endcode
   */
  Gyoto::SmartPointer<Gyoto::Metric::Generic>& operator[](size_t i) ;
  ///< Retrieve i-th element.
  Gyoto::SmartPointer<Gyoto::Metric::Generic> const&operator[](size_t i) const;
  ///< Retrieve a const version of the i-th element.

 public:
  using Generic::gmunu;
  void gmunu(double ARGOUT_ARRAY2[4][4], const double IN_ARRAY1[4]) const ;
  void jacobian(double ARGOUT_ARRAY3[4][4][4], const double IN_ARRAY1[4]) const;
  int isStopCondition(double const coord[8]) const;

};

#endif