[petsc-dev] Jed will not be happy

Dave May dave.mayhem23 at gmail.com
Mon Aug 15 09:08:57 CDT 2011


Hey Barry and Jed,
  Apologies for the late response, I too have been offline for some time.

Sorry about the confusion caused by this statement Barry,
    > 1) We never wanted to support non-uniform grids.
So Jed noted, I actually meant non-uniform grid refinement.

The problem I always encountered related to the case when I used
non-uniform grids.
In such cases, the if (PetscAbsScalar(x) != 0.0)  statement would
typically be entered and an
illegal memory access would occur.

As far as I can tell using my old test code (which was turned into
ex36), by removing the statement

      if (coors) {
        /* only access the next coors point if we know there is one */
        /* note this is dangerous because x may not exactly equal ZERO */
        x = (coors[j][i].x - ccoors[j_c][i_c].x);
        if (PetscAbsScalar(x) != 0.0) x = x/(ccoors[j_c][i_c+1].x -
ccoors[j_c][i_c].x);
        y = (coors[j][i].y - ccoors[j_c][i_c].y);
        if (PetscAbsScalar(y) != 0.0) y = y/(ccoors[j_c+1][i_c].y -
ccoors[j_c][i_c].y);
      }

from what you call the (!NEWVERSION), both implementations currently
in petsc-dev produce identical
errors for the non-periodic case in 2D.

I didn't manage to break the code using
#define NEWVERSION 0
So from my point of view, since both versions pass all the ex36_
tests, they are both good.

I also noticed that the 3D version (DMGetInterpolation_DA_3D_Q1, line
818) appears to be missing the ! symbol.


Cheers,
  Dave



On 14 August 2011 22:23, Barry Smith <bsmith at mcs.anl.gov> wrote:
>
>   Ok, I have removed the horrible branch on if (coords) from the interpolation code but left both the old and new versions there. You control the old or new version by defining NEWVERSION at the top of the file. Both versions pass all the ex36_ tests (does that mean that they are both good?).  Once we have some tests where old version breaks I can continue work on them. I have left by default to use the old version since that handles periodic  properly.
>
>  Barry
>
>
>
> On Aug 13, 2011, at 11:23 PM, Jed Brown wrote:
>
>> On Sat, Aug 13, 2011 at 23:03, Barry Smith <bsmith at mcs.anl.gov> wrote:
>> > Dave showed some cases where the old code was producing incorrect results, and then wrote a bunch of new code to get second-order accurate interpolants.
>>
>>    It is possible the old code was producing incorrect results; but it is actually suppose to be doing pretty much the same as the new code in its design and logic (though not as clear) so I am not sure why it would generate
>> different answers except for bugs. Any examples showing a difference?
>>
>> Dave?
>>
>>
>> > I thought the old code was also messy, so I didn't carefully audit the new code that came in passing the existing tests and adding new ones. I asked Dave about the code duplication and he wrote the following just before I fell off the internet for a couple days and then forgot to follow up. :-/
>> >
>> > 1) We never wanted to support non-uniform grids.
>>
>>    I'm totally confused. So it is only suppose to do uniform grids with uniform grid refinement? Ok but that is what the old code did. So is the new code just a "fix" for the old code (plus broken periodic) and should it have just replaced the old code? Why does the test code create a nonuniform coordinate vector then if it isn't used. Are all the tests done as tests on interpolating coordinates? Not on interpolating some function on the grid (yes I know coordinates are a particular case of functions on the grid, but no one I care about :-)).
>>
>> Some people (us included) solve problems where the coordinates are part of the solution, so having them live in bonified function spaces is useful. The code runs on non-uniform grids (it would be much simpler otherwise), but it assumes uniform refinement. You could also imagine a deformed grid that was not precisely nested within its parent. In that case, you would need point location and a bit more code complexity to handle ghost layer thickness. DA refinement and coarsening is currently all regular, even though the starting meshes may not be. Actually, an exception to this may be if you start with a coarse mesh that is graded for a boundary layer. This case could still be nicely nested, but must need to actually use coordinates, in which case the current code must be incorrect.
>>
>> Dave, was this something you originally intended to support?
>>
>>    That wasn't my plan. If I do a DARefine (say by 2) but then set in the coordinates on the finer mesh some scale coordinates is the DAGetInterpolation suppose to ignore the scaled coordinates?  Looks like it.
>>
>> Are you going to maintain strict nesting such that corner nodes don't move at all and edge/face nodes stay on the original coarse face/edge? I think going the other direction (coarsening from a graded mesh) is more meaningful, but both produce the same situation (described above) where we really should be using coordinates.
>>
>>   I don't understand this AT ALL. Currently the code completely ignores all coordinate information for non-periodic boundary conditions (assuming I guess uniform everything?) but you get all hot and bothered by the fact that you don't have coordinate values to do the interpolation for periodic case so you have to skip it. This seems completely contradictory to me?  I can use the periodic interpolation generated (with the old code) to do multigrid on a periodic domain just fine.  The "new" code could likely be very easily fixed to do the periodic case by using the same business with the unit element on the "extra" elements along the edge (like is done in the old code). Is all your rejection of the "periodic case" because you cannot interpolate "coordinates" in the periodic region? Big hairy deal
>>
>> Haha, good point. So if we fix the interpolants to actually use coordinates in the interior elements, do we silently assume the wrap element is regular or somehow check if the mesh is regular nearby and error if it's not?
>>
>>   No I tried make runex36 per the standard naming convention and it said no such test. I didn't bother looking further than that figuring no one would break the standard naming convention.
>>
>> Do you not have bash-completion?
>
>



More information about the petsc-dev mailing list