trick/trick_sims
nateh7 94526e4d35
Trick Smoothed Particle Hydrodynamics (TSPH) Sim README (#1175)
* Create base simulation file/directory structure

* Create particle class in a Trick header file

* Create Fluid class with simulation initialization and update jobs in Trick header

* Create S_define for SIM_fluid

* Create S_overrides.mk for SIM_fluid

* Change Particle to a struct and initialize pos, velocity, and force arrays in constructor

* Store particles as an std::vector instead of an array

* Implement default_data method and dummy update_SPH for Fluid.cpp

* Add core CUDA SPH simulation code to Trick simulation

* Copy CPU-based SPH fluid sim code to Trick src directory

* Remove all code involving rigid body simulation

* Modify updateSPH routine to use CPU-based routines rather than GPU-based routines

* Temporarily comment out neighbor list logic

* Replace use of glm::vec3 with float[3] in sph.cpp and sph.h

* Move simulation parameters from sph.h to Trick Fluid.hh

* Remove particle struct and function prototypes from sph.h

* Move core simulation routines from sph.cpp to Fluid.cpp

* Remove neighbor list comments from Fluid.cpp

* Remove extraneous initSPH function

* Add calls to core simulation routines in Fluid::update_SPH()

* Refactor core simulation functions into private member functions of the Fluid class

* Remove static qualifier from simulation parameters in Fluid.hh

* Include <cmath> and use std scope resolution operater on pow

* Comment out isnan check in computeForces for now

* Initialize p_start and p_end in update_SPH

* Remove const qualifier from simulation paramters in Fluid class

* Remove n_particles member variable from Fluid class

* Create runtime.py to enable real-time synchronization and sim control panel

* Create input.py to exec realtime.py and limit simulation time

* Create simple python variable server client to unit test connection by accessing VISC member of fluid

* Create unit test to see if particle position is being updated correctly

* Create pointer to particles vector data for use in variable client

* Implement simple 2D GUI in order to render a single fluid particle

* Temporarily comment out unit tests

* Support 2D rendering of multiple particles in python variable client

* Scale size of simulation GUI based on BOUND variable from Trick variable server

* Comment out trick.stop(5) temporarily

* Set default value of BOUND to 400

* Fix sideways rendering bug by indexing field 1 position earlier

* Start variable server client from input.py rather than from command line

* Determine number of particles to render based on value of NUM_PARTICLES from Trick Variable Server. Also added TODO for correctly indexing into field.

* Reduce number of particles for 2D simulation

* Add CUDA runtime library flag and include directories

* Rename .cu/.cuh files to .cpp/.h

* Add sph_gpu.o as a library dependency of Fluid.cpp and call updateSPH_GPU in update_SPH

* Successfully compile and link Trick with CUDA in S_overrides.mk

* Call CUDA wrapper callVectorAdd() in update_SPH() to test Trick compilation/linking

* Create vectorAdd.cu to test CUDA kernel with Trick

* Change sph_gpu to a .cu file

* Pass pointer to Fluid object into updateSPH_GPU in order to access fluid parameters on GPU

* Refactor comptueDensityAndPressureGPU to use float[3] and fluid pointer to access sim parameters

* Refactor computeForcesGPU to use float[3] and fluid pointer to access sim parameters

* Refactor timeIntegrationGPU to use float[3] and fluid pointer to access sim parameters

* Refactor verletUpdatePosition to use float[3] and fluid pointer to access sim parameters

* Add base code for OpenGL particle renderer and TCP socket communication

* Create .gitignore(s) and delete built files

* Replace char* with char[] to remove warnings

* Receive and parse number of particles and particle positions

* Move connection initialization to stupComm

* Move TCP client to graphics folder and use it within OpenGL particle renderer

* Render particle position data from Trick

* Distinguish between trick and custom client

* Attempt to fix variable server client freezing

* Create input file that doesn't launch python VSC

* Remove extraneous call to initSPH

* Modify number of particles to 2048

* Create .gitignore for sim

* Create FluidServer class header

* Add Trick Header to FluidServer.hh and add clientfd member to FluidServer

* Send simple message from FluidServer in Trick to custom_client.cpp via TCP

* Add FluidServer to S_define

* Delete client directory

* Send particle data on initialization and decrease frequency of sendParticleData scheduled job

* Implement sendParticleData() to stream particle positions to client

* Implement client to receive particle position data from custom TCP fluid server

* Use custom_client interface in particle renderer of Trick variable server client

* Pass fluid pointer as parameter to FluidServer::sendParticleData(Fluid* fluid)

* Remove sim binary

* Remove TCP client usage from OpenGL particle renderer

* Rename particle renderer main.cc to opengl.cc

* Create openGLCaller, which spawns a thread that handles the OpenGL particle rendering

* Change openGLCaller signature

* Remove FluidServer usage from S_define

* Add make targets to OpenGL particle renderer source files and include OpenGL libraries in S_overrides.mk

* Temporarily set argc and argv in openGLCaller and change signature of openGLCaller

* Rename Particle to ParticleGL in sph.cpp and sph.h to avoid naming conflicts

* Hard code .obj file name in openGLMain rather than passing it as a command line arg

* Call openGLCaller inside of Fluid::default_data()

* Fix compilation bug with g++ and add .o files to nvcc device linking and TRICK_USER_LINK_LIBS

* Add 100_sphere.obj to root sim directory

* Pass pointer to Fluid object to openGLMain

* Make getParticlePositions() member function public

* Update particle positions with data from Trick sim

* Remove usage of Trickless SPH sim

* Include .o files in .gitignore

* Remove glm folder from repo

* Ignore local glm folder in .gitignore

* Copy Marching Cubes lookup tables from Cory Bloyd's implementation

* Create simple shaders to render the fluid mesh

* Create GridCell struct to store the isoValues and vertices of each voxel for Marching Cubes

* Add Trickless SPH sim back temporarily to test Marching Cubes functionality

* Implement generateCellMesh similar to Polygonise from Paul Borke
's 'Polygonising a Scalar Field'

* Implement vertex isovalue interpolation

* Create marching_cubes.h

* Modify OpenGL program to render fluid mesh rather than particles

* Create prototypes for updateIsoValues and initializeGridCells

* Implement function to initialize vector of GridCell structs

* Implement function to update isoValues of each vertex in each GridCell. (currently setting each isoValue to distance from origin)

* Support triangle indexing for more than one GridCell and do quick fix for interpolation bug

* Initialize and update both SPH particles and isoValues in grid for Marching Cubes

* Control OpenGL graphics refresh rate via usleep

* Set isoValues for vertices equal to distance from origin in order to demonstrate expanding sphere

* Fix bug with mesh vertex and face data failing to update

* Reduce number of particles to speed up sim testing

* Fix bug where only a quarter of vertex positions update

* Make particle depth greater than one to test marching cubes behavior for 3D fluid

* Redefine isoValues of gridCells to have a value equal to the number of particles within a given radius of the grid cell vertex

* Successfully update fluid mesh in response to particle positions

* Add spatial grid member and prototypes for neighbor list methods in Fluid header

* Implement buildSpatialGrid which assigns each particle to a grid cell

* Implement getCandidateNeighbors, which returns a vector of all particles within a given grid cell and up to its 26 neighboring cells

* Implement Marching Cubes isoValue update on the GPU

* Use GPU implementation of isoValue update

* Include files with build commands

* Write code for unoptimized GPU neighborlist in comments

* Add constants for spatial grid in Fluid.hh

* Use neighbor list in computeForces and computeDensityAndPressure procedures

* Keep count of the number of timesteps simulated for use in the marching cubes update

* Remove trickless SPH from unit testing

* Use Trick SPH particle data to update mesh from marching cubes

* Modify S_overrides.mk to compile and link files from Marching Cubes implementation

* Remove extraneous include

* Remove debugging code from opengl.cc

* Add back OpenGL program to render particles

* Implement ability to toggle between fluid mesh and particle modes

* Reverse surface normal direction for fluid mesh

* Add directory variables to S_overrides.mk

* Remove comment from S_overrides.mk

* Remove unused files

* Cleanup commented code

* Cleanup includes and remove unused variable

* Move marching cubes parameters to Fluid class

* Create variables to toggle GPU mode and neighbor list

* Fix malloc to include null terminated character of string and call free in loadObj

* Remove graphics window title

* Add GPU sim support for a number of particles that is not a multiple of NUM_THREADS

* Create initial conditions to demo

* Rename .cc files to .cpp

* Perform major structural refactoring on opengl.cpp

* Create refreshRate and mcUpdateFreq members in Fluid class

* Credit tables to Cory Bloyd

* Add Paul Bourke attribution

* Replace extern usage with header files

* Rename input files

* Remove unused Particle.cpp

* Move sphere models and move model file path to Fluid class

* Replace marching cubes triangle construction while loop with for loop

Co-authored-by: Scott Fennell <spfennell@gmail.com>

* Condense MC logic using loops

* Remove deprecated FluidServer from master

* Fix memory leak in iso_values.cu

* Change environment specific path to relative path in launch_vsc.py

* Write comment and TODO for CPU isoValue update code

* Add comments for demos and reduce usage of magic numbers in input.py

* Add enum for demos and fix concentric circle demo bug

* Fix style in input.py

* Replace scheduled job with flag for SPH initialization with initialization job

* Add shutdown job to free memory used by CUDA

* Add newlines to the end of files

* Delete deprecated FluidServer.cpp

* Add basic README for sim

Co-authored-by: Scott Fennell <spfennell@gmail.com>
2021-08-13 18:26:44 -05:00
..
Ball Make ball_ensemble_collision.c compatible with ancient Centos 7 C compiler. 2021-07-01 21:18:37 -05:00
Cannon Maven, offline mode, and --enable-mongoose (#939) 2020-02-05 14:31:58 -06:00
ODE Split test sims and fun sims into separate directories. 2016-02-25 16:04:27 -06:00
ROS Updated S_overrides to work with ROS kinetic. Included catkin package containing the appropriate message file to integrate with other ROS nodes - build with catkin. 2019-09-24 15:13:00 -05:00
SIM_Ball++_L1 Oops 2017-01-09 08:40:27 -06:00
SIM_contact Update image of Colliding Balls. Ref #995 2020-05-04 22:06:04 -05:00
SIM_fluid Trick Smoothed Particle Hydrodynamics (TSPH) Sim README (#1175) 2021-08-13 18:26:44 -05:00
SIM_lander Fix RCS pitch control. Tweat gains. #1006 2020-06-16 16:16:16 -05:00
SIM_msd Maven, offline mode, and --enable-mongoose (#939) 2020-02-05 14:31:58 -06:00
SIM_parachute Python3 exec open (#907) 2019-11-14 13:35:57 -06:00
SIM_rocket Python3 exec open (#907) 2019-11-14 13:35:57 -06:00
SIM_sat2d Python3 exec open (#907) 2019-11-14 13:35:57 -06:00
SIM_satellite Python3 exec open (#907) 2019-11-14 13:35:57 -06:00
SIM_sun Python3 exec open (#907) 2019-11-14 13:35:57 -06:00
SIM_wheelbot Variable Name Update 2020-08-03 10:44:52 -05:00
.gitignore Rename SIM_*/trick to SIM_*/.trick 2021-05-19 17:33:13 -05:00
makefile issue #836 remove SIM_ball_default_data 2019-07-10 11:36:09 -05:00