00001 #include "CAnalyticDike.h"
00002 #include <math.h>
00003 #include <iostream>
00004
00005 CAnalyticDike::CAnalyticDike()
00006 {}
00007 CAnalyticDike::~CAnalyticDike()
00008 {}
00009
00010 void CAnalyticDike::CalcResponse(double freq, double distance)
00011 {
00012 double sigma1 = 1./(rho1*1e11);
00013 double sigma2 = 1./(rho2*1e11);
00014 double omega = 2 * PI * freq;
00015 double x = distance * 100;
00016 double l = length * 100;
00017 double h = height * 100;
00018 dcomp U11, U21;
00019 dcomp U1n, U2n;
00020 dcomp U1,U2;
00021 dcomp k1,k2;
00022 double d1 = sqrt(1./(2 * PI * sigma1 * omega));
00023 double d2 = sqrt(1./(2 * PI * sigma2 * omega));
00024 double p1 = d1/ sqrt(2.);
00025 double p2 = d2/sqrt(2.);
00026 double h1 = h / p1;
00027 double h2 = h / p2;
00028 int nmax = 20;
00029 cout << "p1: " << p1 << " p2 " << p2 << " h1: " << h1 << " h2 " << h2 << endl;
00030 if ( sub ==0)
00031 {
00032 U1 = 0;
00033 U2 = 0;
00034 for (int n = 1; n < nmax; ++n)
00035 {
00036 k1 = sqrt(pow(n*PI,2) + I * pow(h1,2));
00037 k2 = sqrt(pow(n*PI,2) + I * pow(h2,2));
00038 U1n = pow(1.*n,2) * cosh( k1 * x/h) / (pow(k1*k2,2) * (cosh(k1 * l/(2*h))
00039 + k1/k2 * pow(h2/h1,2)*sinh(k1 * l/(2*h))));
00040 U2n = pow(1.*n,2) * exp(k2 *l/(2*h)) * sinh(k1 * l/(2*h)) * exp(- k2 * x/(2*h)) /
00041 (pow(k1*k2,2)*(sinh(k1*l/(2*h))+ k2/k1 * pow(h1/h2,2)*cosh(k1*l/(2*h))));
00042
00043
00044 U1 += U1n;
00045 U2 += U2n;
00046 cout << "U1diff: " << U1n/U1 << " U2diff: " << U2n/U2 << endl;
00047 }
00048
00049 Z1 = omega * h/h1 * ( sqrt(I) / tanh(sqrt(I)*h1) - 2 * pow(PI,2) * I/h1 *
00050 (pow(h1,2) - pow(h2,2)) * U1);
00051 Z2 = omega * h/h2 * ( sqrt(I) / tanh(sqrt(I)*h2) - 2 * pow(PI,2) * I/h2 *
00052 (pow(h2,2) - pow(h1,2)) * U2);
00053 }
00054 else
00055 {
00056 }
00057 }
00058