7
7
//* Licensed under LGPL 2.1, please see LICENSE for details
8
8
//* https://www.gnu.org/licenses/lgpl-2.1.html
9
9
10
- #include "ClosestElemsToLineNodalVarValue.h"
10
+ #include "ClosestElemsToLineVarValue.h"
11
+
12
+ // MOOSE includes
11
13
#include "MooseMesh.h"
12
14
#include "MooseVariable.h"
15
+ #include "SubProblem.h"
13
16
14
- registerMooseObject ("FalconApp" , ClosestElemsToLineNodalVarValue );
17
+ registerMooseObject ("FalconApp" , ClosestElemsToLineVarValue );
15
18
16
19
InputParameters
17
- ClosestElemsToLineNodalVarValue ::validParams ()
20
+ ClosestElemsToLineVarValue ::validParams ()
18
21
{
19
22
InputParameters params = ClosestElemsToLine ::validParams ();
20
23
params .addClassDescription ("Creates a real_vector_names reporter that has each "
@@ -23,30 +26,22 @@ ClosestElemsToLineNodalVarValue::validParams()
23
26
return params ;
24
27
}
25
28
26
- ClosestElemsToLineNodalVarValue :: ClosestElemsToLineNodalVarValue (const InputParameters & parameters )
29
+ ClosestElemsToLineVarValue :: ClosestElemsToLineVarValue (const InputParameters & parameters )
27
30
: ClosestElemsToLine (parameters ),
28
- MooseVariableInterface < Real > (this ,
29
- false,
30
- "variable_to_sample" ,
31
- Moose ::VarKindType ::VAR_ANY ,
32
- Moose ::VarFieldType ::VAR_FIELD_STANDARD ),
33
31
_var_name (parameters .get < VariableName > ("variable_to_sample" )),
34
- _var (_subproblem .getStandardVariable (_tid , _var_name )),
35
32
_value (declareValueByName < std ::vector < Real >>(_var_name , REPORTER_MODE_REPLICATED ))
36
33
{
37
- if (!_var .isNodal ())
38
- mooseError ("variable_to_sample must be a nodal variable." );
39
34
}
40
35
41
36
void
42
- ClosestElemsToLineNodalVarValue ::initialSetup ()
37
+ ClosestElemsToLineVarValue ::initialSetup ()
43
38
{
44
39
ClosestElemsToLine ::initialSetup ();
45
40
_value .resize (_eid .size (), std ::numeric_limits < Real > ::max ());
46
41
}
47
42
48
43
void
49
- ClosestElemsToLineNodalVarValue :: execute ()
44
+ ClosestElemsToLineVarValue :: finalize ()
50
45
{
51
46
const MooseMesh & mesh = _subproblem .mesh ();
52
47
for (size_t i = 0 ; i < _eid .size (); ++ i )
@@ -55,23 +50,21 @@ ClosestElemsToLineNodalVarValue::execute()
55
50
const Elem * elem = mesh .getMesh ().query_elem_ptr (_eid [i ]);
56
51
if (elem -> processor_id () == processor_id ())
57
52
{
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 ;
66
64
}
67
65
_value [i ] = value ;
68
66
}
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 ]);
77
70
}
0 commit comments