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.
Changeset 15315 for NEMO/branches/UKMO/NEMO_4.0.4_CO9_shelf_climate – NEMO

Ignore:
Timestamp:
2021-10-01T14:07:41+02:00 (3 years ago)
Author:
hadjt
Message:

tracnticing - not allowing gridboxes to cool below freezing.

This was an option within CO6, which I have added again.

Namelist added: nam_tranxticing with nn_tranxticing

The version is committed in restrospect, so may not include all the changes to work.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/UKMO/NEMO_4.0.4_CO9_shelf_climate/src/OCE/TRA/tranxt.F90

    r14075 r15315  
    4747   USE agrif_oce_interp 
    4848#endif 
     49   !JT for ctrl warn 
     50   USE lib_mpp 
     51   !JT for ctrl warn 
    4952 
    5053   IMPLICIT NONE 
     
    5457   PUBLIC   tra_nxt_fix   ! to be used in trcnxt 
    5558   PUBLIC   tra_nxt_vvl   ! to be used in trcnxt 
     59 
     60   !JT 
     61   INTEGER  ::   warn_1, warn_2   ! indicators for warning statement 
     62   INTEGER , PUBLIC ::   nn_tranxticing  ! region mean calculation 
     63   !JT 
    5664 
    5765   !! * Substitutions 
     
    9098      INTEGER  ::   ji, jj, jk, jn   ! dummy loop indices 
    9199      REAL(wp) ::   zfact            ! local scalars 
     100      ! JT 
     101      INTEGER  ::   ios   ! dummy loop indices 
     102      REAL(wp) ::   zfreeze   ! local scalars 
     103      ! JT 
    92104      REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) ::   ztrdt, ztrds 
    93105      !!---------------------------------------------------------------------- 
     
    99111         IF(lwp) WRITE(numout,*) 'tra_nxt : achieve the time stepping by Asselin filter and array swap' 
    100112         IF(lwp) WRITE(numout,*) '~~~~~~~' 
     113 
     114 
     115          
     116 
     117          NAMELIST/nam_tranxticing/ nn_tranxticing 
     118 
     119          REWIND ( numnam_ref )              ! Read Namelist nam_diatmb in referdiatmbence namelist : TMB diagnostics 
     120          READ   ( numnam_ref, nam_tranxticing, IOSTAT=ios, ERR= 901 ) 
     121901       IF( ios /= 0 ) CALL ctl_nam ( ios , 'nam_tranxticing in reference namelist' ) 
     122 
     123          REWIND( numnam_cfg )              ! Namelist nam_diatmb in configuration namelist  TMB diagnostics 
     124          READ  ( numnam_cfg, nam_tranxticing, IOSTAT = ios, ERR = 902 ) 
     125902       IF( ios > 0 ) CALL ctl_nam ( ios , 'nam_tranxticing in configuration namelist' ) 
     126          IF(lwm) WRITE ( numond, nam_tranxticing ) 
     127 
     128          IF(lwp) THEN                   ! Control print 
     129              WRITE(numout,*) 
     130              WRITE(numout,*) 'tra_nxt : Catching Icing' 
     131              WRITE(numout,*) '~~~~~~~~~~~~' 
     132              WRITE(numout,*) 'Namelist nam_tranxticing : catch freezing points ' 
     133              WRITE(numout,*) 'Int switch for icing catch (0=Off; 1=Error; 2 Warn (verbose); 3 Warn (Quiet); nn_tranxticing  = ', nn_tranxticing 
     134          ENDIF 
     135       
     136          
     137  
     138 
     139 
    101140      ENDIF 
    102141 
     
    168207         ! 
    169208      ENDIF      
    170       ! 
     209      !JT 
     210      ! 
     211#if ( ! defined key_lim3 && ! defined key_lim2 && ! key_cice ) 
     212 
     213      IF (nn_tranxticing .GT. 0) THEN 
     214        IF ( kt == nit000 ) warn_1=0  
     215        warn_2=0  
     216        DO jk = 1, jpkm1  
     217          DO jj = 1, jpj  
     218            DO ji = 1, jpi  
     219              IF ( tsa(ji,jj,jk,jp_tem) .lt. 0.0 ) THEN  
     220                ! calculate the freezing point 
     221                zfreeze = ( -0.0575_wp + 1.710523E-3 * Sqrt (Abs(tsn(ji,jj,jk,jp_sal)))   &  
     222                          - 2.154996E-4 * tsn(ji,jj,jk,jp_sal) ) * tsn(ji,jj,jk,jp_sal) - 7.53E-4 * ( 10.0_wp + gdept_n(ji,jj,jk) )  
     223                IF ( tsn(ji,jj,jk,jp_tem) .lt. zfreeze ) THEN 
     224                    IF (nn_tranxticing .lt. 3) THEN 
     225                   
     226                      WRITE(numout,300) ' tranxticing: ', &  
     227                      &   kt,zfreeze,tsn(ji,jj,jk,jp_tem),ji,jj,jk,narea,ji-1+njmpp-1+jpjglo,jj-1+nimpp-1+jpiglo 
     228                      !JT &   kt,zfreeze,tsn(ji,jj,jk,jp_tem),ji,jj,jk,narea,ji-1+njmpp-1+jpjzoom,jj-1+nimpp-1+jpizoom 
     229 
     230300 FORMAT(A14,1X,I7,1X,f9.2,1X,f9.2,1X,I4,1X,I4,1X,I4,1X,I4,1X,I4,1X,I4) 
     231                                         
     232                    ENDIF 
     233                    tsn(ji,jj,jk,jp_tem)=zfreeze  
     234                    warn_2=1  
     235                ENDIF 
     236              ENDIF 
     237            END DO 
     238          END DO 
     239        END DO 
     240 
     241 
     242      !CALL mpp_max('warn_1')  
     243      !CALL mpp_max('warn_2')  
     244      !  IF ( (warn_1 == 0) .AND. (warn_2 /= 0) ) THEN 
     245      !    IF(lwp) THEN 
     246      !     
     247      !      IF (nn_tranxticing .GT. 1) CALL ctl_warn( ' tranxticing: Temperatures dropping below freezing point, ', &  
     248      !                &    ' being forced to freezing point, no longer conservative' )  
     249      !                 
     250      !      IF (nn_tranxticing .EQ. 1) CALL ctl_stop( ' tranxticing: Temperatures dropping below freezing point, ', &  
     251      !                &    ' being forced to freezing point, no longer conservative' )  
     252      !                 
     253      !    ENDIF 
     254      !    warn_1=1  
     255      !  ENDIF  
     256 
     257      ENDIF  
     258#endif   
     259      !JT 
     260       
    171261      IF( l_trdtra .AND. ln_linssh ) THEN      ! trend of the Asselin filter (tb filtered - tb)/dt      
    172262         zfact = 1._wp / r2dt              
Note: See TracChangeset for help on using the changeset viewer.