|
@@ -34,40 +34,43 @@ namespace Kernel{
|
|
|
|
|
|
compute_Pl(previous_solution->P);
|
|
|
|
|
|
- n1_previous_hydr=norm1(previous_solution->hydr,geometry->nX);
|
|
|
-
|
|
|
+ double n1_init_hydr=norm1(previous_solution->hydr,geometry->nX);
|
|
|
+ double n1_init_hov=norm1(previous_solution->hov,geometry->nX);
|
|
|
|
|
|
//Compute hydr from s_in.hydr, s_in.hsat and Pl
|
|
|
horizontal_problem.previous_hydr=previous_solution->hydr;
|
|
|
horizontal_problem.l=previous_solution->hsat;
|
|
|
horizontal_problem.Pl=Pl;
|
|
|
- horizontal_problem.hydr=new_solution->hydr;
|
|
|
+ horizontal_problem.n1_init_hydr=n1_init_hydr;
|
|
|
horizontal_problem.error_x=error_x;
|
|
|
horizontal_problem.run();
|
|
|
- new_solution->hydr=horizontal_problem.hydr;
|
|
|
- error+=horizontal_problem.total_error/n1_previous_hydr;
|
|
|
+ swap(new_solution->hydr,horizontal_problem.hydr);
|
|
|
+ error+=horizontal_problem.total_error;
|
|
|
|
|
|
//Compute Overland
|
|
|
- overland.in_hov=previous_solution->hov;
|
|
|
- overland.previous_P=previous_solution->P;
|
|
|
+ overland.dt=dt;
|
|
|
+ overland.init_hov=previous_solution->hov;
|
|
|
+ overland.previous_hov=previous_solution->hov;
|
|
|
+ overland.P=previous_solution->P;
|
|
|
overland.l=previous_solution->hsat;
|
|
|
overland.Pl=Pl;
|
|
|
- overland.hydr=horizontal_problem.hydr;
|
|
|
- overland.hov=new_solution->hov;
|
|
|
+ overland.hydr=new_solution->hydr;
|
|
|
+ overland.n1_init_hov=n1_init_hov;
|
|
|
+ overland.error_x=error_x;
|
|
|
overland.run();
|
|
|
- new_solution->hov=overland.hov;
|
|
|
- error+=overland.error;
|
|
|
+ swap(new_solution->hov,overland.hov);
|
|
|
+ error+=overland.total_error;
|
|
|
|
|
|
//----------------------------------------------
|
|
|
// Apply AllVerticalRichads algorithm to obtain
|
|
|
// - P
|
|
|
// - hsat
|
|
|
//---------------------------------------------
|
|
|
- all_vertical_richards.n1_previous_hydr=n1_previous_hydr;
|
|
|
+
|
|
|
all_vertical_richards.dt=dt;
|
|
|
all_vertical_richards.init_P=previous_solution->P;
|
|
|
all_vertical_richards.previous_P=previous_solution->P;
|
|
|
- all_vertical_richards.hydr=horizontal_problem.hydr;
|
|
|
+ all_vertical_richards.hydr=new_solution->hydr;
|
|
|
all_vertical_richards.l=previous_solution->hsat;
|
|
|
all_vertical_richards.Pl=Pl;
|
|
|
all_vertical_richards.Psoil=overland.Psoil;
|
|
@@ -79,12 +82,9 @@ namespace Kernel{
|
|
|
all_vertical_richards.run();
|
|
|
new_solution->hsat=all_vertical_richards.hsat;
|
|
|
new_solution->P=all_vertical_richards.P;
|
|
|
-
|
|
|
size_t k=0;
|
|
|
double previous_error=numeric_limits<double>::infinity();
|
|
|
- #ifdef MYDEBUG
|
|
|
- if(Debug::level>1) cout<<" [Piccard::run] error (horizontal) = \033[31m"<<error<<"\033[0m"<<endl;
|
|
|
- #endif
|
|
|
+ //Debug::pause();
|
|
|
while(error>=tolerence_Piccard and k<max_iterations_Piccard and (abs(previous_error-error)>tolerence_Piccard/100 or error<oscilation_Piccard)){
|
|
|
previous_error=error;
|
|
|
error=0;
|
|
@@ -96,40 +96,43 @@ namespace Kernel{
|
|
|
|
|
|
compute_l(l,all_vertical_richards.hsat,error);
|
|
|
|
|
|
- #ifdef MYMYDEBUG
|
|
|
+ #ifdef MYDEBUG
|
|
|
if(Debug::level>1) cout<<" [Piccard::run] error (l) = \033[31m"<<error<<"\033[0m"<<endl;
|
|
|
#endif
|
|
|
|
|
|
compute_Pl(all_vertical_richards.P);
|
|
|
-
|
|
|
- horizontal_problem.previous_hydr=horizontal_problem.hydr;
|
|
|
+ horizontal_problem.previous_hydr=new_solution->hydr;
|
|
|
horizontal_problem.l=l;
|
|
|
horizontal_problem.Pl=Pl;
|
|
|
- horizontal_problem.hydr=new_solution->hydr;
|
|
|
horizontal_problem.run();
|
|
|
- new_solution->hydr=horizontal_problem.hydr;
|
|
|
+ swap(new_solution->hydr,horizontal_problem.hydr);
|
|
|
+
|
|
|
+ //new_solution->hydr=horizontal_problem.hydr;
|
|
|
|
|
|
- error+=horizontal_problem.total_error/n1_previous_hydr;
|
|
|
+ error+=horizontal_problem.total_error;
|
|
|
|
|
|
#ifdef MYDEBUG
|
|
|
- if(Debug::level>1) cout<<" [Piccard::run] error (l+hydr) = \033[31m"<<error<<"\033[0m"<<endl;
|
|
|
+ if(Debug::level>1) cout<<" [Piccard::run] error (l+hori) = \033[31m"<<error<<"\033[0m"<<endl;
|
|
|
#endif
|
|
|
|
|
|
//Compute Overland
|
|
|
- overland.in_hov=previous_solution->hov;
|
|
|
- overland.previous_P=all_vertical_richards.P;
|
|
|
+ overland.previous_hov=new_solution->hov;
|
|
|
+ overland.P=new_solution->P;
|
|
|
overland.l=l;
|
|
|
overland.Pl=Pl;
|
|
|
- overland.hydr=horizontal_problem.hydr;
|
|
|
- overland.hov=new_solution->hov;
|
|
|
+ overland.hydr=new_solution->hydr;
|
|
|
overland.run();
|
|
|
- new_solution->hov=overland.hov;
|
|
|
- error+=overland.error;
|
|
|
+ swap(new_solution->hov,overland.hov);
|
|
|
+ error+=overland.total_error;
|
|
|
+
|
|
|
+ #ifdef MYDEBUG
|
|
|
+ if(Debug::level>1) cout<<" [Piccard::run] error (l+hori+overland) = \033[31m"<<error<<"\033[0m"<<endl;
|
|
|
+ #endif
|
|
|
|
|
|
//Voir calcul indice_x_Richards
|
|
|
all_vertical_richards.init_P=previous_solution->P; //P_0
|
|
|
all_vertical_richards.previous_P=all_vertical_richards.P; //P_{k-1}
|
|
|
- all_vertical_richards.hydr=horizontal_problem.hydr;
|
|
|
+ all_vertical_richards.hydr=new_solution->hydr;
|
|
|
all_vertical_richards.l=l;
|
|
|
all_vertical_richards.Pl=Pl;
|
|
|
all_vertical_richards.Psoil=overland.Psoil;
|
|
@@ -146,6 +149,8 @@ namespace Kernel{
|
|
|
has_converged=false;
|
|
|
return;
|
|
|
}
|
|
|
+ //Debug::pause();
|
|
|
+
|
|
|
}
|
|
|
if(error>=tolerence_Piccard){
|
|
|
#ifdef MYDEBUG
|