- Timestamp:
- 2017-12-26T17:32:56+01:00 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2017/dev_merge_2017/NEMOGCM/NEMO/LIM_SRC_3/icethd_do.F90
r9019 r9169 39 39 PUBLIC ice_thd_do_init ! called by ice_stp 40 40 41 ! ** namelist (namthd_do) **42 REAL(wp) :: rn_hinew 43 LOGICAL :: ln_frazil 44 REAL(wp) :: rn_maxfraz 45 REAL(wp) :: rn_vfraz 46 REAL(wp) :: rn_Cfraz 41 ! !!** namelist (namthd_do) ** 42 REAL(wp) :: rn_hinew ! thickness for new ice formation (m) 43 LOGICAL :: ln_frazil ! use of frazil ice collection as function of wind (T) or not (F) 44 REAL(wp) :: rn_maxfraz ! maximum portion of frazil ice collecting at the ice bottom 45 REAL(wp) :: rn_vfraz ! threshold drift speed for collection of bottom frazil ice 46 REAL(wp) :: rn_Cfraz ! squeezing coefficient for collection of bottom frazil ice 47 47 48 48 !!---------------------------------------------------------------------- … … 78 78 !! update h_s_1d, h_i_1d 79 79 !!------------------------------------------------------------------------ 80 INTEGER :: ji, jj,jk,jl! dummy loop indices80 INTEGER :: ji, jj, jk, jl ! dummy loop indices 81 81 INTEGER :: iter ! - - 82 82 REAL(wp) :: ztmelts, zfrazb, zweight, zde ! local scalars 83 83 REAL(wp) :: zgamafr, zvfrx, zvgx, ztaux, ztwogp, zf ! - - 84 84 REAL(wp) :: ztenagm, zvfry, zvgy, ztauy, zvrel2, zfp, zsqcd , zhicrit ! - - 85 85 ! 86 86 REAL(wp) :: zQm ! enthalpy exchanged with the ocean (J/m2, >0 towards ocean) 87 87 REAL(wp) :: zEi ! sea ice specific enthalpy (J/kg) 88 88 REAL(wp) :: zEw ! seawater specific enthalpy (J/kg) 89 89 REAL(wp) :: zfmdt ! mass flux x time step (kg/m2, >0 towards ocean) 90 90 ! 91 91 REAL(wp) :: zv_newfra 92 92 ! 93 93 INTEGER , DIMENSION(jpij) :: jcat ! indexes of categories where new ice grows 94 94 REAL(wp), DIMENSION(jpij) :: zswinew ! switch for new ice or not 95 95 ! 96 96 REAL(wp), DIMENSION(jpij) :: zv_newice ! volume of accreted ice 97 97 REAL(wp), DIMENSION(jpij) :: za_newice ! fractional area of accreted ice … … 104 104 REAL(wp), DIMENSION(jpij) :: zv_frazb ! accretion of frazil ice at the ice bottom 105 105 REAL(wp), DIMENSION(jpij) :: zvrel_1d ! relative ice / frazil velocity (1D vector) 106 106 ! 107 107 REAL(wp), DIMENSION(jpij,jpl) :: zv_b ! old volume of ice in category jl 108 108 REAL(wp), DIMENSION(jpij,jpl) :: za_b ! old area of ice in category jl 109 109 ! 110 110 REAL(wp), DIMENSION(jpij,nlay_i,jpl) :: ze_i_2d !: 1-D version of e_i 111 111 ! 112 112 REAL(wp), DIMENSION(jpi,jpj) :: zvrel ! relative ice / frazil velocity 113 113 ! 114 114 REAL(wp) :: zcai = 1.4e-3_wp ! ice-air drag (clem: should be dependent on coupling/forcing used) 115 115 !!-----------------------------------------------------------------------! 116 116 117 IF( ln_icediachk ) CALL ice_cons_hsm( 0, 'icethd_do', rdiag_v, rdiag_s, rdiag_t, rdiag_fv, rdiag_fs, rdiag_ft)117 IF( ln_icediachk ) CALL ice_cons_hsm( 0, 'icethd_do', rdiag_v, rdiag_s, rdiag_t, rdiag_fv, rdiag_fs, rdiag_ft ) 118 118 119 119 CALL ice_var_agg(1) … … 141 141 142 142 IF( ln_frazil ) THEN 143 143 ! 144 144 !-------------------- 145 145 ! Physical constants 146 146 !-------------------- 147 147 ht_i_new(:,:) = 0._wp 148 148 ! 149 149 zhicrit = 0.04 ! frazil ice thickness 150 150 ztwogp = 2. * rau0 / ( grav * 0.3 * ( rau0 - rhoic ) ) ! reduced grav 151 151 zsqcd = 1.0 / SQRT( 1.3 * zcai ) ! 1/SQRT(airdensity*drag) 152 152 zgamafr = 0.03 153 153 ! 154 154 DO jj = 2, jpjm1 155 155 DO ji = 2, jpim1 … … 204 204 iter = iter + 1 205 205 END DO 206 206 ! 207 207 ENDIF ! end of selection of pixels where ice forms 208 208 ! 209 209 END DO 210 210 END DO … … 222 222 !------------------------------------- 223 223 ! This occurs if open water energy budget is negative (cooling) and there is no landfast ice 224 npti = 0 ;nptidx(:) = 0224 npti = 0 ; nptidx(:) = 0 225 225 DO jj = 1, jpj 226 226 DO ji = 1, jpi … … 431 431 h_i_old (ji,nlay_i+1) = zv_newfra 432 432 eh_i_old(ji,nlay_i+1) = ze_newice(ji) * zv_newfra 433 END DO433 END DO 434 434 ! --- Ice enthalpy remapping --- ! 435 435 CALL ice_thd_ent( ze_i_2d(1:npti,:,jl) ) 436 END DO436 END DO 437 437 438 438 !----------------- … … 474 474 ! 475 475 END SUBROUTINE ice_thd_do 476 476 477 477 478 SUBROUTINE ice_thd_do_init … … 487 488 !! ** input : Namelist namthd_do 488 489 !!------------------------------------------------------------------- 489 INTEGER :: ios ! Local integer output status for namelist read490 INTEGER :: ios ! Local integer 490 491 !! 491 492 NAMELIST/namthd_do/ rn_hinew, ln_frazil, rn_maxfraz, rn_vfraz, rn_Cfraz … … 494 495 REWIND( numnam_ice_ref ) ! Namelist namthd_do in reference namelist : Ice thermodynamics 495 496 READ ( numnam_ice_ref, namthd_do, IOSTAT = ios, ERR = 901) 496 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namthd_do in reference namelist', lwp ) 497 497 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namthd_do in reference namelist', lwp ) 498 498 REWIND( numnam_ice_cfg ) ! Namelist namthd_do in configuration namelist : Ice thermodynamics 499 499 READ ( numnam_ice_cfg, namthd_do, IOSTAT = ios, ERR = 902 ) 500 902 IF( ios /= 0 ) CALL ctl_nam ( ios , 'namthd_do in configuration namelist', lwp ) 501 IF(lwm) WRITE ( numoni, namthd_do ) 502 ! 500 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'namthd_do in configuration namelist', lwp ) 501 IF(lwm) WRITE( numoni, namthd_do ) 503 502 ! 504 503 IF(lwp) THEN ! control print 504 WRITE(numout,*) 505 505 WRITE(numout,*) 'ice_thd_do_init: Ice growth in open water' 506 506 WRITE(numout,*) '~~~~~~~~~~~~~~~'
Note: See TracChangeset
for help on using the changeset viewer.