Skip to content

Commit d2f302c

Browse files
committed
using elementVariableValue pattern to get element average. Name of class was changed because this will now work for element variables
1 parent 3e7a13d commit d2f302c

File tree

8 files changed

+30
-40
lines changed

8 files changed

+30
-40
lines changed

Diff for: include/reporters/ClosestElemsToLineNodalVarValue.h renamed to include/reporters/ClosestElemsToLineVarValue.h

+3-6
Original file line numberDiff line numberDiff line change
@@ -10,24 +10,21 @@
1010
#pragma once
1111

1212
#include "ClosestElemsToLine.h"
13-
#include "MooseVariableInterface.h"
1413

15-
class ClosestElemsToLineNodalVarValue : public ClosestElemsToLine,
16-
public MooseVariableInterface<Real>
14+
class ClosestElemsToLineVarValue : public ClosestElemsToLine
1715
{
1816
public:
1917
static InputParameters validParams();
2018

21-
ClosestElemsToLineNodalVarValue(const InputParameters & parameters);
19+
ClosestElemsToLineVarValue(const InputParameters & parameters);
2220

2321
virtual void initialSetup() override;
2422

2523
virtual void initialize() override{};
26-
virtual void execute() override;
24+
virtual void execute() override{};
2725
virtual void finalize() override;
2826

2927
private:
3028
std::string _var_name;
31-
MooseVariable & _var;
3229
std::vector<Real> & _value;
3330
};

Diff for: src/reporters/ClosestElemsToLineNodalVarValue.C renamed to src/reporters/ClosestElemsToLineVarValue.C

+23-30
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,17 @@
77
//* Licensed under LGPL 2.1, please see LICENSE for details
88
//* https://www.gnu.org/licenses/lgpl-2.1.html
99

10-
#include "ClosestElemsToLineNodalVarValue.h"
10+
#include "ClosestElemsToLineVarValue.h"
11+
12+
// MOOSE includes
1113
#include "MooseMesh.h"
1214
#include "MooseVariable.h"
15+
#include "SubProblem.h"
1316

14-
registerMooseObject("FalconApp", ClosestElemsToLineNodalVarValue);
17+
registerMooseObject("FalconApp", ClosestElemsToLineVarValue);
1518

1619
InputParameters
17-
ClosestElemsToLineNodalVarValue::validParams()
20+
ClosestElemsToLineVarValue::validParams()
1821
{
1922
InputParameters params = ClosestElemsToLine::validParams();
2023
params.addClassDescription("Creates a real_vector_names reporter that has each "
@@ -23,30 +26,22 @@ ClosestElemsToLineNodalVarValue::validParams()
2326
return params;
2427
}
2528

26-
ClosestElemsToLineNodalVarValue::ClosestElemsToLineNodalVarValue(const InputParameters & parameters)
29+
ClosestElemsToLineVarValue::ClosestElemsToLineVarValue(const InputParameters & parameters)
2730
: ClosestElemsToLine(parameters),
28-
MooseVariableInterface<Real>(this,
29-
false,
30-
"variable_to_sample",
31-
Moose::VarKindType::VAR_ANY,
32-
Moose::VarFieldType::VAR_FIELD_STANDARD),
3331
_var_name(parameters.get<VariableName>("variable_to_sample")),
34-
_var(_subproblem.getStandardVariable(_tid, _var_name)),
3532
_value(declareValueByName<std::vector<Real>>(_var_name, REPORTER_MODE_REPLICATED))
3633
{
37-
if (!_var.isNodal())
38-
mooseError("variable_to_sample must be a nodal variable.");
3934
}
4035

4136
void
42-
ClosestElemsToLineNodalVarValue::initialSetup()
37+
ClosestElemsToLineVarValue::initialSetup()
4338
{
4439
ClosestElemsToLine::initialSetup();
4540
_value.resize(_eid.size(), std::numeric_limits<Real>::max());
4641
}
4742

4843
void
49-
ClosestElemsToLineNodalVarValue::execute()
44+
ClosestElemsToLineVarValue::finalize()
5045
{
5146
const MooseMesh & mesh = _subproblem.mesh();
5247
for (size_t i = 0; i < _eid.size(); ++i)
@@ -55,23 +50,21 @@ ClosestElemsToLineNodalVarValue::execute()
5550
const Elem * elem = mesh.getMesh().query_elem_ptr(_eid[i]);
5651
if (elem->processor_id() == processor_id())
5752
{
58-
size_t n = 0;
59-
for (auto & node : elem->node_ref_range())
60-
{
61-
value += _var.getNodalValue(node);
62-
n++;
63-
}
64-
if (n > 0)
65-
value /= (Real)n;
53+
_fe_problem.setCurrentSubdomainID(elem, 0);
54+
_subproblem.prepare(elem, _tid);
55+
_subproblem.reinitElem(elem, _tid);
56+
57+
MooseVariableField<Real> & var = static_cast<MooseVariableField<Real> &>(
58+
_subproblem.getActualFieldVariable(_tid, _var_name));
59+
const VariableValue & u = var.sln();
60+
unsigned int n = u.size();
61+
for (unsigned int i = 0; i < n; i++)
62+
value += u[i];
63+
value /= n;
6664
}
6765
_value[i] = value;
6866
}
69-
}
70-
71-
void
72-
ClosestElemsToLineNodalVarValue::finalize()
73-
{
74-
//_value should be zero on every proc so this will just communicate it.
75-
for (size_t i = 0; i < _eid.size(); ++i)
76-
gatherSum(_value[i]);
67+
//_value should be zero on every proc so this will just communicate it.
68+
for (size_t i = 0; i < _eid.size(); ++i)
69+
gatherSum(_value[i]);
7770
}
Binary file not shown.

Diff for: test/tests/reporters/closest_elems_to_line_NodalVarValue/dfn_test.i renamed to test/tests/reporters/closest_elems_to_line_VarValue/dfn_test.i

+2-2
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838

3939
[no_var]
4040
block = "9 10"
41-
type = ClosestElemsToLineNodalVarValue
41+
type = ClosestElemsToLineVarValue
4242
projection_tolerance = 5
4343
point_x1 = pt/pt1_x
4444
point_y1 = pt/pt1_y
@@ -50,7 +50,7 @@
5050
outputs = out
5151
[]
5252
[domain_var]
53-
type = ClosestElemsToLineNodalVarValue
53+
type = ClosestElemsToLineVarValue
5454
projection_tolerance = 5
5555
point_x1 = pt/pt1_x
5656
point_y1 = pt/pt1_y

Diff for: test/tests/reporters/closest_elems_to_line_NodalVarValue/nodal_var_value.i renamed to test/tests/reporters/closest_elems_to_line_VarValue/nodal_var_value.i

+2-2
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
[]
4242

4343
[no_var]
44-
type = ClosestElemsToLineNodalVarValue
44+
type = ClosestElemsToLineVarValue
4545
projection_tolerance = 5
4646
point_x1 = pt/pt1_x
4747
point_y1 = pt/pt1_y
@@ -53,7 +53,7 @@
5353
outputs = out
5454
[]
5555
[domain_var]
56-
type = ClosestElemsToLineNodalVarValue
56+
type = ClosestElemsToLineVarValue
5757
projection_tolerance = 5
5858
point_x1 = pt/pt1_x
5959
point_y1 = pt/pt1_y

0 commit comments

Comments
 (0)