Changeset 3203


Ignore:
Timestamp:
03/05/10 14:51:26 (15 years ago)
Author:
Mathieu Morlighem
Message:

Added field weights for CM

Location:
issm/trunk/src
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk/src/c/ModelProcessorx/Control/CreateParametersControl.cpp

    r2892 r3203  
    2222
    2323        double* fit=NULL;
     24        double* weights=NULL;
    2425        double* cm_jump=NULL;
    2526        double* optscal=NULL;
     
    176177                xfree((void**)&iomodel->optscal);
    177178                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);
    178189
    179190                /*Get vx, vx_obs, vy, vy_obs, and the parameter value: */
  • issm/trunk/src/c/ModelProcessorx/IoModel.cpp

    r3201 r3203  
    108108        /*!solution parameters: */
    109109        iomodel->fit=NULL;
     110        iomodel->weights=NULL;
    110111        iomodel->cm_jump=NULL;
    111112        iomodel->meanvel=0;
     
    252253        xfree((void**)&iomodel->n);
    253254        xfree((void**)&iomodel->fit);
     255        xfree((void**)&iomodel->weights);
    254256        xfree((void**)&iomodel->cm_jump);
    255257        xfree((void**)&iomodel->optscal);
  • issm/trunk/src/c/ModelProcessorx/IoModel.h

    r3201 r3203  
    124124        /*solution parameters: */
    125125        double* fit;
     126        double* weights;
    126127        double* cm_jump;
    127128        int     artificial_diffusivity;
  • issm/trunk/src/c/objects/Tria.cpp

    r3201 r3203  
    28582858        int          numberofdofspernode;
    28592859        int          dofs2[2]={0,1};
     2860        int          dofs1[1]={0};
    28602861
    28612862        /* grid data: */
     
    28682869        double dux_list[numgrids];
    28692870        double duy_list[numgrids];
     2871        double weights_list[numgrids];
    28702872
    28712873        /* gaussian points: */
     
    29212923        if(!inputs->Recover("velocity",&vxvy_list[0][0],2,dofs2,numgrids,(void**)nodes)){
    29222924                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");
    29232928        }
    29242929
     
    30423047        }
    30433048
     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
    30443055        /* Get gaussian points and weights (make this a statically initialized list of points? fstd): */
    30453056        GaussTria( &num_gauss, &first_gauss_area_coord, &second_gauss_area_coord, &third_gauss_area_coord, &gauss_weights, 2);
     
    44914502        double obs_vy_list[numgrids];
    44924503        double misfit_list[numgrids];
     4504        double weights_list[numgrids];
    44934505
    44944506        /* gaussian points: */
     
    45354547        if(!inputs->Recover("velocity",&vxvy_list[0][0],2,dofs2,numgrids,(void**)nodes)){
    45364548                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");
    45374552        }
    45384553
     
    46264641        }
    46274642
     4643        /*Apply weights to misfits*/
     4644        for (i=0;i<numgrids;i++){
     4645                misfit_list[i]=weights_list[i]*misfit_list[i];
     4646        }
     4647
    46284648        /* Get gaussian points and weights (make this a statically initialized list of points? fstd): */
    46294649        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  
    4141        double* u_g_initial=NULL;
    4242        double* u_g_obs=NULL;
     43        double* weights=NULL;
    4344        Param*  param=NULL;
    4445        int      count;
     
    100101        model->FindParam(&u_g_initial,NULL,NULL,"u_g",DiagnosticAnalysisEnum(),HorizAnalysisEnum());
    101102        model->FindParam(&numberofnodes,"numberofnodes");
    102         if(control_analysis | qmu_analysis){
    103                 model->FindParam(&u_g_obs,NULL,NULL,"u_g_obs",DiagnosticAnalysisEnum(),HorizAnalysisEnum());
    104         }
    105103
    106104        inputs=new ParameterInputs;
     105        inputs->Add("velocity",u_g_initial,3,numberofnodes);
    107106
    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());
    110110                inputs->Add("velocity_obs",u_g_obs,2,numberofnodes);
     111                inputs->Add("weights",weights,1,numberofnodes);
    111112        }
    112113       
     
    174175        xfree((void**)&u_g_initial);
    175176        xfree((void**)&u_g_obs);
     177        xfree((void**)&weights);
    176178        delete model;
    177179        delete inputs;
  • issm/trunk/src/c/parallel/steadystate.cpp

    r3097 r3203  
    4444        double* p_g_initial=NULL;
    4545        double* u_g_obs=NULL;
     46        double* weights=NULL;
    4647        double  dt;
    4748        Param*  param=NULL;
     
    119120                model->FindParam(&u_g_obs,NULL,NULL,"u_g_obs",DiagnosticAnalysisEnum(),HorizAnalysisEnum());
    120121                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);
    121124        }
    122125       
  • issm/trunk/src/m/classes/@model/model.m

    r3201 r3203  
    187187        md.control_analysis=0;
    188188        md.control_type='';
     189        md.weights=[];
    189190        md.nsteps=0;
    190191        md.maxiter=[];
    191         md.eps_cm=0;
     192        md.fit=[];
    192193        md.tolx=0;
    193194        md.optscal=[];
     195        md.eps_cm=0;
    194196        md.cm_noisedmp=0;
    195197        md.cm_mindmp_value=0;
     
    199201        md.cm_min=0;
    200202        md.cm_max=0;
    201         md.fit=[];
    202203        md.cm_jump=[];
    203204        md.cm_gradient=0;
  • issm/trunk/src/m/classes/public/display/displaycontrol.m

    r2881 r3203  
    1212if md.control_analysis,
    1313        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');
    1415        fielddisplay(md,'nsteps','number of optimization searches');
    1516        fielddisplay(md,'eps_cm','misfit convergence criterion. Default is 1%, NaN if not applied');
    1617        fielddisplay(md,'optscal','scaling factor on gradient direction during optimization, for each optimization step');
    1718        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%');
    1919        fielddisplay(md,'maxiter','maximum iterations during each optimization step');
    2020        fielddisplay(md,'tolx','minimum tolerance which will stop one optimization search');
     21        fielddisplay(md,'cm_jump','decrease threshold for misfit, default is 30%');
    2122        fielddisplay(md,'cm_noisedmp','noise dampening coefficient, 0 if not applied');
    2223        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  
    8585fields={'numberofelements','numberofgrids','x','y','z','drag','drag_type','p','q',...
    8686        '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'};
    8888checknan(md,fields);
    8989
    9090%FIELDS >= 0
    9191fields={'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',...
    9393        'sparsity','lowmem','n','gridonbed','gridonsurface','elementonbed','elementonsurface','deltaH','DeltaH','timeacc','timedec'};
    9494checkgreater(md,fields,0);
     
    9696%FIELDS > 0
    9797fields={'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',...
    9999        'sparsity','deltaH','DeltaH','timeacc','timedec'};
    100100checkgreaterstrict(md,fields,0);
     
    373373        checkvalues(md,{'fit'},[0 1 2 3 4]);
    374374
     375        %WEIGHTS
     376        fields={'weights'};
     377        checksize(md,fields,[md.numberofgrids 1]);
     378        checkgreater(md,fields,0);
     379
    375380        %OBSERVED VELOCITIES
    376381        fields={'vx_obs','vy_obs'};
     
    418423                if isnan(fieldsize(1)),
    419424                        if (size(eval(['md.' fields{i}]),2)~=fieldsize(2)),
    420                                 %LOG warning:
     425                                %LOG warnings:
    421426                                if strcmpi(fields{i},'pressureload'),
    422427                                        disp(' ');
     
    433438                        end
    434439                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
    435448                        if ((size(eval(['md.' fields{i}]),1)~=fieldsize(1)) |  (size(eval(['md.' fields{i}]),2)~=fieldsize(2)))
    436449                                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  
    100100%Write solution parameters
    101101WriteData(fid,md.fit,'Mat','fit');
     102WriteData(fid,md.weights,'Mat','weights');
    102103WriteData(fid,md.cm_jump,'Mat','cm_jump');
    103104WriteData(fid,md.yts,'Scalar','yts');
  • issm/trunk/src/m/solutions/jpl/diagnostic.m

    r3085 r3203  
    3434        if md.control_analysis,
    3535                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);
    3637        end
    3738
Note: See TracChangeset for help on using the changeset viewer.