From SCECpedia
Redirect page
Jump to navigationJump to search

Redirect to:


CVM-SCEC Improved (CVM-SI), is a 3D seismic velocity model based upon original CVM-S with changes made based on full 3D tomography inversion results.

In the current implementation of CVM-SI, the CVM-SI software combines material properties from the starting CVM-S model, with CVM-S perturbations that are a result of iterations of inversion simulations by Chen et al (2011) and Lee et al (2010).

The CVMSI query program combines the CVM-S starting model with perturbations. The goal of our cvmsi_query model is to generate high resolution velocity meshes (<100m mesh spacing) using low resolution perturbation model (500m).

The development is being done with CVM-S iteration 20 and higher. Previous CVM-SI implementations were done by combining the perturbations with the starting model directly and serving the low-resolution model. Our new approach serves the starting model at the desired resolution and modifying it based on interpolated values from the perturbation model.

Please note: While the perturbations span the entire CVM-S region horizontally, they are only 50km deep. As such, querying CVM-SI 20 below 50km will simply return CVM-S material properties.

Starting Model

So, let's see if we can go through each section:

Step 1:

2000. 3000. ! Minimum and corner of vp.
1000. 1500. ! Minimum and corner of vs.
2000. 2300. ! Minimum and corner of rho.(density)

read(*,*) modcvm(1),modcvm(2)
read(*,*) modcvm(3),modcvm(4)
read(*,*) modcvm(5),modcvm(6)

If I understand correctly, this means modcvm(1) contains the first value "2000", modcvm(2) contains "3000", modcvm(3) contains "1000", modcvm(4) = 1500, modcvm(5) = 2000, and modcvm(6) = 2300. Is this correct?

Step 2:

You would go through the extracted CVM-S mesh and locate the minimum Vp, Vs, and Rho values in the entire mesh.

Step 3:

Then you would apply a sequence of formulas:

if(alpha(ii).lt.modcvm(2)) alpha(ii)=(modcvm(2)*(modcvm(1)-vpmin0)+alpha(ii)*(modcvm(2)-modcvm(1)))/(modcvm(2)-vpmin0)
if(beta(ii).lt.modcvm(4)) beta(ii)=(modcvm(4)*(modcvm(3)-vsmin0)+beta(ii)*(modcvm(4)-modcvm(3)))/(modcvm(4)-vsmin0)
if(rho(ii).lt.modcvm(6)) rho(ii)=(modcvm(6)*(modcvm(5)-dnmin0)+rho(ii)*(modcvm(6)-modcvm(5)))/(modcvm(6)-dnmin0)

So to translate into pseudocode, these three equations would be:

