Whoever wrote the DMGetInterpolation_DA_Q1() for when coordinates are 
provided in DA

   1) it is completely broken for the periodic case!

   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));
    }


so why does it even exist?

Needless to say we are using the periodic boundary conditions and frustrated by 
the fact that it gives the wrong matrices. Tempted to rip out all the 
coordinate version of the interpolation cause I don't see it what it provides 
that the non-coordinate (the if (!vcoors) { branch of the code) provides and at 
least the non-coordinate version works for periodic boundary conditions. I know 
someone worked for a long time on the coordinate version but I don't know why.

Is anyone willing to look at this?




  Barry


Reply via email to