From e4ecd7ca2ac0bea215a82c5021a428dffd2f02fa Mon Sep 17 00:00:00 2001 From: Thorsten Liebig Date: Tue, 16 Mar 2010 09:40:01 +0100 Subject: [PATCH] fixed: graded mesh bug in operator --- FDTD/operator.cpp | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/FDTD/operator.cpp b/FDTD/operator.cpp index 63e13c9..91816ed 100644 --- a/FDTD/operator.cpp +++ b/FDTD/operator.cpp @@ -444,12 +444,12 @@ bool Operator::Calc_ECPos(int n, unsigned int* pos, double* inEC) if (prop) { CSPropMaterial* mat = prop->ToMaterial(); - inEC[0] += mat->GetEpsilonWeighted(n,shiftCoord)*fabs(deltaP*deltaPP); - inEC[1] += mat->GetKappaWeighted(n,shiftCoord)*fabs(deltaP*deltaPP); + inEC[0] += mat->GetEpsilonWeighted(n,shiftCoord)*fabs(deltaP_M*deltaPP); + inEC[1] += mat->GetKappaWeighted(n,shiftCoord)*fabs(deltaP_M*deltaPP); } else { - inEC[0] += 1*fabs(deltaP*deltaPP); + inEC[0] += 1*fabs(deltaP_M*deltaPP); inEC[1] += 0; } @@ -461,12 +461,12 @@ bool Operator::Calc_ECPos(int n, unsigned int* pos, double* inEC) if (prop) { CSPropMaterial* mat = prop->ToMaterial(); - inEC[0] += mat->GetEpsilonWeighted(n,shiftCoord)*fabs(deltaP*deltaPP); - inEC[1] += mat->GetKappaWeighted(n,shiftCoord)*fabs(deltaP*deltaPP); + inEC[0] += mat->GetEpsilonWeighted(n,shiftCoord)*fabs(deltaP*deltaPP_M); + inEC[1] += mat->GetKappaWeighted(n,shiftCoord)*fabs(deltaP*deltaPP_M); } else { - inEC[0] += 1*fabs(deltaP*deltaPP); + inEC[0] += 1*fabs(deltaP*deltaPP_M); inEC[1] += 0; } @@ -478,12 +478,12 @@ bool Operator::Calc_ECPos(int n, unsigned int* pos, double* inEC) if (prop) { CSPropMaterial* mat = prop->ToMaterial(); - inEC[0] += mat->GetEpsilonWeighted(n,shiftCoord)*fabs(deltaP*deltaPP); - inEC[1] += mat->GetKappaWeighted(n,shiftCoord)*fabs(deltaP*deltaPP); + inEC[0] += mat->GetEpsilonWeighted(n,shiftCoord)*fabs(deltaP_M*deltaPP_M); + inEC[1] += mat->GetKappaWeighted(n,shiftCoord)*fabs(deltaP_M*deltaPP_M); } else { - inEC[0] += 1*fabs(deltaP*deltaPP); + inEC[0] += 1*fabs(deltaP_M*deltaPP_M); inEC[1] += 0; } @@ -552,8 +552,8 @@ bool Operator::Calc_EffMatPos(int n, unsigned int* pos, double* inMat) this->Calc_ECPos(n,pos,inMat); - inMat[0] *= (delta*delta)/MainOp->GetNodeVolume(ipos)/gridDelta; - inMat[1] *= (delta*delta)/MainOp->GetNodeVolume(ipos)/gridDelta; + inMat[0] *= fabs(delta)/(0.25*(fabs(deltaP_M) + fabs(deltaP))*(fabs(deltaPP_M) + fabs(deltaPP)))/gridDelta; + inMat[1] *= fabs(delta)/(0.25*(fabs(deltaP_M) + fabs(deltaP))*(fabs(deltaPP_M) + fabs(deltaPP)))/gridDelta; inMat[2] *= 0.5*(fabs(delta_M) + fabs(delta)) / fabs(deltaP*deltaPP) / gridDelta; inMat[3] *= 0.5*(fabs(delta_M) + fabs(delta)) / fabs(deltaP*deltaPP) / gridDelta;