Changeset 495
- Timestamp:
- 2006-09-01T16:11:03+02:00 (18 years ago)
- Location:
- trunk/NEMO/OFF_SRC
- Files:
-
- 1 added
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMO/OFF_SRC/DOM/domrea.F90
r439 r495 77 77 !! ! 99-11 (M. Imbard) NetCDF FORMAT with IOIPSL 78 78 !! 9.0 ! 02-08 (G. Madec) F90 and several file 79 !! ! 06-07 (C. Ethe ) Use of iom module 79 80 !!---------------------------------------------------------------------- 80 81 !! * Modules used 81 USE io ipsl82 USE iom 82 83 83 84 !! * Local declarations 84 LOGICAL :: llog 85 INTEGER :: ji, jj, jk, ik 85 INTEGER :: ji, jj, jk 86 86 INTEGER :: & !!! * temprary units for : 87 87 inum0 , & ! 'mesh_mask.nc' file … … 90 90 inum3 , & ! 'mesh_hgr.nc' file 91 91 inum4 ! 'mesh_zgr.nc' file 92 INTEGER :: itime ! output from restini ??? 93 REAL(wp) :: zdate0, zdt 94 REAL(wp), DIMENSION(jpidta,jpjdta) :: & 95 zta, zlamt, zphit ! dummy array for bathymetry 96 REAL(wp) , DIMENSION(jpidta,jpjdta,jpk) :: & 97 zt3a ! dummy array for bathymetry 92 98 93 REAL(wp), DIMENSION(jpi,jpj) :: & 99 94 zprt = 0. 100 95 101 CHARACTER (len=21) :: & 102 clnam0 = 'mesh_mask', & ! filename (mesh and mask informations) 103 clnam1 = 'mesh' , & ! filename (mesh informations) 104 clnam2 = 'mask' , & ! filename (mask informations) 105 clnam3 = 'mesh_hgr' , & ! filename (horizontal mesh informations) 106 clnam4 = 'mesh_zgr' ! filename (vertical mesh informations) 96 REAL(wp), DIMENSION(1,1,jpk) :: & 97 zt1d 107 98 !!---------------------------------------------------------------------- 108 99 … … 111 102 IF(lwp) WRITE(numout,*) '~~~~~~~' 112 103 113 llog = .FALSE. 114 zlamt(:,:) = 0.e0 115 zphit(:,:) = 0.e0 116 117 CALL ymds2ju( 0, 1, 1, 0.e0, zdate0 ) ! calendar initialization 118 119 ! note that mbathy has been modified in dommsk or in solver. 120 ! it is the number of non-zero "w" levels in the water, and the minimum 121 ! value (on land) is 2. We define zprt as the number of "T" points in the ocean 122 ! at any location, and zero on land. 123 ! 104 124 105 125 106 SELECT CASE (nmsh) … … 129 110 130 111 IF(lwp) WRITE(numout,*) ' one file in "mesh_mask.nc" ' 131 CALL restini( clnam0, jpidta , jpjdta , zlamt, zphit, & ! create 'mesh_mask.nc' file 132 & jpk , gdept , trim(clnam0) , & ! in unit inum0 133 & itime , zdate0, zdt , inum0, domain_id=nidom ) 112 CALL iom_open( 'mesh_mask', inum0 ) 113 134 114 inum2 = inum0 ! put all the informations 135 115 inum3 = inum0 ! in unit inum0 … … 142 122 143 123 IF(lwp) WRITE(numout,*) ' two files in "mesh.nc" and "mask.nc" ' 144 CALL restini( clnam1, jpidta , jpjdta , zlamt, zphit, & ! create 'mesh.nc' file 145 & jpk , gdept , trim(clnam1) , & ! in unit inum1 146 & itime , zdate0, zdt , inum1, domain_id=nidom ) 147 CALL restini( clnam2, jpidta , jpjdta , zlamt, zphit, & ! create 'mask.nc' file 148 & jpk , gdept , trim(clnam2) , & ! in unit inum2 149 & itime , zdate0, zdt , inum2, domain_id=nidom ) 124 CALL iom_open( 'mesh', inum1 ) 125 CALL iom_open( 'mask', inum2 ) 126 150 127 inum3 = inum1 ! put mesh informations 151 128 inum4 = inum1 ! in unit inum1 … … 158 135 159 136 IF(lwp) WRITE(numout,*) ' three files in "mesh_hgr.nc" , mesh_zgr.nc" and "mask.nc" ' 160 CALL restini( clnam3, jpidta , jpjdta , zlamt, zphit, & ! create 'mesh_hgr.nc' file 161 & jpk , gdept , trim(clnam3) , & ! in unit inum3 162 & itime , zdate0, zdt , inum3, domain_id=nidom ) 163 CALL restini( clnam4, jpidta , jpjdta , zlamt, zphit, & ! create 'mesh_zgr.nc' file 164 & jpk , gdept , trim(clnam4) , & ! in unit inum4 165 & itime , zdate0, zdt , inum4, domain_id=nidom ) 166 CALL restini( clnam2, jpidta , jpjdta , zlamt, zphit, & ! create 'mask.nc' file 167 & jpk , gdept , trim(clnam2) , & ! in unit inum2 168 & itime , zdate0, zdt , inum2, domain_id=nidom ) 137 CALL iom_open( 'mesh_hgr', inum3 ) ! create 'mesh_hgr.nc' 138 CALL iom_open( 'mesh_zgr', inum4 ) ! create 'mesh_zgr.nc' 139 CALL iom_open( 'mask' , inum2 ) ! create 'mask.nc' 169 140 170 141 END SELECT 171 142 172 143 ! ! masks (inum2) 173 CALL restget( inum2, 'tmask', jpidta, jpjdta, jpk, 0, llog, zt3a ) 174 DO jk = 1, jpk 175 DO jj = 1, nlcj 176 DO ji = 1, nlci 177 tmask(ji,jj,jk) = zt3a(mig(ji),mjg(jj),jk) 178 END DO 179 END DO 180 END DO 181 CALL restget( inum2, 'umask', jpidta, jpjdta, jpk, 0, llog, zt3a ) 182 DO jk = 1, jpk 183 DO jj = 1, nlcj 184 DO ji = 1, nlci 185 umask(ji,jj,jk) = zt3a(mig(ji),mjg(jj),jk) 186 END DO 187 END DO 188 END DO 189 CALL restget( inum2, 'vmask', jpidta, jpjdta, jpk, 0, llog, zt3a ) 190 DO jk = 1, jpk 191 DO jj = 1, nlcj 192 DO ji = 1, nlci 193 vmask(ji,jj,jk) = zt3a(mig(ji),mjg(jj),jk) 194 END DO 195 END DO 196 END DO 197 CALL restget( inum2, 'fmask', jpidta, jpjdta, jpk, 0, llog, zt3a ) 198 DO jk = 1, jpk 199 DO jj = 1, nlcj 200 DO ji = 1, nlci 201 fmask(ji,jj,jk) = zt3a(mig(ji),mjg(jj),jk) 202 END DO 203 END DO 204 END DO 144 CALL iom_get( inum2, jpdom_data, 'tmask', tmask ) 145 CALL iom_get( inum2, jpdom_data, 'umask', umask ) 146 CALL iom_get( inum2, jpdom_data, 'vmask', vmask ) 147 CALL iom_get( inum2, jpdom_data, 'fmask', fmask ) 205 148 206 149 #if defined key_cfg_1d 207 IF(lwp) WRITE(numout,*) '********** 1D configuration : set umask and vmask equal tmask ********' 208 IF(lwp) WRITE(numout,*) '********** ********' 209 ! set umask and vmask equal tmask in 1D configuration 210 umask(:,:,:) = tmask(:,:,:) 211 vmask(:,:,:) = tmask(:,:,:) 150 ! set umask and vmask equal tmask in 1D configuration 151 IF(lwp) WRITE(numout,*) 152 IF(lwp) WRITE(numout,*) '********** 1D configuration : set umask and vmask equal tmask ********' 153 IF(lwp) WRITE(numout,*) '********** ********' 154 155 umask(:,:,:) = tmask(:,:,:) 156 vmask(:,:,:) = tmask(:,:,:) 212 157 #endif 213 158 214 159 #if defined key_off_degrad 215 CALL restget( inum2, 'facvolt', jpidta, jpjdta, jpk, 0, llog, zt3a ) 216 DO jk = 1, jpk 217 DO jj = 1, nlcj 218 DO ji = 1, nlci 219 facvol(ji,jj,jk) = zt3a(mig(ji),mjg(jj),jk) 220 END DO 221 END DO 222 END DO 160 CALL iom_get( inum2, jpdom_data, 'facvolt', facvol ) 223 161 #endif 224 162 225 163 ! ! horizontal mesh (inum3) 226 CALL restget( inum3, 'glamt', jpidta, jpjdta, 1, 0, llog, zta ) ! ! latitude 227 DO jj = 1, nlcj 228 DO ji = 1, nlci 229 glamt(ji,jj) = zta(mig(ji),mjg(jj)) 230 END DO 231 END DO 232 CALL restget( inum3, 'glamu', jpidta, jpjdta, 1, 0, llog, zta ) 233 DO jj = 1, nlcj 234 DO ji = 1, nlci 235 glamu(ji,jj) = zta(mig(ji),mjg(jj)) 236 END DO 237 END DO 238 CALL restget( inum3, 'glamv', jpidta, jpjdta, 1, 0, llog, zta ) 239 DO jj = 1, nlcj 240 DO ji = 1, nlci 241 glamv(ji,jj) = zta(mig(ji),mjg(jj)) 242 END DO 243 END DO 244 CALL restget( inum3, 'glamf', jpidta, jpjdta, 1, 0, llog, zta ) 245 DO jj = 1, nlcj 246 DO ji = 1, nlci 247 glamf(ji,jj) = zta(mig(ji),mjg(jj)) 248 END DO 249 END DO 250 251 CALL restget( inum3, 'gphit', jpidta, jpjdta, 1, 0, llog, zta ) ! ! longitude 252 DO jj = 1, nlcj 253 DO ji = 1, nlci 254 gphit(ji,jj) = zta(mig(ji),mjg(jj)) 255 END DO 256 END DO 257 CALL restget( inum3, 'gphiu', jpidta, jpjdta, 1, 0, llog, zta ) 258 DO jj = 1, nlcj 259 DO ji = 1, nlci 260 gphiu(ji,jj) = zta(mig(ji),mjg(jj)) 261 END DO 262 END DO 263 CALL restget( inum3, 'gphiv', jpidta, jpjdta, 1, 0, llog, zta ) 264 DO jj = 1, nlcj 265 DO ji = 1, nlci 266 gphiv(ji,jj) = zta(mig(ji),mjg(jj)) 267 END DO 268 END DO 269 CALL restget( inum3, 'gphif', jpidta, jpjdta, 1, 0, llog, zta ) 270 DO jj = 1, nlcj 271 DO ji = 1, nlci 272 gphif(ji,jj) = zta(mig(ji),mjg(jj)) 273 END DO 274 END DO 275 276 CALL restget( inum3, 'e1t', jpidta, jpjdta, 1, 0, llog, zta ) ! ! e1 scale factors 277 DO jj = 1, nlcj 278 DO ji = 1, nlci 279 e1t(ji,jj) = zta(mig(ji),mjg(jj)) 280 END DO 281 END DO 282 CALL restget( inum3, 'e1u', jpidta, jpjdta, 1, 0, llog, zta ) 283 DO jj = 1, nlcj 284 DO ji = 1, nlci 285 e1u(ji,jj) = zta(mig(ji),mjg(jj)) 286 END DO 287 END DO 288 CALL restget( inum3, 'e1v', jpidta, jpjdta, 1, 0, llog, zta ) 289 DO jj = 1, nlcj 290 DO ji = 1, nlci 291 e1v(ji,jj) = zta(mig(ji),mjg(jj)) 292 END DO 293 END DO 294 CALL restget( inum3, 'e2t', jpidta, jpjdta, 1, 0, llog, zta ) ! ! e2 scale factors 295 DO jj = 1, nlcj 296 DO ji = 1, nlci 297 e2t(ji,jj) = zta(mig(ji),mjg(jj)) 298 END DO 299 END DO 300 CALL restget( inum3, 'e2u', jpidta, jpjdta, 1, 0, llog, zta ) 301 DO jj = 1, nlcj 302 DO ji = 1, nlci 303 e2u(ji,jj) = zta(mig(ji),mjg(jj)) 304 END DO 305 END DO 306 CALL restget( inum3, 'e2v', jpidta, jpjdta, 1, 0, llog, zta ) 307 DO jj = 1, nlcj 308 DO ji = 1, nlci 309 e2v(ji,jj) = zta(mig(ji),mjg(jj)) 310 END DO 311 END DO 312 CALL restget( inum3, 'ff', jpidta, jpjdta, 1, 0, llog, zta ) ! ! coriolis factor 313 DO jj = 1, nlcj 314 DO ji = 1, nlci 315 ff(ji,jj) = zta(mig(ji),mjg(jj)) 316 END DO 317 END DO 318 319 CALL restget( inum4, 'mbathy', jpidta, jpjdta, 1, 0, llog, zta ) 320 ! Bathymetry 321 DO jj = 1, nlcj 322 DO ji = 1, nlci 323 zprt(ji,jj) = zta(mig(ji),mjg(jj)) 324 END DO 325 END DO 326 327 mbathy(:,:)=zprt(:,:)*tmask(:,:,1)+1 328 329 # if defined key_s_coord 330 ! ! s-coordinate 331 CALL restget( inum4, 'hbatt', jpidta, jpjdta, 1, 0, llog, zta ) ! ! depth 332 DO jj = 1, nlcj 333 DO ji = 1, nlci 334 hbatt(ji,jj) = zta(mig(ji),mjg(jj)) 335 END DO 336 END DO 337 CALL restget( inum4, 'hbatu', jpidta, jpjdta, 1, 0, llog, zta ) 338 DO jj = 1, nlcj 339 DO ji = 1, nlci 340 hbatu(ji,jj) = zta(mig(ji),mjg(jj)) 341 END DO 342 END DO 343 CALL restget( inum4, 'hbatv', jpidta, jpjdta, 1, 0, llog, zta ) 344 DO jj = 1, nlcj 345 DO ji = 1, nlci 346 hbatv(ji,jj) = zta(mig(ji),mjg(jj)) 347 END DO 348 END DO 349 CALL restget( inum4, 'hbatf', jpidta, jpjdta, 1, 0, llog, zta ) 350 DO jj = 1, nlcj 351 DO ji = 1, nlci 352 hbatf(ji,jj) = zta(mig(ji),mjg(jj)) 353 END DO 354 END DO 355 356 CALL restget( inum4, 'gsigt', 1, 1, jpk, 0, llog, gsigt ) ! ! scaling coef. 357 CALL restget( inum4, 'gsigw', 1, 1, jpk, 0, llog, gsigw ) 358 CALL restget( inum4, 'gsi3w', 1, 1, jpk, 0, llog, gsi3w ) 359 CALL restget( inum4, 'esigt', 1, 1, jpk, 0, llog, esigt ) 360 CALL restget( inum4, 'esigw', 1, 1, jpk, 0, llog, esigw ) 361 362 # elif defined key_partial_steps 363 ! ! z-coordinate with partial steps 364 CALL restget( inum4, 'hdept' , jpidta, jpjdta, 1, 0, llog, zta ) ! ! depth 365 DO jj = 1, nlcj 366 DO ji = 1, nlci 367 hdept(ji,jj) = zta(mig(ji),mjg(jj)) 368 END DO 369 END DO 370 CALL restget( inum4, 'hdepw' , jpidta, jpjdta, 1, 0, llog, zta ) 371 DO jj = 1, nlcj 372 DO ji = 1, nlci 373 hdepw(ji,jj) = zta(mig(ji),mjg(jj)) 374 END DO 375 END DO 376 377 CALL restget( inum4, 'e3t_ps', jpidta, jpjdta, jpk, 0, llog, zt3a ) ! ! scale factors 378 DO jk = 1, jpk 379 DO jj = 1, nlcj 380 DO ji = 1, nlci 381 e3t_ps(ji,jj,jk) = zt3a(mig(ji),mjg(jj),jk) 382 END DO 383 END DO 384 END DO 385 CALL restget( inum4, 'e3u_ps', jpidta, jpjdta, jpk, 0, llog, zt3a ) 386 DO jk = 1, jpk 387 DO jj = 1, nlcj 388 DO ji = 1, nlci 389 e3u_ps(ji,jj,jk) = zt3a(mig(ji),mjg(jj),jk) 390 END DO 391 END DO 392 END DO 393 CALL restget( inum4, 'e3v_ps', jpidta, jpjdta, jpk, 0, llog, zt3a ) 394 DO jk = 1, jpk 395 DO jj = 1, nlcj 396 DO ji = 1, nlci 397 e3v_ps(ji,jj,jk) = zt3a(mig(ji),mjg(jj),jk) 398 END DO 399 END DO 400 END DO 401 CALL restget( inum4, 'e3w_ps', jpidta, jpjdta, jpk, 0, llog, zt3a ) 402 DO jk = 1, jpk 403 DO jj = 1, nlcj 404 DO ji = 1, nlci 405 e3w_ps(ji,jj,jk) = zt3a(mig(ji),mjg(jj),jk) 406 END DO 407 END DO 408 END DO 409 410 CALL restget( inum4, 'gdept' , 1, 1, jpk, 0, llog, gdept ) ! ! reference z-coord. 411 CALL restget( inum4, 'gdepw' , 1, 1, jpk, 0, llog, gdepw ) 412 CALL restget( inum4, 'e3t' , 1, 1, jpk, 0, llog, e3t ) 413 CALL restget( inum4, 'e3w' , 1, 1, jpk, 0, llog, e3w ) 414 415 DO jk=1,jpk 416 gdept_ps(:,:,jk) = gdept(jk) 417 gdepw_ps(:,:,jk) = gdepw(jk) 418 END DO 419 420 DO jj = 1, jpj 421 DO ji = 1, jpi 422 ik = mbathy(ji,jj) - 1 423 ! ocean point only 424 IF( ik > 0 ) THEN 425 ! max ocean level case 426 gdepw_ps(ji,jj,ik+1) = hdepw(ji,jj) 427 gdept_ps(ji,jj,ik ) = hdept(ji,jj) 428 gdept_ps(ji,jj,ik+1) = gdept_ps(ji,jj,ik) + e3t_ps(ji,jj,ik) 429 ENDIF 164 CALL iom_get( inum3, jpdom_data, 'glamt', glamt ) 165 CALL iom_get( inum3, jpdom_data, 'glamu', glamu ) 166 CALL iom_get( inum3, jpdom_data, 'glamv', glamv ) 167 CALL iom_get( inum3, jpdom_data, 'glamf', glamf ) 168 169 CALL iom_get( inum3, jpdom_data, 'gphit', gphit ) 170 CALL iom_get( inum3, jpdom_data, 'gphiu', gphiu ) 171 CALL iom_get( inum3, jpdom_data, 'gphiv', gphiv ) 172 CALL iom_get( inum3, jpdom_data, 'gphif', gphif ) 173 174 CALL iom_get( inum3, jpdom_data, 'e1t', e1t ) 175 CALL iom_get( inum3, jpdom_data, 'e1u', e1u ) 176 CALL iom_get( inum3, jpdom_data, 'e1v', e1v ) 177 178 CALL iom_get( inum3, jpdom_data, 'e2t', e2t ) 179 CALL iom_get( inum3, jpdom_data, 'e2u', e2u ) 180 CALL iom_get( inum3, jpdom_data, 'e2v', e2v ) 181 182 CALL iom_get( inum3, jpdom_data, 'ff', ff ) 183 184 CALL iom_get( inum4, jpdom_data, 'mbathy', zprt ) 185 mbathy(:,:) = zprt(:,:) * tmask(:,:,1) + 1 186 187 #if ! defined key_zco 188 IF( ln_sco ) THEN ! s-coordinate 189 CALL iom_get( inum4, jpdom_data, 'hbatt', hbatt ) 190 CALL iom_get( inum4, jpdom_data, 'hbatu', hbatu ) 191 CALL iom_get( inum4, jpdom_data, 'hbatv', hbatv ) 192 CALL iom_get( inum4, jpdom_data, 'hbatf', hbatf ) 193 194 CALL iom_get( inum4, jpdom_unknown, 'gsigt', zt1d, kstart=(/1,1,1/), kcount=(/1,1,jpk/) ) ! scaling coef. 195 gsigt(:) = zt1d(1,1,:) 196 CALL iom_get( inum4, jpdom_unknown, 'gsigw', zt1d, kstart=(/1,1,1/), kcount=(/1,1,jpk/) ) 197 gsigw(:) = zt1d(1,1,:) 198 CALL iom_get( inum4, jpdom_unknown, 'gsi3w', zt1d, kstart=(/1,1,1/), kcount=(/1,1,jpk/) ) 199 gsi3w(:) = zt1d(1,1,:) 200 CALL iom_get( inum4, jpdom_unknown, 'esigt', zt1d, kstart=(/1,1,1/), kcount=(/1,1,jpk/) ) 201 esigt(:) = zt1d(1,1,:) 202 CALL iom_get( inum4, jpdom_unknown, 'esigw', zt1d, kstart=(/1,1,1/), kcount=(/1,1,jpk/) ) 203 esigw(:) = zt1d(1,1,:) 204 205 CALL iom_get( inum4, jpdom_data, 'e3t', e3t ) ! scale factors 206 CALL iom_get( inum4, jpdom_data, 'e3u', e3u ) 207 CALL iom_get( inum4, jpdom_data, 'e3v', e3v ) 208 CALL iom_get( inum4, jpdom_data, 'e3w', e3w ) 209 210 CALL iom_get( inum4, jpdom_unknown, 'gdept_0', zt1d, kstart=(/1,1,1/), kcount=(/1,1,jpk/) ) ! depth 211 gdept_0(:) = zt1d(1,1,:) 212 CALL iom_get( inum4, jpdom_unknown, 'gdepw_0', zt1d, kstart=(/1,1,1/), kcount=(/1,1,jpk/) ) 213 gdepw_0(:) = zt1d(1,1,:) 214 ENDIF 215 216 IF( ln_zps ) THEN ! z-coordinate - partial steps 217 CALL iom_get( inum4, jpdom_data, 'hdept', hdept ) ! depth 218 CALL iom_get( inum4, jpdom_data, 'hdepw', hdepw ) 219 220 CALL iom_get( inum4, jpdom_data, 'e3t', e3t ) ! scale factors 221 CALL iom_get( inum4, jpdom_data, 'e3u', e3u ) 222 CALL iom_get( inum4, jpdom_data, 'e3v', e3v ) 223 CALL iom_get( inum4, jpdom_data, 'e3w', e3w ) 224 ! ! reference z-coord. 225 CALL iom_get( inum4, jpdom_unknown, 'gdept_0', zt1d, kstart=(/1,1,1/), kcount=(/1,1,jpk/) ) 226 gdept_0(:) = zt1d(1,1,:) 227 CALL iom_get( inum4, jpdom_unknown, 'gdepw_0', zt1d, kstart=(/1,1,1/), kcount=(/1,1,jpk/) ) 228 gdepw_0(:) = zt1d(1,1,:) 229 CALL iom_get( inum4, jpdom_unknown, 'e3t_0', zt1d, kstart=(/1,1,1/), kcount=(/1,1,jpk/) ) 230 e3t_0(:) = zt1d(1,1,:) 231 CALL iom_get( inum4, jpdom_unknown, 'e3w_0', zt1d, kstart=(/1,1,1/), kcount=(/1,1,jpk/) ) 232 e3w_0(:) = zt1d(1,1,:) 233 234 DO jk = 1,jpk 235 gdept(:,:,jk) = gdept(jk) 236 gdepw(:,:,jk) = gdepw(jk) 430 237 END DO 431 END DO432 238 239 DO jj = 1, jpj 240 DO ji = 1, jpi 241 ik = mbathy(ji,jj) - 1 242 ! ocean point only 243 IF( ik > 0 ) THEN 244 ! max ocean level case 245 gdepw(ji,jj,ik+1) = hdepw(ji,jj) 246 gdept(ji,jj,ik ) = hdept(ji,jj) 247 gdept(ji,jj,ik+1) = gdept(ji,jj,ik) + e3t(ji,jj,ik) 248 ENDIF 249 END DO 250 END DO 251 ENDIF 252 433 253 434 254 # else 435 ! ! z-coordinate 436 CALL restget( inum4, 'gdept', 1, 1, jpk, 0, llog, gdept ) ! ! depth 437 CALL restget( inum4, 'gdepw', 1, 1, jpk, 0, llog, gdepw ) 438 CALL restget( inum4, 'e3t' , 1, 1, jpk, 0, llog, e3t ) ! ! scale factors 439 CALL restget( inum4, 'e3w' , 1, 1, jpk, 0, llog, e3w ) 255 ! ! z-coord. 256 CALL iom_get( inum4, jpdom_unknown, 'gdept_0', zt1d, kstart=(/1,1,1/), kcount=(/1,1,jpk/) ) ! depth 257 gdept_0(:) = zt1d(1,1,:) 258 CALL iom_get( inum4, jpdom_unknown, 'gdepw_0', zt1d, kstart=(/1,1,1/), kcount=(/1,1,jpk/) ) 259 gdepw_0(:) = zt1d(1,1,:) 260 CALL iom_get( inum4, jpdom_unknown, 'e3t_0', zt1d, kstart=(/1,1,1/), kcount=(/1,1,jpk/) ) ! scale factors 261 e3t_0(:) = zt1d(1,1,:) 262 CALL iom_get( inum4, jpdom_unknown, 'e3w_0', zt1d, kstart=(/1,1,1/), kcount=(/1,1,jpk/) ) 263 e3w_0(:) = zt1d(1,1,:) 264 440 265 # endif 441 266 … … 477 302 WRITE(numout,*) ' Reference z-coordinate depth and scale factors:' 478 303 WRITE(numout, "(9x,' level gdept gdepw e3t e3w ')" ) 479 WRITE(numout, "(10x, i4, 4f9.2)" ) ( jk, gdept (jk), gdepw(jk), e3t(jk), e3w(jk), jk = 1, jpk )304 WRITE(numout, "(10x, i4, 4f9.2)" ) ( jk, gdept_0(jk), gdepw_0(jk), e3t_0(jk), e3w_0(jk), jk = 1, jpk ) 480 305 ENDIF 481 306 482 307 DO jk = 1, jpk 483 IF( e3w(jk) <= 0. .OR. e3t(jk) <= 0. ) THEN 484 IF(lwp) WRITE(numout,cform_err) 485 IF(lwp) WRITE(numout,*) ' e3w or e3t =< 0 ' 486 nstop = nstop + 1 487 ENDIF 488 IF( gdepw(jk) < 0. .OR. gdept(jk) < 0.) THEN 489 IF(lwp) WRITE(numout,cform_err) 490 IF(lwp) WRITE(numout,*) ' gdepw or gdept < 0 ' 491 nstop = nstop + 1 492 ENDIF 308 IF( e3w_0(jk) <= 0. .OR. e3t_0(jk) <= 0. ) CALL ctl_stop ( ' e3w_0 or e3t_0 =< 0 ' ) 309 IF( gdepw_0(jk) < 0. .OR. gdept_0(jk) < 0.) CALL ctl_stop( ' gdepw_0 or gdept_0 < 0 ' ) 493 310 END DO 494 311 … … 498 315 SELECT CASE ( nmsh ) 499 316 CASE ( 1 ) 500 CALL restclo( inum0 )317 CALL iom_close( inum0 ) 501 318 CASE ( 2 ) 502 CALL restclo( inum1 )503 CALL restclo( inum2 )319 CALL iom_close( inum1 ) 320 CALL iom_close( inum2 ) 504 321 CASE ( 3 ) 505 CALL restclo( inum2 )506 CALL restclo( inum3 )507 CALL restclo( inum4 )322 CALL iom_close( inum2 ) 323 CALL iom_close( inum3 ) 324 CALL iom_close( inum4 ) 508 325 END SELECT 509 326 -
trunk/NEMO/OFF_SRC/SBC/flxrnf.F90
r343 r495 22 22 USE in_out_manager ! I/O manager 23 23 USE daymod ! calendar 24 USE io ipsl ! NetCDF IPSL library24 USE iom ! I/O module 25 25 26 26 IMPLICIT NONE … … 38 38 upsrnfz !: mixed adv scheme in runoffs vicinity (vert.) 39 39 INTEGER, PUBLIC :: & !: 40 nrunoff = 0 , & !: runoff option (namelist) 41 nrnf1, nrnf2 !: first and second record used 40 nrunoff = 0 !: runoff option (namelist) 42 41 43 42 !! * Module variable 44 43 REAL(wp), DIMENSION(jpi,jpj,2) :: & !: 45 44 rnfdta !: monthly runoff data array (kg/m2/s) 46 47 !!---------------------------------------------------------------------- 48 !! OPA 9.0 , LOCEAN-IPSL (2005) 49 !! $Header$ 50 !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt 45 INTEGER :: & !: 46 numrnf, & !: logical unit for runoff data 47 nrnf1, nrnf2 !: first and second record used 48 !!---------------------------------------------------------------------- 49 !! OPA 9.0 , LOCEAN-IPSL (2005) 50 !! $Header$ 51 !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt 51 52 !!---------------------------------------------------------------------- 52 53 … … 104 105 REAL(wp) :: zxy 105 106 # endif 106 CHARACTER (len=32) :: &107 clname = 'runoff_1m_nomask' ! monthly runoff filename108 INTEGER, PARAMETER :: jpmois = 12109 INTEGER :: ipi, ipj, ipk ! temporary integers110 107 INTEGER :: ii0, ii1, ij0, ij1 ! " " 111 INTEGER, DIMENSION(jpmois) :: &112 istep ! temporary workspace113 REAL(wp) :: zdate0, zdt ! temporary scalars114 REAL(wp), DIMENSION(jpk) :: &115 zlev ! temporary workspace116 REAL(wp), DIMENSION(jpi,jpj) :: &117 zlon, zlat, & ! temporary workspace118 zcoefr ! coeff of advection link to runoff119 108 !!---------------------------------------------------------------------- 120 109 … … 139 128 140 129 CASE DEFAULT 141 IF(lwp) WRITE(numout,cform_err) 142 IF(lwp) WRITE(numout,*) ' Error nrunoff = ', nrunoff, ' /= 0, 1 or 2' 143 nstop = nstop + 1 130 WRITE(ctmp1,*) ' Error nrunoff = ', nrunoff, ' /= 0, 1 or 2' 131 CALL ctl_stop( ctmp1 ) 144 132 145 133 END SELECT 146 134 147 135 ! Set runoffs and upstream coeff to zero 148 runoff (:,:) = 0.e0149 upsrnfh(:,:) = 0.e0150 upsrnfz(:) = 0.e0151 136 upsadv (:,:) = 0.e0 152 137 … … 161 146 162 147 ! year, month, day 163 164 iman = jpmois 148 iman = INT( raamo ) 149 !!! better but change the results i15 = INT( 2*FLOAT( nday ) / ( FLOAT( nobis(nmonth) ) + 0.5 ) ) 165 150 i15 = nday / 16 166 151 imois = nmonth + i15 - 1 167 IF( imois == 0 ) 152 IF( imois == 0 ) imois = iman 168 153 ! Number of days in the month 169 154 IF( nleapy == 1 .AND. MOD( nyear, 4 ) == 0 ) THEN … … 177 162 idmeom = idbd - 15 178 163 # endif 179 ipi = jpiglo180 ipj = jpjglo181 ipk = jpk182 zdt = rdt183 164 184 165 ! Open file 185 166 186 167 IF( kt == nit000 ) THEN 187 CALL flinopen( clname, mig(1), nlci, mjg(1), nlcj, & 188 & .false., ipi, ipj, ipk, zlon, & 189 & zlat, zlev, jpmois, istep, zdate0, & 190 & zdt, numrnf ) 191 ! Title, dimensions and tests 192 # if ! defined key_coupled 193 IF( iman /= jpmois ) THEN 194 IF(lwp) WRITE(numout,*) 195 IF(lwp) WRITE(numout,*) 'problem with time coordinates' 196 IF(lwp) WRITE(numout,*) ' iman ', iman, ' jpmois ', jpmois 197 nstop = nstop + 1 198 ENDIF 199 IF(lwp) WRITE(numout,*) iman, istep, zdate0, rdt, numrnf 200 IF(lwp) WRITE(numout,*) 'numrnf=', numrnf 201 IF(lwp) WRITE(numout,*) 'jpmois=', jpmois 202 IF(lwp) WRITE(numout,*) 'zdt=', zdt 203 # endif 204 IF(ipi /= jpidta .AND. ipj /= jpjdta .AND. ipk /= 1) THEN 205 IF(lwp)WRITE(numout,*) ' ' 206 IF(lwp)WRITE(numout,*) 'problem with dimensions' 207 IF(lwp)WRITE(numout,*) ' ipi ', ipi, ' jpidta ', jpidta 208 IF(lwp)WRITE(numout,*) ' ipj ', ipj, ' jpjdta ', jpjdta 209 IF(lwp)WRITE(numout,*) ' ipk ', ipk, ' =? 1' 210 nstop = nstop + 1 211 ENDIF 212 IF(lwp)WRITE(numout,*) 'ipi=', ipi, ' ipj=', ipj, ' ipk=', ipk 168 169 nrnf1 = 0 ! initialization 170 IF (lwp) WRITE(numout,*) 'flx_rnf : Monthly runoff' 171 CALL iom_open ( 'runoff_1m_nomask.nc', numrnf ) 172 213 173 ENDIF 214 174 … … 237 197 WRITE(numout,*) ' NetCDF format' 238 198 WRITE(numout,*) 239 WRITE(numout,*) 'first array record used nrnf1 ', nrnf1240 WRITE(numout,*) 'last array record used nrnf2 ', nrnf2199 WRITE(numout,*) 'first array record used nrnf1 ', nrnf1 200 WRITE(numout,*) 'last array record used nrnf2 ', nrnf2 241 201 WRITE(numout,*) 242 202 ENDIF 243 203 244 204 ! Read monthly runoff data in kg/m2/s 245 !ibug 246 IF( kt == nit000 ) rnfdta(:,:,:) = 0.e0 247 !ibug 248 CALL flinget( numrnf, 'sorunoff', jpidta, jpjdta, 1, jpmois & 249 & , nrnf1, nrnf1, mig(1), nlci, mjg(1), nlcj, rnfdta(1:nlci,1:nlcj,1) ) 250 CALL flinget( numrnf, 'sorunoff', jpidta, jpjdta, 1, jpmois & 251 & , nrnf2, nrnf2, mig(1), nlci, mjg(1), nlcj, rnfdta(1:nlci,1:nlcj,2) ) 252 253 IF(lwp) WRITE(numout,*) 254 IF(lwp) WRITE(numout,*) ' read runoff field ok' 255 IF(lwp) WRITE(numout,*) 205 206 CALL iom_get ( numrnf, jpdom_data, 'sorunoff', rnfdta(:,:,1), nrnf1 ) 207 CALL iom_get ( numrnf, jpdom_data, 'sorunoff', rnfdta(:,:,2), nrnf2 ) 256 208 257 209 ENDIF … … 264 216 runoff(:,:) = -( ( 1.e0 - zxy ) * rnfdta(:,:,1) + zxy * rnfdta(:,:,2) ) 265 217 266 ! Runoff reduction 267 DO jj = 1, jpj 268 DO ji = 1, jpi 269 IF( gphit(ji,jj) > 40 .AND. gphit(ji,jj) < 65 ) runoff(ji,jj) = 0.85 * runoff(ji,jj) 218 ! Runoff reduction only associated to the ORCA2_LIM configuration 219 ! when reading the NetCDF file runoff_1m_nomask.nc 220 IF( cp_cfg == 'orca' .AND. jp_cfg == 2 ) THEN 221 DO jj = 1, jpj 222 DO ji = 1, jpi 223 IF( gphit(ji,jj) > 40 .AND. gphit(ji,jj) < 65 ) runoff(ji,jj) = 0.85 * runoff(ji,jj) 224 END DO 270 225 END DO 271 END DO226 ENDIF 272 227 273 228 # endif … … 287 242 ! coefr * upstream + (1- coefr) centered 288 243 ! coefr must be between 0 and 1. 289 !ibug 290 zcoefr(:,:) = 0.e0 291 !ibug 292 293 CALL flinget( numrnf, 'socoefr', jpidta, jpjdta, 1, jpmois, nrnf1, & 294 & nrnf1, mig(1), nlci, mjg(1), nlcj, zcoefr(1:nlci,1:nlcj) ) 295 296 IF(lwp) WRITE(numout,*) 297 IF(lwp) WRITE(numout,*) ' read coefr for advection ok' 298 IF(lwp) WRITE(numout,*) 299 300 upsrnfh(:,:) = zcoefr(:,:) 244 245 CALL iom_get ( numrnf, jpdom_data, 'socoefr', upsrnfh ) 246 301 247 upsrnfz(:) = 0.e0 302 248 upsrnfz(1) = 1.0 … … 368 314 ! -------------------- 369 315 370 IF( kt == nitend .AND. nrunoff >= 1 ) CALL flinclo( numrnf )316 IF( kt == nitend .AND. nrunoff >= 1 ) CALL iom_close( numrnf ) 371 317 372 318 END SUBROUTINE flx_rnf -
trunk/NEMO/OFF_SRC/dtadyn.F90
r446 r495 54 54 nficdyn = 2 ! number of dynamical fields 55 55 56 INTEGER :: ndyn1, ndyn2 , & 56 INTEGER :: & 57 ndyn1, ndyn2 , & 57 58 nlecoff = 0 , & ! switch for the first read 58 59 numfl_t, numfl_u, & 59 numfl_v, numfl_w , numfl_s60 numfl_v, numfl_w 60 61 61 62 … … 76 77 #endif 77 78 78 #if defined key_traldf_eiv && defined key_traldf_c2d 79 #if ! defined key_off_degrad 80 81 # if defined key_traldf_c2d 79 82 REAL(wp), DIMENSION(jpi,jpj,2) :: & 80 ahtwdta , & ! Lateral diffusivity 81 eivwdta ! G&M coefficient 82 #endif 83 ahtwdta ! Lateral diffusivity 84 # if defined key_trcldf_eiv 85 REAL(wp), DIMENSION(jpi,jpj,2) :: & 86 aeiwdta ! G&M coefficient 87 # endif 88 # endif 89 90 #else 91 92 REAL(wp), DIMENSION(jpi,jpj,jpk,2) :: & 93 ahtudta, ahtvdta, ahtwdta ! Lateral diffusivity 94 # if defined key_trcldf_eiv 95 REAL(wp), DIMENSION(jpi,jpj,jpk,2) :: & 96 aeiudta, aeivdta, aeiwdta ! G&M coefficient 97 # endif 98 99 #endif 100 # if defined key_diaeiv 101 !! GM Velocity : to be used latter 102 REAL(wp), DIMENSION(jpi,jpj,jpk,2) :: & 103 eivudta, eivvdta, eivwdta 104 # endif 83 105 84 106 REAL(wp), DIMENSION(jpi,jpj,jpflx,2) :: & … … 167 189 !! ! addition : 98-05 (L. Bopp read output of coupled run) 168 190 !! ! addition : 05-03 (O. Aumont and A. El Moussaoui) F90 191 !! ! addition : 05-12 (C. Ethe) Adapted for DEGINT 169 192 !!---------------------------------------------------------------------- 170 193 !! * Modules used … … 256 279 ! DATA READ for the iperm1 period 257 280 ! 258 IF( iperm1 .NE.0 ) THEN281 IF( iperm1 /= 0 ) THEN 259 282 CALL dynrea( kt, iperm1 ) 260 283 ELSE … … 267 290 sn(:,:,:)=sdta(:,:,:,2) 268 291 avt(:,:,:)=avtdta(:,:,:,2) 292 269 293 270 294 IF(lwp) THEN … … 306 330 flxdta(:,:,:,1) = flxdta(:,:,:,2) 307 331 zmxldta(:,:,1)=zmxldta(:,:,2) 308 #if defined key_traldf_eiv && defined key_traldf_c2d 309 ahtwdta(:,:,1)=ahtwdta(:,:,2) 310 eivwdta(:,:,1)=eivwdta(:,:,2) 311 #endif 332 #if ! defined key_off_degrad 333 334 # if defined key_traldf_c2d 335 ahtwdta(:,:,1)= ahtwdta(:,:,2) 336 # if defined key_trcldf_eiv 337 aeiwdta(:,:,1)= aeiwdta(:,:,2) 338 # endif 339 # endif 340 341 #else 342 ahtudta(:,:,:,1) = ahtudta(:,:,:,2) 343 ahtvdta(:,:,:,1) = ahtvdta(:,:,:,2) 344 ahtwdta(:,:,:,1) = ahtwdta(:,:,:,2) 345 # if defined key_trcldf_eiv 346 aeiudta(:,:,:,1) = aeiudta(:,:,:,2) 347 aeivdta(:,:,:,1) = aeivdta(:,:,:,2) 348 aeiwdta(:,:,:,1) = aeiwdta(:,:,:,2) 349 # endif 350 351 #endif 352 312 353 #if defined key_trcbbl_dif || defined key_trcbbl_adv 313 354 bblxdta(:,:,1)=bblxdta(:,:,2) … … 321 362 ! DATA READ for the iper period 322 363 ! 323 CALL dynrea( kt,iper)364 CALL dynrea( kt, iper ) 324 365 ! 325 366 ! Computes wdta (and slopes if key_trahdfiso) … … 369 410 ! swap from record 2 to 1 370 411 ! 371 udta(:,:,:,1) =udta(:,:,:,2)372 vdta(:,:,:,1) =vdta(:,:,:,2)373 wdta(:,:,:,1)= wdta(:,:,:,2)374 avtdta(:,:,:,1) =avtdta(:,:,:,2)375 tdta(:,:,:,1) =tdta(:,:,:,2)376 sdta(:,:,:,1) =sdta(:,:,:,2)412 udta(:,:,:,1) = udta(:,:,:,2) 413 vdta(:,:,:,1) = vdta(:,:,:,2) 414 wdta(:,:,:,1)= wdta(:,:,:,2) 415 avtdta(:,:,:,1) = avtdta(:,:,:,2) 416 tdta(:,:,:,1) = tdta(:,:,:,2) 417 sdta(:,:,:,1) = sdta(:,:,:,2) 377 418 #if defined key_ldfslp 378 uslpdta(:,:,:,1) =uslpdta(:,:,:,2)379 vslpdta(:,:,:,1) =vslpdta(:,:,:,2)380 wslpidta(:,:,:,1) =wslpidta(:,:,:,2)381 wslpjdta(:,:,:,1) =wslpjdta(:,:,:,2)419 uslpdta(:,:,:,1) = uslpdta(:,:,:,2) 420 vslpdta(:,:,:,1) = vslpdta(:,:,:,2) 421 wslpidta(:,:,:,1) = wslpidta(:,:,:,2) 422 wslpjdta(:,:,:,1) = wslpjdta(:,:,:,2) 382 423 #endif 383 424 flxdta(:,:,:,1) = flxdta(:,:,:,2) 384 zmxldta(:,:,1)=zmxldta(:,:,2) 385 #if defined key_traldf_eiv && defined key_traldf_c2d 386 ahtwdta(:,:,1)=ahtwdta(:,:,2) 387 eivwdta(:,:,1)=eivwdta(:,:,2) 388 #endif 425 zmxldta(:,:,1) = zmxldta(:,:,2) 426 427 #if ! defined key_off_degrad 428 429 # if defined key_traldf_c2d 430 ahtwdta(:,:,1)= ahtwdta(:,:,2) 431 # if defined key_trcldf_eiv 432 aeiwdta(:,:,1)= aeiwdta(:,:,2) 433 # endif 434 # endif 435 436 #else 437 ahtudta(:,:,:,1) = ahtudta(:,:,:,2) 438 ahtvdta(:,:,:,1) = ahtvdta(:,:,:,2) 439 ahtwdta(:,:,:,1) = ahtwdta(:,:,:,2) 440 # if defined key_trcldf_eiv 441 aeiudta(:,:,:,1) = aeiudta(:,:,:,2) 442 aeivdta(:,:,:,1) = aeivdta(:,:,:,2) 443 aeiwdta(:,:,:,1) = aeiwdta(:,:,:,2) 444 # endif 445 446 #endif 447 389 448 #if defined key_trcbbl_dif || defined key_trcbbl_adv 390 bblxdta(:,:,1) =bblxdta(:,:,2)391 bblydta(:,:,1) =bblydta(:,:,2)449 bblxdta(:,:,1) = bblxdta(:,:,2) 450 bblydta(:,:,1) = bblydta(:,:,2) 392 451 #endif 393 452 ! … … 398 457 ! READ DATA for the iper period 399 458 ! 400 CALL dynrea( kt,iper)459 CALL dynrea( kt, iper ) 401 460 ! 402 461 ! Computes wdta (and slopes if key_trahdfiso) … … 423 482 ndyn2 = iper 424 483 ! 425 ! we have READ another period of DATA 426 ! 484 ! we have READ another period of DATA ! 427 485 IF (lwp) THEN 428 486 WRITE (numout,*) ' dynamics DATA READ for the period ndyn1 =',ndyn1 … … 436 494 ! compute the DATA at the given time step 437 495 ! 438 IF ( nsptint.eq.0) THEN496 IF ( nsptint == 0 ) THEN 439 497 ! 440 498 ! no spatial interpolation … … 464 522 flx(:,:,:) = flxdta(:,:,:,2) 465 523 hmld(:,:)=zmxldta(:,:,2) 466 #if defined key_traldf_eiv && defined key_traldf_c2d 467 ahtw(:,:)=ahtwdta(:,:,2) 468 aeiw(:,:)=eivwdta(:,:,2) 469 #endif 524 #if ! defined key_off_degrad 525 526 # if defined key_traldf_c2d 527 ahtwdta(:,:,1)= ahtwdta(:,:,2) 528 # if defined key_trcldf_eiv 529 aeiwdta(:,:,1)= aeiwdta(:,:,2) 530 # endif 531 # endif 532 533 #else 534 ahtudta(:,:,:,1) = ahtudta(:,:,:,2) 535 ahtvdta(:,:,:,1) = ahtvdta(:,:,:,2) 536 ahtwdta(:,:,:,1) = ahtwdta(:,:,:,2) 537 # if defined key_trcldf_eiv 538 aeiudta(:,:,:,1) = aeiudta(:,:,:,2) 539 aeivdta(:,:,:,1) = aeivdta(:,:,:,2) 540 aeiwdta(:,:,:,1) = aeiwdta(:,:,:,2) 541 # endif 542 543 #endif 544 470 545 #if defined key_trcbbl_dif || defined key_trcbbl_adv 471 546 bblx(:,:)=bblxdta(:,:,2) … … 486 561 487 562 ELSE 488 IF ( nsptint.eq.1) THEN563 IF ( nsptint == 1 ) THEN 489 564 ! 490 565 ! linear interpolation … … 511 586 flx(:,:,:) = zweighm1 * flxdta(:,:,:,1) + zweigh * flxdta(:,:,:,2) 512 587 hmld(:,:) = zweighm1 * zmxldta(:,:,1) + zweigh * zmxldta(:,:,2) 513 #if defined key_traldf_eiv && defined key_traldf_c2d 514 ahtw(:,:) = zweighm1 * ahtwdta(:,:,1) + zweigh * ahtwdta(:,:,2) 515 aeiw(:,:) = zweighm1 * eivwdta(:,:,1) + zweigh * eivwdta(:,:,2) 516 #endif 588 #if ! defined key_off_degrad 589 590 # if defined key_traldf_c2d 591 ahtw(:,:) = zweighm1 * ahtwdta(:,:,1) + zweigh * ahtwdta(:,:,2) 592 # if defined key_trcldf_eiv 593 aeiw(:,:) = zweighm1 * aeiwdta(:,:,1) + zweigh * aeiwdta(:,:,2) 594 # endif 595 # endif 596 597 #else 598 ahtu(:,:,:) = zweighm1 * ahtudta(:,:,:,1) + zweigh * ahtudta(:,:,:,2) 599 ahtv(:,:,:) = zweighm1 * ahtvdta(:,:,:,1) + zweigh * ahtvdta(:,:,:,2) 600 ahtw(:,:,:) = zweighm1 * ahtwdta(:,:,:,1) + zweigh * ahtwdta(:,:,:,2) 601 # if defined key_trcldf_eiv 602 aeiu(:,:,:) = zweighm1 * aeiudta(:,:,:,1) + zweigh * aeiudta(:,:,:,2) 603 aeiv(:,:,:) = zweighm1 * aeivdta(:,:,:,1) + zweigh * aeivdta(:,:,:,2) 604 aeiw(:,:,:) = zweighm1 * aeiwdta(:,:,:,1) + zweigh * aeiwdta(:,:,:,2) 605 # endif 606 607 #endif 608 517 609 #if defined key_trcbbl_dif || defined key_trcbbl_adv 518 bblx(:,:) = zweighm1 * bblxdta(:,:,1) + zweigh * bblxdta(:,:,2)519 bbly(:,:) = zweighm1 * bblydta(:,:,1) + zweigh * bblydta(:,:,2)610 bblx(:,:) = zweighm1 * bblxdta(:,:,1) + zweigh * bblxdta(:,:,2) 611 bbly(:,:) = zweighm1 * bblydta(:,:,1) + zweigh * bblydta(:,:,2) 520 612 #endif 521 613 ! … … 526 618 #endif 527 619 freeze(:,:) = flx(:,:,jpice) 528 emp(:,:) = flx(:,:,jpemp)529 emps(:,:) = emp(:,:)530 qsr(:,:) = flx(:,:,jpqsr)620 emp(:,:) = flx(:,:,jpemp) 621 emps(:,:) = emp(:,:) 622 qsr(:,:) = flx(:,:,jpqsr) 531 623 ! 532 624 ! other interpolation … … 546 638 CALL eos( tn, sn, rhd, rhop ) 547 639 548 #if defined key_traldf_c2d640 #if ! defined key_off_degrad && defined key_traldf_c2d 549 641 ! In case of 2D varying coefficients, we need aeiv and aeiu 550 642 IF( lk_traldf_eiv ) CALL ldf_eiv( kt ) ! eddy induced velocity coefficient … … 565 657 !! (netcdf FORMAT) 566 658 !! 05-03 (O. Aumont and A. El Moussaoui) F90 659 !! 06-07 : (C. Ethe) use of iom module 567 660 !!---------------------------------------------------------------------- 568 661 !! * Modules used 569 USE io ipsl662 USE iom 570 663 571 664 !! * Arguments 572 665 INTEGER, INTENT( in ) :: kt, kenr ! time index 573 666 !! * Local declarations 574 INTEGER :: ji, jj 575 INTEGER :: ipi,ipj,ipk,itime,jkenr,idtatot 576 INTEGER , DIMENSION(ndtatot) :: istep 577 578 REAL(wp) :: zdate0 667 INTEGER :: ji, jj, jk, jkenr 579 668 580 669 REAL(wp), DIMENSION(jpi,jpj,jpk) :: & 581 zu, zv, zw, zt, zs, zavt ! 3-D dynamical fields 582 583 # if defined key_traldf_eiv 584 REAL(wp), DIMENSION(jpi,jpj,jpk) :: & 585 zaeiu, zaeiv, zaeiw 586 # endif 587 588 # if defined key_traldf_eiv && defined key_traldf_c2d 589 REAL(wp), DIMENSION(jpi,jpj) :: & 590 zeivw, zahtw 591 # endif 670 zu, zv, zw, zt, zs, zavt , & ! 3-D dynamical fields 671 zhdiv ! horizontal divergence 592 672 593 673 REAL(wp), DIMENSION(jpi,jpj) :: & 594 zlon, zlat, zemp, zqsr, zmld, zice, zwind674 zemp, zqsr, zmld, zice, zwspd 595 675 #if defined key_trcbbl_dif || defined key_trcbbl_adv 596 676 REAL(wp), DIMENSION(jpi,jpj) :: & 597 677 zbblx, zbbly 598 678 #endif 599 REAL(wp), DIMENSION(jpk) :: zlev 679 680 #if ! defined key_off_degrad 681 682 # if defined key_traldf_c2d 683 REAL(wp), DIMENSION(jpi,jpj) :: & 684 zahtw 685 # if defined key_trcldf_eiv 686 REAL(wp), DIMENSION(jpi,jpj) :: & 687 zaeiw 688 # endif 689 # endif 690 691 #else 692 693 REAL(wp), DIMENSION(jpi,jpj,jpk) :: & 694 zahtu, zahtv, zahtw ! Lateral diffusivity 695 # if defined key_trcldf_eiv 696 REAL(wp), DIMENSION(jpi,jpj,jpk) :: & 697 zaeiu, zaeiv, zaeiw ! G&M coefficient 698 # endif 699 700 #endif 701 702 # if defined key_diaeiv 703 !! GM Velocity : to be used latter 704 REAL(wp), DIMENSION(jpi,jpj,jpk) :: & 705 zeivu, zeivv, zeivw 706 # endif 600 707 601 708 CHARACTER(len=45) :: & … … 603 710 clname_u = 'dyna_grid_U.nc', & 604 711 clname_v = 'dyna_grid_V.nc', & 605 clname_w = 'dyna_grid_W.nc', & 606 clname_s = 'dyna_wspd.nc' 712 clname_w = 'dyna_grid_W.nc' 607 713 ! 608 714 ! 0. Initialization … … 616 722 WRITE(numout,*) 'Dynrea : reading dynamical fields, kenr = ', jkenr 617 723 WRITE(numout,*) ' ~~~~~~~' 724 #if defined key_off_degrad 725 WRITE(numout,*) ' Degraded fields' 726 #endif 618 727 WRITE(numout,*) 619 728 ENDIF 620 729 621 730 731 IF( kt == nit000 .AND. nlecoff == 0 ) THEN 732 733 nlecoff = 1 734 735 CALL iom_open ( clname_t, numfl_t ) 736 CALL iom_open ( clname_u, numfl_u ) 737 CALL iom_open ( clname_v, numfl_v ) 738 CALL iom_open ( clname_w, numfl_w ) 739 740 ENDIF 741 742 ! file grid-T 743 !--------------- 744 CALL iom_get ( numfl_t, jpdom_data, 'votemper', zt (:,:,:), jkenr ) 745 CALL iom_get ( numfl_t, jpdom_data, 'vosaline', zs (:,:,:), jkenr ) 746 CALL iom_get ( numfl_t, jpdom_data, 'somixhgt', zmld (:,: ), jkenr ) 747 CALL iom_get ( numfl_t, jpdom_data, 'sowaflup', zemp (:,: ), jkenr ) 748 CALL iom_get ( numfl_t, jpdom_data, 'soshfldo', zqsr (:,: ), jkenr ) 749 CALL iom_get ( numfl_t, jpdom_data, 'soicecov', zice (:,: ), jkenr ) 750 CALL iom_get ( numfl_t, jpdom_data, 'sowindsp', zwspd(:,: ), jkenr ) 751 752 ! file grid-U 753 !--------------- 754 CALL iom_get ( numfl_u, jpdom_data, 'vozocrtx', zu (:,:,:), jkenr ) 755 #if defined key_trcbbl_dif || defined key_trcbbl_adv 756 CALL iom_get ( numfl_u, jpdom_data, 'sobblcox', zbblx(:,: ), jkenr ) 757 #endif 758 759 #if defined key_diaeiv 760 !! GM Velocity : to be used latter 761 CALL iom_get ( numfl_u, jpdom_data, 'vozoeivu', zeivu(:,:,:), jkenr ) 762 #endif 763 764 # if defined key_off_degrad 765 CALL iom_get ( numfl_u, jpdom_data, 'vozoahtu', zahtu(:,:,:), jkenr ) 766 # if defined key_trcldf_eiv 767 CALL iom_get ( numfl_u, jpdom_data, 'vozoaeiu', zaeiu(:,:,:), jkenr ) 768 # endif 769 #endif 770 771 ! file grid-V 772 !--------------- 773 CALL iom_get ( numfl_v, jpdom_data, 'vomecrty', zv (:,:,:), jkenr ) 774 #if defined key_trcbbl_dif || defined key_trcbbl_adv 775 CALL iom_get ( numfl_v, jpdom_data, 'sobblcoy', zbbly(:,: ), jkenr ) 776 #endif 777 778 #if defined key_diaeiv 779 !! GM Velocity : to be used latter 780 CALL iom_get ( numfl_v, jpdom_data, 'vomeeivv', zeivv(:,:,:), jkenr ) 781 #endif 782 783 #if defined key_off_degrad 784 CALL iom_get ( numfl_v, jpdom_data, 'vomeahtv', zahtv(:,:,:), jkenr ) 785 # if defined key_trcldf_eiv 786 CALL iom_get ( numfl_v, jpdom_data, 'vomeaeiv', zaeiv(:,:,:), jkenr ) 787 # endif 788 #endif 789 790 ! file grid-W 791 !--------------- 792 !! CALL iom_get ( numfl_w, jpdom_data, 'vovecrtz', zw (:,:,:), jkenr ) 793 # if defined key_zdfddm 794 CALL iom_get ( numfl_w, jpdom_data, 'voddmavs', zavt (:,:,:), jkenr ) 795 #else 796 CALL iom_get ( numfl_w, jpdom_data, 'votkeavt', zavt (:,:,:), jkenr ) 797 #endif 798 799 # if defined key_diaeiv 800 !! GM Velocity : to be used latter 801 CALL iom_get ( numfl_w, jpdom_data, 'voveeivw', zeivw(:,:,:), jkenr ) 802 #endif 803 804 #if ! defined key_off_degrad 805 # if defined key_traldf_c2d 806 CALL iom_get ( numfl_w, jpdom_data, 'soleahtw', zahtw (:,: ), jkenr ) 807 # if defined key_traldf_eiv 808 CALL iom_get ( numfl_w, jpdom_data, 'soleaeiw', zaeiw (:,: ), jkenr ) 809 # endif 810 # endif 811 #else 812 !! degradation-integration 813 CALL iom_get ( numfl_w, jpdom_data, 'voveahtw', zahtw(:,:,:), jkenr ) 814 # if defined key_trcldf_eiv 815 CALL iom_get ( numfl_w, jpdom_data, 'voveaeiw', zaeiw(:,:,:), jkenr ) 816 # endif 817 #endif 818 819 udta(:,:,:,2) = zu(:,:,:) * umask(:,:,:) 820 vdta(:,:,:,2) = zv(:,:,:) * vmask(:,:,:) 821 !! wdta(:,:,:,2) = zw(:,:,:) * tmask(:,:,:) 822 823 824 ! Computation of vertical velocity using horizontal divergence 825 zhdiv(:,:,:) = 0. 826 DO jk = 1, jpkm1 827 DO jj = 2, jpjm1 828 DO ji = fs_2, fs_jpim1 ! vector opt. 829 zhdiv(ji,jj,jk) = ( e2u(ji,jj) * udta(ji,jj,jk,2) - e2u(ji-1,jj) * udta(ji-1,jj,jk,2) & 830 & + e1v(ji,jj) * vdta(ji,jj,jk,2) - e1v(ji,jj-1) * vdta(ji,jj-1,jk,2) ) & 831 & / ( e1t(ji,jj) * e2t(ji,jj) ) 832 END DO 833 END DO 834 END DO 622 835 623 idtatot = ndtatot 624 625 IF( kt == nit000 .AND. nlecoff == 0 ) THEN 626 627 nlecoff = 1 628 629 CALL flinopen(clname_t,mig(1),nlci,mjg(1),nlcj,.FALSE.,ipi,ipj, & 630 & ipk,zlon,zlat,zlev,itime,istep,zdate0,rdt,numfl_t) 631 632 IF( ipi /= jpidta .OR. ipj /= jpjdta .OR. ipk /= jpk ) THEN 633 IF(lwp) THEN 634 WRITE(numout,*) 635 WRITE(numout,*) 'problem with dimensions' 636 WRITE(numout,*) ' ipi ',ipi,' jpidta ',jpidta 637 WRITE(numout,*) ' ipj ',ipj,' jpjdta ',jpjdta 638 WRITE(numout,*) ' ipk ',ipk,' jpk ',jpk 639 ENDIF 640 STOP 'dynrea ' 641 ENDIF 642 643 CALL flinopen(clname_u,mig(1),nlci,mjg(1),nlcj,.FALSE.,ipi,ipj, & 644 & ipk,zlon,zlat,zlev,itime,istep,zdate0,rdt,numfl_u) 645 646 IF( ipi /= jpidta .OR. ipj /= jpjdta .OR. ipk /= jpk ) THEN 647 IF(lwp) THEN 648 WRITE(numout,*) 649 WRITE(numout,*) 'problem with dimensions' 650 WRITE(numout,*) ' ipi ',ipi,' jpidta ',jpidta 651 WRITE(numout,*) ' ipj ',ipj,' jpjdta ',jpjdta 652 WRITE(numout,*) ' ipk ',ipk,' jpk ',jpk 653 ENDIF 654 STOP 'dynrea ' 655 ENDIF 656 657 CALL flinopen(clname_v,mig(1),nlci,mjg(1),nlcj,.FALSE.,ipi,ipj, & 658 & ipk,zlon,zlat,zlev,itime,istep,zdate0,rdt,numfl_v) 659 660 IF( ipi /= jpidta .OR. ipj /= jpjdta .OR. ipk /= jpk ) THEN 661 IF(lwp) THEN 662 WRITE(numout,*) 663 WRITE(numout,*) 'problem with dimensions' 664 WRITE(numout,*) ' ipi ',ipi,' jpidta ',jpidta 665 WRITE(numout,*) ' ipj ',ipj,' jpjdta ',jpjdta 666 WRITE(numout,*) ' ipk ',ipk,' jpk ',jpk 667 ENDIF 668 STOP 'dynrea ' 669 ENDIF 670 671 CALL flinopen(clname_w,mig(1),nlci,mjg(1),nlcj,.FALSE.,ipi,ipj, & 672 & ipk,zlon,zlat,zlev,itime,istep,zdate0,rdt,numfl_w) 673 674 IF( ipi /= jpidta .OR. ipj /= jpjdta .OR. ipk /= jpk ) THEN 675 IF(lwp) THEN 676 WRITE(numout,*) 677 WRITE(numout,*) 'problem with dimensions' 678 WRITE(numout,*) ' ipi ',ipi,' jpidta ',jpidta 679 WRITE(numout,*) ' ipj ',ipj,' jpjdta ',jpjdta 680 WRITE(numout,*) ' ipk ',ipk,' jpk ',jpk 681 ENDIF 682 STOP 'dynrea ' 683 ENDIF 684 685 CALL flinopen(clname_s,mig(1),nlci,mjg(1),nlcj,.FALSE.,ipi,ipj, & 686 & ipk,zlon,zlat,zlev,itime,istep,zdate0,rdt,numfl_s) 687 688 IF( ipi /= jpidta .OR. ipj /= jpjdta ) THEN 689 IF(lwp) THEN 690 WRITE(numout,*) 691 WRITE(numout,*) 'problem with dimensions' 692 WRITE(numout,*) ' ipi ',ipi,' jpidta ',jpidta 693 WRITE(numout,*) ' ipj ',ipj,' jpjdta ',jpjdta 694 ENDIF 695 STOP 'dynrea' 696 ENDIF 697 836 zw(:,:,jpk) = 0. 837 838 ! Computation from the bottom 839 DO jk = jpkm1, 1, -1 840 zw(:,:,jk) = zw(:,:,jk+1) - fse3t(:,:,jk) * zhdiv(:,:,jk) 841 END DO 842 wdta(:,:,:,2) = zw(:,:,:) * tmask(:,:,:) 843 844 845 tdta(:,:,:,2) = zt(:,:,:) * tmask(:,:,:) 846 sdta(:,:,:,2) = zs(:,:,:) * tmask(:,:,:) 847 avtdta(:,:,:,2) = zavt(:,:,:) * tmask(:,:,:) 848 #if ! defined key_off_degrad && defined key_traldf_c2d 849 ahtwdta(:,:,2) = zahtw(:,:) * tmask(:,:,1) 850 #if defined key_traldf_eiv 851 aeiwdta(:,:,2) = zaeiw(:,:) * tmask(:,:,1) 852 #endif 853 #endif 854 855 #if defined key_off_degrad 856 ahtudta(:,:,:,2) = zahtu(:,:,:) * umask(:,:,:) 857 ahtvdta(:,:,:,2) = zahtv(:,:,:) * vmask(:,:,:) 858 ahtwdta(:,:,:,2) = zahtw(:,:,:) * tmask(:,:,:) 859 # if defined key_trcldf_eiv 860 aeiudta(:,:,:,2) = zaeiu(:,:,:) * umask(:,:,:) 861 aeivdta(:,:,:,2) = zaeiv(:,:,:) * vmask(:,:,:) 862 aeiwdta(:,:,:,2) = zaeiw(:,:,:) * tmask(:,:,:) 863 # endif 864 #endif 865 866 ! 867 ! flux : 868 ! 869 flxdta(:,:,jpwind,2) = zwspd(:,:) * tmask(:,:,1) 870 flxdta(:,:,jpice,2) = MIN( 1., zice(:,:) ) * tmask(:,:,1) 871 flxdta(:,:,jpemp,2) = zemp(:,:) * tmask(:,:,1) 872 flxdta(:,:,jpqsr,2) = zqsr(:,:) * tmask(:,:,1) 873 zmxldta(:,:,2) = zmld(:,:) * tmask(:,:,1) 874 875 #if defined key_trcbbl_dif || defined key_trcbbl_adv 876 bblxdta(:,:,2) = MAX( 0., zbblx(:,:) ) 877 bblydta(:,:,2) = MAX( 0., zbbly(:,:) ) 878 879 WHERE( bblxdta(:,:,2) > 2. ) bblxdta(:,:,2) = 0. 880 WHERE( bblydta(:,:,2) > 2. ) bblydta(:,:,2) = 0. 881 882 #endif 883 884 IF( kt == nitend ) THEN 885 CALL iom_close ( numfl_t ) 886 CALL iom_close ( numfl_u ) 887 CALL iom_close ( numfl_v ) 888 CALL iom_close ( numfl_w ) 698 889 ENDIF 699 700 CALL flinget(numfl_u,'vozocrtx',jpidta,jpjdta,jpk,idtatot,jkenr, & 701 & jkenr,mig(1),nlci,mjg(1),nlcj,zu(1:nlci,1:nlcj,1:jpk)) 702 703 #if defined key_trcbbl_dif || defined key_trcbbl_adv 704 CALL flinget(numfl_u,'sobblcox',jpidta,jpjdta,1,idtatot,jkenr, & 705 & jkenr,mig(1),nlci,mjg(1),nlcj,zbblx(1:nlci,1:nlcj)) 706 #endif 707 708 # if defined key_traldf_eiv 709 CALL flinget(numfl_u,'vozoeivu',jpidta,jpjdta,jpk,idtatot,jkenr, & 710 & jkenr,mig(1),nlci,mjg(1),nlcj,zaeiu(1:nlci,1:nlcj,1:jpk)) 711 #endif 712 713 CALL flinget(numfl_v,'vomecrty',jpidta,jpjdta,jpk,idtatot,jkenr, & 714 & jkenr,mig(1),nlci,mjg(1),nlcj,zv(1:nlci,1:nlcj,1:jpk)) 715 716 #if defined key_trcbbl_dif || defined key_trcbbl_adv 717 CALL flinget(numfl_v,'sobblcoy',jpidta,jpjdta,1,idtatot,jkenr, & 718 & jkenr,mig(1),nlci,mjg(1),nlcj,zbbly(1:nlci,1:nlcj)) 719 #endif 720 721 # if defined key_traldf_eiv 722 CALL flinget(numfl_v,'vomeeivv',jpidta,jpjdta,jpk,idtatot,jkenr, & 723 & jkenr,mig(1),nlci,mjg(1),nlcj,zaeiv(1:nlci,1:nlcj,1:jpk)) 724 #endif 725 726 CALL flinget(numfl_w,'vovecrtz',jpidta,jpjdta,jpk,idtatot,jkenr, & 727 & jkenr,mig(1),nlci,mjg(1),nlcj,zw(1:nlci,1:nlcj,1:jpk)) 728 729 # if defined key_traldf_eiv 730 CALL flinget(numfl_w,'voveeivw',jpidta,jpjdta,jpk,idtatot,jkenr, & 731 & jkenr,mig(1),nlci,mjg(1),nlcj,zaeiw(1:nlci,1:nlcj,1:jpk)) 732 #endif 733 734 735 #if defined key_zdfddm 736 CALL flinget(numfl_w,'voddmavs',jpidta,jpjdta,jpk,idtatot,jkenr, & 737 & jkenr,mig(1),nlci,mjg(1),nlcj,zavt(1:nlci,1:nlcj,1:jpk)) 738 #else 739 CALL flinget(numfl_w,'votkeavt',jpidta,jpjdta,jpk,idtatot,jkenr, & 740 & jkenr,mig(1),nlci,mjg(1),nlcj,zavt(1:nlci,1:nlcj,1:jpk)) 741 #endif 742 743 #if defined key_traldf_eiv && defined key_traldf_c2d 744 CALL flinget(numfl_w,'soleahtw',jpidta,jpjdta,1,idtatot,jkenr, & 745 jkenr,mig(1),nlci,mjg(1),nlcj,zahtw(1:nlci,1:nlcj)) 746 747 CALL flinget(numfl_w,'soleaeiw',jpidta,jpjdta,1,idtatot,jkenr, & 748 jkenr,mig(1),nlci,mjg(1),nlcj,zeivw(1:nlci,1:nlcj)) 749 #endif 750 751 CALL flinget(numfl_t,'votemper',jpidta,jpjdta,jpk,idtatot,jkenr, & 752 & jkenr,mig(1),nlci,mjg(1),nlcj,zt(1:nlci,1:nlcj,1:jpk)) 753 754 CALL flinget(numfl_t,'vosaline',jpidta,jpjdta,jpk,idtatot,jkenr, & 755 & jkenr,mig(1),nlci,mjg(1),nlcj,zs(1:nlci,1:nlcj,1:jpk)) 756 757 CALL flinget(numfl_t,'somixhgt',jpidta,jpjdta,1,idtatot,jkenr, & 758 & jkenr,mig(1),nlci,mjg(1),nlcj,zmld(1:nlci,1:nlcj)) 759 760 761 CALL flinget(numfl_t,'sowaflup',jpidta,jpjdta,1,idtatot,jkenr, & 762 & jkenr,mig(1),nlci,mjg(1),nlcj,zemp(1:nlci,1:nlcj)) 763 764 CALL flinget(numfl_t,'soshfldo',jpidta,jpjdta,1,idtatot,jkenr, & 765 & jkenr,mig(1),nlci,mjg(1),nlcj,zqsr(1:nlci,1:nlcj)) 766 767 CALL flinget(numfl_t,'soicecov',jpidta,jpjdta,1,idtatot,jkenr, & 768 & jkenr,mig(1),nlci,mjg(1),nlcj,zice(1:nlci,1:nlcj)) 769 770 CALL flinget(numfl_s,'wspd', jpidta,jpjdta,1,idtatot,jkenr, & 771 & jkenr,mig(1),nlci,mjg(1),nlcj,zwind(1:nlci,1:nlcj)) 772 773 774 ! Extra-halo initialization in MPP 775 IF( lk_mpp ) THEN 776 DO ji = nlci+1, jpi 777 zu(ji,:,:) = zu(1,:,:) 778 zv(ji,:,:) = zv(1,:,:) 779 zw(ji,:,:) = zw(1,:,:) 780 zavt(ji,:,:)=zavt(1,:,:) 781 zt(ji,:,:)=zt(1,:,:) 782 zs(ji,:,:)=zs(1,:,:) 783 zmld(ji,:)=zmld(1,:) 784 zwind(ji,:)=zwind(1,:) 785 zemp(ji,:)=zemp(1,:) 786 zqsr(ji,:)=zqsr(1,:) 787 zice(ji,:)=zice(1,:) 788 #if defined key_trcbbl_dif || defined key_trcbbl_adv 789 zbblx(ji,:)=zbblx(1,:) 790 zbbly(ji,:)=zbbly(1,:) 791 #endif 792 #if defined key_traldf_eiv 793 zaeiu(ji,:,:)=zaeiu(1,:,:) 794 zaeiv(ji,:,:)=zaeiv(1,:,:) 795 zaeiw(ji,:,:)=zaeiw(1,:,:) 796 #endif 797 #if defined key_traldf_eiv && defined key_traldf_c2d 798 zahtw(ji,:)=zahtw(1,:) 799 zeivw(ji,:)=zeivw(1,:) 800 #endif 801 ENDDO 802 DO jj = nlcj+1, jpj 803 zu(:,jj,:) = zu(:,1,:) 804 zv(:,jj,:) = zv(:,1,:) 805 zw(:,jj,:) = zw(:,1,:) 806 zavt(:,jj,:)=zavt(:,1,:) 807 zt(:,jj,:)=zt(:,1,:) 808 zs(:,jj,:)=zs(:,1,:) 809 zmld(:,jj)=zmld(:,1) 810 zwind(:,jj)=zwind(:,1) 811 zemp(:,jj)=zemp(:,1) 812 zqsr(:,jj)=zqsr(:,1) 813 zice(:,jj)=zice(:,1) 814 #if defined key_trcbbl_dif || defined key_trcbbl_adv 815 zbblx(:,jj)=zbblx(:,1) 816 zbbly(:,jj)=zbbly(:,1) 817 #endif 818 #if defined key_traldf_eiv 819 zaeiu(:,jj,:)=zaeiu(:,1,:) 820 zaeiv(:,jj,:)=zaeiv(:,1,:) 821 zaeiw(:,jj,:)=zaeiw(:,1,:) 822 #endif 823 #if defined key_traldf_eiv && defined key_traldf_c2d 824 zahtw(:,jj)=zahtw(:,1) 825 zeivw(:,jj)=zeivw(:,1) 826 #endif 827 ENDDO 828 ENDIF 829 830 831 udta(:,:,:,2)=zu(:,:,:)*umask(:,:,:) 832 vdta(:,:,:,2)=zv(:,:,:)*vmask(:,:,:) 833 wdta(:,:,:,2)=zw(:,:,:)*tmask(:,:,:) 834 tdta(:,:,:,2)=zt(:,:,:)*tmask(:,:,:) 835 sdta(:,:,:,2)=zs(:,:,:)*tmask(:,:,:) 836 avtdta(:,:,:,2)=zavt(:,:,:)*tmask(:,:,:) 837 #if defined key_traldf_eiv && defined key_traldf_c2d 838 ahtwdta(:,:,2)=zahtw(:,:)*tmask(:,:,1) 839 eivwdta(:,:,2)=zeivw(:,:)*tmask(:,:,1) 840 #endif 841 ! 842 ! 843 ! flux : 844 ! 845 flxdta(:,:,jpwind,2)=zwind(:,:)*tmask(:,:,1) 846 flxdta(:,:,jpice,2)=min(1.,zice(:,:))*tmask(:,:,1) 847 flxdta(:,:,jpemp,2)=zemp(:,:)*tmask(:,:,1) 848 flxdta(:,:,jpqsr,2)=zqsr(:,:)*tmask(:,:,1) 849 zmxldta(:,:,2)=zmld(:,:)*tmask(:,:,1) 850 851 #if defined key_trcbbl_dif || defined key_trcbbl_adv 852 bblxdta(:,:,2)=max(0.,zbblx(:,:)) 853 bblydta(:,:,2)=max(0.,zbbly(:,:)) 854 855 DO ji=1,jpi 856 DO jj=1,jpj 857 if (bblxdta(ji,jj,2).gt.2.) bblxdta(ji,jj,2)=0. 858 if (bblydta(ji,jj,2).gt.2.) bblydta(ji,jj,2)=0. 859 END DO 860 END DO 861 #endif 862 890 863 891 END SUBROUTINE dynrea 864 892 -
trunk/NEMO/OFF_SRC/mppini_2.h90
r325 r495 40 40 !!---------------------------------------------------------------------- 41 41 !! * Modules used 42 USE io ipsl43 42 USE iom 43 44 44 !! Local variables 45 CHARACTER (len=25) :: & ! temporary name46 clname , clvar ! filename and cdf variable name for bathy47 LOGICAL :: llbon ! check the existence of bathy files48 45 INTEGER :: ji, jj, jn, jproc, jarea ! dummy loop indices 49 INTEGER :: inum = 11! temporary logical unit46 INTEGER :: inum ! temporary logical unit 50 47 INTEGER :: & 51 48 ii, ij, ifreq, il1, il2, & ! temporary integers … … 66 63 ione , ionw , iose , iosw , & ! " " 67 64 ibne , ibnw , ibse , ibsw ! " " 68 INTEGER :: & 69 ipi, ipj, ipk, & ! temporary integers 70 itime ! " " 71 INTEGER, DIMENSION (1) :: istep 72 73 INTEGER, DIMENSION(jpiglo,jpjglo) :: & 65 INTEGER, DIMENSION(jpi,jpj) :: & 74 66 imask ! temporary global workspace 75 76 REAL(wp), DIMENSION(jpidta,jpjdta) :: & 77 zlamt, zphit, zdta ! temporary data workspace 78 REAL(wp), DIMENSION(jpk) :: & 79 zdept ! temporary workspace (NetCDF read) 80 REAL(wp) :: zidom , zjdom, & ! temporary scalars 81 zdt, zdate0 67 REAL(wp), DIMENSION(jpi,jpj) :: & 68 zdta ! temporary data workspace 69 REAL(wp) :: zidom , zjdom ! temporary scalars 82 70 83 71 !!---------------------------------------------------------------------- … … 103 91 #endif 104 92 105 106 IF( jpni*jpnj < jpnij ) THEN 107 IF(lwp) WRITE(numout,cform_err) 108 IF(lwp) WRITE(numout,*) ' jpnij > jpni x jpnj impossible' 109 nstop = nstop + 1 110 ENDIF 111 93 IF( jpni*jpnj < jpnij ) CALL ctl_stop( ' jpnij > jpni x jpnj impossible' ) 112 94 113 95 ! 0. initialisation … … 115 97 116 98 ! open the file 117 IF ( lk_zps ) THEN 118 clname = 'bathy_meter.nc' ! Meter bathy in case of partial steps 119 clvar = 'Bathymetry' 120 ELSE 121 clname = 'bathy_level.nc' ! Level bathymetry 122 clvar = 'Bathy_level' 123 ENDIF 124 125 INQUIRE( FILE=clname, EXIST=llbon ) 126 IF( llbon ) THEN 127 IF(lwp) WRITE(numout,*) 128 IF(lwp) WRITE(numout,*) ' read bathymetry in ', clname 129 IF(lwp) WRITE(numout,*) 130 itime = 1 131 ipi = jpidta 132 ipj = jpjdta 133 ipk = 1 134 zdt = rdt 135 136 CALL flinopen( clname, 1, jpidta, 1, jpjdta, .FALSE., & 137 ipi, ipj, ipk, zlamt, zphit, zdept, itime, istep, zdate0, zdt, inum ) 138 CALL flinget( inum, clvar, jpidta, jpjdta, 1, & 139 itime, 1, 1, 1, jpidta, 1, jpjdta, zdta(:,:) ) 140 CALL flinclo( inum ) 141 ELSE 142 IF(lwp) WRITE(numout,cform_err) 143 IF(lwp) WRITE(numout,*)' mppini_2 : unable to read the file ', clname 144 nstop = nstop + 1 145 ENDIF 99 IF ( ln_zps ) THEN 100 CALL iom_open ( 'bathy_meter.nc', inum ) ! Meter bathy in case of partial steps 101 CALL iom_get ( inum, jpdom_data, 'Bathymetry' , zdta ) 102 ELSE 103 CALL iom_open ( 'bathy_level.nc', inum ) ! Level bathymetry 104 CALL iom_get ( inum, jpdom_data, 'Bathy_level', zdta ) 105 ENDIF 106 CALL iom_close (inum) 146 107 147 108 ! land/sea mask over the global/zoom domain 148 109 149 110 imask(:,:)=1 150 WHERE ( zdta( jpizoom:(jpizoom+jpiglo-1),jpjzoom:(jpjglo+jpjzoom-1)) <= 0. ) imask = 0111 WHERE ( zdta(:,:) <= 0. ) imask = 0 151 112 152 113 ! 1. Dimension arrays for subdomains … … 323 284 DO jj = 1+jprecj, ilj-jprecj 324 285 DO ji = 1+jpreci, ili-jpreci 325 IF( imask(ji +iimppt(ii,ij)-1, jj+ijmppt(ii,ij)-1) == 1) isurf = isurf+1286 IF( imask(ji, jj) == 1) isurf = isurf+1 326 287 END DO 327 288 END DO … … 336 297 ! Control 337 298 IF(icont+1 /= jpnij) THEN 338 IF(lwp) THEN 339 WRITE(numout,*) ' Eliminate land processors algorithm' 340 WRITE(numout,*) 341 WRITE(numout,*) ' jpni =',jpni,' jpnj =',jpnj 342 WRITE(numout,*) ' jpnij =',jpnij, '< jpni x jpnj' 343 WRITE(numout,*) 344 WRITE(numout,*) ' E R R O R ' 345 WRITE(numout,*) ' ***********, mpp_init2 finds jpnij=',icont+1 346 WRITE(numout,*) ' we stop' 347 ENDIF 348 STOP 'mpp_init2' 349 ENDIF 350 299 WRITE(ctmp1,*) ' jpni =',jpni,' jpnj =',jpnj 300 WRITE(ctmp2,*) ' jpnij =',jpnij, '< jpni x jpnj' 301 WRITE(ctmp3,*) ' ***********, mpp_init2 finds jpnij=',icont+1 302 CALL ctl_stop( ' Eliminate land processors algorithm', '', ctmp1, ctmp2, '', ctmp3 ) 303 ENDIF 351 304 352 305 ! 4. Subdomain print … … 513 466 ! Save processor layout in ascii file 514 467 IF (lwp) THEN 515 OPEN(inum,FILE='layout.dat') 516 WRITE(inum,'(6i8)') jpnij,jpi,jpj,jpk,jpiglo,jpjglo 517 WRITE(inum,'(a)') 'NAREA nlci nlcj nldi nldj nlei nlej nimpp njmpp' 468 inum = 11 ! how do we know that 11 is ok??? 469 OPEN(inum,FILE='layout.dat') 470 WRITE(inum,'(6i8)') jpnij,jpi,jpj,jpk,jpiglo,jpjglo 471 WRITE(inum,'(a)') 'NAREA nlci nlcj nldi nldj nlei nlej nimpp njmpp' 518 472 519 473 DO jproc = 1, jpnij … … 560 514 ENDIF 561 515 562 IF( nperio == 1 .AND.jpni /= 1 ) THEN 563 IF(lwp) WRITE(numout,cform_err) 564 IF(lwp) WRITE(numout,*) ' mpp_init2: error on cyclicity' 565 nstop = nstop + 1 566 ENDIF 516 IF( nperio == 1 .AND.jpni /= 1 ) CALL ctl_stop( ' mpp_init2: error on cyclicity' ) 567 517 568 518 ! Prepare mpp north fold … … 588 538 IF( ij == jpnj ) npolj = 5 589 539 ENDIF 590 540 591 541 ! Prepare NetCDF output file (if necessary) 592 542 CALL mpp_init_ioipsl
Note: See TracChangeset
for help on using the changeset viewer.