File indexing completed on 2025-09-17 08:53:38
0001
0002
0003
0004
0005
0006
0007 #pragma once
0008
0009 #include <covfie/core/backend/primitive/array.hpp>
0010 #include <covfie/core/backend/transformer/affine.hpp>
0011 #include <covfie/core/backend/transformer/linear.hpp>
0012 #include <covfie/core/backend/transformer/strided.hpp>
0013 #include <covfie/core/field.hpp>
0014
0015 #include "corecel/Config.hh"
0016
0017 #include "corecel/Macros.hh"
0018 #include "corecel/Types.hh"
0019 #include "geocel/Types.hh"
0020
0021 #if CELERITAS_USE_CUDA
0022 # include <covfie/cuda/backend/primitive/cuda_texture.hpp>
0023 #elif CELERITAS_USE_HIP
0024 # include <covfie/hip/backend/primitive/hip_device_array.hpp>
0025 #endif
0026
0027 namespace celeritas
0028 {
0029 namespace detail
0030 {
0031
0032
0033 template<MemSpace M>
0034 struct CovfieFieldTraits;
0035
0036 template<>
0037 struct CovfieFieldTraits<MemSpace::host>
0038 {
0039 using storage_t = covfie::backend::array<covfie::vector::float3>;
0040 using dimensioned_t
0041 = covfie::backend::strided<covfie::vector::size3, storage_t>;
0042 using interp_t = covfie::backend::linear<dimensioned_t>;
0043 using transformed_t = covfie::backend::affine<interp_t>;
0044 using field_t = covfie::field<transformed_t>;
0045 using builder_t = covfie::field<dimensioned_t>;
0046
0047 static Real3 to_array(field_t::output_t const& vec)
0048 {
0049 return {vec[0], vec[1], vec[2]};
0050 }
0051 };
0052
0053 template<>
0054 struct CovfieFieldTraits<MemSpace::device>
0055 {
0056 using float3 = covfie::vector::float3;
0057 #if CELERITAS_USE_CUDA
0058 using storage_t = covfie::backend::cuda_texture<float3, float3>;
0059 using transformed_t = covfie::backend::affine<storage_t>;
0060 #else
0061
0062 # if CELERITAS_USE_HIP
0063 using storage_t = covfie::backend::hip_device_array<float3, float3>;
0064 # else
0065 using storage_t = covfie::backend::array<float3>;
0066 # endif
0067
0068 using dimensioned_t
0069 = covfie::backend::strided<covfie::vector::size3, storage_t>;
0070 using interp_t = covfie::backend::linear<dimensioned_t>;
0071 using transformed_t = covfie::backend::affine<interp_t>;
0072 #endif
0073
0074 using field_t = covfie::field<transformed_t>;
0075
0076 CELER_FUNCTION static Real3 to_array(field_t::output_t const& vec)
0077 {
0078 return {vec[0], vec[1], vec[2]};
0079 }
0080 };
0081
0082
0083 }
0084 }