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 $" ;
120 assert (lambda != -1) ;
129 assert (
etat != ETATNONDEF) ;
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++) {
154 (*this)(i).poisson(*par, vecteur.
set(i)) ;
164 assert (source_scal().check_dzpuis(3)) ;
168 source_scal().poisson(*par, scalaire.
set()) ;
189 for (
int i=0 ; i<3 ; i++)
190 shift.
set(i) = (lambda+2)/2/(lambda+1) * vecteur(i)
191 - (lambda/2/(lambda+1)) * (dxsi(i) + dp(i)) ;
222 assert (lambda != -1) ;
229 assert (
etat != ETATNONDEF) ;
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)) ;
246 if ((*
this)(0).check_dzpuis(4))
256 source_scal().poisson(*par, chi.
set());
261 if ((*
this)(0).check_dzpuis(4))
266 for (
int i=0 ; i<3 ; i++)
267 source_vect.
set(i) -= lambda*chi_grad(i) ;
268 assert( *(source_vect.
triad) == *((chi.
gradient()).get_triad()) ) ;
272 for (
int i=0 ; i<3 ; i++)
276 for (
int i=0 ; i<3 ; i++) {
278 source_vect(i).poisson(*par, shift.
set(i)) ;
306void Tenseur::poisson_vect_tau(
double lambda,
Param& para,
Tenseur& shift
308 assert (lambda != -1) ;
317 assert (
etat != ETATNONDEF) ;
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++) {
342 (*this)(i).poisson_tau(*par, vecteur.
set(i)) ;
352 assert (source_scal().check_dzpuis(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() ;
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++) {
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) ;
virtual Param * donne_para_poisson_vect(Param ¶, int i) const =0
Function intended to be used by Map::poisson_vect and Map::poisson_vect_oohara .
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 inc_dzpuis()
dzpuis += 1 ;
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.
void dec2_dzpuis()
dzpuis -= 2 ;
void dec_dzpuis()
dzpuis -= 1 ;
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)
friend Tenseur contract(const Tenseur &, int id1, int id2)
Self contraction of two indices of a Tenseur .
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...
void inc2_dzpuis()
dzpuis += 2 ;
int etat
Logical state ETATZERO , ETATQCQ or ETATNONDEF.
double poids
For tensor densities: the weight.
friend Tenseur skxk(const Tenseur &)
Contraction of the last index of (*this) with or , depending on the type of S .
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 : .
int get_etat() const
Returns the logical state.