Intrepid2
Intrepid2_HGRAD_HEX_C1_FEMDef.hpp
Go to the documentation of this file.
1 // @HEADER
2 // ************************************************************************
3 //
4 // Intrepid2 Package
5 // Copyright (2007) Sandia Corporation
6 //
7 // Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
8 // license for use of this work by or on behalf of the U.S. Government.
9 //
10 // Redistribution and use in source and binary forms, with or without
11 // modification, are permitted provided that the following conditions are
12 // met:
13 //
14 // 1. Redistributions of source code must retain the above copyright
15 // notice, this list of conditions and the following disclaimer.
16 //
17 // 2. Redistributions in binary form must reproduce the above copyright
18 // notice, this list of conditions and the following disclaimer in the
19 // documentation and/or other materials provided with the distribution.
20 //
21 // 3. Neither the name of the Corporation nor the names of the
22 // contributors may be used to endorse or promote products derived from
23 // this software without specific prior written permission.
24 //
25 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
26 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
28 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
29 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
30 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
31 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
32 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
33 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
34 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
35 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36 //
37 // Questions? Contact Kyungjoo Kim (kyukim@sandia.gov), or
38 // Mauro Perego (mperego@sandia.gov)
39 //
40 // ************************************************************************
41 // @HEADER
42 
49 #ifndef __INTREPID2_HGRAD_HEX_C1_FEM_DEF_HPP__
50 #define __INTREPID2_HGRAD_HEX_C1_FEM_DEF_HPP__
51 
52 namespace Intrepid2 {
53 
54  // -------------------------------------------------------------------------------------
55  namespace Impl {
56 
57  template<EOperator opType>
58  template<typename OutputViewType,
59  typename inputViewType>
60  KOKKOS_INLINE_FUNCTION
61  void
62  Basis_HGRAD_HEX_C1_FEM::Serial<opType>::
63  getValues( OutputViewType output,
64  const inputViewType input ) {
65  switch (opType) {
66  case OPERATOR_VALUE : {
67  const auto x = input(0);
68  const auto y = input(1);
69  const auto z = input(2);
70 
71  // output is a rank-1 array with dimensions (basisCardinality_)
72  output.access(0) = (1.0 - x)*(1.0 - y)*(1.0 - z)/8.0;
73  output.access(1) = (1.0 + x)*(1.0 - y)*(1.0 - z)/8.0;
74  output.access(2) = (1.0 + x)*(1.0 + y)*(1.0 - z)/8.0;
75  output.access(3) = (1.0 - x)*(1.0 + y)*(1.0 - z)/8.0;
76 
77  output.access(4) = (1.0 - x)*(1.0 - y)*(1.0 + z)/8.0;
78  output.access(5) = (1.0 + x)*(1.0 - y)*(1.0 + z)/8.0;
79  output.access(6) = (1.0 + x)*(1.0 + y)*(1.0 + z)/8.0;
80  output.access(7) = (1.0 - x)*(1.0 + y)*(1.0 + z)/8.0;
81  break;
82  }
83  case OPERATOR_GRAD : {
84  const auto x = input(0);
85  const auto y = input(1);
86  const auto z = input(2);
87 
88  // output is a rank-2 array with dimensions (basisCardinality_, spaceDim)
89  output.access(0, 0) = -(1.0 - y)*(1.0 - z)/8.0;
90  output.access(0, 1) = -(1.0 - x)*(1.0 - z)/8.0;
91  output.access(0, 2) = -(1.0 - x)*(1.0 - y)/8.0;
92 
93  output.access(1, 0) = (1.0 - y)*(1.0 - z)/8.0;
94  output.access(1, 1) = -(1.0 + x)*(1.0 - z)/8.0;
95  output.access(1, 2) = -(1.0 + x)*(1.0 - y)/8.0;
96 
97  output.access(2, 0) = (1.0 + y)*(1.0 - z)/8.0;
98  output.access(2, 1) = (1.0 + x)*(1.0 - z)/8.0;
99  output.access(2, 2) = -(1.0 + x)*(1.0 + y)/8.0;
100 
101  output.access(3, 0) = -(1.0 + y)*(1.0 - z)/8.0;
102  output.access(3, 1) = (1.0 - x)*(1.0 - z)/8.0;
103  output.access(3, 2) = -(1.0 - x)*(1.0 + y)/8.0;
104 
105  output.access(4, 0) = -(1.0 - y)*(1.0 + z)/8.0;
106  output.access(4, 1) = -(1.0 - x)*(1.0 + z)/8.0;
107  output.access(4, 2) = (1.0 - x)*(1.0 - y)/8.0;
108 
109  output.access(5, 0) = (1.0 - y)*(1.0 + z)/8.0;
110  output.access(5, 1) = -(1.0 + x)*(1.0 + z)/8.0;
111  output.access(5, 2) = (1.0 + x)*(1.0 - y)/8.0;
112 
113  output.access(6, 0) = (1.0 + y)*(1.0 + z)/8.0;
114  output.access(6, 1) = (1.0 + x)*(1.0 + z)/8.0;
115  output.access(6, 2) = (1.0 + x)*(1.0 + y)/8.0;
116 
117  output.access(7, 0) = -(1.0 + y)*(1.0 + z)/8.0;
118  output.access(7, 1) = (1.0 - x)*(1.0 + z)/8.0;
119  output.access(7, 2) = (1.0 - x)*(1.0 + y)/8.0;
120  break;
121  }
122  case OPERATOR_D2 : {
123  const auto x = input(0);
124  const auto y = input(1);
125  const auto z = input(2);
126 
127  // output is a rank-2 array with dimensions (basisCardinality_, D2Cardinality = 6)
128  output.access(0, 0) = 0.0; // {2, 0, 0}
129  output.access(0, 1) = (1.0 - z)/8.0; // {1, 1, 0}
130  output.access(0, 2) = (1.0 - y)/8.0; // {1, 0, 1}
131  output.access(0, 3) = 0.0; // {0, 2, 0}
132  output.access(0, 4) = (1.0 - x)/8.0; // {0, 1, 1}
133  output.access(0, 5) = 0.0; // {0, 0, 2}
134 
135  output.access(1, 0) = 0.0; // {2, 0, 0}
136  output.access(1, 1) = -(1.0 - z)/8.0; // {1, 1, 0}
137  output.access(1, 2) = -(1.0 - y)/8.0; // {1, 0, 1}
138  output.access(1, 3) = 0.0; // {0, 2, 0}
139  output.access(1, 4) = (1.0 + x)/8.0; // {0, 1, 1}
140  output.access(1, 5) = 0.0; // {0, 0, 2}
141 
142  output.access(2, 0) = 0.0; // {2, 0, 0}
143  output.access(2, 1) = (1.0 - z)/8.0; // {1, 1, 0}
144  output.access(2, 2) = -(1.0 + y)/8.0; // {1, 0, 1}
145  output.access(2, 3) = 0.0; // {0, 2, 0}
146  output.access(2, 4) = -(1.0 + x)/8.0; // {0, 1, 1}
147  output.access(2, 5) = 0.0; // {0, 0, 2}
148 
149  output.access(3, 0) = 0.0; // {2, 0, 0}
150  output.access(3, 1) = -(1.0 - z)/8.0; // {1, 1, 0}
151  output.access(3, 2) = (1.0 + y)/8.0; // {1, 0, 1}
152  output.access(3, 3) = 0.0; // {0, 2, 0}
153  output.access(3, 4) = -(1.0 - x)/8.0; // {0, 1, 1}
154  output.access(3, 5) = 0.0; // {0, 0, 2}
155 
156 
157  output.access(4, 0) = 0.0; // {2, 0, 0}
158  output.access(4, 1) = (1.0 + z)/8.0; // {1, 1, 0}
159  output.access(4, 2) = -(1.0 - y)/8.0; // {1, 0, 1}
160  output.access(4, 3) = 0.0; // {0, 2, 0}
161  output.access(4, 4) = -(1.0 - x)/8.0; // {0, 1, 1}
162  output.access(4, 5) = 0.0; // {0, 0, 2}
163 
164  output.access(5, 0) = 0.0; // {2, 0, 0}
165  output.access(5, 1) = -(1.0 + z)/8.0; // {1, 1, 0}
166  output.access(5, 2) = (1.0 - y)/8.0; // {1, 0, 1}
167  output.access(5, 3) = 0.0; // {0, 2, 0}
168  output.access(5, 4) = -(1.0 + x)/8.0; // {0, 1, 1}
169  output.access(5, 5) = 0.0; // {0, 0, 2}
170 
171  output.access(6, 0) = 0.0; // {2, 0, 0}
172  output.access(6, 1) = (1.0 + z)/8.0; // {1, 1, 0}
173  output.access(6, 2) = (1.0 + y)/8.0; // {1, 0, 1}
174  output.access(6, 3) = 0.0; // {0, 2, 0}
175  output.access(6, 4) = (1.0 + x)/8.0; // {0, 1, 1}
176  output.access(6, 5) = 0.0; // {0, 0, 2}
177 
178  output.access(7, 0) = 0.0; // {2, 0, 0}
179  output.access(7, 1) = -(1.0 + z)/8.0; // {1, 1, 0}
180  output.access(7, 2) = -(1.0 + y)/8.0; // {1, 0, 1}
181  output.access(7, 3) = 0.0; // {0, 2, 0}
182  output.access(7, 4) = (1.0 - x)/8.0; // {0, 1, 1}
183  output.access(7, 5) = 0.0; // {0, 0, 2}
184  break;
185  }
186  case OPERATOR_D3:
187  {
188  // output is a rank-2 array with dimensions (basisCardinality_, D3Cardinality = 10)
189  // (1.0 - x)*(1.0 - y)*(1.0 - z)/8.0;
190  output.access(0, 0) = 0.0; // {3, 0, 0}
191  output.access(0, 1) = 0.0; // {2, 1, 0}
192  output.access(0, 2) = 0.0; // {2, 0, 1}
193  output.access(0, 3) = 0.0; // {1, 2, 0}
194  output.access(0, 4) = -1.0/8.0; // {1, 1, 1}
195  output.access(0, 5) = 0.0; // {1, 0, 2}
196  output.access(0, 6) = 0.0; // {0, 3, 0}
197  output.access(0, 7) = 0.0; // {0, 2, 1}
198  output.access(0, 8) = 0.0; // {0, 1, 2}
199  output.access(0, 9) = 0.0; // {0, 0, 3}
200 
201  // (1.0 + x)*(1.0 - y)*(1.0 - z)/8.0;
202  output.access(1, 0) = 0.0; // {3, 0, 0}
203  output.access(1, 1) = 0.0; // {2, 1, 0}
204  output.access(1, 2) = 0.0; // {2, 0, 1}
205  output.access(1, 3) = 0.0; // {1, 2, 0}
206  output.access(1, 4) = 1.0/8.0; // {1, 1, 1}
207  output.access(1, 5) = 0.0; // {1, 0, 2}
208  output.access(1, 6) = 0.0; // {0, 3, 0}
209  output.access(1, 7) = 0.0; // {0, 2, 1}
210  output.access(1, 8) = 0.0; // {0, 1, 2}
211  output.access(1, 9) = 0.0; // {0, 0, 3}
212 
213  // (1.0 + x)*(1.0 + y)*(1.0 - z)/8.0;
214  output.access(2, 0) = 0.0; // {3, 0, 0}
215  output.access(2, 1) = 0.0; // {2, 1, 0}
216  output.access(2, 2) = 0.0; // {2, 0, 1}
217  output.access(2, 3) = 0.0; // {1, 2, 0}
218  output.access(2, 4) = -1.0/8.0; // {1, 1, 1}
219  output.access(2, 5) = 0.0; // {1, 0, 2}
220  output.access(2, 6) = 0.0; // {0, 3, 0}
221  output.access(2, 7) = 0.0; // {0, 2, 1}
222  output.access(2, 8) = 0.0; // {0, 1, 2}
223  output.access(2, 9) = 0.0; // {0, 0, 3}
224 
225  // (1.0 - x)*(1.0 + y)*(1.0 - z)/8.0;
226  output.access(3, 0) = 0.0; // {3, 0, 0}
227  output.access(3, 1) = 0.0; // {2, 1, 0}
228  output.access(3, 2) = 0.0; // {2, 0, 1}
229  output.access(3, 3) = 0.0; // {1, 2, 0}
230  output.access(3, 4) = 1.0/8.0; // {1, 1, 1}
231  output.access(3, 5) = 0.0; // {1, 0, 2}
232  output.access(3, 6) = 0.0; // {0, 3, 0}
233  output.access(3, 7) = 0.0; // {0, 2, 1}
234  output.access(3, 8) = 0.0; // {0, 1, 2}
235  output.access(3, 9) = 0.0; // {0, 0, 3}
236 
237  // (1.0 - x)*(1.0 - y)*(1.0 + z)/8.0;
238  output.access(4, 0) = 0.0; // {3, 0, 0}
239  output.access(4, 1) = 0.0; // {2, 1, 0}
240  output.access(4, 2) = 0.0; // {2, 0, 1}
241  output.access(4, 3) = 0.0; // {1, 2, 0}
242  output.access(4, 4) = 1.0/8.0; // {1, 1, 1}
243  output.access(4, 5) = 0.0; // {1, 0, 2}
244  output.access(4, 6) = 0.0; // {0, 3, 0}
245  output.access(4, 7) = 0.0; // {0, 2, 1}
246  output.access(4, 8) = 0.0; // {0, 1, 2}
247  output.access(4, 9) = 0.0; // {0, 0, 3}
248 
249  // (1.0 + x)*(1.0 - y)*(1.0 + z)/8.0;
250  output.access(5, 0) = 0.0; // {3, 0, 0}
251  output.access(5, 1) = 0.0; // {2, 1, 0}
252  output.access(5, 2) = 0.0; // {2, 0, 1}
253  output.access(5, 3) = 0.0; // {1, 2, 0}
254  output.access(5, 4) = -1.0/8.0; // {1, 1, 1}
255  output.access(5, 5) = 0.0; // {1, 0, 2}
256  output.access(5, 6) = 0.0; // {0, 3, 0}
257  output.access(5, 7) = 0.0; // {0, 2, 1}
258  output.access(5, 8) = 0.0; // {0, 1, 2}
259  output.access(5, 9) = 0.0; // {0, 0, 3}
260 
261  // (1.0 + x)*(1.0 + y)*(1.0 + z)/8.0;
262  output.access(6, 0) = 0.0; // {3, 0, 0}
263  output.access(6, 1) = 0.0; // {2, 1, 0}
264  output.access(6, 2) = 0.0; // {2, 0, 1}
265  output.access(6, 3) = 0.0; // {1, 2, 0}
266  output.access(6, 4) = 1.0/8.0; // {1, 1, 1}
267  output.access(6, 5) = 0.0; // {1, 0, 2}
268  output.access(6, 6) = 0.0; // {0, 3, 0}
269  output.access(6, 7) = 0.0; // {0, 2, 1}
270  output.access(6, 8) = 0.0; // {0, 1, 2}
271  output.access(6, 9) = 0.0; // {0, 0, 3}
272 
273  // (1.0 - x)*(1.0 + y)*(1.0 + z)/8.0;
274  output.access(7, 0) = 0.0; // {3, 0, 0}
275  output.access(7, 1) = 0.0; // {2, 1, 0}
276  output.access(7, 2) = 0.0; // {2, 0, 1}
277  output.access(7, 3) = 0.0; // {1, 2, 0}
278  output.access(7, 4) = -1.0/8.0; // {1, 1, 1}
279  output.access(7, 5) = 0.0; // {1, 0, 2}
280  output.access(7, 6) = 0.0; // {0, 3, 0}
281  output.access(7, 7) = 0.0; // {0, 2, 1}
282  output.access(7, 8) = 0.0; // {0, 1, 2}
283  output.access(7, 9) = 0.0; // {0, 0, 3}
284 
285  break;
286  }
287  case OPERATOR_MAX : {
288  const ordinal_type jend = output.extent(1);
289  const ordinal_type iend = output.extent(0);
290 
291  for (ordinal_type j=0;j<jend;++j)
292  for (ordinal_type i=0;i<iend;++i)
293  output.access(i, j) = 0.0;
294  break;
295  }
296  default: {
297  INTREPID2_TEST_FOR_ABORT( opType != OPERATOR_VALUE &&
298  opType != OPERATOR_GRAD &&
299  opType != OPERATOR_CURL &&
300  opType != OPERATOR_D2 &&
301  opType != OPERATOR_MAX,
302  ">>> ERROR: (Intrepid2::Basis_HGRAD_HEX_C1_FEM::Serial::getValues) operator is not supported");
303 
304  }
305  }
306  }
307 
308  template<typename DT,
309  typename outputValueValueType, class ...outputValueProperties,
310  typename inputPointValueType, class ...inputPointProperties>
311  void
312  Basis_HGRAD_HEX_C1_FEM::
313  getValues( const typename DT::execution_space& space,
314  Kokkos::DynRankView<outputValueValueType,outputValueProperties...> outputValues,
315  const Kokkos::DynRankView<inputPointValueType, inputPointProperties...> inputPoints,
316  const EOperator operatorType ) {
317  typedef Kokkos::DynRankView<outputValueValueType,outputValueProperties...> outputValueViewType;
318  typedef Kokkos::DynRankView<inputPointValueType, inputPointProperties...> inputPointViewType;
319  typedef typename ExecSpace<typename inputPointViewType::execution_space,typename DT::execution_space>::ExecSpaceType ExecSpaceType;
320 
321  // Number of evaluation points = dim 0 of inputPoints
322  const auto loopSize = inputPoints.extent(0);
323  Kokkos::RangePolicy<ExecSpaceType,Kokkos::Schedule<Kokkos::Static> > policy(space, 0, loopSize);
324 
325  switch (operatorType) {
326 
327  case OPERATOR_VALUE: {
328  typedef Functor<outputValueViewType,inputPointViewType,OPERATOR_VALUE> FunctorType;
329  Kokkos::parallel_for( policy, FunctorType(outputValues, inputPoints) );
330  break;
331  }
332  case OPERATOR_GRAD:
333  case OPERATOR_D1: {
334  typedef Functor<outputValueViewType,inputPointViewType,OPERATOR_GRAD> FunctorType;
335  Kokkos::parallel_for( policy, FunctorType(outputValues, inputPoints) );
336  break;
337  }
338  case OPERATOR_CURL: {
339  INTREPID2_TEST_FOR_EXCEPTION( operatorType == OPERATOR_CURL, std::invalid_argument,
340  ">>> ERROR (Basis_HGRAD_HEX_C1_FEM): CURL is invalid operator for rank-0 (scalar) functions in 3D");
341  break;
342  }
343 
344  case OPERATOR_DIV: {
345  INTREPID2_TEST_FOR_EXCEPTION( (operatorType == OPERATOR_DIV), std::invalid_argument,
346  ">>> ERROR (Basis_HGRAD_HEX_C1_FEM): DIV is invalid operator for rank-0 (scalar) functions in 3D");
347  break;
348  }
349 
350  case OPERATOR_D2: {
351  typedef Functor<outputValueViewType,inputPointViewType,OPERATOR_D2> FunctorType;
352  Kokkos::parallel_for( policy, FunctorType(outputValues, inputPoints) );
353  break;
354  }
355  case OPERATOR_D3:{
356  typedef Functor<outputValueViewType,inputPointViewType,OPERATOR_D3> FunctorType;
357  Kokkos::parallel_for( policy, FunctorType(outputValues, inputPoints) );
358  break;
359  }
360  case OPERATOR_D4:
361  case OPERATOR_D5:
362  case OPERATOR_D6:
363  case OPERATOR_D7:
364  case OPERATOR_D8:
365  case OPERATOR_D9:
366  case OPERATOR_D10: {
367  typedef Functor<outputValueViewType,inputPointViewType,OPERATOR_MAX> FunctorType;
368  Kokkos::parallel_for( policy, FunctorType(outputValues, inputPoints) );
369  break;
370  }
371  default: {
372  INTREPID2_TEST_FOR_EXCEPTION( !( Intrepid2::isValidOperator(operatorType) ), std::invalid_argument,
373  ">>> ERROR (Basis_HGRAD_HEX_C1_FEM): Invalid operator type");
374  }
375  }
376  }
377  }
378 
379  // -------------------------------------------------------------------------------------
380 
381  template<typename DT, typename OT, typename PT>
384  this->basisCardinality_ = 8;
385  this->basisDegree_ = 1;
386  this->basisCellTopology_ = shards::CellTopology(shards::getCellTopologyData<shards::Hexahedron<8> >() );
387  this->basisType_ = BASIS_FEM_DEFAULT;
388  this->basisCoordinates_ = COORDINATES_CARTESIAN;
389  this->functionSpace_ = FUNCTION_SPACE_HGRAD;
390 
391  // initialize tags
392  {
393  // Basis-dependent intializations
394  const ordinal_type tagSize = 4; // size of DoF tag, i.e., number of fields in the tag
395  const ordinal_type posScDim = 0; // position in the tag, counting from 0, of the subcell dim
396  const ordinal_type posScOrd = 1; // position in the tag, counting from 0, of the subcell ordinal
397  const ordinal_type posDfOrd = 2; // position in the tag, counting from 0, of DoF ordinal relative to the subcell
398 
399  // An array with local DoF tags assigned to basis functions, in the order of their local enumeration
400  ordinal_type tags[32] = { 0, 0, 0, 1,
401  0, 1, 0, 1,
402  0, 2, 0, 1,
403  0, 3, 0, 1,
404  0, 4, 0, 1,
405  0, 5, 0, 1,
406  0, 6, 0, 1,
407  0, 7, 0, 1 };
408 
409  // host tags
410  OrdinalTypeArray1DHost tagView(&tags[0], 32);
411 
412  // Basis-independent function sets tag and enum data in tagToOrdinal_ and ordinalToTag_ arrays:
413  //OrdinalTypeArray2DHost ordinalToTag;
414  //OrdinalTypeArray3DHost tagToOrdinal;
415  this->setOrdinalTagData(this->tagToOrdinal_,
416  this->ordinalToTag_,
417  tagView,
418  this->basisCardinality_,
419  tagSize,
420  posScDim,
421  posScOrd,
422  posDfOrd);
423 
424  //this->tagToOrdinal_ = Kokkos::create_mirror_view(typename DT::memory_space(), tagToOrdinal);
425  //Kokkos::deep_copy(this->tagToOrdinal_, tagToOrdinal);
426 
427  //this->ordinalToTag_ = Kokkos::create_mirror_view(typename DT::memory_space(), ordinalToTag);
428  //Kokkos::deep_copy(this->ordinalToTag_, ordinalToTag);
429  }
430 
431  // dofCoords on host and create its mirror view to device
432  Kokkos::DynRankView<typename ScalarViewType::value_type,typename DT::execution_space::array_layout,Kokkos::HostSpace>
433  dofCoords("dofCoordsHost", this->basisCardinality_,this->basisCellTopology_.getDimension());
434 
435  dofCoords(0,0) = -1.0; dofCoords(0,1) = -1.0; dofCoords(0,2) = -1.0;
436  dofCoords(1,0) = 1.0; dofCoords(1,1) = -1.0; dofCoords(1,2) = -1.0;
437  dofCoords(2,0) = 1.0; dofCoords(2,1) = 1.0; dofCoords(2,2) = -1.0;
438  dofCoords(3,0) = -1.0; dofCoords(3,1) = 1.0; dofCoords(3,2) = -1.0;
439  dofCoords(4,0) = -1.0; dofCoords(4,1) = -1.0; dofCoords(4,2) = 1.0;
440  dofCoords(5,0) = 1.0; dofCoords(5,1) = -1.0; dofCoords(5,2) = 1.0;
441  dofCoords(6,0) = 1.0; dofCoords(6,1) = 1.0; dofCoords(6,2) = 1.0;
442  dofCoords(7,0) = -1.0; dofCoords(7,1) = 1.0; dofCoords(7,2) = 1.0;
443 
444  this->dofCoords_ = Kokkos::create_mirror_view(typename DT::memory_space(), dofCoords);
445  Kokkos::deep_copy(this->dofCoords_, dofCoords);
446  }
447 
448 }// namespace Intrepid2
449 
450 #endif
451 
Kokkos::View< ordinal_type *, typename ExecutionSpace::array_layout, Kokkos::HostSpace > OrdinalTypeArray1DHost
View type for 1d host array.