[Mitgcm-support] GM c48

mitgcm-support at dev.mitgcm.org mitgcm-support at dev.mitgcm.org
Wed Jul 9 15:54:03 EDT 2003


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



More information about the MITgcm-support mailing list