CAnalyticDike.cpp

Go to the documentation of this file.
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                         //U2n = pow(1.*n,2) * exp(k2*(l-2*x)/(2*h)) * sinh(k1 * l/(2*h)) /
00043                         //(pow(k1*k2,2)*(sinh(k1*l/(2*h))+ k2/k1 * pow(h1/h2,2)*cosh(k1*l/(2*h))));
00044                         U1 += U1n;
00045                         U2 += U2n;
00046                         cout << "U1diff: " << U1n/U1 << " U2diff: " << U2n/U2 << endl;
00047                 }       
00048                 //cout << "k1: " << k1 << " k2: " << k2 << " U1: " << U1 << " U2 " << U2 << endl;
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 

Generated on Fri Jul 4 15:30:20 2008 for GPLIB++ by  doxygen 1.5.5