00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 char tenseur_pde_regu_C[] = "$Header: /cvsroot/Lorene/C++/Source/Tenseur/tenseur_pde_regu.C,v 1.3 2003/10/03 15:58:51 j_novak Exp $" ;
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058 #include "param.h"
00059 #include "tenseur.h"
00060
00061
00062
00063
00064
00065
00066
00067 void Tenseur::poisson_vect_regu(int k_div, int nzet, double unsgam1,
00068 double lambda, Param& para, Tenseur& shift,
00069 Tenseur& vecteur, Tenseur& scalaire) const {
00070 assert (lambda != -1) ;
00071
00072
00073 assert (valence == 1) ;
00074 assert (shift.get_valence() == 1) ;
00075 assert (shift.get_type_indice(0) == type_indice(0)) ;
00076 assert (vecteur.get_valence() == 1) ;
00077 assert (vecteur.get_type_indice(0) == type_indice(0)) ;
00078 assert (scalaire.get_valence() == 0) ;
00079 assert (etat != ETATNONDEF) ;
00080
00081
00082 if (etat == ETATZERO) {
00083
00084 shift.set_etat_zero() ;
00085
00086 vecteur.set_etat_qcq() ;
00087 for (int i=0; i<3; i++) {
00088 vecteur.set(i) = 0 ;
00089 }
00090
00091 scalaire.set_etat_qcq() ;
00092 scalaire.set() = 0 ;
00093
00094 return ;
00095 }
00096
00097 for (int i=0 ; i<3 ; i++)
00098 assert ((*this)(i).check_dzpuis(4)) ;
00099
00100 Tenseur vecteur_regu(*mp, 1, CON, mp->get_bvect_cart(), metric, poids) ;
00101 Tenseur vecteur_div(*mp, 1, CON, mp->get_bvect_cart(), metric, poids) ;
00102 Tenseur dvect_div(*mp, 1, CON, mp->get_bvect_cart(), metric, poids) ;
00103 Tenseur souvect_regu(*mp, 1, CON, mp->get_bvect_cart(), metric, poids) ;
00104 Tenseur souvect_div(*mp, 1, CON, mp->get_bvect_cart(), metric, poids) ;
00105
00106 vecteur_regu.set_etat_qcq() ;
00107 vecteur_div.set_etat_qcq() ;
00108 dvect_div.set_etat_qcq() ;
00109 souvect_regu.set_etat_qcq() ;
00110 souvect_div.set_etat_qcq() ;
00111
00112
00113
00114
00115
00116 for (int i=0 ; i<2 ; i++) {
00117 Param* par = mp->donne_para_poisson_vect(para, i) ;
00118
00119 (*this)(i).poisson_regular(k_div, nzet, unsgam1, *par,
00120 vecteur.set(i),
00121 vecteur_regu.set(i), vecteur_div.set(i),
00122 dvect_div,
00123 souvect_regu.set(i), souvect_div.set(i)) ;
00124
00125 delete par ;
00126 }
00127
00128 Param* par = mp->donne_para_poisson_vect(para, 2) ;
00129
00130 (*this)(2).poisson(*par, vecteur.set(2)) ;
00131
00132 delete par ;
00133
00134 vecteur.set_triad( *triad ) ;
00135
00136
00137 Tenseur source_scal (-skxk(*this)) ;
00138
00139 assert (source_scal().check_dzpuis(3)) ;
00140
00141 par = mp->donne_para_poisson_vect(para, 3) ;
00142
00143 Tenseur scalaire_regu(*mp, metric, poids) ;
00144 Tenseur scalaire_div(*mp, metric, poids) ;
00145 Tenseur dscal_div(*mp, 1, CON, mp->get_bvect_cart(), metric, poids) ;
00146 Cmp souscal_regu(mp) ;
00147 Cmp souscal_div(mp) ;
00148
00149 scalaire_regu.set_etat_qcq() ;
00150 scalaire_div.set_etat_qcq() ;
00151 dscal_div.set_etat_qcq() ;
00152
00153 souscal_regu.std_base_scal() ;
00154 souscal_div.std_base_scal() ;
00155
00156 source_scal().poisson_regular(k_div, nzet, unsgam1, *par,
00157 scalaire.set(),
00158 scalaire_regu.set(), scalaire_div.set(),
00159 dscal_div, souscal_regu, souscal_div) ;
00160
00161 delete par ;
00162
00163
00164 Tenseur auxiliaire(scalaire) ;
00165 Tenseur dxsi (auxiliaire.gradient()) ;
00166 dxsi.dec2_dzpuis() ;
00167
00168
00169 Tenseur dp (skxk(vecteur.gradient())) ;
00170 dp.dec_dzpuis() ;
00171
00172
00173
00174
00175
00176
00177 shift.set_etat_qcq() ;
00178
00179 for (int i=0 ; i<3 ; i++)
00180 shift.set(i) = (lambda+2)/2/(lambda+1) * vecteur(i)
00181 - (lambda/2/(lambda+1)) * (dxsi(i) + dp(i)) ;
00182
00183 shift.set_triad( *(vecteur.triad) ) ;
00184
00185 }
00186
00187