warp-lang 1.10.0__py3-none-macosx_11_0_arm64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of warp-lang might be problematic. Click here for more details.
- warp/__init__.py +334 -0
- warp/__init__.pyi +5856 -0
- warp/_src/__init__.py +14 -0
- warp/_src/autograd.py +1077 -0
- warp/_src/build.py +620 -0
- warp/_src/build_dll.py +642 -0
- warp/_src/builtins.py +10555 -0
- warp/_src/codegen.py +4361 -0
- warp/_src/config.py +178 -0
- warp/_src/constants.py +59 -0
- warp/_src/context.py +8352 -0
- warp/_src/dlpack.py +464 -0
- warp/_src/fabric.py +362 -0
- warp/_src/fem/__init__.py +14 -0
- warp/_src/fem/adaptivity.py +510 -0
- warp/_src/fem/cache.py +689 -0
- warp/_src/fem/dirichlet.py +190 -0
- warp/_src/fem/domain.py +553 -0
- warp/_src/fem/field/__init__.py +131 -0
- warp/_src/fem/field/field.py +703 -0
- warp/_src/fem/field/nodal_field.py +403 -0
- warp/_src/fem/field/restriction.py +39 -0
- warp/_src/fem/field/virtual.py +1021 -0
- warp/_src/fem/geometry/__init__.py +32 -0
- warp/_src/fem/geometry/adaptive_nanogrid.py +782 -0
- warp/_src/fem/geometry/closest_point.py +99 -0
- warp/_src/fem/geometry/deformed_geometry.py +277 -0
- warp/_src/fem/geometry/element.py +854 -0
- warp/_src/fem/geometry/geometry.py +693 -0
- warp/_src/fem/geometry/grid_2d.py +478 -0
- warp/_src/fem/geometry/grid_3d.py +539 -0
- warp/_src/fem/geometry/hexmesh.py +956 -0
- warp/_src/fem/geometry/nanogrid.py +660 -0
- warp/_src/fem/geometry/partition.py +483 -0
- warp/_src/fem/geometry/quadmesh.py +597 -0
- warp/_src/fem/geometry/tetmesh.py +762 -0
- warp/_src/fem/geometry/trimesh.py +588 -0
- warp/_src/fem/integrate.py +2507 -0
- warp/_src/fem/linalg.py +385 -0
- warp/_src/fem/operator.py +398 -0
- warp/_src/fem/polynomial.py +231 -0
- warp/_src/fem/quadrature/__init__.py +17 -0
- warp/_src/fem/quadrature/pic_quadrature.py +318 -0
- warp/_src/fem/quadrature/quadrature.py +665 -0
- warp/_src/fem/space/__init__.py +248 -0
- warp/_src/fem/space/basis_function_space.py +499 -0
- warp/_src/fem/space/basis_space.py +681 -0
- warp/_src/fem/space/dof_mapper.py +253 -0
- warp/_src/fem/space/function_space.py +312 -0
- warp/_src/fem/space/grid_2d_function_space.py +179 -0
- warp/_src/fem/space/grid_3d_function_space.py +229 -0
- warp/_src/fem/space/hexmesh_function_space.py +255 -0
- warp/_src/fem/space/nanogrid_function_space.py +199 -0
- warp/_src/fem/space/partition.py +435 -0
- warp/_src/fem/space/quadmesh_function_space.py +222 -0
- warp/_src/fem/space/restriction.py +221 -0
- warp/_src/fem/space/shape/__init__.py +152 -0
- warp/_src/fem/space/shape/cube_shape_function.py +1107 -0
- warp/_src/fem/space/shape/shape_function.py +134 -0
- warp/_src/fem/space/shape/square_shape_function.py +928 -0
- warp/_src/fem/space/shape/tet_shape_function.py +829 -0
- warp/_src/fem/space/shape/triangle_shape_function.py +674 -0
- warp/_src/fem/space/tetmesh_function_space.py +270 -0
- warp/_src/fem/space/topology.py +461 -0
- warp/_src/fem/space/trimesh_function_space.py +193 -0
- warp/_src/fem/types.py +114 -0
- warp/_src/fem/utils.py +488 -0
- warp/_src/jax.py +188 -0
- warp/_src/jax_experimental/__init__.py +14 -0
- warp/_src/jax_experimental/custom_call.py +389 -0
- warp/_src/jax_experimental/ffi.py +1286 -0
- warp/_src/jax_experimental/xla_ffi.py +658 -0
- warp/_src/marching_cubes.py +710 -0
- warp/_src/math.py +416 -0
- warp/_src/optim/__init__.py +14 -0
- warp/_src/optim/adam.py +165 -0
- warp/_src/optim/linear.py +1608 -0
- warp/_src/optim/sgd.py +114 -0
- warp/_src/paddle.py +408 -0
- warp/_src/render/__init__.py +14 -0
- warp/_src/render/imgui_manager.py +291 -0
- warp/_src/render/render_opengl.py +3638 -0
- warp/_src/render/render_usd.py +939 -0
- warp/_src/render/utils.py +162 -0
- warp/_src/sparse.py +2718 -0
- warp/_src/tape.py +1208 -0
- warp/_src/thirdparty/__init__.py +0 -0
- warp/_src/thirdparty/appdirs.py +598 -0
- warp/_src/thirdparty/dlpack.py +145 -0
- warp/_src/thirdparty/unittest_parallel.py +676 -0
- warp/_src/torch.py +393 -0
- warp/_src/types.py +5888 -0
- warp/_src/utils.py +1695 -0
- warp/autograd.py +33 -0
- warp/bin/libwarp-clang.dylib +0 -0
- warp/bin/libwarp.dylib +0 -0
- warp/build.py +29 -0
- warp/build_dll.py +24 -0
- warp/codegen.py +24 -0
- warp/constants.py +24 -0
- warp/context.py +33 -0
- warp/dlpack.py +24 -0
- warp/examples/__init__.py +24 -0
- warp/examples/assets/bear.usd +0 -0
- warp/examples/assets/bunny.usd +0 -0
- warp/examples/assets/cube.usd +0 -0
- warp/examples/assets/nonuniform.usd +0 -0
- warp/examples/assets/nvidia_logo.png +0 -0
- warp/examples/assets/pixel.jpg +0 -0
- warp/examples/assets/rocks.nvdb +0 -0
- warp/examples/assets/rocks.usd +0 -0
- warp/examples/assets/sphere.usd +0 -0
- warp/examples/assets/square_cloth.usd +0 -0
- warp/examples/benchmarks/benchmark_api.py +389 -0
- warp/examples/benchmarks/benchmark_cloth.py +296 -0
- warp/examples/benchmarks/benchmark_cloth_cupy.py +96 -0
- warp/examples/benchmarks/benchmark_cloth_jax.py +105 -0
- warp/examples/benchmarks/benchmark_cloth_numba.py +161 -0
- warp/examples/benchmarks/benchmark_cloth_numpy.py +85 -0
- warp/examples/benchmarks/benchmark_cloth_paddle.py +94 -0
- warp/examples/benchmarks/benchmark_cloth_pytorch.py +94 -0
- warp/examples/benchmarks/benchmark_cloth_taichi.py +120 -0
- warp/examples/benchmarks/benchmark_cloth_warp.py +153 -0
- warp/examples/benchmarks/benchmark_gemm.py +164 -0
- warp/examples/benchmarks/benchmark_interop_paddle.py +166 -0
- warp/examples/benchmarks/benchmark_interop_torch.py +166 -0
- warp/examples/benchmarks/benchmark_launches.py +301 -0
- warp/examples/benchmarks/benchmark_tile_load_store.py +103 -0
- warp/examples/benchmarks/benchmark_tile_sort.py +155 -0
- warp/examples/browse.py +37 -0
- warp/examples/core/example_cupy.py +86 -0
- warp/examples/core/example_dem.py +241 -0
- warp/examples/core/example_fluid.py +299 -0
- warp/examples/core/example_graph_capture.py +150 -0
- warp/examples/core/example_marching_cubes.py +195 -0
- warp/examples/core/example_mesh.py +180 -0
- warp/examples/core/example_mesh_intersect.py +211 -0
- warp/examples/core/example_nvdb.py +182 -0
- warp/examples/core/example_raycast.py +111 -0
- warp/examples/core/example_raymarch.py +205 -0
- warp/examples/core/example_render_opengl.py +290 -0
- warp/examples/core/example_sample_mesh.py +300 -0
- warp/examples/core/example_sph.py +411 -0
- warp/examples/core/example_spin_lock.py +93 -0
- warp/examples/core/example_torch.py +211 -0
- warp/examples/core/example_wave.py +269 -0
- warp/examples/core/example_work_queue.py +118 -0
- warp/examples/distributed/example_jacobi_mpi.py +506 -0
- warp/examples/fem/example_adaptive_grid.py +286 -0
- warp/examples/fem/example_apic_fluid.py +469 -0
- warp/examples/fem/example_burgers.py +261 -0
- warp/examples/fem/example_convection_diffusion.py +181 -0
- warp/examples/fem/example_convection_diffusion_dg.py +225 -0
- warp/examples/fem/example_darcy_ls_optimization.py +489 -0
- warp/examples/fem/example_deformed_geometry.py +172 -0
- warp/examples/fem/example_diffusion.py +196 -0
- warp/examples/fem/example_diffusion_3d.py +225 -0
- warp/examples/fem/example_diffusion_mgpu.py +225 -0
- warp/examples/fem/example_distortion_energy.py +228 -0
- warp/examples/fem/example_elastic_shape_optimization.py +387 -0
- warp/examples/fem/example_magnetostatics.py +242 -0
- warp/examples/fem/example_mixed_elasticity.py +293 -0
- warp/examples/fem/example_navier_stokes.py +263 -0
- warp/examples/fem/example_nonconforming_contact.py +300 -0
- warp/examples/fem/example_stokes.py +213 -0
- warp/examples/fem/example_stokes_transfer.py +262 -0
- warp/examples/fem/example_streamlines.py +357 -0
- warp/examples/fem/utils.py +1047 -0
- warp/examples/interop/example_jax_callable.py +146 -0
- warp/examples/interop/example_jax_ffi_callback.py +132 -0
- warp/examples/interop/example_jax_kernel.py +232 -0
- warp/examples/optim/example_diffray.py +561 -0
- warp/examples/optim/example_fluid_checkpoint.py +497 -0
- warp/examples/tile/example_tile_block_cholesky.py +502 -0
- warp/examples/tile/example_tile_cholesky.py +88 -0
- warp/examples/tile/example_tile_convolution.py +66 -0
- warp/examples/tile/example_tile_fft.py +55 -0
- warp/examples/tile/example_tile_filtering.py +113 -0
- warp/examples/tile/example_tile_matmul.py +85 -0
- warp/examples/tile/example_tile_mcgp.py +191 -0
- warp/examples/tile/example_tile_mlp.py +385 -0
- warp/examples/tile/example_tile_nbody.py +199 -0
- warp/fabric.py +24 -0
- warp/fem/__init__.py +173 -0
- warp/fem/adaptivity.py +26 -0
- warp/fem/cache.py +30 -0
- warp/fem/dirichlet.py +24 -0
- warp/fem/field/__init__.py +24 -0
- warp/fem/field/field.py +26 -0
- warp/fem/geometry/__init__.py +21 -0
- warp/fem/geometry/closest_point.py +31 -0
- warp/fem/linalg.py +38 -0
- warp/fem/operator.py +32 -0
- warp/fem/polynomial.py +29 -0
- warp/fem/space/__init__.py +22 -0
- warp/fem/space/basis_space.py +24 -0
- warp/fem/space/shape/__init__.py +68 -0
- warp/fem/space/topology.py +24 -0
- warp/fem/types.py +24 -0
- warp/fem/utils.py +32 -0
- warp/jax.py +29 -0
- warp/jax_experimental/__init__.py +29 -0
- warp/jax_experimental/custom_call.py +29 -0
- warp/jax_experimental/ffi.py +39 -0
- warp/jax_experimental/xla_ffi.py +24 -0
- warp/marching_cubes.py +24 -0
- warp/math.py +37 -0
- warp/native/array.h +1687 -0
- warp/native/builtin.h +2327 -0
- warp/native/bvh.cpp +562 -0
- warp/native/bvh.cu +826 -0
- warp/native/bvh.h +555 -0
- warp/native/clang/clang.cpp +541 -0
- warp/native/coloring.cpp +622 -0
- warp/native/crt.cpp +51 -0
- warp/native/crt.h +568 -0
- warp/native/cuda_crt.h +1058 -0
- warp/native/cuda_util.cpp +677 -0
- warp/native/cuda_util.h +313 -0
- warp/native/error.cpp +77 -0
- warp/native/error.h +36 -0
- warp/native/exports.h +2023 -0
- warp/native/fabric.h +246 -0
- warp/native/hashgrid.cpp +311 -0
- warp/native/hashgrid.cu +89 -0
- warp/native/hashgrid.h +240 -0
- warp/native/initializer_array.h +41 -0
- warp/native/intersect.h +1253 -0
- warp/native/intersect_adj.h +375 -0
- warp/native/intersect_tri.h +348 -0
- warp/native/mat.h +5189 -0
- warp/native/mathdx.cpp +93 -0
- warp/native/matnn.h +221 -0
- warp/native/mesh.cpp +266 -0
- warp/native/mesh.cu +406 -0
- warp/native/mesh.h +2097 -0
- warp/native/nanovdb/GridHandle.h +533 -0
- warp/native/nanovdb/HostBuffer.h +591 -0
- warp/native/nanovdb/NanoVDB.h +6246 -0
- warp/native/nanovdb/NodeManager.h +323 -0
- warp/native/nanovdb/PNanoVDB.h +3390 -0
- warp/native/noise.h +859 -0
- warp/native/quat.h +1664 -0
- warp/native/rand.h +342 -0
- warp/native/range.h +145 -0
- warp/native/reduce.cpp +174 -0
- warp/native/reduce.cu +363 -0
- warp/native/runlength_encode.cpp +79 -0
- warp/native/runlength_encode.cu +61 -0
- warp/native/scan.cpp +47 -0
- warp/native/scan.cu +55 -0
- warp/native/scan.h +23 -0
- warp/native/solid_angle.h +466 -0
- warp/native/sort.cpp +251 -0
- warp/native/sort.cu +286 -0
- warp/native/sort.h +35 -0
- warp/native/sparse.cpp +241 -0
- warp/native/sparse.cu +435 -0
- warp/native/spatial.h +1306 -0
- warp/native/svd.h +727 -0
- warp/native/temp_buffer.h +46 -0
- warp/native/tile.h +4124 -0
- warp/native/tile_radix_sort.h +1112 -0
- warp/native/tile_reduce.h +838 -0
- warp/native/tile_scan.h +240 -0
- warp/native/tuple.h +189 -0
- warp/native/vec.h +2199 -0
- warp/native/version.h +23 -0
- warp/native/volume.cpp +501 -0
- warp/native/volume.cu +68 -0
- warp/native/volume.h +970 -0
- warp/native/volume_builder.cu +483 -0
- warp/native/volume_builder.h +52 -0
- warp/native/volume_impl.h +70 -0
- warp/native/warp.cpp +1143 -0
- warp/native/warp.cu +4604 -0
- warp/native/warp.h +358 -0
- warp/optim/__init__.py +20 -0
- warp/optim/adam.py +24 -0
- warp/optim/linear.py +35 -0
- warp/optim/sgd.py +24 -0
- warp/paddle.py +24 -0
- warp/py.typed +0 -0
- warp/render/__init__.py +22 -0
- warp/render/imgui_manager.py +29 -0
- warp/render/render_opengl.py +24 -0
- warp/render/render_usd.py +24 -0
- warp/render/utils.py +24 -0
- warp/sparse.py +51 -0
- warp/tape.py +24 -0
- warp/tests/__init__.py +1 -0
- warp/tests/__main__.py +4 -0
- warp/tests/assets/curlnoise_golden.npy +0 -0
- warp/tests/assets/mlp_golden.npy +0 -0
- warp/tests/assets/pixel.npy +0 -0
- warp/tests/assets/pnoise_golden.npy +0 -0
- warp/tests/assets/spiky.usd +0 -0
- warp/tests/assets/test_grid.nvdb +0 -0
- warp/tests/assets/test_index_grid.nvdb +0 -0
- warp/tests/assets/test_int32_grid.nvdb +0 -0
- warp/tests/assets/test_vec_grid.nvdb +0 -0
- warp/tests/assets/torus.nvdb +0 -0
- warp/tests/assets/torus.usda +105 -0
- warp/tests/aux_test_class_kernel.py +34 -0
- warp/tests/aux_test_compile_consts_dummy.py +18 -0
- warp/tests/aux_test_conditional_unequal_types_kernels.py +29 -0
- warp/tests/aux_test_dependent.py +29 -0
- warp/tests/aux_test_grad_customs.py +29 -0
- warp/tests/aux_test_instancing_gc.py +26 -0
- warp/tests/aux_test_module_aot.py +7 -0
- warp/tests/aux_test_module_unload.py +23 -0
- warp/tests/aux_test_name_clash1.py +40 -0
- warp/tests/aux_test_name_clash2.py +40 -0
- warp/tests/aux_test_reference.py +9 -0
- warp/tests/aux_test_reference_reference.py +8 -0
- warp/tests/aux_test_square.py +16 -0
- warp/tests/aux_test_unresolved_func.py +22 -0
- warp/tests/aux_test_unresolved_symbol.py +22 -0
- warp/tests/cuda/__init__.py +0 -0
- warp/tests/cuda/test_async.py +676 -0
- warp/tests/cuda/test_conditional_captures.py +1147 -0
- warp/tests/cuda/test_ipc.py +124 -0
- warp/tests/cuda/test_mempool.py +233 -0
- warp/tests/cuda/test_multigpu.py +169 -0
- warp/tests/cuda/test_peer.py +139 -0
- warp/tests/cuda/test_pinned.py +84 -0
- warp/tests/cuda/test_streams.py +691 -0
- warp/tests/geometry/__init__.py +0 -0
- warp/tests/geometry/test_bvh.py +335 -0
- warp/tests/geometry/test_hash_grid.py +259 -0
- warp/tests/geometry/test_marching_cubes.py +294 -0
- warp/tests/geometry/test_mesh.py +318 -0
- warp/tests/geometry/test_mesh_query_aabb.py +392 -0
- warp/tests/geometry/test_mesh_query_point.py +935 -0
- warp/tests/geometry/test_mesh_query_ray.py +323 -0
- warp/tests/geometry/test_volume.py +1103 -0
- warp/tests/geometry/test_volume_write.py +346 -0
- warp/tests/interop/__init__.py +0 -0
- warp/tests/interop/test_dlpack.py +730 -0
- warp/tests/interop/test_jax.py +1673 -0
- warp/tests/interop/test_paddle.py +800 -0
- warp/tests/interop/test_torch.py +1001 -0
- warp/tests/run_coverage_serial.py +39 -0
- warp/tests/test_adam.py +162 -0
- warp/tests/test_arithmetic.py +1096 -0
- warp/tests/test_array.py +3756 -0
- warp/tests/test_array_reduce.py +156 -0
- warp/tests/test_assert.py +303 -0
- warp/tests/test_atomic.py +336 -0
- warp/tests/test_atomic_bitwise.py +209 -0
- warp/tests/test_atomic_cas.py +312 -0
- warp/tests/test_bool.py +220 -0
- warp/tests/test_builtins_resolution.py +732 -0
- warp/tests/test_closest_point_edge_edge.py +327 -0
- warp/tests/test_codegen.py +974 -0
- warp/tests/test_codegen_instancing.py +1495 -0
- warp/tests/test_compile_consts.py +215 -0
- warp/tests/test_conditional.py +298 -0
- warp/tests/test_context.py +35 -0
- warp/tests/test_copy.py +319 -0
- warp/tests/test_ctypes.py +618 -0
- warp/tests/test_dense.py +73 -0
- warp/tests/test_devices.py +127 -0
- warp/tests/test_enum.py +136 -0
- warp/tests/test_examples.py +424 -0
- warp/tests/test_fabricarray.py +998 -0
- warp/tests/test_fast_math.py +72 -0
- warp/tests/test_fem.py +2204 -0
- warp/tests/test_fixedarray.py +229 -0
- warp/tests/test_fp16.py +136 -0
- warp/tests/test_func.py +501 -0
- warp/tests/test_future_annotations.py +100 -0
- warp/tests/test_generics.py +656 -0
- warp/tests/test_grad.py +893 -0
- warp/tests/test_grad_customs.py +339 -0
- warp/tests/test_grad_debug.py +341 -0
- warp/tests/test_implicit_init.py +411 -0
- warp/tests/test_import.py +45 -0
- warp/tests/test_indexedarray.py +1140 -0
- warp/tests/test_intersect.py +103 -0
- warp/tests/test_iter.py +76 -0
- warp/tests/test_large.py +177 -0
- warp/tests/test_launch.py +411 -0
- warp/tests/test_lerp.py +151 -0
- warp/tests/test_linear_solvers.py +223 -0
- warp/tests/test_lvalue.py +427 -0
- warp/tests/test_map.py +526 -0
- warp/tests/test_mat.py +3515 -0
- warp/tests/test_mat_assign_copy.py +178 -0
- warp/tests/test_mat_constructors.py +573 -0
- warp/tests/test_mat_lite.py +122 -0
- warp/tests/test_mat_scalar_ops.py +2913 -0
- warp/tests/test_math.py +212 -0
- warp/tests/test_module_aot.py +287 -0
- warp/tests/test_module_hashing.py +258 -0
- warp/tests/test_modules_lite.py +70 -0
- warp/tests/test_noise.py +252 -0
- warp/tests/test_operators.py +299 -0
- warp/tests/test_options.py +129 -0
- warp/tests/test_overwrite.py +551 -0
- warp/tests/test_print.py +408 -0
- warp/tests/test_quat.py +2653 -0
- warp/tests/test_quat_assign_copy.py +145 -0
- warp/tests/test_rand.py +339 -0
- warp/tests/test_reload.py +303 -0
- warp/tests/test_rounding.py +157 -0
- warp/tests/test_runlength_encode.py +196 -0
- warp/tests/test_scalar_ops.py +133 -0
- warp/tests/test_smoothstep.py +108 -0
- warp/tests/test_snippet.py +318 -0
- warp/tests/test_sparse.py +845 -0
- warp/tests/test_spatial.py +2859 -0
- warp/tests/test_spatial_assign_copy.py +160 -0
- warp/tests/test_special_values.py +361 -0
- warp/tests/test_static.py +640 -0
- warp/tests/test_struct.py +901 -0
- warp/tests/test_tape.py +242 -0
- warp/tests/test_transient_module.py +93 -0
- warp/tests/test_triangle_closest_point.py +192 -0
- warp/tests/test_tuple.py +361 -0
- warp/tests/test_types.py +615 -0
- warp/tests/test_utils.py +594 -0
- warp/tests/test_vec.py +1408 -0
- warp/tests/test_vec_assign_copy.py +143 -0
- warp/tests/test_vec_constructors.py +325 -0
- warp/tests/test_vec_lite.py +80 -0
- warp/tests/test_vec_scalar_ops.py +2327 -0
- warp/tests/test_verify_fp.py +100 -0
- warp/tests/test_version.py +75 -0
- warp/tests/tile/__init__.py +0 -0
- warp/tests/tile/test_tile.py +1519 -0
- warp/tests/tile/test_tile_atomic_bitwise.py +403 -0
- warp/tests/tile/test_tile_cholesky.py +608 -0
- warp/tests/tile/test_tile_load.py +724 -0
- warp/tests/tile/test_tile_mathdx.py +156 -0
- warp/tests/tile/test_tile_matmul.py +179 -0
- warp/tests/tile/test_tile_mlp.py +400 -0
- warp/tests/tile/test_tile_reduce.py +950 -0
- warp/tests/tile/test_tile_shared_memory.py +376 -0
- warp/tests/tile/test_tile_sort.py +121 -0
- warp/tests/tile/test_tile_view.py +173 -0
- warp/tests/unittest_serial.py +47 -0
- warp/tests/unittest_suites.py +430 -0
- warp/tests/unittest_utils.py +469 -0
- warp/tests/walkthrough_debug.py +95 -0
- warp/torch.py +24 -0
- warp/types.py +51 -0
- warp/utils.py +31 -0
- warp_lang-1.10.0.dist-info/METADATA +459 -0
- warp_lang-1.10.0.dist-info/RECORD +468 -0
- warp_lang-1.10.0.dist-info/WHEEL +5 -0
- warp_lang-1.10.0.dist-info/licenses/LICENSE.md +176 -0
- warp_lang-1.10.0.dist-info/licenses/licenses/Gaia-LICENSE.txt +6 -0
- warp_lang-1.10.0.dist-info/licenses/licenses/appdirs-LICENSE.txt +22 -0
- warp_lang-1.10.0.dist-info/licenses/licenses/asset_pixel_jpg-LICENSE.txt +3 -0
- warp_lang-1.10.0.dist-info/licenses/licenses/cuda-LICENSE.txt +1582 -0
- warp_lang-1.10.0.dist-info/licenses/licenses/dlpack-LICENSE.txt +201 -0
- warp_lang-1.10.0.dist-info/licenses/licenses/fp16-LICENSE.txt +28 -0
- warp_lang-1.10.0.dist-info/licenses/licenses/libmathdx-LICENSE.txt +220 -0
- warp_lang-1.10.0.dist-info/licenses/licenses/llvm-LICENSE.txt +279 -0
- warp_lang-1.10.0.dist-info/licenses/licenses/moller-LICENSE.txt +16 -0
- warp_lang-1.10.0.dist-info/licenses/licenses/nanovdb-LICENSE.txt +2 -0
- warp_lang-1.10.0.dist-info/licenses/licenses/nvrtc-LICENSE.txt +1592 -0
- warp_lang-1.10.0.dist-info/licenses/licenses/svd-LICENSE.txt +23 -0
- warp_lang-1.10.0.dist-info/licenses/licenses/unittest_parallel-LICENSE.txt +21 -0
- warp_lang-1.10.0.dist-info/licenses/licenses/usd-LICENSE.txt +213 -0
- warp_lang-1.10.0.dist-info/licenses/licenses/windingnumber-LICENSE.txt +21 -0
- warp_lang-1.10.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
|
2
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
|
|
16
|
+
import math
|
|
17
|
+
from enum import Enum
|
|
18
|
+
from typing import Any
|
|
19
|
+
|
|
20
|
+
import warp as wp
|
|
21
|
+
from warp._src.types import type_size
|
|
22
|
+
|
|
23
|
+
_wp_module_name_ = "warp.fem.space.dof_mapper"
|
|
24
|
+
|
|
25
|
+
vec6 = wp.vec(length=6, dtype=wp.float32)
|
|
26
|
+
|
|
27
|
+
_SQRT_2 = wp.constant(math.sqrt(2.0))
|
|
28
|
+
_SQRT_3 = wp.constant(math.sqrt(3.0))
|
|
29
|
+
_SQRT_1_2 = wp.constant(math.sqrt(1.0 / 2.0))
|
|
30
|
+
_SQRT_1_3 = wp.constant(math.sqrt(1.0 / 3.0))
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
class DofMapper:
|
|
34
|
+
"""Base class from mapping node degrees of freedom to function values"""
|
|
35
|
+
|
|
36
|
+
value_dtype: type
|
|
37
|
+
dof_dtype: type
|
|
38
|
+
DOF_SIZE: int
|
|
39
|
+
|
|
40
|
+
@wp.func
|
|
41
|
+
def dof_to_value(dof: Any):
|
|
42
|
+
raise NotImplementedError
|
|
43
|
+
|
|
44
|
+
@wp.func
|
|
45
|
+
def value_to_dof(val: Any):
|
|
46
|
+
raise NotImplementedError
|
|
47
|
+
|
|
48
|
+
def __str__(self):
|
|
49
|
+
return f"{self.value_dtype.__name__}_{self.DOF_SIZE}"
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
class IdentityMapper(DofMapper):
|
|
53
|
+
"""Identity mapper"""
|
|
54
|
+
|
|
55
|
+
def __init__(self, dtype: type):
|
|
56
|
+
if dtype == float:
|
|
57
|
+
dtype = wp.float32
|
|
58
|
+
|
|
59
|
+
self.value_dtype = dtype
|
|
60
|
+
self.dof_dtype = dtype
|
|
61
|
+
|
|
62
|
+
size = type_size(dtype)
|
|
63
|
+
self.DOF_SIZE = wp.constant(size)
|
|
64
|
+
|
|
65
|
+
@wp.func
|
|
66
|
+
def dof_to_value(dof: Any):
|
|
67
|
+
return dof
|
|
68
|
+
|
|
69
|
+
@wp.func
|
|
70
|
+
def value_to_dof(val: Any):
|
|
71
|
+
return val
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
class SymmetricTensorMapper(DofMapper):
|
|
75
|
+
"""Orthonormal isomorphism from R^{n (n+1)} to nxn symmetric tensors,
|
|
76
|
+
using usual L2 norm for vectors and half Frobenius norm, (tau : tau)/2 for tensors.
|
|
77
|
+
"""
|
|
78
|
+
|
|
79
|
+
class Mapping(Enum):
|
|
80
|
+
VOIGT = 0
|
|
81
|
+
"""Voigt ordering of vector coefficients:
|
|
82
|
+
first the three diagonal terms, then off-diagonal coefficients"""
|
|
83
|
+
DB16 = 1
|
|
84
|
+
"""Ordering that also separates normal from tangential coefficients:
|
|
85
|
+
first trace, then other diagonal terms, then off-diagonal coefficients.
|
|
86
|
+
See [Daviet and Bertails-Descoubes 2016]"""
|
|
87
|
+
|
|
88
|
+
def __init__(self, dtype: type, mapping: Mapping = Mapping.VOIGT):
|
|
89
|
+
self.value_dtype = dtype
|
|
90
|
+
self.mapping = mapping
|
|
91
|
+
|
|
92
|
+
if dtype == wp.mat22:
|
|
93
|
+
self.dof_dtype = wp.vec3
|
|
94
|
+
self.DOF_SIZE = wp.constant(3)
|
|
95
|
+
if mapping == SymmetricTensorMapper.Mapping.VOIGT:
|
|
96
|
+
self.dof_to_value = SymmetricTensorMapper.dof_to_value_2d_voigt
|
|
97
|
+
self.value_to_dof = SymmetricTensorMapper.value_to_dof_2d_voigt
|
|
98
|
+
else:
|
|
99
|
+
self.dof_to_value = SymmetricTensorMapper.dof_to_value_2d
|
|
100
|
+
self.value_to_dof = SymmetricTensorMapper.value_to_dof_2d
|
|
101
|
+
elif dtype == wp.mat33:
|
|
102
|
+
self.dof_dtype = vec6
|
|
103
|
+
self.DOF_SIZE = wp.constant(6)
|
|
104
|
+
if mapping == SymmetricTensorMapper.Mapping.VOIGT:
|
|
105
|
+
self.dof_to_value = SymmetricTensorMapper.dof_to_value_3d_voigt
|
|
106
|
+
self.value_to_dof = SymmetricTensorMapper.value_to_dof_3d_voigt
|
|
107
|
+
else:
|
|
108
|
+
self.dof_to_value = SymmetricTensorMapper.dof_to_value_3d
|
|
109
|
+
self.value_to_dof = SymmetricTensorMapper.value_to_dof_3d
|
|
110
|
+
else:
|
|
111
|
+
raise ValueError("Unsupported value dtype: ", dtype)
|
|
112
|
+
|
|
113
|
+
def __str__(self):
|
|
114
|
+
return f"{self.mapping}_{self.DOF_SIZE}"
|
|
115
|
+
|
|
116
|
+
@wp.func
|
|
117
|
+
def dof_to_value_2d(dof: wp.vec3):
|
|
118
|
+
a = dof[0]
|
|
119
|
+
b = dof[1]
|
|
120
|
+
c = dof[2]
|
|
121
|
+
return wp.mat22(a + b, c, c, a - b)
|
|
122
|
+
|
|
123
|
+
@wp.func
|
|
124
|
+
def value_to_dof_2d(val: wp.mat22):
|
|
125
|
+
a = 0.5 * (val[0, 0] + val[1, 1])
|
|
126
|
+
b = 0.5 * (val[0, 0] - val[1, 1])
|
|
127
|
+
c = 0.5 * (val[0, 1] + val[1, 0])
|
|
128
|
+
return wp.vec3(a, b, c)
|
|
129
|
+
|
|
130
|
+
@wp.func
|
|
131
|
+
def dof_to_value_2d_voigt(dof: wp.vec3):
|
|
132
|
+
a = _SQRT_2 * dof[0]
|
|
133
|
+
b = _SQRT_2 * dof[1]
|
|
134
|
+
c = dof[2]
|
|
135
|
+
return wp.mat22(a, c, c, b)
|
|
136
|
+
|
|
137
|
+
@wp.func
|
|
138
|
+
def value_to_dof_2d_voigt(val: wp.mat22):
|
|
139
|
+
a = _SQRT_1_2 * val[0, 0]
|
|
140
|
+
b = _SQRT_1_2 * val[1, 1]
|
|
141
|
+
c = 0.5 * (val[0, 1] + val[1, 0])
|
|
142
|
+
return wp.vec3(a, b, c)
|
|
143
|
+
|
|
144
|
+
@wp.func
|
|
145
|
+
def dof_to_value_3d(dof: vec6):
|
|
146
|
+
a = dof[0] * _SQRT_2 * _SQRT_1_3
|
|
147
|
+
b = dof[1]
|
|
148
|
+
c = dof[2] * _SQRT_1_3
|
|
149
|
+
d = dof[3]
|
|
150
|
+
e = dof[4]
|
|
151
|
+
f = dof[5]
|
|
152
|
+
return wp.mat33(
|
|
153
|
+
a + b - c,
|
|
154
|
+
f,
|
|
155
|
+
e,
|
|
156
|
+
f,
|
|
157
|
+
a - b - c,
|
|
158
|
+
d,
|
|
159
|
+
e,
|
|
160
|
+
d,
|
|
161
|
+
a + 2.0 * c,
|
|
162
|
+
)
|
|
163
|
+
|
|
164
|
+
@wp.func
|
|
165
|
+
def value_to_dof_3d(val: wp.mat33):
|
|
166
|
+
a = (val[0, 0] + val[1, 1] + val[2, 2]) * _SQRT_1_3 * _SQRT_1_2
|
|
167
|
+
b = 0.5 * (val[0, 0] - val[1, 1])
|
|
168
|
+
c = 0.5 * (val[2, 2] - (val[0, 0] + val[1, 1] + val[2, 2]) / 3.0) * _SQRT_3
|
|
169
|
+
|
|
170
|
+
d = 0.5 * (val[2, 1] + val[1, 2])
|
|
171
|
+
e = 0.5 * (val[0, 2] + val[2, 0])
|
|
172
|
+
f = 0.5 * (val[1, 0] + val[0, 1])
|
|
173
|
+
|
|
174
|
+
return vec6(a, b, c, d, e, f)
|
|
175
|
+
|
|
176
|
+
@wp.func
|
|
177
|
+
def dof_to_value_3d_voigt(dof: vec6):
|
|
178
|
+
a = _SQRT_2 * dof[0]
|
|
179
|
+
b = _SQRT_2 * dof[1]
|
|
180
|
+
c = _SQRT_2 * dof[2]
|
|
181
|
+
d = dof[3]
|
|
182
|
+
e = dof[4]
|
|
183
|
+
f = dof[5]
|
|
184
|
+
return wp.mat33(
|
|
185
|
+
a,
|
|
186
|
+
f,
|
|
187
|
+
e,
|
|
188
|
+
f,
|
|
189
|
+
b,
|
|
190
|
+
d,
|
|
191
|
+
e,
|
|
192
|
+
d,
|
|
193
|
+
c,
|
|
194
|
+
)
|
|
195
|
+
|
|
196
|
+
@wp.func
|
|
197
|
+
def value_to_dof_3d_voigt(val: wp.mat33):
|
|
198
|
+
a = _SQRT_1_2 * val[0, 0]
|
|
199
|
+
b = _SQRT_1_2 * val[1, 1]
|
|
200
|
+
c = _SQRT_1_2 * val[2, 2]
|
|
201
|
+
|
|
202
|
+
d = 0.5 * (val[2, 1] + val[1, 2])
|
|
203
|
+
e = 0.5 * (val[0, 2] + val[2, 0])
|
|
204
|
+
f = 0.5 * (val[1, 0] + val[0, 1])
|
|
205
|
+
|
|
206
|
+
return vec6(a, b, c, d, e, f)
|
|
207
|
+
|
|
208
|
+
|
|
209
|
+
class SkewSymmetricTensorMapper(DofMapper):
|
|
210
|
+
"""Orthonormal isomorphism from R^{n (n-1)} to nxn skew-symmetric tensors,
|
|
211
|
+
using usual L2 norm for vectors and half Frobenius norm, (tau : tau)/2 for tensors.
|
|
212
|
+
"""
|
|
213
|
+
|
|
214
|
+
def __init__(self, dtype: type):
|
|
215
|
+
self.value_dtype = dtype
|
|
216
|
+
|
|
217
|
+
if dtype == wp.mat22:
|
|
218
|
+
self.dof_dtype = float
|
|
219
|
+
self.DOF_SIZE = wp.constant(1)
|
|
220
|
+
self.dof_to_value = SkewSymmetricTensorMapper.dof_to_value_2d
|
|
221
|
+
self.value_to_dof = SkewSymmetricTensorMapper.value_to_dof_2d
|
|
222
|
+
elif dtype == wp.mat33:
|
|
223
|
+
self.dof_dtype = wp.vec3
|
|
224
|
+
self.DOF_SIZE = wp.constant(3)
|
|
225
|
+
self.dof_to_value = SkewSymmetricTensorMapper.dof_to_value_3d
|
|
226
|
+
self.value_to_dof = SkewSymmetricTensorMapper.value_to_dof_3d
|
|
227
|
+
else:
|
|
228
|
+
raise ValueError("Unsupported value dtype: ", dtype)
|
|
229
|
+
|
|
230
|
+
def __str__(self):
|
|
231
|
+
return f"{self.__class__.__name__}_{self.DOF_SIZE}"
|
|
232
|
+
|
|
233
|
+
@wp.func
|
|
234
|
+
def dof_to_value_2d(dof: float):
|
|
235
|
+
return wp.mat22(0.0, -dof, dof, 0.0)
|
|
236
|
+
|
|
237
|
+
@wp.func
|
|
238
|
+
def value_to_dof_2d(val: wp.mat22):
|
|
239
|
+
return 0.5 * (val[1, 0] - val[0, 1])
|
|
240
|
+
|
|
241
|
+
@wp.func
|
|
242
|
+
def dof_to_value_3d(dof: wp.vec3):
|
|
243
|
+
a = dof[0]
|
|
244
|
+
b = dof[1]
|
|
245
|
+
c = dof[2]
|
|
246
|
+
return wp.mat33(0.0, -c, b, c, 0.0, -a, -b, a, 0.0)
|
|
247
|
+
|
|
248
|
+
@wp.func
|
|
249
|
+
def value_to_dof_3d(val: wp.mat33):
|
|
250
|
+
a = 0.5 * (val[2, 1] - val[1, 2])
|
|
251
|
+
b = 0.5 * (val[0, 2] - val[2, 0])
|
|
252
|
+
c = 0.5 * (val[1, 0] - val[0, 1])
|
|
253
|
+
return wp.vec3(a, b, c)
|
|
@@ -0,0 +1,312 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
|
|
2
|
+
# SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
|
|
16
|
+
from typing import Any
|
|
17
|
+
|
|
18
|
+
from warp._src.codegen import Struct, StructInstance
|
|
19
|
+
from warp._src.fem import cache
|
|
20
|
+
from warp._src.fem.geometry import Geometry
|
|
21
|
+
from warp._src.fem.types import Coords, ElementIndex, ElementKind, Sample, make_free_sample
|
|
22
|
+
from warp._src.types import type_is_matrix, type_is_vector, type_size
|
|
23
|
+
|
|
24
|
+
from .topology import SpaceTopology
|
|
25
|
+
|
|
26
|
+
_wp_module_name_ = "warp.fem.space.function_space"
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
class FunctionSpace:
|
|
30
|
+
"""
|
|
31
|
+
Interface class for function spaces, i.e. geometry + interpolation basis
|
|
32
|
+
|
|
33
|
+
The value of a function `f` at a position `x` is generally computed as
|
|
34
|
+
``f(x) = L(x)[sum_i f_i N_i(x)]``
|
|
35
|
+
with:
|
|
36
|
+
- ``f_i`` the value of the ith node's degrees-of-freedom (dof)
|
|
37
|
+
- ``N_i(x)`` the weight associated to the node at `x`
|
|
38
|
+
- ``L(x)`` local linear transformation from node-space to world-space
|
|
39
|
+
"""
|
|
40
|
+
|
|
41
|
+
dtype: type
|
|
42
|
+
"""Value type of the interpolation functions"""
|
|
43
|
+
|
|
44
|
+
dof_dtype: type
|
|
45
|
+
"""Data type of the degrees of freedom of each node"""
|
|
46
|
+
|
|
47
|
+
SpaceArg: Struct
|
|
48
|
+
"""Structure containing arguments to be passed to device function"""
|
|
49
|
+
|
|
50
|
+
LocalValueMap: type
|
|
51
|
+
"""Type of the local map for transforming vector-valued functions from reference to world space"""
|
|
52
|
+
|
|
53
|
+
VALUE_DOF_COUNT: int
|
|
54
|
+
"""Number of degrees of freedom per value, as a Warp constant"""
|
|
55
|
+
|
|
56
|
+
NODE_DOF_COUNT: int
|
|
57
|
+
"""Number of degrees of freedom per node, as a Warp constant"""
|
|
58
|
+
|
|
59
|
+
ORDER: int
|
|
60
|
+
"""Polynomial degree of the function space, used to determine integration order"""
|
|
61
|
+
|
|
62
|
+
def __init__(self, topology: SpaceTopology):
|
|
63
|
+
self._topology = topology
|
|
64
|
+
self.ElementArg = self.topology.ElementArg
|
|
65
|
+
|
|
66
|
+
if self._topology.is_trace:
|
|
67
|
+
self.element_inner_reference_gradient_transform = self.geometry.side_inner_inverse_deformation_gradient
|
|
68
|
+
self.element_outer_reference_gradient_transform = self.geometry.side_outer_inverse_deformation_gradient
|
|
69
|
+
else:
|
|
70
|
+
self.element_inner_reference_gradient_transform = self.geometry.cell_inverse_deformation_gradient
|
|
71
|
+
self.element_outer_reference_gradient_transform = self.geometry.cell_inverse_deformation_gradient
|
|
72
|
+
|
|
73
|
+
def node_count(self) -> int:
|
|
74
|
+
"""Number of nodes in the interpolation basis"""
|
|
75
|
+
return self.topology.node_count()
|
|
76
|
+
|
|
77
|
+
def space_arg_value(self, device) -> StructInstance:
|
|
78
|
+
"""Value of the arguments to be passed to device functions"""
|
|
79
|
+
raise NotImplementedError
|
|
80
|
+
|
|
81
|
+
@property
|
|
82
|
+
def topology(self) -> SpaceTopology:
|
|
83
|
+
"""Underlying geometry"""
|
|
84
|
+
return self._topology
|
|
85
|
+
|
|
86
|
+
@property
|
|
87
|
+
def geometry(self) -> Geometry:
|
|
88
|
+
"""Underlying geometry"""
|
|
89
|
+
return self.topology.geometry
|
|
90
|
+
|
|
91
|
+
@property
|
|
92
|
+
def element_kind(self) -> ElementKind:
|
|
93
|
+
"""Kind of element the function space is expressed over"""
|
|
94
|
+
return ElementKind.CELL if self.dimension == self.geometry.dimension else ElementKind.SIDE
|
|
95
|
+
|
|
96
|
+
@property
|
|
97
|
+
def dimension(self) -> int:
|
|
98
|
+
"""Function space embedding dimension"""
|
|
99
|
+
return self.topology.dimension
|
|
100
|
+
|
|
101
|
+
@property
|
|
102
|
+
def degree(self) -> int:
|
|
103
|
+
"""Maximum polynomial degree of the underlying basis"""
|
|
104
|
+
return self.ORDER
|
|
105
|
+
|
|
106
|
+
@property
|
|
107
|
+
def name(self):
|
|
108
|
+
raise NotImplementedError
|
|
109
|
+
|
|
110
|
+
def __str__(self):
|
|
111
|
+
return self.name
|
|
112
|
+
|
|
113
|
+
def trace(self) -> "FunctionSpace":
|
|
114
|
+
"""Trace of the function space over lower-dimensional elements of the geometry"""
|
|
115
|
+
raise NotImplementedError
|
|
116
|
+
|
|
117
|
+
def make_field(self, space_partition=None):
|
|
118
|
+
"""Creates a zero-initialized discrete field over the function space holding values for all degrees of freedom of nodes in a space partition
|
|
119
|
+
|
|
120
|
+
Args:
|
|
121
|
+
space_partition: If provided, the subset of nodes to consider
|
|
122
|
+
|
|
123
|
+
See also: :func:`make_space_partition`
|
|
124
|
+
"""
|
|
125
|
+
raise NotImplementedError
|
|
126
|
+
|
|
127
|
+
def gradient_valid(self) -> bool:
|
|
128
|
+
"""Whether gradient operator can be computed. Only for scalar and vector fields as higher-order tensors are not supported yet"""
|
|
129
|
+
return not type_is_matrix(self.dtype)
|
|
130
|
+
|
|
131
|
+
def divergence_valid(self) -> bool:
|
|
132
|
+
"""Whether divergence of this field can be computed. Only for vector and tensor fields with same dimension as embedding geometry"""
|
|
133
|
+
if type_is_vector(self.dtype):
|
|
134
|
+
return type_size(self.dtype) == self.geometry.dimension
|
|
135
|
+
if type_is_matrix(self.dtype):
|
|
136
|
+
return self.dtype._shape_[0] == self.geometry.dimension
|
|
137
|
+
return False
|
|
138
|
+
|
|
139
|
+
@staticmethod
|
|
140
|
+
def node_basis_element(dof_coord: int):
|
|
141
|
+
"""Basis element for node degrees of freedom.
|
|
142
|
+
|
|
143
|
+
Assumes 0 <= dof_coord < NODE_DOF_COUNT
|
|
144
|
+
"""
|
|
145
|
+
raise NotImplementedError
|
|
146
|
+
|
|
147
|
+
@staticmethod
|
|
148
|
+
def value_basis_element(dof_coord: int):
|
|
149
|
+
"""Basis element for the function space values
|
|
150
|
+
|
|
151
|
+
Assumes 0 <= dof_coord < VALUE_DOF_COUNT
|
|
152
|
+
"""
|
|
153
|
+
raise NotImplementedError
|
|
154
|
+
|
|
155
|
+
@staticmethod
|
|
156
|
+
def local_value_map_inner(
|
|
157
|
+
elt_arg: "SpaceTopology.ElementArg",
|
|
158
|
+
element_index: ElementIndex,
|
|
159
|
+
coords: Coords,
|
|
160
|
+
):
|
|
161
|
+
"""Builds the local value map transforming from node to world space"""
|
|
162
|
+
raise NotImplementedError
|
|
163
|
+
|
|
164
|
+
@staticmethod
|
|
165
|
+
def local_value_map_outer(
|
|
166
|
+
elt_arg: "SpaceTopology.ElementArg",
|
|
167
|
+
element_index: ElementIndex,
|
|
168
|
+
coords: Coords,
|
|
169
|
+
):
|
|
170
|
+
"""Builds the local value map transforming vector-valued from node to world space"""
|
|
171
|
+
raise NotImplementedError
|
|
172
|
+
|
|
173
|
+
@staticmethod
|
|
174
|
+
def node_coords_in_element(
|
|
175
|
+
elt_arg: "SpaceTopology.ElementArg",
|
|
176
|
+
space_arg: "SpaceArg", # noqa: F821
|
|
177
|
+
element_index: ElementIndex,
|
|
178
|
+
node_index_in_elt: int,
|
|
179
|
+
):
|
|
180
|
+
"""Coordinates inside element of a given node"""
|
|
181
|
+
raise NotImplementedError
|
|
182
|
+
|
|
183
|
+
@staticmethod
|
|
184
|
+
def node_quadrature_weight(
|
|
185
|
+
elt_arg: "SpaceTopology.ElementArg",
|
|
186
|
+
space_arg: "SpaceArg", # noqa: F821
|
|
187
|
+
element_index: ElementIndex,
|
|
188
|
+
node_index_in_elt: int,
|
|
189
|
+
):
|
|
190
|
+
"""Weight of a given node when used as a quadrature point"""
|
|
191
|
+
raise NotImplementedError
|
|
192
|
+
|
|
193
|
+
@staticmethod
|
|
194
|
+
def element_inner_weight(
|
|
195
|
+
elt_arg: "SpaceTopology.ElementArg",
|
|
196
|
+
space_arg: "SpaceArg", # noqa: F821
|
|
197
|
+
element_index: ElementIndex,
|
|
198
|
+
coords: Coords,
|
|
199
|
+
node_index_in_elt: int,
|
|
200
|
+
):
|
|
201
|
+
"""Inner weight for a node at given coordinates"""
|
|
202
|
+
raise NotImplementedError
|
|
203
|
+
|
|
204
|
+
@staticmethod
|
|
205
|
+
def element_inner_weight_gradient(
|
|
206
|
+
elt_arg: "SpaceTopology.ElementArg",
|
|
207
|
+
space_arg: "SpaceArg", # noqa: F821
|
|
208
|
+
element_index: ElementIndex,
|
|
209
|
+
coords: Coords,
|
|
210
|
+
node_index_in_elt: int,
|
|
211
|
+
):
|
|
212
|
+
"""Inner weight gradient w.r.t. reference space for a node at given coordinates"""
|
|
213
|
+
raise NotImplementedError
|
|
214
|
+
|
|
215
|
+
@staticmethod
|
|
216
|
+
def element_outer_weight(
|
|
217
|
+
elt_arg: "SpaceTopology.ElementArg",
|
|
218
|
+
space_arg: "SpaceArg", # noqa: F821
|
|
219
|
+
element_index: ElementIndex,
|
|
220
|
+
coords: Coords,
|
|
221
|
+
node_index_in_elt: int,
|
|
222
|
+
):
|
|
223
|
+
"""Outer weight for a node at given coordinates"""
|
|
224
|
+
raise NotImplementedError
|
|
225
|
+
|
|
226
|
+
@staticmethod
|
|
227
|
+
def element_outer_weight_gradient(
|
|
228
|
+
elt_arg: "SpaceTopology.ElementArg",
|
|
229
|
+
space_arg: "SpaceArg", # noqa: F821
|
|
230
|
+
element_index: ElementIndex,
|
|
231
|
+
coords: Coords,
|
|
232
|
+
node_index_in_elt: int,
|
|
233
|
+
):
|
|
234
|
+
"""Outer weight gradient w.r.t reference space for a node at given coordinates"""
|
|
235
|
+
raise NotImplementedError
|
|
236
|
+
|
|
237
|
+
def space_value(
|
|
238
|
+
dof_value: "FunctionSpace.dof_dtype",
|
|
239
|
+
node_weight: Any,
|
|
240
|
+
local_value_map: "FunctionSpace.LocalValueMap",
|
|
241
|
+
):
|
|
242
|
+
"""
|
|
243
|
+
Assembles the world-space value of the function space
|
|
244
|
+
Args:
|
|
245
|
+
- dof_value: node value in the degrees-of-freedom basis
|
|
246
|
+
- node_weight: weight associated to the node, as given per `element_(inn|out)er_weight`
|
|
247
|
+
- local_value_map: local transformation from node space to world space, as given per `local_map_value_(inn|out)er`
|
|
248
|
+
"""
|
|
249
|
+
raise NotImplementedError
|
|
250
|
+
|
|
251
|
+
def space_gradient(
|
|
252
|
+
dof_value: "FunctionSpace.dof_dtype",
|
|
253
|
+
node_weight: Any,
|
|
254
|
+
local_value_map: "FunctionSpace.LocalValueMap",
|
|
255
|
+
grad_transform: Any,
|
|
256
|
+
):
|
|
257
|
+
"""
|
|
258
|
+
Assembles the world-space gradient of the function space
|
|
259
|
+
Args:
|
|
260
|
+
- dof_value: node value in the degrees-of-freedom basis
|
|
261
|
+
- node_weight_gradient: gradient of the weight associated to the node, as given per `element_(inn|out)er_weight_gradient`
|
|
262
|
+
- local_value_map: local transformation from node space to world space, as given per `local_map_value_(inn|out)er`
|
|
263
|
+
- grad_transform: transform mapping the reference-space gradient to world-space gradient (inverse deformation gradient)
|
|
264
|
+
"""
|
|
265
|
+
raise NotImplementedError
|
|
266
|
+
|
|
267
|
+
def space_divergence(
|
|
268
|
+
dof_value: "FunctionSpace.dof_dtype",
|
|
269
|
+
node_weight: Any,
|
|
270
|
+
local_value_map: "FunctionSpace.LocalValueMap",
|
|
271
|
+
grad_transform: Any,
|
|
272
|
+
):
|
|
273
|
+
""" "
|
|
274
|
+
Assembles the world-space divergence of the function space
|
|
275
|
+
Args:
|
|
276
|
+
- dof_value: node value in the degrees-of-freedom basis
|
|
277
|
+
- node_weight_gradient: gradient of the weight associated to the node, as given per `element_(inn|out)er_weight_gradient`
|
|
278
|
+
- local_value_map: local transformation from node space to world space, as given per `local_map_value_(inn|out)er`
|
|
279
|
+
- grad_transform: transform mapping the reference-space gradient to world-space gradient (inverse deformation gradient)
|
|
280
|
+
"""
|
|
281
|
+
raise NotImplementedError
|
|
282
|
+
|
|
283
|
+
@staticmethod
|
|
284
|
+
def node_dof_value(
|
|
285
|
+
elt_arg: "FunctionSpace.ElementArg",
|
|
286
|
+
space_arg: "FunctionSpace.SpaceArg",
|
|
287
|
+
element_index: ElementIndex,
|
|
288
|
+
node_index_in_elt: int,
|
|
289
|
+
space_value: "FunctionSpace.dtype",
|
|
290
|
+
):
|
|
291
|
+
"""Converts space value to node degrees of freedom"""
|
|
292
|
+
raise NotImplementedError
|
|
293
|
+
|
|
294
|
+
def _make_side_inner_inverse_deformation_gradient(self):
|
|
295
|
+
@cache.dynamic_func(suffix=self.name)
|
|
296
|
+
def side_inner_inverse_deformation_gradient(args: self.ElementArg, s: Sample):
|
|
297
|
+
cell_index = self.side_inner_cell_index(args, s.element_index)
|
|
298
|
+
cell_coords = self.side_inner_cell_coords(args, s.element_index, s.element_coords)
|
|
299
|
+
cell_arg = self.side_to_cell_arg(args)
|
|
300
|
+
return self.geometry.cell_inverse_deformation_gradient(cell_arg, make_free_sample(cell_index, cell_coords))
|
|
301
|
+
|
|
302
|
+
return side_inner_inverse_deformation_gradient
|
|
303
|
+
|
|
304
|
+
def _make_side_outer_inverse_deformation_gradient(self):
|
|
305
|
+
@cache.dynamic_func(suffix=self.name)
|
|
306
|
+
def side_outer_inverse_deformation_gradient(args: self.ElementArg, s: Sample):
|
|
307
|
+
cell_index = self.side_outer_cell_index(args, s.element_index)
|
|
308
|
+
cell_coords = self.side_outer_cell_coords(args, s.element_index, s.element_coords)
|
|
309
|
+
cell_arg = self.side_to_cell_arg(args)
|
|
310
|
+
return self.geometry.cell_inverse_deformation_gradient(cell_arg, make_free_sample(cell_index, cell_coords))
|
|
311
|
+
|
|
312
|
+
return side_outer_inverse_deformation_gradient
|