Actual source code: dlregisdmdm.c


  2: #include <petscao.h>
  3: #include <petsc/private/dmlabelimpl.h>
  4: #include <petsc/private/dmfieldimpl.h>
  5: #include <petsc/private/dmpleximpl.h>
  6: #include <petsc/private/petscdsimpl.h>
  7: #include <petsc/private/petscfeimpl.h>
  8: #include <petsc/private/petscfvimpl.h>
  9: #include <petsc/private/dmswarmimpl.h>

 11: static PetscBool DMPackageInitialized = PETSC_FALSE;
 12: /*@C
 13:   DMFinalizePackage - This function finalizes everything in the DM package. It is called
 14:   from PetscFinalize().

 16:   Level: developer

 18: .seealso: PetscInitialize()
 19: @*/
 20: PetscErrorCode  DMFinalizePackage(void)
 21: {

 25:   PetscFunctionListDestroy(&DMList);
 26:   DMPackageInitialized = PETSC_FALSE;
 27:   DMRegisterAllCalled  = PETSC_FALSE;
 28:   return(0);
 29: }

 31: #if defined(PETSC_HAVE_HYPRE)
 32: PETSC_EXTERN PetscErrorCode MatCreate_HYPREStruct(Mat);
 33: PETSC_EXTERN PetscErrorCode MatCreate_HYPRESStruct(Mat);
 34: #endif

 36: /*@C
 37:   DMInitializePackage - This function initializes everything in the DM package. It is called
 38:   from PetscDLLibraryRegister_petscdm() when using dynamic libraries, and on the first call to AOCreate()
 39:   or DMDACreate() when using shared or static libraries.

 41:   Level: developer

 43: .seealso: PetscInitialize()
 44: @*/
 45: PetscErrorCode  DMInitializePackage(void)
 46: {
 47:   char           logList[256];
 48:   PetscBool      opt,pkg;

 52:   if (DMPackageInitialized) return(0);
 53:   DMPackageInitialized = PETSC_TRUE;

 55:   /* Register Classes */
 56:   PetscClassIdRegister("Distributed Mesh",&DM_CLASSID);
 57:   PetscClassIdRegister("DM Label",&DMLABEL_CLASSID);
 58:   PetscClassIdRegister("Quadrature",&PETSCQUADRATURE_CLASSID);

 60: #if defined(PETSC_HAVE_HYPRE)
 61:   MatRegister(MATHYPRESTRUCT, MatCreate_HYPREStruct);
 62:   MatRegister(MATHYPRESSTRUCT, MatCreate_HYPRESStruct);
 63: #endif
 64:   PetscSectionSymRegister(PETSCSECTIONSYMLABEL,PetscSectionSymCreate_Label);

 66:   /* Register Constructors */
 67:   DMRegisterAll();
 68:   /* Register Events */
 69:   PetscLogEventRegister("DMConvert",              DM_CLASSID,&DM_Convert);
 70:   PetscLogEventRegister("DMGlobalToLocal",        DM_CLASSID,&DM_GlobalToLocal);
 71:   PetscLogEventRegister("DMLocalToGlobal",        DM_CLASSID,&DM_LocalToGlobal);
 72:   PetscLogEventRegister("DMLocatePoints",         DM_CLASSID,&DM_LocatePoints);
 73:   PetscLogEventRegister("DMCoarsen",              DM_CLASSID,&DM_Coarsen);
 74:   PetscLogEventRegister("DMCreateInterp",         DM_CLASSID,&DM_CreateInterpolation);
 75:   PetscLogEventRegister("DMCreateRestrict",       DM_CLASSID,&DM_CreateRestriction);
 76:   PetscLogEventRegister("DMCreateInject",         DM_CLASSID,&DM_CreateInjection);
 77:   PetscLogEventRegister("DMCreateMat",            DM_CLASSID,&DM_CreateMatrix);
 78:   PetscLogEventRegister("DMLoad",                 DM_CLASSID,&DM_Load);
 79:   PetscLogEventRegister("DMAdaptInterp",          DM_CLASSID,&DM_AdaptInterpolator);

 81:   PetscLogEventRegister("DMPlexBuFrCeLi",         DM_CLASSID,&DMPLEX_BuildFromCellList);
 82:   PetscLogEventRegister("DMPlexBuCoFrCeLi",       DM_CLASSID,&DMPLEX_BuildCoordinatesFromCellList);
 83:   PetscLogEventRegister("DMPlexCreateGmsh",       DM_CLASSID,&DMPLEX_CreateGmsh);
 84:   PetscLogEventRegister("DMPlexCrFromFile",       DM_CLASSID,&DMPLEX_CreateFromFile);
 85:   PetscLogEventRegister("Mesh Partition",         DM_CLASSID,&DMPLEX_Partition);
 86:   PetscLogEventRegister("Mesh Migration",         DM_CLASSID,&DMPLEX_Migrate);
 87:   PetscLogEventRegister("DMPlexPartSelf",         DM_CLASSID,&DMPLEX_PartSelf);
 88:   PetscLogEventRegister("DMPlexPartLblInv",       DM_CLASSID,&DMPLEX_PartLabelInvert);
 89:   PetscLogEventRegister("DMPlexPartLblSF",        DM_CLASSID,&DMPLEX_PartLabelCreateSF);
 90:   PetscLogEventRegister("DMPlexPartStrtSF",       DM_CLASSID,&DMPLEX_PartStratSF);
 91:   PetscLogEventRegister("DMPlexPointSF",          DM_CLASSID,&DMPLEX_CreatePointSF);
 92:   PetscLogEventRegister("DMPlexInterp",           DM_CLASSID,&DMPLEX_Interpolate);
 93:   PetscLogEventRegister("DMPlexDistribute",       DM_CLASSID,&DMPLEX_Distribute);
 94:   PetscLogEventRegister("DMPlexDistCones",        DM_CLASSID,&DMPLEX_DistributeCones);
 95:   PetscLogEventRegister("DMPlexDistLabels",       DM_CLASSID,&DMPLEX_DistributeLabels);
 96:   PetscLogEventRegister("DMPlexDistSF",           DM_CLASSID,&DMPLEX_DistributeSF);
 97:   PetscLogEventRegister("DMPlexDistOvrlp",        DM_CLASSID,&DMPLEX_DistributeOverlap);
 98:   PetscLogEventRegister("DMPlexDistField",        DM_CLASSID,&DMPLEX_DistributeField);
 99:   PetscLogEventRegister("DMPlexDistData",         DM_CLASSID,&DMPLEX_DistributeData);
100:   PetscLogEventRegister("DMPlexInterpSF",         DM_CLASSID,&DMPLEX_InterpolateSF);
101:   PetscLogEventRegister("DMPlexGToNBegin",        DM_CLASSID,&DMPLEX_GlobalToNaturalBegin);
102:   PetscLogEventRegister("DMPlexGToNEnd",          DM_CLASSID,&DMPLEX_GlobalToNaturalEnd);
103:   PetscLogEventRegister("DMPlexNToGBegin",        DM_CLASSID,&DMPLEX_NaturalToGlobalBegin);
104:   PetscLogEventRegister("DMPlexNToGEnd",          DM_CLASSID,&DMPLEX_NaturalToGlobalEnd);
105:   PetscLogEventRegister("DMPlexStratify",         DM_CLASSID,&DMPLEX_Stratify);
106:   PetscLogEventRegister("DMPlexSymmetrize",       DM_CLASSID,&DMPLEX_Symmetrize);
107:   PetscLogEventRegister("DMPlexPrealloc",         DM_CLASSID,&DMPLEX_Preallocate);
108:   PetscLogEventRegister("DMPlexResidualFE",       DM_CLASSID,&DMPLEX_ResidualFEM);
109:   PetscLogEventRegister("DMPlexJacobianFE",       DM_CLASSID,&DMPLEX_JacobianFEM);
110:   PetscLogEventRegister("DMPlexInterpFE",         DM_CLASSID,&DMPLEX_InterpolatorFEM);
111:   PetscLogEventRegister("DMPlexInjectorFE",       DM_CLASSID,&DMPLEX_InjectorFEM);
112:   PetscLogEventRegister("DMPlexIntegralFEM",      DM_CLASSID,&DMPLEX_IntegralFEM);
113:   PetscLogEventRegister("DMPlexRebalance",        DM_CLASSID,&DMPLEX_RebalanceSharedPoints);
114:   PetscLogEventRegister("DMPlexLocatePoints",     DM_CLASSID,&DMPLEX_LocatePoints);

116:   PetscLogEventRegister("DMSwarmMigrate",         DM_CLASSID,&DMSWARM_Migrate);
117:   PetscLogEventRegister("DMSwarmDETSetup",        DM_CLASSID,&DMSWARM_DataExchangerTopologySetup);
118:   PetscLogEventRegister("DMSwarmDExBegin",        DM_CLASSID,&DMSWARM_DataExchangerBegin);
119:   PetscLogEventRegister("DMSwarmDExEnd",          DM_CLASSID,&DMSWARM_DataExchangerEnd);
120:   PetscLogEventRegister("DMSwarmDESendCnt",       DM_CLASSID,&DMSWARM_DataExchangerSendCount);
121:   PetscLogEventRegister("DMSwarmDEPack",          DM_CLASSID,&DMSWARM_DataExchangerPack);
122:   PetscLogEventRegister("DMSwarmAddPnts",         DM_CLASSID,&DMSWARM_AddPoints);
123:   PetscLogEventRegister("DMSwarmRmvPnts",         DM_CLASSID,&DMSWARM_RemovePoints);
124:   PetscLogEventRegister("DMSwarmSort",            DM_CLASSID,&DMSWARM_Sort);
125:   PetscLogEventRegister("DMSwarmSetSizes",        DM_CLASSID,&DMSWARM_SetSizes);
126:   /* Process Info */
127:   {
128:     PetscClassId  classids[1];

130:     classids[0] = DM_CLASSID;
131:     PetscInfoProcessClass("dm", 1, classids);
132:   }

134:   /* Process summary exclusions */
135:   PetscOptionsGetString(NULL,NULL,"-log_exclude",logList,sizeof(logList),&opt);
136:   if (opt) {
137:     PetscStrInList("dm",logList,',',&pkg);
138:     if (pkg) {PetscLogEventExcludeClass(DM_CLASSID);}
139:   }

141:   DMPlexGenerateRegisterAll();
142:   PetscRegisterFinalize(DMPlexGenerateRegisterDestroy);
143:   PetscRegisterFinalize(DMFinalizePackage);
144:   return(0);
145: }
146: #include <petscfe.h>

