How would that work? I took Jed's advice, and set it up so that I have access via:
realization_array[ realization_dof * i + 1 +j] = jth point of ith realization and then I further used a pointer: PetscScalar *x; x = & realization_array[ realization_dof * i + 1]; so that I have "clean" access to the elements of each realization through x[j]. -gideon On Dec 29, 2013, at 2:33 PM, Barry Smith <[email protected]> wrote: > > DMDAVecGetArrayDOF() might serve your needs. You would access with > realization_array[i][j] for the ith grid point and j th realization > > Barry > > > > On Dec 28, 2013, at 7:44 PM, Gideon Simpson <[email protected]> wrote: > >> I'm trying to use 1D DMDA's to manage distributed monte carlo computations, >> and I've got the following problem. If I know, in advance, how many >> floating points are needed for each realization, everything is fine. But, >> if I want to be able to set this at run time, I can't get it to work. What >> I have is: >> >> typedef struct { >> PetscScalar id; >> PetscScalar *x; >> } Realization; >> >> then, in the main part of the code: >> >> Realization *realization_array; >> DM sim_data_da; >> Vec sim_data_vec; >> >> PetscInt xsize=10, realization_dof, i; >> PetscOptionsGetInt(NULL, "-xsize", &xsize, NULL); >> >> realization_dof = xsize + 1; >> >> >> DMDACreate1d(PETSC_COMM_WORLD,DMDA_BOUNDARY_NONE, batch_size, >> realization_dof, 0, NULL, &sim_data_da); >> DMCreateGlobalVector(sim_data_da,&sim_data_vec); >> >> DMDAVecGetArray(sim_data_da, sim_data_vec, & realization_array); >> >> Up to this point, I have no problem, but, when I try to access >> realization_array[i].x[j], I get memory errors. Is this fundamentally >> unworkable, or is there a fix? >> >> -gideon >> >
