Changeset 7280 for branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC
- Timestamp:
- 2016-11-21T11:40:00+01:00 (8 years ago)
- Location:
- branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC
- Files:
-
- 3 deleted
- 40 edited
- 5 copied
Legend:
- Unmodified
- Added
- Removed
-
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/DIA/diahsb.F90
r6140 r7280 230 230 231 231 SUBROUTINE dia_hsb_rst( kt, cdrw ) 232 !!---------------------------------------------------------------------233 !! *** ROUTINE limdia_rst ***234 !!235 !! ** Purpose : Read or write DIA file in restart file236 !!237 !! ** Method : use of IOM library238 !!----------------------------------------------------------------------239 INTEGER , INTENT(in) :: kt ! ocean time-step240 CHARACTER(len=*), INTENT(in) :: cdrw ! "READ"/"WRITE" flag241 !242 INTEGER :: ji, jj, jk ! dummy loop indices243 INTEGER :: id1 ! local integers244 !!----------------------------------------------------------------------245 !246 IF( TRIM(cdrw) == 'READ' ) THEN ! Read/initialise247 IF( ln_rstart ) THEN !* Read the restart file248 !id1 = iom_varid( numror, 'frc_vol' , ldstop = .FALSE. )249 !250 IF(lwp) WRITE(numout,*) '~~~~~~~'251 IF(lwp) WRITE(numout,*) ' dia_hsb_rst at it= ', kt,' date= ', ndastp252 IF(lwp) WRITE(numout,*) '~~~~~~~'253 CALL iom_get( numror, 'frc_v', frc_v )254 CALL iom_get( numror, 'frc_t', frc_t )255 CALL iom_get( numror, 'frc_s', frc_s )256 IF( ln_linssh ) THEN257 CALL iom_get( numror, 'frc_wn_t', frc_wn_t )258 CALL iom_get( numror, 'frc_wn_s', frc_wn_s )259 ENDIF260 CALL iom_get( numror, jpdom_autoglo, 'surf_ini', surf_ini ) ! ice sheet coupling261 CALL iom_get( numror, jpdom_autoglo, 'ssh_ini', ssh_ini )262 CALL iom_get( numror, jpdom_autoglo, 'e3t_ini', e3t_ini )263 CALL iom_get( numror, jpdom_autoglo, 'hc_loc_ini', hc_loc_ini )264 CALL iom_get( numror, jpdom_autoglo, 'sc_loc_ini', sc_loc_ini )265 IF( ln_linssh ) THEN266 CALL iom_get( numror, jpdom_autoglo, 'ssh_hc_loc_ini', ssh_hc_loc_ini )267 CALL iom_get( numror, jpdom_autoglo, 'ssh_sc_loc_ini', ssh_sc_loc_ini )268 ENDIF269 ELSE270 IF(lwp) WRITE(numout,*) '~~~~~~~'271 IF(lwp) WRITE(numout,*) ' dia_hsbat initial state '272 IF(lwp) WRITE(numout,*) '~~~~~~~'273 surf_ini(:,:) = e1e2t(:,:) * tmask_i(:,:) ! initial ocean surface274 ssh_ini(:,:) = sshn(:,:) ! initial ssh275 DO jk = 1, jpk276 ! if ice sheet/oceqn coupling, need to mask ini variables here (mask could change at the next NEMO instance).277 e3t_ini (:,:,jk) = e3t_n(:,:,jk) * tmask(:,:,jk) ! initial vertical scale factors278 hc_loc_ini(:,:,jk) = tsn(:,:,jk,jp_tem) * e3t_n(:,:,jk) * tmask(:,:,jk) ! initial heat content279 sc_loc_ini(:,:,jk) = tsn(:,:,jk,jp_sal) * e3t_n(:,:,jk) * tmask(:,:,jk) ! initial salt content280 END DO281 frc_v = 0._wp ! volume trend due to forcing282 frc_t = 0._wp ! heat content - - - -283 frc_s = 0._wp ! salt content - - - -284 IF( ln_linssh ) THEN285 IF( ln_isfcav ) THEN286 DO ji=1,jpi287 DO jj=1,jpj288 ssh_hc_loc_ini(ji,jj) = tsn(ji,jj,mikt(ji,jj),jp_tem) * sshn(ji,jj) ! initial heat content in ssh289 ssh_sc_loc_ini(ji,jj) = tsn(ji,jj,mikt(ji,jj),jp_sal) * sshn(ji,jj) ! initial salt content in ssh290 ENDDO291 ENDDO292 ELSE293 ssh_hc_loc_ini(:,:) = tsn(:,:,1,jp_tem) * sshn(:,:) ! initial heat content in ssh294 ssh_sc_loc_ini(:,:) = tsn(:,:,1,jp_sal) * sshn(:,:) ! initial salt content in ssh295 END IF296 frc_wn_t = 0._wp ! initial heat content misfit due to free surface297 frc_wn_s = 0._wp ! initial salt content misfit due to free surface298 ENDIF299 ENDIF300 301 ELSEIF( TRIM(cdrw) == 'WRITE' ) THEN ! Create restart file302 ! ! -------------------303 IF(lwp) WRITE(numout,*) '~~~~~~~'304 IF(lwp) WRITE(numout,*) ' dia_hsb_rst at it= ', kt,' date= ', ndastp305 IF(lwp) WRITE(numout,*) '~~~~~~~'306 307 CALL iom_rstput( kt, nitrst, numrow, 'frc_v' , frc_v )308 CALL iom_rstput( kt, nitrst, numrow, 'frc_t' , frc_t )309 CALL iom_rstput( kt, nitrst, numrow, 'frc_s' , frc_s )310 IF( ln_linssh ) THEN311 CALL iom_rstput( kt, nitrst, numrow, 'frc_wn_t', frc_wn_t )312 CALL iom_rstput( kt, nitrst, numrow, 'frc_wn_s', frc_wn_s )313 ENDIF314 CALL iom_rstput( kt, nitrst, numrow, 'surf_ini', surf_ini ) ! ice sheet coupling315 CALL iom_rstput( kt, nitrst, numrow, 'ssh_ini', ssh_ini )316 CALL iom_rstput( kt, nitrst, numrow, 'e3t_ini', e3t_ini )317 CALL iom_rstput( kt, nitrst, numrow, 'hc_loc_ini', hc_loc_ini )318 CALL iom_rstput( kt, nitrst, numrow, 'sc_loc_ini', sc_loc_ini )319 IF( ln_linssh ) THEN320 CALL iom_rstput( kt, nitrst, numrow, 'ssh_hc_loc_ini', ssh_hc_loc_ini )321 CALL iom_rstput( kt, nitrst, numrow, 'ssh_sc_loc_ini', ssh_sc_loc_ini )322 ENDIF323 !324 ENDIF325 !232 !!--------------------------------------------------------------------- 233 !! *** ROUTINE limdia_rst *** 234 !! 235 !! ** Purpose : Read or write DIA file in restart file 236 !! 237 !! ** Method : use of IOM library 238 !!---------------------------------------------------------------------- 239 INTEGER , INTENT(in) :: kt ! ocean time-step 240 CHARACTER(len=*), INTENT(in) :: cdrw ! "READ"/"WRITE" flag 241 ! 242 INTEGER :: ji, jj, jk ! dummy loop indices 243 INTEGER :: id1 ! local integers 244 !!---------------------------------------------------------------------- 245 ! 246 IF( TRIM(cdrw) == 'READ' ) THEN ! Read/initialise 247 IF( ln_rstart ) THEN !* Read the restart file 248 !id1 = iom_varid( numror, 'frc_vol' , ldstop = .FALSE. ) 249 ! 250 IF(lwp) WRITE(numout,*) 251 IF(lwp) WRITE(numout,*) ' dia_hsb_rst : read restart at it= ', kt,' date= ', ndastp 252 IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~' 253 CALL iom_get( numror, 'frc_v', frc_v ) 254 CALL iom_get( numror, 'frc_t', frc_t ) 255 CALL iom_get( numror, 'frc_s', frc_s ) 256 IF( ln_linssh ) THEN 257 CALL iom_get( numror, 'frc_wn_t', frc_wn_t ) 258 CALL iom_get( numror, 'frc_wn_s', frc_wn_s ) 259 ENDIF 260 CALL iom_get( numror, jpdom_autoglo, 'surf_ini', surf_ini ) ! ice sheet coupling 261 CALL iom_get( numror, jpdom_autoglo, 'ssh_ini', ssh_ini ) 262 CALL iom_get( numror, jpdom_autoglo, 'e3t_ini', e3t_ini ) 263 CALL iom_get( numror, jpdom_autoglo, 'hc_loc_ini', hc_loc_ini ) 264 CALL iom_get( numror, jpdom_autoglo, 'sc_loc_ini', sc_loc_ini ) 265 IF( ln_linssh ) THEN 266 CALL iom_get( numror, jpdom_autoglo, 'ssh_hc_loc_ini', ssh_hc_loc_ini ) 267 CALL iom_get( numror, jpdom_autoglo, 'ssh_sc_loc_ini', ssh_sc_loc_ini ) 268 ENDIF 269 ELSE 270 IF(lwp) WRITE(numout,*) 271 IF(lwp) WRITE(numout,*) ' dia_hsb_rst : no restart, set value at initial state ' 272 IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~' 273 surf_ini(:,:) = e1e2t(:,:) * tmask_i(:,:) ! initial ocean surface 274 ssh_ini(:,:) = sshn(:,:) ! initial ssh 275 DO jk = 1, jpk 276 ! if ice sheet/oceqn coupling, need to mask ini variables here (mask could change at the next NEMO instance). 277 e3t_ini (:,:,jk) = e3t_n(:,:,jk) * tmask(:,:,jk) ! initial vertical scale factors 278 hc_loc_ini(:,:,jk) = tsn(:,:,jk,jp_tem) * e3t_n(:,:,jk) * tmask(:,:,jk) ! initial heat content 279 sc_loc_ini(:,:,jk) = tsn(:,:,jk,jp_sal) * e3t_n(:,:,jk) * tmask(:,:,jk) ! initial salt content 280 END DO 281 frc_v = 0._wp ! volume trend due to forcing 282 frc_t = 0._wp ! heat content - - - - 283 frc_s = 0._wp ! salt content - - - - 284 IF( ln_linssh ) THEN 285 IF( ln_isfcav ) THEN 286 DO ji=1,jpi 287 DO jj=1,jpj 288 ssh_hc_loc_ini(ji,jj) = tsn(ji,jj,mikt(ji,jj),jp_tem) * sshn(ji,jj) ! initial heat content in ssh 289 ssh_sc_loc_ini(ji,jj) = tsn(ji,jj,mikt(ji,jj),jp_sal) * sshn(ji,jj) ! initial salt content in ssh 290 END DO 291 END DO 292 ELSE 293 ssh_hc_loc_ini(:,:) = tsn(:,:,1,jp_tem) * sshn(:,:) ! initial heat content in ssh 294 ssh_sc_loc_ini(:,:) = tsn(:,:,1,jp_sal) * sshn(:,:) ! initial salt content in ssh 295 END IF 296 frc_wn_t = 0._wp ! initial heat content misfit due to free surface 297 frc_wn_s = 0._wp ! initial salt content misfit due to free surface 298 ENDIF 299 ENDIF 300 ! 301 ELSEIF( TRIM(cdrw) == 'WRITE' ) THEN ! Create restart file 302 ! ! ------------------- 303 IF(lwp) WRITE(numout,*) 304 IF(lwp) WRITE(numout,*) ' dia_hsb_rst : write restart at it= ', kt,' date= ', ndastp 305 IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~' 306 307 CALL iom_rstput( kt, nitrst, numrow, 'frc_v' , frc_v ) 308 CALL iom_rstput( kt, nitrst, numrow, 'frc_t' , frc_t ) 309 CALL iom_rstput( kt, nitrst, numrow, 'frc_s' , frc_s ) 310 IF( ln_linssh ) THEN 311 CALL iom_rstput( kt, nitrst, numrow, 'frc_wn_t', frc_wn_t ) 312 CALL iom_rstput( kt, nitrst, numrow, 'frc_wn_s', frc_wn_s ) 313 ENDIF 314 CALL iom_rstput( kt, nitrst, numrow, 'surf_ini', surf_ini ) ! ice sheet coupling 315 CALL iom_rstput( kt, nitrst, numrow, 'ssh_ini', ssh_ini ) 316 CALL iom_rstput( kt, nitrst, numrow, 'e3t_ini', e3t_ini ) 317 CALL iom_rstput( kt, nitrst, numrow, 'hc_loc_ini', hc_loc_ini ) 318 CALL iom_rstput( kt, nitrst, numrow, 'sc_loc_ini', sc_loc_ini ) 319 IF( ln_linssh ) THEN 320 CALL iom_rstput( kt, nitrst, numrow, 'ssh_hc_loc_ini', ssh_hc_loc_ini ) 321 CALL iom_rstput( kt, nitrst, numrow, 'ssh_sc_loc_ini', ssh_sc_loc_ini ) 322 ENDIF 323 ! 324 ENDIF 325 ! 326 326 END SUBROUTINE dia_hsb_rst 327 327 … … 342 342 INTEGER :: ierror ! local integer 343 343 INTEGER :: ios 344 ! 344 !! 345 345 NAMELIST/namhsb/ ln_diahsb 346 346 !!---------------------------------------------------------------------- 347 348 IF(lwp) THEN 349 WRITE(numout,*) 350 WRITE(numout,*) 'dia_hsb_init : check the heat and salt budgets' 351 WRITE(numout,*) '~~~~~~~~ ' 352 ENDIF 353 347 ! 354 348 REWIND( numnam_ref ) ! Namelist namhsb in reference namelist 355 349 READ ( numnam_ref, namhsb, IOSTAT = ios, ERR = 901) … … 368 362 WRITE(numout,*) ' Namelist namhsb : set hsb parameters' 369 363 WRITE(numout,*) ' Switch for hsb diagnostic (T) or not (F) ln_diahsb = ', ln_diahsb 370 WRITE(numout,*)371 364 ENDIF 372 365 373 366 IF( .NOT. ln_diahsb ) RETURN 374 ! IF( .NOT. lk_mpp_rep ) &375 ! CALL ctl_stop (' Your global mpp_sum if performed in single precision - 64 bits -', &376 ! & ' whereas the global sum to be precise must be done in double precision ',&377 ! & ' please add key_mpp_rep')378 367 379 368 ! ------------------- ! … … 383 372 & e3t_ini(jpi,jpj,jpk), surf(jpi,jpj), ssh_ini(jpi,jpj), STAT=ierror ) 384 373 IF( ierror > 0 ) THEN 385 CALL ctl_stop( 'dia_hsb : unable to allocate hc_loc_ini' ) ; RETURN374 CALL ctl_stop( 'dia_hsb_init: unable to allocate hc_loc_ini' ) ; RETURN 386 375 ENDIF 387 376 388 377 IF( ln_linssh ) ALLOCATE( ssh_hc_loc_ini(jpi,jpj), ssh_sc_loc_ini(jpi,jpj),STAT=ierror ) 389 378 IF( ierror > 0 ) THEN 390 CALL ctl_stop( 'dia_hsb : unable to allocate hc_loc_ini' ) ; RETURN379 CALL ctl_stop( 'dia_hsb_init: unable to allocate hc_loc_ini' ) ; RETURN 391 380 ENDIF 392 381 … … 394 383 ! 2 - Time independant variables and file opening ! 395 384 ! ----------------------------------------------- ! 396 IF(lwp) WRITE(numout,*) "dia_hsb: heat salt volume budgets activated"397 IF(lwp) WRITE(numout,*) '~~~~~~~'385 IF(lwp) WRITE(numout,*) 386 IF(lwp) WRITE(numout,*) " heat salt volume budgets activated" 398 387 surf(:,:) = e1t(:,:) * e2t(:,:) * tmask_i(:,:) ! masked surface grid cell area 399 388 surf_tot = glob_sum( surf(:,:) ) ! total ocean surface area 400 389 401 IF( lk_bdy ) CALL ctl_warn( 'dia_hsb does not take open boundary fluxes into account' )390 IF( lk_bdy ) CALL ctl_warn( 'dia_hsb_init: heat/salt budget does not consider open boundary fluxes' ) 402 391 ! 403 392 ! ---------------------------------- ! -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/DIU/cool_skin.F90
r7278 r7280 10 10 11 11 !!---------------------------------------------------------------------- 12 !! diurnal_sst_coolskin_step : time-step the cool skin corrections 12 !! diurnal_sst_coolskin_init : initialisation of the cool skin 13 !! diurnal_sst_coolskin_step : time-stepping of the cool skin corrections 13 14 !!---------------------------------------------------------------------- 14 15 USE par_kind … … 21 22 22 23 IMPLICIT NONE 23 24 PRIVATE 25 24 26 ! Namelist parameters 25 27 … … 37 39 REAL(wp), PUBLIC, ALLOCATABLE, DIMENSION(:,:) :: x_csthick ! Cool skin thickness 38 40 39 PRIVATE40 41 PUBLIC diurnal_sst_coolskin_step, diurnal_sst_coolskin_init 41 42 42 43 !! * Substitutions 43 44 # include "vectopt_loop_substitute.h90" 44 45 !!---------------------------------------------------------------------- 46 !! NEMO/OPA 4.0 , NEMO-consortium (2016) 47 !! $Id: $ 48 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 49 !!---------------------------------------------------------------------- 45 50 CONTAINS 46 51 … … 56 61 !! 57 62 !!---------------------------------------------------------------------- 58 59 IMPLICIT NONE60 61 63 ALLOCATE( x_csdsst(jpi,jpj), x_csthick(jpi,jpj) ) 62 64 x_csdsst = 0. 63 65 x_csthick = 0. 64 66 ! 65 67 END SUBROUTINE diurnal_sst_coolskin_init 66 68 69 67 70 SUBROUTINE diurnal_sst_coolskin_step(psqflux, pstauflux, psrho, rdt) 68 71 !!---------------------------------------------------------------------- … … 75 78 !! ** Reference : 76 79 !!---------------------------------------------------------------------- 77 78 IMPLICIT NONE79 80 80 ! Dummy variables 81 81 REAL(wp), INTENT(IN), DIMENSION(jpi,jpj) :: psqflux ! Heat (non-solar)(Watts) … … 94 94 95 95 INTEGER :: ji,jj 96 97 IF ( .NOT. ln_blk_core ) THEN 98 CALL ctl_stop("cool_skin.f90: diurnal flux processing only implemented"//& 99 & " for core bulk forcing") 100 ENDIF 101 96 !!---------------------------------------------------------------------- 97 ! 98 IF( .NOT. ln_blk ) CALL ctl_stop("cool_skin.f90: diurnal flux processing only implemented for bulk forcing") 99 ! 102 100 DO jj = 1,jpj 103 101 DO ji = 1,jpi 104 102 ! 105 103 ! Calcualte wind speed from wind stress and friction velocity 106 104 IF( tmask(ji,jj,1) == 1. .AND. pstauflux(ji,jj) /= 0 .AND. psrho(ji,jj) /=0 ) THEN … … 111 109 z_wspd(ji,jj) = 0. 112 110 ENDIF 113 114 111 ! 115 112 ! Calculate gamma function which is dependent upon wind speed 116 113 IF( tmask(ji,jj,1) == 1. ) THEN … … 119 116 IF( ( z_wspd(ji,jj) >= 10. ) ) z_gamma(ji,jj) = 6. 120 117 ENDIF 121 122 118 ! 123 119 ! Calculate lamda function 124 120 IF( tmask(ji,jj,1) == 1. .AND. z_fv(ji,jj) /= 0 ) THEN … … 127 123 z_lamda(ji,jj) = 0. 128 124 ENDIF 129 130 131 125 ! 132 126 ! Calculate the cool skin thickness - only when heat flux is out of the ocean 133 127 IF( tmask(ji,jj,1) == 1. .AND. z_fv(ji,jj) /= 0 .AND. psqflux(ji,jj) < 0 ) THEN 134 128 x_csthick(ji,jj) = ( z_lamda(ji,jj) * pp_v ) / z_fv(ji,jj) 135 129 ELSE 136 130 x_csthick(ji,jj) = 0. 137 131 ENDIF 138 139 140 132 ! 141 133 ! Calculate the cool skin correction - only when the heat flux is out of the ocean 142 134 IF( tmask(ji,jj,1) == 1. .AND. x_csthick(ji,jj) /= 0. .AND. psqflux(ji,jj) < 0. ) THEN … … 145 137 x_csdsst(ji,jj) = 0. 146 138 ENDIF 147 148 END DO149 END DO150 139 ! 140 END DO 141 END DO 142 ! 151 143 END SUBROUTINE diurnal_sst_coolskin_step 152 144 153 145 !!====================================================================== 154 146 END MODULE cool_skin -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/DIU/step_diu.F90
r6017 r7280 64 64 65 65 ! Cool skin 66 IF ( .NOT.ln_diurnal ) CALL ctl_stop( "stp_diurnal: ln_diurnal not set")66 IF( .NOT.ln_diurnal ) CALL ctl_stop( "stp_diurnal: ln_diurnal not set" ) 67 67 68 IF ( .NOT. ln_blk_core ) THEN 69 CALL ctl_stop("step.f90: diurnal flux processing only implemented"//& 70 & " for core forcing") 71 ENDIF 68 IF( .NOT. ln_blk ) CALL ctl_stop( "stp_diurnal: diurnal flux processing only implemented for bulk forcing" ) 72 69 73 70 CALL diurnal_sst_coolskin_step( qns, taum, rhop(:,:,1), rdt) -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/DOM/dtatsd.F90
r7277 r7280 53 53 LOGICAL, INTENT(in), OPTIONAL :: ld_tradmp ! force the initialization when tradp is used 54 54 ! 55 INTEGER :: i err0, ierr1, ierr2, ierr3 ! temporaryintegers56 ! 55 INTEGER :: ios, ierr0, ierr1, ierr2, ierr3 ! local integers 56 !! 57 57 CHARACTER(len=100) :: cn_dir ! Root directory for location of ssr files 58 58 TYPE(FLD_N), DIMENSION( jpts) :: slf_i ! array of namelist informations on the fields to read … … 60 60 !! 61 61 NAMELIST/namtsd/ ln_tsd_init, ln_tsd_tradmp, cn_dir, sn_tem, sn_sal 62 INTEGER :: ios63 62 !!---------------------------------------------------------------------- 64 63 ! … … 117 116 ! ! fill sf_tsd with sn_tem & sn_sal and control print 118 117 slf_i(jp_tem) = sn_tem ; slf_i(jp_sal) = sn_sal 119 CALL fld_fill( sf_tsd, slf_i, cn_dir, 'dta_tsd', 'Temperature & Salinity data', 'namtsd' )118 CALL fld_fill( sf_tsd, slf_i, cn_dir, 'dta_tsd', 'Temperature & Salinity data', 'namtsd', no_print ) 120 119 ! 121 120 ENDIF -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/DOM/phycst.F90
r7277 r7280 104 104 105 105 IF(lwp) WRITE(numout,*) 106 IF(lwp) WRITE(numout,*) ' phy_cst : initialization of physicalconstants'107 IF(lwp) WRITE(numout,*) ' 106 IF(lwp) WRITE(numout,*) 'phy_cst : initialization of ocean parameters and constants' 107 IF(lwp) WRITE(numout,*) '~~~~~~~' 108 108 109 109 ! Define & print constants -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/DYN/dynadv.F90
r6140 r7280 106 106 WRITE(numout,*) 107 107 WRITE(numout,*) 'dyn_adv_init : choice/control of the momentum advection scheme' 108 WRITE(numout,*) '~~~~~~~~~~~ '109 WRITE(numout,*) ' 110 WRITE(numout,*) ' 111 WRITE(numout,*) ' 112 WRITE(numout,*) ' 113 WRITE(numout,*) ' 114 WRITE(numout,*) ' 108 WRITE(numout,*) '~~~~~~~~~~~~' 109 WRITE(numout,*) ' Namelist namdyn_adv : chose a advection formulation & scheme for momentum' 110 WRITE(numout,*) ' Vector/flux form (T/F) ln_dynadv_vec = ', ln_dynadv_vec 111 WRITE(numout,*) ' = 0 standard scheme ; =1 Hollingsworth scheme nn_dynkeg = ', nn_dynkeg 112 WRITE(numout,*) ' 2nd order centred advection scheme ln_dynadv_cen2 = ', ln_dynadv_cen2 113 WRITE(numout,*) ' 3rd order UBS advection scheme ln_dynadv_ubs = ', ln_dynadv_ubs 114 WRITE(numout,*) ' Sub timestepping of vertical advection ln_dynzad_zts = ', ln_dynzad_zts 115 115 ENDIF 116 116 … … 134 134 IF(lwp) THEN ! Print the choice 135 135 WRITE(numout,*) 136 IF( nadv == 0 ) WRITE(numout,*) ' vector form : keg + zad + vor is used'137 IF( nadv == 1 ) WRITE(numout,*) ' vector form : keg + zad_zts + vor is used'136 IF( nadv == 0 ) WRITE(numout,*) ' ===>> vector form : keg + zad + vor is used' 137 IF( nadv == 1 ) WRITE(numout,*) ' ===>> vector form : keg + zad_zts + vor is used' 138 138 IF( nadv == 0 .OR. nadv == 1 ) THEN 139 IF( nn_dynkeg == nkeg_C2 ) WRITE(numout,*) ' with Centered standard keg scheme'140 IF( nn_dynkeg == nkeg_HW ) WRITE(numout,*) ' with Hollingsworth keg scheme'139 IF( nn_dynkeg == nkeg_C2 ) WRITE(numout,*) ' with Centered standard keg scheme' 140 IF( nn_dynkeg == nkeg_HW ) WRITE(numout,*) ' with Hollingsworth keg scheme' 141 141 ENDIF 142 IF( nadv == 2 ) WRITE(numout,*) ' flux form : 2nd order scheme is used'143 IF( nadv == 3 ) WRITE(numout,*) ' flux form : UBS scheme is used'142 IF( nadv == 2 ) WRITE(numout,*) ' ===>> flux form : 2nd order scheme is used' 143 IF( nadv == 3 ) WRITE(numout,*) ' ===>> flux form : UBS scheme is used' 144 144 ENDIF 145 145 ! -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/DYN/dynldf.F90
r6140 r7280 110 110 WRITE(numout,*) 111 111 WRITE(numout,*) 'dyn_ldf_init : Choice of the lateral diffusive operator on dynamics' 112 WRITE(numout,*) '~~~~~~~~~~~ '113 WRITE(numout,*) ' 114 WRITE(numout,*) ' 115 WRITE(numout,*) ' 116 WRITE(numout,*) ' 117 WRITE(numout,*) ' 118 WRITE(numout,*) ' 112 WRITE(numout,*) '~~~~~~~~~~~~' 113 WRITE(numout,*) ' Namelist nam_dynldf : set lateral mixing parameters (type, direction, coefficients)' 114 WRITE(numout,*) ' laplacian operator ln_dynldf_lap = ', ln_dynldf_lap 115 WRITE(numout,*) ' bilaplacian operator ln_dynldf_blp = ', ln_dynldf_blp 116 WRITE(numout,*) ' iso-level ln_dynldf_lev = ', ln_dynldf_lev 117 WRITE(numout,*) ' horizontal (geopotential) ln_dynldf_hor = ', ln_dynldf_hor 118 WRITE(numout,*) ' iso-neutral ln_dynldf_iso = ', ln_dynldf_iso 119 119 ENDIF 120 120 ! ! use of lateral operator or not … … 180 180 IF(lwp) THEN 181 181 WRITE(numout,*) 182 IF( nldf == np_no_ldf ) WRITE(numout,*) ' 183 IF( nldf == np_lap ) WRITE(numout,*) ' 184 IF( nldf == np_lap_i ) WRITE(numout,*) ' 185 IF( nldf == np_blp ) WRITE(numout,*) ' 182 IF( nldf == np_no_ldf ) WRITE(numout,*) ' ===>> NO lateral viscosity' 183 IF( nldf == np_lap ) WRITE(numout,*) ' ===>> iso-level laplacian operator' 184 IF( nldf == np_lap_i ) WRITE(numout,*) ' ===>> rotated laplacian operator with iso-level background' 185 IF( nldf == np_blp ) WRITE(numout,*) ' ===>> iso-level bi-laplacian operator' 186 186 ENDIF 187 187 ! -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/DYN/dynspg.F90
r6140 r7280 216 216 IF(lwp) THEN 217 217 WRITE(numout,*) 218 IF( nspg == np_EXP ) WRITE(numout,*) ' explicit free surface'219 IF( nspg == np_TS ) WRITE(numout,*) ' free surface with time splitting scheme'220 IF( nspg == np_NO ) WRITE(numout,*) ' No surface surface pressure gradient trend in momentum Eqs.'218 IF( nspg == np_EXP ) WRITE(numout,*) ' ===>> explicit free surface' 219 IF( nspg == np_TS ) WRITE(numout,*) ' ===>> free surface with time splitting scheme' 220 IF( nspg == np_NO ) WRITE(numout,*) ' ===>> No surface surface pressure gradient trend in momentum Eqs.' 221 221 ENDIF 222 222 ! -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/DYN/dynvor.F90
r7277 r7280 626 626 WRITE(numout,*) 'dyn_vor_init : vorticity term : read namelist and control the consistency' 627 627 WRITE(numout,*) '~~~~~~~~~~~~' 628 WRITE(numout,*) ' 629 WRITE(numout,*) ' 630 WRITE(numout,*) ' 631 WRITE(numout,*) ' 632 WRITE(numout,*) ' 633 WRITE(numout,*) ' 634 WRITE(numout,*) ' 628 WRITE(numout,*) ' Namelist namdyn_vor : choice of the vorticity term scheme' 629 WRITE(numout,*) ' energy conserving scheme ln_dynvor_ene = ', ln_dynvor_ene 630 WRITE(numout,*) ' enstrophy conserving scheme ln_dynvor_ens = ', ln_dynvor_ens 631 WRITE(numout,*) ' mixed enstrophy/energy conserving scheme ln_dynvor_mix = ', ln_dynvor_mix 632 WRITE(numout,*) ' enstrophy and energy conserving scheme ln_dynvor_een = ', ln_dynvor_een 633 WRITE(numout,*) ' e3f = averaging /4 (=0) or /sum(tmask) (=1) nn_een_e3f = ', nn_een_e3f 634 WRITE(numout,*) ' masked (=T) or unmasked(=F) vorticity ln_dynvor_msk = ', ln_dynvor_msk 635 635 ENDIF 636 636 … … 639 639 ! at angles with three ocean points and one land point 640 640 IF(lwp) WRITE(numout,*) 641 IF(lwp) WRITE(numout,*) ' namlbc: change fmask value in the angles (T)ln_vorlat = ', ln_vorlat641 IF(lwp) WRITE(numout,*) ' change fmask value in the angles (T) ln_vorlat = ', ln_vorlat 642 642 IF( ln_vorlat .AND. ( ln_dynvor_ene .OR. ln_dynvor_ens .OR. ln_dynvor_mix ) ) THEN 643 643 DO jk = 1, jpk … … 666 666 ncor = np_COR 667 667 IF( ln_dynadv_vec ) THEN 668 IF(lwp) WRITE(numout,*) ' Vector form advection : vorticity = Coriolis + relative vorticity'668 IF(lwp) WRITE(numout,*) ' ===>> Vector form advection : vorticity = Coriolis + relative vorticity' 669 669 nrvm = np_RVO ! relative vorticity 670 670 ntot = np_CRV ! relative + planetary vorticity 671 671 ELSE 672 IF(lwp) WRITE(numout,*) ' Flux form advection : vorticity = Coriolis + metric term'672 IF(lwp) WRITE(numout,*) ' ===>> Flux form advection : vorticity = Coriolis + metric term' 673 673 nrvm = np_MET ! metric term 674 674 ntot = np_CME ! Coriolis + metric term … … 677 677 IF(lwp) THEN ! Print the choice 678 678 WRITE(numout,*) 679 IF( nvor_scheme == np_ENE ) WRITE(numout,*) ' vorticity scheme ==>>energy conserving scheme'680 IF( nvor_scheme == np_ENS ) WRITE(numout,*) ' vorticity scheme ==>>enstrophy conserving scheme'681 IF( nvor_scheme == np_MIX ) WRITE(numout,*) ' vorticity scheme ==>>mixed enstrophy/energy conserving scheme'682 IF( nvor_scheme == np_EEN ) WRITE(numout,*) ' vorticity scheme ==>>energy and enstrophy conserving scheme'679 IF( nvor_scheme == np_ENE ) WRITE(numout,*) ' ===>> energy conserving scheme' 680 IF( nvor_scheme == np_ENS ) WRITE(numout,*) ' ===>> enstrophy conserving scheme' 681 IF( nvor_scheme == np_MIX ) WRITE(numout,*) ' ===>> mixed enstrophy/energy conserving scheme' 682 IF( nvor_scheme == np_EEN ) WRITE(numout,*) ' ===>> energy and enstrophy conserving scheme' 683 683 ENDIF 684 684 ! -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/DYN/dynzdf.F90
r6140 r7280 119 119 WRITE(numout,*) 'dyn_zdf_init : vertical dynamics physics scheme' 120 120 WRITE(numout,*) '~~~~~~~~~~~' 121 IF( nzdf == 0 ) WRITE(numout,*) ' 122 IF( nzdf == 1 ) WRITE(numout,*) ' 121 IF( nzdf == 0 ) WRITE(numout,*) ' ===>> Explicit time-splitting scheme' 122 IF( nzdf == 1 ) WRITE(numout,*) ' ===>> Implicit (euler backward) scheme' 123 123 ENDIF 124 124 ! -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/DYN/wet_dry.F90
r7277 r7280 75 75 WRITE(numout,*) 76 76 WRITE(numout,*) 'wad_init : Wetting and drying initialization through namelist read' 77 WRITE(numout,*) '~~~~~~~ 77 WRITE(numout,*) '~~~~~~~~' 78 78 WRITE(numout,*) ' Namelist namwad' 79 79 WRITE(numout,*) ' Logical activation ln_wd = ', ln_wd … … 268 268 REAL(wp) :: ztmp ! local scalars 269 269 REAL(wp), POINTER, DIMENSION(:,:) :: zwdlmtu, zwdlmtv !: W/D flux limiters 270 REAL(wp), POINTER, DIMENSION(:,:) :: zflxp, zflxn ! 2D workspace271 REAL(wp), POINTER, DIMENSION(:,:) :: zflxu1, zflxv1 ! 2D workspace270 REAL(wp), POINTER, DIMENSION(:,:) :: zflxp, zflxn ! local 2D workspace 271 REAL(wp), POINTER, DIMENSION(:,:) :: zflxu1, zflxv1 ! local 2D workspace 272 272 !!---------------------------------------------------------------------- 273 273 ! … … 390 390 ! 391 391 END SUBROUTINE wad_lmt_bt 392 392 393 393 !!============================================================================== 394 394 END MODULE wet_dry -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/ICB/icbini.F90
r5215 r7280 372 372 IF(lwp) THEN 373 373 WRITE(numout,*) 374 WRITE(numout,*) 'icbini : 375 WRITE(numout,*) ' 376 WRITE(numout,*) ' namelist nambergnot read'374 WRITE(numout,*) 'icbini : AGRIF is not compatible with namelist namberg : ' 375 WRITE(numout,*) '~~~~~~ definition of rn_initial_mass(nclasses) with nclasses as PARAMETER ' 376 WRITE(numout,*) ' ==>>> force NO icebergs used. The namelist namberg is not read' 377 377 ENDIF 378 378 ln_icebergs = .false. … … 381 381 IF(lwp) THEN 382 382 WRITE(numout,*) 383 WRITE(numout,*) 'icbini : 384 WRITE(numout,*) '~~~~~~ ~~'383 WRITE(numout,*) 'icbini : Namelist namberg ln_icebergs = F , NO icebergs used' 384 WRITE(numout,*) '~~~~~~ ' 385 385 ENDIF 386 386 RETURN -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/IOM/in_out_manager.F90
r7277 r7280 17 17 IMPLICIT NONE 18 18 PUBLIC 19 19 20 20 !!---------------------------------------------------------------------- 21 21 !! namrun namelist parameters … … 95 95 !! output monitoring 96 96 !!---------------------------------------------------------------------- 97 LOGICAL :: ln_ctl !: run control for debugging98 INTEGER :: nn_timing !: run control for timing99 INTEGER :: nn_diacfl !: flag whether to create CFL diagnostics100 INTEGER :: nn_print !: level of print (0 no print)101 INTEGER :: nn_ictls !: Start i indice for the SUM control102 INTEGER :: nn_ictle !: End i indice for the SUM control103 INTEGER :: nn_jctls !: Start j indice for the SUM control104 INTEGER :: nn_jctle !: End j indice for the SUM control105 INTEGER :: nn_isplt !: number of processors following i106 INTEGER :: nn_jsplt !: number of processors following j107 INTEGER :: nn_b it_cmp = 0 !: bit reproducibility(0/1)108 97 LOGICAL :: ln_ctl !: run control for debugging 98 INTEGER :: nn_timing !: run control for timing 99 INTEGER :: nn_diacfl !: flag whether to create CFL diagnostics 100 INTEGER :: nn_print !: level of print (0 no print) 101 INTEGER :: nn_ictls !: Start i indice for the SUM control 102 INTEGER :: nn_ictle !: End i indice for the SUM control 103 INTEGER :: nn_jctls !: Start j indice for the SUM control 104 INTEGER :: nn_jctle !: End j indice for the SUM control 105 INTEGER :: nn_isplt !: number of processors following i 106 INTEGER :: nn_jsplt !: number of processors following j 107 INTEGER :: nn_bench !: benchmark parameter (0/1) 108 INTEGER :: nn_bit_cmp = 0 !: bit reproducibility (0/1) 109 109 ! 110 110 INTEGER :: nprint, nictls, nictle, njctls, njctle, isplt, jsplt !: OLD namelist names … … 137 137 !! Run control 138 138 !!---------------------------------------------------------------------- 139 INTEGER :: no_print = 0 !: optional argument of fld_fill (if present, suppress some control print) 139 140 INTEGER :: nstop = 0 !: error flag (=number of reason for a premature stop run) 140 141 INTEGER :: nwarn = 0 !: warning flag (=number of warning found during the run) -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/LBC/lib_mpp.F90
r7278 r7280 4303 4303 WRITE(kout,*) 4304 4304 ENDIF 4305 CALL FLUSH(kout) 4305 4306 STOP 'ctl_opn bad opening' 4306 4307 ENDIF -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/LBC/mppini.F90
r7278 r7280 65 65 WRITE(numout,*) 66 66 WRITE(numout,*) 'mpp_init(2) : NO massively parallel processing' 67 WRITE(numout,*) '~~~~~~~~~~~ :'67 WRITE(numout,*) '~~~~~~~~~~~ ' 68 68 WRITE(numout,*) ' nperio = ', nperio 69 69 WRITE(numout,*) ' npolj = ', npolj … … 265 265 266 266 IF(lwp) WRITE(numout,*) 267 IF(lwp) WRITE(numout,*) ' mpp_init: defines mpp subdomains' 268 IF(lwp) WRITE(numout,*) ' ~~~~~~ ----------------------' 269 IF(lwp) WRITE(numout,*) 270 IF(lwp) WRITE(numout,*) 'iresti=',iresti,' irestj=',irestj 271 IF(lwp) WRITE(numout,*) 272 IF(lwp) WRITE(numout,*) 'jpni=',jpni,' jpnj=',jpnj 267 IF(lwp) WRITE(numout,*) ' defines mpp subdomains' 268 IF(lwp) WRITE(numout,*) ' jpni=', jpni, ' iresti=', iresti 269 IF(lwp) WRITE(numout,*) ' jpnj=', jpnj, ' irestj=', irestj 273 270 zidom = nreci 274 271 DO ji = 1, jpni … … 276 273 END DO 277 274 IF(lwp) WRITE(numout,*) 278 IF(lwp) WRITE(numout,*)' sum ilcit(i,1)=', zidom, ' jpiglo=', jpiglo275 IF(lwp) WRITE(numout,*)' sum ilcit(i,1)=', zidom, ' jpiglo=', jpiglo 279 276 280 277 zjdom = nrecj … … 282 279 zjdom = zjdom + ilcjt(1,jj) - nrecj 283 280 END DO 284 IF(lwp) WRITE(numout,*)' sum ilcit(1,j)=', zjdom, ' jpjglo=', jpjglo 285 IF(lwp) WRITE(numout,*) 281 IF(lwp) WRITE(numout,*)' sum ilcit(1,j)=', zjdom, ' jpjglo=', jpjglo 286 282 287 283 IF(lwp) THEN … … 360 356 njmpp = njmppt(narea) 361 357 362 ! Save processor layout in layout.dat file363 IF(lwp) THEN364 CALL ctl_opn( inum, 'layout.dat', 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, numout, .FALSE., narea )365 WRITE(inum,'(a)') ' jpnij jpi jpj jpk jpiglo jpjglo'366 WRITE(inum,'(6i8)') jpnij,jpi,jpj,jpk,jpiglo,jpjglo367 WRITE(inum,'(a)') 'NAREA nlci nlcj nldi nldj nlei nlej nimpp njmpp'368 369 DOjn = 1, jpnij370 WRITE(inum,'(9i5)') jn, nlcit(jn), nlcjt(jn), &371 372 373 374 END DO375 CLOSE(inum)358 ! Save processor layout in layout.dat file 359 IF(lwp) THEN 360 CALL ctl_opn( inum, 'layout.dat', 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, numout, .FALSE., narea ) 361 WRITE(inum,'(a)') ' jpnij jpi jpj jpk jpiglo jpjglo' 362 WRITE(inum,'(6i8)') jpnij,jpi,jpj,jpk,jpiglo,jpjglo 363 WRITE(inum,'(a)') 'NAREA nlci nlcj nldi nldj nlei nlej nimpp njmpp' 364 ! 365 DO jn = 1, jpnij 366 WRITE(inum,'(9i5)') jn, nlcit(jn), nlcjt(jn), & 367 & nldit(jn), nldjt(jn), & 368 & nleit(jn), nlejt(jn), & 369 & nimppt(jn), njmppt(jn) 370 END DO 371 CLOSE(inum) 376 372 END IF 377 378 373 379 374 ! w a r n i n g narea (zone) /= nproc (processors)! … … 428 423 429 424 IF(lwp) THEN 430 WRITE(numout,*) ' nproc = ', nproc 431 WRITE(numout,*) ' nowe = ', nowe , ' noea = ', noea 432 WRITE(numout,*) ' nono = ', nono , ' noso = ', noso 433 WRITE(numout,*) ' nbondi = ', nbondi 434 WRITE(numout,*) ' nbondj = ', nbondj 435 WRITE(numout,*) ' npolj = ', npolj 436 WRITE(numout,*) ' nperio = ', nperio 437 WRITE(numout,*) ' nlci = ', nlci 438 WRITE(numout,*) ' nlcj = ', nlcj 439 WRITE(numout,*) ' nimpp = ', nimpp 440 WRITE(numout,*) ' njmpp = ', njmpp 441 WRITE(numout,*) ' nreci = ', nreci , ' npse = ', npse 442 WRITE(numout,*) ' nrecj = ', nrecj , ' npsw = ', npsw 443 WRITE(numout,*) ' jpreci = ', jpreci , ' npne = ', npne 444 WRITE(numout,*) ' jprecj = ', jprecj , ' npnw = ', npnw 425 WRITE(numout,*) ' nproc = ', nproc 426 WRITE(numout,*) ' nowe = ', nowe , ' noea = ', noea 427 WRITE(numout,*) ' nono = ', nono , ' noso = ', noso 428 WRITE(numout,*) ' nbondi = ', nbondi, ' nbondj = ', nbondj 429 WRITE(numout,*) ' npolj = ', npolj 430 WRITE(numout,*) ' nperio = ', nperio 431 WRITE(numout,*) ' nlci = ', nlci , ' nlcj = ', nlcj 432 WRITE(numout,*) ' nimpp = ', nimpp , ' njmpp = ', njmpp 433 WRITE(numout,*) ' nreci = ', nreci , ' npse = ', npse 434 WRITE(numout,*) ' nrecj = ', nrecj , ' npsw = ', npsw 435 WRITE(numout,*) ' jpreci = ', jpreci, ' npne = ', npne 436 WRITE(numout,*) ' jprecj = ', jprecj, ' npnw = ', npnw 445 437 WRITE(numout,*) 446 438 ENDIF -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/LDF/ldfc1d_c2d.F90
r6140 r7280 59 59 REAL(wp) :: zw , zdep2 ! - - 60 60 !!---------------------------------------------------------------------- 61 62 IF(lwp) THEN 63 WRITE(numout,*) 64 WRITE(numout,*) ' ldf_c1d : set a given profile to eddy diffusivity/viscosity coefficients' 65 WRITE(numout,*) ' ~~~~~~~' 66 ENDIF 61 67 62 68 ! initialization of the profile … … 130 136 ! 131 137 IF(lwp) THEN 132 WRITE(numout,*) 'ldf_c2d : aht = rn_aht0 * max(e1,e2)/e_equator ( laplacian) ' 133 WRITE(numout,*) '~~~~~~~ or = rn_bht0 * [max(e1,e2)/e_equator]**3 (bilaplacian)' 138 WRITE(numout,*) 139 WRITE(numout,*) ' ldf_c2d : aht = rn_aht0 * max(e1,e2)/e_equator ( laplacian) ' 140 WRITE(numout,*) ' ~~~~~~~ or = rn_bht0 * [max(e1,e2)/e_equator]**3 (bilaplacian)' 134 141 WRITE(numout,*) 135 142 ENDIF -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/SBC/cyclone.F90
r5215 r7280 27 27 PRIVATE 28 28 29 PUBLIC wnd_cyc ! routine called in sbcblk _core.F90 module29 PUBLIC wnd_cyc ! routine called in sbcblk.F90 module 30 30 31 31 INTEGER , PARAMETER :: jp_is1 = 1 ! index of presence 1 or absence 0 of a TC record … … 102 102 sn_tc = FLD_N( 'tc_track', 6 , 'tc' , .true. , .false. , 'yearly' , '' , '' , '' ) 103 103 ! 104 ! Namelist is read in namsbc_ core104 ! Namelist is read in namsbc_blk 105 105 ! set sf structure 106 106 ALLOCATE( sf(1), STAT=ierror ) -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/SBC/fldread.F90
r6140 r7280 4 4 !! Ocean forcing: read input field for surface boundary condition 5 5 !!===================================================================== 6 !! History : 2.0 ! 06-2006 (S. Masson, G. Madec) Original code7 !! ! 05-2008(S. Alderson) Modified for Interpolation in memory from input grid to model grid8 !! ! 10-2013(D. Delrosso, P. Oddo) suppression of land point prior to interpolation6 !! History : 2.0 ! 2006-06 (S. Masson, G. Madec) Original code 7 !! 3.0 ! 2008-05 (S. Alderson) Modified for Interpolation in memory from input grid to model grid 8 !! 3.4 ! 2013-10 (D. Delrosso, P. Oddo) suppression of land point prior to interpolation 9 9 !!---------------------------------------------------------------------- 10 10 11 11 !!---------------------------------------------------------------------- 12 !! fld_read : read input fields used for the computation of the 13 !! surface boundary condition 12 !! fld_read : read input fields used for the computation of the surface boundary condition 13 !! fld_init : initialization of field read 14 !! fld_rec : determined the record(s) to be read 15 !! fld_get : read the data 16 !! fld_map : read global data from file and map onto local data using a general mapping (use for open boundaries) 17 !! fld_rot : rotate the vector fields onto the local grid direction 18 !! fld_clopn : update the data file name and close/open the files 19 !! fld_fill : fill the data structure with the associated information read in namelist 20 !! wgt_list : manage the weights used for interpolation 21 !! wgt_print : print the list of known weights 22 !! fld_weight : create a WGT structure and fill in data from file, restructuring as required 23 !! apply_seaoverland : fill land with ocean values 24 !! seaoverland : create shifted matrices for seaoverland application 25 !! fld_interp : apply weights to input gridded data to create data on model grid 26 !! ksec_week : function returning the first 3 letters of the first day of the weekly file 14 27 !!---------------------------------------------------------------------- 15 28 USE oce ! ocean dynamics and tracers … … 274 287 IF( sd(jf)%ln_tint ) THEN ! temporal interpolation 275 288 IF(lwp .AND. kt - nit000 <= 100 ) THEN 276 clfmt = "(' fld_read: var ', a, ' kt = ', i8, ' (', f9.4,' days), Y/M/D = ', i4.4,'/', i2.2,'/', i2.2," // &289 clfmt = "(' fld_read: var ', a, ' kt = ', i8, ' (', f9.4,' days), Y/M/D = ', i4.4,'/', i2.2,'/', i2.2," // & 277 290 & "', records b/a: ', i6.4, '/', i6.4, ' (days ', f9.4,'/', f9.4, ')')" 278 291 WRITE(numout, clfmt) TRIM( sd(jf)%clvar ), kt, REAL(isecsbc,wp)/rday, nyear, nmonth, nday, & 279 292 & sd(jf)%nrec_b(1), sd(jf)%nrec_a(1), REAL(sd(jf)%nrec_b(2),wp)/rday, REAL(sd(jf)%nrec_a(2),wp)/rday 280 WRITE(numout, *) ' it_offset is : ',it_offset293 WRITE(numout, *) ' it_offset is : ',it_offset 281 294 ENDIF 282 295 ! temporal interpolation weights … … 286 299 ELSE ! nothing to do... 287 300 IF(lwp .AND. kt - nit000 <= 100 ) THEN 288 clfmt = "(' fld_read: var ', a, ' kt = ', i8,' (', f9.4,' days), Y/M/D = ', i4.4,'/', i2.2,'/', i2.2," // &301 clfmt = "(' fld_read: var ', a, ' kt = ', i8,' (', f9.4,' days), Y/M/D = ', i4.4,'/', i2.2,'/', i2.2," // & 289 302 & "', record: ', i6.4, ' (days ', f9.4, ' <-> ', f9.4, ')')" 290 303 WRITE(numout, clfmt) TRIM(sd(jf)%clvar), kt, REAL(isecsbc,wp)/rday, nyear, nmonth, nday, & … … 407 420 CALL fld_get( sdjf, map ) ! read before data in after arrays(as we will swap it later) 408 421 ! 409 clfmt = "(' fld_init : time-interpolation for ', a, ' read previous record = ', i6, ' at time = ', f7.2, ' days')"422 clfmt = "(' fld_init : time-interpolation for ', a, ' read previous record = ', i6, ' at time = ', f7.2, ' days')" 410 423 IF(lwp) WRITE(numout, clfmt) TRIM(sdjf%clvar), sdjf%nrec_a(1), REAL(sdjf%nrec_a(2),wp)/rday 411 424 ! … … 791 804 !! *** ROUTINE fld_clopn *** 792 805 !! 793 !! ** Purpose : update the file name and open the file806 !! ** Purpose : update the file name and close/open the files 794 807 !!---------------------------------------------------------------------- 795 808 TYPE(FLD) , INTENT(inout) :: sdjf ! input field related variables … … 882 895 883 896 884 SUBROUTINE fld_fill( sdf, sdf_n, cdir, cdcaller, cdtitle, cdnam )897 SUBROUTINE fld_fill( sdf, sdf_n, cdir, cdcaller, cdtitle, cdnam, knoprint ) 885 898 !!--------------------------------------------------------------------- 886 899 !! *** ROUTINE fld_fill *** 887 900 !! 888 !! ** Purpose : fill sdf with sdf_n and control print 889 !!---------------------------------------------------------------------- 890 TYPE(FLD) , DIMENSION(:), INTENT(inout) :: sdf ! structure of input fields (file informations, fields read) 891 TYPE(FLD_N), DIMENSION(:), INTENT(in ) :: sdf_n ! array of namelist information structures 892 CHARACTER(len=*) , INTENT(in ) :: cdir ! Root directory for location of flx files 893 CHARACTER(len=*) , INTENT(in ) :: cdcaller ! 894 CHARACTER(len=*) , INTENT(in ) :: cdtitle ! 895 CHARACTER(len=*) , INTENT(in ) :: cdnam ! 896 ! 897 INTEGER :: jf ! dummy indices 901 !! ** Purpose : fill the data structure (sdf) with the associated information 902 !! read in namelist (sdf_n) and control print 903 !!---------------------------------------------------------------------- 904 TYPE(FLD) , DIMENSION(:) , INTENT(inout) :: sdf ! structure of input fields (file informations, fields read) 905 TYPE(FLD_N), DIMENSION(:) , INTENT(in ) :: sdf_n ! array of namelist information structures 906 CHARACTER(len=*) , INTENT(in ) :: cdir ! Root directory for location of flx files 907 CHARACTER(len=*) , INTENT(in ) :: cdcaller ! name of the calling routine 908 CHARACTER(len=*) , INTENT(in ) :: cdtitle ! description of the calling routine 909 CHARACTER(len=*) , INTENT(in ) :: cdnam ! name of the namelist from which sdf_n comes 910 INTEGER , OPTIONAL, INTENT(in ) :: knoprint ! no calling routine information printed 911 ! 912 INTEGER :: jf ! dummy indices 898 913 !!--------------------------------------------------------------------- 899 914 ! … … 922 937 IF(lwp) THEN ! control print 923 938 WRITE(numout,*) 924 WRITE(numout,*) TRIM( cdcaller )//' : '//TRIM( cdtitle ) 925 WRITE(numout,*) (/ ('~', jf = 1, LEN_TRIM( cdcaller ) ) /) 926 WRITE(numout,*) ' '//TRIM( cdnam )//' Namelist' 927 WRITE(numout,*) ' list of files and frequency (>0: in hours ; <0 in months)' 939 IF( .NOT.PRESENT( knoprint) ) THEN 940 WRITE(numout,*) TRIM( cdcaller )//' : '//TRIM( cdtitle ) 941 WRITE(numout,*) (/ ('~', jf = 1, LEN_TRIM( cdcaller ) ) /) 942 ENDIF 943 WRITE(numout,*) ' fld_fill : fill data structure with information from namelist '//TRIM( cdnam ) 944 WRITE(numout,*) ' ~~~~~~~~' 945 WRITE(numout,*) ' list of files and frequency (>0: in hours ; <0 in months)' 928 946 DO jf = 1, SIZE(sdf) 929 WRITE(numout,*) ' root filename: ' , TRIM( sdf(jf)%clrootname ), & 930 & ' variable name: ' , TRIM( sdf(jf)%clvar ) 931 WRITE(numout,*) ' frequency: ' , sdf(jf)%nfreqh , & 932 & ' time interp: ' , sdf(jf)%ln_tint , & 933 & ' climatology: ' , sdf(jf)%ln_clim , & 934 & ' weights : ' , TRIM( sdf(jf)%wgtname ), & 935 & ' pairing : ' , TRIM( sdf(jf)%vcomp ), & 936 & ' data type: ' , sdf(jf)%cltype , & 937 & ' land/sea mask:' , TRIM( sdf(jf)%lsmname ) 947 WRITE(numout,*) ' root filename: ' , TRIM( sdf(jf)%clrootname ), ' variable name: ', TRIM( sdf(jf)%clvar ) 948 WRITE(numout,*) ' frequency: ' , sdf(jf)%nfreqh , & 949 & ' time interp: ' , sdf(jf)%ln_tint , & 950 & ' climatology: ' , sdf(jf)%ln_clim 951 WRITE(numout,*) ' weights: ' , TRIM( sdf(jf)%wgtname ), & 952 & ' pairing: ' , TRIM( sdf(jf)%vcomp ), & 953 & ' data type: ' , sdf(jf)%cltype , & 954 & ' land/sea mask:' , TRIM( sdf(jf)%lsmname ) 938 955 call flush(numout) 939 956 END DO … … 947 964 !! *** ROUTINE wgt_list *** 948 965 !! 949 !! ** Purpose : search array of WGTs and find a weights file 950 !! entry, or return a new one adding it to the end 951 !! if it is a new entry, the weights data is read in and 952 !! restructured (fld_weight) 966 !! ** Purpose : search array of WGTs and find a weights file entry, 967 !! or return a new one adding it to the end if new entry. 968 !! the weights data is read in and restructured (fld_weight) 953 969 !!---------------------------------------------------------------------- 954 970 TYPE( FLD ), INTENT(in ) :: sd ! field with name of weights file … … 1019 1035 !! *** ROUTINE fld_weight *** 1020 1036 !! 1021 !! ** Purpose : create a new WGT structure and fill in data from 1022 !! file,restructuring as required1037 !! ** Purpose : create a new WGT structure and fill in data from file, 1038 !! restructuring as required 1023 1039 !!---------------------------------------------------------------------- 1024 1040 TYPE( FLD ), INTENT(in) :: sd ! field with name of weights file … … 1163 1179 1164 1180 SUBROUTINE apply_seaoverland( clmaskfile, zfieldo, jpi1_lsm, jpi2_lsm, jpj1_lsm, & 1165 &jpj2_lsm, itmpi, itmpj, itmpz, rec1_lsm, recn_lsm )1181 & jpj2_lsm, itmpi, itmpj, itmpz, rec1_lsm, recn_lsm ) 1166 1182 !!--------------------------------------------------------------------- 1167 1183 !! *** ROUTINE apply_seaoverland *** … … 1492 1508 !! *** FUNCTION kshift_week *** 1493 1509 !! 1494 !! ** Purpose : 1495 !!--------------------------------------------------------------------- 1496 CHARACTER(len=*), INTENT(in) :: cdday !3 first letters of the first day of the weekly file 1497 !! 1498 INTEGER :: ksec_week ! output variable 1499 INTEGER :: ijul !temp variable 1500 INTEGER :: ishift !temp variable 1510 !! ** Purpose : return the first 3 letters of the first day of the weekly file 1511 !!--------------------------------------------------------------------- 1512 CHARACTER(len=*), INTENT(in) :: cdday ! first 3 letters of the first day of the weekly file 1513 !! 1514 INTEGER :: ksec_week ! output variable 1515 INTEGER :: ijul, ishift ! local integer 1501 1516 CHARACTER(len=3),DIMENSION(7) :: cl_week 1502 1517 !!---------------------------------------------------------------------- -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/SBC/sbc_oce.F90
r7277 r7280 10 10 !! 3.3 ! 2010-10 (J. Chanut, C. Bricaud) add the surface pressure forcing 11 11 !! 4.0 ! 2012-05 (C. Rousset) add attenuation coef for use in ice model 12 !! 4.0 ! 2016-06 (L. Brodeau) new unified bulk routine (based on AeroBulk) 12 13 !!---------------------------------------------------------------------- 13 14 … … 31 32 ! !!* namsbc namelist * 32 33 LOGICAL , PUBLIC :: ln_usr !: user defined formulation 33 LOGICAL , PUBLIC :: ln_flx !: flux formulation 34 LOGICAL , PUBLIC :: ln_blk_clio !: CLIO bulk formulation 35 LOGICAL , PUBLIC :: ln_blk_core !: CORE bulk formulation 36 LOGICAL , PUBLIC :: ln_blk_mfs !: MFS bulk formulation 34 LOGICAL , PUBLIC :: ln_flx !: flux formulation 35 LOGICAL , PUBLIC :: ln_blk !: bulk formulation 37 36 #if defined key_oasis3 38 37 LOGICAL , PUBLIC :: lk_oasis = .TRUE. !: OASIS used … … 74 73 INTEGER , PUBLIC, PARAMETER :: jp_usr = 1 !: user defined formulation 75 74 INTEGER , PUBLIC, PARAMETER :: jp_flx = 2 !: flux formulation 76 INTEGER , PUBLIC, PARAMETER :: jp_clio = 3 !: CLIO bulk formulation 77 INTEGER , PUBLIC, PARAMETER :: jp_core = 4 !: CORE bulk formulation 75 INTEGER , PUBLIC, PARAMETER :: jp_blk = 4 !: bulk formulation 78 76 INTEGER , PUBLIC, PARAMETER :: jp_purecpl = 5 !: Pure ocean-atmosphere Coupled formulation 79 INTEGER , PUBLIC, PARAMETER :: jp_mfs = 6 !: MFS bulk formulation80 77 INTEGER , PUBLIC, PARAMETER :: jp_none = 7 !: for OPA when doing coupling via SAS module 81 78 -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/SBC/sbcice_cice.F90
r6140 r7280 24 24 USE sbc_oce ! Surface boundary condition: ocean fields 25 25 USE sbc_ice ! Surface boundary condition: ice fields 26 USE sbcblk _core ! Surface boundary condition: COREbulk26 USE sbcblk ! Surface boundary condition: bulk 27 27 USE sbccpl 28 28 … … 191 191 CALL ctl_stop( 'STOP', 'cice_sbc_init : Forcing option requires calc_strair=F and calc_Tsfc=F in ice_in' ) 192 192 ENDIF 193 ELSEIF (ksbc == jp_ core) THEN193 ELSEIF (ksbc == jp_blk) THEN 194 194 IF ( .NOT. (calc_strair .AND. calc_Tsfc) ) THEN 195 195 CALL ctl_stop( 'STOP', 'cice_sbc_init : Forcing option requires calc_strair=T and calc_Tsfc=T in ice_in' ) … … 392 392 ENDDO 393 393 394 ELSE IF (ksbc == jp_ core) THEN395 396 ! Pass COREforcing fields to CICE (which will calculate heat fluxes etc itself)394 ELSE IF (ksbc == jp_blk) THEN 395 396 ! Pass bulk forcing fields to CICE (which will calculate heat fluxes etc itself) 397 397 ! x comp and y comp of atmosphere surface wind (CICE expects on T points) 398 398 ztmp(:,:) = wndi_ice(:,:) … … 585 585 ! Better to use evap and tprecip? (but for now don't read in evap in this case) 586 586 emp(:,:) = emp(:,:)+fr_i(:,:)*(tprecip(:,:)-sprecip(:,:)) 587 ELSE IF (ksbc == jp_ core) THEN587 ELSE IF (ksbc == jp_blk) THEN 588 588 emp(:,:) = (1.0-fr_i(:,:))*emp(:,:) 589 589 ELSE IF (ksbc == jp_purecpl) THEN … … 618 618 ! Scale qsr and qns according to ice fraction (bulk formulae only) 619 619 620 IF (ksbc == jp_ core) THEN620 IF (ksbc == jp_blk) THEN 621 621 qsr(:,:)=qsr(:,:)*(1.0-fr_i(:,:)) 622 622 qns(:,:)=qns(:,:)*(1.0-fr_i(:,:)) -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/SBC/sbcice_lim.F90
r7278 r7280 13 13 !! - ! 2012-10 (C. Rousset) add lim_diahsb 14 14 !! 3.6 ! 2014-07 (M. Vancoppenolle, G. Madec, O. Marti) revise coupled interface 15 !! 4.0 ! 2016-06 (L. Brodeau) new unified bulk routine (based on AeroBulk) 15 16 !!---------------------------------------------------------------------- 16 17 #if defined key_lim3 … … 28 29 USE sbc_oce ! Surface boundary condition: ocean fields 29 30 USE sbc_ice ! Surface boundary condition: ice fields 30 USE sbcblk_core ! Surface boundary condition: CORE bulk 31 USE sbcblk_clio ! Surface boundary condition: CLIO bulk 31 USE sbcblk ! Surface boundary condition: bulk 32 32 USE sbccpl ! Surface boundary condition: coupled interface 33 33 USE albedo ! ocean & ice albedo … … 47 47 USE limupdate2 ! update of global variables 48 48 USE limvar ! Ice variables switch 49 USE limctl ! 49 USE limctl ! 50 50 USE limmsh ! LIM mesh 51 51 USE limistate ! LIM initial state … … 56 56 USE iom ! I/O manager library 57 57 USE prtctl ! Print control 58 USE lib_fortran ! 58 USE lib_fortran ! 59 59 USE lbclnk ! lateral boundary condition - MPP link 60 60 USE lib_mpp ! MPP library … … 62 62 USE timing ! Timing 63 63 64 #if defined key_bdy 64 #if defined key_bdy 65 65 USE bdyice_lim ! unstructured open boundary data (bdy_ice_lim routine) 66 66 #endif … … 71 71 PUBLIC sbc_ice_lim ! routine called by sbcmod.F90 72 72 PUBLIC sbc_lim_init ! routine called by sbcmod.F90 73 73 74 74 !! * Substitutions 75 75 # include "vectopt_loop_substitute.h90" … … 84 84 !!--------------------------------------------------------------------- 85 85 !! *** ROUTINE sbc_ice_lim *** 86 !! 87 !! ** Purpose : update the ocean surface boundary condition via the 88 !! Louvain la Neuve Sea Ice Model time stepping 86 !! 87 !! ** Purpose : update the ocean surface boundary condition via the 88 !! Louvain la Neuve Sea Ice Model time stepping 89 89 !! 90 90 !! ** Method : ice model time stepping 91 !! - call the ice dynamics routine 92 !! - call the ice advection/diffusion routine 93 !! - call the ice thermodynamics routine 94 !! - call the routine that computes mass and 91 !! - call the ice dynamics routine 92 !! - call the ice advection/diffusion routine 93 !! - call the ice thermodynamics routine 94 !! - call the routine that computes mass and 95 95 !! heat fluxes at the ice/ocean interface 96 !! - save the outputs 96 !! - save the outputs 97 97 !! - save the outputs for restart when necessary 98 98 !! 99 99 !! ** Action : - time evolution of the LIM sea-ice model 100 100 !! - update all sbc variables below sea-ice: 101 !! utau, vtau, taum, wndm, qns , qsr, emp , sfx 101 !! utau, vtau, taum, wndm, qns , qsr, emp , sfx 102 102 !!--------------------------------------------------------------------- 103 103 INTEGER, INTENT(in) :: kt ! ocean time step 104 INTEGER, INTENT(in) :: kblk ! type of bulk (= 3 CLIO, =4 CORE, =5 COUPLED)104 INTEGER, INTENT(in) :: kblk ! type of bulk (=4 BULK, =5 COUPLED) 105 105 !! 106 106 INTEGER :: jl ! dummy loop index 107 107 REAL(wp), POINTER, DIMENSION(:,:,:) :: zalb_os, zalb_cs ! ice albedo under overcast/clear sky 108 REAL(wp), POINTER, DIMENSION(:,: ) :: zutau_ice, zvtau_ice 108 REAL(wp), POINTER, DIMENSION(:,: ) :: zutau_ice, zvtau_ice 109 109 !!---------------------------------------------------------------------- 110 110 … … 119 119 u_oce(:,:) = ssu_m(:,:) * umask(:,:,1) 120 120 v_oce(:,:) = ssv_m(:,:) * vmask(:,:,1) 121 121 122 122 ! masked sea surface freezing temperature [Kelvin] (set to rt0 over land) 123 123 CALL eos_fzp( sss_m(:,:) , t_bo(:,:) ) 124 124 t_bo(:,:) = ( t_bo(:,:) + rt0 ) * tmask(:,:,1) + rt0 * ( 1._wp - tmask(:,:,1) ) 125 125 126 126 ! Mask sea ice surface temperature (set to rt0 over land) 127 127 DO jl = 1, jpl 128 128 t_su(:,:,jl) = t_su(:,:,jl) * tmask(:,:,1) + rt0 * ( 1._wp - tmask(:,:,1) ) 129 END DO 130 ! 131 !------------------------------------------------! 132 ! --- Dynamical coupling with the atmosphere --- ! 129 END DO 130 ! 131 !------------------------------------------------! 132 ! --- Dynamical coupling with the atmosphere --- ! 133 133 !------------------------------------------------! 134 134 ! It provides the following fields: … … 136 136 !----------------------------------------------------------------- 137 137 SELECT CASE( kblk ) 138 CASE( jp_clio ) ; CALL blk_ice_clio_tau ! CLIO bulk formulation 139 CASE( jp_core ) ; CALL blk_ice_core_tau ! CORE bulk formulation 138 CASE( jp_blk ) ; CALL blk_ice_tau ! Bulk formulation 140 139 CASE( jp_purecpl ) ; CALL sbc_cpl_ice_tau( utau_ice , vtau_ice ) ! Coupled formulation 141 140 END SELECT 142 141 143 142 IF( ln_mixcpl) THEN ! Case of a mixed Bulk/Coupled formulation 144 143 CALL wrk_alloc( jpi,jpj , zutau_ice, zvtau_ice) … … 153 152 !-------------------------------------------------------! 154 153 numit = numit + nn_fsbc ! Ice model time step 155 ! 154 ! 156 155 CALL sbc_lim_bef ! Store previous ice values 157 156 CALL sbc_lim_diag0 ! set diag of mass, heat and salt fluxes to 0 … … 160 159 IF( .NOT. lk_c1d ) THEN 161 160 ! 162 CALL lim_dyn( kt ) ! Ice dynamics ( rheology/dynamics ) 161 CALL lim_dyn( kt ) ! Ice dynamics ( rheology/dynamics ) 163 162 ! 164 163 CALL lim_trp( kt ) ! Ice transport ( Advection/diffusion ) … … 167 166 ! 168 167 #if defined key_bdy 169 CALL bdy_ice_lim( kt ) ! bdy ice thermo 168 CALL bdy_ice_lim( kt ) ! bdy ice thermo 170 169 IF( ln_icectl ) CALL lim_prt( kt, iiceprt, jiceprt, 1, ' - ice thermo bdy - ' ) 171 170 #endif … … 174 173 ! 175 174 ENDIF 176 175 177 176 ! previous lead fraction and ice volume for flux calculations 178 CALL sbc_lim_bef 177 CALL sbc_lim_bef 179 178 CALL lim_var_glo2eqv ! ht_i and ht_s for ice albedo calculation 180 CALL lim_var_agg(1) ! at_i for coupling (via pfrld) 179 CALL lim_var_agg(1) ! at_i for coupling (via pfrld) 181 180 pfrld(:,:) = 1._wp - at_i(:,:) 182 181 phicif(:,:) = vt_i(:,:) 183 184 !------------------------------------------------------! 185 ! --- Thermodynamical coupling with the atmosphere --- ! 182 183 !------------------------------------------------------! 184 ! --- Thermodynamical coupling with the atmosphere --- ! 186 185 !------------------------------------------------------! 187 186 ! It provides the following fields: … … 196 195 197 196 SELECT CASE( kblk ) 198 CASE( jp_clio ) ! CLIO bulk formulation 199 ! In CLIO the cloud fraction is read in the climatology and the all-sky albedo 200 ! (alb_ice) is computed within the bulk routine 201 CALL blk_ice_clio_flx( t_su, zalb_cs, zalb_os, alb_ice ) 202 IF( ln_mixcpl ) CALL sbc_cpl_ice_flx( p_frld=pfrld, palbi=alb_ice, psst=sst_m, pist=t_su ) 203 IF( nn_limflx /= 2 ) CALL ice_lim_flx( t_su, alb_ice, qns_ice, qsr_ice, dqns_ice, evap_ice, devap_ice, nn_limflx ) 204 CASE( jp_core ) ! CORE bulk formulation 197 CASE( jp_blk ) ! bulk formulation 205 198 ! albedo depends on cloud fraction because of non-linear spectral effects 206 199 alb_ice(:,:,:) = ( 1. - cldf_ice ) * zalb_cs(:,:,:) + cldf_ice * zalb_os(:,:,:) 207 CALL blk_ice_ core_flx( t_su, alb_ice )200 CALL blk_ice_flx( t_su, alb_ice ) 208 201 IF( ln_mixcpl ) CALL sbc_cpl_ice_flx( p_frld=pfrld, palbi=alb_ice, psst=sst_m, pist=t_su ) 209 202 IF( nn_limflx /= 2 ) CALL ice_lim_flx( t_su, alb_ice, qns_ice, qsr_ice, dqns_ice, evap_ice, devap_ice, nn_limflx ) … … 219 212 ! --- ice thermodynamics --- ! 220 213 !----------------------------! 221 CALL lim_thd( kt ) ! Ice thermodynamics 214 CALL lim_thd( kt ) ! Ice thermodynamics 222 215 ! 223 216 CALL lim_update2( kt ) ! Corrections … … 225 218 CALL lim_sbc_flx( kt ) ! Update surface ocean mass, heat and salt fluxes 226 219 ! 227 IF(ln_limdiaout) CALL lim_diahsb ! Diagnostics and outputs 228 ! 229 CALL lim_wri( 1 ) ! Ice outputs 220 IF(ln_limdiaout) CALL lim_diahsb ! Diagnostics and outputs 221 ! 222 CALL lim_wri( 1 ) ! Ice outputs 230 223 ! 231 224 IF( kt == nit000 .AND. ln_rstart ) & 232 225 & CALL iom_close( numrir ) ! close input ice restart file 233 226 ! 234 IF( lrst_ice ) CALL lim_rst_write( kt ) ! Ice restart file 227 IF( lrst_ice ) CALL lim_rst_write( kt ) ! Ice restart file 235 228 ! 236 229 IF( ln_icectl ) CALL lim_ctl( kt ) ! alerts in case of model crash … … 248 241 ! 249 242 END SUBROUTINE sbc_ice_lim 250 243 251 244 252 245 SUBROUTINE sbc_lim_init … … 259 252 !!---------------------------------------------------------------------- 260 253 IF(lwp) WRITE(numout,*) 261 IF(lwp) WRITE(numout,*) 'sbc_ice_lim : update ocean surface boudary condition' 254 IF(lwp) WRITE(numout,*) 'sbc_ice_lim : update ocean surface boudary condition' 262 255 IF(lwp) WRITE(numout,*) '~~~~~~~~~~~ via Louvain la Neuve Ice Model (LIM-3) time stepping' 263 256 ! 264 ! ! Open the reference and configuration namelist files and namelist output file 265 CALL ctl_opn( numnam_ice_ref, 'namelist_ice_ref', 'OLD', 'FORMATTED', 'SEQUENTIAL', -1, numout, lwp ) 257 ! ! Open the reference and configuration namelist files and namelist output file 258 CALL ctl_opn( numnam_ice_ref, 'namelist_ice_ref', 'OLD', 'FORMATTED', 'SEQUENTIAL', -1, numout, lwp ) 266 259 CALL ctl_opn( numnam_ice_cfg, 'namelist_ice_cfg', 'OLD', 'FORMATTED', 'SEQUENTIAL', -1, numout, lwp ) 267 260 IF(lwm) CALL ctl_opn( numoni, 'output.namelist.ice', 'UNKNOWN', 'FORMATTED', 'SEQUENTIAL', -1, numout, lwp, 1 ) 268 261 ! 269 CALL ice_run! set some ice run parameters262 CALL lim_run_init ! set some ice run parameters 270 263 ! 271 264 ! ! Allocate the ice arrays … … 308 301 CALL lim_var_glo2eqv 309 302 ! 310 CALL lim_sbc_init ! ice surface boundary condition 303 CALL lim_sbc_init ! ice surface boundary condition 311 304 ! 312 305 fr_i(:,:) = at_i(:,:) ! initialisation of sea-ice fraction … … 318 311 ELSE ; rn_amax_2d(ji,jj) = rn_amax_s ! SH 319 312 ENDIF 320 ENDDO321 END DO322 ! 323 nstart = numit + nn_fsbc 324 nitrun = nitend - nit000 + 1 325 nlast = numit + nitrun 313 END DO 314 END DO 315 ! 316 nstart = numit + nn_fsbc 317 nitrun = nitend - nit000 + 1 318 nlast = numit + nitrun 326 319 ! 327 320 IF( nstock == 0 ) nstock = nlast + 1 … … 330 323 331 324 332 SUBROUTINE ice_run325 SUBROUTINE lim_run_init 333 326 !!------------------------------------------------------------------- 334 !! *** ROUTINE ice_run***335 !! 327 !! *** ROUTINE lim_run_init *** 328 !! 336 329 !! ** Purpose : Definition some run parameter for ice model 337 330 !! 338 !! ** Method : Read the namicerun namelist and check the parameter 331 !! ** Method : Read the namicerun namelist and check the parameter 339 332 !! values called at the first timestep (nit000) 340 333 !! … … 343 336 INTEGER :: ios ! Local integer output status for namelist read 344 337 NAMELIST/namicerun/ jpl, nlay_i, nlay_s, cn_icerst_in, cn_icerst_indir, cn_icerst_out, cn_icerst_outdir, & 345 & ln_limdyn, rn_amax_n, rn_amax_s, ln_limdiahsb, ln_limdiaout, ln_icectl, iiceprt, jiceprt 338 & ln_limdyn, rn_amax_n, rn_amax_s, ln_limdiahsb, ln_limdiaout, ln_icectl, iiceprt, jiceprt 346 339 !!------------------------------------------------------------------- 347 ! 340 ! 348 341 REWIND( numnam_ice_ref ) ! Namelist namicerun in reference namelist : Parameters for ice 349 342 READ ( numnam_ice_ref, namicerun, IOSTAT = ios, ERR = 901) … … 357 350 IF(lwp) THEN ! control print 358 351 WRITE(numout,*) 359 WRITE(numout,*) 'ice_run : ice share parameters for dynamics/advection/thermo of sea-ice' 360 WRITE(numout,*) ' ~~~~~~' 361 WRITE(numout,*) ' number of ice categories = ', jpl 362 WRITE(numout,*) ' number of ice layers = ', nlay_i 363 WRITE(numout,*) ' number of snow layers = ', nlay_s 364 WRITE(numout,*) ' switch for ice dynamics (1) or not (0) ln_limdyn = ', ln_limdyn 365 WRITE(numout,*) ' maximum ice concentration for NH = ', rn_amax_n 366 WRITE(numout,*) ' maximum ice concentration for SH = ', rn_amax_s 367 WRITE(numout,*) ' Diagnose heat/salt budget or not ln_limdiahsb = ', ln_limdiahsb 368 WRITE(numout,*) ' Output heat/salt budget or not ln_limdiaout = ', ln_limdiaout 369 WRITE(numout,*) ' control prints in ocean.out for (i,j)=(iiceprt,jiceprt) = ', ln_icectl 370 WRITE(numout,*) ' i-index for control prints (ln_icectl=true) = ', iiceprt 371 WRITE(numout,*) ' j-index for control prints (ln_icectl=true) = ', jiceprt 352 WRITE(numout,*) 'lim_run_init : ice share parameters for dynamics/advection/thermo of sea-ice' 353 WRITE(numout,*) '~~~~~~~~~~~~' 354 WRITE(numout,*) ' Namelist namicerun' 355 WRITE(numout,*) ' number of ice categories = ', jpl 356 WRITE(numout,*) ' number of ice layers = ', nlay_i 357 WRITE(numout,*) ' number of snow layers = ', nlay_s 358 WRITE(numout,*) ' switch for ice dynamics (1) or not (0) ln_limdyn = ', ln_limdyn 359 WRITE(numout,*) ' maximum ice concentration for NH = ', rn_amax_n 360 WRITE(numout,*) ' maximum ice concentration for SH = ', rn_amax_s 361 WRITE(numout,*) ' Diagnose heat/salt budget or not ln_limdiahsb = ', ln_limdiahsb 362 WRITE(numout,*) ' Output heat/salt budget or not ln_limdiaout = ', ln_limdiaout 363 WRITE(numout,*) ' control prints in ocean.out for (i,j)=(iiceprt,jiceprt) = ', ln_icectl 364 WRITE(numout,*) ' i-index for control prints (ln_icectl=true) = ', iiceprt 365 WRITE(numout,*) ' j-index for control prints (ln_icectl=true) = ', jiceprt 372 366 ENDIF 373 367 ! 374 368 ! sea-ice timestep and inverse 375 rdt_ice = nn_fsbc * rdt 376 r1_rdtice = 1._wp / rdt_ice 369 rdt_ice = nn_fsbc * rdt 370 r1_rdtice = 1._wp / rdt_ice 377 371 378 372 ! inverse of nlay_i and nlay_s … … 384 378 #endif 385 379 ! 386 END SUBROUTINE ice_run380 END SUBROUTINE lim_run_init 387 381 388 382 … … 414 408 IF(lwp) THEN ! control print 415 409 WRITE(numout,*) 416 WRITE(numout,*) 'ice_itd : ice cat distribution' 417 WRITE(numout,*) ' ~~~~~~' 418 WRITE(numout,*) ' shape of ice categories distribution nn_catbnd = ', nn_catbnd 419 WRITE(numout,*) ' mean ice thickness in the domain (used if nn_catbnd=2) rn_himean = ', rn_himean 410 WRITE(numout,*) 'lim_itd_init : Initialization of ice cat distribution ' 411 WRITE(numout,*) '~~~~~~~~~~~~' 412 WRITE(numout,*) ' Namelist namiceitd' 413 WRITE(numout,*) ' shape of ice categories distribution nn_catbnd = ', nn_catbnd 414 WRITE(numout,*) ' mean ice thickness in the domain (used if nn_catbnd=2) rn_himean = ', rn_himean 420 415 ENDIF 421 416 ! 422 417 !---------------------------------- 423 !- Thickness categories boundaries 418 !- Thickness categories boundaries 424 419 !---------------------------------- 425 IF(lwp) WRITE(numout,*)426 IF(lwp) WRITE(numout,*) 'lim_itd_init : Initialization of ice cat distribution '427 IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~'428 420 ! 429 421 hi_max(:) = 0._wp … … 443 435 zalpha = 0.05_wp 444 436 zhmax = 3._wp * rn_himean 445 DO jl = 1, jpl 437 DO jl = 1, jpl 446 438 znum = jpl * ( zhmax+1 )**zalpha 447 439 zden = REAL( jpl-jl , wp ) * ( zhmax + 1._wp )**zalpha + REAL( jl , wp ) … … 457 449 hi_max(jpl) = 99._wp ! set to a big value to ensure that all ice is thinner than hi_max(jpl) 458 450 ! 459 IF(lwp) WRITE(numout,*) ' Thickness category boundaries ' 460 IF(lwp) WRITE(numout,*) ' hi_max ', hi_max(0:jpl) 451 IF(lwp) WRITE(numout,*) 452 IF(lwp) WRITE(numout,*) ' Thickness category boundaries ' 453 IF(lwp) WRITE(numout,*) ' hi_max ', hi_max(0:jpl) 461 454 ! 462 455 END SUBROUTINE lim_itd_init 463 456 464 457 465 458 SUBROUTINE ice_lim_flx( ptn_ice , palb_ice, pqns_ice , & 466 459 & pqsr_ice, pdqn_ice, pevap_ice, pdevap_ice, k_limflx ) 467 460 !!--------------------------------------------------------------------- 468 461 !! *** ROUTINE ice_lim_flx *** 469 !! 462 !! 470 463 !! ** Purpose : update the ice surface boundary condition by averaging and / or 471 !! redistributing fluxes on ice categories 472 !! 473 !! ** Method : average then redistribute 474 !! 475 !! ** Action : 464 !! redistributing fluxes on ice categories 465 !! 466 !! ** Method : average then redistribute 467 !! 468 !! ** Action : 476 469 !!--------------------------------------------------------------------- 477 INTEGER , INTENT(in ) :: k_limflx ! =-1 do nothing; =0 average ; 478 ! ! = 1 average and redistribute ; =2 redistribute479 REAL(wp), DIMENSION(:,:,:), INTENT(in ) :: ptn_ice ! ice surface temperature 470 INTEGER , INTENT(in ) :: k_limflx ! =-1 do nothing; =0 average ; 471 ! ! = 1 average and redistribute ; =2 redistribute 472 REAL(wp), DIMENSION(:,:,:), INTENT(in ) :: ptn_ice ! ice surface temperature 480 473 REAL(wp), DIMENSION(:,:,:), INTENT(in ) :: palb_ice ! ice albedo 481 474 REAL(wp), DIMENSION(:,:,:), INTENT(inout) :: pqns_ice ! non solar flux … … 526 519 CALL wrk_alloc( jpi,jpj, zalb_m, ztem_m ) 527 520 ! 528 zalb_m(:,:) = fice_ice_ave ( palb_ice (:,:,:) ) 529 ztem_m(:,:) = fice_ice_ave ( ptn_ice (:,:,:) ) 521 zalb_m(:,:) = fice_ice_ave ( palb_ice (:,:,:) ) 522 ztem_m(:,:) = fice_ice_ave ( ptn_ice (:,:,:) ) 530 523 DO jl = 1, jpl 531 524 pqns_ice (:,:,jl) = pqns_ice (:,:,jl) + pdqn_ice (:,:,jl) * ( ptn_ice(:,:,jl) - ztem_m(:,:) ) 532 525 pevap_ice(:,:,jl) = pevap_ice(:,:,jl) + pdevap_ice(:,:,jl) * ( ptn_ice(:,:,jl) - ztem_m(:,:) ) 533 pqsr_ice (:,:,jl) = pqsr_ice (:,:,jl) * ( 1._wp - palb_ice(:,:,jl) ) / ( 1._wp - zalb_m(:,:) ) 526 pqsr_ice (:,:,jl) = pqsr_ice (:,:,jl) * ( 1._wp - palb_ice(:,:,jl) ) / ( 1._wp - zalb_m(:,:) ) 534 527 END DO 535 528 ! … … 546 539 !! *** ROUTINE sbc_lim_bef *** 547 540 !! 548 !! ** purpose : store ice variables at "before" time step 541 !! ** purpose : store ice variables at "before" time step 549 542 !!---------------------------------------------------------------------- 550 543 a_i_b (:,:,:) = a_i (:,:,:) ! ice area 551 544 e_i_b (:,:,:,:) = e_i (:,:,:,:) ! ice thermal energy 552 545 v_i_b (:,:,:) = v_i (:,:,:) ! ice volume 553 v_s_b (:,:,:) = v_s (:,:,:) ! snow volume 546 v_s_b (:,:,:) = v_s (:,:,:) ! snow volume 554 547 e_s_b (:,:,:,:) = e_s (:,:,:,:) ! snow thermal energy 555 548 smv_i_b(:,:,:) = smv_i(:,:,:) ! salt content … … 557 550 u_ice_b(:,:) = u_ice(:,:) 558 551 v_ice_b(:,:) = v_ice(:,:) 559 ! 552 ! 560 553 END SUBROUTINE sbc_lim_bef 561 554 … … 569 562 !!---------------------------------------------------------------------- 570 563 sfx (:,:) = 0._wp ; 571 sfx_bri(:,:) = 0._wp ; 564 sfx_bri(:,:) = 0._wp ; 572 565 sfx_sni(:,:) = 0._wp ; sfx_opw(:,:) = 0._wp 573 566 sfx_bog(:,:) = 0._wp ; sfx_dyn(:,:) = 0._wp … … 580 573 wfx_bom(:,:) = 0._wp ; wfx_sum(:,:) = 0._wp 581 574 wfx_res(:,:) = 0._wp ; wfx_sub(:,:) = 0._wp 582 wfx_spr(:,:) = 0._wp ; 583 ! 584 hfx_thd(:,:) = 0._wp ; 575 wfx_spr(:,:) = 0._wp ; 576 ! 577 hfx_thd(:,:) = 0._wp ; 585 578 hfx_snw(:,:) = 0._wp ; hfx_opw(:,:) = 0._wp 586 579 hfx_bog(:,:) = 0._wp ; hfx_dyn(:,:) = 0._wp 587 580 hfx_bom(:,:) = 0._wp ; hfx_sum(:,:) = 0._wp 588 581 hfx_res(:,:) = 0._wp ; hfx_sub(:,:) = 0._wp 589 hfx_spr(:,:) = 0._wp ; hfx_dif(:,:) = 0._wp 582 hfx_spr(:,:) = 0._wp ; hfx_dif(:,:) = 0._wp 590 583 hfx_err(:,:) = 0._wp ; hfx_err_rem(:,:) = 0._wp 591 584 hfx_err_dif(:,:) = 0._wp … … 595 588 afx_dyn(:,:) = 0._wp ; afx_thd(:,:) = 0._wp 596 589 ! 597 diag_heat(:,:) = 0._wp ; diag_smvi(:,:) = 0._wp ;598 diag_vice(:,:) = 0._wp ; diag_vsnw(:,:) = 0._wp ;590 diag_heat(:,:) = 0._wp ; diag_smvi(:,:) = 0._wp 591 diag_vice(:,:) = 0._wp ; diag_vsnw(:,:) = 0._wp 599 592 ! 600 593 END SUBROUTINE sbc_lim_diag0 601 594 602 595 603 596 FUNCTION fice_cell_ave ( ptab ) 604 597 !!-------------------------------------------------------------------------- … … 608 601 REAL (wp), DIMENSION (jpi,jpj,jpl), INTENT (in) :: ptab 609 602 INTEGER :: jl ! Dummy loop index 610 611 fice_cell_ave (:,:) = 0. 0_wp603 604 fice_cell_ave (:,:) = 0._wp 612 605 DO jl = 1, jpl 613 606 fice_cell_ave (:,:) = fice_cell_ave (:,:) + a_i (:,:,jl) * ptab (:,:,jl) 614 607 END DO 615 608 616 609 END FUNCTION fice_cell_ave 617 618 610 611 619 612 FUNCTION fice_ice_ave ( ptab ) 620 613 !!-------------------------------------------------------------------------- -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/SBC/sbcice_lim_2.F90
r6140 r7280 24 24 USE sbc_oce ! Surface boundary condition: ocean fields 25 25 USE sbc_ice ! Surface boundary condition: ice fields 26 USE sbcblk_core ! Surface boundary condition: CORE bulk 27 USE sbcblk_clio ! Surface boundary condition: CLIO bulk 26 USE sbcblk ! Surface boundary condition: bulk 28 27 USE sbccpl ! Surface boundary condition: coupled interface 29 28 USE albedo … … 93 92 !!--------------------------------------------------------------------- 94 93 INTEGER, INTENT(in) :: kt ! ocean time step 95 INTEGER, INTENT(in) :: ksbc ! type of sbc ( = 3 CLIO bulk ; =4 COREbulk ; =5 coupled )94 INTEGER, INTENT(in) :: ksbc ! type of sbc ( =4 bulk ; =5 coupled ) 96 95 !! 97 96 INTEGER :: ji, jj ! dummy loop indices … … 161 160 162 161 SELECT CASE( ksbc ) 163 CASE( jp_ core , jp_purecpl ) ! COREand COUPLED bulk formulations162 CASE( jp_blk , jp_purecpl ) ! BULK and COUPLED bulk formulations 164 163 165 164 ! albedo depends on cloud fraction because of non-linear spectral effects 166 165 zalb_ice(:,:,:) = ( 1. - cldf_ice ) * zalb_cs(:,:,:) + cldf_ice * zalb_os(:,:,:) 167 ! In CLIO the cloud fraction is read in the climatology and the all-sky albedo168 ! (zalb_ice) is computed within the bulk routine169 166 170 167 END SELECT … … 184 181 ! 185 182 SELECT CASE( ksbc ) 186 CASE( jp_clio ) ! CLIO bulk formulation 187 ! CALL blk_ice_clio( zsist, zalb_cs , zalb_os , zalb_ice , & 188 ! & utau_ice , vtau_ice , qns_ice , qsr_ice, & 189 ! & qla_ice , dqns_ice , dqla_ice , & 190 ! & tprecip , sprecip , & 191 ! & fr1_i0 , fr2_i0 , cp_ice_msh , jpl ) 192 CALL blk_ice_clio_tau 193 CALL blk_ice_clio_flx( zsist, zalb_cs, zalb_os, zalb_ice ) 194 195 CASE( jp_core ) ! CORE bulk formulation 196 CALL blk_ice_core_tau 197 CALL blk_ice_core_flx( zsist, zalb_ice ) 198 183 ! 184 CASE( jp_blk ) ! Bulk formulation 185 CALL blk_ice_tau 186 CALL blk_ice_flx( zsist, zalb_ice ) 187 ! 199 188 CASE( jp_purecpl ) ! Coupled formulation : atmosphere-ice stress only (fluxes provided after ice dynamics) 200 189 CALL sbc_cpl_ice_tau( utau_ice , vtau_ice ) 190 ! 201 191 END SELECT 202 192 -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/SBC/sbcmod.F90
r7278 r7280 13 13 !! 3.4 ! 2011-11 (C. Harris) CICE added as an option 14 14 !! 3.5 ! 2012-11 (A. Coward, G. Madec) Rethink of heat, mass and salt surface fluxes 15 !! 3.6 ! 2014-11 (P. Mathiot, C. Harris) add ice shelves melting 15 !! 3.6 ! 2014-11 (P. Mathiot, C. Harris) add ice shelves melting 16 !! 4.0 ! 2016-06 (L. Brodeau) new general bulk formulation 16 17 !!---------------------------------------------------------------------- 17 18 … … 30 31 USE sbcssm ! surface boundary condition: sea-surface mean variables 31 32 USE sbcflx ! surface boundary condition: flux formulation 32 USE sbcblk_clio ! surface boundary condition: bulk formulation : CLIO 33 USE sbcblk_core ! surface boundary condition: bulk formulation : CORE 34 USE sbcblk_mfs ! surface boundary condition: bulk formulation : MFS 33 USE sbcblk ! surface boundary condition: bulk formulation 35 34 USE sbcice_if ! surface boundary condition: ice-if sea-ice model 36 35 USE sbcice_lim ! surface boundary condition: LIM 3.0 sea-ice model 37 36 USE sbcice_lim_2 ! surface boundary condition: LIM 2.0 sea-ice model 38 37 USE sbcice_cice ! surface boundary condition: CICE sea-ice model 39 USE sbccpl ! surface boundary condition: coupled f lorulation38 USE sbccpl ! surface boundary condition: coupled formulation 40 39 USE cpl_oasis3 ! OASIS routines for coupling 41 40 USE sbcssr ! surface boundary condition: sea surface restoring … … 63 62 PUBLIC sbc ! routine called by step.F90 64 63 PUBLIC sbc_init ! routine called by opa.F90 65 64 66 65 INTEGER :: nsbc ! type of surface boundary condition (deduced from namsbc informations) 67 66 68 67 !!---------------------------------------------------------------------- 69 68 !! NEMO/OPA 4.0 , NEMO-consortium (2016) … … 85 84 !! - nsbc: type of sbc 86 85 !!---------------------------------------------------------------------- 87 INTEGER :: icpt ! local integer 88 !! 89 NAMELIST/namsbc/ nn_fsbc , ln_usr , ln_flx, ln_blk_clio, ln_blk_core, ln_blk_mfs, & 90 & ln_cpl , ln_mixcpl, nn_components , nn_limflx , & 91 & ln_traqsr, ln_dm2dc , & 92 & nn_ice , nn_ice_embd, & 93 & ln_rnf , ln_ssr , ln_isf , nn_fwb , ln_apr_dyn, & 94 & ln_wave , & 95 & nn_lsm 96 INTEGER :: ios 97 INTEGER :: ierr, ierr0, ierr1, ierr2, ierr3, jpm 98 LOGICAL :: ll_purecpl 86 INTEGER :: ios, icpt ! local integer 87 LOGICAL :: ll_purecpl, ll_opa, ll_not_nemo ! local logical 88 !! 89 NAMELIST/namsbc/ nn_fsbc , & 90 & ln_usr , ln_flx , ln_blk , & 91 & ln_cpl , ln_mixcpl, nn_components, nn_limflx, & 92 & nn_ice , nn_ice_embd, & 93 & ln_traqsr, ln_dm2dc , & 94 & ln_rnf , nn_fwb , ln_ssr , ln_isf , ln_apr_dyn, & 95 & ln_wave , & 96 & nn_lsm 99 97 !!---------------------------------------------------------------------- 100 98 ! … … 105 103 ENDIF 106 104 ! 107 REWIND( numnam_ref ) ! Namelist namsbc in reference namelist : Surface boundary 105 ! !** read Surface Module namelist 106 REWIND( numnam_ref ) !* Namelist namsbc in reference namelist : Surface boundary 108 107 READ ( numnam_ref, namsbc, IOSTAT = ios, ERR = 901) 109 108 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namsbc in reference namelist', lwp ) 110 109 ! 111 REWIND( numnam_cfg ) !Namelist namsbc in configuration namelist : Parameters of the run110 REWIND( numnam_cfg ) !* Namelist namsbc in configuration namelist : Parameters of the run 112 111 READ ( numnam_cfg, namsbc, IOSTAT = ios, ERR = 902 ) 113 112 902 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namsbc in configuration namelist', lwp ) 114 113 IF(lwm) WRITE( numond, namsbc ) 115 114 ! 116 ! !overwrite namelist parameter using CPP key information115 ! !* overwrite namelist parameter using CPP key information 117 116 IF( Agrif_Root() ) THEN ! AGRIF zoom 118 IF( lk_lim2 ) nn_ice = 2119 IF( lk_lim3 ) nn_ice = 3120 IF( lk_cice ) nn_ice = 4121 ENDIF 122 ! 123 IF(lwp) THEN !Control print117 IF( lk_lim2 ) nn_ice = 2 118 IF( lk_lim3 ) nn_ice = 3 119 IF( lk_cice ) nn_ice = 4 120 ENDIF 121 ! 122 IF(lwp) THEN !* Control print 124 123 WRITE(numout,*) ' Namelist namsbc (partly overwritten with CPP key setting)' 125 WRITE(numout,*) ' Frequency update of sbc (and ice) nn_fsbc = ', nn_fsbc124 WRITE(numout,*) ' frequency update of sbc (and ice) nn_fsbc = ', nn_fsbc 126 125 WRITE(numout,*) ' Type of air-sea fluxes : ' 127 126 WRITE(numout,*) ' user defined formulation ln_usr = ', ln_usr 128 127 WRITE(numout,*) ' flux formulation ln_flx = ', ln_flx 129 WRITE(numout,*) ' CLIO bulk formulation ln_blk_clio = ', ln_blk_clio 130 WRITE(numout,*) ' CORE bulk formulation ln_blk_core = ', ln_blk_core 131 WRITE(numout,*) ' MFS bulk formulation ln_blk_mfs = ', ln_blk_mfs 128 WRITE(numout,*) ' bulk formulation ln_blk = ', ln_blk 132 129 WRITE(numout,*) ' Type of coupling (Ocean/Ice/Atmosphere) : ' 133 130 WRITE(numout,*) ' ocean-atmosphere coupled formulation ln_cpl = ', ln_cpl 134 WRITE(numout,*) ' forced-coupled mixed formulation ln_mixcpl = ', ln_mixcpl 131 WRITE(numout,*) ' mixed forced-coupled formulation ln_mixcpl = ', ln_mixcpl 132 !!gm lk_oasis is controlled by key_oasis3 ===>>> It shoud be removed from the namelist 135 133 WRITE(numout,*) ' OASIS coupling (with atm or sas) lk_oasis = ', lk_oasis 136 134 WRITE(numout,*) ' components of your executable nn_components = ', nn_components 137 135 WRITE(numout,*) ' Multicategory heat flux formulation (LIM3) nn_limflx = ', nn_limflx 138 136 WRITE(numout,*) ' Sea-ice : ' 139 WRITE(numout,*) ' ice management in the sbc (=0/1/2/3) nn_ice = ', nn_ice 137 WRITE(numout,*) ' ice management in the sbc (=0/1/2/3) nn_ice = ', nn_ice 140 138 WRITE(numout,*) ' ice-ocean embedded/levitating (=0/1/2) nn_ice_embd = ', nn_ice_embd 141 139 WRITE(numout,*) ' Misc. options of sbc : ' 142 140 WRITE(numout,*) ' Light penetration in temperature Eq. ln_traqsr = ', ln_traqsr 143 WRITE(numout,*) ' daily mean to diurnal cycle qsr ln_dm2dc = ', ln_dm2dc 141 WRITE(numout,*) ' daily mean to diurnal cycle qsr ln_dm2dc = ', ln_dm2dc 144 142 WRITE(numout,*) ' Sea Surface Restoring on SST and/or SSS ln_ssr = ', ln_ssr 145 143 WRITE(numout,*) ' FreshWater Budget control (=0/1/2) nn_fwb = ', nn_fwb … … 149 147 WRITE(numout,*) ' closed sea (=0/1) (set in namdom) nn_closea = ', nn_closea 150 148 WRITE(numout,*) ' nb of iterations if land-sea-mask applied nn_lsm = ', nn_lsm 151 WRITE(numout,*) ' surface wave ln_wave = ', ln_wave 149 WRITE(numout,*) ' surface wave ln_wave = ', ln_wave 152 150 ENDIF 153 151 ! … … 157 155 IF( MOD( rdt , 2. ) /= 0. ) CALL ctl_stop( 'the time step (in second) must be an even number' ) 158 156 ENDIF 159 ! 160 IF(lwp) THEN 161 WRITE(numout,*) 162 SELECT CASE ( nn_limflx ) ! LIM3 Multi-category heat flux formulation 163 CASE ( -1 ) ; WRITE(numout,*) ' LIM3: use per-category fluxes (nn_limflx = -1) ' 164 CASE ( 0 ) ; WRITE(numout,*) ' LIM3: use average per-category fluxes (nn_limflx = 0) ' 165 CASE ( 1 ) ; WRITE(numout,*) ' LIM3: use average then redistribute per-category fluxes (nn_limflx = 1) ' 166 CASE ( 2 ) ; WRITE(numout,*) ' LIM3: Redistribute a single flux over categories (nn_limflx = 2) ' 157 ! !** check option consistency 158 ! 159 IF(lwp) WRITE(numout,*) !* Single / Multi - executable (NEMO / OPA+SAS) 160 SELECT CASE( nn_components ) 161 CASE( jp_iam_nemo ) 162 IF(lwp) WRITE(numout,*) ' NEMO configured as a single executable (i.e. including both OPA and Surface module' 163 CASE( jp_iam_opa ) 164 IF(lwp) WRITE(numout,*) ' Multi executable configuration. Here, OPA component' 165 IF( .NOT.lk_oasis ) CALL ctl_stop( 'sbc_init : OPA-SAS coupled via OASIS, but key_oasis3 disabled' ) 166 IF( ln_cpl ) CALL ctl_stop( 'sbc_init : OPA-SAS coupled via OASIS, but ln_cpl = T in OPA' ) 167 IF( ln_mixcpl ) CALL ctl_stop( 'sbc_init : OPA-SAS coupled via OASIS, but ln_mixcpl = T in OPA' ) 168 CASE( jp_iam_sas ) 169 IF(lwp) WRITE(numout,*) ' Multi executable configuration. Here, SAS component' 170 IF( .NOT.lk_oasis ) CALL ctl_stop( 'sbc_init : OPA-SAS coupled via OASIS, but key_oasis3 disabled' ) 171 IF( ln_mixcpl ) CALL ctl_stop( 'sbc_init : OPA-SAS coupled via OASIS, but ln_mixcpl = T in OPA' ) 172 CASE DEFAULT 173 CALL ctl_stop( 'sbc_init : unsupported value for nn_components' ) 174 END SELECT 175 ! !* coupled options 176 IF( ln_cpl ) THEN 177 IF( .NOT. lk_oasis ) CALL ctl_stop( 'sbc_init : coupled mode with an atmosphere model (ln_cpl=T)', & 178 & ' required to defined key_oasis3' ) 179 ENDIF 180 IF( ln_mixcpl ) THEN 181 IF( .NOT. lk_oasis ) CALL ctl_stop( 'sbc_init : mixed forced-coupled mode (ln_mixcpl=T) ', & 182 & ' required to defined key_oasis3' ) 183 IF( .NOT.ln_cpl ) CALL ctl_stop( 'sbc_init : mixed forced-coupled mode (ln_mixcpl=T) requires ln_cpl = T' ) 184 IF( nn_components /= jp_iam_nemo ) & 185 & CALL ctl_stop( 'sbc_init : the mixed forced-coupled mode (ln_mixcpl=T) ', & 186 & ' not yet working with sas-opa coupling via oasis' ) 187 ENDIF 188 ! !* sea-ice 189 SELECT CASE( nn_ice ) 190 CASE( 0 ) !- no ice in the domain 191 CASE( 1 ) !- Ice-cover climatology ("Ice-if" model) 192 CASE( 2 ) !- LIM2 ice model 193 IF( .NOT.( ln_blk .OR. ln_cpl ) ) CALL ctl_stop( 'sbc_init : LIM2 sea-ice model requires ln_blk or ln_cpl = T' ) 194 CASE( 3 ) !- LIM3 ice model 195 IF( .NOT.( ln_blk .OR. ln_cpl ) ) CALL ctl_stop( 'sbc_init : LIM3 sea-ice model requires ln_blk or ln_cpl = T' ) 196 IF( nn_ice_embd == 0 ) CALL ctl_stop( 'sbc_init : LIM3 sea-ice models require nn_ice_embd = 1 or 2' ) 197 CASE( 4 ) !- CICE ice model 198 IF( .NOT.( ln_blk .OR. ln_cpl ) ) CALL ctl_stop( 'sbc_init : CICE sea-ice model requires ln_blk or ln_cpl = T' ) 199 IF( nn_ice_embd == 0 ) CALL ctl_stop( 'sbc_init : CICE sea-ice models require nn_ice_embd = 1 or 2' ) 200 IF( lk_agrif ) CALL ctl_stop( 'sbc_init : CICE sea-ice model not currently available with AGRIF' ) 201 CASE DEFAULT !- not supported 202 END SELECT 203 ! 204 IF( nn_ice == 3 ) THEN !- LIM3 case: multi-category flux option 205 IF(lwp) WRITE(numout,*) 206 SELECT CASE( nn_limflx ) ! LIM3 Multi-category heat flux formulation 207 CASE ( -1 ) 208 IF(lwp) WRITE(numout,*) ' LIM3: use per-category fluxes (nn_limflx = -1) ' 209 IF( ln_cpl ) CALL ctl_stop( 'sbc_init : the chosen nn_limflx for LIM3 in coupled mode must be 0 or 2' ) 210 CASE ( 0 ) 211 IF(lwp) WRITE(numout,*) ' LIM3: use average per-category fluxes (nn_limflx = 0) ' 212 CASE ( 1 ) 213 IF(lwp) WRITE(numout,*) ' LIM3: use average then redistribute per-category fluxes (nn_limflx = 1) ' 214 IF( ln_cpl ) CALL ctl_stop( 'sbc_init : the chosen nn_limflx for LIM3 in coupled mode must be 0 or 2' ) 215 CASE ( 2 ) 216 IF(lwp) WRITE(numout,*) ' LIM3: Redistribute a single flux over categories (nn_limflx = 2) ' 217 IF( .NOT.ln_cpl ) CALL ctl_stop( 'sbc_init : the chosen nn_limflx for LIM3 in forced mode cannot be 2' ) 218 CASE DEFAULT 219 CALL ctl_stop( 'sbcmod: LIM3 option, nn_limflx, should be between -1 and 2' ) 167 220 END SELECT 168 ENDIF 169 ! 170 IF( nn_components /= jp_iam_nemo .AND. .NOT. lk_oasis ) & 171 & CALL ctl_stop( 'sbc_init : OPA-SAS coupled via OASIS, but key_oasis3 disabled' ) 172 IF( nn_components == jp_iam_opa .AND. ln_cpl ) & 173 & CALL ctl_stop( 'sbc_init : OPA-SAS coupled via OASIS, but ln_cpl = T in OPA' ) 174 IF( nn_components == jp_iam_opa .AND. ln_mixcpl ) & 175 & CALL ctl_stop( 'sbc_init : OPA-SAS coupled via OASIS, but ln_mixcpl = T in OPA' ) 176 IF( ln_cpl .AND. .NOT. lk_oasis ) & 177 & CALL ctl_stop( 'sbc_init : OASIS-coupled atmosphere model, but key_oasis3 disabled' ) 178 IF( ln_mixcpl .AND. .NOT. lk_oasis ) & 179 & CALL ctl_stop( 'the forced-coupled mixed mode (ln_mixcpl) requires the cpp key key_oasis3' ) 180 IF( ln_mixcpl .AND. .NOT. ln_cpl ) & 181 & CALL ctl_stop( 'the forced-coupled mixed mode (ln_mixcpl) requires ln_cpl = T' ) 182 IF( ln_mixcpl .AND. nn_components /= jp_iam_nemo ) & 183 & CALL ctl_stop( 'the forced-coupled mixed mode (ln_mixcpl) is not yet working with sas-opa coupling via oasis' ) 184 185 ! ! allocate sbc arrays 221 ELSE ! other sea-ice model 222 IF( nn_limflx >= 0 ) CALL ctl_warn( 'sbc_init : multi-category flux option (nn_limflx) only available in LIM3' ) 223 ENDIF 224 ! 225 ! !** allocate and set required variables 226 ! 227 ! !* allocate sbc arrays 186 228 IF( sbc_oce_alloc() /= 0 ) CALL ctl_stop( 'sbc_init : unable to allocate sbc_oce arrays' ) 187 188 ! ! Checks: 189 IF( .NOT. ln_isf ) THEN ! variable initialisation if no ice shelf 229 ! 230 IF( .NOT.ln_isf ) THEN !* No ice-shelf in the domain : allocate and set to zero 190 231 IF( sbc_isf_alloc() /= 0 ) CALL ctl_stop( 'STOP', 'sbc_init : unable to allocate sbc_isf arrays' ) 191 fwfisf (:,:) = 0. 0_wp ; fwfisf_b (:,:) = 0.0_wp192 risf_tsc(:,:,:) = 0.0_wp ; risf_tsc_b(:,:,:) = 0.0_wp232 fwfisf (:,:) = 0._wp ; risf_tsc (:,:,:) = 0._wp 233 fwfisf_b(:,:) = 0._wp ; risf_tsc_b(:,:,:) = 0._wp 193 234 END IF 194 IF( nn_ice == 0 .AND. nn_components /= jp_iam_opa ) fr_i(:,:) = 0._wp ! no ice in the domain, ice fraction is always zero 195 196 sfx(:,:) = 0._wp ! the salt flux due to freezing/melting will be computed (i.e. will be non-zero) 197 ! only if sea-ice is present 198 199 fmmflx(:,:) = 0._wp ! freezing-melting array initialisation 200 201 taum(:,:) = 0._wp ! Initialise taum for use in gls in case of reduced restart 202 203 ! ! restartability 204 IF( ( nn_ice == 2 .OR. nn_ice ==3 ) .AND. .NOT.( ln_blk_clio .OR. ln_blk_core .OR. ln_cpl ) ) & 205 & CALL ctl_stop( 'LIM sea-ice model requires a bulk formulation or coupled configuration' ) 206 IF( nn_ice == 4 .AND. .NOT.( ln_blk_core .OR. ln_cpl ) ) & 207 & CALL ctl_stop( 'CICE sea-ice model requires ln_blk_core or ln_cpl' ) 208 IF( nn_ice == 4 .AND. lk_agrif ) & 209 & CALL ctl_stop( 'CICE sea-ice model not currently available with AGRIF' ) 210 IF( ( nn_ice == 3 .OR. nn_ice == 4 ) .AND. nn_ice_embd == 0 ) & 211 & CALL ctl_stop( 'LIM3 and CICE sea-ice models require nn_ice_embd = 1 or 2' ) 212 IF( ( nn_ice /= 3 ) .AND. ( nn_limflx >= 0 ) ) & 213 & WRITE(numout,*) 'The nn_limflx>=0 option has no effect if sea ice model is not LIM3' 214 IF( ( nn_ice == 3 ) .AND. ( ln_cpl ) .AND. ( ( nn_limflx == -1 ) .OR. ( nn_limflx == 1 ) ) ) & 215 & CALL ctl_stop( 'The chosen nn_limflx for LIM3 in coupled mode must be 0 or 2' ) 216 IF( ( nn_ice == 3 ) .AND. ( .NOT. ln_cpl ) .AND. ( nn_limflx == 2 ) ) & 217 & CALL ctl_stop( 'The chosen nn_limflx for LIM3 in forced mode cannot be 2' ) 218 219 IF( ln_dm2dc ) nday_qsr = -1 ! initialisation flag 220 221 IF( ln_dm2dc .AND. .NOT.( ln_flx .OR. ln_blk_core ) .AND. nn_components /= jp_iam_opa ) & 222 & CALL ctl_stop( 'diurnal cycle into qsr field from daily values requires a flux or core-bulk formulation' ) 223 224 ! ! Choice of the Surface Boudary Condition (set nsbc) 225 ll_purecpl = ln_cpl .AND. .NOT. ln_mixcpl 226 ! 235 IF( nn_ice == 0 ) THEN !* No sea-ice in the domain : ice fraction is always zero 236 IF( nn_components /= jp_iam_opa ) fr_i(:,:) = 0._wp ! except for OPA in SAS-OPA coupled case 237 ENDIF 238 ! 239 sfx (:,:) = 0._wp !* salt flux due to freezing/melting 240 fmmflx(:,:) = 0._wp !* freezing minus melting flux 241 242 taum(:,:) = 0._wp !* wind stress module (needed in GLS in case of reduced restart) 243 244 IF( ln_dm2dc ) THEN !* daily mean to diurnal cycle 245 nday_qsr = -1 ! allow initialization at the 1st call 246 IF( .NOT.( ln_flx .OR. ln_blk ) .AND. nn_components /= jp_iam_opa ) & 247 & CALL ctl_stop( 'qsr diurnal cycle from daily values requires a flux or bulk formulation' ) 248 ENDIF 249 250 ! !* Choice of the Surface Boudary Condition 251 ! (set nsbc) 252 ! 253 ll_purecpl = ln_cpl .AND. .NOT.ln_mixcpl 254 ll_opa = nn_components == jp_iam_opa 255 ll_not_nemo = nn_components /= jp_iam_nemo 227 256 icpt = 0 257 ! 228 258 IF( ln_usr ) THEN ; nsbc = jp_usr ; icpt = icpt + 1 ; ENDIF ! user defined formulation 229 259 IF( ln_flx ) THEN ; nsbc = jp_flx ; icpt = icpt + 1 ; ENDIF ! flux formulation 230 IF( ln_blk_clio ) THEN ; nsbc = jp_clio ; icpt = icpt + 1 ; ENDIF ! CLIO bulk formulation 231 IF( ln_blk_core ) THEN ; nsbc = jp_core ; icpt = icpt + 1 ; ENDIF ! CORE bulk formulation 232 IF( ln_blk_mfs ) THEN ; nsbc = jp_mfs ; icpt = icpt + 1 ; ENDIF ! MFS bulk formulation 260 IF( ln_blk ) THEN ; nsbc = jp_blk ; icpt = icpt + 1 ; ENDIF ! bulk formulation 233 261 IF( ll_purecpl ) THEN ; nsbc = jp_purecpl ; icpt = icpt + 1 ; ENDIF ! Pure Coupled formulation 234 IF( nn_components == jp_iam_opa ) & 235 & THEN ; nsbc = jp_none ; icpt = icpt + 1 ; ENDIF ! opa coupling via SAS module 236 ! 237 IF( icpt /= 1 ) CALL ctl_stop( 'sbc_init: choose ONE and only ONE sbc option' ) 238 ! 239 IF(lwp) THEN 262 IF( ll_opa ) THEN ; nsbc = jp_none ; icpt = icpt + 1 ; ENDIF ! opa coupling via SAS module 263 ! 264 IF( icpt /= 1 ) CALL ctl_stop( 'sbc_init : choose ONE and only ONE sbc option' ) 265 ! 266 IF(lwp) THEN !- print the choice of surface flux formulation 240 267 WRITE(numout,*) 241 268 SELECT CASE( nsbc ) 242 269 CASE( jp_usr ) ; WRITE(numout,*) ' user defined formulation' 243 CASE( jp_flx ) ; WRITE(numout,*) ' flux formulation' 244 CASE( jp_clio ) ; WRITE(numout,*) ' CLIO bulk formulation' 245 CASE( jp_core ) ; WRITE(numout,*) ' CORE bulk formulation' 246 CASE( jp_purecpl ) ; WRITE(numout,*) ' pure coupled formulation' 247 CASE( jp_mfs ) ; WRITE(numout,*) ' MFS Bulk formulation' 248 CASE( jp_none ) ; WRITE(numout,*) ' OPA coupled to SAS via oasis' 249 IF( ln_mixcpl ) WRITE(numout,*) ' + forced-coupled mixed formulation' 270 CASE( jp_flx ) ; WRITE(numout,*) ' ===>> flux formulation' 271 CASE( jp_blk ) ; WRITE(numout,*) ' ===>> bulk formulation' 272 CASE( jp_purecpl ) ; WRITE(numout,*) ' ===>> pure coupled formulation' 273 !!gm abusive use of jp_none ?? ===>>> need to be check and changed by adding a jp_sas parameter 274 CASE( jp_none ) ; WRITE(numout,*) ' ===>> OPA coupled to SAS via oasis' 275 IF( ln_mixcpl ) WRITE(numout,*) ' + forced-coupled mixed formulation' 250 276 END SELECT 251 IF( nn_components/= jp_iam_nemo ) & 252 & WRITE(numout,*) ' + OASIS coupled SAS' 253 ENDIF 254 ! 255 IF( lk_oasis ) CALL sbc_cpl_init (nn_ice) ! OASIS initialisation. must be done before: (1) first time step 256 ! ! (2) the use of nn_fsbc 277 IF( ll_not_nemo ) WRITE(numout,*) ' + OASIS coupled SAS' 278 ENDIF 279 ! 280 ! !* OASIS initialization 281 ! 282 IF( lk_oasis ) CALL sbc_cpl_init( nn_ice ) ! Must be done before: (1) first time step 283 ! ! (2) the use of nn_fsbc 257 284 ! nn_fsbc initialization if OPA-SAS coupling via OASIS 258 ! sas model timestep has to be declared in OASIS (mandatory) -> nn_fsbc has to be modified accordingly285 ! SAS time-step has to be declared in OASIS (mandatory) -> nn_fsbc has to be modified accordingly 259 286 IF( nn_components /= jp_iam_nemo ) THEN 260 287 IF( nn_components == jp_iam_opa ) nn_fsbc = cpl_freq('O_SFLX') / NINT(rdt) … … 268 295 ENDIF 269 296 ! 297 ! !* check consistency between model timeline and nn_fsbc 270 298 IF( MOD( nitend - nit000 + 1, nn_fsbc) /= 0 .OR. & 271 MOD( nstock , nn_fsbc) /= 0 ) THEN 272 WRITE(ctmp1,*) ' experiment length (', nitend - nit000 + 1, ') or nstock (', nstock, &299 MOD( nstock , nn_fsbc) /= 0 ) THEN 300 WRITE(ctmp1,*) 'sbc_init : experiment length (', nitend - nit000 + 1, ') or nstock (', nstock, & 273 301 & ' is NOT a multiple of nn_fsbc (', nn_fsbc, ')' 274 302 CALL ctl_stop( ctmp1, 'Impossible to properly do model restart' ) … … 276 304 ! 277 305 IF( MOD( rday, REAL(nn_fsbc, wp) * rdt ) /= 0 ) & 278 & CALL ctl_warn( 'nn_fsbc is NOT a multiple of the number of time steps in a day' ) 279 ! 280 IF( ln_dm2dc .AND. ( ( NINT(rday) / ( nn_fsbc * NINT(rdt) ) ) < 8 ) ) & 281 & CALL ctl_warn( 'diurnal cycle for qsr: the sampling of the diurnal cycle is too small...' ) 282 ! 283 CALL sbc_ssm_init ! Sea-surface mean fields initialisation 284 ! 285 IF( ln_ssr ) CALL sbc_ssr_init ! Sea-Surface Restoring initialisation 286 ! 287 CALL sbc_rnf_init ! Runof initialisation 288 ! 289 IF( nn_ice == 3 ) CALL sbc_lim_init ! LIM3 initialisation 290 ! 291 IF( nn_ice == 4 ) CALL cice_sbc_init( nsbc ) ! CICE initialisation 306 & CALL ctl_warn( 'sbc_init : nn_fsbc is NOT a multiple of the number of time steps in a day' ) 307 ! 308 IF( ln_dm2dc .AND. NINT(rday) / ( nn_fsbc * NINT(rdt) ) < 8 ) & 309 & CALL ctl_warn( 'sbc_init : diurnal cycle for qsr: the sampling of the diurnal cycle is too small...' ) 310 ! 311 312 ! !** associated modules : initialization 313 ! 314 CALL sbc_ssm_init ! Sea-surface mean fields initialization 315 ! 316 IF( ln_blk ) CALL sbc_blk_init ! bulk formulae initialization 317 318 IF( ln_ssr ) CALL sbc_ssr_init ! Sea-Surface Restoring initialization 319 ! 320 CALL sbc_rnf_init ! Runof initialization 321 ! 322 IF( nn_ice == 3 ) CALL sbc_lim_init ! LIM3 initialization 323 ! 324 IF( nn_ice == 4 ) CALL cice_sbc_init( nsbc ) ! CICE initialization 292 325 ! 293 326 END SUBROUTINE sbc_init … … 297 330 !!--------------------------------------------------------------------- 298 331 !! *** ROUTINE sbc *** 299 !! 332 !! 300 333 !! ** Purpose : provide at each time-step the ocean surface boundary 301 334 !! condition (momentum, heat and freshwater fluxes) 302 335 !! 303 !! ** Method : blah blah to be written ????????? 336 !! ** Method : blah blah to be written ????????? 304 337 !! CAUTION : never mask the surface stress field (tke sbc) 305 338 !! 306 !! ** Action : - set the ocean surface boundary condition at before and now 307 !! time step, i.e. 339 !! ** Action : - set the ocean surface boundary condition at before and now 340 !! time step, i.e. 308 341 !! utau_b, vtau_b, qns_b, qsr_b, emp_n, sfx_b, qrp_b, erp_b 309 342 !! utau , vtau , qns , qsr , emp , sfx , qrp , erp 310 343 !! - updte the ice fraction : fr_i 311 344 !!---------------------------------------------------------------------- 312 INTEGER, INTENT(in) :: kt ! ocean time step 345 INTEGER, INTENT(in) :: kt ! ocean time step 346 ! 347 LOGICAL :: ll_sas, ll_opa ! local logical 313 348 !!--------------------------------------------------------------------- 314 349 ! … … 332 367 ! ! ---------------------------------------- ! 333 368 ! 334 IF( nn_components /= jp_iam_sas ) CALL sbc_ssm ( kt ) ! ocean sea surface variables (sst_m, sss_m, ssu_m, ssv_m) 335 ! ! averaged over nf_sbc time-step 336 IF( ln_wave ) CALL sbc_wave( kt ) ! surface waves 337 338 339 !== sbc formulation ==! 340 369 ll_sas = nn_components == jp_iam_sas ! component flags 370 ll_opa = nn_components == jp_iam_opa 371 ! 372 IF( .NOT.ll_sas ) CALL sbc_ssm ( kt ) ! mean ocean sea surface variables (sst_m, sss_m, ssu_m, ssv_m) 373 IF( ln_wave ) CALL sbc_wave( kt ) ! surface waves 374 375 ! 376 ! !== sbc formulation ==! 377 ! 341 378 SELECT CASE( nsbc ) ! Compute ocean surface boundary condition 342 379 ! ! (i.e. utau,vtau, qns, qsr, emp, sfx) 343 CASE( jp_usr ) ; CALL usr_def_sbc ( kt ) ! user defined formulation 344 CASE( jp_flx ) ; CALL sbc_flx ( kt ) ! flux formulation 345 CASE( jp_clio ) ; CALL sbc_blk_clio( kt ) ! bulk formulation : CLIO for the ocean 346 CASE( jp_core ) 347 IF( nn_components == jp_iam_sas ) & 348 & CALL sbc_cpl_rcv ( kt, nn_fsbc, nn_ice ) ! OPA-SAS coupling: SAS receiving fields from OPA 349 CALL sbc_blk_core( kt ) ! bulk formulation : CORE for the ocean 350 ! from oce: sea surface variables (sst_m, sss_m, ssu_m, ssv_m) 351 CASE( jp_purecpl ) ; CALL sbc_cpl_rcv ( kt, nn_fsbc, nn_ice ) ! pure coupled formulation 352 ! 353 CASE( jp_mfs ) ; CALL sbc_blk_mfs ( kt ) ! bulk formulation : MFS for the ocean 354 CASE( jp_none ) 355 IF( nn_components == jp_iam_opa ) & 356 & CALL sbc_cpl_rcv ( kt, nn_fsbc, nn_ice ) ! OPA-SAS coupling: OPA receiving fields from SAS 380 CASE( jp_usr ) ; CALL usr_def_sbc( kt ) ! user defined formulation 381 CASE( jp_flx ) ; CALL sbc_flx ( kt ) ! flux formulation 382 CASE( jp_blk ) 383 IF( ll_sas ) CALL sbc_cpl_rcv( kt, nn_fsbc, nn_ice ) ! OPA-SAS coupling: SAS receiving fields from OPA 384 CALL sbc_blk ( kt ) ! bulk formulation for the ocean 385 ! 386 CASE( jp_purecpl ) ; CALL sbc_cpl_rcv( kt, nn_fsbc, nn_ice ) ! pure coupled formulation 387 CASE( jp_none ) 388 IF( ll_opa ) CALL sbc_cpl_rcv( kt, nn_fsbc, nn_ice ) ! OPA-SAS coupling: OPA receiving fields from SAS 357 389 END SELECT 358 390 359 IF( ln_mixcpl ) CALL sbc_cpl_rcv( kt, nn_fsbc, nn_ice ) ! forced-coupled mixed formulation after forcing391 IF( ln_mixcpl ) CALL sbc_cpl_rcv( kt, nn_fsbc, nn_ice ) ! forced-coupled mixed formulation after forcing 360 392 361 393 ! … … 367 399 CASE( 3 ) ; CALL sbc_ice_lim ( kt, nsbc ) ! LIM-3 ice model 368 400 CASE( 4 ) ; CALL sbc_ice_cice ( kt, nsbc ) ! CICE ice model 369 END SELECT 401 END SELECT 370 402 371 403 IF( ln_icebergs ) CALL icb_stp( kt ) ! compute icebergs … … 374 406 375 407 IF( ln_rnf ) CALL sbc_rnf( kt ) ! add runoffs to fresh water fluxes 376 408 377 409 IF( ln_ssr ) CALL sbc_ssr( kt ) ! add SST/SSS damping term 378 410 379 411 IF( nn_fwb /= 0 ) CALL sbc_fwb( kt, nn_fwb, nn_fsbc ) ! control the freshwater budget 380 412 381 ! treatment of closed sea in the model domain 382 ! (update freshwater fluxes) 413 ! treatment of closed sea in the model domain (update freshwater fluxes) 383 414 ! Should not be ran if ln_diurnal_only 384 415 IF( .NOT.ln_diurnal_only .AND. nn_closea == 1 ) CALL sbc_clo( kt, cn_cfg, nn_cfg ) … … 391 422 ! ! ---------------------------------------- ! 392 423 IF( ln_rstart .AND. & !* Restart: read in restart file 393 & iom_varid( numror, 'utau_b', ldstop = .FALSE. ) > 0 ) THEN 424 & iom_varid( numror, 'utau_b', ldstop = .FALSE. ) > 0 ) THEN 394 425 IF(lwp) WRITE(numout,*) ' nit000-1 surface forcing fields red in the restart file' 395 426 CALL iom_get( numror, jpdom_autoglo, 'utau_b', utau_b ) ! before i-stress (U-point) … … 407 438 ELSE !* no restart: set from nit000 values 408 439 IF(lwp) WRITE(numout,*) ' nit000-1 surface forcing fields set to nit000' 409 utau_b(:,:) = utau(:,:) 440 utau_b(:,:) = utau(:,:) 410 441 vtau_b(:,:) = vtau(:,:) 411 442 qns_b (:,:) = qns (:,:) 412 emp_b (:,:) = emp (:,:)413 sfx_b (:,:) = sfx (:,:)443 emp_b (:,:) = emp (:,:) 444 sfx_b (:,:) = sfx (:,:) 414 445 ENDIF 415 446 ENDIF … … 435 466 CALL iom_put( "empmr" , emp - rnf ) ! upward water flux 436 467 CALL iom_put( "empbmr" , emp_b - rnf ) ! before upward water flux ( needed to recalculate the time evolution of ssh in offline ) 437 CALL iom_put( "saltflx", sfx ) ! downward salt flux 438 ! (includes virtual salt flux beneath ice 439 ! in linear free surface case) 468 CALL iom_put( "saltflx", sfx ) ! downward salt flux (includes virtual salt flux beneath ice in linear free surface case) 440 469 CALL iom_put( "fmmflx", fmmflx ) ! Freezing-melting water flux 441 CALL iom_put( "qt" , qns + qsr ) ! total heat flux 470 CALL iom_put( "qt" , qns + qsr ) ! total heat flux 442 471 CALL iom_put( "qns" , qns ) ! solar heat flux 443 472 CALL iom_put( "qsr" , qsr ) ! solar heat flux 444 IF( nn_ice > 0 .OR. nn_components == jp_iam_opa ) CALL iom_put( "ice_cover", fr_i ) ! ice fraction445 CALL iom_put( "taum" , taum ) ! wind stress module 473 IF( nn_ice > 0 .OR. ll_opa ) CALL iom_put( "ice_cover", fr_i ) ! ice fraction 474 CALL iom_put( "taum" , taum ) ! wind stress module 446 475 CALL iom_put( "wspd" , wndm ) ! wind speed module over free ocean or leads in presence of sea-ice 447 476 ENDIF 448 477 ! 449 CALL iom_put( "utau", utau ) ! i-wind stress (stress can be updated at 450 CALL iom_put( "vtau", vtau ) ! j-wind stress each time step in sea-ice)478 CALL iom_put( "utau", utau ) ! i-wind stress (stress can be updated at each time step in sea-ice) 479 CALL iom_put( "vtau", vtau ) ! j-wind stress 451 480 ! 452 481 IF(ln_ctl) THEN ! print mean trends (used for debugging) -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/SBC/sbcrnf.F90
r7278 r7280 279 279 IF(lwp) THEN 280 280 WRITE(numout,*) 281 WRITE(numout,*) 'sbc_rnf : runoff '282 WRITE(numout,*) '~~~~~~~ '281 WRITE(numout,*) 'sbc_rnf_init : runoff ' 282 WRITE(numout,*) '~~~~~~~~~~~~ ' 283 283 WRITE(numout,*) ' Namelist namsbc_rnf' 284 284 WRITE(numout,*) ' specific river mouths treatment ln_rnf_mouth = ', ln_rnf_mouth … … 296 296 IF(lwp) WRITE(numout,*) ' runoffs inflow read in a file' 297 297 IF( ierror > 0 ) THEN 298 CALL ctl_stop( 'sbc_rnf : unable to allocate sf_rnf structure' ) ; RETURN298 CALL ctl_stop( 'sbc_rnf_init: unable to allocate sf_rnf structure' ) ; RETURN 299 299 ENDIF 300 300 ALLOCATE( sf_rnf(1)%fnow(jpi,jpj,1) ) 301 301 IF( sn_rnf%ln_tint ) ALLOCATE( sf_rnf(1)%fdta(jpi,jpj,1,2) ) 302 CALL fld_fill( sf_rnf, (/ sn_rnf /), cn_dir, 'sbc_rnf_init', 'read runoffs data', 'namsbc_rnf' )302 CALL fld_fill( sf_rnf, (/ sn_rnf /), cn_dir, 'sbc_rnf_init', 'read runoffs data', 'namsbc_rnf', no_print ) 303 303 ENDIF 304 304 ! … … 312 312 ALLOCATE( sf_t_rnf(1)%fnow(jpi,jpj,1) ) 313 313 IF( sn_t_rnf%ln_tint ) ALLOCATE( sf_t_rnf(1)%fdta(jpi,jpj,1,2) ) 314 CALL fld_fill (sf_t_rnf, (/ sn_t_rnf /), cn_dir, 'sbc_rnf_init', 'read runoff temperature data', 'namsbc_rnf' )314 CALL fld_fill (sf_t_rnf, (/ sn_t_rnf /), cn_dir, 'sbc_rnf_init', 'read runoff temperature data', 'namsbc_rnf', no_print ) 315 315 ENDIF 316 316 ! … … 324 324 ALLOCATE( sf_s_rnf(1)%fnow(jpi,jpj,1) ) 325 325 IF( sn_s_rnf%ln_tint ) ALLOCATE( sf_s_rnf(1)%fdta(jpi,jpj,1,2) ) 326 CALL fld_fill (sf_s_rnf, (/ sn_s_rnf /), cn_dir, 'sbc_rnf_init', 'read runoff salinity data', 'namsbc_rnf' )326 CALL fld_fill (sf_s_rnf, (/ sn_s_rnf /), cn_dir, 'sbc_rnf_init', 'read runoff salinity data', 'namsbc_rnf', no_print ) 327 327 ENDIF 328 328 ! … … 452 452 DO WHILE( nkrnf /= jpkm1 .AND. gdepw_1d(nkrnf+1) < rn_hrnf ) ; nkrnf = nkrnf + 1 453 453 END DO 454 IF( ln_sco ) CALL ctl_warn( 'sbc_rnf : number of levels over which Kz is increased is computed for zco...' )454 IF( ln_sco ) CALL ctl_warn( 'sbc_rnf_init: number of levels over which Kz is increased is computed for zco...' ) 455 455 ENDIF 456 456 IF(lwp) WRITE(numout,*) … … 499 499 ! 500 500 IF(lwp) WRITE(numout,*) 501 IF(lwp) WRITE(numout,*) ' rnf_mouth : river mouth mask'502 IF(lwp) WRITE(numout,*) ' ~~~~~~~~~ '501 IF(lwp) WRITE(numout,*) ' rnf_mouth : river mouth mask' 502 IF(lwp) WRITE(numout,*) ' ~~~~~~~~~ ' 503 503 ! 504 504 cl_rnfile = TRIM( cn_dir )//TRIM( sn_cnf%clname ) -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/SBC/sbcssm.F90
r7278 r7280 88 88 ! ! ----------------------------------------------- ! 89 89 IF(lwp) WRITE(numout,*) 90 IF(lwp) WRITE(numout,*) '~~~~~~~ mean fields initialised to instantaneous values' 90 IF(lwp) WRITE(numout,*) 'sbc_ssm : mean fields initialised to instantaneous values' 91 IF(lwp) WRITE(numout,*) '~~~~~~~ ' 91 92 zcoef = REAL( nn_fsbc - 1, wp ) 92 93 ssu_m(:,:) = zcoef * ub(:,:,1) … … 194 195 ! 195 196 IF(lwp) WRITE(numout,*) 196 IF(lwp) WRITE(numout,*) 'sbc_ssm : sea surface mean fields, nn_fsbc=1 : instantaneous values'197 IF(lwp) WRITE(numout,*) '~~~~~~~ '197 IF(lwp) WRITE(numout,*) 'sbc_ssm_init : sea surface mean fields, nn_fsbc=1 : instantaneous values' 198 IF(lwp) WRITE(numout,*) '~~~~~~~~~~~ ' 198 199 ! 199 200 ELSE 200 201 ! 201 202 IF(lwp) WRITE(numout,*) 202 IF(lwp) WRITE(numout,*) 'sbc_ssm : sea surface mean fields'203 IF(lwp) WRITE(numout,*) '~~~~~~~ '203 IF(lwp) WRITE(numout,*) 'sbc_ssm_init : sea surface mean fields' 204 IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~ ' 204 205 ! 205 206 IF( ln_rstart .AND. iom_varid( numror, 'nn_fsbc', ldstop = .FALSE. ) > 0 ) THEN … … 220 221 ! 221 222 IF( zf_sbc /= REAL( nn_fsbc, wp ) ) THEN ! nn_fsbc has changed between 2 runs 222 IF(lwp) WRITE(numout,*) '~~~~~~~ restart with a change in the frequency of mean ', & 223 & 'from ', zf_sbc, ' to ', nn_fsbc 223 IF(lwp) WRITE(numout,*) ' restart with a change in the frequency of mean from ', zf_sbc, ' to ', nn_fsbc 224 224 zcoef = REAL( nn_fsbc - 1, wp ) / zf_sbc 225 225 ssu_m(:,:) = zcoef * ssu_m(:,:) … … 231 231 frq_m(:,:) = zcoef * frq_m(:,:) 232 232 ELSE 233 IF(lwp) WRITE(numout,*) ' ~~~~~~~mean fields read in the ocean restart file'233 IF(lwp) WRITE(numout,*) ' mean fields read in the ocean restart file' 234 234 ENDIF 235 235 ENDIF … … 238 238 IF( .NOT. l_ssm_mean ) THEN ! default initialisation. needed by lim_istate 239 239 ! 240 IF(lwp) WRITE(numout,*) ' default initialisation of ss?_m arrays'240 IF(lwp) WRITE(numout,*) ' default initialisation of ss._m arrays' 241 241 ssu_m(:,:) = ub(:,:,1) 242 242 ssv_m(:,:) = vb(:,:,1) 243 243 IF( l_useCT ) THEN ; sst_m(:,:) = eos_pt_from_ct( tsn(:,:,1,jp_tem), tsn(:,:,1,jp_sal) ) 244 ELSE 244 ELSE ; sst_m(:,:) = tsn(:,:,1,jp_tem) 245 245 ENDIF 246 246 sss_m(:,:) = tsn (:,:,1,jp_sal) -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/SBC/sbcssr.F90
r6140 r7280 199 199 ! 200 200 ! fill sf_sst with sn_sst and control print 201 CALL fld_fill( sf_sst, (/ sn_sst /), cn_dir, 'sbc_ssr', 'SST restoring term toward SST data', 'namsbc_ssr' )201 CALL fld_fill( sf_sst, (/ sn_sst /), cn_dir, 'sbc_ssr', 'SST restoring term toward SST data', 'namsbc_ssr', no_print ) 202 202 IF( sf_sst(1)%ln_tint ) ALLOCATE( sf_sst(1)%fdta(jpi,jpj,1,2), STAT=ierror ) 203 203 IF( ierror > 0 ) CALL ctl_stop( 'STOP', 'sbc_ssr: unable to allocate sf_sst data array' ) … … 213 213 ! 214 214 ! fill sf_sss with sn_sss and control print 215 CALL fld_fill( sf_sss, (/ sn_sss /), cn_dir, 'sbc_ssr', 'SSS restoring term toward SSS data', 'namsbc_ssr' )215 CALL fld_fill( sf_sss, (/ sn_sss /), cn_dir, 'sbc_ssr', 'SSS restoring term toward SSS data', 'namsbc_ssr', no_print ) 216 216 IF( sf_sss(1)%ln_tint ) ALLOCATE( sf_sss(1)%fdta(jpi,jpj,1,2), STAT=ierror ) 217 217 IF( ierror > 0 ) CALL ctl_stop( 'STOP', 'sbc_ssr: unable to allocate sf_sss data array' ) -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/SBC/sbcwave.F90
r6140 r7280 25 25 PRIVATE 26 26 27 PUBLIC sbc_wave ! routine called in sbc_blk _core or sbc_blk_mfs27 PUBLIC sbc_wave ! routine called in sbc_blk 28 28 29 29 INTEGER , PARAMETER :: jpfld = 3 ! maximum number of files to read for srokes drift … … 94 94 IF( .NOT.( ln_cdgw .OR. ln_sdw ) ) & 95 95 & CALL ctl_warn( 'ln_sbcwave=T but nor drag coefficient (ln_cdgw=F) neither stokes drift activated (ln_sdw=F)' ) 96 IF( ln_cdgw .AND. .NOT. (ln_blk_mfs .OR. ln_blk_core)) &97 & CALL ctl_stop( 'drag coefficient read from wave model definable only with mfs bulk formulae and core')96 IF( ln_cdgw .AND. .NOT.ln_blk ) & 97 & CALL ctl_stop( 'drag coefficient read from wave model definable only with bulk formulae') 98 98 ! 99 99 IF( ln_cdgw ) THEN -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/TRA/traadv.F90
r6140 r7280 255 255 WRITE(numout,*) 256 256 SELECT CASE ( nadv ) 257 CASE( np_NO_adv ) ; WRITE(numout,*) ' NO T-S advection'258 CASE( np_CEN ) ; WRITE(numout,*) ' CEN scheme is used. Horizontal order: ', nn_cen_h, &257 CASE( np_NO_adv ) ; WRITE(numout,*) ' ===>> NO T-S advection' 258 CASE( np_CEN ) ; WRITE(numout,*) ' ===>> CEN scheme is used. Horizontal order: ', nn_cen_h, & 259 259 & ' Vertical order: ', nn_cen_v 260 CASE( np_FCT ) ; WRITE(numout,*) ' FCT scheme is used. Horizontal order: ', nn_fct_h, &260 CASE( np_FCT ) ; WRITE(numout,*) ' ===>> FCT scheme is used. Horizontal order: ', nn_fct_h, & 261 261 & ' Vertical order: ', nn_fct_v 262 CASE( np_FCT_zts ) ; WRITE(numout,*) ' use 2nd order FCT with ', nn_fct_zts,'vertical sub-timestepping'263 CASE( np_MUS ) ; WRITE(numout,*) ' MUSCL scheme is used'264 CASE( np_UBS ) ; WRITE(numout,*) ' UBS scheme is used'265 CASE( np_QCK ) ; WRITE(numout,*) ' QUICKEST scheme is used'262 CASE( np_FCT_zts ) ; WRITE(numout,*) ' ===>> use 2nd order FCT with ', nn_fct_zts,'vertical sub-timestepping' 263 CASE( np_MUS ) ; WRITE(numout,*) ' ===>> MUSCL scheme is used' 264 CASE( np_UBS ) ; WRITE(numout,*) ' ===>> UBS scheme is used' 265 CASE( np_QCK ) ; WRITE(numout,*) ' ===>> QUICKEST scheme is used' 266 266 END SELECT 267 267 ENDIF -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/TRA/traadv_mle.F90
r7277 r7280 308 308 WRITE(numout,*) 309 309 IF( ln_mle ) THEN 310 WRITE(numout,*) ' Mixed Layer Eddy induced transport added to tracer advection'311 IF( nn_mle == 0 ) WRITE(numout,*) ' Fox-Kemper et al 2010 formulation'312 IF( nn_mle == 1 ) WRITE(numout,*) ' New formulation'310 WRITE(numout,*) ' ===>> Mixed Layer Eddy induced transport added to tracer advection' 311 IF( nn_mle == 0 ) WRITE(numout,*) ' Fox-Kemper et al 2010 formulation' 312 IF( nn_mle == 1 ) WRITE(numout,*) ' New formulation' 313 313 ELSE 314 WRITE(numout,*) ' Mixed Layer Eddy parametrisation NOT used'314 WRITE(numout,*) ' ===>> Mixed Layer Eddy parametrisation NOT used' 315 315 ENDIF 316 316 ENDIF -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/TRA/trabbc.F90
r6140 r7280 176 176 ! fill sf_chl with sn_chl and control print 177 177 CALL fld_fill( sf_qgh, (/ sn_qgh /), cn_dir, 'tra_bbc_init', & 178 & 'bottom temperature boundary condition', 'nambbc' )178 & 'bottom temperature boundary condition', 'nambbc', no_print ) 179 179 180 180 CALL fld_read( nit000, 1, sf_qgh ) ! Read qgh data -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/TRA/trabbl.F90
r7277 r7280 519 519 WRITE(numout,*) 'tra_bbl_init : bottom boundary layer initialisation' 520 520 WRITE(numout,*) '~~~~~~~~~~~~' 521 WRITE(numout,*) ' 522 WRITE(numout,*) ' 523 WRITE(numout,*) ' 524 WRITE(numout,*) ' 525 WRITE(numout,*) ' 521 WRITE(numout,*) ' Namelist nambbl : set bbl parameters' 522 WRITE(numout,*) ' diffusive bbl (=1) or not (=0) nn_bbl_ldf = ', nn_bbl_ldf 523 WRITE(numout,*) ' advective bbl (=1/2) or not (=0) nn_bbl_adv = ', nn_bbl_adv 524 WRITE(numout,*) ' diffusive bbl coefficient rn_ahtbbl = ', rn_ahtbbl, ' m2/s' 525 WRITE(numout,*) ' advective bbl coefficient rn_gambbl = ', rn_gambbl, ' s' 526 526 ENDIF 527 527 -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/TRA/tradmp.F90
r6140 r7280 192 192 WRITE(numout,*) 193 193 WRITE(numout,*) 'tra_dmp_init : T and S newtonian relaxation' 194 WRITE(numout,*) '~~~~~~~~~~~ '194 WRITE(numout,*) '~~~~~~~~~~~~' 195 195 WRITE(numout,*) ' Namelist namtra_dmp : set relaxation parameters' 196 196 WRITE(numout,*) ' Apply relaxation or not ln_tradmp = ', ln_tradmp -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/TRA/traldf.F90
r6352 r7280 110 110 WRITE(numout,*) 111 111 WRITE(numout,*) 'tra_ldf_init : lateral tracer diffusive operator' 112 WRITE(numout,*) '~~~~~~~~~~~ '112 WRITE(numout,*) '~~~~~~~~~~~~' 113 113 WRITE(numout,*) ' Namelist namtra_ldf: already read in ldftra module' 114 114 WRITE(numout,*) ' see ldf_tra_init report for lateral mixing parameters' 115 WRITE(numout,*)116 115 ENDIF 117 116 ! ! use of lateral operator or not … … 187 186 WRITE(numout,*) 188 187 SELECT CASE( nldf ) 189 CASE( np_no_ldf ) ; WRITE(numout,*) ' NO lateral diffusion'190 CASE( np_lap ) ; WRITE(numout,*) ' laplacian iso-level operator'191 CASE( np_lap_i ) ; WRITE(numout,*) ' Rotated laplacian operator (standard)'192 CASE( np_lap_it ) ; WRITE(numout,*) ' Rotated laplacian operator (triad)'193 CASE( np_blp ) ; WRITE(numout,*) ' bilaplacian iso-level operator'194 CASE( np_blp_i ) ; WRITE(numout,*) ' Rotated bilaplacian operator (standard)'195 CASE( np_blp_it ) ; WRITE(numout,*) ' Rotated bilaplacian operator (triad)'188 CASE( np_no_ldf ) ; WRITE(numout,*) ' ===>> NO lateral diffusion' 189 CASE( np_lap ) ; WRITE(numout,*) ' ===>> laplacian iso-level operator' 190 CASE( np_lap_i ) ; WRITE(numout,*) ' ===>> Rotated laplacian operator (standard)' 191 CASE( np_lap_it ) ; WRITE(numout,*) ' ===>> Rotated laplacian operator (triad)' 192 CASE( np_blp ) ; WRITE(numout,*) ' ===>> bilaplacian iso-level operator' 193 CASE( np_blp_i ) ; WRITE(numout,*) ' ===>> Rotated bilaplacian operator (standard)' 194 CASE( np_blp_it ) ; WRITE(numout,*) ' ===>> Rotated bilaplacian operator (triad)' 196 195 END SELECT 197 196 ENDIF -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/TRA/traqsr.F90
r6403 r7280 406 406 ! ! fill sf_chl with sn_chl and control print 407 407 CALL fld_fill( sf_chl, (/ sn_chl /), cn_dir, 'tra_qsr_init', & 408 & 'Solar penetration function of read chlorophyll', 'namtra_qsr' )408 & 'Solar penetration function of read chlorophyll', 'namtra_qsr' , no_print ) 409 409 ENDIF 410 410 IF( nqsr == np_RGB ) THEN ! constant Chl -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/TRA/trazdf.F90
r6140 r7280 141 141 WRITE(numout,*) 'tra_zdf_init : vertical tracer physics scheme' 142 142 WRITE(numout,*) '~~~~~~~~~~~' 143 IF( nzdf == 0 ) WRITE(numout,*) ' 144 IF( nzdf == 1 ) WRITE(numout,*) ' 143 IF( nzdf == 0 ) WRITE(numout,*) ' ===>> Explicit time-splitting scheme' 144 IF( nzdf == 1 ) WRITE(numout,*) ' ===>> Implicit (euler backward) scheme' 145 145 ENDIF 146 146 ! -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/TRD/trdini.F90
r6140 r7280 57 57 IF(lwp) THEN ! control print 58 58 WRITE(numout,*) 59 WRITE(numout,*) ' 60 WRITE(numout,*) ' ~~~~~~~~~~'59 WRITE(numout,*) 'trd_init : Momentum/Tracers trends' 60 WRITE(numout,*) '~~~~~~~~' 61 61 WRITE(numout,*) ' Namelist namtrd : set trends parameters' 62 62 WRITE(numout,*) ' global domain averaged dyn & tra trends ln_glo_trd = ', ln_glo_trd -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfbfr.F90
r6140 r7280 99 99 ! 100 100 IF( nn_timing == 1 ) CALL timing_start('zdf_bfr') 101 !102 IF( kt == nit000 .AND. lwp ) THEN103 WRITE(numout,*)104 WRITE(numout,*) 'zdf_bfr : Set bottom friction coefficient (non-linear case)'105 WRITE(numout,*) '~~~~~~~~'106 ENDIF107 101 ! 108 102 IF( nn_bfr == 2 ) THEN ! quadratic bottom friction only … … 259 253 IF(lwp) WRITE(numout,*) 260 254 IF(lwp) WRITE(numout,*) 'zdf_bfr_init : momentum bottom friction' 261 IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~ ~'255 IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~' 262 256 IF(lwp) WRITE(numout,*) ' Namelist nam_bfr : set bottom friction parameters' 263 257 ! … … 266 260 CASE( 0 ) 267 261 IF(lwp) WRITE(numout,*) ' free-slip ' 268 bfrua(:,:) = 0. e0269 bfrva(:,:) = 0. e0270 tfrua(:,:) = 0. e0271 tfrva(:,:) = 0. e0262 bfrua(:,:) = 0._wp 263 bfrva(:,:) = 0._wp 264 tfrua(:,:) = 0._wp 265 tfrva(:,:) = 0._wp 272 266 ! 273 267 CASE( 1 ) … … 321 315 IF(lwp) WRITE(numout,*) ' log formulation ln_bfr2d = ', ln_loglayer 322 316 IF(lwp) WRITE(numout,*) ' bottom roughness rn_bfrz0 [m] = ', rn_bfrz0 323 IF( rn_bfrz0 <=0.e0) THEN317 IF( rn_bfrz0 <= 0._wp ) THEN 324 318 WRITE(ctmp1,*) ' bottom roughness must be strictly positive' 325 319 CALL ctl_stop( ctmp1 ) … … 336 330 IF(lwp) WRITE(numout,*) ' log formulation ln_tfr2d = ', ln_loglayer 337 331 IF(lwp) WRITE(numout,*) ' top roughness rn_tfrz0 [m] = ', rn_tfrz0 338 IF( rn_tfrz0 <=0.e0) THEN332 IF( rn_tfrz0 <= 0._wp ) THEN 339 333 WRITE(ctmp1,*) ' top roughness must be strictly positive' 340 334 CALL ctl_stop( ctmp1 ) -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfini.F90
r5836 r7280 66 66 IF(lwp) THEN !* Parameter print 67 67 WRITE(numout,*) 68 WRITE(numout,*) 'zdf_init : vertical physics'68 WRITE(numout,*) 'zdf_init : vertical physics' 69 69 WRITE(numout,*) '~~~~~~~~' 70 70 WRITE(numout,*) ' Namelist namzdf : set vertical mixing mixing parameters' -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/nemogcm.F90
r7277 r7280 560 560 IF(lwp) THEN ! control print 561 561 WRITE(numout,*) 562 WRITE(numout,*) 'namcfg 563 WRITE(numout,*) '~~~~~~ ~'562 WRITE(numout,*) 'namcfg : configuration initialization through namelist read' 563 WRITE(numout,*) '~~~~~~ ' 564 564 WRITE(numout,*) ' Namelist namcfg' 565 565 WRITE(numout,*) ' read domain configuration file ln_read_cfg = ', ln_read_cfg -
branches/2016/dev_CNRS_2016/NEMOGCM/NEMO/OPA_SRC/trc_oce.F90
r6140 r7280 110 110 IF(lwp) THEN 111 111 WRITE(numout,*) 112 WRITE(numout,*) ' trc_oce_rgb : Initialisation of the optical look-up table'113 WRITE(numout,*) ' ~~~~~~~~~~~ '112 WRITE(numout,*) ' trc_oce_rgb : Initialisation of the optical look-up table' 113 WRITE(numout,*) ' ~~~~~~~~~~~ ' 114 114 ENDIF 115 115 !
Note: See TracChangeset
for help on using the changeset viewer.