Set up data structures for MG.
591 {
594
595 MPI_Comm comm;
596 CHKERR PetscObjectGetComm((PetscObject)
dM, &comm);
597
598 MOFEM_LOG_C(
"PCMGViaApproximationOrders", Sev::inform,
"set MG levels %u\n",
600
603
606
607 for (
int kk = 0; kk <
nbLevels; kk++) {
608
609
611 CHKERR ISGetSize(is_vec[kk], &is_glob_size[kk]);
612 CHKERR ISGetLocalSize(is_vec[kk], &is_loc_size[kk]);
613
615 "Nb. dofs at level [ %d ] global %u local %d\n", kk,
616 is_glob_size[kk], is_loc_size[kk]);
617
618
619 if (is_glob_size[kk] == 0) {
621 }
622 }
623
624 for (
int kk = 0; kk !=
nbLevels; kk++) {
625 if (kk ==
nbLevels - 1 && use_mat_a) {
627 false);
628 } else {
629 if (kk > 0) {
630
633 } else {
634
635
637 false);
638 }
639 }
640 }
641
642 for (unsigned int kk = 0; kk < is_vec.size(); kk++) {
644 }
645
648
650}
#define MOFEM_LOG_SEVERITY_SYNC(comm, severity)
Synchronise "SYNC" on curtain severity level.
#define MOFEM_LOG_C(channel, severity, format,...)
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
@ MOFEM_DATA_INCONSISTENCY
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
#define CHKERR
Inline error check.
MoFEMErrorCode DMMGViaApproxOrdersPushBackCoarseningIS(DM dm, IS is, Mat A, bool create_sub_matrix, bool shell_sub_a)
Push back coarsening level to MG via approximation orders.
#define MOFEM_LOG_TAG(channel, tag)
Tag channel.
#define MOFEM_LOG_CHANNEL(channel)
Set and reset channel.
virtual MoFEMErrorCode destroyIsAtLevel(int kk, IS *is)
Destroy IS if internally created.
virtual MoFEMErrorCode createIsAtLevel(int kk, IS *is)
Set IS for levels.