77 void separation (
const Cmp& c1,
const Cmp& c2, Cmp& res1, Cmp& res2,
int decrois,
78 int puiss,
int lmax,
double precision,
const double relax,
const int itemax,
const int flag) {
80 assert (c1.get_etat() != ETATNONDEF) ;
81 assert (c2.get_etat() != ETATNONDEF) ;
83 if ((c1.get_etat() == ETATZERO) && (c2.get_etat() == ETATZERO)) {
84 res1.set_etat_zero() ;
85 res2.set_etat_zero() ;
91 if (res1.get_etat() == ETATZERO) {
93 res1.std_base_scal() ;
96 res1.raccord_externe (decrois, puiss, lmax) ;
97 for (
int i=0 ; i<decrois ; i++)
101 if (res2.get_etat() == ETATZERO) {
103 res2.std_base_scal() ;
105 res2.raccord_externe (decrois, puiss, lmax) ;
106 for (
int i=0 ; i<decrois ; i++)
114 Cmp old_deux (res2) ;
117 Mtbl xa_mtbl_un (c1.get_mp()->xa) ;
118 Mtbl ya_mtbl_un (c1.get_mp()->ya) ;
119 Mtbl za_mtbl_un (c1.get_mp()->za) ;
121 Mtbl xa_mtbl_deux (c2.get_mp()->xa) ;
122 Mtbl ya_mtbl_deux (c2.get_mp()->ya) ;
123 Mtbl za_mtbl_deux (c2.get_mp()->za) ;
125 double xabs, yabs, zabs, air, theta, phi ;
129 int nz_un = c1.get_mp()->get_mg()->get_nzone() ;
130 for (
int l=1 ; l<nz_un-1 ; l++) {
132 np = c1.get_mp()->get_mg()->get_np(l) ;
133 nt = c1.get_mp()->get_mg()->get_nt(l) ;
134 nr = c1.get_mp()->get_mg()->get_nr(l) ;
136 for (
int k=0 ; k<np ; k++)
137 for (
int j=0 ; j<nt ; j++)
138 for (
int i=0 ; i<nr ; i++) {
139 xabs = xa_mtbl_un (l, k, j, i) ;
140 yabs = ya_mtbl_un (l, k, j, i) ;
141 zabs = za_mtbl_un (l, k, j, i) ;
143 c2.get_mp()->convert_absolute(xabs, yabs, zabs, air, theta, phi) ;
144 res1.set(l, k, j, i) =
145 (1-relax)*res1.set(l, k, j, i) +
146 relax*(c1(l, k, j, i) - old_deux.val_point(air, theta, phi)) ;
151 int nz_deux = c2.get_mp()->get_mg()->get_nzone() ;
152 for (
int l=1 ; l<nz_deux-1 ; l++) {
154 np = c2.get_mp()->get_mg()->get_np(l) ;
155 nt = c2.get_mp()->get_mg()->get_nt(l) ;
156 nr = c2.get_mp()->get_mg()->get_nr(l) ;
158 for (
int k=0 ; k<np ; k++)
159 for (
int j=0 ; j<nt ; j++)
160 for (
int i=0 ; i<nr ; i++) {
162 xabs = xa_mtbl_deux (l, k, j, i) ;
163 yabs = ya_mtbl_deux (l, k, j, i) ;
164 zabs = za_mtbl_deux (l, k, j, i) ;
166 c1.get_mp()->convert_absolute(xabs, yabs, zabs, air, theta, phi) ;
167 res2.set(l, k, j, i) =
168 (1-relax)*res2.set(l, k, j, i) +
169 relax*(c2(l, k, j, i) - old_un.val_point(air, theta, phi)) ;
174 res1.va.set_etat_c_qcq() ;
175 res2.va.set_etat_c_qcq() ;
177 res1.raccord_externe (decrois, puiss, lmax) ;
178 for (
int i=0 ; i<decrois ; i++)
182 res2.raccord_externe (decrois, puiss, lmax) ;
183 for (
int i=0 ; i<decrois ; i++)
192 for (
int i=1 ; i<nz_un-1 ; i++)
193 if (diff_un(i)>erreur)
194 erreur = diff_un(i) ;
197 for (
int i=1 ; i<nz_deux-1 ; i++)
198 if (diff_deux(i)>erreur)
199 erreur = diff_deux(i) ;
202 cout <<
"Pas " << conte <<
" : erreur = " << erreur << endl ;
203 if (erreur<=precision)
Tbl diffrelmax(const Cmp &a, const Cmp &b)
Relative difference between two Cmp (max version).