[MITgcm-devel] seaice
Martin Losch
mlosch at awi-bremerhaven.de
Wed Feb 15 03:53:28 EST 2006
Jinlun,
the current advection will certainly not be removed and will be the
default. If there are new advection schemes they will be additions
that can be selected at runtime.
Independently of the advection schemes I will do this:
First, I will check in new versions of lsr.F, advect.F, dynsolver.F,
diffus.F, that will NOT change the lab_sea verification experiment
(which is on a spherical grid), but will change cubed-sphere results.
These new versions will no longer need SEAICE_GRID.h, but completely
rely on the grid information that is defined in GRID.h, so that all
hacks for the cubed sphere in seaice_init.F should be obsolete.
The next step is a little hairy and I don't have to do it today, but
sooner or later I would like to do it:
- use global variable rSphere for RADIUS. This will change the
results (I have no idea, why).
- Replace a few formulations in advect.F and diffus.F by a flux form,
which use used in all (?) other parts of the MITgcm. This will make
sure that advection and diffusion is also consistent with cubed-
sphere grids (I am not so sure about it now). I have already included
these formulations in advect.F and diffus.F, but they are commented
out. These should be accurate to the same order than the original
schemes, but the do not give exactly the same results in the lab_sea
(they are slightly different).
PLEASE help me by having a look at the code that I will check in now
and tell me if you agree with the (commented) discretizations
(dxG=DXUICE*CSUICE, dyG=DYUICE on a spherical lat-lon grid).
When I worked on LSR (you may not recognize it in the present form),
I found a few places, where the indices did not convince me. Again on
a spherical grid, correcting these indices did not change the results
(mostly things like CSUICE(I-1,J) instead of CSUICE(I,J) which
doesn't matter on a spherical grid). These things should be corrected.
But there where other places, where I did not understand the
discretization and I am afraid, that on a cubed-sphere grid is may
not be correct (but no sure). Here is an example:
> +HALF*ZETAMEAN(I,J,bi,bj)
> 3 *((UICEC(I+1,J+1,bi,bj)
> 3 -UICEC(I-1,J+1,bi,bj))*RECIP_CSUICE(I,J+1,bi,bj)
> 3 -(UICEC(I+1,J-1,bi,bj)-UICEC(I-1,J-1,bi,bj))
> 3 *RECIP_CSUICE(I,J-1,bi,bj))*DELXY(I,J,bi,bj))
I have to admit, that I find it hard to recognize this term somewhere
in eq9b in your 1997-JGR paper (with Hibler), but nevertheless this
looks to me like zeta*(d/dx)*(d/dy)U with DELXY=HALF/(DXU*DYU). These
are central differences, but shouldn't the (for variable DXU,DYU)
correct form be
zetamean*(
(u(i+1,j+1)-u(i-1,j+1))/(dxu(i,j+1)+dxu(i-1,j+1) - (u(i+1,j)-u
(i-1,j))/(dxu(i,j)+dxu(i-1,j))
)/(dyu(i,j)+dyu(i,j-1)
????
if dxu and dyu are constant, the formulations are the same, but for
variable dxu,dyu, they are not. In the right-hand-sides (FXY) this is
easy to see and to fix, but for the left hand sides (the coefficients
a,b,c) I may have missed quite a few occurences (mostly because I had
a hard time identifiying the term in 9a and 9b). I'll keep looking,
but could you also have a look at that when you find the time?
Martin
On Feb 14, 2006, at 6:34 PM, Jinlun Zhang wrote:
> Martin and all,
>
> I wouldn't be against using a (proven) better advection scheme. But
> we should be cautious about replacing the existing one. It is a
> well tested scheme (with 2nd order accuracy), not only useful for
> the existing 2-category ice model, but particularly stable with
> multi-category models that simulate ridging processes and are
> likely to be implemented in mitgcm sometime later. I have used
> various advection schemes in the past, a few of them blew up the
> ridging calculation, because of a mishandling deformation. I would
> go for 'if it is not broken, don't fix it.' But just in case a new
> scheme is to be used, let's keep this version as an option, if not
> as the standard.
>
> Cheers, Jinlun
>
> chris hill wrote:
>
>> Martin,
>>
>> I took a quick skim through the code. You could try setting
>> advfac to 0.. That would mean any convergence in the ice velocity
>> will cause ice to pile up (heff gets bigger) and divergence will
>> cause it to thin (heff get smaller). That seems like it would make
>> sense to me. As you have it now a divergent ice flow field may end
>> up producing more ice (since with advfac = 1 heff will have a
>> source term that balances the flow divergence/convergence).
>> However, I think we need to get Jinlun's expert thoughts, as the
>> end result is tied up with how the solver works with heff, uice
>> and vice, whether uice and vice can be non-divergent etc...
>>
>> Chris
>> Martin Losch wrote:
>>
>>> GAD:
>>>
>>> I have tried using dst3fl (withoug any explicit diffusion). It
>>> runs stably for 20 years now, but now my ice (instead of being
>>> too little) is growing endlessly (37 m in the western Weddell
>>> Sea), so I have the suspicion that I am make severe mistakes:
>>> Could someone who understand gad_calc_rhs have a look at the
>>> attached routine and tell me, if I have done things right? In
>>> particular in the update of HEFF, is it correct to have advFac=1?:
>>>
>>>> DO j=1-Oly,sNy+Oly-1
>>>> DO i=1-Olx,sNx+Olx-1
>>>> HEFF(i,j,1,bi,bj)=HEFF(i,j,3,bi,bj) + DELTT *
>>>> & maskC(i,j,kSurface,bi,bj)*recip_rA(i,j,bi,bj)
>>>> & *( (fZon(i+1,j)-fZon(i,j))
>>>> & +(fMer(i,j+1)-fMer(i,j))
>>>> & -localT(i,j)*( (uTrans(i+1,j)-uTrans(i,j))
>>>> & +(vTrans(i,j+1)-vTrans(i,j))
>>>> & )*advFac
>>>> & )
>>>
>>>
>>>
>>> Martin
>>>
>>>
>>>
>>> On Feb 14, 2006, at 3:57 PM, chris hill wrote:
>>>
>>>> Martin,
>>>>
>>>> These all sound good.
>>>> Technically it should be possible to use gad to do the
>>>> explicit part of ice advection. Jinlun may have comments on
>>>> whether this makes sense algorithmically and on interactions
>>>> with the implicit parts of the ice dynamics.
>>>>
>>>> Chris
>>>> Martin Losch wrote:
>>>>
>>>>> Hi Dimitris,
>>>>> I am probably playing too much with the seaice model right
>>>>> now, but here are a few points that I'd like to make (and
>>>>> maybe check them in, even if they break lab_sea):
>>>>> 1. I am now sure that there is a bug in advect.F that does NOT
>>>>> affect lat-lon-grid simulations, but WILL affect cubed-sphere
>>>>> simulations and all other irregular grid simulations. It's
>>>>> basically an idexing error (see my previous email). I think I
>>>>> will just fix that.
>>>>> 2. I would like to replace all DXTICE DYTICE SINEICE CSTICE
>>>>> etc with the proper combination of variables dxF,dxG, etc.
>>>>> from GRID.h. This will --- at least as far as I can see ---
>>>>> make sure that the grid information is correct and the same
>>>>> grid parameters that are used for the ocean are used for seacie.
>>>>> Since I want to use the seaice model on a cubed sphere grid, I
>>>>> do care about this. However, this will change the lab_sea and
>>>>> very like (more dramatically) any cubed sphere set-up that
>>>>> you may have (I am currently currently playing with
>>>>> global_ocean.cs32x15 + seaice). Will I get your OK?
>>>>> 3. Advection schemes: for properties such as volume and
>>>>> fractional area, the advection scheme should not produce
>>>>> negative (or positve) overshoots. A 2nd order central
>>>>> difference scheme does that (eg., can produce negative
>>>>> thicknesses). The scheme in advect.F is 2nd order central
>>>>> difference, but I don't understand the time stepping scheme,
>>>>> so it may be OK. Nevertheless, I naively think, a positive
>>>>> scheme may be better, but it is no longer conservative, eg.
>>>>> 2n-order with flux limiter (e.g, Hunke's CSIM5 uses MPDATA)
>>>>> or DST3FL that I use routinely for geochemical tracers. The
>>>>> nice thing is, that all of these schemes are there (in
>>>>> generic_advdiff), one just needs to pick one. I have tried
>>>>> dst3fl, but again, I do not understand the time stepping in
>>>>> advect.F (nor do I understand fully how gad_calc_rhs works):
>>>>> I have tried dst3fl and I even got it to work, but only
>>>>> halfway. If I am not mistaken, the DST schemes look as if they
>>>>> are explicit in time, that is, h(n+1) = h(n) + gh(n)*deltaT.
>>>>> I can compute gh (n), but for that I need to know what the
>>>>> different time levels are, eg.,
>>>>> HEFF(:,:,1,:,:) = current time level?
>>>>> HEFF(:,:,2,:,:) = do I need these?
>>>>> HEFF(:,:,3,:,:) = ?
>>>>> Or do I just update HEFF(:,:,1,:,:) in advect.F?
>>>>> Martin
>>>>> On Feb 14, 2006, at 2:07 PM, Dimitris Menemenlis wrote:
>>>>>
>>>>>> Martin and Jinlun, I am out of my depth when it comes to
>>>>>> advection schemes. Is there a reason for changing the
>>>>>> scheme that is there already in pkg/seaice?
>>>>>>
>>>>>> For cubed-sphere grid right now, I assumed that grid is
>>>>>> rectangular near the Poles (CS*ICE=1, TNG*ICE=0). This was
>>>>>> a quick fix to get going but it is not exact. So maybe
>>>>>> that explains why you get different numerical values?
>>>>>>
>>>>>> Regarding coastal sflux from seaice. One does expect
>>>>>> coastal regions around Antarctica to be ice/salt factories,
>>>>>> but maybe too much salt is being rejected. Carl recently
>>>>>> send me some slides and Ph.D. thesis from Dirk Notz:
>>>>>> http://ecco.jpl.nasa.gov/~dimitri/Notz/talk_MPI16112005.pdf
>>>>>> http://ecco.jpl.nasa.gov/~dimitri/Notz/PhD_thesis_Dirk.pdf
>>>>>> suggesting there is considerable uncertainty regarding how
>>>>>> much salt is rejected during sea ice creation.
>>>>>>
>>>>>> Dimitris
More information about the MITgcm-devel
mailing list