📄 reflectivity.c
字号:
/* computing phase-shift matrix */ wThick.r = wC.r * (-2 * thick[0]); wThick.i = wC.i * (-2 * thick[0]); /* cexp (amI * wThick) */ auxm1 = amI.r * wThick.r - amI.i * wThick.i; auxm2 = amI.r * wThick.i + amI.i * wThick.r; E[0][0].r = exp(auxm1) * cos(auxm2); E[0][0].i = exp(auxm1) * sin(auxm2); /* cexp((amI + bmI) * (wThick * .5)) */ auxm1 = amI.r + bmI.r; auxm2 = amI.i + bmI.i; auxm3 = .5 * (auxm1 * wThick.r - auxm2 * wThick.i); auxm4 = .5 * (auxm1 * wThick.i + auxm2 * wThick.r); E[0][1].r = exp(auxm3) * cos(auxm4); E[0][1].i = exp(auxm3) * sin(auxm4); E[1][0] = E[0][1]; /* cexp (bmI * wThick) */ auxm1 = bmI.r * wThick.r - bmI.i * wThick.i; auxm2 = bmI.r * wThick.i + bmI.i * wThick.r; E[1][1].r = exp(auxm1) * cos(auxm2); E[1][1].i = exp(auxm1) * sin(auxm2); /* applying phase-shift */ mT[0][0].r = mB[0][0].r * E[0][0].r - mB[0][0].i * E[0][0].i; mT[0][0].i = mB[0][0].r * E[0][0].i + mB[0][0].i * E[0][0].r; mT[0][1].r = mB[0][1].r * E[0][1].r - mB[0][1].i * E[0][1].i; mT[0][1].i = mB[0][1].r * E[0][1].i + mB[0][1].i * E[0][1].r; mT[1][0].r = mB[1][0].r * E[1][0].r - mB[1][0].i * E[1][0].i; mT[1][0].i = mB[1][0].r * E[1][0].i + mB[1][0].i * E[1][0].r; mT[1][1].r = mB[1][1].r * E[1][1].r - mB[1][1].i * E[1][1].i; mT[1][1].i = mB[1][1].r * E[1][1].i + mB[1][1].i * E[1][1].r; /* copying to matrix rm */ rm[0][0] = mT[0][0]; rm[0][1] = mT[0][1]; rm[1][0] = mT[1][0]; rm[1][1] = mT[1][1];}/* *//* Function Rp() *//* *//* Computing the response from the free surface *//* *//* Input parameters: *//* alpha..................p-wave velocities of the model *//* global variable *//* beta...................s-wave velocities of the model *//* global variable *//* rho....................densities of the elastic model *//* global variable *//* thick..................thicknesses of the model *//* global variable *//* wC.....................complex frequency *//* global variable *//* uC.....................complex slowness *//* global variable *//* *//* Output parameters: *//* rp.....................response from the free surface *//* *//* Wences Gouveia *//* September 1995 */void Rp(){ /* declaration of variables */ complex aux1, aux12; /* auxiliar variables */ complex wThick; /* auxiliar variable */ complex E[2][2]; /* phase shift matrix */ complex am, bm; /* vertical slownesses for P and S waves */ complex amI, bmI; /* amI = I * am, bmI = I * bm */ complex ambm; /* = am * bm */ complex ambm4uu; /* = 4 * am * bm * uC * uC */ complex den; /* denominator of coefficients */ /* square-root of PSlowness - uuC */ auxm1 = PSlowness[0][0].r - uuC.r; auxm2 = PSlowness[0][0].i - uuC.i; auxm3 = sqrt(auxm1 * auxm1 + auxm2 * auxm2); auxm3 = sqrt(auxm3); angle = atan2(auxm2, auxm1) / 2; am.r = auxm3 * cos(angle); am.i = auxm3 * sin(angle); /* am * I */ amI.r = -am.i; amI.i = am.r; /* square-root of SSlowness^2 - uuC */ auxm1 = SSlowness[0][0].r - uuC.r; auxm2 = SSlowness[0][0].i - uuC.i; auxm3 = sqrt(auxm1 * auxm1 + auxm2 * auxm2); auxm3 = sqrt(auxm3); angle = atan2(auxm2, auxm1) / 2; bm.r = auxm3 * cos(angle); bm.i = auxm3 * sin(angle); /* bm * I */ bmI.r = -bm.i; bmI.i = bm.r; aux1.r = SSlowness[0][0].r - uuC2.r; aux1.i = SSlowness[0][0].i - uuC2.i; aux12.r = aux1.r * aux1.r - aux1.i * aux1.i; aux12.i = 2 * aux1.r * aux1.i; /* let ambm = am * bm */ ambm.r = am.r * bm.r - am.i * bm.i; ambm.i = am.r * bm.i + am.i * bm.r; /* and ambm4uu = am * bm * 4 * uu */ ambm4uu.r = 4 * (ambm.r * uuC.r - ambm.i * uuC.i); ambm4uu.i = 4 * (ambm.r * uuC.i + ambm.i * uuC.r); den.r = aux12.r + ambm4uu.r; den.i = aux12.i + ambm4uu.i; /* 1/ den */ aux = den.r * den.r + den.i * den.i; den.r = den.r / aux; den.i = -den.i / aux; auxm1 = ambm4uu.r - aux12.r; auxm2 = ambm4uu.i - aux12.i; rp[0][0].r = auxm1 * den.r - auxm2 * den.i; rp[0][0].i = auxm1 * den.i + auxm2 * den.r; /* Rpp */ auxm1 = bm.r * aux1.r - bm.i * aux1.i; auxm2 = bm.r * aux1.i + bm.i * aux1.r; auxm3 = 4 * (auxm1 * uC.r - auxm2 * uC.i); auxm4 = 4 * (auxm1 * uC.i + auxm2 * uC.r); rp[0][1].r = den.r * auxm3 - den.i * auxm4; rp[0][1].i = den.r * auxm4 + den.i * auxm3; /* Rsp */ auxm1 = am.r * aux1.r - am.i * aux1.i; auxm2 = am.r * aux1.i + am.i * aux1.r; auxm3 = -4 * (auxm1 * uC.r - auxm2 * uC.i); auxm4 = -4 * (auxm1 * uC.i + auxm2 * uC.r); rp[1][0].r = den.r * auxm3 - den.i * auxm4; rp[1][0].i = den.r * auxm4 + den.i * auxm3; /* Rsp */ rp[1][1].r = -rp[0][0].r; rp[1][1].i = -rp[0][0].i; /* Rss */ /* computing phase-shift matrix */ wThick.r = wC.r * (-2 * zs); wThick.i = wC.i * (-2 * zs); /* cexp (amI * wThick) */ auxm1 = amI.r * wThick.r - amI.i * wThick.i; auxm2 = amI.r * wThick.i + amI.i * wThick.r; E[0][0].r = exp(auxm1) * cos(auxm2); E[0][0].i = exp(auxm1) * sin(auxm2); /* cexp((amI + bmI) * (wThick * .5)) */ auxm1 = amI.r + bmI.r; auxm2 = amI.i + bmI.i; auxm3 = .5 * (auxm1 * wThick.r - auxm2 * wThick.i); auxm4 = .5 * (auxm1 * wThick.i + auxm2 * wThick.r); E[0][1].r = exp(auxm3) * cos(auxm4); E[0][1].i = exp(auxm3) * sin(auxm4); E[1][0] = E[0][1]; /* cexp (bmI * wThick) */ auxm1 = bmI.r * wThick.r - bmI.i * wThick.i; auxm2 = bmI.r * wThick.i + bmI.i * wThick.r; E[1][1].r = exp(auxm1) * cos(auxm2); E[1][1].i = exp(auxm1) * sin(auxm2); /* applying phase-shift */ aux = rp[0][0].r * E[0][0].r - rp[0][0].i * E[0][0].i; rp[0][0].i = rp[0][0].r * E[0][0].i + rp[0][0].i * E[0][0].r; rp[0][0].r = aux; aux = rp[0][1].r * E[0][1].r - rp[0][1].i * E[0][1].i; rp[0][1].i = rp[0][1].r * E[0][1].i + rp[0][1].i * E[0][1].r; rp[0][1].r = aux; aux = rp[1][0].r * E[1][0].r - rp[1][0].i * E[1][0].i; rp[1][0].i = rp[1][0].r * E[1][0].i + rp[1][0].i * E[1][0].r; rp[1][0].r = aux; aux = rp[1][1].r * E[1][1].r - rp[1][1].i * E[1][1].i; rp[1][1].i = rp[1][1].r * E[1][1].i + rp[1][1].i * E[1][1].r; rp[1][1].r = aux;}/* *//* Function horSlowness() *//* *//* Computing the following parameters used in the *//* reflectivity computation: *//* *//* 1) P-wave slowness squared *//* 2) S-wave slowness squared *//* 3) S-wave velocity squared *//* ...for all layers *//* *//* Input parameters: *//* alpha..................p-wave velocities of the model *//* global variable *//* beta...................s-wave velocities of the model *//* global variable *//* rho....................densities of the elastic model *//* global variable *//* thick..................thicknesses of the model *//* global variable *//* wC.....................complex frequency *//* global variable *//* uC.....................complex slowness *//* global variable *//* *//* Output parameters: *//* PSlowness[0][nL].......p-wave slowness squared *//* SSlowness[0][nL].......s-wave slowness squared *//* S2Velocity[0][nL]......s-wave velocity squared *//* *//* Wences Gouveia *//* September 1995 */void horSlowness(){ /* declaration of variables */ int iL; /* counters */ float cteQp1, cteQp2; float cteQs1, cteQs2; /* constants used in absorption */ float a, b; /* p and s-wave velocities */ for(iL = 0; iL <= nL; iL++) { a = alpha[iL]; b = beta[iL]; /* constants used in absorption */ cteQp1 = a / (PI * qP[iL]); cteQp2 = a / (2 * qP[iL]); cteQs1 = b / (PI * qS[iL]); cteQs2 = b / (2 * qS[iL]); /* p-wave slowness squared */ PSlowness[iL][0].r = a + cteQp1 * log(wCRwR); PSlowness[iL][0].i = cteQp2 - cteQp1 * wCP; /* 1. / (PSlowness[iL] * PSlowness[iL]) */ auxm1 = PSlowness[iL][0].r * PSlowness[iL][0].r; auxm2 = PSlowness[iL][0].i * PSlowness[iL][0].i; aux = (auxm1 + auxm2) * (auxm1 + auxm2); aux = 1 / aux; auxm3 = (auxm1 - auxm2) * aux; PSlowness[iL][0].i = -2 * PSlowness[iL][0].r * PSlowness[iL][0].i * aux; PSlowness[iL][0].r = auxm3; /* s-wave velocity */ auxm1 = b + cteQs1 * log(wCRwR); auxm2 = cteQs2 - cteQs1 * wCP; /* S2Velocity[iL] * S2Velocity[iL] */ S2Velocity[iL][0].r = auxm1 * auxm1 - auxm2 * auxm2; S2Velocity[iL][0].i = 2 * auxm1 * auxm2; /* 1. / S2Velocity^2 */ aux = S2Velocity[iL][0].r * S2Velocity[iL][0].r + S2Velocity[iL][0].i * S2Velocity[iL][0].i; SSlowness[iL][0].r = S2Velocity[iL][0].r / aux; SSlowness[iL][0].i = -S2Velocity[iL][0].i / aux; }}/* *//* Function Bessels() *//* *//* Computing Bessel functions order 1 and 0 for a given *//* real argument *//* *//* Input parameters: *//* arg....................argument for bessel functions *//* *//* Output parameters: *//* J00....................bessel function order 0 evaluated *//* at arg (global variable) *//* J11....................bessel function order 1 evaluated *//* at arg (global variable) *//* Wences Gouveia *//* September 1995 */void Bessels(float x){ register float xd3, x2, x4, x6, x8, x10, x12, sqrx; if (x <= 2.75) { xd3 = x / 3; x2 = xd3 * xd3; x4 = x2 * x2; x6 = x2 * x4; x8 = x4 * x4; x10 = x4 * x6; x12 = x6 * x6; J00 = 1.-2.2499997*x2+1.2656208*x4 -0.3163866*x6+0.0444479*x8 -0.0039444*x10+0.00021*x12; J11 = (0.5-0.56249985*x2+0.21093573*x4 -0.03954289*x6+0.00443319*x8 -0.00031761*x10+0.00001109*x12)*x; } else { sqrx = sqrt(2. / (PI * x)); J00 = sqrx * cos(x - 0.25 * PI); J11 = sqrx * cos(x - 0.75 * PI); }}/* *//* Function filter() *//* *//* Computes a windowing operator for the frequency domain *//* tp avoid shar edges *//* *//* Input parameters: *//* arg....................argument for bessel functions *//* nSamples...............number of samples per trace *//* global *//* percW..................percentage of filtering *//* *//* Output parameters: *//* window.................array with window coefficients *//* global *//* *//* Wences Gouveia *//* September 1995 */void filter(float percW){ /* declaration of variables */ int i, iF, indexF; /* counters */ int wL; /* window length */ /* memory allocation */ window = alloc1float(nSamples); /* reseting array */ for (i = 0; i < nSamples / 2 + 1; i++) window[i] = 0; wL = percW * nF; wL = 2 * wL - 1; /* building hanning window */ for (i = 0, indexF = NINT(f1 / dF), iF = 0; iF < nF; iF++, indexF++) { if (hanningFlag) window[indexF] = .42 - .5 * cos(2 * PI * (float) iF / ((float) (nF - 1))) + .08 * cos(4 * PI * (float) iF / ((float) (nF - 1))); else { window[indexF] = 1; if (iF < (wL - 1) / 2) { window[indexF] = .42 - .5 * cos(2 * PI * (float) i / ((float) (wL - 1))) + .08 * cos(4 * PI * (float) i / ((float) (wL - 1))); i++; } else if (iF > nF - (wL - 1) / 2) { i++; window[indexF] = .42 - .5 * cos(2 * PI * (float) i / ((float) (wL - 1))) + .08 * cos(4 * PI * (float) i / ((float) (wL - 1))); } } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -