warp-lang 1.9.1__py3-none-manylinux_2_34_aarch64.whl → 1.10.0__py3-none-manylinux_2_34_aarch64.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 +301 -287
- warp/__init__.pyi +882 -305
- 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/{builtins.py → _src/builtins.py} +1435 -379
- warp/_src/codegen.py +4361 -0
- warp/{config.py → _src/config.py} +178 -169
- 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/{fem → _src/fem}/domain.py +42 -30
- warp/_src/fem/field/__init__.py +131 -0
- warp/_src/fem/field/field.py +703 -0
- warp/{fem → _src/fem}/field/nodal_field.py +32 -15
- warp/{fem → _src/fem}/field/restriction.py +3 -1
- warp/{fem → _src/fem}/field/virtual.py +55 -27
- warp/_src/fem/geometry/__init__.py +32 -0
- warp/{fem → _src/fem}/geometry/adaptive_nanogrid.py +79 -163
- warp/_src/fem/geometry/closest_point.py +99 -0
- warp/{fem → _src/fem}/geometry/deformed_geometry.py +16 -22
- warp/{fem → _src/fem}/geometry/element.py +34 -10
- warp/{fem → _src/fem}/geometry/geometry.py +50 -20
- warp/{fem → _src/fem}/geometry/grid_2d.py +14 -23
- warp/{fem → _src/fem}/geometry/grid_3d.py +14 -23
- warp/{fem → _src/fem}/geometry/hexmesh.py +42 -63
- warp/{fem → _src/fem}/geometry/nanogrid.py +256 -247
- warp/{fem → _src/fem}/geometry/partition.py +123 -63
- warp/{fem → _src/fem}/geometry/quadmesh.py +28 -45
- warp/{fem → _src/fem}/geometry/tetmesh.py +42 -63
- warp/{fem → _src/fem}/geometry/trimesh.py +28 -45
- warp/{fem → _src/fem}/integrate.py +166 -158
- warp/_src/fem/linalg.py +385 -0
- warp/_src/fem/operator.py +398 -0
- warp/_src/fem/polynomial.py +231 -0
- warp/{fem → _src/fem}/quadrature/pic_quadrature.py +17 -20
- warp/{fem → _src/fem}/quadrature/quadrature.py +97 -47
- warp/_src/fem/space/__init__.py +248 -0
- warp/{fem → _src/fem}/space/basis_function_space.py +22 -11
- warp/_src/fem/space/basis_space.py +681 -0
- warp/{fem → _src/fem}/space/dof_mapper.py +5 -3
- warp/{fem → _src/fem}/space/function_space.py +16 -13
- warp/{fem → _src/fem}/space/grid_2d_function_space.py +6 -7
- warp/{fem → _src/fem}/space/grid_3d_function_space.py +6 -4
- warp/{fem → _src/fem}/space/hexmesh_function_space.py +6 -10
- warp/{fem → _src/fem}/space/nanogrid_function_space.py +5 -9
- warp/{fem → _src/fem}/space/partition.py +119 -60
- warp/{fem → _src/fem}/space/quadmesh_function_space.py +6 -10
- warp/{fem → _src/fem}/space/restriction.py +68 -33
- warp/_src/fem/space/shape/__init__.py +152 -0
- warp/{fem → _src/fem}/space/shape/cube_shape_function.py +11 -9
- warp/{fem → _src/fem}/space/shape/shape_function.py +10 -9
- warp/{fem → _src/fem}/space/shape/square_shape_function.py +8 -6
- warp/{fem → _src/fem}/space/shape/tet_shape_function.py +5 -3
- warp/{fem → _src/fem}/space/shape/triangle_shape_function.py +5 -3
- warp/{fem → _src/fem}/space/tetmesh_function_space.py +5 -9
- warp/_src/fem/space/topology.py +461 -0
- warp/{fem → _src/fem}/space/trimesh_function_space.py +5 -9
- 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/{thirdparty → _src/thirdparty}/unittest_parallel.py +9 -2
- warp/_src/torch.py +393 -0
- warp/_src/types.py +5888 -0
- warp/_src/utils.py +1695 -0
- warp/autograd.py +12 -1054
- warp/bin/warp-clang.so +0 -0
- warp/bin/warp.so +0 -0
- warp/build.py +8 -588
- warp/build_dll.py +6 -721
- warp/codegen.py +6 -4251
- warp/constants.py +6 -39
- warp/context.py +12 -8062
- warp/dlpack.py +6 -444
- warp/examples/distributed/example_jacobi_mpi.py +4 -5
- warp/examples/fem/example_adaptive_grid.py +1 -1
- warp/examples/fem/example_apic_fluid.py +1 -1
- warp/examples/fem/example_burgers.py +8 -8
- warp/examples/fem/example_diffusion.py +1 -1
- warp/examples/fem/example_distortion_energy.py +1 -1
- warp/examples/fem/example_mixed_elasticity.py +2 -2
- warp/examples/fem/example_navier_stokes.py +1 -1
- warp/examples/fem/example_nonconforming_contact.py +7 -7
- warp/examples/fem/example_stokes.py +1 -1
- warp/examples/fem/example_stokes_transfer.py +1 -1
- warp/examples/fem/utils.py +2 -2
- warp/examples/interop/example_jax_callable.py +1 -1
- warp/examples/interop/example_jax_ffi_callback.py +1 -1
- warp/examples/interop/example_jax_kernel.py +1 -1
- warp/examples/tile/example_tile_mcgp.py +191 -0
- warp/fabric.py +6 -337
- warp/fem/__init__.py +159 -97
- warp/fem/adaptivity.py +7 -489
- warp/fem/cache.py +9 -648
- warp/fem/dirichlet.py +6 -184
- warp/fem/field/__init__.py +8 -109
- warp/fem/field/field.py +7 -652
- warp/fem/geometry/__init__.py +7 -18
- warp/fem/geometry/closest_point.py +11 -77
- warp/fem/linalg.py +18 -366
- warp/fem/operator.py +11 -369
- warp/fem/polynomial.py +9 -209
- warp/fem/space/__init__.py +5 -211
- warp/fem/space/basis_space.py +6 -662
- warp/fem/space/shape/__init__.py +41 -118
- warp/fem/space/topology.py +6 -437
- warp/fem/types.py +6 -81
- warp/fem/utils.py +11 -444
- warp/jax.py +8 -165
- warp/jax_experimental/__init__.py +14 -1
- warp/jax_experimental/custom_call.py +8 -365
- warp/jax_experimental/ffi.py +17 -873
- warp/jax_experimental/xla_ffi.py +5 -605
- warp/marching_cubes.py +5 -689
- warp/math.py +16 -393
- warp/native/array.h +385 -37
- warp/native/builtin.h +314 -37
- warp/native/bvh.cpp +43 -9
- warp/native/bvh.cu +62 -27
- warp/native/bvh.h +310 -309
- warp/native/clang/clang.cpp +102 -97
- warp/native/coloring.cpp +0 -1
- warp/native/crt.h +208 -0
- warp/native/exports.h +156 -0
- warp/native/hashgrid.cu +2 -0
- warp/native/intersect.h +24 -1
- warp/native/intersect_tri.h +44 -35
- warp/native/mat.h +1456 -276
- warp/native/mesh.cpp +4 -4
- warp/native/mesh.cu +4 -2
- warp/native/mesh.h +176 -61
- warp/native/quat.h +0 -52
- warp/native/scan.cu +2 -0
- warp/native/sparse.cu +7 -3
- warp/native/spatial.h +12 -0
- warp/native/tile.h +681 -89
- warp/native/tile_radix_sort.h +3 -3
- warp/native/tile_reduce.h +394 -46
- warp/native/tile_scan.h +4 -4
- warp/native/vec.h +469 -0
- warp/native/version.h +23 -0
- warp/native/volume.cpp +1 -1
- warp/native/volume.cu +1 -0
- warp/native/volume.h +1 -1
- warp/native/volume_builder.cu +2 -0
- warp/native/warp.cpp +57 -29
- warp/native/warp.cu +521 -250
- warp/native/warp.h +11 -8
- warp/optim/__init__.py +6 -3
- warp/optim/adam.py +6 -145
- warp/optim/linear.py +14 -1585
- warp/optim/sgd.py +6 -94
- warp/paddle.py +6 -388
- warp/render/__init__.py +8 -4
- warp/render/imgui_manager.py +7 -267
- warp/render/render_opengl.py +6 -3618
- warp/render/render_usd.py +6 -919
- warp/render/utils.py +6 -142
- warp/sparse.py +37 -2563
- warp/tape.py +6 -1188
- warp/tests/__main__.py +1 -1
- warp/tests/cuda/test_async.py +4 -4
- warp/tests/cuda/test_conditional_captures.py +1 -1
- warp/tests/cuda/test_multigpu.py +1 -1
- warp/tests/cuda/test_streams.py +58 -1
- warp/tests/geometry/test_bvh.py +157 -22
- warp/tests/geometry/test_marching_cubes.py +0 -1
- warp/tests/geometry/test_mesh.py +5 -3
- warp/tests/geometry/test_mesh_query_aabb.py +5 -12
- warp/tests/geometry/test_mesh_query_point.py +5 -2
- warp/tests/geometry/test_mesh_query_ray.py +15 -3
- warp/tests/geometry/test_volume_write.py +5 -5
- warp/tests/interop/test_dlpack.py +18 -17
- warp/tests/interop/test_jax.py +772 -49
- warp/tests/interop/test_paddle.py +1 -1
- warp/tests/test_adam.py +0 -1
- warp/tests/test_arithmetic.py +9 -9
- warp/tests/test_array.py +578 -100
- warp/tests/test_array_reduce.py +3 -3
- warp/tests/test_atomic.py +12 -8
- warp/tests/test_atomic_bitwise.py +209 -0
- warp/tests/test_atomic_cas.py +4 -4
- warp/tests/test_bool.py +2 -2
- warp/tests/test_builtins_resolution.py +5 -571
- warp/tests/test_codegen.py +33 -14
- warp/tests/test_conditional.py +1 -1
- warp/tests/test_context.py +6 -6
- warp/tests/test_copy.py +242 -161
- warp/tests/test_ctypes.py +3 -3
- warp/tests/test_devices.py +24 -2
- warp/tests/test_examples.py +16 -84
- warp/tests/test_fabricarray.py +35 -35
- warp/tests/test_fast_math.py +0 -2
- warp/tests/test_fem.py +56 -10
- warp/tests/test_fixedarray.py +3 -3
- warp/tests/test_func.py +8 -5
- warp/tests/test_generics.py +1 -1
- warp/tests/test_indexedarray.py +24 -24
- warp/tests/test_intersect.py +39 -9
- warp/tests/test_large.py +1 -1
- warp/tests/test_lerp.py +3 -1
- warp/tests/test_linear_solvers.py +1 -1
- warp/tests/test_map.py +35 -4
- warp/tests/test_mat.py +52 -62
- warp/tests/test_mat_constructors.py +4 -5
- warp/tests/test_mat_lite.py +1 -1
- warp/tests/test_mat_scalar_ops.py +121 -121
- warp/tests/test_math.py +34 -0
- warp/tests/test_module_aot.py +4 -4
- warp/tests/test_modules_lite.py +28 -2
- warp/tests/test_print.py +11 -11
- warp/tests/test_quat.py +93 -58
- warp/tests/test_runlength_encode.py +1 -1
- warp/tests/test_scalar_ops.py +38 -10
- warp/tests/test_smoothstep.py +1 -1
- warp/tests/test_sparse.py +126 -15
- warp/tests/test_spatial.py +105 -87
- warp/tests/test_special_values.py +6 -6
- warp/tests/test_static.py +7 -7
- warp/tests/test_struct.py +13 -2
- warp/tests/test_triangle_closest_point.py +48 -1
- warp/tests/test_types.py +27 -15
- warp/tests/test_utils.py +52 -52
- warp/tests/test_vec.py +29 -29
- warp/tests/test_vec_constructors.py +5 -5
- warp/tests/test_vec_scalar_ops.py +97 -97
- warp/tests/test_version.py +75 -0
- warp/tests/tile/test_tile.py +178 -0
- warp/tests/tile/test_tile_atomic_bitwise.py +403 -0
- warp/tests/tile/test_tile_cholesky.py +7 -4
- warp/tests/tile/test_tile_load.py +26 -2
- warp/tests/tile/test_tile_mathdx.py +3 -3
- warp/tests/tile/test_tile_matmul.py +1 -1
- warp/tests/tile/test_tile_mlp.py +2 -4
- warp/tests/tile/test_tile_reduce.py +214 -13
- warp/tests/unittest_suites.py +6 -14
- warp/tests/unittest_utils.py +10 -9
- warp/tests/walkthrough_debug.py +3 -1
- warp/torch.py +6 -373
- warp/types.py +29 -5764
- warp/utils.py +10 -1659
- {warp_lang-1.9.1.dist-info → warp_lang-1.10.0.dist-info}/METADATA +46 -99
- warp_lang-1.10.0.dist-info/RECORD +468 -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/examples/assets/cartpole.urdf +0 -110
- warp/examples/assets/crazyflie.usd +0 -0
- warp/examples/assets/nv_ant.xml +0 -92
- warp/examples/assets/nv_humanoid.xml +0 -183
- warp/examples/assets/quadruped.urdf +0 -268
- warp/examples/optim/example_bounce.py +0 -266
- warp/examples/optim/example_cloth_throw.py +0 -228
- warp/examples/optim/example_drone.py +0 -870
- warp/examples/optim/example_inverse_kinematics.py +0 -182
- warp/examples/optim/example_inverse_kinematics_torch.py +0 -191
- warp/examples/optim/example_softbody_properties.py +0 -400
- warp/examples/optim/example_spring_cage.py +0 -245
- warp/examples/optim/example_trajectory.py +0 -227
- warp/examples/sim/example_cartpole.py +0 -143
- warp/examples/sim/example_cloth.py +0 -225
- warp/examples/sim/example_cloth_self_contact.py +0 -316
- warp/examples/sim/example_granular.py +0 -130
- warp/examples/sim/example_granular_collision_sdf.py +0 -202
- warp/examples/sim/example_jacobian_ik.py +0 -244
- warp/examples/sim/example_particle_chain.py +0 -124
- warp/examples/sim/example_quadruped.py +0 -203
- warp/examples/sim/example_rigid_chain.py +0 -203
- warp/examples/sim/example_rigid_contact.py +0 -195
- warp/examples/sim/example_rigid_force.py +0 -133
- warp/examples/sim/example_rigid_gyroscopic.py +0 -115
- warp/examples/sim/example_rigid_soft_contact.py +0 -140
- warp/examples/sim/example_soft_body.py +0 -196
- warp/examples/tile/example_tile_walker.py +0 -327
- warp/sim/__init__.py +0 -74
- warp/sim/articulation.py +0 -793
- warp/sim/collide.py +0 -2570
- warp/sim/graph_coloring.py +0 -307
- warp/sim/import_mjcf.py +0 -791
- warp/sim/import_snu.py +0 -227
- warp/sim/import_urdf.py +0 -579
- warp/sim/import_usd.py +0 -898
- warp/sim/inertia.py +0 -357
- warp/sim/integrator.py +0 -245
- warp/sim/integrator_euler.py +0 -2000
- warp/sim/integrator_featherstone.py +0 -2101
- warp/sim/integrator_vbd.py +0 -2487
- warp/sim/integrator_xpbd.py +0 -3295
- warp/sim/model.py +0 -4821
- warp/sim/particles.py +0 -121
- warp/sim/render.py +0 -431
- warp/sim/utils.py +0 -431
- warp/tests/sim/disabled_kinematics.py +0 -244
- warp/tests/sim/test_cloth.py +0 -863
- warp/tests/sim/test_collision.py +0 -743
- warp/tests/sim/test_coloring.py +0 -347
- warp/tests/sim/test_inertia.py +0 -161
- warp/tests/sim/test_model.py +0 -226
- warp/tests/sim/test_sim_grad.py +0 -287
- warp/tests/sim/test_sim_grad_bounce_linear.py +0 -212
- warp/tests/sim/test_sim_kinematics.py +0 -98
- warp/thirdparty/__init__.py +0 -0
- warp_lang-1.9.1.dist-info/RECORD +0 -456
- /warp/{fem → _src/fem}/quadrature/__init__.py +0 -0
- /warp/{tests/sim → _src/thirdparty}/__init__.py +0 -0
- /warp/{thirdparty → _src/thirdparty}/appdirs.py +0 -0
- /warp/{thirdparty → _src/thirdparty}/dlpack.py +0 -0
- {warp_lang-1.9.1.dist-info → warp_lang-1.10.0.dist-info}/WHEEL +0 -0
- {warp_lang-1.9.1.dist-info → warp_lang-1.10.0.dist-info}/licenses/LICENSE.md +0 -0
- {warp_lang-1.9.1.dist-info → warp_lang-1.10.0.dist-info}/top_level.txt +0 -0
|
@@ -16,12 +16,15 @@
|
|
|
16
16
|
from typing import ClassVar
|
|
17
17
|
|
|
18
18
|
import warp as wp
|
|
19
|
-
from warp.fem import cache
|
|
20
|
-
from warp.fem.polynomial import Polynomial
|
|
21
|
-
from warp.fem.types import Coords, ElementIndex, Sample, make_free_sample
|
|
19
|
+
from warp._src.fem import cache
|
|
20
|
+
from warp._src.fem.polynomial import Polynomial
|
|
21
|
+
from warp._src.fem.types import Coords, ElementIndex, Sample, make_free_sample
|
|
22
|
+
from warp._src.types import type_is_vector, type_size
|
|
22
23
|
|
|
23
24
|
from .geometry import Geometry
|
|
24
25
|
|
|
26
|
+
_wp_module_name_ = "warp.fem.geometry.deformed_geometry"
|
|
27
|
+
|
|
25
28
|
_mat32 = wp.mat(shape=(3, 2), dtype=float)
|
|
26
29
|
|
|
27
30
|
|
|
@@ -54,16 +57,17 @@ class DeformedGeometry(Geometry):
|
|
|
54
57
|
"""Constructs a Deformed Geometry from a displacement or absolute position field defined over a base geometry.
|
|
55
58
|
The deformation field does not need to be isoparameteric.
|
|
56
59
|
|
|
57
|
-
See also: :meth:`warp.fem.
|
|
60
|
+
See also: :meth:`warp.fem.GeometryField.make_deformed_geometry`
|
|
58
61
|
"""
|
|
59
62
|
|
|
60
|
-
from warp.fem.field import
|
|
63
|
+
from warp._src.fem.field import GeometryField
|
|
61
64
|
|
|
62
|
-
if
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
65
|
+
if field.dtype is not None and (
|
|
66
|
+
not type_is_vector(field.dtype) or type_size(field.dtype) != field.geometry.dimension
|
|
67
|
+
):
|
|
68
|
+
raise ValueError(
|
|
69
|
+
"Invalid value type for position field, must be vector-valued with same dimension as underlying geometry"
|
|
70
|
+
)
|
|
67
71
|
if field.eval_grad_inner is None:
|
|
68
72
|
raise ValueError("Gradient evaluation is not supported on the passed field")
|
|
69
73
|
|
|
@@ -113,11 +117,6 @@ class DeformedGeometry(Geometry):
|
|
|
113
117
|
|
|
114
118
|
return CellArg
|
|
115
119
|
|
|
116
|
-
def cell_arg_value(self, device) -> "DeformedGeometry.CellArg":
|
|
117
|
-
args = self.CellArg()
|
|
118
|
-
self.fill_cell_arg(args, device)
|
|
119
|
-
return args
|
|
120
|
-
|
|
121
120
|
def fill_cell_arg(self, args: "DeformedGeometry.CellArg", device):
|
|
122
121
|
self.base.fill_cell_arg(args.base_arg, device)
|
|
123
122
|
self.field.fill_eval_arg(args.field_arg, device)
|
|
@@ -161,11 +160,6 @@ class DeformedGeometry(Geometry):
|
|
|
161
160
|
|
|
162
161
|
return SideArg
|
|
163
162
|
|
|
164
|
-
def side_arg_value(self, device) -> "DeformedGeometry.SideArg":
|
|
165
|
-
args = self.SideArg()
|
|
166
|
-
self.fill_side_arg(args, device)
|
|
167
|
-
return args
|
|
168
|
-
|
|
169
163
|
def fill_side_arg(self, args: "DeformedGeometry.SideArg", device):
|
|
170
164
|
self.base.fill_side_arg(args.base_arg, device)
|
|
171
165
|
self.field.fill_eval_arg(args.field_arg, device)
|
|
@@ -259,11 +253,11 @@ class DeformedGeometry(Geometry):
|
|
|
259
253
|
return cell_bvh_id
|
|
260
254
|
|
|
261
255
|
def _make_cell_bounds(self):
|
|
262
|
-
points, _weights = self.reference_cell().instantiate_quadrature(
|
|
256
|
+
points, _weights = self.reference_cell().prototype.instantiate_quadrature(
|
|
263
257
|
order=self.field.degree, family=Polynomial.LOBATTO_GAUSS_LEGENDRE
|
|
264
258
|
)
|
|
265
259
|
|
|
266
|
-
points =
|
|
260
|
+
points = wp.matrix_from_rows(*points)
|
|
267
261
|
point_count = len(points)
|
|
268
262
|
|
|
269
263
|
@cache.dynamic_func(suffix=self.name)
|
|
@@ -13,16 +13,40 @@
|
|
|
13
13
|
# See the License for the specific language governing permissions and
|
|
14
14
|
# limitations under the License.
|
|
15
15
|
|
|
16
|
+
from enum import IntEnum
|
|
16
17
|
from typing import List, Tuple
|
|
17
18
|
|
|
18
19
|
import warp as wp
|
|
19
|
-
from warp.fem.polynomial import Polynomial, quadrature_1d
|
|
20
|
-
from warp.fem.types import Coords
|
|
20
|
+
from warp._src.fem.polynomial import Polynomial, quadrature_1d
|
|
21
|
+
from warp._src.fem.types import Coords
|
|
21
22
|
|
|
22
|
-
|
|
23
|
+
_wp_module_name_ = "warp.fem.geometry.element"
|
|
23
24
|
|
|
25
|
+
_vec1 = wp.vec(length=1, dtype=float)
|
|
24
26
|
|
|
25
|
-
|
|
27
|
+
|
|
28
|
+
class Element(IntEnum):
|
|
29
|
+
"""Enumeration of reference element types"""
|
|
30
|
+
|
|
31
|
+
LINE_SEGMENT = 1
|
|
32
|
+
SQUARE = 2
|
|
33
|
+
CUBE = 3
|
|
34
|
+
TRIANGLE = 4
|
|
35
|
+
TETRAHEDRON = 5
|
|
36
|
+
|
|
37
|
+
@property
|
|
38
|
+
def prototype(self) -> "PrototypeElement":
|
|
39
|
+
"""Prototype element for the given element type"""
|
|
40
|
+
return {
|
|
41
|
+
Element.LINE_SEGMENT: LinearEdge,
|
|
42
|
+
Element.SQUARE: Square,
|
|
43
|
+
Element.CUBE: Cube,
|
|
44
|
+
Element.TRIANGLE: Triangle,
|
|
45
|
+
Element.TETRAHEDRON: Tetrahedron,
|
|
46
|
+
}[self]
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
class PrototypeElement:
|
|
26
50
|
dimension = 0
|
|
27
51
|
"""Intrinsic dimension of the element"""
|
|
28
52
|
|
|
@@ -76,7 +100,7 @@ def _point_count_from_order(order: int, family: Polynomial):
|
|
|
76
100
|
return point_count
|
|
77
101
|
|
|
78
102
|
|
|
79
|
-
class Cube(
|
|
103
|
+
class Cube(PrototypeElement):
|
|
80
104
|
dimension = 3
|
|
81
105
|
|
|
82
106
|
@staticmethod
|
|
@@ -97,7 +121,7 @@ class Cube(Element):
|
|
|
97
121
|
return coords, weights
|
|
98
122
|
|
|
99
123
|
|
|
100
|
-
class Square(
|
|
124
|
+
class Square(PrototypeElement):
|
|
101
125
|
dimension = 2
|
|
102
126
|
|
|
103
127
|
@staticmethod
|
|
@@ -118,7 +142,7 @@ class Square(Element):
|
|
|
118
142
|
return coords, weights
|
|
119
143
|
|
|
120
144
|
|
|
121
|
-
class LinearEdge(
|
|
145
|
+
class LinearEdge(PrototypeElement):
|
|
122
146
|
dimension = 1
|
|
123
147
|
|
|
124
148
|
@staticmethod
|
|
@@ -137,7 +161,7 @@ class LinearEdge(Element):
|
|
|
137
161
|
return coords, weights_1d
|
|
138
162
|
|
|
139
163
|
|
|
140
|
-
class Triangle(
|
|
164
|
+
class Triangle(PrototypeElement):
|
|
141
165
|
dimension = 2
|
|
142
166
|
|
|
143
167
|
@staticmethod
|
|
@@ -492,7 +516,7 @@ class Triangle(Element):
|
|
|
492
516
|
return Coords(-ref_delta[0] - ref_delta[1], ref_delta[0], ref_delta[1])
|
|
493
517
|
|
|
494
518
|
|
|
495
|
-
class Tetrahedron(
|
|
519
|
+
class Tetrahedron(PrototypeElement):
|
|
496
520
|
dimension = 3
|
|
497
521
|
|
|
498
522
|
@staticmethod
|
|
@@ -827,4 +851,4 @@ class Tetrahedron(Element):
|
|
|
827
851
|
c = c - Coords(n, 0.0, n)
|
|
828
852
|
|
|
829
853
|
# project on cube
|
|
830
|
-
return
|
|
854
|
+
return PrototypeElement.project(c)
|
|
@@ -17,11 +17,14 @@ from functools import cached_property
|
|
|
17
17
|
from typing import Any, ClassVar
|
|
18
18
|
|
|
19
19
|
import warp as wp
|
|
20
|
-
from warp.
|
|
21
|
-
from warp.fem
|
|
20
|
+
from warp._src.codegen import Struct
|
|
21
|
+
from warp._src.fem import cache
|
|
22
|
+
from warp._src.fem.types import NULL_ELEMENT_INDEX, OUTSIDE, Coords, ElementIndex, ElementKind, Sample, make_free_sample
|
|
22
23
|
|
|
23
24
|
from .element import Element
|
|
24
25
|
|
|
26
|
+
_wp_module_name_ = "warp.fem.geometry.geometry"
|
|
27
|
+
|
|
25
28
|
_mat32 = wp.mat(shape=(3, 2), dtype=float)
|
|
26
29
|
|
|
27
30
|
_NULL_BVH_ID = wp.uint64(0)
|
|
@@ -66,7 +69,7 @@ class Geometry:
|
|
|
66
69
|
@property
|
|
67
70
|
def cell_dimension(self) -> int:
|
|
68
71
|
"""Manifold dimension of the geometry cells"""
|
|
69
|
-
return self.reference_cell().dimension
|
|
72
|
+
return self.reference_cell().prototype.dimension
|
|
70
73
|
|
|
71
74
|
@property
|
|
72
75
|
def base(self) -> "Geometry":
|
|
@@ -80,22 +83,27 @@ class Geometry:
|
|
|
80
83
|
def __str__(self) -> str:
|
|
81
84
|
return self.name
|
|
82
85
|
|
|
83
|
-
CellArg:
|
|
86
|
+
CellArg: Struct
|
|
84
87
|
"""Structure containing arguments to be passed to device functions evaluating cell-related quantities"""
|
|
85
88
|
|
|
86
|
-
SideArg:
|
|
89
|
+
SideArg: Struct
|
|
87
90
|
"""Structure containing arguments to be passed to device functions evaluating side-related quantities"""
|
|
88
91
|
|
|
89
|
-
SideIndexArg:
|
|
92
|
+
SideIndexArg: Struct
|
|
90
93
|
"""Structure containing arguments to be passed to device functions for indexing sides"""
|
|
91
94
|
|
|
95
|
+
@cache.cached_arg_value
|
|
92
96
|
def cell_arg_value(self, device) -> "Geometry.CellArg":
|
|
93
97
|
"""Value of the arguments to be passed to cell-related device functions"""
|
|
94
|
-
|
|
98
|
+
args = self.CellArg()
|
|
99
|
+
self.fill_cell_arg(args, device)
|
|
100
|
+
return args
|
|
95
101
|
|
|
96
102
|
def fill_cell_arg(self, args: "Geometry.CellArg", device):
|
|
97
103
|
"""Fill the arguments to be passed to cell-related device functions"""
|
|
98
|
-
|
|
104
|
+
if self.cell_arg_value is __class__.cell_arg_value:
|
|
105
|
+
raise NotImplementedError()
|
|
106
|
+
args.assign(self.cell_arg_value(device))
|
|
99
107
|
|
|
100
108
|
@staticmethod
|
|
101
109
|
def cell_position(args: "Geometry.CellArg", s: "Sample"):
|
|
@@ -130,13 +138,31 @@ class Geometry:
|
|
|
130
138
|
For elements with the same dimension as the embedding space, this will be zero."""
|
|
131
139
|
raise NotImplementedError
|
|
132
140
|
|
|
141
|
+
@cache.cached_arg_value
|
|
133
142
|
def side_arg_value(self, device) -> "Geometry.SideArg":
|
|
134
143
|
"""Value of the arguments to be passed to side-related device functions"""
|
|
135
|
-
|
|
144
|
+
args = self.SideArg()
|
|
145
|
+
self.fill_side_arg(args, device)
|
|
146
|
+
return args
|
|
136
147
|
|
|
137
148
|
def fill_side_arg(self, args: "Geometry.SideArg", device):
|
|
138
149
|
"""Fill the arguments to be passed to side-related device functions"""
|
|
139
|
-
|
|
150
|
+
if self.side_arg_value is __class__.side_arg_value:
|
|
151
|
+
raise NotImplementedError()
|
|
152
|
+
args.assign(self.side_arg_value(device))
|
|
153
|
+
|
|
154
|
+
@cache.cached_arg_value
|
|
155
|
+
def side_index_arg_value(self, device) -> "Geometry.SideIndexArg":
|
|
156
|
+
"""Value of the arguments to be passed to side-related device functions"""
|
|
157
|
+
args = self.SideIndexArg()
|
|
158
|
+
self.fill_side_index_arg(args, device)
|
|
159
|
+
return args
|
|
160
|
+
|
|
161
|
+
def fill_side_index_arg(self, args: "Geometry.SideIndexArg", device):
|
|
162
|
+
"""Fill the arguments to be passed to side-related device functions"""
|
|
163
|
+
if self.side_index_arg_value is __class__.side_index_arg_value:
|
|
164
|
+
raise NotImplementedError()
|
|
165
|
+
args.assign(self.side_index_arg_value(device))
|
|
140
166
|
|
|
141
167
|
@staticmethod
|
|
142
168
|
def boundary_side_index(args: "Geometry.SideIndexArg", boundary_side_index: int):
|
|
@@ -269,7 +295,7 @@ class Geometry:
|
|
|
269
295
|
return wp.normalize(Fcross)
|
|
270
296
|
|
|
271
297
|
def _make_cell_measure(self):
|
|
272
|
-
REF_MEASURE = wp.constant(self.reference_cell().measure())
|
|
298
|
+
REF_MEASURE = wp.constant(self.reference_cell().prototype.measure())
|
|
273
299
|
|
|
274
300
|
@cache.dynamic_func(suffix=self.name)
|
|
275
301
|
def cell_measure(args: self.CellArg, s: Sample):
|
|
@@ -279,7 +305,7 @@ class Geometry:
|
|
|
279
305
|
return cell_measure
|
|
280
306
|
|
|
281
307
|
def _make_cell_normal(self):
|
|
282
|
-
cell_dim = self.reference_cell().dimension
|
|
308
|
+
cell_dim = self.reference_cell().prototype.dimension
|
|
283
309
|
geo_dim = self.dimension
|
|
284
310
|
normal_vec = wp.vec(length=geo_dim, dtype=float)
|
|
285
311
|
|
|
@@ -300,7 +326,7 @@ class Geometry:
|
|
|
300
326
|
return None
|
|
301
327
|
|
|
302
328
|
def _make_cell_inverse_deformation_gradient(self):
|
|
303
|
-
cell_dim = self.reference_cell().dimension
|
|
329
|
+
cell_dim = self.reference_cell().prototype.dimension
|
|
304
330
|
geo_dim = self.dimension
|
|
305
331
|
|
|
306
332
|
@cache.dynamic_func(suffix=self.name)
|
|
@@ -316,7 +342,7 @@ class Geometry:
|
|
|
316
342
|
return cell_inverse_deformation_gradient if cell_dim == geo_dim else cell_pseudoinverse_deformation_gradient
|
|
317
343
|
|
|
318
344
|
def _make_side_inverse_deformation_gradient(self):
|
|
319
|
-
side_dim = self.reference_side().dimension
|
|
345
|
+
side_dim = self.reference_side().prototype.dimension
|
|
320
346
|
geo_dim = self.dimension
|
|
321
347
|
|
|
322
348
|
if side_dim == geo_dim:
|
|
@@ -345,7 +371,7 @@ class Geometry:
|
|
|
345
371
|
return side_pseudoinverse_deformation_gradient
|
|
346
372
|
|
|
347
373
|
def _make_side_measure(self):
|
|
348
|
-
REF_MEASURE = wp.constant(self.reference_side().measure())
|
|
374
|
+
REF_MEASURE = wp.constant(self.reference_side().prototype.measure())
|
|
349
375
|
|
|
350
376
|
@cache.dynamic_func(suffix=self.name)
|
|
351
377
|
def side_measure(args: self.SideArg, s: Sample):
|
|
@@ -370,7 +396,7 @@ class Geometry:
|
|
|
370
396
|
return side_measure_ratio
|
|
371
397
|
|
|
372
398
|
def _make_side_normal(self):
|
|
373
|
-
side_dim = self.reference_side().dimension
|
|
399
|
+
side_dim = self.reference_side().prototype.dimension
|
|
374
400
|
geo_dim = self.dimension
|
|
375
401
|
|
|
376
402
|
@cache.dynamic_func(suffix=self.name)
|
|
@@ -407,12 +433,12 @@ class Geometry:
|
|
|
407
433
|
pos_type = cache.cached_vec_type(self.dimension, dtype=float)
|
|
408
434
|
|
|
409
435
|
if element_kind == ElementKind.CELL:
|
|
410
|
-
ref_elt = self.reference_cell()
|
|
436
|
+
ref_elt = self.reference_cell().prototype
|
|
411
437
|
arg_type = self.CellArg
|
|
412
438
|
elt_pos = self.cell_position
|
|
413
439
|
elt_inv_grad = self.cell_inverse_deformation_gradient
|
|
414
440
|
else:
|
|
415
|
-
ref_elt = self.reference_side()
|
|
441
|
+
ref_elt = self.reference_side().prototype
|
|
416
442
|
arg_type = self.SideArg
|
|
417
443
|
elt_pos = self.side_position
|
|
418
444
|
elt_inv_grad = self.side_inverse_deformation_gradient
|
|
@@ -452,12 +478,12 @@ class Geometry:
|
|
|
452
478
|
element_coordinates = self._make_element_coordinates(element_kind=element_kind, assume_linear=assume_linear)
|
|
453
479
|
|
|
454
480
|
if element_kind == ElementKind.CELL:
|
|
455
|
-
ref_elt = self.reference_cell()
|
|
481
|
+
ref_elt = self.reference_cell().prototype
|
|
456
482
|
arg_type = self.CellArg
|
|
457
483
|
elt_pos = self.cell_position
|
|
458
484
|
elt_def_grad = self.cell_deformation_gradient
|
|
459
485
|
else:
|
|
460
|
-
ref_elt = self.reference_side()
|
|
486
|
+
ref_elt = self.reference_side().prototype
|
|
461
487
|
arg_type = self.SideArg
|
|
462
488
|
elt_pos = self.side_position
|
|
463
489
|
elt_def_grad = self.side_deformation_gradient
|
|
@@ -636,8 +662,12 @@ class Geometry:
|
|
|
636
662
|
|
|
637
663
|
if self._bvhs is None:
|
|
638
664
|
self._bvhs = {}
|
|
665
|
+
|
|
639
666
|
self._bvhs[device.ordinal] = wp.Bvh(lowers, uppers)
|
|
640
667
|
|
|
668
|
+
Geometry.cell_arg_value.invalidate(self, device)
|
|
669
|
+
Geometry.side_arg_value.invalidate(self, device)
|
|
670
|
+
|
|
641
671
|
def bvh_id(self, device):
|
|
642
672
|
if self._bvhs is None:
|
|
643
673
|
return _NULL_BVH_ID
|
|
@@ -13,16 +13,19 @@
|
|
|
13
13
|
# See the License for the specific language governing permissions and
|
|
14
14
|
# limitations under the License.
|
|
15
15
|
|
|
16
|
+
from functools import cached_property
|
|
16
17
|
from typing import Any, Optional
|
|
17
18
|
|
|
18
19
|
import warp as wp
|
|
19
|
-
from warp.fem.cache import cached_arg_value, dynamic_func
|
|
20
|
-
from warp.fem.types import NULL_ELEMENT_INDEX, OUTSIDE, Coords, ElementIndex, Sample, make_free_sample
|
|
20
|
+
from warp._src.fem.cache import cached_arg_value, dynamic_func
|
|
21
|
+
from warp._src.fem.types import NULL_ELEMENT_INDEX, OUTSIDE, Coords, ElementIndex, Sample, make_free_sample
|
|
21
22
|
|
|
22
23
|
from .closest_point import project_on_box_at_origin
|
|
23
|
-
from .element import
|
|
24
|
+
from .element import Element
|
|
24
25
|
from .geometry import Geometry
|
|
25
26
|
|
|
27
|
+
_wp_module_name_ = "warp.fem.geometry.grid_2d"
|
|
28
|
+
|
|
26
29
|
|
|
27
30
|
@wp.struct
|
|
28
31
|
class Grid2DCellArg:
|
|
@@ -59,7 +62,7 @@ class Grid2D(Geometry):
|
|
|
59
62
|
|
|
60
63
|
self._res = res
|
|
61
64
|
|
|
62
|
-
@
|
|
65
|
+
@cached_property
|
|
63
66
|
def extents(self) -> wp.vec3:
|
|
64
67
|
# Avoid using native sub due to higher over of calling builtins from Python
|
|
65
68
|
return wp.vec2(
|
|
@@ -67,7 +70,7 @@ class Grid2D(Geometry):
|
|
|
67
70
|
self.bounds_hi[1] - self.bounds_lo[1],
|
|
68
71
|
)
|
|
69
72
|
|
|
70
|
-
@
|
|
73
|
+
@cached_property
|
|
71
74
|
def cell_size(self) -> wp.vec2:
|
|
72
75
|
ex = self.extents
|
|
73
76
|
return wp.vec2(
|
|
@@ -87,11 +90,11 @@ class Grid2D(Geometry):
|
|
|
87
90
|
def boundary_side_count(self):
|
|
88
91
|
return 2 * (self.res[0] + self.res[1])
|
|
89
92
|
|
|
90
|
-
def reference_cell(self) ->
|
|
91
|
-
return
|
|
93
|
+
def reference_cell(self) -> Element:
|
|
94
|
+
return Element.SQUARE
|
|
92
95
|
|
|
93
|
-
def reference_side(self) ->
|
|
94
|
-
return
|
|
96
|
+
def reference_side(self) -> Element:
|
|
97
|
+
return Element.LINE_SEGMENT
|
|
95
98
|
|
|
96
99
|
@property
|
|
97
100
|
def res(self):
|
|
@@ -101,7 +104,7 @@ class Grid2D(Geometry):
|
|
|
101
104
|
def origin(self):
|
|
102
105
|
return self.bounds_lo
|
|
103
106
|
|
|
104
|
-
@
|
|
107
|
+
@cached_property
|
|
105
108
|
def strides(self):
|
|
106
109
|
return wp.vec2i(self.res[1], 1)
|
|
107
110
|
|
|
@@ -183,12 +186,6 @@ class Grid2D(Geometry):
|
|
|
183
186
|
|
|
184
187
|
# Geometry device interface
|
|
185
188
|
|
|
186
|
-
@cached_arg_value
|
|
187
|
-
def cell_arg_value(self, device) -> CellArg:
|
|
188
|
-
args = self.CellArg()
|
|
189
|
-
self.fill_cell_arg(args, device)
|
|
190
|
-
return args
|
|
191
|
-
|
|
192
189
|
def fill_cell_arg(self, args: CellArg, device):
|
|
193
190
|
args.res = self.res
|
|
194
191
|
args.cell_size = self.cell_size
|
|
@@ -303,23 +300,17 @@ class Grid2D(Geometry):
|
|
|
303
300
|
@cached_arg_value
|
|
304
301
|
def side_arg_value(self, device) -> SideArg:
|
|
305
302
|
args = self.SideArg()
|
|
306
|
-
self.fill_side_arg(args, device)
|
|
307
|
-
return args
|
|
308
|
-
|
|
309
|
-
def fill_side_arg(self, args: SideArg, device):
|
|
310
303
|
args.axis_offsets = wp.vec2i(
|
|
311
304
|
0,
|
|
312
305
|
self.res[1],
|
|
313
306
|
)
|
|
314
307
|
args.cell_count = self.cell_count()
|
|
315
308
|
args.cell_arg = self.cell_arg_value(device)
|
|
309
|
+
return args
|
|
316
310
|
|
|
317
311
|
def side_index_arg_value(self, device) -> SideIndexArg:
|
|
318
312
|
return self.side_arg_value(device)
|
|
319
313
|
|
|
320
|
-
def fill_side_index_arg(self, args: SideIndexArg, device):
|
|
321
|
-
self.fill_side_arg(args, device)
|
|
322
|
-
|
|
323
314
|
@wp.func
|
|
324
315
|
def boundary_side_index(args: SideArg, boundary_side_index: int):
|
|
325
316
|
"""Boundary side to side index"""
|
|
@@ -13,16 +13,19 @@
|
|
|
13
13
|
# See the License for the specific language governing permissions and
|
|
14
14
|
# limitations under the License.
|
|
15
15
|
|
|
16
|
+
from functools import cached_property
|
|
16
17
|
from typing import Any, Optional
|
|
17
18
|
|
|
18
19
|
import warp as wp
|
|
19
|
-
from warp.fem.cache import cached_arg_value, dynamic_func
|
|
20
|
-
from warp.fem.types import NULL_ELEMENT_INDEX, OUTSIDE, Coords, ElementIndex, Sample, make_free_sample
|
|
20
|
+
from warp._src.fem.cache import cached_arg_value, dynamic_func
|
|
21
|
+
from warp._src.fem.types import NULL_ELEMENT_INDEX, OUTSIDE, Coords, ElementIndex, Sample, make_free_sample
|
|
21
22
|
|
|
22
23
|
from .closest_point import project_on_box_at_origin
|
|
23
|
-
from .element import
|
|
24
|
+
from .element import Element
|
|
24
25
|
from .geometry import Geometry
|
|
25
26
|
|
|
27
|
+
_wp_module_name_ = "warp.fem.geometry.grid_3d"
|
|
28
|
+
|
|
26
29
|
|
|
27
30
|
@wp.struct
|
|
28
31
|
class Grid3DCellArg:
|
|
@@ -56,7 +59,7 @@ class Grid3D(Geometry):
|
|
|
56
59
|
|
|
57
60
|
self._res = res
|
|
58
61
|
|
|
59
|
-
@
|
|
62
|
+
@cached_property
|
|
60
63
|
def extents(self) -> wp.vec3:
|
|
61
64
|
# Avoid using native sub due to higher over of calling builtins from Python
|
|
62
65
|
return wp.vec3(
|
|
@@ -65,7 +68,7 @@ class Grid3D(Geometry):
|
|
|
65
68
|
self.bounds_hi[2] - self.bounds_lo[2],
|
|
66
69
|
)
|
|
67
70
|
|
|
68
|
-
@
|
|
71
|
+
@cached_property
|
|
69
72
|
def cell_size(self) -> wp.vec3:
|
|
70
73
|
ex = self.extents
|
|
71
74
|
return wp.vec3(
|
|
@@ -97,11 +100,11 @@ class Grid3D(Geometry):
|
|
|
97
100
|
def boundary_side_count(self):
|
|
98
101
|
return 2 * (self.res[1]) * (self.res[2]) + (self.res[0]) * 2 * (self.res[2]) + (self.res[0]) * (self.res[1]) * 2
|
|
99
102
|
|
|
100
|
-
def reference_cell(self) ->
|
|
101
|
-
return
|
|
103
|
+
def reference_cell(self) -> Element:
|
|
104
|
+
return Element.CUBE
|
|
102
105
|
|
|
103
|
-
def reference_side(self) ->
|
|
104
|
-
return
|
|
106
|
+
def reference_side(self) -> Element:
|
|
107
|
+
return Element.SQUARE
|
|
105
108
|
|
|
106
109
|
@property
|
|
107
110
|
def res(self):
|
|
@@ -111,7 +114,7 @@ class Grid3D(Geometry):
|
|
|
111
114
|
def origin(self):
|
|
112
115
|
return self.bounds_lo
|
|
113
116
|
|
|
114
|
-
@
|
|
117
|
+
@cached_property
|
|
115
118
|
def strides(self):
|
|
116
119
|
return wp.vec3i(self.res[1] * self.res[2], self.res[2], 1)
|
|
117
120
|
|
|
@@ -223,12 +226,6 @@ class Grid3D(Geometry):
|
|
|
223
226
|
|
|
224
227
|
# Geometry device interface
|
|
225
228
|
|
|
226
|
-
@cached_arg_value
|
|
227
|
-
def cell_arg_value(self, device) -> CellArg:
|
|
228
|
-
args = self.CellArg()
|
|
229
|
-
self.fill_cell_arg(args, device)
|
|
230
|
-
return args
|
|
231
|
-
|
|
232
229
|
def fill_cell_arg(self, args: CellArg, device):
|
|
233
230
|
args.res = self.res
|
|
234
231
|
args.origin = self.bounds_lo
|
|
@@ -348,10 +345,6 @@ class Grid3D(Geometry):
|
|
|
348
345
|
@cached_arg_value
|
|
349
346
|
def side_arg_value(self, device) -> SideArg:
|
|
350
347
|
args = self.SideArg()
|
|
351
|
-
self.fill_side_arg(args, device)
|
|
352
|
-
return args
|
|
353
|
-
|
|
354
|
-
def fill_side_arg(self, args: SideArg, device):
|
|
355
348
|
axis_dims = wp.vec3i(
|
|
356
349
|
self.res[1] * self.res[2],
|
|
357
350
|
self.res[2] * self.res[0],
|
|
@@ -364,13 +357,11 @@ class Grid3D(Geometry):
|
|
|
364
357
|
)
|
|
365
358
|
args.cell_count = self.cell_count()
|
|
366
359
|
args.cell_arg = self.cell_arg_value(device)
|
|
360
|
+
return args
|
|
367
361
|
|
|
368
362
|
def side_index_arg_value(self, device) -> SideIndexArg:
|
|
369
363
|
return self.side_arg_value(device)
|
|
370
364
|
|
|
371
|
-
def fill_side_index_arg(self, args: SideIndexArg, device):
|
|
372
|
-
self.fill_side_arg(args, device)
|
|
373
|
-
|
|
374
365
|
@wp.func
|
|
375
366
|
def boundary_side_index(args: SideArg, boundary_side_index: int):
|
|
376
367
|
"""Boundary side to side index"""
|