Open Liu-Jincan opened 8 months ago
Additionally, I tested the def local_analyses(E, Eo, R, y, state_batches, obs_taperer, mp=map, xN=None, g=0)
function within the LETKF class
, and observed a similar problem where the change (increment) at the [0] position of the state vector is very small.
Input and Output Details:
* HMM.Obs , <class 'dapper.mods.TimeDependentOperator'>, CONSTANT operator sepcified by .Op1:
Operator({
'M': 1,
'model':
Direct obs. at [0]
<function partial_Id_Obs.<locals>.model at 0x7f1601df4820>,
'noise':
GaussRV({
'C': <CovMat>
M: 1
kind: 'diag'
trunc: 1.0
rk: 1
full:
[[1.]]
diag:
[1.],
'mu': array([0.]),
'M': 1
}),
'linear':
Constant matrix
[[1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]]
<function partial_Id_Obs.<locals>.linear at 0x7f1601df4940>,
'localizer':
<function localization_setup.<locals>.localization_now at
0x7f1601df43a0>
})
* E , <class 'numpy.ndarray'>, [[1.30717344 0.40801634 0.3750785 0.40237587 0.32207407 0.37713692 0.37890264
0.36045728 0.39770151 0.40860348 0.37114756 0.38465265 0.40419845 0.42468324
0.36355158 0.36888291 0.34799194 0.34886717 0.35782782 0.43350419 0.41480796
0.38730308 0.34134571 0.37368748 0.40393427 0.38280461 0.38663228 0.41004028
0.38771035 0.40472606 0.38046414 0.33292443 0.41533226 0.39330473 0.39352628
0.3812622 0.38610828 0.43665475 0.34661976 0.38231704]
[1.35903075 0.43710811 0.38548605 0.34314745 0.38765361 0.40490957 0.4256461
0.3826824 0.41377304 0.38294322 0.36850792 0.38818397 0.36029404 0.41073816
0.35193415 0.44026056 0.40378594 0.35330632 0.40505507 0.41288669 0.40268967
0.38455357 0.36147986 0.38171022 0.41038392 0.37623194 0.35988951 0.4181357
0.39048088 0.35513027 0.42701075 0.34487054 0.34499088 0.38950855 0.38999201
0.35449077 0.35750157 0.36546895 0.38694066 0.39533231]]
* Eo , <class 'numpy.ndarray'>, [[1.30717344]
[1.35903075]]
* R , <CovMat>
M: 1
kind: 'diag'
trunc: 1.0
rk: 1
full:
[[1.]]
diag:
[1.]
* y , [2.39253506]
* state_batches , [array([0]), array([1]), array([2]), array([3]), array([4]), array([5]), array([6]), array([7]), array([8]), array([9]), array([10]), array([11]), array([12]), array([13]), array([14]), array([15]), array([16]), array([17]), array([18]), array([19]), array([20]), array([21]), array([22]), array([23]), array([24]), array([25]), array([26]), array([27]), array([28]), array([29]), array([30]), array([31]), array([32]), array([33]), array([34]), array([35]), array([36]), array([37]), array([38]), array([39])]
* obs_taperer , <function localization_setup.<locals>.localization_now.<locals>.obs_taperer at 0x7f15fbd1f280>
* map , <class 'map'>
* xN , None
* g , 0
* E , after local analysis, <class 'numpy.ndarray'>, [[1.30861345 0.40852841 0.37512053 0.40236885 0.32207407 0.37713692 0.37890264
0.36045728 0.39770151 0.40860348 0.37114756 0.38465265 0.40419845 0.42468324
0.36355158 0.36888291 0.34799194 0.34886717 0.35782782 0.43350419 0.41480796
0.38730308 0.34134571 0.37368748 0.40393427 0.38280461 0.38663228 0.41004028
0.38771035 0.40472606 0.38046414 0.33292443 0.41533226 0.39330473 0.39352628
0.3812622 0.38610828 0.43664631 0.34678259 0.38254613]
[1.36043593 0.4376078 0.38552707 0.3431406 0.38765361 0.40490957 0.4256461
0.3826824 0.41377304 0.38294322 0.36850792 0.38818397 0.36029404 0.41073816
0.35193415 0.44026056 0.40378594 0.35330632 0.40505507 0.41288669 0.40268967
0.38455357 0.36147986 0.38171022 0.41038392 0.37623194 0.35988951 0.4181357
0.39048088 0.35513027 0.42701075 0.34487054 0.34499088 0.38950855 0.38999201
0.35449077 0.35750157 0.36546071 0.38709956 0.39555586]]
Hello, and sorry for the late reply. As can be seen from the printouts of the state ensemble E
, its spread is very small relative to the observation error variance of R
, which is causing the assimilation to mainly rely on the prior and disregard the observation. Whether this is as it should be or is due to insufficient inflation or localisation is not clear from the context. I'm afraid I won't have the capacity to further resolve such questions, but let us know if you figure it out!
Issue Description:
Hello everyone,
I've been using DAPPER, and it's indeed a fantastic toolkit for getting started with ensemble assimilation—very cool! However, I've encountered a puzzling issue while testing the EnKF method.
I performed a test on the
def EnKF_analysis(E, Eo, hnoise, y, upd_a, stats=None, ko=None)
function within theEnKF class
. In this test, only the [0] position of the state vector had an observation, and its value was 2.39253506. My concern is that the change (increment) at the [0] position before and after assimilation is very small. Shouldn't it be very close to 2.39253506?I'm using the DAPPER version from the GitHub repository, downloaded as a zip and installed directly on December 15, 2023.
Input and Output Details:
Any insights or guidance on what might be causing this behavior would be greatly appreciated!
Thank you!