28 logical,
intent(in) :: Lwrite
29 integer,
intent(in) :: model, inp, out
34 integer :: iTrcStr, iTrcEnd
35 integer :: i, ifield, igrid, itracer, itrc, ng, nline, status
37 logical,
dimension(NBT,Ngrids) :: Ltrc
39 real(r8),
dimension(NBT,Ngrids) :: Rbio
41 real(dp),
dimension(nRval) :: Rval
43 character (len=40 ) :: KeyWord
44 character (len=256) :: line
45 character (len=256),
dimension(nCval) :: Cval
66 READ (inp,
'(a)',err=10,
END=20) line
67 status=decode_line(line, keyword, nval, cval, rval)
69 SELECT CASE (trim(keyword))
71 npts=load_l(nval, cval, ngrids, lbiology)
73 npts=load_i(nval, rval, ngrids, bioiter)
75 npts=load_r(nval, rval, ngrids, resrate)
77 npts=load_r(nval, rval, nbt, ngrids, rbio)
81 nl_tnu2(i,ng)=rbio(itrc,ng)
85 npts=load_r(nval, rval, nbt, ngrids, rbio)
89 nl_tnu4(i,ng)=rbio(itrc,ng)
93 npts=load_r(nval, rval, nbt, ngrids, rbio)
97 ad_tnu2(i,ng)=rbio(itrc,ng)
98 tl_tnu2(i,ng)=rbio(itrc,ng)
102 npts=load_r(nval, rval, nbt, ngrids, rbio)
106 ad_tnu4(i,ng)=rbio(itrc,ng)
107 tl_tnu4(i,ng)=rbio(itrc,ng)
110 CASE (
'LtracerSponge')
111 npts=load_l(nval, cval, nbt, ngrids, ltrc)
115 ltracersponge(i,ng)=ltrc(itrc,ng)
119 npts=load_r(nval, rval, nbt, ngrids, rbio)
123 akt_bak(i,ng)=rbio(itrc,ng)
127 npts=load_r(nval, rval, nbt, ngrids, rbio)
131 ad_akt_fac(i,ng)=rbio(itrc,ng)
132 tl_akt_fac(i,ng)=rbio(itrc,ng)
136 npts=load_r(nval, rval, nbt, ngrids, rbio)
140 tnudg(i,ng)=rbio(itrc,ng)
144 IF (itracer.lt.nbt)
THEN
150 npts=load_tadv(nval, cval, line, nline, itrc, igrid, &
151 & itracer, idbio(itrcstr), idbio(itrcend), &
152 & vname(1,idtvar(itrc)), &
155 IF (itracer.lt.nbt)
THEN
161 npts=load_tadv(nval, cval, line, nline, itrc, igrid, &
162 & itracer, idbio(itrcstr), idbio(itrcend), &
163 & vname(1,idtvar(itrc)), &
165#if defined ADJOINT || defined TANGENT || defined TL_IOMS
166 CASE (
'ad_Hadvection')
167 IF (itracer.lt.nbt)
THEN
173 npts=load_tadv(nval, cval, line, nline, itrc, igrid, &
174 & itracer, idbio(itrcstr), idbio(itrcend), &
175 & vname(1,idtvar(itrc)), &
178 IF (itracer.lt.(nbt)
THEN
184 npts=load_tadv(nval, cval, line, nline, itrc, igrid, &
185 & itracer, idbio(itrcstr), idbio(itrcend), &
186 & vname(1,idtvar(itrc)), &
190 IF (itracer.lt.nbt)
THEN
195 ifield=istvar(idbio(itracer))
196 npts=load_lbc(nval, cval, line, nline, ifield, igrid, &
197 & idbio(itrcstr), idbio(itrcend), &
198 & vname(1,idtvar(idbio(itracer))), lbc)
199#if defined ADJOINT || defined TANGENT || defined TL_IOMS
200 CASE (
'ad_LBC(isTvar)')
201 IF (itracer.lt.nbt)
THEN
206 ifield=istvar(idbio(itracer))
207 npts=load_lbc(nval, cval, line, nline, ifield, igrid, &
208 & idbio(itrcstr), idbio(itrcend), &
209 & vname(1,idtvar(idbio(itracer))), ad_lbc)
212 npts=load_l(nval, cval, nbt, ngrids, ltrc)
216 ltracersrc(i,ng)=ltrc(itrc,ng)
220 npts=load_l(nval, cval, nbt, ngrids, ltrc)
224 ltracerclm(i,ng)=ltrc(itrc,ng)
228 npts=load_l(nval, cval, nbt, ngrids, ltrc)
232 lnudgetclm(i,ng)=ltrc(itrc,ng)
235 CASE (
'Hout(idTvar)')
236 npts=load_l(nval, cval, nbt, ngrids, ltrc)
239 i=idtvar(idbio(itrc))
241 IF (master)
WRITE (out,30) &
242 &
'idTvar(idbio(', itrc,
'))'
246 hout(i,ng)=ltrc(itrc,ng)
249 CASE (
'Hout(idTsur)')
250 npts=load_l(nval, cval, nbt, ngrids, ltrc)
253 i=idtsur(idbio(itrc))
255 IF (master)
WRITE (out,30) &
256 &
'idTsur(idbio(', itrc,
'))'
260 hout(i,ng)=ltrc(itrc,ng)
263 CASE (
'Qout(idTvar)')
264 npts=load_l(nval, cval, nbt, ngrids, ltrc)
267 i=idtvar(idbio(itrc))
268 qout(i,ng)=ltrc(itrc,ng)
271 CASE (
'Qout(idsurT)')
272 npts=load_l(nval, cval, nbt, ngrids, ltrc)
275 i=idsurt(idbio(itrc))
277 IF (master)
WRITE (out,30) &
278 &
'idsurT(idbio(', itrc,
'))'
282 qout(i,ng)=ltrc(itrc,ng)
285 CASE (
'Qout(idTsur)')
286 npts=load_l(nval, cval, nbt, ngrids, ltrc)
289 i=idtsur(idbio(itrc))
290 qout(i,ng)=ltrc(itrc,ng)
293#if defined AVERAGES || \
294 (defined ad_averages && defined adjoint) || \
295 (defined rp_averages && defined tl_ioms) || \
296 (defined tl_averages && defined tangent)
297 CASE (
'Aout(idTvar)')
298 npts=load_l(nval, cval, nbt, ngrids, ltrc)
301 i=idtvar(idbio(itrc))
302 aout(i,ng)=ltrc(itrc,ng)
305 CASE (
'Aout(idTTav)')
306 npts=load_l(nval, cval, nbt, ngrids, ltrc)
309 i=idttav(idbio(itrc))
310 aout(i,ng)=ltrc(itrc,ng)
313 CASE (
'Aout(idUTav)')
314 npts=load_l(nval, cval, nbt, ngrids, ltrc)
317 i=idutav(idbio(itrc))
318 aout(i,ng)=ltrc(itrc,ng)
321 CASE (
'Aout(idVTav)')
322 npts=load_l(nval, cval, nbt, ngrids, ltrc)
325 i=idvtav(idbio(itrc))
326 aout(i,ng)=ltrc(itrc,ng)
329 CASE (
'Aout(iHUTav)')
330 npts=load_l(nval, cval, nbt, ngrids, ltrc)
333 i=ihutav(idbio(itrc))
334 aout(i,ng)=ltrc(itrc,ng)
337 CASE (
'Aout(iHVTav)')
338 npts=load_l(nval, cval, nbt, ngrids, ltrc)
341 i=ihvtav(idbio(itrc))
342 aout(i,ng)=ltrc(itrc,ng)
347 CASE (
'Dout(iTrate)')
348 npts=load_l(nval, cval, nbt, ngrids, ltrc)
352 dout(iddtrc(itrc,itrate),ng)=ltrc(i,ng)
355 CASE (
'Dout(iThadv)')
356 npts=load_l(nval, cval, nbt, ngrids, ltrc)
360 dout(iddtrc(itrc,ithadv),ng)=ltrc(i,ng)
363 CASE (
'Dout(iTxadv)')
364 npts=load_l(nval, cval, nbt, ngrids, ltrc)
368 dout(iddtrc(itrc,itxadv),ng)=ltrc(i,ng)
371 CASE (
'Dout(iTyadv)')
372 npts=load_l(nval, cval, nbt, ngrids, ltrc)
376 dout(iddtrc(itrc,ityadv),ng)=ltrc(i,ng)
379 CASE (
'Dout(iTvadv)')
380 npts=load_l(nval, cval, nbt, ngrids, ltrc)
384 dout(iddtrc(itrc,itvadv),ng)=ltrc(i,ng)
387# if defined TS_DIF2 || defined TS_DIF4
388 CASE (
'Dout(iThdif)')
389 npts=load_l(nval, cval, nbt, ngrids, ltrc)
393 dout(iddtrc(itrc,ithdif),ng)=ltrc(i,ng)
396 CASE (
'Dout(iTxdif)')
397 npts=load_l(nval, cval, nbt, ngrids, ltrc)
401 dout(iddtrc(itrc,itxdif),ng)=ltrc(i,ng)
404 CASE (
'Dout(iTydif)')
405 npts=load_l(nval, cval, nbt, ngrids, ltrc)
409 dout(iddtrc(itrc,itydif),ng)=ltrc(i,ng)
412# if defined MIX_GEO_TS || defined MIX_ISO_TS
413 CASE (
'Dout(iTsdif)')
414 npts=load_l(nval, cval, nbt, ngrids, ltrc)
418 dout(iddtrc(itrc,itsdif),ng)=ltrc(i,ng)
423 CASE (
'Dout(iTvdif)')
424 npts=load_l(nval, cval, nbt, ngrids, ltrc)
428 dout(iddtrc(itrc,itvdif),ng)=ltrc(i,ng)
435 10
IF (master)
WRITE (out,40) line
444 IF (master.and.lwrite)
THEN
446 IF (lbiology(ng))
THEN
448 WRITE (out,60) bioiter(ng),
'BioIter', &
449 &
'Number of iterations for nonlinear convergence.'
450 WRITE (out,70) resrate(ng),
'ResRate', &
451 &
'Constant biological respiration rate (1/day).'
455 WRITE (out,90) nl_tnu2(i,ng),
'nl_tnu2', i, &
456 &
'NLM Horizontal, harmonic mixing coefficient', &
457 &
'(m2/s) for tracer ', i, trim(vname(1,idtvar(i)))
459 WRITE (out,90) ad_tnu2(i,ng),
'ad_tnu2', i, &
460 &
'ADM Horizontal, harmonic mixing coefficient', &
461 &
'(m2/s) for tracer ', i, trim(vname(1,idtvar(i)))
463# if defined TANGENT || defined TL_IOMS
464 WRITE (out,90) tl_tnu2(i,ng),
'tl_tnu2', i, &
465 &
'TLM Horizontal, harmonic mixing coefficient', &
466 &
'(m2/s) for tracer ', i, trim(vname(1,idtvar(i)))
473 WRITE (out,90) nl_tnu4(i,ng),
'nl_tnu4', i, &
474 &
'NLM Horizontal, biharmonic mixing coefficient', &
475 &
'(m4/s) for tracer ', i, trim(vname(1,idtvar(i)))
477 WRITE (out,90) ad_tnu4(i,ng),
'ad_tnu4', i, &
478 &
'ADM Horizontal, biharmonic mixing coefficient', &
479 &
'(m4/s) for tracer ', i, trim(vname(1,idtvar(i)))
481# if defined TANGENT || defined TL_IOMS
482 WRITE (out,90) tl_tnu4(i,ng),
'tl_tnu4', i, &
483 &
'TLM Horizontal, biharmonic mixing coefficient', &
484 &
'(m4/s) for tracer ', i, trim(vname(1,idtvar(i)))
490 IF (ltracersponge(i,ng))
THEN
491 WRITE (out,100) ltracersponge(i,ng),
'LtracerSponge', &
492 & i,
'Turning ON sponge on tracer ', i, &
493 & trim(vname(1,idtvar(i)))
495 WRITE (out,100) ltracersponge(i,ng),
'LtracerSponge', &
496 & i,
'Turning OFF sponge on tracer ', i, &
497 & trim(vname(1,idtvar(i)))
502 WRITE(out,90) akt_bak(i,ng),
'Akt_bak', i, &
503 &
'Background vertical mixing coefficient (m2/s)', &
504 &
'for tracer ', i, trim(vname(1,idtvar(i)))
510 WRITE (out,90) ad_akt_fac(i,ng),
'ad_Akt_fac', i, &
511 &
'ADM basic state vertical mixing scale factor', &
512 &
'for tracer ', i, trim(vname(1,idtvar(i)))
514# if defined TANGENT || defined TL_IOMS
515 WRITE (out,90) tl_akt_fac(i,ng),
'tl_Akt_fac', i, &
516 &
'TLM basic state vertical mixing scale factor', &
517 &
'for tracer ', i, trim(vname(1,idtvar(i)))
523 WRITE (out,90) tnudg(i,ng),
'Tnudg', i, &
524 &
'Nudging/relaxation time scale (days)', &
525 &
'for tracer ', i, trim(vname(1,idtvar(i)))
529 IF (ltracersrc(i,ng))
THEN
530 WRITE (out,100) ltracersrc(i,ng),
'LtracerSrc', &
531 & i,
'Turning ON point sources/Sink on tracer ', i, &
532 & trim(vname(1,idtvar(i)))
534 WRITE (out,100) ltracersrc(i,ng),
'LtracerSrc', &
535 & i,
'Turning OFF point sources/Sink on tracer ', i, &
536 & trim(vname(1,idtvar(i)))
541 IF (ltracerclm(i,ng))
THEN
542 WRITE (out,100) ltracerclm(i,ng),
'LtracerCLM', i, &
543 &
'Turning ON processing of climatology tracer ', i, &
544 & trim(vname(1,idtvar(i)))
546 WRITE (out,100) ltracerclm(i,ng),
'LtracerCLM', i, &
547 &
'Turning OFF processing of climatology tracer ', i, &
548 & trim(vname(1,idtvar(i)))
553 IF (lnudgetclm(i,ng))
THEN
554 WRITE (out,100) lnudgetclm(i,ng),
'LnudgeTCLM', i, &
555 &
'Turning ON nudging of climatology tracer ', i, &
556 & trim(vname(1,idtvar(i)))
558 WRITE (out,100) lnudgetclm(i,ng),
'LnudgeTCLM', i, &
559 &
'Turning OFF nudging of climatology tracer ', i, &
560 & trim(vname(1,idtvar(i)))
563 IF ((nhis(ng).gt.0).and.any(hout(:,ng)))
THEN
567 IF (hout(idtvar(i),ng))
WRITE (out,110) &
568 & hout(idtvar(i),ng),
'Hout(idTvar)', &
569 &
'Write out tracer ', i, trim(vname(1,idtvar(i)))
573 IF (hout(idtsur(i),ng))
WRITE (out,110) &
574 & hout(idtsur(i),ng),
'Hout(idTsur)', &
575 &
'Write out tracer flux ', i, &
576 & trim(vname(1,idtvar(i)))
579 IF ((nqck(ng).gt.0).and.any(qout(:,ng)))
THEN
583 IF (qout(idtvar(i),ng))
WRITE (out,110) &
584 & qout(idtvar(i),ng),
'Qout(idTvar)', &
585 &
'Write out tracer ', i, trim(vname(1,idtvar(i)))
589 IF (qout(idsurt(i),ng))
WRITE (out,110) &
590 & qout(idsurt(i),ng),
'Qout(idsurT)', &
591 &
'Write out surface tracer ', i, &
592 & trim(vname(1,idtvar(i)))
596 IF (qout(idtsur(i),ng))
WRITE (out,110) &
597 & qout(idtsur(i),ng),
'Qout(idTsur)', &
598 &
'Write out tracer flux ', i, &
599 & trim(vname(1,idtvar(i)))
602#if defined AVERAGES || \
603 (defined ad_averages && defined adjoint) || \
604 (defined rp_averages && defined tl_ioms) || \
605 (defined tl_averages && defined tangent)
606 IF ((navg(ng).gt.0).and.any(aout(:,ng)))
THEN
610 IF (aout(idtvar(i),ng))
WRITE (out,110) &
611 & aout(idtvar(i),ng),
'Aout(idTvar)', &
612 &
'Write out averaged tracer ', i, &
613 & trim(vname(1,idtvar(i)))
617 IF (aout(idttav(i),ng))
WRITE (out,110) &
618 & aout(idttav(i),ng),
'Aout(idTTav)', &
619 &
'Write out averaged <t*t> for tracer ', i, &
620 & trim(vname(1,idtvar(i)))
624 IF (aout(idutav(i),ng))
WRITE (out,110) &
625 & aout(idutav(i),ng),
'Aout(idUTav)', &
626 &
'Write out averaged <u*t> for tracer ', i, &
627 & trim(vname(1,idtvar(i)))
631 IF (aout(idvtav(i),ng))
WRITE (out,110) &
632 & aout(idvtav(i),ng),
'Aout(idVTav)', &
633 &
'Write out averaged <v*t> for tracer ', i, &
634 & trim(vname(1,idtvar(i)))
638 IF (aout(ihutav(i),ng))
WRITE (out,110) &
639 & aout(ihutav(i),ng),
'Aout(iHUTav)', &
640 &
'Write out averaged <Huon*t> for tracer ', i, &
641 & trim(vname(1,idtvar(i)))
645 IF (aout(ihvtav(i),ng))
WRITE (out,110) &
646 & aout(ihvtav(i),ng),
'Aout(iHVTav)', &
647 &
'Write out averaged <Hvom*t> for tracer ', i, &
648 & trim(vname(1,idtvar(i)))
653 IF ((ndia(ng).gt.0).and.any(dout(:,ng)))
THEN
657 IF (dout(iddtrc(itrc,itrate),ng)) &
658 &
WRITE (out,110) .true.,
'Dout(iTrate)', &
659 &
'Write out rate of change of tracer ', itrc, &
660 & trim(vname(1,idtvar(itrc)))
664 IF (dout(iddtrc(itrc,ithadv),ng)) &
665 &
WRITE (out,110) .true.,
'Dout(iThadv)', &
666 &
'Write out horizontal advection, tracer ', itrc, &
667 & trim(vname(1,idtvar(itrc)))
671 IF (dout(iddtrc(itrc,itxadv),ng)) &
672 &
WRITE (out,110) .true.,
'Dout(iTxadv)', &
673 &
'Write out horizontal X-advection, tracer ', itrc, &
674 & trim(vname(1,idtvar(itrc)))
678 IF (dout(iddtrc(itrc,ityadv),ng)) &
679 &
WRITE (out,110) .true.,
'Dout(iTyadv)', &
680 &
'Write out horizontal Y-advection, tracer ', itrc, &
681 & trim(vname(1,idtvar(itrc)))
685 IF (dout(iddtrc(itrc,itvadv),ng)) &
686 &
WRITE (out,110) .true.,
'Dout(iTvadv)', &
687 &
'Write out vertical advection, tracer ', itrc, &
688 & trim(vname(1,idtvar(itrc)))
690# if defined TS_DIF2 || defined TS_DIF4
693 IF (dout(iddtrc(itrc,ithdif),ng)) &
694 &
WRITE (out,110) .true.,
'Dout(iThdif)', &
695 &
'Write out horizontal diffusion, tracer ', itrc, &
696 & trim(vname(1,idtvar(itrc)))
700 IF (dout(iddtrc(i,itxdif),ng)) &
701 &
WRITE (out,110) .true.,
'Dout(iTxdif)', &
702 &
'Write out horizontal X-diffusion, tracer ', itrc, &
703 & trim(vname(1,idtvar(itrc)))
707 IF (dout(iddtrc(itrc,itydif),ng)) &
708 &
WRITE (out,110) .true.,
'Dout(iTydif)', &
709 &
'Write out horizontal Y-diffusion, tracer ', itrc, &
710 & trim(vname(1,idtvar(itrc)))
712# if defined MIX_GEO_TS || defined MIX_ISO_TS
715 IF (dout(iddtrc(itrc,itsdif),ng)) &
716 &
WRITE (out,110) .true.,
'Dout(iTsdif)', &
717 &
'Write out horizontal S-diffusion, tracer ', itrc, &
718 & trim(vname(1,idtvar(itrc)))
724 IF (dout(iddtrc(itrc,itvdif),ng)) &
725 &
WRITE (out,110) .true.,
'Dout(iTvdif)', &
726 &
'Write out vertical diffusion, tracer ', itrc, &
727 & trim(vname(1,idtvar(itrc)))
746 nl_tnu4(i,ng)=sqrt(abs(nl_tnu4(i,ng)))
748 ad_tnu4(i,ng)=sqrt(abs(ad_tnu4(i,ng)))
750#if defined TANGENT || defined TL_IOMS
751 tl_tnu4(i,ng)=sqrt(abs(tl_tnu4(i,ng)))
756 IF (tnudg(i,ng).gt.0.0_r8)
THEN
757 tnudg(i,ng)=1.0_r8/(tnudg(i,ng)*86400.0_r8)
764 30
FORMAT (/,
' read_BioPar - variable info not yet loaded, ', &
766 40
FORMAT (/,
' read_BioPar - Error while processing line: ',/,a)
767 50
FORMAT (/,/,
' Hypoxia-SRM Parameters, Grid: ',i2.2, &
768 & /,
' ================================',/)
769 60
FORMAT (1x,i10,2x,a,t32,a)
770 70
FORMAT (1p,e11.4,2x,a,t32,a)
771 80
FORMAT (1p,e11.4,2x,a,t32,a,/,t34,a)
772 90
FORMAT (1p,e11.4,2x,a,
'(',i2.2,
')',t32,a,/,t34,a,i2.2,
':',1x,a)
773 100
FORMAT (10x,l1,2x,a,
'(',i2.2,
')',t32,a,i2.2,
':',1x,a)
774 110
FORMAT (10x,l1,2x,a,t32,a,i2.2,
':',1x,a)