return numpy.matmul(translation, projection), point_size def glut_window(fullscreen = False): glutInit(sys.argv) glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH) if fullscreen: window = glutEnterGameMode() else: glutInitWindowSize(800, 600) glutInitWindowPosition(0, 0) window = glutCreateWindow("LBM") return window lbm = LBM(D2Q9) window = glut_window(fullscreen = False) fragment_shader = shaders.compileShader(""" #version 430 in vec3 color; void main(){ gl_FragColor = vec4(color.xyz, 0.0); }""", GL_FRAGMENT_SHADER) particle_shader = shaders.compileShader(Template(""" #version 430
} if ( m == 3 ) { u_0 = 0.1; u_1 = 0.0; u_2 = 0.0; } """ nUpdates = 10000 nStat = 1000 moments = [] print("Initializing simulation...\n") lbm = LBM(D3Q19) lattice = Lattice(descriptor=D3Q19, geometry=Geometry(64, 64, 64), moments=lbm.moments(optimize=False), collide=lbm.bgk(f_eq=lbm.equilibrium(), tau=0.56), boundary_src=boundary) lattice.apply_material_map(get_cavity_material_map(lattice.geometry)) lattice.sync_material() print("Starting simulation using %d cells...\n" % lattice.geometry.volume) lastStat = time.time() for i in range(1, nUpdates + 1):
from geometry.box import Box from utility.projection import Projection, Rotation from utility.opengl import MomentsTexture from utility.mouse import MouseDragMonitor, MouseScrollMonitor lattice_x = 200 lattice_y = 64 lattice_z = 64 updates_per_frame = 6 inflow = 0.01 relaxation_time = 0.51 lbm = LBM(D3Q27) boundary = Template(""" if ( m == 2 ) { u_0 = 0.0; u_1 = 0.0; u_2 = 0.0; } if ( m == 3 ) { u_0 = min(time/5000.0 * ${inflow}, ${inflow}); u_1 = 0.0; u_2 = 0.0; } if ( m == 4 ) { rho = 1.0; }
base_10_sizes, base_10_layouts, descriptors, precisions, {True, False}, {True, False} ]))) pad_configs = list( filter( lambda config: config[0] - config[1][0] >= -28, itertools.product(*[ base_10_sizes, base_2_layouts, descriptors, precisions, {True, False}, {True} ]))) measurements = [] for size, layout, descriptor, precision, opti, align in base_2_configs + align_configs + pad_configs: lbm = LBM(descriptor) lattice = Lattice(descriptor=descriptor, geometry=Geometry(size, size, size), precision=precision, layout=layout, padding=layout, align=align, moments=lbm.moments(optimize=opti), collide=lbm.bgk(f_eq=lbm.equilibrium(), tau=relaxation_time, optimize=opti), boundary_src=boundary) lattice.apply_material_map(get_cavity_material_map(lattice.geometry)) lattice.sync_material() nUpdates = 500