Changeset 9752


Ignore:
Timestamp:
09/09/11 17:15:08 (14 years ago)
Author:
Mathieu Morlighem
Message:

Some fixes

Location:
issm/trunk/src/m/classes
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk/src/m/classes/inversion.m

    r9749 r9752  
    9393                        %Check NaN
    9494                        fields={'nsteps','maxiter_per_step'};
    95                         checknan(md,'materials',fields);
     95                        checknan(md,'inversion',fields);
    9696
     97                        %CONTROL TYPE
     98                        num_controls=numel(md.inversion.control_parameters);
     99                        num_costfunc=size(md.inversion.cost_functions,2);
     100                        if ~iscell(md.inversion.control_parameters)
     101                                checkmessage(['model not consistent: model ' md.miscellaneous.name ' inversion.control_parameters field should be a cell of strings']);
     102                        end
     103                        if ~ismember(md.inversion.control_parameters,{'BalancethicknessThickeningRate' 'FrictionCoefficient' 'MaterialsRheologyBbar' 'Vx' 'Vy'});
     104                                checkmessage(['model not consistent: model ' md.miscellaneous.name ' inversion.control_parameters field should be ''BalancethicknessThickeningRate'' ''FrictionCoefficient'' ''MaterialsRheologyBbar'' ''Vx'' ''Vy''']);
     105                        end
     106
     107                        %LENGTH CONTROL FIELDS
     108                        fields={'maxiter_per_step','step_threshold'};
     109                        checksize(md,'inversion',fields,[md.inversion.nsteps 1]);
     110                        fields={'cost_functions'};
     111                        checksize(md,'inversion',fields,[md.inversion.nsteps num_costfunc]);
     112                        fields={'gradient_scaling'};
     113                        checksize(md,'inversion',fields,[md.inversion.nsteps num_controls]);
     114                        fields={'min_parameters','max_parameters'};
     115                        checksize(md,'inversion',fields,[md.mesh.numberofvertices num_controls]);
     116
     117                        %RESPONSES
     118                        checkvalues(md,'inversion',{'cost_functions'},[101:105 201 501:503]);
     119
     120                        %WEIGHTS
     121                        fields={'cost_functions_coefficients'};
     122                        checksize(md,'inversion',fields,[md.mesh.numberofvertices num_costfunc]);
     123                        checkgreater(md,'inversion',fields,0);
     124
     125                        %OBSERVED VELOCITIES
     126                        if md.private.solution==BalancethicknessSolutionEnum
     127                                fields={'thickness_obs'};
     128                                checksize(md,'inversion',fields,[md.mesh.numberofvertices 1]);
     129                                checknan(md,'inversion',fields);
     130                        else
     131                                fields={'vx_obs','vy_obs'};
     132                                checksize(md,'inversion',fields,[md.mesh.numberofvertices 1]);
     133                                checknan(md,'inversion',fields);
     134                        end
     135
     136                        %DIRICHLET IF THICKNESS <= 0
     137                        if any(md.geometry.thickness<=0),
     138                                pos=find(md.geometry.thickness<=0);
     139                                if any(isnan(md.balancethickness.spcthickness(pos))),
     140                                        checkmessage(['model not consistent: model ' md.miscellaneous.name ' has some nodes with 0 thickness']);
     141                                end
     142                        end
    97143                end % }}}
    98144                function disp(obj) % {{{
  • issm/trunk/src/m/classes/qmu.m

    r9739 r9752  
    5050                function checkconsistency(obj,md) % {{{
    5151
     52                        %Early return
     53                        if ~md.qmu.isdakota, return; end
     54
     55                        if md.qmu.params.evaluation_concurrency~=1,
     56                                checkmessage(['model not consistent: concurrency should be set to 1 when running dakota in library mode']);
     57                        end
     58                        if ~isempty(md.qmu.partition),
     59                                if numel(md.qmu.partition)~=md.mesh.numberofvertices,
     60                                        checkmessage(['model not consistent: user supplied partition for qmu analysis should have size md.mesh.numberofvertices x 1 ']);
     61                                end
     62                                if find(md.qmu.partition)>=md.mesh.numberofvertices,
     63                                        checkmessage(['model not consistent: user supplied partition should be indexed from 0 (c-convention)']);
     64                                end
     65                                if min(md.qmu.partition)~=0,
     66                                        checkmessage(['model not consistent: partition vector not indexed from 0 on']);
     67                                end
     68                                if max(md.qmu.partition)>=md.mesh.numberofvertices,
     69                                        checkmessage(['model not consistent: partition vector cannot have maximum index larger than number of nodes']);
     70                                end
     71                                if ~isempty(find(md.qmu.partition<0)),
     72                                        checkmessage(['model not consistent: partition vector cannot have values less than 0']);
     73                                end
     74                                if ~isempty(find(md.qmu.partition>=md.qmu.numberofpartitions)),
     75                                        checkmessage(['model not consistent: partition vector cannot have values more than md.qmu.numberofpartitions-1']);
     76                                end
     77                                if max(md.qmu.partition)>=md.qmu.numberofpartitions,
     78                                        checkmessage(['model not consistent: for qmu analysis, partitioning vector cannot go over npart, number of partition areas']);
     79                                end
     80                        end
     81
     82                        if ~strcmpi(md.cluster.name,'none'),
     83                                if md.settings.waitonlock==0,
     84                                        checkmessage(['model is not correctly configured: waitonlock should be activated when running qmu in parallel mode!']);
     85                                end
     86                        end
    5287                end % }}}
    5388                function disp(obj) % {{{
  • issm/trunk/src/m/classes/steadystate.m

    r9739 r9752  
    4242                end % }}}
    4343                function checkconsistency(obj,md) % {{{
     44                        if md.timestepping.time_step~=0,
     45                                checkmessage(['model not consistent: for a steadystate computation, timestepping.time_step must be zero.']);
     46                        end
    4447
     48                        if isnan(md.diagnostic.reltol),
     49                                checkmessage(['model not consistent: for a steadystate computation, diagnostic.reltol (relative convergence criterion) must be defined!']);
     50                        end
    4551                end % }}}
    4652        end
  • issm/trunk/src/m/classes/timestepping.m

    r9751 r9752  
    5050                                checkmessage(['model not consistent: model ' md.miscellaneous.name ' time_adapt field should be 0 or 1']);
    5151                        end
     52                        if md.timestepping.time_step<=0,
     53                                checkmessage('model not consistent: field timestepping.time_step must be positive for a transient run')
     54                        end
     55                        if(md.timestepping.cfl_coefficient>1 | md.timestepping.cfl_coefficient<0),
     56                                checkmessage(['model not consistent: model ' md.miscellaneous.name ' cfl_coefficient field should between  0 and 1']);
     57                        end
     58                        if(md.timestepping.cfl_coefficient>1 | md.timestepping.cfl_coefficient<0),
     59                                checkmessage(['model not consistent: model ' md.miscellaneous.name ' cfl_coefficient field should between  0 and 1']);
     60                        end
    5261                end % }}}
    5362        end
  • issm/trunk/src/m/classes/transient.m

    r9739 r9752  
    5353                end % }}}
    5454                function checkconsistency(obj,md) % {{{
     55                        if ~ismember(md.transient.isdiagnostic,[0 1]),
     56                                checkmessage('model not consistent: transient.isdiagnostic should be a scalar (1 or 0)');
     57                        end
     58                        if ~ismember(md.transient.isprognostic,[0 1]),
     59                                checkmessage('model not consistent: transient.isprognostic should be a scalar (1 or 0)');
     60                        end
     61                        if ~ismember(md.transient.isthermal,[0 1]),
     62                                checkmessage('model not consistent: transient.isthermal should be a scalar (1 or 0)');
     63                        end
     64                        if ~ismember(md.transient.isgroundingline,[0 1]),
     65                                checkmessage('model not consistent: transient.isgroundingline should be a scalar (1 or 0)');
     66                        end
    5567
    5668                end % }}}
Note: See TracChangeset for help on using the changeset viewer.