72#ifdef SINGLE_PRECISION
91 integer,
parameter ::
ncval = 200
92 integer,
parameter ::
nrval = 100
115 character (len=*),
intent(in) :: line_text
117 character (len=*),
intent(inout) :: keyword
119 integer,
intent(inout) :: nval
121 character (len=*),
intent(inout) :: cval(:)
123 real(
dp),
intent(inout) :: rval(:)
127 logical :: isstring, kextract, decode, nested
128 integer :: iblank, icomm, icont, ipipe, kstr, kend, linp
129 integer :: lend, lens, lstr, lval, nmul, schar
130 integer :: copies, i, ic, ie, is, j, status
132 integer,
dimension(20) :: imul
136 character (len=256) :: vstring, inpline, line, string
216 inpline=trim(adjustl(line_text))
217 linp=len_trim(inpline)
218 DO i=1,len_trim(inpline)
219 j=ichar(inpline(i:i))
221 inpline(i:i)=char(32)
224 inpline=trim(inpline)
229 IF ((linp.gt.0).and.(inpline(1:1).ne.char(33)))
THEN
230 icomm=index(inpline,char(33),back=.false.)
231 IF (icomm.gt.0) linp=icomm-1
232 line=trim(adjustl(inpline(1:linp)))
235 line=trim(adjustl(inpline))
244 IF ((linp.gt.0).and.(line(1:1).ne.char(33)))
THEN
247 kend=index(line,char(61),back=.false.)-1
248 lstr=index(line,char(61),back=.true.)+1
253 IF ((lstr-kend).eq.3) nested=.true.
260 keyword=line(kstr:kend)
274 icont=index(line,char(92 ),back=.false.)
275 ipipe=index(line,char(124),back=.false.)
276 IF (icont.gt.0) lend=icont-1
277 IF (ipipe.gt.0) lend=ipipe-1
278 vstring=adjustl(line(lstr:lend))
279 lval=len_trim(vstring)
285 IF (trim(keyword).eq.
'TITLE')
THEN
287 cval(nval)=vstring(1:lval)
296 IF (vstring(i:i).eq.char(42))
THEN
310 IF (vstring(i:i).eq.char(32))
THEN
311 IF (vstring(i+1:i+1).ne.char(32)) decode=.true.
316 IF (decode.or.(i.eq.lval))
THEN
323 schar=ichar(vstring(is:is))
324 IF (((48.le.schar).and.(schar.le.57)).or. &
325 & (schar.eq.43).or.(schar.eq.45))
THEN
326 IF ((nmul.gt.0).and. &
327 & (is.lt.imul(ic)).and.(imul(ic).lt.ie))
THEN
328 READ (vstring(is:imul(ic)-1),*) copies
329 schar=ichar(vstring(imul(ic)+1:imul(ic)+1))
330 IF ((43.le.schar).and.(schar.le.57))
THEN
331 READ (vstring(imul(ic)+1:ie),*) rval(nval)
333 rval(nval+j)=rval(nval)
336 string=vstring(imul(ic)+1:ie)
337 lens=len_trim(string)
338 cval(nval)=string(1:lens)
340 cval(nval+j)=cval(nval)
346 string=vstring(is:ie)
347 lens=len_trim(string)
348 READ (string(1:lens),*) rval(nval)
354 IF ((nmul.gt.0).and. &
355 & (is.lt.imul(ic)).and.(imul(ic).lt.ie))
THEN
356 READ (vstring(is:imul(ic)-1),*) copies
357 cval(nval)=vstring(imul(ic)+1:ie)
359 cval(nval+j)=cval(nval)
364 string=vstring(is:ie)
365 cval(nval)=trim(adjustl(string))
383 FUNCTION find_file (ng, out, fname, KeyWord)
RESULT (foundit)
405 integer,
intent(in) :: ng, out
407 character (len=*),
intent(in) :: fname
408 character (len=*),
intent(in) :: keyword
412 logical :: foundit, isurl
414 integer :: lstr, ncid
416 character (len=*),
parameter :: myfile = &
417 & __FILE__//
", find_file"
432 WRITE (
stdout,10) trim(keyword)
433 10
FORMAT (/,
' FIND_FILE - empty file name string ', &
434 &
'for standard input script KeyWord: ',a)
444 IF (index(trim(fname),
'http:').ne.0)
THEN
451 INQUIRE (file=trim(fname), exist=foundit)
466 IF (.not.foundit)
THEN
467 IF (
master)
WRITE (out,20) ng, trim(fname)
468 20
FORMAT (/,
' FIND_FILE - Grid ',i2.2, &
469 &
', cannot find input file: ',a)
476 FUNCTION load_0d_i (Ninp, Vinp, Nout, Vout)
RESULT (Nval)
498 integer,
intent(in) :: ninp, nout
499 real(
dp),
intent(in) :: vinp(:)
501 integer,
intent(out) :: vout
519 FUNCTION load_1d_i (Ninp, Vinp, Nout, Vout)
RESULT (Nval)
540 integer,
intent(in) :: ninp, nout
541 real(
dp),
intent(in) :: vinp(:)
543 integer,
intent(out) :: vout(:)
547 integer ::
nstr, i, ic
558 IF (ninp.le.nout)
THEN
563 IF (nout.gt.ninp)
THEN
567 vout(i)=int(vinp(ninp))
581 FUNCTION load_2d_i (Ninp, Vinp, Iout, Jout, Vout)
RESULT (Nval)
603 integer,
intent(in) :: ninp, iout, jout
604 real(
dp),
intent(in) :: vinp(:)
606 integer,
intent(out) :: vout(:,:)
610 integer ::
nstr, i, ic
611 integer :: nout, nval
613 integer,
dimension(Iout*Jout) :: vwrk
624 IF (ninp.le.nout)
THEN
629 IF (nout.gt.ninp)
THEN
633 vwrk(i)=int(vinp(ninp))
642 vout=reshape(vwrk,(/iout,jout/))
648 FUNCTION load_3d_i (Ninp, Vinp, Iout, Jout, Kout, Vout) &
672 integer,
intent(in) :: ninp, iout, jout, kout
673 real(
dp),
intent(in) :: vinp(:)
675 integer,
intent(out) :: vout(:,:,:)
679 integer ::
nstr, i, ic
680 integer :: nout, nval
682 integer,
dimension(Iout*Jout*Kout) :: vwrk
693 IF (ninp.le.nout)
THEN
698 IF (nout.gt.ninp)
THEN
702 vwrk(i)=int(vinp(ninp))
711 vout=reshape(vwrk,(/iout,jout,kout/))
717 FUNCTION load_0d_l (Ninp, Vinp, Nout, Vout)
RESULT (Nval)
739 integer,
intent(in) :: ninp, nout
740 character (len=*),
intent(in) :: vinp(:)
742 logical,
intent(out) :: vout
754 IF ((vinp(ic)(1:1).eq.
'T').or. &
755 & (vinp(ic)(1:1).eq.
't'))
THEN
765 FUNCTION load_1d_l (Ninp, Vinp, Nout, Vout)
RESULT (Nval)
786 integer,
intent(in) :: ninp, nout
787 character (len=*),
intent(in) :: vinp(:)
789 logical,
intent(out) :: vout(:)
795 integer ::
nstr, i, ic
807 IF (ninp.le.nout)
THEN
810 IF ((vinp(i)(1:1).eq.
'T').or. &
811 & (vinp(i)(1:1).eq.
't'))
THEN
818 IF (nout.gt.ninp)
THEN
828 IF ((vinp(i)(1:1).eq.
'T').or. &
829 & (vinp(i)(1:1).eq.
't'))
THEN
841 FUNCTION load_2d_l (Ninp, Vinp, Iout, Jout, Vout)
RESULT (Nval)
863 integer,
intent(in) :: ninp, iout, jout
864 character (len=*),
intent(in) :: vinp(:)
866 logical,
intent(out) :: vout(:,:)
872 logical,
dimension(Iout*Jout) :: vwrk
874 integer ::
nstr, i, ic
875 integer :: nout, nval
887 IF (ninp.le.nout)
THEN
890 IF ((vinp(i)(1:1).eq.
'T').or. &
891 & (vinp(i)(1:1).eq.
't'))
THEN
898 IF (nout.gt.ninp)
THEN
908 IF ((vinp(i)(1:1).eq.
'T').or. &
909 & (vinp(i)(1:1).eq.
't'))
THEN
916 vout=reshape(vwrk,(/iout,jout/))
922 FUNCTION load_3d_l (Ninp, Vinp, Iout, Jout, Kout, Vout) &
946 integer,
intent(in) :: ninp, iout, jout, kout
947 character (len=*),
intent(in) :: vinp(:)
949 logical,
intent(out) :: vout(:,:,:)
955 logical,
dimension(Iout*Jout*Kout) :: vwrk
957 integer ::
nstr, i, ic
958 integer :: nout, nval
970 IF (ninp.le.nout)
THEN
973 IF ((vinp(i)(1:1).eq.
'T').or. &
974 & (vinp(i)(1:1).eq.
't'))
THEN
981 IF (nout.gt.ninp)
THEN
991 IF ((vinp(i)(1:1).eq.
'T').or. &
992 & (vinp(i)(1:1).eq.
't'))
THEN
999 vout=reshape(vwrk,(/iout,jout,kout/))
1005#ifdef SINGLE_PRECISION
1029 integer,
intent(in) :: ninp, nout
1030 real(
dp),
intent(in) :: vinp(:)
1032 real(
dp),
intent(out) :: vout
1072 integer,
intent(in) :: ninp, nout
1073 real(
dp),
intent(in) :: vinp(:)
1075 real(
dp),
intent(out) :: vout(:)
1079 integer ::
nstr, i, ic
1090 IF (ninp.le.nout)
THEN
1095 IF (nout.gt.ninp)
THEN
1136 integer,
intent(in) :: ninp, iout, jout
1137 real(
dp),
intent(in) :: vinp(:)
1139 real(
dp),
intent(out) :: vout(:,:)
1143 integer ::
nstr, i, ic
1144 integer :: nout, nval
1146 real(
dp),
dimension(Iout*Jout) :: vwrk
1157 IF (ninp.le.nout)
THEN
1162 IF (nout.gt.ninp)
THEN
1175 vout=reshape(vwrk,(/iout,jout/))
1206 integer,
intent(in) :: ninp, iout, jout, kout
1207 real(
dp),
intent(in) :: vinp(:)
1209 real(
dp),
intent(out) :: vout(:,:,:)
1213 integer ::
nstr, i, ic
1214 integer :: nout, nval
1216 real(
dp),
dimension(Iout*Jout*Kout) :: vwrk
1227 IF (ninp.le.nout)
THEN
1232 IF (nout.gt.ninp)
THEN
1245 vout=reshape(vwrk,(/iout,jout,kout/))
1274 integer,
intent(in) :: ninp, nout
1275 real(
dp),
intent(in) :: vinp(:)
1277 real(
r8),
intent(out) :: vout
1289#ifdef SINGLE_PRECISION
1290 vout=real(vinp(ic),
r8)
1321 integer,
intent(in) :: ninp, nout
1322 real(
dp),
intent(in) :: vinp(:)
1324 real(
r8),
intent(out) :: vout(:)
1328 integer ::
nstr, i, ic
1339 IF (ninp.le.nout)
THEN
1342#ifdef SINGLE_PRECISION
1343 vout(i)=real(vinp(i),
r8)
1348 IF (nout.gt.ninp)
THEN
1352#ifdef SINGLE_PRECISION
1353 vout(i)=real(vinp(ninp),
r8)
1362#ifdef SINGLE_PRECISION
1363 vout(i)=real(vinp(i),
r8)
1397 integer,
intent(in) :: ninp, iout, jout
1398 real(
dp),
intent(in) :: vinp(:)
1400 real(
r8),
intent(out) :: vout(:,:)
1404 integer ::
nstr, i, ic
1405 integer :: nout, nval
1407 real(
r8),
dimension(Iout*Jout) :: vwrk
1418 IF (ninp.le.nout)
THEN
1421#ifdef SINGLE_PRECISION
1422 vwrk(i)=real(vinp(i),
r8)
1427 IF (nout.gt.ninp)
THEN
1431#ifdef SINGLE_PRECISION
1432 vwrk(i)=real(vinp(ninp),
r8)
1441#ifdef SINGLE_PRECISION
1442 vwrk(i)=real(vinp(i),
r8)
1448 vout=reshape(vwrk,(/iout,jout/))
1479 integer,
intent(in) :: ninp, iout, jout, kout
1480 real(
dp),
intent(in) :: vinp(:)
1482 real(
r8),
intent(out) :: vout(:,:,:)
1486 integer ::
nstr, i, ic
1487 integer :: nout, nval
1489 real(
r8),
dimension(Iout*Jout*Kout) :: vwrk
1500 IF (ninp.le.nout)
THEN
1503#ifdef SINGLE_PRECISION
1504 vwrk(i)=real(vinp(i),
r8)
1509 IF (nout.gt.ninp)
THEN
1513#ifdef SINGLE_PRECISION
1514 vwrk(i)=real(vinp(ninp),
r8)
1523#ifdef SINGLE_PRECISION
1524 vwrk(i)=real(vinp(i),
r8)
1530 vout=reshape(vwrk,(/iout,jout,kout/))
1536 FUNCTION load_lbc (Ninp, Vinp, line, nline, ifield, igrid, &
1537 & iTrcStr, iTrcEnd, svname, S)
1568 integer,
intent(in) :: ninp, ifield, itrcstr, itrcend
1569 integer,
intent(inout) :: igrid, nline
1571 character (len=256),
intent(in) :: line
1572 character (len=256),
intent(in) :: vinp(ninp)
1573 character (len=* ),
intent(in) :: svname
1579 integer :: icont, i, ib, ic
1582 character (len=10) :: bstring(4), string
1590 icont=index(trim(line),char(92) ,back=.false.)
1597 bstring(1)=trim(vinp(i+1))
1598 bstring(2)=trim(vinp(i+2))
1599 bstring(3)=trim(vinp(i+3))
1600 bstring(4)=trim(vinp(i+4))
1604 IF (icont.gt.0)
THEN
1613 IF ((0.lt.ifield).and.(ifield.le.
nlbcvar))
THEN
1616 SELECT CASE (trim(string))
1618 s(ib,ifield,igrid)%Chapman_implicit = .true.
1620 s(ib,ifield,igrid)%Chapman_explicit = .true.
1622 s(ib,ifield,igrid)%clamped = .true.
1623 s(ib,ifield,igrid)%acquire = .true.
1625 s(ib,ifield,igrid)%closed = .true.
1627 s(ib,ifield,igrid)%Flather = .true.
1628 s(ib,ifield,igrid)%acquire = .true.
1629 s(ib,
isfsur,igrid)%acquire = .true.
1631 s(ib,ifield,igrid)%gradient = .true.
1633 s(ib,ifield,igrid)%mixed = .true.
1634 s(ib,ifield,igrid)%acquire = .true.
1636 s(ib,ifield,igrid)%nested = .true.
1638 s(ib,ifield,igrid)%periodic = .true.
1645 s(ib,ifield,igrid)%radiation = .true.
1647 s(ib,ifield,igrid)%radiation = .true.
1648 s(ib,ifield,igrid)%nudging = .true.
1649 s(ib,ifield,igrid)%acquire = .true.
1651 s(ib,ifield,igrid)%reduced = .true.
1652#if defined FSOBC_REDUCED
1653 s(ib,
isfsur,igrid)%acquire = .true.
1656 s(ib,ifield,igrid)%Shchepetkin = .true.
1657 s(ib,ifield,igrid)%acquire = .true.
1658 s(ib,
isfsur,igrid)%acquire = .true.
1661 WRITE (
stdout,10) trim(vinp(ib)), trim(line)
1673 IF ((itrcstr.gt.0).and.(itrcend.gt.0))
THEN
1674 IF ((icont.eq.0).and.(ifield.lt.
istvar(itrcend)))
THEN
1675 DO i=ifield+1,
istvar(itrcend)
1677 s(ib,i,igrid)%clamped = s(ib,ifield,igrid)%clamped
1678 s(ib,i,igrid)%closed = s(ib,ifield,igrid)%closed
1679 s(ib,i,igrid)%gradient = s(ib,ifield,igrid)%gradient
1680 s(ib,i,igrid)%nested = s(ib,ifield,igrid)%nested
1681 s(ib,i,igrid)%periodic = s(ib,ifield,igrid)%periodic
1682 s(ib,i,igrid)%radiation = s(ib,ifield,igrid)%radiation
1683 s(ib,i,igrid)%nudging = s(ib,ifield,igrid)%nudging
1684 s(ib,i,igrid)%acquire = s(ib,ifield,igrid)%acquire
1695 IF ((icont.gt.0).and.(
ngrids.gt.1))
THEN
1696 IF ((itrcstr.gt.0).and.(itrcend.gt.0))
THEN
1697 IF ((ifield.eq.
istvar(itrcend)).or.(ic.gt.1))
THEN
1698 igrid=igrid+min(1,icont)
1701 igrid=igrid+min(1,icont)
1703 IF (igrid.gt.
ngrids)
THEN
1705 WRITE (
stdout,20) trim(line)
1715 10
FORMAT (/,
' LOAD_LBC - illegal lateral boundary condition ', &
1716 &
'keyword: ',a,/,12x,a)
1717 20
FORMAT (/,
' LOAD_LBC - incorrect continuation symbol in line:',/, &
1718 & 12x,a,/,12x,
'number of nested grid values exceeded.')
1723 FUNCTION load_s1d1 (Nval, Fname, Fdim, line, label, igrid, &
1724 & Mgrids, Nfiles, io_type, S)
1754 integer,
intent(in) :: mgrids, nval, fdim, io_type
1755 integer,
intent(inout) :: igrid
1756 integer,
intent(inout) :: nfiles(mgrids)
1758 character (len=*),
intent(in) :: line
1759 character (len=256),
intent(in) :: fname(fdim)
1760 character (len=*),
intent(inout) :: label
1762 TYPE(
t_io),
intent(inout) :: s(mgrids)
1766 logical :: load, persist
1768 integer :: icont, ipipe, i, is, j, lstr, my_mgrids, ng
1771 character (len=1 ),
parameter :: blank =
' '
1783 icont=index(trim(line),char(92) ,back=.false.)
1784 ipipe=index(trim(line),char(124),back=.false.)
1785 IF ((icont.eq.0).and.(ipipe.eq.0))
THEN
1793 nfiles(igrid)=nfiles(igrid)+1
1798 igrid=igrid+min(1,icont)
1800 IF (igrid.gt.mgrids)
THEN
1802 WRITE (
stdout,10) trim(line)
1818 IF (igrid.lt.mgrids)
THEN
1820 nfiles(i)=nfiles(igrid)
1832 IF (label(1:3).eq.
'FLT')
THEN
1843 allocate ( s(ng)%Nrec(nfiles(ng)) )
1844 allocate ( s(ng)%time_min(nfiles(ng)) )
1845 allocate ( s(ng)%time_max(nfiles(ng)) )
1846 allocate ( s(ng)%Vid(is:
nv) )
1847 allocate ( s(ng)%Tid(
mt) )
1848#if defined PIO_LIB && defined DISTRIBUTE
1849 allocate ( s(ng)%pioVar(is:
nv) )
1850 allocate ( s(ng)%pioTrc(
mt) )
1852 allocate ( s(ng)%files(nfiles(ng)) )
1858 lstr=len(s(ng)%name)
1860 s(ng)%head(i:i)=blank
1861 s(ng)%base(i:i)=blank
1862 s(ng)%name(i:i)=blank
1866 s(ng)%files(j)(i:i)=blank
1875 s(ng)%IOtype=io_type
1876 s(ng)%Nfiles=nfiles(ng)
1883#if defined PIO_LIB && defined DISTRIBUTE
1886 s(ng)%pioVar(j)%vd%varID=-1
1887 s(ng)%pioVar(j)%dkind=-1
1888 s(ng)%pioVar(j)%gtype=0
1891 s(ng)%pioTrc(j)%vd%varID=-1
1892 s(ng)%pioTrc(j)%dkind=-1
1893 s(ng)%pioTrc(j)%gtype=0
1898 s(ng)%files(j)=trim(fname(i))
1900 s(ng)%time_min(j)=0.0_dp
1901 s(ng)%time_max(j)=0.0_dp
1903 s(ng)%label=trim(label)
1904 s(ng)%name=trim(s(ng)%files(1))
1905 lstr=len_trim(s(ng)%name)
1906 s(ng)%head=s(ng)%name(1:lstr-3)
1907 s(ng)%base=s(ng)%name(1:lstr-3)
1914 DO ng=igrid+1,mgrids
1915 s(ng)%IOtype=io_type
1916 s(ng)%Nfiles=s(igrid)%Nfiles
1923#if defined PIO_LIB && defined DISTRIBUTE
1926 s(ng)%pioVar(j)%vd%varID=-1
1927 s(ng)%pioVar(j)%dkind=-1
1928 s(ng)%pioVar(j)%gtype=0
1931 s(ng)%pioTrc(j)%vd%varID=-1
1932 s(ng)%pioTrc(j)%dkind=-1
1933 s(ng)%pioTrc(j)%gtype=0
1936 DO j=1,s(igrid)%Nfiles
1937 s(ng)%files(j)=s(igrid)%files(j)
1939 s(ng)%time_min(j)=0.0_dp
1940 s(ng)%time_max(j)=0.0_dp
1942 s(ng)%label=trim(label)
1943 s(ng)%name=s(igrid)%name
1944 s(ng)%base=s(igrid)%base
1961 10
FORMAT (/,
' LOAD_S1D1 - incorrect continuation symbol in line:', &
1962 & /,14x,a,/,11x,
'number of nested grid values exceeded.')
1967 FUNCTION load_s1d2 (Nval, Fname, Fdim, line, label, igrid, &
1968 & Mgrids, Nfiles, idim, Ie, io_type, S)
2006 integer,
intent(in) :: mgrids, nval, fdim, ie, idim, io_type
2007 integer,
intent(inout) :: igrid
2008 integer,
intent(inout) :: nfiles(mgrids)
2010 character (len=*),
intent(in) :: line
2011 character (len=256),
intent(in) :: fname(fdim)
2012 character (len=*),
intent(inout) :: label
2014 TYPE(
t_io),
intent(inout) :: s(idim,mgrids)
2018 logical :: load, persist
2020 integer :: icont, ipipe, i, is, j, lstr, my_mgrids, ng
2023 character (len=1 ),
parameter :: blank =
' '
2035 icont=index(trim(line),char(92) ,back=.false.)
2036 ipipe=index(trim(line),char(124),back=.false.)
2037 IF ((icont.eq.0).and.(ipipe.eq.0))
THEN
2045 nfiles(igrid)=nfiles(igrid)+1
2050 igrid=igrid+min(1,icont)
2052 IF (igrid.gt.mgrids)
THEN
2054 WRITE (
stdout,10) trim(line)
2070 IF (igrid.lt.mgrids)
THEN
2072 nfiles(i)=nfiles(igrid)
2085 allocate ( s(ie,ng)%Nrec(nfiles(ng)) )
2086 allocate ( s(ie,ng)%time_min(nfiles(ng)) )
2087 allocate ( s(ie,ng)%time_max(nfiles(ng)) )
2088 allocate ( s(ie,ng)%Vid(
nv) )
2089 allocate ( s(ie,ng)%Tid(
mt) )
2090#if defined PIO_LIB && defined DISTRIBUTE
2091 allocate ( s(ie,ng)%pioVar(
nv) )
2092 allocate ( s(ie,ng)%pioTrc(
mt) )
2094 allocate ( s(ie,ng)%files(nfiles(ng)) )
2100 lstr=len(s(ie,ng)%name)
2102 s(ie,ng)%head(i:i)=blank
2103 s(ie,ng)%base(i:i)=blank
2104 s(ie,ng)%name(i:i)=blank
2108 s(ie,ng)%files(j)(i:i)=blank
2117 s(ie,ng)%IOtype=io_type
2118 s(ie,ng)%Nfiles=nfiles(ng)
2125#if defined PIO_LIB && defined DISTRIBUTE
2126 s(ie,ng)%pioFile%fh=-1
2128 s(ie,ng)%pioVar(j)%vd%varID=-1
2129 s(ie,ng)%pioVar(j)%dkind=-1
2130 s(ie,ng)%pioVar(j)%gtype=0
2133 s(ie,ng)%pioTrc(j)%vd%varID=-1
2134 s(ie,ng)%pioTrc(j)%dkind=-1
2135 s(ie,ng)%pioTrc(j)%gtype=0
2140 s(ie,ng)%files(j)=trim(fname(i))
2142 s(ie,ng)%time_min(j)=0.0_dp
2143 s(ie,ng)%time_max(j)=0.0_dp
2145 s(ie,ng)%label=trim(label)
2146 s(ie,ng)%name=trim(s(ie,ng)%files(1))
2147 lstr=len_trim(s(ie,ng)%name)
2148 s(ie,ng)%head=s(ie,ng)%name(1:lstr-3)
2149 s(ie,ng)%base=s(ie,ng)%name(1:lstr-3)
2156 DO ng=igrid+1,mgrids
2157 s(ie,ng)%IOtype=io_type
2158 s(ie,ng)%Nfiles=s(ie,igrid)%Nfiles
2165#if defined PIO_LIB && defined DISTRIBUTE
2166 s(ie,ng)%pioFile%fh=-1
2168 s(ie,ng)%pioVar(j)%vd%varID=-1
2169 s(ie,ng)%pioVar(j)%dkind=-1
2170 s(ie,ng)%pioVar(j)%gtype=0
2173 s(ie,ng)%pioTrc(j)%vd%varID=-1
2174 s(ie,ng)%pioTrc(j)%dkind=-1
2175 s(ie,ng)%pioTrc(j)%gtype=0
2178 DO j=1,s(ie,igrid)%Nfiles
2179 s(ie,ng)%files(j)=s(ie,igrid)%files(j)
2181 s(ie,ng)%time_min(j)=0.0_dp
2182 s(ie,ng)%time_max(j)=0.0_dp
2184 s(ie,ng)%label=trim(label)
2185 s(ie,ng)%name=s(ie,igrid)%name
2186 s(ie,ng)%base=s(ie,igrid)%base
2203 10
FORMAT (/,
' LOAD_S1D2 - incorrect continuation symbol in line:', &
2204 & /,14x,a,/,11x,
'number of nested grid values exceeded.')
2209 FUNCTION load_s2d (Nval, Fname, Fdim, line, label, ifile, igrid, &
2210 & Mgrids, Nfiles, Ncount, idim, io_type, S)
2245 integer,
intent(in) :: mgrids, nval, fdim, idim, io_type
2246 integer,
intent(in) :: nfiles(mgrids)
2247 integer,
intent(inout) :: ifile, igrid
2248 integer,
intent(inout) :: ncount(idim,mgrids)
2250 character (len=*),
intent(in) :: line
2251 character (len=256),
intent(in) :: fname(fdim)
2252 character (len=*),
intent(inout) :: label
2254 TYPE(t_io),
intent(inout) :: s(idim,mgrids)
2258 logical :: load, persist
2260 integer :: icont, ipipe, i, is, j, k, lstr, my_mgrids, ng
2263 character (len=1 ),
parameter :: blank =
' '
2275 icont=index(trim(line),char(92) ,back=.false.)
2276 ipipe=index(trim(line),char(124),back=.false.)
2277 IF ((icont.eq.0).and.(ipipe.eq.0))
THEN
2285 ncount(ifile,igrid)=ncount(ifile,igrid)+1
2291 IF ((ifile.lt.nfiles(igrid)).or.(ipipe.ne.0))
THEN
2292 ifile=ifile+min(1,icont)
2295 igrid=igrid+min(1,icont)
2298 IF (ifile.gt.idim)
THEN
2300 WRITE (stdout,10) trim(line)
2305 IF (igrid.gt.mgrids)
THEN
2307 WRITE (stdout,20) trim(line)
2323 IF (igrid.lt.mgrids)
THEN
2326 ncount(i,j)=ncount(i,igrid)
2341 allocate ( s(i,ng)%Nrec(ncount(i,ng)) )
2342 allocate ( s(i,ng)%time_min(ncount(i,ng)) )
2343 allocate ( s(i,ng)%time_max(ncount(i,ng)) )
2344 allocate ( s(i,ng)%Vid(nv) )
2345 allocate ( s(i,ng)%Tid(mt) )
2346#if defined PIO_LIB && defined DISTRIBUTE
2347 allocate ( s(i,ng)%pioVar(nv) )
2348 allocate ( s(i,ng)%pioTrc(mt) )
2350 allocate ( s(i,ng)%files(ncount(i,ng)) )
2358 lstr=len(s(i,ng)%name)
2360 s(i,ng)%head(j:j)=blank
2361 s(i,ng)%base(j:j)=blank
2362 s(i,ng)%name(j:j)=blank
2366 s(i,ng)%files(k)(j:j)=blank
2377 s(i,ng)%IOtype=io_type
2378 s(i,ng)%Nfiles=ncount(i,ng)
2385#if defined PIO_LIB && defined DISTRIBUTE
2386 s(i,ng)%pioFile%fh=-1
2388 s(i,ng)%pioVar(j)%vd%varID=-1
2389 s(i,ng)%pioVar(j)%dkind=-1
2390 s(i,ng)%pioVar(j)%gtype=0
2393 s(i,ng)%pioTrc(j)%vd%varID=-1
2394 s(i,ng)%pioTrc(j)%dkind=-1
2395 s(i,ng)%pioTrc(j)%gtype=0
2400 s(i,ng)%files(j)=trim(fname(k))
2402 s(i,ng)%time_min(j)=0.0_dp
2403 s(i,ng)%time_max(j)=0.0_dp
2405 s(i,ng)%label=trim(label)
2406 s(i,ng)%name=trim(s(i,ng)%files(1))
2407 lstr=len_trim(s(i,ng)%name)
2408 s(i,ng)%head=s(i,ng)%name(1:lstr-3)
2409 s(i,ng)%base=s(i,ng)%name(1:lstr-3)
2416 DO ng=igrid+1,mgrids
2418 s(i,ng)%IOtype=io_type
2419 s(i,ng)%Nfiles=s(i,igrid)%Nfiles
2426#if defined PIO_LIB && defined DISTRIBUTE
2427 s(i,ng)%pioFile%fh=-1
2429 s(i,ng)%pioVar(j)%vd%varID=-1
2430 s(i,ng)%pioVar(j)%dkind=-1
2431 s(i,ng)%pioVar(j)%gtype=0
2434 s(i,ng)%pioTrc(j)%vd%varID=-1
2435 s(i,ng)%pioTrc(j)%dkind=-1
2436 s(i,ng)%pioTrc(j)%gtype=0
2439 DO j=1,s(i,igrid)%Nfiles
2440 s(i,ng)%files(j)=s(i,igrid)%files(j)
2442 s(i,ng)%time_min(j)=0.0_dp
2443 s(i,ng)%time_max(j)=0.0_dp
2445 s(i,ng)%label=trim(label)
2446 s(i,ng)%head=s(i,igrid)%head
2447 s(i,ng)%base=s(i,igrid)%base
2448 s(i,ng)%name=s(i,igrid)%name
2469 10
FORMAT (/,
' LOAD_S2D - incorrect continuation symbol in line:',/, &
2470 & 12x,a,/,12x,
'inner dimension of structure exceeded.')
2471 20
FORMAT (/,
' LOAD_S2D - incorrect continuation symbol in line:',/, &
2472 & 12x,a,/,12x,
'number of nested grid values exceeded.')
2479 & itracer, iTrcStr, iTrcEnd, svname, S)
2512 integer,
intent(in) :: ninp, itrc, itrcstr, itrcend
2513 integer,
intent(inout) :: igrid, itracer, nline
2515 character (len=256),
intent(in) :: line
2516 character (len=256),
intent(in) :: vinp(ninp)
2517 character (len=* ),
intent(in) :: svname
2519 TYPE(t_adv),
intent(inout) :: s(maxval(nt),ngrids)
2523 integer :: icont, i, ic
2526 character (len=10) :: astring, string
2534 icont=index(trim(line),char(92) ,back=.false.)
2541 astring=trim(vinp(i+1))
2545 IF (icont.gt.0)
THEN
2554 IF ((0.lt.itrc).and.(itrc.le.itrcend))
THEN
2556 SELECT CASE (trim(string))
2557 CASE (
'A4',
'AKIMA4')
2558 s(itrc,igrid) % AKIMA4 = .true.
2559 CASE (
'C2',
'CENTERED2')
2560 s(itrc,igrid) % CENTERED2 = .true.
2561 CASE (
'C4',
'CENTERED4')
2562 s(itrc,igrid) % CENTERED4 = .true.
2563 CASE (
'HS',
'HSIMT')
2564 s(itrc,igrid) % HSIMT = .true.
2565 CASE (
'MP',
'MPDATA')
2566 s(itrc,igrid) % MPDATA = .true.
2567 CASE (
'SP',
'SPLINES')
2568 s(itrc,igrid) % SPLINES = .true.
2569 CASE (
'SU',
'SU3',
'SPLIT_U3')
2570 s(itrc,igrid) % SPLIT_U3 = .true.
2571 CASE (
'U3',
'UPSTREAM3')
2572 s(itrc,igrid) % UPSTREAM3 = .true.
2575 WRITE (stdout,10) trim(astring)
2584 IF ((itrcstr.gt.0).and.(itrcend.gt.0))
THEN
2585 IF ((icont.eq.0).and.(itracer.lt.itrcend))
THEN
2587 s(i,igrid) % AKIMA4 = s(itrc,igrid) % AKIMA4
2588 s(i,igrid) % CENTERED2 = s(itrc,igrid) % CENTERED2
2589 s(i,igrid) % CENTERED4 = s(itrc,igrid) % CENTERED4
2590 s(i,igrid) % HSIMT = s(itrc,igrid) % HSIMT
2591 s(i,igrid) % MPDATA = s(itrc,igrid) % MPDATA
2592 s(i,igrid) % SPLINES = s(itrc,igrid) % SPLINES
2593 s(i,igrid) % SPLIT_U3 = s(itrc,igrid) % SPLIT_U3
2594 s(i,igrid) % UPSTREAM3 = s(itrc,igrid) % UPSTREAM3
2604 IF ((itrc.eq.itrcend).or.(ic.gt.1))
THEN
2610 IF ((icont.gt.0).and.(ngrids.gt.1))
THEN
2611 IF ((itrcstr.gt.0).and.(itrcend.gt.0))
THEN
2612 IF ((itrc.eq.itrcend).or.(ic.gt.1))
THEN
2613 igrid=igrid+min(1,icont)
2616 igrid=igrid+min(1,icont)
2618 IF (igrid.gt.ngrids)
THEN
2620 WRITE (stdout,20) trim(line)
2630 10
FORMAT (/,
' LOAD_TADV - illegal tracer advection scheme ', &
2631 &
'keyword: ',a,/,13x,
'Correct standard input file.',/)
2632 20
FORMAT (/,
' LOAD_TADV - incorrect continuation symbol in line:', &
2633 & /,13x,a,/,13x,
'number of nested grid values exceeded.')
integer function load_3d_r8(ninp, vinp, iout, jout, kout, vout)
integer function decode_line(line_text, keyword, nval, cval, rval)
integer function load_3d_l(ninp, vinp, iout, jout, kout, vout)
integer function load_s2d(nval, fname, fdim, line, label, ifile, igrid, mgrids, nfiles, ncount, idim, io_type, s)
integer function load_2d_i(ninp, vinp, iout, jout, vout)
integer function load_1d_dp(ninp, vinp, nout, vout)
integer function load_1d_l(ninp, vinp, nout, vout)
integer function load_0d_dp(ninp, vinp, nout, vout)
integer function load_s1d2(nval, fname, fdim, line, label, igrid, mgrids, nfiles, idim, ie, io_type, s)
integer function load_1d_i(ninp, vinp, nout, vout)
integer function load_0d_l(ninp, vinp, nout, vout)
integer function load_0d_r8(ninp, vinp, nout, vout)
integer function load_lbc(ninp, vinp, line, nline, ifield, igrid, itrcstr, itrcend, svname, s)
integer function load_2d_r8(ninp, vinp, iout, jout, vout)
integer function load_tadv(ninp, vinp, line, nline, itrc, igrid, itracer, itrcstr, itrcend, svname, s)
logical function find_file(ng, out, fname, keyword)
integer function load_2d_dp(ninp, vinp, iout, jout, vout)
integer function load_2d_l(ninp, vinp, iout, jout, vout)
integer function load_3d_i(ninp, vinp, iout, jout, kout, vout)
integer function load_0d_i(ninp, vinp, nout, vout)
integer function load_3d_dp(ninp, vinp, iout, jout, kout, vout)
integer function load_s1d1(nval, fname, fdim, line, label, igrid, mgrids, nfiles, io_type, s)
integer function load_1d_r8(ninp, vinp, nout, vout)
character(len=256) sourcefile
integer, dimension(:), allocatable istvar
subroutine, public netcdf_close(ng, model, ncid, ncname, lupdate)
subroutine, public netcdf_open(ng, model, ncname, omode, ncid)
integer, dimension(:), allocatable nstr
logical, dimension(:), allocatable ewperiodic
logical, dimension(:), allocatable nsperiodic
integer, parameter isouth
integer, parameter inorth
character(len(sinp)) function, public uppercase(sinp)
logical function, public founderror(flag, noerr, line, routine)