12 static ProfileCheckMaker<ProfileCheckTime>
20 :
ProfileCheckBase(options, profileIndices, profileDataHandler, profileCheckValidator)
29 const std::vector <int> &ObsType =
31 const std::vector <float> &level_time =
33 const std::vector <float> &pressures =
35 std::vector <int> &uFlags =
37 std::vector <int> &vFlags =
39 std::vector <int> &timeFlags =
42 if (!oops::allVectorsSameNonZeroSize(ObsType, pressures)) {
43 oops::Log::warning() <<
"At least one vector is the wrong size. "
44 <<
"Time checks will not be performed." << std::endl;
45 oops::Log::warning() <<
"Vector sizes: "
46 << oops::listOfVectorSizes(ObsType, pressures)
57 timeFlags.assign(numLevelsToCheck,
false);
58 if (!level_time.empty() && !ModelLevels) {
59 for (
size_t jlev = 0; jlev < numLevelsToCheck; ++jlev) {
60 const float leveltime = level_time[jlev];
62 timeFlags[jlev] = (leveltime < (-halfWindowLength - 0.5) ||
63 leveltime > (halfWindowLength - 0.5));
71 if (!uFlags.empty() && SondeLaunchWindRej > 0.0 &&
76 jlev < std::min(static_cast<int>(numLevelsToCheck), 10);
79 PSurf = pressures[jlev];
88 const float PLimit = PSurf - SondeLaunchWindRej * 100.0;
89 for (
size_t jlev = 0; jlev < numLevelsToCheck; ++jlev) {
90 if (pressures[jlev] > 0.0 && pressures[jlev] < PLimit)
break;
96 <<
"Psurf = " << PSurf * 0.01 <<
" hPa, "
97 <<
"NWindRej = " << NWindRej << std::endl;