38 integer,
parameter :: rk=kind(1.0d+0)
39 real(kind=rk),
dimension(state_dim,pf%count),
intent(out) :: x
40 real(kind=rk),
dimension(obs_dim,pf%count),
intent(in) :: y
42 real(kind=rk),
dimension(obs_dim,pf%count) :: v
43 real(kind=rk),
dimension(state_dim,pf%count) :: vv
53 call
ht(obs_dim,pf%count,v,vv,pf%timestep)
109 subroutine bprime(y,x,QHtR_1y,normaln,betan)
115 integer,
parameter :: rk = kind(1.0d0)
116 real(kind=rk),
dimension(obs_dim,pf%count),
intent(in) :: y
117 real(kind=rk),
dimension(state_dim,pf%count),
intent(out) :: x
118 real(kind=rk),
dimension(obs_dim,pf%count) :: R_1y
119 real(kind=rk),
dimension(state_dim,pf%count) :: HtR_1y
120 real(kind=rk),
dimension(state_dim,pf%count),
intent(out) :: QHtR_1y
121 real(kind=rk),
dimension(state_dim,pf%count),
intent(in) :: normaln
122 real(kind=rk),
dimension(state_dim,pf%count),
intent(out) :: betan
123 real(kind=rk),
dimension(state_dim,2*pf%count) :: temp1,temp2
124 real(kind=rk) :: freetime,p,tau
126 real(kind=rk),
dimension(7) :: ti
127 logical,
parameter :: time = .false.
130 if(time) t = mpi_wtime()
133 tau =
real(tsdata%tau,rk)/
real(pf%time_bwn_obs,rk)
140 if(time) ti(1:3) = mpi_wtime()
142 if(time) ti(4) = mpi_wtime()
143 call
qhalf(pf%count,normaln,betan)
144 if(time) ti(5:7) = mpi_wtime()
147 call
solve_r(obs_dim,pf%count,y,r_1y,pf%timestep)
148 if(time) ti(1) = mpi_wtime()
149 call
ht(obs_dim,pf%count,r_1y,htr_1y,pf%timestep)
150 if(time) ti(2) = mpi_wtime()
155 if(time) ti(3) = mpi_wtime()
156 temp1(:,1:pf%count) = x
157 temp1(:,pf%count+1:2*pf%count) = normaln
158 if(time) ti(4) = mpi_wtime()
159 call
qhalf(2*pf%count,temp1,temp2)
160 if(time) ti(5) = mpi_wtime()
161 betan = temp2(:,pf%count+1:2*pf%count)
163 if(time) ti(6) = mpi_wtime()
164 call
qhalf(pf%count,temp2(:,1:pf%count),qhtr_1y)
165 if(time) ti(7) = mpi_wtime()
169 ti(7) = ti(7) - ti(6)
170 ti(6) = ti(6) - ti(5)
171 ti(5) = ti(5) - ti(4)
172 ti(4) = ti(4) - ti(3)
173 ti(3) = ti(3) - ti(2)
174 ti(2) = ti(2) - ti(1)
177 print*,
'Bprime times =',ti
subroutine solve_r(obsDim, nrhs, y, v, t)
subroutine to take an observation vector y and return v in observation space.
Module that stores the information about the timestepping process.
subroutine bprime(y, x, QHtR_1y, normaln, betan)
subroutine to calculate nudging term and correlated random errors efficiently
Module that stores the dimension of observation and state spaces.
subroutine ht(obsDim, nrhs, y, x, t)
subroutine to take an observation vector y and return x in full state space.
module pf_control holds all the information to control the the main program
subroutine solve_hqht_plus_r(obsdim, y, v, t)
subroutine to take an observation vector y and return v in observation space.
subroutine qhalf(nrhs, x, Qx)
subroutine to take a full state vector x and return in state space.
subroutine k(y, x)
Subroutine to apply to a vector y in observation space where .
subroutine q(nrhs, x, Qx)
subroutine to take a full state vector x and return Qx in state space.
subroutine relaxation_profile(tau, p, zero)
subroutine to compute the relaxation strength