From b2ac68d835eba10b0767b17e220df32e80d1fe67 Mon Sep 17 00:00:00 2001 From: Thorsten Liebig Date: Fri, 30 Jul 2010 15:29:19 +0200 Subject: [PATCH] sf_pml: moved Zm into GetKappaGraded --- FDTD/operator_ext_pml_sf.cpp | 15 ++++++++------- FDTD/operator_ext_pml_sf.h | 4 ++-- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/FDTD/operator_ext_pml_sf.cpp b/FDTD/operator_ext_pml_sf.cpp index b02d8b1..766cf85 100644 --- a/FDTD/operator_ext_pml_sf.cpp +++ b/FDTD/operator_ext_pml_sf.cpp @@ -235,7 +235,7 @@ double Operator_Ext_PML_SF_Plane::GetNodeLength(int ny, unsigned int pos[3], boo return m_Op->GetMeshDelta(ny,l_pos,dualMesh); } -double Operator_Ext_PML_SF_Plane::GetKappaGraded(double depth) const +double Operator_Ext_PML_SF_Plane::GetKappaGraded(double depth, double Zm) const { if (depth<0) return 0.0; @@ -244,7 +244,7 @@ double Operator_Ext_PML_SF_Plane::GetKappaGraded(double depth) const double g = 2.5; double R0 = 1e-6; double kappa0 = -log(R0)*log(g)/(2*m_pml_delta * pow(g,m_pml_width/m_pml_delta) -1); - return pow(g,depth/m_pml_delta)*kappa0; + return pow(g,depth/m_pml_delta)*kappa0 / Zm; } bool Operator_Ext_PML_SF_Plane::Calc_ECPos(int nP, int n, unsigned int* pos, double* inEC) const @@ -255,7 +255,8 @@ bool Operator_Ext_PML_SF_Plane::Calc_ECPos(int nP, int n, unsigned int* pos, dou double inMat[4]; m_Op->Calc_EffMatPos(n,l_pos,inMat); - double Zm = sqrt(inMat[2] / inMat[0]); // Zm = sqrt(mue/eps) + double Zm2 = inMat[2] / inMat[0]; // Zm^2 = mue/eps + double Zm = sqrt(Zm2); // Zm = sqrt(Zm^2) = sqrt(mue/eps) double kappa = 0; double sigma = 0; double depth = 0; @@ -264,14 +265,14 @@ bool Operator_Ext_PML_SF_Plane::Calc_ECPos(int nP, int n, unsigned int* pos, dou if (m_top) { depth = pos[m_ny]*m_pml_delta - 0.5*m_pml_delta; - kappa = GetKappaGraded(depth) / Zm; - sigma = GetKappaGraded(depth + 0.5*m_pml_delta) * Zm; + kappa = GetKappaGraded(depth, Zm); + sigma = GetKappaGraded(depth + 0.5*m_pml_delta, Zm) * Zm2; } else { depth = m_pml_width - (pos[m_ny])*m_pml_delta; - kappa = GetKappaGraded(depth) / Zm ; - sigma = GetKappaGraded(depth-0.5*m_pml_delta) * Zm; + kappa = GetKappaGraded(depth, Zm) ; + sigma = GetKappaGraded(depth-0.5*m_pml_delta, Zm) * Zm2; } if ((inMat[0]<=0) || (inMat[2]<=0)) //check if material properties are valid (necessary for cylindrical coords) { diff --git a/FDTD/operator_ext_pml_sf.h b/FDTD/operator_ext_pml_sf.h index 764e119..2b537d7 100644 --- a/FDTD/operator_ext_pml_sf.h +++ b/FDTD/operator_ext_pml_sf.h @@ -43,7 +43,7 @@ public: virtual double GetNodeLength(int ny, unsigned int pos[3], bool dualMesh = false) const {UNUSED(ny);UNUSED(pos);UNUSED(dualMesh);return 0.0;} //! This will resturn the pml parameter grading - virtual double GetKappaGraded(double depth) const {UNUSED(depth);return 0.0;} + virtual double GetKappaGraded(double depth, double Zm) const {UNUSED(depth);UNUSED(Zm);return 0.0;} virtual bool BuildExtension(); @@ -88,7 +88,7 @@ public: virtual double GetNodeArea(int ny, unsigned int pos[3], bool dualMesh = false) const; virtual double GetNodeLength(int ny, unsigned int pos[3], bool dualMesh = false) const; - virtual double GetKappaGraded(double depth) const; + virtual double GetKappaGraded(double depth, double Zm) const; virtual bool Calc_ECPos(int nP, int n, unsigned int* pos, double* inEC) const;