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 PetscCallMPI(MPI_Comm_rank(PETSC_COMM_WORLD,&rank)); 20 21 PetscCall(DMCreate(PETSC_COMM_WORLD,&dms)); 22 PetscCall(DMSetType(dms,DMSWARM)); 23 PetscCall(PetscObjectSetName((PetscObject) dms, "Particles")); 24 PetscCall(DMSwarmInitializeFieldRegister(dms)); 25 PetscCall(DMSwarmRegisterPetscDatatypeField(dms,"viscosity",1,PETSC_REAL)); 26 PetscCall(DMSwarmRegisterPetscDatatypeField(dms,"strain",3,PETSC_REAL)); 27 PetscCall(DMSwarmFinalizeFieldRegister(dms)); 28 PetscCall(DMSwarmSetLocalSizes(dms,5+rank,4)); 29 PetscCall(DMView(dms,PETSC_VIEWER_STDOUT_WORLD)); 30 PetscCall(DMSwarmGetLocalSize(dms,&nlocal)); 31 32 { 33 PetscReal *array; 34 PetscCall(DMSwarmGetField(dms,"viscosity",&bs,NULL,(void**)&array)); 35 for (p=0; p<nlocal; p++) { 36 array[p] = 11.1 + p*0.1 + rank*100.0; 37 } 38 PetscCall(DMSwarmRestoreField(dms,"viscosity",&bs,NULL,(void**)&array)); 39 } 40 41 { 42 PetscReal *array; 43 PetscCall(DMSwarmGetField(dms,"strain",&bs,NULL,(void**)&array)); 44 for (p=0; p<nlocal; p++) { 45 array[bs*p+0] = 2.0e-2 + p*0.001 + rank*1.0; 46 array[bs*p+1] = 2.0e-2 + p*0.002 + rank*1.0; 47 array[bs*p+2] = 2.0e-2 + p*0.003 + rank*1.0; 48 } 49 PetscCall(DMSwarmRestoreField(dms,"strain",&bs,NULL,(void**)&array)); 50 } 51 52 PetscCall(DMSwarmCreateGlobalVectorFromField(dms,"viscosity",&x)); 53 PetscCall(VecView(x,PETSC_VIEWER_STDOUT_WORLD)); 54 PetscCall(DMSwarmDestroyGlobalVectorFromField(dms,"viscosity",&x)); 55 56 PetscCall(DMSwarmCreateGlobalVectorFromField(dms,"strain",&x)); 57 PetscCall(VecView(x,PETSC_VIEWER_STDOUT_WORLD)); 58 PetscCall(DMSwarmDestroyGlobalVectorFromField(dms,"strain",&x)); 59 60 PetscCall(DMSwarmVectorDefineField(dms,"strain")); 61 PetscCall(DMCreateGlobalVector(dms,&x)); 62 PetscCall(VecView(x,PETSC_VIEWER_STDOUT_WORLD)); 63 PetscCall(VecDestroy(&x)); 64 PetscCall(DMDestroy(&dms)); 65 PetscFunctionReturn(0); 66 } 67 68 int main(int argc,char **argv) 69 { 70 71 PetscCall(PetscInitialize(&argc,&argv,(char*)0,help)); 72 PetscCall(ex2_1()); 73 PetscCall(PetscFinalize()); 74 return 0; 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