LORENE
metric_flat.C
1/*
2 * Definition of methods for the class Metric_flat.
3 *
4 */
5
6/*
7 * Copyright (c) 2003 Eric Gourgoulhon & Jerome Novak
8 *
9 * Copyright (c) 1999-2001 Philippe Grandclement (for previous class Metrique)
10 *
11 * This file is part of LORENE.
12 *
13 * LORENE is free software; you can redistribute it and/or modify
14 * it under the terms of the GNU General Public License version 2
15 * as published by the Free Software Foundation.
16 *
17 * LORENE is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 * GNU General Public License for more details.
21 *
22 * You should have received a copy of the GNU General Public License
23 * along with LORENE; if not, write to the Free Software
24 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
25 *
26 */
27
28
29
30/*
31 * $Id: metric_flat.C,v 1.8 2016/12/05 16:17:59 j_novak Exp $
32 * $Log: metric_flat.C,v $
33 * Revision 1.8 2016/12/05 16:17:59 j_novak
34 * Suppression of some global variables (file names, loch, ...) to prevent redefinitions
35 *
36 * Revision 1.7 2014/10/13 08:53:07 j_novak
37 * Lorene classes and functions now belong to the namespace Lorene.
38 *
39 * Revision 1.6 2014/10/06 15:13:14 j_novak
40 * Modified #include directives to use c++ syntax.
41 *
42 * Revision 1.5 2005/01/12 16:03:32 j_novak
43 * We initialize the covariant representation of a flat metric, to avoid any
44 * possible problem when building a general metric from a flat one.
45 *
46 * Revision 1.4 2004/02/19 10:57:18 e_gourgoulhon
47 * Methods cov() and con(): set the spectral bases to the standard ones
48 * after the initialization of p_met_cov and p_met_con.
49 *
50 * Revision 1.3 2003/12/30 23:07:29 e_gourgoulhon
51 * Suppression of virtual methods fait_* : the actual computations
52 * are now performed via the virtual methods con(), cov(), connect(),
53 * ricci(), ricci_scal(), determinant().
54 *
55 * Revision 1.2 2003/10/11 14:40:39 e_gourgoulhon
56 * Suppressed declaration of unusued argument in method operator=.
57 *
58 * Revision 1.1 2003/10/06 15:30:33 j_novak
59 * Defined methods for flat metric.
60 *
61 *
62 *
63 * $Header: /cvsroot/Lorene/C++/Source/Metric/metric_flat.C,v 1.8 2016/12/05 16:17:59 j_novak Exp $
64 *
65 */
66
67// C headers
68#include <cstdlib>
69
70// Lorene headers
71#include "metric.h"
72#include "utilitaires.h"
73
74 //-----------------//
75 // Constructors //
76 //-----------------//
77
78namespace Lorene {
79Metric_flat::Metric_flat(const Map& mpi, const Base_vect& triadi) :
80 Metric(mpi), triad(&triadi) {
81
82 cov() ; //## to avoid problems when initializing general metrics
83 //## to flat ones. Might be improved??
84
85}
86
87
89triad(meti.triad) {
90
91
92}
93
94Metric_flat::Metric_flat(const Map& mpi, FILE* fd) : Metric(mpi, fd) {
95
96 cout << "Metric_flat::Metric_flat(FILE*) : not implemented yet!" << endl ;
97
98 abort() ;
99}
100
101
102 //---------------//
103 // Destructor //
104 //---------------//
105
109
110
111 //-----------------------//
112 // Mutators / assignment //
113 //-----------------------//
114
116
117 Metric::operator=(meti) ;
118
119 triad = meti.triad ;
120}
121
123
124 cout << "Metric_flat::operator=(const Sym_tensor& ) :" << '\n' ;
125 cout << "Error: a flat metric should not be specified" << '\n' ;
126 cout << "by a symmetric tensor!" << endl ;
127
128 abort() ;
129}
130
131
132 //----------------//
133 // Accessors //
134 //----------------//
135
136
138
139 if (p_met_cov == 0x0) { // a new computation is necessary
140
141 p_met_cov = new Sym_tensor(*mp, COV, *triad) ;
142
143 p_met_cov->set(1,1) = 1 ;
144 p_met_cov->set(1,2) = 0 ;
145 p_met_cov->set(1,3) = 0 ;
146 p_met_cov->set(2,2) = 1 ;
147 p_met_cov->set(2,3) = 0 ;
148 p_met_cov->set(3,3) = 1 ;
149
150 p_met_cov->std_spectral_base() ;
151 }
152
153 return *p_met_cov ;
154}
155
157
158 if (p_met_con == 0x0) { // a new computation is necessary
159
160 p_met_con = new Sym_tensor(*mp, CON, *triad) ;
161
162 p_met_con->set(1,1) = 1 ;
163 p_met_con->set(1,2) = 0 ;
164 p_met_con->set(1,3) = 0 ;
165 p_met_con->set(2,2) = 1 ;
166 p_met_con->set(2,3) = 0 ;
167 p_met_con->set(3,3) = 1 ;
168
169 p_met_con->std_spectral_base() ;
170
171 }
172
173
174 return *p_met_con ;
175}
176
177
179
180 if (p_connect == 0x0) { // a new computation is necessary
181
182 const Base_vect_spher* bvs =
183 dynamic_cast<const Base_vect_spher*>(triad) ;
184
185 const Base_vect_cart* bvc =
186 dynamic_cast<const Base_vect_cart*>(triad) ;
187
188 if (bvs != 0x0) {
189 assert (bvc == 0x0) ;
190 p_connect = new Connection_fspher(*mp, *bvs) ;
191 }
192 else {
193 assert(bvc != 0x0) ;
194 p_connect = new Connection_fcart(*mp, *bvc) ;
195 }
196 }
197
198 return *p_connect ;
199
200}
201
202
203
205
206 if (p_ricci_scal == 0x0) { // a new computation is necessary
207
208 p_ricci_scal = new Scalar(*mp) ;
209 p_ricci_scal->set_etat_zero() ;
210 }
211
212 return *p_ricci_scal ;
213
214}
215
216
218
219 if (p_determinant == 0x0) { // a new computation is necessary
220
221 p_determinant = new Scalar(*mp) ;
222 p_determinant->set_etat_one() ;
223 }
224
225 return *p_determinant ;
226}
227
228
229 //---------//
230 // Outputs //
231 //---------//
232
233
234void Metric_flat::sauve(FILE* ) const {
235
236 cout << "Metric_flat::sauve(FILE*) : not implemented yet!" << endl ;
237
238 abort() ; //## What to do with the triad ... ?
239
240}
241
242
243
244ostream& Metric_flat::operator>>(ostream& ost) const {
245
246 ost << '\n' ;
247
248 ost << "Flat metric in an orthonormal triad" << '\n' ;
249 ost << "-----------------------------------" << '\n' ;
250 ost << '\n' ;
251
252 ost << *triad ;
253
254 ost << endl ;
255 return ost ;
256}
257
258}
Cartesian vectorial bases (triads).
Definition base_vect.h:201
Spherical orthonormal vectorial bases (triads).
Definition base_vect.h:308
Vectorial bases (triads) with respect to which the tensorial components are defined.
Definition base_vect.h:105
Class Connection_fcart.
Definition connection.h:546
Class Connection_fspher.
Definition connection.h:452
Class Connection.
Definition connection.h:113
virtual const Connection & connect() const
Returns the connection.
virtual ~Metric_flat()
Destructor.
Metric_flat(const Map &, const Base_vect &)
Standard constructor.
Definition metric_flat.C:79
virtual const Scalar & ricci_scal() const
Returns the Ricci scalar.
virtual const Sym_tensor & con() const
Read-only access to the contravariant representation.
virtual const Sym_tensor & cov() const
Read-only access to the covariant representation.
virtual void sauve(FILE *) const
Save in a file.
void operator=(const Metric_flat &)
Assignment to another Metric_flat.
const Base_vect * triad
Vectorial basis (triad) with respect to which the components of the flat metric are defined.
Definition metric.h:270
virtual ostream & operator>>(ostream &) const
Operator >> (virtual function called by the operator <<).
virtual const Scalar & determinant() const
Returns the determinant.
Metric(const Sym_tensor &tens)
Standard constructor from a Sym_tensor .
Definition metric.C:107
const Map *const mp
Reference mapping.
Definition metric.h:95
Sym_tensor * p_met_con
Pointer on the covariant representation.
Definition metric.h:105
Sym_tensor * p_met_cov
Pointer on the contravariant representation.
Definition metric.h:100
Scalar * p_determinant
Pointer on the determinant.
Definition metric.h:132
void operator=(const Metric &met)
Assignment to another Metric.
Definition metric.C:223
Scalar * p_ricci_scal
Pointer on the Ricci scalar.
Definition metric.h:119
Connection * p_connect
Connection associated with the metric.
Definition metric.h:112
Tensor field of valence 0 (or component of a tensorial field).
Definition scalar.h:393
Class intended to describe valence-2 symmetric tensors.
Definition sym_tensor.h:226
Lorene prototypes.
Definition app_hor.h:67
Map(const Mg3d &)
Constructor from a multi-domain 3D grid.
Definition map.C:142