[petsc-users] valgrind errors.
(Rebecca) Xuefei YUAN
xy2102 at columbia.edu
Tue Jan 19 11:56:30 CST 2010
Dear Jed,
I have one more question, what is the difference or how could I know
whether I need DAGetArray() or DAGetLocalVector()+DAVecGetArray() to
get my array?
Thanks a ton!
Rebecca
Quoting Jed Brown <jed at 59A2.org>:
> On Tue, 19 Jan 2010 12:24:07 -0500, "(Rebecca) Xuefei YUAN"
> <xy2102 at columbia.edu> wrote:
>> Dear Jed,
>>
>> I found the source of these uninitialised values.
>>
>> In my FormFunction(), there is a user-defined structure called
>> FieldOther and I will use this as a temp values to build up my
>> residual function. The main loop is like:
>>
>>
>> typedef struct {
>> PetscReal x1,x2,x3,x4;
>> } FieldOther;
>>
>> #undef __FUNCT__
>> #define __FUNCT__ "FormFunction"
>> PetscErrorCode FormFunction(SNES snes,Vec X,Vec F,void*dummg)
>> {
>> // ...
>> FieldOther *fieldother;
>> // ...
>> PetscFunctionBegin;
>> // ...
>> ierr =
>> PetscMalloc(sizeof(PetscReal)*(info.mx)*(info.my)*sizeof(FieldOther),
>> &fieldother);CHKERRQ(ierr);
>
> This allocates more memory than you need (probably 8 times).
>
> PetscMalloc(info.mx*info.my*sizeof(PetscReal),&fieldother);
>
> would give you what you want. Note that you can also zero it with
>
> PetscMemzero(fieldother,info.mx*info.my*sizeof(PetscReal));
>
> instead of the explicit loop.
>
>
> You are now allowed to index fieldother[0+0*info.mx] up to
> fieldother[info.mx*info.my-1]. What values are jFirst,jLast,iFirst, and
> iLast? In particular, they will not start at 0 in parallel, and perhaps
> they include ghost values?.
>
> The usual procedure when you need such temporary arrays is to clone a DA
> of whatever size you need, but with different values of dof (and maybe
> overlap), then use DAGetArray() or DAGetLocalVector()+DAVecGetArray() so
> that you can index it as fieldother[j][i].x2 (even in parallel).
>
> Jed
>
>
--
(Rebecca) Xuefei YUAN
Department of Applied Physics and Applied Mathematics
Columbia University
Tel:917-399-8032
www.columbia.edu/~xy2102
More information about the petsc-users
mailing list