@@ -22,10 +22,9 @@ LoadStateFieldBase(const Teuchos::ParameterList& p)
22
22
fieldName = p.get <std::string>(" Field Name" );
23
23
stateName = p.get <std::string>(" State Name" );
24
24
25
- PHX::MDField<ScalarType> f (fieldName, p.get <Teuchos::RCP<PHX::DataLayout> >(" State Field Layout" ) );
26
- data = f;
25
+ field = PHX::MDField<ScalarType>(fieldName, p.get <Teuchos::RCP<PHX::DataLayout> >(" State Field Layout" ) );
27
26
28
- this ->addEvaluatedField (data );
27
+ this ->addEvaluatedField (field );
29
28
this ->setName (" LoadStateField(" +stateName+" )" +PHX::print<EvalT>());
30
29
}
31
30
@@ -34,7 +33,7 @@ template<typename EvalT, typename Traits, typename ScalarType>
34
33
void LoadStateFieldBase<EvalT, Traits, ScalarType>::postRegistrationSetup(typename Traits::SetupData d,
35
34
PHX::FieldManager<Traits>& fm)
36
35
{
37
- this ->utils .setFieldData (data ,fm);
36
+ this ->utils .setFieldData (field ,fm);
38
37
39
38
d.fill_field_dependencies (this ->dependentFields (),this ->evaluatedFields ());
40
39
if (d.memoizer_active ()) memoizer.enable_memoizer ();
@@ -51,15 +50,13 @@ void LoadStateFieldBase<EvalT, Traits, ScalarType>::evaluateFields(typename Trai
51
50
// whomever changed the data.
52
51
const auto & stateToLoad = (*workset.stateArrayPtr )[stateName];
53
52
auto stateData = stateToLoad.dev ();
54
- const int stateToLoad_size = stateToLoad.size ();
55
53
56
- MDFieldVectorRight<ScalarType> g (data);
57
- dataVec = g;
54
+ ALBANY_ASSERT (stateData.rank () <= 3 , " Current implementation supports only views with rank up to 3. If larger rank is needed modify code below" );
58
55
59
56
Kokkos::parallel_for (this ->getName (),
60
- Kokkos::RangePolicy <ExecutionSpace>( 0 ,data. size () ),
61
- KOKKOS_CLASS_LAMBDA (const int i) {
62
- dataVec[i] = (i < stateToLoad_size) ? stateData (i) : 0.0 ;
57
+ Kokkos::MDRangePolicy <ExecutionSpace, Kokkos::Rank< 3 >>({ 0 , 0 , 0 },{stateData. extent ( 0 ),stateData. extent ( 1 ),stateData. extent ( 2 )} ),
58
+ KOKKOS_CLASS_LAMBDA (const int i, const int j, const int k ) {
59
+ field. access (i,j,k) = stateData. access (i,j,k); // works also when rank is less than 3
63
60
});
64
61
}
65
62
@@ -70,10 +67,10 @@ LoadStateField(const Teuchos::ParameterList& p)
70
67
fieldName = p.get <std::string>(" Field Name" );
71
68
stateName = p.get <std::string>(" State Name" );
72
69
73
- PHX::MDField<ParamScalarT> f (fieldName, p.get <Teuchos::RCP<PHX::DataLayout> >(" State Field Layout" ) );
74
- data = f;
75
70
76
- this ->addEvaluatedField (data);
71
+ field = PHX::MDField<ParamScalarT>(fieldName, p.get <Teuchos::RCP<PHX::DataLayout> >(" State Field Layout" ) );
72
+
73
+ this ->addEvaluatedField (field);
77
74
this ->setName (" Load State Field" +PHX::print<EvalT>());
78
75
}
79
76
@@ -82,7 +79,7 @@ template<typename EvalT, typename Traits>
82
79
void LoadStateField<EvalT, Traits>::postRegistrationSetup(typename Traits::SetupData d,
83
80
PHX::FieldManager<Traits>& fm)
84
81
{
85
- this ->utils .setFieldData (data ,fm);
82
+ this ->utils .setFieldData (field ,fm);
86
83
87
84
d.fill_field_dependencies (this ->dependentFields (),this ->evaluatedFields ());
88
85
if (d.memoizer_active ()) memoizer.enable_memoizer ();
@@ -99,15 +96,13 @@ void LoadStateField<EvalT, Traits>::evaluateFields(typename Traits::EvalData wor
99
96
// whomever changed the data.
100
97
const auto & stateToLoad = (*workset.stateArrayPtr )[stateName];
101
98
auto stateData = stateToLoad.dev ();
102
- const int stateToLoad_size = stateToLoad.size ();
103
99
104
- MDFieldVectorRight<ParamScalarT> g (data);
105
- dataVec = g;
100
+ ALBANY_ASSERT (stateData.rank () <= 3 , " Current implementation supports only views with rank up to 3. If larger rank is needed modify code below" );
106
101
107
102
Kokkos::parallel_for (this ->getName (),
108
- Kokkos::RangePolicy <ExecutionSpace>( 0 ,data. size () ),
109
- KOKKOS_CLASS_LAMBDA (const int i) {
110
- dataVec[i] = (i < stateToLoad_size) ? stateData (i) : 0.0 ;
103
+ Kokkos::MDRangePolicy <ExecutionSpace, Kokkos::Rank< 3 >>({ 0 , 0 , 0 },{stateData. extent ( 0 ),stateData. extent ( 1 ),stateData. extent ( 2 )} ),
104
+ KOKKOS_CLASS_LAMBDA (const int i, const int j, const int k ) {
105
+ field. access (i,j,k) = stateData. access (i,j,k); // works also when rank is less than 3
111
106
});
112
107
}
113
108
0 commit comments