81# if defined PIO_LIB && defined DISTRIBUTE
87# ifdef ADJUST_BOUNDARY
90# if defined ADJUST_STFLUX || defined ADJUST_WSTRESS
96# ifdef BALANCE_OPERATOR
124# if defined MASKING && defined SPLIT_4DVAR
129# ifdef BALANCE_OPERATOR
142# if defined ADJUST_BOUNDARY || defined ADJUST_STFLUX || \
143 defined adjust_wstress
150# if defined BALANCE_OPERATOR && defined ZETA_ELLIPTIC
206 integer,
intent(in) :: my_outer
210 integer :: lstr, ng, tile
214 integer :: fcount, inprec, tindex
219 character (len=*),
parameter :: myfile = &
220 & __FILE__//
", background_initialize"
233 DO thread=thread_range
257 IF (my_outer.gt.1)
THEN
262# if defined ADJUST_BOUNDARY || defined ADJUST_STFLUX || \
263 defined adjust_wstress
268 IF (my_outer.gt.1)
THEN
271# ifdef ADJUST_BOUNDARY
283 IF (my_outer.gt.1)
THEN
295 IF (my_outer.gt.1)
THEN
313 IF (my_outer.gt.1)
THEN
315 SELECT CASE (
dav(ng)%IOtype)
319 & ncid =
dav(ng)%ncid)
321# if defined PIO_LIB && defined DISTRIBUTE
325 & piofile =
dav(ng)%pioFile)
335 IF (my_outer.gt.1)
THEN
337 SELECT CASE (
dav(ng)%IOtype)
340 &
'NLcost_function', &
342 & ncid =
dav(ng)%ncid, &
346# if defined PIO_LIB && defined DISTRIBUTE
349 &
'NLcost_function', &
351 & piofile =
dav(ng)%pioFile, &
360# if defined ADJUST_STFLUX || defined ADJUST_WSTRESS || \
361 defined adjust_boundary
366 IF (my_outer.gt.1)
THEN
379# ifdef FORWARD_FLUXES
385 IF (my_outer.gt.1)
THEN
387 WRITE (
qck(ng)%name,10) trim(
qck(ng)%head), my_outer-2
388 lstr=len_trim(
qck(ng)%name)
389 qck(ng)%base=
qck(ng)%name(1:lstr-3)
406 IF (my_outer.eq.1)
THEN
421 WRITE (
his(ng)%name,10) trim(
fwd(ng)%head), my_outer-1
422 lstr=len_trim(
his(ng)%name)
423 his(ng)%base=
his(ng)%name(1:lstr-3)
435# ifdef FORWARD_FLUXES
438 WRITE (
qck(ng)%name,10) trim(
qck(ng)%head), my_outer-1
439 lstr=len_trim(
qck(ng)%name)
440 qck(ng)%base=
qck(ng)%name(1:lstr-3)
453 rst(ng)%Nrec(fcount)=0
465 IF (my_outer.eq.1)
THEN
470 ini(ng)%Nrec(fcount)=1
489 IF (my_outer.eq.1)
THEN
493 CALL background_std (ng, tile, tindex, lstd)
500 IF (lwrtstd(ng))
THEN
502 fcount=
std(5,ng)%load
503 std(5,ng)%Nrec(fcount)=1
505 CALL wrt_std (ng,
myrank, lstd)
507 CALL wrt_std (ng, -1, lstd)
515# if defined BALANCE_OPERATOR && defined ZETA_ELLIPTIC
534 IF (my_outer.eq.1)
THEN
542 10
FORMAT (a,
'_outer',i0,
'.nc')
566 integer,
intent(in) :: my_outer
568 real(
dp),
intent(in) :: runinterval
572 logical :: donestepping
574 integer :: i, lstr, ng
578# if defined MODEL_COUPLING && !defined MCT_LIB
579 integer :: nstrstep, nendstep, extra
581 real(
dp) :: endtime, nexttime
584 character (len=*),
parameter :: myfile = &
585 & __FILE__//
", background"
589# if !(defined MODEL_COUPLING && defined ESMF_LIB)
605# if defined MODEL_COUPLING && !defined MCT_LIB
618 DO thread=thread_range
633 WRITE (
avg(ng)%name,10) trim(
avg(ng)%head), my_outer
634 lstr=len_trim(
avg(ng)%name)
635 avg(ng)%base=
avg(ng)%name(1:lstr-3)
641 WRITE (
dia(ng)%name,10) trim(
dia(ng)%head), my_outer
642 lstr=len_trim(
dia(ng)%name)
643 dia(ng)%base=
dia(ng)%name(1:lstr-3)
646# if defined MODEL_COUPLING && !defined MCT_LIB
648 nexttime=
time(ng)+runinterval
650 IF ((nexttime.eq.endtime).and.(ng.eq.1))
THEN
675# if defined MODEL_COUPLING && !defined MCT_LIB
682# if defined MODEL_COUPLING && !defined MCT_LIB
683 IF (nendstep.eq.
ntend(1))
THEN
692 IF (donestepping)
THEN
694# if defined ADJUST_BOUNDARY || defined ADJUST_STFLUX || \
695 defined adjust_wstress
708 IF (my_outer.eq.1)
THEN
724 SELECT CASE (
dav(ng)%IOtype)
727 &
'NLcost_function', &
731 & ncid =
dav(ng)%ncid)
733# if defined PIO_LIB && defined DISTRIBUTE
736 &
'NLcost_function', &
740 & piofile =
dav(ng)%pioFile)
752 DO thread=thread_range
758 10
FORMAT (a,
'_outer',i0,
'.nc')
759 20
FORMAT (/,1x,a,1x,
'ROMS: started time-stepping:', &
760 &
' (Grid: ',i0,
', Outer: ',i2.2,
', Inner: ',i3.3, &
761 ', TimeSteps: ',i0,
' - ',i0,
')',/)
782 logical :: lweak = .false.
784 integer,
intent(in) :: my_outer
786 real(
dp),
intent(in) :: runinterval
790 integer :: i, ifile, lstr, my_inner, ng, tile
791 integer :: fcount, inprec, lcon, lsav
801 character (len=10) :: suffix
803 character (len=*),
parameter :: myfile = &
804 & __FILE__//
", increment"
817 DO thread=thread_range
832 IF (my_outer.gt.1)
THEN
857 SELECT CASE (
dav(ng)%IOtype)
861 & ncid =
dav(ng)%ncid)
863# if defined PIO_LIB && defined DISTRIBUTE
867 & piofile =
dav(ng)%pioFile)
878 SELECT CASE (
dav(ng)%IOtype)
881 &
'NLcost_function', &
883 & ncid =
dav(ng)%ncid, &
887# if defined PIO_LIB && defined DISTRIBUTE
890 &
'NLcost_function', &
892 & piofile =
dav(ng)%pioFile, &
903 SELECT CASE (
dav(ng)%IOtype)
906 &
'NLcost_function', &
908 & ncid =
dav(ng)%ncid, &
909 & start = (/1,my_outer/), &
912# if defined PIO_LIB && defined DISTRIBUTE
915 &
'NLcost_function', &
917 & piofile =
dav(ng)%pioFile, &
918 & start = (/1,my_outer/), &
929 IF (my_outer.gt.1)
THEN
931 SELECT CASE (
dav(ng)%IOtype)
934 &
'TLcost_function', &
936 & ncid =
dav(ng)%ncid, &
937 & start = (/
nrun-1/), &
945 & ncid =
dav(ng)%ncid, &
946 & start = (/
nrun-1/), &
951# if defined PIO_LIB && defined DISTRIBUTE
954 &
'TLcost_function', &
956 & piofile =
dav(ng)%pioFile, &
957 & start = (/
nrun-1/), &
965 & piofile =
dav(ng)%pioFile, &
966 & start = (/
nrun-1/), &
982 IF (my_outer.gt.1)
THEN
992 IF (my_outer.gt.1)
THEN
1003 IF (my_outer.gt.1)
THEN
1016 WRITE (
his(ng)%name,10) trim(
fwd(ng)%head), my_outer-1
1017 lstr=len_trim(
his(ng)%name)
1018 his(ng)%base=
his(ng)%name(1:lstr-3)
1019 IF (
his(ng)%Nfiles.gt.1)
THEN
1020 DO ifile=1,
his(ng)%Nfiles
1021 WRITE (suffix,
"('_',i4.4,'.nc')") ifile
1022 his(ng)%files(ifile)=trim(
his(ng)%base)//trim(suffix)
1024 his(ng)%name=trim(
his(ng)%files(1))
1026 his(ng)%files(1)=trim(
his(ng)%name)
1037 WRITE (
qck(ng)%name,10) trim(
qck(ng)%head), my_outer-1
1038 lstr=len_trim(
qck(ng)%name)
1039 qck(ng)%base=
qck(ng)%name(1:lstr-3)
1040 IF (
qck(ng)%Nfiles.gt.1)
THEN
1041 DO ifile=1,
qck(ng)%Nfiles
1042 WRITE (suffix,
"('_',i4.4,'.nc')") ifile
1043 qck(ng)%files(ifile)=trim(
qck(ng)%base)//trim(suffix)
1045 qck(ng)%name=trim(
qck(ng)%files(1))
1047 qck(ng)%files(1)=trim(
qck(ng)%name)
1058 SELECT CASE (
his(ng)%IOtype)
1062 & start = (/inprec/), &
1065# if defined PIO_LIB && defined DISTRIBUTE
1069 & start = (/inprec/), &
1076# ifdef ADJUST_BOUNDARY
1086# if defined ADJUST_STFLUX || defined ADJUST_WSTRESS
1131# ifdef FORWARD_FLUXES
1174 adm(ng)%Nrec(fcount)=0
1182 WRITE (
adm(ng)%name,10) trim(
adm(ng)%head), my_outer
1183 lstr=len_trim(
adm(ng)%name)
1184 adm(ng)%base=
adm(ng)%name(1:lstr-3)
1194 WRITE (
hss(ng)%name,10) trim(
hss(ng)%head), my_outer
1195 lstr=len_trim(
hss(ng)%name)
1196 hss(ng)%base=
hss(ng)%name(1:lstr-3)
1206 inner_loop :
DO my_inner=0,
ninner
1226 IF ((my_inner.eq.0).and.(my_outer.eq.1))
THEN
1260 WRITE (
tlm(ng)%name,20) trim(
tlm(ng)%head),
nrun
1261 lstr=len_trim(
tlm(ng)%name)
1262 tlm(ng)%base=
tlm(ng)%name(1:lstr-3)
1271 WRITE (
stdout,30)
'TL', ng, my_outer, my_inner, &
1294 IF (my_inner.ne.0)
THEN
1333 WRITE (
stdout,30)
'AD', ng, my_outer, my_inner, &
1350# if defined ADJUST_STFLUX || defined ADJUST_WSTRESS
1353# ifdef ADJUST_BOUNDARY
1371 IF (my_inner.eq.0)
THEN
1385 inprec=
adm(ng)%Rindex
1389# ifdef BALANCE_OPERATOR
1412# ifdef BALANCE_OPERATOR
1441 IF (my_inner.gt.0)
THEN
1455 IF (my_inner.eq.0)
THEN
1515 rate=100.0_r8*abs(
fourdvar(ng)%CostFun(0)- &
1524 WRITE (
stdout,40) my_outer, my_inner, &
1530 IF (my_inner.eq.0)
THEN
1532 IF (
fourdvar(ng)%NLobsCost(i).ne.0.0_r8)
THEN
1534 WRITE (
stdout,50) my_outer, my_inner, &
1538 WRITE (
stdout,60) my_outer, my_inner, &
1558# if defined ADJUST_STFLUX || defined ADJUST_WSTRESS
1561# ifdef ADJUST_BOUNDARY
1568 adm(ng)%Rindex=
adm(ng)%Rindex-1
1620# ifdef BALANCE_OPERATOR
1678 DO thread=thread_range
1684 10
FORMAT (a,
'_outer',i0,
'.nc')
1685 20
FORMAT (a,
'_member',i3.3,
'.nc')
1686 30
FORMAT (/,1x,a,1x,
'ROMS: started time-stepping:', &
1687 &
' (Grid: ',i0,
', Outer: ',i2.2,
', Inner: ',i3.3, &
1688 ', TimeSteps: ',i0,
' - ',i0,
')',/)
1689 40
FORMAT (/,
' (',i3.3,
',',i3.3,
'): TLM Cost Jb, J = ', &
1690 & 1p,e17.10,0p,1x,1p,e17.10,0p,t68,1p,e11.4,
' %')
1691 50
FORMAT (/,
'>(',i3.3,
',',i3.3,
'): NLM Cost J = ', &
1693 60
FORMAT (
' (',i3.3,
',',i3.3,
'): NLM Cost J = ', &
1694 & 18x,1p,e17.10,0p,t69,a)
1695 70
FORMAT (/,1x,
'(',i3.3,
',',i3.3,
'): Optimality (2*J/Nobs) = ', &
1718 logical :: lweak = .false.
1720 integer,
intent(in) :: my_outer
1722 real(
dp),
intent(in) :: runinterval
1727 integer :: fcount, lcon, nrec
1728 integer :: inprec, outrec
1733 character (len=*),
parameter :: myfile = &
1734 & __FILE__//
", analysis"
1751 DO thread=thread_range
1853 ini(ng)%Nrec(fcount)=1
1892# if defined ADJUST_STFLUX || defined ADJUST_WSTRESS || \
1893 defined adjust_boundary
1907# ifdef BALANCE_OPERATOR
1917# if defined BULK_FLUXES && !defined FORWARD_FLUXES
1921# if defined FORWARD_FLUXES || !defined BULK_FLUXES
1929# ifdef BALANCE_OPERATOR
1975 DO thread=thread_range
2001 integer :: i, ifile, lstr, ng, tile
2002 integer :: fcount, inprec
2007 character (len=*),
parameter :: myfile = &
2008 & __FILE__//
", posterior_analysis_initialize"
2021 DO thread=thread_range
2083 SELECT CASE (
dav(ng)%IOtype)
2087 & ncid =
dav(ng)%ncid)
2089# if defined PIO_LIB && defined DISTRIBUTE
2093 & piofile =
dav(ng)%pioFile)
2102 SELECT CASE (
dav(ng)%IOtype)
2105 &
'NLcost_function', &
2107 & ncid =
dav(ng)%ncid, &
2108 & start = (/1,1/), &
2109 & total = (/
nobsvar(ng)+1,1/))
2111# if defined PIO_LIB && defined DISTRIBUTE
2114 &
'NLcost_function', &
2116 & piofile =
dav(ng)%pioFile, &
2117 & start = (/1,1/), &
2118 & total = (/
nobsvar(ng)+1,1/))
2124# if defined ADJUST_STFLUX || defined ADJUST_WSTRESS || \
2125 defined adjust_boundary
2146# ifdef ADJUST_BOUNDARY
2152# ifdef FORWARD_FLUXES
2160 lstr=len_trim(
qck(ng)%name)
2161 qck(ng)%base=
qck(ng)%name(1:lstr-3)
2182# ifdef FORWARD_FLUXES
2188 his(ng)%Nrec(fcount)=0
2190 lstr=len_trim(
his(ng)%name)
2191 his(ng)%base=
his(ng)%name(1:lstr-3)
2203# ifdef FORWARD_FLUXES
2207 lstr=len_trim(
qck(ng)%name)
2208 qck(ng)%base=
qck(ng)%name(1:lstr-3)
2221 rst(ng)%Nrec(fcount)=0
2243 DO thread=thread_range
2249 10
FORMAT (a,
'_outer',i0,
'.nc')
2270 real(
dp),
intent(in) :: runinterval
2274 logical :: donestepping
2276 integer :: i, lstr, ng
2280# if defined MODEL_COUPLING && !defined MCT_LIB
2281 integer :: nstrstep, nendstep, extra
2283 real(
dp) :: endtime, nexttime
2286 character (len=*),
parameter :: myfile = &
2287 & __FILE__//
", posterior_analysis"
2291# if !(defined MODEL_COUPLING && defined ESMF_LIB)
2304# if defined MODEL_COUPLING && !defined MCT_LIB
2317 DO thread=thread_range
2333 lstr=len_trim(
avg(ng)%name)
2334 avg(ng)%base=
avg(ng)%name(1:lstr-3)
2341 lstr=len_trim(
dia(ng)%name)
2342 dia(ng)%base=
dia(ng)%name(1:lstr-3)
2344# if defined MODEL_COUPLING && !defined MCT_LIB
2346 nexttime=
time(ng)+runinterval
2348 IF ((nexttime.eq.endtime).and.(ng.eq.1))
THEN
2356 IF (
master)
WRITE (
stdout,20)
'NL', ng, nstrstep, nendstep
2363 CALL main3d (runinterval)
2365 CALL main2d (runinterval)
2371# if defined MODEL_COUPLING && !defined MCT_LIB
2378# if defined MODEL_COUPLING && !defined MCT_LIB
2379 IF (nendstep.eq.
ntend(1))
THEN
2382 donestepping=.false.
2388 IF (donestepping)
THEN
2396 SELECT CASE (
dav(ng)%IOtype)
2399 &
'NLcost_function', &
2403 & ncid =
dav(ng)%ncid)
2405# if defined PIO_LIB && defined DISTRIBUTE
2408 &
'NLcost_function', &
2412 & piofile =
dav(ng)%pioFile)
2423 IF (
fourdvar(ng)%NLobsCost(i).ne.0.0_r8)
THEN
2452 DO thread=thread_range
2458 10
FORMAT (a,
'_outer',i0,
'.nc')
2459 20
FORMAT (/,1x,a,1x,
'ROMS: started time-stepping:', &
2460 &
' (Grid: ',i0,
', TimeSteps: ',i0,
' - ',i0,
')',/)
2461 30
FORMAT (/,
'>(',i3.3,
',',i3.3,
'): NLM Cost J = ', &
2463 40
FORMAT (
' (',i3.3,
',',i3.3,
'): NLM Cost J = ', &
2464 & 18x,1p,e17.10,0p,t69,a)
2484 integer,
intent(in) :: ng
2489 integer :: nrmrec, stdrec, tindex
2491 character (len=*),
parameter :: myfile = &
2492 & __FILE__//
", prior_error"
2531# ifdef ADJUST_BOUNDARY
2541# if defined ADJUST_WSTRESS || defined ADJUST_STFLUX
2558 IF (ldefstd(ng))
THEN
2580# ifdef ADJUST_BOUNDARY
2585# if defined ADJUST_WSTRESS || defined ADJUST_STFLUX
2603# ifdef ADJUST_BOUNDARY
2608# if defined ADJUST_WSTRESS || defined ADJUST_STFLUX
subroutine ad_initial(ng)
subroutine ad_main3d(runinterval)
subroutine edit_multifile(task)
subroutine main3d(runinterval)
subroutine, public ad_balance(ng, tile, lbck, linp)
subroutine, public ad_convolution(ng, tile, linp, lweak, ifac)
subroutine, public ad_variability(ng, tile, linp, lweak)
subroutine, public ad_wrt_his(ng, tile)
subroutine back_cost(ng, tile, lsum)
subroutine, public cgradient(ng, tile, model, innloop, outloop)
subroutine, public cg_read_cgradient(ng, model, outloop)
subroutine, public close_file(ng, model, s, ncname, lupdate)
subroutine, public cost_grad(ng, tile, linp1, linp2, lout)
subroutine, public def_hessian(ng)
subroutine, public def_ini(ng)
subroutine, public def_mod(ng)
subroutine, public def_norm(ng, model, ifile)
subroutine, public get_state(ng, model, msg, s, inirec, tindex)
subroutine, public prior_error(ng)
subroutine, public increment(my_outer, runinterval)
subroutine, public background_initialize(my_outer)
subroutine, public background(my_outer, runinterval)
subroutine, public posterior_analysis(runinterval)
subroutine, public analysis(my_outer, runinterval)
subroutine, public posterior_analysis_initialize
subroutine, public ini_adjust(ng, tile, linp, lout)
subroutine, public initialize_boundary(ng, tile, model)
subroutine, public initialize_forces(ng, tile, model)
type(t_fourdvar), dimension(:), allocatable fourdvar
real(r8), dimension(:), allocatable optimality
logical, dimension(:), allocatable wrtmisfit
integer, dimension(:), allocatable nobsvar
logical, dimension(:), allocatable havenlmod
logical, dimension(:), allocatable wrttlmod
logical, dimension(:), allocatable wrtnlmod
logical, dimension(:), allocatable wrtobsscale
character(len=40), dimension(:), allocatable obsname
logical, dimension(:), allocatable wrtzetaref
type(t_io), dimension(:,:), allocatable std
type(t_io), dimension(:), allocatable his
type(t_io), dimension(:,:), allocatable nrm
type(t_io), dimension(:), allocatable adm
type(t_io), dimension(:), allocatable hss
type(t_io), dimension(:), allocatable tlm
type(t_io), dimension(:), allocatable itl
type(t_io), dimension(:), allocatable dav
type(t_io), dimension(:), allocatable qck
type(t_io), dimension(:), allocatable fwd
type(t_io), dimension(:), allocatable rst
type(t_io), dimension(:), allocatable ini
type(t_io), dimension(:), allocatable avg
character(len=256) sourcefile
type(t_io), dimension(:), allocatable dia
subroutine, public initialize_mixing(ng, tile, model)
integer, parameter io_nf90
integer, dimension(:), allocatable idefadj
integer, dimension(:), allocatable idefqck
integer, dimension(:), allocatable idefavg
integer, parameter io_pio
integer, dimension(:), allocatable idefdia
integer, dimension(:), allocatable ideftlm
character(len=maxlen), dimension(6, 0:nv) vname
integer, dimension(:), allocatable idefhis
subroutine, public initialize_ocean(ng, tile, model)
integer, dimension(:), allocatable first_tile
integer, dimension(:), allocatable last_tile
logical, dimension(:,:), allocatable lwrtnrm
logical, dimension(:), allocatable lwrtqck
logical, dimension(:), allocatable lwrtdia
logical, dimension(:), allocatable lreadqck
integer, dimension(:), allocatable ntimes
logical, dimension(:), allocatable ldefitl
integer, dimension(:), allocatable iic
logical, dimension(:), allocatable lreadstd
real(dp), dimension(:), allocatable dt
logical, dimension(:), allocatable ldefhss
integer, dimension(:), allocatable nobc
logical, dimension(:), allocatable setgridconfig
logical, dimension(:), allocatable balance
logical, dimension(:), allocatable ldefdia
logical, dimension(:), allocatable lreadfrc
integer, dimension(:), allocatable nfrec
logical, dimension(:), allocatable ldefini
logical, dimension(:), allocatable ldefavg
logical, dimension(:), allocatable ldefqck
logical, dimension(:), allocatable lwrtavg
logical, dimension(:), allocatable ldefadj
logical, dimension(:), allocatable ldefhis
integer, dimension(:), allocatable ntend
logical, dimension(:), allocatable ldefmod
logical, dimension(:,:), allocatable ldefnrm
logical, dimension(:), allocatable lwrtcost
logical, dimension(:), allocatable lwrtstate2d
real(dp), dimension(:,:), allocatable obc_time
logical, dimension(:), allocatable lwrthis
logical, dimension(:), allocatable lwrttlm
real(dp), dimension(:), allocatable time
logical, dimension(:), allocatable ldeftlm
integer, dimension(:), allocatable nsff
integer, dimension(:), allocatable ntstart
integer, dimension(:), allocatable step_counter
real(dp), dimension(:,:), allocatable sf_time
integer, dimension(:), allocatable nbrec
logical, dimension(:), allocatable lreadfwd
real(dp), dimension(:), allocatable initime
logical, dimension(:), allocatable lreadblk
integer, dimension(:), allocatable lold
integer, dimension(:), allocatable lbout
integer, dimension(:), allocatable kstp
integer, dimension(:), allocatable nrhs
integer, dimension(:), allocatable lfinp
integer, dimension(:), allocatable lnew
integer, dimension(:), allocatable lfout
integer, dimension(:), allocatable nstp
subroutine, public normalization(ng, tile, ifac)
subroutine, public set_masks(ng, tile, model)
logical function, public founderror(flag, noerr, line, routine)
subroutine, public sum_grad(ng, tile, linp, lout)
subroutine, public tl_balance(ng, tile, lbck, linp)
subroutine, public tl_convolution(ng, tile, linp, lweak, ifac)
subroutine, public tl_def_his(ng, ldef)
subroutine, public tl_def_ini(ng)
subroutine, public tl_variability(ng, tile, linp, lweak)
subroutine, public tl_wrt_ini(ng, tile, tindex, outrec)
subroutine, public wrt_evolved(ng, tile, kout, nout)
subroutine, public wrt_ini(ng, tile, tindex, outrec)
subroutine, public wrt_frc(ng, tile, tindex, outrec)
subroutine, public biconj(ng, tile, model, lbck)
subroutine, public balance_ref(ng, tile, lbck)
subroutine set_grid(ng, model)
recursive subroutine wclock_off(ng, model, region, line, routine)
recursive subroutine wclock_on(ng, model, region, line, routine)
subroutine tl_initial(ng)
subroutine tl_main3d(runinterval)