import taichi as ti import random import numpy as np ti.require_version(0, 3, 24) class MPMSolver: material_water = 0 material_elastic = 1 material_snow = 2 def __init__(self, res, size=1, max_num_particles=2**20): self.dim = len(res) assert self.dim in ( 2, 3), "MPM solver supports only 2D and 3D simulations." self.res = res self.n_particles = 0 self.dx = size / res[0] self.inv_dx = 1.0 / self.dx self.default_dt = 1e-3 * self.dx * size self.p_vol = self.dx**self.dim self.p_rho = 1 self.p_mass = self.p_vol * self.p_rho self.max_num_particles = max_num_particles self.gravity = ti.Vector(self.dim, dt=ti.f32, shape=()) self.source_bound = ti.Vector(self.dim, dt=ti.f32, shape=2) # position self.x = ti.Vector(self.dim, dt=ti.f32) # velocity self.v = ti.Vector(self.dim, dt=ti.f32)
import taichi as ti import numpy as np import time import numbers import math import multiprocessing as mp USE_IN_BLENDER = False ti.require_version(0, 6, 22) @ti.data_oriented class MPMSolver: material_water = 0 material_elastic = 1 material_snow = 2 material_sand = 3 materials = { 'WATER': material_water, 'ELASTIC': material_elastic, 'SNOW': material_snow, 'SAND': material_sand } # Surface boundary conditions # Stick to the boundary surface_sticky = 0 # Slippy boundary surface_slip = 1
import taichi as ti import numpy as np import time import numbers import math import multiprocessing as mp USE_IN_BLENDER = False ti.require_version(0, 7, 10) # TODO: water needs Jp - fix this. @ti.data_oriented class MPMSolver: material_water = 0 material_elastic = 1 material_snow = 2 material_sand = 3 materials = { 'WATER': material_water, 'ELASTIC': material_elastic, 'SNOW': material_snow, 'SAND': material_sand } # Surface boundary conditions # Stick to the boundary
import taichi as ti import numpy as np import numbers import math USE_IN_BLENDER = False ti.require_version(0, 6, 4) @ti.data_oriented class MPMSolver: material_water = 0 material_elastic = 1 material_snow = 2 material_sand = 3 materials = { 'WATER': material_water, 'ELASTIC': material_elastic, 'SNOW': material_snow, 'SAND': material_sand } # Surface boundary conditions # Stick to the boundary surface_sticky = 0 # Slippy boundary surface_slip = 1 # Slippy and free to separate surface_separate = 2
import taichi as ti import numpy as np import numbers import math USE_IN_BLENDER = False ti.require_version(0, 5, 11) @ti.data_oriented class MPMSolver: material_water = 0 material_elastic = 1 material_snow = 2 material_sand = 3 materials = { 'WATER': material_water, 'ELASTIC': material_elastic, 'SNOW': material_snow, 'SAND': material_sand } # Surface boundary conditions # Stick to the boundary surface_sticky = 0 # Slippy boundary surface_slip = 1 # Slippy and free to separate surface_separate = 2
# fractal.py import taichi as ti import numpy as np import math from mpm_solver import MPMSolver from renderer_utils import out_dir, ray_aabb_intersection, inf, eps, \ intersect_sphere, sphere_aabb_intersect_motion, inside_taichi ti.require_version(0, 5, 10) ti.init(arch=ti.x64, debug=False, print_ir=False) # ti.core.toggle_advanced_optimization(False) n = 120 m = 20 hit_sphere = 0 pixels = ti.Vector(4, dt=ti.f32, shape=(n * 16, n * 9)) support = 1 shutter_time = 0.5e-3 sphere_radius = 0.03 MAX_STEPS = 100 MAX_STEPS_reflection = 50 MAX_DIST = 100.0 SURF_DIST = 0.01 SURF_DIST_reflection = 0.02 REFRACT_INDEX = 1.6 DELTA = 0.001 refractionRatio = 1.0 / REFRACT_INDEX distanceFactor = 1.0 max_num_particles_per_cell = 8192 * 1024 voxel_has_particle = ti.var(dt=ti.i32)