From 9a0e9e8b153ddd285ce9df9e5beb3a060752a3c8 Mon Sep 17 00:00:00 2001 From: Ansgar Burchardt <Ansgar.Burchardt@tu-dresden.de> Date: Fri, 27 Apr 2018 17:14:24 +0200 Subject: [PATCH] DDD: access `DDD_CTRL` object via `ddd_ctrl(context)` This allows removing the global object later. --- gm/ugm.cc | 8 ++-- parallel/dddif/debugger.cc | 4 +- parallel/dddif/handler.cc | 98 +++++++++++++++++++------------------- parallel/dddif/identify.cc | 22 ++++----- parallel/dddif/initddd.cc | 63 ++++++++++++------------ parallel/dddif/parallel.h | 26 ++++++++-- parallel/dddif/pgmcheck.cc | 11 +++-- parallel/dddif/trans.cc | 1 + 8 files changed, 129 insertions(+), 104 deletions(-) diff --git a/gm/ugm.cc b/gm/ugm.cc index 54a5fadbf..df90ca0b3 100644 --- a/gm/ugm.cc +++ b/gm/ugm.cc @@ -278,9 +278,9 @@ static void ConstructDDDObject (DDD::DDDContext& context, void *obj, INT size, I { memset(obj,0,size); /* link this object to DDD management */ - if (HAS_DDDHDR(type)) + if (HAS_DDDHDR(context, type)) { - DDD_TYPE dddtype = DDDTYPE(type); + DDD_TYPE dddtype = DDDTYPE(context, type); DDD_HDR dddhdr = (DDD_HDR)(((char *)obj) + DDD_InfoHdrOffset(context, dddtype)); DDD_HdrConstructor(context, dddhdr, dddtype, PrioMaster, 0); } @@ -326,10 +326,10 @@ static void DestructDDDObject(DDD::DDDContext& context, void *object, INT type) if (type!=NOOBJ) { /* unlink object from DDD management */ - if (HAS_DDDHDR(type)) + if (HAS_DDDHDR(context, type)) { DDD_HDR dddhdr = (DDD_HDR) - (((char *)object)+DDD_InfoHdrOffset(context, DDDTYPE(type))); + (((char *)object)+DDD_InfoHdrOffset(context, DDDTYPE(context, type))); DDD_HdrDestructor(context, dddhdr); } } diff --git a/parallel/dddif/debugger.cc b/parallel/dddif/debugger.cc index c0c83b4cd..b009e23eb 100644 --- a/parallel/dddif/debugger.cc +++ b/parallel/dddif/debugger.cc @@ -87,7 +87,7 @@ void NS_DIM_PREFIX ddd_pstat(DDD::DDDContext& context, char *arg) switch (cmd) { case 'X' : - dddif_PrintGridRelations(dddctrl.currMG); + dddif_PrintGridRelations(ddd_ctrl(context).currMG); break; case 'm' : @@ -162,7 +162,7 @@ void NS_DIM_PREFIX ddd_pstat(DDD::DDDContext& context, char *arg) break; case 'b' : - buggy(dddctrl.currMG); + buggy(ddd_ctrl(context).currMG); UserWrite("BUGGY: returning control to caller\n"); break; } diff --git a/parallel/dddif/handler.cc b/parallel/dddif/handler.cc index 65f8b84a0..7d620900a 100644 --- a/parallel/dddif/handler.cc +++ b/parallel/dddif/handler.cc @@ -217,11 +217,11 @@ static GRID *GetGridOnDemand (MULTIGRID *mg, int level) /****************************************************************************/ /****************************************************************************/ -static void VectorUpdate (DDD::DDDContext&, DDD_OBJ obj) +static void VectorUpdate (DDD::DDDContext& context, DDD_OBJ obj) { VECTOR *pv = (VECTOR *)obj; INT level = ATTR_TO_GLEVEL(DDD_InfoAttr(PARHDR(pv))); - GRID *theGrid = GRID_ON_LEVEL(dddctrl.currMG,level); + GRID *theGrid = GRID_ON_LEVEL(ddd_ctrl(context).currMG,level); INT prio = PRIO(pv); PRINTDEBUG(dddif,1,(PFMT " VectorUpdate(): v=" VINDEX_FMTX @@ -270,7 +270,7 @@ static void VectorXferCopy(DDD::DDDContext& context, DDD_OBJ obj, DDD_PROC proc, /* else { - GRID *theGrid = GRID_ON_LEVEL(dddctrl.currMG,level); + GRID *theGrid = GRID_ON_LEVEL(ddd_ctrl(context).currMG,level); MATRIX *theMatrix,*next; for (theMatrix=VSTART(pv); theMatrix!=NULL; theMatrix = next) { @@ -321,13 +321,13 @@ static void VectorGatherMatX (DDD::DDDContext&, DDD_OBJ obj, int cnt, DDD_TYPE t } -static void VectorScatterConnX (DDD::DDDContext&, DDD_OBJ obj, int cnt, DDD_TYPE type_id, char **Data, int newness) +static void VectorScatterConnX (DDD::DDDContext& context, DDD_OBJ obj, int cnt, DDD_TYPE type_id, char **Data, int newness) { VECTOR *vec = (VECTOR *)obj; CONNECTION *first = NULL, *last = NULL; INT level = ATTR_TO_GLEVEL(DDD_InfoAttr(PARHDR(vec))); - GRID *theGrid = GRID_ON_LEVEL(dddctrl.currMG,level); + GRID *theGrid = GRID_ON_LEVEL(ddd_ctrl(context).currMG,level); INT prio = PRIO(vec); INT i; INT nconn = 0; @@ -398,7 +398,7 @@ static void VectorScatterConnX (DDD::DDDContext&, DDD_OBJ obj, int cnt, DDD_TYPE { /* matrix diagonal entry, no other vector is involved */ CONNECTION *conn = (CONNECTION *) - GetMemoryForObject(dddctrl.currMG,UG_MSIZE(mcopy),MAOBJ); + GetMemoryForObject(ddd_ctrl(context).currMG,UG_MSIZE(mcopy),MAOBJ); nconn++; newconn++; @@ -445,7 +445,7 @@ static void VectorScatterConnX (DDD::DDDContext&, DDD_OBJ obj, int cnt, DDD_TYPE { MATRIX *otherm; CONNECTION *conn = (CONNECTION *) - GetMemoryForObject(dddctrl.currMG,2*UG_MSIZE(mcopy),MAOBJ); + GetMemoryForObject(ddd_ctrl(context).currMG,2*UG_MSIZE(mcopy),MAOBJ); nconn++; newconn++; @@ -584,12 +584,12 @@ static void VectorScatterConnX (DDD::DDDContext&, DDD_OBJ obj, int cnt, DDD_TYPE -static void VectorObjMkCons (DDD::DDDContext&, DDD_OBJ obj, int newness) +static void VectorObjMkCons (DDD::DDDContext& context, DDD_OBJ obj, int newness) { VECTOR *vec = (VECTOR *) obj; MATRIX *theMatrix,*Prev,*Next; INT level = ATTR_TO_GLEVEL(DDD_InfoAttr(PARHDR(vec))); - GRID *theGrid = GRID_ON_LEVEL(dddctrl.currMG,level); + GRID *theGrid = GRID_ON_LEVEL(ddd_ctrl(context).currMG,level); PRINTDEBUG(dddif,2,(PFMT " VectorObjMkCons(): v=" VINDEX_FMTX @@ -626,7 +626,7 @@ static void VectorObjMkCons (DDD::DDDContext&, DDD_OBJ obj, int newness) { INT size = ((MDIAG(theMatrix)) ? UG_MSIZE(theMatrix) : 2*UG_MSIZE(theMatrix)); - PutFreeObject(dddctrl.currMG,MMYCON(theMatrix),size,MAOBJ); + PutFreeObject(ddd_ctrl(context).currMG,MMYCON(theMatrix),size,MAOBJ); } @@ -639,11 +639,11 @@ static void VectorObjMkCons (DDD::DDDContext&, DDD_OBJ obj, int newness) } } -static void VectorPriorityUpdate (DDD::DDDContext&, DDD_OBJ obj, DDD_PRIO isnew) +static void VectorPriorityUpdate (DDD::DDDContext& context, DDD_OBJ obj, DDD_PRIO isnew) { VECTOR *pv = (VECTOR *)obj; INT level = ATTR_TO_GLEVEL(DDD_InfoAttr(PARHDR(pv))); - GRID *theGrid = GRID_ON_LEVEL(dddctrl.currMG,level); + GRID *theGrid = GRID_ON_LEVEL(ddd_ctrl(context).currMG,level); INT old = PRIO(pv); PRINTDEBUG(dddif,2,(PFMT " VectorPriorityUpdate(): v=" VINDEX_FMTX @@ -739,11 +739,11 @@ static void BVertexLDataConstructor (DDD::DDDContext&, DDD_OBJ obj) } -static void VertexUpdate (DDD::DDDContext&, DDD_OBJ obj) +static void VertexUpdate (DDD::DDDContext& context, DDD_OBJ obj) { VERTEX *theVertex = (VERTEX *) obj; INT level = LEVEL(theVertex); - GRID *theGrid = GRID_ON_LEVEL(dddctrl.currMG,level); + GRID *theGrid = GRID_ON_LEVEL(ddd_ctrl(context).currMG,level); INT prio = VXPRIO(theVertex); PRINTDEBUG(dddif,1,(PFMT " VertexUpdate(): v=" VID_FMTX " I/BVOBJ=%d\n", @@ -830,11 +830,11 @@ static void BVertexScatter (DDD::DDDContext&, DDD_OBJ obj, int cnt, DDD_TYPE typ } -static void VertexPriorityUpdate (DDD::DDDContext&, DDD_OBJ obj, DDD_PRIO new_) +static void VertexPriorityUpdate (DDD::DDDContext& context, DDD_OBJ obj, DDD_PRIO new_) { VERTEX *theVertex = (VERTEX *)obj; INT level = LEVEL(theVertex); - GRID *theGrid = GetGridOnDemand(dddctrl.currMG,level); + GRID *theGrid = GetGridOnDemand(ddd_ctrl(context).currMG,level); INT old = VXPRIO(theVertex); PRINTDEBUG(dddif,2,(PFMT " VertexPriorityUpdate(): v=" VID_FMTX @@ -894,7 +894,7 @@ static void NodeObjInit(DDD::DDDContext&, DDD_OBJ obj) } -static void NodeObjMkCons (DDD::DDDContext&, DDD_OBJ obj, int newness) +static void NodeObjMkCons (DDD::DDDContext& context, DDD_OBJ obj, int newness) { NODE *theNode = (NODE *) obj; @@ -940,7 +940,7 @@ static void NodeObjMkCons (DDD::DDDContext&, DDD_OBJ obj, int newness) #endif /* set pointer of vector to its node */ - if (dddctrl.nodeData && NVECTOR(theNode)) + if (ddd_ctrl(context).nodeData && NVECTOR(theNode)) #ifdef __PERIODIC_BOUNDARY__ if (VOBJECT(NVECTOR(theNode))==NULL || PRIO((NODE *)VOBJECT(NVECTOR(theNode)))<PRIO(theNode)) #endif @@ -962,12 +962,12 @@ static void NodeObjMkCons (DDD::DDDContext&, DDD_OBJ obj, int newness) /* */ /****************************************************************************/ -static void NodeUpdate (DDD::DDDContext&, DDD_OBJ obj) +static void NodeUpdate (DDD::DDDContext& context, DDD_OBJ obj) { NODE *theNode = (NODE *)obj; VERTEX *theVertex = MYVERTEX(theNode); INT level = LEVEL(theNode); - GRID *theGrid = GRID_ON_LEVEL(dddctrl.currMG,level); + GRID *theGrid = GRID_ON_LEVEL(ddd_ctrl(context).currMG,level); INT prio = PRIO(theNode); PRINTDEBUG(dddif,1,(PFMT " NodeUpdate(): n=" ID_FMTX " NDOBJ=%d\n", @@ -1071,12 +1071,12 @@ static void NodeXferCopy (DDD::DDDContext& context, DDD_OBJ obj, DDD_PROC proc, DDD_XferCopyObj(context, PARHDRV(MYVERTEX(theNode)), proc, prio); /* copy vector if defined */ - if (dddctrl.nodeData) + if (ddd_ctrl(context).nodeData) { vec = NVECTOR(theNode); if (vec != NULL) { INT Size = sizeof(VECTOR)-sizeof(DOUBLE) - +FMT_S_VEC_TP(MGFORMAT(dddctrl.currMG),VTYPE(vec)); + +FMT_S_VEC_TP(MGFORMAT(ddd_ctrl(context).currMG),VTYPE(vec)); PRINTDEBUG(dddif,2,(PFMT " NodeXferCopy(): n=" ID_FMTX " Xfer NODEVEC=" VINDEX_FMTX " size=%d\n", @@ -1088,11 +1088,11 @@ static void NodeXferCopy (DDD::DDDContext& context, DDD_OBJ obj, DDD_PROC proc, } -static void NodePriorityUpdate (DDD::DDDContext&, DDD_OBJ obj, DDD_PRIO new_) +static void NodePriorityUpdate (DDD::DDDContext& context, DDD_OBJ obj, DDD_PRIO new_) { NODE *pn = (NODE *)obj; INT level = LEVEL(pn); - GRID *theGrid = GetGridOnDemand(dddctrl.currMG,level); + GRID *theGrid = GetGridOnDemand(ddd_ctrl(context).currMG,level); INT old = PRIO(pn); PRINTDEBUG(dddif,2,(PFMT " NodePriorityUpdate(): n=" ID_FMTX " old=%d new=%d " @@ -1174,12 +1174,12 @@ DDD_TYPE NS_DIM_PREFIX NFatherObjType(DDD::DDDContext&, DDD_OBJ obj, DDD_OBJ ref /* */ /****************************************************************************/ -static void ElementLDataConstructor (DDD::DDDContext&, DDD_OBJ obj) +static void ElementLDataConstructor (DDD::DDDContext& context, DDD_OBJ obj) { INT i; ELEMENT *pe = (ELEMENT *)obj; INT level = LEVEL(pe); - GRID *theGrid = GetGridOnDemand(dddctrl.currMG,level); + GRID *theGrid = GetGridOnDemand(ddd_ctrl(context).currMG,level); INT prio = EPRIO(pe); pe->message_buffer(nullptr, 0); @@ -1245,11 +1245,11 @@ static void ElementUpdate (DDD::DDDContext&, DDD_OBJ obj) /* */ /****************************************************************************/ -static void ElementDelete (DDD::DDDContext&, DDD_OBJ obj) +static void ElementDelete (DDD::DDDContext& context, DDD_OBJ obj) { ELEMENT *pe = (ELEMENT *)obj; INT level = LEVEL(pe); - GRID *theGrid = GRID_ON_LEVEL(dddctrl.currMG,level); + GRID *theGrid = GRID_ON_LEVEL(ddd_ctrl(context).currMG,level); PRINTDEBUG(dddif,1,(PFMT " ElementDelete(): e=" EID_FMTX " EOBJ=%d l=%d " "ncon=%d\n", @@ -1342,12 +1342,12 @@ static void ElementXferCopy (DDD::DDDContext& context, DDD_OBJ obj, DDD_PROC pro DDD_XferCopyObj(context, PARHDR(edge), proc, prio); - if (dddctrl.edgeData) { + if (ddd_ctrl(context).edgeData) { VECTOR *vec = EDVECTOR(edge); if (vec != NULL) { int Size = sizeof(VECTOR)-sizeof(DOUBLE) - +FMT_S_VEC_TP(MGFORMAT(dddctrl.currMG),VTYPE(vec)); + +FMT_S_VEC_TP(MGFORMAT(ddd_ctrl(context).currMG),VTYPE(vec)); PRINTDEBUG(dddif,3,(PFMT " ElementXferCopy(): e=" EID_FMTX " EDGEVEC=" VINDEX_FMTX " size=%d\n", me,EID_PRTX(pe),VINDEX_PRTX(vec),Size)) @@ -1359,13 +1359,13 @@ static void ElementXferCopy (DDD::DDDContext& context, DDD_OBJ obj, DDD_PROC pro /* copy element vector */ - if (dddctrl.elemData) + if (ddd_ctrl(context).elemData) { vec = EVECTOR(pe); if (vec != NULL) { Size = sizeof(VECTOR)-sizeof(DOUBLE) - +FMT_S_VEC_TP(MGFORMAT(dddctrl.currMG),VTYPE(vec)); + +FMT_S_VEC_TP(MGFORMAT(ddd_ctrl(context).currMG),VTYPE(vec)); PRINTDEBUG(dddif,2,(PFMT " ElementXferCopy(): e=" EID_FMTX " ELEMVEC=" VINDEX_FMTX " size=%d\n", @@ -1376,7 +1376,7 @@ static void ElementXferCopy (DDD::DDDContext& context, DDD_OBJ obj, DDD_PROC pro } /* copy sidevectors */ - if (dddctrl.sideData) + if (ddd_ctrl(context).sideData) { for (i=0; i<SIDES_OF_ELEM(pe); i++) { @@ -1384,7 +1384,7 @@ static void ElementXferCopy (DDD::DDDContext& context, DDD_OBJ obj, DDD_PROC pro if (vec != NULL) { Size = sizeof(VECTOR)-sizeof(DOUBLE) - +FMT_S_VEC_TP(MGFORMAT(dddctrl.currMG),VTYPE(vec)); + +FMT_S_VEC_TP(MGFORMAT(ddd_ctrl(context).currMG),VTYPE(vec)); PRINTDEBUG(dddif,2,(PFMT " ElementXferCopy(): e=" EID_FMTX " SIDEVEC=" VINDEX_FMTX " size=%d\n", @@ -1399,10 +1399,10 @@ static void ElementXferCopy (DDD::DDDContext& context, DDD_OBJ obj, DDD_PROC pro /****************************************************************************/ #ifdef __TWODIM__ -static void ElemGatherEdge (DDD::DDDContext&, ELEMENT *pe, int cnt, char *data) +static void ElemGatherEdge (DDD::DDDContext& context, ELEMENT *pe, int cnt, char *data) { INT i; - INT size = sizeof(EDGE) - ((dddctrl.edgeData) ? 0 : sizeof(VECTOR*)); + INT size = sizeof(EDGE) - ((ddd_ctrl(context).edgeData) ? 0 : sizeof(VECTOR*)); PRINTDEBUG(dddif,3,(PFMT " ElemGatherEdge(): pe=" EID_FMTX " cnt=%d size=%d\n", me,EID_PRTX(pe),cnt,size)) @@ -1425,12 +1425,12 @@ static void ElemGatherEdge (DDD::DDDContext&, ELEMENT *pe, int cnt, char *data) } -static void ElemScatterEdge (DDD::DDDContext&, ELEMENT *pe, int cnt, char *data, int newness) +static void ElemScatterEdge (DDD::DDDContext& context, ELEMENT *pe, int cnt, char *data, int newness) { INT i; - INT size = sizeof(EDGE) - ((dddctrl.edgeData) ? 0 : sizeof(VECTOR*)); + INT size = sizeof(EDGE) - ((ddd_ctrl(context).edgeData) ? 0 : sizeof(VECTOR*)); INT level = LEVEL(pe); - GRID *theGrid = GetGridOnDemand(dddctrl.currMG,level); + GRID *theGrid = GetGridOnDemand(ddd_ctrl(context).currMG,level); PRINTDEBUG(dddif,3,(PFMT " ElemScatterEdge(): pe=" EID_FMTX " cnt=%d newness=%d\n", @@ -1558,7 +1558,7 @@ static void ElemScatterEdge (DDD::DDDContext&, ELEMENT *pe, int cnt, char *data, /* copy edge vector pointer */ if (newness == XFER_NEW) - if (dddctrl.edgeData) + if (ddd_ctrl(context).edgeData) if (EDVECTOR(ecopy) != NULL) { EDVECTOR(enew) = EDVECTOR(ecopy); VOBJECT(EDVECTOR(enew)) = (GEOM_OBJECT *)enew; @@ -1667,7 +1667,7 @@ static void ElemScatterB (DDD::DDDContext& context, DDD_OBJ obj, int cnt, DDD_TY /****************************************************************************/ -static void ElementObjMkCons (DDD::DDDContext&, DDD_OBJ obj, int newness) +static void ElementObjMkCons (DDD::DDDContext& context, DDD_OBJ obj, int newness) { INT i,j; INT lostson = 0; @@ -1678,7 +1678,7 @@ static void ElementObjMkCons (DDD::DDDContext&, DDD_OBJ obj, int newness) ELEMENT *theFather = EFATHER(pe); ELEMENT *NbElement; INT level = LEVEL(pe); - GRID *theGrid = GetGridOnDemand(dddctrl.currMG,level); + GRID *theGrid = GetGridOnDemand(ddd_ctrl(context).currMG,level); PRINTDEBUG(dddif,1,(PFMT " ElementObjMkCons(): pe=" EID_FMTX @@ -1704,9 +1704,9 @@ static void ElementObjMkCons (DDD::DDDContext&, DDD_OBJ obj, int newness) } /* reconstruct pointer from vectors */ - if (dddctrl.elemData) VOBJECT(EVECTOR(pe)) = (GEOM_OBJECT*)pe; + if (ddd_ctrl(context).elemData) VOBJECT(EVECTOR(pe)) = (GEOM_OBJECT*)pe; - if (dddctrl.sideData) + if (ddd_ctrl(context).sideData) for (i=0; i<SIDES_OF_ELEM(pe); i++) { VOBJECT(SVECTOR(pe,i)) = (GEOM_OBJECT*)pe; SETVECTORSIDE(SVECTOR(pe,i), i); @@ -1849,13 +1849,13 @@ static void ElementObjMkCons (DDD::DDDContext&, DDD_OBJ obj, int newness) } -static void ElementPriorityUpdate (DDD::DDDContext&, DDD_OBJ obj, DDD_PRIO new_) +static void ElementPriorityUpdate (DDD::DDDContext& context, DDD_OBJ obj, DDD_PRIO new_) { ELEMENT *pe = (ELEMENT *)obj; ELEMENT *theFather = EFATHER(pe); ELEMENT *succe = SUCCE(pe); INT level = LEVEL(pe); - GRID *theGrid = GetGridOnDemand(dddctrl.currMG,level); + GRID *theGrid = GetGridOnDemand(ddd_ctrl(context).currMG,level); INT old = EPRIO(pe); INT lostson = 1; @@ -1996,7 +1996,7 @@ static void EdgeUpdate (DDD::DDDContext& context, DDD_OBJ obj) { EDGE *pe = (EDGE *)obj; INT level = LEVEL(NBNODE(LINK0(pe))); - GRID *theGrid = GetGridOnDemand(dddctrl.currMG,level); + GRID *theGrid = GetGridOnDemand(ddd_ctrl(context).currMG,level); PRINTDEBUG(dddif,1,(PFMT " EdgeUpdate(): edge=%x/%08x EDOBJT=%d " " NO_OF_ELEM=%d\n", @@ -2044,7 +2044,7 @@ static void EdgePriorityUpdate (DDD::DDDContext& context, DDD_OBJ obj, DDD_PRIO INT level = LEVEL(theEdge); DUNE_UNUSED INT old = PRIO(theEdge); - GetGridOnDemand(dddctrl.currMG,level); + GetGridOnDemand(ddd_ctrl(context).currMG,level); PRINTDEBUG(dddif,2,(PFMT " EdgePriorityUpdate(): n=" ID_FMTX " old=%d new_=%d " "level=%d\n",me,ID_PRTX(theEdge),old,new_,level)) @@ -2058,7 +2058,7 @@ static void EdgeObjMkCons (DDD::DDDContext& context, DDD_OBJ obj, int newness) me,ID_PRTX(theEdge),OBJT(theEdge))) /* set pointer of vector to its edge */ - if (dddctrl.edgeData && EDVECTOR(theEdge)) + if (ddd_ctrl(context).edgeData && EDVECTOR(theEdge)) VOBJECT(EDVECTOR(theEdge)) = (GEOM_OBJECT*)theEdge; ASSERT(OBJT(theEdge) == EDOBJ); diff --git a/parallel/dddif/identify.cc b/parallel/dddif/identify.cc index 85486b0fb..3fdc806db 100644 --- a/parallel/dddif/identify.cc +++ b/parallel/dddif/identify.cc @@ -1288,7 +1288,7 @@ static int Scatter_IdentSonNode (DDD::DDDContext& context, DDD_OBJ obj, void *da } DDD_IdentifyObject(context, PARHDR(SonNode),proc,PARHDR(theNode)); - if (dddctrl.nodeData && NVECTOR(SonNode)!=NULL) + if (ddd_ctrl(context).nodeData && NVECTOR(SonNode)!=NULL) DDD_IdentifyObject(context, PARHDR(NVECTOR(SonNode)),proc,PARHDR(theNode)); } } @@ -1502,7 +1502,7 @@ static int Scatter_IdentSonEdge (DDD::DDDContext& context, DDD_OBJ obj, void *da } DDD_IdentifyObject(context, PARHDR(SonEdge),proc,PARHDR(theEdge)); - if (dddctrl.edgeData && EDVECTOR(SonEdge)!=NULL) + if (ddd_ctrl(context).edgeData && EDVECTOR(SonEdge)!=NULL) DDD_IdentifyObject(context, PARHDR(EDVECTOR(SonEdge)),proc,PARHDR(theEdge)); } } @@ -1582,7 +1582,7 @@ static int Scatter_IdentSonObjects (DDD::DDDContext& context, DDD_OBJ obj, void ASSERT(newsonobjects & 0x2); DDD_IdentifyObject(context, PARHDR(SonEdges[0]),proc,PARHDR(theEdge)); - if (dddctrl.edgeData && EDVECTOR(SonEdges[0])!=NULL) + if (ddd_ctrl(context).edgeData && EDVECTOR(SonEdges[0])!=NULL) DDD_IdentifyObject(context, PARHDR(EDVECTOR(SonEdges[0])),proc,PARHDR(theEdge)); } } @@ -1602,7 +1602,7 @@ static int Scatter_IdentSonObjects (DDD::DDDContext& context, DDD_OBJ obj, void { DDD_IdentifyObject(context, PARHDR(MidNode),proc,PARHDR(theEdge)); DDD_IdentifyObject(context, PARHDRV(MYVERTEX(MidNode)),proc,PARHDR(theEdge)); - if (dddctrl.nodeData && NVECTOR(MidNode)!=NULL) + if (ddd_ctrl(context).nodeData && NVECTOR(MidNode)!=NULL) DDD_IdentifyObject(context, PARHDR(NVECTOR(MidNode)),proc,PARHDR(theEdge)); } else @@ -1613,7 +1613,7 @@ static int Scatter_IdentSonObjects (DDD::DDDContext& context, DDD_OBJ obj, void DDD_IdentifyObject(context, PARHDR(MidNode),proc,PARHDR(Node1)); DDD_IdentifyObject(context, PARHDRV(MYVERTEX(MidNode)),proc,PARHDR(Node0)); DDD_IdentifyObject(context, PARHDRV(MYVERTEX(MidNode)),proc,PARHDR(Node1)); - if (dddctrl.nodeData && NVECTOR(MidNode)!=NULL) + if (ddd_ctrl(context).nodeData && NVECTOR(MidNode)!=NULL) { DDD_IdentifyObject(context, PARHDR(NVECTOR(MidNode)),proc,PARHDR(Node0)); DDD_IdentifyObject(context, PARHDR(NVECTOR(MidNode)),proc,PARHDR(Node1)); @@ -1643,7 +1643,7 @@ static int Scatter_IdentSonObjects (DDD::DDDContext& context, DDD_OBJ obj, void } DDD_IdentifyObject(context, PARHDR(SonEdges[0]),proc,PARHDR(theEdge)); DDD_IdentifyObject(context, PARHDR(SonEdges[0]),proc,PARHDR((NODE *)NFATHER(IdentNode))); - if (dddctrl.edgeData && EDVECTOR(SonEdges[0])!=NULL) + if (ddd_ctrl(context).edgeData && EDVECTOR(SonEdges[0])!=NULL) { DDD_IdentifyObject(context, PARHDR(EDVECTOR(SonEdges[0])),proc,PARHDR(theEdge)); DDD_IdentifyObject(context, PARHDR(EDVECTOR(SonEdges[0])),proc,PARHDR((NODE *)NFATHER(IdentNode))); @@ -1672,7 +1672,7 @@ static int Scatter_IdentSonObjects (DDD::DDDContext& context, DDD_OBJ obj, void } DDD_IdentifyObject(context, PARHDR(SonEdges[1]),proc,PARHDR(theEdge)); DDD_IdentifyObject(context, PARHDR(SonEdges[1]),proc,PARHDR((NODE *)NFATHER(IdentNode))); - if (dddctrl.edgeData && EDVECTOR(SonEdges[1])!=NULL) + if (ddd_ctrl(context).edgeData && EDVECTOR(SonEdges[1])!=NULL) { DDD_IdentifyObject(context, PARHDR(EDVECTOR(SonEdges[1])),proc,PARHDR(theEdge)); DDD_IdentifyObject(context, PARHDR(EDVECTOR(SonEdges[1])),proc,PARHDR((NODE *)NFATHER(IdentNode))); @@ -1759,10 +1759,10 @@ static int Scatter_SonNodeInfo (DDD::DDDContext& context, DDD_OBJ obj, void *dat if (has_sonnode) { DDD_IdentifyObject(context, PARHDR(SonNode),proc,PARHDR(theNode)); - if (dddctrl.nodeData && NVECTOR(SonNode)!=NULL) + if (ddd_ctrl(context).nodeData && NVECTOR(SonNode)!=NULL) DDD_IdentifyObject(context, PARHDR(NVECTOR(SonNode)),proc,PARHDR(theNode)); IFDEBUG(dddif,1) - if (dddctrl.nodeData && NVECTOR(SonNode)!=NULL) + if (ddd_ctrl(context).nodeData && NVECTOR(SonNode)!=NULL) PrintDebug ("l=%d IdentHdr: %d Proc: %d me:%d IdentObjectHdr: %d %d\n", identlevel,GID(theNode),proc,me,GID(SonNode),GID(EDVECTOR(SonNode))); else @@ -1853,10 +1853,10 @@ static int Scatter_SonEdgeInfo (DDD::DDDContext& context, DDD_OBJ obj, void *dat if (has_sonedge) { DDD_IdentifyObject(context, PARHDR(SonEdge),proc,PARHDR(theEdge)); - if (dddctrl.edgeData && EDVECTOR(SonEdge)!=NULL) + if (ddd_ctrl(context).edgeData && EDVECTOR(SonEdge)!=NULL) DDD_IdentifyObject(context, PARHDR(EDVECTOR(SonEdge)),proc,PARHDR(theEdge)); IFDEBUG(dddif,1) - if (dddctrl.edgeData && EDVECTOR(SonEdge)!=NULL) + if (ddd_ctrl(context).edgeData && EDVECTOR(SonEdge)!=NULL) PrintDebug ("l=%d IdentHdr: %d Proc: %d me:%d IdentObjectHdr: %d %d\n", identlevel,GID(theEdge),proc,me,GID(SonEdge),GID(EDVECTOR(SonEdge))); else diff --git a/parallel/dddif/initddd.cc b/parallel/dddif/initddd.cc index 6681d7bd6..dbed9d8af 100644 --- a/parallel/dddif/initddd.cc +++ b/parallel/dddif/initddd.cc @@ -61,8 +61,8 @@ using namespace PPIF; /* macro for easy definition of type mapping UG<->DDD */ #define MAP_TYPES(ugt,dddt) { int _ugt=(ugt); \ - dddctrl.ugtypes[(dddt)] = _ugt; \ - dddctrl.types[_ugt] = (dddt); \ + ddd_ctrl(context).ugtypes[(dddt)] = _ugt; \ + ddd_ctrl(context).types[_ugt] = (dddt); \ } @@ -220,13 +220,13 @@ static void ddd_InitGenericElement(DDD::DDDContext& context, INT tag, DDD_TYPE d /* optional components */ - if (dddctrl.elemData) + if (ddd_ctrl(context).elemData) DDD_TypeDefine(context, dddType, ge, EL_OBJPTR, r+evector_offset[tag], ps*1, TypeVector, EL_CONTINUE); #ifdef __THREEDIM__ - if (dddctrl.sideData) + if (ddd_ctrl(context).sideData) DDD_TypeDefine(context, dddType, ge, EL_OBJPTR, r+svector_offset[tag], ps*desc->sides_of_elem, TypeVector, EL_CONTINUE); @@ -238,7 +238,7 @@ static void ddd_InitGenericElement(DDD::DDDContext& context, INT tag, DDD_TYPE d /* init type mapping arrays */ MAP_TYPES(MAPPED_INNER_OBJT_TAG(tag), dddType); - dddctrl.dddObj[MAPPED_INNER_OBJT_TAG(tag)] = true; + ddd_ctrl(context).dddObj[MAPPED_INNER_OBJT_TAG(tag)] = true; } else { @@ -248,7 +248,7 @@ static void ddd_InitGenericElement(DDD::DDDContext& context, INT tag, DDD_TYPE d /* init type mapping arrays */ MAP_TYPES(MAPPED_BND_OBJT_TAG(tag), dddType); - dddctrl.dddObj[MAPPED_BND_OBJT_TAG(tag)] = true; + ddd_ctrl(context).dddObj[MAPPED_BND_OBJT_TAG(tag)] = true; } /* set mergemode to maximum */ @@ -314,10 +314,10 @@ static void ddd_DeclareTypes(DDD::DDDContext& context) - variables TypeXXXX containing the proper DDD_TYPEs may be superfluous. it would be possible to replace all occurences by macros like DDDType(VEOBJ), which would be implemented as - #define DDDType(ugtype) (dddctrl.types[ugtype]) + #define DDDType(ugtype) (ddd_ctrl(context).types[ugtype]) TODO check this! pros: no double information. currently, TypeXXX may differ - from corresponding dddctrl.types[] entry. + from corresponding ddd_ctrl(context).types[] entry. cons: will this be compatible with alloc/dealloc and TypeDefine of ug-general-elements? */ @@ -327,19 +327,19 @@ static void ddd_DeclareTypes(DDD::DDDContext& context) TypeVector = DDD_TypeDeclare(context, "Vector"); MAP_TYPES(VEOBJ, TypeVector); - dddctrl.dddObj[VEOBJ] = true; + ddd_ctrl(context).dddObj[VEOBJ] = true; TypeIVertex = DDD_TypeDeclare(context, "IVertex"); MAP_TYPES(IVOBJ, TypeIVertex); - dddctrl.dddObj[IVOBJ] = true; + ddd_ctrl(context).dddObj[IVOBJ] = true; TypeBVertex = DDD_TypeDeclare(context, "BVertex"); MAP_TYPES(BVOBJ, TypeBVertex); - dddctrl.dddObj[BVOBJ] = true; + ddd_ctrl(context).dddObj[BVOBJ] = true; TypeNode = DDD_TypeDeclare(context, "Node"); MAP_TYPES(NDOBJ, TypeNode); - dddctrl.dddObj[NDOBJ] = true; + ddd_ctrl(context).dddObj[NDOBJ] = true; #ifdef __TWODIM__ TypeTrElem = DDD_TypeDeclare(context, "TrElem"); @@ -364,7 +364,7 @@ static void ddd_DeclareTypes(DDD::DDDContext& context) /* edge is DDD data object for 2D */ TypeEdge = DDD_TypeDeclare(context, "Edge"); MAP_TYPES(EDOBJ, TypeEdge); - dddctrl.dddObj[EDOBJ] = true; + ddd_ctrl(context).dddObj[EDOBJ] = true; /* 2. DDD data objects (without DDD_HEADER) */ @@ -550,7 +550,7 @@ static void ddd_DefineTypes(DDD::DDDContext& context) EL_OBJPTR, ELDEF(n.myvertex), TypeIVertex, EL_CONTINUE); - if (dddctrl.nodeData) + if (ddd_ctrl(context).nodeData) DDD_TypeDefine(context, TypeNode, &n, EL_OBJPTR, ELDEF(n.vector), TypeVector, EL_CONTINUE); @@ -561,7 +561,7 @@ static void ddd_DefineTypes(DDD::DDDContext& context) * size of the NODE decreases by the size of one VECTOR*. * Compare the corresponding computation in the method CreateNode (in ugm.c) */ - size = sizeof(NODE) - ((dddctrl.nodeData) ? 0 : sizeof(VECTOR*)); + size = sizeof(NODE) - ((ddd_ctrl(context).nodeData) ? 0 : sizeof(VECTOR*)); DDD_TypeDefine(context, TypeNode, &n, EL_END, ((char *)&n)+size); @@ -634,14 +634,14 @@ static void ddd_DefineTypes(DDD::DDDContext& context) EL_OBJPTR, ELDEF(e.midnode), TypeNode, EL_CONTINUE); - if (dddctrl.edgeData) + if (ddd_ctrl(context).edgeData) DDD_TypeDefine(context, TypeEdge, &e, EL_OBJPTR, ELDEF(e.vector), TypeVector, EL_CONTINUE); /* See the corresponding line for TypeNode for an explanation of why * the object size is modified here. */ - size = sizeof(EDGE) - ((dddctrl.edgeData) ? 0 : sizeof(VECTOR*)); + size = sizeof(EDGE) - ((ddd_ctrl(context).edgeData) ? 0 : sizeof(VECTOR*)); DDD_TypeDefine(context, TypeEdge, &e, EL_END, ((char *)&e)+size); /* set mergemode to maximum */ @@ -855,9 +855,9 @@ static void ddd_IfInit(DDD::DDDContext& context) static void InitDDDTypes(DDD::DDDContext& context) { /* prevent from multiple execution */ - if (dddctrl.allTypesDefined) + if (ddd_ctrl(context).allTypesDefined) return; - dddctrl.allTypesDefined = true; + ddd_ctrl(context).allTypesDefined = true; ddd_DefineTypes(context); @@ -921,6 +921,7 @@ static void InitDDDTypes(DDD::DDDContext& context) void NS_DIM_PREFIX InitCurrMG (MULTIGRID *MG) { + auto& dddctrl = ddd_ctrl(MG->dddContext()); dddctrl.currMG = MG; dddctrl.nodeData = VEC_DEF_IN_OBJ_OF_MG(dddctrl.currMG,NODEVEC); @@ -966,7 +967,7 @@ void NS_DIM_PREFIX InitCurrMG (MULTIGRID *MG) /****************************************************************************/ -static int CheckInitParallel (void) +static int CheckInitParallel(const DDD::DDDContext& context) { int i; @@ -977,21 +978,21 @@ static int CheckInitParallel (void) return(__LINE__); } - for(i=1; i<MAXDDDTYPES && UGTYPE(i)>=0; i++) + for(i=1; i<MAXDDDTYPES && UGTYPE(context, i)>=0; i++) { /* check for valid UGTYPE for given DDD_TYPE */ - if (UGTYPE(i) > OBJT_MAX) + if (UGTYPE(context, i) > OBJT_MAX) { printf("ERROR in InitParallel: OBJT=%d > OBJT_MAX=%d\n", - UGTYPE(i), OBJT_MAX); + UGTYPE(context, i), OBJT_MAX); return(__LINE__); } /* check for correct mapping and re-mapping */ - if (DDDTYPE(UGTYPE(i))!=i) + if (DDDTYPE(context, UGTYPE(context, i))!=i) { printf("ERROR in InitParallel: invalid type mapping for OBJT=%d\n", - UGTYPE(i)); + UGTYPE(context, i)); return(__LINE__); } } @@ -1052,25 +1053,25 @@ int NS_DIM_PREFIX InitDDD(DDD::DDDContext& context) /* initialize type mapping arrays */ for(i=0; i<MAXOBJECTS; i++) { - dddctrl.types[i] = -1; - dddctrl.dddObj[i] = false; + ddd_ctrl(context).types[i] = -1; + ddd_ctrl(context).dddObj[i] = false; } for(i=0; i<MAXDDDTYPES; i++) { - dddctrl.ugtypes[i] = -1; + ddd_ctrl(context).ugtypes[i] = -1; } - dddctrl.currFormat = NULL; + ddd_ctrl(context).currFormat = NULL; /* declare DDD_TYPES, definition must be done later */ ddd_DeclareTypes(context); - dddctrl.allTypesDefined = false; + ddd_ctrl(context).allTypesDefined = false; DomInitParallel(TypeBndP,TypeBndS); ddd_IfInit(context); /* check for correct initialization */ - if ((err=CheckInitParallel())!=0) + if ((err=CheckInitParallel(context))!=0) { SetHiWrd(err,__LINE__); return(err); diff --git a/parallel/dddif/parallel.h b/parallel/dddif/parallel.h index fa886aa95..ebec186f4 100644 --- a/parallel/dddif/parallel.h +++ b/parallel/dddif/parallel.h @@ -91,9 +91,9 @@ enum HandlerSets #define DDD_PrioritySet(context, h,p) {ObjectPriorityUpdate(context, (DDD_OBJ)h,p); DDD_PrioChange(context, h,p);} #endif -#define UGTYPE(t) (dddctrl.ugtypes[(t)]) -#define DDDTYPE(t) (dddctrl.types[(t)]) -#define HAS_DDDHDR(t) (dddctrl.dddObj[(t)]) +#define UGTYPE(context, t) (ddd_ctrl(context).ugtypes[(t)]) +#define DDDTYPE(context, t) (ddd_ctrl(context).types[(t)]) +#define HAS_DDDHDR(context, t) (ddd_ctrl(context).dddObj[(t)]) #define DDD_DOMAIN_DATA DDD_USER_DATA+1 #define DDD_EXTRA_DATA DDD_USER_DATA+2 @@ -261,6 +261,26 @@ extern DDD_CTRL dddctrl; #ifdef ModelP +/** + * accessor function for DDD user context + */ +inline +const DDD_CTRL& ddd_ctrl(const DDD::DDDContext& context) +{ + return dddctrl; + // return *static_cast<const DDD_CTRL*>(context.data()); +} + +/** + * accessor function for DDD user context + */ +inline +DDD_CTRL& ddd_ctrl(DDD::DDDContext& context) +{ + return dddctrl; + // return *static_cast<DDD_CTRL*>(context.data()); +} + /* from initddd.c */ int InitDDD(DDD::DDDContext& context); int ExitDDD(DDD::DDDContext& context); diff --git a/parallel/dddif/pgmcheck.cc b/parallel/dddif/pgmcheck.cc index ed26ee6a7..7b87c810e 100644 --- a/parallel/dddif/pgmcheck.cc +++ b/parallel/dddif/pgmcheck.cc @@ -326,7 +326,7 @@ static INT CheckNodePrio (DDD::DDDContext& context, ELEMENT *theElement, NODE *t nerrors++; } - if (dddctrl.nodeData) + if (ddd_ctrl(context).nodeData) { if (NVECTOR(theNode) != NULL) { @@ -386,7 +386,7 @@ static INT CheckEdgePrio (DDD::DDDContext& context, ELEMENT *theElement, EDGE *t } #endif - if (dddctrl.edgeData) + if (ddd_ctrl(context).edgeData) if (EDVECTOR(theEdge) != NULL) nerrors += CheckVectorPrio(context, theElement,EDVECTOR(theEdge)); @@ -498,11 +498,11 @@ static INT CheckElementPrio (DDD::DDDContext& context, ELEMENT *theElement) } } - if (dddctrl.elemData) + if (ddd_ctrl(context).elemData) if (EVECTOR(theElement) != NULL) nerrors += CheckVectorPrio(context, theElement,EVECTOR(theElement)); - if (dddctrl.sideData) + if (ddd_ctrl(context).sideData) { for (i=0; i<SIDES_OF_ELEM(theElement); i++) if (SVECTOR(theElement,i) != NULL) @@ -761,6 +761,9 @@ static INT CheckDistributedObjects (GRID *theGrid) INT NS_DIM_PREFIX CheckInterfaces (GRID *theGrid) { + auto& context = theGrid->dddContext(); + auto& dddctrl = ddd_ctrl(context); + INT i,j; ELEMENT *theElement; NODE *theNode; diff --git a/parallel/dddif/trans.cc b/parallel/dddif/trans.cc index dd342f3c0..88691b3f9 100644 --- a/parallel/dddif/trans.cc +++ b/parallel/dddif/trans.cc @@ -512,6 +512,7 @@ static int ComputeGhostCmds (MULTIGRID *theMG) #ifdef __OVERLAP2__ static int XferNodesForOverlap2 (GRID *theGrid) { + auto& dddctrl = ddd_ctrl(theGrid->dddContext()); ELEMENT *theElement; NODE *theNode; INT i,part; -- GitLab