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

📄 zoeppritz_solid_solid.m

📁 实现地震勘探中
💻 M
字号:
function [coeff,aux]=zoeppritz_solid_solid(vp,vs,rho,anglesDeg,incident,emerging,output_type)		% Compute reflection/transmission coefficients for a solid-solid interface%% Written by: E. R.: November 20, 2007% Last updated:%%         coeff=zoeppritz_solid_solid(vp,vs,rho,anglesDeg,incident,emerging,output_type)		% INPUT% vp      two-element vector with P-velocity above and below the interface% vs      two-element vector with S-velocity above and below the interface% rho     two-element vector with density above and below the interface% anglesDeg  Vector of angles of incidence in degrees% incident  String indicating if the incident wave is compressional ('P' or 'p')%         or shear ('S' or 's').% emerging  logical vector; indicates for which wave types the coefficients%         are requested.%         for P-reflection coefficient:   emerging(1)=true%         for S-reflection coefficient:   emerging(2)=true%         for P-transmission coefficient: emerging(3)=true%         for S-transmission coefficient: emerging(4)=true% output_type   type of output of reflection coefficients in case there are%         complex values; there are two possible values: 'complex' or 'polar'%         Default: output_type='complex'% OUTPUT% coeff   reflection and/or transmission coefficients; this is a matrix with%         as many columns as there are angles and as many rows as there are%         'true" entries in logical vector "emerging".%         If  at least one angle is greater than critical the matrix has %         complex entries.%         If "output_type" is 'complex' the real part represents the real part %         of the reflection coefficients and the imaginary part the imaginary%         part of the reflection coefficients.%         If 'output_type" is 'polar' the real part represents the amplitude %         of the reflection coefficients and the imaginary part the phase%         of the reflection coefficients.% aux     structure with additional output. The following field is defined.%     'critical_angle'   Critical angle in degrees%% EXAMPLE%         vp=[1600;2000];%         vs=[934;1634];%         rho=[2.2;2.3];%         angles=[0:5:50];%         %     P-wave reflection coefficient for incoming P-wave%         [reflect,aux]=zoeppritz_solid_solid(vp,vs,rho,angles,'P',[1 1 0 0],'complex');%         figure%         plot(angles,reflect)%         legend('PP reflection','PS reflection')%         xlabel('Angle in degrees')%         grid onemerging=logical(emerging);if nargin < 7   output_type='complex';endvp2=vp.^2;vs2=vs.^2;anglesDeg=anglesDeg(:)'*pi/180;switch incidentcase {'p','P'}   p=sin(anglesDeg)/vp(1);   p2=p.^2;   cip=cos(anglesDeg)/vp(1);   cis=sqrt(1/vs2(1)-p2);case {'s','S'}   p=sin(anglesDeg)/vs(1);   p2=p.^2;      cis=cos(anglesDeg)/vs(1);   cip=sqrt(1/vp2(1)-p2);otherwise   error(['Unrecognized type of incident wave: ',incident])endctp=sqrt(1/vp2(2)-p2);cts=sqrt(1/vs2(2)-p2);temp1=rho(1)*(1.-(2.*vs2(1))*p2);temp2=rho(2)*(1.-(2.*vs2(2))*p2);dtemp=temp2-temp1;temp1=temp1+2.*rho(2)*(vs2(2)*p2);temp2=temp2+2.*rho(1)*(vs2(1)*p2);drho=2.*(rho(2)*vs2(2)-rho(1)*vs2(1));temp3=temp2.*cip+temp1.*ctp;temp4=temp2.*cis+temp1.*cts;temp5=dtemp-drho.*cip.*cts;temp6=dtemp-drho.*ctp.*cis;determ=temp3.*temp4+temp5.*temp6.*p2;coeff=zeros(4,length(anglesDeg));switch incidentcase {'p','P'}   if emerging(1)      coeff(1,:)=((temp2.*cip-temp1.*ctp).*temp4-(dtemp+drho*cip.*cts).*temp6.*p2)./determ;   end   if emerging(2)      coeff(2,:)=-(2*vp(1)/vs(1))*cip.*(dtemp.*temp2+drho*temp1.*ctp.*cts).*p./determ;   end   if emerging(3)      coeff(3,:)=(2*vp(1)/vp(2))*rho(1)*cip.*temp4./determ;   end   if emerging(4)      coeff(4,:)=(2*vp(1)/vs(2))*rho(1)*cip.*temp6.*p./determ;   endcase {'s','S'}   if emerging(1)      coeff(1,:)=-(2*vs(1)/vp(1))*cis.*(dtemp.*temp2+drho*temp1.*ctp.*cts).*p./determ;   end   if emerging(2)      coeff(2,:)=-((temp2.*cis-temp1.*cts).*temp3-(dtemp+drho*ctp.*cis).*temp5.*p2)./determ;   end   if emerging(3)      coeff(3,:)=-(2*vs(1)/vp(2))*rho(1)*cis.*temp5.*p./determ;   end   if emerging(4)      coeff(4,:)= (2*vs(1)/vs(2))*rho(1)*cis.*temp3./determ;   endendcoeff=coeff(emerging,:);if strcmpi(output_type,'polar')   amplitude=abs(coeff);   if amplitude == 0      phase=0;   else      phase=atan2(imag(coeff),real(coeff));   end   coeff=amplitude+i*phase;end%       Compute the critical angle if requested (i.e. if there is a second output argument)if nargout > 1   if vp(2) > vp(1)      aux.critical_angle=asin(vp(1)/vp(2))*180/pi;   else      aux.critical_angle=90;   endend

⌨️ 快捷键说明

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