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 15384 – NEMO

Changeset 15384


Ignore:
Timestamp:
2021-10-15T14:53:30+02:00 (3 years ago)
Author:
hadjt
Message:

Kara MLD code removed, as redundant

Location:
NEMO/branches/UKMO/NEMO_4.0.4_CO9_shelf_climate/src/OCE
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/UKMO/NEMO_4.0.4_CO9_shelf_climate/src/OCE/DIA/diaregmean.F90

    r15381 r15384  
    1010   USE in_out_manager  ! I/O units 
    1111   USE iom             ! I/0 library 
    12    !JT USE wrk_nemo        ! working arrays 
    1312   USE diapea          ! PEA 
    1413   USE zdfmxl          ! MLD 
     
    3837   LOGICAL :: ln_diaregmean_diaar5      ! region mean calculation including AR5 SLR terms 
    3938   LOGICAL :: ln_diaregmean_diasbc      ! region mean calculation including Surface BC 
    40    LOGICAL :: ln_diaregmean_karamld     ! region mean calculation including kara mld terms 
     39   LOGICAL :: ln_diaregmean_mld         ! region mean calculation including kara mld terms 
    4140   LOGICAL :: ln_diaregmean_pea         ! region mean calculation including pea terms 
    4241   INTEGER :: nn_diaregmean_nhourlymean ! region mean number of hours in mean (normally 1., <0 = instantanous (slower)) 
     
    103102#if defined key_fabm 
    104103      NAMELIST/nam_diaregmean/ ln_diaregmean,nn_regions_output,ln_diaregmean_verbose, ln_diaregmean_ascii,ln_diaregmean_bin,ln_diaregmean_nc,& 
    105         & ln_diaregmean_karamld, ln_diaregmean_pea,ln_diaregmean_diaar5,ln_diaregmean_diasbc,ln_diaregmean_bgc,& 
     104        & ln_diaregmean_mld, ln_diaregmean_pea,ln_diaregmean_diaar5,ln_diaregmean_diasbc,ln_diaregmean_bgc,& 
    106105        & nn_diaregmean_nhourlymean,ln_diaregmean_areawgt 
    107106#else 
    108107      NAMELIST/nam_diaregmean/ ln_diaregmean,nn_regions_output,ln_diaregmean_verbose, ln_diaregmean_ascii,ln_diaregmean_bin,ln_diaregmean_nc,& 
    109         & ln_diaregmean_karamld, ln_diaregmean_pea,ln_diaregmean_diaar5,ln_diaregmean_diasbc,& 
     108        & ln_diaregmean_mld, ln_diaregmean_pea,ln_diaregmean_diaar5,ln_diaregmean_diasbc,& 
    110109        & nn_diaregmean_nhourlymean,ln_diaregmean_areawgt 
    111110#endif 
     
    135134          WRITE(numout,*) 'Switch for regmean binary output (T) or not (F)  ln_diaregmean_bin  = ', ln_diaregmean_bin 
    136135          WRITE(numout,*) 'Switch for regmean netcdf output (T) or not (F)  ln_diaregmean_nc  = ', ln_diaregmean_nc 
    137           WRITE(numout,*) 'Switch for regmean kara mld terms (T) or not (F)  ln_diaregmean_karamld  = ', ln_diaregmean_karamld 
     136          WRITE(numout,*) 'Switch for regmean kara mld terms (T) or not (F)  ln_diaregmean_mld  = ', ln_diaregmean_mld 
    138137          WRITE(numout,*) 'Switch for regmean PEA terms (T) or not (F)  ln_diaregmean_pea  = ', ln_diaregmean_pea 
    139138          WRITE(numout,*) 'Switch for regmean AR5 SLR terms (T) or not (F)  ln_diaregmean_diaar5  = ', ln_diaregmean_diaar5 
     
    648647 
    649648         
    650         IF( ln_diaregmean_karamld  ) THEN 
    651             tmp_field_mat(:,:,16) = tmp_field_mat(:,:,16) + (hmld_kara(:,:)*tmask(:,:,1)) !mldkara 
     649        IF( ln_diaregmean_mld  ) THEN 
     650            IF( ALLOCATED( hmld_zint ) )  THEN 
     651                tmp_field_mat(:,:,16) = tmp_field_mat(:,:,16) + (hmld_zint(:,:)*tmask(:,:,1)) !mldkara 
     652            ENDIF 
    652653        ENDIF 
    653654 
    654         name_dat_mat(16) = 'mldkara' 
     655        name_dat_mat(16) = 'mld' 
    655656         
    656657        IF( ln_diaregmean_pea  ) THEN 
     
    711712 
    712713               IF (vi == 16) THEN 
    713                  IF( .not. ln_diaregmean_karamld ) do_reg_mean = .FALSE.    
     714                 IF( .not. ln_diaregmean_mld ) do_reg_mean = .FALSE.    
    714715               ENDIF  
    715716 
     
    733734                    ENDIF 
    734735                !ELSE 
    735                     !WRITE(numout,*)  'JT dia_regmean SBC variable - no do_reg_mean: ',TRIM( name_dat_mat(vi) ),';',ln_diaregmean_karamld,ln_diaregmean_pea 
     736                    !WRITE(numout,*)  'JT dia_regmean SBC variable - no do_reg_mean: ',TRIM( name_dat_mat(vi) ),';',ln_diaregmean_mld,ln_diaregmean_pea 
    736737                ENDIF 
    737738                tmp_name="" 
  • NEMO/branches/UKMO/NEMO_4.0.4_CO9_shelf_climate/src/OCE/IOM/iom.F90

    r15378 r15384  
    134134      LOGICAL :: ln_diaregmean_bin  ! region mean calculation binary output 
    135135      LOGICAL :: ln_diaregmean_nc  ! region mean calculation netcdf output 
    136       LOGICAL :: ln_diaregmean_karamld  ! region mean calculation including kara mld terms 
     136      LOGICAL :: ln_diaregmean_mld  ! region mean calculation including kara mld terms 
    137137      LOGICAL :: ln_diaregmean_pea  ! region mean calculation including pea terms 
    138138      LOGICAL :: ln_diaregmean_diaar5  ! region mean calculation including AR5 SLR terms 
     
    170170#if defined key_fabm 
    171171      NAMELIST/nam_diaregmean/ ln_diaregmean,nn_regions_output,ln_diaregmean_verbose, ln_diaregmean_ascii,ln_diaregmean_bin,ln_diaregmean_nc,& 
    172         & ln_diaregmean_karamld, ln_diaregmean_pea,ln_diaregmean_diaar5,ln_diaregmean_diasbc,ln_diaregmean_bgc,& 
     172        & ln_diaregmean_mld, ln_diaregmean_pea,ln_diaregmean_diaar5,ln_diaregmean_diasbc,ln_diaregmean_bgc,& 
    173173        & nn_diaregmean_nhourlymean,ln_diaregmean_areawgt 
    174174#else 
    175175      NAMELIST/nam_diaregmean/ ln_diaregmean,nn_regions_output,ln_diaregmean_verbose, ln_diaregmean_ascii,ln_diaregmean_bin,ln_diaregmean_nc,& 
    176         & ln_diaregmean_karamld, ln_diaregmean_pea,ln_diaregmean_diaar5,ln_diaregmean_diasbc,& 
     176        & ln_diaregmean_mld, ln_diaregmean_pea,ln_diaregmean_diaar5,ln_diaregmean_diasbc,& 
    177177        & nn_diaregmean_nhourlymean,ln_diaregmean_areawgt 
    178178#endif 
  • NEMO/branches/UKMO/NEMO_4.0.4_CO9_shelf_climate/src/OCE/ZDF/zdfmxl.F90

    r15383 r15384  
    2222   USE iom            ! I/O library 
    2323   USE lib_mpp        ! MPP library 
    24    !JT 
    25    USE lbclnk         ! (or mpp link) 
    26    !JT 
    27  
     24   
    2825   IMPLICIT NONE 
    2926   PRIVATE 
     
    4037   LOGICAL, PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:)  :: ll_belowml ! Flag points below mixed layer when ll_found=F 
    4138 
    42    !JT 
    43    REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   hmld_kara  !: mixed layer depth of Kara et al   [m] 
    44  
    45  
    46  
    47    ! Namelist variables for  namzdf_karaml 
    48    LOGICAL   :: ln_kara            ! Logical switch for calculating kara mixed 
    49                                      ! layer 
    50    LOGICAL   :: ln_kara_write25h   ! Logical switch for 25 hour outputs 
    51    INTEGER   :: jpmld_type         ! mixed layer type 
    52    REAL(wp)  :: ppz_ref            ! depth of initial T_ref 
    53    REAL(wp)  :: ppdT_crit          ! Critical temp diff 
    54    REAL(wp)  :: ppiso_frac         ! Fraction of ppdT_crit used 
    55  
    56    !Used for 25h mean 
    57    LOGICAL, PRIVATE :: kara_25h_init = .TRUE.   !Logical used to initalise 25h 
    58                                                 !outputs. Necissary, because we need to 
    59                                                 !initalise the kara_25h on the zeroth 
    60                                                 !timestep (i.e in the nemogcm_init call) 
    61    REAL, PRIVATE, ALLOCATABLE, DIMENSION(:,:) :: hmld_kara_25h 
    62  
    63  
    64  
    65    !JT 
    66  
     39    
    6740   REAL(wp), PUBLIC ::   rho_c = 0.01_wp    !: density criterion for mixed layer depth 
    6841   REAL(wp), PUBLIC ::   avt_c = 5.e-4_wp   ! Kz criterion for the turbocline depth 
     
    155128      END DO 
    156129      ! depth of the mixing and mixed layers 
    157       !JT 
    158       CALL zdf_mxl_kara( kt ) ! kara MLD 
    159       !JT 
    160  
    161130      DO jj = 1, jpj 
    162131         DO ji = 1, jpi 
     
    521490   END SUBROUTINE zdf_mxl_zint 
    522491 
    523  
    524  
    525    SUBROUTINE zdf_mxl_kara( kt ) 
    526       !!---------------------------------------------------------------------------------- 
    527       !!                    ***  ROUTINE zdf_mxl_kara  *** 
    528       ! 
    529       !   Calculate mixed layer depth according to the definition of 
    530       !   Kara et al, 2000, JGR, 105, 16803. 
    531       ! 
    532       !   If mld_type=1 the mixed layer depth is calculated as the depth at which the 
    533       !   density has increased by an amount equivalent to a temperature difference of 
    534       !   0.8C at the surface. 
    535       ! 
    536       !   For other values of mld_type the mixed layer is calculated as the depth at 
    537       !   which the temperature differs by 0.8C from the surface temperature. 
    538       ! 
    539       !   Original version: David Acreman 
    540       ! 
    541       !!----------------------------------------------------------------------------------- 
    542  
    543       INTEGER, INTENT( in ) ::   kt   ! ocean time-step index 
    544  
    545       NAMELIST/namzdf_karaml/ ln_kara,jpmld_type, ppz_ref, ppdT_crit, & 
    546       &                       ppiso_frac, ln_kara_write25h 
    547  
    548       ! Local variables 
    549       REAL, DIMENSION(jpi,jpk) :: ppzdep      ! depth for use in calculating d(rho) 
    550       REAL(wp), DIMENSION(jpi,jpj,jpts) :: ztsn_2d  !Local version of tsn 
    551       INTEGER, DIMENSION(jpi,jpj) :: ikmt       ! number of active tracer levels 
    552       LOGICAL :: ll_found(jpi,jpj)              ! Is T_b to be found by interpolation ? 
    553       LOGICAL :: ll_belowml(jpi,jpj,jpk)        ! Flag points below mixed layer when ll_found=F 
    554       INTEGER :: ji, jj, jk                     ! loop counter 
    555       INTEGER :: ik_ref(jpi,jpj)                ! index of reference level 
    556       INTEGER :: ik_iso(jpi,jpj)                ! index of last uniform temp level 
    557       REAL    :: zT(jpi,jpj,jpk)                ! Temperature or denisty 
    558       REAL    :: zT_ref(jpi,jpj)                ! reference temperature 
    559       REAL    :: zT_b                           ! base temperature 
    560       REAL    :: zdTdz(jpi,jpj,jpk-2)           ! gradient of zT 
    561       REAL    :: zmoddT(jpi,jpj,jpk-2)          ! Absolute temperature difference 
    562       REAL    :: zdz                            ! depth difference 
    563       REAL    :: zdT                            ! temperature difference 
    564       REAL    :: zdelta_T(jpi,jpj)              ! difference critereon 
    565       REAL    :: zRHO1(jpi,jpj), zRHO2(jpi,jpj) ! Densities 
    566       INTEGER, SAVE :: idt, i_steps 
    567       INTEGER, SAVE :: i_cnt_25h     ! Counter for 25 hour means 
    568       INTEGER :: ios                 ! Local integer output status for namelist read 
    569  
    570  
    571  
    572       !!------------------------------------------------------------------------------------- 
    573  
    574       IF( kt == nit000 ) THEN 
    575          ! Default values 
    576          ln_kara      = .FALSE. 
    577          ln_kara_write25h = .FALSE. 
    578          jpmld_type   = 1 
    579          ppz_ref      = 10.0 
    580          ppdT_crit    = 0.2 
    581          ppiso_frac   = 0.1 
    582          ! Read namelist 
    583          REWIND ( numnam_ref ) 
    584          READ   ( numnam_ref, namzdf_karaml, IOSTAT=ios, ERR= 901 ) 
    585 901      IF( ios /= 0 ) CALL ctl_nam ( ios , 'namzdf_karaml in reference namelist' ) 
    586  
    587          REWIND( numnam_cfg )              ! Namelist nam_diadiaop in configuration namelist  3D hourly diagnostics 
    588          READ  ( numnam_cfg,  namzdf_karaml, IOSTAT = ios, ERR = 902 ) 
    589 902      IF( ios > 0 ) CALL ctl_nam ( ios , 'namzdf_karaml in configuration namelist' ) 
    590          IF(lwm) WRITE ( numond, namzdf_karaml ) 
    591  
    592  
    593          WRITE(numout,*) '===== Kara mixed layer =====' 
    594          WRITE(numout,*) 'ln_kara = ',    ln_kara 
    595          WRITE(numout,*) 'jpmld_type = ', jpmld_type 
    596          WRITE(numout,*) 'ppz_ref = ',    ppz_ref 
    597          WRITE(numout,*) 'ppdT_crit = ',  ppdT_crit 
    598          WRITE(numout,*) 'ppiso_frac = ', ppiso_frac 
    599          WRITE(numout,*) 'ln_kara_write25h = ', ln_kara_write25h 
    600          WRITE(numout,*) '============================' 
    601  
    602          IF ( .NOT.ln_kara ) THEN 
    603             WRITE(numout,*) "ln_kara not set; Kara mixed layer not calculated" 
    604          ELSE 
    605             IF (.NOT. ALLOCATED(hmld_kara) ) ALLOCATE( hmld_kara(jpi,jpj) ) 
    606             IF ( ln_kara_write25h .AND. kara_25h_init ) THEN 
    607                i_cnt_25h = 0 
    608                IF (.NOT. ALLOCATED(hmld_kara_25h) ) & 
    609                &   ALLOCATE( hmld_kara_25h(jpi,jpj) ) 
    610                hmld_kara_25h = 0._wp 
    611                !IF( nacc == 1 ) THEN 
    612                !   idt = INT(rdtmin) 
    613                !ELSE 
    614                !   idt = INT(rdt) 
    615                !ENDIF 
    616  
    617               idt = INT(rdt) 
    618                IF( MOD( 3600,idt) == 0 ) THEN 
    619                   i_steps = 3600 / idt 
    620                ELSE 
    621                   CALL ctl_stop('STOP', & 
    622                   & 'zdf_mxl_kara: timestep must give MOD(3600,rdt)'// & 
    623                   & ' = 0 otherwise no hourly values are possible') 
    624                ENDIF 
    625             ENDIF 
    626          ENDIF 
    627       ENDIF 
    628  
    629       IF ( ln_kara ) THEN 
    630  
    631          !set critical ln_kara 
    632          ztsn_2d = tsn(:,:,1,:) 
    633          ztsn_2d(:,:,jp_tem) = ztsn_2d(:,:,jp_tem) + ppdT_crit 
    634  
    635          ! Set the mixed layer depth criterion at each grid point 
    636          ppzdep = 0._wp 
    637          IF( jpmld_type == 1 ) THEN 
    638             CALL eos ( tsn(:,:,1,:), & 
    639             &          ppzdep(:,:), zRHO1(:,:) ) 
    640             CALL eos ( ztsn_2d(:,:,:), & 
    641             &           ppzdep(:,:), zRHO2(:,:) ) 
    642             zdelta_T(:,:) = abs( zRHO1(:,:) - zRHO2(:,:) ) * rau0 
    643             ! RHO from eos (2d version) doesn't calculate north or east halo: 
    644             CALL lbc_lnk( 'zdf_mxl_kara',zdelta_T, 'T', 1. ) 
    645             zT(:,:,:) = rhop(:,:,:) 
    646          ELSE 
    647             zdelta_T(:,:) = ppdT_crit 
    648             zT(:,:,:) = tsn(:,:,:,jp_tem) 
    649          ENDIF 
    650  
    651          ! Calculate the gradient of zT and absolute difference for use later 
    652          DO jk = 1 ,jpk-2 
    653             zdTdz(:,:,jk)  =    ( zT(:,:,jk+1) - zT(:,:,jk) ) / e3w_n(:,:,jk+1) 
    654             zmoddT(:,:,jk) = abs( zT(:,:,jk+1) - zT(:,:,jk) ) 
    655          END DO 
    656  
    657          ! Find density/temperature at the reference level (Kara et al use 10m). 
    658          ! ik_ref is the index of the box centre immediately above or at the reference level 
    659          ! Find ppz_ref in the array of model level depths and find the ref 
    660          ! density/temperature by linear interpolation. 
    661          ik_ref = -1 
    662          DO jk = jpkm1, 2, -1 
    663             WHERE( gdept_n(:,:,jk) > ppz_ref ) 
    664                ik_ref(:,:) = jk - 1 
    665                zT_ref(:,:) = zT(:,:,jk-1) + & 
    666                &             zdTdz(:,:,jk-1) * ( ppz_ref - gdept_n(:,:,jk-1) ) 
    667             ENDWHERE 
    668          END DO 
    669          IF ( ANY( ik_ref  < 0 ) .OR. ANY( ik_ref  > jpkm1 ) ) THEN 
    670             CALL ctl_stop( "STOP", & 
    671             & "zdf_mxl_kara: unable to find reference level for kara ML" ) 
    672          ELSE 
    673             ! If the first grid box centre is below the reference level then use the 
    674             ! top model level to get zT_ref 
    675             WHERE( gdept_n(:,:,1) > ppz_ref ) 
    676                zT_ref = zT(:,:,1) 
    677                ik_ref = 1 
    678             ENDWHERE 
    679  
    680             ! The number of active tracer levels is 1 less than the number of active w levels 
    681             ikmt(:,:) = mbkt(:,:) - 1 
    682  
    683             ! Search for a uniform density/temperature region where adjacent levels 
    684             ! differ by less than ppiso_frac * deltaT. 
    685             ! ik_iso is the index of the last level in the uniform layer 
    686             ! ll_found indicates whether the mixed layer depth can be found by interpolation 
    687             ik_iso(:,:)   = ik_ref(:,:) 
    688             ll_found(:,:) = .false. 
    689             DO jj = 1, nlcj 
    690                DO ji = 1, nlci 
    691                  !CDIR NOVECTOR 
    692                   DO jk = ik_ref(ji,jj),  ikmt(ji,jj)-1 ! mbkt(ji,jj)-1  !mbathy(ji,jj)-1 
    693                      IF( zmoddT(ji,jj,jk) > ( ppiso_frac * zdelta_T(ji,jj) ) ) THEN 
    694                         ik_iso(ji,jj)   = jk 
    695                         ll_found(ji,jj) = ( zmoddT(ji,jj,jk) > zdelta_T(ji,jj) ) 
    696                         EXIT 
    697                      ENDIF 
    698                   END DO 
    699                END DO 
    700             END DO 
    701  
    702             ! Use linear interpolation to find depth of mixed layer base where possible 
    703             hmld_kara(:,:) = ppz_ref 
    704             DO jj = 1, jpj 
    705                DO ji = 1, jpi 
    706                   IF( ll_found(ji,jj) .and. tmask(ji,jj,1) == 1.0 ) THEN 
    707                      zdz =  abs( zdelta_T(ji,jj) / zdTdz(ji,jj,ik_iso(ji,jj)) ) 
    708                      hmld_kara(ji,jj) = gdept_n(ji,jj,ik_iso(ji,jj)) + zdz 
    709                   ENDIF 
    710                END DO 
    711             END DO 
    712  
    713             ! If ll_found = .false. then calculate MLD using difference of zdelta_T 
    714             ! from the reference density/temperature 
    715  
    716             ! Prevent this section from working on land points 
    717             WHERE( tmask(:,:,1) /= 1.0 ) 
    718                ll_found = .true. 
    719             ENDWHERE 
    720  
    721             DO jk = 1, jpk 
    722                ll_belowml(:,:,jk) = abs( zT(:,:,jk) - zT_ref(:,:) ) >= & 
    723                & zdelta_T(:,:) 
    724             END DO 
    725  
    726             ! Set default value where interpolation cannot be used (ll_found=false) 
    727             DO jj = 1, jpj 
    728                DO ji = 1, jpi 
    729                   IF( .NOT. ll_found(ji,jj) )  & 
    730                   &   hmld_kara(ji,jj) = gdept_n(ji,jj,ikmt(ji,jj)) ! mbkt(ji,jj))! mbathy(ji,jj)) 
    731                END DO 
    732             END DO 
    733  
    734             DO jj = 1, jpj 
    735                DO ji = 1, jpi 
    736                   !CDIR NOVECTOR 
    737                   DO jk = ik_ref(ji,jj)+1, ikmt(ji,jj) !mbkt(ji,jj) !mbathy(ji,jj) 
    738                      IF( ll_found(ji,jj) ) EXIT 
    739                      IF( ll_belowml(ji,jj,jk) ) THEN 
    740                         zT_b = zT_ref(ji,jj) + zdelta_T(ji,jj) * & 
    741                         &      SIGN(1.0, zdTdz(ji,jj,jk-1) ) 
    742                         zdT  = zT_b - zT(ji,jj,jk-1) 
    743                         zdz  = zdT / zdTdz(ji,jj,jk-1) 
    744                         hmld_kara(ji,jj) = gdept_n(ji,jj,jk-1) + zdz 
    745                         EXIT 
    746                      ENDIF 
    747                   END DO 
    748                END DO 
    749             END DO 
    750  
    751             hmld_kara(:,:) = hmld_kara(:,:) * tmask(:,:,1) 
    752  
    753             IF(  ln_kara_write25h  ) THEN 
    754                !Double IF required as i_steps not defined if ln_kara_write25h = 
    755                ! FALSE 
    756                IF ( ( MOD( kt, i_steps ) == 0 ) .OR.  kara_25h_init ) THEN 
    757                   hmld_kara_25h = hmld_kara_25h + hmld_kara 
    758                   i_cnt_25h = i_cnt_25h + 1 
    759                   IF ( kara_25h_init ) kara_25h_init = .FALSE. 
    760                ENDIF 
    761             ENDIF 
    762  
    763 !#if defined key_iomput 
    764             IF( kt /= nit000 ) THEN 
    765                CALL iom_put( "mldkara"  , hmld_kara ) 
    766                IF( ( MOD( i_cnt_25h, 25) == 0 ) .AND.  ln_kara_write25h ) & 
    767                   CALL iom_put( "kara25h"  , ( hmld_kara_25h / 25._wp ) ) 
    768             ENDIF 
    769 !#endif 
    770  
    771          ENDIF 
    772       ENDIF 
    773  
    774    END SUBROUTINE zdf_mxl_kara 
    775  
    776492   !!====================================================================== 
    777493END MODULE zdfmxl 
Note: See TracChangeset for help on using the changeset viewer.