vtk-m/vtkm/cont
Kenneth Moreland eda6dc39f2 Support using arrays with dynamic Vec-likes as output arrays
When you use an `ArrayHandle` as an output array in a worklet (for example,
as a `FieldOut`), the fetch operation does not read values from the array
during the `Load`. Instead, it just constructs a new object. This makes
sense as an output array is expected to have garbage in it anyway.

This is a problem for some special arrays that contain `Vec`-like objects
that are sized dynamically. For example, if you use an
`ArrayHandleGroupVecVariable`, each entry is a dynamically sized `Vec`. The
array is referenced by creating a special version of `Vec` that holds a
reference to the array portal and an index. Components are retrieved and
set by accessing the memory in the array portal. This allows us to have a
dynamically sized `Vec` in the execution environment without having to
allocate within the worklet.

The problem comes when we want to use one of these arrays with `Vec`-like
objects for an output. The typical fetch fails because you cannot construct
one of these `Vec`-like objects without an array portal to bind it to. In
these cases, we need the fetch to create the `Vec`-like object by reading
it from the array. Even though the data will be garbage, you get the
necessary buffer into the array (and nothing more).

Previously, the problem was fixed by creating partial specializations of
the `Fetch` for these `ArrayHandle`s. This worked OK as long as you were
using the array directly. However, the approach failed if the `ArrayHandle`
was wrapped in another `ArrayHandle` (for example, if an `ArrayHandleView`
was applied to an `ArrayHandleGroupVecVariable`).

