MPI: added closed cylinder operator support
parent
06eb82832e
commit
77cae6185e
|
@ -47,7 +47,7 @@ bool Operator_Ext_Cylinder::BuildExtension()
|
|||
|
||||
//if r=0 is not included -> obviously no special treatment for r=0
|
||||
//if alpha direction is not closed, PEC-BC at r=0 necessary and already set...
|
||||
if ((CC_R0_included==false) || (CC_closedAlpha==false))
|
||||
if (CC_R0_included==false)
|
||||
return true;
|
||||
|
||||
vv_R0 = new FDTD_FLOAT[m_Op->GetOriginalNumLines(2)];
|
||||
|
|
|
@ -209,6 +209,7 @@ bool Operator_Cylinder::SetupCSXGrid(CSRectGrid* grid)
|
|||
CC_closedAlpha=false;
|
||||
}
|
||||
|
||||
CC_R0_included = false;
|
||||
if (grid->GetLine(0,0)<0)
|
||||
{
|
||||
cerr << "Operator_Cylinder::SetupCSXGrid: r<0 not allowed in Cylinder Coordinates!!!" << endl;
|
||||
|
@ -218,9 +219,42 @@ bool Operator_Cylinder::SetupCSXGrid(CSRectGrid* grid)
|
|||
else if (grid->GetLine(0,0)==0.0)
|
||||
{
|
||||
cout << "Operator_Cylinder::SetupCSXGrid: r=0 included..." << endl;
|
||||
CC_R0_included= true; //also needed for correct ec-calculation
|
||||
CC_R0_included = CC_closedAlpha; //needed for correct ec-calculation, deactivate if closed cylinder is false... --> E_r = 0 anyways
|
||||
}
|
||||
|
||||
#ifdef MPI_SUPPORT
|
||||
// Setup an MPI split in alpha direction for a closed cylinder
|
||||
CC_MPI_Alpha = false;
|
||||
if ((m_NeighborUp[1]>=0) || (m_NeighborDown[1]>=0)) //check for MPI split in alpha direction
|
||||
{
|
||||
double minmaxA = 2*PI;// fabs(m_OrigDiscLines[1][m_OrigNumLines[1]-1]-m_OrigDiscLines[1][0]);
|
||||
if (fabs(minmaxA-2*PI) < OPERATOR_CYLINDER_CLOSED_ALPHA_THRESHOLD) //check for closed alpha MPI split
|
||||
{
|
||||
CC_MPI_Alpha = true;
|
||||
if (m_OrigDiscLines[0][0]==0)
|
||||
{
|
||||
cerr << "Operator_Cylinder::SetupCSXGrid: Error: MPI split in alpha direction for closed cylinder including r==0 is currently not supported! Exit!" << endl;
|
||||
exit(-2);
|
||||
}
|
||||
|
||||
if (m_NeighborUp[1]<0) //check if this process is at the alpha-end
|
||||
{
|
||||
grid->SetLine(1,alphaNum-1,2*PI+m_OrigDiscLines[1][0]);
|
||||
grid->AddDiscLine(1,2*PI+m_OrigDiscLines[1][1]);
|
||||
|
||||
SetNeighborUp(1,m_ProcTable[m_ProcTablePos[0]][0][m_ProcTablePos[2]]);
|
||||
}
|
||||
|
||||
if (m_NeighborDown[1]<0) //check if this process is at the alpha-start
|
||||
{
|
||||
SetNeighborDown(1,m_ProcTable[m_ProcTablePos[0]][m_SplitNumber[1]-1][m_ProcTablePos[2]]);
|
||||
}
|
||||
|
||||
//Note: the process table will not reflect this up/down neighbors necessary for a closed cylinder
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if (Operator_Multithread::SetupCSXGrid(grid)==false)
|
||||
return false;
|
||||
|
||||
|
|
|
@ -30,6 +30,7 @@ all special cases e.g. a closed alpha mesh or an included r=0 case is treated by
|
|||
class Operator_Cylinder : public Operator_Multithread
|
||||
{
|
||||
friend class Operator_CylinderMultiGrid;
|
||||
friend class Operator_Ext_Cylinder;
|
||||
public:
|
||||
static Operator_Cylinder* New(unsigned int numThreads = 0);
|
||||
virtual ~Operator_Cylinder();
|
||||
|
@ -86,6 +87,10 @@ protected:
|
|||
|
||||
bool CC_closedAlpha;
|
||||
bool CC_R0_included;
|
||||
|
||||
#ifdef MPI_SUPPORT
|
||||
bool CC_MPI_Alpha;
|
||||
#endif
|
||||
};
|
||||
|
||||
#endif // OPERATOR_CYLINDER_H
|
||||
|
|
Loading…
Reference in New Issue