CICE-Consortium / Icepack

Development repository for sea-ice column physics
Other
25 stars 131 forks source link

Negligible snow and convergence #279

Closed eclare108213 closed 3 years ago

eclare108213 commented 4 years ago

From @MichaelWinton at https://github.com/MichaelWinton/SIS2/blob/melt_pond/docs/icepack.md

With the GFDL pond scheme it turned out that negligible snow (ignored by Icepack) did not have negligible shortwave absorption when the energy conservation convergence criterion was applied in the iterative solver. A change was made to add snow shortwave absorption to the surface energy budget when the snow is so small as to be neglected.

eclare108213 commented 4 years ago

@proteanplanet @njeffery Just getting this issue back on our radar as something that we can consider fixing as part of the snow model upgrade for the MPAS/Icepack merge.

eclare108213 commented 3 years ago

@MichaelWinton I'd like to fix this in Icepack but I'm having trouble finding the change that you made - can't seem to make github compare your icepack_therm_mushy.F90 module with the Consortium's version (v1.0, right?). Can you point me to the modified code, please, either as a code diff or just which lines in your code I should look at? Thanks, e

dabail10 commented 3 years ago

I did add the shortwave "fix" to the mushy layer in CICE6, but only for the sea ice part. This is turned on via the sw_redist flag and is off by default for ktherm=2. The fraction moved is sw_frac and the temperature threshold is sw_dTemp.

Dave

if (sw_redist) then

dt_rhoi_hlyr = dt / (rhoi*hilyr)

do k = 1, nilyr

   Iswabs_tmp = c0 ! all Iswabs is moved into fswsfc

   Tmlt = liquidus_temperature_mush(zSin(k))

   if (zTin(k) <= Tmlt - sw_dtemp) then
      ci = cp_ice - Lfresh * Tmlt / (zTin(k)**2)
      Iswabs_tmp = min(Iswabs(k), &
                       sw_frac*(Tmlt-zTin(k))*ci/dt_rhoi_hlyr)
   endif
   if (Iswabs_tmp < puny) Iswabs_tmp = c0

   dswabs = min(Iswabs(k) - Iswabs_tmp, fswint)

   fswsfc   = fswsfc + dswabs
   fswint   = fswint - dswabs
   Iswabs(k) = Iswabs_tmp

enddo

endif
eclare108213 commented 3 years ago

Here is how @MichaelWinton fixed the problem that turned up in SIS. Is this fundamentally the same thing as yours, @dabail10 (except yours only occurs with sw_redist=T) ? This seems reasonable to me.

` else ! case without snow

   ! run the two stage solver
   call two_stage_solver_nosnow(nilyr,       nslyr,      &
                                Tsf,         Tsf0,       &
                                zqsn, &
                                zqin,        zqin0,      &
                                zSin,        zSin0,      &
                                zTsn, &
                                zTin, &
                                phi,         Tbot,       &
                                km,          ks,         &
                                q,           dSdt,       &
                                w,           dt,         &
                                fswint-sum(Sswabs),      & ! to adjust convergence criterion
                                fswsfc+sum(Sswabs),      & ! while conserving energy - mw
                                rhoa,        flw,        &
                                potT,        Qa,         &
                                shcoef,      lhcoef,     &
                                Iswabs,      Sswabs,     &
                                qpond,       qocn,       &
                                Spond,       sss,        &
                                hilyr,       hslyr,      &
                                fcondtop,    fcondbot,   &
                                fadvheat,                &
                                flwoutn,     fsensn,     &
                                flatn,       fsurfn,     &
                                gfdl_bc,     fsurf0,     &
                                dfsurf0_dT,  gfdl_pond   )`
dabail10 commented 3 years ago

This is probably fine, except that it always takes 100% and assumes the snow only has one layer? Does this only happen when the snow is very thin? That is less than hs_min or puny?

eclare108213 commented 3 years ago

Yes, this only done in the mushy thermo for the "nosnow" case, but apparently there can still be some tiny amount of snow which does influence the solution in dEdd. My preference would be to fix this properly in the shortwave module so that it is correct for any thermodynamics option -- the fix would be basically the same as above, only (and always) done for the case of negligible snow. It might change the answers more than we expect, but it is a bug fix.