83 const Kokkos::DynRankView<funValsValueType,funValsProperties...> targetAtTargetEPoints,
84 const typename BasisType::ScalarViewType targetEPoints,
85 const Kokkos::DynRankView<ortValueType, ortProperties...> orts,
86 const BasisType* cellBasis,
89 typedef typename BasisType::scalarType scalarType;
90 typedef Kokkos::DynRankView<scalarType,DeviceType> ScalarViewType;
91 ordinal_type dim = cellBasis->getBaseCellTopology().getDimension();
93 ordinal_type basisCardinality = cellBasis->getCardinality();
95 ordinal_type numCells = targetAtTargetEPoints.extent(0);
103 ordinal_type numTargetEPoints = range_size(targetEPointsRange(dim,0));
104 ordinal_type numBasisEPoints = range_size(basisEPointsRange(dim,0));
106 ScalarViewType basisAtBasisEPoints(
"basisAtBasisEPoints", 1, basisCardinality, numBasisEPoints);
107 ScalarViewType basisAtTargetEPoints(
"basisAtTargetEPoints", basisCardinality, numTargetEPoints);
110 getHVolEvaluationPoints(basisEPoints, orts, cellBasis, projStruct, EvalPointsType::BASIS);
112 cellBasis->getValues(Kokkos::subview(basisAtBasisEPoints, 0, Kokkos::ALL(), Kokkos::ALL()), Kokkos::subview(basisEPoints,0, Kokkos::ALL(), Kokkos::ALL()));
113 if(targetEPoints.rank()==3)
114 cellBasis->getValues(basisAtTargetEPoints, Kokkos::subview(targetEPoints, 0, Kokkos::ALL(), Kokkos::ALL()));
116 cellBasis->getValues(basisAtTargetEPoints, targetEPoints);
118 ScalarViewType weightedBasisAtTargetEPoints(
"weightedBasisAtTargetEPoints_",numCells, basisCardinality, numTargetEPoints);
119 ScalarViewType weightedBasisAtBasisEPoints(
"weightedBasisAtBasisEPoints", 1, basisCardinality, numBasisEPoints);
121 auto tagToOrdinal = Kokkos::create_mirror_view_and_copy(MemSpaceType(), cellBasis->getAllDofOrdinal());
122 auto cellDofs = Kokkos::subview(tagToOrdinal, dim, 0, Kokkos::ALL());
125 massMat0(
"massMat0", 1, basisCardinality, basisCardinality),
126 massMat(
"massMat", numCells, basisCardinality, basisCardinality),
127 rhsMat(
"rhsMat", numCells, basisCardinality );
129 ordinal_type offsetBasis = basisEPointsRange(dim,0).first;
130 ordinal_type offsetTarget = targetEPointsRange(dim,0).first;
132 using HostSpaceType = Kokkos::DefaultHostExecutionSpace;
133 auto hWeightedBasisAtBasisEPoints = Kokkos::create_mirror_view(weightedBasisAtBasisEPoints);
134 auto hWeightedBasisAtTargetEPoints = Kokkos::create_mirror_view(weightedBasisAtTargetEPoints);
135 auto hBasisAtBasisEPoints = Kokkos::create_mirror_view_and_copy(HostSpaceType(), basisAtBasisEPoints);
136 auto hBasisAtTargetEPoints = Kokkos::create_mirror_view_and_copy(HostSpaceType(), basisAtTargetEPoints);
138 for(ordinal_type j=0; j <basisCardinality; ++j) {
139 ordinal_type idof = cellBasis->getDofOrdinal(dim, 0, j);
140 for(ordinal_type iq=0; iq <ordinal_type(refBasisEWeights.extent(0)); ++iq)
141 hWeightedBasisAtBasisEPoints(0,j,iq) = hBasisAtBasisEPoints(0,idof,offsetBasis+iq) * refBasisEWeights(iq);
142 for(ordinal_type iq=0; iq <ordinal_type(refTargetEWeights.extent(0)); ++iq)
143 hWeightedBasisAtTargetEPoints(0,j,iq) = hBasisAtTargetEPoints(idof,offsetTarget+iq)* refTargetEWeights(iq);
145 Kokkos::deep_copy(weightedBasisAtBasisEPoints,hWeightedBasisAtBasisEPoints);
146 Kokkos::deep_copy(weightedBasisAtTargetEPoints,hWeightedBasisAtTargetEPoints);
152 typedef Kokkos::DynRankView<scalarType, Kokkos::LayoutRight, DeviceType> WorkArrayViewType;
153 ScalarViewType t_(
"t",numCells, basisCardinality);
154 WorkArrayViewType w_(
"w",numCells,basisCardinality);
157 cellSystem.
solve(basisCoeffs, massMat, rhsMat, t_, w_, cellDofs, basisCardinality);