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

Better and simpler consistency checks

File:
1 edited

Legend:

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

    r9854 r9860  
    8080                function checkconsistency(obj,md,solution,analyses) % {{{
    8181
    82                         fields={'x','y','z','elements','elementonbed','elementonsurface','vertexonbed','vertexonsurface','elementconnectivity'};
    83                         checknan(md,'mesh',fields);
    84 
    85                         fields={'elements','elementonbed','elementonsurface','vertexonbed','vertexonsurface','elementconnectivity'};
    86                         checkgreater(md,'mesh',fields,0);
    87 
    88                         fields={'dimension','elements','numberofelements','numberofvertices'};
    89                         checkgreaterstrict(md,'mesh',fields,0);
    90                        
    91                         fields={'vertexonbed','vertexonsurface','x','y','z'};
    92                         checksize(md,'mesh',fields,[md.mesh.numberofvertices 1]);
    93 
    94                         fields={'elementonbed','elementonsurface'};
    95                         checksize(md,'mesh',fields,[md.mesh.numberofelements 1]);
    96 
    97                         fields={'elements'};
     82                        checkfield(md,'mesh.x','NaN',1,'size',[md.mesh.numberofvertices 1]);
     83                        checkfield(md,'mesh.y','NaN',1,'size',[md.mesh.numberofvertices 1]);
     84                        checkfield(md,'mesh.z','NaN',1,'size',[md.mesh.numberofvertices 1]);
     85                        checkfield(md,'mesh.elements','NaN',1,'>',0,'values',1:md.mesh.numberofvertices);
    9886                        if(md.mesh.dimension==2),
    99                                 checksize(md,'mesh',fields,[md.mesh.numberofelements 3]);
     87                                checkfield(md,'mesh.elements','size',[md.mesh.numberofelements 3]);
    10088                        else
    101                                 checksize(md,'mesh',fields,[md.mesh.numberofelements 6]);
     89                                checkfield(md,'mesh.elements','size',[md.mesh.numberofelements 6]);
    10290                        end
    10391                        if any(~ismember(1:md.mesh.numberofvertices,sort(unique(md.mesh.elements(:)))));
    104                                 checkmessage('orphan nodes have been found. Check the mesh');
     92                                checkmessage('orphan nodes have been found. Check the mesh outline');
    10593                        end
    106 
    107 
     94                        checkfield(md,'mesh.dimension','values',[2 3]);
     95                        checkfield(md,'mesh.numberoflayers','>=',0);
     96                        checkfield(md,'mesh.numberofelements','>',0);
     97                        checkfield(md,'mesh.numberofvertices','>',0);
     98                        %no checks for numberofedges lat long and hemisphere
     99                        checkfield(md,'mesh.elementonbed','size',[md.mesh.numberofelements 1],'values',[0 1]);
     100                        checkfield(md,'mesh.elementonsurface','size',[md.mesh.numberofelements 1],'values',[0 1]);
     101                        checkfield(md,'mesh.vertexonbed','size',[md.mesh.numberofvertices 1],'values',[0 1]);
     102                        checkfield(md,'mesh.vertexonsurface','size',[md.mesh.numberofvertices 1],'values',[0 1]);
    108103                        if (md.mesh.dimension==2),
    109                                 if md.mesh.average_vertex_connectivity<9,
    110                                         checkmessage('model not consistent: connectivity should be at least 9 for 2d models');
    111                                 end
    112                         end
    113                         if md.mesh.dimension==3,
    114                                 if md.mesh.average_vertex_connectivity<24,
    115                                         checkmessage('model not consistent: connectivity should be at least 24 for 3d models');
    116                                 end
     104                                checkfield(md,'mesh.average_vertex_connectivity','>=',9,'message','''mesh.average_vertex_connectivity'' should be at least 9 in 2d');
     105                        else
     106                                checkfield(md,'mesh.average_vertex_connectivity','>=',24,'message','''mesh.average_vertex_connectivity'' should be at least 24 in 3d');
    117107                        end
    118108
     
    121111                                case PrognosticSolutionEnum,
    122112                                        if md.prognostic.stabilization==3,
    123                                                 if md.mesh.dimension~=2, checkmessage('Discontinuous Galerkin only supported for 2d meshes'); end
    124                                                 fields={'edges'};
    125                                                 checksize(md,'mesh',fields,[NaN 4]);
    126                                                 fields={'edges(:,1:3)'};
    127                                                 checknan(md,'mesh',fields);
    128                                                 checkgreaterstrict(md,'mesh',fields,0);
     113                                                checkfield(md,'mesh.dimension','values',2,'message','Discontinuous Galerkin only supported for 2d meshes');
     114                                                checkfield(md,'mesh.edges','size',[NaN 4]);
     115                                                checkfield(md,'mesh.edges(:,1:3)','>',0);
    129116                                        end
    130117                                case BalancethicknessSolutionEnum,
    131118                                        if md.balancethickness.stabilization==3,
    132                                                 if md.mesh.dimension~=2, checkmessage('Discontinuous Galerkin only supported for 2d meshes'); end
    133                                                 fields={'edges'};
    134                                                 checksize(md,'mesh',fields,[NaN 4]);
    135                                                 fields={'edges(:,1:3)'};
    136                                                 checknan(md,'mesh',fields);
    137                                                 checkgreaterstrict(md,'mesh',fields,0);
     119                                                checkfield(md,'mesh.dimension','values',2,'message','Discontinuous Galerkin only supported for 2d meshes');
     120                                                checkfield(md,'mesh.edges','size',[NaN 4]);
     121                                                checkfield(md,'mesh.edges(:,1:3)','>',0);
    138122                                        end
    139123                                case TransientSolutionEnum,
    140124                                        if md.transient.isprognostic & md.prognostic.stabilization==3,
    141                                                 if md.mesh.dimension~=2, checkmessage('Discontinuous Galerkin only supported for 2d meshes'); end
    142                                                 fields={'edges'};
    143                                                 checksize(md,'mesh',fields,[NaN 4]);
    144                                                 fields={'edges(:,1:3)'};
    145                                                 checknan(md,'mesh',fields);
    146                                                 checkgreaterstrict(md,'mesh',fields,0);
     125                                                checkfield(md,'mesh.dimension','values',2,'message','Discontinuous Galerkin only supported for 2d meshes');
     126                                                checkfield(md,'mesh.edges','size',[NaN 4]);
     127                                                checkfield(md,'mesh.edges(:,1:3)','>',0);
    147128                                        end
    148129                                case ThermalSolutionEnum,
    149                                         if md.mesh.dimension~=3, checkmessage('thermal solution only supported on 3d meshes'); end
     130                                        checkfield(md,'mesh.dimension','values',3,'message','thermal solution only supported on 3d meshes');
    150131                        end
    151132                end % }}}
Note: See TracChangeset for help on using the changeset viewer.