[Mitgcm-support] Re: GM c48

mitgcm-support at dev.mitgcm.org mitgcm-support at dev.mitgcm.org
Wed Jul 9 15:55:46 EDT 2003


With the latest code in repository
- the following options seem to work with the adjoint
   'clipping', 'dm95', 'gkw91'
- the following options don't work
   'linear', 'gkw91', 'ldd97'

Yes, the constant exponents were bugs,
not sure about the km1 issue.

Surprising to me to need Large_SlopeSqr = 1.e48
even surprising to me that they can be as large as 1.e26
Doesn't that hint at another problem somewhere in GM?

Good idea to replace the GMREDI_OPTIONS by GM_EXCLUDE_...

Splitting into the multiplication by inverse helps to
avoid recomputations. I hadn't looked at the slope_psi part
in detail yet (cf. tag-index).

-Patrick



Jean-Michel Campin wrote:
> Hi guys,
> 
> I started to look at c48 version of GM. 
> 
> o The fact that the 4 experiments that used GM fail the testscript 
>   in both checkpoint47g_post & checkpoint48 is annoying (for us and
>   also for others that download the code, run an example and
>   cannot reproduce the standard results).
> 
> o Things are not simple. gmredi_slope_limit.F is becoming almost
>   as hard to read as pieces of code that I usually write myself.
>   Let's concentrate on the 2 S/R that are responsible for the output 
>   differences: gmredi_slope_limit.F & gmredi_calc_tensor.F
> 
> ----------------------
> gmredi_slope_limit.F 
>  a) a 2nd tapering scheme has been added over all the others.
>    This is enough to change the results:
> Y Y Y Y  8 13 10 10  9 16 12 12  8  7  9  8  7  8  9  7  7 FAIL  global_ocean.90x40x15
> Y Y Y Y  8 13 10 10  9 16 11 13  9  7  9  8  8  8  9  7  8 FAIL  global_with_exf  
>    This is not a compiler Optimization issue, this is a real change in
>    the code. Therefore, it would nice to put the 2nd slope_max (=Large_SlopeSqr)
>    in data.gmredi so that one can recover the original code & results
>    setting e.g. Large_SlopeSqr = 1.e48 (I checked that it works). 
>    And for the adjoint, Large_SlopeSqr= 1.e8.
> 
>  b) A 2 steps computation (multiplication by the inverse) has been replaced
>    by a single division:
>    c48, line 250,251 :
>            SlopeX(i,j) = -dSigmaDx(i,j)/dSigmaDrReal(i,j)
>            SlopeY(i,j) = -dSigmaDy(i,j)/dSigmaDrReal(i,j) 
>    47f_post:
>            dRdSigmaLtd(i,j) = 1./(dSigmaDrReal(i,j))
>            SlopeX(i,j)=-dSigmaDx(i,j)*dRdSigmaLtd(i,j)
>            SlopeY(i,j)=-dSigmaDy(i,j)*dRdSigmaLtd(i,j)
>    This is enough to change the results:
> Y Y Y Y  9 16 16 16 16 16 16 16 16 13 13 12 16 12 11 10 13 FAIL  front_relax 
> Y Y Y Y 12 16 16 16 16 16 16 16 16 13 13 12 13 13 13 12 13 FAIL  lab_sea 
>    This is not sensitive to the Optimization level (I get differences also
>    if I use no optimization at all).
>    We can decide to change the output of those 2 exp. But I would prefer
>    to change at the same time both the tapering part and the clipping part
>    (right now, only the tapering part has been simplified).
>    What I propose is:
>     1) return to the old form.
>     2) make a tag
>     3) replace the *dRdSigmaLtd by /dSigmaDrReal in BOTH the tapering part
>        and the clipping part. (if it work with TAF for one, it should work
>        also for the other ?). 
>     4) change the output that are affected. put some clear comments that
>        explain what causes the differences.
>     5) make a tag.
> 
>  c) GM_Small_Number=1.D-12 (but not used in gmredi_slope_limit.F)
>    Small_Number=1.D-20 (before was Small_Number=1.D-12)
>    Again, this is enough to change the results: 
> Y Y Y Y 12 16 16 13 13 16 16 16 13 12 12 12 12 11 12 12 12 FAIL  global_ocean.90x40x15
> Y Y Y Y 12 16 16 13 13 16 16 16 13 12 12 12 12 11 12 12 12 FAIL  global_with_exf 
> 
>  d) Cspd=2. _d 3 (before was  Cspd=2.) in the ldd97  tapering scheme.
>    This looks like a bug ?
>    this affects the results of lab_sea:
> Y Y Y Y  1  3  4  5  4  5  5  6  4  3  4  2  3  3  4  2  3 FAIL  lab_sea 
>  
> ----------------------
> gmredi_calc_tensor.F
>    c48, line 271:
>      &          *_maskW(i,j,k,bi,bj)*maskp1
>    c48, line 344:
>      &          *_maskS(i,j,k,bi,bj)*maskp1
>    *maskp1 was not there before and it should not be there.
>    I think that this breaks the "adiabatic property' of the Redi tensor.
>    Anyway, this is enough to change the results:
> Y Y Y Y  6 16  8  8  7 16  9 12  6  6  6  7  5  5  6  5  5 FAIL  global_ocean.90x40x15
> Y Y Y Y  6 16  7  8  7 16  9 12  6  6  6  7  5  5  6  5  5 FAIL  global_with_exf
>    
>    Patrick: could you check that the adjoint is OK with the right 
>      form, i.e., with no *maskp1
> ----------------------
> 
>   Concerning the advective form of GM (with GM_AdvSeparate T or F),
>   I can reproduce the results of c46. 
>  
> Question for Patrick:
>   In gmredi_calc_tensor.F, the TAF specific initializations are done
>   in the 1rst k loop, DO k=2,Nr ; why not in a specific block, before 
>   this K=2,Nr loop, and this time from k=1,Nr ? 
> 
> what I will do now: try to reach point 2 of note.b above
>   
> See you,
> 
> Jean-Michel


-- 
_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
Patrick Heimbach     Massachusetts Institute of Technology
FON: +1/617/253-5259                    EAPS, Room 54-1518
FAX: +1/617/253-4464               77 Massachusetts Avenue
mailto:heimbach at mit.edu                 Cambridge MA 02139
http://www.mit.edu/~heimbach/                       U.S.A.




More information about the MITgcm-support mailing list