Changeset 11963 for NEMO/branches/2019/dev_r11085_ASINTER-05_Brodeau_Advanced_Bulk/src/OCE/SBC/sbcblk_algo_coare3p6.F90
- Timestamp:
- 2019-11-26T12:08:01+01:00 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2019/dev_r11085_ASINTER-05_Brodeau_Advanced_Bulk/src/OCE/SBC/sbcblk_algo_coare3p6.F90
r11962 r11963 68 68 INTEGER :: ierr 69 69 !!--------------------------------------------------------------------- 70 IF 70 IF( l_use_wl ) THEN 71 71 ierr = 0 72 72 ALLOCATE ( Tau_ac(jpi,jpj) , Qnt_ac(jpi,jpj), dT_wl(jpi,jpj), Hz_wl(jpi,jpj), STAT=ierr ) … … 76 76 dT_wl(:,:) = 0._wp 77 77 Hz_wl(:,:) = Hwl_max 78 END 79 IF 78 ENDIF 79 IF( l_use_cs ) THEN 80 80 ierr = 0 81 81 ALLOCATE ( dT_cs(jpi,jpj), STAT=ierr ) 82 82 IF( ierr > 0 ) CALL ctl_stop( ' SBCBLK_ALGO_COARE3P6_INIT => allocation of dT_cs failed!' ) 83 83 dT_cs(:,:) = -0.25_wp ! First guess of skin correction 84 END 84 ENDIF 85 85 END SUBROUTINE sbcblk_algo_coare3p6_init 86 86 … … 190 190 CHARACTER(len=40), PARAMETER :: crtnm = 'turb_coare3p6@sbcblk_algo_coare3p6' 191 191 !!---------------------------------------------------------------------------------- 192 IF 192 IF( kt == nit000 ) CALL SBCBLK_ALGO_COARE3P6_INIT(l_use_cs, l_use_wl) 193 193 194 194 l_zt_equal_zu = .FALSE. … … 197 197 198 198 !! Initializations for cool skin and warm layer: 199 IF 199 IF( l_use_cs .AND. (.NOT.(PRESENT(Qsw) .AND. PRESENT(rad_lw) .AND. PRESENT(slp))) ) & 200 200 & CALL ctl_stop( '['//TRIM(crtnm)//'] => ' , 'you need to provide Qsw, rad_lw & slp to use cool-skin param!' ) 201 201 202 IF 202 IF( l_use_wl .AND. (.NOT.(PRESENT(Qsw) .AND. PRESENT(rad_lw) .AND. PRESENT(slp))) ) & 203 203 & CALL ctl_stop( '['//TRIM(crtnm)//'] => ' , 'you need to provide Qsw, rad_lw & slp to use warm-layer param!' ) 204 204 205 IF 205 IF( l_use_cs .OR. l_use_wl ) THEN 206 206 ALLOCATE ( zsst(jpi,jpj) ) 207 207 zsst = T_s ! backing up the bulk SST 208 208 IF( l_use_cs ) T_s = T_s - 0.25_wp ! First guess of correction 209 209 q_s = rdct_qsat_salt*q_sat(MAX(T_s, 200._wp), slp) ! First guess of q_s 210 END 210 ENDIF 211 211 212 212 … … 265 265 dt_zu = t_zu - T_s ; dt_zu = SIGN( MAX(ABS(dt_zu),1.E-6_wp), dt_zu ) 266 266 dq_zu = q_zu - q_s ; dq_zu = SIGN( MAX(ABS(dq_zu),1.E-9_wp), dq_zu ) 267 END 267 ENDIF 268 268 269 269 !! ITERATION BLOCK … … 288 288 zeta_t = zt*ztmp0 289 289 zeta_t = SIGN( MIN(ABS(zeta_t),50.0_wp), zeta_t ) 290 END 290 ENDIF 291 291 292 292 !! Adjustment the wind at 10m (not needed in the current algo form): 293 !IF 293 !IF( zu \= 10._wp ) U10 = U_zu + u_star/vkarmn*(LOG(10._wp/zu) - psi_m_coare(10._wp*ztmp0) + psi_m_coare(zeta_u)) 294 294 295 295 !! Roughness lengthes z0, z0t (z0q = z0t) : … … 315 315 t_zu = t_zt - t_star/vkarmn*ztmp1 316 316 q_zu = q_zt - q_star/vkarmn*ztmp1 317 END 317 ENDIF 318 318 319 319 … … 330 330 q_s(:,:) = rdct_qsat_salt*q_sat(MAX(T_s(:,:), 200._wp), slp(:,:)) 331 331 332 END 332 ENDIF 333 333 334 334 IF( l_use_wl ) THEN … … 343 343 IF( l_use_cs ) T_s(:,:) = T_s(:,:) + dT_cs(:,:)*tmask(:,:,1) 344 344 q_s(:,:) = rdct_qsat_salt*q_sat(MAX(T_s(:,:), 200._wp), slp(:,:)) 345 END 345 ENDIF 346 346 347 347 IF( l_use_cs .OR. l_use_wl .OR. (.NOT. l_zt_equal_zu) ) THEN 348 348 dt_zu = t_zu - T_s ; dt_zu = SIGN( MAX(ABS(dt_zu),1.E-6_wp), dt_zu ) 349 349 dq_zu = q_zu - q_s ; dq_zu = SIGN( MAX(ABS(dq_zu),1.E-9_wp), dq_zu ) 350 END 350 ENDIF 351 351 352 352 END DO !DO j_itt = 1, nb_itt … … 365 365 IF( .NOT. l_zt_equal_zu ) DEALLOCATE( zeta_t ) 366 366 367 IF 368 IF 369 IF 370 371 IF 367 IF( l_use_cs .AND. PRESENT(pdT_cs) ) pdT_cs = dT_cs 368 IF( l_use_wl .AND. PRESENT(pdT_wl) ) pdT_wl = dT_wl 369 IF( l_use_wl .AND. PRESENT(pHz_wl) ) pHz_wl = Hz_wl 370 371 IF( l_use_cs .OR. l_use_wl ) DEALLOCATE ( zsst ) 372 372 373 373 END SUBROUTINE turb_coare3p6
Note: See TracChangeset
for help on using the changeset viewer.