void Basis_HGRAD_LINE_Cn_FEM:: getValues( Kokkos::DynRankView<outputValueValueType,outputValueProperties...> outputValues, const Kokkos::DynRankView<inputPointValueType, inputPointProperties...> inputPoints, const Kokkos::DynRankView<vinvValueType, vinvProperties...> vinv, const EOperator operatorType ) { typedef Kokkos::DynRankView<outputValueValueType,outputValueProperties...> outputValueViewType; typedef Kokkos::DynRankView<inputPointValueType, inputPointProperties...> inputPointViewType; typedef Kokkos::DynRankView<vinvValueType, vinvProperties...> vinvViewType; typedef typename ExecSpace<typename inputPointViewType::execution_space,SpT>::ExecSpaceType ExecSpaceType; // loopSize corresponds to cardinality const auto loopSizeTmp1 = (inputPoints.extent(0)/numPtsPerEval); const auto loopSizeTmp2 = (inputPoints.extent(0)%numPtsPerEval != 0); const auto loopSize = loopSizeTmp1 + loopSizeTmp2; Kokkos::RangePolicy<ExecSpaceType,Kokkos::Schedule<Kokkos::Static> > policy(0, loopSize); typedef typename inputPointViewType::value_type inputPointType; const ordinal_type cardinality = outputValues.extent(0); auto vcprop = Kokkos::common_view_alloc_prop(inputPoints); typedef typename Kokkos::DynRankView< inputPointType, typename inputPointViewType::memory_space> workViewType; workViewType work(Kokkos::view_alloc("Basis_HGRAD_LINE_Cn_FEM::getValues::work", vcprop), cardinality, inputPoints.extent(0)); switch (operatorType) { case OPERATOR_VALUE: { typedef Functor<outputValueViewType,inputPointViewType,vinvViewType,workViewType, OPERATOR_VALUE,numPtsPerEval> FunctorType; Kokkos::parallel_for( policy, FunctorType(outputValues, inputPoints, vinv, work) ); break; } case OPERATOR_GRAD: case OPERATOR_D1: case OPERATOR_D2: case OPERATOR_D3: case OPERATOR_D4: case OPERATOR_D5: case OPERATOR_D6: case OPERATOR_D7: case OPERATOR_D8: case OPERATOR_D9: case OPERATOR_D10: { typedef Functor<outputValueViewType,inputPointViewType,vinvViewType,workViewType, OPERATOR_Dn,numPtsPerEval> FunctorType; Kokkos::parallel_for( policy, FunctorType(outputValues, inputPoints, vinv, work, getOperatorOrder(operatorType)) ); break; } default: { INTREPID2_TEST_FOR_EXCEPTION( true , std::invalid_argument, ">>> ERROR (Basis_HGRAD_LINE_Cn_FEM): Operator type not implemented" ); //break; commented out because this always throws } } }
void Basis_HGRAD_TET_C2_FEM:: getValues( Kokkos::DynRankView<outputValueValueType,outputValueProperties...> outputValues, const Kokkos::DynRankView<inputPointValueType, inputPointProperties...> inputPoints, const EOperator operatorType ) { typedef Kokkos::DynRankView<outputValueValueType,outputValueProperties...> outputValueViewType; typedef Kokkos::DynRankView<inputPointValueType, inputPointProperties...> inputPointViewType; typedef typename ExecSpace<typename inputPointViewType::execution_space,SpT>::ExecSpaceType ExecSpaceType; // Number of evaluation points = dim 0 of inputPoints const auto loopSize = inputPoints.extent(0); Kokkos::RangePolicy<ExecSpaceType,Kokkos::Schedule<Kokkos::Static> > policy(0, loopSize); switch (operatorType) { case OPERATOR_VALUE: { typedef Functor<outputValueViewType,inputPointViewType,OPERATOR_VALUE> FunctorType; Kokkos::parallel_for( policy, FunctorType(outputValues, inputPoints) ); break; } case OPERATOR_GRAD: case OPERATOR_D1: { typedef Functor<outputValueViewType,inputPointViewType,OPERATOR_GRAD> FunctorType; Kokkos::parallel_for( policy, FunctorType(outputValues, inputPoints) ); break; } case OPERATOR_CURL: { INTREPID2_TEST_FOR_EXCEPTION( (operatorType == OPERATOR_CURL), std::invalid_argument, ">>> ERROR (Basis_HGRAD_TET_C2_FEM): CURL is invalid operator for rank-0 (scalar) functions in 3D"); break; } case OPERATOR_DIV: { INTREPID2_TEST_FOR_EXCEPTION( (operatorType == OPERATOR_DIV), std::invalid_argument, ">>> ERROR (Basis_HGRAD_TET_C2_FEM): DIV is invalid operator for rank-0 (scalar) functions in 3D"); break; } case OPERATOR_D2: { typedef Functor<outputValueViewType,inputPointViewType,OPERATOR_D2> FunctorType; Kokkos::parallel_for( policy, FunctorType(outputValues, inputPoints) ); break; } case OPERATOR_D3: case OPERATOR_D4: case OPERATOR_D5: case OPERATOR_D6: case OPERATOR_D7: case OPERATOR_D8: case OPERATOR_D9: case OPERATOR_D10: { typedef Functor<outputValueViewType,inputPointViewType,OPERATOR_MAX> FunctorType; Kokkos::parallel_for( policy, FunctorType(outputValues, inputPoints) ); break; } default: { INTREPID2_TEST_FOR_EXCEPTION( !( Intrepid2::isValidOperator(operatorType) ), std::invalid_argument, ">>> ERROR (Basis_HGRAD_TET_C2_FEM): Invalid operator type"); } } }