00001 #ifndef MTFUNCS_H_ 00002 #define MTFUNCS_H_ 00003 #include <complex> 00004 #include "miscfunc.h" 00005 00006 namespace gplib 00007 { 00008 //double CalcRhoa(const MTTensor &Z){ 00009 //return 1./(2 * PI * Z.frequency) * mu * (pow(Z.real(),2)+pow(Z.at(k).imag(),2)) * pow(1000.0,2); 00010 //} 00011 class MTTensor; 00012 double CalcPhi(const std::complex<double> &Z) 00013 { 00014 return atan(Z.imag() / Z.real()) / PI * 180; 00015 } 00016 00017 std::complex<double> CalcS1(const MTTensor &Z) 00018 { 00019 return Z.GetZxx() + Z.GetZyy(); 00020 } 00021 /* 00022 00023 00024 S1.at(i) = DataXX.Z.at(i) + DataYY.Z.at(i); 00025 S2.at(i) = DataXY.Z.at(i) + DataYX.Z.at(i); 00026 D1.at(i) = DataXX.Z.at(i) - DataYY.Z.at(i); 00027 D2.at(i) = DataXY.Z.at(i) - DataYX.Z.at(i); 00028 Berd.at(i) = 0.5 * D2.at(i); 00029 dBerd.at(i) = sqrt(0.5*pow(DataXY.dZ.at(i),2)+pow(DataYX.dZ.at(i),2)); 00030 alpha.at(i) = 0.5 * atan((Commute(S1.at(i),S2.at(i))-Commute(D1.at(i),D2.at(i)))/(Commute(S1.at(i),D1.at(i))-Commute(S2.at(i),D2.at(i)))); 00031 eta.at(i) = sqrt(abs(Commute(D1.at(i),S2.at(i))-Commute(S1.at(i),D2.at(i))))/abs(D2.at(i)); 00032 det = DataXX.Z.at(i).real() * DataYY.Z.at(i).real() - DataXY.Z.at(i).real() * DataYX.Z.at(i).real(); 00033 detreal.at(i) = det; 00034 Phi11.at(i) = (DataYY.Z.at(i).real() * DataXX.Z.at(i).imag() - DataXY.Z.at(i).real() * DataYX.Z.at(i).imag())/det; 00035 Phi12.at(i) = (DataYY.Z.at(i).real() * DataXY.Z.at(i).imag() - DataXY.Z.at(i).real() * DataYY.Z.at(i).imag())/det; 00036 Phi21.at(i) = (DataXX.Z.at(i).real() * DataYX.Z.at(i).imag() - DataYX.Z.at(i).real() * DataXX.Z.at(i).imag())/det; 00037 Phi22.at(i) = (DataXX.Z.at(i).real() * DataYY.Z.at(i).imag() - DataYX.Z.at(i).real() * DataXY.Z.at(i).imag())/det; 00038 alpha_phi.at(i) = 0.5 * atan((Phi12.at(i) + Phi21.at(i))/(Phi11.at(i) - Phi22.at(i))); 00039 beta_phi.at(i) = 0.5 * atan((Phi12.at(i) - Phi21.at(i))/(Phi11.at(i) + Phi22.at(i))); 00040 trPhi.at(i) = (Phi11.at(i) + Phi22.at(i)); 00041 skPhi.at(i) = Phi12.at(i) - Phi21.at(i); 00042 detPhi.at(i) = Phi11.at(i) * Phi22.at(i) - Phi12.at(i) * Phi21.at(i); 00043 Phi1.at(i) = trPhi.at(i) / 2.; 00044 Phi2.at(i) = sqrt(detPhi.at(i)); 00045 Phi3.at(i) = skPhi.at(i) / 2.; 00046 Phimax.at(i) = sqrt( pow(Phi1.at(i),2) + pow(Phi3.at(i),2)) + sqrt(pow(Phi1.at(i),2)+pow(Phi3.at(i),2) - pow(Phi2.at(i),2)); 00047 Phimin.at(i) = sqrt( pow(Phi1.at(i),2) + pow(Phi3.at(i),2)) - sqrt(pow(Phi1.at(i),2)+pow(Phi3.at(i),2) - pow(Phi2.at(i),2)); 00048 PhiEllip.at(i) = (Phimax.at(i)- Phimin.at(i))/ (Phimax.at(i)+Phimin.at(i)); 00049 temp1 = gsl_complex_rect(D1.at(i).real(),D1.at(i).imag()); 00050 temp2 = gsl_complex_rect(S2.at(i).real(),S2.at(i).imag()); 00051 temp3= gsl_complex_mul_real(gsl_complex_arctan(gsl_complex_div(gsl_complex_mul_real(temp1,-1.),temp2)),0.5); 00052 thetabar.at(i) = GSL_REAL(temp3); 00053 thetabar.at(i) += I*GSL_IMAG(temp3); 00054 temp1 = gsl_complex_rect(S1.at(i).real(),S1.at(i).imag()); 00055 temp2 = gsl_complex_rect(D2.at(i).real(),D2.at(i).imag()); 00056 temp3 = gsl_complex_arctan(gsl_complex_div(temp1,temp2)); 00057 dtheta.at(i) = GSL_REAL(temp3); 00058 dtheta.at(i) += I*GSL_IMAG(temp3); 00059 //dtheta.at(i) = atan(S1.at(i)/D2.at(i)) 00060 Zs.at(i) = sqrt((pow(DataXX.Z.at(i),2) + pow(DataXY.Z.at(i),2) + pow(DataYX.Z.at(i),2) + pow(DataYY.Z.at(i),2))/2.); 00061 Zp.at(i) = (DataXY.Z.at(i)*DataYX.Z.at(i)-DataXX.Z.at(i)*DataYY.Z.at(i))/Zs.at(i); 00062 rhos.at(i) = 1/(2 * PI * frequency.at(i)) * mu * (pow(Zs.at(i).real(),2)+pow(Zs.at(i).imag(),2)) * pow(1000.0,2); 00063 rhop.at(i) = 1/(2 * PI * frequency.at(i)) * mu * (pow(Zp.at(i).real(),2)+pow(Zp.at(i).imag(),2)) * pow(1000.0,2); 00064 phis.at(i) = atan(Zs.at(i).imag()/Zs.at(i).real()); 00065 phip.at(i) = atan(Zp.at(i).imag()/Zp.at(i).real()); 00066 dPhips.at(i) = phip.at(i) - phis.at(i); 00067 */ 00068 } 00069 #endif /*MTFUNCS_H_*/
1.5.8