def for_loop(self): idx = range(self.J) self.Xa[idx], xa0, self.Pa[0] \ = self._next_time_step(self.initial_xa, self.initial_Pa, self.Xo[idx]) self.RMSE_rea_AW[0] = np.nan for l in range(1, self.LMAX_for_4D): # self.J=5、つまり同化ウィンドウ内で5つ観測を取り込むとすると、 # 時刻l-1に於ける解析値と時刻l, ..., l+4における観測値をもとに、 # 時刻l, ..., l+4における解析値(self.Xa[idx])を計算する。 # xa0というのは、時刻l-1における"再"解析値。 # RMSE_a_AWは、時刻l+4(l-1)における「解析値」のRMSEで、 # RMSE_rea_AWは、時刻l+4(l-1)における「再解析値」のRMSE # lに対応するインデックス idx = range(l * self.J, (l + 1) * self.J) self.Xa[idx], xa0, self.Pa[l] \ = self._next_time_step(self.Xa[l * self.J - 1], self.Pa[l - 1], self.Xo[idx]) self.RMSE_rea_AW[l] \ = using_jit.cal_RMSE(xa0, self.Xt[l * self.J - 1]) self.RMSE_a[:] = using_jit.cal_RMSE_2D(self.Xa, self.Xt) # for l in range(self.LMAX_for_4D): # self.RMSE_a_AW[l] = self.RMSE_a[(l + 1) * self.J - 1] # 上記のコードを最適化すると以下の通り self.RMSE_a_AW[:] \ = self.RMSE_a[(np.arange(self.LMAX_for_4D) + 1) * self.J - 1]
def for_loop(self): self.Enxa[0] = self._next_time_step(self.initial_Enxa, self.Xo[0]) for l in range(1, self.LMAX): self.Enxa[l] = self._next_time_step(self.Enxa[l - 1], self.Xo[l]) self.Xa = np.average(self.Enxa, axis=2) self.RMSE_a[:] = using_jit.cal_RMSE_2D(self.Xa, self.Xt)
def for_loop(self): self.Enxa[0] = self._next_time_step(self.initial_Enxa, self.Xo[1]) for l in range(1, self.LMAX - 1): self.Enxa[l] = self._next_time_step(self.Enxa[l - 1], self.Xo[l + 1]) # 最後の1時間ステップだけは、解析値をフリーラン。 self.Enxa[self.LMAX - 1] \ = self.l96.ensemble_run(self.Enxa[self.LMAX - 2], days=self.assim_interval_days) self.Xa = np.average(self.Enxa, axis=2) self.RMSE_a[:] = using_jit.cal_RMSE_2D(self.Xa, self.Xt)
def for_loop(self): self.Xa[0], self.Pa[0] = self._next_time_step(self.initial_xa, self.initial_Pa, self.Xo[1]) for l in range(1, self.LMAX - 1): self.Xa[l], self.Pa[l] = self._next_time_step( self.Xa[l - 1], self.Pa[l - 1], self.Xo[l + 1]) self.RMSE_a[:] = using_jit.cal_RMSE_2D(self.Xa, self.Xt) # 最後の1時間ステップだけは、解析値をフリーラン。 LastL = self.LMAX - 1 self.Xa[LastL] = self.l96.run(self.Xa[LastL - 1], days=self.assim_interval_days) self.RMSE_a[LastL] = using_jit.cal_RMSE(self.Xa[LastL], self.Xt[LastL])
def for_loop(self): self.Xa[0], self.Cov_for_est_B[0], \ self.Cov_for_est_B2[0], \ self.Cov_for_est_R[0] = self._next_time_step(self.initial_xa, self.Xo[0]) for l in range(1, self.LMAX): self.Xa[l], self.Cov_for_est_B[l], \ self.Cov_for_est_B2[l], \ self.Cov_for_est_R[l] = self._next_time_step(self.Xa[l - 1], self.Xo[l]) self.RMSE_a[:] = using_jit.cal_RMSE_2D(self.Xa, self.Xt) self.est_B = np.average(self.Cov_for_est_B[200:], axis=0) self.est_B2 = np.average(self.Cov_for_est_B2[200:], axis=0) self.est_R = np.average(self.Cov_for_est_R[200:], axis=0)
def for_loop(self): self.l = 0 self.Xa[0], self.Pa[0] = self._next_time_step(self.initial_xa, self.initial_Pa, self.Xo[0]) for l in range(1, self.LMAX): self.l = l self.Xa[l], self.Pa[l] = self._next_time_step( self.Xa[l - 1], self.Pa[l - 1], self.Xo[l]) self.RMSE_a[:] = using_jit.cal_RMSE_2D(self.Xa, self.Xt) self.est_R = np.average(self.Cov_for_est_R[200:], axis=0) self.est_Pf = np.average(self.Cov_for_est_Pf[200:], axis=0) self.est_Pf2 = np.average(self.Cov_for_est_Pf2[200:], axis=0) self.ave_Pa = np.average(self.Pa[200:], axis=0) self.ave_Pf = np.average(self.Pf[200:], axis=0)
def get_RMSE_o(self): self.RMSE_o[:] = using_jit.cal_RMSE_2D(self.Xo, self.Xt)