Changeset 1666
- Timestamp:
- 08/13/09 12:51:46 (16 years ago)
- Location:
- issm/trunk/src
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk/src/c/ModelProcessorx/CreateParameters.cpp
r1648 r1666 70 70 parameters->AddObject(param); 71 71 72 /*eps_res: */ 73 count++; 74 param= new Param(count,"eps_res",DOUBLE); 75 param->SetDouble(model->eps_res); 76 parameters->AddObject(param); 77 72 78 /*eps_rel: */ 73 79 count++; -
issm/trunk/src/c/ModelProcessorx/Model.cpp
r1648 r1666 128 128 model->debug=0; 129 129 model->plot=0; 130 model->eps_res=0; 130 131 model->eps_rel=0; 131 132 model->eps_abs=0; … … 346 347 ModelFetchData((void**)&model->mincontrolconstraint,NULL,NULL,model_handle,"mincontrolconstraint","Scalar",NULL); 347 348 ModelFetchData((void**)&model->maxcontrolconstraint,NULL,NULL,model_handle,"maxcontrolconstraint","Scalar",NULL); 349 ModelFetchData((void**)&model->eps_res,NULL,NULL,model_handle,"eps_res","Scalar",NULL); 348 350 ModelFetchData((void**)&model->eps_rel,NULL,NULL,model_handle,"eps_rel","Scalar",NULL); 349 351 ModelFetchData((void**)&model->eps_abs,NULL,NULL,model_handle,"eps_abs","Scalar",NULL); -
issm/trunk/src/c/ModelProcessorx/Model.h
r1648 r1666 126 126 int debug; 127 127 int plot; 128 double eps_res; 128 129 double eps_rel; 129 130 double eps_abs; -
issm/trunk/src/c/parallel/diagnostic_core_nonlinear.cpp
r1665 r1666 42 42 double nKUoldF; 43 43 double nF; 44 double solver_residue, mechanical_residue;44 double solver_residue,res; 45 45 46 46 /*parameters:*/ … … 48 48 char* solver_string=NULL; 49 49 int debug=0; 50 double eps_re l,eps_abs,yts;50 double eps_res,eps_rel,eps_abs,yts; 51 51 int dofs[4]={1,1,0,0}; //recover vx,vy by default. vz and pressure may be. 52 52 … … 58 58 fem->parameters->FindParam((void*)&numberofnodes,"numberofnodes"); 59 59 fem->parameters->FindParam((void*)&solver_string,"solverstring"); 60 fem->parameters->FindParam((void*)&eps_res,"eps_res"); 60 61 fem->parameters->FindParam((void*)&eps_rel,"eps_rel"); 61 62 fem->parameters->FindParam((void*)&eps_abs,"eps_abs"); … … 117 118 if (debug) _printf_(" solving\n"); 118 119 Solverx(&uf, Kff, pf, old_uf, solver_string); 120 121 /*print solver residue = norm(KU-F)/norm(F)*/ 122 if (debug>1){ 123 //compute KUF = KU - F = K*U - F 124 VecDuplicate(uf,&KU); MatMultPatch(Kff,uf,KU); 125 VecDuplicate(KU,&KUF);VecCopy(KU,KUF); VecAYPX(KUF,-1.0,pf); 126 //compute norm(KUF), norm(F) and residue 127 VecNorm(KUF,NORM_2,&nKUF); 128 VecNorm(pf,NORM_2,&nF); 129 solver_residue=nKUF/nF; 130 //clean up 131 VecFree(&KU); 132 VecFree(&KUF); 133 _printf_("%s%g\n"," solver residue: norm(K[n]U[n]-F)/norm(F)",solver_residue); 134 } 119 135 120 136 if (debug) _printf_(" merging solution from f to g set\n"); … … 130 146 /*Figure out if convergence is reached.*/ 131 147 132 /*solver residue = norm(KU-F)/norm(F)*/ 133 //compute KUF = KU - F = K*U - F 134 VecDuplicate(uf,&KU); MatMultPatch(Kff,uf,KU); 135 VecDuplicate(KU,&KUF);VecCopy(KU,KUF); VecAYPX(KUF,-1.0,pf); 136 //compute norm(KUF), norm(F) and residue 137 VecNorm(KUF,NORM_2,&nKUF); 138 VecNorm(pf,NORM_2,&nF); 139 solver_residue=nKUF/nF; 140 //clean up 141 VecFree(&KU); 142 VecFree(&KUF); 143 if (debug) _printf_("%-50s%g\n"," Convergence criterion: norm(KU-F)/norm(F)",solver_residue); 144 145 /*mechanical residue = norm(KUold-F)/norm(F)*/ 146 //compute KUoldF = KUold - F = K*Uold - F 148 /*1 mechanical equilibrium residue = norm(K[n]U[n-1]-F)/norm(F)*/ 149 //compute K[n]U[n-1]F = K[n]U[n-1] - F 147 150 VecDuplicate(uf,&KUold); MatMultPatch(Kff,old_uf,KUold); 148 151 VecDuplicate(KUold,&KUoldF);VecCopy(KUold,KUoldF); VecAYPX(KUoldF,-1.0,pf); 149 152 //compute norm(KUF), norm(F) and residue 150 153 VecNorm(KUoldF,NORM_2,&nKUoldF); 151 mechanical_residue=nKUoldF/nF;154 res=nKUoldF/nF; 152 155 //clean up 153 156 VecFree(&KUold); 154 157 VecFree(&KUoldF); 155 if (debug) _printf_("%-50s%g%s\n"," Convergence criterion: norm(KUold-F)/norm(F)",mechanical_residue*100," \%"); 158 if (isnan(res)) throw ErrorException(__FUNCT__,exprintf("mechanical equilibrium convergence criterion is NaN! ")); 159 if((res)<eps_res){ 160 if (debug) _printf_("%-50s%g%s%g%s\n"," mechanical equilibrium convergence criterion",res*100," < ",eps_res*100," \%"); 161 converged=1; 162 } 163 else{ 164 if (debug) _printf_("%-50s%g%s%g%s\n"," mechanical equilibrium convergence criterion",res*100," > ",eps_res*100," \%"); 165 converged=1;//TTTTTTTTTTTTTTTTTTFTYICGWFYUOGCYEUOGCYEUWGCHLWGWI 166 } 156 167 157 168 /*relative criterion = norm(du)/norm(u)*/ -
issm/trunk/src/m/classes/@model/model.m
r1629 r1666 167 167 168 168 %Statics parameters 169 md.eps_res=0; 169 170 md.eps_rel=0; 170 171 md.eps_abs=0; -
issm/trunk/src/m/classes/@model/setdefaultparameters.m
r1319 r1666 56 56 %Solver parameters 57 57 58 %mechanical residue convergence criterion norm(K(uold)uold - F)/norm(F) 59 md.eps_res=0.001; 60 58 61 %relative convergence criterion ((vel(n-1)-vel(n))/vel(n)) 59 62 md.eps_rel=0.01; -
issm/trunk/src/m/classes/public/display/displaydiagnostic.m
r1277 r1666 12 12 13 13 disp(sprintf('\n %s','Newton convergence criteria:')); 14 fielddisplay(md,'eps_rel','velocity relative convergence criterion'); 15 fielddisplay(md,'eps_abs','velocity absolute convergence criterion'); 14 fielddisplay(md,'eps_res','mechanical equilibrium residue convergence criterion'); 15 fielddisplay(md,'eps_rel','velocity relative convergence criterion, NaN -> not applied'); 16 fielddisplay(md,'eps_abs','velocity absolute convergence criterion, NaN -> not applied'); 16 17 fielddisplay(md,'viscosity_overshoot','over-shooting constant new=new+C*(new-old)'); 17 18 -
issm/trunk/src/m/classes/public/ismodelselfconsistent.m
r1651 r1666 65 65 fields={'numberofelements','numberofgrids','x','y','z','segmentonneumann_diag','drag','drag_type','p','q','gridondirichlet_diag',... 66 66 'rho_ice','rho_water','B','elementoniceshelf','surface','thickness','bed','g','lowmem','sparsity','nsteps','maxiter',... 67 'tolx','np','eps_re l','exclusive','n','gridonbed','gridonsurface','elementonbed','elementonsurface','deltaH','DeltaH','timeacc','timedec'};67 'tolx','np','eps_res','exclusive','n','gridonbed','gridonsurface','elementonbed','elementonsurface','deltaH','DeltaH','timeacc','timedec'}; 68 68 for i=1:length(fields), 69 69 if ~isempty(md.(fields{i})), … … 75 75 end 76 76 77 %FIELDS > 077 %FIELDS >= 0 78 78 fields={'numberofelements','numberofgrids','elements','segmentonneumann_diag','drag','drag_type','p','q','gridondirichlet_diag',... 79 'rho_ice','rho_water','B','elementoniceshelf','thickness','g','eps_re l','eps_abs','nsteps','maxiter','tolx','exclusive',...79 'rho_ice','rho_water','B','elementoniceshelf','thickness','g','eps_res','eps_rel','eps_abs','nsteps','maxiter','tolx','exclusive',... 80 80 'sparsity','lowmem','n','gridonbed','gridonsurface','elementonbed','elementonsurface','deltaH','DeltaH','timeacc','timedec'}; 81 81 for i=1:length(fields), … … 94 94 %FIELDS ~=0 95 95 fields={'numberofelements','numberofgrids','elements','segmentonneumann_diag','drag_type',... 96 'rho_ice','rho_water','B','thickness','g','eps_re l','eps_abs','maxiter','tolx',...96 'rho_ice','rho_water','B','thickness','g','eps_res','eps_rel','eps_abs','maxiter','tolx',... 97 97 'sparsity','deltaH','DeltaH','timeacc','timedec'}; 98 98 for i=1:length(fields), -
issm/trunk/src/m/classes/public/marshall.m
r1650 r1666 119 119 WriteData(fid,md.mincontrolconstraint,'Scalar','mincontrolconstraint'); 120 120 WriteData(fid,md.maxcontrolconstraint,'Scalar','maxcontrolconstraint'); 121 WriteData(fid,md.eps_res,'Scalar','eps_res'); 121 122 WriteData(fid,md.eps_rel,'Scalar','eps_rel'); 122 123 WriteData(fid,md.eps_abs,'Scalar','eps_abs'); -
issm/trunk/src/m/solutions/cielo/diagnostic_core_nonlinear.m
r1665 r1666 60 60 %Figure out if convergence have been reached 61 61 62 % Residue criterion62 %Solver 63 63 solver_residue=norm(K_ff*soln(count).u_f-p_f,2)/norm(p_f,2); 64 displaystring(m.parameters.debug ,'%-53s%g',' convergence criterion: norm(KU-F)/norm(F)',solver_residue);64 displaystring(m.parameters.debug>1,'%-60s%g',' convergence criterion: norm(K[n]U[n]-F)/norm(F)',solver_residue); 65 65 66 66 %Force equilibrium 67 mechanical_residue=norm(K_ff*soln(count-1).u_f-p_f,2)/norm(p_f,2); 68 displaystring(m.parameters.debug,'%-53s%g%s',' convergence criterion: norm(KUold-F)/norm(F)',mechanical_residue*100,' %'); 67 res=norm(K_ff*soln(count-1).u_f-p_f,2)/norm(p_f,2); 68 if (res<=m.parameters.eps_res), 69 displaystring(m.parameters.debug,'%-60s%g%s%g%s',' mechanical equilibrium convergence criterion',res*100,' < ',m.parameters.eps_res*100,' %'); 70 converged=1; 71 else 72 displaystring(m.parameters.debug,'%-60s%g%s%g%s',' mechanical equilibrium convergence criterion',res*100,' > ',m.parameters.eps_res*100,' %'); 73 converged=1; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%ATTTENETIONHiohfiow 74 end 69 75 70 76 %Relative criterion … … 73 79 nu=norm(soln(count-1).u_g,2); 74 80 if (ndu/nu<=m.parameters.eps_rel), 75 displaystring(m.parameters.debug,'%- 53s%g%s%g%s','convergence criterion: norm(du)/norm(u)',ndu/nu*100,' < ',m.parameters.eps_rel*100,' %');81 displaystring(m.parameters.debug,'%-60s%g%s%g%s',' relative convergence criterion: norm(du)/norm(u)',ndu/nu*100,' < ',m.parameters.eps_rel*100,' %'); 76 82 converged=1; 77 83 else 78 displaystring(m.parameters.debug,'%- 53s%g%s%g%s','convergence criterion: norm(du)/norm(u)',ndu/nu*100,' > ',m.parameters.eps_rel*100,' %');84 displaystring(m.parameters.debug,'%-60s%g%s%g%s',' relative convergence criterion: norm(du)/norm(u)',ndu/nu*100,' > ',m.parameters.eps_rel*100,' %'); 79 85 converged=0; 80 86 end … … 84 90 if ~isnan(m.parameters.eps_abs), 85 91 if (nduinf<=m.parameters.eps_abs), 86 displaystring(m.parameters.debug,'%- 53s%g%s%g%s','convergence criterion: max(du)',nduinf,' < ',m.parameters.eps_abs,' m/yr');92 displaystring(m.parameters.debug,'%-60s%g%s%g%s',' absolute convergence criterion: max(du)',nduinf,' < ',m.parameters.eps_abs,' m/yr'); 87 93 else 88 displaystring(m.parameters.debug,'%- 53s%g%s%g%s','convergence criterion: max(du)',nduinf,' > ',m.parameters.eps_abs,' m/yr');94 displaystring(m.parameters.debug,'%-60s%g%s%g%s',' absolute convergence criterion: max(du)',nduinf,' > ',m.parameters.eps_abs,' m/yr'); 89 95 converged=0; 90 96 end 91 97 end 98 disp(' ') 92 99 93 100 %rift convergence criterion
Note:
See TracChangeset
for help on using the changeset viewer.