Lines Matching refs:psubcomm

24 PetscErrorCode PetscSubcommSetFromOptions(PetscSubcomm psubcomm)  in PetscSubcommSetFromOptions()  argument
30 PetscCheck(psubcomm, PETSC_COMM_SELF, PETSC_ERR_ARG_NULL, "Must call PetscSubcommCreate first"); in PetscSubcommSetFromOptions()
32 PetscOptionsBegin(psubcomm->parent, psubcomm->subcommprefix, "Options for PetscSubcomm", NULL); in PetscSubcommSetFromOptions()
33 …PetscCall(PetscOptionsEnum("-psubcomm_type", NULL, NULL, PetscSubcommTypes, (PetscEnum)psubcomm->t… in PetscSubcommSetFromOptions()
34 if (flg && psubcomm->type != type) { in PetscSubcommSetFromOptions()
36 PetscCall(PetscCommDestroy(&(psubcomm)->dupparent)); in PetscSubcommSetFromOptions()
37 PetscCall(PetscCommDestroy(&(psubcomm)->child)); in PetscSubcommSetFromOptions()
38 PetscCall(PetscFree((psubcomm)->subsize)); in PetscSubcommSetFromOptions()
43 PetscCall(PetscSubcommCreate_contiguous(psubcomm)); in PetscSubcommSetFromOptions()
46 PetscCall(PetscSubcommCreate_interlaced(psubcomm)); in PetscSubcommSetFromOptions()
54 if (flg) PetscCall(PetscSubcommView(psubcomm, PETSC_VIEWER_STDOUT_(psubcomm->parent))); in PetscSubcommSetFromOptions()
72 PetscErrorCode PetscSubcommSetOptionsPrefix(PetscSubcomm psubcomm, const char pre[]) in PetscSubcommSetOptionsPrefix() argument
76 PetscCall(PetscFree(psubcomm->subcommprefix)); in PetscSubcommSetOptionsPrefix()
79 PetscCall(PetscFree(psubcomm->subcommprefix)); in PetscSubcommSetOptionsPrefix()
80 PetscCall(PetscStrallocpy(pre, &psubcomm->subcommprefix)); in PetscSubcommSetOptionsPrefix()
98 PetscErrorCode PetscSubcommView(PetscSubcomm psubcomm, PetscViewer viewer) in PetscSubcommView() argument
108 MPI_Comm comm = psubcomm->parent; in PetscSubcommView()
112 …, "PetscSubcomm type %s with total %d MPI processes:\n", PetscSubcommTypes[psubcomm->type], size)); in PetscSubcommView()
114 PetscCallMPI(MPI_Comm_size(psubcomm->child, &subsize)); in PetscSubcommView()
115 PetscCallMPI(MPI_Comm_rank(psubcomm->child, &subrank)); in PetscSubcommView()
116 PetscCallMPI(MPI_Comm_rank(psubcomm->dupparent, &duprank)); in PetscSubcommView()
118 …ewer, " [%d], color %d, sub-size %d, sub-rank %d, duprank %d\n", rank, psubcomm->color, subsize, … in PetscSubcommView()
138 PetscErrorCode PetscSubcommSetNumber(PetscSubcomm psubcomm, PetscInt nsubcomm) in PetscSubcommSetNumber() argument
140 MPI_Comm comm = psubcomm->parent; in PetscSubcommSetNumber()
144 …PetscCheck(psubcomm, PETSC_COMM_SELF, PETSC_ERR_ARG_NULL, "PetscSubcomm is not created. Call Petsc… in PetscSubcommSetNumber()
149 psubcomm->n = msub; in PetscSubcommSetNumber()
167 PetscErrorCode PetscSubcommSetType(PetscSubcomm psubcomm, PetscSubcommType subcommtype) in PetscSubcommSetType() argument
170 …PetscCheck(psubcomm, PETSC_COMM_SELF, PETSC_ERR_ARG_NULL, "PetscSubcomm is not created. Call Petsc… in PetscSubcommSetType()
171 …Check(psubcomm->n >= 1, PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "number of subcommunicators %d is in… in PetscSubcommSetType()
174 PetscCall(PetscSubcommCreate_contiguous(psubcomm)); in PetscSubcommSetType()
176 PetscCall(PetscSubcommCreate_interlaced(psubcomm)); in PetscSubcommSetType()
177 …} else SETERRQ(psubcomm->parent, PETSC_ERR_SUP, "PetscSubcommType %s is not supported yet", PetscS… in PetscSubcommSetType()
195 PetscErrorCode PetscSubcommSetTypeGeneral(PetscSubcomm psubcomm, PetscMPIInt color, PetscMPIInt sub… in PetscSubcommSetTypeGeneral() argument
197 MPI_Comm subcomm = 0, dupcomm = 0, comm = psubcomm->parent; in PetscSubcommSetTypeGeneral()
199 PetscMPIInt i, nsubcomm = psubcomm->n; in PetscSubcommSetTypeGeneral()
202 …PetscCheck(psubcomm, PETSC_COMM_SELF, PETSC_ERR_ARG_NULL, "PetscSubcomm is not created. Call Petsc… in PetscSubcommSetTypeGeneral()
234 PetscCall(PetscCommDuplicate(dupcomm, &psubcomm->dupparent, NULL)); in PetscSubcommSetTypeGeneral()
235 PetscCall(PetscCommDuplicate(subcomm, &psubcomm->child, NULL)); in PetscSubcommSetTypeGeneral()
239 psubcomm->color = color; in PetscSubcommSetTypeGeneral()
240 psubcomm->subsize = subsize; in PetscSubcommSetTypeGeneral()
241 psubcomm->type = PETSC_SUBCOMM_GENERAL; in PetscSubcommSetTypeGeneral()
257 PetscErrorCode PetscSubcommDestroy(PetscSubcomm *psubcomm) in PetscSubcommDestroy() argument
260 if (!*psubcomm) PetscFunctionReturn(PETSC_SUCCESS); in PetscSubcommDestroy()
261 PetscCall(PetscCommDestroy(&(*psubcomm)->dupparent)); in PetscSubcommDestroy()
262 PetscCall(PetscCommDestroy(&(*psubcomm)->child)); in PetscSubcommDestroy()
263 PetscCall(PetscFree((*psubcomm)->subsize)); in PetscSubcommDestroy()
264 if ((*psubcomm)->subcommprefix) PetscCall(PetscFree((*psubcomm)->subcommprefix)); in PetscSubcommDestroy()
265 PetscCall(PetscFree(*psubcomm)); in PetscSubcommDestroy()
285 PetscErrorCode PetscSubcommCreate(MPI_Comm comm, PetscSubcomm *psubcomm) in PetscSubcommCreate() argument
290 PetscCall(PetscNew(psubcomm)); in PetscSubcommCreate()
296 (*psubcomm)->parent = comm; in PetscSubcommCreate()
297 (*psubcomm)->dupparent = comm; in PetscSubcommCreate()
298 (*psubcomm)->child = PETSC_COMM_SELF; in PetscSubcommCreate()
299 (*psubcomm)->n = size; in PetscSubcommCreate()
300 (*psubcomm)->color = rank; in PetscSubcommCreate()
301 (*psubcomm)->subsize = NULL; in PetscSubcommCreate()
302 (*psubcomm)->type = PETSC_SUBCOMM_INTERLACED; in PetscSubcommCreate()
373 static PetscErrorCode PetscSubcommCreate_contiguous(PetscSubcomm psubcomm) in PetscSubcommCreate_contiguous() argument
376 PetscMPIInt np_subcomm, nleftover, i, color = -1, rankstart, nsubcomm = psubcomm->n; in PetscSubcommCreate_contiguous()
377 MPI_Comm subcomm = 0, dupcomm = 0, comm = psubcomm->parent; in PetscSubcommCreate_contiguous()
408 PetscCall(PetscCommDuplicate(dupcomm, &psubcomm->dupparent, NULL)); in PetscSubcommCreate_contiguous()
409 PetscCall(PetscCommDuplicate(subcomm, &psubcomm->child, NULL)); in PetscSubcommCreate_contiguous()
413 psubcomm->color = color; in PetscSubcommCreate_contiguous()
414 psubcomm->subsize = subsize; in PetscSubcommCreate_contiguous()
415 psubcomm->type = PETSC_SUBCOMM_CONTIGUOUS; in PetscSubcommCreate_contiguous()
444 static PetscErrorCode PetscSubcommCreate_interlaced(PetscSubcomm psubcomm) in PetscSubcommCreate_interlaced() argument
447 PetscMPIInt np_subcomm, nleftover, i, j, color, nsubcomm = psubcomm->n; in PetscSubcommCreate_interlaced()
448 MPI_Comm subcomm = 0, dupcomm = 0, comm = psubcomm->parent; in PetscSubcommCreate_interlaced()
483 PetscCall(PetscCommDuplicate(dupcomm, &psubcomm->dupparent, NULL)); in PetscSubcommCreate_interlaced()
484 PetscCall(PetscCommDuplicate(subcomm, &psubcomm->child, NULL)); in PetscSubcommCreate_interlaced()
488 psubcomm->color = color; in PetscSubcommCreate_interlaced()
489 psubcomm->subsize = subsize; in PetscSubcommCreate_interlaced()
490 psubcomm->type = PETSC_SUBCOMM_INTERLACED; in PetscSubcommCreate_interlaced()