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