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 SpT,
309  typename outputValueValueType, class ...outputValueProperties,
310  typename inputPointValueType, class ...inputPointProperties>
311  void
312  Basis_HGRAD_HEX_C1_FEM::
313  getValues( Kokkos::DynRankView<outputValueValueType,outputValueProperties...> outputValues,
314  const Kokkos::DynRankView<inputPointValueType, inputPointProperties...> inputPoints,
315  const EOperator operatorType ) {
316  typedef Kokkos::DynRankView<outputValueValueType,outputValueProperties...> outputValueViewType;
317  typedef Kokkos::DynRankView<inputPointValueType, inputPointProperties...> inputPointViewType;
318  typedef typename ExecSpace<typename inputPointViewType::execution_space,SpT>::ExecSpaceType ExecSpaceType;
319 
320  // Number of evaluation points = dim 0 of inputPoints
321  const auto loopSize = inputPoints.extent(0);
322  Kokkos::RangePolicy<ExecSpaceType,Kokkos::Schedule<Kokkos::Static> > policy(0, loopSize);
323 
324  switch (operatorType) {
325 
326  case OPERATOR_VALUE: {
327  typedef Functor<outputValueViewType,inputPointViewType,OPERATOR_VALUE> FunctorType;
328  Kokkos::parallel_for( policy, FunctorType(outputValues, inputPoints) );
329  break;
330  }
331  case OPERATOR_GRAD:
332  case OPERATOR_D1: {
333  typedef Functor<outputValueViewType,inputPointViewType,OPERATOR_GRAD> FunctorType;
334  Kokkos::parallel_for( policy, FunctorType(outputValues, inputPoints) );
335  break;
336  }
337  case OPERATOR_CURL: {
338  INTREPID2_TEST_FOR_EXCEPTION( operatorType == OPERATOR_CURL, std::invalid_argument,
339  ">>> ERROR (Basis_HGRAD_HEX_C1_FEM): CURL is invalid operator for rank-0 (scalar) functions in 3D");
340  break;
341  }
342 
343  case OPERATOR_DIV: {
344  INTREPID2_TEST_FOR_EXCEPTION( (operatorType == OPERATOR_DIV), std::invalid_argument,
345  ">>> ERROR (Basis_HGRAD_HEX_C1_FEM): DIV is invalid operator for rank-0 (scalar) functions in 3D");
346  break;
347  }
348 
349  case OPERATOR_D2: {
350  typedef Functor<outputValueViewType,inputPointViewType,OPERATOR_D2> FunctorType;
351  Kokkos::parallel_for( policy, FunctorType(outputValues, inputPoints) );
352  break;
353  }
354  case OPERATOR_D3:{
355  typedef Functor<outputValueViewType,inputPointViewType,OPERATOR_D3> FunctorType;
356  Kokkos::parallel_for( policy, FunctorType(outputValues, inputPoints) );
357  break;
358  }
359  case OPERATOR_D4:
360  case OPERATOR_D5:
361  case OPERATOR_D6:
362  case OPERATOR_D7:
363  case OPERATOR_D8:
364  case OPERATOR_D9:
365  case OPERATOR_D10: {
366  typedef Functor<outputValueViewType,inputPointViewType,OPERATOR_MAX> FunctorType;
367  Kokkos::parallel_for( policy, FunctorType(outputValues, inputPoints) );
368  break;
369  }
370  default: {
371  INTREPID2_TEST_FOR_EXCEPTION( !( Intrepid2::isValidOperator(operatorType) ), std::invalid_argument,
372  ">>> ERROR (Basis_HGRAD_HEX_C1_FEM): Invalid operator type");
373  }
374  }
375  }
376  }
377 
378  // -------------------------------------------------------------------------------------
379 
380  template<typename SpT, typename OT, typename PT>
383  this->basisCardinality_ = 8;
384  this->basisDegree_ = 1;
385  this->basisCellTopology_ = shards::CellTopology(shards::getCellTopologyData<shards::Hexahedron<8> >() );
386  this->basisType_ = BASIS_FEM_DEFAULT;
387  this->basisCoordinates_ = COORDINATES_CARTESIAN;
388  this->functionSpace_ = FUNCTION_SPACE_HGRAD;
389 
390  // initialize tags
391  {
392  // Basis-dependent intializations
393  const ordinal_type tagSize = 4; // size of DoF tag, i.e., number of fields in the tag
394  const ordinal_type posScDim = 0; // position in the tag, counting from 0, of the subcell dim
395  const ordinal_type posScOrd = 1; // position in the tag, counting from 0, of the subcell ordinal
396  const ordinal_type posDfOrd = 2; // position in the tag, counting from 0, of DoF ordinal relative to the subcell
397 
398  // An array with local DoF tags assigned to basis functions, in the order of their local enumeration
399  ordinal_type tags[32] = { 0, 0, 0, 1,
400  0, 1, 0, 1,
401  0, 2, 0, 1,
402  0, 3, 0, 1,
403  0, 4, 0, 1,
404  0, 5, 0, 1,
405  0, 6, 0, 1,
406  0, 7, 0, 1 };
407 
408  // host tags
409  OrdinalTypeArray1DHost tagView(&tags[0], 32);
410 
411  // Basis-independent function sets tag and enum data in tagToOrdinal_ and ordinalToTag_ arrays:
412  //OrdinalTypeArray2DHost ordinalToTag;
413  //OrdinalTypeArray3DHost tagToOrdinal;
414  this->setOrdinalTagData(this->tagToOrdinal_,
415  this->ordinalToTag_,
416  tagView,
417  this->basisCardinality_,
418  tagSize,
419  posScDim,
420  posScOrd,
421  posDfOrd);
422 
423  //this->tagToOrdinal_ = Kokkos::create_mirror_view(typename SpT::memory_space(), tagToOrdinal);
424  //Kokkos::deep_copy(this->tagToOrdinal_, tagToOrdinal);
425 
426  //this->ordinalToTag_ = Kokkos::create_mirror_view(typename SpT::memory_space(), ordinalToTag);
427  //Kokkos::deep_copy(this->ordinalToTag_, ordinalToTag);
428  }
429 
430  // dofCoords on host and create its mirror view to device
431  Kokkos::DynRankView<typename ScalarViewType::value_type,typename SpT::array_layout,Kokkos::HostSpace>
432  dofCoords("dofCoordsHost", this->basisCardinality_,this->basisCellTopology_.getDimension());
433 
434  dofCoords(0,0) = -1.0; dofCoords(0,1) = -1.0; dofCoords(0,2) = -1.0;
435  dofCoords(1,0) = 1.0; dofCoords(1,1) = -1.0; dofCoords(1,2) = -1.0;
436  dofCoords(2,0) = 1.0; dofCoords(2,1) = 1.0; dofCoords(2,2) = -1.0;
437  dofCoords(3,0) = -1.0; dofCoords(3,1) = 1.0; dofCoords(3,2) = -1.0;
438  dofCoords(4,0) = -1.0; dofCoords(4,1) = -1.0; dofCoords(4,2) = 1.0;
439  dofCoords(5,0) = 1.0; dofCoords(5,1) = -1.0; dofCoords(5,2) = 1.0;
440  dofCoords(6,0) = 1.0; dofCoords(6,1) = 1.0; dofCoords(6,2) = 1.0;
441  dofCoords(7,0) = -1.0; dofCoords(7,1) = 1.0; dofCoords(7,2) = 1.0;
442 
443  this->dofCoords_ = Kokkos::create_mirror_view(typename SpT::memory_space(), dofCoords);
444  Kokkos::deep_copy(this->dofCoords_, dofCoords);
445  }
446 
447 }// namespace Intrepid2
448 
449 #endif
450 
Kokkos::View< ordinal_type *, typename ExecSpaceType::array_layout, Kokkos::HostSpace > OrdinalTypeArray1DHost
View type for 1d host array.