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_tools1, 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 
41    call da_readwrite_be_stage2( ounit, nk )
42 
43 !----------------------------------------------------------------------------
44    write(6,'(/a)')' [2] Gather vertical error eigenvectors, eigenvalues.'
45 !----------------------------------------------------------------------------
46 
47    variable = 'psi'
48    call da_readwrite_be_stage3( ounit, nk, variable )
49 
50    variable = 'chi_u'
51    call da_readwrite_be_stage3( ounit, nk, variable )
52 
53    variable = 't_u'
54    call da_readwrite_be_stage3( ounit, nk, variable )
55 
56    variable = 'rh'
57    call da_readwrite_be_stage3( ounit, nk, variable )
58 
59 ! To keep the dimension nk for 3d fields:
60    nk_3d = nk
61 
62    if (uh_method /= 'power') then
63      variable = 'ps_u'
64      call da_readwrite_be_stage3( ounit,  1, variable )
65    endif
66 
67 !----------------------------------------------------------------------------
68    if (uh_method == 'power') then
69      write(6,'(/a)')' [3] Gather horizontal error power spectra.'
70    else if (uh_method == 'scale') then
71      write(6,'(/a)')' [3] Gather horizontal scale length.'
72    endif
73 !----------------------------------------------------------------------------
74 
75 ! To assign the dimension nk for 3d fields:
76    nk = nk_3d
77 
78    variable = 'psi'
79    call da_readwrite_be_stage4( ounit, nk, uh_method, n_smth_sl, variable )
80 
81    variable = 'chi_u'
82    call da_readwrite_be_stage4( ounit, nk, uh_method, n_smth_sl, variable )
83 
84    variable = 't_u'
85    call da_readwrite_be_stage4( ounit, nk, uh_method, n_smth_sl, variable )
86 
87    variable = 'rh'
88    call da_readwrite_be_stage4( ounit, nk, uh_method, n_smth_sl, variable )
89 
90    variable = 'ps_u'
91    call da_readwrite_be_stage4( ounit, 1, uh_method, n_smth_sl, variable )
92 
93    close(ounit)
94 
95 end program gen_be_diags