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 11963 for NEMO/branches/2019/dev_r11085_ASINTER-05_Brodeau_Advanced_Bulk/src/OCE/SBC/sbcblk_algo_ecmwf.F90 – NEMO

Ignore:
Timestamp:
2019-11-26T12:08:01+01:00 (4 years ago)
Author:
laurent
Message:

More accurate comments/info, better syntax, simplifications, etc

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2019/dev_r11085_ASINTER-05_Brodeau_Advanced_Bulk/src/OCE/SBC/sbcblk_algo_ecmwf.F90

    r11962 r11963  
    7474      INTEGER :: ierr 
    7575      !!--------------------------------------------------------------------- 
    76       IF ( l_use_wl ) THEN 
     76      IF( l_use_wl ) THEN 
    7777         ierr = 0 
    7878         ALLOCATE ( dT_wl(jpi,jpj), Hz_wl(jpi,jpj), STAT=ierr ) 
     
    8080         dT_wl(:,:)  = 0._wp 
    8181         Hz_wl(:,:)  = rd0 ! (rd0, constant, = 3m is default for Zeng & Beljaars) 
    82       END IF 
    83       IF ( l_use_cs ) THEN 
     82      ENDIF 
     83      IF( l_use_cs ) THEN 
    8484         ierr = 0 
    8585         ALLOCATE ( dT_cs(jpi,jpj), STAT=ierr ) 
    8686         IF( ierr > 0 ) CALL ctl_stop( ' SBCBLK_ALGO_ECMWF_INIT => allocation of dT_cs failed!' ) 
    8787         dT_cs(:,:) = -0.25_wp  ! First guess of skin correction 
    88       END IF 
     88      ENDIF 
    8989   END SUBROUTINE sbcblk_algo_ecmwf_init 
    9090 
     
    195195      !!---------------------------------------------------------------------------------- 
    196196 
    197       IF ( kt == nit000 ) CALL SBCBLK_ALGO_ECMWF_INIT(l_use_cs, l_use_wl) 
     197      IF( kt == nit000 ) CALL SBCBLK_ALGO_ECMWF_INIT(l_use_cs, l_use_wl) 
    198198 
    199199      l_zt_equal_zu = .FALSE. 
     
    201201 
    202202      !! Initializations for cool skin and warm layer: 
    203       IF ( l_use_cs .AND. (.NOT.(PRESENT(Qsw) .AND. PRESENT(rad_lw) .AND. PRESENT(slp))) ) & 
     203      IF( l_use_cs .AND. (.NOT.(PRESENT(Qsw) .AND. PRESENT(rad_lw) .AND. PRESENT(slp))) ) & 
    204204         &   CALL ctl_stop( '['//TRIM(crtnm)//'] => ' , 'you need to provide Qsw, rad_lw & slp to use cool-skin param!' ) 
    205205 
    206       IF ( l_use_wl .AND. (.NOT.(PRESENT(Qsw) .AND. PRESENT(rad_lw) .AND. PRESENT(slp))) ) & 
     206      IF( l_use_wl .AND. (.NOT.(PRESENT(Qsw) .AND. PRESENT(rad_lw) .AND. PRESENT(slp))) ) & 
    207207         &   CALL ctl_stop( '['//TRIM(crtnm)//'] => ' , 'you need to provide Qsw, rad_lw & slp to use warm-layer param!' ) 
    208208 
    209       IF ( l_use_cs .OR. l_use_wl ) THEN 
     209      IF( l_use_cs .OR. l_use_wl ) THEN 
    210210         ALLOCATE ( zsst(jpi,jpj) ) 
    211211         zsst = T_s ! backing up the bulk SST 
    212212         IF( l_use_cs ) T_s = T_s - 0.25_wp   ! First guess of correction 
    213213         q_s    = rdct_qsat_salt*q_sat(MAX(T_s, 200._wp), slp) ! First guess of q_s 
    214       END IF 
     214      ENDIF 
    215215 
    216216 
     
    270270         dt_zu = t_zu - T_s  ; dt_zu = SIGN( MAX(ABS(dt_zu),1.E-6_wp), dt_zu ) 
    271271         dq_zu = q_zu - q_s  ; dq_zu = SIGN( MAX(ABS(dq_zu),1.E-9_wp), dq_zu ) 
    272       END IF 
     272      ENDIF 
    273273 
    274274 
     
    293293         Linv = ztmp0*func_m*func_m/func_h / zu     ! From Eq. 3.23, Chap.3.2.3, IFS doc - Cy40r1 
    294294         !! Note: it is slightly different that the L we would get with the usual 
    295          Linv = SIGN( MIN(ABS(Linv),200._wp), Linv ) ! (prevent FPE from stupid values from masked region later on...) !#LOLO 
     295         Linv = SIGN( MIN(ABS(Linv),200._wp), Linv ) ! (prevent FPE from stupid values from masked region later on...) 
    296296 
    297297         !! Update func_m with new Linv: 
     
    335335            ztmp1  = LOG(zt/zu) + ztmp2 
    336336            q_zu   = q_zt - q_star/vkarmn*ztmp1 
    337          END IF 
     337         ENDIF 
    338338 
    339339         !! Updating because of updated z0 and z0t and new Linv... 
     
    355355            q_s(:,:) = rdct_qsat_salt*q_sat(MAX(T_s(:,:), 200._wp), slp(:,:)) 
    356356 
    357          END IF 
     357         ENDIF 
    358358 
    359359         IF( l_use_wl ) THEN 
     
    366366            IF( l_use_cs ) T_s(:,:) = T_s(:,:) + dT_cs(:,:)*tmask(:,:,1) 
    367367            q_s(:,:) = rdct_qsat_salt*q_sat(MAX(T_s(:,:), 200._wp), slp(:,:)) 
    368          END IF 
     368         ENDIF 
    369369 
    370370         IF( l_use_cs .OR. l_use_wl .OR. (.NOT. l_zt_equal_zu) ) THEN 
    371371            dt_zu = t_zu - T_s ;  dt_zu = SIGN( MAX(ABS(dt_zu),1.E-6_wp), dt_zu ) 
    372372            dq_zu = q_zu - q_s ;  dq_zu = SIGN( MAX(ABS(dq_zu),1.E-9_wp), dq_zu ) 
    373          END IF 
     373         ENDIF 
    374374 
    375375      END DO !DO j_itt = 1, nb_itt 
     
    384384      Cen = vkarmn*vkarmn / (log(zu/z0q)*log(zu/z0q)) 
    385385 
    386       IF ( l_use_cs .AND. PRESENT(pdT_cs) ) pdT_cs = dT_cs 
    387       IF ( l_use_wl .AND. PRESENT(pdT_wl) ) pdT_wl = dT_wl 
    388       IF ( l_use_wl .AND. PRESENT(pHz_wl) ) pHz_wl = Hz_wl 
    389  
    390       IF ( l_use_cs .OR. l_use_wl ) DEALLOCATE ( zsst ) 
     386      IF( l_use_cs .AND. PRESENT(pdT_cs) ) pdT_cs = dT_cs 
     387      IF( l_use_wl .AND. PRESENT(pdT_wl) ) pdT_wl = dT_wl 
     388      IF( l_use_wl .AND. PRESENT(pHz_wl) ) pHz_wl = Hz_wl 
     389 
     390      IF( l_use_cs .OR. l_use_wl ) DEALLOCATE ( zsst ) 
    391391 
    392392   END SUBROUTINE turb_ecmwf 
Note: See TracChangeset for help on using the changeset viewer.