1b3506946SBarry Smith 2afcb2eb5SJed Brown #include <petsc-private/petscimpl.h> /*I "petscsys.h" I*/ 3e04113cfSBarry Smith #include <petscviewersaws.h> 4ec7429eaSBarry Smith #include <petscsys.h> 5b3506946SBarry Smith 6b3506946SBarry Smith #undef __FUNCT__ 7e04113cfSBarry Smith #define __FUNCT__ "PetscObjectSAWsTakeAccess" 8ec7429eaSBarry Smith /*@C 9e04113cfSBarry Smith PetscObjectSAWsTakeAccess - Take access of the data fields that have been published to SAWs 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 22e04113cfSBarry Smith .seealso: PetscObjectSetName(), PetscObjectSAWsViewOff(), PetscObjectSAWsGrantAccess() 23ec7429eaSBarry Smith 24ec7429eaSBarry Smith @*/ 25e04113cfSBarry Smith PetscErrorCode PetscObjectSAWsTakeAccess(PetscObject obj) 26ec7429eaSBarry Smith { 27ec957eceSBarry Smith if (obj->amsmem) { 289a492a5cSBarry Smith SAWs_Lock(); 29ec7429eaSBarry Smith } 30*67a1e3b6SBarry Smith return 0; 31ec7429eaSBarry Smith } 32ec7429eaSBarry Smith 33ec7429eaSBarry Smith #undef __FUNCT__ 34e04113cfSBarry Smith #define __FUNCT__ "PetscObjectSAWsGrantAccess" 35ec7429eaSBarry Smith /*@C 36e04113cfSBarry Smith PetscObjectSAWsGrantAccess - Grants access of the data fields that have been published to SAWs to the memory snooper to change 37ec7429eaSBarry Smith 38ec7429eaSBarry Smith Collective on PetscObject 39ec7429eaSBarry Smith 40ec7429eaSBarry Smith Input Parameters: 41ec7429eaSBarry Smith . obj - the Petsc variable 42ec7429eaSBarry Smith Thus must be cast with a (PetscObject), for example, 43ec7429eaSBarry Smith PetscObjectSetName((PetscObject)mat,name); 44ec7429eaSBarry Smith 45ec7429eaSBarry Smith Level: advanced 46ec7429eaSBarry Smith 47ec7429eaSBarry Smith Concepts: publishing object 48ec7429eaSBarry Smith 49e04113cfSBarry Smith .seealso: PetscObjectSetName(), PetscObjectSAWsViewOff(), PetscObjectSAWsTakeAccess() 50ec7429eaSBarry Smith 51ec7429eaSBarry Smith @*/ 52e04113cfSBarry Smith PetscErrorCode PetscObjectSAWsGrantAccess(PetscObject obj) 53ec7429eaSBarry Smith { 54ec957eceSBarry Smith if (obj->amsmem) { 559a492a5cSBarry Smith SAWs_Unlock(); 56ec7429eaSBarry Smith } 57*67a1e3b6SBarry Smith return 0; 58ec7429eaSBarry Smith } 59ec7429eaSBarry Smith 60ec7429eaSBarry Smith #undef __FUNCT__ 61e04113cfSBarry Smith #define __FUNCT__ "PetscObjectSAWsBlock" 62b90c6cbeSBarry Smith /*@C 63e04113cfSBarry Smith PetscObjectSAWsBlock - Blocks the object if PetscObjectSAWsSetBlock() has been called 64b90c6cbeSBarry Smith 65b90c6cbeSBarry Smith Collective on PetscObject 66b90c6cbeSBarry Smith 67b90c6cbeSBarry Smith Input Parameters: 68b90c6cbeSBarry Smith . obj - the Petsc variable 69b90c6cbeSBarry Smith Thus must be cast with a (PetscObject), for example, 70b90c6cbeSBarry Smith PetscObjectSetName((PetscObject)mat,name); 71b90c6cbeSBarry Smith 72b90c6cbeSBarry Smith 73b90c6cbeSBarry Smith Level: advanced 74b90c6cbeSBarry Smith 75b90c6cbeSBarry Smith Concepts: publishing object 76b90c6cbeSBarry Smith 77e04113cfSBarry Smith .seealso: PetscObjectSetName(), PetscObjectSAWsViewOff(), PetscObjectSAWsSetBlock() 78b90c6cbeSBarry Smith 79b90c6cbeSBarry Smith @*/ 80e04113cfSBarry Smith PetscErrorCode PetscObjectSAWsBlock(PetscObject obj) 81b90c6cbeSBarry Smith { 82a332a263SBarry Smith PetscErrorCode ierr; 83a332a263SBarry Smith 84b90c6cbeSBarry Smith PetscFunctionBegin; 85b90c6cbeSBarry Smith PetscValidHeader(obj,1); 86b90c6cbeSBarry Smith 8796f8ada6SBarry Smith if (!obj->amspublishblock || !obj->amsmem) PetscFunctionReturn(0); 88e04113cfSBarry Smith ierr = PetscObjectSAWsTakeAccess(obj);CHKERRQ(ierr); 89a332a263SBarry Smith while (obj->amsblock) { 906c4a5ce2SBarry Smith ierr = PetscInfo(NULL,"Blocking on AMS\n"); 91e04113cfSBarry Smith ierr = PetscObjectSAWsGrantAccess(obj);CHKERRQ(ierr); 926c4a5ce2SBarry Smith ierr = PetscSleep(2.0);CHKERRQ(ierr); 93e04113cfSBarry Smith ierr = PetscObjectSAWsTakeAccess(obj);CHKERRQ(ierr); 94a332a263SBarry Smith } 95e04113cfSBarry Smith ierr = PetscInfo(NULL,"Out of SAWs block\n"); 96a332a263SBarry Smith obj->amsblock = PETSC_TRUE; 97e04113cfSBarry Smith ierr = PetscObjectSAWsGrantAccess(obj);CHKERRQ(ierr); 98b90c6cbeSBarry Smith PetscFunctionReturn(0); 99b90c6cbeSBarry Smith } 100b90c6cbeSBarry Smith 101b90c6cbeSBarry Smith #undef __FUNCT__ 102e04113cfSBarry Smith #define __FUNCT__ "PetscObjectSAWsSetBlock" 103b90c6cbeSBarry Smith /*@C 104e04113cfSBarry Smith PetscObjectSAWsSetBlock - Sets whether an object will block at PetscObjectSAWsBlock() 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 118e04113cfSBarry Smith .seealso: PetscObjectSetName(), PetscObjectSAWsViewOff(), PetscObjectSAWsBlock() 119b90c6cbeSBarry Smith 120b90c6cbeSBarry Smith @*/ 121e04113cfSBarry Smith PetscErrorCode PetscObjectSAWsSetBlock(PetscObject obj,PetscBool flg) 122b90c6cbeSBarry Smith { 123b90c6cbeSBarry Smith PetscFunctionBegin; 124b90c6cbeSBarry Smith PetscValidHeader(obj,1); 125b90c6cbeSBarry Smith obj->amspublishblock = flg; 126a332a263SBarry Smith obj->amsblock = flg; 127b90c6cbeSBarry Smith PetscFunctionReturn(0); 128b90c6cbeSBarry Smith } 129b90c6cbeSBarry Smith 130b90c6cbeSBarry Smith #undef __FUNCT__ 131e04113cfSBarry Smith #define __FUNCT__ "PetscObjectSAWsViewOff" 132e04113cfSBarry Smith PetscErrorCode PetscObjectSAWsViewOff(PetscObject obj) 13392e62aa6SBarry Smith { 1349a492a5cSBarry Smith char dir[1024]; 1359a492a5cSBarry Smith PetscErrorCode ierr; 1369a492a5cSBarry Smith 13792e62aa6SBarry Smith PetscFunctionBegin; 1389fb22e1aSBarry Smith if (obj->classid == PETSC_VIEWER_CLASSID) PetscFunctionReturn(0); 1399a492a5cSBarry Smith ierr = PetscSNPrintf(dir,1024,"/PETSc/Objects/%s",obj->name);CHKERRQ(ierr); 1409a492a5cSBarry Smith SAWs_Delete(dir); 14192e62aa6SBarry Smith PetscFunctionReturn(0); 14292e62aa6SBarry Smith } 14392e62aa6SBarry Smith 144