148: static PetscBool PetscFEPackageInitialized = PETSC_FALSE;
149: /*@C
150:   PetscFEFinalizePackage - This function finalizes everything in the PetscFE package. It is called
151:   from PetscFinalize().

153:   Level: developer

155: .seealso: PetscInitialize()
156: @*/
157: PetscErrorCode PetscFEFinalizePackage(void)
158: {

162:   PetscFunctionListDestroy(&PetscSpaceList);
163:   PetscFunctionListDestroy(&PetscDualSpaceList);
164:   PetscFunctionListDestroy(&PetscFEList);
165:   PetscFEPackageInitialized       = PETSC_FALSE;
166:   PetscSpaceRegisterAllCalled     = PETSC_FALSE;
167:   PetscDualSpaceRegisterAllCalled = PETSC_FALSE;
168:   PetscFERegisterAllCalled        = PETSC_FALSE;
169:   return(0);
170: }

172: /*@C
173:   PetscFEInitializePackage - This function initializes everything in the FE package. It is called
174:   from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to PetscSpaceCreate()
175:   when using static libraries.

177:   Level: developer

179: .seealso: PetscInitialize()
180: @*/
181: PetscErrorCode PetscFEInitializePackage(void)
182: {
183:   char           logList[256];
184:   PetscBool      opt,pkg;

188:   if (PetscFEPackageInitialized) return(0);
189:   PetscFEPackageInitialized = PETSC_TRUE;

191:   /* Register Classes */
192:   PetscClassIdRegister("Linear Space", &PETSCSPACE_CLASSID);
193:   PetscClassIdRegister("Dual Space",   &PETSCDUALSPACE_CLASSID);
194:   PetscClassIdRegister("FE Space",     &PETSCFE_CLASSID);
195:   /* Register Constructors */
196:   PetscSpaceRegisterAll();
197:   PetscDualSpaceRegisterAll();
198:   PetscFERegisterAll();
199:   /* Register Events */
200:   PetscLogEventRegister("DualSpaceSetUp", PETSCDUALSPACE_CLASSID, &PETSCDUALSPACE_SetUp);
201:   PetscLogEventRegister("FESetUp",        PETSCFE_CLASSID,        &PETSCFE_SetUp);
202:   /* Process Info */
203:   {
204:     PetscClassId  classids[3];

206:     classids[0] = PETSCFE_CLASSID;
207:     classids[1] = PETSCSPACE_CLASSID;
208:     classids[2] = PETSCDUALSPACE_CLASSID;
209:     PetscInfoProcessClass("fe", 1, classids);
210:     PetscInfoProcessClass("space", 1, &classids[1]);
211:     PetscInfoProcessClass("dualspace", 1, &classids[2]);
212:   }
213:   /* Process summary exclusions */
214:   PetscOptionsGetString(NULL,NULL,"-log_exclude",logList,sizeof(logList),&opt);
215:   if (opt) {
216:     PetscStrInList("fe",logList,',',&pkg);
217:     if (pkg) {PetscLogEventExcludeClass(PETSCFE_CLASSID);}
218:   }
219:   /* Register package finalizer */
220:   PetscRegisterFinalize(PetscFEFinalizePackage);
221:   return(0);
222: }
223: #include <petscfv.h>

