warp-lang 1.9.1__py3-none-win_amd64.whl → 1.10.0rc2__py3-none-win_amd64.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 +794 -305
- warp/_src/__init__.py +14 -0
- warp/_src/autograd.py +1075 -0
- warp/_src/build.py +618 -0
- warp/_src/build_dll.py +640 -0
- warp/{builtins.py → _src/builtins.py} +1382 -377
- warp/_src/codegen.py +4359 -0
- warp/{config.py → _src/config.py} +178 -169
- warp/_src/constants.py +57 -0
- warp/_src/context.py +8294 -0
- warp/_src/dlpack.py +462 -0
- warp/_src/fabric.py +355 -0
- warp/_src/fem/__init__.py +14 -0
- warp/_src/fem/adaptivity.py +508 -0
- warp/_src/fem/cache.py +687 -0
- warp/_src/fem/dirichlet.py +188 -0
- warp/{fem → _src/fem}/domain.py +40 -30
- warp/_src/fem/field/__init__.py +131 -0
- warp/_src/fem/field/field.py +701 -0
- warp/{fem → _src/fem}/field/nodal_field.py +30 -15
- warp/{fem → _src/fem}/field/restriction.py +1 -1
- warp/{fem → _src/fem}/field/virtual.py +53 -27
- warp/_src/fem/geometry/__init__.py +32 -0
- warp/{fem → _src/fem}/geometry/adaptive_nanogrid.py +77 -163
- warp/_src/fem/geometry/closest_point.py +97 -0
- warp/{fem → _src/fem}/geometry/deformed_geometry.py +14 -22
- warp/{fem → _src/fem}/geometry/element.py +32 -10
- warp/{fem → _src/fem}/geometry/geometry.py +48 -20
- warp/{fem → _src/fem}/geometry/grid_2d.py +12 -23
- warp/{fem → _src/fem}/geometry/grid_3d.py +12 -23
- warp/{fem → _src/fem}/geometry/hexmesh.py +40 -63
- warp/{fem → _src/fem}/geometry/nanogrid.py +255 -248
- warp/{fem → _src/fem}/geometry/partition.py +121 -63
- warp/{fem → _src/fem}/geometry/quadmesh.py +26 -45
- warp/{fem → _src/fem}/geometry/tetmesh.py +40 -63
- warp/{fem → _src/fem}/geometry/trimesh.py +26 -45
- warp/{fem → _src/fem}/integrate.py +164 -158
- warp/_src/fem/linalg.py +383 -0
- warp/_src/fem/operator.py +396 -0
- warp/_src/fem/polynomial.py +229 -0
- warp/{fem → _src/fem}/quadrature/pic_quadrature.py +15 -20
- warp/{fem → _src/fem}/quadrature/quadrature.py +95 -47
- warp/_src/fem/space/__init__.py +248 -0
- warp/{fem → _src/fem}/space/basis_function_space.py +20 -11
- warp/_src/fem/space/basis_space.py +679 -0
- warp/{fem → _src/fem}/space/dof_mapper.py +3 -3
- warp/{fem → _src/fem}/space/function_space.py +14 -13
- warp/{fem → _src/fem}/space/grid_2d_function_space.py +4 -7
- warp/{fem → _src/fem}/space/grid_3d_function_space.py +4 -4
- warp/{fem → _src/fem}/space/hexmesh_function_space.py +4 -10
- warp/{fem → _src/fem}/space/nanogrid_function_space.py +3 -9
- warp/{fem → _src/fem}/space/partition.py +117 -60
- warp/{fem → _src/fem}/space/quadmesh_function_space.py +4 -10
- warp/{fem → _src/fem}/space/restriction.py +66 -33
- warp/_src/fem/space/shape/__init__.py +152 -0
- warp/{fem → _src/fem}/space/shape/cube_shape_function.py +9 -9
- warp/{fem → _src/fem}/space/shape/shape_function.py +8 -9
- warp/{fem → _src/fem}/space/shape/square_shape_function.py +6 -6
- warp/{fem → _src/fem}/space/shape/tet_shape_function.py +3 -3
- warp/{fem → _src/fem}/space/shape/triangle_shape_function.py +3 -3
- warp/{fem → _src/fem}/space/tetmesh_function_space.py +3 -9
- warp/_src/fem/space/topology.py +459 -0
- warp/{fem → _src/fem}/space/trimesh_function_space.py +3 -9
- warp/_src/fem/types.py +112 -0
- warp/_src/fem/utils.py +486 -0
- warp/_src/jax.py +186 -0
- warp/_src/jax_experimental/__init__.py +14 -0
- warp/_src/jax_experimental/custom_call.py +387 -0
- warp/_src/jax_experimental/ffi.py +1284 -0
- warp/_src/jax_experimental/xla_ffi.py +656 -0
- warp/_src/marching_cubes.py +708 -0
- warp/_src/math.py +414 -0
- warp/_src/optim/__init__.py +14 -0
- warp/_src/optim/adam.py +163 -0
- warp/_src/optim/linear.py +1606 -0
- warp/_src/optim/sgd.py +112 -0
- warp/_src/paddle.py +406 -0
- warp/_src/render/__init__.py +14 -0
- warp/_src/render/imgui_manager.py +289 -0
- warp/_src/render/render_opengl.py +3636 -0
- warp/_src/render/render_usd.py +937 -0
- warp/_src/render/utils.py +160 -0
- warp/_src/sparse.py +2716 -0
- warp/_src/tape.py +1206 -0
- warp/{thirdparty → _src/thirdparty}/unittest_parallel.py +9 -2
- warp/_src/torch.py +391 -0
- warp/_src/types.py +5870 -0
- warp/_src/utils.py +1693 -0
- warp/autograd.py +12 -1054
- warp/bin/warp-clang.dll +0 -0
- warp/bin/warp.dll +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 +1 -1
- 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 +253 -171
- 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 +14 -14
- 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 +527 -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.0rc2.dist-info}/METADATA +46 -99
- warp_lang-1.10.0rc2.dist-info/RECORD +468 -0
- warp_lang-1.10.0rc2.dist-info/licenses/licenses/Gaia-LICENSE.txt +6 -0
- warp_lang-1.10.0rc2.dist-info/licenses/licenses/appdirs-LICENSE.txt +22 -0
- warp_lang-1.10.0rc2.dist-info/licenses/licenses/asset_pixel_jpg-LICENSE.txt +3 -0
- warp_lang-1.10.0rc2.dist-info/licenses/licenses/cuda-LICENSE.txt +1582 -0
- warp_lang-1.10.0rc2.dist-info/licenses/licenses/dlpack-LICENSE.txt +201 -0
- warp_lang-1.10.0rc2.dist-info/licenses/licenses/fp16-LICENSE.txt +28 -0
- warp_lang-1.10.0rc2.dist-info/licenses/licenses/libmathdx-LICENSE.txt +220 -0
- warp_lang-1.10.0rc2.dist-info/licenses/licenses/llvm-LICENSE.txt +279 -0
- warp_lang-1.10.0rc2.dist-info/licenses/licenses/moller-LICENSE.txt +16 -0
- warp_lang-1.10.0rc2.dist-info/licenses/licenses/nanovdb-LICENSE.txt +2 -0
- warp_lang-1.10.0rc2.dist-info/licenses/licenses/nvrtc-LICENSE.txt +1592 -0
- warp_lang-1.10.0rc2.dist-info/licenses/licenses/svd-LICENSE.txt +23 -0
- warp_lang-1.10.0rc2.dist-info/licenses/licenses/unittest_parallel-LICENSE.txt +21 -0
- warp_lang-1.10.0rc2.dist-info/licenses/licenses/usd-LICENSE.txt +213 -0
- warp_lang-1.10.0rc2.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.0rc2.dist-info}/WHEEL +0 -0
- {warp_lang-1.9.1.dist-info → warp_lang-1.10.0rc2.dist-info}/licenses/LICENSE.md +0 -0
- {warp_lang-1.9.1.dist-info → warp_lang-1.10.0rc2.dist-info}/top_level.txt +0 -0
|
@@ -16,10 +16,10 @@
|
|
|
16
16
|
from typing import Any, ClassVar
|
|
17
17
|
|
|
18
18
|
import warp as wp
|
|
19
|
-
from warp.fem import cache
|
|
20
|
-
from warp.fem.space import
|
|
21
|
-
from warp.fem.types import NULL_NODE_INDEX, ElementIndex, Sample
|
|
22
|
-
from warp.fem.utils import type_zero_element
|
|
19
|
+
from warp._src.fem import cache
|
|
20
|
+
from warp._src.fem.space import FunctionSpace, SpacePartition
|
|
21
|
+
from warp._src.fem.types import NULL_NODE_INDEX, ElementIndex, Sample
|
|
22
|
+
from warp._src.fem.utils import type_zero_element
|
|
23
23
|
|
|
24
24
|
from .field import DiscreteField
|
|
25
25
|
|
|
@@ -47,7 +47,7 @@ class NodalFieldBase(DiscreteField):
|
|
|
47
47
|
"at_node": lambda obj: obj._make_at_node(),
|
|
48
48
|
}
|
|
49
49
|
|
|
50
|
-
def __init__(self, space:
|
|
50
|
+
def __init__(self, space: FunctionSpace, space_partition: SpacePartition):
|
|
51
51
|
super().__init__(space, space_partition)
|
|
52
52
|
cache.setup_dynamic_attributes(self)
|
|
53
53
|
|
|
@@ -325,10 +325,10 @@ class NodalFieldBase(DiscreteField):
|
|
|
325
325
|
class NodalField(NodalFieldBase):
|
|
326
326
|
"""A field holding values for all degrees of freedom at each node of the underlying function space partition
|
|
327
327
|
|
|
328
|
-
See also: warp.fem.space.
|
|
328
|
+
See also: warp.fem.space.FunctionSpace.make_field
|
|
329
329
|
"""
|
|
330
330
|
|
|
331
|
-
def __init__(self, space:
|
|
331
|
+
def __init__(self, space: FunctionSpace, space_partition: SpacePartition):
|
|
332
332
|
if space.topology != space_partition.space_topology:
|
|
333
333
|
raise ValueError("Incompatible space and space partition topologies")
|
|
334
334
|
|
|
@@ -336,10 +336,9 @@ class NodalField(NodalFieldBase):
|
|
|
336
336
|
|
|
337
337
|
self._dof_values = wp.zeros(n=self.space_partition.node_count(), dtype=self.dof_dtype)
|
|
338
338
|
|
|
339
|
+
@cache.cached_arg_value
|
|
339
340
|
def eval_arg_value(self, device):
|
|
340
|
-
|
|
341
|
-
self.fill_eval_arg(arg, device)
|
|
342
|
-
return arg
|
|
341
|
+
return super().eval_arg_value(device)
|
|
343
342
|
|
|
344
343
|
def fill_eval_arg(self, arg, device):
|
|
345
344
|
arg.dof_values = self._dof_values.to(device)
|
|
@@ -347,6 +346,25 @@ class NodalField(NodalFieldBase):
|
|
|
347
346
|
self.space_partition.fill_partition_arg(arg.partition_arg, device)
|
|
348
347
|
self.space.topology.fill_topo_arg(arg.topology_arg, device)
|
|
349
348
|
|
|
349
|
+
def rebind(self, space: FunctionSpace, space_partition: SpacePartition):
|
|
350
|
+
"""Rebind the field to a new space partition and space.
|
|
351
|
+
The new space partition and space must be of similar types as the current ones
|
|
352
|
+
"""
|
|
353
|
+
|
|
354
|
+
if space_partition.name != self.space_partition.name or space.name != self.space.name:
|
|
355
|
+
raise ValueError("Incompatible space and/or space partition")
|
|
356
|
+
|
|
357
|
+
self._space = space
|
|
358
|
+
self._space_partition = space_partition
|
|
359
|
+
|
|
360
|
+
node_count = space_partition.node_count()
|
|
361
|
+
if node_count < self._dof_values.shape[0]:
|
|
362
|
+
self._dof_values = self._dof_values[:node_count]
|
|
363
|
+
elif node_count > self._dof_values.shape[0]:
|
|
364
|
+
self._dof_values = wp.empty(n=node_count, dtype=self.dof_dtype)
|
|
365
|
+
|
|
366
|
+
self.eval_arg_value.invalidate(self)
|
|
367
|
+
|
|
350
368
|
@property
|
|
351
369
|
def dof_values(self) -> wp.array:
|
|
352
370
|
"""Returns a warp array containing the values at all degrees of freedom of the underlying space partition"""
|
|
@@ -365,16 +383,13 @@ class NodalField(NodalFieldBase):
|
|
|
365
383
|
else:
|
|
366
384
|
self._dof_values = wp.array(values, dtype=self.dof_dtype)
|
|
367
385
|
|
|
386
|
+
self.eval_arg_value.invalidate(self)
|
|
387
|
+
|
|
368
388
|
class Trace(NodalFieldBase):
|
|
369
389
|
def __init__(self, field):
|
|
370
390
|
self._field = field
|
|
371
391
|
super().__init__(field.space.trace(), field.space_partition)
|
|
372
392
|
|
|
373
|
-
def eval_arg_value(self, device):
|
|
374
|
-
arg = self.EvalArg()
|
|
375
|
-
self.fill_eval_arg(arg, device)
|
|
376
|
-
return arg
|
|
377
|
-
|
|
378
393
|
def fill_eval_arg(self, arg, device):
|
|
379
394
|
arg.dof_values = self._field.dof_values.to(device)
|
|
380
395
|
self.space.fill_space_arg(arg.space_arg, device)
|
|
@@ -13,16 +13,17 @@
|
|
|
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, ClassVar, Dict, Optional, Set
|
|
17
18
|
|
|
18
19
|
import warp as wp
|
|
19
|
-
import warp.fem.operator as operator
|
|
20
|
-
from warp.fem import cache
|
|
21
|
-
from warp.fem.domain import GeometryDomain
|
|
22
|
-
from warp.fem.linalg import basis_coefficient, generalized_inner, generalized_outer
|
|
23
|
-
from warp.fem.quadrature import Quadrature
|
|
24
|
-
from warp.fem.space import FunctionSpace, SpacePartition, SpaceRestriction
|
|
25
|
-
from warp.fem.types import (
|
|
20
|
+
import warp._src.fem.operator as operator
|
|
21
|
+
from warp._src.fem import cache
|
|
22
|
+
from warp._src.fem.domain import GeometryDomain
|
|
23
|
+
from warp._src.fem.linalg import basis_coefficient, generalized_inner, generalized_outer
|
|
24
|
+
from warp._src.fem.quadrature import Quadrature
|
|
25
|
+
from warp._src.fem.space import FunctionSpace, SpacePartition, SpaceRestriction
|
|
26
|
+
from warp._src.fem.types import (
|
|
26
27
|
NULL_ELEMENT_INDEX,
|
|
27
28
|
NULL_NODE_INDEX,
|
|
28
29
|
DofIndex,
|
|
@@ -32,7 +33,7 @@ from warp.fem.types import (
|
|
|
32
33
|
get_node_coord,
|
|
33
34
|
get_node_index_in_element,
|
|
34
35
|
)
|
|
35
|
-
from warp.fem.utils import type_zero_element
|
|
36
|
+
from warp._src.fem.utils import type_zero_element
|
|
36
37
|
|
|
37
38
|
from .field import SpaceField
|
|
38
39
|
|
|
@@ -55,28 +56,44 @@ class AdjointField(SpaceField):
|
|
|
55
56
|
"node_index": lambda obj: obj._make_node_index(),
|
|
56
57
|
}
|
|
57
58
|
|
|
58
|
-
def __init__(self, space: FunctionSpace, space_partition: SpacePartition):
|
|
59
|
+
def __init__(self, space: FunctionSpace, space_partition: SpacePartition, domain: GeometryDomain):
|
|
59
60
|
super().__init__(space, space_partition=space_partition)
|
|
60
61
|
|
|
61
62
|
self.node_dof_count = self.space.NODE_DOF_COUNT
|
|
62
63
|
self.value_dof_count = self.space.VALUE_DOF_COUNT
|
|
64
|
+
self.domain = domain
|
|
63
65
|
|
|
64
66
|
cache.setup_dynamic_attributes(self)
|
|
65
67
|
|
|
66
|
-
@
|
|
68
|
+
@cached_property
|
|
67
69
|
def name(self) -> str:
|
|
68
70
|
return f"{self.__class__.__name__}{self.space.name}{self._space_partition.name}"
|
|
69
71
|
|
|
70
72
|
@cache.cached_arg_value
|
|
71
73
|
def eval_arg_value(self, device):
|
|
72
|
-
|
|
73
|
-
self.fill_eval_arg(arg, device)
|
|
74
|
-
return arg
|
|
74
|
+
return super().eval_arg_value(device)
|
|
75
75
|
|
|
76
76
|
def fill_eval_arg(self, arg, device):
|
|
77
77
|
self.space.fill_space_arg(arg.space_arg, device)
|
|
78
78
|
self.space.topology.fill_topo_arg(arg.topo_arg, device)
|
|
79
79
|
|
|
80
|
+
def rebind(self, space: FunctionSpace, space_partition: SpacePartition, domain: GeometryDomain):
|
|
81
|
+
"""Rebind the field to a new space partition, space and domain.
|
|
82
|
+
The new space topology and space must be of similar types as the current ones
|
|
83
|
+
"""
|
|
84
|
+
|
|
85
|
+
if (
|
|
86
|
+
space_partition.space_topology.name != self.space_partition.space_topology.name
|
|
87
|
+
or space.name != self.space.name
|
|
88
|
+
):
|
|
89
|
+
raise ValueError("Incompatible space and/or space partition")
|
|
90
|
+
|
|
91
|
+
self._space = space
|
|
92
|
+
self._space_partition = space_partition
|
|
93
|
+
self.domain = domain
|
|
94
|
+
|
|
95
|
+
self.eval_arg_value.invalidate(self)
|
|
96
|
+
|
|
80
97
|
def _make_eval_arg(self):
|
|
81
98
|
@cache.dynamic_struct(suffix=self.name)
|
|
82
99
|
class EvalArg:
|
|
@@ -254,7 +271,7 @@ class TestField(AdjointField):
|
|
|
254
271
|
defined for a different value type than the test function value type, as long as the node topology is similar.
|
|
255
272
|
"""
|
|
256
273
|
|
|
257
|
-
def __init__(self,
|
|
274
|
+
def __init__(self, space: FunctionSpace, space_restriction: SpaceRestriction):
|
|
258
275
|
if space_restriction.domain.dimension == space.dimension - 1:
|
|
259
276
|
space = space.trace()
|
|
260
277
|
|
|
@@ -264,10 +281,17 @@ class TestField(AdjointField):
|
|
|
264
281
|
if space.topology != space_restriction.space_topology:
|
|
265
282
|
raise ValueError("Incompatible space and space partition topologies")
|
|
266
283
|
|
|
267
|
-
super().__init__(space, space_restriction.space_partition)
|
|
284
|
+
super().__init__(space, space_restriction.space_partition, space_restriction.domain)
|
|
285
|
+
|
|
286
|
+
self.space_restriction = space_restriction
|
|
287
|
+
|
|
288
|
+
def rebind(self, space: FunctionSpace, space_restriction: SpaceRestriction):
|
|
289
|
+
"""Rebind the test field to a new space restriction and space.
|
|
290
|
+
The new space restriction and space must be of a similar type as the current ones
|
|
291
|
+
"""
|
|
268
292
|
|
|
293
|
+
super().rebind(space, space_restriction.space_partition, space_restriction.domain)
|
|
269
294
|
self.space_restriction = space_restriction
|
|
270
|
-
self.domain = space_restriction.domain
|
|
271
295
|
|
|
272
296
|
@wp.func
|
|
273
297
|
def _get_dof(s: Sample):
|
|
@@ -292,8 +316,7 @@ class TrialField(AdjointField):
|
|
|
292
316
|
if not space.topology.is_derived_from(space_partition.space_topology):
|
|
293
317
|
raise ValueError("Incompatible space and space partition topologies")
|
|
294
318
|
|
|
295
|
-
super().__init__(space, space_partition)
|
|
296
|
-
self.domain = domain
|
|
319
|
+
super().__init__(space, space_partition, domain)
|
|
297
320
|
|
|
298
321
|
def partition_node_count(self) -> int:
|
|
299
322
|
"""Returns the number of nodes in the associated space topology partition"""
|
|
@@ -410,14 +433,11 @@ class LocalAdjointField(SpaceField):
|
|
|
410
433
|
def name(self) -> str:
|
|
411
434
|
return f"{self.global_field.name}_Taylor{self._dof_suffix}"
|
|
412
435
|
|
|
413
|
-
def eval_arg_value(self, device):
|
|
414
|
-
return LocalAdjointField.EvalArg()
|
|
415
|
-
|
|
416
436
|
def fill_eval_arg(self, arg, device):
|
|
417
437
|
pass
|
|
418
438
|
|
|
419
439
|
def _make_element_eval_arg(self):
|
|
420
|
-
from warp.fem import cache
|
|
440
|
+
from warp._src.fem import cache
|
|
421
441
|
|
|
422
442
|
@cache.dynamic_struct(suffix=self.name)
|
|
423
443
|
class ElementEvalArg:
|
|
@@ -631,7 +651,7 @@ def make_linear_dispatch_kernel(
|
|
|
631
651
|
return qp, elem_offset, qp_point_count, element_index, test_element_index
|
|
632
652
|
|
|
633
653
|
@cache.dynamic_kernel(
|
|
634
|
-
|
|
654
|
+
(test.name, quadrature.name, cache.pod_type_key(accumulate_dtype), tile_size),
|
|
635
655
|
kernel_options=kernel_options,
|
|
636
656
|
)
|
|
637
657
|
def dispatch_linear_kernel_fn(
|
|
@@ -646,6 +666,9 @@ def make_linear_dispatch_kernel(
|
|
|
646
666
|
local_node_index, lane = wp.tid()
|
|
647
667
|
|
|
648
668
|
node_index = space_restriction.node_partition_index(test_arg, local_node_index)
|
|
669
|
+
if node_index == NULL_NODE_INDEX:
|
|
670
|
+
return
|
|
671
|
+
|
|
649
672
|
element_beg, element_end = space_restriction.node_element_range(test_arg, node_index)
|
|
650
673
|
|
|
651
674
|
val_sum = res_vec()
|
|
@@ -816,7 +839,7 @@ def make_bilinear_dispatch_kernel(
|
|
|
816
839
|
val_t = cache.cached_mat_type(shape=(test.node_dof_count, trial.node_dof_count), dtype=accumulate_dtype)
|
|
817
840
|
|
|
818
841
|
@cache.dynamic_kernel(
|
|
819
|
-
|
|
842
|
+
(trial.name, test.name, quadrature.name, cache.pod_type_key(accumulate_dtype), tile_size),
|
|
820
843
|
kernel_options=kernel_options,
|
|
821
844
|
)
|
|
822
845
|
def dispatch_bilinear_kernel_fn(
|
|
@@ -841,9 +864,12 @@ def make_bilinear_dispatch_kernel(
|
|
|
841
864
|
element_index = domain.element_index(domain_index_arg, test_element_index.domain_element_index)
|
|
842
865
|
test_node = test_element_index.node_index_in_element
|
|
843
866
|
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
867
|
+
if element_index == NULL_ELEMENT_INDEX:
|
|
868
|
+
element_trial_node_count = 0
|
|
869
|
+
else:
|
|
870
|
+
element_trial_node_count = trial.space.topology.element_node_count(
|
|
871
|
+
domain_arg, trial_topology_arg, element_index
|
|
872
|
+
)
|
|
847
873
|
|
|
848
874
|
if trial_node >= element_trial_node_count:
|
|
849
875
|
block_offset = test_node_offset * MAX_NODES_PER_ELEMENT + trial_node
|
|
@@ -0,0 +1,32 @@
|
|
|
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 .adaptive_nanogrid import AdaptiveNanogrid
|
|
17
|
+
from .deformed_geometry import DeformedGeometry
|
|
18
|
+
from .element import Element
|
|
19
|
+
from .geometry import Geometry
|
|
20
|
+
from .grid_2d import Grid2D
|
|
21
|
+
from .grid_3d import Grid3D
|
|
22
|
+
from .hexmesh import Hexmesh
|
|
23
|
+
from .nanogrid import Nanogrid
|
|
24
|
+
from .partition import (
|
|
25
|
+
ExplicitGeometryPartition,
|
|
26
|
+
GeometryPartition,
|
|
27
|
+
LinearGeometryPartition,
|
|
28
|
+
WholeGeometryPartition,
|
|
29
|
+
)
|
|
30
|
+
from .quadmesh import Quadmesh, Quadmesh2D, Quadmesh3D
|
|
31
|
+
from .tetmesh import Tetmesh
|
|
32
|
+
from .trimesh import Trimesh, Trimesh2D, Trimesh3D
|