13 #include "ioda/ObsDataVector.h"
14 #include "oops/base/Variables.h"
15 #include "oops/util/IntSetParser.h"
29 : allvars_(), conf_(
conf) {
30 if (
conf_.has(
"inflation variable")) {
33 ASSERT(
conf_.has(
"inflation variable") ||
conf_.has(
"inflation factor"));
39 const std::vector<std::vector<bool>> & flagged,
45 if (
conf_.has(
"inflation factor")) {
46 float factor =
conf_.getFloat(
"inflation factor");
47 for (
size_t jv = 0; jv < vars.
nvars(); ++jv) {
50 for (
size_t jobs = 0; jobs < obserr.nlocs(); ++jobs) {
52 obserr[iv][jobs] *= factor;
57 }
else if (
conf_.has(
"inflation variable")) {
58 Variable factorvar(
conf_.getSubConfiguration(
"inflation variable"));
59 ASSERT(factorvar.
size() == 1 || factorvar.
size() == vars.
nvars());
61 data.
get(factorvar, factors);
65 std::vector<size_t> factor_jv(vars.
nvars(), 0);
71 std::iota(factor_jv.begin(), factor_jv.end(), 0);
75 for (
size_t jv = 0; jv < vars.
nvars(); ++jv) {
79 for (
size_t jobs = 0; jobs < obserr.nlocs(); ++jobs) {
81 obserr[iv][jobs] *= factors[factor_jv[jv]][jobs];
86 oops::Log::debug() <<
" InflateError output obserr: " << obserr << std::endl;