337
338
340
341
342
343 integer, intent(in) :: ng, tile, model, IniRec
344 integer, intent(in) :: LBi, UBi, LBj, UBj
345
346
347
348 integer :: i, status
349 integer :: index_pmask, index_rmask, index_umask, index_vmask
350 integer :: Vsize(4)
351
352 real(dp), parameter :: Fscl = 1.0_r8
353
354 real(r8) :: Fmax, Fmin
355
356 character (len=256) :: ncname
357
358 character (len=*), parameter :: MyFile = &
359 & __FILE__//", get_wetdry_pio"
360
361 TYPE (IO_Desc_t), pointer :: ioDesc
362 TYPE (My_VarDesc), pointer :: pioVar
363
364 sourcefile=myfile
365
366
367
368
369
370
371 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
372 ncname=ini(ng)%name
373
374
375
376 IF (ini(ng)%pioFile%fh.eq.-1) THEN
378 IF (founderror(exit_flag, noerror, __line__, myfile)) THEN
379 WRITE (stdout,10) trim(ncname)
380 RETURN
381 END IF
382 END IF
383
384
385
387 & piofile = ini(ng)%pioFile)
388 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
389
390
391
392 CALL netcdf_inq_var (ng, model, ncname, &
393 & piofile = ini(ng)%pioFile)
394 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
395
396
397
398
399
400 IF (.not.find_string(var_name,n_var,trim(vname(1,idpwet)), &
401 & index_pmask)) THEN
402 IF (master) WRITE (stdout,20) trim(vname(1,idpwet)), &
403 & trim(ncname)
404 exit_flag=2
405 RETURN
406 END IF
407
408 IF (.not.find_string(var_name,n_var,trim(vname(1,idrwet)), &
409 & index_rmask)) THEN
410 IF (master) WRITE (stdout,20) trim(vname(1,idrwet)), &
411 & trim(ncname)
412 exit_flag=2
413 RETURN
414 END IF
415
416 IF (.not.find_string(var_name,n_var,trim(vname(1,iduwet)), &
417 & index_umask)) THEN
418 IF (master) WRITE (stdout,20) trim(vname(1,iduwet)), &
419 & trim(ncname)
420 exit_flag=2
421 RETURN
422 END IF
423
424 IF (.not.find_string(var_name,n_var,trim(vname(1,idvwet)), &
425 & index_vmask)) THEN
426 IF (master) WRITE (stdout,20) trim(vname(1,idvwet)), &
427 & trim(ncname)
428 exit_flag=2
429 RETURN
430 END IF
431
432
433
434
435
436
437
438
439 DO i=1,4
440 vsize(i)=0
441 END DO
442
443
444
446 IF (kind(grid(ng)%pmask_wet).eq.8) THEN
447 piovar%dkind=pio_double
449 ELSE
450 piovar%dkind=pio_real
452 END IF
453 piovar%gtype=p2dvar
454
455 status=nf_fread2d(ng, model, ncname, ini(ng)%pioFile, &
456 & vname(1,idpwet), piovar, &
457 & inirec, iodesc, vsize, &
458 & lbi, ubi, lbj, ubj, &
459 & fscl, fmin, fmax, &
460 & grid(ng) % pmask, &
461 & grid(ng) % pmask_wet)
462 IF (founderror(status, nf90_noerr, __line__, myfile)) THEN
463 IF (master) WRITE (stdout,30) trim(vname(1,idpwet)), &
464 & trim(ncname)
465 exit_flag=2
466 ioerror=status
467 RETURN
468 ELSE
469 IF (master) THEN
470 WRITE (stdout,40) trim(vname(2,idpwet)), ng, trim(ncname), &
471 & fmin, fmax
472 END IF
473 END IF
474
475
476
478 IF (kind(grid(ng)%rmask_wet).eq.8) THEN
479 piovar%dkind=pio_double
481 ELSE
482 piovar%dkind=pio_real
484 END IF
485 piovar%gtype=r2dvar
486
487 status=nf_fread2d(ng, model, ncname, ini(ng)%pioFile, &
488 & vname(1,idrwet), piovar, &
489 & inirec, iodesc, vsize, &
490 & lbi, ubi, lbj, ubj, &
491 & fscl, fmin, fmax, &
492 & grid(ng) % rmask, &
493 & grid(ng) % rmask_wet)
494 IF (founderror(status, nf90_noerr, __line__, myfile)) THEN
495 IF (master) WRITE (stdout,30) trim(vname(1,idrwet)), &
496 & trim(ncname)
497 exit_flag=2
498 ioerror=status
499 RETURN
500 ELSE
501 IF (master) THEN
502 WRITE (stdout,40) trim(vname(2,idrwet)), ng, trim(ncname), &
503 & fmin, fmax
504 END IF
505 END IF
506
507
508
510 IF (kind(grid(ng)%umask_wet).eq.8) THEN
511 piovar%dkind=pio_double
513 ELSE
514 piovar%dkind=pio_real
516 END IF
517 piovar%gtype=u2dvar
518
519 status=nf_fread2d(ng, model, ncname, ini(ng)%pioFile, &
520 & vname(1,iduwet), piovar, &
521 & inirec, iodesc, vsize, &
522 & lbi, ubi, lbj, ubj, &
523 & fscl, fmin, fmax, &
524 & grid(ng) % umask, &
525 & grid(ng) % umask_wet)
526 IF (founderror(status, nf90_noerr, __line__, myfile)) THEN
527 IF (master) WRITE (stdout,30) trim(vname(1,iduwet)), &
528 & trim(ncname)
529 exit_flag=2
530 ioerror=status
531 RETURN
532 ELSE
533 IF (master) THEN
534 WRITE (stdout,40) trim(vname(2,iduwet)), ng, trim(ncname), &
535 & fmin, fmax
536 END IF
537 END IF
538
539
540
542 IF (kind(grid(ng)%vmask_wet).eq.8) THEN
543 piovar%dkind=pio_double
545 ELSE
546 piovar%dkind=pio_real
548 END IF
549 piovar%gtype=v2dvar
550
551 status=nf_fread2d(ng, model, ncname, ini(ng)%pioFile, &
552 & vname(1,idvwet), piovar, &
553 & inirec, iodesc, vsize, &
554 & lbi, ubi, lbj, ubj, &
555 & fscl, fmin, fmax, &
556 & grid(ng) % vmask, &
557 & grid(ng) % vmask_wet)
558 IF (founderror(status, nf90_noerr, __line__, myfile)) THEN
559 IF (master) WRITE (stdout,30) trim(vname(1,idvwet)), &
560 & trim(ncname)
561 exit_flag=2
562 ioerror=status
563 RETURN
564 ELSE
565 IF (master) THEN
566 WRITE (stdout,40) trim(vname(2,idvwet)), ng, trim(ncname), &
567 & fmin, fmax
568 END IF
569 END IF
570
571
572
573 IF (ewperiodic(ng).or.nsperiodic(ng)) THEN
574 CALL exchange_p2d_tile (ng, tile, &
575 & lbi, ubi, lbj, ubj, &
576 & grid(ng) % pmask_wet)
577 CALL exchange_r2d_tile (ng, tile, &
578 & lbi, ubi, lbj, ubj, &
579 & grid(ng) % rmask_wet)
580 CALL exchange_u2d_tile (ng, tile, &
581 & lbi, ubi, lbj, ubj, &
582 & grid(ng) % umask_wet)
583 CALL exchange_v2d_tile (ng, tile, &
584 & lbi, ubi, lbj, ubj, &
585 & grid(ng) % vmask_wet)
586 END IF
587
588 CALL mp_exchange2d (ng, tile, model, 4, &
589 & lbi, ubi, lbj, ubj, &
590 & nghostpoints, &
591 & ewperiodic(ng), nsperiodic(ng), &
592 & grid(ng) % pmask_wet, &
593 & grid(ng) % rmask_wet, &
594 & grid(ng) % umask_wet, &
595 & grid(ng) % vmask_wet)
596
597 10 FORMAT (/,' GET_WETDRY_PIO - unable to open grid NetCDF', &
598 & ' file: ',a)
599 20 FORMAT (/,' GET_WETDRY_PIO - unable to find grid variable: ',a, &
600 & /,18x,'in NetCDF file: ',a)
601 30 FORMAT (/,' GET_WETDRY_PIO - error while reading variable: ',a, &
602 & /,18x,'in NetCDF file: ',a)
603 40 FORMAT (2x,'GET_WETDRY_PIO - ',a,/,23x, &
604 & '(Grid = ',i2.2,', File: ',a,')',/,23x, &
605 & '(Min = ', 1p,e15.8,0p,' Max = ',1p,e15.8,0p,')')
606
607 RETURN
type(io_desc_t), dimension(:), pointer iodesc_sp_u2dvar
type(var_desc_t), dimension(:), pointer var_desc
type(io_desc_t), dimension(:), pointer iodesc_sp_r2dvar
subroutine, public pio_netcdf_open(ng, model, ncname, omode, piofile)
type(io_desc_t), dimension(:), pointer iodesc_dp_u2dvar
type(io_desc_t), dimension(:), pointer iodesc_dp_p2dvar
subroutine, public pio_netcdf_check_dim(ng, model, ncname, piofile)
type(io_desc_t), dimension(:), pointer iodesc_dp_v2dvar
type(io_desc_t), dimension(:), pointer iodesc_dp_r2dvar
type(io_desc_t), dimension(:), pointer iodesc_sp_p2dvar
type(io_desc_t), dimension(:), pointer iodesc_sp_v2dvar