Changeset 3203
- Timestamp:
- 03/05/10 14:51:26 (15 years ago)
- Location:
- issm/trunk/src
- Files:
-
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk/src/c/ModelProcessorx/Control/CreateParametersControl.cpp
r2892 r3203 22 22 23 23 double* fit=NULL; 24 double* weights=NULL; 24 25 double* cm_jump=NULL; 25 26 double* optscal=NULL; … … 176 177 xfree((void**)&iomodel->optscal); 177 178 xfree((void**)&iomodel->maxiter); 179 180 /*Now, recover weights as vectors: */ 181 IoModelFetchData(&iomodel->weights,NULL,NULL,iomodel_handle,"weights"); 182 183 count++; 184 param= new Param(count,"weights",DOUBLEVEC); 185 param->SetDoubleVec(iomodel->weights,iomodel->numberofnodes); 186 parameters->AddObject(param); 187 188 xfree((void**)&iomodel->weights); 178 189 179 190 /*Get vx, vx_obs, vy, vy_obs, and the parameter value: */ -
issm/trunk/src/c/ModelProcessorx/IoModel.cpp
r3201 r3203 108 108 /*!solution parameters: */ 109 109 iomodel->fit=NULL; 110 iomodel->weights=NULL; 110 111 iomodel->cm_jump=NULL; 111 112 iomodel->meanvel=0; … … 252 253 xfree((void**)&iomodel->n); 253 254 xfree((void**)&iomodel->fit); 255 xfree((void**)&iomodel->weights); 254 256 xfree((void**)&iomodel->cm_jump); 255 257 xfree((void**)&iomodel->optscal); -
issm/trunk/src/c/ModelProcessorx/IoModel.h
r3201 r3203 124 124 /*solution parameters: */ 125 125 double* fit; 126 double* weights; 126 127 double* cm_jump; 127 128 int artificial_diffusivity; -
issm/trunk/src/c/objects/Tria.cpp
r3201 r3203 2858 2858 int numberofdofspernode; 2859 2859 int dofs2[2]={0,1}; 2860 int dofs1[1]={0}; 2860 2861 2861 2862 /* grid data: */ … … 2868 2869 double dux_list[numgrids]; 2869 2870 double duy_list[numgrids]; 2871 double weights_list[numgrids]; 2870 2872 2871 2873 /* gaussian points: */ … … 2921 2923 if(!inputs->Recover("velocity",&vxvy_list[0][0],2,dofs2,numgrids,(void**)nodes)){ 2922 2924 throw ErrorException(__FUNCT__,"missing velocity input parameter"); 2925 } 2926 if(!inputs->Recover("weights",&weights_list[0],1,dofs1,numgrids,(void**)nodes)){ 2927 throw ErrorException(__FUNCT__,"missing weights input parameter"); 2923 2928 } 2924 2929 … … 3042 3047 } 3043 3048 3049 /*Apply weights to DU*/ 3050 for (i=0;i<numgrids;i++){ 3051 dux_list[i]=weights_list[i]*dux_list[i]; 3052 duy_list[i]=weights_list[i]*duy_list[i]; 3053 } 3054 3044 3055 /* Get gaussian points and weights (make this a statically initialized list of points? fstd): */ 3045 3056 GaussTria( &num_gauss, &first_gauss_area_coord, &second_gauss_area_coord, &third_gauss_area_coord, &gauss_weights, 2); … … 4491 4502 double obs_vy_list[numgrids]; 4492 4503 double misfit_list[numgrids]; 4504 double weights_list[numgrids]; 4493 4505 4494 4506 /* gaussian points: */ … … 4535 4547 if(!inputs->Recover("velocity",&vxvy_list[0][0],2,dofs2,numgrids,(void**)nodes)){ 4536 4548 throw ErrorException(__FUNCT__,"missing velocity input parameter"); 4549 } 4550 if(!inputs->Recover("weights",&weights_list[0],1,dofs1,numgrids,(void**)nodes)){ 4551 throw ErrorException(__FUNCT__,"missing weights input parameter"); 4537 4552 } 4538 4553 … … 4626 4641 } 4627 4642 4643 /*Apply weights to misfits*/ 4644 for (i=0;i<numgrids;i++){ 4645 misfit_list[i]=weights_list[i]*misfit_list[i]; 4646 } 4647 4628 4648 /* Get gaussian points and weights (make this a statically initialized list of points? fstd): */ 4629 4649 GaussTria( &num_gauss, &first_gauss_area_coord, &second_gauss_area_coord, &third_gauss_area_coord, &gauss_weights, 2); -
issm/trunk/src/c/parallel/diagnostic.cpp
r3097 r3203 41 41 double* u_g_initial=NULL; 42 42 double* u_g_obs=NULL; 43 double* weights=NULL; 43 44 Param* param=NULL; 44 45 int count; … … 100 101 model->FindParam(&u_g_initial,NULL,NULL,"u_g",DiagnosticAnalysisEnum(),HorizAnalysisEnum()); 101 102 model->FindParam(&numberofnodes,"numberofnodes"); 102 if(control_analysis | qmu_analysis){103 model->FindParam(&u_g_obs,NULL,NULL,"u_g_obs",DiagnosticAnalysisEnum(),HorizAnalysisEnum());104 }105 103 106 104 inputs=new ParameterInputs; 105 inputs->Add("velocity",u_g_initial,3,numberofnodes); 107 106 108 inputs->Add("velocity",u_g_initial,3,numberofnodes); 109 if(control_analysis | qmu_analysis){ 107 if(control_analysis){ 108 model->FindParam(&u_g_obs,NULL,NULL,"u_g_obs",DiagnosticAnalysisEnum(),HorizAnalysisEnum()); 109 model->FindParam(&weights,NULL,NULL,"weights",DiagnosticAnalysisEnum(),HorizAnalysisEnum()); 110 110 inputs->Add("velocity_obs",u_g_obs,2,numberofnodes); 111 inputs->Add("weights",weights,1,numberofnodes); 111 112 } 112 113 … … 174 175 xfree((void**)&u_g_initial); 175 176 xfree((void**)&u_g_obs); 177 xfree((void**)&weights); 176 178 delete model; 177 179 delete inputs; -
issm/trunk/src/c/parallel/steadystate.cpp
r3097 r3203 44 44 double* p_g_initial=NULL; 45 45 double* u_g_obs=NULL; 46 double* weights=NULL; 46 47 double dt; 47 48 Param* param=NULL; … … 119 120 model->FindParam(&u_g_obs,NULL,NULL,"u_g_obs",DiagnosticAnalysisEnum(),HorizAnalysisEnum()); 120 121 inputs->Add("velocity_obs",u_g_obs,2,numberofnodes); 122 model->FindParam(&weights,NULL,NULL,"weights",DiagnosticAnalysisEnum(),HorizAnalysisEnum()); 123 inputs->Add("velocity_obs",weights,1,numberofnodes); 121 124 } 122 125 -
issm/trunk/src/m/classes/@model/model.m
r3201 r3203 187 187 md.control_analysis=0; 188 188 md.control_type=''; 189 md.weights=[]; 189 190 md.nsteps=0; 190 191 md.maxiter=[]; 191 md. eps_cm=0;192 md.fit=[]; 192 193 md.tolx=0; 193 194 md.optscal=[]; 195 md.eps_cm=0; 194 196 md.cm_noisedmp=0; 195 197 md.cm_mindmp_value=0; … … 199 201 md.cm_min=0; 200 202 md.cm_max=0; 201 md.fit=[];202 203 md.cm_jump=[]; 203 204 md.cm_gradient=0; -
issm/trunk/src/m/classes/public/display/displaycontrol.m
r2881 r3203 12 12 if md.control_analysis, 13 13 fielddisplay(md,'control_type','parameter where inverse control is carried out; ex: ''drag'', or ''B'')'); 14 fielddisplay(md,'weights','weights applied to the misfit of each node'); 14 15 fielddisplay(md,'nsteps','number of optimization searches'); 15 16 fielddisplay(md,'eps_cm','misfit convergence criterion. Default is 1%, NaN if not applied'); 16 17 fielddisplay(md,'optscal','scaling factor on gradient direction during optimization, for each optimization step'); 17 18 fielddisplay(md,'fit','''absolute: 0'', ''relative: 1'', or ''logarithmic: 2''. for each optimization steps'); 18 fielddisplay(md,'cm_jump','decrease threshold for misfit, default is 30%');19 19 fielddisplay(md,'maxiter','maximum iterations during each optimization step'); 20 20 fielddisplay(md,'tolx','minimum tolerance which will stop one optimization search'); 21 fielddisplay(md,'cm_jump','decrease threshold for misfit, default is 30%'); 21 22 fielddisplay(md,'cm_noisedmp','noise dampening coefficient, 0 if not applied'); 22 23 fielddisplay(md,'cm_mindmp_value','minimum acceptable value of the inversed parameter before being dampened'); -
issm/trunk/src/m/classes/public/ismodelselfconsistent.m
r3189 r3203 85 85 fields={'numberofelements','numberofgrids','x','y','z','drag','drag_type','p','q',... 86 86 'rho_ice','rho_water','B','elementoniceshelf','surface','thickness','bed','g','lowmem','sparsity','nsteps','maxiter',... 87 'tolx','np','eps_res',' exclusive','n','gridonbed','gridonsurface','elementonbed','elementonsurface','deltaH','DeltaH','timeacc','timedec'};87 'tolx','np','eps_res','max_nonlinear_iterations','exclusive','n','gridonbed','gridonsurface','elementonbed','elementonsurface','deltaH','DeltaH','timeacc','timedec'}; 88 88 checknan(md,fields); 89 89 90 90 %FIELDS >= 0 91 91 fields={'numberofelements','numberofgrids','elements','drag','drag_type','p','q',... 92 'rho_ice','rho_water','B','elementoniceshelf','thickness','g','eps_res',' eps_rel','eps_abs','nsteps','maxiter','tolx','exclusive',...92 'rho_ice','rho_water','B','elementoniceshelf','thickness','g','eps_res','max_nonlinear_iterations','eps_rel','eps_abs','nsteps','maxiter','tolx','exclusive',... 93 93 'sparsity','lowmem','n','gridonbed','gridonsurface','elementonbed','elementonsurface','deltaH','DeltaH','timeacc','timedec'}; 94 94 checkgreater(md,fields,0); … … 96 96 %FIELDS > 0 97 97 fields={'numberofelements','numberofgrids','elements','drag_type','p',... 98 'rho_ice','rho_water','B','thickness','g',' eps_res','eps_rel','eps_abs','maxiter','tolx',...98 'rho_ice','rho_water','B','thickness','g','max_nonlinear_iterations','eps_res','eps_rel','eps_abs','maxiter','tolx',... 99 99 'sparsity','deltaH','DeltaH','timeacc','timedec'}; 100 100 checkgreaterstrict(md,fields,0); … … 373 373 checkvalues(md,{'fit'},[0 1 2 3 4]); 374 374 375 %WEIGHTS 376 fields={'weights'}; 377 checksize(md,fields,[md.numberofgrids 1]); 378 checkgreater(md,fields,0); 379 375 380 %OBSERVED VELOCITIES 376 381 fields={'vx_obs','vy_obs'}; … … 418 423 if isnan(fieldsize(1)), 419 424 if (size(eval(['md.' fields{i}]),2)~=fieldsize(2)), 420 %LOG warning :425 %LOG warnings: 421 426 if strcmpi(fields{i},'pressureload'), 422 427 disp(' '); … … 433 438 end 434 439 else 440 %LOG warnings: 441 if strcmpi(fields{i},'weights'), 442 disp(' '); 443 disp(' ''weights'' is a new field that should be of length numberofgrids.'); 444 disp(' To update your model, use the following line'); 445 disp(' md.weights=ones(md.numberofgrids,1)'); 446 disp(' '); 447 end 435 448 if ((size(eval(['md.' fields{i}]),1)~=fieldsize(1)) | (size(eval(['md.' fields{i}]),2)~=fieldsize(2))) 436 449 error(['model not consistent: field ' fields{i} ' size should be ' num2str(fieldsize(1)) ' x ' num2str(fieldsize(2))]); -
issm/trunk/src/m/classes/public/marshall.m
r3201 r3203 100 100 %Write solution parameters 101 101 WriteData(fid,md.fit,'Mat','fit'); 102 WriteData(fid,md.weights,'Mat','weights'); 102 103 WriteData(fid,md.cm_jump,'Mat','cm_jump'); 103 104 WriteData(fid,md.yts,'Scalar','yts'); -
issm/trunk/src/m/solutions/jpl/diagnostic.m
r3085 r3203 34 34 if md.control_analysis, 35 35 inputs=add(inputs,'velocity_obs',models.dh.parameters.u_g_obs,'doublevec',2,models.dh.parameters.numberofnodes); 36 inputs=add(inputs,'weights',models.dh.parameters.weights,'doublevec',1,models.dh.parameters.numberofnodes); 36 37 end 37 38
Note:
See TracChangeset
for help on using the changeset viewer.