def run(title): if title == 'Migration': result = gravmag.imaging.migrate(xp, yp, zp, gz, bounds[-2], bounds[-1], meshshape, power=0.5) elif title == 'Generalized Inverse': result = gravmag.imaging.geninv(xp, yp, zp, gz, meshshape[1:], bounds[-2], bounds[-1], meshshape[0]) elif title == 'Sandwich': result = gravmag.imaging.sandwich(xp, yp, zp, gz, meshshape[1:], bounds[-2], bounds[-1], meshshape[0], power=0.5) # Plot the results myv.figure() myv.polyprisms(prisms, 'density', style='wireframe', linewidth=2) myv.prisms(result, 'density', edges=False) axes = myv.axes(myv.outline(), ranges=[b*0.001 for b in bounds], fmt='%.0f') myv.wall_bottom(axes.axes.bounds) myv.wall_north(axes.axes.bounds) myv.title(title) myv.show()
area = bounds[:4] axis = mpl.figure().gca() mpl.axis('scaled') model = [ mesher.PolygonalPrism( mpl.draw_polygon(area, axis, xy2ne=True), # Use only induced magnetization 0, 2000, {'magnetization':2})] # Calculate the effect shape = (100, 100) xp, yp, zp = gridder.regular(area, shape, z=-500) tf = polyprism.tf(xp, yp, zp, model, inc, dec) # and plot it mpl.figure() mpl.axis('scaled') mpl.title("Total field anomalyproduced by prism model (nT)") mpl.contourf(yp, xp, tf, shape, 20) mpl.colorbar() for p in model: mpl.polygon(p, '.-k', xy2ne=True) mpl.set_area(area) mpl.m2km() mpl.show() # Show the prisms myv.figure() myv.polyprisms(model, 'magnetization') myv.axes(myv.outline(bounds), ranges=[i*0.001 for i in bounds]) myv.wall_north(bounds) myv.wall_bottom(bounds) myv.show()
""" Meshing: Make and plot a 3D prism mesh """ from fatiando import mesher from fatiando.vis import myv mesh = mesher.PrismMesh(bounds=(-2, 2, -3, 3, 0, 1), shape=(4, 4, 4)) myv.figure() plot = myv.prisms(mesh) axes = myv.axes(plot) myv.show()
from fatiando.mesher import Tesseroid from fatiando.vis import mpl, myv log = logger.get() log.info(logger.header()) # Get the data from their website and convert it to tesseroids # Will download the archive and save it with the default name log.info("Fetching CRUST2.0 model") archive = io.fetch_crust2() log.info("Converting to tesseroids") model = io.crust2_to_tesseroids(archive) log.info(' model size: %d' % (len(model))) # Plot the tesseroid model myv.figure(zdown=False) myv.tesseroids(model, 'density') myv.continents(linewidth=3) myv.show() # Make the computation grid area = (-180, 180, -80, 80) shape = (100, 100) lons, lats, heights = gridder.regular(area, shape, z=250000) # Divide the model into nproc slices and calculate them in parallel log.info('Calculating...') def calculate(chunk): return gravmag.tesseroid.gz(lons, lats, heights, chunk) def split(model, nproc): chunksize = len(model)/nproc
""" from __future__ import print_function from fatiando.mesher import PrismMesh from fatiando.vis import myv mesh = PrismMesh(bounds=(0, 100, 0, 200, 0, 150), shape=(5, 6, 7)) # We'll give each prism a density value corresponding to it's index on the # mesh. Notice that meshes take lists/arrays as their property values mesh.addprop('density', list(range(mesh.size))) # You can iterate over meshes like lists of elements for p in mesh: print(p.props['density'], end=' ') scene = myv.figure(size=(600, 600)) # Because you can iterate over a mesh, you can pass it anywhere a list of # prisms is accepted plot = myv.prisms(mesh, prop='density') # The code below enables and configures the color bar. This will be automated # on a function in the future (write to the mailing list if you'd like to help # out!) plot.module_manager.scalar_lut_manager.show_scalar_bar = True plot.module_manager.scalar_lut_manager.lut_mode = 'Greens' plot.module_manager.scalar_lut_manager.reverse_lut = True plot.module_manager.scalar_lut_manager.label_text_property.color = (0, 0, 0) plot.module_manager.scalar_lut_manager.title_text_property.color = (0, 0, 0) plot.module_manager.scalar_lut_manager.scalar_bar_representation.position = \ [0.9, 0.4] plot.module_manager.scalar_lut_manager.scalar_bar_representation.position2 = \ [0.1, 0.6]
from fatiando import gridder from fatiando.gravmag import prism, harvester from fatiando.mesher import Prism, PrismMesh from fatiando.vis import myv model = [Prism(200, 800, 400, 600, 200, 400, {'density': 1000})] shape = (20, 20) bounds = [0, 1000, 0, 1000, 0, 1000] area = bounds[0:4] x, y, z = gridder.regular(area, shape, z=-1) gz = prism.gz(x, y, z, model) mesh = PrismMesh(bounds, (10, 10, 10)) data = [harvester.Gz(x, y, z, gz)] seeds = harvester.sow([[500, 500, 250, {'density': 1000}]], mesh) fig = myv.figure(size=(700, 700)) plot = myv.prisms(model, style='wireframe', linewidth=4) plot.actor.mapper.scalar_visibility = False myv.prisms(seeds, 'density') myv.outline(bounds) myv.wall_bottom(bounds) myv.wall_east(bounds) for update in harvester.iharvest(data, seeds, mesh, compactness=0.5, threshold=0.001): best, neighborhood = update[2:4] if best is not None: myv.prisms([mesh[best.i]]) plot = myv.prisms( [mesh[n] for neighbors in neighborhood for n in neighbors], style='wireframe') plot.actor.mapper.scalar_visibility = False
""" Meshing: Make and plot a tesseroid mesh with topography """ from fatiando import gridder, utils, mesher from fatiando.vis import myv w, e = -2, 2 s, n = -2, 2 bounds = (w, e, s, n, 500000, 0) x, y = gridder.regular((w, e, s, n), (50, 50)) height = (250000 + -100000*utils.gaussian2d(x, y, 1, 5, x0=-1, y0=-1, angle=-60) + 250000*utils.gaussian2d(x, y, 1, 1, x0=0.8, y0=1.7)) mesh = mesher.TesseroidMesh(bounds, (20, 50, 50)) mesh.carvetopo(x, y, height) scene = myv.figure(zdown=False) myv.tesseroids(mesh) myv.earth(opacity=0.3) myv.continents() scene.scene.camera.position = [21592740.078245595, 22628783.944262519, -28903782.916664094] scene.scene.camera.focal_point = [5405474.2152075395, -1711034.715136874, 2155879.3486608281] scene.scene.camera.view_angle = 1.6492674416639987 scene.scene.camera.view_up = [0.91713422625547714, -0.1284658947859818, 0.37730799740742887] scene.scene.camera.clipping_range = [20169510.286021926, 69721043.718536735] scene.scene.camera.compute_view_plane_normal() scene.scene.render() myv.show()
""" GravMag: Forward modeling of the gravitational potential and its derivatives using tesseroids """ import time from fatiando import gravmag, gridder, utils from fatiando.mesher import Tesseroid from fatiando.vis import mpl, myv model = [ Tesseroid(-60, -55, -30, -27, 0, -500000, props={'density': 200}), Tesseroid(-66, -62, -18, -12, 0, -300000, props={'density': -500}) ] # Show the model before calculating scene = myv.figure(zdown=False) myv.tesseroids(model, 'density') myv.continents(linewidth=2) myv.earth(opacity=0.8) myv.meridians(range(0, 360, 45), opacity=0.2) myv.parallels(range(-90, 90, 45), opacity=0.2) scene.scene.camera.position = [ 23175275.131412581, -16937347.013663091, -4924328.2822419703 ] scene.scene.camera.focal_point = [0.0, 0.0, 0.0] scene.scene.camera.view_angle = 30.0 scene.scene.camera.view_up = [ 0.083030001958377356, -0.17178720527713925, 0.98162883763562181 ] scene.scene.camera.clipping_range = [9229054.5133903362, 54238225.321054712] scene.scene.camera.compute_view_plane_normal() scene.scene.render()
""" Vis: Set the colors in figures, prisms, polygonal prisms and tesseroids. """ from fatiando.mesher import Prism, PolygonalPrism, Tesseroid from fatiando.vis import myv prism = Prism(1, 2, 1, 2, 0, 1, {'density': 1}) polyprism = PolygonalPrism([[3, 1], [4, 2], [5, 1]], -1, 2, {'density': 2}) tesseroid = Tesseroid(10, 20, 50, 60, 10**6, 0) red, green, blue = (1, 0, 0), (0, 1, 0), (0, 0, 1) white, black = (1, 1, 1), (0, 0, 0), myv.figure() # Make the prism red with blue edges, despite its density myv.prisms([prism], 'density', color=red, edgecolor=blue) # and the polyprism green with blue edges myv.title('Body + edge colors') myv.figure() # For wireframes, color is usually set by the density. # Overwrite this by setting *color* # *edgecolor* is ignored myv.polyprisms([polyprism], 'density', style='wireframe', color=green, edgecolor=red, linewidth=2) myv.title('Wireframe colors')
""" Meshing: Make and plot a tesseroid mesh """ from fatiando import mesher from fatiando.vis import myv mesh = mesher.TesseroidMesh((-60, 60, -30, 30, 100000, -500000), (10, 10, 10)) myv.figure(zdown=False) myv.tesseroids(mesh) myv.earth(opacity=0.3) myv.continents() myv.meridians(range(-180, 180, 30)) myv.parallels(range(-90, 90, 30)) myv.show()
""" from fatiando import gridder, gravmag from fatiando.mesher import Prism, PrismMesh from fatiando.vis import myv model = [Prism(200, 800, 400, 600, 200, 400, {'density': 1000})] shape = (20, 20) bounds = [0, 1000, 0, 1000, 0, 1000] area = bounds[0:4] x, y, z = gridder.regular(area, shape, z=-1) gz = gravmag.prism.gz(x, y, z, model) mesh = PrismMesh(bounds, (10, 10, 10)) data = [gravmag.harvester.Gz(x, y, z, gz)] seeds = gravmag.harvester.sow([[500, 500, 250, {'density': 1000}]], mesh) fig = myv.figure(size=(700, 700)) plot = myv.prisms(model, style='wireframe', linewidth=4) plot.actor.mapper.scalar_visibility = False myv.prisms(seeds, 'density') myv.outline(bounds) myv.wall_bottom(bounds) myv.wall_east(bounds) for update in gravmag.harvester.iharvest(data, seeds, mesh, compactness=0.5, threshold=0.001): best, neighborhood = update[2:4] if best is not None: myv.prisms([mesh[best.i]]) plot = myv.prisms(
""" Vis: Set the colors in figures, prisms, polygonal prisms and tesseroids. """ from fatiando.mesher import Prism, PolygonalPrism, Tesseroid from fatiando.vis import myv prism = Prism(1, 2, 1, 2, 0, 1, {'density': 1}) polyprism = PolygonalPrism([[3, 1], [4, 2], [5, 1]], -1, 2, {'density': 2}) tesseroid = Tesseroid(10, 20, 50, 60, 10 ** 6, 0) red, green, blue = (1, 0, 0), (0, 1, 0), (0, 0, 1) white, black = (1, 1, 1), (0, 0, 0), myv.figure() # Make the prism red with blue edges, despite its density myv.prisms([prism], 'density', color=red, edgecolor=blue) # and the polyprism green with blue edges myv.title('Body + edge colors') myv.figure() # For wireframes, color is usually set by the density. # Overwrite this by setting *color* # *edgecolor* is ignored myv.polyprisms([polyprism], 'density', style='wireframe', color=green, edgecolor=red, linewidth=2) myv.title('Wireframe colors') # Black background, white lines, green tesseroid myv.figure(zdown=False, color=black) myv.earth() myv.continents(color=white)