[petsc-users] Could DMComposite handle two vectors with different grid sizes.

Barry Smith bsmith at mcs.anl.gov
Tue Jul 27 23:19:04 CDT 2010


  That example could be broken.

  Please, please never never never say vague things like "I was not able to run this one with the options '-snes_mf'," there is zero chance that we can answer such a question. What, specifically goes wrong, cut and paste the entire error message. We have no magic way of know what of the six billion possible things that could go wrong, did go wrong when you ran it, we cannot see your screen.


   Barry

On Jul 27, 2010, at 10:55 PM, (Rebecca) Xuefei YUAN wrote:

> Dear Barry,
> 
> Yes, you are right. I looked up into the examples and found this one
> 
> http://www.mcs.anl.gov/petsc/petsc-as/snapshots/petsc-current/src/snes/examples/tutorials/ex31.c.html
> 
> However, I was not able to run this one with the options '-snes_mf', is there any problem on that?
> 
> Thanks a lot!
> 
> Rebecca
> Quoting Barry Smith <bsmith at mcs.anl.gov>:
> 
>> 
>>  DMComposite doesn't say that the different DAs have to have the  same dimensions, they can have different sizes, number of grid  points etc
>> 
>>   Barry
>> 
>> On Jul 27, 2010, at 10:11 PM, (Rebecca) Xuefei YUAN wrote:
>> 
>>> Dear Barry,
>>> 
>>> I went over the mp1.c as the multi physics example. However, what I  concerned is not addressed in that example. My concern is that will  it be fine if the grid size for the different das are different.
>>> 
>>> The different grid sizes of da_A and da_B are coming from the fact  that they share the same physical domain, but the computational  domain are slightly different due to that problem A has the Neumann  boundary condition (giving that the computational domain is half  spacing extended from the physical domain, each point is expressed  at the center of the cell) and problem B has the Dirichlet boundary  condition (giving that the computational domain is the same as the  physical domain, each point is expressed at the node of the cell.)  Thus, problem A ALWAYS needs 1 more grid in each direction than  problem B at each level.
>>> 
>>> If the coarsest grid has the difference 1(mA - mB = 1) in each  direction, according to the algorithm for multigrid, the next finer  level has the difference of ((2*mA-1) - (2*mB-1) = 2(mA-mB) = 2) in  each direction, the next level has the difference of  ((2*(2*mA-1)-1) - (2*(2*mB-1)-1) = 4*(mA-mB) = 4) in each  direction. Because there is only half spacing being extended from  the physical domain as the computational domain for problem A, the  abandonNumber of grid is 1-1=0 for nl=1, 2-1=1 for nl=2 and 4-1=3  for nl=3.
>>> 
>>> To keep those extra points in the residual function and Jacobian, I  applied the Neumann boundary condition for those points (mirror  with the interior points).
>>> 
>>> Will this procedure be fine for such a multi physics problem?
>>> 
>>> Thanks very much!
>>> 
>>> Rebecca
>>> 
>>> 
>>> 
>>> 
>>> Quoting Barry Smith <bsmith at mcs.anl.gov>:
>>> 
>>>> 
>>>> 
>>>>  What you are doing below looks ok. This builds the DM and DMMG.    See tutorials/multiphysics/mp1.c for an example that uses SNES to   solve a nonlinear equation on the grids.
>>>> 
>>>>  Barry
>>>> 
>>>> 
>>>> 
>>>> On Jul 27, 2010, at 7:36 PM, (Rebecca) Xuefei YUAN wrote:
>>>> 
>>>>> Dear all,
>>>>> 
>>>>> If I have two different vectors (with different dof, stencil  width  and grid sizes), could I use DMComposite to handle this?
>>>>> 
>>>>> The following is the piece of code for assemble this DMComposite in DMMG.
>>>>> 
>>>>> 	tempparameters.mxfield				= 5;
>>>>> 	tempparameters.myfield				= 5;
>>>>> 
>>>>> 	tempparameters.mxgrid	= tempparameters.mxfield+1;
>>>>> 	tempparameters.mygrid	= tempparameters.myfield+1;
>>>>> 
>>>>> 	ierr	= DMMGCreate(comm, tempparameters.numberOfLevels, &appCtx,   &dmmg);CHKERRQ(ierr);
>>>>> 
>>>>> 	ierr	= DMCompositeCreate(comm,&packer);CHKERRQ(ierr);
>>>>> 
>>>>> 	ierr	= DACreate2d(comm,DA_NONPERIODIC,DA_STENCIL_BOX,   tempparameters.mxfield, tempparameters.myfield, PETSC_DECIDE,   PETSC_DECIDE, 4, 3, PETSC_NULL, PETSC_NULL, &da_fff);CHKERRQ(ierr);
>>>>> 	ierr	= DASetFieldName(da_fff, 0, "phi");CHKERRQ(ierr);
>>>>> 	ierr	= DASetFieldName(da_fff, 1, "vz");CHKERRQ(ierr);
>>>>> 	ierr	= DASetFieldName(da_fff, 2, "psi");CHKERRQ(ierr);
>>>>> 	ierr	= DASetFieldName(da_fff, 3, "bz");CHKERRQ(ierr);
>>>>> 	ierr	= DACreate2d(comm,DA_NONPERIODIC,DA_STENCIL_BOX,   tempparameters.mxgrid, tempparameters.mygrid, PETSC_DECIDE,   PETSC_DECIDE, 1, tempparameters.gridStencilWidth, PETSC_NULL,   PETSC_NULL, &da_ggg);CHKERRQ(ierr);
>>>>> 	ierr	= DASetFieldName(da_ggg, 0, "disp");CHKERRQ(ierr);
>>>>> 
>>>>> 	ierr	= DMCompositeAddDM(packer,(DM)da_fff);CHKERRQ(ierr);
>>>>> 	ierr	= DMCompositeAddDM(packer,(DM)da_ggg);CHKERRQ(ierr);
>>>>> 	ierr	= DMCompositeAddArray(packer,0,1);CHKERRQ(ierr);
>>>>> 
>>>>> 	ierr	= DMMGSetDM(dmmg, (DM)packer);CHKERRQ(ierr);
>>>>> 
>>>>> 	ierr	= DADestroy(da_fff);CHKERRQ(ierr);
>>>>> 	ierr	= DADestroy(da_ggg);CHKERRQ(ierr);
>>>>> 
>>>>> .........................................................
>>>>> 
>>>>> 	ierr	= DMCompositeDestroy(packer);CHKERRQ(ierr);
>>>>> 	ierr	= DMMGDestroy(dmmg);CHKERRQ(ierr);
>>>>> 
>>>>> 
>>>>> I understand that for numberOfLevels(nl)>1, the grid size   difference is no longer 1, but 3(nl=2), 5(nl=3), could I use   DMComposite to handle such a case successfully?
>>>>> 
>>>>> I was not able to get examples for such a case, is there any?
>>>>> 
>>>>> Thanks a lot!
>>>>> 
>>>>> 
>>>>> 
>>>>> --
>>>>> (Rebecca) Xuefei YUAN
>>>>> Department of Applied Physics and Applied Mathematics
>>>>> Columbia University
>>>>> Tel:917-399-8032
>>>>> www.columbia.edu/~xy2102
>>>>> 
>>>> 
>>>> 
>>>> 
>>> 
>>> 
>>> 
>>> --
>>> (Rebecca) Xuefei YUAN
>>> Department of Applied Physics and Applied Mathematics
>>> Columbia University
>>> Tel:917-399-8032
>>> www.columbia.edu/~xy2102
>>> 
>> 
>> 
>> 
> 
> 
> 
> -- 
> (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