3#if (defined FOUR_DVAR || defined VERIFICATION) && defined OBSERVATIONS
40# if defined PIO_LIB && defined DISTRIBUTE
55# if defined PIO_LIB && defined DISTRIBUTE
67 integer,
intent(in) :: ng, tile
71 integer :: lbi, ubi, lbj, ubj
73 character (len=*),
parameter :: myfile = &
91 SELECT CASE (
dav(ng)%IOtype)
96# if defined PIO_LIB && defined DISTRIBUTE
107 10
FORMAT (
' STATS_MODOBS - Illegal output file type, io_type = ', &
108 & i0,/,16x,
'Check KeyWord ''OUT_LIB'' in ''roms.in''.')
115 & LBi, UBi, LBj, UBj)
120 integer,
intent(in) :: ng, tile
121 integer,
intent(in) :: lbi, ubi, lbj, ubj
125 integer :: i, ic, iobs, status, vindex
126 integer :: saved_exit_flag
128 integer,
dimension(2) :: start, total
129 integer,
dimension(NobsVar(ng)) :: ncount, is
131 integer,
dimension(Ndatum(ng)) :: obs_type
132 integer,
dimension(Ndatum(ng)) :: provenance
133 integer,
dimension(Nsurvey(ng)) :: survey_nobs
135 real(r8) :: cff1, cff2
136 real(r8),
parameter :: inival = 0.0_r8
138 real(r8),
dimension(NobsVar(ng)) :: cc, mb, mse, sde
139 real(r8),
dimension(NobsVar(ng)) :: mod_min, mod_max
140 real(r8),
dimension(NobsVar(ng)) :: mod_mean, mod_std
141 real(r8),
dimension(NobsVar(ng)) :: obs_min, obs_max
142 real(r8),
dimension(NobsVar(ng)) :: obs_mean, obs_std
144 real(r8),
dimension(Ndatum(ng)) :: mod_value
145 real(r8),
dimension(Ndatum(ng)) :: obs_depths
146 real(r8),
dimension(Ndatum(ng)) :: obs_scale
147 real(dp),
dimension(Ndatum(ng)) :: obs_time
148 real(r8),
dimension(Ndatum(ng)) :: obs_value
149 real(r8),
dimension(Ndatum(ng)) :: obs_xgrid
150 real(r8),
dimension(Ndatum(ng)) :: obs_ygrid
151 real(r8),
dimension(Ndatum(ng)) :: obs_work
152 real(dp),
dimension(Nsurvey(ng)) :: survey
154 character (len=11),
dimension(NobsVar(ng)) :: text, svar_name
156 character (len=30) :: f1, f2, f3, f4
158 character (len=*),
parameter :: myfile = &
159 & __FILE__//
", stats_modobs_nf90"
180 & ncid =
obs(ng)%ncid)
187 & ncid =
obs(ng)%ncid, &
195 & ncid =
dav(ng)%ncid)
202 &
rclock%DateNumber, survey, &
203 & ncid =
obs(ng)%ncid, &
211 & ncid =
dav(ng)%ncid)
218 & ncid =
obs(ng)%ncid, &
225 & (/1/), (/
ndatum(ng)/), &
226 & ncid =
dav(ng)%ncid)
233 & ncid =
obs(ng)%ncid, &
240 & (/1/), (/
ndatum(ng)/), &
241 & ncid =
dav(ng)%ncid)
248 &
rclock%DateNumber, obs_time, &
249 & ncid =
obs(ng)%ncid, &
256 & (/1/), (/
ndatum(ng)/), &
257 & ncid =
dav(ng)%ncid)
265 & ncid =
obs(ng)%ncid, &
272 & (/1/), (/
ndatum(ng)/), &
273 & ncid =
dav(ng)%ncid)
282 & ncid =
obs(ng)%ncid, &
289 & (/1/), (/
ndatum(ng)/), &
290 & ncid =
dav(ng)%ncid)
298 & ncid =
obs(ng)%ncid, &
307 & ncid =
obs(ng)%ncid, &
314 & (/1/), (/
ndatum(ng)/), &
315 & ncid =
dav(ng)%ncid)
322 & ncid =
obs(ng)%ncid, &
329 & (/1/), (/
ndatum(ng)/), &
330 & ncid =
dav(ng)%ncid)
338 & ncid =
obs(ng)%ncid, &
345 & (/1/), (/
ndatum(ng)/), &
346 & ncid =
dav(ng)%ncid)
353 & ncid =
obs(ng)%ncid, &
360 & (/1/), (/
ndatum(ng)/), &
361 & ncid =
dav(ng)%ncid)
369 & ncid =
obs(ng)%ncid, &
376 & (/1/), (/
ndatum(ng)/), &
377 & ncid =
dav(ng)%ncid)
385 & ncid =
dav(ng)%ncid, &
392# if defined R4DVAR || defined R4DVAR_ANA_SENSITIVITY || \
396 & ncid =
dav(ng)%ncid, &
403 & ncid =
dav(ng)%ncid, &
406# elif !defined I4DVAR_ANA_SENSITIVITY
409 & ncid =
dav(ng)%ncid, &
410 & start = (/1,max(1,
outer)/), &
411 & total = (/
ndatum(ng),1/))
421 obs_work(1:
ndatum(ng))=inival
424 & lbi, ubi, lbj, ubj, 0,
n(ng), &
428 & obs_xgrid, obs_ygrid, obs_depths, obs_scale, &
443 & (/1/), (/
ndatum(ng)/), &
444 & ncid =
dav(ng)%ncid)
447# if defined RBL4DVAR_ANA_SENSITIVITY || \
448 defined rbl4dvar_fct_sensitivity || \
449 defined r4dvar_ana_sensitivity
472 & (/1/), (/
ndatum(ng)/), &
473 & ncid =
dav(ng)%ncid)
488 & (/1/), (/
ndatum(ng)/), &
489 & ncid =
dav(ng)%ncid)
504 & (/1/), (/
ndatum(ng)/), &
505 & ncid =
dav(ng)%ncid)
520 & (/1/), (/
ndatum(ng)/), &
521 & ncid =
dav(ng)%ncid)
536 & (/1/), (/
ndatum(ng)/), &
537 & ncid =
dav(ng)%ncid)
552 & (/1/), (/
ndatum(ng)/), &
553 & ncid =
dav(ng)%ncid)
568 & (/1/), (/
ndatum(ng)/), &
569 & ncid =
dav(ng)%ncid)
585 & (/1,i/), (/
ndatum(ng),1/), &
586 & ncid =
dav(ng)%ncid)
603 & (/1,i/), (/
ndatum(ng),1/), &
604 & ncid =
dav(ng)%ncid)
610# if defined I4DVAR || defined RBL4DVAR || \
611 defined r4dvar || defined sp4dvar || \
612 defined split_i4dvar || defined split_rbl4dvar || \
613 defined split_r4dvar || defined split_sp4dvar || \
622 IF (saved_exit_flag.eq.
noerror)
THEN
642 IF (obs_scale(iobs).eq.1.0_r8)
THEN
644 ncount(i)=ncount(i)+1
645 mod_min(i)=min(mod_min(i),mod_value(iobs))
646 obs_min(i)=min(obs_min(i),obs_value(iobs))
647 mod_max(i)=max(mod_max(i),mod_value(iobs))
648 obs_max(i)=max(obs_max(i),obs_value(iobs))
649 mod_mean(i)=mod_mean(i)+mod_value(iobs)
650 obs_mean(i)=obs_mean(i)+obs_value(iobs)
654 IF (ncount(i).gt.0)
THEN
655 mod_mean(i)=mod_mean(i)/real(ncount(i),r8)
656 obs_mean(i)=obs_mean(i)/real(ncount(i),r8)
664 IF (obs_scale(iobs).eq.1.0_r8)
THEN
666 cff1=mod_value(iobs)-mod_mean(i)
667 cff2=obs_value(iobs)-obs_mean(i)
668 mod_std(i)=mod_std(i)+cff1*cff1
669 obs_std(i)=obs_std(i)+cff2*cff2
670 cc(i)=cc(i)+cff1*cff2
674 IF (ncount(i).gt.1)
THEN
675 mod_std(i)=sqrt(mod_std(i)/real(ncount(i)-1,r8))
676 obs_std(i)=sqrt(obs_std(i)/real(ncount(i)-1,r8))
677 cc(i)=(cc(i)/real(ncount(i),r8))/(mod_std(i)*obs_std(i))
685 IF (ncount(i).gt.0)
THEN
686 mb(i)=mod_mean(i)-obs_mean(i)
687 sde(i)=mod_std(i)-obs_std(i)
688 mse(i)=mb(i)*mb(i)+ &
690 & 2.0_r8*mod_std(i)*obs_std(i)*(1.0_r8-cc(i))
702 IF (ncount(i).gt.0)
THEN
706 text(ic)=
'-----------'
709 WRITE(f1,10) max(1,ic)
710 WRITE(f2,20) max(1,ic)
711 WRITE(f3,30) max(1,ic)
712 WRITE(f4,40) max(1,ic)
714 WRITE(
stdout,f1) (svar_name(i),i=1,ic)
715 WRITE(
stdout,f2) (text(i),i=1,ic)
716 WRITE(
stdout,f3)
'Observation Min ',(obs_min(is(i)),i=1,ic)
717 WRITE(
stdout,f3)
'Observation Max ',(obs_max(is(i)),i=1,ic)
718 WRITE(
stdout,f3)
'Observation Mean ',(obs_mean(is(i)),i=1,ic)
719 WRITE(
stdout,f3)
'Observation STD ',(obs_std(is(i)),i=1,ic)
720 WRITE(
stdout,f3)
'Model Min ',(mod_min(is(i)),i=1,ic)
721 WRITE(
stdout,f3)
'Model Max ',(mod_max(is(i)),i=1,ic)
722 WRITE(
stdout,f3)
'Model Mean ',(mod_mean(is(i)),i=1,ic)
723 WRITE(
stdout,f3)
'Model STD ',(mod_std(is(i)),i=1,ic)
724 WRITE(
stdout,f3)
'Model Bias ',(mb(is(i)),i=1,ic)
725 WRITE(
stdout,f3)
'STD Error ',(sde(is(i)),i=1,ic)
726 WRITE(
stdout,f3)
'Cross-Correlation ',(cc(is(i)),i=1,ic)
727 WRITE(
stdout,f3)
'Mean Squared Error',(mse(is(i)),i=1,ic)
728 WRITE(
stdout,f4)
'Observation Count ',(ncount(is(i)),i=1,ic)
734 &
'Nused_obs', ncount, &
736 & ncid =
dav(ng)%ncid)
740 &
'obs_mean', obs_mean, &
742 & ncid =
dav(ng)%ncid)
746 &
'obs_std', obs_std, &
748 & ncid =
dav(ng)%ncid)
752 &
'model_mean', mod_mean, &
754 & ncid =
dav(ng)%ncid)
758 &
'model_std', mod_std, &
760 & ncid =
dav(ng)%ncid)
764 &
'model_bias', mb, &
766 & ncid =
dav(ng)%ncid)
772 & ncid =
dav(ng)%ncid)
778 & ncid =
dav(ng)%ncid)
784 & ncid =
dav(ng)%ncid)
798 10
FORMAT (
'(t22,',i2,
'(a11,1x))')
799 20
FORMAT (
'(t22,',i2,
'(a11,1x),/)')
800 30
FORMAT (
'(a,3x,',i2,
'(1p,e11.4,0p,1x))')
801 40
FORMAT (
'(a,3x,',i2,
'(i11,1x))')
802 50
FORMAT (/,
' Model-Observations Comparison Statistics:',/)
807# if defined PIO_LIB && defined DISTRIBUTE
811 & LBi, UBi, LBj, UBj)
816 integer,
intent(in) :: ng, tile
817 integer,
intent(in) :: lbi, ubi, lbj, ubj
821 integer :: i, ic, iobs, status, vindex
822 integer :: saved_exit_flag
824 integer,
dimension(2) :: start, total
825 integer,
dimension(NobsVar(ng)) :: ncount, is
827 integer,
dimension(Ndatum(ng)) :: obs_type
828 integer,
dimension(Ndatum(ng)) :: provenance
829 integer,
dimension(Nsurvey(ng)) :: survey_nobs
831 real(r8) :: cff1, cff2
832 real(r8),
parameter :: inival = 0.0_r8
834 real(r8),
dimension(NobsVar(ng)) :: cc, mb, mse, sde
835 real(r8),
dimension(NobsVar(ng)) :: mod_min, mod_max
836 real(r8),
dimension(NobsVar(ng)) :: mod_mean, mod_std
837 real(r8),
dimension(NobsVar(ng)) :: obs_min, obs_max
838 real(r8),
dimension(NobsVar(ng)) :: obs_mean, obs_std
840 real(r8),
dimension(Ndatum(ng)) :: mod_value
841 real(r8),
dimension(Ndatum(ng)) :: obs_depths
842 real(r8),
dimension(Ndatum(ng)) :: obs_scale
843 real(dp),
dimension(Ndatum(ng)) :: obs_time
844 real(r8),
dimension(Ndatum(ng)) :: obs_value
845 real(r8),
dimension(Ndatum(ng)) :: obs_xgrid
846 real(r8),
dimension(Ndatum(ng)) :: obs_ygrid
847 real(r8),
dimension(Ndatum(ng)) :: obs_work
848 real(dp),
dimension(Nsurvey(ng)) :: survey
850 character (len=11),
dimension(NobsVar(ng)) :: text, svar_name
852 character (len=30) :: f1, f2, f3, f4
854 character (len=*),
parameter :: myfile = &
855 & __FILE__//
", stats_modobs_pio"
876 & piofile =
obs(ng)%pioFile)
883 & piofile =
obs(ng)%pioFile, &
891 & piofile =
dav(ng)%pioFile)
898 &
rclock%DateNumber, survey, &
899 & piofile =
obs(ng)%pioFile, &
907 & piofile =
dav(ng)%pioFile)
914 & piofile =
obs(ng)%pioFile, &
921 & (/1/), (/
ndatum(ng)/), &
922 & piofile =
dav(ng)%pioFile)
929 & piofile =
obs(ng)%pioFile, &
936 & (/1/), (/
ndatum(ng)/), &
937 & piofile =
dav(ng)%pioFile)
944 &
rclock%DateNumber, obs_time, &
945 & piofile =
obs(ng)%pioFile, &
952 & (/1/), (/
ndatum(ng)/), &
953 & piofile =
dav(ng)%pioFile)
961 & piofile =
obs(ng)%pioFile, &
968 & (/1/), (/
ndatum(ng)/), &
969 & piofile =
dav(ng)%pioFile)
978 & piofile =
obs(ng)%pioFile, &
985 & (/1/), (/
ndatum(ng)/), &
986 & piofile =
dav(ng)%pioFile)
994 & piofile =
obs(ng)%pioFile, &
1003 & piofile =
obs(ng)%pioFile, &
1005 & total = (/
ndatum(ng)/))
1010 & (/1/), (/
ndatum(ng)/), &
1011 & piofile =
dav(ng)%pioFile)
1018 & piofile =
obs(ng)%pioFile, &
1020 & total = (/
ndatum(ng)/))
1025 & (/1/), (/
ndatum(ng)/), &
1026 & piofile =
dav(ng)%pioFile)
1034 & piofile =
obs(ng)%pioFile, &
1036 & total = (/
ndatum(ng)/))
1041 & (/1/), (/
ndatum(ng)/), &
1042 & piofile =
dav(ng)%pioFile)
1049 & piofile =
obs(ng)%pioFile, &
1051 & total = (/
ndatum(ng)/))
1056 & (/1/), (/
ndatum(ng)/), &
1057 & piofile =
dav(ng)%pioFile)
1065 & piofile =
obs(ng)%pioFile, &
1067 & total = (/
ndatum(ng)/))
1072 & (/1/), (/
ndatum(ng)/), &
1073 & piofile =
dav(ng)%pioFile)
1081 & piofile =
dav(ng)%pioFile, &
1083 & total = (/
ndatum(ng)/))
1088# if defined R4DVAR || defined R4DVAR_ANA_SENSITIVITY || \
1092 & piofile =
dav(ng)%pioFile, &
1094 & total = (/
ndatum(ng)/))
1099 & piofile =
dav(ng)%pioFile, &
1101 & total = (/
ndatum(ng)/))
1102# elif !defined I4DVAR_ANA_SENSITIVITY
1105 & piofile =
dav(ng)%pioFile, &
1106 & start = (/1,max(1,
outer)/), &
1107 & total = (/
ndatum(ng),1/))
1117 obs_work(1:
ndatum(ng))=inival
1120 & lbi, ubi, lbj, ubj, 0,
n(ng), &
1124 & obs_xgrid, obs_ygrid, obs_depths, obs_scale, &
1125 &
grid(ng) % z0_w, &
1138 & obs_work, (/1/), (/
ndatum(ng)/), &
1139 & piofile =
dav(ng)%pioFile)
1142# if defined RBL4DVAR_ANA_SENSITIVITY || \
1143 defined rbl4dvar_fct_sensitivity || \
1144 defined r4dvar_ana_sensitivity
1162 & total = (/
ndatum(ng)/))
1167 & (/1/), (/
ndatum(ng)/), &
1168 & piofile =
dav(ng)%pioFile)
1178 & total = (/
ndatum(ng)/))
1183 & (/1/), (/
ndatum(ng)/), &
1184 & piofile =
dav(ng)%pioFile)
1194 & total = (/
ndatum(ng)/))
1199 & (/1/), (/
ndatum(ng)/), &
1200 & piofile =
dav(ng)%pioFile)
1210 & total = (/
ndatum(ng)/))
1215 & (/1/), (/
ndatum(ng)/), &
1216 & piofile =
dav(ng)%pioFile)
1226 & total = (/
ndatum(ng)/))
1231 & (/1/), (/
ndatum(ng)/), &
1232 & piofile =
dav(ng)%pioFile)
1242 & total = (/
ndatum(ng)/))
1247 & (/1/), (/
ndatum(ng)/), &
1248 & piofile =
dav(ng)%pioFile)
1258 & total = (/
ndatum(ng)/))
1263 & (/1/), (/
ndatum(ng)/), &
1264 & piofile =
dav(ng)%pioFile)
1274 & start = (/1,i/), &
1275 total = (/
ndatum(ng),1/))
1280 & (/1,i/), (/
ndatum(ng),1/), &
1281 & piofile =
dav(ng)%pioFile)
1292 & start = (/1,i/), &
1293 total = (/
ndatum(ng),1/))
1298 & (/1,i/), (/
ndatum(ng),1/), &
1299 & piofile =
dav(ng)%pioFile)
1305# if defined I4DVAR || defined RBL4DVAR || \
1306 defined r4dvar || defined sp4dvar || \
1307 defined split_i4dvar || defined split_rbl4dvar || \
1308 defined split_r4dvar || defined split_sp4dvar || \
1309 defined verification
1317 IF (saved_exit_flag.eq.
noerror)
THEN
1337 IF (obs_scale(iobs).eq.1.0_r8)
THEN
1339 ncount(i)=ncount(i)+1
1340 mod_min(i)=min(mod_min(i),mod_value(iobs))
1341 obs_min(i)=min(obs_min(i),obs_value(iobs))
1342 mod_max(i)=max(mod_max(i),mod_value(iobs))
1343 obs_max(i)=max(obs_max(i),obs_value(iobs))
1344 mod_mean(i)=mod_mean(i)+mod_value(iobs)
1345 obs_mean(i)=obs_mean(i)+obs_value(iobs)
1349 IF (ncount(i).gt.0)
THEN
1350 mod_mean(i)=mod_mean(i)/real(ncount(i),r8)
1351 obs_mean(i)=obs_mean(i)/real(ncount(i),r8)
1359 IF (obs_scale(iobs).eq.1.0_r8)
THEN
1361 cff1=mod_value(iobs)-mod_mean(i)
1362 cff2=obs_value(iobs)-obs_mean(i)
1363 mod_std(i)=mod_std(i)+cff1*cff1
1364 obs_std(i)=obs_std(i)+cff2*cff2
1365 cc(i)=cc(i)+cff1*cff2
1369 IF (ncount(i).gt.1)
THEN
1370 mod_std(i)=sqrt(mod_std(i)/real(ncount(i)-1,r8))
1371 obs_std(i)=sqrt(obs_std(i)/real(ncount(i)-1,r8))
1372 cc(i)=(cc(i)/real(ncount(i),r8))/(mod_std(i)*obs_std(i))
1380 IF (ncount(i).gt.0)
THEN
1381 mb(i)=mod_mean(i)-obs_mean(i)
1382 sde(i)=mod_std(i)-obs_std(i)
1383 mse(i)=mb(i)*mb(i)+ &
1385 & 2.0_r8*mod_std(i)*obs_std(i)*(1.0_r8-cc(i))
1397 IF (ncount(i).gt.0)
THEN
1400 svar_name(ic)=trim(
obsname(i))
1401 text(ic)=
'-----------'
1404 WRITE(f1,10) max(1,ic)
1405 WRITE(f2,20) max(1,ic)
1406 WRITE(f3,30) max(1,ic)
1407 WRITE(f4,40) max(1,ic)
1409 WRITE(
stdout,f1) (svar_name(i),i=1,ic)
1410 WRITE(
stdout,f2) (text(i),i=1,ic)
1411 WRITE(
stdout,f3)
'Observation Min ',(obs_min(is(i)),i=1,ic)
1412 WRITE(
stdout,f3)
'Observation Max ',(obs_max(is(i)),i=1,ic)
1413 WRITE(
stdout,f3)
'Observation Mean ',(obs_mean(is(i)),i=1,ic)
1414 WRITE(
stdout,f3)
'Observation STD ',(obs_std(is(i)),i=1,ic)
1415 WRITE(
stdout,f3)
'Model Min ',(mod_min(is(i)),i=1,ic)
1416 WRITE(
stdout,f3)
'Model Max ',(mod_max(is(i)),i=1,ic)
1417 WRITE(
stdout,f3)
'Model Mean ',(mod_mean(is(i)),i=1,ic)
1418 WRITE(
stdout,f3)
'Model STD ',(mod_std(is(i)),i=1,ic)
1419 WRITE(
stdout,f3)
'Model Bias ',(mb(is(i)),i=1,ic)
1420 WRITE(
stdout,f3)
'STD Error ',(sde(is(i)),i=1,ic)
1421 WRITE(
stdout,f3)
'Cross-Correlation ',(cc(is(i)),i=1,ic)
1422 WRITE(
stdout,f3)
'Mean Squared Error',(mse(is(i)),i=1,ic)
1423 WRITE(
stdout,f4)
'Observation Count ',(ncount(is(i)),i=1,ic)
1429 &
'Nused_obs', ncount, &
1431 & piofile =
dav(ng)%pioFile)
1435 &
'obs_mean', obs_mean, &
1437 & piofile =
dav(ng)%pioFile)
1441 &
'obs_std', obs_std, &
1443 & piofile =
dav(ng)%pioFile)
1447 &
'model_mean', mod_mean, &
1449 & piofile =
dav(ng)%pioFile)
1453 &
'model_std', mod_std, &
1455 & piofile =
dav(ng)%pioFile)
1459 &
'model_bias', mb, &
1461 & piofile =
dav(ng)%pioFile)
1467 & piofile =
dav(ng)%pioFile)
1473 & piofile =
dav(ng)%pioFile)
1479 & piofile =
dav(ng)%pioFile)
1493 10
FORMAT (
'(t22,',i2,
'(a11,1x))')
1494 20
FORMAT (
'(t22,',i2,
'(a11,1x),/)')
1495 30
FORMAT (
'(a,3x,',i2,
'(1p,e11.4,0p,1x))')
1496 40
FORMAT (
'(a,3x,',i2,
'(i11,1x))')
1497 50
FORMAT (/,
' Model-Observations Comparison Statistics:',/)
integer, dimension(:), allocatable ndatum
integer, dimension(:), allocatable obstype2state
integer, dimension(:), allocatable nobsvar
logical, dimension(:), allocatable haveobsmeta
integer, dimension(:), allocatable nsurvey
character(len=40), dimension(:), allocatable obsname
type(t_grid), dimension(:), allocatable grid
type(t_io), dimension(:), allocatable lcz
type(t_io), dimension(:), allocatable obs
type(t_io), dimension(:), allocatable dav
character(len=256) sourcefile
integer, parameter io_nf90
real(r8), dimension(:), allocatable rymin
integer, parameter io_pio
real(r8), dimension(:), allocatable rymax
real(r8), dimension(:), allocatable rxmax
character(len=maxlen), dimension(6, 0:nv) vname
real(r8), dimension(:), allocatable rxmin
character(len=100), dimension(mvars) var_name
subroutine, public netcdf_sync(ng, model, ncname, ncid)
subroutine, public netcdf_inq_var(ng, model, ncname, ncid, myvarname, searchvar, varid, nvardim, nvaratt)
integer, dimension(:), allocatable n
type(t_bounds), dimension(:), allocatable bounds
integer, dimension(:), allocatable lm
integer, dimension(:), allocatable mm
subroutine, public pio_netcdf_sync(ng, model, ncname, piofile)
subroutine, public pio_netcdf_inq_var(ng, model, ncname, piofile, myvarname, searchvar, piovar, nvardim, nvaratt)
real(dp), parameter large
subroutine obs_k2z(ng, imin, imax, jmin, jmax, lbi, ubi, lbj, ubj, lbk, ubk, xmin, xmax, ymin, ymax, mobs, xobs, yobs, zobs, obs_scale, z, obs_depths)
subroutine, private stats_modobs_nf90(ng, tile, lbi, ubi, lbj, ubj)
subroutine, private stats_modobs_pio(ng, tile, lbi, ubi, lbj, ubj)
subroutine, public stats_modobs(ng, tile)
logical function, public find_string(a, asize, string, aindex)
logical function, public founderror(flag, noerr, line, routine)