33 integer,
intent(in) :: model
40 integer :: Npts, Nval, i, ic, io_err, j, inp, ng, out, status
43 real(r8),
dimension(nRval) :: Rval
45 real(r8),
allocatable :: MyRval(:)
47 character (len=40 ) :: KeyWord
48 character (len=256) :: io_errmsg, line
49 character (len=256) :: Cname
50 character (len=256),
dimension(nCval) :: Cval
67 WRITE(
stdout,*)
'Coupled Input File name = ', trim(cname)
69 OPEN (inp, file=trim(cname), form=
'formatted', status=
'old', &
70 & iostat=io_err, iomsg=io_errmsg)
75 10
FORMAT (/,
' READ_COUPLEPAR - Unable to open coupling input', &
76 &
' script.',/18x,
'ERROR: ',a,/, &
77 & /,18x,
'In distributed-memory applications, the input', &
78 & /,18x,
'script file is processed in parallel. The Unix', &
79 & /,18x,
'routine GETARG is used to get script file name.',&
80 & /,18x,
'For example, in MPI applications make sure that',&
81 & /,18x,
'command line is something like:',/, &
82 & /,18x,
'mpirun -np 4 romsM coupling.in',/, &
83 & /,18x,
'and not',/, &
84 & /,18x,
'mpirun -np 4 romsM < coupling.in',/)
98 READ (inp,
'(a)',
err=20,
END=30) line
99 status=decode_line(line, keyword, nval, cval, rval)
100 IF (status.gt.0)
THEN
101 SELECT CASE (trim(keyword))
103 npts=load_i(nval, rval, 1, ivalue)
105 IF (.not.
allocated(myrval) )
THEN
106 allocate ( myrval(nmodels) )
108 IF (.not.
allocated(orderlabel) )
THEN
109 allocate ( orderlabel(nmodels) )
111 IF (.not.
allocated(nthreads) )
THEN
112 allocate ( nthreads(nmodels) )
115 IF (.not.
allocated(timeinterval) )
THEN
116 allocate ( timeinterval(nmodels,nmodels) )
119 IF (.not.
allocated(inpname) )
THEN
120 allocate ( inpname(nmodels) )
122 IF (.not.
allocated(nexport) )
THEN
123 allocate ( nexport(nmodels) )
126 IF (.not.
allocated(nimport) )
THEN
127 allocate ( nimport(nmodels) )
131 npts=load_l(nval, cval, 1, lvalue)
136 orderlabel(i)=trim(adjustl(cval(nval)))
137 IF (index(trim(orderlabel(i)),
'ocean').ne.0)
THEN
139 ELSE IF (index(trim(orderlabel(i)),
'waves').ne.0)
THEN
141 ELSE IF (index(trim(orderlabel(i)),
'atmos').ne.0)
THEN
146 CASE (
'Nthreads(ocean)')
147 IF ((0.lt.iocean).and.(iocean.le.nmodels))
THEN
148 npts=load_i(nval, rval, 1, ivalue)
149 nthreads(iocean)=ivalue(1)
151 CASE (
'Nthreads(waves)')
152 IF ((0.lt.iwaves).and.(iwaves.le.nmodels))
THEN
153 npts=load_i(nval, rval, 1, ivalue)
154 nthreads(iwaves)=ivalue(1)
156 CASE (
'Nthreads(atmos)')
157 IF ((0.lt.iatmos).and.(iatmos.le.nmodels))
THEN
158 npts=load_i(nval, rval, 1, ivalue)
159 nthreads(iatmos)=ivalue(1)
161 CASE (
'TimeInterval')
162 npts=load_r(nval, rval, nmodels, myrval)
168 timeinterval(i,j)=myrval(ic)
169 timeinterval(j,i)=myrval(ic)
173 CASE (
'INPname(ocean)')
174 IF ((0.lt.iocean).and.(iocean.le.nmodels))
THEN
175 inpname(iocean)=trim(adjustl(cval(nval)))
176 iname=trim(inpname(iocean))
178 CASE (
'INPname(waves)')
179 IF ((0.lt.iwaves).and.(iwaves.le.nmodels))
THEN
180 inpname(iwaves)=trim(adjustl(cval(nval)))
182 CASE (
'INPname(atmos)')
183 IF ((0.lt.iatmos).and.(iatmos.le.nmodels))
THEN
184 inpname(iatmos)=trim(adjustl(cval(nval)))
187 cplname=trim(adjustl(cval(nval)))
188 CASE (
'Nexport(ocean)')
189 IF ((0.lt.iocean).and.(iocean.le.nmodels))
THEN
190 npts=load_i(nval, rval, 1, ivalue)
191 nexport(iocean)=ivalue(1)
193 CASE (
'Nexport(waves)')
194 IF ((0.lt.iwaves).and.(iwaves.le.nmodels))
THEN
195 npts=load_i(nval, rval, 1, ivalue)
196 nexport(iwaves)=ivalue(1)
198 CASE (
'Nexport(atmos)')
199 IF ((0.lt.iatmos).and.(iatmos.le.nmodels))
THEN
200 npts=load_i(nval, rval, 1, ivalue)
201 nexport(iatmos)=ivalue(1)
203 CASE (
'Export(ocean)')
204 IF (.not.
allocated(export))
THEN
205 allocate ( export(nmodels) )
207 allocate ( export(i)%code(max(1,nexport(i))) )
211 IF ((0.lt.iocean).and.(iocean.le.nmodels))
THEN
212 IF (nval.le.nexport(iocean))
THEN
213 export(iocean)%code(nval)=trim(adjustl(cval(nval)))
216 CASE (
'Export(waves)')
217 IF (.not.
allocated(export))
THEN
218 allocate ( export(nmodels) )
220 allocate ( export(i)%code(max(1,nexport(i))) )
224 IF ((0.lt.iwaves).and.(iwaves.le.nmodels))
THEN
225 IF (nval.le.nexport(iwaves))
THEN
226 export(iwaves)%code(nval)=trim(adjustl(cval(nval)))
229 CASE (
'Export(atmos)')
230 IF (.not.
allocated(export))
THEN
231 allocate ( export(nmodels) )
233 allocate ( export(i)%code(max(1,nexport(i))) )
237 IF ((0.lt.iatmos).and.(iatmos.le.nmodels))
THEN
238 IF (nval.le.nexport(iatmos))
THEN
239 export(iatmos)%code(nval)=trim(adjustl(cval(nval)))
242 CASE (
'Nimport(ocean)')
243 IF ((0.lt.iocean).and.(iocean.le.nmodels))
THEN
244 npts=load_i(nval, rval, 1, ivalue)
245 nimport(iocean)=ivalue(1)
247 CASE (
'Nimport(waves)')
248 IF ((0.lt.iwaves).and.(iwaves.le.nmodels))
THEN
249 npts=load_i(nval, rval, 1, ivalue)
250 nimport(iwaves)=ivalue(1)
252 CASE (
'Nimport(atmos)')
253 IF ((0.lt.iatmos).and.(iatmos.le.nmodels))
THEN
254 npts=load_i(nval, rval, 1, ivalue)
255 nimport(iatmos)=ivalue(1)
257 CASE (
'Import(ocean)')
258 IF (.not.
allocated(import))
THEN
259 allocate ( import(nmodels) )
261 allocate ( import(i)%code(max(1,nimport(i))) )
265 IF ((0.lt.iocean).and.(iocean.le.nmodels))
THEN
266 IF (nval.le.nimport(iocean))
THEN
267 import(iocean)%code(nval)=trim(adjustl(cval(nval)))
270 CASE (
'Import(waves)')
271 IF (.not.
allocated(import))
THEN
272 allocate ( import(nmodels) )
274 allocate ( import(i)%code(max(1,nimport(i))) )
278 IF ((0.lt.iwaves).and.(iwaves.le.nmodels))
THEN
279 IF (nval.le.nimport(iwaves))
THEN
280 import(iwaves)%code(nval)=trim(adjustl(cval(nval)))
283 CASE (
'Import(atmos)')
284 IF (.not.
allocated(import))
THEN
285 allocate ( import(nmodels) )
287 allocate ( import(i)%code(max(1,nimport(i))) )
291 IF ((0.lt.iatmos).and.(iatmos.le.nmodels))
THEN
292 IF (nval.le.nimport(iatmos))
THEN
293 import(iatmos)%code(nval)=trim(adjustl(cval(nval)))
299 20
IF (master)
WRITE (out,40) line
304 40
FORMAT (/,
' READ_CouplePar - Error while processing line: ',/,a)