Actual source code: absolute.c


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

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

 11:   VecTaggerGetBlockSize(tagger, &bs);
 12:   *numBoxes = 1;
 13:   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:   return 0;
 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: `VecTaggerAbsoluteGetBox()`
 35: @*/
 36: PetscErrorCode VecTaggerAbsoluteSetBox(VecTagger tagger, VecTaggerBox *box)
 37: {
 38:   VecTaggerSetBox_Simple(tagger, box);
 39:   return 0;
 40: }

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

 45:   Logically Collective

 47:   Input Parameter:
 48: . tagger - the VecTagger context

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

 53:   Level: advanced

 55: .seealso: `VecTaggerAbsoluteSetBox()`
 56: @*/
 57: PetscErrorCode VecTaggerAbsoluteGetBox(VecTagger tagger, const VecTaggerBox **box)
 58: {
 59:   VecTaggerGetBox_Simple(tagger, box);
 60:   return 0;
 61: }

 63: PETSC_INTERN PetscErrorCode VecTaggerCreate_Absolute(VecTagger tagger)
 64: {
 65:   VecTaggerCreate_Simple(tagger);
 66:   tagger->ops->computeboxes = VecTaggerComputeBoxes_Absolute;
 67:   return 0;
 68: }