Lines Matching +full:- +full:std

7 static inline std::vector<PetscScalar> VecReal_to_VecScalar(const std::vector<PetscReal> &v)
9 std::vector<PetscScalar> res(v.size());
15 DMMoabGenerateHierarchy - Generate a multi-level uniform refinement hierarchy
22 . dm - The `DMMOAB` object
25 + nlevels - The number of levels of refinement needed to generate the hierarchy
26 - ldegrees - The degree of refinement at each level in the hierarchy
37 std::vector<moab::EntityHandle> hsets;
41 dmmoab = (DM_Moab *)dm->data;
49 dmmoab->nhlevels = nlevels;
53 dmmoab->hierarchy = new moab::NestedRefine(dynamic_cast<moab::Core *>(dmmoab->mbiface), dmmoab->pcomm, dmmoab->fileset);
55 dmmoab->hierarchy = new moab::NestedRefine(dynamic_cast<moab::Core *>(dmmoab->mbiface), NULL, dmmoab->fileset);
58 PetscCall(PetscMalloc1(nlevels + 1, &dmmoab->hsets));
61 merr = dmmoab->hierarchy->generate_mesh_hierarchy(nlevels, pdegrees, hsets, false);
65 if (dmmoab->pcomm->size() > 1) {
66 merr = dmmoab->hierarchy->exchange_ghosts(hsets, dmmoab->nghostrings);
72 dmmoab->hsets[0] = hsets[0];
74 dmmoab->hsets[ilevel] = hsets[ilevel];
77 merr = dmmoab->pcomm->assign_global_ids(hsets[ilevel], dmmoab->dim, 0, false, true, false);
82 merr = dmmoab->hierarchy->update_special_tags(ilevel, hsets[ilevel]);
91 // PetscClangLinter pragma ignore: -fdoc-*
93 DMRefineHierarchy_Moab - Generate a multi-level `DM` hierarchy
99 . dm - The `DMMOAB` object
102 + nlevels - The number of levels of refinement needed to generate the hierarchy
103 - dmf - The DM objects after successive refinement of the hierarchy
113 for (i = 1; i < nlevels; i++) PetscCall(DMRefine(dmf[i - 1], PetscObjectComm((PetscObject)dm), &dmf[i]));
117 // PetscClangLinter pragma ignore: -fdoc-*
119 DMCoarsenHierarchy_Moab - Generate a multi-level `DM` hierarchy
125 . dm - The `DMMOAB` object
128 + nlevels - The number of levels of refinement needed to generate the hierarchy
129 - dmc - The `DM` objects after successive coarsening of the hierarchy
139 for (i = 1; i < nlevels; i++) PetscCall(DMCoarsen(dmc[i - 1], PetscObjectComm((PetscObject)dm), &dmc[i]));
145 // PetscClangLinter pragma ignore: -fdoc-*
147 DMCreateInterpolation_Moab - Generate the interpolation operators to transform
154 + dmp - The `DMMOAB` object
155 - dmc - the second, finer `DMMOAB` object
158 + interpl - The interpolation operator for transferring data between the levels
159 - vec - The scaling vector (optional)
176 dmbp = (DM_Moab *)dmp->data;
177 dmbc = (DM_Moab *)dmc->data;
178 nlsizp = dmbp->nloc; // *dmb1->numFields;
179 nlsizc = dmbc->nloc; // *dmb2->numFields;
180 ngsizp = dmbp->n; // *dmb1->numFields;
181 ngsizc = dmbc->n; // *dmb2->numFields;
182 nlghsizp = (dmbp->nloc + dmbp->nghost); // *dmb1->numFields;
187 PetscCall(PetscInfo(NULL, "Creating interpolation matrix %" PetscInt_FMT " X %" PetscInt_FMT " to apply transformation between levels %" PetscInt_FMT " -> %" PetscInt_FMT ".\n", ngsizc, nlghsizp, dmbp->hlevel, dmbc->hlevel));
195 for (moab::Range::iterator iter = dmbc->vowned->begin(); iter != dmbc->vowned->end(); iter++) {
199 std::vector<moab::EntityHandle> adjs;
203 const int ldof = dmbc->lidmap[vhandle - dmbc->seqstart];
205 /* Get adjacency information for current vertex - i.e., all elements of dimension (dim) that connects
207 non-zero pattern accordingly. */
208 merr = dmbc->hierarchy->get_adjacencies(vhandle, dmbc->dim, adjs);
216 merr = dmbc->hierarchy->child_to_parent(jhandle, dmbc->hlevel, dmbp->hlevel, &parent);
220 std::vector<moab::EntityHandle> connp;
221 merr = dmbp->hierarchy->get_connectivity(parent, dmbp->hlevel, connp);
226 /* find the truly user-expected layer of ghosted entities to decipher NNZ pattern */
228 if (dmbp->vghost->find(connp[ic]) != dmbp->vghost->end()) onz[ldof]++; /* update out-of-proc onz */
241 nnz[tc] = std::min(nlsizp, nnz[tc]);
242 onz[tc] = std::min(ngsizp - nlsizp, onz[tc]);
262 /* set up internal matrix data-structures */
266 std::vector<moab::EntityHandle> children;
267 std::vector<moab::EntityHandle> connp, connc;
268 std::vector<PetscReal> pcoords, ccoords, values_phi;
269 std::vector<PetscScalar> values_phi_scalar;
272 const moab::EntityHandle ehandle = dmbp->elocal->front();
274 merr = dmbp->hierarchy->parent_to_child(ehandle, dmbp->hlevel, dmbc->hlevel, children);
278 merr = dmbp->hierarchy->get_connectivity(ehandle, dmbp->hlevel, connp);
280 merr = dmbc->mbiface->get_connectivity(&children[0], children.size(), connc);
283 std::vector<PetscReal> natparam(3 * connc.size(), 0.0);
288 merr = dmbp->hierarchy->get_coordinates(&connp[0], connp.size(), dmbp->hlevel, &pcoords[0]);
290 merr = dmbc->hierarchy->get_coordinates(&connc[0], connc.size(), dmbc->hlevel, &ccoords[0]);
301 factor = std::pow(2.0 /*degree_P_for_refinement*/, (dmbc->hlevel - dmbp->hlevel) * dmbp->dim * 1.0);
304 /* TODO: Decipher the correct non-zero pattern. There is still some issue with onz allocation */
309 for (moab::Range::iterator iter = dmbp->elocal->begin(); iter != dmbp->elocal->end(); iter++) {
315 merr = dmbp->hierarchy->parent_to_child(ehandle, dmbp->hlevel, dmbc->hlevel, children);
319 merr = dmbp->hierarchy->get_connectivity(ehandle, dmbp->hlevel, connp);
321 merr = dmbc->mbiface->get_connectivity(&children[0], children.size(), connc);
327 merr = dmbp->hierarchy->get_coordinates(&connp[0], connp.size(), dmbp->hlevel, &pcoords[0]);
329 merr = dmbc->hierarchy->get_coordinates(&connc[0], connc.size(), dmbc->hlevel, &ccoords[0]);
332 std::vector<int> dofsp(connp.size()), dofsc(connc.size());
333 /* TODO: specific to scalar system - use GetDofs */
339 /* Use the cached values of natural parametric coordinates and basis pre-evaluated.
352 /* Compute the interpolation weights by determining distance of 1-ring
363 std::vector<PetscScalar> values_phi_scalar2;
366 for (unsigned k = 0; k < 3; k++) values_phi[tp] += std::pow(pcoords[tp * 3 + k] - ccoords[k + tc * 3], dim);
367 if (values_phi[tp] < 1e-12) {
370 //values_phi[tp] = std::pow(values_phi[tp], -1.0/dim);
371 values_phi[tp] = std::pow(values_phi[tp], -1.0);
384 if (vec) *vec = NULL; // TODO: <-- is it safe/appropriate?
390 // PetscClangLinter pragma ignore: -fdoc-*
392 DMCreateInjection_Moab - Generate a multi-level uniform refinement hierarchy
399 . dmb - The `DMMOAB` object
402 + nlevels - The number of levels of refinement needed to generate the hierarchy
403 - ldegrees - The degree of refinement at each level in the hierarchy
421 DM_Moab *dmb = (DM_Moab *)dm->data, *dd2;
427 if ((dmb->hlevel == dmb->nhlevels && refine) || (dmb->hlevel == 0 && !refine)) {
428 if (dmb->hlevel + 1 > dmb->nhlevels && refine) {
429 PetscCall(PetscInfo(NULL, "Invalid multigrid refinement hierarchy level specified (%" PetscInt_FMT "). MOAB UMR max levels = %" PetscInt_FMT ". Creating a NULL object.\n", dmb->hlevel + 1, dmb->nhlevels));
431 if (dmb->hlevel - 1 < 0 && !refine) PetscCall(PetscInfo(NULL, "Invalid multigrid coarsen hierarchy level specified (%" PetscInt_FMT "). Creating a NULL object.\n", dmb->hlevel - 1));
437 dd2 = (DM_Moab *)dm2->data;
439 dd2->mbiface = dmb->mbiface;
441 dd2->pcomm = dmb->pcomm;
443 dd2->icreatedinstance = PETSC_FALSE;
444 dd2->nghostrings = dmb->nghostrings;
448 dd2->hlevel = dmb->hlevel + 1;
450 dd2->hlevel = dmb->hlevel - 1;
454 dd2->hierarchy = dmb->hierarchy;
455 dd2->nhlevels = dmb->nhlevels;
456 PetscCall(PetscMalloc1(dd2->nhlevels + 1, &dd2->hsets));
457 for (i = 0; i <= dd2->nhlevels; i++) dd2->hsets[i] = dmb->hsets[i];
458 dd2->fileset = dd2->hsets[dd2->hlevel];
461 dd2->bs = dmb->bs;
462 dd2->numFields = dmb->numFields;
463 dd2->rw_dbglevel = dmb->rw_dbglevel;
464 dd2->partition_by_rank = dmb->partition_by_rank;
465 PetscCall(PetscStrncpy(dd2->extra_read_options, dmb->extra_read_options, sizeof(dd2->extra_read_options)));
466 PetscCall(PetscStrncpy(dd2->extra_write_options, dmb->extra_write_options, sizeof(dd2->extra_write_options)));
467 dd2->read_mode = dmb->read_mode;
468 dd2->write_mode = dmb->write_mode;
471 PetscCall(DMMoabSetLocalToGlobalTag(dm2, dmb->ltog_tag));
473 merr = dd2->mbiface->tag_get_handle(MATERIAL_SET_TAG_NAME, dd2->material_tag);
476 PetscCall(DMSetOptionsPrefix(dm2, ((PetscObject)dm)->prefix));
481 dm2->ops->creatematrix = dm->ops->creatematrix;
484 PetscCall(DMMoabSetBlockFills(dm2, dmb->dfill, dmb->ofill));
487 PetscCall(DMSetMatType(dm2, dm->mattype));
488 PetscCall(DMSetVecType(dm2, dm->vectype));
489 dd2->numFields = dmb->numFields;
490 if (dmb->numFields) PetscCall(DMMoabSetFieldNames(dm2, dmb->numFields, dmb->fieldNames));
501 // PetscClangLinter pragma ignore: -fdoc-*
503 DMRefine_Moab - Generate a multi-level uniform refinement hierarchy
510 + dm - The `DMMOAB` object
511 - comm - the communicator to contain the new DM object (or `MPI_COMM_NULL`)
514 . dmf - the refined `DM`, or `NULL`
530 // PetscClangLinter pragma ignore: -fdoc-*
532 DMCoarsen_Moab - Generate a multi-level uniform refinement hierarchy
539 + dm - The `DMMOAB` object
540 - comm - the communicator to contain the new `DM` object (or `MPI_COMM_NULL`)
543 . dmc - the coarsened `DM`, or `NULL`