Changeset 2211
- Timestamp:
- 09/11/09 11:58:27 (16 years ago)
- Location:
- issm/trunk/src
- Files:
-
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk/src/c/ModelProcessorx/Control/CreateParametersControl.cpp
r2188 r2211 80 80 param= new Param(count,"tolx",DOUBLE); 81 81 param->SetDouble(iomodel->tolx); 82 parameters->AddObject(param); 83 84 /*eps_cm: */ 85 count++; 86 param= new Param(count,"eps_cm",DOUBLE); 87 param->SetDouble(iomodel->eps_cm); 82 88 parameters->AddObject(param); 83 89 -
issm/trunk/src/c/ModelProcessorx/IoModel.cpp
r2188 r2211 113 113 iomodel->artificial_diffusivity=0; 114 114 iomodel->nsteps=0; 115 iomodel->eps_cm=0; 115 116 iomodel->tolx=0; 116 117 iomodel->maxiter=NULL; … … 327 328 IoModelFetchData((void**)&iomodel->artificial_diffusivity,NULL,NULL,iomodel_handle,"artificial_diffusivity","Integer",NULL); 328 329 IoModelFetchData((void**)&iomodel->nsteps,NULL,NULL,iomodel_handle,"nsteps","Integer",NULL); 330 IoModelFetchData((void**)&iomodel->eps_cm,NULL,NULL,iomodel_handle,"eps_cm","Scalar",NULL); 329 331 IoModelFetchData((void**)&iomodel->tolx,NULL,NULL,iomodel_handle,"tolx","Scalar",NULL); 330 332 IoModelFetchData((void**)&iomodel->mincontrolconstraint,NULL,NULL,iomodel_handle,"mincontrolconstraint","Scalar",NULL); -
issm/trunk/src/c/ModelProcessorx/IoModel.h
r2188 r2211 111 111 int artificial_diffusivity; 112 112 int nsteps; 113 double eps_cm; 113 114 double tolx; 114 115 double* maxiter; -
issm/trunk/src/c/parallel/control_core.cpp
r2188 r2211 30 30 double* maxiter=NULL; 31 31 double* cmjump=NULL; 32 double eps_cm; 32 33 double tolx; 33 34 double* param_g=NULL; … … 48 49 int sub_analysis_type; 49 50 int debug=0; 51 int convergence=0; 50 52 int numberofnodes; 51 53 … … 61 63 model->FindParam(&maxiter,"maxiter"); 62 64 model->FindParam(&cmjump,"cmjump"); 65 model->FindParam(&eps_cm,"eps_cm"); 63 66 model->FindParam(&tolx,"tolx"); 64 67 model->FindParam(&mincontrolconstraint,"mincontrolconstraint"); … … 124 127 xfree((void**)&grad_g_double); 125 128 129 /*Has convergence been reached?*/ 130 if (!isnan(eps_cm)){ 131 i=n-2; 132 //go through the previous misfits(starting from n-2) 133 while(i>=0){ 134 if (fit[i]==fit[n]){ 135 //convergence test only if we have the same misfits 136 if ((J[i]-J[n])/J[n] <= eps_cm){ 137 //convergence if convergence criteria fullfilled 138 convergence=1; 139 _printf_("%s%g%s%g\n"," Convergence criterion: dJ/J = ",(J[i]-J[n])/J[n],"<",eps_cm); 140 } 141 else{ 142 _printf_("%s%g%s%g\n"," Convergence criterion: dJ/J = ",(J[i]-J[n])/J[n],">",eps_cm); 143 } 144 break; 145 } 146 i=i-1; 147 } 148 } 149 //stop if convergence has been reached 150 if(convergence) break; 151 126 152 //some temporary saving 127 153 /*if (((n+1)%5)==0){ -
issm/trunk/src/m/classes/@model/model.m
r2188 r2211 178 178 md.nsteps=0; 179 179 md.maxiter=[]; 180 md.eps_cm=0; 180 181 md.tolx=0; 181 182 md.optscal=[]; -
issm/trunk/src/m/classes/@model/setdefaultparameters.m
r2188 r2211 190 190 191 191 %cmjump 192 md.cmjump=.7*ones(md.nsteps,1); %30 % decrement. 192 md.cmjump=.7*ones(md.nsteps,1); %30 per cent decrement. 193 194 %eps_cm is a criteria to stop the control methods. 195 %if J[n]-J[n-1]/J[n] < criteria, the control run stops 196 %NaN if not applied 197 md.eps_cm=0.01; %1 percent 193 198 194 199 %minimum velocity to avoid the misfit to be singular -
issm/trunk/src/m/classes/public/display/displaycontrol.m
r2188 r2211 13 13 fielddisplay(md,'control_type','parameter where inverse control is carried out; ex: ''drag'', or ''B'')'); 14 14 fielddisplay(md,'nsteps','number of optimization searches'); 15 fielddisplay(md,'eps_cm','misfit convergence criterion. Default is 1%, NaN if not applied'); 15 16 fielddisplay(md,'optscal','scaling factor on gradient direction during optimization, for each optimization step'); 16 17 fielddisplay(md,'fit','''absolute: 0'', ''relative: 1'', or ''logarithmic: 2''. default is ''absolute: 0'', for each optimization steps'); -
issm/trunk/src/m/classes/public/ismodelselfconsistent.m
r2208 r2211 351 351 352 352 %LENGTH CONTROL FIELDS 353 if (length(md.maxiter)~=md.nsteps | length(md.optscal)~=md.nsteps | length(md.fit)~=md.nsteps )354 disp('maxiter, optscal and fitmust have the length specified by nsteps')353 if (length(md.maxiter)~=md.nsteps | length(md.optscal)~=md.nsteps | length(md.fit)~=md.nsteps | length(md.cmjump)~=md.nsteps) 354 disp('maxiter, optscal, fit and cmjump must have the length specified by nsteps') 355 355 bool=0;return; 356 356 end -
issm/trunk/src/m/classes/public/marshall.m
r2188 r2211 109 109 WriteData(fid,md.artificial_diffusivity,'Integer','artificial_diffusivity'); 110 110 WriteData(fid,md.nsteps,'Integer','nsteps'); 111 WriteData(fid,md.eps_cm,'Scalar','eps_cm'); 111 112 WriteData(fid,md.tolx,'Scalar','tolx'); 112 113 WriteData(fid,md.maxiter,'Mat','maxiter'); -
issm/trunk/src/m/solutions/cielo/control_core.m
r2188 r2211 16 16 dim=model.parameters.dim; 17 17 isstokes=model.parameters.isstokes; 18 19 %recover other parameters 20 eps_cm=model.parameters.eps_cm; 21 fit=model.parameters.fit; 18 22 19 23 %initialize control parameters … … 71 75 param_g=ControlConstrain(param_g,model.parameters); 72 76 73 %visualize direction. 74 if model.parameters.plot, 75 plot_newdistribution; 77 disp([' value of misfit J after optimization #' num2str(n) ':' num2str(c(n).J)]); 78 79 %Has convergence been reached? 80 convergence=0; 81 if ~isnan(eps_cm), 82 i=n-2; 83 %go through the previous misfits(starting from n-2) 84 while (i>=1), 85 if (fit(i)==fit(n)), 86 %convergence test only if we have the same misfits 87 if ((c(i).J-c(n).J)/c(n).J <= eps_cm), 88 %convergence if convergence criteria fullfilled 89 convergence=1; 90 displaystring(debug,'\n%s%g%s%g\n',' Convergence criterion: dJ/J = ',(c(i).J-c(n).J)/c(n).J,'<',eps_cm); 91 else 92 displaystring(debug,'\n%s%g%s%g\n',' Convergence criterion: dJ/J = ',(c(i).J-c(n).J)/c(n).J,'>',eps_cm); 93 end 94 break; 95 end 96 i=i-1; 97 end 76 98 end 99 %stop if convergence has been reached 100 if (convergence), break; end 77 101 78 disp([' value of misfit J after optimization #' num2str(n) ':' num2str(c(n).J)]);79 102 end 80 103
Note:
See TracChangeset
for help on using the changeset viewer.