xref: /petsc/src/sys/ams/pams.c (revision a332a2633cacb19031bcd0b6831ff4f96baa26e5)
1b3506946SBarry Smith 
2afcb2eb5SJed Brown #include <petsc-private/petscimpl.h>        /*I    "petscsys.h"   I*/
3ec7429eaSBarry Smith #include <petscviewerams.h>
4ec7429eaSBarry Smith #include <petscsys.h>
5b3506946SBarry Smith 
6b3506946SBarry Smith #undef __FUNCT__
7ec7429eaSBarry Smith #define __FUNCT__ "PetscObjectAMSTakeAccess"
8ec7429eaSBarry Smith /*@C
9ec7429eaSBarry Smith    PetscObjectAMSTakeAccess - Take access of the data fields that have been published to AMS so they may be changed locally
10ec7429eaSBarry Smith 
11ec7429eaSBarry Smith    Collective on PetscObject
12ec7429eaSBarry Smith 
13ec7429eaSBarry Smith    Input Parameters:
14ec7429eaSBarry Smith .  obj - the Petsc variable
15ec7429eaSBarry Smith          Thus must be cast with a (PetscObject), for example,
16ec7429eaSBarry Smith          PetscObjectSetName((PetscObject)mat,name);
17ec7429eaSBarry Smith 
18ec7429eaSBarry Smith    Level: advanced
19ec7429eaSBarry Smith 
20ec7429eaSBarry Smith    Concepts: publishing object
21ec7429eaSBarry Smith 
22f05ece33SBarry Smith .seealso: PetscObjectSetName(), PetscObjectAMSViewOff(), PetscObjectAMSGrantAccess()
23ec7429eaSBarry Smith 
24ec7429eaSBarry Smith @*/
25ec7429eaSBarry Smith PetscErrorCode  PetscObjectAMSTakeAccess(PetscObject obj)
26ec7429eaSBarry Smith {
27ec7429eaSBarry Smith   PetscFunctionBegin;
28ec7429eaSBarry Smith   if (obj->amsmem != -1) {
29f05ece33SBarry Smith     PetscStackCallAMS(AMS_Memory_take_access,(obj->amsmem));
30ec7429eaSBarry Smith   }
31ec7429eaSBarry Smith   PetscFunctionReturn(0);
32ec7429eaSBarry Smith }
33ec7429eaSBarry Smith 
34ec7429eaSBarry Smith #undef __FUNCT__
35ec7429eaSBarry Smith #define __FUNCT__ "PetscObjectAMSGrantAccess"
36ec7429eaSBarry Smith /*@C
37ec7429eaSBarry Smith    PetscObjectAMSGrantAccess - Grants access of the data fields that have been published to AMS to the memory snooper to change
38ec7429eaSBarry Smith 
39ec7429eaSBarry Smith    Collective on PetscObject
40ec7429eaSBarry Smith 
41ec7429eaSBarry Smith    Input Parameters:
42ec7429eaSBarry Smith .  obj - the Petsc variable
43ec7429eaSBarry Smith          Thus must be cast with a (PetscObject), for example,
44ec7429eaSBarry Smith          PetscObjectSetName((PetscObject)mat,name);
45ec7429eaSBarry Smith 
46ec7429eaSBarry Smith    Level: advanced
47ec7429eaSBarry Smith 
48ec7429eaSBarry Smith    Concepts: publishing object
49ec7429eaSBarry Smith 
50f05ece33SBarry Smith .seealso: PetscObjectSetName(), PetscObjectAMSViewOff(), PetscObjectAMSTakeAccess()
51ec7429eaSBarry Smith 
52ec7429eaSBarry Smith @*/
53ec7429eaSBarry Smith PetscErrorCode  PetscObjectAMSGrantAccess(PetscObject obj)
54ec7429eaSBarry Smith {
55ec7429eaSBarry Smith   PetscFunctionBegin;
56ec7429eaSBarry Smith   if (obj->amsmem != -1) {
57f05ece33SBarry Smith     PetscStackCallAMS(AMS_Memory_grant_access,(obj->amsmem));
58ec7429eaSBarry Smith   }
59ec7429eaSBarry Smith   PetscFunctionReturn(0);
60ec7429eaSBarry Smith }
61ec7429eaSBarry Smith 
62ec7429eaSBarry Smith #undef __FUNCT__
63b90c6cbeSBarry Smith #define __FUNCT__ "PetscObjectAMSBlock"
64b90c6cbeSBarry Smith /*@C
65b90c6cbeSBarry Smith    PetscObjectAMSBlock - Blocks the object if PetscObjectAMSSetBlock() has been called
66b90c6cbeSBarry Smith 
67b90c6cbeSBarry Smith    Collective on PetscObject
68b90c6cbeSBarry Smith 
69b90c6cbeSBarry Smith    Input Parameters:
70b90c6cbeSBarry Smith .  obj - the Petsc variable
71b90c6cbeSBarry Smith          Thus must be cast with a (PetscObject), for example,
72b90c6cbeSBarry Smith          PetscObjectSetName((PetscObject)mat,name);
73b90c6cbeSBarry Smith 
74b90c6cbeSBarry Smith 
75b90c6cbeSBarry Smith    Level: advanced
76b90c6cbeSBarry Smith 
77b90c6cbeSBarry Smith    Concepts: publishing object
78b90c6cbeSBarry Smith 
79f05ece33SBarry Smith .seealso: PetscObjectSetName(), PetscObjectAMSViewOff(), PetscObjectAMSSetBlock()
80b90c6cbeSBarry Smith 
81b90c6cbeSBarry Smith @*/
82b90c6cbeSBarry Smith PetscErrorCode  PetscObjectAMSBlock(PetscObject obj)
83b90c6cbeSBarry Smith {
84*a332a263SBarry Smith   PetscErrorCode ierr;
85*a332a263SBarry Smith 
86b90c6cbeSBarry Smith   PetscFunctionBegin;
87b90c6cbeSBarry Smith   PetscValidHeader(obj,1);
88b90c6cbeSBarry Smith 
89b90c6cbeSBarry Smith   if (!obj->amspublishblock) PetscFunctionReturn(0);
90*a332a263SBarry Smith   ierr = PetscObjectAMSTakeAccess(obj);CHKERRQ(ierr);
91*a332a263SBarry Smith   while (obj->amsblock) {
92*a332a263SBarry Smith     ierr = PetscObjectAMSGrantAccess(obj);CHKERRQ(ierr);
93*a332a263SBarry Smith     ierr = PetscSleep(2);CHKERRQ(ierr);
94*a332a263SBarry Smith     ierr = PetscObjectAMSTakeAccess(obj);CHKERRQ(ierr);
95*a332a263SBarry Smith   }
96*a332a263SBarry Smith   obj->amsblock = PETSC_TRUE;
97*a332a263SBarry Smith   ierr = PetscObjectAMSGrantAccess(obj);CHKERRQ(ierr);
98b90c6cbeSBarry Smith   PetscFunctionReturn(0);
99b90c6cbeSBarry Smith }
100b90c6cbeSBarry Smith 
101b90c6cbeSBarry Smith #undef __FUNCT__
102b90c6cbeSBarry Smith #define __FUNCT__ "PetscObjectAMSSetBlock"
103b90c6cbeSBarry Smith /*@C
104b90c6cbeSBarry Smith    PetscObjectAMSSetBlock - Sets whether an object will block at PetscObjectAMSBlock()
105b90c6cbeSBarry Smith 
106b90c6cbeSBarry Smith    Collective on PetscObject
107b90c6cbeSBarry Smith 
108b90c6cbeSBarry Smith    Input Parameters:
109b90c6cbeSBarry Smith +  obj - the Petsc variable
110b90c6cbeSBarry Smith          Thus must be cast with a (PetscObject), for example,
111b90c6cbeSBarry Smith          PetscObjectSetName((PetscObject)mat,name);
112b90c6cbeSBarry Smith -  flg - whether it should block
113b90c6cbeSBarry Smith 
114b90c6cbeSBarry Smith    Level: advanced
115b90c6cbeSBarry Smith 
116b90c6cbeSBarry Smith    Concepts: publishing object
117b90c6cbeSBarry Smith 
118f05ece33SBarry Smith .seealso: PetscObjectSetName(), PetscObjectAMSViewOff(), PetscObjectAMSBlock()
119b90c6cbeSBarry Smith 
120b90c6cbeSBarry Smith @*/
121b90c6cbeSBarry Smith PetscErrorCode  PetscObjectAMSSetBlock(PetscObject obj,PetscBool flg)
122b90c6cbeSBarry Smith {
123b90c6cbeSBarry Smith   PetscFunctionBegin;
124b90c6cbeSBarry Smith   PetscValidHeader(obj,1);
125b90c6cbeSBarry Smith   obj->amspublishblock = flg;
126*a332a263SBarry Smith   obj->amsblock        = flg;
127b90c6cbeSBarry Smith   PetscFunctionReturn(0);
128b90c6cbeSBarry Smith }
129b90c6cbeSBarry Smith 
130b90c6cbeSBarry Smith #undef __FUNCT__
131f05ece33SBarry Smith #define __FUNCT__ "PetscObjectAMSViewOff"
132f05ece33SBarry Smith PetscErrorCode PetscObjectAMSViewOff(PetscObject obj)
13392e62aa6SBarry Smith {
13492e62aa6SBarry Smith   PetscErrorCode ierr;
13592e62aa6SBarry Smith 
13692e62aa6SBarry Smith   PetscFunctionBegin;
1379fb22e1aSBarry Smith   if (obj->classid == PETSC_VIEWER_CLASSID) PetscFunctionReturn(0);
138b90c6cbeSBarry Smith   if (obj->amsmem == -1) PetscFunctionReturn(0);
139b90c6cbeSBarry Smith   ierr        = AMS_Memory_destroy(obj->amsmem);CHKERRQ(ierr);
140b90c6cbeSBarry Smith   obj->amsmem = -1;
14192e62aa6SBarry Smith   PetscFunctionReturn(0);
14292e62aa6SBarry Smith }
14392e62aa6SBarry Smith 
144