80 double pscb = mp_prodscal(b, b);
96 Cerr <<
"The preconditioning SSOR_BLOC can be used only for symetric block matrixes" << finl;
97 Cerr <<
"containing at least 2*2 blocs. For example, when considering the following VEF discretizations :"<< finl;
98 Cerr <<
"P0+P1 or P0+Pa or P0+P1+Pa." << finl;
108 DoubleTab_parts parties(solution);
109 DoubleVect& X0 = parties[0];
110 DoubleVect& X1 = parties[1];
111 DoubleVect& Xa = parties[parties.
size() - 1];
114 DoubleTab_parts parties_f(F);
115 DoubleVect& Y0 = parties_f[0];
116 DoubleVect& Y1 = parties_f[1];
117 DoubleVect& Ya = parties_f[parties_f.
size() - 1];
120 Cerr << finl <<
"Y0 " << mp_norme_vect(Y0) << finl;
121 Cerr << finl <<
"Y1 " << mp_norme_vect(Y1) << finl;
123 Cerr << finl <<
"Ya " << mp_norme_vect(Ya) << finl;
125 double psc=mp_prodscal(F,b);
127 double pscF=mp_prodscal(F,F);
128 Cout << finl <<
"cos(angle) no prec " << psc*psc/(pscF*pscb) << finl;
129 Cout << finl <<
"(F,b) " << psc << finl;
130 Cout << finl <<
"(b,b) " << pscb << finl;
131 Cout << finl <<
"(F,F) " << pscF << finl;
132 F.
ajoute(-psc/pscb,b,VECT_ALL_ITEMS);
134 Cout << finl <<
"(F0,F0) " << mp_prodscal(Y0,Y0) << finl;
135 Cout << finl <<
"(F1,F1) " << mp_prodscal(Y1,Y1) << finl;
137 Cout << finl <<
"(Fa,Fa) " << mp_prodscal(Ya,Ya) << finl;
144 operator_multiply(X1, -
alpha_1, VECT_ALL_ITEMS);
149 operator_multiply(X1, -1, VECT_ALL_ITEMS);
150 le_precond_0->preconditionner(A00,Y0,X0);
151 operator_multiply(X0, -
alpha_0, VECT_ALL_ITEMS);
156 operator_multiply(X0, -1, VECT_ALL_ITEMS);
160 operator_multiply(Xa, -
alpha_a, VECT_ALL_ITEMS);
164 operator_multiply(Xa, -1, VECT_ALL_ITEMS);
171 operator_multiply(X1, 1./
alpha_1, VECT_ALL_ITEMS);
173 operator_multiply(X0, 1./
alpha_0, VECT_ALL_ITEMS);
177 operator_multiply(Xa, 1./
alpha_a, VECT_ALL_ITEMS);
187 operator_multiply(Xa, -
alpha_a, VECT_ALL_ITEMS);
191 operator_multiply(Xa, -1., VECT_ALL_ITEMS);
193 le_precond_0->preconditionner(A00,Y0,X0);
194 operator_multiply(X0, -
alpha_0, VECT_ALL_ITEMS);
199 operator_multiply(X0, -1., VECT_ALL_ITEMS);
201 operator_multiply(X1, -
alpha_1, VECT_ALL_ITEMS);
206 operator_multiply(X1, -1., VECT_ALL_ITEMS);
209 psc=mp_prodscal(F,b);
211 pscF=mp_prodscal(F,F);
212 Cout << finl <<
"cos(angle) " << psc*psc/(pscF*pscb) << finl;
213 Cout << finl <<
"(F,b) " << psc << finl;
214 Cout << finl <<
"(b,b) " << pscb << finl;
215 Cout << finl <<
"(F,F) " << pscF << finl;
218 Cout << finl <<
"(F0,F0) " << mp_prodscal(Y0,Y0) << finl;
219 Cout << finl <<
"(F1,F1) " << mp_prodscal(Y1,Y1) << finl;
221 Cout << finl <<
"(Fa,Fa) " << mp_prodscal(Ya,Ya) << finl;