Ignore:
Timestamp:
08/03/12 10:21:22 (13 years ago)
Author:
jschierm
Message:

Running python versions of setflowequation (and more).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • issm/trunk-jpl/src/m/utils/Geometry/FlagElements.py

    r12112 r12888  
    1 from numpy import *
     1import numpy
     2import os
     3#from basinzoom import *
     4#from ContourToMesh import *
     5from MatlabFuncs import *
     6
    27def FlagElements(md,region):
    3 #FLAGELEMENTS - flag the elements in an region
    4 #
    5 #   The region can be given with an exp file, a list of elements.
    6 #
    7 #   Usage:
    8 #      flag=FlagElements(md,region);
    9 #
    10 #   Example:
    11 #      flag=FlagElements(md,'all');
    12 #      flag=FlagElements(md,'');
    13 #      flag=FlagElements(md,'Domain.exp');
    14 #      flag=FlagElements(md,'~Domain.exp');
    15 #      flag=FlagElements(md,md.mask.elementongroundedice);
     8        """
     9        FLAGELEMENTS - flag the elements in an region
    1610
    17         if isinstance(region,basestring):
    18                 if not(region):
    19                         flag=zeros(md.mesh.numberofelements,'bool')
    20                         invert=0;
    21                 elif region=='all':
    22                         flag=ones(md.mesh.numberofelements,'bool')
    23                         invert=0;
     11            The region can be given with an exp file, a list of elements.
     12
     13            Usage:
     14               flag=FlagElements(md,region);
     15
     16            Example:
     17               flag=FlagElements(md,'all');
     18               flag=FlagElements(md,'');
     19               flag=FlagElements(md,'Domain.exp');
     20               flag=FlagElements(md,'~Domain.exp');
     21               flag=FlagElements(md,md.mask.elementongroundedice);
     22        """
     23
     24        if   isinstance(region,str):
     25                if   not region:
     26                        flag=numpy.zeros(md.mesh.numberofelements,'bool')
     27                        invert=0
     28                elif strcmpi(region,'all'):
     29                        flag=numpy.ones(md.mesh.numberofelements,'bool')
     30                        invert=0
    2431                else:
    2532                        #make sure that we actually don't want the elements outside the domain outline!
    26                         if region[0]=='~':
     33                        if strcmpi(region[0],'~'):
    2734                                region=region[1:]
    28                                 invert=1;
     35                                invert=1
    2936                        else:
    30                                 invert=0;
    31                        
     37                                invert=0
     38
    3239                        #does the region domain outline exist or do we have to look for xlim,ylim in basinzoom?
    33                         if not os.path.isfile(region):
    34                                 [xlim,ylim]=basinzoom('basin',region);
    35                                 flag_nodes=double(md.mesh.x<xlim(2) & md.mesh.x>xlim(1) &  md.mesh.y<ylim(2) & md.mesh.y>ylim(1));
    36                                 flag=prod(flag_nodes(md.mesh.elements),2);
     40                        if not os.path.exists(region):
     41                                if len(region)>3 and not strcmp(region[-4:],'.exp'):
     42                                        raise IOError("Error: File 'region' not found!" % region)
     43                                xlim,ylim=basinzoom('basin',region)
     44                                flag_nodes=numpy.logical_and(numpy.logical_and(md.mesh.x<xlim[1],md.mesh.x>xlim[0]),numpy.logical_and(md.mesh.y<ylim[1],md.mesh.y>ylim[0])).astype(float)
     45                                flag=numpy.prod(flag_nodes[md.mesh.elements],axis=1)
    3746                        else:
    3847                                #ok, flag elements
    39                                 flag=ContourToMesh(md.mesh.elements[:,0:3],md.mesh.x,md.mesh.y,region,'element',1);
    40                
     48                                flag=ContourToMesh(md.mesh.elements[:,0:3],md.mesh.x,md.mesh.y,region,'element',1)
     49
    4150                if invert:
    42                         flag=~flag;
    43        
    44         elif isinstance(region,nparray):
    45                 if len(region)!=md.mesh.numberofelements:
    46                         print FlagElements.__doc__
    47                         print 'Flaglist for region must be of same size as number of elements in model'
    48                         return []
    49                 flag=region;
     51                        flag=numpy.logical_not(flag)
     52
     53        elif isinstance(region,numpy.nparray) or isinstance(region,bool):
     54                if not numpy.size(region,0)==md.mesh.numberofelements:
     55                        raise TypeError("Flaglist for region must be of same size as number of elements in model.")
     56                flag=region
     57
    5058        else:
    51                 print 'Invalid region option'
    52                 return []
     59                raise TypeError("Invalid region option")
    5360
    54         return flag;
     61        return flag
     62
Note: See TracChangeset for help on using the changeset viewer.