Changeset 12888 for issm/trunk-jpl/src/m/utils/Geometry/FlagElements.py
- Timestamp:
- 08/03/12 10:21:22 (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk-jpl/src/m/utils/Geometry/FlagElements.py
r12112 r12888 1 from numpy import * 1 import numpy 2 import os 3 #from basinzoom import * 4 #from ContourToMesh import * 5 from MatlabFuncs import * 6 2 7 def 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 16 10 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 24 31 else: 25 32 #make sure that we actually don't want the elements outside the domain outline! 26 if region[0]=='~':33 if strcmpi(region[0],'~'): 27 34 region=region[1:] 28 invert=1 ;35 invert=1 29 36 else: 30 invert=0 ;31 37 invert=0 38 32 39 #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) 37 46 else: 38 47 #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 41 50 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 50 58 else: 51 print 'Invalid region option' 52 return [] 59 raise TypeError("Invalid region option") 53 60 54 return flag; 61 return flag 62
Note:
See TracChangeset
for help on using the changeset viewer.