225: static PetscBool PetscFVPackageInitialized = PETSC_FALSE;
226: /*@C
227:   PetscFVFinalizePackage - This function finalizes everything in the PetscFV package. It is called
228:   from PetscFinalize().

230:   Level: developer

232: .seealso: PetscInitialize()
233: @*/
234: PetscErrorCode PetscFVFinalizePackage(void)
235: {

239:   PetscFunctionListDestroy(&PetscLimiterList);
240:   PetscFunctionListDestroy(&PetscFVList);
241:   PetscFVPackageInitialized     = PETSC_FALSE;
242:   PetscFVRegisterAllCalled      = PETSC_FALSE;
243:   PetscLimiterRegisterAllCalled = PETSC_FALSE;
244:   return(0);
245: }

247: /*@C
248:   PetscFVInitializePackage - This function initializes everything in the FV package. It is called
249:   from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to PetscFVCreate()
250:   when using static libraries.

252:   Level: developer

254: .seealso: PetscInitialize()
255: @*/
256: PetscErrorCode PetscFVInitializePackage(void)
257: {
258:   char           logList[256];
259:   PetscBool      opt,pkg;

263:   if (PetscFVPackageInitialized) return(0);
264:   PetscFVPackageInitialized = PETSC_TRUE;

266:   /* Register Classes */
267:   PetscClassIdRegister("FV Space", &PETSCFV_CLASSID);
268:   PetscClassIdRegister("Limiter",  &PETSCLIMITER_CLASSID);
269:   /* Register Constructors */
270:   PetscFVRegisterAll();
271:   /* Register Events */
272:   /* Process Info */
273:   {
274:     PetscClassId  classids[2];

276:     classids[0] = PETSCFV_CLASSID;
277:     classids[1] = PETSCLIMITER_CLASSID;
278:     PetscInfoProcessClass("fv", 1, classids);
279:     PetscInfoProcessClass("limiter", 1, &classids[1]);
280:   }
281:   /* Process summary exclusions */
282:   PetscOptionsGetString(NULL,NULL,"-log_exclude",logList,sizeof(logList),&opt);
283:   if (opt) {
284:     PetscStrInList("fv",logList,',',&pkg);
285:     if (pkg) {PetscLogEventExcludeClass(PETSCFV_CLASSID);}
286:     PetscStrInList("limiter",logList,',',&pkg);
287:     if (pkg) {PetscLogEventExcludeClass(PETSCLIMITER_CLASSID);}
288:   }
289:   /* Register package finalizer */
290:   PetscRegisterFinalize(PetscFVFinalizePackage);
291:   return(0);
292: }
293: #include <petscds.h>

