1b3506946SBarry Smith 2afcb2eb5SJed Brown #include <petsc-private/petscimpl.h> /*I "petscsys.h" I*/ 3665c2dedSJed Brown #include <petscviewer.h> 4b3506946SBarry Smith 5b3506946SBarry Smith /* 6b3506946SBarry Smith If true then every PETSc object will be published with the AMS 7b3506946SBarry Smith */ 8ace3abfcSBarry Smith PetscBool PetscAMSPublishAll; 9b3506946SBarry Smith 10b3506946SBarry Smith #undef __FUNCT__ 119fb22e1aSBarry Smith #define __FUNCT__ "PetscObjectAMSPublish" 12c457296dSBarry Smith /*@C 139fb22e1aSBarry Smith PetscObjectAMSPublish - Publish an object 14c457296dSBarry Smith 15c457296dSBarry Smith Collective on PetscObject 16c457296dSBarry Smith 17c457296dSBarry Smith Input Parameters: 18c457296dSBarry Smith . obj - the Petsc variable 19c457296dSBarry Smith Thus must be cast with a (PetscObject), for example, 20c457296dSBarry Smith PetscObjectSetName((PetscObject)mat,name); 21c457296dSBarry Smith 229fb22e1aSBarry Smith Notes: PetscViewer objects are not published 239fb22e1aSBarry Smith 24c457296dSBarry Smith Level: advanced 25c457296dSBarry Smith 26c457296dSBarry Smith Concepts: publishing object 27c457296dSBarry Smith 28*b90c6cbeSBarry Smith .seealso: PetscObjectSetName(), PetscObjectAMSUnPublish() 29c457296dSBarry Smith 30c457296dSBarry Smith @*/ 317087cfbeSBarry Smith PetscErrorCode PetscObjectAMSPublish(PetscObject obj) 32b3506946SBarry Smith { 33c457296dSBarry Smith PetscErrorCode ierr; 34b3506946SBarry Smith AMS_Memory amem; 35b3506946SBarry Smith AMS_Comm acomm; 36b3506946SBarry Smith 37b3506946SBarry Smith PetscFunctionBegin; 38c457296dSBarry Smith PetscValidHeader(obj,1); 399fb22e1aSBarry Smith if (obj->classid == PETSC_VIEWER_CLASSID) PetscFunctionReturn(0); 40*b90c6cbeSBarry Smith if (obj->amsmem != -1) PetscFunctionReturn(0); 41b3506946SBarry Smith ierr = PetscObjectName(obj);CHKERRQ(ierr); 42b3506946SBarry Smith 431999dac5SBarry Smith ierr = PetscViewerAMSGetAMSComm(PETSC_VIEWER_AMS_(PETSC_COMM_WORLD),&acomm);CHKERRQ(ierr); 441999dac5SBarry Smith /* Really want to attach to correct communicator but then browser needs to access multiple communicators 451999dac5SBarry Smith ierr = PetscViewerAMSGetAMSComm(PETSC_VIEWER_AMS_(obj->comm),&acomm);CHKERRQ(ierr); */ 461999dac5SBarry Smith 47b3506946SBarry Smith ierr = AMS_Memory_create(acomm,obj->name,&amem);CHKERRQ(ierr); 48*b90c6cbeSBarry Smith obj->amsmem = (int)amem; 49b3506946SBarry Smith 50b3506946SBarry Smith ierr = AMS_Memory_take_access(amem);CHKERRQ(ierr); 51b3506946SBarry Smith ierr = AMS_Memory_add_field(amem,"Class",&obj->class_name,1,AMS_STRING,AMS_READ,AMS_COMMON,AMS_REDUCT_UNDEF);CHKERRQ(ierr); 52b3506946SBarry Smith ierr = AMS_Memory_add_field(amem,"Type",&obj->type_name,1,AMS_STRING,AMS_READ,AMS_COMMON,AMS_REDUCT_UNDEF);CHKERRQ(ierr); 53b3506946SBarry Smith ierr = AMS_Memory_add_field(amem,"Id",&obj->id,1,AMS_INT,AMS_READ,AMS_COMMON,AMS_REDUCT_UNDEF);CHKERRQ(ierr); 54b3506946SBarry Smith ierr = AMS_Memory_add_field(amem,"ParentId",&obj->parentid,1,AMS_INT,AMS_READ,AMS_COMMON,AMS_REDUCT_UNDEF);CHKERRQ(ierr); 55b3506946SBarry Smith ierr = AMS_Memory_add_field(amem,"Name",&obj->name,1,AMS_STRING,AMS_READ,AMS_COMMON,AMS_REDUCT_UNDEF);CHKERRQ(ierr); 56*b90c6cbeSBarry Smith ierr = AMS_Memory_add_field(amem,"Block",&obj->amspublishblock,1,AMS_BOOLEAN,AMS_WRITE,AMS_COMMON,AMS_REDUCT_UNDEF);CHKERRQ(ierr); 57c457296dSBarry Smith if (obj->bops->publish) { 58c457296dSBarry Smith ierr = (*obj->bops->publish)(obj);CHKERRQ(ierr); 59c457296dSBarry Smith } 6010212d9eSBarry Smith ierr = AMS_Memory_publish(amem);CHKERRQ(ierr); 6110212d9eSBarry Smith ierr = AMS_Memory_grant_access(amem);CHKERRQ(ierr); 62b3506946SBarry Smith PetscFunctionReturn(0); 63b3506946SBarry Smith } 64b3506946SBarry Smith 6592e62aa6SBarry Smith #undef __FUNCT__ 66*b90c6cbeSBarry Smith #define __FUNCT__ "PetscObjectAMSBlock" 67*b90c6cbeSBarry Smith /*@C 68*b90c6cbeSBarry Smith PetscObjectAMSBlock - Blocks the object if PetscObjectAMSSetBlock() has been called 69*b90c6cbeSBarry Smith 70*b90c6cbeSBarry Smith Collective on PetscObject 71*b90c6cbeSBarry Smith 72*b90c6cbeSBarry Smith Input Parameters: 73*b90c6cbeSBarry Smith . obj - the Petsc variable 74*b90c6cbeSBarry Smith Thus must be cast with a (PetscObject), for example, 75*b90c6cbeSBarry Smith PetscObjectSetName((PetscObject)mat,name); 76*b90c6cbeSBarry Smith 77*b90c6cbeSBarry Smith 78*b90c6cbeSBarry Smith Level: advanced 79*b90c6cbeSBarry Smith 80*b90c6cbeSBarry Smith Concepts: publishing object 81*b90c6cbeSBarry Smith 82*b90c6cbeSBarry Smith .seealso: PetscObjectSetName(), PetscObjectAMSUnPublish(), PetscObjectAMSSetBlock() 83*b90c6cbeSBarry Smith 84*b90c6cbeSBarry Smith @*/ 85*b90c6cbeSBarry Smith PetscErrorCode PetscObjectAMSBlock(PetscObject obj) 86*b90c6cbeSBarry Smith { 87*b90c6cbeSBarry Smith PetscFunctionBegin; 88*b90c6cbeSBarry Smith PetscValidHeader(obj,1); 89*b90c6cbeSBarry Smith 90*b90c6cbeSBarry Smith if (!obj->amspublishblock) PetscFunctionReturn(0); 91*b90c6cbeSBarry Smith /* Eventually this will be fixed to check if the AMS client has changed the lock */ 92*b90c6cbeSBarry Smith while (1); 93*b90c6cbeSBarry Smith PetscFunctionReturn(0); 94*b90c6cbeSBarry Smith } 95*b90c6cbeSBarry Smith 96*b90c6cbeSBarry Smith #undef __FUNCT__ 97*b90c6cbeSBarry Smith #define __FUNCT__ "PetscObjectAMSSetBlock" 98*b90c6cbeSBarry Smith /*@C 99*b90c6cbeSBarry Smith PetscObjectAMSSetBlock - Sets whether an object will block at PetscObjectAMSBlock() 100*b90c6cbeSBarry Smith 101*b90c6cbeSBarry Smith Collective on PetscObject 102*b90c6cbeSBarry Smith 103*b90c6cbeSBarry Smith Input Parameters: 104*b90c6cbeSBarry Smith + obj - the Petsc variable 105*b90c6cbeSBarry Smith Thus must be cast with a (PetscObject), for example, 106*b90c6cbeSBarry Smith PetscObjectSetName((PetscObject)mat,name); 107*b90c6cbeSBarry Smith - flg - whether it should block 108*b90c6cbeSBarry Smith 109*b90c6cbeSBarry Smith Level: advanced 110*b90c6cbeSBarry Smith 111*b90c6cbeSBarry Smith Concepts: publishing object 112*b90c6cbeSBarry Smith 113*b90c6cbeSBarry Smith .seealso: PetscObjectSetName(), PetscObjectAMSUnPublish(), PetscObjectAMSBlock() 114*b90c6cbeSBarry Smith 115*b90c6cbeSBarry Smith @*/ 116*b90c6cbeSBarry Smith PetscErrorCode PetscObjectAMSSetBlock(PetscObject obj,PetscBool flg) 117*b90c6cbeSBarry Smith { 118*b90c6cbeSBarry Smith PetscFunctionBegin; 119*b90c6cbeSBarry Smith PetscValidHeader(obj,1); 120*b90c6cbeSBarry Smith obj->amspublishblock = flg; 121*b90c6cbeSBarry Smith PetscFunctionReturn(0); 122*b90c6cbeSBarry Smith } 123*b90c6cbeSBarry Smith 124*b90c6cbeSBarry Smith #undef __FUNCT__ 125*b90c6cbeSBarry Smith #define __FUNCT__ "PetscObjectAMSUnPublish" 126*b90c6cbeSBarry Smith PetscErrorCode PetscObjectAMSUnPublish(PetscObject obj) 12792e62aa6SBarry Smith { 12892e62aa6SBarry Smith AMS_Comm acomm; 12992e62aa6SBarry Smith PetscErrorCode ierr; 13092e62aa6SBarry Smith 13192e62aa6SBarry Smith PetscFunctionBegin; 1329fb22e1aSBarry Smith if (obj->classid == PETSC_VIEWER_CLASSID) PetscFunctionReturn(0); 133*b90c6cbeSBarry Smith if (obj->amsmem == -1) PetscFunctionReturn(0); 13492e62aa6SBarry Smith ierr = PetscViewerAMSGetAMSComm(PETSC_VIEWER_AMS_(obj->comm),&acomm);CHKERRQ(ierr); 135*b90c6cbeSBarry Smith ierr = AMS_Memory_destroy(obj->amsmem);CHKERRQ(ierr); 136*b90c6cbeSBarry Smith obj->amsmem = -1; 13792e62aa6SBarry Smith PetscFunctionReturn(0); 13892e62aa6SBarry Smith } 13992e62aa6SBarry Smith 140