Changeset 23761


Ignore:
Timestamp:
02/27/19 15:33:54 (6 years ago)
Author:
kruegern
Message:

NEW: added universal field size to checkfield.py

File:
1 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/m/consistency/checkfield.py

    r23751 r23761  
    1717           Available options:
    1818              - NaN: 1 if check that there is no NaN
    19               - size: [lines cols], NaN for non checked dimensions
     19              - size: [lines cols], NaN for non checked dimensions, or 'universal' for any input type (nodal, element, time series, etc)
    2020              - >:  greater than provided value
    2121              - >=: greater or equal to provided value
     
    6363        if options.exist('empty'):
    6464                if not field:
    65                         md = md.checkmessage(options.getfieldvalue('message',\
     65                        md = md.checkmessage(options.getfieldvalue('message',
    6666                                "field '%s' is empty" % fieldname))
    6767
     
    6969        if options.exist('size'):
    7070                fieldsize=options.getfieldvalue('size')
    71                 if len(fieldsize) == 1:
    72                         if np.isnan(fieldsize[0]):
    73                                 pass
    74                         elif np.ndim(field)==1:
    75                                 if not np.size(field)==fieldsize[0]:
    76                                         md = md.checkmessage(options.getfieldvalue('message',"field {} size should be {}".format(fieldname,fieldsize[0])))
     71                if type(fieldsize) == str:
     72                        if m.strcmp(fieldsize,'universal'):
     73
     74                                #Check that vector size will not be confusing for ModelProcessorx
     75                                if (md.mesh.numberofvertices==md.mesh.numberofelements):
     76                                        raise RuntimeError('number of vertices is the same as number of elements')
     77                                elif (md.mesh.numberofvertices+1==md.mesh.numberofelements):
     78                                        raise RuntimeError('number of vertices +1 is the same as number of elements')
     79                                elif (md.mesh.numberofvertices==md.mesh.numberofelements+1):
     80                                        raise RuntimeError('number of vertices is the same as number of elements +1')
     81                               
     82                                #Uniform field
     83                                if (np.size(field,0)==1):
     84                                        if (np.shape(field,1)!=1):
     85                                                md = md.checkmessage(options.getfieldvalue('message',"field '{}' is not supported".format(fieldname)))
     86
     87                                #vertex oriented input, only one column allowed
     88                                elif (np.shape(field,0)==md.mesh.numberofvertices):
     89                                        if (np.shape(field,1)!=1):
     90                                                md = md.checkmessage(options.getfieldvalue('message',"field '{}' is not supported".format(fieldname)))
     91
     92                                #element oriented input, one or more column (patch) is ok
     93                                elif (np.shape(field,0)==md.mesh.numberofelements):
     94                                        pass
     95                                        #nothing to do here (either constant per element, or defined on nodes)
     96
     97                                #vertex time series
     98                                elif (np.shape(field,0)==md.mesh.numberofvertices+1):
     99                                        if (np.shape(field,1)<=1):
     100                                                md = md.checkmessage(options.getfieldvalue('message',"field '{}' is not supported".format(fieldname)))
     101
     102                                #element time series
     103                                elif (np.shape(field,0)==md.mesh.numberofelements+1):
     104                                        if (np.shape(field,1)<=1):
     105                                                md = md.checkmessage(options.getfieldvalue('message',"field '{}' is not supported".format(fieldname)))
     106
     107                                #else not supported
     108                                else:
     109                                        md = md.checkmessage(options.getfieldvalue('message',"field '{}' is not supported".format(fieldname)))
     110
    77111                        else:
    78                                 try:
    79                                         exec("md.{}=np.squeeze(field)".format(fieldname))
    80                                         print(('{} had been squeezed if it was a matrix with only one column'.format(fieldname)))
    81                                 except IndexError:
    82                                         md = md.checkmessage(options.getfieldvalue('message',"field {} should have {} dimension".format(fieldname,len(fieldsize))))
    83                 elif len(fieldsize) == 2:
    84                         if   np.isnan(fieldsize[0]):
    85                                 if not np.size(field,1)==fieldsize[1]:
    86                                         md = md.checkmessage(options.getfieldvalue('message',"field '%s' should have %d columns" % (fieldname,fieldsize[1])))
    87                         elif np.isnan(fieldsize[1]):
    88                                 if not np.size(field,0)==fieldsize[0]:
    89                                         md = md.checkmessage(options.getfieldvalue('message',"field '%s' should have %d lines" % (fieldname,fieldsize[0])))
    90                         elif fieldsize[1]==1:
    91                                 if (not np.size(field,0)==fieldsize[0]):
    92                                         md = md.checkmessage(options.getfieldvalue('message',"field '%s' size should be %d x %d" % (fieldname,fieldsize[0],fieldsize[1])))
    93                         else:
    94                                 if (not np.size(field,0)==fieldsize[0]) or (not np.size(field,1)==fieldsize[1]):
    95                                         md = md.checkmessage(options.getfieldvalue('message',"field '%s' size should be %d x %d" % (fieldname,fieldsize[0],fieldsize[1])))
     112                                raise RuntimeError("fieldsize '{}' not supported yet".format(fieldsize))
     113
     114                else:
     115                        if len(fieldsize) == 1:
     116                                if np.isnan(fieldsize[0]):
     117                                        pass
     118                                elif np.ndim(field)==1:
     119                                        if not np.size(field)==fieldsize[0]:
     120                                                md = md.checkmessage(options.getfieldvalue('message',"field {} size should be {}".format(fieldname,fieldsize[0])))
     121                                else:
     122                                        try:
     123                                                exec("md.{}=np.squeeze(field)".format(fieldname))
     124                                                print(("{} had been squeezed if it was a matrix with only one column".format(fieldname)))
     125                                        except IndexError:
     126                                                md = md.checkmessage(options.getfieldvalue('message',"field {} should have {} dimension".format(fieldname,len(fieldsize))))
     127                        elif len(fieldsize) == 2:
     128                                if   np.isnan(fieldsize[0]):
     129                                        if not np.size(field,1)==fieldsize[1]:
     130                                                md = md.checkmessage(options.getfieldvalue('message',"field '%s' should have %d columns" % (fieldname,fieldsize[1])))
     131                                elif np.isnan(fieldsize[1]):
     132                                        if not np.size(field,0)==fieldsize[0]:
     133                                                md = md.checkmessage(options.getfieldvalue('message',"field '%s' should have %d lines" % (fieldname,fieldsize[0])))
     134                                elif fieldsize[1]==1:
     135                                        if (not np.size(field,0)==fieldsize[0]):
     136                                                md = md.checkmessage(options.getfieldvalue('message',"field '%s' size should be %d x %d" % (fieldname,fieldsize[0],fieldsize[1])))
     137                                else:
     138                                        if (not np.size(field,0)==fieldsize[0]) or (not np.size(field,1)==fieldsize[1]):
     139                                                md = md.checkmessage(options.getfieldvalue('message',"field '%s' size should be %d x %d" % (fieldname,fieldsize[0],fieldsize[1])))
    96140
    97141        #Check numel
Note: See TracChangeset for help on using the changeset viewer.