24char poisson_interne_C[] =
"$Header: /cvsroot/Lorene/C++/Source/Non_class_members/PDE/poisson_interne.C,v 1.4 2014/10/13 08:53:29 j_novak Exp $" ;
58#include "type_parite.h"
59#include "utilitaires.h"
69Mtbl_cf sol_poisson_interne (
const Map_af& mapping,
70 const Mtbl_cf& source,
const Mtbl_cf& lim_der){
74 assert(source.get_mg()->get_type_r(0) == RARE) ;
75 assert (lim_der.get_mg() == source.get_mg()->get_angu()) ;
76 assert (source.get_etat() != ETATNONDEF) ;
77 assert (lim_der.get_etat() != ETATNONDEF) ;
80 const Base_val& base = source.base ;
83 int nr = source.get_mg()->get_nr(0) ;
84 int nt = source.get_mg()->get_nt(0) ;
85 int np = source.get_mg()->get_np(0) ;;
89 double alpha = mapping.get_alpha()[0] ;
90 double beta = mapping.get_beta()[0] ;
101 Mtbl_cf resultat(source.get_mg(), base) ;
102 resultat.annule_hard() ;
104 for (
int k=0 ; k<np+1 ; k++)
105 for (
int j=0 ; j<nt ; j++)
106 if (nullite_plm(j, nt, k, np, base) == 1)
109 donne_lm(nz, 0, j, k, base, m_quant, l_quant, base_r) ;
112 operateur =
new Matrice(laplacien_mat
113 (nr, l_quant, 0., 0, base_r)) ;
115 (*operateur) = combinaison(*operateur, l_quant, 0.,0, base_r) ;
118 nondege =
new Matrice(prepa_nondege(*operateur, l_quant,
122 sol_hom =
new Tbl(solh(nr, l_quant, 0., base_r)) ;
127 for (
int i=0 ; i<nr ; i++)
128 so->set(i) = source(0, k, j, i) ;
130 sol_part =
new Tbl (solp(*operateur, *nondege, alpha,
131 beta, *so, 0, base_r)) ;
138 double val_der_solp = 0 ;
139 for (
int i=0 ; i<nr ; i++)
141 val_der_solp += (2*i)*(2*i)*(*sol_part)(i)/alpha ;
143 val_der_solp += (2*i+1)*(2*i+1)*(*sol_part)(i)/alpha ;
145 double val_der_solh = 0 ;
146 for (
int i=0 ; i<nr ; i++)
148 val_der_solh += (2*i)*(2*i)*(*sol_hom)(i)/alpha ;
150 val_der_solh += (2*i+1)*(2*i+1)*(*sol_hom)(i)/alpha ;
153 assert (val_der_solh != 0) ;
155 facteur = (lim_der(0, k, j, 0)-val_der_solp) /
158 for (
int i=0 ; i<nr ; i++)
159 sol_part->set(i) += facteur*(*sol_hom)(i) ;
162 for (
int i=0 ; i<nr ; i++)
163 sol_part->set(i) = 0. ;
168 for (
int i=0 ; i<nr ; i++)
169 resultat.set(0, k, j, i) = (*sol_part)(i) ;
int get_nzone() const
Returns the number of domains.
const Mg3d * get_mg() const
Returns the Mg3d on which the Mtbl_cf is defined.