plotting_map = maps.ActiveCells(mesh, ind_active, np.nan) plotting_model = [ true_conductivity_model_log10, l2_conductivity_model_log10, recovered_conductivity_model_log10, ] for ii in range(0, 3): ax1[ii] = fig.add_axes([0.1, 0.73 - 0.3 * ii, 0.72, 0.21]) mesh.plotImage( plotting_map * plotting_model[ii], ax=ax1[ii], grid=False, clim=( np.min(true_conductivity_model_log10), np.max(true_conductivity_model_log10), ), range_x=[-700, 700], range_y=[-600, 0], pcolorOpts={"cmap": "viridis"}, ) ax1[ii].set_title(title_str[ii]) ax1[ii].set_xlabel("x (m)") ax1[ii].set_ylabel("z (m)") ax2[ii] = fig.add_axes([0.83, 0.73 - 0.3 * ii, 0.05, 0.21]) norm = mpl.colors.Normalize( vmin=np.min(true_conductivity_model_log10), vmax=np.max(true_conductivity_model_log10), ) cbar = mpl.colorbar.ColorbarBase(
# The total number of cells nC = mesh.nC # An (nC, 2) array containing the cell-center locations cc = mesh.gridCC # A boolean array specifying which cells lie on the boundary bInd = mesh.cellBoundaryInd # The cell areas (2D "volume") s = mesh.vol fig = plt.figure(figsize=(6, 6)) ax = fig.add_subplot(111) mesh.plotImage(np.log10(s), grid=True, ax=ax) ax.set_xbound(mesh.x0[0], mesh.x0[0] + np.sum(mesh.hx)) ax.set_ybound(mesh.x0[1], mesh.x0[1] + np.sum(mesh.hy)) ax.set_title('Log of Cell Areas') ############################################### # 3D Example # ---------- # # Here we show how the same approach can be used to create and extract # properties from a 3D tree mesh. # dx = 5 # minimum cell width (base mesh cell width) in x dy = 5 # minimum cell width (base mesh cell width) in y dz = 5 # minimum cell width (base mesh cell width) in z
cbar.set_label("$S/m$", rotation=270, labelpad=15, size=12) plt.show() # # Plot Recovered Model fig = plt.figure(figsize=(9, 4)) recovered_conductivity = conductivity_map * recovered_conductivity_model recovered_conductivity[~ind_active] = np.NaN ax1 = fig.add_axes([0.1, 0.12, 0.72, 0.8]) mesh.plotImage( recovered_conductivity, normal="Y", ax=ax1, grid=False, range_x=[-700, 700], range_y=[-700, 0], pcolorOpts={"norm": norm}, ) ax1.set_title("Recovered Conductivity Model") ax1.set_xlabel("x (m)") ax1.set_ylabel("z (m)") ax2 = fig.add_axes([0.83, 0.12, 0.05, 0.8]) cbar = mpl.colorbar.ColorbarBase(ax2, norm=norm, orientation="vertical") cbar.set_label(r"$\sigma$ (S/m)", rotation=270, labelpad=15, size=12) plt.show() ###################################################################
ax2 = fig.add_axes([0.84, 0.17, 0.03, 0.7]) cbar = mpl.colorbar.ColorbarBase(ax2, norm=norm, orientation="vertical") cbar.set_label("$S/m$", rotation=270, labelpad=15, size=12) plt.show() # Plot Recovered Model fig = plt.figure(figsize=(9, 4)) recovered_conductivity = conductivity_map * recovered_conductivity_model recovered_conductivity[~ind_active] = np.NaN ax1 = fig.add_axes([0.14, 0.17, 0.68, 0.7]) mesh.plotImage( recovered_conductivity, normal="Y", ax=ax1, grid=False, pcolorOpts={"norm": norm} ) ax1.set_xlim(-600, 600) ax1.set_ylim(-600, 0) ax1.set_title("Recovered Conductivity Model") ax1.set_xlabel("x (m)") ax1.set_ylabel("z (m)") ax2 = fig.add_axes([0.84, 0.17, 0.03, 0.7]) cbar = mpl.colorbar.ColorbarBase(ax2, norm=norm, orientation="vertical") cbar.set_label(r"$\sigma$ (S/m)", rotation=270, labelpad=15, size=12) plt.show() ###################################################################
def plotVectorSectionsOctree( mesh, m, normal="X", ind=0, vmin=None, vmax=None, scale=1.0, vec="k", axs=None, actvMap=None, fill=True, ): """ Plot section through a 3D tensor model """ # plot recovered model normalInd = {"X": 0, "Y": 1, "Z": 2}[normal] antiNormalInd = {"X": [1, 2], "Y": [0, 2], "Z": [0, 1]}[normal] h2d = (mesh.h[antiNormalInd[0]], mesh.h[antiNormalInd[1]]) x2d = (mesh.x0[antiNormalInd[0]], mesh.x0[antiNormalInd[1]]) #: Size of the sliced dimension szSliceDim = len(mesh.h[normalInd]) if ind is None: ind = int(szSliceDim // 2) cc_tensor = [None, None, None] for i in range(3): cc_tensor[i] = np.cumsum(np.r_[mesh.x0[i], mesh.h[i]]) cc_tensor[i] = (cc_tensor[i][1:] + cc_tensor[i][:-1]) * 0.5 slice_loc = cc_tensor[normalInd][ind] # Create a temporary TreeMesh with the slice through temp_mesh = TreeMesh(h2d, x2d) level_diff = mesh.max_level - temp_mesh.max_level XS = [None, None, None] XS[antiNormalInd[0]], XS[antiNormalInd[1]] = np.meshgrid( cc_tensor[antiNormalInd[0]], cc_tensor[antiNormalInd[1]]) XS[normalInd] = np.ones_like(XS[antiNormalInd[0]]) * slice_loc loc_grid = np.c_[XS[0].reshape(-1), XS[1].reshape(-1), XS[2].reshape(-1)] inds = np.unique(mesh._get_containing_cell_indexes(loc_grid)) grid2d = mesh.gridCC[inds][:, antiNormalInd] levels = mesh._cell_levels_by_indexes(inds) - level_diff temp_mesh.insert_cells(grid2d, levels) tm_gridboost = np.empty((temp_mesh.nC, 3)) tm_gridboost[:, antiNormalInd] = temp_mesh.gridCC tm_gridboost[:, normalInd] = slice_loc # Interpolate values to mesh.gridCC if not 'CC' mx = actvMap * m[:, 0] my = actvMap * m[:, 1] mz = actvMap * m[:, 2] m = np.c_[mx, my, mz] # Interpolate values from mesh.gridCC to grid2d ind_3d_to_2d = mesh._get_containing_cell_indexes(tm_gridboost) v2d = m[ind_3d_to_2d, :] amp = np.sum(v2d**2.0, axis=1)**0.5 if axs is None: axs = plt.subplot(111) if fill: temp_mesh.plotImage(amp, ax=axs, clim=[vmin, vmax], grid=True) axs.quiver( temp_mesh.gridCC[:, 0], temp_mesh.gridCC[:, 1], v2d[:, antiNormalInd[0]], v2d[:, antiNormalInd[1]], pivot="mid", scale_units="inches", scale=scale, linewidths=(1, ), edgecolors=(vec), headaxislength=0.1, headwidth=10, headlength=30, )
ind_resistor = model_builder.getIndicesSphere(np.r_[120.0, -180.0], 60.0, mesh.gridCC) ind_resistor = ind_resistor[ind_active] conductivity_model[ind_resistor] = resistor_conductivity # Plot Conductivity Model fig = plt.figure(figsize=(8.5, 4)) plotting_map = maps.InjectActiveCells(mesh, ind_active, np.nan) log_mod = np.log10(conductivity_model) ax1 = fig.add_axes([0.1, 0.12, 0.73, 0.78]) mesh.plotImage( plotting_map * log_mod, ax=ax1, grid=False, clim=(np.log10(resistor_conductivity), np.log10(conductor_conductivity)), pcolor_opts={"cmap": "viridis"}, ) ax1.set_title("Conductivity Model") ax1.set_xlabel("x (m)") ax1.set_ylabel("z (m)") ax2 = fig.add_axes([0.85, 0.12, 0.05, 0.78]) norm = mpl.colors.Normalize(vmin=np.log10(resistor_conductivity), vmax=np.log10(conductor_conductivity)) cbar = mpl.colorbar.ColorbarBase(ax2, norm=norm, cmap=mpl.cm.viridis, orientation="vertical", format="$10^{%.1f}$")
ind_resistor = model_builder.getIndicesSphere(np.r_[120.0, -180.0], 60.0, mesh.gridCC) ind_resistor = ind_resistor[ind_active] conductivity_model[ind_resistor] = resistor_conductivity # Plot Conductivity Model fig = plt.figure(figsize=(8.5, 4)) plotting_map = maps.InjectActiveCells(mesh, ind_active, np.nan) log_mod = np.log10(conductivity_model) ax1 = fig.add_axes([0.1, 0.12, 0.73, 0.78]) mesh.plotImage( plotting_map * log_mod, ax=ax1, grid=False, clim=(np.log10(resistor_conductivity), np.log10(conductor_conductivity)), pcolorOpts={"cmap": "viridis"}, ) ax1.set_title("Conductivity Model") ax1.set_xlabel("x (m)") ax1.set_ylabel("z (m)") ax2 = fig.add_axes([0.85, 0.12, 0.05, 0.78]) norm = mpl.colors.Normalize(vmin=np.log10(resistor_conductivity), vmax=np.log10(conductor_conductivity)) cbar = mpl.colorbar.ColorbarBase(ax2, norm=norm, cmap=mpl.cm.viridis, orientation="vertical", format="$10^{%.1f}$")
# Load true conductivity model true_conductivity_model = np.loadtxt(str(true_conductivity_filename)) true_conductivity_model_log10 = np.log10(true_conductivity_model[ind_active]) # Plot True Model fig = plt.figure(figsize=(9, 4)) plotting_map = maps.ActiveCells(mesh, ind_active, np.nan) ax1 = fig.add_axes([0.1, 0.12, 0.72, 0.8]) mesh.plotImage( plotting_map * true_conductivity_model_log10, ax=ax1, grid=False, clim=(np.min(true_conductivity_model_log10), np.max(true_conductivity_model_log10)), range_x=[-700, 700], range_y=[-700, 0], pcolor_opts={"cmap": "viridis"}, ) ax1.set_title("True Conductivity Model") ax1.set_xlabel("x (m)") ax1.set_ylabel("z (m)") ax2 = fig.add_axes([0.83, 0.12, 0.05, 0.8]) norm = mpl.colors.Normalize( vmin=np.min(true_conductivity_model_log10), vmax=np.max(true_conductivity_model_log10), ) cbar = mpl.colorbar.ColorbarBase(ax2, norm=norm,
xx = M.vectorNx yy = np.zeros(nbcx + 1) #vetor linha(poderia ser uma função ou pontos) pts = np.c_[matutils.mkvc(xx), matutils.mkvc(yy)] def refine(cell): if np.sqrt(((np.r_[cell.center] + [xc, yc])**2).sum()) < Raio_length: return 10 return 6 M.refine(refine) M.finalize() # Must finalize tree mesh before use #M.plotGrid(showIt=True) print("\n the mesh has {} cells".format(M)) ccMesh = M.gridCC print('indices:', np.size(ccMesh)) conds = [1e-2, 1] sig = simpeg.Utils.ModelBuilder.defineBlock(M.gridCC, [-5000, -2200], [5000, -4200], conds) # sig[M.gridCC[:, 1] > 0] = 1e-8 sigBG = np.zeros(M.nC) + conds[1] sigBG[M.gridCC[:, 1] > 0] = 1e-8 M.plotImage(np.log(sig), grid=True)