- Timestamp:
- 2017-12-13T15:58:53+01:00 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2017/dev_merge_2017/NEMOGCM/NEMO/OPA_SRC/SBC/sbc_ice.F90
r6416 r9019 9 9 !! 3.4 ! 2011-11 (C. Harris) CICE added as an option 10 10 !!---------------------------------------------------------------------- 11 #if defined key_lim3 || defined key_ lim2 || defined key_cice12 !!---------------------------------------------------------------------- 13 !! 'key_lim 2' or 'key_lim3' : LIM-2 or LIM-3sea-ice model11 #if defined key_lim3 || defined key_cice 12 !!---------------------------------------------------------------------- 13 !! 'key_lim3' or 'key_cice' : LIM-3 or CICE sea-ice model 14 14 !!---------------------------------------------------------------------- 15 15 USE par_oce ! ocean parameters … … 18 18 USE ice ! LIM-3 parameters 19 19 # endif 20 # if defined key_lim221 USE par_ice_2 ! LIM-2 parameters22 USE ice_223 # endif24 20 # if defined key_cice 25 21 USE ice_domain_size, only: ncat … … 31 27 PRIVATE 32 28 33 PUBLIC sbc_ice_alloc ! called in iceini(_2).F90 34 35 # if defined key_lim2 36 LOGICAL , PUBLIC, PARAMETER :: lk_lim2 = .TRUE. !: LIM-2 ice model 37 LOGICAL , PUBLIC, PARAMETER :: lk_lim3 = .FALSE. !: no LIM-3 38 LOGICAL , PUBLIC, PARAMETER :: lk_cice = .FALSE. !: no CICE 39 # if defined key_lim2_vp 40 CHARACTER(len=1), PUBLIC, PARAMETER :: cp_ice_msh = 'I' !: VP : 'I'-grid ice-velocity (B-grid lower left corner) 41 # else 42 CHARACTER(len=1), PUBLIC, PARAMETER :: cp_ice_msh = 'C' !: EVP: 'C'-grid ice-velocity 43 # endif 44 # endif 29 PUBLIC sbc_ice_alloc ! called in sbcmod.F90 or sbcice_cice.F90 30 45 31 # if defined key_lim3 46 LOGICAL , PUBLIC, PARAMETER :: lk_lim2 = .FALSE. !: no LIM-247 32 LOGICAL , PUBLIC, PARAMETER :: lk_lim3 = .TRUE. !: LIM-3 ice model 48 33 LOGICAL , PUBLIC, PARAMETER :: lk_cice = .FALSE. !: no CICE … … 50 35 # endif 51 36 # if defined key_cice 52 LOGICAL , PUBLIC, PARAMETER :: lk_lim2 = .FALSE. !: no LIM-253 37 LOGICAL , PUBLIC, PARAMETER :: lk_lim3 = .FALSE. !: no LIM-3 54 38 LOGICAL , PUBLIC, PARAMETER :: lk_cice = .TRUE. !: CICE ice model … … 64 48 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: alb_ice !: ice albedo [-] 65 49 50 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: qml_ice !: heat available for snow / ice surface melting [W/m2] 51 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: qcn_ice !: heat conduction flux in the layer below surface [W/m2] 52 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: qsr_ice_tr !: solar flux transmitted below the ice surface [W/m2] 53 66 54 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: utau_ice !: atmos-ice u-stress. VP: I-pt ; EVP: U,V-pts [N/m2] 67 55 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: vtau_ice !: atmos-ice v-stress. VP: I-pt ; EVP: U,V-pts [N/m2] 68 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: fr1_i0 !: Solar surface transmission parameter, thick ice [-]69 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: fr2_i0 !: Solar surface transmission parameter, thin ice [-]70 56 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: emp_ice !: sublimation - precip over sea ice [kg/m2/s] 71 57 … … 83 69 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: qprec_ice !: enthalpy of precip over ice [J/m3] 84 70 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: emp_oce !: evap - precip over ocean [kg/m2/s] 85 #endif86 #if defined key_lim3 || defined key_lim287 71 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: wndm_ice !: wind speed module at T-point [m/s] 72 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: sstfrz !: wind speed module at T-point [m/s] 73 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: tsfc_ice !: sea ice surface skin temperature (on categories) 88 74 #endif 89 75 … … 106 92 INTEGER , PUBLIC, PARAMETER :: jpl = ncat 107 93 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: u_ice, v_ice ! jpi, jpj 108 #endif109 94 110 #if defined key_lim2 || defined key_cice111 95 ! already defined in ice.F90 for LIM3 112 96 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: a_i 113 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: ht_i, ht_s 114 #endif 115 116 #if defined key_cice 97 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: h_i, h_s 98 117 99 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: tatm_ice !: air temperature [K] 118 100 #endif 119 101 120 102 REAL(wp), PUBLIC, SAVE :: cldf_ice = 0.81 !: cloud fraction over sea ice, summer CLIO value [-] 103 104 !! arrays relating to embedding ice in the ocean 105 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: snwice_mass !: mass of snow and ice at current ice time step [Kg/m2] 106 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: snwice_mass_b !: mass of snow and ice at previous ice time step [Kg/m2] 107 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: snwice_fmass !: time evolution of mass of snow+ice [Kg/m2/s] 121 108 122 109 !!---------------------------------------------------------------------- … … 131 118 !! *** FUNCTION sbc_ice_alloc *** 132 119 !!---------------------------------------------------------------------- 133 INTEGER :: ierr( 5)120 INTEGER :: ierr(4) 134 121 !!---------------------------------------------------------------------- 135 122 ierr(:) = 0 136 123 137 #if defined key_lim3 || defined key_lim2 138 ALLOCATE( qns_ice (jpi,jpj,jpl) , qsr_ice (jpi,jpj,jpl) , & 139 & qla_ice (jpi,jpj,jpl) , dqla_ice(jpi,jpj,jpl) , & 140 & dqns_ice(jpi,jpj,jpl) , tn_ice (jpi,jpj,jpl) , alb_ice (jpi,jpj,jpl) , & 141 & utau_ice(jpi,jpj) , vtau_ice(jpi,jpj) , wndm_ice(jpi,jpj) , & 142 & fr1_i0 (jpi,jpj) , fr2_i0 (jpi,jpj) , & 143 #if defined key_lim2 144 & a_i(jpi,jpj,jpl) , & 145 #endif 124 ALLOCATE( snwice_mass(jpi,jpj) , snwice_mass_b(jpi,jpj), snwice_fmass(jpi,jpj) , STAT=ierr(1) ) 125 146 126 #if defined key_lim3 147 & evap_ice(jpi,jpj,jpl) , devap_ice(jpi,jpj,jpl) , qprec_ice(jpi,jpj) , & 148 & qemp_ice(jpi,jpj) , qevap_ice(jpi,jpj,jpl) , qemp_oce (jpi,jpj) , & 149 & qns_oce (jpi,jpj) , qsr_oce (jpi,jpj) , emp_oce (jpi,jpj) , & 150 #endif 151 & emp_ice(jpi,jpj) , STAT= ierr(1) ) 127 ALLOCATE( qns_ice (jpi,jpj,jpl) , qsr_ice (jpi,jpj,jpl) , & 128 & qla_ice (jpi,jpj,jpl) , dqla_ice (jpi,jpj,jpl) , & 129 & dqns_ice(jpi,jpj,jpl) , tn_ice (jpi,jpj,jpl) , alb_ice (jpi,jpj,jpl) , & 130 & qml_ice (jpi,jpj,jpl) , qcn_ice (jpi,jpj,jpl) , qsr_ice_tr(jpi,jpj,jpl) , & 131 & utau_ice(jpi,jpj) , vtau_ice (jpi,jpj) , wndm_ice (jpi,jpj) , & 132 & evap_ice(jpi,jpj,jpl) , devap_ice(jpi,jpj,jpl) , qprec_ice (jpi,jpj) , & 133 & qemp_ice(jpi,jpj) , qevap_ice(jpi,jpj,jpl) , qemp_oce (jpi,jpj) , & 134 & qns_oce (jpi,jpj) , qsr_oce (jpi,jpj) , emp_oce (jpi,jpj) , & 135 & emp_ice (jpi,jpj) , tsfc_ice (jpi,jpj,jpl) , sstfrz (jpi,jpj) , STAT= ierr(2) ) 152 136 #endif 153 137 … … 158 142 ss_iov(jpi,jpj) , fr_iu(jpi,jpj) , fr_iv(jpi,jpj) , & 159 143 a_i(jpi,jpj,ncat) , topmelt(jpi,jpj,ncat) , botmelt(jpi,jpj,ncat) , & 160 STAT= ierr( 1) )161 IF( ln_cpl ) ALLOCATE( u_ice(jpi,jpj) , fr1_i0(jpi,jpj) ,tn_ice (jpi,jpj,1) , &162 & v_ice(jpi,jpj) , fr2_i0(jpi,jpj) ,alb_ice(jpi,jpj,1) , &144 STAT= ierr(2) ) 145 IF( ln_cpl ) ALLOCATE( u_ice(jpi,jpj) , tn_ice (jpi,jpj,1) , & 146 & v_ice(jpi,jpj) , alb_ice(jpi,jpj,1) , & 163 147 & emp_ice(jpi,jpj) , qns_ice(jpi,jpj,1) , dqns_ice(jpi,jpj,1) , & 164 & STAT= ierr(2) ) 165 166 #endif 167 ! 168 #if defined key_cice || defined key_lim2 169 IF( ln_cpl ) ALLOCATE( ht_i(jpi,jpj,jpl) , ht_s(jpi,jpj,jpl) , STAT=ierr(5) ) 148 & STAT= ierr(3) ) 149 IF( ln_cpl ) ALLOCATE( h_i(jpi,jpj,jpl) , h_s(jpi,jpj,jpl) , STAT=ierr(4) ) 170 150 #endif 171 151 … … 177 157 #else 178 158 !!---------------------------------------------------------------------- 179 !! Default option NO LIM 2.0 or 3.0 or CICE sea-ice model 180 !!---------------------------------------------------------------------- 159 !! Default option NO LIM3 or CICE sea-ice model 160 !!---------------------------------------------------------------------- 161 USE lib_mpp ! MPP library 181 162 USE in_out_manager ! I/O manager 182 LOGICAL , PUBLIC, PARAMETER :: lk_lim2 = .FALSE. !: no LIM-2 ice model 163 164 IMPLICIT NONE 165 PRIVATE 166 167 PUBLIC sbc_ice_alloc ! 168 183 169 LOGICAL , PUBLIC, PARAMETER :: lk_lim3 = .FALSE. !: no LIM-3 ice model 184 170 LOGICAL , PUBLIC, PARAMETER :: lk_cice = .FALSE. !: no CICE ice model 185 171 CHARACTER(len=1), PUBLIC, PARAMETER :: cp_ice_msh = '-' !: no grid ice-velocity 186 REAL 172 REAL(wp) , PUBLIC, PARAMETER :: cldf_ice = 0.81 !: cloud fraction over sea ice, summer CLIO value [-] 187 173 INTEGER , PUBLIC, PARAMETER :: jpl = 1 188 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: u_ice, v_ice ,fr1_i0,fr2_i0! jpi, jpj174 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: u_ice, v_ice ! jpi, jpj 189 175 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: tn_ice, alb_ice, qns_ice, dqns_ice ! (jpi,jpj,jpl) 190 176 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: a_i 191 177 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: emp_ice 192 178 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: qsr_ice 193 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: h t_i, ht_s179 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: h_i, h_s 194 180 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: topmelt, botmelt 181 ! 182 !! arrays related to embedding ice in the ocean. 183 !! These arrays need to be declared even if no ice model is required. 184 !! In the no ice model or traditional levitating ice cases they contain only zeros 185 !! --------------------- 186 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: snwice_mass !: mass of snow and ice at current ice time step [Kg/m2] 187 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: snwice_mass_b !: mass of snow and ice at previous ice time step [Kg/m2] 188 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: snwice_fmass !: time evolution of mass of snow+ice [Kg/m2/s] 189 !!---------------------------------------------------------------------- 190 CONTAINS 191 192 INTEGER FUNCTION sbc_ice_alloc() 193 !!---------------------------------------------------------------------- 194 !! *** FUNCTION sbc_ice_alloc *** 195 !!---------------------------------------------------------------------- 196 INTEGER :: ierr(1) 197 !!---------------------------------------------------------------------- 198 ierr(:) = 0 199 ALLOCATE( snwice_mass(jpi,jpj) , snwice_mass_b(jpi,jpj), snwice_fmass(jpi,jpj) , STAT=ierr(1) ) 200 sbc_ice_alloc = MAXVAL( ierr ) 201 IF( lk_mpp ) CALL mpp_sum ( sbc_ice_alloc ) 202 IF( sbc_ice_alloc > 0 ) CALL ctl_warn('sbc_ice_alloc: allocation of arrays failed') 203 END FUNCTION sbc_ice_alloc 195 204 #endif 196 205
Note: See TracChangeset
for help on using the changeset viewer.