2
3
4
5
6
7
8
9
10
11
12
13
14
15
21
23
24 implicit none
25
26
27
28 logical, intent(in) :: Lwrite
29 integer, intent(in) :: model, inp, out
30
31
32
33 integer :: Npts, Nval
34 integer :: iTrcStr, iTrcEnd
35 integer :: i, ifield, igrid, itracer, itrc, ng, nline, status
36
37 logical, dimension(NBT,Ngrids) :: Ltrc
38
39 real(r8), dimension(NBT,Ngrids) :: Rbio
40
41 real(dp), dimension(nRval) :: Rval
42
43 character (len=40 ) :: KeyWord
44 character (len=256) :: line
45 character (len=256), dimension(nCval) :: Cval
46
47
48
49
50
51 igrid=1
52 itracer=0
53 itrcstr=1
55 nline=0
56
57
58
59
60
61
62 DO WHILE (.true.)
63 READ (inp,'(a)',err=10,END=20) line
65 IF (status.gt.0) THEN
66 SELECT CASE (trim(keyword))
67 CASE ('Lbiology')
69 CASE ('BioIter')
71 CASE ('Gmax')
73 CASE ('Dg')
75 CASE ('Kn')
77 CASE ('G_eff')
79 CASE ('G_r')
81 CASE ('srad_Cdepth')
83 CASE ('AttW')
85 CASE ('AttS')
87 CASE ('E_light')
89 CASE ('E_dark')
91 CASE ('Tmin_growth')
93 CASE ('DIN_Cdepth')
95 CASE ('wDino')
97 CASE ('MOR_a')
99 CASE ('MOR_b')
101 CASE ('MOR_Q10')
103 CASE ('MOR_T0')
105 CASE ('TNU2')
111 END DO
112 END DO
113 CASE ('TNU4')
119 END DO
120 END DO
121 CASE ('ad_TNU2')
128 END DO
129 END DO
130 CASE ('ad_TNU4')
137 END DO
138 END DO
139 CASE ('LtracerSponge')
145 END DO
146 END DO
147 CASE ('AKT_BAK')
153 END DO
154 END DO
155 CASE ('ad_AKT_fac')
162 END DO
163 END DO
164 CASE ('TNUDG')
169 tnudg(i,ng)=rbio(itrc,ng)
170 END DO
171 END DO
172 CASE ('Hadvection')
173 IF (itracer.lt.
nbt)
THEN
174 itracer=itracer+1
175 ELSE
176 itracer=1
177 END IF
179 npts=
load_tadv(nval, cval, line, nline, itrc, igrid, &
183 CASE ('Vadvection')
184 IF (itracer.lt.
nbt)
THEN
185 itracer=itracer+1
186 ELSE
187 itracer=1
188 END IF
190 npts=
load_tadv(nval, cval, line, nline, itrc, igrid, &
194#if defined ADJOINT || defined TANGENT || defined TL_IOMS
195 CASE ('ad_Hadvection')
196 IF (itracer.lt.
nbt)
THEN
197 itracer=itracer+1
198 ELSE
199 itracer=1
200 END IF
202 npts=
load_tadv(nval, cval, line, nline, itrc, igrid, &
206 CASE ('Vadvection')
207 IF (itracer.lt.(
nbt)
THEN
208 itracer=itracer+1
209 ELSE
210 itracer=1
211 END IF
213 npts=
load_tadv(nval, cval, line, nline, itrc, igrid, &
217#endif
218 CASE ('LBC(isTvar)')
219 IF (itracer.lt.
nbt)
THEN
220 itracer=itracer+1
221 ELSE
222 itracer=1
223 END IF
225 npts=
load_lbc(nval, cval, line, nline, ifield, igrid, &
228#if defined ADJOINT || defined TANGENT || defined TL_IOMS
229 CASE ('ad_LBC(isTvar)')
230 IF (itracer.lt.
nbt)
THEN
231 itracer=itracer+1
232 ELSE
233 itracer=1
234 END IF
236 npts=
load_lbc(nval, cval, line, nline, ifield, igrid, &
239#endif
240 CASE ('LtracerSrc')
246 END DO
247 END DO
248 CASE ('LtracerCLM')
254 END DO
255 END DO
256 CASE ('LnudgeTCLM')
262 END DO
263 END DO
264 CASE ('Hout(idTvar)')
269 IF (i.eq.0) THEN
270 IF (
master)
WRITE (out,30) &
271 & 'idTvar(idbio(', itrc, '))'
273 RETURN
274 END IF
275 hout(i,ng)=ltrc(itrc,ng)
276 END DO
277 END DO
278 CASE ('Hout(idTsur)')
283 IF (i.eq.0) THEN
284 IF (
master)
WRITE (out,30) &
285 & 'idTsur(idbio(', itrc, '))'
287 RETURN
288 END IF
289 hout(i,ng)=ltrc(itrc,ng)
290 END DO
291 END DO
292 CASE ('Qout(idTvar)')
297 qout(i,ng)=ltrc(itrc,ng)
298 END DO
299 END DO
300 CASE ('Qout(idsurT)')
305 IF (i.eq.0) THEN
306 IF (
master)
WRITE (out,30) &
307 & 'idsurT(idbio(', itrc, '))'
309 RETURN
310 END IF
311 qout(i,ng)=ltrc(itrc,ng)
312 END DO
313 END DO
314 CASE ('Qout(idTsur)')
319 qout(i,ng)=ltrc(itrc,ng)
320 END DO
321 END DO
322#if defined AVERAGES || \
323 (defined ad_averages && defined adjoint) || \
324 (defined rp_averages && defined tl_ioms) || \
325 (defined tl_averages && defined tangent)
326 CASE ('Aout(idTvar)')
331 aout(i,ng)=ltrc(itrc,ng)
332 END DO
333 END DO
334 CASE ('Aout(idTTav)')
339 aout(i,ng)=ltrc(itrc,ng)
340 END DO
341 END DO
342 CASE ('Aout(idUTav)')
347 aout(i,ng)=ltrc(itrc,ng)
348 END DO
349 END DO
350 CASE ('Aout(idVTav)')
355 aout(i,ng)=ltrc(itrc,ng)
356 END DO
357 END DO
358 CASE ('Aout(iHUTav)')
363 aout(i,ng)=ltrc(itrc,ng)
364 END DO
365 END DO
366 CASE ('Aout(iHVTav)')
371 aout(i,ng)=ltrc(itrc,ng)
372 END DO
373 END DO
374#endif
375#ifdef DIAGNOSTICS_TS
376 CASE ('Dout(iTrate)')
382 END DO
383 END DO
384 CASE ('Dout(iThadv)')
390 END DO
391 END DO
392 CASE ('Dout(iTxadv)')
398 END DO
399 END DO
400 CASE ('Dout(iTyadv)')
406 END DO
407 END DO
408 CASE ('Dout(iTvadv)')
414 END DO
415 END DO
416# if defined TS_DIF2 || defined TS_DIF4
417 CASE ('Dout(iThdif)')
423 END DO
424 END DO
425 CASE ('Dout(iTxdif)')
431 END DO
432 END DO
433 CASE ('Dout(iTydif)')
439 END DO
440 END DO
441# if defined MIX_GEO_TS || defined MIX_ISO_TS
442 CASE ('Dout(iTsdif)')
448 END DO
449 END DO
450# endif
451# endif
452 CASE ('Dout(iTvdif)')
458 END DO
459 END DO
460#endif
461 END SELECT
462 END IF
463 END DO
464 10
IF (
master)
WRITE (out,40) line
466 RETURN
467 20 CONTINUE
468
469
470
471
472
473 IF (
master.and.lwrite)
THEN
476 WRITE (out,50) ng
477 WRITE (out,60)
bioiter(ng),
'BioIter', &
478 & 'Number of iterations for nonlinear convergence.'
479 WRITE (out,70)
gmax(ng),
'Gmax', &
480 & 'Maximum grow rate at optimal T/S (1/day).'
481 WRITE (out,70)
dg(ng),
'Dg', &
482 & 'Depth of sediment for cysts germination (cm).'
483 WRITE (out,80)
kn(ng),
'Kn', &
484 & 'Half-saturation for nutrient limited growth', &
485 & '(millimole/m3).'
486 WRITE (out,70)
g_eff(ng),
'G_eff', &
487 & 'Growth efficiency (m2/Watts/day).'
488 WRITE (out,70)
g_r(ng),
'G_r', &
489 & 'Maintanenance respiration rate (1/day).'
491 & 'Average shortwave radiation for critical depth', &
492 & 'in growth function (Watts/m2).'
493 WRITE (out,80)
attw(ng),
'AttW', &
494 & 'Mean diffuse attenuation coefficient in water', &
495 & 'colunm (1/m).'
496 WRITE (out,80)
atts(ng),
'AttS', &
497 & 'Mean diffuse attenuation coefficient in sediment', &
498 & '(1/mm).'
499 WRITE (out,80)
e_light(ng),
'E_light', &
500 & 'Light level for germination under light conditions', &
501 & '(Watt/m2).'
502 WRITE (out,80)
e_dark(ng),
'E_dark', &
503 & 'Light level for germination under dark conditions', &
504 & '(Watt/m2).'
506 & 'Coldest temperature used in growth factor cubic', &
507 & 'polynomial term (Cesius).'
508 WRITE (out,80)
din_cdepth(ng),
'DIN_Cdepth', &
509 & 'Dissolved Inorganic Nutrient concentration', &
510 & 'below of growth critical depth (millimoles/m3)'
511 WRITE (out,80)
wdino(ng),
'wDino', &
512 & 'Dinoflagellate upward swimming/migration rate', &
513 & '(positive, m/day).'
514 WRITE (out,80)
mor_a(ng),
'Mor_a', &
515 & 'Mortality rate equation, Q10 amplitude term', &
516 & '(1/day).'
517 WRITE (out,80)
mor_b(ng),
'Mor_b', &
518 & 'Mortality rate equation, Q10 intercept term', &
519 & '(1/day).'
520 WRITE (out,80)
mor_q10(ng),
'Mor_Q10', &
521 & 'Mortality rate equation, Q10 reaction rate base', &
522 & '(nondimensional).'
523 WRITE (out,80)
mor_t0(ng),
'Mor_T0', &
524 & 'Mortality rate equation, background temperature', &
525 & '(Celsius).'
526#ifdef TS_DIF2
529 WRITE (out,90)
nl_tnu2(i,ng),
'nl_tnu2', i, &
530 & 'NLM Horizontal, harmonic mixing coefficient', &
531 &
'(m2/s) for tracer ', i, trim(
vname(1,
idtvar(i)))
532# ifdef ADJOINT
533 WRITE (out,90)
ad_tnu2(i,ng),
'ad_tnu2', i, &
534 & 'ADM Horizontal, harmonic mixing coefficient', &
535 &
'(m2/s) for tracer ', i, trim(
vname(1,
idtvar(i)))
536# endif
537# if defined TANGENT || defined TL_IOMS
538 WRITE (out,90)
tl_tnu2(i,ng),
'tl_tnu2', i, &
539 & 'TLM Horizontal, harmonic mixing coefficient', &
540 &
'(m2/s) for tracer ', i, trim(
vname(1,
idtvar(i)))
541# endif
542 END DO
543#endif
544#ifdef TS_DIF4
547 WRITE (out,90)
nl_tnu4(i,ng),
'nl_tnu4', i, &
548 & 'NLM Horizontal, biharmonic mixing coefficient', &
549 &
'(m4/s) for tracer ', i, trim(
vname(1,
idtvar(i)))
550# ifdef ADJOINT
551 WRITE (out,90)
ad_tnu4(i,ng),
'ad_tnu4', i, &
552 & 'ADM Horizontal, biharmonic mixing coefficient', &
553 &
'(m4/s) for tracer ', i, trim(
vname(1,
idtvar(i)))
554# endif
555# if defined TANGENT || defined TL_IOMS
556 WRITE (out,90)
tl_tnu4(i,ng),
'tl_tnu4', i, &
557 & 'TLM Horizontal, biharmonic mixing coefficient', &
558 &
'(m4/s) for tracer ', i, trim(
vname(1,
idtvar(i)))
559# endif
560 END DO
561#endif
566 & i, 'Turning ON sponge on tracer ', i, &
568 ELSE
570 & i, 'Turning OFF sponge on tracer ', i, &
572 END IF
573 END DO
576 WRITE(out,90)
akt_bak(i,ng),
'Akt_bak', i, &
577 & 'Background vertical mixing coefficient (m2/s)', &
579 END DO
580#ifdef FORWARD_MIXING
583# ifdef ADJOINT
584 WRITE (out,90)
ad_akt_fac(i,ng),
'ad_Akt_fac', i, &
585 & 'ADM basic state vertical mixing scale factor', &
587# endif
588# if defined TANGENT || defined TL_IOMS
589 WRITE (out,90)
tl_akt_fac(i,ng),
'tl_Akt_fac', i, &
590 & 'TLM basic state vertical mixing scale factor', &
592# endif
593 END DO
594#endif
597 WRITE (out,90)
tnudg(i,ng),
'Tnudg', i, &
598 & 'Nudging/relaxation time scale (days)', &
600 END DO
604 WRITE (out,100)
ltracersrc(i,ng),
'LtracerSrc', &
605 & i, 'Turning ON point sources/Sink on tracer ', i, &
607 ELSE
608 WRITE (out,100)
ltracersrc(i,ng),
'LtracerSrc', &
609 & i, 'Turning OFF point sources/Sink on tracer ', i, &
611 END IF
612 END DO
616 WRITE (out,100)
ltracerclm(i,ng),
'LtracerCLM', i, &
617 & 'Turning ON processing of climatology tracer ', i, &
619 ELSE
620 WRITE (out,100)
ltracerclm(i,ng),
'LtracerCLM', i, &
621 & 'Turning OFF processing of climatology tracer ', i, &
623 END IF
624 END DO
628 WRITE (out,100)
lnudgetclm(i,ng),
'LnudgeTCLM', i, &
629 & 'Turning ON nudging of climatology tracer ', i, &
631 ELSE
632 WRITE (out,100)
lnudgetclm(i,ng),
'LnudgeTCLM', i, &
633 & 'Turning OFF nudging of climatology tracer ', i, &
635 END IF
636 END DO
637 IF ((
nhis(ng).gt.0).and.any(
hout(:,ng)))
THEN
638 WRITE (out,'(1x)')
644 END DO
649 & 'Write out tracer flux ', i, &
651 END DO
652 END IF
653 IF ((
nqck(ng).gt.0).and.any(
qout(:,ng)))
THEN
654 WRITE (out,'(1x)')
660 END DO
665 & 'Write out surface tracer ', i, &
667 END DO
672 & 'Write out tracer flux ', i, &
674 END DO
675 END IF
676#if defined AVERAGES || \
677 (defined ad_averages && defined adjoint) || \
678 (defined rp_averages && defined tl_ioms) || \
679 (defined tl_averages && defined tangent)
680 IF ((
navg(ng).gt.0).and.any(
aout(:,ng)))
THEN
681 WRITE (out,'(1x)')
686 & 'Write out averaged tracer ', i, &
688 END DO
693 & 'Write out averaged <t*t> for tracer ', i, &
695 END DO
700 & 'Write out averaged <u*t> for tracer ', i, &
702 END DO
707 & 'Write out averaged <v*t> for tracer ', i, &
709 END DO
714 & 'Write out averaged <Huon*t> for tracer ', i, &
716 END DO
721 & 'Write out averaged <Hvom*t> for tracer ', i, &
723 END DO
724 END IF
725#endif
726#ifdef DIAGNOSTICS_TS
727 IF ((
ndia(ng).gt.0).and.any(
dout(:,ng)))
THEN
728 WRITE (out,'(1x)')
732 & WRITE (out,110) .true., 'Dout(iTrate)', &
733 & 'Write out rate of change of tracer ', itrc, &
735 END DO
739 & WRITE (out,110) .true., 'Dout(iThadv)', &
740 & 'Write out horizontal advection, tracer ', itrc, &
742 END DO
746 & WRITE (out,110) .true., 'Dout(iTxadv)', &
747 & 'Write out horizontal X-advection, tracer ', itrc, &
749 END DO
753 & WRITE (out,110) .true., 'Dout(iTyadv)', &
754 & 'Write out horizontal Y-advection, tracer ', itrc, &
756 END DO
760 & WRITE (out,110) .true., 'Dout(iTvadv)', &
761 & 'Write out vertical advection, tracer ', itrc, &
763 END DO
764# if defined TS_DIF2 || defined TS_DIF4
768 & WRITE (out,110) .true., 'Dout(iThdif)', &
769 & 'Write out horizontal diffusion, tracer ', itrc, &
771 END DO
775 & WRITE (out,110) .true., 'Dout(iTxdif)', &
776 & 'Write out horizontal X-diffusion, tracer ', itrc, &
778 END DO
782 & WRITE (out,110) .true., 'Dout(iTydif)', &
783 & 'Write out horizontal Y-diffusion, tracer ', itrc, &
785 END DO
786# if defined MIX_GEO_TS || defined MIX_ISO_TS
790 & WRITE (out,110) .true., 'Dout(iTsdif)', &
791 & 'Write out horizontal S-diffusion, tracer ', itrc, &
793 END DO
794# endif
795# endif
799 & WRITE (out,110) .true., 'Dout(iTvdif)', &
800 & 'Write out vertical diffusion, tracer ', itrc, &
802 END DO
803 END IF
804#endif
805 END IF
806 END DO
807 END IF
808
809
810
811
812
815 dg(ng)=0.01_r8*
dg(ng)
816#ifdef DAILY_SHORTWAVE
818#endif
819
820
821
822
826#ifdef ADJOINT
828#endif
829#if defined TANGENT || defined TL_IOMS
831#endif
832
833
834
835 IF (
tnudg(i,ng).gt.0.0_r8)
THEN
837 ELSE
839 END IF
840 END DO
841 END DO
842
843 30 FORMAT (/,' read_BioPar - variable info not yet loaded, ', &
844 & a,i2.2,a)
845 40 FORMAT (/,' read_BioPar - Error while processing line: ',/,a)
846 50 FORMAT (/,/,' RED-TIDE Model Parameters, Grid: ',i2.2, &
847 & /, ' ===================================',/)
848 60 FORMAT (1x,i10,2x,a,t32,a)
849 70 FORMAT (1p,e11.4,2x,a,t32,a)
850 80 FORMAT (1p,e11.4,2x,a,t32,a,/,t34,a)
851 90 FORMAT (1p,e11.4,2x,a,'(',i2.2,')',t32,a,/,t34,a,i2.2,':',1x,a)
852 100 FORMAT (10x,l1,2x,a,'(',i2.2,')',t32,a,i2.2,':',1x,a)
853 110 FORMAT (10x,l1,2x,a,t32,a,i2.2,':',1x,a)
854
855 RETURN
integer function decode_line(line_text, keyword, nval, cval, rval)
integer function load_lbc(ninp, vinp, line, nline, ifield, igrid, itrcstr, itrcend, svname, s)
integer function load_tadv(ninp, vinp, line, nline, itrc, igrid, itracer, itrcstr, itrcend, svname, s)
real(r8), dimension(:), allocatable mor_t0
integer, dimension(:), allocatable bioiter
real(r8), dimension(:), allocatable e_dark
real(r8), dimension(:), allocatable srad_cdepth
real(r8), dimension(:), allocatable din_cdepth
real(r8), dimension(:), allocatable wdino
real(r8), dimension(:), allocatable mor_q10
real(r8), dimension(:), allocatable dg
real(r8), dimension(:), allocatable g_eff
real(r8), dimension(:), allocatable mor_b
real(r8), dimension(:), allocatable e_light
real(r8), dimension(:), allocatable mor_a
real(r8), dimension(:), allocatable attw
real(r8), dimension(:), allocatable atts
integer, dimension(:), allocatable idbio
real(r8), dimension(:), allocatable g_r
real(r8), dimension(:), allocatable kn
real(r8), dimension(:), allocatable tmin_growth
real(r8), dimension(:), allocatable gmax
integer, dimension(:), allocatable idttav
logical, dimension(:,:), allocatable hout
integer, dimension(:), allocatable ihvtav
integer, dimension(:), allocatable ihutav
integer, dimension(:), allocatable idutav
integer, dimension(:), allocatable idsurt
integer, dimension(:), allocatable idtsur
integer, dimension(:), allocatable idtvar
integer, dimension(:), allocatable istvar
real(dp), dimension(:,:), allocatable fscale
logical, dimension(:,:), allocatable qout
character(len=maxlen), dimension(6, 0:nv) vname
integer, dimension(:), allocatable idvtav
logical, dimension(:,:), allocatable dout
logical, dimension(:,:), allocatable aout
integer, dimension(:,:), allocatable iddtrc
type(t_adv), dimension(:,:), allocatable hadvection
type(t_lbc), dimension(:,:,:), allocatable ad_lbc
type(t_adv), dimension(:,:), allocatable ad_hadvection
type(t_lbc), dimension(:,:,:), allocatable lbc
type(t_adv), dimension(:,:), allocatable vadvection
type(t_adv), dimension(:,:), allocatable ad_vadvection
real(r8), dimension(:,:), allocatable tl_tnu2
logical, dimension(:,:), allocatable ltracersrc
real(r8), dimension(:,:), allocatable nl_tnu2
integer, dimension(:), allocatable nqck
real(dp), dimension(:,:), allocatable tnudg
logical, dimension(:,:), allocatable ltracersponge
real(r8), dimension(:,:), allocatable tl_tnu4
integer, dimension(:), allocatable navg
real(r8), dimension(:,:), allocatable ad_akt_fac
real(r8), dimension(:,:), allocatable ad_tnu2
real(r8), dimension(:,:), allocatable akt_bak
integer, dimension(:), allocatable nhis
real(r8), dimension(:,:), allocatable ad_tnu4
real(r8), dimension(:,:), allocatable nl_tnu4
logical, dimension(:), allocatable lbiology
logical, dimension(:,:), allocatable ltracerclm
integer, dimension(:), allocatable ndia
logical, dimension(:,:), allocatable lnudgetclm
real(r8), dimension(:,:), allocatable tl_akt_fac