Difference between revisions of "UCVM svm1d"

From SCECpedia
Jump to navigationJump to search
m (Mei moved page UCVM svmgtl to UCVM svm1d: svmgtl is renamed into svm:svm1d)
 
(23 intermediate revisions by the same user not shown)
Line 1: Line 1:
 
== GTL ==
 
== GTL ==
  
Adding a new SVM gtl for UCVMC
+
Adding a new svm:svm1d  for UCVMC
  
* svmgtl
+
* svm1d
 +
 
 +
== cross plots ==
 +
 
 +
{|
 +
| [[FILE:Z10_cvms5.png|thumb|400px|cvms5 Z1.0]]
 +
|}
 +
 
 +
 
 +
{|
 +
| [[FILE:ab_cvms5_vs.png|thumb|300px|cvms5 ]]
 +
| [[FILE:AB_cvms5_svm_vs.png|thumb|300px|cvms5 with svm]]
 +
| [[FILE:AB_cvms5_ely_vs.png|thumb|300px|cvms5 with ely (z 0,350)]]
 +
|}
 +
 
 +
{|
 +
| [[FILE:BC_cvms5_vs.png|thumb|300px|cvms5]]
 +
| [[FILE:BC_cvms5_svm_vs.png|thumb|300px|cvms5 with svm]]
 +
| [[FILE:BC_cvsm5_ely_vs.png|thumb|300px|cvms5 with ely (z 0,350)]]
 +
|}
 +
 
 +
 
 +
[http://hypocenter.usc.edu/research/ucvmc_result/svmgtl/plot_raw.tar.gz Raw Datafiles]
 +
 
 +
Output format of the raw data is:
 +
lon lat Z surf vs30 crustal cr_vp cr_vs cr_rho gtl gtl_vp gtl_vs gtl_rho cmb_algo cmb_vp cmb_vs cmb_rho
  
 
== depth profiles ==
 
== depth profiles ==
Line 24: Line 49:
 
|}
 
|}
  
{|
 
| [[FILE:cvms5_depth_elygtl_200.png|thumb|300px|cvms5 with elygtl -z 0,200]]
 
| [[FILE:cvms5_depth_elygtl_350.png|thumb|300px|cvms5 with elygtl -z 0,350]]
 
| [[FILE:cvms5_depth_elygtl_Z1.png|thumb|300px|cvms5 with elygtl -Z 1000]]
 
|}
 
  
 
