1 2 static char help[] = "Tests DMSwarm\n\n"; 3 4 #include <petscdm.h> 5 #include <petscdmda.h> 6 #include <petscdmswarm.h> 7 8 /* 9 Checks for variable blocksize 10 */ 11 PetscErrorCode ex2_1(void) 12 { 13 DM dms; 14 Vec x; 15 PetscMPIInt rank; 16 PetscInt p,bs,nlocal; 17 18 PetscFunctionBegin; 19 CHKERRMPI(MPI_Comm_rank(PETSC_COMM_WORLD,&rank)); 20 21 CHKERRQ(DMCreate(PETSC_COMM_WORLD,&dms)); 22 CHKERRQ(DMSetType(dms,DMSWARM)); 23 CHKERRQ(DMSwarmInitializeFieldRegister(dms)); 24 CHKERRQ(DMSwarmRegisterPetscDatatypeField(dms,"viscosity",1,PETSC_REAL)); 25 CHKERRQ(DMSwarmRegisterPetscDatatypeField(dms,"strain",3,PETSC_REAL)); 26 CHKERRQ(DMSwarmFinalizeFieldRegister(dms)); 27 CHKERRQ(DMSwarmSetLocalSizes(dms,5+rank,4)); 28 CHKERRQ(DMView(dms,PETSC_VIEWER_STDOUT_WORLD)); 29 CHKERRQ(DMSwarmGetLocalSize(dms,&nlocal)); 30 31 { 32 PetscReal *array; 33 CHKERRQ(DMSwarmGetField(dms,"viscosity",&bs,NULL,(void**)&array)); 34 for (p=0; p<nlocal; p++) { 35 array[p] = 11.1 + p*0.1 + rank*100.0; 36 } 37 CHKERRQ(DMSwarmRestoreField(dms,"viscosity",&bs,NULL,(void**)&array)); 38 } 39 40 { 41 PetscReal *array; 42 CHKERRQ(DMSwarmGetField(dms,"strain",&bs,NULL,(void**)&array)); 43 for (p=0; p<nlocal; p++) { 44 array[bs*p+0] = 2.0e-2 + p*0.001 + rank*1.0; 45 array[bs*p+1] = 2.0e-2 + p*0.002 + rank*1.0; 46 array[bs*p+2] = 2.0e-2 + p*0.003 + rank*1.0; 47 } 48 CHKERRQ(DMSwarmRestoreField(dms,"strain",&bs,NULL,(void**)&array)); 49 } 50 51 CHKERRQ(DMSwarmCreateGlobalVectorFromField(dms,"viscosity",&x)); 52 CHKERRQ(VecView(x,PETSC_VIEWER_STDOUT_WORLD)); 53 CHKERRQ(DMSwarmDestroyGlobalVectorFromField(dms,"viscosity",&x)); 54 55 CHKERRQ(DMSwarmCreateGlobalVectorFromField(dms,"strain",&x)); 56 CHKERRQ(VecView(x,PETSC_VIEWER_STDOUT_WORLD)); 57 CHKERRQ(DMSwarmDestroyGlobalVectorFromField(dms,"strain",&x)); 58 59 CHKERRQ(DMSwarmVectorDefineField(dms,"strain")); 60 CHKERRQ(DMCreateGlobalVector(dms,&x)); 61 CHKERRQ(VecView(x,PETSC_VIEWER_STDOUT_WORLD)); 62 CHKERRQ(VecDestroy(&x)); 63 CHKERRQ(DMDestroy(&dms)); 64 PetscFunctionReturn(0); 65 } 66 67 int main(int argc,char **argv) 68 { 69 PetscErrorCode ierr; 70 71 ierr = PetscInitialize(&argc,&argv,(char*)0,help);if (ierr) return ierr; 72 CHKERRQ(ex2_1()); 73 ierr = PetscFinalize(); 74 return ierr; 75 } 76 77 /*TEST 78 79 test: 80 requires: !complex double 81 nsize: 3 82 filter: grep -v atomic 83 filter_output: grep -v atomic 84 85 TEST*/ 86