1b3506946SBarry Smith 2afcb2eb5SJed Brown #include <petsc-private/petscimpl.h> /*I "petscsys.h" I*/ 3*e04113cfSBarry Smith #include <petscviewersaws.h> 4ec7429eaSBarry Smith #include <petscsys.h> 5b3506946SBarry Smith 6b3506946SBarry Smith #undef __FUNCT__ 7*e04113cfSBarry Smith #define __FUNCT__ "PetscObjectSAWsTakeAccess" 8ec7429eaSBarry Smith /*@C 9*e04113cfSBarry 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 22*e04113cfSBarry Smith .seealso: PetscObjectSetName(), PetscObjectSAWsViewOff(), PetscObjectSAWsGrantAccess() 23ec7429eaSBarry Smith 24ec7429eaSBarry Smith @*/ 25*e04113cfSBarry Smith PetscErrorCode PetscObjectSAWsTakeAccess(PetscObject obj) 26ec7429eaSBarry Smith { 27ec7429eaSBarry Smith PetscFunctionBegin; 28ec957eceSBarry Smith if (obj->amsmem) { 29*e04113cfSBarry Smith PetscStackCallSAWs(SAWS_Lock_Directory,(obj->amsmem)); 30ec7429eaSBarry Smith } 31ec7429eaSBarry Smith PetscFunctionReturn(0); 32ec7429eaSBarry Smith } 33ec7429eaSBarry Smith 34ec7429eaSBarry Smith #undef __FUNCT__ 35*e04113cfSBarry Smith #define __FUNCT__ "PetscObjectSAWsGrantAccess" 36ec7429eaSBarry Smith /*@C 37*e04113cfSBarry Smith PetscObjectSAWsGrantAccess - Grants access of the data fields that have been published to SAWs 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 50*e04113cfSBarry Smith .seealso: PetscObjectSetName(), PetscObjectSAWsViewOff(), PetscObjectSAWsTakeAccess() 51ec7429eaSBarry Smith 52ec7429eaSBarry Smith @*/ 53*e04113cfSBarry Smith PetscErrorCode PetscObjectSAWsGrantAccess(PetscObject obj) 54ec7429eaSBarry Smith { 55ec7429eaSBarry Smith PetscFunctionBegin; 56ec957eceSBarry Smith if (obj->amsmem) { 57*e04113cfSBarry Smith PetscStackCallSAWs(SAWS_Unlock_Directory,(obj->amsmem)); 58ec7429eaSBarry Smith } 59ec7429eaSBarry Smith PetscFunctionReturn(0); 60ec7429eaSBarry Smith } 61ec7429eaSBarry Smith 62ec7429eaSBarry Smith #undef __FUNCT__ 63*e04113cfSBarry Smith #define __FUNCT__ "PetscObjectSAWsBlock" 64b90c6cbeSBarry Smith /*@C 65*e04113cfSBarry Smith PetscObjectSAWsBlock - Blocks the object if PetscObjectSAWsSetBlock() 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 79*e04113cfSBarry Smith .seealso: PetscObjectSetName(), PetscObjectSAWsViewOff(), PetscObjectSAWsSetBlock() 80b90c6cbeSBarry Smith 81b90c6cbeSBarry Smith @*/ 82*e04113cfSBarry Smith PetscErrorCode PetscObjectSAWsBlock(PetscObject obj) 83b90c6cbeSBarry Smith { 84a332a263SBarry Smith PetscErrorCode ierr; 85a332a263SBarry Smith 86b90c6cbeSBarry Smith PetscFunctionBegin; 87b90c6cbeSBarry Smith PetscValidHeader(obj,1); 88b90c6cbeSBarry Smith 8996f8ada6SBarry Smith if (!obj->amspublishblock || !obj->amsmem) PetscFunctionReturn(0); 90*e04113cfSBarry Smith ierr = PetscObjectSAWsTakeAccess(obj);CHKERRQ(ierr); 91a332a263SBarry Smith while (obj->amsblock) { 926c4a5ce2SBarry Smith ierr = PetscInfo(NULL,"Blocking on AMS\n"); 93*e04113cfSBarry Smith ierr = PetscObjectSAWsGrantAccess(obj);CHKERRQ(ierr); 946c4a5ce2SBarry Smith ierr = PetscSleep(2.0);CHKERRQ(ierr); 95*e04113cfSBarry Smith ierr = PetscObjectSAWsTakeAccess(obj);CHKERRQ(ierr); 96a332a263SBarry Smith } 97*e04113cfSBarry Smith ierr = PetscInfo(NULL,"Out of SAWs block\n"); 98a332a263SBarry Smith obj->amsblock = PETSC_TRUE; 99*e04113cfSBarry Smith ierr = PetscObjectSAWsGrantAccess(obj);CHKERRQ(ierr); 100b90c6cbeSBarry Smith PetscFunctionReturn(0); 101b90c6cbeSBarry Smith } 102b90c6cbeSBarry Smith 103b90c6cbeSBarry Smith #undef __FUNCT__ 104*e04113cfSBarry Smith #define __FUNCT__ "PetscObjectSAWsSetBlock" 105b90c6cbeSBarry Smith /*@C 106*e04113cfSBarry Smith PetscObjectSAWsSetBlock - Sets whether an object will block at PetscObjectSAWsBlock() 107b90c6cbeSBarry Smith 108b90c6cbeSBarry Smith Collective on PetscObject 109b90c6cbeSBarry Smith 110b90c6cbeSBarry Smith Input Parameters: 111b90c6cbeSBarry Smith + obj - the Petsc variable 112b90c6cbeSBarry Smith Thus must be cast with a (PetscObject), for example, 113b90c6cbeSBarry Smith PetscObjectSetName((PetscObject)mat,name); 114b90c6cbeSBarry Smith - flg - whether it should block 115b90c6cbeSBarry Smith 116b90c6cbeSBarry Smith Level: advanced 117b90c6cbeSBarry Smith 118b90c6cbeSBarry Smith Concepts: publishing object 119b90c6cbeSBarry Smith 120*e04113cfSBarry Smith .seealso: PetscObjectSetName(), PetscObjectSAWsViewOff(), PetscObjectSAWsBlock() 121b90c6cbeSBarry Smith 122b90c6cbeSBarry Smith @*/ 123*e04113cfSBarry Smith PetscErrorCode PetscObjectSAWsSetBlock(PetscObject obj,PetscBool flg) 124b90c6cbeSBarry Smith { 125b90c6cbeSBarry Smith PetscFunctionBegin; 126b90c6cbeSBarry Smith PetscValidHeader(obj,1); 127b90c6cbeSBarry Smith obj->amspublishblock = flg; 128a332a263SBarry Smith obj->amsblock = flg; 129b90c6cbeSBarry Smith PetscFunctionReturn(0); 130b90c6cbeSBarry Smith } 131b90c6cbeSBarry Smith 132b90c6cbeSBarry Smith #undef __FUNCT__ 133*e04113cfSBarry Smith #define __FUNCT__ "PetscObjectSAWsViewOff" 134*e04113cfSBarry Smith PetscErrorCode PetscObjectSAWsViewOff(PetscObject obj) 13592e62aa6SBarry Smith { 13692e62aa6SBarry Smith PetscErrorCode ierr; 13792e62aa6SBarry Smith 13892e62aa6SBarry Smith PetscFunctionBegin; 1399fb22e1aSBarry Smith if (obj->classid == PETSC_VIEWER_CLASSID) PetscFunctionReturn(0); 140ec957eceSBarry Smith if (!obj->amsmem) PetscFunctionReturn(0); 141*e04113cfSBarry Smith ierr = SAWS_Directory_Destroy(&obj->amsmem);CHKERRQ(ierr); 14292e62aa6SBarry Smith PetscFunctionReturn(0); 14392e62aa6SBarry Smith } 14492e62aa6SBarry Smith 145