static void idle_func ( void ) { if ( dsim ) simulation_step( pVector, dt ); else {get_from_UI();remap_GUI();} glutSetWindow ( win_id ); glutPostRedisplay (); }
static void idle_func ( void ) { get_from_UI ( dens_prev, u_prev, v_prev ); vel_step ( N, u, v, u_prev, v_prev, visc, dt ); dens_step ( N, dens, dens_prev, u, v, diff, dt ); glutSetWindow ( win_id ); glutPostRedisplay (); }
static void idle_func ( void ) { if ( dsim ){ integrator->integrate( *sys, dt ); get_from_UI(); } else {remap_GUI();} glutSetWindow ( win_id ); glutPostRedisplay (); }
static void idle_func ( void ) { get_from_UI ( dens_prev, u_prev, v_prev ); int idxX = N / 2; int idxY = 1; v[IX(idxX, idxY)] = force * 0.09f; vel_step ( N, u, v, u_prev, v_prev, visc, dt ); dens_step ( N, dens, dens_prev, u, v, diff, dt ); glutSetWindow ( win_id ); glutPostRedisplay (); }
static void idle_func ( void ) { if (!pause) { get_from_UI( PrevDensityField, PrevVelocityField ); VelocityField->TimeStep( VelocityField, PrevVelocityField, bodies); DensityField->TimeStep( DensityField, PrevDensityField, VelocityField ); simulation_step(pVector, fVector, dt, fConstraint, VelocityField); glutSetWindow(win_id); glutPostRedisplay(); } }
void FluidField::update() { get_from_UI ( dens_prev, u_prev, v_prev ); /*u_prev[IX(50,20)] = -100.0f; v_prev[IX(50,20)] = -100.0f; u_prev[IX(50,21)] = 100.0f; v_prev[IX(50,21)] = -100.0f; u_prev[IX(51,21)] = 100.0f; v_prev[IX(51,21)] = 100.0f; u_prev[IX(51,20)] = -100.0f; v_prev[IX(51,20)] = 100.0f; */ densityStep( dens, dens_prev, u, v, diff, dt ); velocityStep( u, v, u_prev, v_prev, visc, dt); }
void update(float elapsed, TCOD_key_t k, TCOD_mouse_t mouse) { get_from_UI(dens_prev,u_prev,v_prev,elapsed,k,mouse); update_velocity(u,v,u_prev,v_prev,visc,elapsed); update_density(dens,dens_prev,u,v,diff,elapsed); }
static void idle_func ( void ) { //if(step) { get_from_UI ( g_dens_prev, g_u_prev, g_v_prev, g_heat,g_compressibility); //blur(g_u_prev,g_v_prev,g_w_prev, dt); #if USE_OPENCL transfer_buffers_to_gpu(); run_cl_advect_velocity(&clData, dt); flush_cl_queue(); run_cl_calculate_divergence(&clData, dt); run_cl_zero_pressure(&clData); if(useCG) { transfer_cl_float_buffer_from_device(&clData,clData.buf_pressure,g_pressure,clData.n,true); transfer_cl_float_buffer_from_device(&clData,clData.buf_divergence,g_divergence,clData.n,true); run_cl_cg_no_mtx(&clData,g_pressure, g_divergence, g_cg_r, g_cg_d, g_cg_q, clData.n, 10, 0.0001f); flush_cl_queue(); transfer_cl_float_buffer_to_device(&clData,clData.buf_pressure,g_pressure,clData.n,true); }else{ //This has to run the whole kernel and iterate at the cpu because // opencl only can sync at the workgroup level when we need // global synchronization for(int i = 0; i < 20; ++i) { run_cl_pressure_solve(&clData, dt); } } run_cl_pressure_apply(&clData, dt); flush_cl_queue(); run_cl_advect_density(&clData, dt); if(vorticity){ run_cl_vorticity_confinement(&clData, dt,0.5f); } transfer_buffers_to_cpu(); #else if(maccormack){ advect_velocity_maccormack(dt, g_u, g_v, g_w, g_u_prev, g_v_prev, g_w_prev); } else { //advect_velocity_forward_euler(dt, g_u, g_v, g_w, g_u_prev, g_v_prev, g_w_prev); advect_velocity_RK2(dt, g_u, g_v, g_w, g_u_prev, g_v_prev, g_w_prev); } //project(dt,g_u,g_v, g_w, g_divergence, g_pressure, g_pressure_prev); project(dt,g_u,g_v, g_w, g_divergence, g_pressure, g_pressure_prev, g_laplacian_matrix,g_cg_r, g_cg_d, g_cg_q,useCG); advectRK2(dt,g_dens,g_dens_prev, g_u, g_v, g_w); if(vorticity) { vorticity_confinement(dt, g_u, g_v, g_w, g_u_prev, g_v_prev, g_w_prev); } #endif SWAP(g_u,g_u_prev); SWAP(g_v,g_v_prev); SWAP(g_dens, g_dens_prev); //copy_grid(g_u,g_u_prev); //copy_grid(g_v,g_v_prev); //copy_grid(g_dens, g_dens_prev); step = 0; } //#ifndef __EMSCRIPTEN__ // glutSetWindow ( win_id ); //#endif glutPostRedisplay (); }