[MITgcm-devel] (not so) funny things happen in seaice_lsr and pickups

Martin Losch Martin.Losch at awi.de
Tue Mar 3 05:26:16 EST 2009


Hi all,

I looks like I have found the problem that causes the "spontaneous"  
explosions in seaice_lsr (C-grid): Some of the metric terms were  
discretized in an, let's say, unfortunate way (actually, really wrong  
in a few places, all my fault of course). Also my fault: I never  
tested this part of the code properly (all the rigorous tests were  
carried out on cartesian grids or Dimitris CS510, where the metric  
terms are turned off).

It is very well possible (from my experience with an inconsistent  
discretization in the B-grid that caused the B-grid CS510 to crash),  
that these issues are responsible for Matt's problems, too. The  
crashes I observed are highly sensitive to the model trajectory and  
slight modifications already changed the time/timestep when the crash  
actually occurs. Using a fix like Matt's (use different thermodynamic  
code) just changes the solution, and the model may explode at a  
different time, that fortuitously is beyond Matt's integration period,  
so what works for Matt may not work otherwise.

Now my questions:
1. In order to code the metric terms correctly I need fields like  
tan(YG) and tan(YC) (in analogy to tanPhiAtU/V these would be called  
tanPhiAtZ and tanPhiAtC). On a lat/lon grid these fields should be  
identical to tanPhiAtC=tanPhiAtU, tanPhiAtZ=tanPhiAtV. However, I  
would prefer having these fields with the correct names. Do you agree?  
If you agree there's a second question:
2. Although these fields will only be used in pkg/seaice, I still need  
to initialize them in ini_grid (and subroutines) because of the  
rotated grid option (after ini_spherical_polar_grid, YC and YG are no  
longer the grid coordinate but the geographical coordinates). Should I  
define and set them with a CPP flag ALLOW_SEAICE/useSEAICE?
Alternatively on could derive tanPhiAtZ/C in seaice_init_fixed based  
on "averaging" or copying tanPhiAtU/V, but that method might break  
down, once we decide to bite the bullet and implement all metric terms  
also for the curvilinear grids.

How should I do it? the clean solution with 2 further, mostly unused  
2D grid-fields (defined in GRID.h), or the solution that is confined  
to pkg/seaice and include a hack for spherical grids and potentially  
more hacks for general curvilinear grids? While I prefer the first  
option, the second is perfectly OK, too.

Martin

PS. All my restart problems remain, and are really weird, but that's a  
different story.






More information about the MITgcm-devel mailing list