warp-lang 1.6.1__py3-none-macosx_10_13_universal2.whl → 1.7.0__py3-none-macosx_10_13_universal2.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 +21 -7
- warp/autograd.py +14 -6
- warp/bin/libwarp-clang.dylib +0 -0
- warp/bin/libwarp.dylib +0 -0
- warp/build.py +424 -6
- warp/build_dll.py +20 -20
- warp/builtins.py +467 -368
- warp/codegen.py +193 -125
- warp/config.py +56 -12
- warp/constants.py +14 -6
- warp/context.py +524 -277
- warp/dlpack.py +22 -12
- warp/examples/__init__.py +14 -6
- warp/examples/assets/nonuniform.usd +0 -0
- warp/examples/assets/nvidia_logo.png +0 -0
- warp/examples/benchmarks/benchmark_api.py +14 -6
- warp/examples/benchmarks/benchmark_cloth.py +14 -6
- warp/examples/benchmarks/benchmark_cloth_cupy.py +14 -6
- warp/examples/benchmarks/benchmark_cloth_jax.py +14 -6
- warp/examples/benchmarks/benchmark_cloth_numba.py +15 -0
- warp/examples/benchmarks/benchmark_cloth_numpy.py +14 -6
- warp/examples/benchmarks/benchmark_cloth_paddle.py +14 -6
- warp/examples/benchmarks/benchmark_cloth_pytorch.py +14 -6
- warp/examples/benchmarks/benchmark_cloth_taichi.py +14 -6
- warp/examples/benchmarks/benchmark_cloth_warp.py +14 -6
- warp/examples/benchmarks/benchmark_gemm.py +82 -48
- warp/examples/benchmarks/benchmark_interop_paddle.py +14 -6
- warp/examples/benchmarks/benchmark_interop_torch.py +14 -6
- warp/examples/benchmarks/benchmark_launches.py +14 -6
- warp/examples/benchmarks/benchmark_tile_load_store.py +103 -0
- warp/examples/browse.py +14 -6
- warp/examples/core/example_cupy.py +14 -6
- warp/examples/core/example_dem.py +14 -6
- warp/examples/core/example_fluid.py +14 -6
- warp/examples/core/example_graph_capture.py +14 -6
- warp/examples/core/example_marching_cubes.py +14 -6
- warp/examples/core/example_mesh.py +14 -6
- warp/examples/core/example_mesh_intersect.py +14 -6
- warp/examples/core/example_nvdb.py +14 -6
- warp/examples/core/example_raycast.py +14 -6
- warp/examples/core/example_raymarch.py +14 -6
- warp/examples/core/example_render_opengl.py +14 -6
- warp/examples/core/example_sample_mesh.py +300 -0
- warp/examples/core/example_sph.py +14 -6
- warp/examples/core/example_torch.py +14 -6
- warp/examples/core/example_wave.py +14 -6
- warp/examples/fem/example_adaptive_grid.py +14 -6
- warp/examples/fem/example_apic_fluid.py +15 -7
- warp/examples/fem/example_burgers.py +16 -8
- warp/examples/fem/example_convection_diffusion.py +14 -6
- warp/examples/fem/example_convection_diffusion_dg.py +14 -6
- warp/examples/fem/example_deformed_geometry.py +15 -7
- warp/examples/fem/example_diffusion.py +14 -6
- warp/examples/fem/example_diffusion_3d.py +14 -6
- warp/examples/fem/example_diffusion_mgpu.py +14 -6
- warp/examples/fem/example_distortion_energy.py +15 -7
- warp/examples/fem/example_magnetostatics.py +20 -12
- warp/examples/fem/example_mixed_elasticity.py +14 -6
- warp/examples/fem/example_navier_stokes.py +14 -6
- warp/examples/fem/example_nonconforming_contact.py +14 -6
- warp/examples/fem/example_stokes.py +14 -6
- warp/examples/fem/example_stokes_transfer.py +14 -6
- warp/examples/fem/example_streamlines.py +14 -6
- warp/examples/fem/utils.py +24 -3
- warp/examples/interop/example_jax_callable.py +116 -0
- warp/examples/interop/example_jax_ffi_callback.py +132 -0
- warp/examples/interop/example_jax_kernel.py +205 -0
- warp/examples/optim/example_bounce.py +14 -6
- warp/examples/optim/example_cloth_throw.py +14 -6
- warp/examples/optim/example_diffray.py +14 -6
- warp/examples/optim/example_drone.py +14 -6
- warp/examples/optim/example_fluid_checkpoint.py +497 -0
- warp/examples/optim/example_inverse_kinematics.py +14 -6
- warp/examples/optim/example_inverse_kinematics_torch.py +14 -6
- warp/examples/optim/example_softbody_properties.py +14 -6
- warp/examples/optim/example_spring_cage.py +14 -6
- warp/examples/optim/example_trajectory.py +14 -6
- warp/examples/sim/example_cartpole.py +14 -6
- warp/examples/sim/example_cloth.py +14 -6
- warp/examples/sim/example_cloth_self_contact.py +14 -6
- warp/examples/sim/example_granular.py +14 -6
- warp/examples/sim/example_granular_collision_sdf.py +14 -6
- warp/examples/sim/example_jacobian_ik.py +14 -6
- warp/examples/sim/example_particle_chain.py +14 -6
- warp/examples/sim/example_quadruped.py +14 -6
- warp/examples/sim/example_rigid_chain.py +14 -6
- warp/examples/sim/example_rigid_contact.py +14 -6
- warp/examples/sim/example_rigid_force.py +14 -6
- warp/examples/sim/example_rigid_gyroscopic.py +14 -6
- warp/examples/sim/example_rigid_soft_contact.py +14 -6
- warp/examples/sim/example_soft_body.py +14 -6
- warp/examples/tile/example_tile_cholesky.py +14 -6
- warp/examples/tile/example_tile_convolution.py +14 -6
- warp/examples/tile/example_tile_fft.py +14 -6
- warp/examples/tile/example_tile_filtering.py +14 -6
- warp/examples/tile/example_tile_matmul.py +16 -10
- warp/examples/tile/example_tile_mlp.py +14 -6
- warp/examples/tile/example_tile_nbody.py +14 -6
- warp/examples/tile/example_tile_walker.py +14 -6
- warp/fabric.py +15 -0
- warp/fem/__init__.py +26 -1
- warp/fem/adaptivity.py +19 -4
- warp/fem/cache.py +15 -0
- warp/fem/dirichlet.py +15 -0
- warp/fem/domain.py +15 -0
- warp/fem/field/__init__.py +15 -0
- warp/fem/field/field.py +15 -0
- warp/fem/field/nodal_field.py +37 -68
- warp/fem/field/restriction.py +15 -0
- warp/fem/field/virtual.py +77 -23
- warp/fem/geometry/__init__.py +15 -0
- warp/fem/geometry/adaptive_nanogrid.py +24 -10
- warp/fem/geometry/closest_point.py +16 -1
- warp/fem/geometry/deformed_geometry.py +20 -2
- warp/fem/geometry/element.py +15 -0
- warp/fem/geometry/geometry.py +20 -0
- warp/fem/geometry/grid_2d.py +27 -12
- warp/fem/geometry/grid_3d.py +27 -15
- warp/fem/geometry/hexmesh.py +20 -7
- warp/fem/geometry/nanogrid.py +24 -11
- warp/fem/geometry/partition.py +15 -0
- warp/fem/geometry/quadmesh.py +28 -13
- warp/fem/geometry/tetmesh.py +18 -4
- warp/fem/geometry/trimesh.py +18 -8
- warp/fem/integrate.py +277 -93
- warp/fem/linalg.py +20 -5
- warp/fem/operator.py +15 -0
- warp/fem/polynomial.py +15 -0
- warp/fem/quadrature/__init__.py +15 -0
- warp/fem/quadrature/pic_quadrature.py +52 -22
- warp/fem/quadrature/quadrature.py +209 -25
- warp/fem/space/__init__.py +16 -1
- warp/fem/space/basis_function_space.py +19 -2
- warp/fem/space/basis_space.py +40 -18
- warp/fem/space/dof_mapper.py +15 -0
- warp/fem/space/function_space.py +15 -0
- warp/fem/space/grid_2d_function_space.py +15 -0
- warp/fem/space/grid_3d_function_space.py +15 -0
- warp/fem/space/hexmesh_function_space.py +17 -2
- warp/fem/space/nanogrid_function_space.py +15 -0
- warp/fem/space/partition.py +21 -2
- warp/fem/space/quadmesh_function_space.py +23 -8
- warp/fem/space/restriction.py +15 -0
- warp/fem/space/shape/__init__.py +15 -0
- warp/fem/space/shape/cube_shape_function.py +38 -23
- warp/fem/space/shape/shape_function.py +15 -0
- warp/fem/space/shape/square_shape_function.py +27 -12
- warp/fem/space/shape/tet_shape_function.py +15 -0
- warp/fem/space/shape/triangle_shape_function.py +16 -1
- warp/fem/space/tetmesh_function_space.py +18 -3
- warp/fem/space/topology.py +15 -0
- warp/fem/space/trimesh_function_space.py +17 -2
- warp/fem/types.py +15 -0
- warp/fem/utils.py +27 -6
- warp/jax.py +28 -7
- warp/jax_experimental/__init__.py +16 -0
- warp/{jax_experimental.py → jax_experimental/custom_call.py} +28 -33
- warp/jax_experimental/ffi.py +698 -0
- warp/jax_experimental/xla_ffi.py +602 -0
- warp/math.py +103 -6
- warp/native/array.h +28 -6
- warp/native/builtin.h +44 -9
- warp/native/bvh.cpp +18 -7
- warp/native/bvh.cu +57 -20
- warp/native/bvh.h +17 -7
- warp/native/clang/clang.cpp +45 -9
- warp/native/coloring.cpp +15 -6
- warp/native/crt.cpp +15 -6
- warp/native/crt.h +15 -6
- warp/native/cuda_crt.h +15 -6
- warp/native/cuda_util.cpp +29 -6
- warp/native/cuda_util.h +17 -6
- warp/native/error.cpp +15 -6
- warp/native/error.h +15 -6
- warp/native/exports.h +85 -63
- warp/native/fabric.h +15 -6
- warp/native/hashgrid.cpp +15 -6
- warp/native/hashgrid.cu +15 -6
- warp/native/hashgrid.h +15 -6
- warp/native/initializer_array.h +15 -6
- warp/native/intersect.h +41 -32
- warp/native/intersect_adj.h +48 -39
- warp/native/intersect_tri.h +17 -0
- warp/native/marching.cpp +16 -0
- warp/native/marching.cu +16 -7
- warp/native/marching.h +17 -0
- warp/native/mat.h +528 -15
- warp/native/mathdx.cpp +15 -6
- warp/native/matnn.h +15 -6
- warp/native/mesh.cpp +15 -6
- warp/native/mesh.cu +15 -6
- warp/native/mesh.h +25 -16
- warp/native/noise.h +15 -6
- warp/native/quat.h +114 -17
- warp/native/rand.h +21 -6
- warp/native/range.h +15 -6
- warp/native/reduce.cpp +15 -6
- warp/native/reduce.cu +15 -6
- warp/native/runlength_encode.cpp +15 -6
- warp/native/runlength_encode.cu +15 -6
- warp/native/scan.cpp +15 -6
- warp/native/scan.cu +15 -6
- warp/native/scan.h +15 -6
- warp/native/solid_angle.h +17 -0
- warp/native/sort.cpp +137 -65
- warp/native/sort.cu +167 -21
- warp/native/sort.h +23 -7
- warp/native/sparse.cpp +58 -28
- warp/native/sparse.cu +67 -23
- warp/native/spatial.h +15 -6
- warp/native/svd.h +131 -6
- warp/native/temp_buffer.h +15 -6
- warp/native/tile.h +316 -111
- warp/native/tile_reduce.h +61 -9
- warp/native/vec.h +83 -13
- warp/native/volume.cpp +100 -119
- warp/native/volume.cu +15 -6
- warp/native/volume.h +15 -6
- warp/native/volume_builder.cu +40 -16
- warp/native/volume_builder.h +21 -6
- warp/native/volume_impl.h +15 -6
- warp/native/warp.cpp +20 -12
- warp/native/warp.cu +114 -16
- warp/native/warp.h +34 -16
- warp/optim/__init__.py +14 -6
- warp/optim/adam.py +14 -6
- warp/optim/linear.py +25 -10
- warp/optim/sgd.py +14 -6
- warp/paddle.py +14 -6
- warp/render/__init__.py +14 -6
- warp/render/render_opengl.py +14 -6
- warp/render/render_usd.py +14 -6
- warp/render/utils.py +14 -6
- warp/sim/__init__.py +14 -7
- warp/sim/articulation.py +18 -10
- warp/sim/collide.py +35 -16
- warp/sim/graph_coloring.py +14 -6
- warp/sim/import_mjcf.py +463 -162
- warp/sim/import_snu.py +14 -7
- warp/sim/import_urdf.py +46 -18
- warp/sim/import_usd.py +14 -7
- warp/sim/inertia.py +14 -6
- warp/sim/integrator.py +14 -6
- warp/sim/integrator_euler.py +19 -11
- warp/sim/integrator_featherstone.py +17 -16
- warp/sim/integrator_vbd.py +222 -8
- warp/sim/integrator_xpbd.py +19 -11
- warp/sim/model.py +56 -19
- warp/sim/particles.py +14 -6
- warp/sim/render.py +14 -6
- warp/sim/utils.py +17 -2
- warp/sparse.py +657 -555
- warp/stubs.py +231 -19
- warp/tape.py +14 -6
- warp/tests/aux_test_class_kernel.py +14 -6
- warp/tests/aux_test_compile_consts_dummy.py +14 -6
- warp/tests/aux_test_conditional_unequal_types_kernels.py +14 -6
- warp/tests/aux_test_dependent.py +14 -6
- warp/tests/aux_test_grad_customs.py +14 -6
- warp/tests/aux_test_instancing_gc.py +14 -6
- warp/tests/aux_test_module_unload.py +14 -6
- warp/tests/aux_test_name_clash1.py +14 -6
- warp/tests/aux_test_name_clash2.py +14 -6
- warp/tests/aux_test_unresolved_func.py +14 -6
- warp/tests/aux_test_unresolved_symbol.py +14 -6
- warp/tests/cuda/__init__.py +0 -0
- warp/tests/{test_async.py → cuda/test_async.py} +14 -6
- warp/tests/{test_ipc.py → cuda/test_ipc.py} +14 -6
- warp/tests/{test_mempool.py → cuda/test_mempool.py} +53 -6
- warp/tests/{test_multigpu.py → cuda/test_multigpu.py} +14 -6
- warp/tests/{test_peer.py → cuda/test_peer.py} +14 -6
- warp/tests/{test_pinned.py → cuda/test_pinned.py} +14 -6
- warp/tests/{test_streams.py → cuda/test_streams.py} +85 -6
- warp/tests/geometry/__init__.py +0 -0
- warp/tests/{test_bvh.py → geometry/test_bvh.py} +14 -6
- warp/tests/{test_hash_grid.py → geometry/test_hash_grid.py} +14 -6
- warp/tests/{test_marching_cubes.py → geometry/test_marching_cubes.py} +14 -6
- warp/tests/{test_mesh.py → geometry/test_mesh.py} +14 -6
- warp/tests/{test_mesh_query_aabb.py → geometry/test_mesh_query_aabb.py} +14 -6
- warp/tests/{test_mesh_query_point.py → geometry/test_mesh_query_point.py} +80 -69
- warp/tests/{test_mesh_query_ray.py → geometry/test_mesh_query_ray.py} +15 -7
- warp/tests/{test_volume.py → geometry/test_volume.py} +55 -12
- warp/tests/{test_volume_write.py → geometry/test_volume_write.py} +14 -6
- warp/tests/interop/__init__.py +0 -0
- warp/tests/{test_dlpack.py → interop/test_dlpack.py} +42 -11
- warp/tests/{test_jax.py → interop/test_jax.py} +14 -6
- warp/tests/{test_paddle.py → interop/test_paddle.py} +14 -6
- warp/tests/{test_torch.py → interop/test_torch.py} +14 -6
- warp/tests/run_coverage_serial.py +14 -6
- warp/tests/sim/__init__.py +0 -0
- warp/tests/{disabled_kinematics.py → sim/disabled_kinematics.py} +23 -16
- warp/tests/{flaky_test_sim_grad.py → sim/flaky_test_sim_grad.py} +14 -6
- warp/tests/{test_collision.py → sim/test_collision.py} +16 -8
- warp/tests/{test_coloring.py → sim/test_coloring.py} +14 -7
- warp/tests/{test_model.py → sim/test_model.py} +55 -7
- warp/tests/{test_sim_grad_bounce_linear.py → sim/test_sim_grad_bounce_linear.py} +14 -6
- warp/tests/{test_sim_kinematics.py → sim/test_sim_kinematics.py} +16 -7
- warp/tests/sim/test_vbd.py +597 -0
- warp/tests/test_adam.py +14 -6
- warp/tests/test_arithmetic.py +14 -6
- warp/tests/test_array.py +14 -6
- warp/tests/test_array_reduce.py +14 -6
- warp/tests/test_assert.py +14 -6
- warp/tests/test_atomic.py +14 -6
- warp/tests/test_bool.py +15 -7
- warp/tests/test_builtins_resolution.py +14 -6
- warp/tests/test_closest_point_edge_edge.py +14 -6
- warp/tests/test_codegen.py +14 -6
- warp/tests/test_codegen_instancing.py +14 -6
- warp/tests/test_compile_consts.py +14 -6
- warp/tests/test_conditional.py +14 -6
- warp/tests/test_context.py +14 -6
- warp/tests/test_copy.py +14 -6
- warp/tests/test_ctypes.py +14 -6
- warp/tests/test_dense.py +14 -6
- warp/tests/test_devices.py +14 -6
- warp/tests/test_examples.py +42 -42
- warp/tests/test_fabricarray.py +14 -6
- warp/tests/test_fast_math.py +14 -6
- warp/tests/test_fem.py +37 -10
- warp/tests/test_fp16.py +14 -6
- warp/tests/test_func.py +14 -6
- warp/tests/test_future_annotations.py +14 -6
- warp/tests/test_generics.py +14 -6
- warp/tests/test_grad.py +14 -6
- warp/tests/test_grad_customs.py +14 -6
- warp/tests/test_grad_debug.py +14 -6
- warp/tests/test_implicit_init.py +14 -6
- warp/tests/test_import.py +14 -6
- warp/tests/test_indexedarray.py +14 -6
- warp/tests/test_intersect.py +14 -6
- warp/tests/test_iter.py +14 -6
- warp/tests/test_large.py +14 -6
- warp/tests/test_launch.py +14 -6
- warp/tests/test_lerp.py +14 -6
- warp/tests/test_linear_solvers.py +15 -11
- warp/tests/test_lvalue.py +14 -6
- warp/tests/test_mat.py +247 -85
- warp/tests/test_mat_lite.py +14 -6
- warp/tests/test_mat_scalar_ops.py +18 -10
- warp/tests/test_math.py +14 -6
- warp/tests/test_mlp.py +14 -6
- warp/tests/test_module_hashing.py +14 -6
- warp/tests/test_modules_lite.py +14 -6
- warp/tests/test_noise.py +14 -6
- warp/tests/test_operators.py +14 -6
- warp/tests/test_options.py +14 -6
- warp/tests/test_overwrite.py +15 -60
- warp/tests/test_print.py +14 -6
- warp/tests/test_quat.py +81 -52
- warp/tests/test_rand.py +58 -43
- warp/tests/test_reload.py +14 -6
- warp/tests/test_rounding.py +14 -6
- warp/tests/test_runlength_encode.py +14 -6
- warp/tests/test_scalar_ops.py +14 -6
- warp/tests/test_smoothstep.py +14 -6
- warp/tests/test_snippet.py +15 -0
- warp/tests/test_sparse.py +61 -12
- warp/tests/test_spatial.py +89 -6
- warp/tests/test_special_values.py +14 -6
- warp/tests/test_static.py +15 -7
- warp/tests/test_struct.py +14 -6
- warp/tests/test_tape.py +14 -6
- warp/tests/test_transient_module.py +14 -6
- warp/tests/test_triangle_closest_point.py +14 -6
- warp/tests/test_types.py +14 -6
- warp/tests/test_utils.py +98 -10
- warp/tests/test_vec.py +60 -40
- warp/tests/test_vec_lite.py +14 -6
- warp/tests/test_vec_scalar_ops.py +14 -6
- warp/tests/test_verify_fp.py +14 -6
- warp/tests/tile/__init__.py +0 -0
- warp/tests/{test_tile.py → tile/test_tile.py} +150 -57
- warp/tests/{test_tile_load.py → tile/test_tile_load.py} +15 -7
- warp/tests/{test_tile_mathdx.py → tile/test_tile_mathdx.py} +23 -12
- warp/tests/{test_tile_mlp.py → tile/test_tile_mlp.py} +39 -20
- warp/tests/{test_tile_reduce.py → tile/test_tile_reduce.py} +74 -7
- warp/tests/{test_tile_shared_memory.py → tile/test_tile_shared_memory.py} +14 -6
- warp/tests/{test_tile_view.py → tile/test_tile_view.py} +15 -7
- warp/tests/unittest_serial.py +15 -6
- warp/tests/unittest_suites.py +59 -65
- warp/tests/unittest_utils.py +16 -7
- warp/tests/walkthrough_debug.py +14 -6
- warp/thirdparty/unittest_parallel.py +15 -8
- warp/torch.py +14 -6
- warp/types.py +124 -664
- warp/utils.py +151 -78
- {warp_lang-1.6.1.dist-info → warp_lang-1.7.0.dist-info}/METADATA +39 -12
- warp_lang-1.7.0.dist-info/RECORD +429 -0
- {warp_lang-1.6.1.dist-info → warp_lang-1.7.0.dist-info}/WHEEL +1 -1
- warp_lang-1.7.0.dist-info/licenses/LICENSE.md +202 -0
- warp/examples/optim/example_walker.py +0 -309
- warp/native/cutlass_gemm.cpp +0 -34
- warp/native/cutlass_gemm.cu +0 -373
- warp/tests/test_matmul.py +0 -503
- warp/tests/test_matmul_lite.py +0 -403
- warp/tests/test_vbd.py +0 -378
- warp/tests/unused_test_misc.py +0 -69
- warp_lang-1.6.1.dist-info/LICENSE.md +0 -126
- warp_lang-1.6.1.dist-info/RECORD +0 -419
- {warp_lang-1.6.1.dist-info → warp_lang-1.7.0.dist-info}/top_level.txt +0 -0
warp/fem/adaptivity.py
CHANGED
|
@@ -1,3 +1,18 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: Copyright (c) 2024 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
|
+
|
|
1
16
|
from typing import List, Optional, Tuple
|
|
2
17
|
|
|
3
18
|
import numpy as np
|
|
@@ -353,7 +368,7 @@ def _fill_graded_cells(
|
|
|
353
368
|
level = int(coarse_level[cell])
|
|
354
369
|
refinement = wp.min(1, coarse_refinement[cell])
|
|
355
370
|
|
|
356
|
-
count = wp.
|
|
371
|
+
count = wp.where(refinement > 0, 8, 1)
|
|
357
372
|
offset = wp.atomic_sub(fine_count, 0, count) - count
|
|
358
373
|
|
|
359
374
|
f_level = level - refinement
|
|
@@ -388,7 +403,7 @@ def _sample_refinement(
|
|
|
388
403
|
if sampled_level >= 0:
|
|
389
404
|
min_level = wp.min(sampled_level, min_level)
|
|
390
405
|
|
|
391
|
-
return wp.
|
|
406
|
+
return wp.where(min_level < level_count, cur_level - wp.clamp(min_level, 0, cur_level), -1)
|
|
392
407
|
|
|
393
408
|
|
|
394
409
|
@integrand
|
|
@@ -416,7 +431,7 @@ def _count_refined_voxels(
|
|
|
416
431
|
|
|
417
432
|
coarse_refinement[cell] = wp.int8(refinement)
|
|
418
433
|
if refinement >= 0:
|
|
419
|
-
wp.atomic_add(fine_count, 0, wp.
|
|
434
|
+
wp.atomic_add(fine_count, 0, wp.where(refinement > 0, 8, 1))
|
|
420
435
|
|
|
421
436
|
|
|
422
437
|
@wp.kernel
|
|
@@ -434,7 +449,7 @@ def _fill_refined_voxels(
|
|
|
434
449
|
refinement = wp.min(1, int(coarse_refinement[cell]))
|
|
435
450
|
|
|
436
451
|
if refinement >= 0:
|
|
437
|
-
count = wp.
|
|
452
|
+
count = wp.where(refinement > 0, 8, 1)
|
|
438
453
|
offset = wp.atomic_sub(fine_count, 0, count) - count
|
|
439
454
|
|
|
440
455
|
f_level = level - refinement
|
warp/fem/cache.py
CHANGED
|
@@ -1,3 +1,18 @@
|
|
|
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
|
+
|
|
1
16
|
import ast
|
|
2
17
|
import bisect
|
|
3
18
|
import re
|
warp/fem/dirichlet.py
CHANGED
|
@@ -1,3 +1,18 @@
|
|
|
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
|
+
|
|
1
16
|
from typing import Any, Optional
|
|
2
17
|
|
|
3
18
|
import warp as wp
|
warp/fem/domain.py
CHANGED
|
@@ -1,3 +1,18 @@
|
|
|
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
|
+
|
|
1
16
|
from typing import Any, Optional, Set, Union
|
|
2
17
|
|
|
3
18
|
import warp as wp
|
warp/fem/field/__init__.py
CHANGED
|
@@ -1,3 +1,18 @@
|
|
|
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
|
+
|
|
1
16
|
from typing import Optional, Union
|
|
2
17
|
|
|
3
18
|
from warp.fem.domain import Cells, GeometryDomain
|
warp/fem/field/field.py
CHANGED
|
@@ -1,3 +1,18 @@
|
|
|
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
|
+
|
|
1
16
|
from typing import Any, Dict, Optional, Set
|
|
2
17
|
|
|
3
18
|
import warp as wp
|
warp/fem/field/nodal_field.py
CHANGED
|
@@ -1,3 +1,18 @@
|
|
|
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
|
+
|
|
1
16
|
from typing import Any
|
|
2
17
|
|
|
3
18
|
import warp as wp
|
|
@@ -68,22 +83,15 @@ class NodalFieldBase(DiscreteField):
|
|
|
68
83
|
@cache.dynamic_func(suffix=self.name)
|
|
69
84
|
def eval_inner(args: self.ElementEvalArg, s: Sample):
|
|
70
85
|
local_value_map = self.space.local_value_map_inner(args.elt_arg, s.element_index, s.element_coords)
|
|
71
|
-
res = self.space.space_value(
|
|
72
|
-
self._read_node_value(args, s.element_index, 0),
|
|
73
|
-
self.space.element_inner_weight(
|
|
74
|
-
args.elt_arg, args.eval_arg.space_arg, s.element_index, s.element_coords, 0
|
|
75
|
-
),
|
|
76
|
-
local_value_map,
|
|
77
|
-
)
|
|
78
|
-
|
|
79
86
|
node_count = self.space.topology.element_node_count(
|
|
80
87
|
args.elt_arg, args.eval_arg.topology_arg, s.element_index
|
|
81
88
|
)
|
|
82
|
-
|
|
89
|
+
res = self.space.dtype(0.0)
|
|
90
|
+
for k in range(node_count):
|
|
83
91
|
res += self.space.space_value(
|
|
84
92
|
self._read_node_value(args, s.element_index, k),
|
|
85
93
|
self.space.element_inner_weight(
|
|
86
|
-
args.elt_arg, args.eval_arg.space_arg, s.element_index, s.element_coords, k
|
|
94
|
+
args.elt_arg, args.eval_arg.space_arg, s.element_index, s.element_coords, k, s.qp_index
|
|
87
95
|
),
|
|
88
96
|
local_value_map,
|
|
89
97
|
)
|
|
@@ -98,24 +106,16 @@ class NodalFieldBase(DiscreteField):
|
|
|
98
106
|
@cache.dynamic_func(suffix=self.name)
|
|
99
107
|
def eval_grad_inner(args: self.ElementEvalArg, s: Sample, grad_transform: Any):
|
|
100
108
|
local_value_map = self.space.local_value_map_inner(args.elt_arg, s.element_index, s.element_coords)
|
|
101
|
-
|
|
102
|
-
res = self.space.space_gradient(
|
|
103
|
-
self._read_node_value(args, s.element_index, 0),
|
|
104
|
-
self.space.element_inner_weight_gradient(
|
|
105
|
-
args.elt_arg, args.eval_arg.space_arg, s.element_index, s.element_coords, 0
|
|
106
|
-
),
|
|
107
|
-
local_value_map,
|
|
108
|
-
grad_transform,
|
|
109
|
-
)
|
|
110
|
-
|
|
111
109
|
node_count = self.space.topology.element_node_count(
|
|
112
110
|
args.elt_arg, args.eval_arg.topology_arg, s.element_index
|
|
113
111
|
)
|
|
114
|
-
|
|
112
|
+
|
|
113
|
+
res = self.gradient_dtype(0.0)
|
|
114
|
+
for k in range(node_count):
|
|
115
115
|
res += self.space.space_gradient(
|
|
116
116
|
self._read_node_value(args, s.element_index, k),
|
|
117
117
|
self.space.element_inner_weight_gradient(
|
|
118
|
-
args.elt_arg, args.eval_arg.space_arg, s.element_index, s.element_coords, k
|
|
118
|
+
args.elt_arg, args.eval_arg.space_arg, s.element_index, s.element_coords, k, s.qp_index
|
|
119
119
|
),
|
|
120
120
|
local_value_map,
|
|
121
121
|
grad_transform,
|
|
@@ -142,24 +142,16 @@ class NodalFieldBase(DiscreteField):
|
|
|
142
142
|
def eval_div_inner(args: self.ElementEvalArg, s: Sample):
|
|
143
143
|
grad_transform = self.space.element_inner_reference_gradient_transform(args.elt_arg, s)
|
|
144
144
|
local_value_map = self.space.local_value_map_inner(args.elt_arg, s.element_index, s.element_coords)
|
|
145
|
-
|
|
146
|
-
res = self.space.space_divergence(
|
|
147
|
-
self._read_node_value(args, s.element_index, 0),
|
|
148
|
-
self.space.element_inner_weight_gradient(
|
|
149
|
-
args.elt_arg, args.eval_arg.space_arg, s.element_index, s.element_coords, 0
|
|
150
|
-
),
|
|
151
|
-
local_value_map,
|
|
152
|
-
grad_transform,
|
|
153
|
-
)
|
|
154
|
-
|
|
155
145
|
node_count = self.space.topology.element_node_count(
|
|
156
146
|
args.elt_arg, args.eval_arg.topology_arg, s.element_index
|
|
157
147
|
)
|
|
158
|
-
|
|
148
|
+
|
|
149
|
+
res = self.divergence_dtype(0.0)
|
|
150
|
+
for k in range(node_count):
|
|
159
151
|
res += self.space.space_divergence(
|
|
160
152
|
self._read_node_value(args, s.element_index, k),
|
|
161
153
|
self.space.element_inner_weight_gradient(
|
|
162
|
-
args.elt_arg, args.eval_arg.space_arg, s.element_index, s.element_coords, k
|
|
154
|
+
args.elt_arg, args.eval_arg.space_arg, s.element_index, s.element_coords, k, s.qp_index
|
|
163
155
|
),
|
|
164
156
|
local_value_map,
|
|
165
157
|
grad_transform,
|
|
@@ -172,23 +164,16 @@ class NodalFieldBase(DiscreteField):
|
|
|
172
164
|
@cache.dynamic_func(suffix=self.name)
|
|
173
165
|
def eval_outer(args: self.ElementEvalArg, s: Sample):
|
|
174
166
|
local_value_map = self.space.local_value_map_outer(args.elt_arg, s.element_index, s.element_coords)
|
|
175
|
-
res = self.space.space_value(
|
|
176
|
-
self._read_node_value(args, s.element_index, 0),
|
|
177
|
-
self.space.element_outer_weight(
|
|
178
|
-
args.elt_arg, args.eval_arg.space_arg, s.element_index, s.element_coords, 0
|
|
179
|
-
),
|
|
180
|
-
local_value_map,
|
|
181
|
-
)
|
|
182
|
-
|
|
183
167
|
node_count = self.space.topology.element_node_count(
|
|
184
168
|
args.elt_arg, args.eval_arg.topology_arg, s.element_index
|
|
185
169
|
)
|
|
186
170
|
|
|
187
|
-
|
|
171
|
+
res = self.dtype(0.0)
|
|
172
|
+
for k in range(node_count):
|
|
188
173
|
res += self.space.space_value(
|
|
189
174
|
self._read_node_value(args, s.element_index, k),
|
|
190
175
|
self.space.element_outer_weight(
|
|
191
|
-
args.elt_arg, args.eval_arg.space_arg, s.element_index, s.element_coords, k
|
|
176
|
+
args.elt_arg, args.eval_arg.space_arg, s.element_index, s.element_coords, k, s.qp_index
|
|
192
177
|
),
|
|
193
178
|
local_value_map,
|
|
194
179
|
)
|
|
@@ -203,24 +188,16 @@ class NodalFieldBase(DiscreteField):
|
|
|
203
188
|
@cache.dynamic_func(suffix=self.name)
|
|
204
189
|
def eval_grad_outer(args: self.ElementEvalArg, s: Sample, grad_transform: Any):
|
|
205
190
|
local_value_map = self.space.local_value_map_outer(args.elt_arg, s.element_index, s.element_coords)
|
|
206
|
-
|
|
207
|
-
res = self.space.space_gradient(
|
|
208
|
-
self._read_node_value(args, s.element_index, 0),
|
|
209
|
-
self.space.element_outer_weight_gradient(
|
|
210
|
-
args.elt_arg, args.eval_arg.space_arg, s.element_index, s.element_coords, 0
|
|
211
|
-
),
|
|
212
|
-
local_value_map,
|
|
213
|
-
grad_transform,
|
|
214
|
-
)
|
|
215
|
-
|
|
216
191
|
node_count = self.space.topology.element_node_count(
|
|
217
192
|
args.elt_arg, args.eval_arg.topology_arg, s.element_index
|
|
218
193
|
)
|
|
219
|
-
|
|
194
|
+
|
|
195
|
+
res = self.gradient_dtype(0.0)
|
|
196
|
+
for k in range(node_count):
|
|
220
197
|
res += self.space.space_gradient(
|
|
221
198
|
self._read_node_value(args, s.element_index, k),
|
|
222
199
|
self.space.element_outer_weight_gradient(
|
|
223
|
-
args.elt_arg, args.eval_arg.space_arg, s.element_index, s.element_coords, k
|
|
200
|
+
args.elt_arg, args.eval_arg.space_arg, s.element_index, s.element_coords, k, s.qp_index
|
|
224
201
|
),
|
|
225
202
|
local_value_map,
|
|
226
203
|
grad_transform,
|
|
@@ -247,24 +224,16 @@ class NodalFieldBase(DiscreteField):
|
|
|
247
224
|
def eval_div_outer(args: self.ElementEvalArg, s: Sample):
|
|
248
225
|
grad_transform = self.space.element_outer_reference_gradient_transform(args.elt_arg, s)
|
|
249
226
|
local_value_map = self.space.local_value_map_outer(args.elt_arg, s.element_index, s.element_coords)
|
|
250
|
-
|
|
251
|
-
res = self.space.space_divergence(
|
|
252
|
-
self._read_node_value(args, s.element_index, 0),
|
|
253
|
-
self.space.element_outer_weight_gradient(
|
|
254
|
-
args.elt_arg, args.eval_arg.space_arg, s.element_index, s.element_coords, 0
|
|
255
|
-
),
|
|
256
|
-
local_value_map,
|
|
257
|
-
grad_transform,
|
|
258
|
-
)
|
|
259
|
-
|
|
260
227
|
node_count = self.space.topology.element_node_count(
|
|
261
228
|
args.elt_arg, args.eval_arg.topology_arg, s.element_index
|
|
262
229
|
)
|
|
263
|
-
|
|
230
|
+
|
|
231
|
+
res = self.divergence_dtype(0.0)
|
|
232
|
+
for k in range(node_count):
|
|
264
233
|
res += self.space.space_divergence(
|
|
265
234
|
self._read_node_value(args, s.element_index, k),
|
|
266
235
|
self.space.element_outer_weight_gradient(
|
|
267
|
-
args.elt_arg, args.eval_arg.space_arg, s.element_index, s.element_coords, k
|
|
236
|
+
args.elt_arg, args.eval_arg.space_arg, s.element_index, s.element_coords, k, s.qp_index
|
|
268
237
|
),
|
|
269
238
|
local_value_map,
|
|
270
239
|
grad_transform,
|
warp/fem/field/restriction.py
CHANGED
|
@@ -1,3 +1,18 @@
|
|
|
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
|
+
|
|
1
16
|
from warp.fem.space import SpaceRestriction
|
|
2
17
|
|
|
3
18
|
from .field import DiscreteField
|
warp/fem/field/virtual.py
CHANGED
|
@@ -1,3 +1,18 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: Copyright (c) 2024 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
|
+
|
|
1
16
|
from typing import Any, Set
|
|
2
17
|
|
|
3
18
|
import warp as wp
|
|
@@ -54,7 +69,12 @@ class AdjointField(SpaceField):
|
|
|
54
69
|
def eval_test_inner(args: self.ElementEvalArg, s: Sample):
|
|
55
70
|
dof = self._get_dof(s)
|
|
56
71
|
node_weight = self.space.element_inner_weight(
|
|
57
|
-
args.elt_arg,
|
|
72
|
+
args.elt_arg,
|
|
73
|
+
args.eval_arg,
|
|
74
|
+
s.element_index,
|
|
75
|
+
s.element_coords,
|
|
76
|
+
get_node_index_in_element(dof),
|
|
77
|
+
s.qp_index,
|
|
58
78
|
)
|
|
59
79
|
local_value_map = self.space.local_value_map_inner(args.elt_arg, s.element_index, s.element_coords)
|
|
60
80
|
dof_value = self.space.node_basis_element(get_node_coord(dof))
|
|
@@ -75,6 +95,7 @@ class AdjointField(SpaceField):
|
|
|
75
95
|
s.element_index,
|
|
76
96
|
s.element_coords,
|
|
77
97
|
get_node_index_in_element(dof),
|
|
98
|
+
s.qp_index,
|
|
78
99
|
)
|
|
79
100
|
grad_transform = self.space.element_inner_reference_gradient_transform(args.elt_arg, s)
|
|
80
101
|
local_value_map = self.space.local_value_map_inner(args.elt_arg, s.element_index, s.element_coords)
|
|
@@ -96,6 +117,7 @@ class AdjointField(SpaceField):
|
|
|
96
117
|
s.element_index,
|
|
97
118
|
s.element_coords,
|
|
98
119
|
get_node_index_in_element(dof),
|
|
120
|
+
s.qp_index,
|
|
99
121
|
)
|
|
100
122
|
grad_transform = self.space.element_inner_reference_gradient_transform(args.elt_arg, s)
|
|
101
123
|
local_value_map = self.space.local_value_map_inner(args.elt_arg, s.element_index, s.element_coords)
|
|
@@ -109,7 +131,12 @@ class AdjointField(SpaceField):
|
|
|
109
131
|
def eval_test_outer(args: self.ElementEvalArg, s: Sample):
|
|
110
132
|
dof = self._get_dof(s)
|
|
111
133
|
node_weight = self.space.element_outer_weight(
|
|
112
|
-
args.elt_arg,
|
|
134
|
+
args.elt_arg,
|
|
135
|
+
args.eval_arg,
|
|
136
|
+
s.element_index,
|
|
137
|
+
s.element_coords,
|
|
138
|
+
get_node_index_in_element(dof),
|
|
139
|
+
s.qp_index,
|
|
113
140
|
)
|
|
114
141
|
local_value_map = self.space.local_value_map_outer(args.elt_arg, s.element_index, s.element_coords)
|
|
115
142
|
dof_value = self.space.node_basis_element(get_node_coord(dof))
|
|
@@ -130,6 +157,7 @@ class AdjointField(SpaceField):
|
|
|
130
157
|
s.element_index,
|
|
131
158
|
s.element_coords,
|
|
132
159
|
get_node_index_in_element(dof),
|
|
160
|
+
s.qp_index,
|
|
133
161
|
)
|
|
134
162
|
grad_transform = self.space.element_outer_reference_gradient_transform(args.elt_arg, s)
|
|
135
163
|
local_value_map = self.space.local_value_map_outer(args.elt_arg, s.element_index, s.element_coords)
|
|
@@ -151,6 +179,7 @@ class AdjointField(SpaceField):
|
|
|
151
179
|
s.element_index,
|
|
152
180
|
s.element_coords,
|
|
153
181
|
get_node_index_in_element(dof),
|
|
182
|
+
s.qp_index,
|
|
154
183
|
)
|
|
155
184
|
grad_transform = self.space.element_outer_reference_gradient_transform(args.elt_arg, s)
|
|
156
185
|
local_value_map = self.space.local_value_map_outer(args.elt_arg, s.element_index, s.element_coords)
|
|
@@ -355,9 +384,8 @@ class LocalAdjointField(SpaceField):
|
|
|
355
384
|
|
|
356
385
|
@cache.dynamic_func(suffix=str(TAYLOR_DOF_COUNT))
|
|
357
386
|
def split_dof(dof_index: DofIndex, dof_begin: int):
|
|
358
|
-
|
|
359
|
-
value_dof =
|
|
360
|
-
taylor_dof = dof - value_dof * TAYLOR_DOF_COUNT - dof_begin
|
|
387
|
+
taylor_dof = get_node_index_in_element(dof_index) - dof_begin
|
|
388
|
+
value_dof = get_node_coord(dof_index)
|
|
361
389
|
return value_dof, taylor_dof
|
|
362
390
|
|
|
363
391
|
return split_dof
|
|
@@ -371,7 +399,7 @@ class LocalAdjointField(SpaceField):
|
|
|
371
399
|
|
|
372
400
|
local_value_map = self.space.local_value_map_inner(args.elt_arg, s.element_index, s.element_coords)
|
|
373
401
|
dof_value = self.space.value_basis_element(value_dof, local_value_map)
|
|
374
|
-
return wp.
|
|
402
|
+
return wp.where(taylor_dof == 0, dof_value, self.dtype(0.0))
|
|
375
403
|
|
|
376
404
|
return eval_test_inner
|
|
377
405
|
|
|
@@ -426,7 +454,7 @@ class LocalAdjointField(SpaceField):
|
|
|
426
454
|
|
|
427
455
|
local_value_map = self.space.local_value_map_outer(args.elt_arg, s.element_index, s.element_coords)
|
|
428
456
|
dof_value = self.space.value_basis_element(value_dof, local_value_map)
|
|
429
|
-
return wp.
|
|
457
|
+
return wp.where(taylor_dof == 0, dof_value, self.dtype(0.0))
|
|
430
458
|
|
|
431
459
|
return eval_test_outer
|
|
432
460
|
|
|
@@ -536,17 +564,25 @@ def make_linear_dispatch_kernel(test: LocalTestField, quadrature: Quadrature, ac
|
|
|
536
564
|
qp_index = quadrature.point_index(
|
|
537
565
|
domain_arg, qp_arg, test_element_index.domain_element_index, element_index, k
|
|
538
566
|
)
|
|
567
|
+
qp_eval_index = quadrature.point_evaluation_index(
|
|
568
|
+
domain_arg, qp_arg, test_element_index.domain_element_index, element_index, k
|
|
569
|
+
)
|
|
539
570
|
coords = quadrature.point_coords(
|
|
540
571
|
domain_arg, qp_arg, test_element_index.domain_element_index, element_index, k
|
|
541
572
|
)
|
|
542
573
|
|
|
543
|
-
qp_result = local_result[
|
|
574
|
+
qp_result = local_result[qp_eval_index]
|
|
544
575
|
|
|
545
576
|
qp_sum = float(0.0)
|
|
546
577
|
|
|
547
578
|
if wp.static(0 != TEST_INNER_COUNT):
|
|
548
579
|
w = test.space.element_inner_weight(
|
|
549
|
-
domain_arg,
|
|
580
|
+
domain_arg,
|
|
581
|
+
test_space_arg,
|
|
582
|
+
element_index,
|
|
583
|
+
coords,
|
|
584
|
+
test_element_index.node_index_in_element,
|
|
585
|
+
qp_index,
|
|
550
586
|
)
|
|
551
587
|
for val_dof in range(TEST_NODE_DOF_DIM):
|
|
552
588
|
test_dof = test_node_dof * TEST_NODE_DOF_DIM + val_dof
|
|
@@ -554,7 +590,12 @@ def make_linear_dispatch_kernel(test: LocalTestField, quadrature: Quadrature, ac
|
|
|
554
590
|
|
|
555
591
|
if wp.static(0 != TEST_OUTER_COUNT):
|
|
556
592
|
w = test.space.element_outer_weight(
|
|
557
|
-
domain_arg,
|
|
593
|
+
domain_arg,
|
|
594
|
+
test_space_arg,
|
|
595
|
+
element_index,
|
|
596
|
+
coords,
|
|
597
|
+
test_element_index.node_index_in_element,
|
|
598
|
+
qp_index,
|
|
558
599
|
)
|
|
559
600
|
for val_dof in range(TEST_NODE_DOF_DIM):
|
|
560
601
|
test_dof = test_node_dof * TEST_NODE_DOF_DIM + val_dof
|
|
@@ -562,7 +603,12 @@ def make_linear_dispatch_kernel(test: LocalTestField, quadrature: Quadrature, ac
|
|
|
562
603
|
|
|
563
604
|
if wp.static(0 != TEST_INNER_GRAD_COUNT):
|
|
564
605
|
w_grad = test.space.element_inner_weight_gradient(
|
|
565
|
-
domain_arg,
|
|
606
|
+
domain_arg,
|
|
607
|
+
test_space_arg,
|
|
608
|
+
element_index,
|
|
609
|
+
coords,
|
|
610
|
+
test_element_index.node_index_in_element,
|
|
611
|
+
qp_index,
|
|
566
612
|
)
|
|
567
613
|
for val_dof in range(TEST_NODE_DOF_DIM):
|
|
568
614
|
test_dof = test_node_dof * TEST_NODE_DOF_DIM + val_dof
|
|
@@ -574,7 +620,12 @@ def make_linear_dispatch_kernel(test: LocalTestField, quadrature: Quadrature, ac
|
|
|
574
620
|
|
|
575
621
|
if wp.static(0 != TEST_OUTER_GRAD_COUNT):
|
|
576
622
|
w_grad = test.space.element_outer_weight_gradient(
|
|
577
|
-
domain_arg,
|
|
623
|
+
domain_arg,
|
|
624
|
+
test_space_arg,
|
|
625
|
+
element_index,
|
|
626
|
+
coords,
|
|
627
|
+
test_element_index.node_index_in_element,
|
|
628
|
+
qp_index,
|
|
578
629
|
)
|
|
579
630
|
for val_dof in range(TEST_NODE_DOF_DIM):
|
|
580
631
|
test_dof = test_node_dof * TEST_NODE_DOF_DIM + val_dof
|
|
@@ -654,10 +705,10 @@ def make_bilinear_dispatch_kernel(
|
|
|
654
705
|
domain_arg, trial_topology_arg, element_index
|
|
655
706
|
)
|
|
656
707
|
|
|
657
|
-
qp_point_count = wp.
|
|
708
|
+
qp_point_count = wp.where(
|
|
658
709
|
trial_node < element_trial_node_count,
|
|
659
|
-
0,
|
|
660
710
|
quadrature.point_count(domain_arg, qp_arg, test_element_index.domain_element_index, element_index),
|
|
711
|
+
0,
|
|
661
712
|
)
|
|
662
713
|
|
|
663
714
|
val_sum = accumulate_dtype(0.0)
|
|
@@ -666,51 +717,54 @@ def make_bilinear_dispatch_kernel(
|
|
|
666
717
|
qp_index = quadrature.point_index(
|
|
667
718
|
domain_arg, qp_arg, test_element_index.domain_element_index, element_index, k
|
|
668
719
|
)
|
|
720
|
+
qp_eval_index = quadrature.point_evaluation_index(
|
|
721
|
+
domain_arg, qp_arg, test_element_index.domain_element_index, element_index, k
|
|
722
|
+
)
|
|
669
723
|
coords = quadrature.point_coords(
|
|
670
724
|
domain_arg, qp_arg, test_element_index.domain_element_index, element_index, k
|
|
671
725
|
)
|
|
672
726
|
|
|
673
|
-
qp_result = local_result[
|
|
727
|
+
qp_result = local_result[qp_eval_index]
|
|
674
728
|
trial_result = float(0.0)
|
|
675
729
|
|
|
676
730
|
if wp.static(0 != TEST_INNER_COUNT):
|
|
677
731
|
w_test_inner = test.space.element_inner_weight(
|
|
678
|
-
domain_arg, test_space_arg, element_index, coords, test_node
|
|
732
|
+
domain_arg, test_space_arg, element_index, coords, test_node, qp_index
|
|
679
733
|
)
|
|
680
734
|
|
|
681
735
|
if wp.static(0 != TEST_OUTER_COUNT):
|
|
682
736
|
w_test_outer = test.space.element_outer_weight(
|
|
683
|
-
domain_arg, test_space_arg, element_index, coords, test_node
|
|
737
|
+
domain_arg, test_space_arg, element_index, coords, test_node, qp_index
|
|
684
738
|
)
|
|
685
739
|
|
|
686
740
|
if wp.static(0 != TEST_INNER_GRAD_COUNT):
|
|
687
741
|
w_test_grad_inner = test.space.element_inner_weight_gradient(
|
|
688
|
-
domain_arg, test_space_arg, element_index, coords, test_node
|
|
742
|
+
domain_arg, test_space_arg, element_index, coords, test_node, qp_index
|
|
689
743
|
)
|
|
690
744
|
|
|
691
745
|
if wp.static(0 != TEST_OUTER_GRAD_COUNT):
|
|
692
746
|
w_test_grad_outer = test.space.element_outer_weight_gradient(
|
|
693
|
-
domain_arg, test_space_arg, element_index, coords, test_node
|
|
747
|
+
domain_arg, test_space_arg, element_index, coords, test_node, qp_index
|
|
694
748
|
)
|
|
695
749
|
|
|
696
750
|
if wp.static(0 != TRIAL_INNER_COUNT):
|
|
697
751
|
w_trial_inner = trial.space.element_inner_weight(
|
|
698
|
-
domain_arg, trial_space_arg, element_index, coords, trial_node
|
|
752
|
+
domain_arg, trial_space_arg, element_index, coords, trial_node, qp_index
|
|
699
753
|
)
|
|
700
754
|
|
|
701
755
|
if wp.static(0 != TRIAL_OUTER_COUNT):
|
|
702
756
|
w_trial_outer = trial.space.element_outer_weight(
|
|
703
|
-
domain_arg, trial_space_arg, element_index, coords, trial_node
|
|
757
|
+
domain_arg, trial_space_arg, element_index, coords, trial_node, qp_index
|
|
704
758
|
)
|
|
705
759
|
|
|
706
760
|
if wp.static(0 != TRIAL_INNER_GRAD_COUNT):
|
|
707
761
|
w_trial_grad_inner = trial.space.element_inner_weight_gradient(
|
|
708
|
-
domain_arg, trial_space_arg, element_index, coords, trial_node
|
|
762
|
+
domain_arg, trial_space_arg, element_index, coords, trial_node, qp_index
|
|
709
763
|
)
|
|
710
764
|
|
|
711
765
|
if wp.static(0 != TRIAL_OUTER_GRAD_COUNT):
|
|
712
766
|
w_trial_grad_outer = trial.space.element_outer_weight_gradient(
|
|
713
|
-
domain_arg, trial_space_arg, element_index, coords, trial_node
|
|
767
|
+
domain_arg, trial_space_arg, element_index, coords, trial_node, qp_index
|
|
714
768
|
)
|
|
715
769
|
|
|
716
770
|
for trial_val_dof in range(TRIAL_NODE_DOF_DIM):
|
warp/fem/geometry/__init__.py
CHANGED
|
@@ -1,3 +1,18 @@
|
|
|
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
|
+
|
|
1
16
|
from .adaptive_nanogrid import AdaptiveNanogrid
|
|
2
17
|
from .deformed_geometry import DeformedGeometry
|
|
3
18
|
from .element import Element
|