fill missing material storage in cylindrical multigrids

This commit is contained in:
Thorsten Liebig 2011-01-25 10:27:51 +01:00
parent 67d1307fdf
commit 10537d75ab
2 changed files with 36 additions and 1 deletions

View File

@ -147,6 +147,36 @@ void Operator_CylinderMultiGrid::CalcStartStopLines(unsigned int &numThreads, ve
}
void Operator_CylinderMultiGrid::FillMissingDataStorage()
{
unsigned int pos[3];
double EffMat[4];
for (int ny=0; ny<3; ++ny)
{
for (pos[0]=0; pos[0]<m_Split_Pos-1; ++pos[0])
{
for (pos[1]=0; pos[1]<numLines[1]; ++pos[1])
{
for (pos[2]=0; pos[2]<numLines[2]; ++pos[2])
{
Calc_EffMatPos(ny,pos,EffMat);
if (m_epsR)
m_epsR[ny][pos[0]][pos[1]][pos[2]] = EffMat[0];
if (m_kappa)
m_kappa[ny][pos[0]][pos[1]][pos[2]] = EffMat[1];
if (m_mueR)
m_mueR[ny][pos[0]][pos[1]][pos[2]] = EffMat[2];
if (m_sigma)
m_sigma[ny][pos[0]][pos[1]][pos[2]] = EffMat[3];
}
}
}
}
}
int Operator_CylinderMultiGrid::CalcECOperator( DebugFlags debugFlags )
{
int retCode=0;
@ -165,9 +195,11 @@ int Operator_CylinderMultiGrid::CalcECOperator( DebugFlags debugFlags )
dT = opt_dT;
m_InnerOp->SetTimestep(dT);
m_InnerOp->CalcECOperator();
return Operator_Cylinder::CalcECOperator( debugFlags );
retCode = Operator_Cylinder::CalcECOperator( debugFlags );
}
//the data storage will only be filled up to m_Split_Pos-1, fill the remaining area here...
FillMissingDataStorage();
return retCode;
}

View File

@ -59,6 +59,9 @@ protected:
void Delete();
virtual void Reset();
//! The material data storage in the sub-grid area's will not be filled by the base-operator. Check and do this here!
void FillMissingDataStorage();
double m_Split_Rad;
vector<double> m_Split_Radii;
unsigned int m_Split_Pos;