116 #include "ope_elementary.h" 117 #include "param_elliptic.h" 118 #include "base_val.h" 134 cout <<
"Unknown mapping in Param_elliptic" << endl ;
140 double Param_elliptic::get_alpha(
int l)
const {
150 cout <<
"Unknown mapping in Param_elliptic" << endl ;
156 double Param_elliptic::get_beta(
int l)
const {
166 cout <<
"Unknown mapping in Param_elliptic" << endl ;
172 int Param_elliptic::get_type(
int l)
const {
182 cout <<
"Unknown mapping in Param_elliptic" << endl ;
190 done_F (so.get_mp().get_mg()->get_nzone(),
191 so.get_mp().get_mg()->get_np(0) + 1,
192 so.get_mp().get_mg()->get_nt(0)),
193 done_G (so.get_mp().get_mg()->get_nzone()),
194 val_F_plus (so.get_mp().get_mg()->get_nzone(),
195 so.get_mp().get_mg()->get_np(0) + 1,
196 so.get_mp().get_mg()->get_nt(0)),
197 val_F_minus (so.get_mp().get_mg()->get_nzone(),
198 so.get_mp().get_mg()->get_np(0) + 1,
199 so.get_mp().get_mg()->get_nt(0)),
200 val_dF_plus (so.get_mp().get_mg()->get_nzone(),
201 so.get_mp().get_mg()->get_np(0) + 1,
202 so.get_mp().get_mg()->get_nt(0)),
203 val_dF_minus (so.get_mp().get_mg()->get_nzone(),
204 so.get_mp().get_mg()->get_np(0) + 1,
205 so.get_mp().get_mg()->get_nt(0)),
206 val_G_plus (so.get_mp().get_mg()->get_nzone()),
207 val_G_minus (so.get_mp().get_mg()->get_nzone()),
208 val_dG_plus (so.get_mp().get_mg()->get_nzone()),
209 val_dG_minus (so.get_mp().get_mg()->get_nzone())
227 if ((map_affine == 0x0) && (map_log == 0x0)) {
228 cout <<
"Param_elliptic not yet defined on this type of mapping" << endl ;
233 if (map_affine != 0x0) {
238 if (map_log != 0x0) {
245 for (
int l=0 ; l<nz ; l++)
246 nbr += (
get_mp().get_mg()->get_np(l)+1)*
251 for (
int l=0 ; l<nbr ; l++)
255 int base_r, m_quant, l_quant ;
258 for (
int l=0 ; l<nz ; l++) {
266 (l, k, j, m_quant, l_quant, base_r) ;
272 get_beta(l), l_quant, dzpuis) ;
278 get_beta(l), l_quant, dzpuis) ;
285 cout <<
"Unknown mapping in Param_elliptic::Param_elliptic" 322 for (
int i=0 ; i<nbr ; i++)
339 for (
int k=0 ; k<np+1 ; k++)
340 for (
int j=0 ; j<nt ; j++) {
357 int m_quant, base_r_1d, l_quant ;
363 for (
int l=0 ; l<nz ; l++) {
373 (l, k, j, m_quant, l_quant, base_r_1d) ;
375 get_beta(l) , masse) ;
385 cout <<
"Operator not define with LOG mapping..." << endl ;
389 for (
int l=0 ; l<nz ; l++) {
399 (l, k, j, m_quant, l_quant, base_r_1d) ;
401 get_alpha(l), get_beta(l), masse) ;
411 cout <<
"Unkown mapping in set_helmhotz_minus" << endl ;
425 int m_quant, base_r_1d, l_quant ;
431 for (
int l=0 ; l<nz ; l++) {
444 (l, k, j, m_quant, l_quant, base_r_1d) ;
446 get_beta(l) , masse) ;
457 cout <<
"Operator not define with LOG mapping..." << endl ;
461 for (
int l=0 ; l<nz ; l++) {
474 (l, k, j, m_quant, l_quant, base_r_1d) ;
476 get_alpha(l), get_beta(l), masse) ;
487 cout <<
"Unkown mapping in set_helmhotz_minus" << endl ;
496 cout <<
"set_poisson_vect_r only defined for an affine mapping..." << endl ;
506 for (
int l=0 ; l<nz ; l++) {
512 if ((
operateurs[conte] != 0x0) && (l==zone)) {
516 assert (op_pois !=0x0) ;
522 if ((!only_l_zero)||(lq_old == 0)) {
524 get_beta(l), lq_old, dzp) ;
544 for (
int l=0 ; l<nz ; l++) {
549 if ((
operateurs[conte] != 0x0) && (l==zone)) {
552 assert (op_pois !=0x0) ;
569 cout <<
"set_poisson_tens_rr only defined for an affine mapping..." 580 for (
int l=0 ; l<nz ; l++) {
586 if ((
operateurs[conte] != 0x0) && (l==zone)) {
590 assert (op_pois !=0x0) ;
597 (nr, old_base,get_alpha(l), get_beta(l), lq_old, dzp) ;
619 for (
int l=0 ; l<nz ; l++) {
625 if ((
operateurs[conte] != 0x0) && (l==zone)) {
632 get_beta(l), a, b, c) ;
642 cout <<
"Operator not define with LOG mapping..." << endl ;
646 for (
int l=0 ; l<nz ; l++) {
652 if ((
operateurs[conte] != 0x0) && (l==zone)) {
659 get_beta(l), a, b, c) ;
669 cout <<
"Unkown mapping in set_sec_order_r2" << endl ;
678 cout <<
"set_sec_order only defined for a log mapping" << endl ;
688 for (
int l=0 ; l<nz ; l++) {
694 if ((
operateurs[conte] != 0x0) && (l==zone)) {
702 get_beta(l), a, b, c) ;
719 int m_quant, base_r_1d, l_quant ;
726 for (
int l=0 ; l<nz ; l++) {
727 int dz = (l==nz-1) ? dzpuis : 0 ;
736 (l, k, j, m_quant, l_quant, base_r_1d) ;
738 get_beta(l), l_quant, dz) ;
748 cout <<
"Operator not define with LOG mapping..." << endl ;
752 for (
int l=0 ; l<nz ; l++) {
753 int dz = (l==nz-1) ? dzpuis : 0 ;
762 (l, k, j, m_quant, l_quant, base_r_1d) ;
764 get_alpha(l), get_beta(l), l_quant, dz) ;
774 cout <<
"Unkown mapping in set_ope_vorton" << endl ;
782 assert (so.
get_etat() != ETATNONDEF) ;
791 assert (so.
get_etat() != ETATNONDEF) ;
void set_poisson_vect_eta(int zone)
Sets the operator to be a regular elliptic operator to solve for the component of the vector Poisson...
void set_helmholtz_minus(int zone, double mas, Scalar &so)
Set the operator to in one domain (not in the nucleus).
virtual void dec_l_quant()
Decreases the quatum number l by one unit.
void set_variable_F(const Scalar &)
Changes the variable function F.
const double * get_alpha() const
Returns the pointer on the array alpha.
int get_np(int l) const
Returns the number of points in the azimuthal direction ( ) in domain no. l.
void coef() const
Computes the coeffcients of *this.
void give_quant_numbers(int, int, int, int &, int &, int &) const
Computes the various quantum numbers and 1d radial base.
double get_alpha(int l) const
Returns in the domain l.
void ylm()
Computes the coefficients of *this.
const Mg3d * get_mg() const
Gives the Mg3d on which the mapping is defined.
void annule_hard()
Sets the Itbl to zero in a hard way.
void set_ope_vorton(int zone, Scalar &so)
Set the operator to in one domain (not implemented in the nucleus).
int get_type(int l) const
Returns the type of description in the domain l.
Tensor field of valence 0 (or component of a tensorial field).
virtual void std_spectral_base()
Sets the spectral bases of the Valeur va to the standard ones for a scalar field. ...
Itbl done_G
Stores what has been computed for G.
int get_etat() const
Returns the logical state ETATNONDEF (undefined), ETATZERO (null) or ETATQCQ (ordinary).
Param_elliptic(const Scalar &)
Standard constructor from a Scalar.
virtual void set_etat_qcq()
Sets the logical state to ETATQCQ (ordinary state).
Class for operator of the type .
void set_base(const Base_val &)
Sets the bases for spectral expansions (member base )
virtual void inc_l_quant()
Increases the quatum number l by one unit.
Tbl val_F_minus
Values of F at the inner boundaries of the various domains.
void annule_hard()
Sets the Scalar to zero in a hard way.
const Map_af * mp_af
The mapping, if affine.
void set_etat_qcq()
Sets the logical state to ETATQCQ (ordinary state).
Class for the operator appearing for the vortons.
Tbl val_G_plus
Values of G at the outer boundaries of the various domains.
Class for the Helmholtz operator (m > 0).
Class for operator of the type .
#define R_CHEBI
base de Cheb. impaire (rare) seulement
Scalar var_F
Additive variable change function.
Logarithmic radial mapping.
Base_val base
Bases on which the spectral expansion is performed.
Tbl val_G_minus
Values of G at the inner boundaries of the various domains.
int get_dzpuis() const
Returns dzpuis.
int type_map
Type of mapping either MAP_AFF or MAP_LOG.
Tbl val_F_plus
Values of F at the outer boundaries of the various domains.
const double * get_beta() const
Returns the pointer on the array beta.
void set_variable_G(const Scalar &)
Changes the variable function G.
Base class for pure radial mappings.
const Map_radial & get_mp() const
Returns the mapping.
int get_nzone() const
Returns the number of domains.
virtual void inc_l_quant()=0
Increases the quatum number l by one unit.
void set_poisson_tens_rr(int zone)
Sets the operator to in all domains, for only.
Class for the operator of the rr component of the divergence-free tensor Poisson equation...
int get_base_r() const
Returns base_r}.
Scalar var_G
Multiplicative variable change that must be sphericaly symetric !
void set_helmholtz_plus(int zone, double mas, Scalar &so)
Set the operator to in one domain (only in the shells).
Tbl val_dG_minus
Values of the derivative of G at the inner boundaries of the various domains.
Class for the operator of the Poisson equation (i.e.
~Param_elliptic()
Destructor.
Ope_elementary ** operateurs
Array on the elementary operators.
const Map_log * mp_log
The mapping if log type.
Class for the operator of the r component of the vector Poisson equation.
Tbl val_dG_plus
Values of the derivative of G at the outer boundaries of the various domains.
int get_nr(int l) const
Returns the number of points in the radial direction ( ) in domain no. l.
Bases of the spectral expansions.
void inc_l_quant(int zone)
Increases the quantum number l in the domain zone .
bool dz_nonzero() const
Returns true if the last domain is compactified and *this is not zero in this domain.
Basic class for elementary elliptic operators.
Tbl val_dF_minus
Values of the derivative of F at the inner boundaries of the various domains.
double get_beta(int l) const
Returns in the domain l.
Itbl done_F
Stores what has been computed for F.
Class for the Helmholtz operator ( ).
void set_sec_order_r2(int zone, double a, double b, double c)
Set the operator to in one domain (only in the shells).
int get_nt(int l) const
Returns the number of points in the co-latitude direction ( ) in domain no. l.
Valeur & set_spectral_va()
Returns va (read/write version)
int get_type_r(int l) const
Returns the type of sampling in the radial direction in domain no.
const Map & get_mp() const
Returns the mapping.
Tbl val_dF_plus
Values of the derivative of F at the outer boundaries of the various domains.
int get_dzpuis()
Returns the associated dzpuis, if in the compactified domain.
const Valeur & get_spectral_va() const
Returns va (read only version)
void set_poisson_vect_r(int zone, bool only_l_zero=false)
Sets the operator to in all domains, for ; and to in all domains otherwise.
void set_sec_order(int zone, double a, double b, double c)
Set the operator to in one domain (only in the shells).
int get_lquant()
Returns the quantum number l.
const Base_val & get_base() const
Return the bases for spectral expansions (member base )