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)
Exemplo n.º 4
0
    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)
Exemplo n.º 6
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)