xref: /petsc/src/vec/vec/utils/tagger/impls/absolute.c (revision 1ed6e3ff8437baa411029a28c2b08f047df9ad9a)
1 #include <petsc/private/vecimpl.h> /*I "petscvec.h" I*/
2 #include "../src/vec/vec/utils/tagger/impls/simple.h"
3 
VecTaggerComputeBoxes_Absolute(VecTagger tagger,Vec vec,PetscInt * numBoxes,VecTaggerBox ** boxes,PetscBool * listed)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;
9 
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 }
22 
23 /*@C
24   VecTaggerAbsoluteSetBox - Set the box defining the values to be tagged by the tagger.
25 
26   Logically Collective
27 
28   Input Parameters:
29 + tagger - the `VecTagger` context
30 - box    - the box: a blocksize array of `VecTaggerBox` boxes
31 
32   Level: advanced
33 
34 .seealso: `VecTagger`, `VecTaggerBox`, `VecTaggerAbsoluteGetBox()`
35 @*/
VecTaggerAbsoluteSetBox(VecTagger tagger,VecTaggerBox box[])36 PetscErrorCode VecTaggerAbsoluteSetBox(VecTagger tagger, VecTaggerBox box[])
37 {
38   PetscFunctionBegin;
39   PetscCall(VecTaggerSetBox_Simple(tagger, box));
40   PetscFunctionReturn(PETSC_SUCCESS);
41 }
42 
43 /*@C
44   VecTaggerAbsoluteGetBox - Get the box defining the values to be tagged by the tagger.
45 
46   Logically Collective
47 
48   Input Parameter:
49 . tagger - the `VecTagger` context
50 
51   Output Parameter:
52 . box - the box: a blocksize array of `VecTaggerBox` boxes
53 
54   Level: advanced
55 
56 .seealso: `VecTagger`, `VecTaggerBox`, `VecTaggerAbsoluteSetBox()`
57 @*/
VecTaggerAbsoluteGetBox(VecTagger tagger,const VecTaggerBox * box[])58 PetscErrorCode VecTaggerAbsoluteGetBox(VecTagger tagger, const VecTaggerBox *box[])
59 {
60   PetscFunctionBegin;
61   PetscCall(VecTaggerGetBox_Simple(tagger, box));
62   PetscFunctionReturn(PETSC_SUCCESS);
63 }
64 
VecTaggerCreate_Absolute(VecTagger tagger)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 }
72