295: static PetscBool PetscDSPackageInitialized = PETSC_FALSE;
296: /*@C
297:   PetscDSFinalizePackage - This function finalizes everything in the PetscDS package. It is called
298:   from PetscFinalize().

300:   Level: developer

302: .seealso: PetscInitialize()
303: @*/
304: PetscErrorCode PetscDSFinalizePackage(void)
305: {

309:   PetscFunctionListDestroy(&PetscDSList);
310:   PetscDSPackageInitialized = PETSC_FALSE;
311:   PetscDSRegisterAllCalled  = PETSC_FALSE;
312:   return(0);
313: }

315: /*@C
316:   PetscDSInitializePackage - This function initializes everything in the DS package. It is called
317:   from PetscDLLibraryRegister() when using dynamic libraries, and on the first call to PetscDSCreate()
318:   when using static libraries.

320:   Level: developer

322: .seealso: PetscInitialize()
323: @*/
324: PetscErrorCode PetscDSInitializePackage(void)
325: {
326:   char           logList[256];
327:   PetscBool      opt,pkg;

331:   if (PetscDSPackageInitialized) return(0);
332:   PetscDSPackageInitialized = PETSC_TRUE;

334:   /* Register Classes */
335:   PetscClassIdRegister("Discrete System", &PETSCDS_CLASSID);
336:   PetscClassIdRegister("Weak Form",       &PETSCWEAKFORM_CLASSID);
337:   /* Register Constructors */
338:   PetscDSRegisterAll();
339:   /* Register Events */
340:   /* Process Info */
341:   {
342:     PetscClassId  classids[1];

344:     classids[0] = PETSCDS_CLASSID;
345:     PetscInfoProcessClass("ds", 1, classids);
346:   }
347:   /* Process summary exclusions */
348:   PetscOptionsGetString(NULL,NULL,"-log_exclude",logList,sizeof(logList),&opt);
349:   if (opt) {
350:     PetscStrInList("ds",logList,',',&pkg);
351:     if (pkg) {PetscLogEventExcludeClass(PETSCDS_CLASSID);}
352:   }
353:   /* Register package finalizer */
354:   PetscRegisterFinalize(PetscDSFinalizePackage);
355:   return(0);
356: }

358: #if defined(PETSC_HAVE_DYNAMIC_LIBRARIES)
359: /*
360:   PetscDLLibraryRegister - This function is called when the dynamic library it is in is opened.

362:   This one registers all the mesh generators and partitioners that are in
363:   the basic DM library.

365: */
366: PETSC_EXTERN PetscErrorCode PetscDLLibraryRegister_petscdm(void)
367: {

371:   AOInitializePackage();
372:   PetscPartitionerInitializePackage();
373:   DMInitializePackage();
374:   PetscFEInitializePackage();
375:   PetscFVInitializePackage();
376:   DMFieldInitializePackage();
377:   return(0);
378: }

380: #endif /* PETSC_HAVE_DYNAMIC_LIBRARIES */