Changeset 419
- Timestamp:
- 2006-03-21T09:38:39+01:00 (18 years ago)
- Location:
- trunk/NEMO/LIM_SRC
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMO/LIM_SRC/ice.F90
r247 r419 54 54 ust2s !: friction velocity 55 55 56 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: & !: 57 sst_ini, & !: sst read from a file for ice model initialization 58 sss_ini !: sss read from a file for ice model initialization 56 59 57 60 REAL(wp), PUBLIC, DIMENSION(jpi,jpj) :: & !: -
trunk/NEMO/LIM_SRC/limistate.F90
r299 r419 61 61 !! History : 62 62 !! 2.0 ! 01-04 (C. Ethe, G. Madec) Original code 63 !! ! 04-04 (S. Theetten) initialization from a file 63 64 !!-------------------------------------------------------------------- 64 65 !! * Local variables … … 77 78 v_io(:,:) = 0.e0 ! ice velocity in y direction 78 79 79 ! Initialisation at tn or -2 if ice 80 DO jj = 1, jpj 81 DO ji = 1, jpi 82 zbin = MAX( 0., SIGN( 1., fzptn(ji,jj) - tn(ji,jj,1) ) ) 83 ztn(ji,jj) = ( (1.-zbin) * tn(ji,jj,1) - 2. * zbin + rt0 ) * tmask(ji,jj,1) 80 IF( ln_limini ) THEN ! 81 82 ! Initialisation at tn if no ice or sst_ini if ice 83 ! Idem for salinity 84 85 !--- Criterion for presence (zidto=1.) or absence (zidto=0.) of ice 86 DO jj = 1 , jpj 87 DO ji = 1 , jpi 88 89 zidto = MAX(zzero, - SIGN(1.,frld(ji,jj) - 1.)) 90 91 sst_io(ji,jj) = ( nfice - 1 ) * (zidto * sst_ini(ji,jj) + & ! use the ocean initial values 92 & (1.0 - zidto ) * ( tn(ji,jj,1) + rt0 )) ! tricky trick *(nfice-1) ! 93 sss_io(ji,jj) = ( nfice - 1 ) * (zidto * sss_ini(ji,jj) + & 94 & (1.0 - zidto ) * sn(ji,jj,1) ) 95 96 ! to avoid the the melting of ice, several layers (mixed layer) should be 97 ! set to sst_ini (sss_ini) if there is ice 98 ! example for one layer 99 ! tn(ji,jj,1) = zidto * ( sst_ini(ji,jj) - rt0 ) + (1.0 - zidto ) * tn(ji,jj,1) 100 ! sn(ji,jj,1) = zidto * sss_ini(ji,jj) + (1.0 - zidto ) * sn(ji,jj,1) 101 ! tb(ji,jj,1) = tn(ji,jj,1) 102 ! sb(ji,jj,1) = sn(ji,jj,1) 103 END DO 84 104 END DO 85 END DO 86 87 88 u_io (:,:) = 0.e0 89 v_io (:,:) = 0.e0 90 sst_io(:,:) = ( nfice - 1 ) * ( tn(:,:,1) + rt0 ) ! use the ocean initial values 91 sss_io(:,:) = ( nfice - 1 ) * sn(:,:,1) ! tricky trick *(nfice-1) ! 92 93 ! reference salinity 34psu 94 zs0 = 34.e0 95 ztf = ABS ( rt0 - 0.0575 * zs0 & 96 & + 1.710523e-03 * zs0 * SQRT( zs0 ) & 97 & - 2.154996e-04 * zs0 *zs0 ) 98 99 ! tfu: Melting point of sea water 100 tfu(:,:) = ztf 101 102 DO jj = 1, jpj 103 DO ji = 1, jpi 104 !--- Criterion for presence (zidto=1) or absence (zidto=0) of ice 105 zidto = tms(ji,jj) * ( 1.0 - MAX(zzero, SIGN( zone, ztn(ji,jj) - tfu(ji,jj) - ttest) ) ) 106 107 IF( fcor(ji,jj) >= 0.e0 ) THEN !-- Northern hemisphere. 108 hicif(ji,jj) = zidto * hginn 109 frld(ji,jj) = zidto * alinn + ( 1.0 - zidto ) * 1.0 110 hsnif(ji,jj) = zidto * hninn 111 ELSE !--- Southern hemisphere. 112 hicif(ji,jj) = zidto * hgins 113 frld(ji,jj) = zidto * alins + ( 1.0 - zidto ) * 1.0 114 hsnif(ji,jj) = zidto * hnins 115 ENDIF 105 106 107 ! tfu: Melting point of sea water 108 tfu(:,:) = ztf 109 110 tfu(:,:) = ABS ( rt0 - 0.0575 * sss_ini(:,:) & 111 & + 1.710523e-03 * sss_ini(:,:) * SQRT( sss_ini(:,:) ) & 112 & - 2.154996e-04 * sss_ini(:,:) * sss_ini(:,:) ) 113 ELSE ! 114 115 116 ! Initialisation at tn or -2 if ice 117 DO jj = 1, jpj 118 DO ji = 1, jpi 119 zbin = MAX( 0., SIGN( 1., fzptn(ji,jj) - tn(ji,jj,1) ) ) 120 ztn(ji,jj) = ( (1.-zbin) * tn(ji,jj,1) - 2. * zbin + rt0 ) * tmask(ji,jj,1) 121 END DO 116 122 END DO 117 END DO 118 119 sist (:,:) = tfu(:,:) 120 tbif (:,:,1) = tfu(:,:) 121 tbif (:,:,2) = tfu(:,:) 122 tbif (:,:,3) = tfu(:,:) 123 124 u_io (:,:) = 0.e0 125 v_io (:,:) = 0.e0 126 sst_io(:,:) = ( nfice - 1 ) * ( tn(:,:,1) + rt0 ) ! use the ocean initial values 127 sss_io(:,:) = ( nfice - 1 ) * sn(:,:,1) ! tricky trick *(nfice-1) ! 128 129 ! reference salinity 34psu 130 zs0 = 34.e0 131 ztf = ABS ( rt0 - 0.0575 * zs0 & 132 & + 1.710523e-03 * zs0 * SQRT( zs0 ) & 133 & - 2.154996e-04 * zs0 *zs0 ) 134 135 ! tfu: Melting point of sea water 136 tfu(:,:) = ztf 137 138 DO jj = 1, jpj 139 DO ji = 1, jpi 140 !--- Criterion for presence (zidto=1) or absence (zidto=0) of ice 141 zidto = tms(ji,jj) * ( 1.0 - MAX(zzero, SIGN( zone, ztn(ji,jj) - tfu(ji,jj) - ttest) ) ) 142 143 IF( fcor(ji,jj) >= 0.e0 ) THEN !-- Northern hemisphere. 144 hicif(ji,jj) = zidto * hginn 145 frld(ji,jj) = zidto * alinn + ( 1.0 - zidto ) * 1.0 146 hsnif(ji,jj) = zidto * hninn 147 ELSE !--- Southern hemisphere. 148 hicif(ji,jj) = zidto * hgins 149 frld(ji,jj) = zidto * alins + ( 1.0 - zidto ) * 1.0 150 hsnif(ji,jj) = zidto * hnins 151 ENDIF 152 END DO 153 END DO 154 155 sist (:,:) = tfu(:,:) 156 tbif (:,:,1) = tfu(:,:) 157 tbif (:,:,2) = tfu(:,:) 158 tbif (:,:,3) = tfu(:,:) 159 160 ENDIF 123 161 fsbbq (:,:) = 0.e0 124 162 qstoif(:,:) = 0.e0 … … 176 214 !! 177 215 !! ** Method : Read the namiceini namelist and check the parameter 178 !! values called at the first timestep (nit000) 216 !! values called at the first timestep (nit000) 217 !! or 218 !! Read 7 variables from a previous restart file 219 !! sst, sst, hicif, hsnif, frld, ts & tbif 179 220 !! 180 221 !! ** input : Namelist namiceini … … 182 223 !! history 183 224 !! 8.5 ! 03-08 (C. Ethe) original code 184 !!------------------------------------------------------------------- 185 NAMELIST/namiceini/ ttest, hninn, hginn, alinn, hnins, hgins, alins 186 !!------------------------------------------------------------------- 187 225 !! 9.0 ! 04-04 (S. Theetten) read a file 226 !!------------------------------------------------------------------- 227 !! * Modules used 228 USE ice 229 USE ioipsl 230 231 NAMELIST/namiceini/ ln_limini, ln_limdmp, ttest, hninn, hginn, alinn, & 232 & hnins, hgins, alins 233 !!------------------------------------------------------------------- 234 !! local declaration 235 INTEGER, PARAMETER :: jpmois=1 236 237 INTEGER :: & 238 itime, ipi, ipj, ipk , & ! temporary integers 239 inum_ice 240 241 INTEGER :: istep(jpmois) 242 243 REAL(wp) :: zdate0, zdt 244 REAL(wp), DIMENSION(jpi,jpj) :: zlon, zlat 245 REAL(wp), DIMENSION(3) :: zlev 246 247 CHARACTER (len=32) :: cl_icedata 248 249 LOGICAL :: llbon 250 !!------------------------------------------------------------------- 251 188 252 ! Read Namelist namiceini 189 253 190 254 REWIND ( numnam_ice ) 191 255 READ ( numnam_ice , namiceini ) 192 IF(lwp) THEN 193 WRITE(numout,*) 194 WRITE(numout,*) 'lim_istate_init : ice parameters inititialisation ' 195 WRITE(numout,*) '~~~~~~~~~~~~~~~' 196 WRITE(numout,*) ' threshold water temp. for initial sea-ice ttest = ', ttest 197 WRITE(numout,*) ' initial snow thickness in the north hninn = ', hninn 198 WRITE(numout,*) ' initial ice thickness in the north hginn = ', hginn 199 WRITE(numout,*) ' initial leads area in the north alinn = ', alinn 200 WRITE(numout,*) ' initial snow thickness in the south hnins = ', hnins 201 WRITE(numout,*) ' initial ice thickness in the south hgins = ', hgins 202 WRITE(numout,*) ' initial leads area in the south alins = ', alins 256 257 IF(.NOT. ln_limini) THEN 258 IF(lwp) THEN 259 WRITE(numout,*) 260 WRITE(numout,*) 'lim_istate_init : ice parameters inititialisation ' 261 WRITE(numout,*) '~~~~~~~~~~~~~~~' 262 WRITE(numout,*) ' threshold water temp. for initial sea-ice ttest = ', ttest 263 WRITE(numout,*) ' initial snow thickness in the north hninn = ', hninn 264 WRITE(numout,*) ' initial ice thickness in the north hginn = ', hginn 265 WRITE(numout,*) ' initial leads area in the north alinn = ', alinn 266 WRITE(numout,*) ' initial snow thickness in the south hnins = ', hnins 267 WRITE(numout,*) ' initial ice thickness in the south hgins = ', hgins 268 WRITE(numout,*) ' initial leads area in the south alins = ', alins 269 ENDIF 203 270 ENDIF 204 271 272 IF( ln_limini ) THEN ! Ice initialization using input file 273 274 cl_icedata = 'Ice_initialization.nc' 275 INQUIRE( FILE=cl_icedata, EXIST=llbon ) 276 IF( llbon ) THEN 277 IF(lwp) THEN 278 WRITE(numout,*) ' ' 279 WRITE(numout,*) 'lim_istate_init : ice state initialization with : ',cl_icedata 280 WRITE(numout,*) '~~~~~~~~~~~~~~~' 281 WRITE(numout,*) ' Ice state initialization using input file ln_limini = ', ln_limini 282 WRITE(numout,*) ' Ice damping ln_limdmp = ', ln_limdmp 283 WRITE(numout,*) ' ' 284 ENDIF 285 286 itime = 1 287 ipi=jpiglo 288 ipj=jpjglo 289 ipk=1 290 zdt=rdt 291 292 CALL flinopen( TRIM(cl_icedata), mig(1), nlci, mjg(1), nlcj, .FALSE., & 293 & ipi, ipj, ipk, zlon, zlat, zlev, itime, istep, zdate0, zdt, inum_ice ) 294 295 CALL flinget( inum_ice, 'sst', jpidta, jpjdta, 1, & 296 & jpmois, 1, 0, mig(1), nlci, mjg(1), nlcj, sst_ini(1:nlci,1:nlcj) ) 297 298 CALL flinget( inum_ice, 'sss', jpidta, jpjdta, 1, & 299 & jpmois, 1, 0, mig(1), nlci, mjg(1), nlcj, sss_ini(1:nlci,1:nlcj) ) 300 301 CALL flinget( inum_ice, 'hicif', jpidta, jpjdta, 1, & 302 & jpmois, 1, 0, mig(1), nlci, mjg(1), nlcj, hicif(1:nlci,1:nlcj) ) 303 304 CALL flinget( inum_ice, 'hsnif', jpidta, jpjdta, 1, & 305 & jpmois, 1, 0, mig(1), nlci, mjg(1), nlcj, hsnif(1:nlci,1:nlcj) ) 306 307 CALL flinget( inum_ice, 'frld', jpidta, jpjdta, 1, & 308 & jpmois, 1, 0, mig(1), nlci, mjg(1), nlcj, frld(1:nlci,1:nlcj) ) 309 310 CALL flinget( inum_ice, 'ts', jpidta, jpjdta, 1, & 311 & jpmois, 1, 0, mig(1), nlci, mjg(1), nlcj, sist(1:nlci,1:nlcj) ) 312 313 CALL flinclo( inum_ice) 314 315 itime = 1 316 ipi=jpiglo 317 ipj=jpjglo 318 ipk=jplayersp1 319 320 CALL flinopen( TRIM(cl_icedata), mig(1), nlci, mjg(1), nlcj, .FALSE., & 321 & ipi, ipj, ipk, zlon, zlat, zlev, itime, istep, zdate0, zdt, inum_ice ) 322 323 CALL flinget( inum_ice, 'tbif', jpidta, jpjdta, ipk, & 324 & jpmois, 1, 0, mig(1), nlci, mjg(1), nlcj, tbif(1:nlci,1:nlcj,1:ipk) ) 325 326 CALL flinclo( inum_ice) 327 328 ELSE 329 IF(lwp) WRITE(numout,cform_err) 330 IF(lwp) WRITE(numout,*) ' ',cl_icedata, ' not found !' 331 nstop = nstop + 1 332 ENDIF 333 ENDIF 334 205 335 END SUBROUTINE lim_istate_init 206 336
Note: See TracChangeset
for help on using the changeset viewer.