Integrate( array_type & arg_output , const array_type & arg_left , const array_type & arg_right ) : output(arg_output) , left(arg_left) , right(arg_right) { numLeft = left.dimension(1); numRight = right.dimension(1); numPoints = left.dimension(2); dim = left.dimension(3); if(output.rank() == 2) numLeft = 1; }
Transform( array_type & arg_output , const array_type & arg_input , const array_type & arg_fields ) : output(arg_output) , input(arg_input) , fields(arg_fields) { data_rank = input.rank(); numDataPts = input.dimension(1); in_rank = fields.rank(); numCells = output.dimension(0); numFields = output.dimension(1); numPoints = output.dimension(2); dim = output.dimension(3); }
Jacobian( array_type & arg_jacobian , const host_array & arg_points_host , const array_type & arg_cellcoords ) : jacobian(arg_jacobian) , cellcoords(arg_cellcoords) { spaceDim = shards::Hexahedron<8>::dimension; numCells = cellcoords.dimension(0); numPoints = arg_points_host.dimension(0); //Specialized for hexahedron<8> Intrepid::Basis_HGRAD_HEX_C1_FEM<Scalar, host_array > HGRAD_Basis; basisCardinality = HGRAD_Basis.getCardinality(); //Create local temporary host MDArray to get basisGrad on host host_array basisGrads = KokkosArray::create_mdarray<host_array>(basisCardinality, numPoints , spaceDim); //Data shared among all calls basisGrads_device = KokkosArray::create_mdarray<array_type>(basisCardinality, numPoints , spaceDim); HGRAD_Basis.getValues(basisGrads, arg_points_host, Intrepid::OPERATOR_GRAD); //Copy basisGrads onto device KokkosArray::deep_copy(basisGrads_device , basisGrads); }
KOKKOS_MACRO_DEVICE_FUNCTION void operator()( int ielem )const { for(unsigned int i = 0; i < data.dimension(1); i++){ data(ielem, i) = 1.0; } }
KOKKOS_MACRO_DEVICE_FUNCTION void operator()( int ielem )const { for(unsigned int point = 0; point < outVals.dimension(1); point++){ outVals(ielem, point) = inDet(ielem, point) * inWeights(point); }// for, cubature if(inDet(ielem, 0) < 0.0){ for(unsigned int point = 0; point < outVals.dimension(1); point++){ outVals(ielem, point) *= -1; }// for, point }// if }
TransformValue( array_type & arg_output , const array_type & arg_input ) : output(arg_output) , input(arg_input) { numFields = output.dimension(1); numPoints = output.dimension(2); }