UCVM svm1d
From SCECpedia
Contents
GTL
Adding a new SVM gtl for UCVMC
- svmgtl
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,
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,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,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,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,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
Near Garner Valley
Horizontal plots near Garner Valley,
Loc => -b 33.40,-116.859 -u 33.80,-116.30
with svm,
comparing at the same depth,
Somewhere by the water
Near westside with cvms5, internal GTL disabled,
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,svmgtl:svm -a d -Z 1000 -s 0 -e 800 -o cvms5_cross_svmgtl_Z1.png
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); }