New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 8505 for branches/2017/dev_r8183_ICEMODEL/NEMOGCM – NEMO

Ignore:
Timestamp:
2017-09-06T19:02:43+02:00 (7 years ago)
Author:
clem
Message:

changes in style - part5 - start changing init routines

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  
    192192   REAL(wp), PUBLIC ::   rn_tmi_ini_s     ! initial temperature 
    193193    
    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  
    197194   !                                     !!** ice-dynamics namelist (namicedyn) ** 
    198195                                          ! -- iceadv -- ! 
  • branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/iceadv.F90

    r8504 r8505  
    117117      !---------- 
    118118      SELECT CASE ( nn_limadv ) 
    119       CASE ( 0 )                    !--  Ultimate-MACHO scheme 
     119      CASE ( 0 )                    !-- ULTIMATE-MACHO scheme 
    120120         CALL ice_adv_umx( kt, u_ice, v_ice,  & 
    121121            &              ato_i, v_i, v_s, smv_i, oa_i, a_i, a_ip, v_ip, e_s, e_i ) 
    122122          
    123       CASE ( -1 )                   !-- Prather scheme 
     123      CASE ( -1 )                   !-- PRATHER scheme 
    124124         CALL ice_adv_prather( kt, u_ice, v_ice,  & 
    125125            &                  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  
    1313   !!   alb_init      : initialisation of albedo computation 
    1414   !!---------------------------------------------------------------------- 
    15    USE ice     , ONLY : jpl   ! number of ice category 
     15   USE ice, ONLY: jpl ! sea-ice: number of categories 
    1616   USE phycst         ! physical constants 
    1717   ! 
     
    2323   PRIVATE 
    2424 
    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 
    2627 
    2728   REAL(wp), PUBLIC, PARAMETER ::   rn_alb_oce = 0.066   !: ocean or lead albedo (Pegau and Paulson, Ann. Glac. 2001) 
    2829 
    29    INTEGER  ::   albd_init = 0       ! control flag for initialization   
    3030   REAL(wp) , PARAMETER ::   rc1    = 0.05    ! snow thickness (only for nn_ice_alb=0) 
    3131   REAL(wp) , PARAMETER ::   rc2    = 0.10    !  "        " 
     
    3333   REAL(wp) , PARAMETER ::   r1_c1 = 1. / rc1 
    3434   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 
    3946 
    4047   !!---------------------------------------------------------------------- 
     
    102109      REAL(wp), DIMENSION(jpi,jpj,jpl) ::   zafrac_pnd      ! relative ice fraction (effective) 
    103110      !!--------------------------------------------------------------------- 
    104  
    105       IF( albd_init == 0 )   CALL alb_init      ! initialization  
    106111 
    107112      !----------------------------------------------------- 
     
    299304 
    300305 
    301    SUBROUTINE alb_init 
     306   SUBROUTINE ice_alb_init 
    302307      !!---------------------------------------------------------------------- 
    303308      !!                 ***  ROUTINE alb_init  *** 
     
    311316      NAMELIST/namicealb/ nn_ice_alb, rn_alb_sdry, rn_alb_smlt, rn_alb_idry, rn_alb_imlt, rn_alb_dpnd 
    312317      !!---------------------------------------------------------------------- 
    313       ! 
    314       albd_init = 1                     ! indicate that the initialization has been done 
    315318      ! 
    316319      REWIND( numnam_ice_ref )              ! Namelist namicealb in reference namelist : Albedo parameters 
     
    336339      ENDIF 
    337340      ! 
    338    END SUBROUTINE alb_init 
     341   END SUBROUTINE ice_alb_init 
    339342 
    340343#else 
  • branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/icedia.F90

    r8486 r8505  
    3131   PRIVATE 
    3232 
    33    PUBLIC   ice_dia        ! routine called by icestp.F90 
    34    PUBLIC   ice_dia_init   ! routine called in icestp.F90 
     33   PUBLIC   ice_dia        ! called by icestp.F90 
     34   PUBLIC   ice_dia_init   ! called in icestp.F90 
    3535 
    3636   REAL(wp), DIMENSION(:,:), ALLOCATABLE ::   vol_loc_ini, sal_loc_ini, tem_loc_ini ! initial volume, salt and heat contents 
     
    162162      !!             - Compute coefficients for conversion 
    163163      !!--------------------------------------------------------------------------- 
    164       INTEGER            ::   ierror   ! local integer 
    165       !! 
    166       !!NAMELIST/namicehsb/ blabla 
     164      INTEGER            ::   ios, ierror   ! local integer 
     165      !! 
     166      NAMELIST/namicediag/ ln_limdiachk, ln_limdiahsb, ln_limctl, iiceprt, jiceprt   
    167167      !!---------------------------------------------------------------------- 
    168168      ! 
    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) 
     171901   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 ) 
     175902   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 
    173179         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,')' 
    176187      ENDIF 
    177188      !       
    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 
    185198      ! 
    186199   END SUBROUTINE ice_dia_init 
  • branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/iceitd.F90

    r8500 r8505  
    3434   PRIVATE 
    3535 
     36   PUBLIC   ice_itd_init  ! called in icestp 
    3637   PUBLIC   ice_itd_rem   ! called in icethd 
    3738   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) 
    3842 
    3943   !!---------------------------------------------------------------------- 
     
    181185      ENDIF 
    182186    
    183  
    184187      !----------------------------------------------------------------------------------------------- 
    185188      !  4) Compute g(h)  
     
    636639   END SUBROUTINE ice_itd_reb 
    637640 
     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) 
     658901   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 ) 
     662902   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 
    638697#else 
    639698   !!---------------------------------------------------------------------- 
  • branches/2017/dev_r8183_ICEMODEL/NEMOGCM/NEMO/LIM_SRC_3/icestp.F90

    r8500 r8505  
    5151   USE iceist         ! sea-ice: initial state 
    5252   USE icethd_sal     ! sea-ice: thermodynamics and salinity 
     53   USE iceitd         ! sea-ice: remapping thickness distribution 
     54   USE icealb         ! sea-ice: albedo 
    5355   ! 
    5456   USE bdy_oce , ONLY : ln_bdy   ! flag for bdy 
     
    285287      ! END MV MP 2016 
    286288 
    287       IF( ln_limdyn )   CALL ice_rdgrft_init             ! ice thickness distribution initialization for ridging/rafting 
     289      IF( ln_limdyn )   CALL ice_rdgrft_init  ! ice thickness distribution initialization for ridging/rafting 
    288290      !                                ! Initial sea-ice state 
    289291      IF( .NOT. ln_rstart ) THEN              ! start from rest: sea-ice deduced from sst 
     
    297299      CALL ice_update_init                 ! ice surface boundary condition 
    298300      ! 
    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 
    300304      ! 
    301305      fr_i  (:,:)   = at_i(:,:)         ! initialisation of sea-ice fraction 
     
    327331      NAMELIST/namicerun/ jpl, nlay_i, nlay_s, nn_monocat, rn_amax_n, rn_amax_s, cn_icerst_in, cn_icerst_indir,   & 
    328332         &                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, jiceprt   
    330333      !!------------------------------------------------------------------- 
    331334      ! 
     
    338341902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'namicerun in configuration namelist', lwp ) 
    339342      IF(lwm) WRITE ( numoni, namicerun ) 
    340       ! 
    341       REWIND( numnam_ice_ref )      ! Namelist namicediag in reference namelist : Parameters for ice 
    342       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 ice 
    346       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 ) 
    349343      ! 
    350344      IF(lwp) THEN                  ! control print 
     
    366360         WRITE(numout,*) '            =0 advection only with prescribed velocity given by ' 
    367361         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_limdiachk 
    371          WRITE(numout,*) '      Output          heat/mass/salt budget      ln_limdiahsb = ', ln_limdiahsb 
    372          WRITE(numout,*) '      control prints for a given grid point         ln_limctl = ', ln_limctl 
    373          WRITE(numout,*) '         chosen grid point position         (iiceprt,jiceprt) = (', iiceprt,',', jiceprt,')' 
    374362      ENDIF 
    375363      ! 
     
    412400      ! 
    413401   END SUBROUTINE ice_run_init 
    414  
    415  
    416    SUBROUTINE ice_itd_init 
    417       !!------------------------------------------------------------------ 
    418       !!                ***  ROUTINE ice_itd_init *** 
    419       !! 
    420       !! ** Purpose :   Initializes the ice thickness distribution 
    421       !! ** Method  :   ... 
    422       !! ** input   :   Namelist namiceitd 
    423       !!------------------------------------------------------------------- 
    424       INTEGER  ::   jl    ! dummy loop index 
    425       INTEGER  ::   ios   ! Local integer output status for namelist read 
    426       REAL(wp) ::   zc1, zc2, zc3, zx1          ! local scalars 
    427       REAL(wp) ::   zhmax, znum, zden, zalpha   !   -      - 
    428       !! 
    429       NAMELIST/namiceitd/ rn_himean 
    430       !!------------------------------------------------------------------ 
    431       ! 
    432       REWIND( numnam_ice_ref )      ! Namelist namiceitd in reference namelist : Parameters for ice 
    433       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 ice 
    437       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 print 
    442          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_himean 
    447       ENDIF 
    448       ! 
    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_himean 
    455       DO jl = 1, jpl 
    456          znum = jpl * ( zhmax+1 )**zalpha 
    457          zden = REAL( jpl-jl , wp ) * ( zhmax + 1._wp )**zalpha + REAL( jl , wp ) 
    458          hi_max(jl) = ( znum / zden )**(1./zalpha) - 1 
    459       END DO 
    460       ! 
    461       DO jl = 1, jpl                ! mean thickness by category 
    462          hi_mean(jl) = ( hi_max(jl) + hi_max(jl-1) ) * 0.5_wp 
    463       END DO 
    464       ! 
    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_init 
    472402 
    473403 
Note: See TracChangeset for help on using the changeset viewer.