18# if defined FOUR_DVAR || defined VERIFICATION || \
19 (defined hessian_sv && defined bnorm)
35 logical,
intent(in) :: Lwrite
37 integer,
intent(in) :: model, inp, out
43 integer :: Mval, Npts, Nval
44 integer :: i, ib, igrid, itrc, k, ng, status
45 integer :: Cdim, Clen, Rdim
48 integer :: Nfiles(Ngrids)
49# if defined FOUR_DVAR || defined VERIFICATION || \
50 (defined hessian_sv && defined bnorm)
51 logical,
dimension(MT) :: Ltracer
52# if defined ADJUST_STFLUX && defined SOLVE3D
53 logical,
dimension(MT,Ngrids) :: Ltsur
55# ifdef ADJUST_BOUNDARY
56 logical,
dimension(4,Ngrids) :: Lbry
58 logical,
dimension(4,MT,Ngrids) :: Lbry_trc
59 logical,
dimension(MT,4) :: Lboundary
60 real(r8),
dimension(4,MT,Ngrids) :: Rboundary
63 real(r8),
dimension(MT,Ngrids) :: Rtracer
65 real(dp),
dimension(nRval) :: Rval
68 character (len=1 ),
parameter :: blank =
' '
69# ifdef ADJUST_BOUNDARY
70 character (len=7) :: Text
72 character (len=40 ) :: KeyWord
73 character (len=50 ) :: label
74 character (len=256) :: fname, line
75 character (len=256),
dimension(nCval) :: Cval
77 character (len=*),
parameter :: MyFile = &
93# if defined FOUR_DVAR || defined VERIFICATION || \
94 (defined hessian_sv && defined bnorm)
102 READ (inp,
'(a)',
err=10,
END=20) line
103 status=decode_line(line, keyword, nval, cval, rval)
104 IF (status.gt.0)
THEN
105 SELECT CASE (trim(keyword))
107 npts=load_r(nval, rval, ngrids, dtdz_min)
109 npts=load_r(nval, rval, ngrids, ml_depth)
111 ml_depth(ng)=abs(ml_depth(ng))
113# if defined BALANCE_OPERATOR && defined ZETA_ELLIPTIC
115 npts=load_i(nval, rval, ngrids, nbico)
118 npts=load_r(nval, rval, ngrids, lnm_depth)
120 lnm_depth(ng)=abs(lnm_depth(ng))
123 npts=load_i(nval, rval, 1, ivalue)
125# if defined WEAK_CONSTRAINT && \
126 (defined array_modes || defined clipping)
128 npts=load_i(nval, rval, 1, ivalue)
132 npts=load_r(nval, rval, 1, rvalue)
135 npts=load_r(nval, rval, 1, rvalue)
138 npts=load_l(nval, cval, 1, lvalue)
141 npts=load_l(nval, cval, 1, lvalue)
144 npts=load_l(nval, cval, 1, lvalue)
146# if defined WEAK_CONSTRAINT
147 IF ( lhessianev.and.lprecond )
THEN
152 npts=load_l(nval, cval, 1, lvalue)
155 npts=load_i(nval, rval, 1, ivalue)
158 npts=load_i(nval, rval, 1, ivalue)
161 npts=load_i(nval, rval, 1, ivalue)
163# if defined SPLIT_4DVAR
165 npts=load_i(nval, rval, 1, ivalue)
168 DO i=1,len(phase4dvar)
169 phase4dvar(i:i)=blank
171 phase4dvar=trim(adjustl(cval(nval)))
174 npts=load_i(nval, rval, 1, ivalue)
176 IF (nextraobs.gt.0)
THEN
177 IF (.not.
allocated(extraindex))
THEN
178 allocate ( extraindex(nextraobs) )
180 IF (.not.
allocated(extraname))
THEN
181 allocate ( extraname(nextraobs) )
185 IF (nextraobs.gt.0)
THEN
186 npts=load_i(nval, rval, nextraobs, extraindex)
189 IF (nextraobs.gt.0)
THEN
190 extraname(nval)=trim(cval(nval))
193 npts=load_r(nval, rval, ngrids, tl_m2diff)
195 npts=load_r(nval, rval, ngrids, tl_m3diff)
197 npts=load_r(nval, rval, mt, ngrids, rtracer)
200 tl_tdiff(itrc,ng)=rtracer(itrc,ng)
204 npts=load_r(nval, rval, ngrids, timeiau)
206 npts=load_l(nval, cval, 4, ngrids, ldefnrm)
208 npts=load_l(nval, cval, 4, ngrids, lwrtnrm)
209 CASE (
'CnormM(isFsur)')
210 IF (isfsur.eq.0)
THEN
211 IF (master)
WRITE (out,210)
'isFsur'
215 npts=load_l(nval, cval, 1, lvalue)
216 cnorm(2,isfsur)=lvalue(1)
217 CASE (
'CnormM(isUbar)')
218 IF (isubar.eq.0)
THEN
219 IF (master)
WRITE (out,210)
'isUbar'
223 npts=load_l(nval, cval, 1, lvalue)
224 cnorm(2,isubar)=lvalue(1)
225 CASE (
'CnormM(isVbar)')
226 IF (isvbar.eq.0)
THEN
227 IF (master)
WRITE (out,210)
'isVbar'
231 npts=load_l(nval, cval, 1, lvalue)
232 cnorm(2,isvbar)=lvalue(1)
234 CASE (
'CnormM(isUvel)')
235 IF (isuvel.eq.0)
THEN
236 IF (master)
WRITE (out,210)
'isUvel'
240 npts=load_l(nval, cval, 1, lvalue)
241 cnorm(2,isuvel)=lvalue(1)
242 CASE (
'CnormM(isVvel)')
243 IF (isvvel.eq.0)
THEN
244 IF (master)
WRITE (out,210)
'isVvel'
248 npts=load_l(nval, cval, 1, lvalue)
249 cnorm(2,isvvel)=lvalue(1)
250 CASE (
'CnormM(isTvar)')
251 IF (maxval(istvar).eq.0)
THEN
252 IF (master)
WRITE (out,210)
'isTvar'
256 npts=load_l(nval, cval, mt, ltracer)
259 cnorm(2,i)=ltracer(itrc)
262 CASE (
'CnormI(isFsur)')
263 npts=load_l(nval, cval, 1, lvalue)
264 cnorm(1,isfsur)=lvalue(1)
265 CASE (
'CnormI(isUbar)')
266 npts=load_l(nval, cval, 1, lvalue)
267 cnorm(1,isubar)=lvalue(1)
268 CASE (
'CnormI(isVbar)')
269 npts=load_l(nval, cval, 1, lvalue)
270 cnorm(1,isvbar)=lvalue(1)
272 CASE (
'CnormI(isUvel)')
273 npts=load_l(nval, cval, 1, lvalue)
274 cnorm(1,isuvel)=lvalue(1)
275 CASE (
'CnormI(isVvel)')
276 npts=load_l(nval, cval, 1, lvalue)
277 cnorm(1,isvvel)=lvalue(1)
278 CASE (
'CnormI(isTvar)')
279 npts=load_l(nval, cval, mt, ltracer)
282 cnorm(1,i)=ltracer(itrc)
285# ifdef ADJUST_BOUNDARY
286 CASE (
'CnormB(isFsur)')
287 npts=load_l(nval, cval, 4, lvalue)
288 cnormb(isfsur,1:4)=lvalue(1:4)
289 CASE (
'CnormB(isUbar)')
290 npts=load_l(nval, cval, 4, lvalue)
291 cnormb(isubar,1:4)=lvalue(1:4)
292 CASE (
'CnormB(isVbar)')
293 npts=load_l(nval, cval, 4, lvalue)
294 cnormb(isvbar,1:4)=lvalue(1:4)
296 CASE (
'CnormB(isUvel)')
297 npts=load_l(nval, cval, 4, lvalue)
298 cnormb(isuvel,1:4)=lvalue(1:4)
299 CASE (
'CnormB(isVvel)')
300 npts=load_l(nval, cval, 4, lvalue)
301 cnormb(isvvel,1:4)=lvalue(1:4)
302 CASE (
'CnormB(isTvar)')
303 npts=load_l(nval, cval, mt, 4, lboundary)
307 cnormb(i,ib)=lboundary(itrc,ib)
312# ifdef ADJUST_WSTRESS
313 CASE (
'CnormF(isUstr)')
314 IF (isustr.eq.0)
THEN
315 IF (master)
WRITE (out,210)
'isUstr'
319 npts=load_l(nval, cval, 1, lvalue)
320 cnorm(1,isustr)=lvalue(1)
321 CASE (
'CnormF(isVstr)')
322 IF (isvstr.eq.0)
THEN
323 IF (master)
WRITE (out,210)
'isVstr'
327 npts=load_l(nval, cval, 1, lvalue)
328 cnorm(1,isvstr)=lvalue(1)
330# if defined ADJUST_STFLUX && defined SOLVE3D
331 CASE (
'CnormF(isTsur)')
332 IF (maxval(istsur).eq.0)
THEN
333 IF (master)
WRITE (out,210)
'isTsur'
337 npts=load_l(nval, cval, mt, ltracer)
340 cnorm(1,i)=ltracer(itrc)
344 CASE (
'balance(isSalt)')
345 npts=load_l(nval, cval, 1, lvalue)
346 balance(istvar(isalt))=lvalue(1)
348 CASE (
'balance(isFsur)')
349 npts=load_l(nval, cval, 1, lvalue)
350 balance(isfsur)=lvalue(1)
351 CASE (
'balance(isVbar)')
352 npts=load_l(nval, cval, 1, lvalue)
353 balance(isvbar)=lvalue(1)
354 CASE (
'balance(isVvel)')
355 npts=load_l(nval, cval, 1, lvalue)
356 balance(isvvel)=lvalue(1)
358 npts=load_i(nval, rval, ngrids, nmethod)
360 npts=load_i(nval, rval, ngrids, rscheme)
362 npts=load_i(nval, rval, 1, ivalue)
365 npts=load_r(nval, rval, 4, hgamma)
368 npts=load_r(nval, rval, 4, vgamma)
370 CASE (
'HdecayM(isFsur)')
371 npts=load_r(nval, rval, ngrids, hdecay(2,isfsur,:))
372 CASE (
'HdecayM(isUbar)')
373 npts=load_r(nval, rval, ngrids, hdecay(2,isubar,:))
374 CASE (
'HdecayM(isVbar)')
375 npts=load_r(nval, rval, ngrids, hdecay(2,isvbar,:))
377 CASE (
'HdecayM(isUvel)')
378 npts=load_r(nval, rval, ngrids, hdecay(2,isuvel,:))
379 CASE (
'HdecayM(isVvel)')
380 npts=load_r(nval, rval, ngrids, hdecay(2,isvvel,:))
381 CASE (
'HdecayM(isTvar)')
382 npts=load_r(nval, rval, mt, ngrids, rtracer)
385 hdecay(2,istvar(itrc),ng)=rtracer(itrc,ng)
388 CASE (
'VdecayM(isUvel)')
389 npts=load_r(nval, rval, ngrids, vdecay(2,isuvel,:))
390 CASE (
'VdecayM(isVvel)')
391 npts=load_r(nval, rval, ngrids, vdecay(2,isvvel,:))
392 CASE (
'VdecayM(isTvar)')
393 npts=load_r(nval, rval, mt, ngrids, rtracer)
396 vdecay(2,istvar(itrc),ng)=rtracer(itrc,ng)
400 CASE (
'TdecayM(isFsur)')
401 npts=load_r(nval, rval, ngrids, tdecay(isfsur,:))
402 CASE (
'TdecayM(isUbar)')
403 npts=load_r(nval, rval, ngrids, tdecay(isubar,:))
404 CASE (
'TdecayM(isVbar)')
405 npts=load_r(nval, rval, ngrids, tdecay(isvbar,:))
407 CASE (
'TdecayM(isUvel)')
408 npts=load_r(nval, rval, ngrids, tdecay(isuvel,:))
409 CASE (
'TdecayM(isVvel)')
410 npts=load_r(nval, rval, ngrids, tdecay(isvvel,:))
411 CASE (
'TdecayM(isTvar)')
412 npts=load_r(nval, rval, mt, ngrids, rtracer)
415 tdecay(istvar(itrc),ng)=rtracer(itrc,ng)
419 CASE (
'HdecayI(isFsur)')
420 npts=load_r(nval, rval, ngrids, hdecay(1,isfsur,:))
421 CASE (
'HdecayI(isUbar)')
422 npts=load_r(nval, rval, ngrids, hdecay(1,isubar,:))
423 CASE (
'HdecayI(isVbar)')
424 npts=load_r(nval, rval, ngrids, hdecay(1,isvbar,:))
426 CASE (
'HdecayI(isUvel)')
427 npts=load_r(nval, rval, ngrids, hdecay(1,isuvel,:))
428 CASE (
'HdecayI(isVvel)')
429 npts=load_r(nval, rval, ngrids, hdecay(1,isvvel,:))
430 CASE (
'HdecayI(isTvar)')
431 npts=load_r(nval, rval, mt, ngrids, rtracer)
434 hdecay(1,istvar(itrc),ng)=rtracer(itrc,ng)
437 CASE (
'VdecayI(isUvel)')
438 npts=load_r(nval, rval, ngrids, vdecay(1,isuvel,:))
439 CASE (
'VdecayI(isVvel)')
440 npts=load_r(nval, rval, ngrids, vdecay(1,isvvel,:))
441 CASE (
'VdecayI(isTvar)')
442 npts=load_r(nval, rval, mt, ngrids, rtracer)
445 vdecay(1,istvar(itrc),ng)=rtracer(itrc,ng)
449# ifdef ADJUST_BOUNDARY
450 CASE (
'HdecayB(isFsur)')
451 npts=load_r(nval, rval, 4, ngrids, hdecayb(isfsur,:,:))
452 CASE (
'HdecayB(isUbar)')
453 npts=load_r(nval, rval, 4, ngrids, hdecayb(isubar,:,:))
454 CASE (
'HdecayB(isVbar)')
455 npts=load_r(nval, rval, 4, ngrids, hdecayb(isvbar,:,:))
457 CASE (
'HdecayB(isUvel)')
458 npts=load_r(nval, rval, 4, ngrids, hdecayb(isuvel,:,:))
459 CASE (
'HdecayB(isVvel)')
460 npts=load_r(nval, rval, 4, ngrids, hdecayb(isvvel,:,:))
461 CASE (
'HdecayB(isTvar)')
462 npts=load_r(nval, rval, 4, mt, ngrids, rboundary)
466 hdecayb(istvar(itrc),ib,ng)=rboundary(ib,itrc,ng)
470 CASE (
'VdecayB(isUvel)')
471 npts=load_r(nval, rval, 4, ngrids, vdecayb(isuvel,:,:))
472 CASE (
'VdecayB(isVvel)')
473 npts=load_r(nval, rval, 4, ngrids, vdecayb(isvvel,:,:))
474 CASE (
'VdecayB(isTvar)')
475 npts=load_r(nval, rval, 4, mt, ngrids, rboundary)
479 vdecayb(istvar(itrc),ib,ng)=rboundary(ib,itrc,ng)
485# ifdef ADJUST_WSTRESS
486 CASE (
'HdecayF(isUstr)')
487 npts=load_r(nval, rval, ngrids, hdecay(1,isustr,:))
488 CASE (
'HdecayF(isVstr)')
489 npts=load_r(nval, rval, ngrids, hdecay(1,isvstr,:))
491# if defined ADJUST_STFLUX && defined SOLVE3D
492 CASE (
'HdecayF(isTsur)')
493 npts=load_r(nval, rval, mt, ngrids, rtracer)
496 hdecay(1,istsur(itrc),ng)=rtracer(itrc,ng)
504 npts=load_r(nval, rval, ngrids, mld_uniform(ng))
506 CASE (
'Sigma_max(isFsur)')
507 npts=load_r(nval, rval, ngrids, sigma_max(isfsur,:))
509 CASE (
'Sigma_max(isUvel)')
510 npts=load_r(nval, rval, ngrids, sigma_max(isuvel,:))
511 CASE (
'Sigma_ml(isUvel)')
512 npts=load_r(nval, rval, ngrids, sigma_ml(isuvel,:))
513 CASE (
'Sigma_do(isUvel)')
514 npts=load_r(nval, rval, ngrids, sigma_do(isuvel,:))
515 CASE (
'Sigma_dz(isUvel)')
516 npts=load_r(nval, rval, ngrids, sigma_dz(isuvel,:))
517 CASE (
'Sigma_max(isVvel)')
518 npts=load_r(nval, rval, ngrids, sigma_max(isvvel,:))
519 CASE (
'Sigma_ml(isVvel)')
520 npts=load_r(nval, rval, ngrids, sigma_ml(isvvel,:))
521 CASE (
'Sigma_do(isVvel)')
522 npts=load_r(nval, rval, ngrids, sigma_do(isvvel,:))
523 CASE (
'Sigma_dz(isVvel)')
524 npts=load_r(nval, rval, ngrids, sigma_dz(isvvel,:))
525 CASE (
'Sigma_max(isTvar)')
526 npts=load_r(nval, rval, mt, ngrids, rtracer)
529 sigma_max(istvar(itrc),ng)=rtracer(itrc,ng)
532 CASE (
'Sigma_ml(isTvar)')
533 npts=load_r(nval, rval, mt, ngrids, rtracer)
536 sigma_ml(istvar(itrc),ng)=rtracer(itrc,ng)
539 CASE (
'Sigma_do(isTvar)')
540 npts=load_r(nval, rval, mt, ngrids, rtracer)
543 sigma_do(istvar(itrc),ng)=rtracer(itrc,ng)
546 CASE (
'Sigma_dz(isTvar)')
547 npts=load_r(nval, rval, mt, ngrids, rtracer)
550 sigma_dz(istvar(itrc),ng)=rtracer(itrc,ng)
557 npts=load_i(nval, rval, ngrids, bgqc_type)
558 CASE (
'S_bgqc(isFsur)')
559 npts=load_r(nval, rval, ngrids, s_bgqc(isfsur,:))
560 CASE (
'S_bgqc(isUbar)')
561 npts=load_r(nval, rval, ngrids, s_bgqc(isubar,:))
562 CASE (
'S_bgqc(isVbar)')
563 npts=load_r(nval, rval, ngrids, s_bgqc(isvbar,:))
564 CASE (
'S_bgqc(isUvel)')
565 npts=load_r(nval, rval, ngrids, s_bgqc(isuvel,:))
566 CASE (
'S_bgqc(isVvel)')
567 npts=load_r(nval, rval, ngrids, s_bgqc(isvvel,:))
568 CASE (
'S_bgqc(isTvar)')
569 npts=load_r(nval, rval, mt, ngrids, rtracer)
572 s_bgqc(istvar(itrc),ng)=rtracer(itrc,ng)
576 npts=load_i(nval, rval, ngrids, nprovenance)
577 IF (.not.
allocated(iprovenance))
THEN
578 allocate ( iprovenance(maxval(nprovenance),ngrids))
580 IF (.not.
allocated(p_bgqc))
THEN
581 allocate ( p_bgqc(maxval(nprovenance),ngrids))
584 mval=maxval(nprovenance)
585 npts=load_i(nval, rval, mval, ngrids, iprovenance)
587 mval=maxval(nprovenance)
588 npts=load_r(nval, rval, mval, ngrids, p_bgqc)
590# if defined ADJUST_STFLUX && defined SOLVE3D
592 npts=load_l(nval, cval, mt, ngrids, ltsur)
595 lstflux(itrc,ng)=ltsur(itrc,ng)
599# ifdef ADJUST_BOUNDARY
600 CASE (
'Lobc(isFsur)')
601 npts=load_l(nval, cval, 4, ngrids, lbry)
604 lobc(ib,isfsur,ng)=lbry(ib,ng)
607 CASE (
'Lobc(isUbar)')
608 npts=load_l(nval, cval, 4, ngrids, lbry)
611 lobc(ib,isubar,ng)=lbry(ib,ng)
614 CASE (
'Lobc(isVbar)')
615 npts=load_l(nval, cval, 4, ngrids, lbry)
618 lobc(ib,isvbar,ng)=lbry(ib,ng)
622 CASE (
'Lobc(isUvel)')
623 npts=load_l(nval, cval, 4, ngrids, lbry)
626 lobc(ib,isuvel,ng)=lbry(ib,ng)
629 CASE (
'Lobc(isVvel)')
630 npts=load_l(nval, cval, 4, ngrids, lbry)
633 lobc(ib,isvvel,ng)=lbry(ib,ng)
636 CASE (
'Lobc(isTvar)')
637 npts=load_l(nval, cval, 4, mt, ngrids, lbry_trc)
642 lobc(ib,i,ng)=lbry_trc(ib,itrc,ng)
649 label=
'STD - initial conditions standard deviation'
650 npts=load_s1d(nval, cval, cdim, line, label, igrid, &
651 & ngrids, nfiles, 5, 1, inp_lib, std)
653 label=
'STD - model error standard deviation'
654 npts=load_s1d(nval, cval, cdim, line, label, igrid, &
655 & ngrids, nfiles, 5, 2, inp_lib, std)
657 label=
'STD - boundary conditions standard deviation'
658 npts=load_s1d(nval, cval, cdim, line, label, igrid, &
659 & ngrids, nfiles, 5, 3, inp_lib, std)
661 label=
'STD - surface forcing standard deviation'
662 npts=load_s1d(nval, cval, cdim, line, label, igrid, &
663 & ngrids, nfiles, 5, 4, inp_lib, std)
666 label=
'STD - standard deviation computed from background'
667 npts=load_s1d(nval, cval, cdim, line, label, igrid, &
668 & ngrids, nfiles, 5, 5, inp_lib, std)
672 label=
'NRM - initial conditions normalization'
673 npts=load_s1d(nval, cval, cdim, line, label, igrid, &
674 & ngrids, nfiles, 4, 1, inp_lib, nrm)
676 label=
'NRM - model error normalization'
677 npts=load_s1d(nval, cval, cdim, line, label, igrid, &
678 & ngrids, nfiles, 4, 2, inp_lib, nrm)
680 label=
'NRM - boundary conditions normalization'
681 npts=load_s1d(nval, cval, cdim, line, label, igrid, &
682 & ngrids, nfiles, 4, 3, inp_lib, nrm)
684 label=
'NRM - surface forcing normalization'
685 npts=load_s1d(nval, cval, cdim, line, label, igrid, &
686 & ngrids, nfiles, 4, 4, inp_lib, nrm)
688 label=
'OBS - data assimilation observations'
689 npts=load_s1d(nval, cval, cdim, line, label, igrid, &
690 & ngrids, nfiles, inp_lib, obs)
692 label=
'HSS - Hessian eigenvectors'
693 npts=load_s1d(nval, cval, cdim, line, label, igrid, &
694 & ngrids, nfiles, out_lib, hss)
696 label=
'LCZ - Lanczos vectors'
697 npts=load_s1d(nval, cval, cdim, line, label, igrid, &
698 & ngrids, nfiles, out_lib, lcz)
700 label=
'LZE - Time-evolved Lanczos vectors'
701 npts=load_s1d(nval, cval, cdim, line, label, igrid, &
702 & ngrids, nfiles, out_lib, lze)
704 label=
'DAV - 4D-Var data assimilation variables'
705 npts=load_s1d(nval, cval, cdim, line, label, igrid, &
706 & ngrids, nfiles, out_lib, dav)
708 label=
'ERR - 4D-Var posterior error covariance'
709 npts=load_s1d(nval, cval, cdim, line, label, igrid, &
710 & ngrids, nfiles, out_lib, err)
713 label=
'SPT - TLM Arnoldi vectors'
714 npts=load_s1d(nval, cval, cdim, line, label, igrid, &
715 & ngrids, nfiles, out_lib, spt)
717 label=
'SPA - ADM Arnoldi vectors'
718 npts=load_s1d(nval, cval, cdim, line, label, igrid, &
719 & ngrids, nfiles, out_lib, spa)
721 label=
'SCT - TLM Arnoldi vectors'
722 npts=load_s1d(nval, cval, cdim, line, label, igrid, &
723 & ngrids, nfiles, out_lib, sct)
725 label=
'SCA - ADM Arnoldi vectors'
726 npts=load_s1d(nval, cval, cdim, line, label, igrid, &
727 & ngrids, nfiles, out_lib, sca)
729# if defined RBL4DVAR_FCT_SENSITIVITY && defined OBS_SPACE
731 label=
'OIFA - observation impacts forecast, analysis'
732 npts=load_s1d(nval, cval, cdim, line, label, igrid, &
733 & ngrids, nfiles, inp_lib, oifa)
735 label=
'OIFB - observation impacts forecast, background'
736 npts=load_s1d(nval, cval, cdim, line, label, igrid, &
737 & ngrids, nfiles, inp_lib, oifb)
742 10
IF (master)
WRITE (out,50) line
747# ifdef ADJUST_BOUNDARY
761 IF (.not.lobc(ib,isubar,ng).and.lobc(ib,isvbar,ng))
THEN
762 lobc(ib,isubar,ng)=.true.
764 IF (.not.lobc(ib,isvbar,ng).and.lobc(ib,isubar,ng))
THEN
765 lobc(ib,isvbar,ng)=.true.
768 IF (.not.lobc(ib,isuvel,ng).and.lobc(ib,isvvel,ng))
THEN
769 lobc(ib,isuvel,ng)=.true.
771 IF (.not.lobc(ib,isvvel,ng).and.lobc(ib,isuvel,ng))
THEN
772 lobc(ib,isvvel,ng)=.true.
774 IF (.not.lobc(ib,isfsur,ng).and.lobc(ib,isubar,ng))
THEN
775 lobc(ib,isfsur,ng)=.true.
777 IF (.not.lobc(ib,isuvel,ng).and.lobc(ib,isubar,ng))
THEN
778 lobc(ib,isuvel,ng)=.true.
779 lobc(ib,isvvel,ng)=.true.
785# if defined WEAK_CONSTRAINT && \
786 (defined array_modes || defined clipping)
795 IF ((nvct.lt.1).or.(nvct.gt.ninner))
THEN
797 WRITE (out,55)
'Illegal parameter for array modes, Nvct = ', &
798 & nvct, ninner,
'1 =< Nvct =< Ninner.'
804# ifdef BALANCE_OPERATOR
812 IF (.not.balance(istvar(isalt)).and.balance(isfsur))
THEN
813 balance(istvar(isalt))=.true.
815 IF (.not.balance(istvar(isalt)).and.balance(isvvel))
THEN
816 balance(istvar(isalt))=.true.
818 IF (balance(istvar(isalt)))
THEN
819 balance(istvar(itemp))=.true.
822 IF (balance(isvvel))
THEN
823 balance(isuvel)=.true.
825 IF (balance(isvbar))
THEN
826 balance(isvbar)=.false.
829 IF (balance(isvbar))
THEN
830 balance(isubar)=.true.
839 IF (master.and.lwrite)
THEN
841# if defined FOUR_DVAR || defined VERIFICATION
844# if defined FOUR_DVAR
845# ifdef WEAK_CONSTRAINT
846# ifdef RPM_RELAXATION
847 WRITE (out,120) tl_m2diff,
'tl_M2diff', &
848 &
'RPM 2D momentum diffusive relaxation coefficient.'
850 WRITE (out,130) tl_m3diff,
'tl_M3diff', &
851 &
'RPM 3D momentum diffusive relaxation coefficient.'
853 WRITE (out,130) tl_tdiff(itrc,ng),
'tl_Tdiff', &
854 &
'RPM tracer diffusive relaxation coefficient, ', &
855 & trim(vname(1,idtvar(itrc)))
860 WRITE (out,100) timeiau(ng),
'timeIAU', &
861 &
'Duration of the incremental analysis update (days).'
862# ifndef I4DVAR_ANA_SENSITIVITY
864 WRITE (out,100) graderr,
'GradErr', &
865 &
'Upper bound on relative error of the gradient.'
866 WRITE (out,70) lhessianev,
'LhessianEV', &
867 &
'Switch to compute Hessian eigenvectors.'
869 WRITE (out,100) hevecerr,
'HevecErr', &
870 &
'Accuracy required for eigenvectors.'
871# ifdef WEAK_CONSTRAINT
872 WRITE (out,70) lhotstart,
'LhotStart', &
873 &
'Switch for hot start of subsequent outer loops.'
875 WRITE (out,70) lprecond,
'Lprecond', &
876 &
'Switch for conjugate gradient preconditioning.'
877 WRITE (out,70) lritz,
'Lritz', &
878 &
'Switch for Ritz limited-memory preconditioning.'
879# ifdef WEAK_CONSTRAINT
880 IF (lprecond.and.(nritzev.gt.0))
THEN
881 WRITE (out,80) nritzev,
'NritzEV', &
882 &
'Number of preconditioning eigenpairs to use.'
886# ifdef BALANCE_OPERATOR
888 WRITE (out,80) nbico(ng),
'Nbico', &
889 &
'Number of iterations in SSH elliptic equation.'
891 WRITE (out,100) dtdz_min(ng),
'dTdz_min', &
892 &
'Minimum dTdz (C/m) used in balanced salinity.'
893 WRITE (out,100) ml_depth(ng),
'ml_depth', &
894 &
'Mixed-layer depth (m) used in balanced salinity.'
895 IF (balance(isfsur))
THEN
896 WRITE (out,100) lnm_depth(ng),
'LNM_depth', &
897 &
'Level of no motion (m) in balanced free-sruface.'
898 WRITE (out,80) lnm_flag,
'LNM_flag', &
899 &
'Level of no motion integration flag.'
901 WRITE (out,70) balance(isfsur),
'balance(isFsur)', &
902 'Switch to include free-surface in balance operator.'
905 WRITE (out,70) balance(istvar(isalt)),
'balance(isSalt)', &
906 'Switch to include salinity in balance operator.'
908 WRITE (out,70) balance(isvvel),
'balance(isVvel)', &
909 'Switch to include 3D momentum in balance operator.'
911 WRITE (out,70) balance(isvbar),
'balance(isVbar)', &
912 'Switch to include 2D momentum in balance operator.'
915# ifdef WEAK_CONSTRAINT
916# if defined ARRAY_MODES
917 WRITE (out,80) nvct,
'Nvct', &
918 &
'Representer array mode eigenvector to process.'
919# elif defined CLIPPING
920 WRITE (out,80) nvct,
'Nvct', &
921 &
'Representer cut-off eigenvector to process.'
924# if defined POSTERIOR_EOFS && defined WEAK_CONSTRAINT
925 WRITE (out,80) nposti,
'NpostI', &
926 &
'Number of Lanczos iterations in posterior analysis.'
928# if defined RBL4DVAR_ANA_SENSITIVITY || \
929 defined rbl4dvar_fct_sensitivity || \
930 defined r4dvar_ana_sensitivity
931 WRITE (out,80) nimpact,
'Nimpact', &
932 &
'Observations impact/sensitivity outer loop to use.'
933 IF (nimpact.gt.nouter)
THEN
935 WRITE (out,240)
'Nimpact', nimpact, &
936 &
'must be less or equal than Nouter'
942# if defined ARRAY_MODES
943 WRITE (out,80) nimpact,
'Nimpact', &
944 &
'Array mode outer loop.'
945 IF (nimpact.gt.nouter)
THEN
947 WRITE (out,240)
'Nimpact', nimpact, &
948 &
'must be less or equal than Nouter'
954# if defined SPLIT_4DVAR
955 WRITE (out,80) outerloop,
'OuterLoop', &
956 &
'Current outer loop counter.'
957 IF (outerloop.gt.nouter)
THEN
959 WRITE (out,240)
'OuterLoop', outerloop, &
960 &
'must be less or equal than Nouter'
965 WRITE (out,95) phase4dvar(1:10),
'Phase4DVAR', &
966 &
'Current 4D-Var phase (first 10 characters).'
969# ifndef I4DVAR_ANA_SENSITIVITY
970 WRITE (out,170) ldefnrm(1:4,ng),
'LdefNRM', &
971 &
'Switch to create a normalization NetCDF file.'
972 WRITE (out,170) lwrtnrm(1:4,ng),
'LwrtNRM', &
973 &
'Switch to write out normalization factors.'
974 IF (any(lwrtnrm(:,ng)))
THEN
975 IF (nmethod(ng).eq.0)
THEN
976 WRITE (out,80) nmethod(ng),
'Nmethod', &
977 &
'Correlation normalization method: Exact.'
978 ELSE IF (nmethod(ng).eq.1)
THEN
979 WRITE (out,80) nmethod(ng),
'Nmethod', &
980 &
'Correlation normalization method: Randomization.'
981 WRITE (out,80) rscheme(ng),
'Rscheme', &
982 &
'Random number generation scheme'
983 WRITE (out,80) nrandom,
'Nrandom', &
984 &
'Number of iterations for randomization.'
987# if defined RBL4DVAR || defined R4DVAR || \
988 defined sensitivity_4dvar || defined sp4dvar || \
989 defined tl_rbl4dvar || defined tl_r4dvar
990 IF (any(lwrtnrm(:,ng)))
THEN
991 WRITE (out,70) cnorm(2,isfsur),
'CnormM(isFsur)', &
992 &
'Compute model 2D RHO-normalization factors.'
993 WRITE (out,70) cnorm(2,isubar),
'CnormM(isUbar)', &
994 &
'Compute model 2D U-normalization factors.'
995 WRITE (out,70) cnorm(2,isvbar),
'CnormM(isVbar)', &
996 &
'Compute model 2D V-normalization factors.'
998 WRITE (out,70) cnorm(2,isuvel),
'CnormM(isUvel)', &
999 &
'Compute model 3D U-normalization factors.'
1000 WRITE (out,70) cnorm(2,isvvel),
'CnormM(isVvel)', &
1001 &
'Compute model 3D V-normalization factors.'
1003 WRITE (out,110) cnorm(2,istvar(itrc)),
'CnormM(isTvar)', &
1004 &
'Compute model normalization factors for tracer ', &
1005 & itrc, trim(vname(1,idtvar(itrc)))
1010 IF (any(lwrtnrm(:,ng)))
THEN
1011 WRITE (out,70) cnorm(1,isfsur),
'CnormI(isFsur)', &
1012 &
'Compute initial 2D RHO-normalization factors.'
1013 WRITE (out,70) cnorm(1,isubar),
'CnormI(isUbar)', &
1014 &
'Compute initial 2D U-normalization factors.'
1015 WRITE (out,70) cnorm(1,isvbar),
'CnormI(isVbar)', &
1016 &
'Compute initial 2D V-normalization factors.'
1018 WRITE (out,70) cnorm(1,isuvel),
'CnormI(isUvel)', &
1019 &
'Compute initial 3D U-normalization factors.'
1020 WRITE (out,70) cnorm(1,isvvel),
'CnormI(isVvel)', &
1021 &
'Compute initial 3D V-normalization factors.'
1023 WRITE (out,110) cnorm(1,istvar(itrc)),
'CnormI(isTvar)', &
1024 &
'Compute initial normalization factors for tracer ', &
1025 & itrc, trim(vname(1,idtvar(itrc)))
1029# ifdef ADJUST_BOUNDARY
1030 IF (any(lwrtnrm(:,ng)))
THEN
1031 WRITE (out,170) cnormb(isfsur,1:4),
'CnormB(isFsur)', &
1032 &
'Compute boundary 2D RHO-normalization factors.'
1033 WRITE (out,170) cnormb(isubar,1:4),
'CnormB(isUbar)', &
1034 &
'Compute boundary 2D U-normalization factors.'
1035 WRITE (out,170) cnormb(isvbar,1:4),
'CnormB(isVbar)', &
1036 &
'Compute initial 2D V-normalization factors.'
1038 WRITE (out,170) cnormb(isuvel,1:4),
'CnormB(isUvel)', &
1039 &
'Compute initial 3D U-normalization factors.'
1040 WRITE (out,170) cnormb(isvvel,1:4),
'CnormI(isVvel)', &
1041 &
'Compute initial 3D V-normalization factors.'
1043 WRITE (out,180) cnormb(istvar(itrc),1:4),
'CnormI(isTvar)',&
1044 &
'Compute initial normalization factors for tracer ', &
1045 & itrc, trim(vname(1,idtvar(itrc)))
1050# ifdef ADJUST_WSTRESS
1051 IF (any(lwrtnrm(:,ng)))
THEN
1052 WRITE (out,70) cnorm(1,isustr),
'CnormF(isUstr)', &
1053 &
'Compute normalization factors at surface U-stress.'
1054 WRITE (out,70) cnorm(1,isvstr),
'CnormF(isVstr)', &
1055 &
'Compute normalization factors at surface V-stress.'
1058# if defined ADJUST_STFLUX && defined SOLVE3D
1059 IF (any(lwrtnrm(:,ng)))
THEN
1061 WRITE (out,110) cnorm(1,istsur(itrc)),
'CnormF(isTsur)', &
1062 &
'Compute normalization factors for flux of tracer ', &
1063 & itrc, trim(vname(1,idtvar(itrc)))
1068 WRITE (out,100) hgamma(1),
'Hgamma', &
1069 &
'Horizontal diffusion factor, initial conditions.'
1070# ifdef WEAK_CONSTRAINT
1071 WRITE (out,100) hgamma(2),
'HgammaM', &
1072 &
'Horizontal diffusion factor, model error.'
1074# ifdef ADJUST_BOUNDARY
1075 WRITE (out,100) hgamma(3),
'HgammaB', &
1076 &
'Horizontal diffusion factor, boundary conditions.'
1078# ifdef ADJUST_STFLUX
1079 WRITE (out,100) hgamma(4),
'HgammaF', &
1080 &
'Horizontal diffusion factor, surface forcing.'
1083 WRITE (out,100) vgamma(1),
'Vgamma', &
1084 &
'Vertical diffusion factor, initial conditions.'
1085# ifdef WEAK_CONSTRAINT
1086 WRITE (out,100) vgamma(2),
'VgammaM', &
1087 &
'Vertical diffusion factor, model error.'
1089# ifdef ADJUST_BOUNDARY
1090 WRITE (out,100) vgamma(3),
'VgammaB', &
1091 &
'Vertical diffusion factor, boundary conditions.'
1094# if defined RBL4DVAR || defined R4DVAR || \
1095 defined sensitivity_4dvar || defined sp4dvar || \
1096 defined tl_rbl4dvar || defined tl_r4dvar
1097 IF (nadj(ng).lt.ntimes(ng))
THEN
1098 WRITE (out,120) hdecay(2,isfsur,ng),
'HdecayM(isFsur)', &
1099 &
'Model decorrelation H-scale (m), free-surface.'
1100 WRITE (out,120) hdecay(2,isubar,ng),
'HdecayM(isUbar)', &
1101 &
'Model decorrelation H-scale (m), 2D U-momentum.'
1102 WRITE (out,120) hdecay(2,isvbar,ng),
'HdecayM(isVbar)', &
1103 &
'Model decorrelation H-scale (m), 2D V-momentum.'
1105 WRITE (out,120) hdecay(2,isuvel,ng),
'HdecayM(isUvel)', &
1106 &
'Model decorrelation H-scale (m), 3D U-momentum.'
1107 WRITE (out,120) hdecay(2,isvvel,ng),
'HdecayM(isVvel)', &
1108 &
'Model decorrelation H-scale (m), 3D V-momentum.'
1110 WRITE (out,130) hdecay(2,istvar(itrc),ng), &
1111 &
'HdecayM(idTvar)', &
1112 &
'Model decorrelation H-scale (m), ', &
1113 & trim(vname(1,idtvar(itrc)))
1115 WRITE (out,120) vdecay(2,isuvel,ng),
'VdecayM(isUvel)', &
1116 &
'Model decorrelation V-scale (m), 3D U-momentum.'
1117 WRITE (out,120) vdecay(2,isvvel,ng),
'VdecayM(isVvel)', &
1118 &
'Model decorrelation V-scale (m), 3D V-momentum.'
1120 WRITE (out,130) vdecay(2,istvar(itrc),ng), &
1121 &
'VdecayM(idTvar)', &
1122 &
'Model decorrelation V-scale (m), ', &
1123 & trim(vname(1,idtvar(itrc)))
1128# if defined WEAK_CONSTRAINT && defined TIME_CONV
1129 WRITE (out,80) nrectc(ng),
'NrecTC', &
1130 &
'Number of state records for time convolution.'
1131 WRITE (out,120) tdecay(isfsur,ng),
'TdecayM(isFsur)', &
1132 &
'Model decorrelation T-scale (day), free-surface.'
1133 WRITE (out,120) tdecay(isubar,ng),
'TdecayM(isUbar)', &
1134 &
'Model decorrelation T-scale (day), 2D U-momentum.'
1135 WRITE (out,120) tdecay(isvbar,ng),
'TdecayM(isVbar)', &
1136 &
'Model decorrelation T-scale (day), 2D V-momentum.'
1138 WRITE (out,120) tdecay(isuvel,ng),
'TdecayM(isUvel)', &
1139 &
'Model decorrelation T-scale (day), 3D U-momentum.'
1140 WRITE (out,120) tdecay(isvvel,ng),
'TdecayM(isVvel)', &
1141 &
'Model decorrelation T-scale (day), 3D V-momentum.'
1143 WRITE (out,130) tdecay(istvar(itrc),ng), &
1144 &
'TdecayM(idTvar)', &
1145 &
'Model decorrelation T-scale (day), ', &
1146 & trim(vname(1,idtvar(itrc)))
1150 WRITE (out,120) hdecay(1,isfsur,ng),
'HdecayI(isFsur)', &
1151 &
'Initial decorrelation H-scale (m), free-surface.'
1152 WRITE (out,120) hdecay(1,isubar,ng),
'HdecayI(isUbar)', &
1153 &
'Initial decorrelation H-scale (m), 2D U-momentum.'
1154 WRITE (out,120) hdecay(1,isvbar,ng),
'HdecayI(isVbar)', &
1155 &
'Initial decorrelation H-scale (m), 2D V-momentum.'
1157 WRITE (out,120) hdecay(1,isuvel,ng),
'HdecayI(isUvel)', &
1158 &
'Initial decorrelation H-scale (m), 3D U-momentum.'
1159 WRITE (out,120) hdecay(1,isvvel,ng),
'HdecayI(isVvel)', &
1160 &
'Initial decorrelation H-scale (m), 3D V-momentum.'
1162 WRITE (out,130) hdecay(1,istvar(itrc),ng), &
1163 &
'HdecayI(idTvar)', &
1164 &
'Initial decorrelation H-scale (m), ', &
1165 & trim(vname(1,idtvar(itrc)))
1167 WRITE (out,120) vdecay(1,isuvel,ng),
'VdecayI(isUvel)', &
1168 &
'Initial decorrelation V-scale (m), 3D U-momentum.'
1169 WRITE (out,120) vdecay(1,isvvel,ng),
'VdecayI(isVvel)', &
1170 &
'Initial decorrelation V-scale (m), 3D V-momentum.'
1172 WRITE (out,130) vdecay(1,istvar(itrc),ng), &
1173 &
'VdecayI(idTvar)', &
1174 &
'Initial decorrelation V-scale (m), ', &
1175 & trim(vname(1,idtvar(itrc)))
1178# ifdef ADJUST_BOUNDARY
1180 IF (ib.eq.iwest)
THEN
1182 ELSE IF (ib.eq.isouth)
THEN
1184 ELSE IF (ib.eq.ieast)
THEN
1186 ELSE IF (ib.eq.inorth)
THEN
1189 IF (lobc(ib,isfsur,ng))
THEN
1190 WRITE (out,120) hdecayb(isfsur,ib,ng),
'HdecayB(isFsur)', &
1191 & text//
' decorrelation H-scale (m), free-surface.'
1193 IF (lobc(ib,isubar,ng))
THEN
1194 WRITE (out,120) hdecayb(isubar,ib,ng),
'HdecayB(isUbar)', &
1195 & text//
' decorrelation H-scale (m), 2D U-momentum.'
1197 IF (lobc(ib,isvbar,ng))
THEN
1198 WRITE (out,120) hdecayb(isvbar,ib,ng),
'HdecayB(isVbar)', &
1199 & text//
' decorrelation H-scale (m), 2D V-momentum.'
1202 IF (lobc(ib,isuvel,ng))
THEN
1203 WRITE (out,120) hdecayb(isuvel,ib,ng),
'HdecayB(isUvel)', &
1204 & text//
' decorrelation H-scale (m), 3D U-momentum.'
1206 IF (lobc(ib,isvvel,ng))
THEN
1207 WRITE (out,120) hdecayb(isvvel,ib,ng),
'HdecayB(isVvel)', &
1208 & text//
' decorrelation H-scale (m), 3D V-momentum.'
1211 IF (lobc(ib,istvar(i),ng))
THEN
1212 WRITE(out,130) hdecayb(istvar(i),ib,ng), &
1213 &
'HdecayB(idTvar)', &
1214 & text//
' decorrelation H-scale (m), ', &
1215 & trim(vname(1,idtvar(i)))
1218 IF (lobc(ib,isuvel,ng))
THEN
1219 WRITE (out,120) vdecayb(isuvel,ib,ng),
'VdecayB(isUvel)', &
1220 & text//
' decorrelation V-scale (m), 3D U-momentum.'
1222 IF (lobc(ib,isvvel,ng))
THEN
1223 WRITE (out,120) vdecayb(isvvel,ib,ng),
'VdecayB(isVvel)', &
1224 & text//
' decorrelation V-scale (m), 3D V-momentum.'
1227 IF (lobc(ib,istvar(i),ng))
THEN
1228 WRITE(out,130) vdecayb(istvar(i),ib,ng), &
1229 &
'VdecayB(idTvar)', &
1230 & text//
' decorrelation V-scale (m), ', &
1231 & trim(vname(1,idtvar(i)))
1237# ifdef ADJUST_WSTRESS
1238 WRITE (out,120) hdecay(1,isustr,ng),
'HdecayF(isUstr)', &
1239 &
'Forcing decorrelation H-scale (m), U-stress.'
1240 WRITE (out,120) hdecay(1,isvstr,ng),
'HdecayF(isVstr)', &
1241 &
'Forcing decorrelation H-scale (m), V-stress.'
1243# if defined ADJUST_STFLUX && defined SOLVE3D
1245 WRITE (out,130) hdecay(1,istsur(itrc),ng), &
1246 &
'HdecayF(idTsur)', &
1247 &
'Forcing decorrelation H-scale (m), ', &
1248 & trim(vname(1,idtvar(itrc)))
1253 WRITE (out,120) mld_uniform(ng),
'mld_uniform', &
1254 &
'Uniform mixed layer depth value (m).'
1256 WRITE (out,190) sigma_max(isfsur,ng),
'Sigma_max(isFsur)', &
1257 &
'Maximum STD value (m)',
', free-surface.'
1259 WRITE (out,190) sigma_max(isuvel,ng),
'Sigma_max(isUvel)', &
1260 &
'Maximum STD value (m/s)',
', 3D U-momentum.'
1261 WRITE (out,190) sigma_ml(isuvel,ng),
'Sigma_ml(isUvel)', &
1262 &
'Minimum STD at mixed layer (m/s)',
', 3D U-momentum.'
1263 WRITE (out,190) sigma_do(isuvel,ng),
'Sigma_do(isUvel)', &
1264 &
'Minimum STD in deep ocean (m/s)',
', 3D U-momentum.'
1265 WRITE (out,130) sigma_dz(isuvel,ng),
'Sigma_dz(isUvel)', &
1266 &
'STD vertical displacement (m)',
', 3D U-momentum.'
1267 WRITE (out,190) sigma_max(isuvel,ng),
'Sigma_max(isVvel)', &
1268 &
'Maximum STD value (m/s)',
', 3D V-momentum.'
1269 WRITE (out,190) sigma_ml(isvvel,ng),
'Sigma_ml(isVvel)', &
1270 &
'Minimum STD at mixed layer (m/s)',
', 3D V-momentum.'
1271 WRITE (out,190) sigma_do(isvvel,ng),
'Sigma_do(isVvel)', &
1272 &
'Minimum STD in deep ocean (m/s)',
', 3D V-momentum.'
1273 WRITE (out,130) sigma_dz(isvvel,ng),
'Sigma_dz(isVvel)', &
1274 &
'STD vertical displacement (m)',
', 3D V-momentum.'
1276 WRITE (out,190) sigma_max(istvar(itrc),ng), &
1277 &
'Sigma_max(idTvar)', &
1278 &
'Maximum STD Value, ', &
1279 & trim(vname(1,idtvar(itrc)))
1280 WRITE (out,190) sigma_ml(istvar(itrc),ng), &
1281 &
'Sigma_ml(idTvar)', &
1282 &
'Minimum STD at mixed layer, ', &
1283 & trim(vname(1,idtvar(itrc)))
1284 WRITE (out,190) sigma_do(istvar(itrc),ng), &
1285 &
'Sigma_do(idTvar)', &
1286 &
'Minimum STD in deep ocean, ', &
1287 & trim(vname(1,idtvar(itrc)))
1288 WRITE (out,130) sigma_dz(istvar(itrc),ng), &
1289 &
'Sigma_dz(idTvar)', &
1290 &
'STD vertical displacement (m), ', &
1291 & trim(vname(1,idtvar(itrc)))
1296 IF (bgqc_type(ng).eq.1)
THEN
1297 WRITE (out,80) bgqc_type(ng),
'bgqc_type', &
1298 &
'Quality control in terms of state variable index'
1299 ELSE IF (bgqc_type(ng).eq.2)
THEN
1300 WRITE (out,80) bgqc_type(ng),
'bgqc_type', &
1301 &
'Quality control in terms of observation provenance'
1303 IF (bgqc_type(ng).eq.1)
THEN
1304 WRITE (out,100) s_bgqc(isfsur,ng),
'S_bgqc(isFsur)', &
1305 &
'Quality control reject squared threshold, free-surface.'
1307 WRITE (out,100) s_bgqc(isubar,ng),
'S_bgqc(isUbar)', &
1308 &
'Quality control reject squared threshold, 2D U-momentum.'
1309 WRITE (out,100) s_bgqc(isvbar,ng),
'S_bgqc(isVbar)', &
1310 &
'Quality control reject squared threshold, 2D V-momentum.'
1312 WRITE (out,100) s_bgqc(isuvel,ng),
'S_bgqc(isUvel)', &
1313 &
'Quality control reject squared threshold, 3D U-momentum.'
1314 WRITE (out,100) s_bgqc(isvvel,ng),
'S_bgqc(isVvel)', &
1315 &
'Quality control reject squared threshold, 3D V-momentum.'
1317 WRITE (out,190) s_bgqc(istvar(itrc),ng), &
1318 &
'S_bgqc(idTvar)', &
1319 &
'Quality control reject squared threshold, ', &
1320 & trim(vname(1,idtvar(itrc)))
1323 ELSE IF (bgqc_type(ng).eq.2)
THEN
1324 WRITE (out,80) nprovenance(ng),
'Nprovenance', &
1325 &
'Number of provenances to Quality control.'
1326 DO i=1,nprovenance(ng)
1327 WRITE (out,200) p_bgqc(i,ng),
'P_bgqc', i, &
1328 &
'Quality control reject squared threshold for provenance', &
1333# if defined ADJUST_STFLUX && defined SOLVE3D
1335 WRITE (out,110) lstflux(itrc,ng),
'Lstflux(itrc)', &
1336 &
'Adjusting surface flux of tracer ', itrc, &
1337 & trim(vname(1,idtvar(itrc)))
1340# ifdef ADJUST_BOUNDARY
1341 WRITE (out,170) lobc(1:4,isfsur,ng),
'Lobc(isFsur)', &
1342 &
'Adjusting free-surface boundaries.'
1343 WRITE (out,170) lobc(1:4,isubar,ng),
'Lobc(isUbar)', &
1344 &
'Adjusting 2D U-momentum boundaries.'
1345 WRITE (out,170) lobc(1:4,isvbar,ng),
'Lobc(isVbar)', &
1346 &
'Adjusting 2D V-momentum boundaries.'
1348 WRITE (out,170) lobc(1:4,isuvel,ng),
'Lobc(isUvel)', &
1349 &
'Adjusting 3D U-momentum boundaries.'
1350 WRITE (out,170) lobc(1:4,isvvel,ng),
'Lobc(isVvel)', &
1351 &
'Adjusting 3D V-momentum boundaries.'
1353 WRITE (out,180) lobc(1:4,istvar(itrc),ng),
'Lobc(isTvar)', &
1354 &
'Adjusting boundaries for tracer ', itrc, &
1355 & trim(vname(1,idtvar(itrc)))
1361 IF (nextraobs.gt.0)
THEN
1362 WRITE (out,80) nextraobs,
'NextraObs', &
1363 &
'Number of extra-observations classes to process.'
1365 WRITE (out,85) extraindex(i),
'ExtraIndex', i, &
1366 &
'Extra-observation type index for: '// &
1367 & trim(extraname(i))
1377 IF (master.and.lwrite)
THEN
1380 WRITE (out,160)
' Verification Parameters File: ', &
1383 WRITE (out,160)
' Assimilation Parameters File: ', &
1390# if defined FOUR_DVAR || \
1391 (defined hessian_sv && defined bnorm)
1392# if defined I4DVAR || defined OBS_SENSITIVITY || \
1393 defined opt_observations || defined weak_constraint
1394# if defined RBL4DVAR || defined R4DVAR || \
1395 defined sensitivity_4dvar || defined sp4dvar || \
1396 defined tl_rbl4dvar || defined tl_r4dvar
1397 fname=std(2,ng)%name
1399 IF (.not.find_file(ng, out, fname,
'STDnameM'))
THEN
1400 IF (founderror(exit_flag, noerror, __line__, myfile))
RETURN
1402 IF (master.and.lwrite)
WRITE (out,160) &
1403 &
' Model STD File: ', trim(fname)
1408 fname=std(5,ng)%name
1409 IF (master.and.lwrite)
WRITE (out,160) &
1410 &
' Computed/Modeled IC STD File: ', trim(fname)
1412 fname=std(1,ng)%name
1413 IF (.not.find_file(ng, out, fname,
'STDnameI'))
THEN
1414 IF (founderror(exit_flag, noerror, __line__, myfile))
RETURN
1416 IF (master.and.lwrite)
WRITE (out,160) &
1417 &
' Initial Conditions STD File: ', trim(fname)
1420# ifdef ADJUST_BOUNDARY
1421 fname=std(3,ng)%name
1422 IF (.not.find_file(ng, out, fname,
'STDnameB'))
THEN
1423 IF (founderror(exit_flag, noerror, __line__, myfile))
RETURN
1425 IF (master.and.lwrite)
WRITE (out,160) &
1426 &
' Boundary Conditions STD File: ', trim(fname)
1429# if defined ADJUST_WSTRESS || defined ADJUST_STFLUX
1430 fname=std(4,ng)%name
1431 IF (.not.find_file(ng, out, fname,
'STDnameF'))
THEN
1432 IF (founderror(exit_flag, noerror, __line__, myfile))
RETURN
1434 IF (master.and.lwrite)
WRITE (out,160) &
1435 &
' Surface Forcing STD File: ', trim(fname)
1439# if defined RBL4DVAR || defined R4DVAR || \
1440 defined sensitivity_4dvar || defined sp4dvar || \
1441 defined tl_rbl4dvar || defined tl_r4dvar
1442 fname=nrm(2,ng)%name
1443 IF (master.and.lwrite)
WRITE (out,160) &
1444 &
' Model Norm File: ', trim(fname)
1445 IF (.not.ldefnrm(2,ng))
THEN
1446 IF (.not.find_file(ng, out, fname,
'NRMnameM'))
THEN
1447 IF (founderror(exit_flag, noerror, __line__, myfile))
RETURN
1450# elif defined CORRELATION
1451 fname=nrm(2,ng)%name
1452 IF (master.and.lwrite)
WRITE (out,160) &
1453 &
' Model Norm File: ', trim(fname)
1454 IF (.not.ldefnrm(2,ng).and.lwrtnrm(2,ng))
THEN
1455 IF (.not.find_file(ng, out, fname,
'NRMnameM'))
THEN
1456 IF (founderror(exit_flag, noerror, __line__, myfile))
RETURN
1460# if defined CORRELATION
1461 fname=nrm(1,ng)%name
1462 IF (master.and.lwrite)
WRITE (out,160) &
1463 &
' Initial Conditions Norm File: ', trim(fname)
1464 IF (.not.ldefnrm(1,ng).and.lwrtnrm(1,ng))
THEN
1465 IF (.not.find_file(ng, out, fname,
'NRMnameI'))
THEN
1466 IF (founderror(exit_flag, noerror, __line__, myfile))
RETURN
1470 fname=nrm(1,ng)%name
1471 IF (master.and.lwrite)
WRITE (out,160) &
1472 &
' Initial Conditions Norm File: ', trim(fname)
1473 IF (.not.ldefnrm(1,ng))
THEN
1474 IF (.not.find_file(ng, out, fname,
'NRMnameI'))
THEN
1475 IF (founderror(exit_flag, noerror, __line__, myfile))
RETURN
1479# ifdef ADJUST_BOUNDARY
1481 fname=nrm(3,ng)%name
1482 IF (master.and.lwrite)
WRITE (out,160) &
1483 &
' Boundary Conditions Norm File: ', trim(fname)
1484 IF (.not.ldefnrm(3,ng).and.lwrtnrm(3,ng))
THEN
1485 IF (.not.find_file(ng, out, fname,
'NRMnameB'))
THEN
1486 IF (founderror(exit_flag, noerror, __line__, myfile))
RETURN
1490 fname=nrm(3,ng)%name
1491 IF (master.and.lwrite)
WRITE (out,160) &
1492 &
' Boundary Conditions Norm File: ', trim(fname)
1493 IF (.not.ldefnrm(3,ng))
THEN
1494 IF (.not.find_file(ng, out, fname,
'NRMnameB'))
THEN
1495 IF (founderror(exit_flag, noerror, __line__, myfile))
RETURN
1500# if defined ADJUST_WSTRESS || defined ADJUST_STFLUX
1502 fname=nrm(4,ng)%name
1503 IF (master.and.lwrite)
WRITE (out,160) &
1504 &
' Surface Forcing Norm File: ', trim(fname)
1505 IF (.not.ldefnrm(4,ng).and.lwrtnrm(4,ng))
THEN
1506 IF (.not.find_file(ng, out, fname,
'NRMnameF'))
THEN
1507 IF (founderror(exit_flag, noerror, __line__, myfile))
RETURN
1511 fname=nrm(4,ng)%name
1512 IF (master.and.lwrite)
WRITE (out,160) &
1513 &
' Surface Forcing Norm File: ', trim(fname)
1514 IF (.not.ldefnrm(4,ng))
THEN
1515 IF (.not.find_file(ng, out, fname,
'NRMnameF'))
THEN
1516 IF (founderror(exit_flag, noerror, __line__, myfile))
RETURN
1521# if !(defined CORRELATION || defined OPT_OBSERVATIONS)
1523 IF (.not.find_file(ng, out, fname,
'OBSname'))
THEN
1524 IF (founderror(exit_flag, noerror, __line__, myfile))
RETURN
1526 IF (master.and.lwrite)
WRITE (out,160) &
1527 &
' Input observations File: ', trim(fname)
1530# if !defined CORRELATION
1531 IF (master.and.lwrite)
WRITE (out,160) &
1532 &
' Input/Output Lanczos File: ', trim(lcz(ng)%name)
1533# ifndef I4DVAR_ANA_SENSITIVITY
1534 IF (master.and.lwrite)
WRITE (out,160) &
1535 &
' Input/Output Hessian File: ', trim(hss(ng)%name)
1538 IF (master.and.lwrite)
WRITE (out,160) &
1539 ' Output evolved Lanczos File: ', trim(lze(ng)%name)
1543# if !defined CORRELATION
1546 IF (.not.find_file(ng, out, fname,
'OBSname'))
THEN
1547 IF (founderror(exit_flag, noerror, __line__, myfile))
RETURN
1549 IF (master.and.lwrite)
WRITE (out,160) &
1550 &
' Input observations File: ', trim(fname)
1552 IF (master.and.lwrite)
WRITE (out,160) &
1553 &
' Output verification File: ', trim(dav(ng)%name)
1556 IF (master.and.lwrite)
THEN
1557 WRITE (out,160)
' Input/Output TLM Arnoldi File: ', &
1558 & trim(spt(ng)%name)
1559 WRITE (out,160)
' Input/Output ADM Arnoldi File: ', &
1560 & trim(spa(ng)%name)
1561 WRITE (out,160)
' Input/Output TLM Scratch File: ', &
1562 & trim(sct(ng)%name)
1563 WRITE (out,160)
' Input/Output ADM Scratch File: ', &
1564 & trim(sca(ng)%name)
1567 IF (master.and.lwrite)
WRITE (out,160) &
1568 &
' Output 4D-Var File: ', trim(dav(ng)%name)
1571# if defined WEAK_CONSTRAINT && \
1572 (defined posterior_error_f || defined posterior_error_i)
1573 IF (master.and.lwrite)
WRITE (out,160) &
1574 ' Output Posterior Error File: ', trim(err(ng)%name)
1576# if defined RBL4DVAR_FCT_SENSITIVITY && defined OBS_SPACE
1578 IF (master.and.lwrite)
WRITE (out,160) &
1579 &
' Input Obs Impacts Analysis File: ', trim(fname)
1582 IF (master.and.lwrite)
WRITE (out,160) &
1583 &
'Input Obs Impacts Background File: ', trim(fname)
1587# if defined WEAK_CONSTRAINT && defined RPCG
1595 WRITE (out,230)
'Lprecond', lprecond, &
1596 &
'pre-conditioning does not work yet with ' // &
1597 & uppercase(
'rpcg') //
' algorithm.', &
1598 &
'Set Lprecond to F in ' // trim(aparnam)
1612 timeiau(ng)=timeiau(ng)*86400.0_dp
1614# if defined WEAK_CONSTRAINT && defined TIME_CONV
1616 tdecay(i,ng)=tdecay(i,ng)*86400.0_r8
1621 50
FORMAT (/,
' READ_AssPar - Error while processing line: ',/,a)
1622 55
FORMAT (/,
' READ_AssPar - ',a,i4,2x,i4,/,15x,a)
1624 60
FORMAT (/,/,
' Observation Parameters, Grid: ',i2.2, &
1625 & /,
' ================================',/)
1627 60
FORMAT (/,/,
' Assimilation Parameters, Grid: ',i2.2, &
1628 & /,
' =================================',/)
1630 70
FORMAT (10x,l1,2x,a,t32,a)
1631 80
FORMAT (1x,i10,2x,a,t32,a)
1632 85
FORMAT (1x,i10,2x,a,
'(',i2.2,
')',t32,a)
1633 90
FORMAT (1x,i10,2x,a,t32,a,/,t34,a)
1634 95
FORMAT (1x,a,2x,a,t32,a)
1635 100
FORMAT (1p,e11.4,2x,a,t32,a)
1636 110
FORMAT (10x,l1,2x,a,t32,a,i2.2,
':',1x,a)
1637 120
FORMAT (f11.3,2x,a,t32,a)
1638 130
FORMAT (f11.3,2x,a,t32,a,a,
'.')
1640 150
FORMAT (/,
' Input/Output Verification Files:',/)
1642 150
FORMAT (/,
' Input/Output Assimilation Files:',/)
1645 170
FORMAT (3x,4(1x,l1),2x,a,t32,a)
1646 180
FORMAT (3x,4(1x,l1),2x,a,t32,a,i2.2,
':',1x,a)
1647 190
FORMAT (1p,e11.4,2x,a,t32,a,a,
'.')
1648 200
FORMAT (1p,e11.4,2x,a,
'(',i2.2,
')',t32,a,
':',1x,i6)
1649 210
FORMAT (/,
' READ_ASSPAR - variable info not yet loaded, ', a)
1650 220
FORMAT (/,
' READ_ASSPAR - Grid ', i2.2, &
1651 &
', could not find input file: ',a)
1652 230
FORMAT (/,
' READ_ASSPAR - Illegal parameter, ', a,
' = ', 1x, l1, &
1654 240
FORMAT (/,
' READ_ASSPAR - Illegal parameter, ', a,
' = ', 1x, i2, &