Changeset 9854


Ignore:
Timestamp:
09/20/11 13:30:26 (13 years ago)
Author:
Mathieu Morlighem
Message:

Added all checks in objects

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

Legend:

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

    r9853 r9854  
    4040                end % }}}
    4141                function checkconsistency(obj,md,solution,analyses) % {{{
     42                        %Early return
     43                        if solution~=BalancethicknessSolutionEnum, return; end
     44
    4245                        if ~ismember(md.balancethickness.stabilization,[0 1 3]),
    4346                                checkmessage('model not consistent: balancethickness.stabilization should be a scalar (0 or 1 or 3)');
    4447                        end
     48
    4549                end % }}}
    4650                function disp(obj) % {{{
  • issm/trunk/src/m/classes/basalforcings.m

    r9853 r9854  
    3737                function checkconsistency(obj,md,solution,analyses) % {{{
    3838
    39                         fields={'melting_rate','geothermalflux'};
     39                        fields={'geothermalflux'};
    4040                        %checksize(md,'basalforcings',fields,[md.mesh.numberofvertices 1]);
     41                        if ismember(PrognosticAnalysisEnum,analyses),
     42                                fields={'melting_rate'};
     43                                checkforcing(md,'basalforcings',fields);
     44                        end
     45                        if ismember(BalancethicknessAnalysisEnum,analyses),
     46                                fields={'melting_rate'};
     47                                checksize(md,'basalforcings',fields,[md.mesh.numberofvertices 1]);
     48                                checknan(md, 'basalforcings',fields);
     49                        end
     50                        if ismember(ThermalAnalysisEnum,analyses),
     51                                fields={'geothermalflux'};
     52                                checksize(md,'basalforcings',fields,[md.mesh.numberofvertices 1]);
     53                                checknan(md, 'basalforcings',fields);
     54                        end
    4155                end % }}}
    4256                function disp(obj) % {{{
  • issm/trunk/src/m/classes/diagnostic.m

    r9853 r9854  
    103103                        end
    104104
     105                        if ismember(DiagnosticHorizAnalysisEnum,analyses),
     106                                %singular solution
     107                                if ~any((~isnan(md.diagnostic.spcvx)+~isnan(md.diagnostic.spcvy))==2),
     108                                        checkmessage(['model ' md.miscellaneous.name ' is not well posed (singular). You need at least one node with fixed velocity!'])
     109                                end
     110                                %ROTATED SPC
     111                                %CHECK THAT EACH LINES CONTAINS ONLY NAN VALUES OR NO NAN VALUES
     112                                if any(sum(isnan(md.diagnostic.referential),2)~=0 & sum(isnan(md.diagnostic.referential),2)~=6),
     113                                        checkmessage(['model ' md.miscellaneous.name ' has problem with rotated spc. Each line of diagnostic.referential should contain either only NaN values or no NaN values']);
     114                                end
     115                                %CHECK THAT THE TWO VECTORS PROVIDED ARE ORTHOGONAL
     116                                if any(sum(isnan(md.diagnostic.referential),2)==0),
     117                                        pos=find(sum(isnan(md.diagnostic.referential),2)==0);
     118                                        if any(dot(md.diagnostic.referential(pos,1:3),md.diagnostic.referential(pos,4:6))),
     119                                                dot(md.diagnostic.referential(pos,1:3),md.diagnostic.referential(pos,4:6))
     120                                                checkmessage(['model ' md.miscellaneous.name ' has problem with rotated spc. Vectors in diagnostic.referential (colums 1 to 3 and 4 to 6) must be orthogonal']);
     121                                        end
     122
     123                                end
     124                                %CHECK THAT ROTATION IS IN THE (X,Y) PLANE FOR 2D MODELS
     125                                if md.mesh.dimension==2,
     126                                        pos=find(sum(isnan(md.diagnostic.referential),2)==0  & md.flowequation.vertex_equation==2);
     127                                        if any(md.diagnostic.referential(pos,3:5)~=0);
     128                                                checkmessage(['model ' md.miscellaneous.name ' has problem with rotated spc. The rotation should be in the (x,y) plane for 2D diagnostic models (nodeonmacayeal)']);
     129                                        end
     130                                end
     131
     132                        end
     133
    105134                end % }}}
    106135                function disp(obj) % {{{
  • issm/trunk/src/m/classes/flowequation.m

    r9853 r9854  
    4343                function checkconsistency(obj,md,solution,analyses) % {{{
    4444
     45                        if ismember(DiagnosticHorizAnalysisEnum,analyses),
     46                                %Check the size of flowequation.element_equation
     47                                fields={'element_equation'};
     48                                checksize(md,'flowequation',fields,[md.mesh.numberofelements 1]);
     49                                %Check the values of flowequation.element_equation
     50                                checkvalues(md,'flowequation',fields,[0:7]);
     51                                if (md.mesh.dimension==2),
     52                                        checkvalues(md,'flowequation',fields,[1 2]);
     53                                end
     54                                if (md.flowequation.ismacayealpattyn==0 && md.flowequation.ishutter==0 && md.flowequation.isstokes==0),
     55                                        checkmessage(['no elements type set for this model. at least one of ismacayealpattyn, ishutter and isstokes need to be =1']);
     56                                end
     57
     58                                %VERTICESTYPE
     59                                %Check the size of verticess_type
     60                                fields={'vertex_equation'};
     61                                checksize(md,'flowequation',fields,[md.mesh.numberofvertices 1]);
     62                                %Check the values of flowequation.vertex_equation
     63                                checkvalues(md,'flowequation',fields,[0:7]);
     64                                if (md.mesh.dimension==2),
     65                                        checkvalues(md,'flowequation',fields,[1 2]);
     66                                end
     67                                if (md.flowequation.ismacayealpattyn==0 && md.flowequation.ishutter==0 && md.flowequation.isstokes==0),
     68                                        checkmessage(['no elements type set for this model. at least one of ismacayealpattyn, ishutter and isstokes need to be =1']);
     69                                end
     70                        end
     71                        if ismember(DiagnosticHutterAnalysisEnum,analyses),
     72                                if any(md.flowequation.element_equation==1 & md.mask.elementonfloatingice),
     73                                        disp(sprintf('\n !!! Warning: Hutter''s model is not consistent on ice shelves !!!\n'));
     74                                end
     75                        end
     76
    4577                end % }}}
    4678                function disp(obj) % {{{
  • issm/trunk/src/m/classes/geometry.m

    r9853 r9854  
    4949                                checkmessage(['equality thickness=surface-bed violated']);
    5050                        end
     51
     52                        if ismember(PrognosticAnalysisEnum,analyses),
     53                                fields={'thickness'};
     54                                checkgreaterstrict(md,'geometry',fields,0);
     55                        end
    5156                end % }}}
    5257                function disp(obj) % {{{
  • issm/trunk/src/m/classes/hydrology.m

    r9853 r9854  
    5151                function checkconsistency(obj,md,solution,analyses) % {{{
    5252
     53                        %Early return
     54                        if ~ismember(HydrologyAnalysisEnum,analyses), return; end
     55
     56
     57                        fields={'spcwatercolumn'};
     58                        checkforcing(md,'hydrology',fields);
     59
    5360                end % }}}
    5461                function disp(obj) % {{{
  • issm/trunk/src/m/classes/initialization.m

    r9853 r9854  
    4242                end % }}}
    4343                function checkconsistency(obj,md,solution,analyses) % {{{
    44 
     44                        if ismember(DiagnosticHorizAnalysisEnum,analyses)
     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]);
     49                                end
     50                        end
     51                        if ismember(PrognosticAnalysisEnum,analyses),
     52                                fields={'vx','vy'};
     53                                checknan(md, 'initialization',fields);
     54                                checksize(md,'initialization',fields,[md.mesh.numberofvertices 1]);
     55                        end
     56                        if ismember(HydrologyAnalysisEnum,analyses),
     57                                fields={'watercolumn'};
     58                                checksize(md,'initialization',fields,[md.mesh.numberofvertices 1]);
     59                        end
     60                        if ismember(BalancethicknessAnalysisEnum,analyses),
     61                                fields={'vx','vy'};
     62                                checksize(md,'initialization',fields,[md.mesh.numberofvertices 1]);
     63                                checknan(md, 'initialization',fields);
     64                                %Triangle with zero velocity
     65                                if any(sum(abs(md.initialization.vx(md.elements)),2)==0 & sum(abs(md.initialization.vy(md.elements)),2)==0)
     66                                        checkmessage('model not consistent: at least one triangle has all its vertices with a zero velocity');
     67                                end
     68                        end
     69                        if ismember(ThermalAnalysisEnum,analyses),
     70                                fields={'vx','vy','vz','pressure'};
     71                                checksize(md,'initialization',fields,[md.mesh.numberofvertices 1]);
     72                                checknan(md, 'initialization',fields);
     73                        end
    4574                end % }}}
    4675                function disp(obj) % {{{
  • issm/trunk/src/m/classes/mesh.m

    r9853 r9854  
    146146                                                checkgreaterstrict(md,'mesh',fields,0);
    147147                                        end
     148                                case ThermalSolutionEnum,
     149                                        if md.mesh.dimension~=3, checkmessage('thermal solution only supported on 3d meshes'); end
    148150                        end
    149151                end % }}}
  • issm/trunk/src/m/classes/prognostic.m

    r9853 r9854  
    4747                end % }}}
    4848                function checkconsistency(obj,md,solution,analyses) % {{{
     49
     50                        %Early return,
     51                        if ~ismember(PrognosticAnalysisEnum,analyses), return; end
     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);
    4959                        if ~ismember(obj.stabilization,[0 1 3]),
    5060                                checkmessage('prognostic.stabilization should be a scalar (0 or 1 or 3)');
    5161                        end
    5262
    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
    5663                end % }}}
    5764                function disp(obj) % {{{
  • issm/trunk/src/m/classes/surfaceforcings.m

    r9853 r9854  
    3737                function checkconsistency(obj,md,solution,analyses) % {{{
    3838
     39                        if ismember(PrognosticAnalysisEnum,analyses),
     40                                fields={'mass_balance'};
     41                                checkforcing(md,'surfaceforcings',fields);
     42                        end
     43                        if ismember(BalancethicknessAnalysisEnum,analyses),
     44                                fields={'mass_balance'};
     45                                checksize(md,'surfaceforcings',fields,[md.mesh.numberofvertices 1]);
     46                                checknan(md, 'surfaceforcings',fields);
     47                        end
    3948                end % }}}
    4049                function disp(obj) % {{{
  • issm/trunk/src/m/classes/thermal.m

    r9853 r9854  
    5151                end % }}}
    5252                function checkconsistency(obj,md,solution,analyses) % {{{
     53
     54                        %Early return
     55                        if ~ismember(ThermalAnalysisEnum,analyses), return; end
     56
    5357                        if ~ismember(obj.stabilization,[0 1 2]),
    5458                                checkmessage('thermal.stabilization should be a scalar (0 or 1 or 2)');
    5559                        end
     60
     61                        fields={'spctemperature'};
     62                        checkforcing(md,'thermal',fields);
    5663
    5764                end % }}}
  • issm/trunk/src/m/classes/transient.m

    r9853 r9854  
    4545                end % }}}
    4646                function checkconsistency(obj,md,solution,analyses) % {{{
     47
     48                        %Early return
     49                        if solution~=TransientSolutionEnum, return; end
     50
     51                        %check flags
    4752                        if ~ismember(md.transient.isdiagnostic,[0 1]),
    4853                                checkmessage('model not consistent: transient.isdiagnostic should be a scalar (1 or 0)');
     
    5661                        if ~ismember(md.transient.isgroundingline,[0 1]),
    5762                                checkmessage('model not consistent: transient.isgroundingline should be a scalar (1 or 0)');
     63                        end
     64
     65                        %check that groundingline is not activated in serial model
     66                        if md.transient.isgroundingline & strcmp(md.cluster.name,'none'),
     67                                checkmessage(['model not consistent: ' md.private.solution ' is only implemented in parallel mode !']);
     68                        end
     69
     70                        %Check that grounding line migration is in 2d
     71                        if md.transient.isgroundingline & md.mesh.dimension~=2
     72                                checkmessage(['model not consistent: for a ' md.private.solution ' computation, the grounding line module is only implemented in 2d !']);
    5873                        end
    5974
Note: See TracChangeset for help on using the changeset viewer.