New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
#1087 (Bug in ASM/asminc.F90 : wrong depth in freezing point calculation) – NEMO

Opened 11 years ago

Closed 11 years ago

#1087 closed Bug (fixed)

Bug in ASM/asminc.F90 : wrong depth in freezing point calculation

Reported by: gm Owned by: nemo
Priority: low Milestone:
Component: OCE Version: v3.4
Severity: Keywords:
Cc:

Description

lines 687-694 the computation of the 3D freezing point is incorrect:

DO jk = 1, jpk
   DO jj = 1, jpj
      DO ji = 1, jpk
         fzptnz (ji,jj,jk) = ( -0.0575_wp + 1.710523e-3_wp * SQRT( tsn(ji,jj,jk,jp_sal) )                   & 
                                          - 2.154996e-4_wp *       tsn(ji,jj,jk,jp_sal)   ) * tsn(ji,jj,jk,jp_sal)  & 
                                          - 7.53e-4_wp * fsdepw(ji,jj,jk)       ! (pressure in dbar)
      END DO
   END DO
END DO

The depth used should be the depth of T-point (fsdept) not the depth of w-point !

Furthermore, it is not a good idea to redefined locally the freezing point. It is better to use the eosbn2 freezing point function (tfreez) as follow:

DO jk = 1, jpk
   fzptnz (:,:,jk) = tfreez( tsn(:,:,jk,jp_sal) )  - 7.53e-4_wp * fsdept(:,:,jk)       ! (dept = pressure in dbar)
END DO

an even better solution is to add depth as OPTIONAL argument in tfreez function, and directly calling tfreez( tsn(:,:,jk,jp_sal) , fsdept(:,:,jk) ) in asminc.F90

Gurvan

Commit History (1)

ChangesetAuthorTimeChangeLog
4070djlea2013-10-17T12:48:23+02:00

#1087: Bug fix to freezing temperature used in ASM code.

Change History (4)

comment:1 Changed 11 years ago by charris

I worried about this when thinking about using a salinity dependent freezing point for CICE. I guess the thing about using fsdepw rather than fsdept is that it seems more consistent with the current calculations of the freezing temperature at the surface (which use a depth of zero, rather than the depth of the first T point).

Chris

comment:2 Changed 11 years ago by gm

This issue is only in assimilation part, and I far as I understand it is a control test done to avoid ocean interior point to fall below the freezing point. 

For levitating ice, that's obviously the freezing point at z=0 that should be used. In embedded case the depth of ice-ocean interface can be used, but anyway the O(10-3) coefficient in front of depth dependance means minor change in freezing point... That's the reason why OPTIONAL argument for depth should be kept, and freezing point for sea-ice given without the argument, i.e. depth = 0.

By the way I think that it is more secure (and more clear) to add the #if defined key_cice  freezing=-2°C #endif directly in the freezing point function, rather than putting it where the function is called.

gurvan

comment:3 Changed 11 years ago by djlea

Drew Peterson made a very similar change to our local (older) ASM code but still using the w-point depth. I agree that the T-point depth makes more sense (if not a huge difference). I'm happy for this bug fix to go in.

Dan

comment:4 Changed 11 years ago by djlea

  • Resolution set to fixed
  • Status changed from new to closed

I have implemented the optional argument suggestion for tfreez. If you do not supply a depth to tfreez then it will make no depth adjustment of the freezing temperature. I.e. it will retain the existing functionality. I've also of course changed the depth to fsdept as suggested by Gurvan.

To test that the change has not broken anything. I've performed SETTE tests and this change makes no difference as expected. I am also happy that it functions correctly.

I also checked with Chris Harris and he is happy with the change.

So I've committed to the trunk at revision [4070].

Dan

Note: See TracTickets for help on using tickets.