gen_be_diags.f90

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