1b3506946SBarry Smith 2afcb2eb5SJed Brown #include <petsc-private/petscimpl.h> /*I "petscsys.h" I*/ 3*ec7429eaSBarry Smith #include <petscviewerams.h> 4*ec7429eaSBarry Smith #include <petscsys.h> 5b3506946SBarry Smith 6b3506946SBarry Smith /* 7b3506946SBarry Smith If true then every PETSc object will be published with the AMS 8b3506946SBarry Smith */ 9ace3abfcSBarry Smith PetscBool PetscAMSPublishAll; 10b3506946SBarry Smith 11b3506946SBarry Smith #undef __FUNCT__ 12*ec7429eaSBarry Smith #define __FUNCT__ "PetscObjectAMSTakeAccess" 13*ec7429eaSBarry Smith /*@C 14*ec7429eaSBarry Smith PetscObjectAMSTakeAccess - Take access of the data fields that have been published to AMS so they may be changed locally 15*ec7429eaSBarry Smith 16*ec7429eaSBarry Smith Collective on PetscObject 17*ec7429eaSBarry Smith 18*ec7429eaSBarry Smith Input Parameters: 19*ec7429eaSBarry Smith . obj - the Petsc variable 20*ec7429eaSBarry Smith Thus must be cast with a (PetscObject), for example, 21*ec7429eaSBarry Smith PetscObjectSetName((PetscObject)mat,name); 22*ec7429eaSBarry Smith 23*ec7429eaSBarry Smith Level: advanced 24*ec7429eaSBarry Smith 25*ec7429eaSBarry Smith Concepts: publishing object 26*ec7429eaSBarry Smith 27*ec7429eaSBarry Smith .seealso: PetscObjectSetName(), PetscObjectAMSUnPublish(), PetscObjectAMSGrantAccess() 28*ec7429eaSBarry Smith 29*ec7429eaSBarry Smith @*/ 30*ec7429eaSBarry Smith PetscErrorCode PetscObjectAMSTakeAccess(PetscObject obj) 31*ec7429eaSBarry Smith { 32*ec7429eaSBarry Smith PetscErrorCode ierr; 33*ec7429eaSBarry Smith 34*ec7429eaSBarry Smith PetscFunctionBegin; 35*ec7429eaSBarry Smith if (obj->amsmem != -1) { 36*ec7429eaSBarry Smith ierr = AMS_Memory_take_access(obj->amsmem);CHKERRQ(ierr); 37*ec7429eaSBarry Smith } 38*ec7429eaSBarry Smith PetscFunctionReturn(0); 39*ec7429eaSBarry Smith } 40*ec7429eaSBarry Smith 41*ec7429eaSBarry Smith #undef __FUNCT__ 42*ec7429eaSBarry Smith #define __FUNCT__ "PetscObjectAMSGrantAccess" 43*ec7429eaSBarry Smith /*@C 44*ec7429eaSBarry Smith PetscObjectAMSGrantAccess - Grants access of the data fields that have been published to AMS to the memory snooper to change 45*ec7429eaSBarry Smith 46*ec7429eaSBarry Smith Collective on PetscObject 47*ec7429eaSBarry Smith 48*ec7429eaSBarry Smith Input Parameters: 49*ec7429eaSBarry Smith . obj - the Petsc variable 50*ec7429eaSBarry Smith Thus must be cast with a (PetscObject), for example, 51*ec7429eaSBarry Smith PetscObjectSetName((PetscObject)mat,name); 52*ec7429eaSBarry Smith 53*ec7429eaSBarry Smith Level: advanced 54*ec7429eaSBarry Smith 55*ec7429eaSBarry Smith Concepts: publishing object 56*ec7429eaSBarry Smith 57*ec7429eaSBarry Smith .seealso: PetscObjectSetName(), PetscObjectAMSUnPublish(), PetscObjectAMSTakeAccess() 58*ec7429eaSBarry Smith 59*ec7429eaSBarry Smith @*/ 60*ec7429eaSBarry Smith PetscErrorCode PetscObjectAMSGrantAccess(PetscObject obj) 61*ec7429eaSBarry Smith { 62*ec7429eaSBarry Smith PetscErrorCode ierr; 63*ec7429eaSBarry Smith 64*ec7429eaSBarry Smith PetscFunctionBegin; 65*ec7429eaSBarry Smith if (obj->amsmem != -1) { 66*ec7429eaSBarry Smith ierr = AMS_Memory_grant_access(obj->amsmem);CHKERRQ(ierr); 67*ec7429eaSBarry Smith } 68*ec7429eaSBarry Smith PetscFunctionReturn(0); 69*ec7429eaSBarry Smith } 70*ec7429eaSBarry Smith 71*ec7429eaSBarry Smith #undef __FUNCT__ 729fb22e1aSBarry Smith #define __FUNCT__ "PetscObjectAMSPublish" 73c457296dSBarry Smith /*@C 749fb22e1aSBarry Smith PetscObjectAMSPublish - Publish an object 75c457296dSBarry Smith 76c457296dSBarry Smith Collective on PetscObject 77c457296dSBarry Smith 78c457296dSBarry Smith Input Parameters: 79c457296dSBarry Smith . obj - the Petsc variable 80c457296dSBarry Smith Thus must be cast with a (PetscObject), for example, 81c457296dSBarry Smith PetscObjectSetName((PetscObject)mat,name); 82c457296dSBarry Smith 839fb22e1aSBarry Smith Notes: PetscViewer objects are not published 849fb22e1aSBarry Smith 85c457296dSBarry Smith Level: advanced 86c457296dSBarry Smith 87c457296dSBarry Smith Concepts: publishing object 88c457296dSBarry Smith 89b90c6cbeSBarry Smith .seealso: PetscObjectSetName(), PetscObjectAMSUnPublish() 90c457296dSBarry Smith 91c457296dSBarry Smith @*/ 927087cfbeSBarry Smith PetscErrorCode PetscObjectAMSPublish(PetscObject obj) 93b3506946SBarry Smith { 94c457296dSBarry Smith PetscErrorCode ierr; 95b3506946SBarry Smith AMS_Memory amem; 96b3506946SBarry Smith AMS_Comm acomm; 97b3506946SBarry Smith 98b3506946SBarry Smith PetscFunctionBegin; 99c457296dSBarry Smith PetscValidHeader(obj,1); 1009fb22e1aSBarry Smith if (obj->classid == PETSC_VIEWER_CLASSID) PetscFunctionReturn(0); 101b90c6cbeSBarry Smith if (obj->amsmem != -1) PetscFunctionReturn(0); 102b3506946SBarry Smith ierr = PetscObjectName(obj);CHKERRQ(ierr); 103b3506946SBarry Smith 1041999dac5SBarry Smith ierr = PetscViewerAMSGetAMSComm(PETSC_VIEWER_AMS_(PETSC_COMM_WORLD),&acomm);CHKERRQ(ierr); 1051999dac5SBarry Smith /* Really want to attach to correct communicator but then browser needs to access multiple communicators 1061999dac5SBarry Smith ierr = PetscViewerAMSGetAMSComm(PETSC_VIEWER_AMS_(obj->comm),&acomm);CHKERRQ(ierr); */ 1071999dac5SBarry Smith 108b3506946SBarry Smith ierr = AMS_Memory_create(acomm,obj->name,&amem);CHKERRQ(ierr); 109b90c6cbeSBarry Smith obj->amsmem = (int)amem; 110b3506946SBarry Smith 111b3506946SBarry Smith ierr = AMS_Memory_take_access(amem);CHKERRQ(ierr); 112b3506946SBarry Smith ierr = AMS_Memory_add_field(amem,"Class",&obj->class_name,1,AMS_STRING,AMS_READ,AMS_COMMON,AMS_REDUCT_UNDEF);CHKERRQ(ierr); 113b3506946SBarry Smith ierr = AMS_Memory_add_field(amem,"Type",&obj->type_name,1,AMS_STRING,AMS_READ,AMS_COMMON,AMS_REDUCT_UNDEF);CHKERRQ(ierr); 114b3506946SBarry Smith ierr = AMS_Memory_add_field(amem,"Id",&obj->id,1,AMS_INT,AMS_READ,AMS_COMMON,AMS_REDUCT_UNDEF);CHKERRQ(ierr); 115b3506946SBarry Smith ierr = AMS_Memory_add_field(amem,"ParentId",&obj->parentid,1,AMS_INT,AMS_READ,AMS_COMMON,AMS_REDUCT_UNDEF);CHKERRQ(ierr); 116b3506946SBarry Smith ierr = AMS_Memory_add_field(amem,"Name",&obj->name,1,AMS_STRING,AMS_READ,AMS_COMMON,AMS_REDUCT_UNDEF);CHKERRQ(ierr); 117b90c6cbeSBarry Smith ierr = AMS_Memory_add_field(amem,"Block",&obj->amspublishblock,1,AMS_BOOLEAN,AMS_WRITE,AMS_COMMON,AMS_REDUCT_UNDEF);CHKERRQ(ierr); 118c457296dSBarry Smith if (obj->bops->publish) { 119c457296dSBarry Smith ierr = (*obj->bops->publish)(obj);CHKERRQ(ierr); 120c457296dSBarry Smith } 12110212d9eSBarry Smith ierr = AMS_Memory_publish(amem);CHKERRQ(ierr); 12210212d9eSBarry Smith ierr = AMS_Memory_grant_access(amem);CHKERRQ(ierr); 123b3506946SBarry Smith PetscFunctionReturn(0); 124b3506946SBarry Smith } 125b3506946SBarry Smith 12692e62aa6SBarry Smith #undef __FUNCT__ 127b90c6cbeSBarry Smith #define __FUNCT__ "PetscObjectAMSBlock" 128b90c6cbeSBarry Smith /*@C 129b90c6cbeSBarry Smith PetscObjectAMSBlock - Blocks the object if PetscObjectAMSSetBlock() has been called 130b90c6cbeSBarry Smith 131b90c6cbeSBarry Smith Collective on PetscObject 132b90c6cbeSBarry Smith 133b90c6cbeSBarry Smith Input Parameters: 134b90c6cbeSBarry Smith . obj - the Petsc variable 135b90c6cbeSBarry Smith Thus must be cast with a (PetscObject), for example, 136b90c6cbeSBarry Smith PetscObjectSetName((PetscObject)mat,name); 137b90c6cbeSBarry Smith 138b90c6cbeSBarry Smith 139b90c6cbeSBarry Smith Level: advanced 140b90c6cbeSBarry Smith 141b90c6cbeSBarry Smith Concepts: publishing object 142b90c6cbeSBarry Smith 143b90c6cbeSBarry Smith .seealso: PetscObjectSetName(), PetscObjectAMSUnPublish(), PetscObjectAMSSetBlock() 144b90c6cbeSBarry Smith 145b90c6cbeSBarry Smith @*/ 146b90c6cbeSBarry Smith PetscErrorCode PetscObjectAMSBlock(PetscObject obj) 147b90c6cbeSBarry Smith { 148b90c6cbeSBarry Smith PetscFunctionBegin; 149b90c6cbeSBarry Smith PetscValidHeader(obj,1); 150b90c6cbeSBarry Smith 151b90c6cbeSBarry Smith if (!obj->amspublishblock) PetscFunctionReturn(0); 152b90c6cbeSBarry Smith /* Eventually this will be fixed to check if the AMS client has changed the lock */ 153b90c6cbeSBarry Smith while (1); 154b90c6cbeSBarry Smith PetscFunctionReturn(0); 155b90c6cbeSBarry Smith } 156b90c6cbeSBarry Smith 157b90c6cbeSBarry Smith #undef __FUNCT__ 158b90c6cbeSBarry Smith #define __FUNCT__ "PetscObjectAMSSetBlock" 159b90c6cbeSBarry Smith /*@C 160b90c6cbeSBarry Smith PetscObjectAMSSetBlock - Sets whether an object will block at PetscObjectAMSBlock() 161b90c6cbeSBarry Smith 162b90c6cbeSBarry Smith Collective on PetscObject 163b90c6cbeSBarry Smith 164b90c6cbeSBarry Smith Input Parameters: 165b90c6cbeSBarry Smith + obj - the Petsc variable 166b90c6cbeSBarry Smith Thus must be cast with a (PetscObject), for example, 167b90c6cbeSBarry Smith PetscObjectSetName((PetscObject)mat,name); 168b90c6cbeSBarry Smith - flg - whether it should block 169b90c6cbeSBarry Smith 170b90c6cbeSBarry Smith Level: advanced 171b90c6cbeSBarry Smith 172b90c6cbeSBarry Smith Concepts: publishing object 173b90c6cbeSBarry Smith 174b90c6cbeSBarry Smith .seealso: PetscObjectSetName(), PetscObjectAMSUnPublish(), PetscObjectAMSBlock() 175b90c6cbeSBarry Smith 176b90c6cbeSBarry Smith @*/ 177b90c6cbeSBarry Smith PetscErrorCode PetscObjectAMSSetBlock(PetscObject obj,PetscBool flg) 178b90c6cbeSBarry Smith { 179b90c6cbeSBarry Smith PetscFunctionBegin; 180b90c6cbeSBarry Smith PetscValidHeader(obj,1); 181b90c6cbeSBarry Smith obj->amspublishblock = flg; 182b90c6cbeSBarry Smith PetscFunctionReturn(0); 183b90c6cbeSBarry Smith } 184b90c6cbeSBarry Smith 185b90c6cbeSBarry Smith #undef __FUNCT__ 186b90c6cbeSBarry Smith #define __FUNCT__ "PetscObjectAMSUnPublish" 187b90c6cbeSBarry Smith PetscErrorCode PetscObjectAMSUnPublish(PetscObject obj) 18892e62aa6SBarry Smith { 18992e62aa6SBarry Smith PetscErrorCode ierr; 19092e62aa6SBarry Smith 19192e62aa6SBarry Smith PetscFunctionBegin; 1929fb22e1aSBarry Smith if (obj->classid == PETSC_VIEWER_CLASSID) PetscFunctionReturn(0); 193b90c6cbeSBarry Smith if (obj->amsmem == -1) PetscFunctionReturn(0); 194*ec7429eaSBarry Smith if (obj->bops->unpublish) { 195*ec7429eaSBarry Smith ierr = (*obj->bops->unpublish)(obj);CHKERRQ(ierr); 196*ec7429eaSBarry Smith } else { 197b90c6cbeSBarry Smith ierr = AMS_Memory_destroy(obj->amsmem);CHKERRQ(ierr); 198b90c6cbeSBarry Smith obj->amsmem = -1; 199*ec7429eaSBarry Smith } 20092e62aa6SBarry Smith PetscFunctionReturn(0); 20192e62aa6SBarry Smith } 20292e62aa6SBarry Smith 203