Changeset 9862
- Timestamp:
- 09/20/11 17:12:50 (13 years ago)
- Location:
- issm/trunk/src/m
- Files:
-
- 11 deleted
- 14 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk/src/m/classes/hydrology.m
r9854 r9862 54 54 if ~ismember(HydrologyAnalysisEnum,analyses), return; end 55 55 56 57 fields={'spcwatercolumn'}; 58 checkforcing(md,'hydrology',fields); 59 56 checkfield(md,'hydrology.spcwatercolumn','forcing',1); 57 checkfield(md,'hydrology.stabilization','>=',0); 60 58 end % }}} 61 59 function disp(obj) % {{{ -
issm/trunk/src/m/classes/initialization.m
r9855 r9862 44 44 if ismember(DiagnosticHorizAnalysisEnum,analyses) 45 45 if ~isnan(md.initialization.vx) & ~isnan(md.initialization.vy), 46 fields={'vx','vy'}; 47 checknan(md, 'initialization',fields); 48 checksize(md,'initialization',fields,[md.mesh.numberofvertices 1]); 46 checkfield(md,'initialization.vx','NaN',1,'size',[md.mesh.numberofvertices 1]); 47 checkfield(md,'initialization.vy','NaN',1,'size',[md.mesh.numberofvertices 1]); 49 48 end 50 49 end 51 50 if ismember(PrognosticAnalysisEnum,analyses), 52 fields={'vx','vy'}; 53 checknan(md, 'initialization',fields); 54 checksize(md,'initialization',fields,[md.mesh.numberofvertices 1]); 51 checkfield(md,'initialization.vx','NaN',1,'size',[md.mesh.numberofvertices 1]); 52 checkfield(md,'initialization.vy','NaN',1,'size',[md.mesh.numberofvertices 1]); 55 53 end 56 54 if ismember(HydrologyAnalysisEnum,analyses), 57 fields={'watercolumn'}; 58 checksize(md,'initialization',fields,[md.mesh.numberofvertices 1]); 55 checkfield(md,'initialization.watercolumn','NaN',1,'size',[md.mesh.numberofvertices 1]); 59 56 end 60 57 if ismember(BalancethicknessAnalysisEnum,analyses), 61 fields={'vx','vy'}; 62 checksize(md,'initialization',fields,[md.mesh.numberofvertices 1]); 63 checknan(md, 'initialization',fields); 58 checkfield(md,'initialization.vx','NaN',1,'size',[md.mesh.numberofvertices 1]); 59 checkfield(md,'initialization.vy','NaN',1,'size',[md.mesh.numberofvertices 1]); 64 60 %Triangle with zero velocity 65 61 if any(sum(abs(md.initialization.vx(md.mesh.elements)),2)==0 & sum(abs(md.initialization.vy(md.mesh.elements)),2)==0) … … 68 64 end 69 65 if ismember(ThermalAnalysisEnum,analyses), 70 fields={'vx','vy','vz','pressure'}; 71 checksize(md,'initialization',fields,[md.mesh.numberofvertices 1]); 72 checknan(md, 'initialization',fields); 66 checkfield(md,'initialization.vx','NaN',1,'size',[md.mesh.numberofvertices 1]); 67 checkfield(md,'initialization.vy','NaN',1,'size',[md.mesh.numberofvertices 1]); 68 checkfield(md,'initialization.vz','NaN',1,'size',[md.mesh.numberofvertices 1]); 69 checkfield(md,'initialization.pressure','NaN',1,'size',[md.mesh.numberofvertices 1]); 73 70 end 74 71 end % }}} -
issm/trunk/src/m/classes/inversion.m
r9853 r9862 8 8 iscontrol = modelfield('default',0,'marshall',true,'format','Boolean'); 9 9 control_parameters = modelfield('default',NaN,'marshall',true,'preprocess','marshallcontroltype','format','DoubleMat','mattype',3); 10 cost_functions_coefficients = modelfield('default',NaN,'marshall',true,'format','DoubleMat','mattype',1);11 10 nsteps = modelfield('default',0,'marshall',true,'format','Integer'); 12 11 maxiter_per_step = modelfield('default',NaN,'marshall',true,'format','DoubleMat','mattype',3); 13 12 cost_functions = modelfield('default',NaN,'marshall',true,'preprocess','marshallcmresponses','format','DoubleMat','mattype',3); 13 cost_functions_coefficients = modelfield('default',NaN,'marshall',true,'format','DoubleMat','mattype',1); 14 14 gradient_scaling = modelfield('default',NaN,'marshall',true,'format','DoubleMat','mattype',3); 15 15 cost_function_threshold = modelfield('default',0,'marshall',true,'format','Double'); … … 91 91 if ~obj.iscontrol, return; end 92 92 93 %Check NaN94 fields={'nsteps','maxiter_per_step'};95 checknan(md,'inversion',fields);96 97 %CONTROL TYPE98 93 num_controls=numel(md.inversion.control_parameters); 99 94 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 end103 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 end106 95 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]); 96 checkfield(md,'inversion.iscontrol','values',[0 1]); 97 checkfield(md,'inversion.control_parameters','cell',1,'values',{'BalancethicknessThickeningRate' 'FrictionCoefficient' 'MaterialsRheologyBbar' 'Vx' 'Vy'}); 98 checkfield(md,'inversion.nsteps','numel',1,'>=',1); 99 checkfield(md,'inversion.maxiter','numel',1,'>=',0); 100 checkfield(md,'inversion.maxiter_per_step','size',[md.inversion.nsteps 1]); 101 checkfield(md,'inversion.step_threshold','size',[md.inversion.nsteps 1]); 102 checkfield(md,'inversion.cost_functions','size',[md.inversion.nsteps num_costfunc],'values',[101:105 201 501:503]); 103 checkfield(md,'inversion.cost_functions_coefficients','size',[md.inversion.numberofvertices num_costfunc],'>=',0); 104 checkfield(md,'inversion.gradient_only','values',[0 1]); 105 checkfield(md,'inversion.gradient_scaling','size',[md.inversion.nsteps num_controls]); 106 checkfield(md,'inversion.min_parameters','size',[md.mesh.numberofvertices num_controls]); 107 checkfield(md,'inversion.max_parameters','size',[md.mesh.numberofvertices num_controls]); 116 108 117 %RESPONSES118 checkvalues(md,'inversion',{'cost_functions'},[101:105 201 501:503]);119 120 %WEIGHTS121 fields={'cost_functions_coefficients'};122 checksize(md,'inversion',fields,[md.mesh.numberofvertices num_costfunc]);123 checkgreater(md,'inversion',fields,0);124 125 %OBSERVED VELOCITIES126 109 if solution==BalancethicknessSolutionEnum 127 fields={'thickness_obs'}; 128 checksize(md,'inversion',fields,[md.mesh.numberofvertices 1]); 129 checknan(md,'inversion',fields); 110 checkfield(md,'inversion.thickness_obs','size',[md.mesh.numberofvertices 1],'NaN',1); 130 111 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 112 checkfield(md,'inversion.vx_obs','size',[md.mesh.numberofvertices 1],'NaN',1); 113 checkfield(md,'inversion.vy_obs','size',[md.mesh.numberofvertices 1],'NaN',1); 142 114 end 143 115 end % }}} -
issm/trunk/src/m/classes/mask.m
r9853 r9862 41 41 function checkconsistency(obj,md,solution,analyses) % {{{ 42 42 43 fields=properties('mask'); 44 checknan(md,'mask',fields); 45 checkvalues(md,'mask',fields,[0 1]); 46 47 fields={'elementonfloatingice','elementongroundedice','elementonwater'}; 48 checksize(md,'mask',fields,[md.mesh.numberofelements 1]); 49 50 fields={'vertexonfloatingice','vertexongroundedice','vertexonwater'}; 51 checksize(md,'mask',fields,[md.mesh.numberofvertices 1]); 43 checkfield(md,'mask.elementonfloatingice','size',[md.mesh.numberofelements 1],'values',[0 1]); 44 checkfield(md,'mask.elementongroundedice','size',[md.mesh.numberofelements 1],'values',[0 1]); 45 checkfield(md,'mask.elementonwater' ,'size',[md.mesh.numberofelements 1],'values',[0 1]); 46 checkfield(md,'mask.vertexonfloatingice','size',[md.mesh.numberofvertices 1],'values',[0 1]); 47 checkfield(md,'mask.vertexongroundedice','size',[md.mesh.numberofvertices 1],'values',[0 1]); 48 checkfield(md,'mask.vertexonwater' ,'size',[md.mesh.numberofvertices 1],'values',[0 1]); 52 49 end % }}} 53 50 function disp(obj) % {{{ -
issm/trunk/src/m/classes/materials.m
r9853 r9862 76 76 end % }}} 77 77 function checkconsistency(obj,md,solution,analyses) % {{{ 78 fields={'rho_ice','rho_water','rheology_B','rheology_n'}; 79 checknan(md,'materials',fields); 80 checkgreater(md,'materials',fields,0); 81 82 fields={'rheology_n'}; 83 checksize(md,'materials',fields,[md.mesh.numberofelements 1]); 84 85 fields={'rheology_B'}; 86 checksize(md,'materials',fields,[md.mesh.numberofvertices 1]); 87 88 if ~ismember({md.materials.rheology_law},{'None' 'Paterson' 'Arrhenius'}), 89 checkmessage(['model not consistent: model ' md.miscellaneous.name ' rheology_law field should be ''none'' ''paterson'' or ''arrhenius''']); 90 end 78 checkfield(md,'materials.rho_ice','>',0); 79 checkfield(md,'materials.rho_water','>',0); 80 checkfield(md,'materials.rheology_B','>',0,'size',[md.mesh.numberofvertices 1]); 81 checkfield(md,'materials.rheology_n','>',0,'size',[md.mesh.numberofelements 1]); 82 checkfield(md,'materials.rheology_law','values',{'None' 'Paterson' 'Arrhenius'}); 91 83 end % }}} 92 84 function disp(obj) % {{{ -
issm/trunk/src/m/classes/miscellaneous.m
r9853 r9862 28 28 function checkconsistency(obj,md,solution,analyses) % {{{ 29 29 30 fields={'name'}; 31 checknonempty(md,'miscellaneous',fields); 30 checkfield(md,'miscellaneous.name','empty',1); 32 31 33 32 end % }}} -
issm/trunk/src/m/classes/prognostic.m
r9854 r9862 51 51 if ~ismember(PrognosticAnalysisEnum,analyses), return; end 52 52 53 if ~ismember(md.prognostic.hydrostatic_adjustment,{'Absolute' 'Incremental'}), 54 checkmessage(['model not consistent: model ' md.miscellaneous.name ' prognostic.hydrostatic_adjustment field should be AbsoluteEnum or IncrementalEnum']); 55 end 56 57 fields={'spcthickness'}; 58 checkforcing(md,'prognostic',fields); 59 if ~ismember(obj.stabilization,[0 1 3]), 60 checkmessage('prognostic.stabilization should be a scalar (0 or 1 or 3)'); 61 end 53 checkfield(md,'prognostic.spcthickness','forcing',1); 54 checkfield(md,'prognostic.hydrostatic_adjustment','values',{'Absolute' 'Incremental'}); 55 checkfield(md,'prognostic.stabilization','values',[0 1 3]); 62 56 63 57 end % }}} -
issm/trunk/src/m/classes/rifts.m
r9853 r9862 47 47 checkmessage(['model should be processed for rifts (run meshprocessrifts)!']); 48 48 end 49 %Check that rifts are filled with proper material 50 checkvalues(md,'rifts',{'riftstruct.fill'},[WaterEnum() AirEnum() IceEnum() MelangeEnum()]); 49 checkfield(md,'rifts.riftstruct.fill','values',[WaterEnum() AirEnum() IceEnum() MelangeEnum()]); 51 50 else 52 51 if ~isnans(obj.riftstruct), -
issm/trunk/src/m/classes/settings.m
r9853 r9862 54 54 function checkconsistency(obj,md,solution,analyses) % {{{ 55 55 56 fields={'lowmem'}; 57 checknan(md,'settings',fields); 58 checkvalues(md,'settings',fields,[0 1]); 56 checkfield(md,'settings.io_gather','numel',1,'values',[0 1]); 57 checkfield(md,'settings.lowmem','numel',1,'values',[0 1]); 58 checkfield(md,'settings.results_on_vertices','numel',1,'values',[0 1]); 59 checkfield(md,'settings.output_frequency','numel',1,'>=',1); 60 checkfield(md,'settings.waitonlock','numel',1); 59 61 60 62 end % }}} -
issm/trunk/src/m/classes/surfaceforcings.m
r9854 r9862 38 38 39 39 if ismember(PrognosticAnalysisEnum,analyses), 40 fields={'mass_balance'}; 41 checkforcing(md,'surfaceforcings',fields); 40 checkfield(md,'surfaceforcings.mass_balance','forcing',1,'NaN',1); 42 41 end 43 42 if ismember(BalancethicknessAnalysisEnum,analyses), 44 fields={'mass_balance'}; 45 checksize(md,'surfaceforcings',fields,[md.mesh.numberofvertices 1]); 46 checknan(md, 'surfaceforcings',fields); 43 checkfield(md,'surfaceforcings.mass_balance','size',[md.mesh.numberofvertices 1],'NaN',1); 47 44 end 48 45 end % }}} -
issm/trunk/src/m/classes/thermal.m
r9854 r9862 55 55 if ~ismember(ThermalAnalysisEnum,analyses), return; end 56 56 57 if ~ismember(obj.stabilization,[0 1 2]), 58 checkmessage('thermal.stabilization should be a scalar (0 or 1 or 2)'); 59 end 60 61 fields={'spctemperature'}; 62 checkforcing(md,'thermal',fields); 63 57 checkfield(md,'thermal.stabilization','numel',1,'values',[0 1 2]); 58 checkfield(md,'thermal.spctemperature','forcing',1); 64 59 end % }}} 65 60 function disp(obj) % {{{ -
issm/trunk/src/m/classes/timestepping.m
r9853 r9862 47 47 end % }}} 48 48 function checkconsistency(obj,md,solution,analyses) % {{{ 49 if ~ismember(md.timestepping.time_adapt,[0 1]), 50 checkmessage(['model not consistent: model ' md.miscellaneous.name ' time_adapt field should be 0 or 1']); 51 end 52 if(md.timestepping.cfl_coefficient>1 | md.timestepping.cfl_coefficient<0), 53 checkmessage(['model not consistent: model ' md.miscellaneous.name ' cfl_coefficient field should between 0 and 1']); 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 49 50 checkfield(md,'timestepping.time_adapt','numel',1,'values',[0 1]); 51 checkfield(md,'timestepping.cfl_coefficient','numel',1,'>',0,'<=',1); 58 52 end % }}} 59 53 function disp(obj) % {{{ -
issm/trunk/src/m/classes/transient.m
r9854 r9862 49 49 if solution~=TransientSolutionEnum, return; end 50 50 51 %check flags 52 if ~ismember(md.transient.isdiagnostic,[0 1]), 53 checkmessage('model not consistent: transient.isdiagnostic should be a scalar (1 or 0)'); 54 end 55 if ~ismember(md.transient.isprognostic,[0 1]), 56 checkmessage('model not consistent: transient.isprognostic should be a scalar (1 or 0)'); 57 end 58 if ~ismember(md.transient.isthermal,[0 1]), 59 checkmessage('model not consistent: transient.isthermal should be a scalar (1 or 0)'); 60 end 61 if ~ismember(md.transient.isgroundingline,[0 1]), 62 checkmessage('model not consistent: transient.isgroundingline should be a scalar (1 or 0)'); 63 end 51 checkfield(md,'transient.isprognostic','numel',1,'values',[0 1]); 52 checkfield(md,'transient.isdiagnostic','numel',1,'values',[0 1]); 53 checkfield(md,'transient.isthermal','numel',1,'values',[0 1]); 54 checkfield(md,'transient.isgroundingline','numel',1,'values',[0 1]); 64 55 65 56 %check that groundingline is not activated in serial model -
issm/trunk/src/m/utils/consistency/checkfield.m
r9860 r9862 13 13 % - values: cell of strings or vector of acceptable values 14 14 % - numel: list of acceptable number of elements 15 % - cell: 1 if check that is cell 16 % - empty: 1 if check that non empty 15 17 % - message: overloaded error message 16 18 % … … 28 30 %get field from model 29 31 eval(['field=md.' fieldname ';']); 32 33 %check empty 34 if exist(options,'empty') 35 if isempty(field), 36 checkmessage(getfieldvalue(options,'message',... 37 ['field ''' fieldname ''' is empty'])); 38 end 39 end 30 40 31 41 %Check size … … 73 83 checkmessage(getfieldvalue(options,'message',... 74 84 ['NaN values found in field ''' fieldname ''''])); 85 end 86 end 87 88 %check NaN 89 if getfieldvalue(options,'cell',0); 90 if ~iscell(field), 91 checkmessage(getfieldvalue(options,'message',... 92 ['field ''' fieldname ''' should be a cell'])); 75 93 end 76 94 end
Note:
See TracChangeset
for help on using the changeset viewer.