76#if !defined PARALLEL_IO && defined DISTRIBUTE
85 integer,
intent(in) :: ng, model, ncid
86 character (*),
intent(in) :: ncname
87 character (*),
intent(in) :: aname
89 TYPE(
t_lbc),
intent(in) :: S(4,nLBCvar,Ngrids)
93 integer :: i, ibry, ie, ifield, is, ne, lstr, lvar, status
94#if !defined PARALLEL_IO && defined DISTRIBUTE
95 integer,
dimension(2) :: ibuffer
98 character (len= 7) :: string(4)
99 character (len= 8) :: B(4)
100 character (len= 40) :: BryVar1, BryVar2
101 character (len= 70) :: Bstring, line
102 character (len=2816) :: lbc_att
104 character (len=*),
parameter :: MyFile = &
105 & __FILE__//
", lbc_getatt_nf90"
115 status=nf90_get_att(ncid, nf90_global, trim(aname), lbc_att)
116 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
117 WRITE (
stdout,10) trim(aname), trim(ncname), &
124#if !defined PARALLEL_IO && defined DISTRIBUTE
154 is=index(lbc_att, trim(bryvar1))
155 IF (ifield.lt.nlbcvar)
THEN
157 ie=index(lbc_att, trim(bryvar2))-1
161 IF ((is.gt.0).and.(ie.gt.0).and.(ie.gt.is))
THEN
163 is=index(line,
':')+1
164 ie=index(line, char(10))-1
168 bstring=trim(adjustl(line(is:ie)))
169 ne=min(len_trim(bstring), 28)
170 string(1)=bstring( 1: 7)
171 string(2)=bstring( 8:14)
172 string(3)=bstring(15:21)
173 string(4)=bstring(22:ne)
175 SELECT CASE (trim(string(ibry)))
177 IF (.not.s(ibry,ifield,ng)%Chapman_implicit)
THEN
179 WRITE (
stdout,20) b(ibry), &
181 & trim(string(ibry)), &
182 &
'S(',ibry,ifield,ng,
')%Chapman_implicit', &
183 & s(ibry,ifield,ng)%Chapman_implicit, &
189 IF (.not.s(ibry,ifield,ng)%Chapman_explicit)
THEN
191 WRITE (
stdout,20) b(ibry), &
193 & trim(string(ibry)), &
194 &
'S(',ibry,ifield,ng,
')%Chapman_explicit', &
195 & s(ibry,ifield,ng)%Chapman_explicit, &
201 IF (.not.s(ibry,ifield,ng)%clamped)
THEN
203 WRITE (
stdout,20) b(ibry), &
205 & trim(string(ibry)), &
206 &
'S(',ibry,ifield,ng,
')%clamped', &
207 & s(ibry,ifield,ng)%clamped, &
213 IF (.not.s(ibry,ifield,ng)%closed)
THEN
215 WRITE (
stdout,20) b(ibry), &
217 & trim(string(ibry)), &
218 &
'S(',ibry,ifield,ng,
')%closed', &
219 & s(ibry,ifield,ng)%closed, &
225 IF (.not.s(ibry,ifield,ng)%Flather)
THEN
227 WRITE (
stdout,20) b(ibry), &
229 & trim(string(ibry)), &
230 &
'S(',ibry,ifield,ng,
')%Flather', &
231 & s(ibry,ifield,ng)%Flather, &
237 IF (.not.s(ibry,ifield,ng)%gradient)
THEN
239 WRITE (
stdout,20) b(ibry), &
241 & trim(string(ibry)), &
242 &
'S(',ibry,ifield,ng,
')%gradient', &
243 & s(ibry,ifield,ng)%gradient, &
249 IF (.not.s(ibry,ifield,ng)%mixed)
THEN
251 WRITE (
stdout,20) b(ibry), &
253 & trim(string(ibry)), &
254 &
'S(',ibry,ifield,ng,
')%mixed', &
255 & s(ibry,ifield,ng)%mixed, &
261 IF (.not.s(ibry,ifield,ng)%nested)
THEN
263 WRITE (
stdout,20) b(ibry), &
265 & trim(string(ibry)), &
266 &
'S(',ibry,ifield,ng,
')%nested', &
267 & s(ibry,ifield,ng)%nested, &
273 IF (.not.s(ibry,ifield,ng)%periodic)
THEN
275 WRITE (
stdout,20) b(ibry), &
277 & trim(string(ibry)), &
278 &
'S(',ibry,ifield,ng,
')%periodic', &
279 & s(ibry,ifield,ng)%periodic, &
285 IF (.not.s(ibry,ifield,ng)%radiation)
THEN
287 WRITE (
stdout,20) b(ibry), &
289 & trim(string(ibry)), &
290 &
'S(',ibry,ifield,ng,
')%radiation', &
291 & s(ibry,ifield,ng)%radiation, &
297 IF (.not.(s(ibry,ifield,ng)%radiation.and. &
298 & s(ibry,ifield,ng)%nudging))
THEN
300 WRITE (
stdout,20) b(ibry), &
302 & trim(string(ibry)), &
303 &
'S(',ibry,ifield,ng,
')%radiation', &
304 & s(ibry,ifield,ng)%radiation, &
310 IF (.not.s(ibry,ifield,ng)%reduced)
THEN
312 WRITE (
stdout,20) b(ibry), &
314 & trim(string(ibry)), &
315 &
'S(',ibry,ifield,ng,
')%reduced', &
316 & s(ibry,ifield,ng)%reduced, &
322 IF (.not.s(ibry,ifield,ng)%Shchepetkin)
THEN
324 WRITE (
stdout,20) b(ibry), &
326 & trim(string(ibry)), &
327 &
'S(',ibry,ifield,ng,
')%Shchepetkin', &
328 & s(ibry,ifield,ng)%Shchepetkin, &
335 WRITE (
stdout,30) b(ibry), &
337 & trim(string(ibry)), trim(ncname)
345 10
FORMAT (/,
' LBC_GETATT_NF90 - error while reading global ', &
346 &
'attribute:',2x,a,/,19x,
'in restart file:',2x,a,/, &
347 & 19x,
'call from:',2x,a, &
348 & /,19x,
'Probably global attribute was not found ...', &
349 & /,19x,
'restart file needs to be generated by ROMS ', &
350 &
'version 3.6 or higher', &
351 & /,19x,
'Alternatively, you may use NO_LBC_ATT at your ', &
353 20
FORMAT (/,
' LBC_GETATT_NF90 - inconsistent ',a,
' lateral', &
354 &
'boundary condition for variable: ',2x,a, &
355 & /,19x,
'restart file LBC keyword = ',1x,a, &
356 & /,19x,
'but assigned structure switch: ', &
357 & 1x,a,i1,
',',i2,
',',i1,a,
' = ',l1, &
358 & /,19x,
'check input script LBC keyword for consitency ...',&
359 & /,19x,
'restart file:',2x,a)
360 30
FORMAT (/,
' LBC_GETATT_NF90 - inconsistent ',a,
' boundary for ', &
361 &
'variable: ',a,2x,
'Keyword = ',a,/,19x,
'in input file:', &
409 integer,
intent(in) :: ng, model
410 character (*),
intent(in) :: ncname
411 character (*),
intent(in) :: aname
413 TYPE (File_desc_t),
intent(in) :: pioFile
414 TYPE(
t_lbc),
intent(in) :: S(4,nLBCvar,Ngrids)
418 integer :: i, ibry, ie, ifield, is, ne, lstr, lvar, status
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
426 character (len=*),
parameter :: MyFile = &
427 & __FILE__//
", lbc_getatt_pio"
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), &
460 is=index(lbc_att, trim(bryvar1))
461 IF (ifield.lt.nlbcvar)
THEN
463 ie=index(lbc_att, trim(bryvar2))-1
467 IF ((is.gt.0).and.(ie.gt.0).and.(ie.gt.is))
THEN
469 is=index(line,
':')+1
470 ie=index(line, char(10))-1
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)
481 SELECT CASE (trim(string(ibry)))
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, &
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, &
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, &
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, &
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, &
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, &
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, &
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, &
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, &
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, &
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, &
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, &
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, &
642 WRITE (
stdout,30) b(ibry), &
644 & trim(string(ibry)), trim(ncname)
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 ', &
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:', &
711 integer,
intent(in) :: ng, ncid
712 integer,
intent(out) :: status
714 character (*),
intent(in) :: ncname
715 character (*),
intent(in) :: aname
717 TYPE(
t_lbc),
intent(in) :: S(4,nLBCvar,Ngrids)
721 integer :: i, ibry, ie, ifield, is, lstr, lvar
723 character (len= 1) :: newline
724 character (len= 7) :: string(4)
725 character (len= 21) :: frmt
726 character (len= 100) :: line
727 character (len=2816) :: lbc_att
729 character (len=*),
parameter :: MyFile = &
730 & __FILE__//
", lbc_putatt_nf90"
740 IF (
idbvar(ifield).gt.0)
THEN
744 WRITE (frmt,10)
"(a,':',t", lvar+4,
",5a)"
750 lstr=len_trim(newline)
754 lbc_att(1:lstr)=newline(1:lstr)
756 WRITE (line,frmt)
'EDGE', &
764 lbc_att(is:ie)=line(1:lstr)
770 lstr=(nlbcvar+1)*(29+lvar+4)+1
771 IF (len(lbc_att).lt.lstr)
THEN
773 WRITE (
stdout,20) len(lbc_att), lstr
774 20
FORMAT (/,
' LBC_PUTATT_NF90 - Length of local string lbc_att',&
775 &
' too small',/,19x,
'Current = ',i5,
' Needed = ',i5)
784 IF (
idbvar(ifield).gt.0)
THEN
786 IF (s(ibry,ifield,ng)%Chapman_explicit)
THEN
788 ELSE IF (s(ibry,ifield,ng)%Chapman_implicit)
THEN
790 ELSE IF (s(ibry,ifield,ng)%clamped)
THEN
792 ELSE IF (s(ibry,ifield,ng)%closed)
THEN
794 ELSE IF (s(ibry,ifield,ng)%Flather)
THEN
796 ELSE IF (s(ibry,ifield,ng)%gradient)
THEN
798 ELSE IF (s(ibry,ifield,ng)%nested)
THEN
800 ELSE IF (s(ibry,ifield,ng)%periodic)
THEN
802 ELSE IF (s(ibry,ifield,ng)%radiation)
THEN
803 IF (s(ibry,ifield,ng)%nudging)
THEN
804 string(ibry)=
'RadNud '
808 ELSE IF (s(ibry,ifield,ng)%reduced)
THEN
810 ELSE IF (s(ibry,ifield,ng)%Shchepetkin)
THEN
814 IF (ifield.eq.nlbcvar) newline=
' '
823 lbc_att(is:ie)=line(1:lstr)
830 status=nf90_put_att(ncid, nf90_global, trim(aname), &
832 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
882 integer,
intent(in) :: ng
883 integer,
intent(out) :: status
885 character (*),
intent(in) :: ncname
886 character (*),
intent(in) :: aname
888 TYPE (File_desc_t),
intent(in) :: pioFile
889 TYPE(
t_lbc),
intent(in) :: S(4,nLBCvar,Ngrids)
893 integer :: i, ibry, ie, ifield, is, lstr, lvar
895 character (len= 1) :: newline
896 character (len= 7) :: string(4)
897 character (len= 21) :: frmt
898 character (len= 100) :: line
899 character (len=2816) :: lbc_att
901 character (len=*),
parameter :: MyFile = &
902 & __FILE__//
", lbc_putatt_pio"
912 IF (
idbvar(ifield).gt.0)
THEN
916 WRITE (frmt,10)
"(a,':',t", lvar+4,
",5a)"
922 lstr=len_trim(newline)
926 lbc_att(1:lstr)=newline(1:lstr)
928 WRITE (line,frmt)
'EDGE', &
936 lbc_att(is:ie)=line(1:lstr)
942 lstr=(nlbcvar+1)*(29+lvar+4)+1
943 IF (len(lbc_att).lt.lstr)
THEN
945 WRITE (
stdout,20) len(lbc_att), lstr
946 20
FORMAT (/,
' LBC_PUTATT_PIO - Length of local string lbc_att', &
947 &
' too small',/,18x,
'Current = ',i5,
' Needed = ',i5)
956 IF (
idbvar(ifield).gt.0)
THEN
958 IF (s(ibry,ifield,ng)%Chapman_explicit)
THEN
960 ELSE IF (s(ibry,ifield,ng)%Chapman_implicit)
THEN
962 ELSE IF (s(ibry,ifield,ng)%clamped)
THEN
964 ELSE IF (s(ibry,ifield,ng)%closed)
THEN
966 ELSE IF (s(ibry,ifield,ng)%Flather)
THEN
968 ELSE IF (s(ibry,ifield,ng)%gradient)
THEN
970 ELSE IF (s(ibry,ifield,ng)%nested)
THEN
972 ELSE IF (s(ibry,ifield,ng)%periodic)
THEN
974 ELSE IF (s(ibry,ifield,ng)%radiation)
THEN
975 IF (s(ibry,ifield,ng)%nudging)
THEN
976 string(ibry)=
'RadNud '
980 ELSE IF (s(ibry,ifield,ng)%reduced)
THEN
982 ELSE IF (s(ibry,ifield,ng)%Shchepetkin)
THEN
986 IF (ifield.eq.nlbcvar) newline=
' '
995 lbc_att(is:ie)=line(1:lstr)
1002 status=pio_put_att(piofile, pio_global, trim(aname), &
1004 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
1037 integer,
intent(in) :: ifield, iunit
1039 TYPE(
t_lbc),
intent(in) :: S(4,nLBCvar,Ngrids)
1045 character (len=11) :: string(4,Ngrids)
1055 IF (s(ibry,ifield,ng)%Chapman_explicit)
THEN
1056 string(ibry,ng)=
'Chapman Exp'
1057 ELSE IF (s(ibry,ifield,ng)%Chapman_implicit)
THEN
1058 string(ibry,ng)=
'Chapman Imp'
1059 ELSE IF (s(ibry,ifield,ng)%clamped)
THEN
1060 string(ibry,ng)=
'Clamped '
1061 ELSE IF (s(ibry,ifield,ng)%closed)
THEN
1062 string(ibry,ng)=
'Closed '
1063 ELSE IF (s(ibry,ifield,ng)%Flather)
THEN
1064 string(ibry,ng)=
'Flather '
1065 ELSE IF (s(ibry,ifield,ng)%gradient)
THEN
1066 string(ibry,ng)=
'Gradient '
1067 ELSE IF (s(ibry,ifield,ng)%nested)
THEN
1068 string(ibry,ng)=
'Nested '
1069 ELSE IF (s(ibry,ifield,ng)%periodic)
THEN
1070 string(ibry,ng)=
'Periodic '
1071 ELSE IF (s(ibry,ifield,ng)%radiation)
THEN
1072 IF (s(ibry,ifield,ng)%nudging)
THEN
1073 string(ibry,ng)=
'Rad + Nud '
1075 string(ibry,ng)=
'Radiation '
1077 ELSE IF (s(ibry,ifield,ng)%reduced)
THEN
1078 string(ibry,ng)=
'Reduced '
1079 ELSE IF (s(ibry,ifield,ng)%Shchepetkin)
THEN
1080 string(ibry,ng)=
'Shchepetkin'
1089 WRITE (iunit,10) trim(
vname(1,
idbvar(ifield))), ng, &
1090 & trim(string(1,ng)), &
1091 & trim(string(2,ng)), &
1092 & trim(string(3,ng)), &
1093 & trim(string(4,ng))
1095 WRITE (iunit,20) ng, &
1096 & trim(string(1,ng)), &
1097 & trim(string(2,ng)), &
1098 & trim(string(3,ng)), &
1099 & trim(string(4,ng))
1107 IF (.not.s(
iwest,ifield,ng)%periodic.and. &
1108 & s(
ieast,ifield,ng)%periodic)
THEN
1109 WRITE (iunit,30)
'Western Edge boundary', &
1112 ELSE IF (.not.s(
ieast,ifield,ng)%periodic.and. &
1113 & s(
iwest,ifield,ng)%periodic)
THEN
1114 WRITE (iunit,30)
'Eastern Edge boundary', &
1117 ELSE IF (.not.s(
inorth,ifield,ng)%periodic.and. &
1118 & s(
isouth,ifield,ng)%periodic)
THEN
1119 WRITE (iunit,30)
'Northern Edge boundary', &
1122 ELSE IF (.not.s(
isouth,ifield,ng)%periodic.and. &
1123 & s(
inorth,ifield,ng)%periodic)
THEN
1124 WRITE (iunit,30)
'Southern Edge boundary', &
1130 10
FORMAT (/,1x,a,t26,i2,t31,a,t44,a,t57,a,t70,a)
1131 20
FORMAT (t26,i2,t31,a,t44,a,t57,a,t70,a)
1132 30
FORMAT (/,
' LBC_REPORT - illegal configuration: The ',a, &
1133 &
' needs to be periodic too!',/,14x,
'Variable: ',a,3x, &