00001 subroutine sibdrv_read_ncep2( sib, time )
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 use sib_const_module, only: &
00030 nsib, &
00031 latsib, &
00032 lonsib, &
00033 subset, &
00034 subcount
00035
00036 use sib_io_module, only: &
00037 dr_format, &
00038 driver_id
00039
00040 use physical_parameters, only: &
00041 kapa => kappa, &
00042 pi
00043
00044 use kinds
00045 #ifdef PGF
00046 use netcdf
00047 use typeSizes
00048 #endif
00049 use sibtype
00050 use timetype
00051
00052 type(sib_t), dimension(subcount), intent(inout) :: sib
00053 type(time_struct), intent(in) :: time
00054
00055 real(kind=dbl_kind) :: pid180
00056 real(kind=dbl_kind) :: cosz(nsib)
00057
00058 integer(kind=int_kind) :: i, iyear, imon, iday, idoy, ihour, imin
00059
00060 integer(kind=int_kind) :: n
00061
00062 character*80 filename
00063 character*7 gchar
00064 integer(kind=int_kind) :: nctimeid,ncyid,ncmid,nctdid,ncdoyid,nchid
00065 integer(kind=int_kind), dimension(2) :: mstart,mcount
00066
00067 integer(kind=int_kind) :: nct2mid
00068 integer(kind=int_kind) :: nctccid
00069 integer(kind=int_kind) :: ncswdid
00070 integer(kind=int_kind) :: ncldwid
00071 integer(kind=int_kind) :: ncuwdid
00072 integer(kind=int_kind) :: ncvwdid
00073 integer(kind=int_kind) :: ncshid
00074 integer(kind=int_kind) :: ncsfpid
00075 integer(kind=int_kind) :: nclspid
00076 integer(kind=int_kind) :: nccvpid
00077 integer(kind=int_kind) :: ncsflid
00078
00079 real(kind=real_kind), dimension(nsib) :: t2m
00080 real(kind=real_kind), dimension(nsib) :: tcc
00081 real(kind=real_kind), dimension(nsib) :: swd
00082 real(kind=real_kind), dimension(nsib) :: ldw
00083 real(kind=real_kind), dimension(nsib) :: sh
00084 real(kind=real_kind), dimension(nsib) :: sfp
00085 real(kind=real_kind), dimension(nsib) :: lsp
00086 real(kind=real_kind), dimension(nsib) :: cvp
00087 real(kind=real_kind), dimension(nsib) :: sfl
00088
00089 integer(kind=int_kind) :: status
00090 real(kind=real_kind) :: xtime,xyear,xmonth,xdoy,xday,xhour
00091 real(kind=real_kind), dimension(nsib) :: xx,uwd,vwd
00092
00093 character(len=13) :: subname
00094 data subname/'sibdrv_read '/
00095
00096
00097
00098 do i=1,subcount
00099 sib(i)%prog%ps1 = sib(i)%prog%ps2
00100 sib(i)%prog%tm1 = sib(i)%prog%tm2
00101 sib(i)%prog%tcc1 = sib(i)%prog%tcc2
00102 sib(i)%prog%sh1 = sib(i)%prog%sh2
00103 sib(i)%prog%spdm1 = sib(i)%prog%spdm2
00104 sib(i)%prog%lspr1 = sib(i)%prog%lspr2
00105 sib(i)%prog%cupr1 = sib(i)%prog%cupr2
00106 sib(i)%prog%dlwbot1 = sib(i)%prog%dlwbot2
00107 sib(i)%prog%sw_dwn1 = sib(i)%prog%sw_dwn2
00108 enddo
00109
00110
00111 if ( time%switch_driver ) then
00112 status = nf90_close( driver_id )
00113
00114 write( filename, dr_format ) time%driver_year, time%driver_month
00115 status = nf90_open( trim(filename), nf90_nowrite, driver_id )
00116 if(status/=nf90_noerr) call handle_err(status,'read_ncep2',1)
00117 endif
00118
00119
00120
00121
00122
00123
00124
00125
00126 status = nf90_inq_varid( driver_id, 'year', ncyid )
00127 if(status/=nf90_noerr) call handle_err(status,'read_ncep2',2)
00128 status = nf90_inq_varid( driver_id, 'month',ncmid )
00129 if(status/=nf90_noerr) call handle_err(status,'read_ncep2',3)
00130 status = nf90_inq_varid( driver_id, 'doy', ncdoyid )
00131 if(status/=nf90_noerr) call handle_err(status,'read_ncep2',4)
00132 status = nf90_inq_varid( driver_id, 'day', nctdid )
00133 if(status/=nf90_noerr) call handle_err(status,'read_ncep2',5)
00134 status = nf90_inq_varid( driver_id, 'hour', nchid )
00135 if(status/=nf90_noerr) call handle_err(status,'read_ncep2',6)
00136
00137
00138 mstart(1) = time%driver_recnum
00139
00140
00141 status = nf90_get_var( driver_id, ncyid, xyear, mstart(1:1) )
00142 if(status/=nf90_noerr) call handle_err(status,'read_ncep2',7)
00143 status = nf90_get_var( driver_id, ncmid, xmonth, mstart(1:1) )
00144 if(status/=nf90_noerr) call handle_err(status,'read_ncep2',8)
00145 status = nf90_get_var( driver_id, ncdoyid, xdoy, mstart(1:1) )
00146 if(status/=nf90_noerr) call handle_err(status,'read_ncep2',9)
00147 status = nf90_get_var( driver_id, nctdid, xday, mstart(1:1) )
00148 if(status/=nf90_noerr) call handle_err(status,'read_ncep2',10)
00149 status = nf90_get_var( driver_id, nchid, xhour, mstart(1:1) )
00150 if(status/=nf90_noerr) call handle_err(status,'read_ncep2',11)
00151
00152 ihour=xhour
00153 iday =xday
00154 idoy =xdoy
00155 imon =xmonth
00156 iyear=xyear
00157 imin=0
00158
00159
00160
00161
00162 status = nf90_inq_varid( driver_id, 't2m', nct2mid )
00163 if(status/=nf90_noerr) call handle_err(status,'read_ncep2',12)
00164 status = nf90_inq_varid( driver_id, 'tcc', nctccid )
00165 if(status/=nf90_noerr) call handle_err(status,'read_ncep2',13)
00166 status = nf90_inq_varid( driver_id, 'swd', ncswdid )
00167 if(status/=nf90_noerr) call handle_err(status,'read_ncep2',14)
00168 status = nf90_inq_varid( driver_id, 'lwd', ncldwid )
00169 if(status/=nf90_noerr) call handle_err(status,'read_ncep2',15)
00170 status = nf90_inq_varid( driver_id, 'uwd', ncuwdid )
00171 if(status/=nf90_noerr) call handle_err(status,'read_ncep2',16)
00172 status = nf90_inq_varid( driver_id, 'vwd', ncvwdid )
00173 if(status/=nf90_noerr) call handle_err(status,'read_ncep2',17)
00174 status = nf90_inq_varid( driver_id, 'shum', ncshid )
00175 if(status/=nf90_noerr) call handle_err(status,'read_ncep2',18)
00176 status = nf90_inq_varid( driver_id, 'sfp', ncsfpid )
00177 if(status/=nf90_noerr) call handle_err(status,'read_ncep2',19)
00178 status = nf90_inq_varid( driver_id, 'lsp', nclspid )
00179 if(status/=nf90_noerr) call handle_err(status,'read_ncep2',20)
00180 status = nf90_inq_varid( driver_id, 'cvp', nccvpid )
00181 if(status/=nf90_noerr) call handle_err(status,'read_ncep2',21)
00182 status = nf90_inq_varid( driver_id, 'sfl', ncsflid )
00183 if(status/=nf90_noerr) call handle_err(status,'read_ncep2',22)
00184
00185
00186 mstart=(/1,time%driver_recnum/); mcount=(/nsib,1/)
00187 status = nf90_get_var( driver_id, nct2mid, t2m, &
00188 mstart, mcount )
00189 if(status/=nf90_noerr) call handle_err(status,'read_ncep2',23)
00190 status = nf90_get_var( driver_id, nctccid, tcc, &
00191 mstart, mcount )
00192 if(status/=nf90_noerr) call handle_err(status,'read_ncep2',24)
00193 status = nf90_get_var( driver_id, ncswdid, swd, &
00194 mstart, mcount )
00195 if(status/=nf90_noerr) call handle_err(status,'read_ncep2',25)
00196 status = nf90_get_var( driver_id, ncldwid, ldw, &
00197 mstart, mcount )
00198 if(status/=nf90_noerr) call handle_err(status,'read_ncep2',26)
00199 status = nf90_get_var( driver_id, ncuwdid, uwd, &
00200 mstart, mcount )
00201 if(status/=nf90_noerr) call handle_err(status,'read_ncep2',27)
00202 status = nf90_get_var( driver_id, ncvwdid, vwd, &
00203 mstart, mcount )
00204 if(status/=nf90_noerr) call handle_err(status,'read_ncep2',28)
00205 status = nf90_get_var( driver_id, ncshid, sh, &
00206 mstart, mcount )
00207 if(status/=nf90_noerr) call handle_err(status,'read_ncep2',29)
00208 status = nf90_get_var( driver_id, ncsfpid, sfp, &
00209 mstart, mcount )
00210 if(status/=nf90_noerr) call handle_err(status,'read_ncep2',30)
00211 status = nf90_get_var( driver_id, nclspid, lsp, &
00212 mstart, mcount )
00213 if(status/=nf90_noerr) call handle_err(status,'read_ncep2',31)
00214 status = nf90_get_var( driver_id, nccvpid, cvp, &
00215 mstart, mcount )
00216 if(status/=nf90_noerr) call handle_err(status,'read_ncep2',32)
00217 status = nf90_get_var(driver_id, ncsflid, xx, &
00218 mstart, mcount )
00219 if(status/=nf90_noerr) call handle_err(status,'read_ncep2',33)
00220
00221
00222 do i=1,subcount
00223
00224 sib(i)%prog%tm2 = t2m(subset(i))
00225 sib(i)%prog%tcc2 = tcc(subset(i))
00226 sib(i)%prog%sw_dwn2 = swd(subset(i))
00227 sib(i)%prog%dlwbot2 = ldw(subset(i))
00228 sib(i)%prog%sh2 = sh(subset(i))
00229 sib(i)%prog%ps2 = sfp(subset(i))
00230 sib(i)%prog%lspr2 = lsp(subset(i))
00231 sib(i)%prog%cupr2 = cvp(subset(i))
00232
00233
00234
00235
00236 if ( sib(i)%prog%sw_dwn2 < 0 ) sib(i)%prog%sw_dwn2 = 0.0
00237 if ( sib(i)%prog%dlwbot2 < 0 ) sib(i)%prog%dlwbot2 = 0.0
00238
00239
00240 sib(i)%prog%tcc2 = sib(i)%prog%tcc2 * 0.01
00241
00242
00243 sib(i)%prog%spdm2=SQRT(uwd(subset(i))*uwd(subset(i))+vwd(subset(i))*vwd(subset(i)))
00244
00245
00246 sib(i)%prog%lspr2 = sib(i)%prog%lspr2+xx(subset(i))
00247
00248 sib(i)%prog%lspr2 = (sib(i)%prog%lspr2-sib(i)%prog%cupr2)*time%driver_step
00249 sib(i)%prog%cupr2 = sib(i)%prog%cupr2*time%driver_step
00250
00251 if ( sib(i)%prog%lspr2 < 0.0 ) sib(i)%prog%lspr2 = 0.0
00252 if ( sib(i)%prog%cupr2 < 0.0 ) sib(i)%prog%cupr2 = 0.0
00253
00254
00255 sib(i)%prog%ps2 = sib(i)%prog%ps2 * 0.01
00256 enddo
00257
00258
00259
00260
00261
00262
00263
00264
00265
00266
00267
00268
00269
00270
00271
00272
00273
00274
00275 end subroutine sibdrv_read_ncep2
00276
00277
00278 subroutine sibdrv_read_ncep1(sib, time)
00279
00280
00281
00282
00283
00284
00285
00286
00287
00288
00289
00290
00291
00292
00293
00294
00295
00296
00297
00298
00299
00300
00301
00302
00303 use sib_const_module, only: &
00304 nsib, &
00305 subset, &
00306 subcount
00307 use sib_io_module, only: &
00308 dr_format, &
00309 driver_id
00310 use kinds
00311 #ifdef PGF
00312 use netcdf
00313 use typeSizes
00314 #endif
00315 use sibtype
00316 use timetype
00317
00318
00319
00320 type(sib_t), dimension(subcount), intent(inout) :: sib
00321 type(time_struct), intent(in) :: time
00322 integer(kind=int_kind) :: i,j,k,l,m,n
00323 character*80 filename
00324 integer(kind=int_kind) :: varid
00325 integer(kind=int_kind), dimension(2) :: mstart
00326 integer(kind=int_kind), dimension(2) :: mcount
00327 real(kind=real_kind), dimension(nsib) :: var
00328 real(kind=real_kind), dimension(nsib) :: uwd
00329 real(kind=real_kind), dimension(nsib) :: vwd
00330 integer(kind=int_kind) :: status
00331 character(len=13) :: subname
00332
00333
00334 data subname/'read_ncep1'/
00335
00336
00337
00338
00339
00340 do i=1,subcount
00341 sib(i)%prog%ps1 = sib(i)%prog%ps2
00342 sib(i)%prog%tm1 = sib(i)%prog%tm2
00343 sib(i)%prog%sh1 = sib(i)%prog%sh2
00344 sib(i)%prog%spdm1 = sib(i)%prog%spdm2
00345 sib(i)%prog%lspr1 = sib(i)%prog%lspr2
00346 sib(i)%prog%cupr1 = sib(i)%prog%cupr2
00347 sib(i)%prog%dlwbot1 = sib(i)%prog%dlwbot2
00348 sib(i)%prog%sw_dwn1 = sib(i)%prog%sw_dwn2
00349 enddo
00350
00351
00352 if (time%switch_driver) then
00353
00354
00355 status=nf90_close(driver_id)
00356
00357
00358 write(filename, dr_format) time%driver_year, time%driver_month
00359 print*, '\tswitch drvr to ', trim(filename)
00360
00361
00362 status=nf90_open(trim(filename), nf90_nowrite, driver_id)
00363 if(status/=nf90_noerr) call handle_err(status,'read_ncep1',1)
00364 endif
00365
00366
00367 mstart=(/1,time%driver_recnum/); mcount=(/nsib,1/)
00368
00369
00370
00371 status=nf90_inq_varid(driver_id, 'tmp', varid)
00372 if(status/=nf90_noerr) call handle_err(status,'read_ncep1',2)
00373 status=nf90_get_var(driver_id, varid, var, mstart, mcount)
00374 if(status/=nf90_noerr) call handle_err(status,'read_ncep1',3)
00375
00376
00377 do i=1,subcount
00378 sib(i)%prog%tm2 = var(subset(i))
00379 enddo
00380
00381
00382
00383 status=nf90_inq_varid(driver_id, 'dswrf', varid)
00384 if(status/=nf90_noerr) call handle_err(status,'read_ncep1',4)
00385 status=nf90_get_var(driver_id, varid, var, mstart, mcount)
00386 if(status/=nf90_noerr) call handle_err(status,'read_ncep1',5)
00387
00388
00389 do i=1,subcount
00390 sib(i)%prog%sw_dwn2 = var(subset(i))
00391 enddo
00392
00393
00394
00395 status=nf90_inq_varid(driver_id, 'dlwrf', varid)
00396 if(status/=nf90_noerr) call handle_err(status,'read_ncep1',6)
00397 status=nf90_get_var(driver_id, varid, var, mstart, mcount)
00398 if(status/=nf90_noerr) call handle_err(status,'read_ncep1',7)
00399
00400
00401 do i=1,subcount
00402 sib(i)%prog%dlwbot2 = var(subset(i))
00403 enddo
00404
00405
00406
00407
00408
00409 status=nf90_inq_varid(driver_id, 'ugrd', varid)
00410 if(status/=nf90_noerr) call handle_err(status,'read_ncep1',8)
00411 status=nf90_get_var(driver_id, varid, uwd, mstart, mcount)
00412 if(status/=nf90_noerr) call handle_err(status,'read_ncep1',9)
00413
00414
00415 status=nf90_inq_varid(driver_id, 'vgrd', varid)
00416 if(status/=nf90_noerr) call handle_err(status,'read_ncep1',10)
00417 status=nf90_get_var(driver_id, varid, vwd, mstart, mcount)
00418 if(status/=nf90_noerr) call handle_err(status,'read_ncep1',11)
00419
00420
00421
00422 do i=1,subcount
00423 sib(i)%prog%spdm2 = uwd(subset(i))*uwd(subset(i))+ vwd(subset(i))*vwd(subset(i))
00424 sib(i)%prog%spdm2 = sqrt(sib(i)%prog%spdm2)
00425 enddo
00426
00427
00428
00429 status=nf90_inq_varid(driver_id, 'spfh', varid)
00430 if(status/=nf90_noerr) call handle_err(status,'read_ncep1',12)
00431 status=nf90_get_var(driver_id, varid, var, mstart, mcount)
00432 if(status/=nf90_noerr) call handle_err(status,'read_ncep1',13)
00433
00434
00435 do i=1,subcount
00436 sib(i)%prog%sh2 = var(subset(i))
00437 if(sib(i)%prog%sh2==0.) sib(i)%prog%sh2=1.e-4
00438 enddo
00439
00440
00441
00442 status=nf90_inq_varid(driver_id, 'pres', varid)
00443 if(status/=nf90_noerr) call handle_err(status,'read_ncep1',14)
00444 status=nf90_get_var(driver_id, varid, var, mstart, mcount)
00445 if(status/=nf90_noerr) call handle_err(status,'read_ncep1',15)
00446
00447
00448
00449 do i=1,subcount
00450 sib(i)%prog%ps2 = var(subset(i))*.01
00451 enddo
00452
00453
00454
00455 status=nf90_inq_varid(driver_id, 'prate', varid)
00456 if(status/=nf90_noerr) call handle_err(status,'read_ncep1',16)
00457 status=nf90_get_var(driver_id, varid, var, mstart, mcount)
00458 if(status/=nf90_noerr) call handle_err(status,'read_ncep1',17)
00459
00460
00461
00462 do i=1,subcount
00463 sib(i)%prog%lspr2 = var(subset(i))*time%driver_step
00464 enddo
00465
00466
00467
00468 status=nf90_inq_varid(driver_id, 'cprat', varid)
00469 if(status/=nf90_noerr) call handle_err(status,'read_ncep1',18)
00470 status=nf90_get_var(driver_id, varid, var, mstart, mcount)
00471 if(status/=nf90_noerr) call handle_err(status,'read_ncep1',19)
00472
00473
00474
00475 do i=1,subcount
00476 sib(i)%prog%cupr2 = var(subset(i))*time%driver_step
00477 enddo
00478
00479
00480
00481 do i=1,subcount
00482
00483
00484 if ( sib(i)%prog%sw_dwn2 < 0 ) sib(i)%prog%sw_dwn2 = 0.0
00485 if ( sib(i)%prog%dlwbot2 < 0 ) sib(i)%prog%dlwbot2 = 0.0
00486
00487
00488 if ( sib(i)%prog%lspr2 < 0.0 ) sib(i)%prog%lspr2 = 0.0
00489 if ( sib(i)%prog%cupr2 < 0.0 ) sib(i)%prog%cupr2 = 0.0
00490 enddo
00491
00492 end subroutine sibdrv_read_ncep1