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 13830 for NEMO/branches/2020/dev_r13648_ASINTER-04_laurent_bulk_ice/src/OCE/SBC/sbcblk_algo_ice_an05.F90 – NEMO

Ignore:
Timestamp:
2020-11-19T13:31:18+01:00 (4 years ago)
Author:
laurent
Message:

Sea-ice bulk algorithm "AN05" (Andreas et al. 2005) now operational!

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2020/dev_r13648_ASINTER-04_laurent_bulk_ice/src/OCE/SBC/sbcblk_algo_ice_an05.F90

    r13820 r13830  
    1919   !!---------------------------------------------------------------------- 
    2020   USE par_kind, ONLY: wp 
    21    USE par_oce,  ONLY: jpi, jpj 
     21   USE par_oce,  ONLY: jpi, jpj, Nis0, Nie0, Njs0, Nje0, nn_hls 
     22   USE lib_mpp,  ONLY: ctl_stop         ! distribued memory computing library 
    2223   USE phycst          ! physical constants 
    2324   USE sbc_phy         ! Catalog of functions for physical/meteorological parameters in the marine boundary layer 
    24    !USE sbcblk_algo_ice_cdn 
    2525 
    2626   IMPLICIT NONE 
     
    3131   INTEGER , PARAMETER ::   nbit = 8        ! number of itterations 
    3232 
     33   !! * Substitutions 
     34#  include "do_loop_substitute.h90" 
    3335   !!---------------------------------------------------------------------- 
    3436CONTAINS 
    3537 
    36    SUBROUTINE turb_ice_an05( zt, zu, Ts_i, t_zt, qs_i, q_zt, U_zu,         & 
    37       &                      Cd_i, Ch_i, Ce_i, t_zu_i, q_zu_i,             & 
     38   SUBROUTINE turb_ice_an05( zt, zu, Ts_i, t_zt, qs_i, q_zt, U_zu,        & 
     39      &                      Cd_i, Ch_i, Ce_i, t_zu_i, q_zu_i,            & 
    3840      &                      CdN, ChN, CeN, xz0, xu_star, xL, xUN10 ) 
    3941      !!---------------------------------------------------------------------- 
     
    100102      !!---------------------------------------------------------------------------------- 
    101103      REAL(wp), DIMENSION(:,:), ALLOCATABLE :: Ubzu 
     104      REAL(wp), DIMENSION(:,:), ALLOCATABLE :: ztmp0, ztmp1, ztmp2      ! temporary stuff 
     105      REAL(wp), DIMENSION(:,:), ALLOCATABLE :: z0, dt_zu, dq_zu 
    102106      REAL(wp), DIMENSION(:,:), ALLOCATABLE :: u_star, t_star, q_star 
    103       REAL(wp), DIMENSION(:,:), ALLOCATABLE :: dt_zu, dq_zu 
    104       REAL(wp), DIMENSION(:,:), ALLOCATABLE :: znu_a !: Nu_air = kinematic viscosity of air 
    105       REAL(wp), DIMENSION(:,:), ALLOCATABLE :: z0 
     107      REAL(wp), DIMENSION(:,:), ALLOCATABLE :: znu_a                    !: Nu_air = kinematic viscosity of air 
     108      REAL(wp), DIMENSION(:,:), ALLOCATABLE :: zeta_u, zeta_t           ! stability parameter at height zu 
    106109      REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: z0tq 
    107       REAL(wp), DIMENSION(:,:), ALLOCATABLE :: zeta_u        ! stability parameter at height zu 
    108       REAL(wp), DIMENSION(:,:), ALLOCATABLE :: zeta_t        ! stability parameter at height zt 
    109       REAL(wp), DIMENSION(:,:), ALLOCATABLE :: ztmp0, ztmp1, ztmp2 
    110110      !! 
    111111      INTEGER :: jit 
     
    117117      CHARACTER(len=40), PARAMETER :: crtnm = 'turb_ice_an05@sbcblk_algo_ice_an05.f90' 
    118118      !!---------------------------------------------------------------------------------- 
    119       ALLOCATE ( Ubzu(jpi,jpj), u_star(jpi,jpj), t_star(jpi,jpj),  q_star(jpi,jpj),  & 
    120          &       zeta_u(jpi,jpj),  dt_zu(jpi,jpj),   dq_zu(jpi,jpj),  & 
    121          &        znu_a(jpi,jpj),  ztmp1(jpi,jpj),   ztmp2(jpi,jpj),  & 
    122          &           z0(jpi,jpj),   z0tq(jpi,jpj,2), ztmp0(jpi,jpj)   ) 
    123  
    124       IF( PRESENT(CdN) )     lreturn_cdn   = .TRUE. 
    125       IF( PRESENT(ChN) )     lreturn_chn   = .TRUE. 
    126       IF( PRESENT(CeN) )     lreturn_cen   = .TRUE. 
    127       IF( PRESENT(xz0) )     lreturn_z0    = .TRUE. 
    128       IF( PRESENT(xu_star) ) lreturn_ustar = .TRUE. 
    129       IF( PRESENT(xL) )      lreturn_L     = .TRUE. 
    130       IF( PRESENT(xUN10) )   lreturn_UN10  = .TRUE. 
     119      ALLOCATE (  Ubzu(jpi,jpj), u_star(jpi,jpj), t_star(jpi,jpj),  q_star(jpi,jpj),  & 
     120         &      zeta_u(jpi,jpj),  dt_zu(jpi,jpj),   dq_zu(jpi,jpj),  & 
     121         &       znu_a(jpi,jpj),  ztmp1(jpi,jpj),   ztmp2(jpi,jpj),  & 
     122         &          z0(jpi,jpj),   z0tq(jpi,jpj,2), ztmp0(jpi,jpj)   ) 
     123 
     124      lreturn_cdn   = PRESENT(CdN) 
     125      lreturn_chn   = PRESENT(ChN) 
     126      lreturn_cen   = PRESENT(CeN) 
     127      lreturn_z0    = PRESENT(xz0) 
     128      lreturn_ustar = PRESENT(xu_star) 
     129      lreturn_L     = PRESENT(xL) 
     130      lreturn_UN10  = PRESENT(xUN10) 
    131131 
    132132      l_zt_equal_zu = ( ABS(zu - zt) < 0.01_wp ) 
    133133      IF( .NOT. l_zt_equal_zu )  ALLOCATE( zeta_t(jpi,jpj) ) 
    134  
    135134 
    136135      !! Scalar wind speed cannot be below 0.2 m/s 
     
    162161      t_star = dt_zu*vkarmn/(LOG(zu/z0tq(:,:,1))) 
    163162      q_star = dq_zu*vkarmn/(LOG(zu/z0tq(:,:,2))) 
    164  
    165  
    166  
     163       
     164       
    167165      !! ITERATION BLOCK 
    168166      DO jit = 1, nbit 
     
    217215      IF( lreturn_UN10 )  xUN10   = u_star/vkarmn*LOG(10./z0) 
    218216 
    219       DEALLOCATE ( u_star, t_star, q_star, zeta_u, dt_zu, dq_zu, z0, z0tq, znu_a, ztmp0, ztmp1, ztmp2 ) 
     217      DEALLOCATE ( Ubzu, u_star, t_star, q_star, zeta_u, dt_zu, dq_zu, z0, z0tq, znu_a, ztmp0, ztmp1, ztmp2 ) 
    220218      IF( .NOT. l_zt_equal_zu ) DEALLOCATE( zeta_t ) 
    221219 
     
    243241 
    244242            rough_leng_m(ji,jj) = 0.135*pnua(ji,jj)/zus + 0.035*zus*zus/grav*( 5.*EXP(-zz*zz) + 1._wp ) ! Eq.(19) Andreas et al., 2005 
    245  
    246243      END_2D 
    247244      !! 
Note: See TracChangeset for help on using the changeset viewer.