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

📄 lincoeff.c

📁 su 的源代码库
💻 C
📖 第 1 页 / 共 5 页
字号:
						 delta2_1*sin2a_k -						 delta1_2*cos2a -						 delta1_1*sin2a);  CS3 = -alpha*beta/(pow(alpha,2)-pow(beta,2))*(delta1_1*sin2a + 						delta1_2*cos2a -						delta1_3*cos2a*sin2a -						eps1_2*(cos2a*cos2a+2*cos2a*sin2a) -						eps1_1*sin2a*sin2a +						eps2_2*(cos2a_k*cos2a_k+2*sin2a_k*cos2a_k) +						eps2_1*sin2a_k*sin2a_k -						delta2_1*sin2a_k -						delta2_2*cos2a_k +						delta2_3*cos2a_k*sin2a_k);     /*    S3_C = pow(beta,2)/pow(alpha,2)*Dr_r +    pow(beta,2)/(2*(pow(alpha,2)-pow(beta,2)))*(delta1_1*sin2a +						delta1_2*cos2a -						delta2_1*sin2a_k -						delta2_2*cos2a_k) +    pow(alpha,2)/(pow(alpha,2)-pow(beta,2))*(delta1_1*sin2a +					     delta1_2*cos2a -					     delta1_3*cos2a*sin2a -					     eps1_1*sin2a*sin2a -					     eps1_2*(cos2a*cos2a+2*cos2a*sin2a) +					     eps2_1*sin2a_k*sin2a_k +					     eps2_2*(cos2a_k*cos2a_k+2*sin2a_k*cos2a_k) -					     delta2_1*sin2a_k -					     delta2_2*cos2a_k +					     delta2_3*cos2a_k*sin2a_k) +    2*pow(beta/alpha,2)*(gamma2_55*cos2a_k +			 gamma2_44*sin2a_k -			 gamma1_55*cos2a -			 gamma1_44*sin2a + Db_b);     ************* for DG_G insted of Dr_R + 2Db_b:  */     S3_C = pow(beta,2)/pow(alpha,2)*DG_G +    pow(beta,2)/(2*(pow(alpha,2)-pow(beta,2)))*(delta1_1*sin2a +						delta1_2*cos2a -						delta2_1*sin2a_k -						delta2_2*cos2a_k) +    pow(alpha,2)/(pow(alpha,2)-pow(beta,2))*(delta1_1*sin2a +					     delta1_2*cos2a -					     delta1_3*cos2a*sin2a -					     eps1_1*sin2a*sin2a -					     eps1_2*(cos2a*cos2a+2*cos2a*sin2a) +					     eps2_1*sin2a_k*sin2a_k +					     eps2_2*(cos2a_k*cos2a_k+2*sin2a_k*cos2a_k) -					     delta2_1*sin2a_k -					     delta2_2*cos2a_k +					     delta2_3*cos2a_k*sin2a_k) +    2*pow(beta/alpha,2)*(gamma2_55*cos2a_k +			 gamma2_44*sin2a_k -			 gamma1_55*cos2a -			 gamma1_44*sin2a);      S5_C = -pow(beta,2)/(pow(alpha,2)-pow(beta,2))*(delta1_1*sin2a +						  delta1_2*cos2a -						  delta1_3*cos2a*sin2a -						  eps1_1*sin2a*sin2a -						  eps1_2*(cos2a*cos2a+2*cos2a*sin2a) +						  eps2_1*sin2a_k*sin2a_k +						  eps2_2*(cos2a_k*cos2a_k+2*sin2a_k*cos2a_k) -						  delta2_1*sin2a_k -						  delta2_2*cos2a_k +						  delta2_3*cos2a_k*sin2a_k);    S = pow(alpha,2)/(4*(pow(alpha,2)-pow(beta,2)))*((delta2_2-delta2_1)*sin(2*(azim-kappa)) +						   (delta1_1-delta1_2)*sin(2*azim));  CS_C = alpha*beta/(4*(pow(alpha,2)-pow(beta,2)))*((delta2_1-delta2_2)*sin(2*(azim-kappa)) +						    (delta1_2-delta1_1)*sin(2*azim)) +    beta/alpha*((gamma2_44-gamma2_55)*sin(2*(azim-kappa)) -		(gamma1_44-gamma1_55)*sin(2*azim));    CS3_C = alpha*beta/(2*(pow(alpha,2)-pow(beta,2)))*((delta1_1-delta1_2-delta1_3*(cos2a-sin2a) +						      2*(eps1_2-eps1_1)*sin2a)*sin(azim)*cos(azim) -						     (delta2_1-delta2_2-delta2_3*(cos2a_k-sin2a_k) +						      2*(eps2_2-eps2_1)*sin2a_k)*sin(azim-kappa)*cos(azim-kappa));    S3 = pow(alpha,2)/(2*(pow(alpha,2)-pow(beta,2)))*((-delta1_1+delta1_2+delta1_3*(cos2a-sin2a) -					       2*(eps1_2-eps1_1)*sin2a)*sin(azim)*cos(azim) +					      (delta2_1-delta2_2-delta2_3*(cos2a_k-sin2a_k) +					       2*(eps2_2-eps2_1)*sin2a_k)*sin(azim-kappa)*cos(azim-kappa));  *sv= CS * cos(ang) * sin(ang)    + S_C * sin(ang)    + CS3 * cos(ang)*pow(sin(ang),3)    + (S3_C + S_C*0.5*pow(beta/alpha,2)) * pow(sin(ang),3)    + (S5_C + S3_C*0.5*pow(beta/alpha,2)) * pow(sin(ang),5)    + S5_C*0.5*pow(beta/alpha,2) * pow(sin(ang),7);    *sh= S * sin(ang)    + CS_C * cos(ang)*sin(ang)    + (CS3_C + CS_C*0.5*pow(beta/alpha,2)) * cos(ang)*pow(sin(ang),3)    + S3 * pow(sin(ang),3)    + CS3_C*0.5*pow(beta/alpha,2) * cos(ang)*pow(sin(ang),5);      /*  fprintf(stderr,"vp=%f vs=%f \n",alpha,beta);   fprintf(stderr,"ang=%f azim=%f k=%f sv=%f S=%f CSCj=%f S3=%f S3CCj=%f \n",ang*180/PI,azim*180/PI,kappa*180/PI,*sv,S,CS_C,S3,CS3_C);        fprintf(stderr,"ang=%f azim=%f k=%f sv=%f CS=%f SCj=%f CS3=%f S3Cj=%f S5Cj=%f \n",ang*180/PI,azim*180/PI,kappa*180/PI,*sv,CS,S_C,CS3,S3_C,S5_C);    */  /*    fprintf(stderr,"IN_ANG=%f AZIM=%f Da=%f \t Dr=%f \t Db=%f \t a/b=%f \n",ang*180./PI,azim*180./PI,Da_a,Dr_r,Db_b,beta/alpha);   */    /* finnaly, complete the Rps1, Rps2 */    /*  fprintf(stderr,"ang=%f azim=%f S3/S1=%f \n",ang*180/PI,azim*180/PI,(CS3+S3_C+S_C*0.5*pow(beta/alpha,2)-0.5*CS)/(CS+S_C));     */  *rps1 = (*sv)*(*cphi) + (*sh)*(*sphi);  *rps2 = -(*sv)*(*sphi) + (*sh)*(*cphi);    return(err);}/******************************//*******    the end   *********//******************************/int P_err_2nd_order(ErrorFlag *rp_1st, ErrorFlag *rp_2nd, float true_kappa, int index)     /* The subroutine evaluates first order (exactly) and second order (approximately)	Rpp coefficients for a given incidence angle and azimuths. The second order evaluation	is based on the numerical modeling and comparing of the exact Rpp and its first order 	approximation (so called semi-2nd order). The comparison has been done for the incidence 	angle of 30 deg and it should be most accurate for this angle. However, such an estimated 	semi-2nd order Rpp usually resulted in a global increase of accuracy of the first-order Rpp, 	so the subroutine can be used for other angles, as a rough error estimate, as well.	INPUT:	true_kappa ... mutual rotation of the upper and lower halfspaces in rad. This angle affects	               the global error evaluation only.	index ... =1, =2: if the true_kappa=0, then the subroutine should be called just once		          with index=1. If the true_kappa is not zero, then the		          subroutine needs to be called the second time (index=2) in		          order to properly evaluate the GLOBAL error. No other values of			  the "index" parameter are allowed. If some other value is on the			  entry, the subroutine is terminated immediately with the value -1.	err_ang ... as #define. The incidence angle for which the error analysis is	                        performed. Not recommended to change the current value of				30deg by a large ammount.	lkappa, kkappa ... in declaration. Two azimuths for which the global error is evaluated	                                   besides 0deg and 90deg; their values can be changed arbitrary, 					   but do not forget to change your output information as well 					   (i.e. give proper azimuths for the output file corresponding to					   *rp_1st(2nd).global[2],[3]).	OUTPUT:	*rp_1st ... ErrorFlag structure: contains information on first-order	            Rpp reflection coefficient evaluated for the purpose of		    error analysis.	*rp_2nd ... ErrorFlag structure: contains information on semi 	            second-order Rpp reflection coefficient evaluated for 		    the purpose of error analysis.         	struct ErrorFlag	         {		    float iso[5];      ... isotropic part of Rpp for 5 different inc. angles	            float upper[2];    ... ANISO/ISO Rpp for azimuths 0deg and 90 deg - upper hsp contribution	            float lower[2];    ... ISO/ANISO Rpp for azimuths 0deg and 90 deg - lower hsp contribution	            float global[4];   ... ANISO/ANISO Rpp for azimuths 0deg and 90 deg - global model	            float angle[4];    ... inc. angle, two azimuths and kappa for which the quantities		                           above are evaluated	          },  	 where           iso[0]-iso[4] ... isotropic part of Rpp for the following inc. angles (due to velocity	                   and density contrasts): 15deg, 20deg, 25deg, 30deg and 35deg. 		 	   If a change is required, seek the paragraph "ISO part" in this subroutine.        upper[0],upper[1] ... Rpp coefficients for azimuths 0deg and 90deg, respectively, computed                              for the ANISO/ISO configuration of the halfspaces.        lower[0],lower[1] ... Rpp coefficients for azimuths 0deg and 90deg, respectively, computed                              for the ISO/ANISO configuration of the halfspaces.        global[0]-[3] ... Rpp coefficients for ANISO/ANISO configuration evaluated in the following                          azimuths, respectively: 0deg, 90deg, lkappa, kkappa.        angle[0]-[3] ... inc. angle (err_ang), 0deg, 90deg, kappa.      P_err_2nd_order = 0 ... usual termination                      =-1 ... unusual termination (wrong input)            */{  extern float vp1,vp2,vs1,vs2,rho1,rho2;  extern float eps1_1,eps1_2,delta1_1,delta1_2,delta1_3,gamma1_44;  extern float eps2_1,eps2_2,delta2_1,delta2_2,delta2_3,gamma2_44;    float Da_a, Dz_z, DG_G, Db_b, Dr_r, alpha, beta, azim;  float Delta1_1, Delta1_2, Delta2_1, Delta2_2, Gamma1_44, Gamma2_44;    float D1_1, D1_2, D2_1, D2_2, GS_1, GS_2;  float ISO_2nd;  float d11_plus=0., d11_min=0., d12_plus=0., d12_min=0., gs1_plus=0., gs1_min=0.;  float d21_plus=0., d21_min=0., d22_plus=0., d22_min=0., gs2_plus=0., gs2_min=0.;  float a_plus=0., a_min=0, b_plus=0., b_min=0., r_plus=0., r_min=0. ;  float Fst0_0, Fst0_90, Fst90_0, Fst90_90, FstK_0, FstK_90, FstKK_0, FstKK_90;  float Fst0_kappa, Fst90_kappa, FstK_kappa, FstKK_kappa;  float Snd0_0, Snd0_90, Snd90_0, Snd90_90, SndK_0, SndK_90, SndKK_0, SndKK_90;  float Snd0_kappa, Snd90_kappa, SndK_kappa, SndKK_kappa;    float err_kappa=0.0, lkappa= 30.*PI/180, kkappa= 60.*PI/180, D;    int N=0;        float P_term(float Da_a, float Dz_z, float DG_G, 	       float Delta1_1, float Delta1_2, float Delta1_3,	       float Delta2_1, float Delta2_2, float Delta2_3,  	       float Eps1_1, float Eps1_2, float Eps2_1, float Eps2_2, 	       float Gamma1_44, float Gamma2_44, float alpha, float beta, 	       float ang, float azim, float a_k);  float Iso_exact(int type, float vp1, float vs1, float rho1, 		  float vp2, float vs2, float rho2, float ang);        /* some useful quantities in advance */  Da_a=(vp2-vp1)/(0.5*(vp2+vp1));  Db_b=(vs2-vs1)/(0.5*(vs2+vs1));  Dz_z=(vp2*rho2 - vp1*rho1)/(vp2*rho2 + vp1*rho1);  DG_G=(pow(vs2,2)*rho2-pow(vs1,2)*rho1)/(0.5*(pow(vs2,2)*rho2+pow(vs1,2)*rho1));  Dr_r=(rho2-rho1)/(0.5*(rho2+rho1));  alpha=0.5*(vp2+vp1);  beta=0.5*(vs2+vs1);      if(index == 1) err_kappa=0.;  if(index == 2) err_kappa=PI/2.;  if((index != 1) && (index != 2)) return(-1);  if(delta1_1) d11_plus=(fabs(delta1_1)+delta1_1)/(2*fabs(delta1_1));    if(delta1_1) d11_min=(fabs(delta1_1)-delta1_1)/(2*fabs(delta1_1));  if(delta1_2) d12_plus=(fabs(delta1_2)+delta1_2)/(2*fabs(delta1_2));  if(delta1_2) d12_min=(fabs(delta1_2)-delta1_2)/(2*fabs(delta1_2));  if(gamma1_44) gs1_plus=(fabs(gamma1_44)+gamma1_44)/(2*fabs(gamma1_44));  if(gamma1_44) gs1_min=(fabs(gamma1_44)-gamma1_44)/(2*fabs(gamma1_44));  if(delta2_1) d21_plus=(fabs(delta2_1)+delta2_1)/(2*fabs(delta2_1));    if(delta2_1) d21_min=(fabs(delta2_1)-delta2_1)/(2*fabs(delta2_1));  if(delta2_2) d22_plus=(fabs(delta2_2)+delta2_2)/(2*fabs(delta2_2));  if(delta2_2) d22_min=(fabs(delta2_2)-delta2_2)/(2*fabs(delta2_2));  if(gamma2_44) gs2_plus=(fabs(gamma2_44)+gamma2_44)/(2*fabs(gamma2_44));  if(gamma2_44) gs2_min=(fabs(gamma2_44)-gamma2_44)/(2*fabs(gamma2_44));  if(Da_a) a_plus=(fabs(Da_a)+Da_a)/(2*fabs(Da_a));  if(Da_a) a_min=(fabs(Da_a)-Da_a)/(2*fabs(Da_a));  if(Db_b) b_plus=(fabs(Db_b)+Db_b)/(2*fabs(Db_b));  if(Db_b) b_min=(fabs(Db_b)-Db_b)/(2*fabs(Db_b));  if(Dr_r) r_plus=(fabs(Dr_r)+Dr_r)/(2*fabs(Dr_r));  if(Dr_r) r_min=(fabs(Dr_r)-Dr_r)/(2*fabs(Dr_r));  /* the angles used for the anisotropic accuracy evaluation */  (*rp_1st).angle[0]=(*rp_2nd).angle[0] = err_ang;        /* incidence angle */  (*rp_1st).angle[1]=(*rp_2nd).angle[1] = 0.*PI/180;      /* first azimuth */  (*rp_1st).angle[2]=(*rp_2nd).angle[2] = 90.*PI/180;     /* second azimuth */   (*rp_1st).angle[3]=(*rp_2nd).angle[3] = true_kappa;      /* kappa */  /* ISO part first */    for(N = 0; N < 5; N++)    {      (*rp_1st).iso[N]=P_term(Da_a, Dz_z, DG_G, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 			      0., 0., alpha, beta, (15+5*N)*PI/180, 0., 0.);      (*rp_2nd).iso[N]=Iso_exact(0, vp1, vs1, rho1, vp2, vs2, rho2, (15+5*N)*PI/180);    }  /* get the ISO semi-2nd order for the inc. angle err_ang */  ISO_2nd = Iso_exact(0, vp1, vs1, rho1, vp2, vs2, rho2, err_ang) -             P_term(Da_a, Dz_z, DG_G, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 		   0., 0., alpha, beta, err_ang, 0., 0.);  /* UPPER halfspace contribution */  Delta1_1=(-0.45*d11_plus  -0.50*d11_min)*pow(delta1_1,2) +     (-0.22*d11_plus*gs1_plus+0*d11_plus*gs1_min-0.93*d11_min*gs1_plus-0.33*d11_min*gs1_min)*delta1_1*gamma1_44 +     (0.74*d11_plus*a_plus + 0.59*d11_plus*a_min + 2.56*d11_min*a_plus + 0.31*d11_min*a_min)*delta1_1*Da_a +     (0.19*d11_plus*b_plus + 0*d11_plus*b_min + 1.27*d11_min*b_plus + 0.31*d11_min*b_min)*delta1_1*Db_b +     (0*d11_plus*r_plus + 0.18*d11_plus*r_min + 1.27*d11_min*r_plus + 0.95*d11_min*r_min)*delta1_1*Dr_r;  D1_1=Delta1_1;    Delta1_2=(-0.45*d12_plus -0.50*d12_min)*pow(delta1_2,2) +    (0.74*d12_plus*a_plus + 0.59*d12_plus*a_min + 2.56*d12_min*a_plus + 0.31*d12_min*a_min)*delta1_2*Da_a +     (0.19*d12_plus*b_plus + 0*d12_plus*b_min + 1.27*d12_min*b_plus + 0.31*d12_min*b_min)*delta1_2*Db_b +     (0*d12_plus*r_plus + 0.18*d12_plus*r_min + 1.27*d12_min*r_plus + 0.95*d12_min*r_min)*delta1_2*Dr_r;							    D1_2=Delta1_2;    Delta2_1=0.;  Delta2_2=0.;  Gamma1_44=((1./3.)*gs1_plus + 0.55*gs1_min)*pow(gamma1_44,2) +    (0.92*gs1_plus*a_plus + 0.9*gs1_plus*a_min + 1.27*gs1_min*a_plus + 0.98*gs1_min*a_min)*gamma1_44*Da_a +    (-1.74*gs1_plus*b_plus -2.1*gs1_plus*b_min -1.84*gs1_min*b_plus -1.91*gs1_min*b_min)*gamma1_44*Db_b +    (-1.02*gs1_plus*r_plus -1.04*gs1_plus*r_min -0.9*gs1_min*r_plus -0.9*gs1_min*r_min)*gamma1_44*Dr_r;								  GS_1=Gamma1_44;

⌨️ 快捷键说明

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