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

📄 frechet.c

📁 su 的源代码库
💻 C
📖 第 1 页 / 共 5 页
字号:
      a2b2.i = a2.r * b2.i + a2.i * b2.r;      a1a2b1b2.r = a1b1.r * a2b2.r - a1b1.i * a2b2.i;      a1a2b1b2.i = a1b1.r * a2b2.i + a1b1.i * a2b2.r;            /* computing D factors */         auxm1 = aux3.r * aux3.r - aux3.i * aux3.i;      auxm2 = 2 * aux3.r * aux3.i;      auxm3 = a2b2.r * auxm1 - a2b2.i * auxm2;      auxm4 = a2b2.r * auxm2 + a2b2.i * auxm1;      d1d.r = auxm3 + a2b1.r * rho1rho2;      d1d.i = auxm4 + a2b1.i * rho1rho2;            auxm1 = aux1.r * aux1.r - aux1.i * aux1.i;      auxm2 = 2 * aux1.r * aux1.i;      auxm3 = auxm1 * uuC.r - auxm2 * uuC.i;      auxm4 = auxm1 * uuC.i + auxm2 * uuC.r;      d1d.r += auxm3;      d1d.i += auxm4;            auxm1 = aux2.r * aux2.r - aux2.i * aux2.i;      auxm2 = 2 * aux2.r * aux2.i;      auxm3 = a1b1.r * auxm1 - a1b1.i * auxm2;      auxm4 = a1b1.r * auxm2 + a1b1.i * auxm1;      d2d.r = auxm3 + a1b2.r * rho1rho2;      d2d.i = auxm4 + a1b2.i * rho1rho2;            auxm1 = c.r * cuu.r - c.i * cuu.i;      auxm2 = c.r * cuu.i + c.i * cuu.r;      auxm3 = a1a2b1b2.r * auxm1 - a1a2b1b2.i * auxm2;      auxm4 = a1a2b1b2.r * auxm2 + a1a2b1b2.i * auxm1;      d2d.r += auxm3;      d2d.i += auxm4;            /* more auxiliar quantities */      /* d1d + d2d */      dd.r = d1d.r + d2d.r;      dd.i = d1d.i + d2d.i;            /* 1 / dd */      aux = dd.r * dd.r + dd.i * dd.i;      dd.r = dd.r / aux;      dd.i = -dd.i / aux;            dpda.r = a1.r * dd.r - a1.i * dd.i;      dpda.i = a1.r * dd.i + a1.i * dd.r;      dpdb.r = b1.r * dd.r - b1.i * dd.i;      dpdb.i = b1.r * dd.i + b1.i * dd.r;            /* computing the coefficients - first reflection */      auxm1 = d2d.r - d1d.r;      auxm2 = d2d.i - d1d.i;      /* (d2d - d1d) / (d1d + d2d) */      coeffDFr[iDer][0].r = auxm1 * dd.r - auxm2 * dd.i;      coeffDFr[iDer][0].i = auxm1 * dd.i + auxm2 * dd.r;     /* Rpp */      /* computing the derivative */      coeffDFr[iDer][0].r = (coeffDFr[iDer][0].r - coeffD[0].r) / DIV;      coeffDFr[iDer][0].i = (coeffDFr[iDer][0].i - coeffD[0].i) / DIV;            auxm1 = a2b2.r * caux3.r - a2b2.i * caux3.i;      auxm2 = a2b2.r * caux3.i + a2b2.i * caux3.r;      coeffDFr[iDer][1].r = aux1aux2.r + auxm1;      coeffDFr[iDer][1].i = aux1aux2.i + auxm2;              /* Rsp */              coeffDFr[iDer][2].r = coeffDFr[iDer][1].r;      coeffDFr[iDer][2].i = coeffDFr[iDer][1].i;             /* Rps */           auxm3 = dpdb.r * uC2.r - dpdb.i * uC2.i;      auxm4 = dpdb.r * uC2.i + dpdb.i * uC2.r;            aux = auxm3 * coeffDFr[iDer][1].r - auxm4 * coeffDFr[iDer][1].i;      coeffDFr[iDer][1].i = auxm3 * coeffDFr[iDer][1].i + 	                    auxm4 * coeffDFr[iDer][1].r;      coeffDFr[iDer][1].r = aux;                             /* Rsp */         /* computing the derivative */      coeffDFr[iDer][1].r = (coeffDFr[iDer][1].r - coeffD[1].r) / DIV;      coeffDFr[iDer][1].i = (coeffDFr[iDer][1].i - coeffD[1].i) / DIV;            auxm3 = -dpda.r * uC2.r + dpda.i * uC2.i;      auxm4 = -dpda.r * uC2.i - dpda.i * uC2.r;            aux = auxm3 * coeffDFr[iDer][2].r - auxm4 * coeffDFr[iDer][2].i;      coeffDFr[iDer][2].i = auxm3 * coeffDFr[iDer][2].i + 	                    auxm4 * coeffDFr[iDer][2].r;      coeffDFr[iDer][2].r = aux;                             /* Rps */            /* computing the derivative */      coeffDFr[iDer][2].r = (coeffDFr[iDer][2].r - coeffD[2].r) / DIV;      coeffDFr[iDer][2].i = (coeffDFr[iDer][2].i - coeffD[2].i) / DIV;      auxm1 = d2d.r - d1d.r;      auxm2 = d2d.i - d1d.i;      auxm3 = 2 * rho1rho2 * (a1b2.r - a2b1.r);      auxm4 = 2 * rho1rho2 * (a1b2.i - a2b1.i);            coeffDFr[iDer][3].r = auxm1 - auxm3;      coeffDFr[iDer][3].i = auxm2 - auxm4;      aux = coeffDFr[iDer][3].r * dd.r - coeffDFr[iDer][3].i * dd.i;      coeffDFr[iDer][3].i = coeffDFr[iDer][3].r * dd.i + 	                    coeffDFr[iDer][3].i * dd.r;      coeffDFr[iDer][3].r = aux;                           /* Rss */         /* computing the derivative */      coeffDFr[iDer][3].r = (coeffDFr[iDer][3].r - coeffD[3].r) / DIV;      coeffDFr[iDer][3].i = (coeffDFr[iDer][3].i - coeffD[3].i) / DIV;         /* now transmition */      auxm1 = b1.r * aux2.r - b1.i * aux2.i;      auxm2 = b1.r * aux2.i + b1.i * aux2.r;      auxm3 = b2.r * aux3.r - b2.i * aux3.i;      auxm4 = b2.r * aux3.i + b2.i * aux3.r;      coeffDFr[iDer][4].r = auxm1 - auxm3;           coeffDFr[iDer][4].i = auxm2 - auxm4;      aux = 2 * rho1 * (dpda.r * coeffDFr[iDer][4].r - 			dpda.i * coeffDFr[iDer][4].i);      coeffDFr[iDer][4].i = 2 * rho1 * (dpda.r * coeffDFr[iDer][4].i + 					dpda.i * coeffDFr[iDer][4].r);      coeffDFr[iDer][4].r = aux;                             /* Tpp */            /* computing the derivative */      coeffDFr[iDer][4].r = (coeffDFr[iDer][4].r - coeffD[4].r) / DIV;      coeffDFr[iDer][4].i = (coeffDFr[iDer][4].i - coeffD[4].i) / DIV;            coeffDFr[iDer][5].r = aux1.r + a1b2.r * c.r - a1b2.i * c.i;      coeffDFr[iDer][5].i = aux1.i + a1b2.r * c.i + a1b2.i * c.r;      auxm1 = rho1 * (dpdb.r * uC2.r - dpdb.i * uC2.i);      auxm2 = rho1 * (dpdb.r * uC2.i + dpdb.i * uC2.r);      aux = coeffDFr[iDer][5].r * auxm1 - coeffDFr[iDer][5].i * auxm2;      coeffDFr[iDer][5].i = coeffDFr[iDer][5].r * auxm2 + 	                    coeffDFr[iDer][5].i * auxm1;         coeffDFr[iDer][5].r = aux;                             /* Tsp */            /* computing the derivative */      coeffDFr[iDer][5].r = (coeffDFr[iDer][5].r - coeffD[5].r) / DIV;      coeffDFr[iDer][5].i = (coeffDFr[iDer][5].i - coeffD[5].i) / DIV;            coeffDFr[iDer][6].r = aux1.r + a2b1.r * c.r - a2b1.i * c.i;      coeffDFr[iDer][6].i = aux1.i + a2b1.r * c.i + a2b1.i * c.r;      auxm1 = -rho1 * (dpda.r * uC2.r - dpda.i * uC2.i);      auxm2 = -rho1 * (dpda.r * uC2.i + dpda.i * uC2.r);      aux = coeffDFr[iDer][6].r * auxm1 - coeffDFr[iDer][6].i * auxm2;      coeffDFr[iDer][6].i = coeffDFr[iDer][6].r * auxm2 + 	                    coeffDFr[iDer][6].i * auxm1;        coeffDFr[iDer][6].r = aux;                             /* Tsp */            /* computing the derivative */      coeffDFr[iDer][6].r = (coeffDFr[iDer][6].r - coeffD[6].r) / DIV;      coeffDFr[iDer][6].i = (coeffDFr[iDer][6].i - coeffD[6].i) / DIV;            auxm1 = a1.r * aux2.r - a1.i * aux2.i;      auxm2 = a1.r * aux2.i + a1.i * aux2.r;      coeffDFr[iDer][7].r = auxm1 - (a2.r * aux3.r - a2.i * aux3.i);      coeffDFr[iDer][7].i = auxm2 - (a2.r * aux3.i + a2.i * aux3.r);           auxm3 = 2 * rho1 * dpdb.r;      auxm4 = 2 * rho1 * dpdb.i;      aux = coeffDFr[iDer][7].r * auxm3 - coeffDFr[iDer][7].i * auxm4;      coeffDFr[iDer][7].i = coeffDFr[iDer][7].r * auxm4 + 	                    coeffDFr[iDer][7].i * auxm3;       coeffDFr[iDer][7].r = aux;                             /* Tss */            /* computing the derivative */      coeffDFr[iDer][7].r = (coeffDFr[iDer][7].r - coeffD[7].r) / DIV;      coeffDFr[iDer][7].i = (coeffDFr[iDer][7].i - coeffD[7].i) / DIV;   }   /* restoring */   vpFrechet = vpF;   vsFrechet = vsF;   rhoFrechet = rhoF;}/*                                                              *//*  Function frechetRTu()                                       *//*                                                              *//*  Numerical computation of the derivatives of the             *//*  reflection and transmission coefficients of upgoing         *//*  incident waves with respect to the model parameters         *//*                                                              *//*  Input parameters:                                           *//*  i1.....................points to the first layer            *//*  i2.....................points to the second layer           *//*  iF.....................indicates if te derivatives are with *//*                         respect to the first or second layer *//*                                                              *//*  Output parameters:                                          *//*  coeffUFr...............Derivatives of the elastic           *//*                         reflection coefficients with respect *//*                         to Vp, Vs and rho                    *//*                                              Wences Gouveia  *//*                                              September 1995  */void frechetRTu(int i1, int i2, int iF){   /* declaration of variables */   int iDer;                       /* counter */   float rho1=0, rho2=0;           /* densities */   float rho1rho2;                 /* rho1 * rho2 */   float DIV=0;                    /* derivative denominator */   complex aux1, aux2, aux3, c;       complex cuu, caux2, aux1aux3;   /* auxiliar quantities */   complex a1, a2, b1, b2;         /* all vertical slownesses */   complex a1b1, a1b2, a2b1, a2b2; /* auxiliar quantities */   complex a1a2b1b2;               /* auxiliar quantities */   complex d1u, d2u;               /* auxiliar quantities */   complex dpda, dpdb;             /* auxiliar quantities */   complex PSlow1, PSlow2;         /* P-wave slownesses */   complex SSlow1, SSlow2;         /* S-wave slownesses */   complex S2Vel1, S2Vel2;         /* S-wave velocities */   /* iDer indicates what parameter is active */   /* bookkeeping the parameters */   vpF = vpFrechet;   vsF = vsFrechet;   rhoF = rhoFrechet;   for (iDer = 0; iDer < numberPar; iDer++)   {      /* vp -> vs -> rho, if all active */      if (vpFrechet)      {	 SSlow1 = SSlowness[i1][0];	 SSlow2 = SSlowness[i2][0];	 S2Vel1 = S2Velocity[i1][0];	 S2Vel2 = S2Velocity[i2][0];	 rho1 = rho[i1];	 rho2 = rho[i2];	 if (iF == i1)	 {	    PSlow1 = PSlowness[i1][1];	    PSlow2 = PSlowness[i2][0];	    DIV = (FACTOR - 1.) * alpha[i1];	 }	 else if (iF == i2)	 {	    PSlow1 = PSlowness[i1][0];	    PSlow2 = PSlowness[i2][1];	    DIV = (FACTOR - 1.) * alpha[i2];	 }	 vpFrechet = 0;      }      else if (vsFrechet)      {	 PSlow1 = PSlowness[i1][0];	 PSlow2 = PSlowness[i2][0];	 rho1 = rho[i1];	 rho2 = rho[i2];	 if (iF == i1)	 {	    SSlow1 = SSlowness[i1][1];	    SSlow2 = SSlowness[i2][0];	    S2Vel1 = S2Velocity[i1][1];	    S2Vel2 = S2Velocity[i2][0];	    DIV = (FACTOR - 1.) * beta[i1];	 }	 else if (iF == i2)	 {	    SSlow1 = SSlowness[i1][0];	    SSlow2 = SSlowness[i2][1];	    S2Vel1 = S2Velocity[i1][0];	    S2Vel2 = S2Velocity[i2][1];	    DIV = (FACTOR - 1.) * beta[i2];	 }	 vsFrechet = 0;      }      else if (rhoFrechet)      {	 PSlow1 = PSlowness[i1][0];	 PSlow2 = PSlowness[i2][0];	 SSlow1 = SSlowness[i1][0];	 SSlow2 = SSlowness[i2][0];	 S2Vel1 = S2Velocity[i1][0];	 S2Vel2 = S2Velocity[i2][0];	 	 if (iF == i1)	 {	    rho1 = FACTOR * rho[i1];	    rho2 = rho[i2];	    DIV = (FACTOR - 1.) * rho[i1];	 }	 else if (iF == i2)	 {	    rho1 = rho[i1];	    rho2 = FACTOR * rho[i2];	    DIV = (FACTOR - 1.) * rho[i2];	 }	 rhoFrechet = 0;      }            /* square-root of PSlowness^2 - uuC */          auxm1 = PSlow1.r - uuC.r;      auxm2 = PSlow1.i - uuC.i;      auxm3 = sqrt(auxm1 * auxm1 + auxm2 * auxm2);      auxm3 = sqrt(auxm3);      angle = atan2(auxm2, auxm1) / 2;      a1.r = auxm3 * cos(angle);      a1.i = auxm3 * sin(angle);            /* square-root of SSlowness^2 - uuC */          auxm1 = SSlow1.r - uuC.r;      auxm2 = SSlow1.i - uuC.i;      auxm3 = sqrt(auxm1 * auxm1 + auxm2 * auxm2);      auxm3 = sqrt(auxm3);      angle = atan2(auxm2, auxm1) / 2;      b1.r = auxm3 * cos(angle);      b1.i = auxm3 * sin(angle);            /* square-root of PSlowness^2 - uuC */          auxm1 = PSlow2.r - uuC.r;      auxm2 = PSlow2.i - uuC.i;      auxm3 = sqrt(auxm1 * auxm1 + auxm2 * auxm2);      auxm3 = sqrt(auxm3);      angle = atan2(auxm2, auxm1) / 2;      a2.r = auxm3 * cos(angle);      a2.i = auxm3 * sin(angle);            /* square-root of SSlowness^2 - uuC */          auxm1 = SSlow2.r - uuC.r;      auxm2 = SSlow2.i - uuC.i;      auxm3 = sqrt(auxm1 * auxm1 + auxm2 * auxm2);      auxm3 = sqrt(auxm3);      angle = atan2(auxm2, auxm1) / 2;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -