/* Simple example to show how PETSc programs can be run from MATLAB. See ex12.m. */ static char help[] = "Solves the one dimensional heat equation.\n\n"; #include #include int main(int argc,char **argv) { PetscMPIInt rank,size; PetscInt M = 14,time_steps = 20,w=1,s=1,localsize,j,i,mybase,myend,globalsize; DM da; Vec global,local; PetscScalar *globalptr,*localptr; PetscReal h,k; PetscCall(PetscInitialize(&argc,&argv,(char*)0,help)); PetscCall(PetscOptionsGetInt(NULL,NULL,"-M",&M,NULL)); PetscCall(PetscOptionsGetInt(NULL,NULL,"-time",&time_steps,NULL)); /* Set up the array */ PetscCall(DMDACreate1d(PETSC_COMM_WORLD,DM_BOUNDARY_NONE,M,w,s,NULL,&da)); PetscCall(DMSetFromOptions(da)); PetscCall(DMSetUp(da)); PetscCall(DMCreateGlobalVector(da,&global)); PetscCallMPI(MPI_Comm_rank(PETSC_COMM_WORLD,&rank)); PetscCallMPI(MPI_Comm_size(PETSC_COMM_WORLD,&size)); /* Make copy of local array for doing updates */ PetscCall(DMCreateLocalVector(da,&local)); /* determine starting point of each processor */ PetscCall(VecGetOwnershipRange(global,&mybase,&myend)); /* Initialize the Array */ PetscCall(VecGetLocalSize (global,&globalsize)); PetscCall(VecGetArray (global,&globalptr)); for (i=0; i