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