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