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

📄 modslave.c

📁 su 的源代码库
💻 C
📖 第 1 页 / 共 4 页
字号:
	    auxm3 = aux2.r * aux2.r - aux2.i * aux2.i;	    auxm4 = 2 * aux2.r * aux2.i;	    	    aux3.r = auxm1 + auxm3;	    aux3.i = auxm2 + auxm4;	    	    /* aux3 = 1. / aux3 */	    aux = aux3.r * aux3.r + aux3.i * aux3.i;	    aux3.r = aux3.r / aux;	    aux3.i = -aux3.i / aux;	    	    /* ambm * aux1 * aux3 */	    auxm1 = ambm.r * aux1.r - ambm.i * aux1.i;	    auxm2 = ambm.r * aux1.i + ambm.i * aux1.r;	    h[0][0].r = auxm1 * aux3.r - auxm2 * aux3.i;	    h[0][0].i = auxm1 * aux3.i + auxm2 * aux3.r;	    	    /* aux2 * aux3 */	    auxm1 = aux2.r * aux3.r - aux2.i * aux3.i;	    auxm2 = aux2.r * aux3.i + aux2.i * aux3.r;	    	    /* bm * aux2 * aux3 */	    h[0][1].r = auxm1 * bm.r - auxm2 * bm.i;	    h[0][1].i = auxm1 * bm.i + auxm2 * bm.r;	    	    /* am * aux2 * aux3 */	    h[1][0].r = auxm1 * am.r - auxm2 * am.i;	    h[1][0].i = auxm1 * am.i + auxm2 * am.r;	    	    h[1][1].r = -h[0][0].r;	    h[1][1].i = -h[0][0].i;	    	    /* computing phase shift (that's the matrix G in Muller's */	    /* paper eq. (87) */	    /* exp(j * am * wC * (-zs)) */	    auxm1 = zs * (- amI.r * wC.r + amI.i * wC.i);	    auxm2 = -zs * (amI.r * wC.i + amI.i * wC.r);	    g[0].r = exp(auxm1) * cos(auxm2);	    g[0].i = exp(auxm1) * sin(auxm2);	    	    /* exp(j * bm * wC * (-zs)) */	    auxm1 = zs * (- bmI.r * wC.r + bmI.i * wC.i);	    auxm2 = -zs * (bmI.r * wC.i + bmI.i * wC.r);	    g[1].r = exp(auxm1) * cos(auxm2);	    g[1].i = exp(auxm1) * sin(auxm2);	    	    /* computing the product I - R-R+ */	    auxm1 = rm[0][0].r * rp[0][0].r - rm[0][0].i * rp[0][0].i;	    auxm2 = rm[0][0].r * rp[0][0].i + rm[0][0].i * rp[0][0].r;	    auxm3 = rm[0][1].r * rp[1][0].r - rm[0][1].i * rp[1][0].i;	    auxm4 = rm[0][1].r * rp[1][0].i + rm[0][1].i * rp[1][0].r;	    irr[0][0].r = 1 - (auxm1 + auxm3);	    irr[0][0].i = - (auxm2 + auxm4);	    	    auxm1 = rm[0][0].r * rp[0][1].r - rm[0][0].i * rp[0][1].i;	    auxm2 = rm[0][0].r * rp[0][1].i + rm[0][0].i * rp[0][1].r;	    auxm3 = rm[0][1].r * rp[1][1].r - rm[0][1].i * rp[1][1].i;	    auxm4 = rm[0][1].r * rp[1][1].i + rm[0][1].i * rp[1][1].r;	    irr[0][1].r = - (auxm1 + auxm3);	    irr[0][1].i = - (auxm2 + auxm4);	    	    auxm1 = rm[1][0].r * rp[0][0].r - rm[1][0].i * rp[0][0].i;	    auxm2 = rm[1][0].r * rp[0][0].i + rm[1][0].i * rp[0][0].r;	    auxm3 = rm[1][1].r * rp[1][0].r - rm[1][1].i * rp[1][0].i;	    auxm4 = rm[1][1].r * rp[1][0].i + rm[1][1].i * rp[1][0].r;	    irr[1][0].r = - (auxm1 + auxm3);	    irr[1][0].i = - (auxm2 + auxm4);	    	    auxm1 = rm[1][0].r * rp[0][1].r - rm[1][0].i * rp[0][1].i;	    auxm2 = rm[1][0].r * rp[0][1].i + rm[1][0].i * rp[0][1].r;	    auxm3 = rm[1][1].r * rp[1][1].r - rm[1][1].i * rp[1][1].i;	    auxm4 = rm[1][1].r * rp[1][1].i + rm[1][1].i * rp[1][1].r;	    irr[1][1].r = 1 - (auxm1 + auxm3);	    irr[1][1].i = - (auxm2 + auxm4);	    	    /* inverting irr explicitly */	    auxm1 = irr[0][0].r * irr[1][1].r - irr[0][0].i * irr[1][1].i;	    auxm2 = irr[0][0].r * irr[1][1].i + irr[0][0].i * irr[1][1].r;	    auxm3 = irr[0][1].r * irr[1][0].r - irr[0][1].i * irr[1][0].i;	    auxm4 = irr[0][1].r * irr[1][0].i + irr[0][1].i * irr[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;	    	    /* Inverse of irr */	    irrI[0][0].r = irr[1][1].r * aux1.r - irr[1][1].i * aux1.i;	    irrI[0][0].i = irr[1][1].r * aux1.i + irr[1][1].i * aux1.r;	    	    irrI[0][1].r = -(irr[0][1].r * aux1.r - irr[0][1].i * aux1.i);	    irrI[0][1].i = -(irr[0][1].r * aux1.i + irr[0][1].i * aux1.r);	    	    irrI[1][0].r = -(irr[1][0].r * aux1.r - irr[1][0].i * aux1.i);	    irrI[1][0].i = -(irr[1][0].r * aux1.i + irr[1][0].i * aux1.r);	    	    irrI[1][1].r = irr[0][0].r * aux1.r - irr[0][0].i * aux1.i;	    irrI[1][1].i = irr[0][0].r * aux1.i + irr[0][0].i * aux1.r;	    	    /* computing vectors V1,2, check eq (76) Muller's paper */	    auxm1 = As1.r * rm[0][0].r - As1.i * rm[0][0].i;	    auxm2 = As1.r * rm[0][0].i + As1.i * rm[0][0].r;	    auxm3 = Cs1.r * rm[0][1].r - Cs1.i * rm[0][1].i;	    auxm4 = Cs1.r * rm[0][1].i + Cs1.i * rm[0][1].r;	    aux1.r = Bs1.r + (auxm1 + auxm3);	    aux1.i = Bs1.i + (auxm2 + auxm4);	    	    auxm1 = As1.r * rm[1][0].r - As1.i * rm[1][0].i;	    auxm2 = As1.r * rm[1][0].i + As1.i * rm[1][0].r;	    auxm3 = Cs1.r * rm[1][1].r - Cs1.i * rm[1][1].i;	    auxm4 = Cs1.r * rm[1][1].i + Cs1.i * rm[1][1].r;	    aux2.r = Ds1.r + (auxm1 + auxm3);	    aux2.i = Ds1.i + (auxm2 + auxm4);	    	    auxm1 = aux1.r * irrI[0][0].r - aux1.i * irrI[0][0].i;	    auxm2 = aux1.r * irrI[0][0].i + aux1.i * irrI[0][0].r;	    auxm3 = aux2.r * irrI[0][1].r - aux2.i * irrI[0][1].i;	    auxm4 = aux2.r * irrI[0][1].i + aux2.i * irrI[0][1].r;	    v1[0].r = auxm1 + auxm3;	    v1[0].i = auxm2 + auxm4;	    	    auxm1 = aux1.r * irrI[1][0].r - aux1.i * irrI[1][0].i;	    auxm2 = aux1.r * irrI[1][0].i + aux1.i * irrI[1][0].r;	    auxm3 = aux2.r * irrI[1][1].r - aux2.i * irrI[1][1].i;	    auxm4 = aux2.r * irrI[1][1].i + aux2.i * irrI[1][1].r;	    v1[1].r = auxm1 + auxm3;	    v1[1].i = auxm2 + auxm4;	    	    auxm1 = As2.r * rm[0][0].r - As2.i * rm[0][0].i;	    auxm2 = As2.r * rm[0][0].i + As2.i * rm[0][0].r;	    auxm3 = Cs2.r * rm[0][1].r - Cs2.i * rm[0][1].i;	    auxm4 = Cs2.r * rm[0][1].i + Cs2.i * rm[0][1].r;	    aux1.r = Bs2.r + (auxm1 + auxm3);	    aux1.i = Bs2.i + (auxm2 + auxm4);	    auxm1 = As2.r * rm[1][0].r - As2.i * rm[1][0].i;	    auxm2 = As2.r * rm[1][0].i + As2.i * rm[1][0].r;	    auxm3 = Cs2.r * rm[1][1].r - Cs2.i * rm[1][1].i;	    auxm4 = Cs2.r * rm[1][1].i + Cs2.i * rm[1][1].r;	    aux2.r = Ds2.r + (auxm1 + auxm3);	    aux2.i = Ds2.i + (auxm2 + auxm4);	    	    auxm1 = aux1.r * irrI[0][0].r - aux1.i * irrI[0][0].i;	    auxm2 = aux1.r * irrI[0][0].i + aux1.i * irrI[0][0].r;	    auxm3 = aux2.r * irrI[0][1].r - aux2.i * irrI[0][1].i;	    auxm4 = aux2.r * irrI[0][1].i + aux2.i * irrI[0][1].r;	    v2[0].r = auxm1 + auxm3;	    v2[0].i = auxm2 + auxm4;	    	    auxm1 = aux1.r * irrI[1][0].r - aux1.i * irrI[1][0].i;	    auxm2 = aux1.r * irrI[1][0].i + aux1.i * irrI[1][0].r;	    auxm3 = aux2.r * irrI[1][1].r - aux2.i * irrI[1][1].i;	    auxm4 = aux2.r * irrI[1][1].i + aux2.i * irrI[1][1].r;	    v2[1].r = auxm1 + auxm3;	    v2[1].i = auxm2 + auxm4;	    /* applying phase-shift */	    aux = v1[0].r * g[0].r - v1[0].i * g[0].i;	    v1[0].i = v1[0].r * g[0].i + v1[0].i * g[0].r;	    v1[0].r = aux;	    	    aux = v1[1].r * g[1].r - v1[1].i * g[1].i;	    v1[1].i = v1[1].r * g[1].i + v1[1].i * g[1].r;	    v1[1].r = aux;	    	    aux = v2[0].r * g[0].r - v2[0].i * g[0].i;	    v2[0].i = v2[0].r * g[0].i + v2[0].i * g[0].r;	    v2[0].r = aux;	    	    aux = v2[1].r * g[1].r - v2[1].i * g[1].i;	    v2[1].i = v2[1].r * g[1].i + v2[1].i * g[1].r;	    v2[1].r = aux;	    	    /* multiplication by matrix h */	    auxm1 = h[0][0].r * v1[0].r - h[0][0].i * v1[0].i;	    auxm2 = h[0][0].r * v1[0].i + h[0][0].i * v1[0].r;	    auxm3 = h[0][1].r * v1[1].r - h[0][1].i * v1[1].i;	    auxm4 = h[0][1].r * v1[1].i + h[0][1].i * v1[1].r;	    v1A = v1[0];              /* for future use */	    v1[0].r = auxm1 + auxm3;	    v1[0].i = auxm2 + auxm4;	    	    auxm1 = h[0][0].r * v2[0].r - h[0][0].i * v2[0].i;	    auxm2 = h[0][0].r * v2[0].i + h[0][0].i * v2[0].r;	    auxm3 = h[0][1].r * v2[1].r - h[0][1].i * v2[1].i;	    auxm4 = h[0][1].r * v2[1].i + h[0][1].i * v2[1].r;	    v2A = v2[0];              /* for future use */	    v2[0].r = auxm1 + auxm3;	    v2[0].i = auxm2 + auxm4;	    	    auxm1 = h[1][0].r * v1A.r - h[1][0].i * v1A.i;	    auxm2 = h[1][0].r * v1A.i + h[1][0].i * v1A.r;	    auxm3 = h[1][1].r * v1[1].r - h[1][1].i * v1[1].i;	    auxm4 = h[1][1].r * v1[1].i + h[1][1].i * v1[1].r;	    v1[1].r = auxm1 + auxm3;	    v1[1].i = auxm2 + auxm4;	    	    auxm1 = h[1][0].r * v2A.r - h[1][0].i * v2A.i;	    auxm2 = h[1][0].r * v2A.i + h[1][0].i * v2A.r;	    auxm3 = h[1][1].r * v2[1].r - h[1][1].i * v2[1].i;	    auxm4 = h[1][1].r * v2[1].i + h[1][1].i * v2[1].r;	    v2[1].r = auxm1 + auxm3;	    v2[1].i = auxm2 + auxm4;	    	    /* loop over offsets for computing the displacements */	    for (iR = 0; iR < nR; iR++)	    {	       /* Bessel functions */	       arg = sqrt((uC.r * wC.r - uC.i * wC.i) * 			  (uC.r * wC.r - uC.i * wC.i) + 			  (wC.i * uC.r + uC.i * wC.r) * 			  (wC.i * uC.r + uC.i * wC.r)) * ABS(recArray[iR]);	       Bessels(arg);	       	       /* r component */	       aux1.r = -J11 * taper[iU] * v1[0].r;	       aux1.i = -J11 * taper[iU] * v1[0].i;	       	       aux11[iR].r += aux1.r + aux11Old[iR].r;	       aux11[iR].i += aux1.i + aux11Old[iR].i;	       aux11Old[iR] = aux1;	       	       aux1.r = J00 * taper[iU] * v2[0].r;	       aux1.i = J00 * taper[iU] * v2[0].i;	       	       aux21[iR].r += aux1.r + aux21Old[iR].r;	       aux21[iR].i += aux1.i + aux21Old[iR].i;	       aux21Old[iR] = aux1;	       	       /* z component */	       aux1.r = -v1[1].i;	       aux1.i = v1[1].r;	       	       aux1.r = J00 * taper[iU] * aux1.r;	       aux1.i = J00 * taper[iU] * aux1.i;	       	       aux12[iR].r += aux1.r + aux12Old[iR].r;	       aux12[iR].i += aux1.i + aux12Old[iR].i;	       aux12Old[iR] = aux1;		       	       aux1.r = -v2[1].i;	       aux1.i =  v2[1].r;	       	       aux1.r = J11 * taper[iU] * aux1.r;	       aux1.i = J11 * taper[iU] * aux1.i;	       	       aux22[iR].r += aux1.r + aux22Old[iR].r;	       aux22[iR].i += aux1.i + aux22Old[iR].i;	       aux22Old[iR] = aux1;	    }	 }	 dUCEp1.r = epslon1 * dUC.r;	 dUCEp1.i = epslon1 * dUC.i;	 dUCEp2.r = epslon2 * dUC.r;	 dUCEp2.i = epslon2 * dUC.i;	 	 /* loop over offsets */	 for (iR = 0; iR < nR; iR++)	 {	    	    /* displacements in the radial direction (frequency domain) */	    if (RADIAL)	    {	       /* there's a 2 (free surface) / 2 (trapezoidal integration) */	       /* simplified in the equation below */	       auxm1 = aux11[iR].r * dUCEp1.r - aux11[iR].i * dUCEp1.i;	       auxm2 = aux11[iR].r * dUCEp1.i + aux11[iR].i * dUCEp1.r;	       auxm3 = aux21[iR].r * dUCEp2.r - aux21[iR].i * dUCEp2.i;	       auxm4 = aux21[iR].r * dUCEp2.i + aux21[iR].i * dUCEp2.r;	    	       uW[iR][iF].r = (auxm1 + auxm3) * wCCte.r - 		  (auxm2 + auxm4) * wCCte.i;	       uW[iR][iF].i = (auxm1 + auxm3) * wCCte.i + 		  (auxm2 + auxm4) * wCCte.r;	       /* filtering */	       uW[iR][iF].r *= window[indexF] * SGN(recArray[iR]);	       uW[iR][iF].i *= window[indexF] * SGN(recArray[iR]);	    }	    if (VERTICAL)	    {	       /* displacements in the z direction (frequency domain) */	       /* there's a 2 (free surface) / 2 (trapezoidal integration) */	       /* simplified in the equation below */	       auxm1 = aux12[iR].r * dUCEp1.r - aux12[iR].i * dUCEp1.i;	       auxm2 = aux12[iR].r * dUCEp1.i + aux12[iR].i * dUCEp1.r;	       auxm3 = aux22[iR].r * dUCEp2.r - aux22[iR].i * dUCEp2.i;	       auxm4 = aux22[iR].r * dUCEp2.i + aux22[iR].i * dUCEp2.r;	       	       uW[iR][iF].r = (auxm1 + auxm3) * wCCte.r - 		  (auxm2 + auxm4) * wCCte.i;	       uW[iR][iF].i = (auxm1 + auxm3) * wCCte.i + 		  (auxm2 + auxm4) * wCCte.r;	    	       /* filtering */	       uW[iR][iF].r *= window[indexF];	       uW[iR][iF].i *= window[indexF];	       /* DD 	       fprintf(logInfo.fp_log, "iF %d fr %f fi %f window %f\n", 		       iF, uW[iR][iF].r,uW[iR][iF].i, window[indexF]);	       fflush(logInfo.fp_log);*/	    }	 }      }      /* sending frequency partition to the master process */      SendCplx(uW[0], nFreqProc * nR, masterId, FREQUENCY_PARTITION);            /* keep working ? */      masterId = RecvInt(&die, 1, -1, DIE);            if (verbose)      {	 fprintf(logInfo.fp_log, "Slave receiving flag to stop : %d\n", die);	 fflush(logInfo.fp_log);      }            if (die) break;   } while (FOREVER);   /* quitting PVM */   EndOfSlave();    }/*   Computing frequency-dependent slowness (squared) for all layer of the   model*/void horSlowness(){   /* declaration of variables */   int iL;                       /* counter */   float cteQp1, cteQp2;   float cteQs1, cteQs2;         /* constants used in absorption */   for(iL = 0; iL <= nL; iL++)   {      /* constants used in absorption */      cteQp1 = alpha[iL] / (PI * qP[iL]);      cteQp2 = alpha[iL] / (2 * qP[iL]);      cteQs1 = beta[iL] / (PI * qS[iL]);      cteQs2 = beta[iL] / (2 * qS[iL]);      /* p-wave slowness squared */      PSlowness[iL].r = alpha[iL] + cteQp1 * log(wCRwR);      PSlowness[iL].i = cteQp2 - cteQp1 * wCP;            /* 1. / (PSlowness[iL] * PSlowness[iL]) */      auxm1 = PSlowness[iL].r * PSlowness[iL].r;      auxm2 = PSlowness[iL].i * PSlowness[iL].i;      aux = (auxm1 + auxm2) * (auxm1 + auxm2); aux = 1 / aux;      auxm3 = (auxm1 - auxm2) * aux;      PSlowness[iL].i = -2 * PSlowness[iL].r * PSlowness[iL].i * aux;      PSlowness[iL].r = auxm3;      /* s-wave velocity */      auxm1 = beta[iL] + cteQs1 * log(wCRwR);      auxm2 = cteQs2 - cteQs1 * wCP;      /* S2Velocity[iL] * S2Velocity[iL] */      S2Velocity[iL].r = auxm1 * auxm1 - auxm2 * auxm2;      S2Velocity[iL].i = 2 * auxm1 * auxm2;      /* 1. / S2Velocity^2 */      aux = S2Velocity[iL].r * S2Velocity[iL].r + 	    S2Velocity[iL].i * S2Velocity[iL].i;      SSlowness[iL].r = S2Velocity[iL].r / aux;      SSlowness[iL].i = -S2Velocity[iL].i / aux;   }}/**/void Rm(){   /* declaration of variables */   int iL;                      /* layer index */                                /* used in absorption */   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].r - uuC.r;      auxm2 = PSlowness[iL].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].r - uuC.r;      auxm2 = SSlowness[iL].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 + -