371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
401 USE pio
402
404
405 implicit none
406
407
408
409 integer, intent(in) :: ng, model
410 character (*), intent(in) :: ncname
411 character (*), intent(in) :: aname
412
413 TYPE (File_desc_t), intent(in) :: pioFile
414 TYPE(T_LBC), intent(in) :: S(4,nLBCvar,Ngrids)
415
416
417
418 integer :: i, ibry, ie, ifield, is, ne, lstr, lvar, status
419
420 character (len= 7) :: string(4)
421 character (len= 8) :: B(4)
422 character (len= 40) :: BryVar1, BryVar2
423 character (len= 70) :: Bstring, line
424 character (len=2816) :: lbc_att
425
426 character (len=*), parameter :: MyFile = &
427 & __FILE__//", lbc_getatt_pio"
428
429
430
431
432
433
434
435
436 status=pio_get_att(piofile, pio_global, trim(aname), lbc_att)
437 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
438 WRITE (
stdout,10) trim(aname), trim(ncname), &
442 END IF
443
444
445
446
451 DO i=1,len(bstring)
452 bstring(i:i)=' '
453 END DO
454 DO i=1,len(line)
455 line(i:i)=' '
456 END DO
457
460 is=index(lbc_att, trim(bryvar1))
463 ie=index(lbc_att, trim(bryvar2))-1
464 ELSE
465 ie=len_trim(lbc_att)
466 END IF
467 IF ((is.gt.0).and.(ie.gt.0).and.(ie.gt.is)) THEN
468 line=lbc_att(is:ie)
469 is=index(line, ':')+1
470 ie=index(line, char(10))-1
471 IF (ie.le.0) THEN
472 ie=len_trim(line)
473 END IF
474 bstring=trim(adjustl(line(is:ie)))
475 ne=min(len_trim(bstring), 28)
476 string(1)=bstring( 1: 7)
477 string(2)=bstring( 8:14)
478 string(3)=bstring(15:21)
479 string(4)=bstring(22:ne)
480 DO ibry=1,4
481 SELECT CASE (trim(string(ibry)))
482 CASE ('Cha')
483 IF (.not.s(ibry,ifield,ng)%Chapman_implicit) THEN
485 WRITE (
stdout,20) b(ibry), &
487 & trim(string(ibry)), &
488 & 'S(',ibry,ifield,ng,')%Chapman_implicit', &
489 & s(ibry,ifield,ng)%Chapman_implicit, &
490 & trim(ncname)
491 END IF
493 END IF
494 CASE ('Che')
495 IF (.not.s(ibry,ifield,ng)%Chapman_explicit) THEN
497 WRITE (
stdout,20) b(ibry), &
499 & trim(string(ibry)), &
500 & 'S(',ibry,ifield,ng,')%Chapman_explicit', &
501 & s(ibry,ifield,ng)%Chapman_explicit, &
502 & trim(ncname)
503 END IF
505 END IF
506
507 CASE ('Cla')
508 IF (.not.s(ibry,ifield,ng)%clamped) THEN
510 WRITE (
stdout,20) b(ibry), &
512 & trim(string(ibry)), &
513 & 'S(',ibry,ifield,ng,')%clamped', &
514 & s(ibry,ifield,ng)%clamped, &
515 & trim(ncname)
516 END IF
518 END IF
519 CASE ('Clo')
520 IF (.not.s(ibry,ifield,ng)%closed) THEN
522 WRITE (
stdout,20) b(ibry), &
524 & trim(string(ibry)), &
525 & 'S(',ibry,ifield,ng,')%closed', &
526 & s(ibry,ifield,ng)%closed, &
527 & trim(ncname)
528 END IF
530 END IF
531 CASE ('Fla')
532 IF (.not.s(ibry,ifield,ng)%Flather) THEN
534 WRITE (
stdout,20) b(ibry), &
536 & trim(string(ibry)), &
537 & 'S(',ibry,ifield,ng,')%Flather', &
538 & s(ibry,ifield,ng)%Flather, &
539 & trim(ncname)
540 END IF
542 END IF
543 CASE ('Gra')
544 IF (.not.s(ibry,ifield,ng)%gradient) THEN
546 WRITE (
stdout,20) b(ibry), &
548 & trim(string(ibry)), &
549 & 'S(',ibry,ifield,ng,')%gradient', &
550 & s(ibry,ifield,ng)%gradient, &
551 & trim(ncname)
552 END IF
554 END IF
555 CASE ('Mix')
556 IF (.not.s(ibry,ifield,ng)%mixed) THEN
558 WRITE (
stdout,20) b(ibry), &
560 & trim(string(ibry)), &
561 & 'S(',ibry,ifield,ng,')%mixed', &
562 & s(ibry,ifield,ng)%mixed, &
563 & trim(ncname)
564 END IF
566 END IF
567 CASE ('Nes')
568 IF (.not.s(ibry,ifield,ng)%nested) THEN
570 WRITE (
stdout,20) b(ibry), &
572 & trim(string(ibry)), &
573 & 'S(',ibry,ifield,ng,')%nested', &
574 & s(ibry,ifield,ng)%nested, &
575 & trim(ncname)
576 END IF
578 END IF
579 CASE ('Per')
580 IF (.not.s(ibry,ifield,ng)%periodic) THEN
582 WRITE (
stdout,20) b(ibry), &
584 & trim(string(ibry)), &
585 & 'S(',ibry,ifield,ng,')%periodic', &
586 & s(ibry,ifield,ng)%periodic, &
587 & trim(ncname)
588 END IF
590 END IF
591 CASE ('Rad')
592 IF (.not.s(ibry,ifield,ng)%radiation) THEN
594 WRITE (
stdout,20) b(ibry), &
596 & trim(string(ibry)), &
597 & 'S(',ibry,ifield,ng,')%radiation', &
598 & s(ibry,ifield,ng)%radiation, &
599 & trim(ncname)
600 END IF
602 END IF
603 CASE ('RadNud')
604 IF (.not.(s(ibry,ifield,ng)%radiation.and. &
605 & s(ibry,ifield,ng)%nudging)) THEN
607 WRITE (
stdout,20) b(ibry), &
609 & trim(string(ibry)), &
610 & 'S(',ibry,ifield,ng,')%radiation', &
611 & s(ibry,ifield,ng)%radiation, &
612 & trim(ncname)
613 END IF
615 END IF
616 CASE ('Red')
617 IF (.not.s(ibry,ifield,ng)%reduced) THEN
619 WRITE (
stdout,20) b(ibry), &
621 & trim(string(ibry)), &
622 & 'S(',ibry,ifield,ng,')%reduced', &
623 & s(ibry,ifield,ng)%reduced, &
624 & trim(ncname)
625 END IF
627 END IF
628 CASE ('Shc')
629 IF (.not.s(ibry,ifield,ng)%Shchepetkin) THEN
631 WRITE (
stdout,20) b(ibry), &
633 & trim(string(ibry)), &
634 & 'S(',ibry,ifield,ng,')%Shchepetkin', &
635 & s(ibry,ifield,ng)%Shchepetkin, &
636 & trim(ncname)
637 END IF
639 END IF
640 CASE DEFAULT
642 WRITE (
stdout,30) b(ibry), &
644 & trim(string(ibry)), trim(ncname)
645 END IF
647 END SELECT
648 END DO
649 END IF
650 END DO
651
652 10 FORMAT (/,' LBC_GETATT_PIO - error while reading global ', &
653 & 'attribute:',2x,a,/,18x,'in restart file:',2x,a,/, &
654 & 18x,'call from:',2x,a, &
655 & /,18x,'Probably global attribute was not found ...', &
656 & /,18x,'restart file needs to be generated by ROMS ', &
657 & 'version 3.6 or higher', &
658 & /,18x,'Alternatively, you may use NO_LBC_ATT at your ', &
659 & 'own risk!')
660 20 FORMAT (/,' LBC_GETATT_PIO - inconsistent ',a,' lateral', &
661 & 'boundary condition for variable: ',2x,a, &
662 & /,18x,'restart file LBC keyword = ',1x,a, &
663 & /,18x,'but assigned structure switch: ', &
664 & 1x,a,i1,',',i2,',',i1,a,' = ',l1, &
665 & /,18x,'check input script LBC keyword for consitency ...',&
666 & /,18x,'restart file:',2x,a)
667 30 FORMAT (/,' LBC_GETATT_PIO - inconsistent ',a,' boundary for ', &
668 & 'variable: ',a,2x,'Keyword = ',a,/,18x,'in input file:', &
669 & 2x,a)
670
671 RETURN