gen_be_diags.f90
References to this file elsewhere.
1 program gen_be_diags
2
3 use da_control
4 use da_gen_be
5
6 implicit none
7
8 character*10 :: variable ! Variable name
9 character*8 :: uh_method ! Uh_method (power, scale)
10 integer :: n_smth_sl ! Number of smoothing for scale-length
11 character(len=filename_len) :: filename ! Input filename.
12 integer :: nk,nk_3d ! Dimensions read in.
13
14 namelist / gen_be_diags_nl / uh_method, n_smth_sl
15
16 integer :: ounit,iunit,namelist_unit
17
18 stderr = 0
19 stdout = 6
20
21 call da_get_unit(ounit)
22 call da_get_unit(iunit)
23 call da_get_unit(namelist_unit)
24
25 uh_method = 'scale'
26 n_smth_sl = 0
27
28 open(unit=namelist_unit, file='gen_be_diags_nl.nl', &
29 form='formatted', status='old', action='read')
30 read(namelist_unit, gen_be_diags_nl)
31 close(namelist_unit)
32
33 filename = 'gen_be.dat'
34 open (ounit, file = filename, form='unformatted')
35 !----------------------------------------------------------------------------
36 write(6,'(/a)')' [1] Gather regression coefficients.'
37 !----------------------------------------------------------------------------
38
39 call da_readwrite_be_stage2( ounit, nk )
40
41 !----------------------------------------------------------------------------
42 write(6,'(/a)')' [2] Gather vertical error eigenvectors, eigenvalues.'
43 !----------------------------------------------------------------------------
44
45 variable = 'psi'
46 call da_readwrite_be_stage3( ounit, nk, variable )
47
48 variable = 'chi_u'
49 call da_readwrite_be_stage3( ounit, nk, variable )
50
51 variable = 't_u'
52 call da_readwrite_be_stage3( ounit, nk, variable )
53
54 variable = 'rh'
55 call da_readwrite_be_stage3( ounit, nk, variable )
56
57 ! To keep the dimension nk for 3d fields:
58 nk_3d = nk
59
60 if (uh_method /= 'power') then
61 variable = 'ps_u'
62 call da_readwrite_be_stage3( ounit, 1, variable )
63 endif
64
65 !----------------------------------------------------------------------------
66 if (uh_method == 'power') then
67 write(6,'(/a)')' [3] Gather horizontal error power spectra.'
68 else if (uh_method == 'scale') then
69 write(6,'(/a)')' [3] Gather horizontal scale length.'
70 endif
71 !----------------------------------------------------------------------------
72
73 ! To assign the dimension nk for 3d fields:
74 nk = nk_3d
75
76 variable = 'psi'
77 call da_readwrite_be_stage4( ounit, nk, uh_method, n_smth_sl, variable )
78
79 variable = 'chi_u'
80 call da_readwrite_be_stage4( ounit, nk, uh_method, n_smth_sl, variable )
81
82 variable = 't_u'
83 call da_readwrite_be_stage4( ounit, nk, uh_method, n_smth_sl, variable )
84
85 variable = 'rh'
86 call da_readwrite_be_stage4( ounit, nk, uh_method, n_smth_sl, variable )
87
88 variable = 'ps_u'
89 call da_readwrite_be_stage4( ounit, 1, uh_method, n_smth_sl, variable )
90
91 close(ounit)
92
93 end program gen_be_diags