tenseur_pde_falloff.C
/*
* Methods of the class tenseur for solving vectorial Poisson equations
* with a falloff condition at the outer boundary
*
* (see file tenseur.h for documentation).
*
*/
/*
* Copyright (c) 2004 Joshua A. Faber
*
* This file is part of LORENE.
*
* LORENE is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2
* as published by the Free Software Foundation.
*
* LORENE 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 LORENE; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
char tenseur_pde_falloff_C[] = "$Header: /cvsroot/Lorene/C++/Source/Tenseur/tenseur_pde_falloff.C,v 1.3 2014/10/13 08:53:42 j_novak Exp $" ;
/*
* $Id: tenseur_pde_falloff.C,v 1.3 2014/10/13 08:53:42 j_novak Exp $
* $Log: tenseur_pde_falloff.C,v $
* Revision 1.3 2014/10/13 08:53:42 j_novak
* Lorene classes and functions now belong to the namespace Lorene.
*
* Revision 1.2 2004/12/22 18:25:59 k_taniguchi
* Cahnge an argument of poisson_vect_falloff.
*
* Revision 1.1 2004/11/30 20:55:33 k_taniguchi
* *** empty log message ***
*
*
* $Header: /cvsroot/Lorene/C++/Source/Tenseur/tenseur_pde_falloff.C,v 1.3 2014/10/13 08:53:42 j_novak Exp $
*
*/
// Header Lorene:
#include "map.h"
#include "cmp.h"
#include "param.h"
#include "tenseur.h"
//-----------------------------------//
// Vectorial Poisson equation //
//-----------------------------------//
// Version avec parametres
// -----------------------
namespace Lorene {
void Tenseur::poisson_vect_falloff(double lambda, Param& para, Tenseur& shift,
Tenseur& vecteur, Tenseur& scalaire,
int* k_falloff) const {
assert (lambda != -1) ;
// Verifications d'usage ...
assert (valence == 1) ;
assert (shift.get_valence() == 1) ;
assert (shift.get_type_indice(0) == type_indice(0)) ;
assert (vecteur.get_valence() == 1) ;
assert (vecteur.get_type_indice(0) == type_indice(0)) ;
assert (scalaire.get_valence() == 0) ;
assert (etat != ETATNONDEF) ;
// define int k_falloff[4] ;
// k_falloff[0,1,2] = falloff for vecteur_x,y,z
// k_falloff[3] = falloff for scalaire
// Nothing to do if the source is zero
if (etat == ETATZERO) {
shift.set_etat_zero() ;
vecteur.set_etat_qcq() ;
for (int i=0; i<3; i++) {
vecteur.set(i) = 0 ;
}
scalaire.set_etat_qcq() ;
scalaire.set() = 0 ;
return ;
}
// On construit le tableau contenant le terme P_i ...
for (int i=0 ; i<3 ; i++) {
Param* par = mp->donne_para_poisson_vect(para, i) ;
(*this)(i).poisson_falloff(*par, vecteur.set(i),k_falloff[i]) ;
if (par != 0x0)
delete par ;
}
vecteur.set_triad( *triad ) ;
// Equation de Poisson scalaire :
Tenseur source_scal (-skxk(*this)) ;
Param* par = mp->donne_para_poisson_vect(para, 3) ;
source_scal().poisson_falloff(*par, scalaire.set(), k_falloff[3]) ;
if (par !=0x0)
delete par ;
// On construit le tableau contenant le terme d xsi / d x_i ...
Tenseur auxiliaire(scalaire) ;
Tenseur dxsi (auxiliaire.gradient()) ;
// On construit le tableau contenant le terme x_k d P_k / d x_i
Tenseur dp (skxk(vecteur.gradient())) ;
// Il ne reste plus qu'a tout ranger dans P :
// The final computation is done component by component because
// d_khi and x_d_w are covariant comp. whereas w_shift is
// contravariant
shift.set_etat_qcq() ;
for (int i=0 ; i<3 ; i++)
shift.set(i) = (lambda+2)/2/(lambda+1) * vecteur(i)
- (lambda/2/(lambda+1)) * (dxsi(i) + dp(i)) ;
shift.set_triad( *(vecteur.triad) ) ;
}
// Version sans parametres
// -----------------------
Tenseur Tenseur::poisson_vect_falloff(double lambda, Tenseur& vecteur,
Tenseur& scalaire, int* k_falloff) const {
Param bidon ;
Tenseur resu(*mp, valence, type_indice, triad, metric, poids) ;
resu.set_etat_qcq() ;
poisson_vect_falloff(lambda, bidon, resu, vecteur, scalaire, k_falloff) ;
return resu ;
}
}
Lorene::Param
Parameter storage.
Definition param.h:125
Lorene::Tenseur
Tensor handling *** DEPRECATED : use class Tensor instead ***.
Definition tenseur.h:301
Lorene::Tenseur::metric
const Metrique * metric
For tensor densities: the metric defining the conformal factor.
Definition tenseur.h:325
Lorene::Tenseur::mp
const Map *const mp
Reference mapping.
Definition tenseur.h:306
Lorene::Tenseur::Tenseur
Tenseur(const Map &map, const Metrique *met=0x0, double weight=0)
Constructor for a scalar field.
Definition tenseur.C:209
Lorene::Tenseur::triad
const Base_vect * triad
Vectorial basis (triad) with respect to which the tensor components are defined.
Definition tenseur.h:312
Lorene::Tenseur::type_indice
Itbl type_indice
Array of size valence contening the type of each index, COV for a covariant one and CON for a contrav...
Definition tenseur.h:318
Lorene::Tenseur::valence
int valence
Valence.
Definition tenseur.h:307
Lorene::Tenseur::etat
int etat
Logical state ETATZERO , ETATQCQ or ETATNONDEF.
Definition tenseur.h:321
Lorene::Tenseur::poids
double poids
For tensor densities: the weight.
Definition tenseur.h:323
Lorene::Tenseur::skxk
friend Tenseur skxk(const Tenseur &)
Contraction of the last index of (*this) with or , depending on the type of S .
Definition tenseur_operateur.C:580
Lorene
Lorene prototypes.
Definition app_hor.h:64