Actual source code: absolute.c

  1: #include <petsc/private/vecimpl.h>
  2: #include "../src/vec/vec/utils/tagger/impls/simple.h"

  4: static PetscErrorCode VecTaggerComputeBoxes_Absolute(VecTagger tagger, Vec vec, PetscInt *numBoxes, VecTaggerBox **boxes, PetscBool *listed)
  5: {
  6:   VecTagger_Simple *smpl = (VecTagger_Simple *)tagger->data;
  7:   PetscInt          bs, i;
  8:   VecTaggerBox     *bxs;

 10:   PetscFunctionBegin;
 11:   PetscCall(VecTaggerGetBlockSize(tagger, &bs));
 12:   *numBoxes = 1;
 13:   PetscCall(PetscMalloc1(bs, &bxs));
 14:   for (i = 0; i < bs; i++) {
 15:     bxs[i].min = smpl->box[i].min;
 16:     bxs[i].max = smpl->box[i].max;
 17:   }
 18:   *boxes = bxs;
 19:   if (listed) *listed = PETSC_TRUE;
 20:   PetscFunctionReturn(PETSC_SUCCESS);
 21: }

 23: /*@C
 24:   VecTaggerAbsoluteSetBox - Set the box defining the values to be tagged by the tagger.

 26:   Logically Collective

 28:   Input Parameters:
 29: + tagger - the `VecTagger` context
 30: - box    - the box: a blocksize array of `VecTaggerBox` boxes

 32:   Level: advanced

 34: .seealso: `VecTagger`, `VecTaggerBox`, `VecTaggerAbsoluteGetBox()`
 35: @*/
 36: PetscErrorCode VecTaggerAbsoluteSetBox(VecTagger tagger, VecTaggerBox *box)
 37: {
 38:   PetscFunctionBegin;
 39:   PetscCall(VecTaggerSetBox_Simple(tagger, box));
 40:   PetscFunctionReturn(PETSC_SUCCESS);
 41: }

 43: /*@C
 44:   VecTaggerAbsoluteGetBox - Get the box defining the values to be tagged by the tagger.

 46:   Logically Collective

 48:   Input Parameter:
 49: . tagger - the `VecTagger` context

 51:   Output Parameter:
 52: . box - the box: a blocksize array of `VecTaggerBox` boxes

 54:   Level: advanced

 56: .seealso: `VecTagger`, `VecTaggerBox`, `VecTaggerAbsoluteSetBox()`
 57: @*/
 58: PetscErrorCode VecTaggerAbsoluteGetBox(VecTagger tagger, const VecTaggerBox **box)
 59: {
 60:   PetscFunctionBegin;
 61:   PetscCall(VecTaggerGetBox_Simple(tagger, box));
 62:   PetscFunctionReturn(PETSC_SUCCESS);
 63: }

 65: PETSC_INTERN PetscErrorCode VecTaggerCreate_Absolute(VecTagger tagger)
 66: {
 67:   PetscFunctionBegin;
 68:   PetscCall(VecTaggerCreate_Simple(tagger));
 69:   tagger->ops->computeboxes = VecTaggerComputeBoxes_Absolute;
 70:   PetscFunctionReturn(PETSC_SUCCESS);
 71: }