If Vp < 3000 then Vp = (3000 * (2000 - Min_CVMS_Vp) + Vp * (3000 - 2000)) / (3000 - Min_CVMS_Vp)
If Vs < 1500 then Vs = (1500 * (1000 - Min_CVMS_Vs) + Vs * (1500 - 1000)) / (1500 - Min_CVMS_Vs)
If Rho < 2300 then Rho = (2300 * (2000 - Min_CVMS_Rho) + Rho * (2300 - 2000) / (2300 - Min_CVMS_Rho)

Finally, Step 4:

You would verify that if Vp/Vs was still less than 1.45 then we'd just set Vs = Vp / 1.45

I have uploaded our initial model to "/auto/rcf-104/pochen/CVM4".
The files are named by layer number.
CVM4_slice_??? : ??? is the layer number ( 001 is bottom and 100 is the surface of our initial model)
In each file, there are 8 columns.
column1: grid number of X
column2: grid number of Y
column3: longitude
column4: latitude
column5: elevation
column6: vp (m/s)
column7: vs (m/s)
column8: density (kg/m^3)

Interpolation Methods

This discussion pertains to an old model of CVM-SI. For the latest model, including a finalized interpolation method, please visit

The broad idea behind CVM-SI21 is that we can take the low resolution perturbation mesh and interpolate it onto the CVM-S model, which is rule-based and therefore arbitrary precision. However, since the perturbations were calculated using a Vs minimum of 1000m/s, in certain areas of CVM-S (like boreholes), doing a straight trilinear interpolation of the perturbations with the CVM-S material properties can result in negative Vs and/or Vp values.

In order to solve this problem, three interpolation methods have been proposed:

Cosine Taper Where Vs < 1000m/s

Plots using this method are available here

Since the inversions were done with a Vs minimum of 1000m/s, one proposed method is to do a cosine taper in sections of the CVM-S model that have Vs < 1000m/s. More precisely, we define this method as:

If CVMS_VS < 1000:
    CVMS_COS_RATIO = 0.5 * (1 + cos(PI - (CVMS_VS / 1000) * PI))
End If

Where CVMSI21_DVS and CVMSI21_DVP are ΔVs and ΔVp (i.e. the perturbation).

Below are 5 plots that show the Vs 1D velocity profiles using this interpolation method.

Linear Scaling Between Vs > 800m/s and Vs < 1200m/s in the GTL

Another proposed method is to discard the perturbations in the GTL entirely when the CVM-S Vs is less than 800m/s and apply the perturbations fully when CVM-S Vs > 1200m/s. In between those values, we linearly scale the perturbation value so that 0% of the CVM-SI21 ΔVs value is applied at 800m/s and 100% of the CVM-SI21 ΔVs value is applied at 1200m/s. When we go deeper than the GTL (i.e. past 350m) we always apply the perturbations fully. The pseudo-code for this method is as follows:

If depth < 350:
    If original CVM-S Vs <= 800 m/s:
        CVM-S4.20 Vs = CVM-S Vs
        CVM-S4.20 Vp = CVM-S Vp
        CVM-S4.20 Rho = CVM-S Rho
    Else if original CVM-S Vs > 800 m/s and original CVM-S Vs < 1200 m/s:
        Scaling factor = (CVM-S Vs - 800) / 400
        Comment: Note the above line calculates how far we are between 800 and 1200. If the Vs is 1100 m/s for example, then (1100-800) / 400 = 300/400 = 75%
        CVM-S4.20 Vs = CVM-S Vs + (Scaling factor x Perturbation Vs)
        Comment: For our example above, this would mean if the original CVM-S Vs was 1100 m/s we would add 75% of the perturbation Vs to CVM-S Vs.
        CVM-S4.20 Vp = CVM-S Vp + (Scaling factor x Perturbation Vp)
        CVM-S4.20 Rho = CVM-S Rho
    Else if original CVM-S Vs >= 1200 m/s:
        CVM-S4.20 Vs = CVM-S Vs + Perturbation Vs
        CVM-S4.20 Vp = CVM-S Vp + Perturbation Vp
        CVM-S4.20 Rho = CVM-S Rho
    End If
End If

Below are plots for the same 5 sites for this method:

Cosine Scaling Between Vs > 800m/s and Vs < 1200m/s in the GTL

This interpolation method works similarly to the Linear Scaling method with the exception that our scaling factor is not linear but rather a cosine method. That is:

Scaling factor = 0.5 * (1 + cos(PI - ((CVMS_VS - 800) / 400) * PI))

This helps smooth out some discontinuities that might be seen in the linearly scaled version.

To see more about these sites and where they're located, we have provided the KML file:

Perturbation Models

The model is expressed as a 3D grid of 1536 x 992 x 100 cells with a grid spacing of 500 m. Query points are smoothed by interpolating the surrounding eight grid points. The four corners of the model region are:

  -116.00000000000000        30.449999999999999     
  -122.30000000000000        34.783499999999997     
  -118.94748257396012        38.303452459152524     
  -112.51822905852465        33.781862621842393     
  -116.00000000000000        30.449999999999999

The map projection is a UTM zone 11 projection. The velocity model is C/Fortran code and associated files that are downloaded, compiled, and run locally. The user queries the models by creating an input file of latitude, longitude, and depth values, and the model returns Vp, Vs, and density at each of those points. This improved model has been imported into UCVM and is referenced with the model label "cvmsi".

Iteration 20 Perturbations

The VP and VP perturbation results are posted the USC computer under: ~pochen/SC_F3DT_dV_SI20/

The perturbations are separated into few files:

CVM4SI20_dV_# : # from 001~100 for perturbations at different depths

The file format is:

column 1: X
column 2: Y
column 3: Z
column 4: longitude
column 5: latitude
column 6: depth (m)  ; 0 is surface
column 7: dVP  (m/sec) ; VP of CVM4SI20 - VP of CVM4
column 8: dVS  (m/sec) ; VS of CVM4SI20 - VS of CVM4

Attached a figure of waveform comparisons for Chino Hills event. In the figure, the black lines are data waveforms and the red lines are synthetic waveforms generated based on our current model. We have applied a six-pole Butterworth filter with corners at 0.02 and 0.2 Hz to both waveforms.

Few more iterations by using the scattering-integral and LSQR algorithms on the Mira. We will let you know, once we have a new model.

Download CVM-SI

We have configured a software program called CVMSI_Query may be checked out from SVN with these commands:

svn co

An UCVM distribution is available for download here UCVM.


  1. Lee, E., Chen, P., Jordan, T., & Wang, L., 2011. Rapid full‐wave centroid moment tensor (CMT) inversion in a three‐dimensional earth structure model for earthquakes in Southern California, Geophysical Journal International, 186, 311–330.
  2. Chen, P., Lee, E., Jordan, T. H., Maechling, P. J., Denolle, M., & Beroza, G. C., 2011, Full-3D Waveform Tomography for Southern California, 2011 SSA Annual Meeting, Memphis, TN
  3. Lee, E., Chen, P., Jordan, T. H., Maechling, P. J., Denolle, M., & Beroza, G. C., 2010, Full-3D Waveform Tomography for Southern California, 2010 AGU Fall Meeting, San Francisco, CA

Related Entries