24char tenseur_pde_C[] =
"$Header: /cvsroot/Lorene/C++/Source/Tenseur/tenseur_pde.C,v 1.7 2014/10/13 08:53:42 j_novak Exp $" ;
132 if (
etat == ETATZERO) {
137 for (
int i=0;
i<3;
i++) {
147 for (
int i=0 ;
i<3 ;
i++)
148 assert ((*
this)(
i).check_dzpuis(4)) ;
151 for (
int i=0 ;
i<3 ;
i++) {
189 for (
int i=0 ;
i<3 ;
i++)
205 resu.set_etat_qcq() ;
232 if (
etat == ETATZERO) {
239 for (
int i=0 ;
i<3 ;
i++)
240 assert ((*
this)(
i).check_dzpuis(3) ||
241 (*
this)(
i).check_dzpuis(4)) ;
245 copie.dec2_dzpuis() ;
246 if ((*
this)(0).check_dzpuis(4))
247 copie.dec2_dzpuis() ;
261 if ((*
this)(0).check_dzpuis(4))
266 for (
int i=0 ;
i<3 ;
i++)
272 for (
int i=0 ;
i<3 ;
i++)
276 for (
int i=0 ;
i<3 ;
i++) {
294 resu.set_etat_qcq() ;
320 if (
etat == ETATZERO) {
325 for (
int i=0;
i<3;
i++) {
335 for (
int i=0 ; i<3 ; i++)
336 assert ((*
this)(i).check_dzpuis(4)) ;
339 for (
int i=0 ; i<3 ; i++) {
340 Param* par =
mp->donne_para_poisson_vect(para, i) ;
342 (*this)(i).poisson_tau(*par, vecteur.
set(i)) ;
352 assert (source_scal().check_dzpuis(3)) ;
354 Param* par =
mp->donne_para_poisson_vect(para, 3) ;
356 source_scal().poisson_tau(*par, scalaire.
set()) ;
363 Tenseur dxsi (auxiliaire.gradient()) ;
377 for (
int i=0 ; i<3 ; i++)
378 shift.
set(i) = (lambda+2)/2/(lambda+1) * vecteur(i)
379 - (lambda/2/(lambda+1)) * (dxsi(i) + dp(i)) ;
388Tenseur Tenseur::poisson_vect_tau(
double lambda, Tenseur& vecteur,
389 Tenseur& scalaire)
const {
393 resu.set_etat_qcq() ;
394 poisson_vect_tau(lambda, bidon, resu, vecteur, scalaire) ;
406void Tenseur::poisson_vect_oohara_tau(
double lambda, Param& para, Tenseur& shift,
407 Tenseur& chi)
const {
410 assert (lambda != -1) ;
414 assert (shift.get_valence() == 1) ;
415 assert (shift.get_type_indice(0) ==
type_indice(0)) ;
416 assert (chi.get_valence() == 0) ;
417 assert (
etat != ETATNONDEF) ;
420 if (
etat == ETATZERO) {
421 shift.set_etat_zero() ;
427 for (
int i=0 ; i<3 ; i++)
428 assert ((*
this)(i).check_dzpuis(3) ||
429 (*
this)(i).check_dzpuis(4)) ;
433 copie.dec2_dzpuis() ;
434 if ((*
this)(0).check_dzpuis(4))
435 copie.dec2_dzpuis() ;
440 source_scal.inc2_dzpuis() ;
442 Param* par =
mp->donne_para_poisson_vect(para, 3) ;
444 source_scal().poisson_tau(*par, chi.set());
450 if ((*
this)(0).check_dzpuis(4))
451 source_vect.dec_dzpuis() ;
453 Tenseur chi_grad (chi.gradient()) ;
454 chi_grad.inc_dzpuis() ;
456 for (
int i=0 ; i<3 ; i++)
457 source_vect.set(i) -= lambda*chi_grad(i) ;
459 assert( *(source_vect.triad) == *((chi.gradient()).get_triad()) ) ;
461 for (
int i=0 ; i<3 ; i++) {
462 par =
mp->donne_para_poisson_vect(para, i) ;
464 source_vect(i).poisson_tau(*par, shift.set(i)) ;
469 shift.set_triad( *(source_vect.triad) ) ;
476Tenseur Tenseur::poisson_vect_oohara_tau(
double lambda, Tenseur& scalaire)
const {
480 resu.set_etat_qcq() ;
481 poisson_vect_oohara_tau(lambda, bidon, resu, scalaire) ;
Time evolution with partial storage (*** under development ***).
Tensor handling *** DEPRECATED : use class Tensor instead ***.
Cmp & set()
Read/write for a scalar (see also operator=(const Cmp&) ).
int get_type_indice(int i) const
Returns the type of the index number i .
const Metrique * metric
For tensor densities: the metric defining the conformal factor.
const Map *const mp
Reference mapping.
void set_etat_qcq()
Sets the logical state to ETATQCQ (ordinary state).
void poisson_vect_oohara(double lambda, Param &par, Tenseur &shift, Tenseur &scal) const
Solves the vectorial Poisson equation .
Tenseur(const Map &map, const Metrique *met=0x0, double weight=0)
Constructor for a scalar field.
friend Tenseur contract(const Tenseur &, int id1, int id2)
Self contraction of two indices of a Tenseur .
const Base_vect * triad
Vectorial basis (triad) with respect to which the tensor components are defined.
const Tenseur & gradient() const
Returns the gradient of *this (Cartesian coordinates)
void set_etat_zero()
Sets the logical state to ETATZERO (zero state).
Itbl type_indice
Array of size valence contening the type of each index, COV for a covariant one and CON for a contrav...
int etat
Logical state ETATZERO , ETATQCQ or ETATNONDEF.
double poids
For tensor densities: the weight.
int get_valence() const
Returns the valence.
void set_triad(const Base_vect &new_triad)
Assigns a new vectorial basis (triad) of decomposition.
void poisson_vect(double lambda, Param &par, Tenseur &shift, Tenseur &vect, Tenseur &scal) const
Solves the vectorial Poisson equation : .
friend Tenseur skxk(const Tenseur &)
Contraction of the last index of (*this) with or , depending on the type of S .
int get_etat() const
Returns the logical state.