On Jul 21, 2011, at 5:00 PM, Jed Brown wrote:

> On Thu, Jul 21, 2011 at 14:48, Barry Smith <bsmith at mcs.anl.gov> wrote:
> 
> 
>  Whoever wrote the DMGetInterpolation_DA_Q1() for when coordinates are 
> provided in DA
> 
>   1) it is completely broken for the periodic case!
> 
> There is a serious semantic problem with periodic non-regular coordinates: we 
> don't know how big the wrap element is. There is no way to determine this 
> automatically, and there is no way to store it.

   So maybe generate an error message??? Producing the incorrect answer is not 
a good approach.

>  
> 
>   2) it doesn't actually use the coordinates provided by the user in the DA ; 
> it uses uniform coordinates it cooks up on the fly
> 
> /* compute local coordinate arrays */
>    nxi  = ratioi + 1;
>    neta = ratioj + 1;
>    ierr = PetscMalloc(sizeof(PetscScalar)*nxi,&xi);CHKERRQ(ierr);
>    ierr = PetscMalloc(sizeof(PetscScalar)*neta,&eta);CHKERRQ(ierr);
>    for (li=0; li<nxi; li++) {
>      xi[li] = -1.0 + (PetscScalar)li*(2.0/(PetscScalar)(nxi-1));
>    }
>    for (lj=0; lj<neta; lj++) {
>      eta[lj] = -1.0 + (PetscScalar)lj*(2.0/(PetscScalar)(neta-1));
>    }
> 
> These are reference coordinates. They get mapped using a Q1 local coordinate 
> mapping. Dave wrote this code, but it was tested to give second order 
> accuracy for non-uniform mapped grids.

   I completely do not understand the situation.  In the code

  if (vcoors) {
    ierr = DMDAGetGhostedCoordinates(dac,&cvcoors);CHKERRQ(ierr);
    ierr = DMDAVecGetArray(ddf->da_coordinates,vcoors,&coors);CHKERRQ(ierr);
    ierr = DMDAVecGetArray(ddc->da_coordinates,cvcoors,&ccoors);CHKERRQ(ierr);
  }

but the variable coors and ccoors are NEVER used in the routine!  How can this 
routine supposedly support non-uniform mapped grids when the coordinates are 
never even taken into account? And why is 

 ierr = DMDAVecGetArray(ddf->da_coordinates,vcoors,&coors);CHKERRQ(ierr);
    ierr = DMDAVecGetArray(ddc->da_coordinates,cvcoors,&ccoors);CHKERRQ(ierr);

even called if the result is not used?   

What am I missing?




> 
> Are you using non-uniform periodic grids?

No, they are uniform. But I want to store the coordinates explicitly.


> If you have regular periodic grids, but you still want to store coordinates 
> explicitly, then we could write some special case to detect that you set 
> coordinates that happened to be uniform, therefore we can guess that the wrap 
> cell should also be uniform, and the code for no provided coordinates would 
> be correct. What do you want to do?


Reply via email to