source: issm/trunk-jpl/src/m/plot/plot_icefront.py@ 24213

Last change on this file since 24213 was 24213, checked in by bdef, 5 years ago

CHG: syntax cahnge to meet most of Pep8 requirement

File size: 2.5 KB
Line 
1import numpy as np
2from processmesh import processmesh
3from mpl_toolkits.mplot3d.art3d import Line3DCollection
4from mpl_toolkits.axes_grid1.inset_locator import inset_axes
5from mpl_toolkits.mplot3d import Axes3D
6
7
8def plot_icefront(md, options, fig, ax):
9 #PLOT_ICEFRONT - plot segment on neumann BC
10 #
11 # Usage:
12 # plot_icefront(md, options, width, i)
13 #
14 # See also: PLOTMODEL
15 #process mesh and data
16 x, y, z, elements, is2d, isplanet = processmesh(md, [], options)
17
18 if options.exist('layer'):
19 nodes_per_elt = np.shape(md.mesh.elements2d)[1]
20 else:
21 nodes_per_elt = np.shape(md.mesh.elements)[1]
22 #icefront check
23 icefront = np.where(np.abs(np.sum(md.mask.ice_levelset[elements], 1)) != nodes_per_elt)
24
25 #plot mesh
26 if is2d:
27 ax.triplot(x, y, elements)
28
29 #highlight elements on neumann
30 if len(icefront[0]) > 0:
31 colors = np.asarray([0.5 for element in elements[icefront]])
32 ax.tripcolor(x, y, elements[icefront], facecolors=colors, alpha=0.5, label='elements on ice front')
33 else:
34 ax = inset_axes(ax, width='100%', height='100%', loc=3, borderpad=0, axes_class=Axes3D)
35
36 AB = elements[:, 0:2]
37 BC = elements[:, 1:3]
38 CA = np.vstack((elements[:, 2], elements[:, 0])).T
39 DE = elements[:, 3:5]
40 EF = elements[:, 4:]
41 FD = np.vstack((elements[:, 5], elements[:, 3])).T
42 AD = np.vstack((elements[:, 0], elements[:, 3])).T
43 BE = np.vstack((elements[:, 1], elements[:, 4])).T
44 CF = np.vstack((elements[:, 2], elements[:, 5])).T
45
46 tmpa = np.vstack((AB, BC, CA, DE, EF, FD, AD, BE, CF))
47 #deleting segments that appear multiple times
48 tmpb = np.ascontiguousarray(tmpa).view(np.dtype((np.void, tmpa.dtype.itemsize * tmpa.shape[1])))
49 _, idx = np.unique(tmpb, return_index=True)
50 triel = tmpa[idx]
51
52 for t, triangle in enumerate(triel):
53 tri = list(zip(x[triangle], y[triangle], z[triangle]))
54 facecolor = [0, 0, 0]
55 if t in icefront:
56 facecolor = [0.5, 0.5, 0.5]
57 pl3 = Line3DCollection([tri], edgecolor='r', facecolor=facecolor)
58 ax.add_collection3d(pl3)
59
60 ax.set_xlim([min(x), max(x)])
61 ax.set_ylim([min(y), max(y)])
62 ax.set_zlim([min(z), max(z)])
63 #highlight elements on neumann
64
65 #apply options
66 options.addfielddefault('title', 'Neumann boundary conditions')
67 options.addfielddefault('colorbar', 'off')
Note: See TracBrowser for help on using the repository browser.