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 @*/ 21*9371c9d4SSatish Balay PetscErrorCode PetscObjectSAWsTakeAccess(PetscObject obj) { 22ec957eceSBarry Smith if (obj->amsmem) { 2316ad0300SBarry Smith /* cannot wrap with PetscPushStack() because that also deals with the locks */ 249a492a5cSBarry Smith SAWs_Lock(); 25ec7429eaSBarry Smith } 2667a1e3b6SBarry Smith return 0; 27ec7429eaSBarry Smith } 28ec7429eaSBarry Smith 29ec7429eaSBarry Smith /*@C 301e4262caSBarry Smith PetscObjectSAWsGrantAccess - Grants access of the data fields that have been published to SAWs to change 31ec7429eaSBarry Smith 32ec7429eaSBarry Smith Collective on PetscObject 33ec7429eaSBarry Smith 34ec7429eaSBarry Smith Input Parameters: 35ec7429eaSBarry Smith . obj - the Petsc variable 36ec7429eaSBarry Smith Thus must be cast with a (PetscObject), for example, 37ec7429eaSBarry Smith PetscObjectSetName((PetscObject)mat,name); 38ec7429eaSBarry Smith 39ec7429eaSBarry Smith Level: advanced 40ec7429eaSBarry Smith 41db781477SPatrick Sanan .seealso: `PetscObjectSetName()`, `PetscObjectSAWsViewOff()`, `PetscObjectSAWsTakeAccess()` 42ec7429eaSBarry Smith 43ec7429eaSBarry Smith @*/ 44*9371c9d4SSatish Balay PetscErrorCode PetscObjectSAWsGrantAccess(PetscObject obj) { 45ec957eceSBarry Smith if (obj->amsmem) { 4616ad0300SBarry Smith /* cannot wrap with PetscPushStack() because that also deals with the locks */ 479a492a5cSBarry Smith SAWs_Unlock(); 48ec7429eaSBarry Smith } 4967a1e3b6SBarry Smith return 0; 50ec7429eaSBarry Smith } 51ec7429eaSBarry Smith 527aab2a10SBarry Smith /*@C 531e4262caSBarry Smith PetscSAWsBlock - Blocks on SAWs until a client (person using the web browser) unblocks 547aab2a10SBarry Smith 557aab2a10SBarry Smith Not Collective 567aab2a10SBarry Smith 577aab2a10SBarry Smith Level: advanced 587aab2a10SBarry Smith 59db781477SPatrick Sanan .seealso: `PetscObjectSetName()`, `PetscObjectSAWsViewOff()`, `PetscObjectSAWsSetBlock()`, `PetscObjectSAWsBlock()` 607aab2a10SBarry Smith 617aab2a10SBarry Smith @*/ 62*9371c9d4SSatish Balay PetscErrorCode PetscSAWsBlock(void) { 637aab2a10SBarry Smith volatile PetscBool block = PETSC_TRUE; 647aab2a10SBarry Smith 657aab2a10SBarry Smith PetscFunctionBegin; 66792fecdfSBarry Smith PetscCallSAWs(SAWs_Register, ("__Block", (PetscBool *)&block, 1, SAWs_WRITE, SAWs_BOOLEAN)); 677aab2a10SBarry Smith SAWs_Lock(); 687aab2a10SBarry Smith while (block) { 697aab2a10SBarry Smith SAWs_Unlock(); 709566063dSJacob Faibussowitsch PetscCall(PetscInfo(NULL, "Blocking on SAWs\n")); 719566063dSJacob Faibussowitsch PetscCall(PetscSleep(.3)); 727aab2a10SBarry Smith SAWs_Lock(); 737aab2a10SBarry Smith } 747aab2a10SBarry Smith SAWs_Unlock(); 75792fecdfSBarry Smith PetscCallSAWs(SAWs_Delete, ("__Block")); 769566063dSJacob Faibussowitsch PetscCall(PetscInfo(NULL, "Out of SAWs block\n")); 777aab2a10SBarry Smith PetscFunctionReturn(0); 787aab2a10SBarry Smith } 797aab2a10SBarry Smith 80b90c6cbeSBarry Smith /*@C 81e04113cfSBarry Smith PetscObjectSAWsBlock - Blocks the object if PetscObjectSAWsSetBlock() has been called 82b90c6cbeSBarry Smith 83b90c6cbeSBarry Smith Collective on PetscObject 84b90c6cbeSBarry Smith 85b90c6cbeSBarry Smith Input Parameters: 86b90c6cbeSBarry Smith . obj - the Petsc variable 87b90c6cbeSBarry Smith Thus must be cast with a (PetscObject), for example, 88b90c6cbeSBarry Smith PetscObjectSetName((PetscObject)mat,name); 89b90c6cbeSBarry Smith 90b90c6cbeSBarry Smith Level: advanced 91b90c6cbeSBarry Smith 92db781477SPatrick Sanan .seealso: `PetscObjectSetName()`, `PetscObjectSAWsViewOff()`, `PetscObjectSAWsSetBlock()` 93b90c6cbeSBarry Smith 94b90c6cbeSBarry Smith @*/ 95*9371c9d4SSatish Balay PetscErrorCode PetscObjectSAWsBlock(PetscObject obj) { 96b90c6cbeSBarry Smith PetscFunctionBegin; 97b90c6cbeSBarry Smith PetscValidHeader(obj, 1); 98b90c6cbeSBarry Smith 9996f8ada6SBarry Smith if (!obj->amspublishblock || !obj->amsmem) PetscFunctionReturn(0); 1009566063dSJacob Faibussowitsch PetscCall(PetscSAWsBlock()); 101b90c6cbeSBarry Smith PetscFunctionReturn(0); 102b90c6cbeSBarry Smith } 103b90c6cbeSBarry Smith 104b90c6cbeSBarry Smith /*@C 105e04113cfSBarry Smith PetscObjectSAWsSetBlock - Sets whether an object will block at PetscObjectSAWsBlock() 106b90c6cbeSBarry Smith 107b90c6cbeSBarry Smith Collective on PetscObject 108b90c6cbeSBarry Smith 109b90c6cbeSBarry Smith Input Parameters: 110b90c6cbeSBarry Smith + obj - the Petsc variable 111b90c6cbeSBarry Smith Thus must be cast with a (PetscObject), for example, 112b90c6cbeSBarry Smith PetscObjectSetName((PetscObject)mat,name); 113b90c6cbeSBarry Smith - flg - whether it should block 114b90c6cbeSBarry Smith 115b90c6cbeSBarry Smith Level: advanced 116b90c6cbeSBarry Smith 117db781477SPatrick Sanan .seealso: `PetscObjectSetName()`, `PetscObjectSAWsViewOff()`, `PetscObjectSAWsBlock()` 118b90c6cbeSBarry Smith 119b90c6cbeSBarry Smith @*/ 120*9371c9d4SSatish Balay PetscErrorCode PetscObjectSAWsSetBlock(PetscObject obj, PetscBool flg) { 121b90c6cbeSBarry Smith PetscFunctionBegin; 122b90c6cbeSBarry Smith PetscValidHeader(obj, 1); 123b90c6cbeSBarry Smith obj->amspublishblock = flg; 124b90c6cbeSBarry Smith PetscFunctionReturn(0); 125b90c6cbeSBarry Smith } 126b90c6cbeSBarry Smith 127*9371c9d4SSatish Balay PetscErrorCode PetscObjectSAWsViewOff(PetscObject obj) { 1285f80ce2aSJacob Faibussowitsch char dir[PETSC_MAX_PATH_LEN]; 1299a492a5cSBarry Smith 13092e62aa6SBarry Smith PetscFunctionBegin; 1319fb22e1aSBarry Smith if (obj->classid == PETSC_VIEWER_CLASSID) PetscFunctionReturn(0); 13216ad0300SBarry Smith if (!obj->amsmem) PetscFunctionReturn(0); 1339566063dSJacob Faibussowitsch PetscCall(PetscSNPrintf(dir, sizeof(dir), "/PETSc/Objects/%s", obj->name)); 134792fecdfSBarry Smith PetscCallSAWs(SAWs_Delete, (dir)); 13592e62aa6SBarry Smith PetscFunctionReturn(0); 13692e62aa6SBarry Smith } 137