From dde447423493cfe479ef2e06f1f029a1c284bf5a Mon Sep 17 00:00:00 2001 From: Rowan Cockett Date: Mon, 30 Sep 2013 14:53:22 -0700 Subject: [PATCH] updated plots and documentation --- SimPEG/LogicallyOrthogonalMesh.py | 4 + SimPEG/TensorMesh.py | 5 +- SimPEG/TensorView.py | 82 +++++++++++-------- .../mesh/plot_LogicallyOrthogonalMesh.py | 6 ++ docs/examples/mesh/plot_TensorMesh.py | 21 +++++ docs/examples/mesh/plot_grid_2D.py | 2 +- docs/examples/mesh/plot_grid_3D.py | 2 +- 7 files changed, 83 insertions(+), 39 deletions(-) create mode 100644 docs/examples/mesh/plot_LogicallyOrthogonalMesh.py create mode 100644 docs/examples/mesh/plot_TensorMesh.py diff --git a/SimPEG/LogicallyOrthogonalMesh.py b/SimPEG/LogicallyOrthogonalMesh.py index cfa8b7ed..49e2ee07 100644 --- a/SimPEG/LogicallyOrthogonalMesh.py +++ b/SimPEG/LogicallyOrthogonalMesh.py @@ -16,6 +16,10 @@ class LogicallyOrthogonalMesh(BaseMesh, DiffOperators, InnerProducts, LomView): """ LogicallyOrthogonalMesh is a mesh class that deals with logically orthogonal meshes. + Example of a logically orthogonal mesh: + + .. plot:: examples/mesh/plot_LogicallyOrthogonalMesh.py + """ _meshType = 'LOM' diff --git a/SimPEG/TensorMesh.py b/SimPEG/TensorMesh.py index c59f4acd..2015838c 100644 --- a/SimPEG/TensorMesh.py +++ b/SimPEG/TensorMesh.py @@ -21,8 +21,9 @@ class TensorMesh(BaseMesh, TensorView, DiffOperators, InnerProducts): mesh = TensorMesh([hx, hy, hz]) - .. math:: - x^2 = 5 + Example of a padded tensor mesh: + + .. plot:: examples/mesh/plot_TensorMesh.py """ _meshType = 'TENSOR' diff --git a/SimPEG/TensorView.py b/SimPEG/TensorView.py index 168986a0..e0c570cd 100644 --- a/SimPEG/TensorView.py +++ b/SimPEG/TensorView.py @@ -177,9 +177,16 @@ class TensorView(object): if showIt: plt.show() return ph - def plotGrid(self, showIt=False): + def plotGrid(self, nodes=False, faces=False, centers=False, edges=False, lines=True, showIt=False): """Plot the nodal, cell-centered and staggered grids for 1,2 and 3 dimensions. + :param bool nodes: plot nodes + :param bool faces: plot faces + :param bool centers: plot centers + :param bool edges: plot edges + :param bool lines: plot lines connecting nodes + :param bool showIt: call plt.show() + .. plot:: examples/mesh/plot_grid_2D.py :include-source: @@ -210,20 +217,22 @@ class TensorView(object): xs2 = self.gridFy ax.hold(True) - ax.plot(xn[:, 0], xn[:, 1], 'bs') - ax.plot(xc[:, 0], xc[:, 1], 'ro') - ax.plot(xs1[:, 0], xs1[:, 1], 'g>') - ax.plot(xs2[:, 0], xs2[:, 1], 'g^') + if nodes: ax.plot(xn[:, 0], xn[:, 1], 'bs') + if centers: ax.plot(xc[:, 0], xc[:, 1], 'ro') + if faces: + ax.plot(xs1[:, 0], xs1[:, 1], 'g>') + ax.plot(xs2[:, 0], xs2[:, 1], 'g^') # Plot the grid lines - NN = self.r(self.gridN, 'N', 'N', 'M') - X1 = np.c_[mkvc(NN[0][0, :]), mkvc(NN[0][self.nCx, :]), mkvc(NN[0][0, :])*np.nan].flatten() - Y1 = np.c_[mkvc(NN[1][0, :]), mkvc(NN[1][self.nCx, :]), mkvc(NN[1][0, :])*np.nan].flatten() - X2 = np.c_[mkvc(NN[0][:, 0]), mkvc(NN[0][:, self.nCy]), mkvc(NN[0][:, 0])*np.nan].flatten() - Y2 = np.c_[mkvc(NN[1][:, 0]), mkvc(NN[1][:, self.nCy]), mkvc(NN[1][:, 0])*np.nan].flatten() - X = np.r_[X1, X2] - Y = np.r_[Y1, Y2] - plt.plot(X, Y) + if lines: + NN = self.r(self.gridN, 'N', 'N', 'M') + X1 = np.c_[mkvc(NN[0][0, :]), mkvc(NN[0][self.nCx, :]), mkvc(NN[0][0, :])*np.nan].flatten() + Y1 = np.c_[mkvc(NN[1][0, :]), mkvc(NN[1][self.nCx, :]), mkvc(NN[1][0, :])*np.nan].flatten() + X2 = np.c_[mkvc(NN[0][:, 0]), mkvc(NN[0][:, self.nCy]), mkvc(NN[0][:, 0])*np.nan].flatten() + Y2 = np.c_[mkvc(NN[1][:, 0]), mkvc(NN[1][:, self.nCy]), mkvc(NN[1][:, 0])*np.nan].flatten() + X = np.r_[X1, X2] + Y = np.r_[Y1, Y2] + plt.plot(X, Y) ax.grid(True) ax.hold(False) @@ -245,30 +254,33 @@ class TensorView(object): xes3 = self.gridEz ax.hold(True) - ax.plot(xn[:, 0], xn[:, 1], 'bs', zs=xn[:, 2]) - ax.plot(xc[:, 0], xc[:, 1], 'ro', zs=xc[:, 2]) - ax.plot(xfs1[:, 0], xfs1[:, 1], 'g>', zs=xfs1[:, 2]) - ax.plot(xfs2[:, 0], xfs2[:, 1], 'g<', zs=xfs2[:, 2]) - ax.plot(xfs3[:, 0], xfs3[:, 1], 'g^', zs=xfs3[:, 2]) - ax.plot(xes1[:, 0], xes1[:, 1], 'k>', zs=xes1[:, 2]) - ax.plot(xes2[:, 0], xes2[:, 1], 'k<', zs=xes2[:, 2]) - ax.plot(xes3[:, 0], xes3[:, 1], 'k^', zs=xes3[:, 2]) + if nodes: ax.plot(xn[:, 0], xn[:, 1], 'bs', zs=xn[:, 2]) + if centers: ax.plot(xc[:, 0], xc[:, 1], 'ro', zs=xc[:, 2]) + if faces: + ax.plot(xfs1[:, 0], xfs1[:, 1], 'g>', zs=xfs1[:, 2]) + ax.plot(xfs2[:, 0], xfs2[:, 1], 'g<', zs=xfs2[:, 2]) + ax.plot(xfs3[:, 0], xfs3[:, 1], 'g^', zs=xfs3[:, 2]) + if edges: + ax.plot(xes1[:, 0], xes1[:, 1], 'k>', zs=xes1[:, 2]) + ax.plot(xes2[:, 0], xes2[:, 1], 'k<', zs=xes2[:, 2]) + ax.plot(xes3[:, 0], xes3[:, 1], 'k^', zs=xes3[:, 2]) # Plot the grid lines - NN = self.r(self.gridN, 'N', 'N', 'M') - X1 = np.c_[mkvc(NN[0][0, :, :]), mkvc(NN[0][self.nCx, :, :]), mkvc(NN[0][0, :, :])*np.nan].flatten() - Y1 = np.c_[mkvc(NN[1][0, :, :]), mkvc(NN[1][self.nCx, :, :]), mkvc(NN[1][0, :, :])*np.nan].flatten() - Z1 = np.c_[mkvc(NN[2][0, :, :]), mkvc(NN[2][self.nCx, :, :]), mkvc(NN[2][0, :, :])*np.nan].flatten() - X2 = np.c_[mkvc(NN[0][:, 0, :]), mkvc(NN[0][:, self.nCy, :]), mkvc(NN[0][:, 0, :])*np.nan].flatten() - Y2 = np.c_[mkvc(NN[1][:, 0, :]), mkvc(NN[1][:, self.nCy, :]), mkvc(NN[1][:, 0, :])*np.nan].flatten() - Z2 = np.c_[mkvc(NN[2][:, 0, :]), mkvc(NN[2][:, self.nCy, :]), mkvc(NN[2][:, 0, :])*np.nan].flatten() - X3 = np.c_[mkvc(NN[0][:, :, 0]), mkvc(NN[0][:, :, self.nCz]), mkvc(NN[0][:, :, 0])*np.nan].flatten() - Y3 = np.c_[mkvc(NN[1][:, :, 0]), mkvc(NN[1][:, :, self.nCz]), mkvc(NN[1][:, :, 0])*np.nan].flatten() - Z3 = np.c_[mkvc(NN[2][:, :, 0]), mkvc(NN[2][:, :, self.nCz]), mkvc(NN[2][:, :, 0])*np.nan].flatten() - X = np.r_[X1, X2, X3] - Y = np.r_[Y1, Y2, Y3] - Z = np.r_[Z1, Z2, Z3] - plt.plot(X, Y, 'b-', zs=Z) + if lines: + NN = self.r(self.gridN, 'N', 'N', 'M') + X1 = np.c_[mkvc(NN[0][0, :, :]), mkvc(NN[0][self.nCx, :, :]), mkvc(NN[0][0, :, :])*np.nan].flatten() + Y1 = np.c_[mkvc(NN[1][0, :, :]), mkvc(NN[1][self.nCx, :, :]), mkvc(NN[1][0, :, :])*np.nan].flatten() + Z1 = np.c_[mkvc(NN[2][0, :, :]), mkvc(NN[2][self.nCx, :, :]), mkvc(NN[2][0, :, :])*np.nan].flatten() + X2 = np.c_[mkvc(NN[0][:, 0, :]), mkvc(NN[0][:, self.nCy, :]), mkvc(NN[0][:, 0, :])*np.nan].flatten() + Y2 = np.c_[mkvc(NN[1][:, 0, :]), mkvc(NN[1][:, self.nCy, :]), mkvc(NN[1][:, 0, :])*np.nan].flatten() + Z2 = np.c_[mkvc(NN[2][:, 0, :]), mkvc(NN[2][:, self.nCy, :]), mkvc(NN[2][:, 0, :])*np.nan].flatten() + X3 = np.c_[mkvc(NN[0][:, :, 0]), mkvc(NN[0][:, :, self.nCz]), mkvc(NN[0][:, :, 0])*np.nan].flatten() + Y3 = np.c_[mkvc(NN[1][:, :, 0]), mkvc(NN[1][:, :, self.nCz]), mkvc(NN[1][:, :, 0])*np.nan].flatten() + Z3 = np.c_[mkvc(NN[2][:, :, 0]), mkvc(NN[2][:, :, self.nCz]), mkvc(NN[2][:, :, 0])*np.nan].flatten() + X = np.r_[X1, X2, X3] + Y = np.r_[Y1, Y2, Y3] + Z = np.r_[Z1, Z2, Z3] + plt.plot(X, Y, 'b-', zs=Z) ax.grid(True) ax.hold(False) diff --git a/docs/examples/mesh/plot_LogicallyOrthogonalMesh.py b/docs/examples/mesh/plot_LogicallyOrthogonalMesh.py new file mode 100644 index 00000000..55350946 --- /dev/null +++ b/docs/examples/mesh/plot_LogicallyOrthogonalMesh.py @@ -0,0 +1,6 @@ +from SimPEG import LogicallyOrthogonalMesh, utils +import matplotlib.pyplot as plt +X, Y = utils.exampleLomGird([3,3],'rotate') +M = LogicallyOrthogonalMesh([X, Y]) +M.plotGrid() +plt.show() diff --git a/docs/examples/mesh/plot_TensorMesh.py b/docs/examples/mesh/plot_TensorMesh.py new file mode 100644 index 00000000..94c627f8 --- /dev/null +++ b/docs/examples/mesh/plot_TensorMesh.py @@ -0,0 +1,21 @@ +import numpy as np +import matplotlib.pyplot as plt +from SimPEG import TensorMesh + +pad = 7 +padfactor = 1.4 +xpad = (np.ones(pad)*padfactor)**np.arange(pad) +ypad = (np.ones(pad)*padfactor)**np.arange(pad) + +core = 15 +xcore = np.ones(core) +ycore = np.ones(core) + +h1 = np.r_[xpad[::-1],xcore,xpad] +h2 = np.r_[ypad[::-1],ycore,ypad] + +mesh = TensorMesh([h1, h2]) +mesh.plotGrid() +plt.axis('tight') + +plt.show() diff --git a/docs/examples/mesh/plot_grid_2D.py b/docs/examples/mesh/plot_grid_2D.py index c53a8e02..258fbdfc 100644 --- a/docs/examples/mesh/plot_grid_2D.py +++ b/docs/examples/mesh/plot_grid_2D.py @@ -5,7 +5,7 @@ from SimPEG import TensorMesh h1 = np.linspace(.1,.5,3) h2 = np.linspace(.1,.5,5) mesh = TensorMesh([h1, h2]) -mesh.plotGrid() +mesh.plotGrid(nodes=True, faces=True, centers=True, lines=True) plt.show() diff --git a/docs/examples/mesh/plot_grid_3D.py b/docs/examples/mesh/plot_grid_3D.py index 8da62346..caf8dbd2 100644 --- a/docs/examples/mesh/plot_grid_3D.py +++ b/docs/examples/mesh/plot_grid_3D.py @@ -6,7 +6,7 @@ h1 = np.linspace(.1,.5,3) h2 = np.linspace(.1,.5,5) h3 = np.linspace(.1,.5,3) mesh = TensorMesh([h1,h2,h3]) -mesh.plotGrid() +mesh.plotGrid(nodes=True, faces=True, centers=True, lines=True) plt.show()