da_setup_flow_predictors.inc
References to this file elsewhere.
1 subroutine da_setup_flow_predictors(ix, jy, kz, ne, ep)
2
3 !------------------------------------------------------------------------------
4 ! Purpose: Setup structures for flow-dependent information and read it in.
5 !------------------------------------------------------------------------------
6
7 implicit none
8
9 integer, intent(in) :: ix, jy, kz ! EP grid dimensions.
10 integer, intent(in) :: ne ! Ensemble size.
11 type (ep_type), intent(inout):: ep ! Flow-dependent info.
12
13 character*10 :: ce ! Member index -> character.
14 character(len=filename_len) :: filename ! Input filename.
15 character*10 :: var(1:5) ! Variable name.
16 integer :: ni, nj, nk ! Grid dimensions.
17 integer :: e ! Loop counter
18 logical :: ldum1, ldum2,nkdum ! Dummy.
19 real :: temp3d(1:ix,1:jy,1:kz)! Temporary, real*4 array.
20 real :: temp2d(1:ix,1:jy) ! Temporary, real*4 array.
21
22 real :: ens_scaling_inv ! Ensemble scaling of perturbations.
23
24 integer :: ep_unit
25
26 if (trace_use) call da_trace_entry("da_setup_flow_predictors")
27
28 call da_get_unit(ep_unit)
29
30 call da_message(&
31 (/"Setup structures for flow-dependent information and read in"/))
32
33 ep % ne = ne
34
35 ens_scaling_inv = 1.0
36 if (ne > 1) ens_scaling_inv = 1.0 / sqrt(real(ne-1))
37
38 ! Decide which space we are introducing flow-dependence:
39 if (alphacv_method == alphacv_method_xa) then ! xa space
40 var(1) = 'u'
41 var(2) = 'v'
42 var(3) = 't'
43 var(4) = 'q'
44 var(5) = 'ps'
45 else ! vp space (default)
46 var(1) = 'psi'
47 var(2) = 'chi_u'
48 var(3) = 't_u'
49 var(4) = 'rh'
50 var(5) = 'ps_u'
51 end if
52
53 !---------------------------------------------------------------------------
54 ! Input ensemble perturbations
55 !---------------------------------------------------------------------------
56
57 do e = 1, ne
58
59 write(unit=ce,fmt='(i3.3)')e
60
61 ! v1:
62 filename = 'ep/'//trim(var(1))//'/'//trim(var(1))//'.e'//trim(ce)
63 open(unit=ep_unit, file = filename, form = 'unformatted', status = 'old')
64 read(unit=ep_unit) ni, nj, nk
65
66 if (ni /= ix .or. nj /= jy .or. nk /= kz) then
67 write(unit=message(1),fmt='(a)') &
68 'Inconsistent grid dimensions'
69 write(unit=message(2),fmt='(a,3i6)') &
70 ' Grid dims for analysis grid: ', ix, jy
71 write(unit=message(3),fmt='(a,3i6)') &
72 ' Grid dims for flow predictors: ', ni, nj
73 call da_warning(__FILE__,__LINE__,message(1:3))
74 end if
75
76 read(unit=ep_unit) temp3d(1:ix,1:jy,1:kz)
77 close(unit=ep_unit)
78 ep % v1(1:ix,1:jy,1:kz,e) = ens_scaling_inv * temp3d(1:ix,1:jy,1:kz)
79
80 ! v2:
81 filename = 'ep/'//trim(var(2))//'/'//trim(var(2))//'.e'//trim(ce)
82 open(unit=ep_unit, file = filename, form = 'unformatted', status = 'old')
83 read(unit=ep_unit) ni, nj, nk
84 read(unit=ep_unit) temp3d(1:ix,1:jy,1:kz)
85 ep % v2(1:ix,1:jy,1:kz,e) = ens_scaling_inv * temp3d(1:ix,1:jy,1:kz)
86 close(unit=ep_unit)
87
88 ! v3:
89 filename = 'ep/'//trim(var(3))//'/'//trim(var(3))//'.e'//trim(ce)
90 open(unit=ep_unit, file = filename, form = 'unformatted', status = 'old')
91 read(unit=ep_unit) ni, nj, nk
92 read(unit=ep_unit) temp3d(1:ix,1:jy,1:kz)
93 ep % v3(1:ix,1:jy,1:kz,e) = ens_scaling_inv * temp3d(1:ix,1:jy,1:kz)
94 close(unit=ep_unit)
95
96 ! v4:
97 filename = 'ep/'//trim(var(4))//'/'//trim(var(4))//'.e'//trim(ce)
98 open(unit=ep_unit, file = filename, form = 'unformatted', status = 'old')
99 read(unit=ep_unit) ni, nj, nk
100 read(unit=ep_unit) temp3d(1:ix,1:jy,1:kz)
101 ep % v4(1:ix,1:jy,1:kz,e) = ens_scaling_inv * temp3d(1:ix,1:jy,1:kz)
102 close(unit=ep_unit)
103
104 ! v5:
105 filename = 'ep/'//trim(var(5))//'/'//trim(var(5))//'.e'//trim(ce)
106 open(unit=ep_unit, file = filename, form = 'unformatted', status = 'old')
107 read(unit=ep_unit) ni, nj, nkdum
108 read(unit=ep_unit) ldum1, ldum2
109 read(unit=ep_unit) temp2d(1:ix,1:jy)
110 ep % v5(1:ix,1:jy,1,e) = ens_scaling_inv * temp2d(1:ix,1:jy)
111 close(unit=ep_unit)
112
113 end do
114
115 call da_free_unit(ep_unit)
116
117 if (trace_use) call da_trace_exit("da_setup_flow_predictors")
118
119 end subroutine da_setup_flow_predictors
120
121