Skip to content

Commit 6ce74d0

Browse files
author
Abhinab Bhattacharjee
committed
Merge branch 'master' into abhinab
2 parents b57aedc + f55011b commit 6ce74d0

File tree

4 files changed

+95
-4
lines changed

4 files changed

+95
-4
lines changed

.zenodo.json

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
{
2+
"description": "<p>Initial release</p>",
3+
"license": "other-open",
4+
"title": "ComputationalScienceLaboratory/DATools: v0.0.1",
5+
"version": "v0.0.1",
6+
"upload_type": "software",
7+
"publication_date": "2022-06-16",
8+
"creators": [
9+
{
10+
"affiliation": "Virginia Tech",
11+
"name": "Andrey A Popov"
12+
},
13+
{
14+
"affiliation": "Virginia Tech",
15+
"name": "Abhinab Bhattacharjee"
16+
},
17+
{
18+
"affiliation": "Virginia Tech",
19+
"name": "Amit N Subrahmanya"
20+
},
21+
{
22+
"affiliation": "Virginia Tech",
23+
"name": "Adrian Sandu"
24+
}
25+
],
26+
"access_right": "open",
27+
"related_identifiers": [
28+
{
29+
"scheme": "url",
30+
"identifier": "https://github.com/ComputationalScienceLaboratory/DATools/tree/v0.0.1",
31+
"relation": "isSupplementTo"
32+
}
33+
]
34+
}

README.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
[![DOI](https://zenodo.org/badge/269520040.svg)](https://zenodo.org/badge/latestdoi/269520040)
2+
13
A set of Data assimilation tools. Filter smoothers, ensemble and variational methods, localization, etc.
24

3-
An active work in progress.
5+
An active work in progress.

src/+datools/+statistical/+ensemble/ETKF.m

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,13 @@ function analysis(obj, R, y)
1313

1414
xfm = mean(xf, 2);
1515
Af = xf - repmat(xfm, 1, ensN);
16-
Af = inflation * Af ./ sqrt(ensN-1);
17-
xf = repmat(xfm, 1, ensN) + Af;
16+
Af = inflation * Af/sqrt(ensN - 1);
17+
xf = repmat(xfm, 1, ensN) + Af*sqrt(ensN - 1);
1818

1919
Hxf = obj.Observation.observeWithoutError(tc, xf);
2020
Hxfm = mean(Hxf, 2);
2121
HAf = Hxf - repmat(Hxfm, 1, ensN);
22+
HAf = HAf/sqrt(ensN - 1);
2223

2324
dS = decomposition((HAf * HAf.')+R, 'chol');
2425
dR = decomposition(R, 'chol');
@@ -31,7 +32,6 @@ function analysis(obj, R, y)
3132
xa = sqrt(ensN-1) .* Aa + repmat(xam, 1, ensN);
3233

3334
obj.Ensemble = xa;
34-
%obj.Model.update(0, obj.BestEstimate);
3535

3636
obj.Weights = ones(ensN, 1) / ensN;
3737

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
classdef EnGMF < datools.statistical.ensemble.EnF
2+
3+
methods
4+
5+
function analysis(obj, R, y)
6+
7+
tc = obj.Model.TimeSpan(1);
8+
9+
xf = obj.Ensemble;
10+
ensN = obj.NumEnsemble;
11+
n = size(xf, 1);
12+
13+
beta = ((4/(n + 2))^(2/(n + 4)))*((ensN)^(-2/(n + 4)));
14+
15+
xfm = mean(xf, 2);
16+
Af = xf - repmat(xfm, 1, ensN);
17+
Af = sqrt(beta) * Af/sqrt(ensN - 1);
18+
19+
Hxf = obj.Observation.observeWithoutError(tc, xf);
20+
Hxfm = mean(Hxf, 2);
21+
HAf = Hxf - repmat(Hxfm, 1, ensN);
22+
HAf = sqrt(beta)*HAf/sqrt(ensN - 1);
23+
24+
dS = decomposition((HAf * HAf.') + R, 'chol');
25+
26+
xtilde = xf - (Af*HAf.')*(dS\(Hxf - y));
27+
Aa = xtilde - mean(xtilde, 2);
28+
Aa = sqrt(beta)*Aa/sqrt(ensN - 1);
29+
30+
t0 = (Hxf - y);
31+
32+
as = (-0.5 * sum(t0.*(dS \ t0), 1)).';
33+
m = max(as);
34+
w = exp(as-(m + log(sum(exp(as-m))))).';
35+
w = w/sum(w);
36+
37+
defensivefactor = 1;
38+
w = defensivefactor*w + (1 - defensivefactor)/ensN;
39+
40+
% resample
41+
xa = xf;
42+
for k = 1:ensN
43+
ind = find(rand <= cumsum(w), 1, 'first');
44+
xa(:, k) = xtilde(:, ind) + Aa*randn(ensN, 1);
45+
end
46+
47+
obj.Ensemble = xa;
48+
49+
obj.Weights = ones(ensN, 1) / ensN;
50+
51+
end
52+
53+
end
54+
55+
end

0 commit comments

Comments
 (0)