1b3506946SBarry Smith 2afcb2eb5SJed Brown #include <petsc-private/petscimpl.h> /*I "petscsys.h" I*/ 3ec7429eaSBarry Smith #include <petscviewerams.h> 4ec7429eaSBarry Smith #include <petscsys.h> 5b3506946SBarry Smith 6b3506946SBarry Smith #undef __FUNCT__ 7ec7429eaSBarry Smith #define __FUNCT__ "PetscObjectAMSTakeAccess" 8ec7429eaSBarry Smith /*@C 9ec7429eaSBarry Smith PetscObjectAMSTakeAccess - Take access of the data fields that have been published to AMS 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 22f05ece33SBarry Smith .seealso: PetscObjectSetName(), PetscObjectAMSViewOff(), PetscObjectAMSGrantAccess() 23ec7429eaSBarry Smith 24ec7429eaSBarry Smith @*/ 25ec7429eaSBarry Smith PetscErrorCode PetscObjectAMSTakeAccess(PetscObject obj) 26ec7429eaSBarry Smith { 27ec7429eaSBarry Smith PetscFunctionBegin; 28ec7429eaSBarry Smith if (obj->amsmem != -1) { 29f05ece33SBarry Smith PetscStackCallAMS(AMS_Memory_take_access,(obj->amsmem)); 30ec7429eaSBarry Smith } 31ec7429eaSBarry Smith PetscFunctionReturn(0); 32ec7429eaSBarry Smith } 33ec7429eaSBarry Smith 34ec7429eaSBarry Smith #undef __FUNCT__ 35ec7429eaSBarry Smith #define __FUNCT__ "PetscObjectAMSGrantAccess" 36ec7429eaSBarry Smith /*@C 37ec7429eaSBarry Smith PetscObjectAMSGrantAccess - Grants access of the data fields that have been published to AMS 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 50f05ece33SBarry Smith .seealso: PetscObjectSetName(), PetscObjectAMSViewOff(), PetscObjectAMSTakeAccess() 51ec7429eaSBarry Smith 52ec7429eaSBarry Smith @*/ 53ec7429eaSBarry Smith PetscErrorCode PetscObjectAMSGrantAccess(PetscObject obj) 54ec7429eaSBarry Smith { 55ec7429eaSBarry Smith PetscFunctionBegin; 56ec7429eaSBarry Smith if (obj->amsmem != -1) { 57f05ece33SBarry Smith PetscStackCallAMS(AMS_Memory_grant_access,(obj->amsmem)); 58ec7429eaSBarry Smith } 59ec7429eaSBarry Smith PetscFunctionReturn(0); 60ec7429eaSBarry Smith } 61ec7429eaSBarry Smith 62ec7429eaSBarry Smith #undef __FUNCT__ 63b90c6cbeSBarry Smith #define __FUNCT__ "PetscObjectAMSBlock" 64b90c6cbeSBarry Smith /*@C 65b90c6cbeSBarry Smith PetscObjectAMSBlock - Blocks the object if PetscObjectAMSSetBlock() 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 79f05ece33SBarry Smith .seealso: PetscObjectSetName(), PetscObjectAMSViewOff(), PetscObjectAMSSetBlock() 80b90c6cbeSBarry Smith 81b90c6cbeSBarry Smith @*/ 82b90c6cbeSBarry Smith PetscErrorCode PetscObjectAMSBlock(PetscObject obj) 83b90c6cbeSBarry Smith { 84*a332a263SBarry Smith PetscErrorCode ierr; 85*a332a263SBarry Smith 86b90c6cbeSBarry Smith PetscFunctionBegin; 87b90c6cbeSBarry Smith PetscValidHeader(obj,1); 88b90c6cbeSBarry Smith 89b90c6cbeSBarry Smith if (!obj->amspublishblock) PetscFunctionReturn(0); 90*a332a263SBarry Smith ierr = PetscObjectAMSTakeAccess(obj);CHKERRQ(ierr); 91*a332a263SBarry Smith while (obj->amsblock) { 92*a332a263SBarry Smith ierr = PetscObjectAMSGrantAccess(obj);CHKERRQ(ierr); 93*a332a263SBarry Smith ierr = PetscSleep(2);CHKERRQ(ierr); 94*a332a263SBarry Smith ierr = PetscObjectAMSTakeAccess(obj);CHKERRQ(ierr); 95*a332a263SBarry Smith } 96*a332a263SBarry Smith obj->amsblock = PETSC_TRUE; 97*a332a263SBarry Smith ierr = PetscObjectAMSGrantAccess(obj);CHKERRQ(ierr); 98b90c6cbeSBarry Smith PetscFunctionReturn(0); 99b90c6cbeSBarry Smith } 100b90c6cbeSBarry Smith 101b90c6cbeSBarry Smith #undef __FUNCT__ 102b90c6cbeSBarry Smith #define __FUNCT__ "PetscObjectAMSSetBlock" 103b90c6cbeSBarry Smith /*@C 104b90c6cbeSBarry Smith PetscObjectAMSSetBlock - Sets whether an object will block at PetscObjectAMSBlock() 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 118f05ece33SBarry Smith .seealso: PetscObjectSetName(), PetscObjectAMSViewOff(), PetscObjectAMSBlock() 119b90c6cbeSBarry Smith 120b90c6cbeSBarry Smith @*/ 121b90c6cbeSBarry Smith PetscErrorCode PetscObjectAMSSetBlock(PetscObject obj,PetscBool flg) 122b90c6cbeSBarry Smith { 123b90c6cbeSBarry Smith PetscFunctionBegin; 124b90c6cbeSBarry Smith PetscValidHeader(obj,1); 125b90c6cbeSBarry Smith obj->amspublishblock = flg; 126*a332a263SBarry Smith obj->amsblock = flg; 127b90c6cbeSBarry Smith PetscFunctionReturn(0); 128b90c6cbeSBarry Smith } 129b90c6cbeSBarry Smith 130b90c6cbeSBarry Smith #undef __FUNCT__ 131f05ece33SBarry Smith #define __FUNCT__ "PetscObjectAMSViewOff" 132f05ece33SBarry Smith PetscErrorCode PetscObjectAMSViewOff(PetscObject obj) 13392e62aa6SBarry Smith { 13492e62aa6SBarry Smith PetscErrorCode ierr; 13592e62aa6SBarry Smith 13692e62aa6SBarry Smith PetscFunctionBegin; 1379fb22e1aSBarry Smith if (obj->classid == PETSC_VIEWER_CLASSID) PetscFunctionReturn(0); 138b90c6cbeSBarry Smith if (obj->amsmem == -1) PetscFunctionReturn(0); 139b90c6cbeSBarry Smith ierr = AMS_Memory_destroy(obj->amsmem);CHKERRQ(ierr); 140b90c6cbeSBarry Smith obj->amsmem = -1; 14192e62aa6SBarry Smith PetscFunctionReturn(0); 14292e62aa6SBarry Smith } 14392e62aa6SBarry Smith 144