On Tue, Nov 23, 2010 at 00:27, Sean Farley <sean@mcs.anl.gov> wrote:
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:

DMMG is simultaneously an array representing a full hierarchy and the individual levels in the hierarchy.  If you have

  DMMG *dmmg;

then dmmg[0] (same as *dmmg) represents the coarsest level.  If your function only works on one level, then you should just pass in a DMMG (not a DMMG*).  If your function only needs the dmmg->dm field, then just make your function use a DA, then make that the argument of your function and call it as

DMMG *dmmg;
// dmmg is initialized somehow ...
MyFunc(DMMGGetDA(dmmg),bvec);

This passes in the DA on the finest level.

DMMG is a weird beast.  Once its functionality has been migrated to SNES and KSP (underway in petsc-dev), it will be removed.

Jed

Jed