Я хочу создать функцию на основе LineaValueSampler (VectorPostProcessor), но анализируемую на постпроцессоре в MOOSE. В частности, из LineaValueSampler я получаю на выходе [переменную][id][x][y][z] в файле .csv для каждой итерации. Меня интересует передача этих результатов из LineaValueSampler (VectoPostProcessor) в PostProcessor в одном файле .csv. В этом постпроцессоре я хотел бы взять определенное значение [переменной], а затем сравнить его с порогом. Если разница между
[variable]-threshold < tolerance --> I save this value.
Есть ли у вас предложения по решению этой проблемы? Спасибо за ваше терпение. Ниже есть .h и .C, в которых я представляю эту идею. Вы можете мне помочь?
neckvalue.h:
#ifndef NECKVALUE_H
#define NECKVALUE_H
#include "GeneralPostprocessor.h"
class neckvalue : public GeneralPostprocessor
{
public:
neckvalue(const InputParameters & parameters);
static InputParameters validParams();
Real calculateValue();
protected:
std::vector _c_var;
const Real _threshold;
const Real _tolerance;
};
#endif
neckvalue.cpp:
#include "neckvalue.h"
registerMooseObject("ParrotApp", neckvalue);
InputParameters
neckvalue::validParams()
{
InputParameters params = GeneralPostprocessor::validParams();
params.addRequiredParam("threshold", "Seconda variabile");
params.addRequiredParam("tolerance", "Terza variabile");
return params;
}
neckvalue::neckvalue(
const InputParameters ¶meters)
: GeneralPostprocessor(parameters),
_threshold(getParam("threshold")),
_tolerance(getParam("tolerance")),
_c_var(getParam("c_var"))
{}
Real neckvalue::calculateValue() {
Real value = 0.0;
const VectorPostprocessorValue &values = (getVectorPostprocessorValue("NeckLineValueSampler","value"));
std::vector c_var = values;
for (unsigned int i = 0; i < 100; i++)
{
if (std::abs(_c_var - _threshold) < _tolerance)
{
value = c_var;
}
}
return value;
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... -a-postpro