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

📄 reflectivity.c

📁 su 的源代码库
💻 C
📖 第 1 页 / 共 3 页
字号:
   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) */   coeffD[0].r = auxm1 * dd.r - auxm2 * dd.i;   coeffD[0].i = auxm1 * dd.i + auxm2 * dd.r;                 /* Rpp */      auxm1 = a2b2.r * caux3.r - a2b2.i * caux3.i;   auxm2 = a2b2.r * caux3.i + a2b2.i * caux3.r;   coeffD[1].r = aux1aux2.r + auxm1;   coeffD[1].i = aux1aux2.i + auxm2;                          /* Rsp */  								    coeffD[2].r = coeffD[1].r;   coeffD[2].i = coeffD[1].i;                                 /* Rps*/     auxm3 = dpdb.r * uC2.r - dpdb.i * uC2.i;   auxm4 = dpdb.r * uC2.i + dpdb.i * uC2.r;      aux = auxm3 * coeffD[1].r - auxm4 * coeffD[1].i;   coeffD[1].i = auxm3 * coeffD[1].i + auxm4 * coeffD[1].r;   coeffD[1].r = aux;                                         /* Rsp */     auxm3 = -dpda.r * uC2.r + dpda.i * uC2.i;   auxm4 = -dpda.r * uC2.i - dpda.i * uC2.r;      aux = auxm3 * coeffD[2].r - auxm4 * coeffD[2].i;   coeffD[2].i = auxm3 * coeffD[2].i + auxm4 * coeffD[2].r;   coeffD[2].r = aux;                                         /* Rps */   auxm1 = d2d.r - d1d.r;   auxm2 = d2d.i - d1d.i;   auxm3 = 2 * rho1rho2 * (a1b2.r - a2b1.r);   auxm4 = 2 * rho1rho2 * (a1b2.i - a2b1.i);   coeffD[3].r = auxm1 - auxm3;   coeffD[3].i = auxm2 - auxm4;   aux = coeffD[3].r * dd.r - coeffD[3].i * dd.i;   coeffD[3].i = coeffD[3].r * dd.i + coeffD[3].i * dd.r;   coeffD[3].r = aux;                                         /* Rss */     /* 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;   coeffD[4].r = auxm1 - auxm3;        coeffD[4].i = auxm2 - auxm4;   aux = 2 * rho[i1] * (dpda.r * coeffD[4].r - dpda.i * coeffD[4].i);   coeffD[4].i = 2 * rho[i1] * (dpda.r * coeffD[4].i + dpda.i * coeffD[4].r);   coeffD[4].r = aux;                                         /* Tpp */   coeffD[5].r = aux1.r + a1b2.r * c.r - a1b2.i * c.i;   coeffD[5].i = aux1.i + a1b2.r * c.i + a1b2.i * c.r;   auxm1 = rho[i1] * (dpdb.r * uC2.r - dpdb.i * uC2.i);   auxm2 = rho[i1] * (dpdb.r * uC2.i + dpdb.i * uC2.r);   aux = coeffD[5].r * auxm1 - coeffD[5].i * auxm2;   coeffD[5].i = coeffD[5].r * auxm2 + coeffD[5].i * auxm1;   /* Tsp */   coeffD[5].r = aux;    coeffD[6].r = aux1.r + a2b1.r * c.r - a2b1.i * c.i;   coeffD[6].i = aux1.i + a2b1.r * c.i + a2b1.i * c.r;   auxm1 = -rho[i1] * (dpda.r * uC2.r - dpda.i * uC2.i);   auxm2 = -rho[i1] * (dpda.r * uC2.i + dpda.i * uC2.r);   aux = coeffD[6].r * auxm1 - coeffD[6].i * auxm2;   coeffD[6].i = coeffD[6].r * auxm2 + coeffD[6].i * auxm1;   /* Tsp */   coeffD[6].r = aux;   auxm1 = a1.r * aux2.r - a1.i * aux2.i;   auxm2 = a1.r * aux2.i + a1.i * aux2.r;   coeffD[7].r = auxm1 - (a2.r * aux3.r - a2.i * aux3.i);   coeffD[7].i = auxm2 - (a2.r * aux3.i + a2.i * aux3.r);        auxm3 = 2 * rho[i1] * dpdb.r;   auxm4 = 2 * rho[i1] * dpdb.i;   aux = coeffD[7].r * auxm3 - coeffD[7].i * auxm4;   coeffD[7].i = coeffD[7].r * auxm4 + coeffD[7].i * auxm3;   /* Tss */   coeffD[7].r = aux;}/*                                                              *//*  Function Rm()                                               *//*                                                              *//*  Computing reflectivity matrices for a given model at a      *//*  specific slowness and temporal frequency                    *//*                                                              *//*  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:                                          *//*  rm.....................the reflectivity matrix              *//*                                              Wences Gouveia  *//*                                              September 1995  */void Rm(){   /* declaration of variables */   int iL;                      /* counter */   complex aux1;                /* auxiliar quantities */   complex am, amI, bm, bmI;    /* vertical slownesses for P and S waves */                                /* amI = am * I, bmI = bm * I */   complex wThick;              /* wC * thickness */   complex E[2][2];             /* phase-shift matrix */   complex mT[2][2];            /* reflectivity matrix at top of layer */   complex mTtD[2][2];          /* mt * tD */   complex tUinv[2][2];         /* tU * inv */   complex mB[2][2];            /* reflectivity matrix at bottom of layer */   complex rD[2][2], tD[2][2];  /* reflec. and transm. coefficients for */                                /* downgoing waves */   complex rU[2][2], tU[2][2];  /* reflec. and transm. coefficients for */                                /* upgoing waves */   complex mAux[2][2];          /* auxiliar matrix */   complex inv[2][2];           /* inv = (I - mT * rU)^-1 */      /* initializing the reflectivity matrix at the bottom of half space */   mT[0][0] = zeroC; mT[0][1] = zeroC;   mT[1][0] = zeroC; mT[1][1] = zeroC;      /* initializing the reflectivity matrix at the bottom */   /* of layer nL - 1 */   RTd(nL - 1, nL);   mB[0][0] = coeffD[0]; mB[0][1] = coeffD[1];    mB[1][0] = coeffD[2]; mB[1][1] = coeffD[3];   /* main loop over the nL layers */   for (iL = nL - 1; iL >= 1; iL--)   {      /* square-root of PSlowness^2 - uuC */          auxm1 = PSlowness[iL][0].r - uuC.r;      auxm2 = PSlowness[iL][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[iL][0].r - uuC.r;      auxm2 = SSlowness[iL][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;      /* computing phase-shift matrix */      wThick.r = wC.r * (-2 * thick[iL]);      wThick.i = wC.i * (-2 * thick[iL]);      /* 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;      /* bottom-layer matrix - need a sequence of Ref and TRANS coeff. */      RTd(iL - 1, iL);      rD[0][0] = coeffD[0]; rD[0][1] = coeffD[1];       rD[1][0] = coeffD[2]; rD[1][1] = coeffD[3];            tD[0][0] = coeffD[4]; tD[0][1] = coeffD[5];       tD[1][0] = coeffD[6]; tD[1][1] = coeffD[7];      /* computing mT * tD */      mTtD[0][0].r = mT[0][0].r * tD[0][0].r - mT[0][0].i * tD[0][0].i	           + mT[0][1].r * tD[1][0].r - mT[0][1].i * tD[1][0].i;      mTtD[0][0].i = mT[0][0].r * tD[0][0].i + mT[0][0].i * tD[0][0].r	           + mT[0][1].r * tD[1][0].i + mT[0][1].i * tD[1][0].r;      mTtD[0][1].r = mT[0][0].r * tD[0][1].r - mT[0][0].i * tD[0][1].i	           + mT[0][1].r * tD[1][1].r - mT[0][1].i * tD[1][1].i;      mTtD[0][1].i = mT[0][0].r * tD[0][1].i + mT[0][0].i * tD[0][1].r	           + mT[0][1].r * tD[1][1].i + mT[0][1].i * tD[1][1].r;      mTtD[1][0].r = mT[1][0].r * tD[0][0].r - mT[1][0].i * tD[0][0].i                   + mT[1][1].r * tD[1][0].r - mT[1][1].i * tD[1][0].i;      mTtD[1][0].i = mT[1][0].r * tD[0][0].i + mT[1][0].i * tD[0][0].r      	           + mT[1][1].r * tD[1][0].i + mT[1][1].i * tD[1][0].r;      mTtD[1][1].r = mT[1][0].r * tD[0][1].r - mT[1][0].i * tD[0][1].i      	           + mT[1][1].r * tD[1][1].r - mT[1][1].i * tD[1][1].i;      mTtD[1][1].i = mT[1][0].r * tD[0][1].i + mT[1][0].i * tD[0][1].r      	           + mT[1][1].r * tD[1][1].i + mT[1][1].i * tD[1][1].r;      RTu(iL - 1, iL);      rU[0][0] = coeffU[0]; rU[0][1] = coeffU[1];       rU[1][0] = coeffU[2]; rU[1][1] = coeffU[3];            tU[0][0] = coeffU[4]; tU[0][1] = coeffU[5];       tU[1][0] = coeffU[6]; tU[1][1] = coeffU[7];      /* inv = (I - mT * rU)^-1 */      auxm1 = mT[0][0].r * rU[0][0].r - mT[0][0].i * rU[0][0].i;      auxm2 = mT[0][0].r * rU[0][0].i + mT[0][0].i * rU[0][0].r;      auxm3 = mT[0][1].r * rU[1][0].r - mT[0][1].i * rU[1][0].i;      auxm4 = mT[0][1].r * rU[1][0].i + mT[0][1].i * rU[1][0].r;      mAux[0][0].r = 1 - (auxm1 + auxm3);      mAux[0][0].i = - (auxm2 + auxm4);      auxm1 = mT[0][0].r * rU[0][1].r - mT[0][0].i * rU[0][1].i;      auxm2 = mT[0][0].r * rU[0][1].i + mT[0][0].i * rU[0][1].r;      auxm3 = mT[0][1].r * rU[1][1].r - mT[0][1].i * rU[1][1].i;      auxm4 = mT[0][1].r * rU[1][1].i + mT[0][1].i * rU[1][1].r;      mAux[0][1].r = - (auxm1 + auxm3);      mAux[0][1].i = - (auxm2 + auxm4);      auxm1 = mT[1][0].r * rU[0][0].r - mT[1][0].i * rU[0][0].i;      auxm2 = mT[1][0].r * rU[0][0].i + mT[1][0].i * rU[0][0].r;      auxm3 = mT[1][1].r * rU[1][0].r - mT[1][1].i * rU[1][0].i;      auxm4 = mT[1][1].r * rU[1][0].i + mT[1][1].i * rU[1][0].r;      mAux[1][0].r = - (auxm1 + auxm3);      mAux[1][0].i = - (auxm2 + auxm4);      auxm1 = mT[1][0].r * rU[0][1].r - mT[1][0].i * rU[0][1].i;      auxm2 = mT[1][0].r * rU[0][1].i + mT[1][0].i * rU[0][1].r;      auxm3 = mT[1][1].r * rU[1][1].r - mT[1][1].i * rU[1][1].i;      auxm4 = mT[1][1].r * rU[1][1].i + mT[1][1].i * rU[1][1].r;      mAux[1][1].r = 1 - (auxm1 + auxm3);      mAux[1][1].i = - (auxm2 + auxm4);      /* inverting */      auxm1 = mAux[0][0].r * mAux[1][1].r - mAux[0][0].i * mAux[1][1].i;      auxm2 = mAux[0][0].r * mAux[1][1].i + mAux[0][0].i * mAux[1][1].r;      auxm3 = mAux[0][1].r * mAux[1][0].r - mAux[0][1].i * mAux[1][0].i;      auxm4 = mAux[0][1].r * mAux[1][0].i + mAux[0][1].i * mAux[1][0].r;      aux1.r = auxm1 - auxm3;      aux1.i = auxm2 - auxm4;      /* 1 / aux1 */      aux = aux1.r * aux1.r + aux1.i * aux1.i;      aux1.r = aux1.r / aux;      aux1.i = -aux1.i / aux;      inv[0][0].r = mAux[1][1].r * aux1.r - mAux[1][1].i * aux1.i;      inv[0][0].i = mAux[1][1].r * aux1.i + mAux[1][1].i * aux1.r;      inv[0][1].r = -1 * (mAux[0][1].r * aux1.r - mAux[0][1].i * aux1.i);      inv[0][1].i = -1 * (mAux[0][1].r * aux1.i + mAux[0][1].i * aux1.r);      inv[1][0].r = -1 * (mAux[1][0].r * aux1.r - mAux[1][0].i * aux1.i);      inv[1][0].i = -1 * (mAux[1][0].r * aux1.i + mAux[1][0].i * aux1.r);      inv[1][1].r = mAux[0][0].r * aux1.r - mAux[0][0].i * aux1.i;      inv[1][1].i = mAux[0][0].r * aux1.i + mAux[0][0].i * aux1.r;            /* computing tU * inv */      tUinv[0][0].r = tU[0][0].r * inv[0][0].r - tU[0][0].i * inv[0][0].i  	            + tU[0][1].r * inv[1][0].r - tU[0][1].i * inv[1][0].i;      tUinv[0][0].i = tU[0][0].r * inv[0][0].i + tU[0][0].i * inv[0][0].r	            + tU[0][1].r * inv[1][0].i + tU[0][1].i * inv[1][0].r;      tUinv[0][1].r = tU[0][0].r * inv[0][1].r - tU[0][0].i * inv[0][1].i	            + tU[0][1].r * inv[1][1].r - tU[0][1].i * inv[1][1].i;      tUinv[0][1].i = tU[0][0].r * inv[0][1].i + tU[0][0].i * inv[0][1].r	            + tU[0][1].r * inv[1][1].i + tU[0][1].i * inv[1][1].r;      tUinv[1][0].r = tU[1][0].r * inv[0][0].r - tU[1][0].i * inv[0][0].i                    + tU[1][1].r * inv[1][0].r - tU[1][1].i * inv[1][0].i;      tUinv[1][0].i = tU[1][0].r * inv[0][0].i + tU[1][0].i * inv[0][0].r      	            + tU[1][1].r * inv[1][0].i + tU[1][1].i * inv[1][0].r;      tUinv[1][1].r = tU[1][0].r * inv[0][1].r - tU[1][0].i * inv[0][1].i      	            + tU[1][1].r * inv[1][1].r - tU[1][1].i * inv[1][1].i;      tUinv[1][1].i = tU[1][0].r * inv[0][1].i + tU[1][0].i * inv[0][1].r      	            + tU[1][1].r * inv[1][1].i + tU[1][1].i * inv[1][1].r;            /* finally the matrix */      auxm1 = mTtD[0][0].r * tUinv[0][0].r - mTtD[0][0].i * tUinv[0][0].i;      auxm2 = mTtD[0][0].r * tUinv[0][0].i + mTtD[0][0].i * tUinv[0][0].r;      auxm3 = mTtD[1][0].r * tUinv[0][1].r - mTtD[1][0].i * tUinv[0][1].i;      auxm4 = mTtD[1][0].r * tUinv[0][1].i + mTtD[1][0].i * tUinv[0][1].r;      mB[0][0].r = rD[0][0].r + (auxm1 + auxm3);      mB[0][0].i = rD[0][0].i + (auxm2 + auxm4);      auxm1 = mTtD[0][1].r * tUinv[0][0].r - mTtD[0][1].i * tUinv[0][0].i;      auxm2 = mTtD[0][1].r * tUinv[0][0].i + mTtD[0][1].i * tUinv[0][0].r;      auxm3 = mTtD[1][1].r * tUinv[0][1].r - mTtD[1][1].i * tUinv[0][1].i;      auxm4 = mTtD[1][1].r * tUinv[0][1].i + mTtD[1][1].i * tUinv[0][1].r;      mB[0][1].r = rD[0][1].r + (auxm1 + auxm3);      mB[0][1].i = rD[0][1].i + (auxm2 + auxm4);      auxm1 = mTtD[0][0].r * tUinv[1][0].r - mTtD[0][0].i * tUinv[1][0].i;      auxm2 = mTtD[0][0].r * tUinv[1][0].i + mTtD[0][0].i * tUinv[1][0].r;      auxm3 = mTtD[1][0].r * tUinv[1][1].r - mTtD[1][0].i * tUinv[1][1].i;      auxm4 = mTtD[1][0].r * tUinv[1][1].i + mTtD[1][0].i * tUinv[1][1].r;      mB[1][0].r = rD[1][0].r + (auxm1 + auxm3);      mB[1][0].i = rD[1][0].i + (auxm2 + auxm4);      auxm1 = mTtD[0][1].r * tUinv[1][0].r - mTtD[0][1].i * tUinv[1][0].i;      auxm2 = mTtD[0][1].r * tUinv[1][0].i + mTtD[0][1].i * tUinv[1][0].r;      auxm3 = mTtD[1][1].r * tUinv[1][1].r - mTtD[1][1].i * tUinv[1][1].i;      auxm4 = mTtD[1][1].r * tUinv[1][1].i + mTtD[1][1].i * tUinv[1][1].r;      mB[1][1].r = rD[1][1].r + (auxm1 + auxm3);      mB[1][1].i = rD[1][1].i + (auxm2 + auxm4);   }   /* computing final phase-shift matrix */   /* square-root of Pslowness^2 - 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;   

⌨️ 快捷键说明

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