Class TauModel

java.lang.Object
edu.sc.seis.TauP.TauModel
All Implemented Interfaces:
Serializable

public class TauModel extends Object implements Serializable
provides storage all of the TauBranch's comprising a model.
See Also:
  • Field Details

    • DEBUG

      public static boolean DEBUG
      True to enable debugging output.
    • spherical

      protected boolean spherical
      True if this is a spherical slowness model. False if flat.
    • sourceDepth

      protected double sourceDepth
      Depth for which tau model was constructed.
    • sourceBranch

      protected int sourceBranch
      Branch with the source at its top.
    • noDisconDepths

      protected double[] noDisconDepths
      Depths that should not have reflections or phase conversions. For instance, if the source is not at a branch boundary then noDisconDepths contains source depth and reflections and phase conversions are not allowed at this branch boundary. If the source happens to fall on a real discontinuity then then it is not included.
    • surfaceDepth

      protected double surfaceDepth
    • mohoDepth

      protected double mohoDepth
      Depth of the moho.
    • mohoBranch

      protected int mohoBranch
      Branch with the moho at its top.
    • cmbDepth

      protected double cmbDepth
      Depth of the cmb.
    • cmbBranch

      protected int cmbBranch
      Branch with the cmb at its top.
    • iocbDepth

      protected double iocbDepth
      Depth of the iocb.
    • iocbBranch

      protected int iocbBranch
      Branch with the iocb at its top.
    • radiusOfEarth

      protected double radiusOfEarth
      Radius of the Earth in km, usually input from the velocity model.
    • rayParams

      protected double[] rayParams
      ray parameters used to construct the tau branches. This may only be a subset of the slownesses/ray parameters saved in the slowness model due to high slowness zones (low velocity zones).
    • tauBranches

      public TauBranch[][] tauBranches
      2D Array containing a TauBranch object corresponding to each "branch" of the tau model, 0 is P and 1 is S. Branches correspond to depth regions between discontinuities or reversals in slowness gradient for a wave type. Each branch contains time, distance, and tau increments for each ray parameter in rayParams for the layer. Rays that turn above the branch layer are assigned 0.0 time, distance, and tau increments.
  • Constructor Details

  • Method Details

    • isSpherical

      public boolean isSpherical()
    • getModelName

      public String getModelName()
      Returns:
      the name of the earth model used to construct the tau model.
    • getSlownessModel

      public SlownessModel getSlownessModel()
    • getVelocityModel

      public VelocityModel getVelocityModel()
    • getSourceDepth

      public double getSourceDepth()
      Returns:
      depth for which tau model was constructed.
    • getSourceBranch

      public int getSourceBranch()
      Returns:
      branch number with the source at its top.
    • getNoDisconDepths

      public double[] getNoDisconDepths()
      Branches, such as the branch with the source at its top, that are not allowed to have reflections and phase conversions at their tops.
    • isNoDisconBranch

      public boolean isNoDisconBranch(int branchNum)
      Does the given branch number have a noDisconDepth at its top? We test against PWave Tau branches (ie true) since S is the same.
    • isFluidBranch

      public boolean isFluidBranch(int branchNum)
    • isHeadWaveBranch

      public boolean isHeadWaveBranch(int branchNum, boolean incidentIsPWave, boolean isPWave) throws NoSuchLayerException
      True if a boundary can generate a head wave, must be a discontinuity, not surface and an increase in velocity with depth.
      Parameters:
      branchNum - branch layer number
      incidentIsPWave - pwave incident above boundary, true for P, false for S
      isPWave - in the below layer, true for P, false for S
      Returns:
      head wave possible
      Throws:
      NoSuchLayerException
    • isDiffractionBranch

      public boolean isDiffractionBranch(int branchNum, boolean isPWave)
      True if a boundary can generate a diffracted wave, currently just ensure a discontinuity and not surface.
      Parameters:
      branchNum - branch layer number below the discontinuity
      isPWave - true for P, false for S
      Returns:
      diffracted wave possible
    • isDiscontinuityBranch

      public boolean isDiscontinuityBranch(int branchNum, boolean isPWave)
      True if a boundary at top of branch is a discontinuity for the given phase type in the velocity model. Branch 0 is always a discontinuity, free surface. Center of earth is never a discon, so we do not need to search the bottom of a branch.
      Parameters:
      branchNum - branch layer number
      isPWave - true for P, false for S
      Returns:
      if a velocity discontinuity
    • isNoDisconDepth

      public boolean isNoDisconDepth(double noDisconDepth)
      Is the given depth a "noDisconDepth"? Usually because model was split at the source or receiver depth, or an added depth used by taup pierce.
    • setNoDisconDepths

      public void setNoDisconDepths(double[] noDisconDepths)
    • appendNoDisconDepth

      public void appendNoDisconDepth(double noDisconDepth)
    • getMohoDepth

      public double getMohoDepth()
      Returns:
      depth of the moho.
    • getMohoBranch

      public int getMohoBranch()
      Returns:
      branch number with the moho at its top.
    • getAboveMohoTauBranch

      public TauBranch getAboveMohoTauBranch(boolean isPWave)
      Returns:
      tau branch with the moho at its top.
    • getBelowMohoTauBranch

      public TauBranch getBelowMohoTauBranch(boolean isPWave)
      Returns:
      tau branch with the moho at its top.
    • getCmbDepth

      public double getCmbDepth()
      Returns:
      depth of the cmb.
    • getCmbBranch

      public int getCmbBranch()
      Returns:
      branch number with the cmb at its top.
    • getAboveCmbTauBranch

      public TauBranch getAboveCmbTauBranch(boolean isPWave)
      Returns:
      tau branch with the iocb at its top.
    • getBelowCmbTauBranch

      public TauBranch getBelowCmbTauBranch(boolean isPWave)
      Returns:
      tau branch with the iocb at its top.
    • getIocbDepth

      public double getIocbDepth()
      Returns:
      depth of the iocb.
    • getIocbBranch

      public int getIocbBranch()
      Returns:
      branch number with the iocb at its top.
    • getAboveIocbTauBranch

      public TauBranch getAboveIocbTauBranch(boolean isPWave)
      Returns:
      tau branch with the iocb at its bottom.
    • getBelowIocbTauBranch

      public TauBranch getBelowIocbTauBranch(boolean isPWave)
      Returns:
      tau branch with the iocb at its top.
    • isDegenerateCrust

      public boolean isDegenerateCrust()
      Check if crust is missing, moho at surface
      Returns:
    • isDegenerateCrustMantle

      public boolean isDegenerateCrustMantle()
      Check if mantle is missing, model is only core, cmb at surface
      Returns:
    • isDegenerateInnerCore

      public boolean isDegenerateInnerCore()
      Check if inner core is missing, iocb at center of earth
      Returns:
    • isDegenerateOuterCore

      public boolean isDegenerateOuterCore()
      Check if outer core is missing, iocb at cmb
      Returns:
    • getRadiusOfEarth

      public double getRadiusOfEarth()
      Returns:
      the radius of the Earth in km, usually input from the velocity model.
    • getRayParams

      public double[] getRayParams()
      Returns:
      an array, cloned, of the ray parameters used to construct the tau branches. This may only be a subset of the slownesses/ray parameters saved in the slowness model due to high slowness zones (low velocity zones).
    • getOneRayParam

      public double getOneRayParam(int i)
    • getNumBranches

      public int getNumBranches()
    • getTauBranchAtDepth

      public TauBranch getTauBranchAtDepth(double depth, boolean isPWave) throws TauModelException
      Gets the branch that either has the depth as its top boundary, or strictly contains the depth. Also, we allow the bottommost branch to contain its bottom depth, so that the center if the earth is contained within the bottom branch.
      Throws:
      TauModelException
    • getTauBranch

      public TauBranch getTauBranch(int branchNum, boolean isPWave)
    • getBranchDepths

      public double[] getBranchDepths()
      returns an array of the depths that are boundaries between branches
    • findDepth

      public double findDepth(double rayParam, boolean isPWave) throws TauModelException
      returns the turning depth for a ray of given ray parameter. Note this is for a surface source, and so converted phases my give incorrect results, e.g. SKS for certain ray parameters turns within the upper part of the outer core that is a low velocity zone for P so no P wave of that ray parameter could reach the core. For layer specific turning points, see the other SlownessModel.findDepth.
      Throws:
      TauModelException
    • findBranch

      public int findBranch(double depth) throws TauModelException
      Finds the branch that either has the depth as its top boundary, or strictly contains the depth. Also, we allow the bottommost branch to contain its bottom depth, so that the center if the earth is contained within the bottom branch.
      Throws:
      TauModelException
    • depthCorrect

      public TauModel depthCorrect(double depth) throws TauModelException
      Computes a new tau model for a source at depth using the previously computed branches for a surface source. No change is needed to the branches above and below the branch containing the depth, except for the addition of a slowness sample. The branch containing the source depth is split into 2 branches, and up going branch and a downgoing branch. Additionally, the slowness at the source depth must be sampled exactly as it is an extremal point for each of these branches. See Buland and Chapman p 1290.
      Throws:
      TauModelException
    • isBranchDepth

      public boolean isBranchDepth(double depth)
      Checks to see if the given depth is a boundary depth. This could be because it is a discontinuity in the velocity model, or because the layer has been split for the source or reciever.
      Parameters:
      depth -
      Returns:
    • splitBranch

      public TauModel splitBranch(double depth) throws TauModelException
      returns a new TauModel with the branches containing depth split at depth. Used for putting a source at depth since a source can only be located on a branch boundary.
      Throws:
      TauModelException
    • writeModel

      public void writeModel(String filename) throws IOException
      Throws:
      IOException
    • writeModelToStream

      public void writeModelToStream(OutputStream outStream) throws IOException
      Throws:
      IOException
    • readModel

      public static TauModel readModel(String filename) throws IOException, ClassNotFoundException
      Throws:
      IOException
      ClassNotFoundException
    • readModelFromStream

      public static TauModel readModelFromStream(InputStream inStream) throws IOException, ClassNotFoundException
      Throws:
      IOException
      ClassNotFoundException
    • validate

      public boolean validate()
    • print

      public void print()
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • branchesToString

      public StringBuilder branchesToString()
    • dumpToString

      public String dumpToString()
    • loadFromDepthCache

      protected TauModel loadFromDepthCache(Double depth)