From 8ff0fa809449440117d478e31606d7e39cd083a2 Mon Sep 17 00:00:00 2001 From: Ansgar Burchardt <Ansgar.Burchardt@tu-dresden.de> Date: Mon, 30 Apr 2018 12:55:32 +0200 Subject: [PATCH] DDDIF: move interface definitions to DDD_CTRL --- gm/algebra.cc | 56 +++++++++++--------- gm/er.cc | 13 +++-- gm/refine.cc | 58 ++++++++++++++------- gm/ugio.cc | 21 +++++--- gm/ugm.cc | 46 +++++++++------- parallel/dddif/compat.cc | 30 +++++++++++ parallel/dddif/identify.cc | 48 +++++++++-------- parallel/dddif/initddd.cc | 101 ++++++++++++++++++------------------ parallel/dddif/parallel.h | 12 +++++ parallel/dddif/partition.cc | 11 ++-- parallel/dddif/pgmcheck.cc | 11 ++-- parallel/dddif/priority.cc | 15 +++--- parallel/dddif/trans.cc | 18 ++++--- 13 files changed, 274 insertions(+), 166 deletions(-) diff --git a/gm/algebra.cc b/gm/algebra.cc index 2d46350ed..1383fd50f 100644 --- a/gm/algebra.cc +++ b/gm/algebra.cc @@ -2429,11 +2429,13 @@ INT NS_DIM_PREFIX CreateAlgebra (MULTIGRID *theMG) MGCreateConnection(theMG); #endif /* update VNEW-flags */ - DDD_IFExchange(theMG->dddContext(), - BorderVectorSymmIF,sizeof(INT), + auto& context = theMG->dddContext(); + const auto& dddctrl = ddd_ctrl(context); + DDD_IFExchange(context, + dddctrl.BorderVectorSymmIF,sizeof(INT), Gather_VectorVNew,Scatter_VectorVNew); - DDD_IFOneway(theMG->dddContext(), - VectorIF,IF_FORWARD,sizeof(INT), + DDD_IFOneway(context, + dddctrl.VectorIF,IF_FORWARD,sizeof(INT), Gather_VectorVNew,Scatter_GhostVectorVNew); #else MGCreateConnection(theMG); @@ -3441,11 +3443,14 @@ static INT PropagatePeriodicVectorClass (GRID *theGrid, INT vclass) INT NS_DIM_PREFIX PropagateVectorClasses (GRID *theGrid) { #ifdef ModelP + auto& context = theGrid->dddContext(); + const auto& dddctrl = ddd_ctrl(context); + PRINTDEBUG(gm,1,("\nPropagateVectorClasses():" " 1. communication on level %d\n",GLEVEL(theGrid))) /* exchange VCLASS of vectors */ - DDD_IFAExchange(theGrid->dddContext(), - BorderVectorSymmIF,GRID_ATTR(theGrid),sizeof(INT), + DDD_IFAExchange(context, + dddctrl.BorderVectorSymmIF,GRID_ATTR(theGrid),sizeof(INT), Gather_VectorVClass, Scatter_VectorVClass); #endif @@ -3455,8 +3460,8 @@ INT NS_DIM_PREFIX PropagateVectorClasses (GRID *theGrid) #ifdef ModelP PRINTDEBUG(gm,1,("\nPropagateVectorClasses(): 2. communication\n")) /* exchange VCLASS of vectors */ - DDD_IFAExchange(theGrid->dddContext(), - BorderVectorSymmIF,GRID_ATTR(theGrid),sizeof(INT), + DDD_IFAExchange(context, + dddctrl.BorderVectorSymmIF,GRID_ATTR(theGrid),sizeof(INT), Gather_VectorVClass, Scatter_VectorVClass); #endif @@ -3466,8 +3471,8 @@ INT NS_DIM_PREFIX PropagateVectorClasses (GRID *theGrid) #ifdef ModelP PRINTDEBUG(gm,1,("\nPropagateVectorClasses(): 3. communication\n")) /* exchange VCLASS of vectors */ - DDD_IFAExchange(theGrid->dddContext(), - BorderVectorSymmIF,GRID_ATTR(theGrid),sizeof(INT), + DDD_IFAExchange(context, + dddctrl.BorderVectorSymmIF,GRID_ATTR(theGrid),sizeof(INT), Gather_VectorVClass, Scatter_VectorVClass); #endif @@ -3478,16 +3483,16 @@ INT NS_DIM_PREFIX PropagateVectorClasses (GRID *theGrid) #ifdef ModelP PRINTDEBUG(gm,1,("\nPropagateVectorClasses(): 4. communication\n")) /* exchange VCLASS of vectors */ - DDD_IFAExchange(theGrid->dddContext(), - BorderVectorSymmIF,GRID_ATTR(theGrid),sizeof(INT), + DDD_IFAExchange(context, + dddctrl.BorderVectorSymmIF,GRID_ATTR(theGrid),sizeof(INT), Gather_VectorVClass, Scatter_VectorVClass); #endif #endif #ifdef ModelP /* send VCLASS to ghosts */ - DDD_IFAOneway(theGrid->dddContext(), - VectorIF,GRID_ATTR(theGrid),IF_FORWARD,sizeof(INT), + DDD_IFAOneway(context, + dddctrl.VectorIF,GRID_ATTR(theGrid),IF_FORWARD,sizeof(INT), Gather_VectorVClass, Scatter_GhostVectorVClass); #endif @@ -3671,10 +3676,13 @@ static INT PropagatePeriodicNextVectorClass (GRID *theGrid) INT NS_DIM_PREFIX PropagateNextVectorClasses (GRID *theGrid) { #ifdef ModelP + auto& context = theGrid->dddContext(); + const auto& dddctrl = ddd_ctrl(context); + PRINTDEBUG(gm,1,("\nPropagateNextVectorClasses(): 1. communication\n")) /* exchange VNCLASS of vectors */ - DDD_IFAExchange(theGrid->dddContext(), - BorderVectorSymmIF,GRID_ATTR(theGrid),sizeof(INT), + DDD_IFAExchange(context, + dddctrl.BorderVectorSymmIF,GRID_ATTR(theGrid),sizeof(INT), Gather_VectorVNClass, Scatter_VectorVNClass); #endif @@ -3683,8 +3691,8 @@ INT NS_DIM_PREFIX PropagateNextVectorClasses (GRID *theGrid) #ifdef ModelP PRINTDEBUG(gm,1,("\nPropagateNextVectorClasses(): 2. communication\n")) /* exchange VNCLASS of vectors */ - DDD_IFAExchange(theGrid->dddContext(), - BorderVectorSymmIF,GRID_ATTR(theGrid),sizeof(INT), + DDD_IFAExchange(context, + dddctrl.BorderVectorSymmIF,GRID_ATTR(theGrid),sizeof(INT), Gather_VectorVNClass, Scatter_VectorVNClass); #endif @@ -3693,8 +3701,8 @@ INT NS_DIM_PREFIX PropagateNextVectorClasses (GRID *theGrid) #ifdef ModelP PRINTDEBUG(gm,1,("\nPropagateNextVectorClasses(): 3. communication\n")) /* exchange VNCLASS of vectors */ - DDD_IFAExchange(theGrid->dddContext(), - BorderVectorSymmIF,GRID_ATTR(theGrid),sizeof(INT), + DDD_IFAExchange(context, + dddctrl.BorderVectorSymmIF,GRID_ATTR(theGrid),sizeof(INT), Gather_VectorVNClass, Scatter_VectorVNClass); #endif @@ -3704,16 +3712,16 @@ INT NS_DIM_PREFIX PropagateNextVectorClasses (GRID *theGrid) #ifdef ModelP PRINTDEBUG(gm,1,("\nPropagateNextVectorClasses(): 4. communication\n")) /* exchange VNCLASS of vectors */ - DDD_IFAExchange(theGrid->dddContext(), - BorderVectorSymmIF,GRID_ATTR(theGrid),sizeof(INT), + DDD_IFAExchange(context, + dddctrl.BorderVectorSymmIF,GRID_ATTR(theGrid),sizeof(INT), Gather_VectorVNClass, Scatter_VectorVNClass); #endif #endif #ifdef ModelP /* send VCLASS to ghosts */ - DDD_IFAOneway(theGrid->dddContext(), - VectorIF,GRID_ATTR(theGrid),IF_FORWARD,sizeof(INT), + DDD_IFAOneway(context, + dddctrl.VectorIF,GRID_ATTR(theGrid),IF_FORWARD,sizeof(INT), Gather_VectorVNClass, Scatter_GhostVectorVNClass); #endif diff --git a/gm/er.cc b/gm/er.cc index 61eec0cd2..08f2734f0 100644 --- a/gm/er.cc +++ b/gm/er.cc @@ -994,6 +994,9 @@ static int ExtractInterfaceERule (DDD::DDDContext&, DDD_OBJ obj) static INT ExtractInterfaceRules (MULTIGRID *mg) { + auto& context = mg->dddContext(); + const auto& dddctrl = ddd_ctrl(context); + int lev; /* TODO (HRR 971211): don't include TOPLEVEL (no elem refined there) */ @@ -1003,7 +1006,7 @@ static INT ExtractInterfaceRules (MULTIGRID *mg) /* count interface master and vhghost elements */ global.if_elems = 1; - DDD_IFAExecLocal(grid->dddContext(), ElementVHIF, GRID_ATTR(grid), CountIFElements); + DDD_IFAExecLocal(context, dddctrl.ElementVHIF, GRID_ATTR(grid), CountIFElements); if (global.if_elems>1) { @@ -1021,18 +1024,18 @@ static INT ExtractInterfaceRules (MULTIGRID *mg) REP_ERR_RETURN(1); /* init rules of masters */ - DDD_IFAExecLocal(grid->dddContext(), ElementIF, GRID_ATTR(grid), InitMasterRules); + DDD_IFAExecLocal(context, dddctrl.ElementIF, GRID_ATTR(grid), InitMasterRules); /* communicate VHghosts --> master */ - DDD_IFAOneway(grid->dddContext(), ElementVHIF, GRID_ATTR(grid), IF_BACKWARD, sizeof(ERULE), + DDD_IFAOneway(context, dddctrl.ElementVHIF, GRID_ATTR(grid), IF_BACKWARD, sizeof(ERULE), Gather_ERULE, Scatter_partial_ERULE); /* communicate master --> VHghosts */ - DDD_IFAOneway(grid->dddContext(), ElementVHIF, GRID_ATTR(grid), IF_FORWARD, sizeof(ERULE), + DDD_IFAOneway(context, dddctrl.ElementVHIF, GRID_ATTR(grid), IF_FORWARD, sizeof(ERULE), Gather_ERULE, Scatter_ERULE); /* extract rules from interface elements */ - DDD_IFAExecLocal(grid->dddContext(), ElementVHIF, GRID_ATTR(grid), ExtractInterfaceERule); + DDD_IFAExecLocal(context, dddctrl.ElementVHIF, GRID_ATTR(grid), ExtractInterfaceERule); IFDEBUG(gm,ER_DBG_GENERAL) long N_er = 0; diff --git a/gm/refine.cc b/gm/refine.cc index d7de5dd40..c8e5affb8 100644 --- a/gm/refine.cc +++ b/gm/refine.cc @@ -915,9 +915,12 @@ static int Scatter_ElementClosureInfo (DDD::DDDContext&, DDD_OBJ obj, void *data static INT ExchangeElementClosureInfo (GRID *theGrid) { + auto& context = theGrid->dddContext(); + const auto& dddctrl = ddd_ctrl(context); + /* exchange information of elements to compute closure */ - DDD_IFAOnewayX(theGrid->dddContext(), - ElementSymmVHIF,GRID_ATTR(theGrid),IF_FORWARD,sizeof(INT), + DDD_IFAOnewayX(context, + dddctrl.ElementSymmVHIF,GRID_ATTR(theGrid),IF_FORWARD,sizeof(INT), Gather_ElementClosureInfo, Scatter_ElementClosureInfo); return(GM_OK); @@ -954,9 +957,12 @@ static int Scatter_ElementRefine (DDD::DDDContext&, DDD_OBJ obj, void *data, DDD static INT ExchangeElementRefine (GRID *theGrid) { + auto& context = theGrid->dddContext(); + const auto& dddctrl = ddd_ctrl(context); + /* exchange information of elements to compute closure */ - DDD_IFAOnewayX(theGrid->dddContext(), - ElementSymmVHIF,GRID_ATTR(theGrid),IF_FORWARD,2*sizeof(INT), + DDD_IFAOnewayX(context, + dddctrl.ElementSymmVHIF,GRID_ATTR(theGrid),IF_FORWARD,2*sizeof(INT), Gather_ElementRefine, Scatter_ElementRefine); return(GM_OK); @@ -1034,9 +1040,12 @@ static int Scatter_EdgeClosureInfo (DDD::DDDContext&, DDD_OBJ obj, void *data) INT ExchangeEdgeClosureInfo (GRID *theGrid) { + auto& context = theGrid->dddContext(); + const auto& dddctrl = ddd_ctrl(context); + /* exchange information of edges to compute closure */ - DDD_IFAOneway(theGrid->dddContext(), - EdgeVHIF,GRID_ATTR(theGrid),IF_FORWARD,sizeof(INT), + DDD_IFAOneway(context, + dddctrl.EdgeVHIF,GRID_ATTR(theGrid),IF_FORWARD,sizeof(INT), Gather_EdgeClosureInfo, Scatter_EdgeClosureInfo); return(GM_OK); @@ -1729,15 +1738,18 @@ static int Scatter_AddEdgePattern (DDD::DDDContext&, DDD_OBJ obj, void *data) static INT ExchangeAddPatterns (GRID *theGrid) { + auto& context = theGrid->dddContext(); + const auto& dddctrl = ddd_ctrl(context); + /* exchange addpatterns of edges */ #ifdef __TWODIM__ - DDD_IFAOneway(theGrid->dddContext(), - ElementVHIF,GRID_ATTR(theGrid),IF_FORWARD,sizeof(INT), + DDD_IFAOneway(context, + dddctrl.ElementVHIF,GRID_ATTR(theGrid),IF_FORWARD,sizeof(INT), Gather_AddEdgePattern, Scatter_AddEdgePattern); #endif #ifdef __THREEDIM__ - DDD_IFAOneway(theGrid->dddContext(), - EdgeVHIF,GRID_ATTR(theGrid),IF_FORWARD,sizeof(INT), + DDD_IFAOneway(context, + dddctrl.EdgeVHIF,GRID_ATTR(theGrid),IF_FORWARD,sizeof(INT), Gather_AddEdgePattern, Scatter_AddEdgePattern); #endif @@ -2121,9 +2133,12 @@ static int Scatter_ElementInfo (DDD::DDDContext&, DDD_OBJ obj, void *Data) static INT CheckElementInfo (GRID *theGrid) { + auto& context = theGrid->dddContext(); + const auto& dddctrl = ddd_ctrl(context); + /* exchange element info */ - DDD_IFAOneway(theGrid->dddContext(), - ElementVHIF,GRID_ATTR(theGrid),IF_FORWARD, + DDD_IFAOneway(context, + dddctrl.ElementVHIF,GRID_ATTR(theGrid),IF_FORWARD, CEIL(sizeof(struct generic_element))+2*sizeof(INT), Gather_ElementInfo, Scatter_ElementInfo); @@ -2752,10 +2767,12 @@ static INT RestrictMarks (GRID *theGrid) } #ifdef __PERIODIC_BOUNDARY__ #ifdef ModelP + auto& context = theGrid->dddContext(); + const auto& dddctrl = ddd_ctrl(context); PRINTDEBUG(gm,1,("\nexchange USED flag for restrict marks\n")); /* exchange USED flag of periodic vectors to indicate marked elements */ - DDD_IFAExchange(theGrid->dddContext(), - BorderVectorSymmIF,GRID_ATTR(theGrid),sizeof(INT),Gather_USEDflag, Scatter_USEDflag); + DDD_IFAExchange(context, + dddctrl.BorderVectorSymmIF,GRID_ATTR(theGrid),sizeof(INT),Gather_USEDflag, Scatter_USEDflag); #endif /* if an element at a periodic boundary is marked, @@ -6181,6 +6198,11 @@ static INT InitializePeriodicFlags(GRID *grid) static INT Grid_MakePeriodicMarksConsistent(GRID *grid) { +#ifdef ModelP + auto& context = grid->dddContext(); + const auto& dddctrl = ddd_ctrl(context); +#endif + PeriodicBoundaryInfoProcPtr IsPeriodicBnd; ELEMENT *elem; VECTOR *vec; @@ -6229,8 +6251,8 @@ static INT Grid_MakePeriodicMarksConsistent(GRID *grid) /* exchange USED flag for periodic vectors */ PRINTDEBUG(gm,1,("\n" PFMT "exchange USED flag for restrict marks in Grid_MakePeriodicMarksConsistent 1. comm.\n",me)); /* exchange USED flag of periodic vectors to indicate marked elements */ - DDD_IFAExchange(grid->dddContext(), - BorderVectorSymmIF,GRID_ATTR(grid),sizeof(INT),Gather_USEDflag, Scatter_USEDflag); + DDD_IFAExchange(context, + dddctrl.BorderVectorSymmIF,GRID_ATTR(grid),sizeof(INT),Gather_USEDflag, Scatter_USEDflag); #endif /* flag all periodic vectors consistently */ @@ -6277,8 +6299,8 @@ static INT Grid_MakePeriodicMarksConsistent(GRID *grid) /* exchange USED flag for periodic vectors */ PRINTDEBUG(gm,1,("\n" PFMT "exchange USED flag for restrict marks in Grid_MakePeriodicMarksConsistent 2. comm.\n",me)); /* exchange USED flag of periodic vectors to indicate marked elements */ - DDD_IFAExchange(grid->dddContext(), - BorderVectorSymmIF,GRID_ATTR(grid),sizeof(INT),Gather_USEDflag, Scatter_USEDflag); + DDD_IFAExchange(context, + dddctrl.BorderVectorSymmIF,GRID_ATTR(grid),sizeof(INT),Gather_USEDflag, Scatter_USEDflag); #endif /* mark all periodic elements consistently */ diff --git a/gm/ugio.cc b/gm/ugio.cc index da69c69d3..1bb470ffe 100644 --- a/gm/ugio.cc +++ b/gm/ugio.cc @@ -1948,8 +1948,11 @@ static int Scatter_RefineInfo (DDD::DDDContext&, DDD_OBJ obj, void *data) static INT SpreadRefineInfo(GRID *theGrid) { - DDD_IFAOneway(theGrid->dddContext(), - ElementIF,GRID_ATTR(theGrid),IF_FORWARD,4*sizeof(INT), + auto& context = theGrid->dddContext(); + const auto& dddctrl = ddd_ctrl(context); + + DDD_IFAOneway(context, + dddctrl.ElementIF,GRID_ATTR(theGrid),IF_FORWARD,4*sizeof(INT), Gather_RefineInfo,Scatter_RefineInfo); return(GM_OK); } @@ -1974,8 +1977,11 @@ static int Scatter_NodeType (DDD::DDDContext&, DDD_OBJ obj, void *data) static INT SpreadGridNodeTypes(GRID *theGrid) { - DDD_IFAOneway(theGrid->dddContext(), - NodeIF,GRID_ATTR(theGrid),IF_FORWARD,sizeof(INT), + auto& context = theGrid->dddContext(); + const auto& dddctrl = ddd_ctrl(context); + + DDD_IFAOneway(context, + dddctrl.NodeIF,GRID_ATTR(theGrid),IF_FORWARD,sizeof(INT), Gather_NodeType,Scatter_NodeType); return(GM_OK); } @@ -2672,8 +2678,11 @@ static int Scatter_EClasses(DDD::DDDContext&, DDD_OBJ obj, void *data) void CommunicateEClasses (MULTIGRID *theMG) { - DDD_IFOneway(theMG->dddContext(), - ElementVHIF,IF_FORWARD,sizeof(int), + auto& context = theMG->dddContext(); + const auto& dddctrl = ddd_ctrl(context); + + DDD_IFOneway(context, + dddctrl.ElementVHIF,IF_FORWARD,sizeof(int), Gather_EClasses, Scatter_EClasses); return; } diff --git a/gm/ugm.cc b/gm/ugm.cc index e3039857b..f0ec5e807 100644 --- a/gm/ugm.cc +++ b/gm/ugm.cc @@ -7202,11 +7202,14 @@ static INT PropagatePeriodicNodeClass (GRID *theGrid, INT nclass) INT NS_DIM_PREFIX PropagateNodeClasses (GRID *theGrid) { #ifdef ModelP + auto& context = theGrid->dddContext(); + const auto& dddctrl = ddd_ctrl(context); + PRINTDEBUG(gm,1,("\n" PFMT "PropagateNodeClasses():" " 1. communication on level %d\n",theGrid->ppifContext().me(),GLEVEL(theGrid))) /* exchange NCLASS of Nodes */ - DDD_IFAExchange(theGrid->dddContext(), - BorderNodeSymmIF,GRID_ATTR(theGrid),sizeof(INT), + DDD_IFAExchange(context, + dddctrl.BorderNodeSymmIF,GRID_ATTR(theGrid),sizeof(INT), Gather_NodeClass, Scatter_NodeClass); #endif @@ -7217,8 +7220,8 @@ INT NS_DIM_PREFIX PropagateNodeClasses (GRID *theGrid) PRINTDEBUG(gm,1,("\n" PFMT "PropagateNodeClasses(): 2. communication\n", theGrid->ppifContext().me())) /* exchange NCLASS of Nodes */ - DDD_IFAExchange(theGrid->dddContext(), - BorderNodeSymmIF,GRID_ATTR(theGrid),sizeof(INT), + DDD_IFAExchange(context, + dddctrl.BorderNodeSymmIF,GRID_ATTR(theGrid),sizeof(INT), Gather_NodeClass, Scatter_NodeClass); #endif @@ -7229,8 +7232,8 @@ INT NS_DIM_PREFIX PropagateNodeClasses (GRID *theGrid) PRINTDEBUG(gm,1,("\n" PFMT "PropagateNodeClasses(): 3. communication\n", theGrid->ppifContext().me())) /* exchange NCLASS of Nodes */ - DDD_IFAExchange(theGrid->dddContext(), - BorderNodeSymmIF,GRID_ATTR(theGrid),sizeof(INT), + DDD_IFAExchange(context, + dddctrl.BorderNodeSymmIF,GRID_ATTR(theGrid),sizeof(INT), Gather_NodeClass, Scatter_NodeClass); #endif @@ -7243,8 +7246,8 @@ INT NS_DIM_PREFIX PropagateNodeClasses (GRID *theGrid) PRINTDEBUG(gm,1,("\n" PFMT "PropagateNodeClasses(): 4. communication\n", theGrid->ppifContext().me())) /* exchange NCLASS of Nodes */ - DDD_IFAExchange(theGrid->dddContext(), - BorderNodeSymmIF,GRID_ATTR(theGrid),sizeof(INT), + DDD_IFAExchange(context, + dddctrl.BorderNodeSymmIF,GRID_ATTR(theGrid),sizeof(INT), Gather_NodeClass, Scatter_NodeClass); #endif } @@ -7252,8 +7255,8 @@ INT NS_DIM_PREFIX PropagateNodeClasses (GRID *theGrid) #ifdef ModelP /* send NCLASS to ghosts */ - DDD_IFAOneway(theGrid->dddContext(), - NodeIF,GRID_ATTR(theGrid),IF_FORWARD,sizeof(INT), + DDD_IFAOneway(context, + dddctrl.NodeIF,GRID_ATTR(theGrid),IF_FORWARD,sizeof(INT), Gather_NodeClass, Scatter_GhostNodeClass); #endif @@ -7424,10 +7427,13 @@ static INT PropagatePeriodicNextNodeClass (GRID *theGrid, INT nnclass) INT NS_DIM_PREFIX PropagateNextNodeClasses (GRID *theGrid) { #ifdef ModelP + auto& context = theGrid->dddContext(); + const auto& dddctrl = ddd_ctrl(context); + PRINTDEBUG(gm,1,("\n" PFMT "PropagateNextNodeClasses(): 1. communication\n",theGrid->ppifContext().me())) /* exchange NNCLASS of Nodes */ - DDD_IFAExchange(theGrid->dddContext(), - BorderNodeSymmIF,GRID_ATTR(theGrid),sizeof(INT), + DDD_IFAExchange(context, + dddctrl.BorderNodeSymmIF,GRID_ATTR(theGrid),sizeof(INT), Gather_NextNodeClass, Scatter_NextNodeClass); #endif @@ -7436,8 +7442,8 @@ INT NS_DIM_PREFIX PropagateNextNodeClasses (GRID *theGrid) #ifdef ModelP PRINTDEBUG(gm,1,("\n" PFMT "PropagateNextNodeClasses(): 2. communication\n",theGrid->ppifContext().me())) /* exchange NNCLASS of Nodes */ - DDD_IFAExchange(theGrid->dddContext(), - BorderNodeSymmIF,GRID_ATTR(theGrid),sizeof(INT), + DDD_IFAExchange(context, + dddctrl.BorderNodeSymmIF,GRID_ATTR(theGrid),sizeof(INT), Gather_NextNodeClass, Scatter_NextNodeClass); #endif @@ -7446,8 +7452,8 @@ INT NS_DIM_PREFIX PropagateNextNodeClasses (GRID *theGrid) #ifdef ModelP PRINTDEBUG(gm,1,("\n" PFMT "PropagateNextNodeClasses(): 3. communication\n",theGrid->ppifContext().me())) /* exchange NNCLASS of Nodes */ - DDD_IFAExchange(theGrid->dddContext(), - BorderNodeSymmIF,GRID_ATTR(theGrid),sizeof(INT), + DDD_IFAExchange(context, + dddctrl.BorderNodeSymmIF,GRID_ATTR(theGrid),sizeof(INT), Gather_NextNodeClass, Scatter_NextNodeClass); #endif @@ -7458,16 +7464,16 @@ INT NS_DIM_PREFIX PropagateNextNodeClasses (GRID *theGrid) #ifdef ModelP PRINTDEBUG(gm,1,("\n" PFMT "PropagateNextNodeClasses(): 4. communication\n",theGrid->ppifContext().me())) /* exchange NNCLASS of Nodes */ - DDD_IFAExchange(theGrid->dddContext(), - BorderNodeSymmIF,GRID_ATTR(theGrid),sizeof(INT), + DDD_IFAExchange(context, + dddctrl.BorderNodeSymmIF,GRID_ATTR(theGrid),sizeof(INT), Gather_NextNodeClass, Scatter_NextNodeClass); #endif #endif #ifdef ModelP /* send NNCLASSn to ghosts */ - DDD_IFAOneway(theGrid->dddContext(), - NodeIF,GRID_ATTR(theGrid),IF_FORWARD,sizeof(INT), + DDD_IFAOneway(context, + dddctrl.NodeIF,GRID_ATTR(theGrid),IF_FORWARD,sizeof(INT), Gather_NextNodeClass, Scatter_GhostNextNodeClass); #endif diff --git a/parallel/dddif/compat.cc b/parallel/dddif/compat.cc index 0f97d9e91..3266f57c5 100644 --- a/parallel/dddif/compat.cc +++ b/parallel/dddif/compat.cc @@ -17,6 +17,36 @@ DDD::DDDContext& globalDDDContext() void globalDDDContext(const std::shared_ptr<DDD::DDDContext>& context) { globalDDDContext_ = context; + + auto& dddctrl = ddd_ctrl(*context); + + ElementIF = dddctrl.ElementIF; + ElementSymmIF = dddctrl.ElementSymmIF; + ElementVIF = dddctrl.ElementVIF; + ElementSymmVIF = dddctrl.ElementSymmVIF; + ElementVHIF = dddctrl.ElementVHIF; + ElementSymmVHIF = dddctrl.ElementSymmVHIF; + + BorderNodeIF = dddctrl.BorderNodeIF; + BorderNodeSymmIF = dddctrl.BorderNodeSymmIF; + OuterNodeIF = dddctrl.OuterNodeIF; + NodeVIF = dddctrl.NodeVIF; + NodeIF = dddctrl.NodeIF; + NodeAllIF = dddctrl.NodeAllIF; + + BorderVectorIF = dddctrl.BorderVectorIF; + BorderVectorSymmIF = dddctrl.BorderVectorSymmIF; + OuterVectorIF = dddctrl.OuterVectorIF; + OuterVectorSymmIF = dddctrl.OuterVectorSymmIF; + VectorVIF = dddctrl.VectorVIF; + VectorVAllIF = dddctrl.VectorVAllIF; + VectorIF = dddctrl.VectorIF; + + EdgeIF = dddctrl.EdgeIF; + BorderEdgeSymmIF = dddctrl.BorderEdgeSymmIF; + EdgeHIF = dddctrl.EdgeHIF; + EdgeVHIF = dddctrl.EdgeVHIF; + EdgeSymmVHIF = dddctrl.EdgeSymmVHIF; } void globalDDDContext(std::nullptr_t) diff --git a/parallel/dddif/identify.cc b/parallel/dddif/identify.cc index 3fdc806db..f0e9b43ec 100644 --- a/parallel/dddif/identify.cc +++ b/parallel/dddif/identify.cc @@ -1890,33 +1890,35 @@ static int Scatter_SonEdgeInfo (DDD::DDDContext& context, DDD_OBJ obj, void *dat static INT Identify_SonNodes (GRID *theGrid) { + auto& context = theGrid->dddContext(); + const auto& dddctrl = ddd_ctrl(context); #ifdef IDENT_ONLY_NEW - DDD_IFAOnewayX(theGrid->dddContext(), - NodeAllIF,GRID_ATTR(theGrid),IF_FORWARD,sizeof(int), + DDD_IFAOnewayX(context, + dddctrl.NodeAllIF,GRID_ATTR(theGrid),IF_FORWARD,sizeof(int), Gather_NewNodeInfo,Scatter_NewNodeInfo); if (UPGRID(theGrid) != NULL) { check_nodetype = CORNER_NODE; if (NIDENTASSERT) - DDD_IFAOnewayX(theGrid->dddContext(), - NodeAllIF,GRID_ATTR(UPGRID(theGrid)),IF_FORWARD,sizeof(int), + DDD_IFAOnewayX(context, + dddctrl.NodeAllIF,GRID_ATTR(UPGRID(theGrid)),IF_FORWARD,sizeof(int), Gather_NodeInfo,Scatter_NodeInfo); if (0) - DDD_IFAOnewayX(theGrid->dddContext(), - NodeAllIF,GRID_ATTR(UPGRID(theGrid)),IF_FORWARD,sizeof(int), + DDD_IFAOnewayX(context, + dddctrl.NodeAllIF,GRID_ATTR(UPGRID(theGrid)),IF_FORWARD,sizeof(int), Gather_TestNodeInfo,Scatter_TestNodeInfo); } - DDD_IFAOnewayX(theGrid->dddContext(), - NodeAllIF,GRID_ATTR(theGrid),IF_FORWARD,2*sizeof(int), + DDD_IFAOnewayX(context, + dddctrl.NodeAllIF,GRID_ATTR(theGrid),IF_FORWARD,2*sizeof(int), Gather_IdentSonNode,Scatter_IdentSonNode); #else - DDD_IFAOnewayX(theGrid->dddContext(), - NodeAllIF,GRID_ATTR(theGrid),IF_FORWARD,sizeof(int), + DDD_IFAOnewayX(context, + dddctrl.NodeAllIF,GRID_ATTR(theGrid),IF_FORWARD,sizeof(int), Gather_SonNodeInfo,Scatter_SonNodeInfo); #endif @@ -1943,38 +1945,40 @@ static INT Identify_SonNodes (GRID *theGrid) INT Identify_SonEdges (GRID *theGrid) { + auto& context = theGrid->dddContext(); + const auto& dddctrl = ddd_ctrl(context); #ifdef IDENT_ONLY_NEW - DDD_IFAOnewayX(theGrid->dddContext(), - EdgeSymmVHIF,GRID_ATTR(theGrid),IF_FORWARD,sizeof(int), + DDD_IFAOnewayX(context, + dddctrl.EdgeSymmVHIF,GRID_ATTR(theGrid),IF_FORWARD,sizeof(int), Gather_NewObjectInfo,Scatter_NewObjectInfo); if (UPGRID(theGrid) != NULL) { check_nodetype = MID_NODE; - DDD_IFAOnewayX(theGrid->dddContext(), - NodeAllIF,GRID_ATTR(UPGRID(theGrid)),IF_FORWARD,sizeof(int), + DDD_IFAOnewayX(context, + dddctrl.NodeAllIF,GRID_ATTR(UPGRID(theGrid)),IF_FORWARD,sizeof(int), Gather_NodeInfo,Scatter_NodeInfo); if (EDIDENTASSERT) - DDD_IFAOnewayX(theGrid->dddContext(), - EdgeSymmVHIF,GRID_ATTR(UPGRID(theGrid)),IF_FORWARD,sizeof(int), + DDD_IFAOnewayX(context, + dddctrl.EdgeSymmVHIF,GRID_ATTR(UPGRID(theGrid)),IF_FORWARD,sizeof(int), Gather_EdgeInfo,Scatter_EdgeInfo); if (0) - DDD_IFAOnewayX(theGrid->dddContext(), - EdgeSymmVHIF,GRID_ATTR(UPGRID(theGrid)),IF_FORWARD,sizeof(int), + DDD_IFAOnewayX(context, + dddctrl.EdgeSymmVHIF,GRID_ATTR(UPGRID(theGrid)),IF_FORWARD,sizeof(int), Gather_TestEdgeInfo,Scatter_TestEdgeInfo); } - DDD_IFAOnewayX(theGrid->dddContext(), - EdgeSymmVHIF,GRID_ATTR(theGrid),IF_FORWARD,sizeof(int), + DDD_IFAOnewayX(context, + dddctrl.EdgeSymmVHIF,GRID_ATTR(theGrid),IF_FORWARD,sizeof(int), Gather_IdentSonObjects,Scatter_IdentSonObjects); #else /* identify the sonedges */ - DDD_IFAOnewayX(theGrid->dddContext(), - EdgeSymmVHIF,GRID_ATTR(theGrid),IF_FORWARD,sizeof(int), + DDD_IFAOnewayX(context, + dddctrl.EdgeSymmVHIF,GRID_ATTR(theGrid),IF_FORWARD,sizeof(int), Gather_SonEdgeInfo,Scatter_SonEdgeInfo); #endif diff --git a/parallel/dddif/initddd.cc b/parallel/dddif/initddd.cc index aeced6c67..049ad7980 100644 --- a/parallel/dddif/initddd.cc +++ b/parallel/dddif/initddd.cc @@ -89,7 +89,6 @@ NS_DIM_PREFIX NodeIF, NS_DIM_PREFIX NodeAllIF; DDD_IF NS_DIM_PREFIX BorderVectorIF, NS_DIM_PREFIX BorderVectorSymmIF, NS_DIM_PREFIX OuterVectorIF, NS_DIM_PREFIX OuterVectorSymmIF, NS_DIM_PREFIX VectorVIF, NS_DIM_PREFIX VectorVAllIF, NS_DIM_PREFIX VectorIF; -static DDD_IF VertexIF; /* DDD interfaces for edge communication */ DDD_IF NS_DIM_PREFIX EdgeIF, NS_DIM_PREFIX BorderEdgeSymmIF, NS_DIM_PREFIX EdgeHIF, NS_DIM_PREFIX EdgeVHIF, NS_DIM_PREFIX EdgeSymmVHIF; @@ -669,33 +668,33 @@ static void ddd_IfInit(DDD::DDDContext& context) A[0] = PrioMaster; B[0] = PrioHGhost; B[1] = PrioVHGhost; - ElementIF = DDD_IFDefine(context, nO,O,1,A,2,B); - DDD_IFSetName(context, ElementIF, "ElementIF: Master->HGhost/VHGhost"); + dddctrl.ElementIF = DDD_IFDefine(context, nO,O,1,A,2,B); + DDD_IFSetName(context, dddctrl.ElementIF, "ElementIF: Master->HGhost/VHGhost"); A[0] = PrioMaster; A[1] = PrioHGhost; A[2] = PrioVHGhost; B[0] = PrioMaster; B[1] = PrioHGhost; B[2] = PrioVHGhost; - ElementSymmIF = DDD_IFDefine(context, nO,O,3,A,3,B); - DDD_IFSetName(context, ElementSymmIF, "ElementSymmIF: Master/HGhost/VHGhost"); + dddctrl.ElementSymmIF = DDD_IFDefine(context, nO,O,3,A,3,B); + DDD_IFSetName(context, dddctrl.ElementSymmIF, "ElementSymmIF: Master/HGhost/VHGhost"); A[0] = PrioMaster; B[0] = PrioVGhost; B[1] = PrioVHGhost; - ElementVIF = DDD_IFDefine(context, nO,O,1,A,2,B); - DDD_IFSetName(context, ElementVIF, "ElementVIF: Master->VGhost/VHGhost"); + dddctrl.ElementVIF = DDD_IFDefine(context, nO,O,1,A,2,B); + DDD_IFSetName(context, dddctrl.ElementVIF, "ElementVIF: Master->VGhost/VHGhost"); A[0] = PrioMaster; A[1] = PrioVGhost; A[2] = PrioVHGhost; B[0] = PrioMaster; B[1] = PrioVGhost; B[2] = PrioVHGhost; - ElementSymmVIF = DDD_IFDefine(context, nO,O,3,A,3,B); - DDD_IFSetName(context, ElementSymmVIF, "ElementSymmVIF: Master/VGhost/VHGhost"); + dddctrl.ElementSymmVIF = DDD_IFDefine(context, nO,O,3,A,3,B); + DDD_IFSetName(context, dddctrl.ElementSymmVIF, "ElementSymmVIF: Master/VGhost/VHGhost"); A[0] = PrioMaster; B[0] = PrioVGhost; B[1] = PrioHGhost; B[2] = PrioVHGhost; - ElementVHIF = DDD_IFDefine(context, nO,O,1,A,3,B); - DDD_IFSetName(context, ElementVHIF, "ElementVHIF: Master->VGhost/HGhost/VHGhost"); + dddctrl.ElementVHIF = DDD_IFDefine(context, nO,O,1,A,3,B); + DDD_IFSetName(context, dddctrl.ElementVHIF, "ElementVHIF: Master->VGhost/HGhost/VHGhost"); A[0] = PrioMaster; A[1] = PrioVGhost; A[2] = PrioHGhost; A[3] = PrioVHGhost; B[0] = PrioMaster; B[1] = PrioVGhost; B[2] = PrioHGhost; B[3] = PrioVHGhost; - ElementSymmVHIF = DDD_IFDefine(context, nO,O,4,A,4,B); - DDD_IFSetName(context, ElementSymmVHIF, "ElementSymmVHIF: Master/VGhost/HGhost/VHGhost"); + dddctrl.ElementSymmVHIF = DDD_IFDefine(context, nO,O,4,A,4,B); + DDD_IFSetName(context, dddctrl.ElementSymmVHIF, "ElementSymmVHIF: Master/VGhost/HGhost/VHGhost"); /* define node interfaces */ @@ -703,33 +702,33 @@ static void ddd_IfInit(DDD::DDDContext& context) A[0] = PrioBorder; B[0] = PrioMaster; - BorderNodeIF = DDD_IFDefine(context, 1,O,1,A,1,B); - DDD_IFSetName(context, BorderNodeIF, "BorderNodeIF: Border->Master"); + dddctrl.BorderNodeIF = DDD_IFDefine(context, 1,O,1,A,1,B); + DDD_IFSetName(context, dddctrl.BorderNodeIF, "BorderNodeIF: Border->Master"); A[0] = PrioMaster; A[1] = PrioBorder; B[0] = PrioMaster; B[1] = PrioBorder; - BorderNodeSymmIF = DDD_IFDefine(context, 1,O,2,A,2,B); - DDD_IFSetName(context, BorderNodeSymmIF, "BorderNodeSymmIF: Border/Master"); + dddctrl.BorderNodeSymmIF = DDD_IFDefine(context, 1,O,2,A,2,B); + DDD_IFSetName(context, dddctrl.BorderNodeSymmIF, "BorderNodeSymmIF: Border/Master"); A[0] = PrioMaster; B[0] = PrioHGhost; B[1] = PrioVHGhost; - OuterNodeIF = DDD_IFDefine(context, 1,O,1,A,2,B); - DDD_IFSetName(context, OuterNodeIF, "OuterNodeIF: Master->HGhost/VGhost"); + dddctrl.OuterNodeIF = DDD_IFDefine(context, 1,O,1,A,2,B); + DDD_IFSetName(context, dddctrl.OuterNodeIF, "OuterNodeIF: Master->HGhost/VGhost"); A[0] = PrioMaster; B[0] = PrioVGhost; B[1] = PrioVHGhost; - NodeVIF = DDD_IFDefine(context, 1,O,1,A,2,B); - DDD_IFSetName(context, NodeVIF, "NodeVIF: Master->VGhost/VHGhost"); + dddctrl.NodeVIF = DDD_IFDefine(context, 1,O,1,A,2,B); + DDD_IFSetName(context, dddctrl.NodeVIF, "NodeVIF: Master->VGhost/VHGhost"); A[0] = PrioMaster; B[0] = PrioVGhost; B[1] = PrioHGhost; B[2] = PrioVHGhost; - NodeIF = DDD_IFDefine(context, 1,O,1,A,3,B); - DDD_IFSetName(context, NodeIF, "NodeIF: Master->VGhost/HGhost/VHGhost"); + dddctrl.NodeIF = DDD_IFDefine(context, 1,O,1,A,3,B); + DDD_IFSetName(context, dddctrl.NodeIF, "NodeIF: Master->VGhost/HGhost/VHGhost"); A[0] = PrioMaster; A[1] = PrioBorder; A[2] = PrioVGhost; A[3] = PrioHGhost; A[4] = PrioVHGhost; B[0] = PrioMaster; B[1] = PrioBorder; B[2] = PrioVGhost; B[3] = PrioHGhost; B[4] = PrioVHGhost; - NodeAllIF = DDD_IFDefine(context, 1,O,5,A,5,B); - DDD_IFSetName(context, NodeAllIF, "NodeAllIF: All/All"); + dddctrl.NodeAllIF = DDD_IFDefine(context, 1,O,5,A,5,B); + DDD_IFSetName(context, dddctrl.NodeAllIF, "NodeAllIF: All/All"); /* define vector interfaces */ @@ -737,46 +736,46 @@ static void ddd_IfInit(DDD::DDDContext& context) A[0] = PrioBorder; B[0] = PrioMaster; - BorderVectorIF = DDD_IFDefine(context, 1,O,1,A,1,B); - DDD_IFSetName(context, BorderVectorIF, "BorderVectorIF: Border->Master"); + dddctrl.BorderVectorIF = DDD_IFDefine(context, 1,O,1,A,1,B); + DDD_IFSetName(context, dddctrl.BorderVectorIF, "BorderVectorIF: Border->Master"); A[0] = PrioMaster; A[1] = PrioBorder; B[0] = PrioMaster; B[1] = PrioBorder; - BorderVectorSymmIF = DDD_IFDefine(context, 1,O,2,A,2,B); - DDD_IFSetName(context, BorderVectorSymmIF, "BorderVectorSymmIF: Master/Border"); + dddctrl.BorderVectorSymmIF = DDD_IFDefine(context, 1,O,2,A,2,B); + DDD_IFSetName(context, dddctrl.BorderVectorSymmIF, "BorderVectorSymmIF: Master/Border"); A[0] = PrioMaster; B[0] = PrioHGhost; B[1] = PrioVHGhost; - OuterVectorIF = DDD_IFDefine(context, 1,O,1,A,2,B); - DDD_IFSetName(context, OuterVectorIF, "OuterVectorIF: Master->HGhost/VHGhost"); + dddctrl.OuterVectorIF = DDD_IFDefine(context, 1,O,1,A,2,B); + DDD_IFSetName(context, dddctrl.OuterVectorIF, "OuterVectorIF: Master->HGhost/VHGhost"); A[0] = PrioMaster; A[1] = PrioBorder; A[2] = PrioHGhost; A[3] = PrioVHGhost; B[0] = PrioMaster; B[1] = PrioBorder; B[2] = PrioHGhost; B[3] = PrioVHGhost; - OuterVectorSymmIF = DDD_IFDefine(context, 1,O,4,A,4,B); - DDD_IFSetName(context, OuterVectorSymmIF, "OuterVectorSymmIF: Master/Border/HGhost/VHGhost"); + dddctrl.OuterVectorSymmIF = DDD_IFDefine(context, 1,O,4,A,4,B); + DDD_IFSetName(context, dddctrl.OuterVectorSymmIF, "OuterVectorSymmIF: Master/Border/HGhost/VHGhost"); A[0] = PrioMaster; B[0] = PrioVGhost; B[1] = PrioVHGhost; - VectorVIF = DDD_IFDefine(context, 1,O,1,A,2,B); - DDD_IFSetName(context, VectorVIF, "VectorVIF: Master->VGhost/VHGhost"); + dddctrl.VectorVIF = DDD_IFDefine(context, 1,O,1,A,2,B); + DDD_IFSetName(context, dddctrl.VectorVIF, "VectorVIF: Master->VGhost/VHGhost"); A[0] = PrioMaster; A[1] = PrioBorder; A[2] = PrioVGhost; A[3] = PrioVHGhost; B[0] = PrioMaster; B[1] = PrioBorder; - VectorVAllIF = DDD_IFDefine(context, 1,O,4,A,2,B); - DDD_IFSetName(context, VectorVAllIF, "VectorVAllIF: Master/Border/VGhost/VHGhost->Master/Border"); + dddctrl.VectorVAllIF = DDD_IFDefine(context, 1,O,4,A,2,B); + DDD_IFSetName(context, dddctrl.VectorVAllIF, "VectorVAllIF: Master/Border/VGhost/VHGhost->Master/Border"); A[0] = PrioMaster; B[0] = PrioVGhost; B[1] = PrioVHGhost; B[2] = PrioHGhost; - VectorIF = DDD_IFDefine(context, 1,O,1,A,3,B); - DDD_IFSetName(context, VectorIF, "VectorIF: Master->VGhost/VHGhost/HGhost"); + dddctrl.VectorIF = DDD_IFDefine(context, 1,O,1,A,3,B); + DDD_IFSetName(context, dddctrl.VectorIF, "VectorIF: Master->VGhost/VHGhost/HGhost"); /* define vertex interfaces */ O[0] = dddctrl.TypeIVertex; O[1] = dddctrl.TypeBVertex; A[0] = PrioMaster; B[0] = PrioMaster; - VertexIF = DDD_IFDefine(context, 2,O,1,A,1,B); - DDD_IFSetName(context, VertexIF, "VertexIF: Master<->Master"); + dddctrl.VertexIF = DDD_IFDefine(context, 2,O,1,A,1,B); + DDD_IFSetName(context, dddctrl.VertexIF, "VertexIF: Master<->Master"); /* define edge interfaces */ @@ -784,28 +783,28 @@ static void ddd_IfInit(DDD::DDDContext& context) A[0] = PrioMaster; B[0] = PrioMaster; - EdgeIF = DDD_IFDefine(context, 1,O,1,A,1,B); - DDD_IFSetName(context, EdgeIF, "EdgeIF: Master<->Master"); + dddctrl.EdgeIF = DDD_IFDefine(context, 1,O,1,A,1,B); + DDD_IFSetName(context, dddctrl.EdgeIF, "EdgeIF: Master<->Master"); A[0] = PrioMaster; A[1] = PrioBorder; B[0] = PrioMaster; B[1] = PrioBorder; - BorderEdgeSymmIF = DDD_IFDefine(context, 1,O,2,A,2,B); - DDD_IFSetName(context, BorderEdgeSymmIF, "BorderEdgeSymmIF: Master/Border"); + dddctrl.BorderEdgeSymmIF = DDD_IFDefine(context, 1,O,2,A,2,B); + DDD_IFSetName(context, dddctrl.BorderEdgeSymmIF, "BorderEdgeSymmIF: Master/Border"); A[0] = PrioMaster; A[1] = PrioBorder; B[0] = PrioMaster; B[1] = PrioBorder; B[2] = PrioHGhost; B[3] = PrioVHGhost; - EdgeHIF = DDD_IFDefine(context, 1,O,2,A,4,B); - DDD_IFSetName(context, EdgeHIF, "EdgeHIF: Master/Border->Master/Border/PrioHGhost/PrioVHGhost"); + dddctrl.EdgeHIF = DDD_IFDefine(context, 1,O,2,A,4,B); + DDD_IFSetName(context, dddctrl.EdgeHIF, "EdgeHIF: Master/Border->Master/Border/PrioHGhost/PrioVHGhost"); A[0] = PrioMaster; A[1] = PrioBorder; B[0] = PrioMaster; B[1] = PrioBorder; B[2] = PrioVGhost; B[3] = PrioHGhost; B[4] = PrioVHGhost; - EdgeVHIF = DDD_IFDefine(context, 1,O,2,A,5,B); - DDD_IFSetName(context, EdgeVHIF, "EdgeVHIF: Master/Border->Master/Border/VGhost/HGhost/VHGhost"); + dddctrl.EdgeVHIF = DDD_IFDefine(context, 1,O,2,A,5,B); + DDD_IFSetName(context, dddctrl.EdgeVHIF, "EdgeVHIF: Master/Border->Master/Border/VGhost/HGhost/VHGhost"); A[0] = PrioMaster; A[1] = PrioBorder; A[2] = PrioVGhost; A[3] = PrioHGhost; A[4] = PrioVHGhost; B[0] = PrioMaster; B[1] = PrioBorder; B[2] = PrioVGhost; B[3] = PrioHGhost; B[4] = PrioVHGhost; - EdgeSymmVHIF = DDD_IFDefine(context, 1,O,5,A,5,B); - DDD_IFSetName(context, EdgeSymmVHIF, "EdgeSymmVHIF: Master/Border/VGhost/HGhost/VHGhost"); + dddctrl.EdgeSymmVHIF = DDD_IFDefine(context, 1,O,5,A,5,B); + DDD_IFSetName(context, dddctrl.EdgeSymmVHIF, "EdgeSymmVHIF: Master/Border/VGhost/HGhost/VHGhost"); } diff --git a/parallel/dddif/parallel.h b/parallel/dddif/parallel.h index a2fafea1a..6a5a34f2d 100644 --- a/parallel/dddif/parallel.h +++ b/parallel/dddif/parallel.h @@ -246,6 +246,18 @@ struct DDD_CTRL DDD_TYPE TypeBndP; DDD_TYPE TypeEdge; DDD_TYPE TypeBndS; + + /* DDD Interfaces */ + DDD_IF ElementIF, ElementSymmIF, ElementVIF, ElementSymmVIF, + ElementVHIF, ElementSymmVHIF; + DDD_IF BorderNodeIF, BorderNodeSymmIF, OuterNodeIF, NodeVIF, + NodeIF, NodeAllIF; + DDD_IF BorderVectorIF, BorderVectorSymmIF, + OuterVectorIF, OuterVectorSymmIF, + VectorVIF, VectorVAllIF, VectorIF; + DDD_IF VertexIF; + DDD_IF EdgeIF, BorderEdgeSymmIF, EdgeHIF, EdgeVHIF, + EdgeSymmVHIF; }; #endif diff --git a/parallel/dddif/partition.cc b/parallel/dddif/partition.cc index 543e4107f..b44c9d47c 100644 --- a/parallel/dddif/partition.cc +++ b/parallel/dddif/partition.cc @@ -355,6 +355,9 @@ static int Scatter_RestrictedPartition (DDD::DDDContext&, DDD_OBJ obj, void *dat INT NS_DIM_PREFIX RestrictPartitioning (MULTIGRID *theMG) { + auto& context = theMG->dddContext(); + const auto& dddctrl = ddd_ctrl(context); + INT i,j; ELEMENT *theElement; ELEMENT *theFather; @@ -409,8 +412,8 @@ INT NS_DIM_PREFIX RestrictPartitioning (MULTIGRID *theMG) } } /* transfer restriction flags to master copies of father */ - DDD_IFAOneway(theGrid->dddContext(), - ElementVHIF,GRID_ATTR(theGrid),IF_BACKWARD,sizeof(INT), + DDD_IFAOneway(context, + dddctrl.ElementVHIF,GRID_ATTR(theGrid),IF_BACKWARD,sizeof(INT), Gather_ElementRestriction, Scatter_ElementRestriction); } @@ -420,8 +423,8 @@ INT NS_DIM_PREFIX RestrictPartitioning (MULTIGRID *theMG) theGrid = GRID_ON_LEVEL(theMG,i); /* transfer (new) partitions of elements to non master copies */ - DDD_IFAOnewayX(theGrid->dddContext(), - ElementVHIF,GRID_ATTR(theGrid),IF_FORWARD,sizeof(INT), + DDD_IFAOnewayX(context, + dddctrl.ElementVHIF,GRID_ATTR(theGrid),IF_FORWARD,sizeof(INT), Gather_RestrictedPartition, Scatter_RestrictedPartition); for (theElement=PFIRSTELEMENT(theGrid); theElement!=NULL; diff --git a/parallel/dddif/pgmcheck.cc b/parallel/dddif/pgmcheck.cc index 7b87c810e..d883e2454 100644 --- a/parallel/dddif/pgmcheck.cc +++ b/parallel/dddif/pgmcheck.cc @@ -716,6 +716,9 @@ static int Scatter_EdgeObjectGids (DDD::DDDContext& context, DDD_OBJ obj, void * static INT CheckDistributedObjects (GRID *theGrid) { + auto& context = theGrid->dddContext(); + const auto& dddctrl = ddd_ctrl(context); + INT nerrors; #ifdef __TWODIM__ INT size = MAX_CORNERS_OF_ELEM; /* compare the 3/4 node ids */ @@ -727,14 +730,14 @@ static INT CheckDistributedObjects (GRID *theGrid) check_distributed_objects_errors = 0; // void DDD_IFAOnewayX (DDD::DDDContext&, DDD_IF, DDD_ATTR, DDD_IF_DIR, size_t, ComProcXPtr, ComProcXPtr); - DDD_IFAOnewayX(theGrid->dddContext(), - ElementSymmVHIF,GRID_ATTR(theGrid),IF_BACKWARD,size*sizeof(DDD_GID), + DDD_IFAOnewayX(context, + dddctrl.ElementSymmVHIF,GRID_ATTR(theGrid),IF_BACKWARD,size*sizeof(DDD_GID), Gather_ElemObjectGids, Scatter_ElemObjectGids); #ifdef __THREEDIM__ if (0) - DDD_IFAOnewayX(theGrid->dddContext(), - BorderEdgeSymmIF,GRID_ATTR(theGrid),IF_BACKWARD,3*sizeof(DDD_GID), + DDD_IFAOnewayX(context, + dddctrl.BorderEdgeSymmIF,GRID_ATTR(theGrid),IF_BACKWARD,3*sizeof(DDD_GID), Gather_EdgeObjectGids, Scatter_EdgeObjectGids); #endif diff --git a/parallel/dddif/priority.cc b/parallel/dddif/priority.cc index d2cdc9d14..cc0697715 100644 --- a/parallel/dddif/priority.cc +++ b/parallel/dddif/priority.cc @@ -522,8 +522,11 @@ void NS_DIM_PREFIX SetGhostObjectPriorities (GRID *theGrid) INT NS_DIM_PREFIX SetBorderPriorities (GRID *theGrid) { - DDD_IFAExecLocal(theGrid->dddContext(), - BorderNodeSymmIF,GRID_ATTR(theGrid), + auto& context = theGrid->dddContext(); + const auto& dddctrl = ddd_ctrl(context); + + DDD_IFAExecLocal(context, + dddctrl.BorderNodeSymmIF,GRID_ATTR(theGrid), ComputeNodeBorderPrios); /* TODO: distinguish two cases: @@ -532,12 +535,12 @@ INT NS_DIM_PREFIX SetBorderPriorities (GRID *theGrid) 2. with other vectortypes (side and/or edgevectors) use ComputeVectorBorderPrios */ - DDD_IFAExecLocal(theGrid->dddContext(), - BorderVectorSymmIF,GRID_ATTR(theGrid), + DDD_IFAExecLocal(context, + dddctrl.BorderVectorSymmIF,GRID_ATTR(theGrid), ComputeVectorBorderPrios); - DDD_IFAExecLocal(theGrid->dddContext(), - BorderEdgeSymmIF,GRID_ATTR(theGrid), + DDD_IFAExecLocal(context, + dddctrl.BorderEdgeSymmIF,GRID_ATTR(theGrid), ComputeEdgeBorderPrios); return(GM_OK); diff --git a/parallel/dddif/trans.cc b/parallel/dddif/trans.cc index 88691b3f9..1abaf93e3 100644 --- a/parallel/dddif/trans.cc +++ b/parallel/dddif/trans.cc @@ -237,12 +237,15 @@ static int Scatter_ElemDest (DDD::DDDContext&, DDD_OBJ obj, void *data) static int UpdateGhostDests (MULTIGRID *theMG) { - DDD_IFOneway(theMG->dddContext(), - ElementIF, IF_FORWARD, sizeof(DDD_PROC), + auto& context = theMG->dddContext(); + const auto& dddctrl = ddd_ctrl(context); + + DDD_IFOneway(context, + dddctrl.ElementIF, IF_FORWARD, sizeof(DDD_PROC), Gather_ElemDest, Scatter_ElemDest); - DDD_IFOneway(theMG->dddContext(), - ElementVIF, IF_FORWARD, sizeof(DDD_PROC), + DDD_IFOneway(context, + dddctrl.ElementVIF, IF_FORWARD, sizeof(DDD_PROC), Gather_ElemDest, Scatter_ElemDest); return 0; @@ -500,8 +503,11 @@ static int Scatter_VHGhostCmd (DDD::DDDContext& context, DDD_OBJ obj, void *data static int ComputeGhostCmds (MULTIGRID *theMG) { - DDD_IFOnewayX(theMG->dddContext(), - ElementVHIF, IF_FORWARD, sizeof(int), + auto& context = theMG->dddContext(); + const auto& dddctrl = ddd_ctrl(context); + + DDD_IFOnewayX(context, + dddctrl.ElementVHIF, IF_FORWARD, sizeof(int), Gather_VHGhostCmd, Scatter_VHGhostCmd); return(0); -- GitLab