To get around this problem and simplify things, the basic `Fetch` for
direct output arrays is changed to handle all cases where the values in the
`ArrayHandle` cannot be directly constructed. A compile-time check of the
array's value type is checked with `std::is_default_constructible`. If it
can be constructed, then the array is not accessed. If it cannot be
constructed, then it grabs a value out of the array.
2023-01-23 13:02:40 -07:00
..
arg Remove deprecated features from VTK-m 2022-11-17 07:12:31 -06:00
cuda cmake: namespace vtkm export targets 2022-12-09 18:46:56 -05:00
internal Remove deprecated features from VTK-m 2022-11-17 07:12:31 -06:00
kokkos CMAKE: fix vtkm devices namespaces 2022-12-26 13:40:12 -05:00
openmp cmake: namespace vtkm export targets 2022-12-09 18:46:56 -05:00
serial Remove deprecated virtual methods 2022-10-28 10:56:52 -06:00
tbb cmake: namespace vtkm export targets 2022-12-09 18:46:56 -05:00
testing Support using arrays with dynamic Vec-likes as output arrays 2023-01-23 13:02:40 -07:00
testlib Remove deprecated features from VTK-m 2022-11-17 07:12:31 -06:00
Algorithm.h Deprecate ArrayHandle::GetDeviceAdapterId 2021-07-28 12:51:51 -06:00
ArrayCopy.cxx Add ArrayCopy specialization for Counting and Permutation array 2022-01-24 12:17:23 -07:00
ArrayCopy.h Add ArrayCopy specialization for Counting and Permutation array 2022-01-24 12:17:23 -07:00
ArrayCopyDevice.h Remove deprecated features from VTK-m 2022-11-17 07:12:31 -06:00
ArrayExtractComponent.h Use types for different options in PA filters. 2022-06-23 15:25:31 -04:00
ArrayGetValues.cxx Better fallback for ArrayGetValue 2022-01-03 10:08:39 -07:00
ArrayGetValues.h Better fallback for ArrayGetValue 2022-01-03 10:08:39 -07:00
ArrayHandle.cxx Remove deprecated features from VTK-m 2022-11-17 07:12:31 -06:00
ArrayHandle.h Remove deprecated features from VTK-m 2022-11-17 07:12:31 -06:00
ArrayHandleBasic.cxx Make new style of ArrayHandle the expected style 2021-01-12 07:17:53 -07:00
ArrayHandleBasic.h Remove deprecated features from VTK-m 2022-11-17 07:12:31 -06:00
ArrayHandleBitField.h Allow ArrayHandle to have a runtime selectable number of buffers 2022-07-11 07:48:25 -06:00
ArrayHandleCartesianProduct.h Allow ArrayHandle to have a runtime selectable number of buffers 2022-07-11 07:48:25 -06:00
ArrayHandleCast.h Fix range warning in ArrayHandleCast 2022-02-01 11:42:16 -07:00
ArrayHandleCompositeVector.h Force functions passed as templates to be functors 2023-01-03 13:56:29 -07:00
ArrayHandleConcatenate.h Remove deprecated features from VTK-m 2022-11-17 07:12:31 -06:00
ArrayHandleConstant.h Change Field to hold UnknownArrayHandle rather than VariantArrayHandle 2021-01-14 17:01:22 -07:00
ArrayHandleCounting.h Add ArrayCopy specialization for Counting and Permutation array 2022-01-24 12:17:23 -07:00
ArrayHandleDecorator.h Allow ArrayHandle to have a runtime selectable number of buffers 2022-07-11 07:48:25 -06:00
ArrayHandleDiscard.h Allow ArrayHandle to have a runtime selectable number of buffers 2022-07-11 07:48:25 -06:00
ArrayHandleExtractComponent.h Merge topic 'resizable-arrayhandle-buffer-vec' 2022-07-12 12:04:24 -04:00
ArrayHandleGroupVec.h Allow ArrayHandle to have a runtime selectable number of buffers 2022-07-11 07:48:25 -06:00
ArrayHandleGroupVecVariable.h Support using arrays with dynamic Vec-likes as output arrays 2023-01-23 13:02:40 -07:00
ArrayHandleImplicit.h Allow ArrayHandle to have a runtime selectable number of buffers 2022-07-11 07:48:25 -06:00
ArrayHandleIndex.h Make new style of ArrayHandle the expected style 2021-01-12 07:17:53 -07:00
ArrayHandleMultiplexer.h Remove deprecated features from VTK-m 2022-11-17 07:12:31 -06:00
ArrayHandleOffsetsToNumComponents.h Allow ArrayHandle to have a runtime selectable number of buffers 2022-07-11 07:48:25 -06:00
ArrayHandlePermutation.h Allow ArrayHandle to have a runtime selectable number of buffers 2022-07-11 07:48:25 -06:00
ArrayHandleRandomStandardNormal.h use make_ArrayHandleZip 2020-06-25 09:51:06 -06:00
ArrayHandleRandomUniformBits.h remove inline initialization of seed 2020-06-17 12:47:54 -06:00
ArrayHandleRandomUniformReal.h the random source is still 64 bits 2020-06-17 12:58:03 -06:00
ArrayHandleRecombineVec.h Support using arrays with dynamic Vec-likes as output arrays 2023-01-23 13:02:40 -07:00
ArrayHandleReverse.h Remove deprecated features from VTK-m 2022-11-17 07:12:31 -06:00
ArrayHandleSOA.cxx Support ArrayHandleSOA only for Vec value types 2021-01-06 13:20:58 -07:00
ArrayHandleSOA.h Remove deprecated features from VTK-m 2022-11-17 07:12:31 -06:00
ArrayHandleStride.cxx Make new style of ArrayHandle the expected style 2021-01-12 07:17:53 -07:00
ArrayHandleStride.h Add ability to resize ArrayHandleStride 2023-01-18 14:29:23 -06:00
ArrayHandleSwizzle.h Simplify ArrayHandleSwizzle 2020-11-25 09:28:49 -07:00
ArrayHandleTransform.h Allow ArrayHandle to have a runtime selectable number of buffers 2022-07-11 07:48:25 -06:00
ArrayHandleUniformPointCoordinates.cxx Add ArrayExtractComponent function 2020-12-16 17:22:44 -07:00
ArrayHandleUniformPointCoordinates.h Make new style of ArrayHandle the expected style 2021-01-12 07:17:53 -07:00
ArrayHandleView.h Remove deprecated features from VTK-m 2022-11-17 07:12:31 -06:00
ArrayHandleXGCCoordinates.h Allow ArrayHandle to have a runtime selectable number of buffers 2022-07-11 07:48:25 -06:00
ArrayHandleZip.h Allow ArrayHandle to have a runtime selectable number of buffers 2022-07-11 07:48:25 -06:00
ArrayPortal.h Fixup custom portal iterator logic. 2019-12-17 15:39:51 -05:00
ArrayPortalToIterators.h Add porting layer for future std features 2020-03-16 17:12:16 -06:00
ArrayRangeCompute.cxx Improve type reporting in UnknownArrayHandle 2021-08-04 12:11:10 -06:00
ArrayRangeCompute.h Add implementation of ArrayRangeCompute for UnknownArrayHandle 2021-02-17 09:18:31 -07:00
ArrayRangeComputeTemplate.h Remove deprecated virtual methods 2022-10-28 10:56:52 -06:00
AssignerPartitionedDataSet.cxx clang-format: reformat the repository with clang-format-9 2020-08-24 14:01:08 -04:00
AssignerPartitionedDataSet.h Fix doxygen groups 2022-09-09 10:37:31 +08:00
AtomicArray.h Remove deprecated features from VTK-m 2022-11-17 07:12:31 -06:00
BitField.cxx Remove deprecated features from VTK-m 2022-11-17 07:12:31 -06:00
BitField.h Remove deprecated features from VTK-m 2022-11-17 07:12:31 -06:00
BoundsCompute.cxx MultiBlock renamed to PartitionedDataSet 2019-09-03 12:42:23 -04:00
BoundsCompute.h MultiBlock renamed to PartitionedDataSet 2019-09-03 12:42:23 -04:00
BoundsGlobalCompute.cxx Use new ways to get array portal in control environment 2020-02-26 13:10:46 -07:00
BoundsGlobalCompute.h MultiBlock renamed to PartitionedDataSet 2019-09-03 12:42:23 -04:00
CastAndCall.h Deprecate old methods from DynamicCellSet 2022-01-05 08:18:17 -07:00
CellLocatorBoundingIntervalHierarchy.cxx Deprecate old methods from DynamicCellSet 2022-01-05 08:18:17 -07:00
CellLocatorBoundingIntervalHierarchy.h Define LastCell type in cell locator structure 2022-08-05 12:43:50 -06:00
CellLocatorChooser.h Deprecate DynamicCellSet and remove from code 2022-01-04 15:38:18 -07:00
CellLocatorGeneral.cxx Deprecate DynamicCellSet and remove from code 2022-01-04 15:38:18 -07:00
CellLocatorGeneral.h Expose the Variant helper class 2022-11-01 07:52:41 -06:00
CellLocatorPartitioned.cxx Support providing a Token to ReadPortal and WritePortal 2022-11-01 09:29:17 -06:00
CellLocatorPartitioned.h add partitioned cell locator 2022-11-01 11:08:18 +01:00
CellLocatorRectilinearGrid.cxx Deprecate old methods from DynamicCellSet 2022-01-05 08:18:17 -07:00
CellLocatorRectilinearGrid.h Define LastCell type in cell locator structure 2022-08-05 12:43:50 -06:00
CellLocatorTwoLevel.cxx Deprecate old methods from DynamicCellSet 2022-01-05 08:18:17 -07:00
CellLocatorTwoLevel.h Define LastCell type in cell locator structure 2022-08-05 12:43:50 -06:00
CellLocatorUniformBins.cxx Add a new unstructured cell locator 2022-11-22 09:51:40 -05:00
CellLocatorUniformBins.h Add a new unstructured cell locator 2022-11-22 09:51:40 -05:00
CellLocatorUniformGrid.cxx Deprecate old methods from DynamicCellSet 2022-01-05 08:18:17 -07:00
CellLocatorUniformGrid.h Define LastCell type in cell locator structure 2022-08-05 12:43:50 -06:00
CellSet.cxx clang-format: reformat the repository with clang-format-9 2020-08-24 14:01:08 -04:00
CellSet.h Store UnknownCellSet instead of DynamicCellSet in DataSet 2022-01-03 13:52:30 -07:00
CellSetExplicit.cxx CellSetExplicit: reword warning message 2021-11-01 12:33:41 -04:00
CellSetExplicit.h Remove deprecated features from VTK-m 2022-11-17 07:12:31 -06:00
CellSetExplicit.hxx Remove deprecated features from VTK-m 2022-11-17 07:12:31 -06:00
CellSetExtrude.cxx Response to code review. 2021-03-12 21:14:50 +00:00
CellSetExtrude.h Remove deprecated features from VTK-m 2022-11-17 07:12:31 -06:00
CellSetList.h Enable changing policy used for library compiles 2020-03-19 15:07:07 -06:00
CellSetPermutation.h Remove deprecated features from VTK-m 2022-11-17 07:12:31 -06:00
CellSetSingleType.h Suppress deprecation warning for CellSetSingleType::GetCellShape 2021-09-17 09:48:26 -06:00
CellSetStructured.cxx conslidate the license statement 2019-04-17 10:57:13 -06:00
CellSetStructured.h Remove deprecated features from VTK-m 2022-11-17 07:12:31 -06:00
CMakeLists.txt CMAKE: fix vtkm devices namespaces 2022-12-26 13:40:12 -05:00
ColorTable.cxx Remove deprecated features from VTK-m 2022-11-17 07:12:31 -06:00
ColorTable.h Remove deprecated features from VTK-m 2022-11-17 07:12:31 -06:00
ColorTableMap.h Compile more sources without device compiler 2022-01-03 08:23:04 -07:00
ColorTablePresets.cxx Remove deprecated features from VTK-m 2022-11-17 07:12:31 -06:00
ColorTableSamples.h Update VTK-m code to use new Vec aliases 2019-07-31 12:55:40 -06:00
ConvertNumComponentsToOffsets.cxx Precompile ConvertNumComponentsToOffsets 2021-09-16 14:27:14 -06:00
ConvertNumComponentsToOffsets.h Precompile ConvertNumComponentsToOffsets 2021-09-16 14:27:14 -06:00
CoordinateSystem.cxx Coordinate systems are stored as Fields 2022-11-11 06:17:58 -07:00
CoordinateSystem.h Remove deprecated features from VTK-m 2022-11-17 07:12:31 -06:00
DataSet.cxx Back out of DataSet::CopyPartsFromExcept method 2022-11-11 07:53:20 -07:00
DataSet.h Clarify field index ordering in Doxygen 2023-01-10 10:42:49 -07:00
DataSetBuilderCurvilinear.cxx Add helper class to build curvilinear datasets. 2021-06-09 13:50:01 -04:00
DataSetBuilderCurvilinear.h Clarify dimension values for 2d, 1d. fix test 2021-06-09 16:16:34 -04:00
DataSetBuilderExplicit.cxx clang-format: reformat the repository with clang-format-9 2020-08-24 14:01:08 -04:00
DataSetBuilderExplicit.h Remove deprecated features from VTK-m 2022-11-17 07:12:31 -06:00
DataSetBuilderRectilinear.cxx clang-format: reformat the repository with clang-format-9 2020-08-24 14:01:08 -04:00
DataSetBuilderRectilinear.h Fix slow ArrayCopy calls 2022-01-24 14:15:45 -07:00
DataSetBuilderUniform.cxx clang-format: reformat the repository with clang-format-9 2020-08-24 14:01:08 -04:00
DataSetBuilderUniform.h DataSetBuilders don't require a cellset name 2019-09-02 09:05:56 -04:00
DefaultTypes.h.in Add ability to convert fields to known types 2021-08-19 07:10:20 -06:00
DeviceAdapter.h Remove ArrayManagerExecution 2020-12-08 13:18:44 -07:00
DeviceAdapterAlgorithm.h Clarify ScanExtended 2021-09-17 09:09:38 -06:00
DeviceAdapterList.h Add Kokkos backend 2020-08-12 13:55:24 -04:00
DeviceAdapterTag.cxx For VTK-m libs all includes of DeviceAdapterTagCuda happen from cuda files 2019-04-22 10:39:54 -04:00
DeviceAdapterTag.h clang-format: reformat the repository with clang-format-9 2020-08-24 14:01:08 -04:00
EnvironmentTracker.cxx Build diy as a library 2020-06-08 15:57:51 -05:00
EnvironmentTracker.h conslidate the license statement 2019-04-17 10:57:13 -06:00
Error.h Set what string in Error::SetMessage 2021-03-29 06:04:22 -06:00
ErrorBadAllocation.h conslidate the license statement 2019-04-17 10:57:13 -06:00
ErrorBadDevice.cxx clang-format: reformat the repository with clang-format-9 2020-08-24 14:01:08 -04:00
ErrorBadDevice.h conslidate the license statement 2019-04-17 10:57:13 -06:00
ErrorBadType.cxx conslidate the license statement 2019-04-17 10:57:13 -06:00
ErrorBadType.h Deprecate VariantArrayHandle 2021-04-07 16:12:38 -06:00
ErrorBadValue.h conslidate the license statement 2019-04-17 10:57:13 -06:00
ErrorExecution.h conslidate the license statement 2019-04-17 10:57:13 -06:00
ErrorFilterExecution.h conslidate the license statement 2019-04-17 10:57:13 -06:00
ErrorInternal.h conslidate the license statement 2019-04-17 10:57:13 -06:00
ExecutionAndControlObjectBase.h Remove deprecated features from VTK-m 2022-11-17 07:12:31 -06:00
ExecutionObjectBase.h Remove deprecated features from VTK-m 2022-11-17 07:12:31 -06:00
Field.cxx Change of Field::Association names. 2022-08-29 06:40:42 -04:00
Field.h Remove deprecated features from VTK-m 2022-11-17 07:12:31 -06:00
FieldRangeCompute.cxx Compile more sources without device compiler 2022-01-03 08:23:04 -07:00
FieldRangeCompute.h Remove deprecated features from VTK-m 2022-11-17 07:12:31 -06:00
FieldRangeGlobalCompute.cxx Deprecate templated versions of Field::GetRange 2020-11-09 12:28:29 -07:00
FieldRangeGlobalCompute.h Remove deprecated features from VTK-m 2022-11-17 07:12:31 -06:00
Initialize.cxx Remove deprecated features from VTK-m 2022-11-17 07:12:31 -06:00
Initialize.h update vtkm initialize flags to have 'vtkm' prefix and deprecate old flags 2021-04-29 00:58:50 +00:00
Invoker.h Reverse Invoker, Dispatcher and Worklet dependency 2020-07-21 17:25:43 -06:00
Logging.cxx Remove deprecated features from VTK-m 2022-11-17 07:12:31 -06:00
Logging.h Remove deprecated features from VTK-m 2022-11-17 07:12:31 -06:00
MergePartitionedDataSet.cxx Update use of field association enumerations 2022-03-17 11:02:37 -06:00
MergePartitionedDataSet.h add merge partitioned dataset capability 2021-10-18 15:37:13 -06:00
ParticleArrayCopy.cxx fix cuda compile, export function. 2020-06-19 10:57:30 -04:00
ParticleArrayCopy.h Support for dist-memory pathlines. 2021-02-05 09:40:50 -05:00
ParticleArrayCopy.hxx Hide Particle class members 2022-12-13 13:19:21 -05:00
PartitionedDataSet.cxx Use {} initialization of FieldCollection. 2022-08-29 16:53:17 -04:00
PartitionedDataSet.h Remove deprecated features from VTK-m 2022-11-17 07:12:31 -06:00
PointLocatorSparseGrid.cxx Fix slow ArrayCopy calls 2022-01-24 14:15:45 -07:00
PointLocatorSparseGrid.h Compile more sources without device compiler 2022-01-03 08:23:04 -07:00
RuntimeDeviceInformation.cxx remove ALL_BACKENDS 2022-02-09 16:15:08 -07:00
RuntimeDeviceInformation.h implement return codes and protected virtual parsing of arguments 2021-06-23 17:58:38 +00:00
RuntimeDeviceTracker.cxx Put sync memory into RuntimeDeviceTracker 2022-08-15 14:30:13 -04:00
RuntimeDeviceTracker.h Put sync memory into RuntimeDeviceTracker 2022-08-15 14:30:13 -04:00
SerializableTypeString.h Add missing types to serialization of UnknownArrayHandle 2021-01-13 09:19:34 -07:00
Serialization.h conslidate the license statement 2019-04-17 10:57:13 -06:00
Storage.cxx Add standard support for read-only storage 2020-12-10 13:39:28 -07:00
Storage.h Allow ArrayHandle to have a runtime selectable number of buffers 2022-07-11 07:48:25 -06:00
StorageList.h Unify common storage types 2021-05-13 08:18:33 -06:00
Timer.cxx Fix intermittent UnitTestTimer failures with CUDA 2022-07-12 08:52:12 -06:00
Timer.h Fix intermittent UnitTestTimer failures with CUDA 2022-07-12 08:52:12 -06:00
Token.cxx clang-format: reformat the repository with clang-format-9 2020-08-24 14:01:08 -04:00
Token.h Pass Token::Reference by value 2020-06-11 11:51:42 -06:00
TryExecute.cxx RuntimeDeviceTracker can't be copied and is only accessible via reference. 2019-05-20 11:43:05 -04:00
TryExecute.h Remove instances of ListTag in favor of List 2019-12-06 21:32:36 -07:00
UncertainArrayHandle.h Merge topic 'less-brigand' 2022-02-10 20:36:50 -05:00
UncertainCellSet.h Remove deprecated features from VTK-m 2022-11-17 07:12:31 -06:00
UnknownArrayHandle.cxx Fix type comparison on OSX for UnknownArrayHandle base component type 2022-08-04 06:18:57 -06:00
UnknownArrayHandle.h Remove deprecated features from VTK-m 2022-11-17 07:12:31 -06:00
UnknownCellSet.cxx Fix some copy/paste errors with comments and variable names 2021-12-16 08:20:42 -07:00
UnknownCellSet.h Remove deprecated features from VTK-m 2022-11-17 07:12:31 -06:00
Variant.h Expose the Variant helper class 2022-11-01 07:52:41 -06:00
vtkm.module add partitioned cell locator 2022-11-01 11:08:18 +01:00