Class VelocityModel

  • All Implemented Interfaces:
    java.io.Serializable, java.lang.Cloneable

    public class VelocityModel
    extends java.lang.Object
    implements java.lang.Cloneable, java.io.Serializable
    This class defines basic classes to store and manipulate a velocity model.
    See Also:
    Serialized Form
    • Field Detail

      • modelName

        protected java.lang.String modelName
        name of the velocity model.
      • radiusOfEarth

        protected double radiusOfEarth
        reference radius (km), usually radius of the earth, by default 6371 kilometers.
      • mohoDepth

        protected double mohoDepth
        Depth (km) of the moho. It can be input from velocity model (*.nd) or should be explicitly set. By default it is 35 kilometers (from Iasp91). For phase naming, the tau model will choose the closest 1st order discontinuity. Thus for most simple earth models these values are satisfactory. Take proper care if your model has a thicker crust and a discontinuity near 35 km depth.
      • cmbDepth

        protected double cmbDepth
        Depth (km) of the cmb (core mantle boundary). It can be input from velocity model (*.nd) or should be explicitly set. By default it is 2889 kilometers (from Iasp91). For phase naming, the tau model will choose the closest 1st order discontinuity. Thus for most simple earth models these values are satisfactory.
      • iocbDepth

        protected double iocbDepth
        Depth (km) of the iocb (inner core outer core boundary). It can be input from velocity model (*.nd) or should be explicitly set. By default it is 5153.9 kilometers (from Iasp91). For phase naming, the tau model will choose the closest 1st order discontinuity. Thus for most simple earth models these values are satisfactory.
      • minRadius

        protected double minRadius
        minimum radius of the model (km), default 0.0
      • maxRadius

        protected double maxRadius
        maximum radius of the model (km), default 6371.0
      • spherical

        protected boolean spherical
        is this a spherical model? Default is true.
      • vectorLength

        protected static int vectorLength
        the initial length of the layer vector.
      • layer

        protected java.util.List<VelocityLayer> layer
        expandable array to hold the layers
    • Constructor Detail

      • VelocityModel

        public VelocityModel​(java.lang.String modelName,
                             double radiusOfEarth,
                             double mohoDepth,
                             double cmbDepth,
                             double iocbDepth,
                             double minRadius,
                             double maxRadius,
                             boolean spherical,
                             java.util.List<VelocityLayer> layer)
    • Method Detail

      • getModelName

        public java.lang.String getModelName()
        get the model name.
      • setModelName

        public void setModelName​(java.lang.String modelName)
        set the model name.
      • setRadiusOfEarth

        public void setRadiusOfEarth​(double radiusOfEarth)
        sets radius of the earth (km), by default 6371 kilometers.
      • getRadiusOfEarth

        public double getRadiusOfEarth()
        gets radius of the earth (km), by default 6371 kilometers.
      • isDisconDepth

        public boolean isDisconDepth​(double depth)
      • isNamedDisconDepth

        public boolean isNamedDisconDepth​(double depth)
      • getDisconDepths

        public double[] getDisconDepths()
        Returns:
        the depths of discontinuities within the velocity model
      • getMohoDepth

        public double getMohoDepth()
        Returns:
        depth (km) of the moho. It can be input from velocity model (*.nd) or should be explicitly set. By default it is 35 kilometers (from Iasp91). For phase naming, the tau model will choose the closest 1st order discontinuity. Thus for most simple earth models these values are satisfactory. Take proper care if your model has a thicker crust and a discontinuity near 35 km depth.
      • setMohoDepth

        public void setMohoDepth​(double mohoDepth)
      • getCmbDepth

        public double getCmbDepth()
        Returns:
        depth (km) of the cmb (core mantle boundary). It can be input from velocity model (*.nd) or should be explicitly set. By default it is 2889 kilometers (from Iasp91). For phase naming, the tau model will choose the closest 1st order discontinuity. Thus for most simple earth models these values are satisfactory.
      • setCmbDepth

        public void setCmbDepth​(double cmbDepth)
      • getIocbDepth

        public double getIocbDepth()
        Returns:
        the depth (km) of the iocb (inner core outer core boundary). It can be input from velocity model (*.nd) or should be explicitly set. By default it is 5153.9 kilometers (from Iasp91). For phase naming, the tau model will choose the closest 1st order discontinuity. Thus for most simple earth models these values are satisfactory.
      • setIocbDepth

        public void setIocbDepth​(double iocbDepth)
      • getMinRadius

        public double getMinRadius()
      • setMinRadius

        public void setMinRadius​(double minRadius)
      • getMaxRadius

        public double getMaxRadius()
      • setMaxRadius

        public void setMaxRadius​(double maxRadius)
      • getSpherical

        public boolean getSpherical()
      • setSpherical

        public void setSpherical​(boolean spherical)
      • getVelocityLayerClone

        public VelocityLayer getVelocityLayerClone​(int layerNum)
      • getVelocityLayer

        public VelocityLayer getVelocityLayer​(int layerNum)
      • getNumLayers

        public int getNumLayers()
        Returns the number of layers in this velocity model.
      • layerNumberAbove

        public int layerNumberAbove​(double depth)
                             throws NoSuchLayerException
        Finds the layer containing the given depth. Note this returns the upper layer if the depth happens to be at a layer boundary.
        Returns:
        the layer number
        Throws:
        NoSuchLayerException - occurs if no layer contains the given depth.
      • layerNumberBelow

        public int layerNumberBelow​(double depth)
                             throws NoSuchLayerException
        Finds the layer containing the given depth. Note this returns the lower layer if the depth happens to be at a layer boundary.
        Returns:
        the layer number
        Throws:
        NoSuchLayerException - occurs if no layer contains the given depth.
      • evaluateAbove

        public double evaluateAbove​(double depth,
                                    VelocityModelMaterial materialProperty)
                             throws NoSuchLayerException
        returns the value of the given material property, usually P or S velocity, at the given depth. Note this returns the value at the bottom of the upper layer if the depth happens to be at a layer boundary.
        Returns:
        the value of the given material property
        Throws:
        NoSuchLayerException - occurs if no layer contains the given depth.
      • evaluateBelow

        public double evaluateBelow​(double depth,
                                    VelocityModelMaterial materialProperty)
                             throws NoSuchLayerException
        returns the value of the given material property, usually P or S velocity, at the given depth. Note this returns the value at the top of the lower layer if the depth happens to be at a layer boundary.
        Returns:
        the value of the given material property
        Throws:
        NoSuchLayerException - occurs if no layer contains the given depth.
      • evaluateAtTop

        public double evaluateAtTop​(int layerNumber,
                                    VelocityModelMaterial materialProperty)
        returns the value of the given material property, usually P or S velocity, at the top of the given layer.
        Returns:
        the value of the given material property occurs if the material property is not recognized.
      • evaluateAtBottom

        public double evaluateAtBottom​(int layerNumber,
                                       VelocityModelMaterial materialProperty)
        returns the value of the given material property, usually P or S velocity, at the bottom of the given layer.
        Returns:
        the value of the given material property
      • depthAtTop

        public double depthAtTop​(int layerNumber)
        returns the depth at the top of the given layer.
        Returns:
        the depth.
      • depthAtBottom

        public double depthAtBottom​(int layerNumber)
        returns the depth at the bottom of the given layer.
        Returns:
        the depth. occurs if the material property is not recognized.
      • printGMT

        public void printGMT​(java.lang.String filename)
                      throws java.io.IOException
        prints out the velocity model into a file in a form suitable for plotting with GMT.
        Throws:
        java.io.IOException
      • printGMT

        public void printGMT​(java.io.PrintWriter dos)
        prints out the velocity model into a file in a for suitable for plotting with GMT.
      • validate

        public boolean validate()
        Performs internal consistency checks on the velocity model.
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object
      • writeToND

        public void writeToND​(java.io.Writer out)
                       throws java.io.IOException
        Throws:
        java.io.IOException
      • print

        public void print()
      • asJSON

        public org.json.JSONObject asJSON()
      • asJSON

        public java.lang.String asJSON​(boolean pretty,
                                       java.lang.String indent)
      • getModelNameFromFileName

        public static java.lang.String getModelNameFromFileName​(java.lang.String filename)
      • readVelocityFile

        public static VelocityModel readVelocityFile​(java.lang.String filename,
                                                     java.lang.String fileType)
                                              throws java.io.IOException,
                                                     VelocityModelException
        Reads in a velocity file. The type of file is determined by the fileType var. Calls readTVelFile or readNDFile.
        Throws:
        VelocityModelException - if the type of file cannot be determined.
        java.io.IOException
      • readTVelFile

        public static VelocityModel readTVelFile​(java.io.File file)
                                          throws java.io.IOException,
                                                 VelocityModelException
        This method reads in a velocity model from a "tvel" ASCII text file. The name of the model file for model "modelname" should be "modelname.tvel". The format of the file is: comment line - generally info about the P velocity model comment line - generally info about the S velocity model depth pVel sVel Density depth pVel sVel Density . . . The velocities are assumed to be linear between sample points. Because this type of model file doesn't give complete information we make the following assumptions: modelname - from the filename, with ".tvel" dropped if present radiusOfEarth - the largest depth in the model meanDensity - 5517.0 G - 6.67e-11 Also, because this method makes use of the string tokenizer, comments are allowed. # as well as // signify that the rest of the line is a comment. C style slash-star comments are also allowed.
        Throws:
        VelocityModelException - occurs if an EOL should have been read but wasn't. This may indicate a poorly formatted tvel file.
        java.io.IOException
      • readNDFile

        public static VelocityModel readNDFile​(java.io.File file)
                                        throws java.io.IOException,
                                               VelocityModelException
        This method reads in a velocity model from a "nd" ASCII text file, the format used by Xgbm. The name of the model file for model "modelname" should be "modelname.nd". The format of the file is: depth pVel sVel Density Qp Qs depth pVel sVel Density Qp Qs . . . with each major boundary separated with a line with "mantle", "outer-core" or "inner-core". "moho", "cmb" and "icocb" are allowed as synonyms respectively. This feature makes phase interpretation much easier to code. Also, as they are not needed for travel time calculations, the density, Qp and Qs may be omitted. The velocities are assumed to be linear between sample points. Because this type of model file doesn't give complete information we make the following assumptions: modelname - from the filename, with ".nd" dropped, if present radiusOfEarth - the largest depth in the model Also, because this method makes use of the string tokenizer, comments are allowed. # as well as // signify that the rest of the line is a comment. C style slash-star comments are also allowed.
        Throws:
        VelocityModelException - occurs if an EOL should have been read but wasn't. This may indicate a poorly formatted model file.
        java.io.IOException
      • fixDisconDepths

        public boolean fixDisconDepths()
                                throws VelocityModelException
        resets depths of major discontinuities to match those existing in the input velocity model. The initial values are set such that if there is no discontinuity within the top 65 km then the moho is set to 0.0. Similarly, if there are no discontinuities at all then the cmb is set to the radius of the earth. Similarly for the iocb, except it must be a fluid to solid boundary and deeper than 100km to avoid problems with shallower fluid layers, eg oceans. Generally this is only needed for the .tvel model format as it does not have a means to name discontinuities.
        Throws:
        VelocityModelException
      • earthFlattenTransform

        public VelocityModel earthFlattenTransform()
                                            throws VelocityModelException
        Returns a flat velocity model object equivalent to the spherical velocity model via the earth flattening transform.
        Returns:
        the flattened VelocityModel object.
        Throws:
        VelocityModelException - occurs ???.