107 & LBi, UBi, LBj, UBj)
114 integer,
intent(in) :: ng, tile, model
115 integer,
intent(in) :: lbi, ubi, lbj, ubj
117 character (len=*),
intent(in) :: inpncname
121 integer :: iinp, iout, irec, myrec, mytype, nrec
122 integer :: inpncid, inpvid
123 integer :: i, gtype, status, varid
125 integer :: j, k, itrc
127 real(r8) :: fmin, fmax
130 real(dp) :: inp_time(1)
131 real(dp) :: timei, timer, fac
133 character (len=*),
parameter :: myfile = &
134 & __FILE__//
", time_corr_nf90"
136# include "set_bounds.h"
168 CALL netcdf_open (ng, model, inpncname, 0, inpncid)
170 WRITE (
stdout,10) trim(inpncname)
185 status=
nf_fread2d(ng, model, inpncname, inpncid, &
187 & myrec, mytype, vsize, &
188 & lbi, ubi, lbj, ubj, &
189 & scale, fmin, fmax, &
191 &
grid(ng) % rmask, &
193 &
ocean(ng) % f_zetaS(:,:,myrec))
194 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
217 status=
nf_fread2d(ng, model, inpncname, inpncid, &
219 & myrec, mytype, vsize, &
220 & lbi, ubi, lbj, ubj, &
221 & scale, fmin, fmax, &
223 &
grid(ng) % umask_full, &
225 &
ocean(ng) % f_ubarS(:,:,myrec))
226 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
249 status=
nf_fread2d(ng, model, inpncname, inpncid, &
251 & myrec, mytype, vsize, &
252 & lbi, ubi, lbj, ubj, &
253 & scale, fmin, fmax, &
255 &
grid(ng) % vmask_full, &
257 &
ocean(ng) % f_vbarS(:,:,myrec))
258 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
283 status=
nf_fread3d(ng, model, inpncname, inpncid, &
285 & myrec, mytype, vsize, &
286 & lbi, ubi, lbj, ubj, 1,
n(ng), &
287 & scale, fmin, fmax, &
289 &
grid(ng) % umask_full, &
291 &
ocean(ng) % f_uS(:,:,:,myrec))
292 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
315 status=
nf_fread3d(ng, model, inpncname, inpncid, &
317 & myrec, mytype, vsize, &
318 & lbi, ubi, lbj, ubj, 1,
n(ng), &
319 & scale, fmin, fmax, &
321 &
grid(ng) % vmask_full, &
323 &
ocean(ng) % f_vS(:,:,:,myrec))
324 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
349 status=
nf_fread3d(ng, model, inpncname, inpncid, &
351 & myrec, mytype, vsize, &
352 & lbi, ubi, lbj, ubj, 1,
n(ng), &
353 & scale, fmin, fmax, &
355 &
grid(ng) % rmask, &
357 &
ocean(ng) % f_tS(:,:,:,myrec,itrc))
358 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
383 rec_loop :
DO irec=nrec-1,1,-1
391 &
rclock%DateNumber, inp_time, &
393 & start = (/irec/), total = (/1/))
399 & ncid =
tlf(ng)%ncid)
415 ocean(ng) % ad_zeta(i,j,iinp)=0.0_r8
430# ifdef ENDPOINT_TRAPEZOIDAL
431 IF ((myrec.eq.1).or.(myrec.eq.(nrec-1)))
THEN
440 ocean(ng) % ad_zeta(i,j,iinp)= &
441 &
ocean(ng) % ad_zeta(i,j,iinp)+ &
442 & fac*
ocean(ng) % f_zetaS(i,j,myrec)
453 & lbi, ubi, lbj, ubj, scale, &
455 &
grid(ng) % rmask, &
457 &
ocean(ng) % ad_zeta(:,:,iinp))
458 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
482 ocean(ng) % ad_ubar(i,j,iinp)=0.0_r8
497# ifdef ENDPOINT_TRAPEZOIDAL
498 IF ((myrec.eq.1).or.(myrec.eq.(nrec-1)))
THEN
507 ocean(ng) % ad_ubar(i,j,iinp)= &
508 &
ocean(ng) % ad_ubar(i,j,iinp)+ &
509 & fac*
ocean(ng) % f_ubarS(i,j,myrec)
520 & lbi, ubi, lbj, ubj, scale, &
522 &
grid(ng) % umask_full, &
524 &
ocean(ng) % ad_ubar(:,:,iinp))
525 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
549 ocean(ng) % ad_vbar(i,j,iinp)=0.0_r8
564# ifdef ENDPOINT_TRAPEZOIDAL
565 IF ((myrec.eq.1).or.(myrec.eq.(nrec-1)))
THEN
574 ocean(ng) % ad_vbar(i,j,iinp)= &
575 &
ocean(ng) % ad_vbar(i,j,iinp)+ &
576 & fac*
ocean(ng) % f_vbarS(i,j,myrec)
586 & lbi, ubi, lbj, ubj, scale, &
588 &
grid(ng) % vmask_full, &
590 &
ocean(ng) % ad_vbar(:,:,iinp))
591 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
618 ocean(ng) % ad_u(i,j,k,iinp)=0.0_r8
634# ifdef ENDPOINT_TRAPEZOIDAL
635 IF ((myrec.eq.1).or.(myrec.eq.(nrec-1)))
THEN
645 ocean(ng) % ad_u(i,j,k,iinp)= &
646 &
ocean(ng) % ad_u(i,j,k,iinp)+ &
647 & fac*
ocean(ng) % f_uS(i,j,k,myrec)
658 & lbi, ubi, lbj, ubj, 1,
n(ng), scale, &
660 &
grid(ng) % umask_full, &
662 &
ocean(ng) % ad_u(:,:,:,iinp))
663 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
688 ocean(ng) % ad_v(i,j,k,iinp)=0.0_r8
704# ifdef ENDPOINT_TRAPEZOIDAL
705 IF ((myrec.eq.1).or.(myrec.eq.(nrec-1)))
THEN
715 ocean(ng) % ad_v(i,j,k,iinp)= &
716 &
ocean(ng) % ad_v(i,j,k,iinp)+ &
717 & fac*
ocean(ng) % f_vS(i,j,k,myrec)
728 & lbi, ubi, lbj, ubj, 1,
n(ng), scale, &
730 &
grid(ng) % vmask_full, &
732 &
ocean(ng) % ad_v(:,:,:,iinp))
733 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
759 ocean(ng) % ad_t(i,j,k,iinp,itrc)=0.0_r8
778# ifdef ENDPOINT_TRAPEZOIDAL
779 IF ((myrec.eq.1).or.(myrec.eq.(nrec-1)))
THEN
789 ocean(ng) % ad_t(i,j,k,iinp,itrc)= &
790 &
ocean(ng) % ad_t(i,j,k,iinp,itrc)+ &
791 & fac*
ocean(ng) % f_tS(i,j,k,myrec,itrc)
800 &
tlf(ng)%Tid(itrc), &
802 & lbi, ubi, lbj, ubj, 1,
n(ng), scale, &
804 &
grid(ng) % rmask, &
806 &
ocean(ng) % ad_t(:,:,:,iinp,itrc))
807 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
836 10
FORMAT (/,
' TIME_CORR_NF90 - unable to open input NetCDF', &
838 20
FORMAT (/,
' TIME_CORR_NF90 - error while reading variable: ',a, &
839 & 2x,
'at time record = ',i3,/,18x,
'in input NetCDF file:', &
841 30
FORMAT (/,
' TIME_CORR_NF90 - error while writing variable: ',a, &
842 & 2x,
'at time record = ',i3,/,18x,
'into NetCDF file: ',a)
843 40
FORMAT (/,
' TIME_CORR_NF90 - cannot find state variable: ',a, &
844 & /,18x,
'in input NetCDF file: ',a)
845 50
FORMAT (2x,
'TIME_CORR_NF90 - wrote convolved adjoint impulses', &
846 &
', records: 001 to ',i3.3,/,21x,
'file: ',a)
855 & LBi, UBi, LBj, UBj)
862 integer,
intent(in) :: ng, tile, model
863 integer,
intent(in) :: lbi, ubi, lbj, ubj
865 character (len=*),
intent(in) :: inpncname
869 integer :: iinp, iout, irec, myrec, nrec
870 integer :: i, status, vindex
872 integer :: j, k, itrc
874 real(r8) :: fmin, fmax
877 real(dp) :: inp_time(1)
878 real(dp) :: timei, timer, fac
880 character (len=*),
parameter :: myfile = &
881 & __FILE__//
", time_corr_pio"
883 TYPE (io_desc_t),
pointer :: iodesc
886# include "set_bounds.h"
920 WRITE (
stdout,10) trim(inpncname)
934 IF (kind(
ocean(ng)%f_zetaS).eq.8)
THEN
935 piovar%dkind=pio_double
938 piovar%dkind=pio_real
944 status=
nf_fread2d(ng, model, inpncname, inppiofile, &
946 & myrec, iodesc, vsize, &
947 & lbi, ubi, lbj, ubj, &
948 & scale, fmin, fmax, &
950 &
grid(ng) % rmask, &
952 &
ocean(ng) % f_zetaS(:,:,myrec))
953 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
975 IF (kind(
ocean(ng)%f_ubarS).eq.8)
THEN
976 piovar%dkind=pio_double
979 piovar%dkind=pio_real
985 status=
nf_fread2d(ng, model, inpncname, inppiofile, &
987 & myrec, iodesc, vsize, &
988 & lbi, ubi, lbj, ubj, &
989 & scale, fmin, fmax, &
991 &
grid(ng) % umask_full, &
993 &
ocean(ng) % f_ubarS(:,:,myrec))
994 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
1016 IF (kind(
ocean(ng)%f_vbarS).eq.8)
THEN
1017 piovar%dkind=pio_double
1020 piovar%dkind=pio_real
1026 status=
nf_fread2d(ng, model, inpncname, inppiofile, &
1028 & myrec, iodesc, vsize, &
1029 & lbi, ubi, lbj, ubj, &
1030 & scale, fmin, fmax, &
1032 &
grid(ng) % vmask_full, &
1034 &
ocean(ng) % f_vbarS(:,:,myrec))
1035 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
1059 IF (kind(
ocean(ng)%f_uS).eq.8)
THEN
1060 piovar%dkind=pio_double
1063 piovar%dkind=pio_real
1069 status=
nf_fread3d(ng, model, inpncname, inppiofile, &
1071 & myrec, iodesc, vsize, &
1072 & lbi, ubi, lbj, ubj, 1,
n(ng), &
1073 & scale, fmin, fmax, &
1075 &
grid(ng) % umask_full, &
1077 &
ocean(ng) % f_uS(:,:,:,myrec))
1078 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
1100 IF (kind(
ocean(ng)%f_vS).eq.8)
THEN
1101 piovar%dkind=pio_double
1104 piovar%dkind=pio_real
1110 status=
nf_fread3d(ng, model, inpncname, inppiofile, &
1112 & myrec, iodesc, vsize, &
1113 & lbi, ubi, lbj, ubj, 1,
n(ng), &
1114 & scale, fmin, fmax, &
1116 &
grid(ng) % vmask_full, &
1118 &
ocean(ng) % f_vS(:,:,:,myrec))
1119 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
1143 IF (kind(
ocean(ng)%f_tS).eq.8)
THEN
1144 piovar%dkind=pio_double
1147 piovar%dkind=pio_real
1153 status=
nf_fread3d(ng, model, inpncname, inppiofile, &
1155 & myrec, iodesc, vsize, &
1156 & lbi, ubi, lbj, ubj, 1,
n(ng), &
1157 & scale, fmin, fmax, &
1159 &
grid(ng) % rmask, &
1161 &
ocean(ng) % f_tS(:,:,:,myrec,itrc))
1162 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
1187 rec_loop :
DO irec=nrec-1,1,-1
1196 &
rclock%DateNumber, inp_time, &
1197 & piofile = inppiofile, &
1198 & start = (/irec/), &
1204 & (/iout/), (/1/), &
1205 & piofile =
tlf(ng)%pioFile)
1221 ocean(ng) % ad_zeta(i,j,iinp)=0.0_r8
1229 IF (
tlf(ng)%pioVar(
idztlf)%dkind.eq.pio_double)
THEN
1235 DO myrec=nrec-1,1,-1
1241# ifdef ENDPOINT_TRAPEZOIDAL
1242 IF ((myrec.eq.1).or.(myrec.eq.(nrec-1)))
THEN
1251 ocean(ng) % ad_zeta(i,j,iinp)= &
1252 &
ocean(ng) % ad_zeta(i,j,iinp)+ &
1253 & fac*
ocean(ng) % f_zetaS(i,j,myrec)
1263 & lbi, ubi, lbj, ubj, scale, &
1265 &
grid(ng) % rmask, &
1267 &
ocean(ng) % ad_zeta(:,:,iinp))
1268 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
1271 & trim(
tlf(ng)%name)
1292 ocean(ng) % ad_ubar(i,j,iinp)=0.0_r8
1300 IF (
tlf(ng)%pioVar(
idubtf)%dkind.eq.pio_double)
THEN
1306 DO myrec=nrec-1,1,-1
1312# ifdef ENDPOINT_TRAPEZOIDAL
1313 IF ((myrec.eq.1).or.(myrec.eq.(nrec-1)))
THEN
1322 ocean(ng) % ad_ubar(i,j,iinp)= &
1323 &
ocean(ng) % ad_ubar(i,j,iinp)+ &
1324 & fac*
ocean(ng) % f_ubarS(i,j,myrec)
1334 & lbi, ubi, lbj, ubj, scale, &
1336 &
grid(ng) % umask_full, &
1338 &
ocean(ng) % ad_ubar(:,:,iinp))
1339 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
1342 & trim(
tlf(ng)%name)
1363 ocean(ng) % ad_vbar(i,j,iinp)=0.0_r8
1371 IF (
tlf(ng)%pioVar(
idvbtf)%dkind.eq.pio_double)
THEN
1377 DO myrec=nrec-1,1,-1
1383# ifdef ENDPOINT_TRAPEZOIDAL
1384 IF ((myrec.eq.1).or.(myrec.eq.(nrec-1)))
THEN
1393 ocean(ng) % ad_vbar(i,j,iinp)= &
1394 &
ocean(ng) % ad_vbar(i,j,iinp)+ &
1395 & fac*
ocean(ng) % f_vbarS(i,j,myrec)
1405 & lbi, ubi, lbj, ubj, scale, &
1407 &
grid(ng) % vmask_full, &
1409 &
ocean(ng) % ad_vbar(:,:,iinp))
1410 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
1413 & trim(
tlf(ng)%name)
1437 ocean(ng) % ad_u(i,j,k,iinp)=0.0_r8
1446 IF (
tlf(ng)%pioVar(
idutlf)%dkind.eq.pio_double)
THEN
1452 DO myrec=nrec-1,1,-1
1458# ifdef ENDPOINT_TRAPEZOIDAL
1459 IF ((myrec.eq.1).or.(myrec.eq.(nrec-1)))
THEN
1469 ocean(ng) % ad_u(i,j,k,iinp)= &
1470 &
ocean(ng) % ad_u(i,j,k,iinp)+ &
1471 & fac*
ocean(ng) % f_uS(i,j,k,myrec)
1482 & lbi, ubi, lbj, ubj, 1,
n(ng), scale, &
1484 &
grid(ng) % umask_full, &
1486 &
ocean(ng) % ad_u(:,:,:,iinp))
1487 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
1490 & trim(
tlf(ng)%name)
1512 ocean(ng) % ad_v(i,j,k,iinp)=0.0_r8
1521 IF (
tlf(ng)%pioVar(
idvtlf)%dkind.eq.pio_double)
THEN
1527 DO myrec=nrec-1,1,-1
1533# ifdef ENDPOINT_TRAPEZOIDAL
1534 IF ((myrec.eq.1).or.(myrec.eq.(nrec-1)))
THEN
1544 ocean(ng) % ad_v(i,j,k,iinp)= &
1545 &
ocean(ng) % ad_v(i,j,k,iinp)+ &
1546 & fac*
ocean(ng) % f_vS(i,j,k,myrec)
1557 & lbi, ubi, lbj, ubj, 1,
n(ng), scale, &
1559 &
grid(ng) % vmask_full, &
1561 &
ocean(ng) % ad_v(:,:,:,iinp))
1562 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
1565 & trim(
tlf(ng)%name)
1588 ocean(ng) % ad_t(i,j,k,iinp,itrc)=0.0_r8
1600 IF (
tlf(ng)%pioTrc(itrc)%dkind.eq.pio_double)
THEN
1606 DO myrec=nrec-1,1,-1
1612# ifdef ENDPOINT_TRAPEZOIDAL
1613 IF ((myrec.eq.1).or.(myrec.eq.(nrec-1)))
THEN
1623 ocean(ng) % ad_t(i,j,k,iinp,itrc)= &
1624 &
ocean(ng) % ad_t(i,j,k,iinp,itrc)+ &
1625 & fac*
ocean(ng) % f_tS(i,j,k,myrec,itrc)
1636 & lbi, ubi, lbj, ubj, 1,
n(ng), scale, &
1638 &
grid(ng) % rmask, &
1640 &
ocean(ng) % ad_t(:,:,:,iinp,itrc))
1641 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
1644 & trim(
tlf(ng)%name)
1670 10
FORMAT (/,
' TIME_CORR_PIO - unable to open input NetCDF', &
1672 20
FORMAT (/,
' TIME_CORR_PIO - error while reading variable: ',a, &
1673 & 2x,
'at time record = ',i3,/,17x,
'in input NetCDF file:', &
1675 30
FORMAT (/,
' TIME_CORR_PIO - error while writing variable: ',a, &
1676 & 2x,
'at time record = ',i3,/,17x,
'into NetCDF file: ',a)
1677 40
FORMAT (/,
' TIME_CORR_PIO - cannot find state variable: ',a, &
1678 & /,18x,
'in input NetCDF file: ',a)
1679 50
FORMAT (2x,
'TIME_CORR_PIO - wrote convolved adjoint impulses', &
1680 &
', records: 001 to ',i3.3,/,21x,
'file: ',a)