Changeset 8505
- Timestamp:
- 2017-09-06T19:02:43+02:00 (6 years ago)
- Location:
- branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/ice.F90
r8500 r8505 192 192 REAL(wp), PUBLIC :: rn_tmi_ini_s ! initial temperature 193 193 194 ! !!** ice-thickness distribution namelist (namiceitd) **195 REAL(wp), PUBLIC :: rn_himean !: mean thickness of the domain (used to compute the distribution, nn_itdshp = 2 only)196 197 194 ! !!** ice-dynamics namelist (namicedyn) ** 198 195 ! -- iceadv -- ! -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/iceadv.F90
r8504 r8505 117 117 !---------- 118 118 SELECT CASE ( nn_limadv ) 119 CASE ( 0 ) !-- Ultimate-MACHO scheme119 CASE ( 0 ) !-- ULTIMATE-MACHO scheme 120 120 CALL ice_adv_umx( kt, u_ice, v_ice, & 121 121 & ato_i, v_i, v_s, smv_i, oa_i, a_i, a_ip, v_ip, e_s, e_i ) 122 122 123 CASE ( -1 ) !-- P ratherscheme123 CASE ( -1 ) !-- PRATHER scheme 124 124 CALL ice_adv_prather( kt, u_ice, v_ice, & 125 125 & ato_i, v_i, v_s, smv_i, oa_i, a_i, a_ip, v_ip, e_s, e_i ) -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/icealb.F90
r8498 r8505 13 13 !! alb_init : initialisation of albedo computation 14 14 !!---------------------------------------------------------------------- 15 USE ice , ONLY : jpl ! number of ice category15 USE ice, ONLY: jpl ! sea-ice: number of categories 16 16 USE phycst ! physical constants 17 17 ! … … 23 23 PRIVATE 24 24 25 PUBLIC ice_alb ! routine called in iceforcing.F90 and iceupdate.F90 25 PUBLIC ice_alb_init ! called in icestp 26 PUBLIC ice_alb ! called in iceforcing.F90 and iceupdate.F90 26 27 27 28 REAL(wp), PUBLIC, PARAMETER :: rn_alb_oce = 0.066 !: ocean or lead albedo (Pegau and Paulson, Ann. Glac. 2001) 28 29 29 INTEGER :: albd_init = 0 ! control flag for initialization30 30 REAL(wp) , PARAMETER :: rc1 = 0.05 ! snow thickness (only for nn_ice_alb=0) 31 31 REAL(wp) , PARAMETER :: rc2 = 0.10 ! " " … … 33 33 REAL(wp) , PARAMETER :: r1_c1 = 1. / rc1 34 34 REAL(wp) , PARAMETER :: r1_c2 = 1. / rc2 35 36 ! !!* namelist namsbc_alb * 37 INTEGER :: nn_ice_alb 38 REAL(wp) :: rn_alb_sdry, rn_alb_smlt, rn_alb_idry, rn_alb_imlt, rn_alb_dpnd 35 ! 36 ! ** albedo namelist (namicealb) 37 INTEGER :: nn_ice_alb ! type of albedo scheme: 0: Shine & Henderson-Sellers (JGR 1985) 38 ! ! 1: "home made" based on Brandt et al. (JClim 2005) 39 ! ! and Grenfell & Perovich (JGR 2004) 40 ! ! 2: Same as 1 but with melt ponds 41 REAL(wp) :: rn_alb_sdry ! dry snow albedo 42 REAL(wp) :: rn_alb_smlt ! melting snow albedo 43 REAL(wp) :: rn_alb_idry ! dry ice albedo 44 REAL(wp) :: rn_alb_imlt ! bare puddled ice albedo 45 REAL(wp) :: rn_alb_dpnd ! ponded ice albedo 39 46 40 47 !!---------------------------------------------------------------------- … … 102 109 REAL(wp), DIMENSION(jpi,jpj,jpl) :: zafrac_pnd ! relative ice fraction (effective) 103 110 !!--------------------------------------------------------------------- 104 105 IF( albd_init == 0 ) CALL alb_init ! initialization106 111 107 112 !----------------------------------------------------- … … 299 304 300 305 301 SUBROUTINE alb_init306 SUBROUTINE ice_alb_init 302 307 !!---------------------------------------------------------------------- 303 308 !! *** ROUTINE alb_init *** … … 311 316 NAMELIST/namicealb/ nn_ice_alb, rn_alb_sdry, rn_alb_smlt, rn_alb_idry, rn_alb_imlt, rn_alb_dpnd 312 317 !!---------------------------------------------------------------------- 313 !314 albd_init = 1 ! indicate that the initialization has been done315 318 ! 316 319 REWIND( numnam_ice_ref ) ! Namelist namicealb in reference namelist : Albedo parameters … … 336 339 ENDIF 337 340 ! 338 END SUBROUTINE alb_init341 END SUBROUTINE ice_alb_init 339 342 340 343 #else -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/icedia.F90
r8486 r8505 31 31 PRIVATE 32 32 33 PUBLIC ice_dia ! routinecalled by icestp.F9034 PUBLIC ice_dia_init ! routinecalled in icestp.F9033 PUBLIC ice_dia ! called by icestp.F90 34 PUBLIC ice_dia_init ! called in icestp.F90 35 35 36 36 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: vol_loc_ini, sal_loc_ini, tem_loc_ini ! initial volume, salt and heat contents … … 162 162 !! - Compute coefficients for conversion 163 163 !!--------------------------------------------------------------------------- 164 INTEGER :: i error ! local integer165 !! 166 !!NAMELIST/namicehsb/ blabla164 INTEGER :: ios, ierror ! local integer 165 !! 166 NAMELIST/namicediag/ ln_limdiachk, ln_limdiahsb, ln_limctl, iiceprt, jiceprt 167 167 !!---------------------------------------------------------------------- 168 168 ! 169 !!REWIND ( numnam_ice ) ! Read Namelist namicehsb 170 !!READ ( numnam_ice, namicehsb ) 171 ! 172 IF(lwp) THEN ! Control print 169 REWIND( numnam_ice_ref ) ! Namelist namicediag in reference namelist : Parameters for ice 170 READ ( numnam_ice_ref, namicediag, IOSTAT = ios, ERR = 901) 171 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namicediag in reference namelist', lwp ) 172 173 REWIND( numnam_ice_cfg ) ! Namelist namicediag in configuration namelist : Parameters for ice 174 READ ( numnam_ice_cfg, namicediag, IOSTAT = ios, ERR = 902 ) 175 902 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namicediag in configuration namelist', lwp ) 176 IF(lwm) WRITE ( numoni, namicediag ) 177 ! 178 IF(lwp) THEN ! control print 173 179 WRITE(numout,*) 174 WRITE(numout,*) 'ice_dia_init : check the heat and salt budgets' 175 WRITE(numout,*) '~~~~~~~~~~~~' 180 WRITE(numout,*) 'ice_dia_init: ice diagnostics' 181 WRITE(numout,*) ' ~~~~~~~~~~~' 182 WRITE(numout,*) ' Namelist namicediag : ' 183 WRITE(numout,*) ' Diagnose online heat/mass/salt budget ln_limdiachk = ', ln_limdiachk 184 WRITE(numout,*) ' Output heat/mass/salt budget ln_limdiahsb = ', ln_limdiahsb 185 WRITE(numout,*) ' control prints for a given grid point ln_limctl = ', ln_limctl 186 WRITE(numout,*) ' chosen grid point position (iiceprt,jiceprt) = (', iiceprt,',', jiceprt,')' 176 187 ENDIF 177 188 ! 178 ALLOCATE( vol_loc_ini(jpi,jpj), sal_loc_ini(jpi,jpj), tem_loc_ini(jpi,jpj), STAT=ierror ) 179 IF( ierror > 0 ) THEN 180 CALL ctl_stop( 'ice_dia: unable to allocate vol_loc_ini' ) 181 RETURN 182 ENDIF 183 ! 184 CALL ice_dia_rst( 'READ' ) !* read or initialize all required files 189 IF( ln_limdiahsb ) THEN 190 ALLOCATE( vol_loc_ini(jpi,jpj), sal_loc_ini(jpi,jpj), tem_loc_ini(jpi,jpj), STAT=ierror ) 191 IF( ierror > 0 ) THEN 192 CALL ctl_stop( 'ice_dia: unable to allocate vol_loc_ini' ) 193 RETURN 194 ENDIF 195 ! 196 CALL ice_dia_rst( 'READ' ) !* read or initialize all required files 197 ENDIF 185 198 ! 186 199 END SUBROUTINE ice_dia_init -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/iceitd.F90
r8500 r8505 34 34 PRIVATE 35 35 36 PUBLIC ice_itd_init ! called in icestp 36 37 PUBLIC ice_itd_rem ! called in icethd 37 38 PUBLIC ice_itd_reb ! called in iceerr 39 40 ! ** ice-thickness distribution namelist (namiceitd) ** 41 REAL(wp) :: rn_himean ! mean thickness of the domain (used to compute the distribution) 38 42 39 43 !!---------------------------------------------------------------------- … … 181 185 ENDIF 182 186 183 184 187 !----------------------------------------------------------------------------------------------- 185 188 ! 4) Compute g(h) … … 636 639 END SUBROUTINE ice_itd_reb 637 640 641 SUBROUTINE ice_itd_init 642 !!------------------------------------------------------------------ 643 !! *** ROUTINE ice_itd_init *** 644 !! 645 !! ** Purpose : Initializes the ice thickness distribution 646 !! ** Method : ... 647 !! ** input : Namelist namiceitd 648 !!------------------------------------------------------------------- 649 INTEGER :: jl ! dummy loop index 650 INTEGER :: ios ! Local integer output status for namelist read 651 REAL(wp) :: zhmax, znum, zden, zalpha ! - - 652 !! 653 NAMELIST/namiceitd/ rn_himean 654 !!------------------------------------------------------------------ 655 ! 656 REWIND( numnam_ice_ref ) ! Namelist namiceitd in reference namelist : Parameters for ice 657 READ ( numnam_ice_ref, namiceitd, IOSTAT = ios, ERR = 901) 658 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namiceitd in reference namelist', lwp ) 659 660 REWIND( numnam_ice_cfg ) ! Namelist namiceitd in configuration namelist : Parameters for ice 661 READ ( numnam_ice_cfg, namiceitd, IOSTAT = ios, ERR = 902 ) 662 902 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namiceitd in configuration namelist', lwp ) 663 IF(lwm) WRITE ( numoni, namiceitd ) 664 ! 665 IF(lwp) THEN ! control print 666 WRITE(numout,*) 667 WRITE(numout,*) 'ice_itd_init : Initialization of ice cat distribution ' 668 WRITE(numout,*) '~~~~~~~~~~~~' 669 WRITE(numout,*) ' Namelist namicerun : ' 670 WRITE(numout,*) ' mean ice thickness in the domain rn_himean = ', rn_himean 671 ENDIF 672 ! 673 !-----------------------------------! 674 ! Thickness categories boundaries ! 675 !-----------------------------------! 676 ! 677 zalpha = 0.05_wp ! max of each category (from h^(-alpha) function) 678 zhmax = 3._wp * rn_himean 679 DO jl = 1, jpl 680 znum = jpl * ( zhmax+1 )**zalpha 681 zden = REAL( jpl-jl , wp ) * ( zhmax + 1._wp )**zalpha + REAL( jl , wp ) 682 hi_max(jl) = ( znum / zden )**(1./zalpha) - 1 683 END DO 684 ! 685 DO jl = 1, jpl ! mean thickness by category 686 hi_mean(jl) = ( hi_max(jl) + hi_max(jl-1) ) * 0.5_wp 687 END DO 688 ! 689 hi_max(jpl) = 99._wp ! set to a big value to ensure that all ice is thinner than hi_max(jpl) 690 ! 691 IF(lwp) WRITE(numout,*) 692 IF(lwp) WRITE(numout,*) ' ===>>> resulting thickness category boundaries :' 693 IF(lwp) WRITE(numout,*) ' hi_max(:)= ', hi_max(0:jpl) 694 ! 695 END SUBROUTINE ice_itd_init 696 638 697 #else 639 698 !!---------------------------------------------------------------------- -
branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/icestp.F90
r8500 r8505 51 51 USE iceist ! sea-ice: initial state 52 52 USE icethd_sal ! sea-ice: thermodynamics and salinity 53 USE iceitd ! sea-ice: remapping thickness distribution 54 USE icealb ! sea-ice: albedo 53 55 ! 54 56 USE bdy_oce , ONLY : ln_bdy ! flag for bdy … … 285 287 ! END MV MP 2016 286 288 287 IF( ln_limdyn ) CALL ice_rdgrft_init 289 IF( ln_limdyn ) CALL ice_rdgrft_init ! ice thickness distribution initialization for ridging/rafting 288 290 ! ! Initial sea-ice state 289 291 IF( .NOT. ln_rstart ) THEN ! start from rest: sea-ice deduced from sst … … 297 299 CALL ice_update_init ! ice surface boundary condition 298 300 ! 299 IF( ln_limdiahsb) CALL ice_dia_init ! initialization for diags 301 CALL ice_alb_init ! ice surface albedo 302 ! 303 CALL ice_dia_init ! initialization for diags 300 304 ! 301 305 fr_i (:,:) = at_i(:,:) ! initialisation of sea-ice fraction … … 327 331 NAMELIST/namicerun/ jpl, nlay_i, nlay_s, nn_monocat, rn_amax_n, rn_amax_s, cn_icerst_in, cn_icerst_indir, & 328 332 & cn_icerst_out, cn_icerst_outdir, ln_limthd, ln_limdyn, nn_limdyn, rn_uice, rn_vice 329 NAMELIST/namicediag/ ln_limdiachk, ln_limdiahsb, ln_limctl, iiceprt, jiceprt330 333 !!------------------------------------------------------------------- 331 334 ! … … 338 341 902 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namicerun in configuration namelist', lwp ) 339 342 IF(lwm) WRITE ( numoni, namicerun ) 340 !341 REWIND( numnam_ice_ref ) ! Namelist namicediag in reference namelist : Parameters for ice342 READ ( numnam_ice_ref, namicediag, IOSTAT = ios, ERR = 903)343 903 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namicediag in reference namelist', lwp )344 345 REWIND( numnam_ice_cfg ) ! Namelist namicediag in configuration namelist : Parameters for ice346 READ ( numnam_ice_cfg, namicediag, IOSTAT = ios, ERR = 904 )347 904 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namicediag in configuration namelist', lwp )348 IF(lwm) WRITE ( numoni, namicediag )349 343 ! 350 344 IF(lwp) THEN ! control print … … 366 360 WRITE(numout,*) ' =0 advection only with prescribed velocity given by ' 367 361 WRITE(numout,*) ' a uniform field (u,v)_ice = (rn_uice,rn_vice) = (', rn_uice,',', rn_vice,')' 368 WRITE(numout,*)369 WRITE(numout,*) ' Namelist namicediag : '370 WRITE(numout,*) ' Diagnose online heat/mass/salt budget ln_limdiachk = ', ln_limdiachk371 WRITE(numout,*) ' Output heat/mass/salt budget ln_limdiahsb = ', ln_limdiahsb372 WRITE(numout,*) ' control prints for a given grid point ln_limctl = ', ln_limctl373 WRITE(numout,*) ' chosen grid point position (iiceprt,jiceprt) = (', iiceprt,',', jiceprt,')'374 362 ENDIF 375 363 ! … … 412 400 ! 413 401 END SUBROUTINE ice_run_init 414 415 416 SUBROUTINE ice_itd_init417 !!------------------------------------------------------------------418 !! *** ROUTINE ice_itd_init ***419 !!420 !! ** Purpose : Initializes the ice thickness distribution421 !! ** Method : ...422 !! ** input : Namelist namiceitd423 !!-------------------------------------------------------------------424 INTEGER :: jl ! dummy loop index425 INTEGER :: ios ! Local integer output status for namelist read426 REAL(wp) :: zc1, zc2, zc3, zx1 ! local scalars427 REAL(wp) :: zhmax, znum, zden, zalpha ! - -428 !!429 NAMELIST/namiceitd/ rn_himean430 !!------------------------------------------------------------------431 !432 REWIND( numnam_ice_ref ) ! Namelist namiceitd in reference namelist : Parameters for ice433 READ ( numnam_ice_ref, namiceitd, IOSTAT = ios, ERR = 905)434 905 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namiceitd in reference namelist', lwp )435 436 REWIND( numnam_ice_cfg ) ! Namelist namiceitd in configuration namelist : Parameters for ice437 READ ( numnam_ice_cfg, namiceitd, IOSTAT = ios, ERR = 906 )438 906 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namiceitd in configuration namelist', lwp )439 IF(lwm) WRITE ( numoni, namiceitd )440 !441 IF(lwp) THEN ! control print442 WRITE(numout,*)443 WRITE(numout,*) 'ice_itd_init : Initialization of ice cat distribution '444 WRITE(numout,*) '~~~~~~~~~~~~'445 WRITE(numout,*) ' Namelist namicerun : '446 WRITE(numout,*) ' mean ice thickness in the domain rn_himean = ', rn_himean447 ENDIF448 !449 !-----------------------------------!450 ! Thickness categories boundaries !451 !-----------------------------------!452 !453 zalpha = 0.05_wp ! max of each category (from h^(-alpha) function)454 zhmax = 3._wp * rn_himean455 DO jl = 1, jpl456 znum = jpl * ( zhmax+1 )**zalpha457 zden = REAL( jpl-jl , wp ) * ( zhmax + 1._wp )**zalpha + REAL( jl , wp )458 hi_max(jl) = ( znum / zden )**(1./zalpha) - 1459 END DO460 !461 DO jl = 1, jpl ! mean thickness by category462 hi_mean(jl) = ( hi_max(jl) + hi_max(jl-1) ) * 0.5_wp463 END DO464 !465 hi_max(jpl) = 99._wp ! set to a big value to ensure that all ice is thinner than hi_max(jpl)466 !467 IF(lwp) WRITE(numout,*)468 IF(lwp) WRITE(numout,*) ' ===>>> resulting thickness category boundaries :'469 IF(lwp) WRITE(numout,*) ' hi_max(:)= ', hi_max(0:jpl)470 !471 END SUBROUTINE ice_itd_init472 402 473 403
Note: See TracChangeset
for help on using the changeset viewer.