{|
 
{|
Line 40: Line 60:
 
./plot_depth_profile.py -s 34,-118.4 -b 0  -e 40000 -d vs,vp,density -v 100 -c cvms5 -o cvms5_depth_nogtl_bkg.png
 
./plot_depth_profile.py -s 34,-118.4 -b 0  -e 40000 -d vs,vp,density -v 100 -c cvms5 -o cvms5_depth_nogtl_bkg.png
 
./plot_depth_profile.py -s 34,-118.4 -b 0  -e 800 -d vs -v 10 -c cvms5 -o cvms5_depth_nogtl_base.png
 
./plot_depth_profile.py -s 34,-118.4 -b 0  -e 800 -d vs -v 10 -c cvms5 -o cvms5_depth_nogtl_base.png
./plot_depth_profile.py -s 34,-118.4 -b 0  -e 800 -d vs -v 10 -c cvms5,elygtl:ely -z 0,200 -o cvms5_depth_elygtl_200.png
+
./plot_depth_profile.py -s 34,-118.4 -b 0  -e 800 -d vs -v 10 -c cvms5,svm:svm1d -z 0,200 -o cvms5_depth_svmgtl_200.png
./plot_depth_profile.py -s 34,-118.4 -b 0  -e 800 -d vs -v 10 -c cvms5,elygtl:ely -z 0,350 -o cvms5_depth_elygtl_350.png
+
./plot_depth_profile.py -s 34,-118.4 -b 0  -e 800 -d vs -v 10 -c cvms5,svm:svm1d -z 0,350 -o cvms5_depth_svmgtl_350.png
./plot_depth_profile.py -s 34,-118.4 -b 0  -e 800 -d vs -v 10 -c cvms5,elygtl:ely -Z 1000 -o cvms5_depth_elygtl_Z1.png
+
./plot_depth_profile.py -s 34,-118.4 -b 0  -e 800 -d vs -v 10 -c cvms5,svm:svm1d -Z 1000 -o cvms5_depth_svmgtl_Z1.png
./plot_depth_profile.py -s 34,-118.4 -b 0  -e 800 -d vs -v 10 -c cvms5,svmgtl:svm -z 0,200 -o cvms5_depth_svmgtl_200.png
 
./plot_depth_profile.py -s 34,-118.4 -b 0  -e 800 -d vs -v 10 -c cvms5,svmgtl:svm -z 0,350 -o cvms5_depth_svmgtl_350.png
 
./plot_depth_profile.py -s 34,-118.4 -b 0  -e 800 -d vs -v 10 -c cvms5,svmgtl:svm -Z 1000 -o cvms5_depth_svmgtl_Z1.png
 
 
</pre>
 
</pre>
  
Line 51: Line 68:
  
 
[http://hypocenter.usc.edu/research/ucvmc_result/svmgtl/svm_depth_gtl_result.tar.gz Raw Datafiles]
 
[http://hypocenter.usc.edu/research/ucvmc_result/svmgtl/svm_depth_gtl_result.tar.gz Raw Datafiles]
 +
 +
== Near Garner Valley ==
 +
 +
Horizontal plots near Garner Valley,
 +
 +
<pre>
 +
Loc => -b 33.40,-116.859 -u 33.80,-116.30
 +
</pre>
 +
 +
This plot shows the Z1.0 crossing values ranges from 0 to 80,
 +
 +
{|
 +
| [[FILE:gv_cvms5_Z10.png|thumb|300px|cvms5 Z1.0 map]]
 +
|}
 +
 +
Horizontal plots at 50m depth with just cvms5,
 +
 +
{|
 +
| [[FILE:gv_cvms5_vs_50.png|thumb|300px|cvms5 50m depth]]
 +
| [[FILE:gv_cvms5_vs_50_b.png|thumb|300px|cvms5 50m depth]]
 +
|}
 +
 +
Horizontal plots ad 30m and 50m with cvms5 and svm,
 +
 +
{|
 +
| [[FILE:gv_cvms5_svm_vs_30.png|thumb|300px|cvms5&svm 30m depth]]
 +
| [[FILE:gv_cvms5_svm_vs_50.png|thumb|300px|cvms5&svm 50m depth]]
 +
|}
 +
 +
Comparing at the same depth of 80m (there are very slight differences),
 +
 +
{|
 +
| [[FILE:gv_cvms5_vs_80.png|thumb|300px|cvms5 80m depth]]
 +
| [[FILE:gv_cvms5_svm_vs_80.png|thumb|300px|cvms5&svm 80m depth]]
 +
|}
 +
 +
Comparing at the same depth of 100m (wiki said they are identical image),
 +
 +
{|
 +
| [[FILE:gv_cvms5_vs_100.png|thumb|300px|cvms5 100m]]
 +
| [[FILE:gv_cvms5_svm_vs_100.png|thumb|300px|cvms5&svm 100m ]]
 +
|}
 +
 +
[http://hypocenter.usc.edu/research/ucvmc_result/svmgtl/svm_gv_2d_result.tar.gz Raw Datafiles]
  
 
== Somewhere by the water ==
 
== Somewhere by the water ==
Line 70: Line 131:
 
and,
 
and,
 
<pre>
 
<pre>
./plot_cross_section.py -b 34,-118.5 -u 34,-117.5 -h 500 -v 10 -d vs -c cvms5,svmgtl:svm -a d -Z 1000 -s 0 -e 800 -o cvms5_cross_svmgtl_Z1.png
+
./plot_cross_section.py -b 34,-118.5 -u 34,-117.5 -h 500 -v 10 -d vs -c cvms5,svm:svm1d -a d -Z 1000 -s 0 -e 800 -o cvms5_cross_svmgtl_Z1.png
 
</pre>
 
</pre>
  
Line 80: Line 141:
  
 
{|
 
{|
| [[FILE:cvms5_cross_elygtl_200.png|thumb|300px|cvms5 with elygtl -z 0,200]]
+
| [[FILE:cvms5_cross_svmgtl_200.png|thumb|300px|cvms5 with svm1d -z 0,200]]
| [[FILE:cvms5_cross_elygtl_350.png|thumb|300px|cvms5 with elygtl -z 0,350]]
+
| [[FILE:cvms5_cross_svmgtl_350.png|thumb|300px|cvms5 with svm1d -z 0,350]]
| [[FILE:cvms5_cross_elygtl_Z1.png|thumb|300px|cvms5 with elygtl -Z 1000]]
+
| [[FILE:cvms5_cross_svmgtl_Z1_2.png|thumb|300px|cvms5 with svm1d -Z 1000]]
 
|}
 
|}
  
{|
+
[http://hypocenter.usc.edu/research/ucvmc_result/svmgtl/svm_cross_gtl_result.tar.gz Raw Datafiles]
| [[FILE:cvms5_cross_svmgtl_200.png|thumb|300px|cvms5 with svmgtl -z 0,200]]
+
 
| [[FILE:cvms5_cross_svmgtl_350.png|thumb|300px|cvms5 with svmgtl -z 0,350]]
+
== Additional Info ==
| [[FILE:cvms5_cross_svmgtl_Z1.png|thumb|300px|cvms5 with svmgtl -Z 1000]]
+
 
|}
+
SVM interpolation function extracted by Elnaz from Jian's class_svm.py from https://github.com/jsh9/PySeismoSoil
 +
 
 +
<pre>
 +
// zmax would be the Z1.0 if there is one and vs30
 +
// in data->gtl.vs
 +
 
 +
double calc_z1_from_Vs30(double vs30) {
 +
  double z1 = 140.511*exp(-0.00303*vs30); // [m]
 +
  return z1;
 +
}
 +
 
 +
double calc_rho (double vs, double z) {
 +
  if (z == 0.0) {
 +
    z = 0.0001;
 +
  }
 +
  double lb = 1.65; //lower bound  [g/cm^3]
 +
  double rho  = 1000.0 * max(lb, 1.0 + 1.0/ (0.614 + 58.7 * (log(z) + 1.095) / vs)); //[kg/m^3]
 +
  return rho;
 +
}
 +
 
 +
 
 +
/* SVM interpolation method */
 +
int ucvm_interp_svm(double zmin, double zmax, ucvm_ctype_t cmode, ucvm_point_t *pnt, ucvm_data_t *data) {
 +
 
 +
  // curve fitting parameters for SVM model
 +
  double p1 = -2.1688E-04;
 +
  double p2 =  0.5182    ;
 +
  double p3 = 69.452    ;
 +
 
 +
  double r1 = -59.67    ;
 +
  double r2 = -0.2722    ;
 +
  double r3 = 11.132    ;
 +
 
 +
  double s1 =  4.110    ;
 +
  double s2 = -1.0521E-04;
 +
  double s3 = -10.827    ;
 +
  double s4 = -7.6187E-03;
 +
 
 +
  double zstar = 2.5 ; // [m]
 +
  double z1    = zmax; // z at which vs = 1000
 +
  double vz1;
 +
 
 +
  double z    = data->depth; // interpolation depth
 +
 
 +
  double vs, k, n, vs0; // vs profiling parameters
 +
 
 +
  double vscap = 1000.0;
 +
  double eta  = 0.9  ;
 +
  double zeta, veta    ;
 +
 
 +
  double vs30  = data->gtl.vs;
 +
 
 +
  double nu = 0.3; // poisson ratio
 +
  double vp_vs  = sqrt(2.0*(1.0-nu)/(1.0-2.0*nu));
 +
 
 +
  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 +
  switch (cmode) {
 +
    case UCVM_COORD_GEO_DEPTH:
 +
    case UCVM_COORD_GEO_ELEV:
 +
    break;
 +
    default:
 +
    fprintf(stderr, "Unsupported coord type\n");
 +
    return(UCVM_CODE_ERROR);
 +
    break;
 +
  }
 +
 
 +
  if (z < 0.0) {
 +
    return(UCVM_CODE_NODATA);
 +
  }
 +
 
 +
  // if no z1 data, compute empirically
 +
  if (z1 == 0.0 || z1 == -1.0) {
 +
    z1 = calc_z1_from_Vs30(vs30);
 +
  }
 +
 
 +
  // query in crustal properties
 +
  if (z >= z1) {
 +
    data->cmb.vp    = data->crust.vp;
 +
    data->cmb.vs    = data->crust.vs;
 +
    data->cmb.rho    = data->crust.rho;
 +
    data->cmb.source = UCVM_SOURCE_CRUST;
 +
    return(UCVM_CODE_SUCCESS);
 +
  }
 +
 
 +
  // z is between 0 and z1: query in SVM model
 +
  vs0 = p1*pow(vs30,2.0) + p2*vs30 + p3;
 +
 
 +
  if (z1<=zstar) {
 +
    vs  = min(vs0,vscap);
 +
  }
 +
  else { // z1 > zstar
 +
    k  = exp(r1*pow(vs30,2.0) + r3);                    //  <<=== r2 ???
 +
    n  = max(1.0, s1*exp(s2*vs30) + s3*exp(s4*vs30));
 +
    vz1 = vs0*pow(1.0+k*(z1-zstar),1.0/n); // vs @ z1
 +
 
 +
    if (vz1 <= vscap) { // no need to cap the model
 +
      if (z<=zstar) {
 +
        vs = vs0;
 +
      }
 +
      else {
 +
        vs = vs0*pow(1.0+k*(z-zstar),1.0/n);
 +
      } 
 +
    }
 +
    else { // vz1 > vscap -> need to cap the model with linear interpolation from zeta to z1
 +
      veta = eta*vscap;
 +
      zeta = (1.0/k)*(pow(veta/vs0,n)-1.0)+zstar; // depth at which vs = eta*vscap
 +
      if (z <= zeta) {
 +
        if (z<=zstar) {
 +
          vs = vs0;
 +
        }
 +
        else {
 +
          vs = vs0*pow(1.0+k*(z-zstar),1.0/n);
 +
        }
 +
      }
 +
      else { // z>zeta -> linear interpolation
 +
        vs  = veta + ((vcap-veta)/(z1-zeta))*(z-zeta);
 +
      }
 +
    }
 +
  }
  
[http://hypocenter.usc.edu/research/ucvmc_result/svmgtl/svm_cross_gtl_result.tar.gz Raw Datafiles]
+
  data->cmb.vs    = vs;
 +
  data->cmb.vp    = vp_vs * vs;
 +
  data->cmb.rho    =  calc_rho(vs,z);
 +
  data->cmb.source = data->gtl.source;
 +
  return(UCVM_CODE_SUCCESS);
 +
}
 +
</pre>
  
 
== Related Links ==
 
== Related Links ==
  
 
*[[UCVM]]
 
*[[UCVM]]

Latest revision as of 05:50, 14 September 2019

GTL

Adding a new svm:svm1d for UCVMC

  • svm1d

cross plots

cvms5 Z1.0


cvms5
cvms5 with svm
cvms5 with ely (z 0,350)
cvms5
cvms5 with svm
cvms5 with ely (z 0,350)


Raw Datafiles

Output format of the raw data is: lon lat Z surf vs30 crustal cr_vp cr_vs cr_rho gtl gtl_vp gtl_vs gtl_rho cmb_algo cmb_vp cmb_vs cmb_rho

depth profiles

Target point: -118.4,34

echo "-118.4 34.0 " | basin_query -m cvms5 -f ../conf/ucvm.conf 

returns the Z1.0 at 580.0


Profile plots,


cvms5 background
cvms5 baseline


cvms5 with svmgtl -z 0,200
cvms5 with svmgtl -z 0,350
cvms5 with svmgtl -Z 1000

commands used :

./plot_depth_profile.py -s 34,-118.4 -b 0  -e 40000 -d vs,vp,density -v 100 -c cvms5 -o cvms5_depth_nogtl_bkg.png
./plot_depth_profile.py -s 34,-118.4 -b 0  -e 800 -d vs -v 10 -c cvms5 -o cvms5_depth_nogtl_base.png
./plot_depth_profile.py -s 34,-118.4 -b 0  -e 800 -d vs -v 10 -c cvms5,svm:svm1d -z 0,200 -o cvms5_depth_svmgtl_200.png
./plot_depth_profile.py -s 34,-118.4 -b 0  -e 800 -d vs -v 10 -c cvms5,svm:svm1d -z 0,350 -o cvms5_depth_svmgtl_350.png
./plot_depth_profile.py -s 34,-118.4 -b 0  -e 800 -d vs -v 10 -c cvms5,svm:svm1d -Z 1000 -o cvms5_depth_svmgtl_Z1.png


Raw Datafiles

Near Garner Valley

Horizontal plots near Garner Valley,

Loc => -b 33.40,-116.859 -u 33.80,-116.30

This plot shows the Z1.0 crossing values ranges from 0 to 80,

cvms5 Z1.0 map

Horizontal plots at 50m depth with just cvms5,

cvms5 50m depth
cvms5 50m depth

Horizontal plots ad 30m and 50m with cvms5 and svm,

cvms5&svm 30m depth
cvms5&svm 50m depth

Comparing at the same depth of 80m (there are very slight differences),

cvms5 80m depth
cvms5&svm 80m depth

Comparing at the same depth of 100m (wiki said they are identical image),

cvms5 100m
cvms5&svm 100m

Raw Datafiles

Somewhere by the water

Near westside with cvms5, internal GTL disabled,


cvms5 Z10 map
cvms5 Z25 map

Depth cross plot,

sample commands used :

./plot_cross_section.py -b 34,-118.5 -u 34,-117.5 -h 700 -v 10 -d vs -c cvms5 -a d -s 0 -e 800 -o cvms5_cross_base.png

and,

./plot_cross_section.py -b 34,-118.5 -u 34,-117.5 -h 500 -v 10 -d vs -c cvms5,svm:svm1d -a d -Z 1000 -s 0 -e 800 -o cvms5_cross_svmgtl_Z1.png


cvms5 background
cvms5 baseline
cvms5 with svm1d -z 0,200
cvms5 with svm1d -z 0,350
cvms5 with svm1d -Z 1000

Raw Datafiles

Additional Info

SVM interpolation function extracted by Elnaz from Jian's class_svm.py from https://github.com/jsh9/PySeismoSoil

// zmax would be the Z1.0 if there is one and vs30
// in data->gtl.vs

double calc_z1_from_Vs30(double vs30) {
  double z1 = 140.511*exp(-0.00303*vs30); // [m]
  return z1;
}

double calc_rho (double vs, double z) {
  if (z == 0.0) {
    z = 0.0001;
  }
  double lb = 1.65; //lower bound  [g/cm^3]
  double rho  = 1000.0 * max(lb, 1.0 + 1.0/ (0.614 + 58.7 * (log(z) + 1.095) / vs)); //[kg/m^3]
  return rho;
}


/* SVM interpolation method */
int ucvm_interp_svm(double zmin, double zmax, ucvm_ctype_t cmode, ucvm_point_t *pnt, ucvm_data_t *data) {

  // curve fitting parameters for SVM model
  double p1 = -2.1688E-04;
  double p2 =  0.5182    ;
  double p3 = 69.452     ;

  double r1 = -59.67     ;
  double r2 = -0.2722    ;
  double r3 = 11.132     ;

  double s1 =  4.110     ;
  double s2 = -1.0521E-04;
  double s3 = -10.827    ;
  double s4 = -7.6187E-03;

  double zstar = 2.5 ; // [m]
  double z1    = zmax; // z at which vs = 1000
  double vz1;

  double z     = data->depth; // interpolation depth

  double vs, k, n, vs0; // vs profiling parameters

  double vscap = 1000.0;
  double eta   = 0.9   ;
  double zeta, veta    ;
  
  double vs30   = data->gtl.vs;

  double nu = 0.3; // poisson ratio
  double vp_vs  = sqrt(2.0*(1.0-nu)/(1.0-2.0*nu));

  //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  switch (cmode) {
    case UCVM_COORD_GEO_DEPTH:
    case UCVM_COORD_GEO_ELEV:
    break;
    default:
    fprintf(stderr, "Unsupported coord type\n");
    return(UCVM_CODE_ERROR);
    break;
  }

  if (z < 0.0) {
    return(UCVM_CODE_NODATA);
  }

  // if no z1 data, compute empirically
  if (z1 == 0.0 || z1 == -1.0) {
    z1 = calc_z1_from_Vs30(vs30);
  }

  // query in crustal properties
  if (z >= z1) {
    data->cmb.vp     = data->crust.vp;
    data->cmb.vs     = data->crust.vs;
    data->cmb.rho    = data->crust.rho;
    data->cmb.source = UCVM_SOURCE_CRUST;
    return(UCVM_CODE_SUCCESS);
  }

  // z is between 0 and z1: query in SVM model
  vs0 = p1*pow(vs30,2.0) + p2*vs30 + p3;

  if (z1<=zstar) {
    vs  = min(vs0,vscap);
  }
  else { // z1 > zstar
    k   = exp(r1*pow(vs30,2.0) + r3);                    //  <<=== r2 ???
    n   = max(1.0, s1*exp(s2*vs30) + s3*exp(s4*vs30));
    vz1 = vs0*pow(1.0+k*(z1-zstar),1.0/n); // vs @ z1

    if (vz1 <= vscap) { // no need to cap the model
      if (z<=zstar) {
        vs = vs0;
      }
      else {
        vs = vs0*pow(1.0+k*(z-zstar),1.0/n);
      }  
    }
    else { // vz1 > vscap -> need to cap the model with linear interpolation from zeta to z1
      veta = eta*vscap;
      zeta = (1.0/k)*(pow(veta/vs0,n)-1.0)+zstar; // depth at which vs = eta*vscap
      if (z <= zeta) {
        if (z<=zstar) {
          vs = vs0;
        }
        else {
          vs = vs0*pow(1.0+k*(z-zstar),1.0/n);
        }
      }
      else { // z>zeta -> linear interpolation
        vs   = veta + ((vcap-veta)/(z1-zeta))*(z-zeta);
      }
    }
  }

  data->cmb.vs     = vs;
  data->cmb.vp     = vp_vs * vs;
  data->cmb.rho    =  calc_rho(vs,z);
  data->cmb.source = data->gtl.source;
  return(UCVM_CODE_SUCCESS);
}

Related Links