- Timestamp:
- 2020-11-09T16:48:35+01:00 (3 years ago)
- Location:
- NEMO/branches/2020/test_12905_xios_restart
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2020/test_12905_xios_restart
- Property svn:externals
-
old new 3 3 ^/utils/build/mk@HEAD mk 4 4 ^/utils/tools@HEAD tools 5 ^/vendors/AGRIF/dev @HEADext/AGRIF5 ^/vendors/AGRIF/dev_r12970_AGRIF_CMEMS ext/AGRIF 6 6 ^/vendors/FCM@HEAD ext/FCM 7 7 ^/vendors/IOIPSL@HEAD ext/IOIPSL 8 8 9 9 # SETTE 10 ^/utils/CI/ r12931_sette_ticket2462@HEADsette10 ^/utils/CI/sette@13559 sette
-
- Property svn:externals
-
NEMO/branches/2020/test_12905_xios_restart/src/ICE/icestp.F90
r12969 r13751 55 55 USE icedyn ! sea-ice: dynamics 56 56 USE icethd ! sea-ice: thermodynamics 57 USE icecor ! sea-ice: corrections58 57 USE iceupdate ! sea-ice: sea surface boundary condition update 59 58 USE icedia ! sea-ice: budget diagnostics … … 86 85 PUBLIC ice_init ! called by sbcmod.F90 87 86 87 !! * Substitutions 88 # include "do_loop_substitute.h90" 88 89 !!---------------------------------------------------------------------- 89 90 !! NEMO/ICE 4.0 , NEMO Consortium (2018) … … 160 161 IF( ln_icedyn .AND. .NOT.lk_c1d ) & 161 162 & CALL ice_dyn( kt, Kmm ) ! -- Ice dynamics 163 ! 164 CALL diag_trends( 1 ) ! record dyn trends 162 165 ! 163 166 ! !== lateral boundary conditions ==! … … 188 191 IF( ln_icethd ) CALL ice_thd( kt ) ! -- Ice thermodynamics 189 192 ! 190 CALL ice_cor( kt , 2 ) ! -- Corrections 191 ! 193 CALL diag_trends( 2 ) ! record thermo trends 192 194 CALL ice_var_glo2eqv ! necessary calls (at least for coupling) 193 195 CALL ice_var_agg( 2 ) ! necessary calls (at least for coupling) … … 197 199 IF( ln_icediahsb ) CALL ice_dia( kt ) ! -- Diagnostics outputs 198 200 ! 201 IF( ln_icediachk ) CALL ice_drift_wri( kt ) ! -- Diagnostics outputs for conservation 202 ! 199 203 CALL ice_wri( kt ) ! -- Ice outputs 200 204 ! 201 205 IF( lrst_ice ) CALL ice_rst_write( kt ) ! -- Ice restart file 202 206 ! 203 IF( ln_icectl ) CALL ice_ctl( kt ) ! -- alerts in case of model crash207 IF( ln_icectl ) CALL ice_ctl( kt ) ! -- Control checks 204 208 ! 205 209 ENDIF ! End sea-ice time step only … … 224 228 INTEGER, INTENT(in) :: Kbb, Kmm, Kaa 225 229 ! 226 INTEGER :: ji, jj,ierr230 INTEGER :: ierr 227 231 !!---------------------------------------------------------------------- 228 232 IF(lwp) WRITE(numout,*) … … 240 244 CALL par_init ! set some ice run parameters 241 245 ! 246 #if defined key_agrif 247 CALL Agrif_Declare_Var_ice ! " " " " " Sea ice 248 #endif 249 ! 242 250 ! ! Allocate the ice arrays (sbc_ice already allocated in sbc_init) 243 251 ierr = ice_alloc () ! ice variables … … 248 256 IF( ierr /= 0 ) CALL ctl_stop('STOP', 'ice_init : unable to allocate ice arrays') 249 257 ! 250 CALL ice_itd_init ! ice thickness distribution initialization251 !252 CALL ice_thd_init ! set ice thermodynics parameters (clem: important to call it first for melt ponds)253 !254 ! ! Initial sea-ice state255 IF( .NOT. ln_rstart ) THEN ! start from rest: sea-ice deduced from sst256 CALL ice_istate_init257 CALL ice_istate( nit000, Kbb, Kmm, Kaa )258 ELSE ! start from a restart file259 CALL ice_rst_read( Kbb, Kmm, Kaa )260 ENDIF261 CALL ice_var_glo2eqv262 CALL ice_var_agg(1)263 !264 CALL ice_sbc_init ! set ice-ocean and ice-atm. coupling parameters265 !266 CALL ice_dyn_init ! set ice dynamics parameters267 !268 CALL ice_update_init ! ice surface boundary condition269 !270 CALL ice_alb_init ! ice surface albedo271 !272 CALL ice_dia_init ! initialization for diags273 !274 fr_i (:,:) = at_i(:,:) ! initialisation of sea-ice fraction275 tn_ice(:,:,:) = t_su(:,:,:) ! initialisation of surface temp for coupled simu276 !277 258 ! ! set max concentration in both hemispheres 278 259 WHERE( gphit(:,:) > 0._wp ) ; rn_amax_2d(:,:) = rn_amax_n ! NH 279 260 ELSEWHERE ; rn_amax_2d(:,:) = rn_amax_s ! SH 280 261 END WHERE 281 262 ! 263 CALL diag_set0 ! set diag of mass, heat and salt fluxes to 0: needed for Agrif child grids 264 ! 265 CALL ice_itd_init ! ice thickness distribution initialization 266 ! 267 CALL ice_thd_init ! set ice thermodynics parameters (clem: important to call it first for melt ponds) 268 ! 269 CALL ice_sbc_init ! set ice-ocean and ice-atm. coupling parameters 270 ! 271 CALL ice_istate_init ! Initial sea-ice state 272 IF ( ln_rstart .OR. nn_iceini_file == 2 ) THEN 273 CALL ice_rst_read( Kbb, Kmm, Kaa ) ! start from a restart file 274 ELSE 275 CALL ice_istate( nit000, Kbb, Kmm, Kaa ) ! start from rest or read a file 276 ENDIF 277 CALL ice_var_glo2eqv 278 CALL ice_var_agg(1) 279 ! 280 CALL ice_dyn_init ! set ice dynamics parameters 281 ! 282 CALL ice_update_init ! ice surface boundary condition 283 ! 284 CALL ice_alb_init ! ice surface albedo 285 ! 286 CALL ice_dia_init ! initialization for diags 287 ! 288 CALL ice_drift_init ! initialization for diags of conservation 289 ! 290 fr_i (:,:) = at_i(:,:) ! initialisation of sea-ice fraction 291 tn_ice(:,:,:) = t_su(:,:,:) ! initialisation of surface temp for coupled simu 292 ! 282 293 IF( ln_rstart ) THEN 283 294 CALL iom_close( numrir ) ! close input ice restart file … … 339 350 ENDIF 340 351 ! 341 IF( ln_bdy .AND. ln_icediachk ) CALL ctl_warn('par_init: online conservation check does not work with BDY')342 !343 352 rDt_ice = REAL(nn_fsbc) * rn_Dt !--- sea-ice timestep and its inverse 344 353 r1_Dt_ice = 1._wp / rDt_ice … … 365 374 v_s_b (:,:,:) = v_s (:,:,:) ! snow volume 366 375 sv_i_b(:,:,:) = sv_i(:,:,:) ! salt content 367 oa_i_b(:,:,:) = oa_i(:,:,:) ! areal age content368 376 e_s_b (:,:,:,:) = e_s (:,:,:,:) ! snow thermal energy 369 377 e_i_b (:,:,:,:) = e_i (:,:,:,:) ! ice thermal energy … … 375 383 h_s_b(:,:,:) = 0._wp 376 384 END WHERE 377 378 WHERE( a_ip(:,:,:) >= epsi20 )379 h_ip_b(:,:,:) = v_ip(:,:,:) / a_ip(:,:,:) ! ice pond thickness380 ELSEWHERE381 h_ip_b(:,:,:) = 0._wp382 END WHERE383 385 ! 384 386 ! ice velocities & total concentration … … 397 399 !! of the time step 398 400 !!---------------------------------------------------------------------- 399 INTEGER :: ji, jj ! dummy loop index 400 !!---------------------------------------------------------------------- 401 sfx (:,:) = 0._wp ; 402 sfx_bri(:,:) = 0._wp ; sfx_lam(:,:) = 0._wp 403 sfx_sni(:,:) = 0._wp ; sfx_opw(:,:) = 0._wp 404 sfx_bog(:,:) = 0._wp ; sfx_dyn(:,:) = 0._wp 405 sfx_bom(:,:) = 0._wp ; sfx_sum(:,:) = 0._wp 406 sfx_res(:,:) = 0._wp ; sfx_sub(:,:) = 0._wp 407 ! 408 wfx_snw(:,:) = 0._wp ; wfx_ice(:,:) = 0._wp 409 wfx_sni(:,:) = 0._wp ; wfx_opw(:,:) = 0._wp 410 wfx_bog(:,:) = 0._wp ; wfx_dyn(:,:) = 0._wp 411 wfx_bom(:,:) = 0._wp ; wfx_sum(:,:) = 0._wp 412 wfx_res(:,:) = 0._wp ; wfx_sub(:,:) = 0._wp 413 wfx_spr(:,:) = 0._wp ; wfx_lam(:,:) = 0._wp 414 wfx_snw_dyn(:,:) = 0._wp ; wfx_snw_sum(:,:) = 0._wp 415 wfx_snw_sub(:,:) = 0._wp ; wfx_ice_sub(:,:) = 0._wp 416 wfx_snw_sni(:,:) = 0._wp 417 wfx_pnd(:,:) = 0._wp 418 419 hfx_thd(:,:) = 0._wp ; 420 hfx_snw(:,:) = 0._wp ; hfx_opw(:,:) = 0._wp 421 hfx_bog(:,:) = 0._wp ; hfx_dyn(:,:) = 0._wp 422 hfx_bom(:,:) = 0._wp ; hfx_sum(:,:) = 0._wp 423 hfx_res(:,:) = 0._wp ; hfx_sub(:,:) = 0._wp 424 hfx_spr(:,:) = 0._wp ; hfx_dif(:,:) = 0._wp 425 hfx_err_rem(:,:) = 0._wp 426 hfx_err_dif(:,:) = 0._wp 427 wfx_err_sub(:,:) = 0._wp 428 ! 429 diag_heat(:,:) = 0._wp ; diag_sice(:,:) = 0._wp 430 diag_vice(:,:) = 0._wp ; diag_vsnw(:,:) = 0._wp 431 432 ! SIMIP diagnostics 433 qcn_ice_bot(:,:,:) = 0._wp ; qcn_ice_top(:,:,:) = 0._wp ! conductive fluxes 434 t_si (:,:,:) = rt0 ! temp at the ice-snow interface 435 436 tau_icebfr (:,:) = 0._wp ! landfast ice param only (clem: important to keep the init here) 437 cnd_ice (:,:,:) = 0._wp ! initialisation: effective conductivity at the top of ice/snow (ln_cndflx=T) 438 qcn_ice (:,:,:) = 0._wp ! initialisation: conductive flux (ln_cndflx=T & ln_cndemule=T) 439 qtr_ice_bot(:,:,:) = 0._wp ! initialization: part of solar radiation transmitted through the ice needed at least for outputs 440 qsb_ice_bot(:,:) = 0._wp ! (needed if ln_icethd=F) 441 ! 442 ! for control checks (ln_icediachk) 443 diag_trp_vi(:,:) = 0._wp ; diag_trp_vs(:,:) = 0._wp 444 diag_trp_ei(:,:) = 0._wp ; diag_trp_es(:,:) = 0._wp 445 diag_trp_sv(:,:) = 0._wp 401 INTEGER :: ji, jj, jl ! dummy loop index 402 !!---------------------------------------------------------------------- 403 404 DO_2D( 1, 1, 1, 1 ) 405 sfx (ji,jj) = 0._wp ; 406 sfx_bri(ji,jj) = 0._wp ; sfx_lam(ji,jj) = 0._wp 407 sfx_sni(ji,jj) = 0._wp ; sfx_opw(ji,jj) = 0._wp 408 sfx_bog(ji,jj) = 0._wp ; sfx_dyn(ji,jj) = 0._wp 409 sfx_bom(ji,jj) = 0._wp ; sfx_sum(ji,jj) = 0._wp 410 sfx_res(ji,jj) = 0._wp ; sfx_sub(ji,jj) = 0._wp 411 ! 412 wfx_snw(ji,jj) = 0._wp ; wfx_ice(ji,jj) = 0._wp 413 wfx_sni(ji,jj) = 0._wp ; wfx_opw(ji,jj) = 0._wp 414 wfx_bog(ji,jj) = 0._wp ; wfx_dyn(ji,jj) = 0._wp 415 wfx_bom(ji,jj) = 0._wp ; wfx_sum(ji,jj) = 0._wp 416 wfx_res(ji,jj) = 0._wp ; wfx_sub(ji,jj) = 0._wp 417 wfx_spr(ji,jj) = 0._wp ; wfx_lam(ji,jj) = 0._wp 418 wfx_snw_dyn(ji,jj) = 0._wp ; wfx_snw_sum(ji,jj) = 0._wp 419 wfx_snw_sub(ji,jj) = 0._wp ; wfx_ice_sub(ji,jj) = 0._wp 420 wfx_snw_sni(ji,jj) = 0._wp 421 wfx_pnd(ji,jj) = 0._wp 422 423 hfx_thd(ji,jj) = 0._wp ; 424 hfx_snw(ji,jj) = 0._wp ; hfx_opw(ji,jj) = 0._wp 425 hfx_bog(ji,jj) = 0._wp ; hfx_dyn(ji,jj) = 0._wp 426 hfx_bom(ji,jj) = 0._wp ; hfx_sum(ji,jj) = 0._wp 427 hfx_res(ji,jj) = 0._wp ; hfx_sub(ji,jj) = 0._wp 428 hfx_spr(ji,jj) = 0._wp ; hfx_dif(ji,jj) = 0._wp 429 hfx_err_dif(ji,jj) = 0._wp 430 wfx_err_sub(ji,jj) = 0._wp 431 ! 432 diag_heat(ji,jj) = 0._wp ; diag_sice(ji,jj) = 0._wp 433 diag_vice(ji,jj) = 0._wp ; diag_vsnw(ji,jj) = 0._wp 434 435 tau_icebfr (ji,jj) = 0._wp ! landfast ice param only (clem: important to keep the init here) 436 qsb_ice_bot(ji,jj) = 0._wp ! (needed if ln_icethd=F) 437 438 fhld(ji,jj) = 0._wp ! needed if ln_icethd=F 439 440 ! for control checks (ln_icediachk) 441 diag_trp_vi(ji,jj) = 0._wp ; diag_trp_vs(ji,jj) = 0._wp 442 diag_trp_ei(ji,jj) = 0._wp ; diag_trp_es(ji,jj) = 0._wp 443 diag_trp_sv(ji,jj) = 0._wp 444 ! 445 diag_adv_mass(ji,jj) = 0._wp 446 diag_adv_salt(ji,jj) = 0._wp 447 diag_adv_heat(ji,jj) = 0._wp 448 END_2D 449 450 DO jl = 1, jpl 451 DO_2D( 1, 1, 1, 1 ) 452 ! SIMIP diagnostics 453 t_si (ji,jj,jl) = rt0 ! temp at the ice-snow interface 454 qcn_ice_bot(ji,jj,jl) = 0._wp 455 qcn_ice_top(ji,jj,jl) = 0._wp ! conductive fluxes 456 cnd_ice (ji,jj,jl) = 0._wp ! effective conductivity at the top of ice/snow (ln_cndflx=T) 457 qcn_ice (ji,jj,jl) = 0._wp ! conductive flux (ln_cndflx=T & ln_cndemule=T) 458 qtr_ice_bot(ji,jj,jl) = 0._wp ! part of solar radiation transmitted through the ice needed at least for outputs 459 END_2D 460 ENDDO 446 461 447 462 END SUBROUTINE diag_set0 463 464 465 SUBROUTINE diag_trends( kn ) 466 !!---------------------------------------------------------------------- 467 !! *** ROUTINE diag_trends *** 468 !! 469 !! ** purpose : diagnostics of the trends. Used for conservation purposes 470 !! and outputs 471 !!---------------------------------------------------------------------- 472 INTEGER, INTENT(in) :: kn ! 1 = after dyn ; 2 = after thermo 473 !!---------------------------------------------------------------------- 474 ! 475 ! --- trends of heat, salt, mass (used for conservation controls) 476 IF( ln_icediachk .OR. iom_use('hfxdhc') ) THEN 477 ! 478 diag_heat(:,:) = diag_heat(:,:) & 479 & - SUM(SUM( e_i (:,:,1:nlay_i,:) - e_i_b (:,:,1:nlay_i,:), dim=4 ), dim=3 ) * r1_Dt_ice & 480 & - SUM(SUM( e_s (:,:,1:nlay_s,:) - e_s_b (:,:,1:nlay_s,:), dim=4 ), dim=3 ) * r1_Dt_ice 481 diag_sice(:,:) = diag_sice(:,:) & 482 & + SUM( sv_i(:,:,:) - sv_i_b(:,:,:) , dim=3 ) * r1_Dt_ice * rhoi 483 diag_vice(:,:) = diag_vice(:,:) & 484 & + SUM( v_i (:,:,:) - v_i_b (:,:,:) , dim=3 ) * r1_Dt_ice * rhoi 485 diag_vsnw(:,:) = diag_vsnw(:,:) & 486 & + SUM( v_s (:,:,:) - v_s_b (:,:,:) , dim=3 ) * r1_Dt_ice * rhos 487 ! 488 IF( kn == 2 ) CALL iom_put ( 'hfxdhc' , diag_heat ) ! output of heat trend 489 ! 490 ENDIF 491 ! 492 ! --- trends of concentration (used for simip outputs) 493 IF( iom_use('afxdyn') .OR. iom_use('afxthd') .OR. iom_use('afxtot') ) THEN 494 ! 495 diag_aice(:,:) = diag_aice(:,:) + SUM( a_i(:,:,:) - a_i_b(:,:,:), dim=3 ) * r1_Dt_ice 496 ! 497 IF( kn == 1 ) CALL iom_put( 'afxdyn' , diag_aice ) ! dyn trend 498 IF( kn == 2 ) CALL iom_put( 'afxthd' , SUM( a_i(:,:,:) - a_i_b(:,:,:), dim=3 ) * r1_Dt_ice ) ! thermo trend 499 IF( kn == 2 ) CALL iom_put( 'afxtot' , diag_aice ) ! total trend 500 ! 501 ENDIF 502 ! 503 END SUBROUTINE diag_trends 448 504 449 505 #else
Note: See TracChangeset
for help on using the changeset viewer.