[petsc-users] dmda and structures

Barry Smith bsmith at mcs.anl.gov
Sun Dec 29 13:53:18 CST 2013


On Dec 29, 2013, at 1:38 PM, Gideon Simpson <gideon.simpson at icloud.com> wrote:

> How would that work?

   I’ve modified your code fragment below with how I think you could do it.

>  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 <bsmith at mcs.anl.gov> 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 <gideon.simpson at icloud.com> 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:
>>> 
>>> 
>>> 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);
>>> 
PetscScalar **realization_array;

>>> DMDAVecGetArrayDOF(sim_data_da, sim_data_vec, & realization_array);

    something = realization_array[i][j];     here i varies from xs to xs+xm-1  and j varies from 0 to realization_dof-1

>>> 
>>> 
>>> -gideon
>>> 
>> 
> 



More information about the petsc-users mailing list