Giter Club home page Giter Club logo

radiative3d's Introduction

Radiative3D

Radiative transport in 3D Earth models

Radiative3D is a 3D radiative transport software tool being developed by Christopher Sanborn and the Solid Earth Geophysics Research Group at the University of Connecticut. Radiative3D can be used to produce synthetic waveforms, travel-time curves, or volumetric visualizations of energy propagation through three-dimensional Earth models. Radiative3D uses ray tracing to simulate propagation dynamics in large-scale structure, and uses a stochastic multiple scattering process to simulate the effects of statistically-described small-scale structure. Radiative3D simulates realistic source events described by moment tensor elements, allowing it to be used to simulate a variety of focal mechanisms, including explosions, double-couple earthquakes, CLVD's, etc.

Publications:

What's New:

Janaury 2020:
  • Added support for model architecture composed of concentric spherical shells, in which the elastic velocity profiles vary quadraticaly with the radial coordinate (vP,S = a r^2 + c). The grid defines the velocities at the top and bottom of each spherical layer. This allows for whole-Earth models, efficiently defined in terms of a reasonably small number of layers.

  • Raspbian Buster on the Raspberry Pi 4 is now my primary development and testing environment. Radiative3D is fast, efficient, and runs on inexpensive hardware! Of course, it still runs great on Intel and AMD-based workstations as well.

Build Process

Radiative3D builds with GCC on MacOS (OS X), Linux, and Raspbian. (And perhaps also Windows.)

$ git clone https://github.com/christophersanborn/Radiative3D.git
$ cd Radiative3D
$ make

Results in a binary named main.

Run with:

$ ./main [args]

User Manual here: Radiative3D Manual Page

There are also supporting scripts (e.g. do-crustpinch.sh) to help with managing command line options and organizing the various output files and post-processing of data. The "do-scripts" are writtin in BASH and may depend on the installation of additional command line tools. (See Manual Page.)

radiative3d's People

Contributors

christophersanborn avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

radiative3d's Issues

New reportable event for phonons killed by NaNs and other pathologies.

Add to the report types (e.g. GEN, REF, CEL, SCT, TMO, etc) a new reportable event, NAN, and report and kill phonon in the following situations:

  • Phonons asked to move a PathLength or TravelTime of NaN
  • Phonon accrues negative travel time or path length
  • Phonon has multiple consecutive "moves" of zero path length.

Note in latter case, it must be multiple consecutive zero-length moves, as reflection events, for example, produce legitimate "moves" where only the direction, not the location, are changed. (There's one known bug (#5) where a phonon gets stuck reflecting back and forth ad infinitum without actually moving anywhere...)

Additionally, add a counter so that at the end of simulation a report can be given of how many of these events occurred.

Related issues: #7 , #5

user-defined scattering operators

Dear Christopher,

Thank you for sharing your code with the community!
I had a question about how the user could define the desired scattering operators (differential scattering cross-sections). The analytical expressions for these operators being different based on the symmetry class of the background (average) and foreground (fluctuation) media, it would be interesting to be able to add that option to the code.

Best regards,
Shahram

Add grid file ingestor.

Specifying model grids in code and compiling them in as hard-coded options is, of course, needlessly tedious. Write a basic/simple file ingestor that can take these grids in from an ascii file.

Stuck phonons when using 32-bit floats

Compiling with 32-bit floats instead of 64-bit floats offers significant memory savings, and perhaps some speedup as well. However, there is a stuck-phonon issue that happens ONLY when using 32-bit floats and has not been observed when using 64-bit floats.

Track this down and fix it.

Add support for liquid media (Vs==0)

It is already possible to input Vs=0 into the model grid, and basic ray-tracing runs fine. However, the following issues exist with the scattering and Q dynamics:

  • Specifying a finite, non-zero Qs via a QmQk() constructor, when Vs is zero, produces infinite Qp, and does not alert user that an illogical value was input, and a likely unintended Qp value was inferred. In this case, the user should inout Qp explicitly, rather than rely on automatic computation.

  • Vs==0 results in scattering parameters el and gam0 being infinite, and MFPs for both P and S end up being NaNs. Not actually sure what effect this has during runtime. Probably effectively turns off scattering in these regions. Not a problem for S waves, since they won't be there, but for the P waves this is probably an unintended result.

Vertical phonons producing NaNs in spherical shells with quadratic gradients

Phonons trending exactly vertically (towards or away from model center) in SphereShell cells with radial quadratic velocities have infinite arc radius (they follow straight lines). This is actually handled by falling back to the linear handlers used for uniform-velocity SphereShells, which gives correct answers for distances, and then a special case solver is used for travel times. The math seems right, and gives correct answer for roughly 49 out of every 50 phonons simulated, but about 1 in 50 picks up a NaN somewhere and "gets stuck". Haven't figured out where this is happening yet except I think it has it's origins in SphereShell::GetRayArc_RD2(), where a check for verticality is (sometimes) failing to trigger, and and the intended sentinel value for Ray.Center isn't getting assigned. But again, no idea why.

The good news is these perfectly vertical phonons are exceedingly rare in practice, and are only statistically likely to produce a NaN. (In fact, I've only been able to test them by force injecting them โ€” haven't actually seen one in the wild.) Still, I'm not quite comfortable with the chance that one of these could scuttle a simulation that is potentially hours or days into computing.

So... need to track down and squash.

Add support for retrograde gradients in spherical quadratic velocity models

The spherical shells work well with radial quadratic gradients โ€” the ray paths are circular arc segments. But the solutions are computed under that assumption that the coefficient on r^2 is negative, and the constant term positive. (Meaning: velocities increase downwards.)

In some earth models, there a regions where velocity decreases as you go downwards. Although these can be approximated with stair-steps, it would be nice if the ray paths for downward-decreasing gradients could be handled directly, allowing much more modeling freedom.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.