⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 reflectivity.c

📁 su 的源代码库
💻 C
📖 第 1 页 / 共 3 页
字号:
   /* 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 + -