96 integer,
intent(in) :: ng
100 logical,
dimension(NV) :: got_var(
nv)
101 logical :: foundatt(2), foundit
103 integer,
parameter :: natt = 25
105 integer :: iterdim, recorddim, surveydim, threedim
106 integer :: datumdim, datumdimp1
107 integer :: ninnerdim, ninnerdimp1, ninnerdimp2
108 integer :: nouterdim, nouterdimp1
109# if defined BALANCE_OPERATOR && defined ZETA_ELLIPTIC
110 integer :: retadim, rxidim
112 integer :: statedim, statedimp1
115 integer :: i, j, lstr, nvatt, nvdim, status, varid, vindex
119 integer :: ibuffer(2)
122 real(dp) :: tstart, tfinal
125 character (len=22 ) :: str_date, end_date
126 character (len=40 ) :: aname, attname(2)
127 character (len=80 ) :: string
128 character (len=256) :: ncname
129 character (len=2048) :: attvalue(2)
130 character (len=MaxLen) :: vinfo(natt)
132 character (len=*),
parameter :: myfile = &
133 & __FILE__//
", def_mod_nf90"
146 WRITE (
stdout,10) ng, trim(ncname)
148 WRITE (
stdout,20) ng, trim(ncname)
171 IF (
obs(ng)%ncid.eq.-1)
THEN
190 attname(1)=
'state_variables'
191 attname(2)=
'obs_provenance'
194 & attname, attvalue, foundatt, &
210# if defined BALANCE_OPERATOR && defined ZETA_ELLIPTIC
243 &
ndatum(ng)+1, datumdimp1)
274# if defined I4DVAR || defined BACKGROUND
276 & nf90_unlimited, iterdim)
290 string=
'ROMS 4D-Var output observation processing file'
291 status=nf90_put_att(
dav(ng)%ncid, nf90_global, &
292 &
'type', trim(string))
293 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
294 WRITE (
stdout,50)
'type', trim(ncname)
303# if defined ARRAY_MODES
305# elif defined SPLIT_I4DVAR
309# elif defined I4DVAR_ANA_SENSITIVITY
310 string=
uppercase(
'i4dvar_ana_sensitivity')
311# elif defined SPLIT_RBL4DVAR
313# elif defined RBL4DVAR
315# elif defined RBL4DVAR_ANA_SENSITIVITY
316 string=
uppercase(
'rbl4dvar_ana_sensitivity')
317# elif defined RBL4DVAR_FCT_SENSITIVITY
318 string=
uppercase(
'rbl4dvar_fct_sensitivity')
319# elif defined SPLIT_R4DVAR
323# elif defined R4DVAR_ANA_SENSITIVITY
324 string=
uppercase(
'r4dvar_ana_sensitivity')
325# elif defined TL_RBL4DVAR
327# elif defined TL_R4DVAR
329# elif defined VERIFICATION
334 status=nf90_put_att(
dav(ng)%ncid, nf90_global, &
335 &
'Algorithm', trim(string))
336 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
337 WRITE (
stdout,50)
'type', trim(ncname)
345 IF (
initime(ng).lt.0.0_dp)
THEN
355 status=nf90_put_att(
dav(ng)%ncid, nf90_global, &
357 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
358 WRITE (
stdout,50)
'str_day', trim(ncname)
365 status=nf90_put_att(
dav(ng)%ncid, nf90_global, &
367 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
368 WRITE (
stdout,50)
'end_day', trim(ncname)
375 status=nf90_put_att(
dav(ng)%ncid, nf90_global, &
376 &
'str_date', str_date)
377 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
378 WRITE (
stdout,50)
'str_date', trim(ncname)
385 status=nf90_put_att(
dav(ng)%ncid, nf90_global, &
386 &
'end_date', end_date)
387 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
388 WRITE (
stdout,50)
'end_date', trim(ncname)
397 status=nf90_put_att(
dav(ng)%ncid, nf90_global, &
398 &
'obs_file', trim(
obs(ng)%name))
399 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
400 WRITE (
stdout,50)
'obs_file', trim(ncname)
410 IF (foundatt(1))
THEN
411 status=nf90_copy_att(obsncid, nf90_global, &
412 &
'state_variables', &
413 &
dav(ng)%ncid, nf90_global)
414 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
415 WRITE (
stdout,50)
'state_variables', trim(ncname)
420 & __line__, myfile))
RETURN
428 IF (foundatt(2))
THEN
429 status=nf90_copy_att(obsncid, nf90_global, &
430 &
'obs_provenance', &
431 &
dav(ng)%ncid, nf90_global)
432 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
433 WRITE (
stdout,50)
'obs_provenance', trim(ncname)
438 & __line__, myfile))
RETURN
445 status=nf90_put_att(
dav(ng)%ncid, nf90_global, &
447 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
448 WRITE (
stdout,50)
'svn_url', trim(ncname)
457 status=nf90_put_att(
dav(ng)%ncid, nf90_global, &
459 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
460 WRITE (
stdout,50)
'svn_rev', trim(ncname)
469 status=nf90_put_att(
dav(ng)%ncid, nf90_global, &
470 &
'code_dir', trim(
rdir))
471 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
472 WRITE (
stdout,50)
'code_dir', trim(ncname)
481 status=nf90_put_att(
dav(ng)%ncid, nf90_global, &
482 &
'header_dir', trim(
hdir))
483 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
484 WRITE (
stdout,50)
'header_dir', trim(ncname)
493 status=nf90_put_att(
dav(ng)%ncid, nf90_global, &
494 &
'header_file', trim(
hfile))
495 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
496 WRITE (
stdout,50)
'header_file', trim(ncname)
506 status=nf90_put_att(
dav(ng)%ncid, nf90_global, &
508 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
509 WRITE (
stdout,50)
'os', trim(ncname)
516 status=nf90_put_att(
dav(ng)%ncid, nf90_global, &
518 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
519 WRITE (
stdout,50)
'cpu', trim(ncname)
526 status=nf90_put_att(
dav(ng)%ncid, nf90_global, &
527 &
'compiler_system', trim(
my_fort))
528 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
529 WRITE (
stdout,50)
'compiler_system', trim(ncname)
536 status=nf90_put_att(
dav(ng)%ncid,nf90_global, &
537 &
'compiler_command', trim(
my_fc))
538 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
539 WRITE (
stdout,50)
'compiler_command', trim(ncname)
548 status=nf90_put_att(
dav(ng)%ncid, nf90_global, &
550 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
551 WRITE (
stdout,50)
'compiler_flags', trim(ncname)
561 WRITE (
history,
'(a,1x,a,", ",a)')
'ROMS, Version', &
565 WRITE (
history,
'(a,1x,a)')
'ROMS, Version', &
569 status=nf90_put_att(
dav(ng)%ncid, nf90_global, &
571 IF (
founderror(status, nf90_noerr, __line__, myfile))
THEN
572 WRITE (
stdout,50)
'history', trim(ncname)
593# if defined I4DVAR || defined WEAK_CONSTRAINT
598 vinfo( 2)=
'outer loop counter'
601 & 1, (/0/), aval, vinfo, ncname, &
602 & setparaccess = .false.)
606 vinfo( 2)=
'inner loop counter'
609 & 1, (/0/), aval, vinfo, ncname, &
610 & setparaccess = .false.)
613# if defined ARRAY_MODES || \
614 defined i4dvar_ana_sensitivity || \
615 defined rbl4dvar_ana_sensitivity || \
616 defined rbl4dvar_fct_sensitivity || \
617 defined r4dvar_ana_sensitivity
622 vinfo( 2)=
'Observations impact/sensitivity outer loop to use'
625 & 1, (/0/), aval, vinfo, ncname, &
626 & setparaccess = .false.)
633 vinfo( 2)=
'number of observations with the same survey time'
636 & 1, (/surveydim/), aval, vinfo, ncname, &
637 & setparaccess = .false.)
640# ifndef I4DVAR_ANA_SENSITIVITY
642 vinfo( 1)=
'Nused_obs'
643 vinfo( 2)=
'Number of usable observations'
646 & 1, (/statedim/), aval, vinfo, ncname, &
647 & setparaccess = .false.)
651 vinfo( 2)=
'observations mean'
654 & 1, (/statedim/), aval, vinfo, ncname, &
655 & setparaccess = .false.)
659 vinfo( 2)=
'observations standard deviation'
662 & 1, (/statedim/), aval, vinfo, ncname, &
663 & setparaccess = .false.)
666 vinfo( 1)=
'model_mean'
667 vinfo( 2)=
'model mean'
670 & 1, (/statedim/), aval, vinfo, ncname, &
671 & setparaccess = .false.)
674 vinfo( 1)=
'model_std'
675 vinfo( 2)=
'model standard deviation'
678 & 1, (/statedim/), aval, vinfo, ncname, &
679 & setparaccess = .false.)
682 vinfo( 1)=
'model_bias'
683 vinfo( 2)=
'model bias'
686 & 1, (/statedim/), aval, vinfo,ncname, &
687 & setparaccess = .false.)
691 vinfo( 2)=
'model-observations standard deviation error'
694 & 1, (/statedim/), aval, vinfo, ncname, &
695 & setparaccess = .false.)
699 vinfo( 2)=
'model-observations cross-correlation'
702 & 1, (/statedim/), aval, vinfo, ncname, &
703 & setparaccess = .false.)
707 vinfo( 2)=
'model-observations mean squared error'
710 & 1, (/statedim/), aval, vinfo, ncname, &
711 & setparaccess = .false.)
718 vinfo( 1)=
'nConvRitz'
719 vinfo( 2)=
'number of converged Ritz eigenvalues'
722 & 1, (/0/), aval, vinfo, ncname, &
723 & setparaccess = .false.)
726# elif defined WEAK_CONSTRAINT
730 vinfo( 1)=
'nConvRitz'
731 vinfo( 2)=
'number of converged Ritz eigenvalues'
734 & 1, (/nouterdim/), aval, vinfo, ncname, &
735 & setparaccess = .false.)
738# if defined WEAK_CONSTRAINT && \
739 (defined array_modes || defined clipping)
744# if defined ARRAY_MODES
745 vinfo( 2)=
'representer matrix array mode eigenvector '// &
747# elif defined CLIPPING
748 vinfo( 2)=
'representer matric cut-off eigenvectors'
751 & 1, (/0/), aval, vinfo, ncname, &
752 & setparaccess = .false.)
760 vinfo( 2)=
'converged Ritz eigenvalues to approximate Hessian'
763 & 1, (/ninnerdim/), aval, vinfo, ncname, &
764 & setparaccess = .false.)
767# elif defined WEAK_CONSTRAINT
772 vinfo( 2)=
'converged Ritz eigenvalues to approximate Hessian'
775 vinfo(24)=
'_FillValue'
779 & 2, vardim, aval, vinfo, ncname, &
780 & setparaccess = .false.)
783# if defined I4DVAR || defined WEAK_CONSTRAINT
788 vinfo( 2)=
'conjugate gradient beta coefficient'
789 vardim(1)=ninnerdimp1
791 vinfo(24)=
'_FillValue'
795 & 2, vardim, aval, vinfo, ncname, &
796 & setparaccess = .false.)
799# if defined I4DVAR || defined WEAK_CONSTRAINT
804 vinfo( 2)=
'Lanczos algorithm delta coefficient'
807 vinfo(24)=
'_FillValue'
811 & 2, vardim, aval, vinfo, ncname, &
812 & setparaccess = .false.)
815# ifdef WEAK_CONSTRAINT
818 vinfo( 2)=
'normalization coefficients for Lanczos vectors'
821 vinfo(24)=
'_FillValue'
825 & 2, vardim, aval, vinfo, ncname, &
826 & setparaccess = .false.)
832 vinfo( 2)=
'Lanczos algorithm gamma coefficient'
835 vinfo(24)=
'_FillValue'
839 & 2, vardim, aval, vinfo, ncname, &
840 & setparaccess = .false.)
849 vinfo( 2)=
'initial gradient normalization factor'
852 & 1, (/nouterdim/), aval, vinfo, ncname, &
853 & setparaccess = .false.)
856# elif defined WEAK_CONSTRAINT
860 vinfo( 1)=
'cg_Gnorm_v'
861 vinfo( 2)=
'initial gradient normalization factor, v-space'
864 & 1, (/nouterdim/), aval, vinfo, ncname, &
865 & setparaccess = .false.)
868 vinfo( 1)=
'cg_Gnorm_y'
869 vinfo( 2)=
'initial gradient normalization factor, y-space'
872 & 1, (/nouterdim/), aval, vinfo, ncname, &
873 & setparaccess = .false.)
876# if defined I4DVAR || defined WEAK_CONSTRAINT
881 vinfo( 2)=
'Lanczos vector normalization factor'
882 vardim(1)=ninnerdimp1
884 vinfo(24)=
'_FillValue'
888 & 2, vardim, aval, vinfo, ncname, &
889 & setparaccess = .false.)
896 vinfo( 1)=
'cg_Greduc'
897 vinfo( 2)=
'reduction in the gradient norm'
900 vinfo(24)=
'_FillValue'
904 & 2, vardim, aval, vinfo, ncname, &
905 & setparaccess = .false.)
908# elif defined WEAK_CONSTRAINT
912 vinfo( 1)=
'cg_Greduc_v'
913 vinfo( 2)=
'reduction in the gradient norm, v-space'
916 vinfo(24)=
'_FillValue'
920 & 2, vardim, aval, vinfo, ncname, &
921 & setparaccess = .false.)
924 vinfo( 1)=
'cg_Greduc_y'
925 vinfo( 2)=
'reduction in the gradient norm, y-space'
928 vinfo(24)=
'_FillValue'
932 & 2, vardim, aval, vinfo, ncname, &
933 & setparaccess = .false.)
940 vinfo( 1)=
'cg_Tmatrix'
941 vinfo( 2)=
'Lanczos recurrence tridiagonal matrix'
946 & 2, vardim, aval, vinfo, ncname, &
947 & setparaccess = .false.)
953 vinfo( 2)=
'tridiagonal matrix, upper diagonal elements'
956 vinfo(24)=
'_FillValue'
960 & 2, vardim, aval, vinfo, ncname, &
961 & setparaccess = .false.)
964# if defined I4DVAR || defined WEAK_CONSTRAINT
969 vinfo( 2)=
'Lanczos recurrence eigenvalues'
972 vinfo(24)=
'_FillValue'
976 & 2, vardim, aval, vinfo, ncname, &
977 & setparaccess = .false.)
982 vinfo( 1)=
'cg_RitzErr'
983 vinfo( 2)=
'Ritz eigenvalues relative error'
986 vinfo(24)=
'_FillValue'
990 & 2, vardim, aval, vinfo, ncname, &
991 & setparaccess = .false.)
999 vinfo( 2)=
'Lanczos recurrence eigenvectors'
1002 vinfo(24)=
'_FillValue'
1006 & 2, vardim, aval, vinfo, ncname, &
1007 & setparaccess = .false.)
1010# elif defined WEAK_CONSTRAINT
1015 vinfo( 2)=
'Lanczos recurrence eigenvectors'
1019 vinfo(24)=
'_FillValue'
1023 & 3, vardim, aval, vinfo, ncname, &
1024 & setfillval = .false., &
1025 & setparaccess = .false.)
1028# if defined RBL4DVAR || \
1029 defined rbl4dvar_ana_sensitivity || \
1030 defined rbl4dvar_fct_sensitivity || \
1031 defined sp4dvar || \
1036 vinfo( 1)=
'NL_iDataPenalty'
1037 vinfo( 2)=
'nonlinear model initial data penalty function'
1040 & 1, (/statedimp1/), aval, vinfo, ncname, &
1041 & setparaccess = .false.)
1044 vinfo( 1)=
'NL_fDataPenalty'
1045 vinfo( 2)=
'nonlinear model final data penalty function'
1046 vardim(1)=statedimp1
1050 & 2, vardim, aval, vinfo, ncname, &
1051 & setparaccess = .false.)
1054# if (defined RECOMPUTE_4DVAR && \
1055 (defined array_modes || defined clipping)) || \
1056 defined r4dvar_ana_sensitivity || defined r4dvar || \
1061 vinfo( 1)=
'RP_iDataPenalty'
1062 vinfo( 2)=
'representer model initial data penalty function'
1063 vardim(1)=statedimp1
1067 & 2, vardim, aval, vinfo, ncname, &
1068 & setparaccess = .false.)
1071 vinfo( 1)=
'RP_fDataPenalty'
1072 vinfo( 2)=
'representer model final data penalty function'
1073 vardim(1)=statedimp1
1077 & 2, vardim, aval, vinfo, ncname, &
1078 & setparaccess = .false.)
1081# ifdef WEAK_CONSTRAINT
1086 vinfo( 2)=
'first guess initial data misfit'
1087 vardim(1)=ninnerdimp1
1089 vinfo(24)=
'_FillValue'
1093 & 2, vardim, aval, vinfo, ncname, &
1094 & setparaccess = .false.)
1100 vinfo( 2)=
'state estimate data misfit'
1101 vardim(1)=ninnerdimp1
1103 vinfo(24)=
'_FillValue'
1107 & 2, vardim, aval, vinfo, ncname, &
1108 & setparaccess = .false.)
1116 vinfo( 2)=
'model penalty function'
1117 vardim(1)=ninnerdimp1
1119 vinfo(24)=
'_FillValue'
1123 & 2, vardim, aval, vinfo, ncname, &
1124 & setparaccess = .false.)
1130 vinfo( 2)=
'optimal penalty function'
1131 vardim(1)=ninnerdimp1
1133 vinfo(24)=
'_FillValue'
1137 & 2, vardim, aval, vinfo, ncname, &
1138 & setparaccess = .false.)
1144 vinfo( 2)=
'actual model penalty function'
1145 vardim(1)=ninnerdimp1
1147 vinfo(24)=
'_FillValue'
1151 & 2, vardim, aval, vinfo, ncname, &
1152 & setparaccess = .false.)
1158 vinfo( 2)=
'actual data penalty function'
1159 vardim(1)=ninnerdimp1
1161 vinfo(24)=
'_FillValue'
1165 & 2, vardim, aval, vinfo, ncname, &
1166 & setparaccess = .false.)
1172 vinfo( 2)=
'actual total penalty function'
1173 vardim(1)=ninnerdimp1
1175 vinfo(24)=
'_FillValue'
1179 & 2, vardim, aval, vinfo, ncname, &
1180 & setparaccess = .false.)
1191 & nvardim = nvdim, &
1196 IF (trim(
var_aname(i)).eq.
'long_name')
THEN
1198 ELSE IF (trim(
var_aname(i)).eq.
'units')
THEN
1200 ELSE IF (trim(
var_aname(i)).eq.
'calendar')
THEN
1206 &
nf_tout, 1, (/surveydim/), aval, vinfo, ncname)
1216 & nvardim = nvdim, &
1222 & nf90_int, 1, (/datumdim/), aval, vinfo, ncname)
1227 status=nf90_inq_attname(obsncid, vindex, i, aname)
1228 IF (status.eq.nf90_noerr)
THEN
1229 status=nf90_copy_att(obsncid, vindex, trim(aname), &
1232 & __line__, myfile))
THEN
1240 & trim(
obs(ng)%name)
1260 & nvardim = nvdim, &
1266 & nf90_int, 1, (/datumdim/), aval, vinfo, ncname)
1271 status=nf90_inq_attname(obsncid, vindex, i, aname)
1272 IF (status.eq.nf90_noerr)
THEN
1273 status=nf90_copy_att(obsncid, vindex, trim(aname), &
1276 & __line__, myfile))
THEN
1284 & trim(
obs(ng)%name)
1305 & nvardim = nvdim, &
1310 IF (trim(
var_aname(i)).eq.
'long_name')
THEN
1312 ELSE IF (trim(
var_aname(i)).eq.
'units')
THEN
1314 ELSE IF (trim(
var_aname(i)).eq.
'calendar')
THEN
1320 &
nf_tout, 1, (/datumdim/), aval, vinfo, ncname)
1330 & nvardim = nvdim, &
1335 IF (trim(
var_aname(i)).eq.
'long_name')
THEN
1337 ELSE IF (trim(
var_aname(i)).eq.
'units')
THEN
1343 &
nf_frst, 1, (/datumdim/), aval, vinfo, ncname)
1353 & nvardim = nvdim, &
1358 IF (trim(
var_aname(i)).eq.
'long_name')
THEN
1360 ELSE IF (trim(
var_aname(i)).eq.
'units')
THEN
1366 &
nf_frst, 1, (/datumdim/), aval, vinfo, ncname)
1376 & nvardim = nvdim, &
1381 IF (trim(
var_aname(i)).eq.
'long_name')
THEN
1383 ELSE IF (trim(
var_aname(i)).eq.
'units')
THEN
1385 ELSE IF (trim(
var_aname(i)).eq.
'negative')
THEN
1386 vinfo(11)=
'downwards'
1389 vinfo(17)=
'missing_value'
1393 &
nf_frst, 1, (/datumdim/), aval, vinfo, ncname)
1403 & nvardim = nvdim, &
1408 IF (trim(
var_aname(i)).eq.
'long_name')
THEN
1414 &
nf_frst, 1, (/datumdim/), aval, vinfo, ncname)
1424 & nvardim = nvdim, &
1429 IF (trim(
var_aname(i)).eq.
'long_name')
THEN
1435 &
nf_frst, 1, (/datumdim/), aval, vinfo, ncname)
1445 & nvardim = nvdim, &
1450 IF (trim(
var_aname(i)).eq.
'long_name')
THEN
1456 &
nf_frst, 1, (/datumdim/), aval, vinfo, ncname)
1466 & nvardim = nvdim, &
1471 IF (trim(
var_aname(i)).eq.
'long_name')
THEN
1478 &
nf_frst, 1, (/datumdim/), aval, vinfo, ncname)
1488 & nvardim = nvdim, &
1493 IF (trim(
var_aname(i)).eq.
'long_name')
THEN
1500 &
nf_frst, 1, (/datumdim/), aval, vinfo, ncname)
1510 & nvardim = nvdim, &
1515 IF (trim(
var_aname(i)).eq.
'long_name')
THEN
1521 &
nf_frst, 1, (/datumdim/), aval, vinfo, ncname)
1531 &
nf_frst, 1, (/datumdim/), aval, vinfo, ncname)
1534# if defined FOUR_DVAR && !defined I4DVAR_ANA_SENSITIVITY
1543 &
nf_frst, 1, (/datumdim/), aval, vinfo, ncname)
1553 &
nf_frst, 1, (/datumdim/), aval, vinfo, ncname)
1563 &
nf_frst, 1, (/datumdim/), aval, vinfo, ncname)
1573 &
nf_frst, 1, (/datumdim/), aval, vinfo, ncname)
1583 &
nf_frst, 1, (/datumdim/), aval, vinfo, ncname)
1593 &
nf_frst, 1, (/datumdim/), aval, vinfo, ncname)
1603 &
nf_frst, 1, (/datumdim/), aval, vinfo, ncname)
1614 &
nf_frst, 1, (/datumdim/), aval, vinfo, ncname)
1619# if !defined I4DVAR_ANA_SENSITIVITY && \
1620 (defined i4dvar || defined weak_constraint)
1630 &
nf_frst, 2, (/datumdim,nouterdim/), aval, vinfo, &
1635# ifndef I4DVAR_ANA_SENSITIVITY
1636# if defined I4DVAR || defined TLM_CHECK || \
1637 defined verification || defined weak_constraint
1645# if defined VERIFICATION || defined TLM_CHECK
1647 &
nf_frst, 1, (/datumdim/), aval, vinfo, ncname)
1651 &
nf_frst, 2, (/datumdim,nouterdim/), aval, vinfo, &
1658# if defined I4DVAR || defined I4DVAR_ANA_SENSITIVITY || \
1659 defined weak_constraint
1665# ifdef I4DVAR_ANA_SENSITIVITY
1666 vinfo( 2)=
'4D-Var sensitivity analysis at observations location'
1672 &
nf_frst, 1, (/datumdim/), aval, vinfo, ncname)
1676# if defined I4DVAR || defined WEAK_CONSTRAINT
1684 &
nf_frst, 1, (/datumdim/), aval, vinfo, ncname)
1693 &
nf_frst, 1, (/datumdim/), aval, vinfo, ncname)
1701 vinfo( 1)=
'NLcost_function'
1702 vinfo( 2)=
'nonlinear model misfit cost function'
1703 vardim(1)=statedimp1
1704 vardim(2)=nouterdimp1
1707 & 2, vardim, aval, vinfo, ncname)
1712 vinfo( 1)=
'TLcost_function'
1713 vinfo( 2)=
'tangent linear model misfit cost function'
1716 & 1, (/iterdim/), aval, vinfo, ncname, &
1717 & setparaccess = .true.)
1725 vinfo( 1)=
'back_function'
1726 vinfo( 2)=
'model minus background misfit cost function'
1729 & 1, (/iterdim/), aval, vinfo, ncname, &
1730 & setparaccess = .true.)
1740 vinfo( 2)=
'normalized, optimal cost function minimum'
1743 & 1, (/iterdim/), aval, vinfo, ncname, &
1744 & setparaccess = .true.)
1748# ifdef WEAK_CONSTRAINT
1753 vinfo( 1)=
'cg_pxsave'
1754 vinfo( 2)=
'representer coefficients estimatate'
1760 & 2, vardim, aval, vinfo, ncname)
1767 vinfo( 2)=
'initial gradient for minimization, observation space'
1769 vardim(1)=datumdimp1
1774 vinfo(24)=
'_FillValue'
1778 & 2, vardim, aval, vinfo, ncname)
1786 vinfo( 2)=
'initial gradient for minimization, v space'
1787 vardim(1)=datumdimp1
1788 vinfo(24)=
'_FillValue'
1792 & 1, vardim, aval, vinfo, ncname)
1798 vinfo( 2)=
'evolved sum of increments in observation space'
1801 vinfo(24)=
'_FillValue'
1805 & 2, vardim, aval, vinfo, ncname)
1811 vinfo( 2)=
'Outer-loop background cost function'
1812 vardim(1)=nouterdimp1
1813 vinfo(24)=
'_FillValue'
1817 & 1, vardim, aval, vinfo, ncname)
1825 vinfo( 2)=
'Preconditioned Lanczos vectors, observation space'
1826 vardim(1)=datumdimp1
1827 vardim(2)=ninnerdimp1
1829 vinfo(24)=
'_FillValue'
1833 & 3, vardim, aval, vinfo, ncname)
1837 vinfo( 2)=
'converged Lanczos vectors, observation space'
1838 vardim(1)=datumdimp1
1841 vinfo(24)=
'_FillValue'
1845 & 3, vardim, aval, vinfo, ncname)
1849 vinfo( 2)=
'Lanczos vectors, observation space'
1850 vardim(1)=datumdimp1
1851 vardim(2)=ninnerdimp1
1853 vinfo(24)=
'_FillValue'
1857 & 3, vardim, aval, vinfo, ncname)
1861 vinfo( 2)=
'Lanczos vectors, observation space'
1863 vardim(2)=ninnerdimp1
1865 vinfo(24)=
'_FillValue'
1869 & 3, vardim, aval, vinfo, ncname)
1875 vinfo( 1)=
'TLmodVal_S'
1876 vinfo( 2)=
'tangent linear model at observation locations'
1882 & 3, vardim, aval, vinfo, ncname)
1890 vinfo( 1)=
'ADmodVal_S'
1891 vinfo( 2)=
'adjoint model at observation locations'
1893 vardim(2)=ninnerdimp2
1896 & 2, vardim, aval, vinfo, ncname)
1901 vinfo( 1)=
'harnoldi'
1902 vinfo( 2)=
'GMRES upper Hessenberg matrix'
1903 vardim(1)=ninnerdimp1
1906 vinfo(24)=
'_FillValue'
1910 & 3, vardim, aval, vinfo, ncname)
1916 vinfo( 2)=
'GMRES Arnoldi vector weights'
1919 vinfo(24)=
'_FillValue'
1923 & 2, vardim, aval, vinfo, ncname)
1928 vinfo( 1)=
'cg_beta0'
1929 vinfo( 2)=
'Residual norm'
1931 vinfo(24)=
'_FillValue'
1935 & 1, vardim, aval, vinfo, ncname)
1941 vinfo( 2)=
'Obs cost function'
1942 vardim(1)=ninnerdimp1
1944 vinfo(24)=
'_FillValue'
1948 & 2, vardim, aval, vinfo, ncname)
1952# if defined R4DVAR || defined R4DVAR_ANA_SENSITIVITY || \
1957 vinfo( 1)=
'RPmodel_initial'
1958 vinfo( 2)=
'initial representer model at observation locations'
1962 & 1, vardim, aval, vinfo, ncname)
1966# if defined I4DVAR_ANA_SENSITIVITY || \
1967 defined rbl4dvar_ana_sensitivity || \
1968 defined rbl4dvar_fct_sensitivity || \
1969 defined r4dvar_ana_sensitivity
1975 vinfo( 1)=
'ObsImpact_total'
1976 vinfo( 2)=
'total observation impact'
1981 & 2, vardim, aval, vinfo, ncname)
1984 vinfo( 1)=
'ObsImpact_total'
1985 vinfo( 2)=
'total observation impact'
1989 & 1, vardim, aval, vinfo, ncname)
1996 vinfo( 1)=
'ObsSens_total'
1997 vinfo( 2)=
'total observation sensitivity'
2001 & 1, vardim, aval, vinfo, ncname)
2006# if defined OBS_IMPACT_SPLIT && \
2007 (defined i4dvar_ana_sensitivity || \
2008 defined rbl4dvar_ana_sensitivity || \
2009 defined rbl4dvar_fct_sensitivity || \
2010 defined r4dvar_ana_sensitivity)
2015 vinfo( 1)=
'ObsImpact_IC'
2016 vinfo( 2)=
'observation impact due to initial conditions'
2021 & 2, vardim, aval, vinfo, ncname)
2024 vinfo( 1)=
'ObsImpact_IC'
2025 vinfo( 2)=
'observation impact due to initial conditions'
2029 & 1, vardim, aval, vinfo, ncname)
2033# if defined ADJUST_WSTRESS || defined ADJUST_STFLUX
2039 vinfo( 1)=
'ObsImpact_FC'
2040 vinfo( 2)=
'observation impact due to surface forcing'
2045 & 2, vardim, aval, vinfo, ncname)
2048 vinfo( 1)=
'ObsImpact_FC'
2049 vinfo( 2)=
'observation impact due to surface forcing'
2053 & 1, vardim, aval, vinfo, ncname)
2058# if defined ADJUST_BOUNDARY
2063 vinfo( 1)=
'ObsImpact_BC'
2064 vinfo( 2)=
'observation impact due to open boundary conditions'
2069 & 2, vardim, aval, vinfo, ncname)
2072 vinfo( 1)=
'ObsImpact_BC'
2073 vinfo( 2)=
'observation impact due to open boundary conditions'
2077 & 1, vardim, aval, vinfo, ncname)
2083# if defined BALANCE_OPERATOR && defined ZETA_ELLIPTIC
2088 vinfo( 1)=
'zeta_ref'
2089 vinfo( 2)=
'reference free-surface, balance operator'
2093 &
nf_frst, 2, (/rxidim, retadim/), aval, vinfo, &
2107 IF (
obs(ng)%ncid.eq.-1)
THEN
2117 query :
IF (.not.
ldefmod(ng))
THEN
2124 WRITE (
stdout,30) trim(ncname)
2131 & ncid =
dav(ng)%ncid)
2137 & ncid =
dav(ng)%ncid)
2207# if defined I4DVAR || defined WEAK_CONSTRAINT
2225# if defined I4DVAR || defined WEAK_CONSTRAINT
2238 IF (.not.got_var(
idoday))
THEN
2240 & trim(
dav(ng)%name)
2244 IF (.not.got_var(
idopro))
THEN
2246 & trim(
dav(ng)%name)
2250 IF (.not.got_var(
idobst))
THEN
2252 & trim(
dav(ng)%name)
2256 IF (.not.got_var(
idolon))
THEN
2258 & trim(
dav(ng)%name)
2262 IF (.not.got_var(
idolat))
THEN
2264 & trim(
dav(ng)%name)
2268 IF (.not.got_var(
idobsd))
THEN
2270 & trim(
dav(ng)%name)
2274 IF (.not.got_var(
idobsx))
THEN
2276 & trim(
dav(ng)%name)
2280 IF (.not.got_var(
idobsy))
THEN
2282 & trim(
dav(ng)%name)
2286 IF (.not.got_var(
idoerr))
THEN
2288 & trim(
dav(ng)%name)
2292 IF (.not.got_var(
idoval))
THEN
2294 & trim(
dav(ng)%name)
2299 IF (.not.got_var(
idobss))
THEN
2301 & trim(
dav(ng)%name)
2306 IF (.not.got_var(
idnlmp))
THEN
2308 & trim(
dav(ng)%name)
2313 IF (.not.got_var(
idnlmu))
THEN
2315 & trim(
dav(ng)%name)
2320 IF (.not.got_var(
idnlmi))
THEN
2322 & trim(
dav(ng)%name)
2327 IF (.not.got_var(
idnlmf))
THEN
2329 & trim(
dav(ng)%name)
2334 IF (.not.got_var(
idnlmo))
THEN
2336 & trim(
dav(ng)%name)
2340# if defined I4DVAR || defined WEAK_CONSTRAINT
2341 IF (.not.got_var(
idtlmo))
THEN
2343 & trim(
dav(ng)%name)
2348 IF (.not.got_var(
idbger))
THEN
2350 & trim(
dav(ng)%name)
2354 IF (.not.got_var(
idinno))
THEN
2356 & trim(
dav(ng)%name)
2360 IF (.not.got_var(
idincr))
THEN
2362 & trim(
dav(ng)%name)
2366 IF (.not.got_var(
idresi))
THEN
2368 & trim(
dav(ng)%name)
2372# if defined I4DVAR || defined WEAK_CONSTRAINT
2373 IF (.not.got_var(
idmomi))
THEN
2375 & trim(
dav(ng)%name)
2379 IF (.not.got_var(
idmomf))
THEN
2381 & trim(
dav(ng)%name)
2387# if defined I4DVAR || defined BACKGROUND
2392 fcount=
dav(ng)%Fcount
2398 10
FORMAT (/,2x,
'DEF_MOD_NF90 - creating model/observation', &
2399 &
' file,',t56,
'Grid ',i2.2,
': ',a)
2400 20
FORMAT (/,2x,
'DEF_MOD_NF90 - inquiring model/observation', &
2401 &
' file,',t56,
'Grid ',i2.2,
': ',a)
2402 30
FORMAT (/,
' DEF_MOD_NF90 - unable to open observation/model', &
2404 40
FORMAT (/,
' DEF_MOD_NF90 - unable to create model/observation', &
2406 50
FORMAT (/,
' DEF_MOD_NF90 - unable to create global attribute: ', &
2408 60
FORMAT (/,
' DEF_MOD_NF90 - unable to copy attribute; ',a,1x, &
2409 &
'for variable: ',a,/,11x,
'in file: 'a)
2410 70
FORMAT (/,
' DEF_MOD_NF90 - unable to inquire attribute ',i2.2,1x, &
2411 &
'name for variable: ',a,/,11x,
'in file: 'a)
2412 80
FORMAT (/,
' DEF_MOD_NF90 - unable to copy attribute: ',1x,a,2x, &
2413 &
'for variable: ',1x,a,/,11x,a)
2414 90
FORMAT (/,
' DEF_MOD_NF90 - unable to find model/observation' &
2415 &
' variable:',1x,a,/,11x,
'in file: ',a)
2430 integer,
intent(in) :: ng
2434 logical,
dimension(NV) :: got_var(
nv)
2435 logical :: foundatt(2), foundit
2437 integer,
parameter :: natt = 25
2439 integer :: iterdim, recorddim, surveydim, threedim
2440 integer :: datumdim, datumdimp1
2441 integer :: ninnerdim, ninnerdimp1, ninnerdimp2
2442 integer :: nouterdim, nouterdimp1
2443# if defined BALANCE_OPERATOR && defined ZETA_ELLIPTIC
2444 integer :: retadim, rxidim
2446 integer :: statedim, statedimp1
2449 integer :: i, j, lstr, nvatt, nvdim, status, varid, vindex
2451 integer :: vardim(3)
2453 real(dp) :: tstart, tfinal
2456 character (len=22 ) :: str_date, end_date
2457 character (len=40 ) :: aname, attname(2)
2458 character (len=80 ) :: string
2459 character (len=256) :: ncname
2460 character (len=2048) :: attvalue(2)
2461 character (len=MaxLen) :: vinfo(natt)
2463 character (len=*),
parameter :: myfile = &
2464 & __FILE__//
", def_mod_pio"
2466 TYPE (file_desc_t) :: obspiofile
2467 TYPE (var_desc_t) :: vardesc
2480 WRITE (
stdout,10) ng, trim(ncname)
2482 WRITE (
stdout,20) ng, trim(ncname)
2489 DO j=1,len(vinfo(1))
2501 define :
IF (
ldefmod(ng))
THEN
2505 IF (
obs(ng)%pioFile%fh.eq.-1)
THEN
2512 obspiofile=
obs(ng)%pioFile
2518 & piofile = obspiofile)
2524 attname(1)=
'state_variables'
2525 attname(2)=
'obs_provenance'
2528 & attname, attvalue, foundatt, &
2529 & piofile = obspiofile)
2543# if defined BALANCE_OPERATOR && defined ZETA_ELLIPTIC
2576 &
ndatum(ng)+1, datumdimp1)
2607# if defined I4DVAR || defined BACKGROUND
2609 & pio_unlimited, iterdim)
2621 string=
'ROMS 4D-Var output observation processing file'
2622 status=pio_put_att(
dav(ng)%pioFile, pio_global, &
2623 &
'type', trim(string))
2624 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
2634# if defined ARRAY_MODES
2636# elif defined SPLIT_I4DVAR
2638# elif defined I4DVAR
2640# elif defined I4DVAR_ANA_SENSITIVITY
2641 string=
uppercase(
'i4dvar_ana_sensitivity')
2642# elif defined SPLIT_RBL4DVAR
2644# elif defined RBL4DVAR
2646# elif defined RBL4DVAR_ANA_SENSITIVITY
2647 string=
uppercase(
'rbl4dvar_ana_sensitivity')
2648# elif defined RBL4DVAR_FCT_SENSITIVITY
2649 string=
uppercase(
'rbl4dvar_fct_sensitivity')
2650# elif defined SPLIT_R4DVAR
2652# elif defined R4DVAR
2654# elif defined R4DVAR_ANA_SENSITIVITY
2655 string=
uppercase(
'r4dvar_ana_sensitivity')
2656# elif defined TL_RBL4DVAR
2658# elif defined TL_R4DVAR
2660# elif defined VERIFICATION
2665 status=pio_put_att(
dav(ng)%pioFile, pio_global, &
2666 &
'Algorithm', trim(string))
2667 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
2676 IF (
initime(ng).lt.0.0_dp)
THEN
2686 status=pio_put_att(
dav(ng)%pioFile, pio_global, &
2688 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
2696 status=pio_put_att(
dav(ng)%pioFile, pio_global, &
2698 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
2706 status=pio_put_att(
dav(ng)%pioFile, pio_global, &
2707 &
'str_date', str_date)
2708 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
2716 status=pio_put_att(
dav(ng)%pioFile, pio_global, &
2717 &
'end_date', end_date)
2718 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
2728 status=pio_put_att(
dav(ng)%pioFile, pio_global, &
2729 &
'obs_file', trim(
obs(ng)%name))
2730 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
2741 IF (foundatt(1))
THEN
2743 &
'state_variables', &
2744 & trim(
obs(ng)%name), &
2747 & trim(
dav(ng)%name), &
2748 &
dav(ng)%pioFile, &
2750 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
2764 IF (foundatt(2))
THEN
2766 &
'obs_provenance', &
2767 & trim(
obs(ng)%name), &
2770 & trim(
dav(ng)%name), &
2771 &
dav(ng)%pioFile, &
2773 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
2786 status=pio_put_att(
dav(ng)%pioFile, pio_global, &
2788 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
2798 status=pio_put_att(
dav(ng)%pioFile, pio_global, &
2800 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
2810 status=pio_put_att(
dav(ng)%pioFile, pio_global, &
2811 &
'code_dir', trim(
rdir))
2812 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
2822 status=pio_put_att(
dav(ng)%pioFile, pio_global, &
2823 &
'header_dir', trim(
hdir))
2824 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
2825 IF (
master)
WRITE (
stdout,50)
'header_dir', trim(ncname)
2834 status=pio_put_att(
dav(ng)%pioFile, pio_global, &
2835 &
'header_file', trim(
hfile))
2836 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
2837 IF (
master)
WRITE (
stdout,50)
'header_file', trim(ncname)
2847 status=pio_put_att(
dav(ng)%pioFile, pio_global, &
2848 &
'os', trim(
my_os))
2849 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
2857 status=pio_put_att(
dav(ng)%pioFile, pio_global, &
2859 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
2867 status=pio_put_att(
dav(ng)%pioFile, pio_global, &
2868 &
'compiler_system', trim(
my_fort))
2869 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
2878 status=pio_put_att(
dav(ng)%pioFile,pio_global, &
2879 &
'compiler_command', trim(
my_fc))
2880 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
2891 status=pio_put_att(
dav(ng)%pioFile, pio_global, &
2893 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
2894 IF (
master)
WRITE (
stdout,50)
'compiler_flags', trim(ncname)
2904 WRITE (
history,
'(a,1x,a,", ",a)')
'ROMS, Version', &
2908 WRITE (
history,
'(a,1x,a)')
'ROMS, Version', &
2911 status=pio_put_att(
dav(ng)%pioFile, pio_global, &
2913 IF (
founderror(status, pio_noerr, __line__, myfile))
THEN
2926# if defined I4DVAR || defined WEAK_CONSTRAINT
2931 vinfo( 2)=
'outer loop counter'
2934 & 1, (/0/), aval, vinfo, ncname, &
2935 & setparaccess = .false.)
2939 vinfo( 2)=
'inner loop counter'
2942 & 1, (/0/), aval, vinfo, ncname, &
2943 & setparaccess = .false.)
2946# if defined ARRAY_MODES || \
2947 defined i4dvar_ana_sensitivity || \
2948 defined rbl4dvar_ana_sensitivity || \
2949 defined rbl4dvar_fct_sensitivity || \
2950 defined r4dvar_ana_sensitivity
2955 vinfo( 2)=
'Observations impact/sensitivity outer loop to use'
2958 & 1, (/0/), aval, vinfo, ncname, &
2959 & setparaccess = .false.)
2966 vinfo( 2)=
'number of observations with the same survey time'
2969 & 1, (/surveydim/), aval, vinfo, ncname, &
2970 & setparaccess = .false.)
2973# ifndef I4DVAR_ANA_SENSITIVITY
2975 vinfo( 1)=
'Nused_obs'
2976 vinfo( 2)=
'Number of usable observations'
2979 & 1, (/statedim/), aval, vinfo, ncname, &
2980 & setparaccess = .false.)
2983 vinfo( 1)=
'obs_mean'
2984 vinfo( 2)=
'observations mean'
2987 & 1, (/statedim/), aval, vinfo, ncname, &
2988 & setparaccess = .false.)
2992 vinfo( 2)=
'observations standard deviation'
2995 & 1, (/statedim/), aval, vinfo, ncname, &
2996 & setparaccess = .false.)
2999 vinfo( 1)=
'model_mean'
3000 vinfo( 2)=
'model mean'
3003 & 1, (/statedim/), aval, vinfo, ncname, &
3004 & setparaccess = .false.)
3007 vinfo( 1)=
'model_std'
3008 vinfo( 2)=
'model standard deviation'
3011 & 1, (/statedim/), aval, vinfo, ncname, &
3012 & setparaccess = .false.)
3015 vinfo( 1)=
'model_bias'
3016 vinfo( 2)=
'model bias'
3019 & 1, (/statedim/), aval, vinfo,ncname, &
3020 & setparaccess = .false.)
3024 vinfo( 2)=
'model-observations standard deviation error'
3027 & 1, (/statedim/), aval, vinfo, ncname, &
3028 & setparaccess = .false.)
3032 vinfo( 2)=
'model-observations cross-correlation'
3035 & 1, (/statedim/), aval, vinfo, ncname, &
3036 & setparaccess = .false.)
3040 vinfo( 2)=
'model-observations mean squared error'
3043 & 1, (/statedim/), aval, vinfo, ncname, &
3044 & setparaccess = .false.)
3051 vinfo( 1)=
'nConvRitz'
3052 vinfo( 2)=
'number of converged Ritz eigenvalues'
3055 & 1, (/0/), aval, vinfo, ncname, &
3056 & setparaccess = .false.)
3059# elif defined WEAK_CONSTRAINT
3063 vinfo( 1)=
'nConvRitz'
3064 vinfo( 2)=
'number of converged Ritz eigenvalues'
3067 & 1, (/nouterdim/), aval, vinfo, ncname, &
3068 & setparaccess = .false.)
3071# if defined WEAK_CONSTRAINT && \
3072 (defined array_modes || defined clipping)
3077# if defined ARRAY_MODES
3078 vinfo( 2)=
'representer matrix array mode eigenvector '// &
3080# elif defined CLIPPING
3081 vinfo( 2)=
'representer matric cut-off eigenvectors'
3084 & 1, (/0/), aval, vinfo, ncname, &
3085 & setparaccess = .false.)
3093 vinfo( 2)=
'converged Ritz eigenvalues to approximate Hessian'
3096 & 1, (/ninnerdim/), aval, vinfo, ncname, &
3097 & setparaccess = .false.)
3100# elif defined WEAK_CONSTRAINT
3105 vinfo( 2)=
'converged Ritz eigenvalues to approximate Hessian'
3108 vinfo(24)=
'_FillValue'
3112 & 2, vardim, aval, vinfo, ncname, &
3113 & setparaccess = .false.)
3116# if defined I4DVAR || defined WEAK_CONSTRAINT
3121 vinfo( 2)=
'conjugate gradient beta coefficient'
3122 vardim(1)=ninnerdimp1
3124 vinfo(24)=
'_FillValue'
3128 & 2, vardim, aval, vinfo, ncname, &
3129 & setparaccess = .false.)
3132# if defined I4DVAR || defined WEAK_CONSTRAINT
3136 vinfo( 1)=
'cg_delta'
3137 vinfo( 2)=
'Lanczos algorithm delta coefficient'
3140 vinfo(24)=
'_FillValue'
3144 & 2, vardim, aval, vinfo, ncname, &
3145 & setparaccess = .false.)
3148# ifdef WEAK_CONSTRAINT
3151 vinfo( 2)=
'normalization coefficients for Lanczos vectors'
3154 vinfo(24)=
'_FillValue'
3158 & 2, vardim, aval, vinfo, ncname, &
3159 & setparaccess = .false.)
3164 vinfo( 1)=
'cg_gamma'
3165 vinfo( 2)=
'Lanczos algorithm gamma coefficient'
3168 vinfo(24)=
'_FillValue'
3172 & 2, vardim, aval, vinfo, ncname, &
3173 & setparaccess = .false.)
3181 vinfo( 1)=
'cg_Gnorm'
3182 vinfo( 2)=
'initial gradient normalization factor'
3185 & 1, (/nouterdim/), aval, vinfo, ncname, &
3186 & setparaccess = .false.)
3189# elif defined WEAK_CONSTRAINT
3193 vinfo( 1)=
'cg_Gnorm_v'
3194 vinfo( 2)=
'initial gradient normalization factor, v-space'
3196 & 1, (/nouterdim/), aval, vinfo, ncname, &
3197 & setparaccess = .false.)
3200 vinfo( 1)=
'cg_Gnorm_y'
3201 vinfo( 2)=
'initial gradient normalization factor, y-space'
3203 & 1, (/nouterdim/), aval, vinfo, ncname, &
3204 & setparaccess = .false.)
3207# if defined I4DVAR || defined WEAK_CONSTRAINT
3212 vinfo( 2)=
'Lanczos vector normalization factor'
3213 vardim(1)=ninnerdimp1
3215 vinfo(24)=
'_FillValue'
3219 & 2, vardim, aval, vinfo, ncname, &
3220 & setparaccess = .false.)
3227 vinfo( 1)=
'cg_Greduc'
3228 vinfo( 2)=
'reduction in the gradient norm'
3231 vinfo(24)=
'_FillValue'
3235 & 2, vardim, aval, vinfo, ncname, &
3236 & setparaccess = .false.)
3239# elif defined WEAK_CONSTRAINT
3243 vinfo( 1)=
'cg_Greduc_v'
3244 vinfo( 2)=
'reduction in the gradient norm, v-space'
3247 vinfo(24)=
'_FillValue'
3251 & 2, vardim, aval, vinfo, ncname, &
3252 & setparaccess = .false.)
3255 vinfo( 1)=
'cg_Greduc_y'
3256 vinfo( 2)=
'reduction in the gradient norm, y-space'
3259 vinfo(24)=
'_FillValue'
3263 & 2, vardim, aval, vinfo, ncname, &
3264 & setparaccess = .false.)
3271 vinfo( 1)=
'cg_Tmatrix'
3272 vinfo( 2)=
'Lanczos recurrence tridiagonal matrix'
3277 & 2, vardim, aval, vinfo, ncname, &
3278 & setparaccess = .false.)
3284 vinfo( 2)=
'tridiagonal matrix, upper diagonal elements'
3287 vinfo(24)=
'_FillValue'
3291 & 2, vardim, aval, vinfo, ncname, &
3292 & setparaccess = .false.)
3295# if defined I4DVAR || defined WEAK_CONSTRAINT
3300 vinfo( 2)=
'Lanczos recurrence eigenvalues'
3303 vinfo(24)=
'_FillValue'
3307 & 2, vardim, aval, vinfo, ncname, &
3308 & setparaccess = .false.)
3313 vinfo( 1)=
'cg_RitzErr'
3314 vinfo( 2)=
'Ritz eigenvalues relative error'
3317 vinfo(24)=
'_FillValue'
3321 & 2, vardim, aval, vinfo, ncname, &
3322 & setparaccess = .false.)
3330 vinfo( 2)=
'Lanczos recurrence eigenvectors'
3333 vinfo(24)=
'_FillValue'
3337 & 2, vardim, aval, vinfo, ncname, &
3338 & setparaccess = .false.)
3341# elif defined WEAK_CONSTRAINT
3346 vinfo( 2)=
'Lanczos recurrence eigenvectors'
3350 vinfo(24)=
'_FillValue'
3354 & 3, vardim, aval, vinfo, ncname, &
3355 & setfillval = .false., &
3356 & setparaccess = .false.)
3359# if defined RBL4DVAR || \
3360 defined rbl4dvar_ana_sensitivity || \
3361 defined rbl4dvar_fct_sensitivity || \
3362 defined sp4dvar || \
3367 vinfo( 1)=
'NL_iDataPenalty'
3368 vinfo( 2)=
'nonlinear model initial data penalty function'
3371 & 1, (/statedimp1/), aval, vinfo, ncname, &
3372 & setparaccess = .false.)
3375 vinfo( 1)=
'NL_fDataPenalty'
3376 vinfo( 2)=
'nonlinear model final data penalty function'
3377 vardim(1)=statedimp1
3381 & 2, vardim, aval, vinfo, ncname, &
3382 & setparaccess = .false.)
3385# if (defined RECOMPUTE_4DVAR && \
3386 (defined array_modes || defined clipping)) || \
3387 defined r4dvar_ana_sensitivity || defined r4dvar || \
3392 vinfo( 1)=
'RP_iDataPenalty'
3393 vinfo( 2)=
'representer model initial data penalty function'
3394 vardim(1)=statedimp1
3398 & 2, vardim, aval, vinfo, ncname, &
3399 & setparaccess = .false.)
3402 vinfo( 1)=
'RP_fDataPenalty'
3403 vinfo( 2)=
'representer model final data penalty function'
3404 vardim(1)=statedimp1
3408 & 2, vardim, aval, vinfo, ncname, &
3409 & setparaccess = .false.)
3412# ifdef WEAK_CONSTRAINT
3417 vinfo( 2)=
'first guess initial data misfit'
3418 vardim(1)=ninnerdimp1
3420 vinfo(24)=
'_FillValue'
3424 & 2, vardim, aval, vinfo, ncname, &
3425 & setparaccess = .false.)
3431 vinfo( 2)=
'state estimate data misfit'
3432 vardim(1)=ninnerdimp1
3434 vinfo(24)=
'_FillValue'
3438 & 2, vardim, aval, vinfo, ncname, &
3439 & setparaccess = .false.)
3447 vinfo( 2)=
'model penalty function'
3448 vardim(1)=ninnerdimp1
3450 vinfo(24)=
'_FillValue'
3454 & 2, vardim, aval, vinfo, ncname, &
3455 & setparaccess = .false.)
3461 vinfo( 2)=
'optimal penalty function'
3462 vardim(1)=ninnerdimp1
3464 vinfo(24)=
'_FillValue'
3468 & 2, vardim, aval, vinfo, ncname, &
3469 & setparaccess = .false.)
3475 vinfo( 2)=
'actual model penalty function'
3476 vardim(1)=ninnerdimp1
3478 vinfo(24)=
'_FillValue'
3482 & 2, vardim, aval, vinfo, ncname, &
3483 & setparaccess = .false.)
3489 vinfo( 2)=
'actual data penalty function'
3490 vardim(1)=ninnerdimp1
3492 vinfo(24)=
'_FillValue'
3496 & 2, vardim, aval, vinfo, ncname, &
3497 & setparaccess = .false.)
3503 vinfo( 2)=
'actual total penalty function'
3504 vardim(1)=ninnerdimp1
3506 vinfo(24)=
'_FillValue'
3510 & 2, vardim, aval, vinfo, ncname, &
3511 & setparaccess = .false.)
3520 & piofile = obspiofile, &
3522 & nvardim = nvdim, &
3527 IF (trim(var_aname(i)).eq.
'long_name')
THEN
3528 vinfo(2)=trim(var_achar(i))
3529 ELSE IF (trim(var_aname(i)).eq.
'units')
THEN
3530 vinfo(3)=trim(var_achar(i))
3531 ELSE IF (trim(var_aname(i)).eq.
'calendar')
THEN
3532 vinfo(4)=trim(var_achar(i))
3540 & nf_tout, 1, (/surveydim/), aval, vinfo, ncname)
3548 & piofile = obspiofile, &
3550 & nvardim = nvdim, &
3559 & pio_int, 1, (/datumdim/), aval, vinfo, ncname)
3565 & trim(
obs(ng)%name), &
3568 & trim(
dav(ng)%name), &
3569 &
dav(ng)%pioFile, &
3578 & piofile = obspiofile, &
3580 & nvardim = nvdim, &
3589 & pio_int, 1, (/datumdim/), aval, vinfo, ncname)
3595 & trim(
obs(ng)%name), &
3598 & trim(
dav(ng)%name), &
3599 &
dav(ng)%pioFile, &
3608 & piofile = obspiofile, &
3610 & nvardim = nvdim, &
3615 IF (trim(var_aname(i)).eq.
'long_name')
THEN
3616 vinfo(2)=trim(var_achar(i))
3617 ELSE IF (trim(var_aname(i)).eq.
'units')
THEN
3618 vinfo(3)=trim(var_achar(i))
3619 ELSE IF (trim(var_aname(i)).eq.
'calendar')
THEN
3620 vinfo(4)=trim(var_achar(i))
3628 &
pio_tout, 1, (/datumdim/), aval, vinfo, ncname)
3636 & piofile = obspiofile, &
3638 & nvardim = nvdim, &
3643 IF (trim(var_aname(i)).eq.
'long_name')
THEN
3644 vinfo(2)=trim(var_achar(i))
3645 ELSE IF (trim(var_aname(i)).eq.
'units')
THEN
3646 vinfo(3)=trim(var_achar(i))
3654 &
pio_frst, 1, (/datumdim/), aval, vinfo, ncname)
3662 & piofile = obspiofile, &
3664 & nvardim = nvdim, &
3669 IF (trim(var_aname(i)).eq.
'long_name')
THEN
3670 vinfo(2)=trim(var_achar(i))
3671 ELSE IF (trim(var_aname(i)).eq.
'units')
THEN
3672 vinfo(3)=trim(var_achar(i))
3680 &
pio_frst, 1, (/datumdim/), aval, vinfo, ncname)
3688 & piofile = obspiofile, &
3690 & nvardim = nvdim, &
3695 IF (trim(var_aname(i)).eq.
'long_name')
THEN
3696 vinfo(2)=trim(var_achar(i))
3697 ELSE IF (trim(var_aname(i)).eq.
'units')
THEN
3698 vinfo(3)=trim(var_achar(i))
3699 ELSE IF (trim(var_aname(i)).eq.
'negative')
THEN
3700 vinfo(11)=
'downwards'
3703 vinfo(17)=
'missing_value'
3710 &
pio_frst, 1, (/datumdim/), aval, vinfo, ncname)
3718 & piofile = obspiofile, &
3720 & nvardim = nvdim, &
3725 IF (trim(var_aname(i)).eq.
'long_name')
THEN
3726 vinfo(2)=trim(var_achar(i))
3734 &
pio_frst, 1, (/datumdim/), aval, vinfo, ncname)
3742 & piofile = obspiofile, &
3744 & nvardim = nvdim, &
3749 IF (trim(var_aname(i)).eq.
'long_name')
THEN
3750 vinfo(2)=trim(var_achar(i))
3758 &
pio_frst, 1, (/datumdim/), aval, vinfo, ncname)
3766 & piofile = obspiofile, &
3768 & nvardim = nvdim, &
3773 IF (trim(var_aname(i)).eq.
'long_name')
THEN
3774 vinfo(2)=trim(var_achar(i))
3782 &
pio_frst, 1, (/datumdim/), aval, vinfo, ncname)
3790 & piofile = obspiofile, &
3792 & nvardim = nvdim, &
3797 IF (trim(var_aname(i)).eq.
'long_name')
THEN
3798 vinfo(2)=trim(var_achar(i))
3807 &
pio_frst, 1, (/datumdim/), aval, vinfo, ncname)
3815 & piofile = obspiofile, &
3817 & nvardim = nvdim, &
3822 IF (trim(var_aname(i)).eq.
'long_name')
THEN
3823 vinfo(2)=trim(var_achar(i))
3832 &
pio_frst, 1, (/datumdim/), aval, vinfo, ncname)
3840 & piofile = obspiofile, &
3842 & nvardim = nvdim, &
3847 IF (trim(var_aname(i)).eq.
'long_name')
THEN
3848 vinfo(2)=trim(var_achar(i))
3856 &
pio_frst, 1, (/datumdim/), aval, vinfo, ncname)
3869 &
pio_frst, 1, (/datumdim/), aval, vinfo, ncname)
3872# if defined FOUR_DVAR && !defined I4DVAR_ANA_SENSITIVITY
3884 &
pio_frst, 1, (/datumdim/), aval, vinfo, ncname)
3897 &
pio_frst, 1, (/datumdim/), aval, vinfo, ncname)
3910 &
pio_frst, 1, (/datumdim/), aval, vinfo, ncname)
3923 &
pio_frst, 1, (/datumdim/), aval, vinfo, ncname)
3936 &
pio_frst, 1, (/datumdim/), aval, vinfo, ncname)
3949 &
pio_frst, 1, (/datumdim/), aval, vinfo, ncname)
3962 &
pio_frst, 1, (/datumdim/), aval, vinfo, ncname)
3976 &
pio_frst, 1, (/datumdim/), aval, vinfo, ncname)
3981# if !defined I4DVAR_ANA_SENSITIVITY && \
3982 (defined i4dvar || defined weak_constraint)
3995 &
pio_frst, 2, (/datumdim,nouterdim/), aval, &
4000# ifndef I4DVAR_ANA_SENSITIVITY
4001# if defined I4DVAR || defined TLM_CHECK || \
4002 defined verification || defined weak_constraint
4013# if defined VERIFICATION || defined TLM_CHECK
4016 &
pio_frst, 1, (/datumdim/), aval, vinfo, ncname)
4021 &
pio_frst, 2, (/datumdim,nouterdim/), aval, &
4028# if defined I4DVAR || defined I4DVAR_ANA_SENSITIVITY || \
4029 defined weak_constraint
4035# ifdef I4DVAR_ANA_SENSITIVITY
4036 vinfo( 2)=
'4D-Var sensitivity analysis at observations location'
4045 &
pio_frst, 1, (/datumdim/), aval, vinfo, ncname)
4049# if defined I4DVAR || defined WEAK_CONSTRAINT
4060 &
pio_frst, 1, (/datumdim/), aval, vinfo, ncname)
4072 &
pio_frst, 1, (/datumdim/), aval, vinfo, ncname)
4080 vinfo( 1)=
'NLcost_function'
4081 vinfo( 2)=
'nonlinear model misfit cost function'
4082 vardim(1)=statedimp1
4083 vardim(2)=nouterdimp1
4086 & 2, vardim, aval, vinfo, ncname)
4091 vinfo( 1)=
'TLcost_function'
4092 vinfo( 2)=
'tangent linear model misfit cost function'
4095 & 1, (/iterdim/), aval, vinfo, ncname, &
4096 & setparaccess = .true.)
4104 vinfo( 1)=
'back_function'
4105 vinfo( 2)=
'model minus background misfit cost function'
4108 & 1, (/iterdim/), aval, vinfo, ncname, &
4109 & setparaccess = .true.)
4119 vinfo( 2)=
'normalized, optimal cost function minimum'
4122 & 1, (/iterdim/), aval, vinfo, ncname, &
4123 & setparaccess = .true.)
4127# ifdef WEAK_CONSTRAINT
4132 vinfo( 1)=
'cg_pxsave'
4133 vinfo( 2)=
'representer coefficients estimatate'
4139 & 2, vardim, aval, vinfo, ncname)
4146 vinfo( 2)=
'initial gradient for minimization, observation space'
4148 vardim(1)=datumdimp1
4153 vinfo(24)=
'_FillValue'
4157 & 2, vardim, aval, vinfo, ncname)
4165 vinfo( 2)=
'initial gradient for minimization, v space'
4166 vardim(1)=datumdimp1
4167 vinfo(24)=
'_FillValue'
4171 & 1, vardim, aval, vinfo, ncname)
4177 vinfo( 2)=
'evolved sum of increments in observation space'
4180 vinfo(24)=
'_FillValue'
4184 & 2, vardim, aval, vinfo, ncname)
4190 vinfo( 2)=
'Outer-loop background cost function'
4191 vardim(1)=nouterdimp1
4192 vinfo(24)=
'_FillValue'
4196 & 1, vardim, aval, vinfo, ncname)
4204 vinfo( 2)=
'Preconditioned Lanczos vectors, observation space'
4205 vardim(1)=datumdimp1
4206 vardim(2)=ninnerdimp1
4208 vinfo(24)=
'_FillValue'
4212 & 3, vardim, aval, vinfo, ncname)
4216 vinfo( 2)=
'converged Lanczos vectors, observation space'
4217 vardim(1)=datumdimp1
4220 vinfo(24)=
'_FillValue'
4224 & 3, vardim, aval, vinfo, ncname)
4228 vinfo( 2)=
'Lanczos vectors, observation space'
4229 vardim(1)=datumdimp1
4230 vardim(2)=ninnerdimp1
4232 vinfo(24)=
'_FillValue'
4236 & 3, vardim, aval, vinfo, ncname)
4240 vinfo( 2)=
'Lanczos vectors, observation space'
4242 vardim(2)=ninnerdimp1
4244 vinfo(24)=
'_FillValue'
4248 & 3, vardim, aval, vinfo, ncname)
4254 vinfo( 1)=
'TLmodVal_S'
4255 vinfo( 2)=
'tangent linear model at observation locations'
4261 & 3, vardim, aval, vinfo, ncname)
4269 vinfo( 1)=
'ADmodVal_S'
4270 vinfo( 2)=
'adjoint model at observation locations'
4272 vardim(2)=ninnerdimp2
4275 & 2, vardim, aval, vinfo, ncname)
4280 vinfo( 1)=
'harnoldi'
4281 vinfo( 2)=
'GMRES upper Hessenberg matrix'
4282 vardim(1)=ninnerdimp1
4285 vinfo(24)=
'_FillValue'
4289 & 3, vardim, aval, vinfo, ncname)
4295 vinfo( 2)=
'GMRES Arnoldi vector weights'
4298 vinfo(24)=
'_FillValue'
4302 & 2, vardim, aval, vinfo, ncname)
4307 vinfo( 1)=
'cg_beta0'
4308 vinfo( 2)=
'Residual norm'
4310 vinfo(24)=
'_FillValue'
4314 & 1, vardim, aval, vinfo, ncname)
4320 vinfo( 2)=
'Obs cost function'
4321 vardim(1)=ninnerdimp1
4323 vinfo(24)=
'_FillValue'
4327 & 2, vardim, aval, vinfo, ncname)
4331# if defined R4DVAR || defined R4DVAR_ANA_SENSITIVITY || \
4336 vinfo( 1)=
'RPmodel_initial'
4337 vinfo( 2)=
'initial representer model at observation locations'
4341 & 1, vardim, aval, vinfo, ncname)
4345# if defined I4DVAR_ANA_SENSITIVITY || \
4346 defined rbl4dvar_ana_sensitivity || \
4347 defined rbl4dvar_fct_sensitivity || \
4348 defined r4dvar_ana_sensitivity
4354 vinfo( 1)=
'ObsImpact_total'
4355 vinfo( 2)=
'total observation impact'
4360 & 2, vardim, aval, vinfo, ncname)
4363 vinfo( 1)=
'ObsImpact_total'
4364 vinfo( 2)=
'total observation impact'
4368 & 1, vardim, aval, vinfo, ncname)
4375 vinfo( 1)=
'ObsSens_total'
4376 vinfo( 2)=
'total observation sensitivity'
4380 & 1, vardim, aval, vinfo, ncname)
4385# if defined OBS_IMPACT_SPLIT && \
4386 (defined i4dvar_ana_sensitivity || \
4387 defined rbl4dvar_ana_sensitivity || \
4388 defined rbl4dvar_fct_sensitivity || \
4389 defined r4dvar_ana_sensitivity)
4394 vinfo( 1)=
'ObsImpact_IC'
4395 vinfo( 2)=
'observation impact due to initial conditions'
4400 & 2, vardim, aval, vinfo, ncname)
4403 vinfo( 1)=
'ObsImpact_IC'
4404 vinfo( 2)=
'observation impact due to initial conditions'
4408 & 1, vardim, aval, vinfo, ncname)
4412# if defined ADJUST_WSTRESS || defined ADJUST_STFLUX
4418 vinfo( 1)=
'ObsImpact_FC'
4419 vinfo( 2)=
'observation impact due to surface forcing'
4424 & 2, vardim, aval, vinfo, ncname)
4427 vinfo( 1)=
'ObsImpact_FC'
4428 vinfo( 2)=
'observation impact due to surface forcing'
4432 & 1, vardim, aval, vinfo, ncname)
4437# if defined ADJUST_BOUNDARY
4442 vinfo( 1)=
'ObsImpact_BC'
4443 vinfo( 2)=
'observation impact due to open boundary conditions'
4448 & 2, vardim, aval, vinfo, ncname)
4451 vinfo( 1)=
'ObsImpact_BC'
4452 vinfo( 2)=
'observation impact due to open boundary conditions'
4456 & 1, vardim, aval, vinfo, ncname)
4462# if defined BALANCE_OPERATOR && defined ZETA_ELLIPTIC
4467 vinfo( 1)=
'zeta_ref'
4468 vinfo( 2)=
'reference free-surface, balance operator'
4475 &
pio_frst, 2, (/rxidim, retadim/), aval, vinfo, &
4489 IF (
obs(ng)%pioFile%fh.eq.-1)
THEN
4500 query :
IF (.not.
ldefmod(ng))
THEN
4507 WRITE (
stdout,30) trim(ncname)
4514 & piofile =
dav(ng)%pioFile)
4520 & piofile =
dav(ng)%pioFile)
4533 IF (trim(var_name(i)).eq.trim(
vname(1,
idoday)))
THEN
4538 ELSE IF (trim(var_name(i)).eq.trim(
vname(1,
idotyp)))
THEN
4543 ELSE IF (trim(var_name(i)).eq.trim(
vname(1,
idopro)))
THEN
4548 ELSE IF (trim(var_name(i)).eq.trim(
vname(1,
idobst)))
THEN
4553 ELSE IF (trim(var_name(i)).eq.trim(
vname(1,
idolon)))
THEN
4558 ELSE IF (trim(var_name(i)).eq.trim(
vname(1,
idolat)))
THEN
4563 ELSE IF (trim(var_name(i)).eq.trim(
vname(1,
idobsd)))
THEN
4568 ELSE IF (trim(var_name(i)).eq.trim(
vname(1,
idobsx)))
THEN
4573 ELSE IF (trim(var_name(i)).eq.trim(
vname(1,
idobsy)))
THEN
4578 ELSE IF (trim(var_name(i)).eq.trim(
vname(1,
idobsz)))
THEN
4583 ELSE IF (trim(var_name(i)).eq.trim(
vname(1,
idoerr)))
THEN
4588 ELSE IF (trim(var_name(i)).eq.trim(
vname(1,
idoval)))
THEN
4593 ELSE IF (trim(var_name(i)).eq.trim(
vname(1,
idomet)))
THEN
4598 ELSE IF (trim(var_name(i)).eq.trim(
vname(1,
idobss)))
THEN
4604 ELSE IF (trim(var_name(i)).eq.trim(
vname(1,
idnlmp)))
THEN
4609 ELSE IF (trim(var_name(i)).eq.trim(
vname(1,
idnlmu)))
THEN
4614 ELSE IF (trim(var_name(i)).eq.trim(
vname(1,
idnlmi)))
THEN
4619 ELSE IF (trim(var_name(i)).eq.trim(
vname(1,
idnlmf)))
THEN
4625 ELSE IF (trim(var_name(i)).eq.trim(
vname(1,
idnlmo)))
THEN
4631# if defined I4DVAR || defined WEAK_CONSTRAINT
4632 ELSE IF (trim(var_name(i)).eq.trim(
vname(1,
idtlmo)))
THEN
4639 ELSE IF (trim(var_name(i)).eq.trim(
vname(1,
idbger)))
THEN
4644 ELSE IF (trim(var_name(i)).eq.trim(
vname(1,
idinno)))
THEN
4649 ELSE IF (trim(var_name(i)).eq.trim(
vname(1,
idincr)))
THEN
4654 ELSE IF (trim(var_name(i)).eq.trim(
vname(1,
idresi)))
THEN
4659# if defined I4DVAR || defined WEAK_CONSTRAINT
4660 ELSE IF (trim(var_name(i)).eq.trim(
vname(1,
idmomi)))
THEN
4665 ELSE IF (trim(var_name(i)).eq.trim(
vname(1,
idmomf)))
THEN
4676 IF (.not.got_var(
idoday))
THEN
4678 & trim(
dav(ng)%name)
4682 IF (.not.got_var(
idopro))
THEN
4684 & trim(
dav(ng)%name)
4688 IF (.not.got_var(
idobst))
THEN
4690 & trim(
dav(ng)%name)
4694 IF (.not.got_var(
idolon))
THEN
4696 & trim(
dav(ng)%name)
4700 IF (.not.got_var(
idolat))
THEN
4702 & trim(
dav(ng)%name)
4706 IF (.not.got_var(
idobsd))
THEN
4708 & trim(
dav(ng)%name)
4712 IF (.not.got_var(
idobsx))
THEN
4714 & trim(
dav(ng)%name)
4718 IF (.not.got_var(
idobsy))
THEN
4720 & trim(
dav(ng)%name)
4724 IF (.not.got_var(
idoerr))
THEN
4726 & trim(
dav(ng)%name)
4730 IF (.not.got_var(
idoval))
THEN
4732 & trim(
dav(ng)%name)
4737 IF (.not.got_var(
idobss))
THEN
4739 & trim(
dav(ng)%name)
4744 IF (.not.got_var(
idnlmp))
THEN
4746 & trim(
dav(ng)%name)
4751 IF (.not.got_var(
idnlmu))
THEN
4753 & trim(
dav(ng)%name)
4758 IF (.not.got_var(
idnlmi))
THEN
4760 & trim(
dav(ng)%name)
4765 IF (.not.got_var(
idnlmf))
THEN
4767 & trim(
dav(ng)%name)
4772 IF (.not.got_var(
idnlmo))
THEN
4774 & trim(
dav(ng)%name)
4778# if defined I4DVAR || defined WEAK_CONSTRAINT
4779 IF (.not.got_var(
idtlmo))
THEN
4781 & trim(
dav(ng)%name)
4786 IF (.not.got_var(
idbger))
THEN
4788 & trim(
dav(ng)%name)
4792 IF (.not.got_var(
idinno))
THEN
4794 & trim(
dav(ng)%name)
4798 IF (.not.got_var(
idincr))
THEN
4800 & trim(
dav(ng)%name)
4804 IF (.not.got_var(
idresi))
THEN
4806 & trim(
dav(ng)%name)
4810# if defined I4DVAR || defined WEAK_CONSTRAINT
4811 IF (.not.got_var(
idmomi))
THEN
4813 & trim(
dav(ng)%name)
4817 IF (.not.got_var(
idmomf))
THEN
4819 & trim(
dav(ng)%name)
4825# if defined I4DVAR || defined BACKGROUND
4829 dav(ng)%Rindex=rec_size
4830 fcount=
dav(ng)%Fcount
4831 dav(ng)%Nrec(fcount)=rec_size
4836 10
FORMAT (/,2x,
'DEF_MOD_PIO - creating model/observation', &
4837 &
' file,',t56,
'Grid ',i2.2,
': ',a)
4838 20
FORMAT (/,2x,
'DEF_MOD_PIO - inquiring model/observation', &
4839 &
' file,',t56,
'Grid ',i2.2,
': ',a)
4840 30
FORMAT (/,
' DEF_MOD_PIO - unable to open observation/model', &
4842 40
FORMAT (/,
' DEF_MOD_PIO - unable to create model/observation', &
4844 50
FORMAT (/,
' DEF_MOD_PIO - unable to create global attribute: ', &
4846 60
FORMAT (/,
' DEF_MOD_PIO - unable to copy attribute; ',a,1x, &
4847 &
'for variable: ',a,/,11x,
'in file: 'a)
4848 70
FORMAT (/,
' DEF_MOD_PIO - unable to inquire attribute ',i2.2,1x, &
4849 &
'name for variable: ',a,/,11x,
'in file: 'a)
4850 80
FORMAT (/,
' DEF_MOD_PIO - unable to copy attribute: ',1x,a,2x, &
4851 &
'for variable: ',1x,a,/,11x,a)
4852 90
FORMAT (/,
' DEF_MOD_PIO - unable to find model/observation' &
4853 &
' variable:',1x,a,/,11x,
'in file: ',a)