Ejemplo n.º 1
0
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)
Ejemplo n.º 2
0
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
Ejemplo n.º 3
0
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
Ejemplo n.º 4
0
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
Ejemplo n.º 5
0
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
Ejemplo n.º 6
0
# 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)