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