@@ -64,11 +64,17 @@ real (kind=RKIND) function atm_iau_coef(configs, itimestep, dt) result(wgt_iau)
64
64
65
65
if (trim (iau_opt) == ' on' ) then ! HA: We should be able to expand this for more options later on.
66
66
67
- nsteps_iau = nint (time_window_sec / dt)
67
+ nsteps_iau = nint (time_window_sec / dt) ! how many steps to which analysis increments ( = Xamb) are applied.
68
68
!if (debug) call mpas_log_write(' atm_compute_iau_coef: nsteps_iau = $i' , intArgs= (/ nsteps_iau/ ))
69
69
70
+ ! In the atm_add_tend_anal_incr subroutine, the weight function (wgt_iau) will be applied as below.
71
+ ! f_wgt = 1 / nsteps_iau = dt/ time_window_sec ! this can be expanded for 4DIAU later.
72
+ ! dX/ dt = Xamb/ dt * f_wgt
73
+ ! = Xamb/ dt * dt/ time_window_sec
74
+ ! = Xamb/ time_window_sec
75
+ != > dX/ dt = Xamb * wgt_iau where wgt_iau = 1 / time_window_sec
76
+
70
77
if (itimestep <= nsteps_iau) then
71
- !wgt_iau = 1 ./ nsteps_iau
72
78
wgt_iau = 1.0_RKIND / time_window_sec
73
79
if (debug) call mpas_log_write(' atm_compute_iau_coef: wgt_iau = $r' , realArgs= (/ wgt_iau/ ))
74
80
end if
@@ -98,9 +104,13 @@ subroutine atm_add_tend_anal_incr (configs, structs, itimestep, dt, tend_ru, ten
98
104
type (mpas_pool_type), pointer :: mesh
99
105
100
106
integer :: iEdge, iCell, i, j, k, n
107
+ integer :: cell1, cell2 ! added by Soyoung (Jan-13-2022 )
101
108
integer , pointer :: nCells, nEdges, nCellsSolve, nEdgesSolve, nVertLevels
102
109
integer , pointer:: index_qv
103
110
integer , pointer:: moist_start, moist_end
111
+ integer , dimension (:,:), pointer :: cellsOnEdge ! added by Soyoung (Jan-13-2022 )
112
+ real (kind= RKIND) :: rho_amb_edge ! added by Soyoung (Jan-14-2022 )
113
+ ! Soyoung: amb stands for A- minus- B (e.g., analysis increments) in this module.
104
114
105
115
real (kind= RKIND), dimension (:,:), pointer :: rho_edge, rho_zz, theta_m, theta, u, zz, &
106
116
tend_th, tend_w
@@ -132,11 +142,13 @@ subroutine atm_add_tend_anal_incr (configs, structs, itimestep, dt, tend_ru, ten
132
142
call mpas_pool_get_dimension(mesh, ' nVertLevels' , nVertLevels)
133
143
134
144
call mpas_pool_get_array(mesh, ' zz' , zz)
145
+ call mpas_pool_get_array(mesh, ' cellsOnEdge' , cellsOnEdge) ! added by Soyoung (Jan-13-2022 )
135
146
136
147
call mpas_pool_get_array(state, ' theta_m' , theta_m, 1 )
137
148
call mpas_pool_get_array(state, ' scalars' , scalars, 1 )
138
149
call mpas_pool_get_array(state, ' rho_zz' , rho_zz, 2 )
139
150
call mpas_pool_get_array(diag , ' rho_edge' , rho_edge)
151
+ call mpas_pool_get_array(state, ' u' , u, 1 ) ! added by Soyoung (Jan-13-2022 )
140
152
141
153
call mpas_pool_get_dimension(state, ' moist_start' , moist_start)
142
154
call mpas_pool_get_dimension(state, ' moist_end' , moist_end)
@@ -166,8 +178,11 @@ subroutine atm_add_tend_anal_incr (configs, structs, itimestep, dt, tend_ru, ten
166
178
167
179
! add coupled tendencies for u on edges
168
180
do i = 1 , nEdgesSolve
181
+ cell1 = cellsOnEdge(1 ,i) ! added by Soyoung (Jan-13-2022 )
182
+ cell2 = cellsOnEdge(2 ,i) ! added by Soyoung (Jan-13-2022 )
169
183
do k = 1 , nVertLevels
170
- tend_ru(k,i) = tend_ru(k,i) + wgt_iau * rho_edge(k,i) * u_amb(k,i)
184
+ rho_amb_edge = 0.5_RKIND * (rho_amb(k,cell1)/ zz(k,cell1) + rho_amb(k,cell2)/ zz(k,cell2)) ! added by Soyoung (Jan-14-2022 )
185
+ tend_ru(k,i) = tend_ru(k,i) + wgt_iau * (rho_edge(k,i) * u_amb(k,i) + rho_amb_edge * u(k,i)) ! added by Soyoung (Jan-14-2022 )
171
186
enddo
172
187
enddo
173
188
0 commit comments