xref: /petsc/src/sys/ams/pams.c (revision 792fecdfe9134cce4d631112660ddd34f063bc17)
1b3506946SBarry Smith 
2af0996ceSBarry Smith #include <petsc/private/petscimpl.h>        /*I    "petscsys.h"   I*/
3e04113cfSBarry Smith #include <petscviewersaws.h>
4ec7429eaSBarry Smith #include <petscsys.h>
5b3506946SBarry Smith 
6ec7429eaSBarry Smith /*@C
7e04113cfSBarry Smith    PetscObjectSAWsTakeAccess - Take access of the data fields that have been published to SAWs so they may be changed locally
8ec7429eaSBarry Smith 
9ec7429eaSBarry Smith    Collective on PetscObject
10ec7429eaSBarry Smith 
11ec7429eaSBarry Smith    Input Parameters:
12ec7429eaSBarry Smith .  obj - the Petsc variable
13ec7429eaSBarry Smith          Thus must be cast with a (PetscObject), for example,
14ec7429eaSBarry Smith          PetscObjectSetName((PetscObject)mat,name);
15ec7429eaSBarry Smith 
16ec7429eaSBarry Smith    Level: advanced
17ec7429eaSBarry Smith 
18db781477SPatrick Sanan .seealso: `PetscObjectSetName()`, `PetscObjectSAWsViewOff()`, `PetscObjectSAWsGrantAccess()`
19ec7429eaSBarry Smith 
20ec7429eaSBarry Smith @*/
21e04113cfSBarry Smith PetscErrorCode  PetscObjectSAWsTakeAccess(PetscObject obj)
22ec7429eaSBarry Smith {
23ec957eceSBarry Smith   if (obj->amsmem) {
2416ad0300SBarry Smith     /* cannot wrap with PetscPushStack() because that also deals with the locks */
259a492a5cSBarry Smith     SAWs_Lock();
26ec7429eaSBarry Smith   }
2767a1e3b6SBarry Smith   return 0;
28ec7429eaSBarry Smith }
29ec7429eaSBarry Smith 
30ec7429eaSBarry Smith /*@C
311e4262caSBarry Smith    PetscObjectSAWsGrantAccess - Grants access of the data fields that have been published to SAWs to change
32ec7429eaSBarry Smith 
33ec7429eaSBarry Smith    Collective on PetscObject
34ec7429eaSBarry Smith 
35ec7429eaSBarry Smith    Input Parameters:
36ec7429eaSBarry Smith .  obj - the Petsc variable
37ec7429eaSBarry Smith          Thus must be cast with a (PetscObject), for example,
38ec7429eaSBarry Smith          PetscObjectSetName((PetscObject)mat,name);
39ec7429eaSBarry Smith 
40ec7429eaSBarry Smith    Level: advanced
41ec7429eaSBarry Smith 
42db781477SPatrick Sanan .seealso: `PetscObjectSetName()`, `PetscObjectSAWsViewOff()`, `PetscObjectSAWsTakeAccess()`
43ec7429eaSBarry Smith 
44ec7429eaSBarry Smith @*/
45e04113cfSBarry Smith PetscErrorCode  PetscObjectSAWsGrantAccess(PetscObject obj)
46ec7429eaSBarry Smith {
47ec957eceSBarry Smith   if (obj->amsmem) {
4816ad0300SBarry Smith     /* cannot wrap with PetscPushStack() because that also deals with the locks */
499a492a5cSBarry Smith     SAWs_Unlock();
50ec7429eaSBarry Smith   }
5167a1e3b6SBarry Smith   return 0;
52ec7429eaSBarry Smith }
53ec7429eaSBarry Smith 
547aab2a10SBarry Smith /*@C
551e4262caSBarry Smith    PetscSAWsBlock - Blocks on SAWs until a client (person using the web browser) unblocks
567aab2a10SBarry Smith 
577aab2a10SBarry Smith    Not Collective
587aab2a10SBarry Smith 
597aab2a10SBarry Smith    Level: advanced
607aab2a10SBarry Smith 
61db781477SPatrick Sanan .seealso: `PetscObjectSetName()`, `PetscObjectSAWsViewOff()`, `PetscObjectSAWsSetBlock()`, `PetscObjectSAWsBlock()`
627aab2a10SBarry Smith 
637aab2a10SBarry Smith @*/
647aab2a10SBarry Smith PetscErrorCode  PetscSAWsBlock(void)
657aab2a10SBarry Smith {
667aab2a10SBarry Smith   volatile PetscBool block = PETSC_TRUE;
677aab2a10SBarry Smith 
687aab2a10SBarry Smith   PetscFunctionBegin;
69*792fecdfSBarry Smith   PetscCallSAWs(SAWs_Register,("__Block",(PetscBool*)&block,1,SAWs_WRITE,SAWs_BOOLEAN));
707aab2a10SBarry Smith   SAWs_Lock();
717aab2a10SBarry Smith   while (block) {
727aab2a10SBarry Smith     SAWs_Unlock();
739566063dSJacob Faibussowitsch     PetscCall(PetscInfo(NULL,"Blocking on SAWs\n"));
749566063dSJacob Faibussowitsch     PetscCall(PetscSleep(.3));
757aab2a10SBarry Smith     SAWs_Lock();
767aab2a10SBarry Smith   }
777aab2a10SBarry Smith   SAWs_Unlock();
78*792fecdfSBarry Smith   PetscCallSAWs(SAWs_Delete,("__Block"));
799566063dSJacob Faibussowitsch   PetscCall(PetscInfo(NULL,"Out of SAWs block\n"));
807aab2a10SBarry Smith   PetscFunctionReturn(0);
817aab2a10SBarry Smith }
827aab2a10SBarry Smith 
83b90c6cbeSBarry Smith /*@C
84e04113cfSBarry Smith    PetscObjectSAWsBlock - Blocks the object if PetscObjectSAWsSetBlock() has been called
85b90c6cbeSBarry Smith 
86b90c6cbeSBarry Smith    Collective on PetscObject
87b90c6cbeSBarry Smith 
88b90c6cbeSBarry Smith    Input Parameters:
89b90c6cbeSBarry Smith .  obj - the Petsc variable
90b90c6cbeSBarry Smith          Thus must be cast with a (PetscObject), for example,
91b90c6cbeSBarry Smith          PetscObjectSetName((PetscObject)mat,name);
92b90c6cbeSBarry Smith 
93b90c6cbeSBarry Smith    Level: advanced
94b90c6cbeSBarry Smith 
95db781477SPatrick Sanan .seealso: `PetscObjectSetName()`, `PetscObjectSAWsViewOff()`, `PetscObjectSAWsSetBlock()`
96b90c6cbeSBarry Smith 
97b90c6cbeSBarry Smith @*/
98e04113cfSBarry Smith PetscErrorCode  PetscObjectSAWsBlock(PetscObject obj)
99b90c6cbeSBarry Smith {
100b90c6cbeSBarry Smith   PetscFunctionBegin;
101b90c6cbeSBarry Smith   PetscValidHeader(obj,1);
102b90c6cbeSBarry Smith 
10396f8ada6SBarry Smith   if (!obj->amspublishblock || !obj->amsmem) PetscFunctionReturn(0);
1049566063dSJacob Faibussowitsch   PetscCall(PetscSAWsBlock());
105b90c6cbeSBarry Smith   PetscFunctionReturn(0);
106b90c6cbeSBarry Smith }
107b90c6cbeSBarry Smith 
108b90c6cbeSBarry Smith /*@C
109e04113cfSBarry Smith    PetscObjectSAWsSetBlock - Sets whether an object will block at PetscObjectSAWsBlock()
110b90c6cbeSBarry Smith 
111b90c6cbeSBarry Smith    Collective on PetscObject
112b90c6cbeSBarry Smith 
113b90c6cbeSBarry Smith    Input Parameters:
114b90c6cbeSBarry Smith +  obj - the Petsc variable
115b90c6cbeSBarry Smith          Thus must be cast with a (PetscObject), for example,
116b90c6cbeSBarry Smith          PetscObjectSetName((PetscObject)mat,name);
117b90c6cbeSBarry Smith -  flg - whether it should block
118b90c6cbeSBarry Smith 
119b90c6cbeSBarry Smith    Level: advanced
120b90c6cbeSBarry Smith 
121db781477SPatrick Sanan .seealso: `PetscObjectSetName()`, `PetscObjectSAWsViewOff()`, `PetscObjectSAWsBlock()`
122b90c6cbeSBarry Smith 
123b90c6cbeSBarry Smith @*/
124e04113cfSBarry Smith PetscErrorCode  PetscObjectSAWsSetBlock(PetscObject obj,PetscBool flg)
125b90c6cbeSBarry Smith {
126b90c6cbeSBarry Smith   PetscFunctionBegin;
127b90c6cbeSBarry Smith   PetscValidHeader(obj,1);
128b90c6cbeSBarry Smith   obj->amspublishblock = flg;
129b90c6cbeSBarry Smith   PetscFunctionReturn(0);
130b90c6cbeSBarry Smith }
131b90c6cbeSBarry Smith 
132e04113cfSBarry Smith PetscErrorCode PetscObjectSAWsViewOff(PetscObject obj)
13392e62aa6SBarry Smith {
1345f80ce2aSJacob Faibussowitsch   char dir[PETSC_MAX_PATH_LEN];
1359a492a5cSBarry Smith 
13692e62aa6SBarry Smith   PetscFunctionBegin;
1379fb22e1aSBarry Smith   if (obj->classid == PETSC_VIEWER_CLASSID) PetscFunctionReturn(0);
13816ad0300SBarry Smith   if (!obj->amsmem) PetscFunctionReturn(0);
1399566063dSJacob Faibussowitsch   PetscCall(PetscSNPrintf(dir,sizeof(dir),"/PETSc/Objects/%s",obj->name));
140*792fecdfSBarry Smith   PetscCallSAWs(SAWs_Delete,(dir));
14192e62aa6SBarry Smith   PetscFunctionReturn(0);
14292e62aa6SBarry Smith }
143