12 #include "ioda/ObsDataVector.h"
13 #include "oops/base/Variables.h"
14 #include "oops/util/IntSetParser.h"
15 #include "oops/util/missingValues.h"
33 const std::vector<std::vector<bool>> & flagged,
39 size_t nlocs = data.
nlocs();
43 std::vector<int> rec_idx(nlocs);
44 std::vector<int> layer_idx(nlocs);
45 std::vector<float> factor(nlocs);
46 const int maxlev = 500;
47 std::vector<std::vector<int> > super_obs_inlayer(maxlev, std::vector<int>(nlocs));
49 for (
size_t i = 0; i < maxlev; ++i) {
50 for (
size_t j = 0; j < nlocs; ++j) {
51 super_obs_inlayer[i][j] = 0;
55 for (
size_t jobs = 0; jobs < nlocs; ++jobs) {
56 if (jobs > 0 && record[0][jobs] != record[0][jobs-1]) irec = irec +1;
58 layer_idx[jobs] = layeridx[0][jobs];
59 if (flags[0][jobs] == 0) super_obs_inlayer[layer_idx[jobs]][rec_idx[jobs]]++;
61 for (
size_t jobs = 0; jobs < nlocs; ++jobs) {
63 if (super_obs_inlayer[layer_idx[jobs]][rec_idx[jobs]] > 0) {
64 factor[jobs] = super_obs_inlayer[layer_idx[jobs]][rec_idx[jobs]];
65 factor[jobs] = sqrt(factor[jobs]);
67 if (obserr[0][jobs] !=
missing) obserr[0][jobs] *= factor[jobs];