258 subroutine read_nwp(this,filename,itype,wcstart,numlon,numlat,numtimes,time_to_get,mask,sst,ice,sfcT,iceT,sfcTl,zorl,hice,ybegin,yend)
262 character(len=6),
intent(in) :: itype
263 character(len=*),
intent(in) :: filename
264 character(len=4),
intent(in) :: wcstart
266 integer,
intent(in) :: time_to_get
267 integer,
intent(in) :: ybegin,yend
268 integer,
intent(inout) :: numlon, numlat, numtimes
270 real(r_single),
intent(inout) :: mask(:,:),sst(:,:),ice(:,:),sfcT(:,:) &
271 ,iceT(:,:),sfcTl(:,:),zorl(:,:),hice(:,:)
273 real(r_kind),
allocatable :: tmp2d8b(:,:)
274 real(r_kind),
allocatable :: tmp3d8b(:,:,:)
280 call ncdata%open(trim(filename),
'r',200)
281 call ncdata%get_dim(this%dimnameEW,this%xlon)
282 call ncdata%get_dim(this%dimnameNS,this%xlat)
283 call ncdata%get_dim(this%dimnameTIME,this%xtime)
285 write(6,*)
'number of longitudes for file ', filename, this%xlon
287 write(6,*)
'number of latitudes for file ', filename, this%xlat
289 numlat = yend-ybegin+1
290 write(6,*)
'number of times for file ', filename, this%xtime
291 numtimes = this%xtime
292 write(6,*)
'the range of Y for this domain is=',ybegin,yend
295 if (wcstart ==
'cold' .OR. itype ==
' FVCOM')
then
296 allocate(this%nwp_mask_c(this%xlon,this%xlat))
297 allocate(this%nwp_sst_c(this%xlon,this%xlat,this%xtime))
298 allocate(this%nwp_ice_c(this%xlon,this%xlat,this%xtime))
299 allocate(this%nwp_sfcT_c(this%xlon,this%xlat,this%xtime))
300 allocate(this%nwp_iceT_c(this%xlon,this%xlat,this%xtime))
301 allocate(this%nwp_zorl_c(this%xlon,this%xlat,this%xtime))
302 allocate(this%nwp_hice_c(this%xlon,this%xlat,this%xtime))
303 allocate(tmp2d8b(this%xlon,this%xlat))
304 allocate(tmp3d8b(this%xlon,this%xlat,this%xtime))
309 write(6,*)
'itype = ', itype
310 write(6,*)
'wcstart = ', wcstart
311 write(6,*)
'xlat = ', this%xlat
312 write(6,*)
'xlon = ', this%xlon
313 write(6,*)
'xtime = ', this%xtime
315 if (this%i_mask .gt. 0)
then
316 call ncdata%get_var(this%varnames(this%i_mask),this%xlon, &
318 this%nwp_mask_c=tmp2d8b
319 mask = this%nwp_mask_c(:,ybegin:yend)
321 if (this%i_sst .gt. 0)
then
322 write(6,*)
'get sst for cold or FVCOM'
323 call ncdata%get_var(this%varnames(this%i_sst),this%xlon, &
324 this%xlat,this%xtime,tmp3d8b)
325 this%nwp_sst_c=tmp3d8b
326 sst = this%nwp_sst_c(:,ybegin:yend,time_to_get)
328 if (this%i_ice .gt. 0)
then
329 call ncdata%get_var(this%varnames(this%i_ice),this%xlon, &
330 this%xlat,this%xtime,tmp3d8b)
331 this%nwp_ice_c=tmp3d8b
332 ice = this%nwp_ice_c(:,ybegin:yend,time_to_get)
334 if (this%i_sfcT .gt. 0)
then
335 call ncdata%get_var(this%varnames(this%i_sfcT),this%xlon, &
336 this%xlat,this%xtime,tmp3d8b)
337 this%nwp_sfcT_c=tmp3d8b
338 sfct = this%nwp_sfcT_c(:,ybegin:yend,time_to_get)
340 if (this%i_iceT .gt. 0)
then
341 call ncdata%get_var(this%varnames(this%i_iceT),this%xlon, &
342 this%xlat,this%xtime,tmp3d8b)
343 this%nwp_iceT_c=tmp3d8b
344 icet = this%nwp_iceT_c(:,ybegin:yend,time_to_get)
346 if (this%i_zorl .gt. 0)
then
347 call ncdata%get_var(this%varnames(this%i_zorl),this%xlon, &
348 this%xlat,this%xtime,tmp3d8b)
349 this%nwp_zorl_c=tmp3d8b
350 zorl = this%nwp_zorl_c(:,ybegin:yend,time_to_get)
352 if (this%i_hice .gt. 0)
then
353 call ncdata%get_var(this%varnames(this%i_hice),this%xlon, &
354 this%xlat,this%xtime,tmp3d8b)
355 this%nwp_hice_c=tmp3d8b
356 hice = this%nwp_hice_c(:,ybegin:yend,time_to_get)
361 else if (wcstart ==
'warm')
then
362 allocate(this%nwp_mask_w(this%xlon,this%xlat))
363 allocate(this%nwp_sst_w(this%xlon,this%xlat))
364 allocate(this%nwp_ice_w(this%xlon,this%xlat))
365 allocate(this%nwp_sfcT_w(this%xlon,this%xlat))
366 allocate(this%nwp_iceT_w(this%xlon,this%xlat))
367 allocate(this%nwp_sfcTl_w(this%xlon,this%xlat))
368 allocate(this%nwp_zorl_w(this%xlon,this%xlat))
369 allocate(this%nwp_hice_w(this%xlon,this%xlat))
373 write(6,*)
'itype = ', itype
374 write(6,*)
'wcstart =', wcstart
375 write(6,*)
'xlat = ', this%xlat
376 write(6,*)
'xlon = ', this%xlon
377 write(6,*)
'xtime = ', this%xtime
379 if (this%i_mask .gt. 0)
then
380 call ncdata%get_var(this%varnames(this%i_mask),this%xlon, &
381 this%xlat,this%nwp_mask_w)
382 mask = this%nwp_mask_w(:,ybegin:yend)
384 if (this%i_sst .gt. 0)
then
385 call ncdata%get_var(this%varnames(this%i_sst),this%xlon, &
386 this%xlat,this%nwp_sst_w)
387 sst = this%nwp_sst_w(:,ybegin:yend)
389 if (this%i_ice .gt. 0)
then
390 call ncdata%get_var(this%varnames(this%i_ice),this%xlon, &
391 this%xlat,this%nwp_ice_w)
392 ice = this%nwp_ice_w(:,ybegin:yend)
394 if (this%i_sfcT .gt. 0)
then
395 call ncdata%get_var(this%varnames(this%i_sfcT),this%xlon, &
396 this%xlat,this%nwp_sfcT_w)
397 sfct = this%nwp_sfcT_w(:,ybegin:yend)
399 if (this%i_iceT .gt. 0)
then
400 call ncdata%get_var(this%varnames(this%i_iceT),this%xlon, &
401 this%xlat,this%nwp_iceT_w)
402 icet = this%nwp_iceT_w(:,ybegin:yend)
404 if (this%i_sfcTl .gt. 0)
then
405 call ncdata%get_var(this%varnames(this%i_sfcTl),this%xlon, &
406 this%xlat,this%nwp_sfcTl_w)
407 sfctl = this%nwp_sfcTl_w(:,ybegin:yend)
409 if (this%i_zorl .gt. 0)
then
410 call ncdata%get_var(this%varnames(this%i_zorl),this%xlon, &
411 this%xlat,this%nwp_zorl_w)
412 zorl = this%nwp_zorl_w(:,ybegin:yend)
414 if (this%i_hice .gt. 0)
then
415 call ncdata%get_var(this%varnames(this%i_hice),this%xlon, &
416 this%xlat,this%nwp_hice_w)
417 hice = this%nwp_hice_w(:,ybegin:yend)
421 write(6,*)
'Choose either "warm" or "cold" for file'
422 stop
'Error in wcstart. Check spelling or if variable was assigned'
428 write(6,*)
'Finished read_nwp'