source: issm/trunk/src/m/geometry/FlagElements.py@ 13975

Last change on this file since 13975 was 13975, checked in by Mathieu Morlighem, 12 years ago

merged trunk-jpl and trunk for revision 13974

File size: 2.0 KB
RevLine 
[12888]1import numpy
2import os
3#from basinzoom import *
[13975]4from ContourToMesh import *
[12888]5from MatlabFuncs import *
6
[12112]7def FlagElements(md,region):
[12888]8 """
9 FLAGELEMENTS - flag the elements in an region
[12112]10
[12944]11 The region can be given with an exp file, a list of elements.
[12888]12
[12944]13 Usage:
14 flag=FlagElements(md,region);
[12888]15
[12944]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);
[12888]22 """
23
[13098]24 if isinstance(region,(str,unicode)):
[12888]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
[12112]31 else:
32 #make sure that we actually don't want the elements outside the domain outline!
[12888]33 if strcmpi(region[0],'~'):
[12112]34 region=region[1:]
[12888]35 invert=1
[12112]36 else:
[12888]37 invert=0
38
[12112]39 #does the region domain outline exist or do we have to look for xlim,ylim in basinzoom?
[12888]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)
[13975]43 raise RuntimeError("FlagElements.py calling basinzoom.py is not complete.")
[12888]44 xlim,ylim=basinzoom('basin',region)
45 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)
46 flag=numpy.prod(flag_nodes[md.mesh.elements],axis=1)
[12112]47 else:
48 #ok, flag elements
[13975]49 [flag,dum]=ContourToMesh(md.mesh.elements[:,0:3].copy(),md.mesh.x.reshape(-1,1),md.mesh.y.reshape(-1,1),region,'element',1)
[12888]50
[12112]51 if invert:
[12888]52 flag=numpy.logical_not(flag)
53
[13975]54 elif isinstance(region,numpy.ndarray) or isinstance(region,bool):
[12888]55 if not numpy.size(region,0)==md.mesh.numberofelements:
56 raise TypeError("Flaglist for region must be of same size as number of elements in model.")
57 flag=region
58
[12112]59 else:
[12888]60 raise TypeError("Invalid region option")
[12112]61
[12888]62 return flag
63
Note: See TracBrowser for help on using the repository browser.