[petsc-users] Passing DMMG struct.

Sean Farley sean at mcs.anl.gov
Mon Nov 22 17:27:34 CST 2010


>
> I made the change in the function so I now get this error
> PetscErrorCode ComputeRho(DMMG *dmmg, Vec rho)
> {
>  DA             distA = (DA)dmmg->dm;
>
> In function ‘PetscErrorCode Myfunc(_n_DMMG**, _p_Vec*)’:
> error: request for member ‘dm’ in ‘* dmmg’, which is of non-class type
> ‘_n_DMMG*’
>
> It looks like I have a null pointer to _n_DMMG**  instead of _n_DMMG*


 It seems like your code expects you to pass a DMMG object not a DMMG*
object. There are two ways to fix this:

1) In your function 'ComputeRho' change all references of dmmg to *dmmg,
i.e.:

DA distA = (DA)(*dmmg)->dm;

2) Change your function declaration back to what you had:

PetscErrorCode ComputeRho(DMMG dmmg, Vec rho)
{...}

and then pass the object to your function as so:

ComputeRho(*dmmg, b);

Do you need your dmmg to be a pointer in your 'main' function? It looks like
your declaration could just be:

extern PetscErrorCode Myfunc(DMMG,Vec);

>>>>>>>>>>>>>>>>
int main(int argc,char **argv)
{
  DMMG           dmmg;
...Vec b;

Myfunc(dmmg,b)
}

PetscErrorCode Myfunc(DMMG dmmg, Vec b)
{
  DA             da = (DA)dmmg->dm;
.....
}
<<<<<<<<<<<<<<<<<

and that would fix everything.

Sean
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20101122/120eefb9/attachment.htm>


More information about the petsc-users mailing list