Changeset 9739


Ignore:
Timestamp:
09/09/11 16:04:14 (14 years ago)
Author:
Mathieu Morlighem
Message:

Better consistency checks

Location:
issm/trunk/src/m
Files:
1 added
39 edited

Legend:

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

    r9725 r9739  
    3535                        end
    3636                end % }}}
     37                function checkconsistency(obj,md) % {{{
     38
     39                end % }}}
    3740        end
    3841end
  • issm/trunk/src/m/classes/balancethickness.m

    r9680 r9739  
    3939
    4040                end % }}}
     41                function checkconsistency(obj,md) % {{{
     42
     43                end % }}}
    4144        end
    4245end
  • issm/trunk/src/m/classes/basalforcings.m

    r9612 r9739  
    3535                        end
    3636                end % }}}
     37                function checkconsistency(obj,md) % {{{
     38
     39                end % }}}
    3740        end
    3841end
  • issm/trunk/src/m/classes/diagnostic.m

    r9679 r9739  
    7777
    7878                end % }}}
     79                function checkconsistency(obj,md) % {{{
     80                        fields={'icefront'};
     81                        if (md.mesh.dimension==2),
     82                                checksize(md,'diagnostic',fields,[NaN 4]);
     83                        elseif md.mesh.dimension==3,
     84                                checksize(md,'diagnostic',fields,[NaN 6]);
     85                        end
     86                        fields={'icefront(:,end)'};
     87                        checkvalues(md,'diagnostic',fields,[0 1 2]);
     88                end % }}}
    7989                function disp(obj) % {{{
    8090
  • issm/trunk/src/m/classes/flaim.m

    r9732 r9739  
    4343                function checkconsistency(obj,md) % {{{
    4444
    45                         if ~exist(obj.flaim.tracks,'file')
     45                        if md.private.solution~=FlaimSolutionEnum,
     46                                return;
     47                        end
     48
     49                        if ~exist(obj.tracks,'file')
    4650                                checkmessage(['flaim.tracks file ''' md.flaim.tracks ''' does not exist.']);
    4751                        end
    4852                        %   probably going to need some checks on flaim.flightreqs here
    49                         if (numel(obj.flaim.criterion)~=md.mesh.numberofvertices) & (numel(md.flaim.criterion)~=md.mesh.numberofelements),
     53                        if (numel(obj.criterion)~=md.mesh.numberofvertices) & (numel(obj.criterion)~=md.mesh.numberofelements),
    5054                                checkmessage(['flaim.criterion vector must have number of nodes (' ...
    5155                                        int2str(md.mesh.numberofvertices) ') or elements (' int2str(md.mesh.numberofelements)...
  • issm/trunk/src/m/classes/flowequation.m

    r9661 r9739  
    4141
    4242                end % }}}
     43                function checkconsistency(obj,md) % {{{
     44
     45                end % }}}
    4346        end
    4447end
  • issm/trunk/src/m/classes/friction.m

    r9610 r9739  
    3636
    3737                end % }}}
     38                function checkconsistency(obj,md) % {{{
     39
     40                end % }}}
    3841                function disp(obj) % {{{
    3942
  • issm/trunk/src/m/classes/geometry.m

    r9691 r9739  
    3838
    3939                end % }}}
     40                function checkconsistency(obj,md) % {{{
     41
     42                end % }}}
    4043        end
    4144end
  • issm/trunk/src/m/classes/groundingline.m

    r9629 r9739  
    4242
    4343                end % }}}
     44                function checkconsistency(obj,md) % {{{
     45
     46                end % }}}
    4447        end
    4548end
  • issm/trunk/src/m/classes/hydrology.m

    r9646 r9739  
    4949                        obj.stabilization=1;
    5050                end % }}}
     51                function checkconsistency(obj,md) % {{{
     52
     53                end % }}}
    5154        end
    5255end
  • issm/trunk/src/m/classes/initialization.m

    r9685 r9739  
    4141
    4242                end % }}}
     43                function checkconsistency(obj,md) % {{{
     44
     45                end % }}}
    4346        end
    4447end
  • issm/trunk/src/m/classes/inversion.m

    r9681 r9739  
    8686
    8787                end % }}}
     88                function checkconsistency(obj,md) % {{{
     89
     90                end % }}}
    8891                function disp(obj) % {{{
    8992                        fielddisplay(obj,'iscontrol','is inversion activated?');
  • issm/trunk/src/m/classes/mask.m

    r9675 r9739  
    3939
    4040                end % }}}
     41                function checkconsistency(obj,md) % {{{
     42
     43                end % }}}
    4144                function disp(obj) % {{{
    4245
  • issm/trunk/src/m/classes/materials.m

    r9636 r9739  
    7575                        obj.rheology_law='Paterson';
    7676                end % }}}
     77                function checkconsistency(obj,md) % {{{
     78
     79                end % }}}
    7780                function disp(obj) % {{{
    7881                        disp(sprintf('   Materials:\n'));
  • issm/trunk/src/m/classes/mesh.m

    r9735 r9739  
    8383                        checkgreaterstrict(md,'mesh',fields,0);
    8484
     85                        fields={'elements'};
     86                        if(md.mesh.dimension==2),
     87                                checksize(md,'mesh',fields,[md.mesh.numberofelements 3]);
     88                        else
     89                                checksize(md,'mesh',fields,[md.mesh.numberofelements 6]);
     90                        end
     91                        if any(~ismember(1:md.mesh.numberofvertices,sort(unique(md.mesh.elements(:)))));
     92                                checkmessage('orphan nodes have been found. Check the mesh');
     93                        end
     94
     95                        %Solution specific checks
     96                        switch(md.private.solution),
     97                                case PrognosticSolutionEnum,
     98                                        if md.prognostic.stabilization==3,
     99                                                if md.mesh.dimension~=2, checkmessage('Discontinuous Galerkin only supported for 2d meshes'); end
     100                                                fields={'edges'};
     101                                                checksize(md,'mesh',fields,[NaN 4]);
     102                                                fields={'edges(:,1:3)'};
     103                                                checknan(md,'mesh',fields);
     104                                                checkgreaterstrict(md,'mesh',fields,0);
     105                                        end
     106                                case BalancethicknessSolutionEnum,
     107                                        if md.balancethickness.stabilization==3,
     108                                                if md.mesh.dimension~=2, checkmessage('Discontinuous Galerkin only supported for 2d meshes'); end
     109                                                fields={'edges'};
     110                                                checksize(md,'mesh',fields,[NaN 4]);
     111                                                fields={'edges(:,1:3)'};
     112                                                checknan(md,'mesh',fields);
     113                                                checkgreaterstrict(md,'mesh',fields,0);
     114                                        end
     115                                case TransientSolutionEnum,
     116                                        if md.transient.isprognostic & md.prognostic.stabilization==3,
     117                                                if md.mesh.dimension~=2, checkmessage('Discontinuous Galerkin only supported for 2d meshes'); end
     118                                                fields={'edges'};
     119                                                checksize(md,'mesh',fields,[NaN 4]);
     120                                                fields={'edges(:,1:3)'};
     121                                                checknan(md,'mesh',fields);
     122                                                checkgreaterstrict(md,'mesh',fields,0);
     123                                        end
     124                        end
    85125                end % }}}
    86126                function disp(obj) % {{{
  • issm/trunk/src/m/classes/private.m

    r9614 r9739  
    3636
    3737                end % }}}
     38                function checkconsistency(obj,md) % {{{
     39
     40                end % }}}
    3841        end
    3942end
  • issm/trunk/src/m/classes/prognostic.m

    r9680 r9739  
    4646                        obj.hydrostatic_adjustment='Absolute';
    4747                end % }}}
     48                function checkconsistency(obj,md) % {{{
     49
     50                end % }}}
    4851                function disp(obj) % {{{
    4952                        disp(sprintf('   Prognostic solution parameters:'));
  • issm/trunk/src/m/classes/qmu.m

    r9668 r9739  
    4747                                obj.(fieldname)=obj.(fieldname).default;
    4848                        end
     49                end % }}}
     50                function checkconsistency(obj,md) % {{{
     51
    4952                end % }}}
    5053                function disp(obj) % {{{
  • issm/trunk/src/m/classes/rifts.m

    r9619 r9739  
    3535                        end
    3636                end % }}}
     37                function checkconsistency(obj,md) % {{{
     38
     39                end % }}}
    3740        end
    3841end
  • issm/trunk/src/m/classes/settings.m

    r9717 r9739  
    5252                        md.waitonlock=Inf;
    5353                end % }}}
     54                function checkconsistency(obj,md) % {{{
     55
     56                end % }}}
    5457        end
    5558end
  • issm/trunk/src/m/classes/solver.m

    r9564 r9739  
    4040                 end
    4141                 %}}}
     42                 function checkconsistency(obj,md) % {{{
     43
     44                 end % }}}
    4245                 function PetscFile(solver,filename) % {{{
    4346                         %PETSCFILE - build petsc file
  • issm/trunk/src/m/classes/steadystate.m

    r9677 r9739  
    4141                        obj.reltol=0.01;
    4242                end % }}}
     43                function checkconsistency(obj,md) % {{{
     44
     45                end % }}}
    4346        end
    4447end
  • issm/trunk/src/m/classes/surfaceforcings.m

    r9609 r9739  
    3535                        end
    3636                end % }}}
     37                function checkconsistency(obj,md) % {{{
     38
     39                end % }}}
    3740        end
    3841end
  • issm/trunk/src/m/classes/thermal.m

    r9680 r9739  
    5050                        obj.penalty_factor=3;
    5151                end % }}}
     52                function checkconsistency(obj,md) % {{{
     53
     54                end % }}}
    5255                function disp(obj) % {{{
    5356                        disp(sprintf('   Thermal solution parameters:'));
  • issm/trunk/src/m/classes/timestepping.m

    r9628 r9739  
    4646                        obj.cfl_coefficient=.5;
    4747                end % }}}
     48                function checkconsistency(obj,md) % {{{
     49
     50                end % }}}
    4851        end
    4952end
  • issm/trunk/src/m/classes/transient.m

    r9678 r9739  
    5252
    5353                end % }}}
     54                function checkconsistency(obj,md) % {{{
     55
     56                end % }}}
    5457        end
    5558end
  • issm/trunk/src/m/classes/verbose.m

    r9681 r9739  
    9999                end
    100100                %}}}
     101                function checkconsistency(obj,md) % {{{
     102
     103                end % }}}
    101104                function disp(verbose) % {{{1
    102105                       
  • issm/trunk/src/m/model/ismodelselfconsistent.m

    r9732 r9739  
    88modelconsistency(true);
    99
    10 %General consistency checks
    11 md.mesh.checkconsistency(md);
    12 
    13 %Solution dependent checks
    14 %FLAIM {{{1
    15 switch(md.private.solution),
    16         case FlaimSolutionEnum, md.flaim.checkconsistency(md);
     10%Go through al model field check that it is a class and call checkconsistency
     11fields=properties(md);
     12for i=1:length(fields),
     13        field=fields{i};
     14        if ismember(field,{'cluster' 'results' 'debug' 'radaroverlay'}),
     15                continue;
     16        end
     17        if ~isobject(md.(field))
     18                checkmessage(['field ''' char(field) ''' is not an object']);
     19        else
     20                md.(field).checkconsistency(md);
     21        end
    1722end
    18 %}}}
    1923
    2024%error message if mode is not consistent
  • issm/trunk/src/m/utils/consistency/checkforcing.m

    r9730 r9739  
    1111        if size(field,1)==md.mesh.numberofvertices,
    1212                if ~size(field,2)==1,
    13                         checkmessage(['model not consistent: field ''' obj '.' fields{i} ''' should have only one column as there are md.mesh.numberofvertices lines']);
     13                        checkmessage(['field ''' obj '.' fields{i} ''' should have only one column as there are md.mesh.numberofvertices lines']);
    1414                end
    1515        elseif size(field,1)==md.mesh.numberofvertices+1
    1616                if any(field(end,:)~=sort(field(end,:))),
    17                         checkmessage(['model not consistent: field ''' obj '.' fields{i} ''' columns should be chronological']);
     17                        checkmessage(['field ''' obj '.' fields{i} ''' columns should be chronological']);
    1818                end
    1919                if any(field(end,1:end-1)==field(end,2:end)),
    20                         checkmessage(['model not consistent: field ''' obj '.' fields{i} ''' columns must not contain duplicate timesteps']);
     20                        checkmessage(['field ''' obj '.' fields{i} ''' columns must not contain duplicate timesteps']);
    2121                end
    2222        else
    23                 checkmessage(['model not consistent: field ''' obj '.' fields{i} ''' should have md.mesh.numberofvertices or md.mesh.numberofvertices+1 lines']);
     23                checkmessage(['field ''' obj '.' fields{i} ''' should have md.mesh.numberofvertices or md.mesh.numberofvertices+1 lines']);
    2424        end
    2525end
  • issm/trunk/src/m/utils/consistency/checkgreater.m

    r9730 r9739  
    1010        eval(['field=md.' obj '.' fields{i} ';']);
    1111        if any(field<lowerbound),
    12                 checkmessage(['model not consistent: field ''' obj '.' fields{i} ''' should have values above ' num2str(lowerbound)]);
     12                checkmessage(['field ''' obj '.' fields{i} ''' should have values above ' num2str(lowerbound)]);
    1313        end
    1414end
  • issm/trunk/src/m/utils/consistency/checkgreaterstrict.m

    r9730 r9739  
    1010        eval(['field=md.' obj '.' fields{i} ';']);
    1111        if any(field<=lowerbound),
    12                 checkmessage(['model not consistent: field ''' obj '.' fields{i} ''' should have values stricly above ' num2str(lowerbound)]);
     12                checkmessage(['field ''' obj '.' fields{i} ''' should have values stricly above ' num2str(lowerbound)]);
    1313        end
    1414end
  • issm/trunk/src/m/utils/consistency/checklength.m

    r9730 r9739  
    1010        eval(['field=md.' obj '.' fields{i} ';']);
    1111        if length(field)~=fieldlength,
    12                 checkmessage(['model not consistent: field ''' obj '.' fields{i} ''' length should be ' num2str(fieldlength)]);
     12                checkmessage(['field ''' obj '.' fields{i} ''' length should be ' num2str(fieldlength)]);
    1313        end
    1414end
  • issm/trunk/src/m/utils/consistency/checkless.m

    r9730 r9739  
    1010        eval(['field=md.' obj '.' fields{i} ';']);
    1111        if any(field>upperbound),
    12                 checkmessage(['model not consistent: field ''' obj '.' fields{i} ''' should have values below ' num2str(upperbound)]);
     12                checkmessage(['field ''' obj '.' fields{i} ''' should have values below ' num2str(upperbound)]);
    1313        end
    1414end
  • issm/trunk/src/m/utils/consistency/checklessstrict.m

    r9730 r9739  
    1010        eval(['field=md.' obj '.' fields{i} ';']);
    1111        if any(field>=upperbound),
    12                 checkmessage(['model not consistent: field ''' obj '.' fields{i} ''' should have values stricly below ' num2str(upperbound)]);
     12                checkmessage(['field ''' obj '.' fields{i} ''' should have values stricly below ' num2str(upperbound)]);
    1313        end
    1414end
  • issm/trunk/src/m/utils/consistency/checkmessage.m

    r9730 r9739  
    77%      checkmessage(string);
    88
    9 disp(string);
     9disp(['model not consistent: ' string]);
    1010modelconsistency(false);
  • issm/trunk/src/m/utils/consistency/checknan.m

    r9730 r9739  
    1010        eval(['field=md.' obj '.' fields{i} ';']);
    1111        if any(isnan(field)),
    12                 checkmessage(['model not consistent: NaN values found in field ''' obj '.' fields{i}'''']);
     12                checkmessage(['NaN values found in field ''' obj '.' fields{i}'''']);
    1313        end
    1414end
  • issm/trunk/src/m/utils/consistency/checkreal.m

    r9730 r9739  
    1010        eval(['field=md.' obj '.' fields{i} ';']);
    1111        if any(~isreal(field))
    12                 checkmessage(['model not consistent: complex values found in field ''' obj '.' fields{i}'''']);
     12                checkmessage(['complex values found in field ''' obj '.' fields{i}'''']);
    1313        end
    1414end
  • issm/trunk/src/m/utils/consistency/checksize.m

    r9730 r9739  
    1111        if isnan(fieldsize(1)),
    1212                if (size(field,2)~=fieldsize(2)),
    13                         checkmessage(['model not consistent: field ''' obj '.' fields{i} ''' should have ' num2str(fieldsize(2)) ' columns']);
     13                        checkmessage(['field ''' obj '.' fields{i} ''' should have ' num2str(fieldsize(2)) ' columns']);
    1414                end
    1515        elseif isnan(fieldsize(2)),
    1616                if (size(field,1)~=fieldsize(1)),
    17                         checkmessage(['model not consistent: field ''' obj '.' fields{i} ''' should have ' num2str(fieldsize(1)) ' rows']);
     17                        checkmessage(['field ''' obj '.' fields{i} ''' should have ' num2str(fieldsize(1)) ' rows']);
    1818                end
    1919        else
    2020                if ((size(field)~=fieldsize(1)) |  (size(field,2)~=fieldsize(2)))
    21                         checkmessage(['model not consistent: field ''' obj '.' fields{i} ''' size should be ' num2str(fieldsize(1)) ' x ' num2str(fieldsize(2))]);
     21                        checkmessage(['field ''' obj '.' fields{i} ''' size should be ' num2str(fieldsize(1)) ' x ' num2str(fieldsize(2))]);
    2222                end
    2323        end
  • issm/trunk/src/m/utils/consistency/checkvalues.m

    r9730 r9739  
    1010        eval(['field=md.' obj '.' fields{i} ';']);
    1111        if any(~ismember(field,values)),
    12                 checkmessage(['model not consistent: field ''' obj '.' fields{i} ''' should have values in ' num2str(values)]);
     12                checkmessage(['field ''' obj '.' fields{i} ''' should have values in ' num2str(values)]);
    1313        end
    1414end
Note: See TracChangeset for help on using the changeset viewer.