source: issm/trunk/src/m/extrusion/project2d.py@ 17806

Last change on this file since 17806 was 17806, checked in by Mathieu Morlighem, 11 years ago

merged trunk-jpl and trunk for revision 17804

File size: 1.9 KB
Line 
1import numpy as npy
2
3def project2d(md3d,value,layer):
4 '''
5 returns the value of a field for a given layer of the mesh
6
7 project 'value' vector taken at layer 'layer' from extruded 2d-3d
8 mesh onto 2d mesh used to do the extrusion. This routine is used to
9 compare values between a 2d-3d mesh at a certain layer, and the
10 equivalent value (if it exists), on the original 2d mesh.
11
12 Note: for consistency with usage in ISSM, layers are indexed starting
13 from one. This routine accounts for the fact that python indexes from
14 zero. In other words, when using this function consider the bottom
15 layer as layer=1.
16
17 Usage:
18 projection_value=project2d(md3d,value,layer)
19
20 Example:
21 vel2=project2d(md3d,md3d.vel,2)
22 '''
23
24 if md3d.mesh.domaintype().lower() != '3d':
25 raise StandardError("model passed to project2d function should be 3D")
26
27 if layer<1 or layer>md3d.mesh.numberoflayers:
28 raise ValueError("layer must be between 0 and %i" % md3d.mesh.numberoflayers)
29
30 # coerce to array in case float is passed
31 if type(value)!=npy.ndarray:
32 print 'coercing array'
33 value=npy.array(value)
34
35 vec2d=False
36 if value.ndim==2:
37 value=value.reshape(-1,)
38 vec2d=True
39
40 if value.size==1:
41 projection_value=value[(layer-1)*md3d.mesh.numberofelements2d:layer*md3d.mesh.numberofelements2d]
42 elif value.shape[0]==md3d.mesh.numberofvertices:
43 #print 'indices: ', (layer-1)*md3d.mesh.numberofvertices2d, layer*md3d.mesh.numberofvertices2d
44 projection_value=value[(layer-1)*md3d.mesh.numberofvertices2d:layer*md3d.mesh.numberofvertices2d]
45 elif value.shape[0]==md3d.mesh.numberofvertices+1:
46 projection_value=[value[(layer-1)*md3d.mesh.numberofvertices2d:layer*md3d.mesh.numberofvertices2d], value[-1]]
47 else:
48 projection_value=value[(layer-1)*md3d.mesh.numberofelements2d:layer*md3d.mesh.numberofelements2d]
49
50 if vec2d:
51 projection_value=projection_value.reshape(-1,1)
52
53 return projection_value
Note: See TracBrowser for help on using the repository browser.