<div dir="ltr">Hello everyone,<div><br></div><div>I have a 2D DMDA with Nx=6 and Ny=4. If I set refine_x=3 and refine_y=2, I can get a coarse DMDA by DMCoarsen(). However, when I tried to call the DMCreateRestriction between these two DMDAs, I got error about " No support for this operation for this object type. DMCreateRestriction not implemented for this type."</div><div><br></div><div>Can you help me get around this?</div><div><br></div><div>Another simple question, where can I find the explanation/meaning of DMDA_Q0 and DMDA_Q1?</div><div><br></div><div>Below is my test example.</div><div><br></div><div>Thank you.</div><div><br></div><div>Best,</div><div>Xiangdong</div><div><br></div><div><div>#include <petsc.h></div><div><br></div><div>int main(int argc, char **argv)</div><div>{</div><div>  PetscErrorCode ierr;</div><div><br></div><div>  PetscInitialize(&argc, &argv, PETSC_NULL, PETSC_NULL);</div><div><br></div><div>  int Nx=6, Ny=4, Nz=1;</div><div>    </div><div>  DM da;</div><div>  </div><div>  ierr = DMDACreate2d(PETSC_COMM_WORLD,DM_BOUNDARY_NONE,DM_BOUNDARY_NONE, DMDA_STENCIL_STAR,Nx,Ny,PETSC_DECIDE, PETSC_DECIDE,1,1,NULL,NULL,&da);CHKERRQ(ierr);</div><div><br></div><div>  int refine_x=3, refine_y=2, refine_z=1;</div><div>  ierr = DMDASetRefinementFactor(da,refine_x,refine_y,refine_z);</div><div>    </div><div>  ierr = DMDASetInterpolationType(da,DMDA_Q0);</div><div><br></div><div>  ierr = DMSetFromOptions(da); CHKERRQ(ierr);</div><div>  ierr = DMSetUp(da); CHKERRQ(ierr);</div><div><br></div><div>  DM dac;</div><div>  ierr = DMCoarsen(da,NULL,&dac);</div><div> </div><div>  Mat M;</div><div>  Vec V;</div><div>  </div><div>  ierr = DMCreateRestriction(dac,da,&M);</div><div>  </div><div>  MatView(M,PETSC_VIEWER_STDOUT_WORLD);</div><div><br></div><div><br></div><div>  ierr = PetscFinalize(); CHKERRQ(ierr);</div><div>  PetscFunctionReturn(0);</div><div>}</div></div><div><br></div></div>