integrate cmake + ninja
Some checks failed
studiorailgun/Renderer/pipeline/head There was a failure building this commit

This commit is contained in:
austin 2024-12-01 23:45:29 -05:00
parent 251f6d2c66
commit cb9dc3170d
17 changed files with 250 additions and 133 deletions

1
.gitignore vendored
View File

@ -72,3 +72,4 @@
#native libraries
/shared-folder
/out

29
.vscode/tasks.json vendored Normal file
View File

@ -0,0 +1,29 @@
{
"version": "2.0.0",
"tasks": [
{
"type": "cmake",
"label": "CMake: build",
"command": "build",
"targets": [
"all"
],
"preset": "${command:cmake.activeBuildPresetName}",
"group": "build",
"problemMatcher": [],
"detail": "CMake template build task"
},
{
"type": "cmake",
"label": "CMake: clean rebuild",
"command": "cleanRebuild",
"targets": [
"all"
],
"preset": "${command:cmake.activeBuildPresetName}",
"group": "build",
"problemMatcher": [],
"detail": "CMake template clean rebuild task"
}
]
}

26
CMakeLists.txt Normal file
View File

@ -0,0 +1,26 @@
cmake_minimum_required(VERSION 3.10.0)
project(StormEngine VERSION 0.1.0 LANGUAGES C)
# Find sources
file(GLOB_RECURSE SOURCES src/fluid/src/**.c)
#include header files
include_directories(src/fluid/includes)
#include jni
find_package(JNI REQUIRED)
include_directories(${JNI_INCLUDE_DIRS})
#include architecture flags
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m64 -mavx -mavx2")
#emit to shared-folder
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/shared-folder)
#Create shared library
add_library(StormEngine SHARED ${SOURCES})
include(CTest)
enable_testing()

17
CMakePresets.json Normal file
View File

@ -0,0 +1,17 @@
{
"version": 8,
"configurePresets": [
{
"name": "default",
"displayName": "Default",
"description": "Sets Ninja generator, build and install directory",
"generator": "Ninja",
"binaryDir": "${sourceDir}/out/build/${presetName}",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"CMAKE_TOOLCHAIN_FILE": "",
"CMAKE_INSTALL_PREFIX": "${sourceDir}/out/install/${presetName}"
}
}
]
}

View File

@ -22,6 +22,8 @@ When cloning the repo, make sure to grab all submodules with `git clone --recurs
2. From choco install
- [mingw](https://community.chocolatey.org/packages/mingw)
- [make](https://community.chocolatey.org/packages/make)
- [cmake](https://community.chocolatey.org/packages/cmake)
- [ninja](https://community.chocolatey.org/packages/ninja)
3. Run build.sh

View File

@ -16,12 +16,29 @@ else
exit 1
fi
#completely clear build directory
##
## INIT RELEASE FOLDER
##
rm -rf ./build
#build directory structure
mkdir build
mkdir ./build/assets
mkdir ./build/shared-folder
##
## BUILD NATIVE CODE
##
#completely clear native code build directory
rm -rf ./out
rm -rf ./shared-folder
#build native code
mkdir shared-folder
mkdir out
mkdir ./out/build
mkdir ./out/build/default
cmake --preset=default
cmake --build ./out/build/default
#compile project and copy into build dir
mvn clean package
cp ./target/Renderer-${BUILD_VER}.jar ./build/engine.jar

View File

@ -1,3 +1,3 @@
#maven.buildNumber.plugin properties file
#Sun Dec 01 19:28:46 EST 2024
buildNumber=504
#Sun Dec 01 23:35:09 EST 2024
buildNumber=512

View File

@ -1218,6 +1218,7 @@ Awake fluid chunks based on neighbor state
Fluid chunk conditionally send update based on sleep status
Fluid simulation normalization ratio
Stabilized static liquids
Integrate CMake + Ninja

View File

@ -561,7 +561,7 @@
<SAVE_STEPS>0</SAVE_STEPS>
</environmentVariables>
<arguments>
<argument>./src/fluid/compile.sh</argument>
<argument>./src/main/c/build.sh</argument>
</arguments>
</configuration>
</execution>

View File

@ -9,7 +9,7 @@
* Method: addSourceToVectors
* Signature: (II[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;FFF)V
*/
static inline void addSourceToVectors
void addSourceToVectors
(int, int, float **, float **, float **, float **, float **, float **, float, float, float);
/*
@ -17,7 +17,7 @@ static inline void addSourceToVectors
* Method: solveVectorDiffuse
* Signature: (II[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;FFF)V
*/
static inline void solveVectorDiffuse
void solveVectorDiffuse
(int, int, float **, float **, float **, float **, float **, float **, float, float, float);
/*
@ -25,7 +25,7 @@ static inline void solveVectorDiffuse
* Method: setupProjection
* Signature: (II[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;FFF)V
*/
static inline void setupProjection
void setupProjection
(
int N,
int chunk_mask,
@ -43,7 +43,7 @@ static inline void setupProjection
* Method: solveProjection
* Signature: (II[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;FFF)V
*/
static inline void solveProjection
void solveProjection
(int, int, float **, float **, float **, float **, float **, float **, float, float, float);
/*
@ -51,7 +51,7 @@ static inline void solveProjection
* Method: finalizeProjection
* Signature: (II[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;FFF)V
*/
static inline void finalizeProjection
void finalizeProjection
(int, int, float **, float **, float **, float **, float **, float **, float, float, float);
/*
@ -59,21 +59,21 @@ static inline void finalizeProjection
* Method: advectVectors
* Signature: (II[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;FFF)V
*/
static inline void advectVectors
void advectVectors
(int, int, float **, float **, float **, float **, float **, float **, float, float, float);
/**
* Adds density to the density array
* @return The change in density within this chunk for this frame
*/
static inline void addDensity(Environment * environment, int, int, float **, float **, float);
void addDensity(Environment * environment, int, int, float **, float **, float);
/*
* Class: electrosphere_FluidSim
* Method: solveDiffuseDensity
* Signature: (II[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;FFF)V
*/
static inline void solveDiffuseDensity
void solveDiffuseDensity
(int, int, float **, float **, float **, float **, float **, float, float, float);
/*
@ -81,7 +81,7 @@ static inline void solveDiffuseDensity
* Method: advectDensity
* Signature: (II[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;[Ljava/nio/ByteBuffer;FFF)V
*/
static inline void advectDensity(uint32_t chunk_mask, int N, float ** d, float ** d0, float ** ur, float ** vr, float ** wr, float dt);
void advectDensity(uint32_t chunk_mask, int N, float ** d, float ** d0, float ** ur, float ** vr, float ** wr, float dt);
/**
@ -92,16 +92,16 @@ double calculateSum(uint32_t chunk_mask, int N, float ** d);
/**
* Normalizes the density array with a given ratio
*/
static inline void normalizeDensity(int N, float ** d, float ratio);
void normalizeDensity(int N, float ** d, float ratio);
static inline void setBoundsToNeighborsRaw
void setBoundsToNeighborsRaw
(
int N,
int chunk_mask,
int vector_dir,
float ** neighborArray);
static inline void copyNeighborsRaw
void copyNeighborsRaw
(
int N,
int chunk_mask,

View File

@ -1,7 +1,7 @@
#ifndef SOLVER_CONSTS_H
#define SOLVER_CONSTS_H
#define LINEARSOLVERTIMES 5
#define LINEARSOLVERTIMES 3
#define VECTOR_DIFFUSE_TIMES 1
#endif

View File

@ -1,16 +1,19 @@
#include <stdio.h>
#include <immintrin.h>
#include <stdint.h>
#include <jni.h>
#include "../includes/utilities.h"
#include "../includes/chunkmask.h"
#include "../includes/environment.h"
#include "../includes/chunk.h"
/**
* Adds density to the density array
* @return The change in density within this chunk for this frame
*/
static inline void addDensity(
void addDensity(
Environment * environment,
int N,
int chunk_mask,
@ -37,7 +40,7 @@ static inline void addDensity(
/*
* A single iteration of the jacobi to solve density diffusion
*/
static inline void solveDiffuseDensity(
void solveDiffuseDensity(
int N,
int chunk_mask,
float ** d,
@ -88,7 +91,7 @@ static inline void solveDiffuseDensity(
/**
* Advects the density based on the vectors
*/
static inline void advectDensity(uint32_t chunk_mask, int N, float ** d, float ** d0, float ** ur, float ** vr, float ** wr, float dt){
void advectDensity(uint32_t chunk_mask, int N, float ** d, float ** d0, float ** ur, float ** vr, float ** wr, float dt){
int i, j, k, i0, j0, k0, i1, j1, k1;
int m,n,o;
float x, y, z, s0, t0, s1, t1, u1, u0, dtx,dty,dtz;

View File

@ -5,10 +5,6 @@
#include "../includes/mainFunctions.h"
#include "../includes/chunk.h"
#include "../includes/simulation.h"
#include "./chunkmask.c"
#include "./velocitystep.c"
#include "./densitystep.c"
#include "../includes/solver_consts.h"
#ifndef SAVE_STEPS
@ -42,12 +38,12 @@ void simulate(
chunks = passedInChunks;
// printf("%p\n",chunks[0].d);
saveStep(chunks[0]->u[CENTER_LOC], "./chunks/beginU");
saveStep(chunks[0]->v[CENTER_LOC], "./chunks/beginV");
saveStep(chunks[0]->w[CENTER_LOC], "./chunks/beginW");
saveStep(chunks[0]->u0[CENTER_LOC], "./chunks/beginU0");
saveStep(chunks[0]->v0[CENTER_LOC], "./chunks/beginV0");
saveStep(chunks[0]->w0[CENTER_LOC], "./chunks/beginW0");
// saveStep(chunks[0]->u[CENTER_LOC], "./chunks/beginU");
// saveStep(chunks[0]->v[CENTER_LOC], "./chunks/beginV");
// saveStep(chunks[0]->w[CENTER_LOC], "./chunks/beginW");
// saveStep(chunks[0]->u0[CENTER_LOC], "./chunks/beginU0");
// saveStep(chunks[0]->v0[CENTER_LOC], "./chunks/beginV0");
// saveStep(chunks[0]->w0[CENTER_LOC], "./chunks/beginW0");
//solve chunk mask
for(int i = 0; i < numChunks; i++){
@ -66,12 +62,12 @@ void simulate(
VISCOSITY_CONSTANT,
timestep
);
saveStep(currentChunk->u[CENTER_LOC], "./chunks/addSrcU");
saveStep(currentChunk->v[CENTER_LOC], "./chunks/addSrcV");
saveStep(currentChunk->w[CENTER_LOC], "./chunks/addSrcW");
saveStep(currentChunk->u0[CENTER_LOC], "./chunks/addSrcU0");
saveStep(currentChunk->v0[CENTER_LOC], "./chunks/addSrcV0");
saveStep(currentChunk->w0[CENTER_LOC], "./chunks/addSrcW0");
// saveStep(currentChunk->u[CENTER_LOC], "./chunks/addSrcU");
// saveStep(currentChunk->v[CENTER_LOC], "./chunks/addSrcV");
// saveStep(currentChunk->w[CENTER_LOC], "./chunks/addSrcW");
// saveStep(currentChunk->u0[CENTER_LOC], "./chunks/addSrcU0");
// saveStep(currentChunk->v0[CENTER_LOC], "./chunks/addSrcV0");
// saveStep(currentChunk->w0[CENTER_LOC], "./chunks/addSrcW0");
}
//swap all vector fields
{
@ -107,12 +103,12 @@ void simulate(
copyNeighborsRaw(DIM,currentChunk->chunkMask,0,3,currentChunk->w0);
}
}
saveStep(chunks[0]->u[CENTER_LOC], "./chunks/swapU");
saveStep(chunks[0]->v[CENTER_LOC], "./chunks/swapV");
saveStep(chunks[0]->w[CENTER_LOC], "./chunks/swapW");
saveStep(chunks[0]->u0[CENTER_LOC], "./chunks/swapU0");
saveStep(chunks[0]->v0[CENTER_LOC], "./chunks/swapV0");
saveStep(chunks[0]->w0[CENTER_LOC], "./chunks/swapW0");
// saveStep(chunks[0]->u[CENTER_LOC], "./chunks/swapU");
// saveStep(chunks[0]->v[CENTER_LOC], "./chunks/swapV");
// saveStep(chunks[0]->w[CENTER_LOC], "./chunks/swapW");
// saveStep(chunks[0]->u0[CENTER_LOC], "./chunks/swapU0");
// saveStep(chunks[0]->v0[CENTER_LOC], "./chunks/swapV0");
// saveStep(chunks[0]->w0[CENTER_LOC], "./chunks/swapW0");
// printf("after swap vecs u\n");
// printLayer(chunks[0]->u[CENTER_LOC],targetLayer);
// printf("after swap vecs u0\n");
@ -125,20 +121,20 @@ void simulate(
Chunk * currentChunk = chunks[i];
solveVectorDiffuse(DIM,currentChunk->chunkMask,currentChunk->u,currentChunk->v,currentChunk->w,currentChunk->u0,currentChunk->v0,currentChunk->w0,DIFFUSION_CONSTANT,VISCOSITY_CONSTANT,timestep);
}
if(SAVE_STEPS){
sprintf(fileNameBuff, "./chunks/diffuseUStep%dx", l);
saveStep(chunks[0]->u[CENTER_LOC], fileNameBuff);
sprintf(fileNameBuff, "./chunks/diffuseUStep%dx0", l);
saveStep(chunks[0]->u0[CENTER_LOC], fileNameBuff);
sprintf(fileNameBuff, "./chunks/diffuseVStep%dx", l);
saveStep(chunks[0]->v[CENTER_LOC], fileNameBuff);
sprintf(fileNameBuff, "./chunks/diffuseVStep%dx0", l);
saveStep(chunks[0]->v0[CENTER_LOC], fileNameBuff);
sprintf(fileNameBuff, "./chunks/diffuseWStep%dx", l);
saveStep(chunks[0]->w[CENTER_LOC], fileNameBuff);
sprintf(fileNameBuff, "./chunks/diffuseWStep%dx0", l);
saveStep(chunks[0]->w0[CENTER_LOC], fileNameBuff);
}
// if(SAVE_STEPS){
// sprintf(fileNameBuff, "./chunks/diffuseUStep%dx", l);
// saveStep(chunks[0]->u[CENTER_LOC], fileNameBuff);
// sprintf(fileNameBuff, "./chunks/diffuseUStep%dx0", l);
// saveStep(chunks[0]->u0[CENTER_LOC], fileNameBuff);
// sprintf(fileNameBuff, "./chunks/diffuseVStep%dx", l);
// saveStep(chunks[0]->v[CENTER_LOC], fileNameBuff);
// sprintf(fileNameBuff, "./chunks/diffuseVStep%dx0", l);
// saveStep(chunks[0]->v0[CENTER_LOC], fileNameBuff);
// sprintf(fileNameBuff, "./chunks/diffuseWStep%dx", l);
// saveStep(chunks[0]->w[CENTER_LOC], fileNameBuff);
// sprintf(fileNameBuff, "./chunks/diffuseWStep%dx0", l);
// saveStep(chunks[0]->w0[CENTER_LOC], fileNameBuff);
// }
//update array for vectors
for(int i = 0; i < numChunks; i++){
Chunk * currentChunk = chunks[i];
@ -155,28 +151,28 @@ void simulate(
copyNeighborsRaw(DIM,currentChunk->chunkMask,0,0,currentChunk->v0);
copyNeighborsRaw(DIM,currentChunk->chunkMask,0,0,currentChunk->w0);
}
if(SAVE_STEPS){
sprintf(fileNameBuff, "./chunks/diffuseUStep%dxBnd", l);
saveStep(chunks[0]->u[CENTER_LOC], fileNameBuff);
sprintf(fileNameBuff, "./chunks/diffuseUStep%dx0Bnd", l);
saveStep(chunks[0]->u0[CENTER_LOC], fileNameBuff);
sprintf(fileNameBuff, "./chunks/diffuseVStep%dxBnd", l);
saveStep(chunks[0]->v[CENTER_LOC], fileNameBuff);
sprintf(fileNameBuff, "./chunks/diffuseVStep%dx0Bnd", l);
saveStep(chunks[0]->v0[CENTER_LOC], fileNameBuff);
sprintf(fileNameBuff, "./chunks/diffuseWStep%dxBnd", l);
saveStep(chunks[0]->w[CENTER_LOC], fileNameBuff);
sprintf(fileNameBuff, "./chunks/diffuseWStep%dx0Bnd", l);
saveStep(chunks[0]->w0[CENTER_LOC], fileNameBuff);
}
// if(SAVE_STEPS){
// sprintf(fileNameBuff, "./chunks/diffuseUStep%dxBnd", l);
// saveStep(chunks[0]->u[CENTER_LOC], fileNameBuff);
// sprintf(fileNameBuff, "./chunks/diffuseUStep%dx0Bnd", l);
// saveStep(chunks[0]->u0[CENTER_LOC], fileNameBuff);
// sprintf(fileNameBuff, "./chunks/diffuseVStep%dxBnd", l);
// saveStep(chunks[0]->v[CENTER_LOC], fileNameBuff);
// sprintf(fileNameBuff, "./chunks/diffuseVStep%dx0Bnd", l);
// saveStep(chunks[0]->v0[CENTER_LOC], fileNameBuff);
// sprintf(fileNameBuff, "./chunks/diffuseWStep%dxBnd", l);
// saveStep(chunks[0]->w[CENTER_LOC], fileNameBuff);
// sprintf(fileNameBuff, "./chunks/diffuseWStep%dx0Bnd", l);
// saveStep(chunks[0]->w0[CENTER_LOC], fileNameBuff);
// }
}
}
saveStep(chunks[0]->u[CENTER_LOC], "./chunks/diffuseU");
saveStep(chunks[0]->v[CENTER_LOC], "./chunks/diffuseV");
saveStep(chunks[0]->w[CENTER_LOC], "./chunks/diffuseW");
saveStep(chunks[0]->u0[CENTER_LOC], "./chunks/diffuseU0");
saveStep(chunks[0]->v0[CENTER_LOC], "./chunks/diffuseV0");
saveStep(chunks[0]->w0[CENTER_LOC], "./chunks/diffuseW0");
// saveStep(chunks[0]->u[CENTER_LOC], "./chunks/diffuseU");
// saveStep(chunks[0]->v[CENTER_LOC], "./chunks/diffuseV");
// saveStep(chunks[0]->w[CENTER_LOC], "./chunks/diffuseW");
// saveStep(chunks[0]->u0[CENTER_LOC], "./chunks/diffuseU0");
// saveStep(chunks[0]->v0[CENTER_LOC], "./chunks/diffuseV0");
// saveStep(chunks[0]->w0[CENTER_LOC], "./chunks/diffuseW0");
//solve projection
{
//update array for vectors
@ -199,8 +195,8 @@ void simulate(
setupProjection(DIM,currentChunk->chunkMask,currentChunk->u,currentChunk->v,currentChunk->w,currentChunk->u0,currentChunk->v0,DIFFUSION_CONSTANT,VISCOSITY_CONSTANT,timestep);
}
saveStep(chunks[0]->v0[CENTER_LOC], "./chunks/setupProj1Div");
saveStep(chunks[0]->u0[CENTER_LOC], "./chunks/setupProj1P");
// saveStep(chunks[0]->v0[CENTER_LOC], "./chunks/setupProj1Div");
// saveStep(chunks[0]->u0[CENTER_LOC], "./chunks/setupProj1P");
//update array for vectors
for(int i = 0; i < numChunks; i++){
@ -211,8 +207,8 @@ void simulate(
copyNeighborsRaw(DIM,currentChunk->chunkMask,0,0,currentChunk->v0);
}
saveStep(chunks[0]->v0[CENTER_LOC], "./chunks/setupProj1DivBnd");
saveStep(chunks[0]->u0[CENTER_LOC], "./chunks/setupProj1PBnd");
// saveStep(chunks[0]->v0[CENTER_LOC], "./chunks/setupProj1DivBnd");
// saveStep(chunks[0]->u0[CENTER_LOC], "./chunks/setupProj1PBnd");
//samples u0, v0
//sets u0
@ -224,23 +220,23 @@ void simulate(
Chunk * currentChunk = chunks[i];
solveProjection(DIM,currentChunk->chunkMask,currentChunk->u,currentChunk->v,currentChunk->w,currentChunk->u0,currentChunk->v0,currentChunk->w0,DIFFUSION_CONSTANT,VISCOSITY_CONSTANT,timestep);
}
if(SAVE_STEPS){
sprintf(fileNameBuff, "./chunks/proj1Step%dx", l);
saveStep(chunks[0]->u0[CENTER_LOC], fileNameBuff);
sprintf(fileNameBuff, "./chunks/proj1Step%dx0", l);
saveStep(chunks[0]->v0[CENTER_LOC], fileNameBuff);
}
// if(SAVE_STEPS){
// sprintf(fileNameBuff, "./chunks/proj1Step%dx", l);
// saveStep(chunks[0]->u0[CENTER_LOC], fileNameBuff);
// sprintf(fileNameBuff, "./chunks/proj1Step%dx0", l);
// saveStep(chunks[0]->v0[CENTER_LOC], fileNameBuff);
// }
for(int i = 0; i < numChunks; i++){
Chunk * currentChunk = chunks[i];
setBoundsToNeighborsRaw(DIM,currentChunk->chunkMask,0,currentChunk->u0);
copyNeighborsRaw(DIM,currentChunk->chunkMask,0,0,currentChunk->u0);
}
if(SAVE_STEPS){
sprintf(fileNameBuff, "./chunks/proj1Step%dxBnd", l);
saveStep(chunks[0]->u0[CENTER_LOC], fileNameBuff);
sprintf(fileNameBuff, "./chunks/proj1Step%dx0Bnd", l);
saveStep(chunks[0]->v0[CENTER_LOC], fileNameBuff);
}
// if(SAVE_STEPS){
// sprintf(fileNameBuff, "./chunks/proj1Step%dxBnd", l);
// saveStep(chunks[0]->u0[CENTER_LOC], fileNameBuff);
// sprintf(fileNameBuff, "./chunks/proj1Step%dx0Bnd", l);
// saveStep(chunks[0]->v0[CENTER_LOC], fileNameBuff);
// }
}
//samples u,v,w,u0
//sets u,v,w
@ -250,9 +246,9 @@ void simulate(
finalizeProjection(DIM,currentChunk->chunkMask,currentChunk->u,currentChunk->v,currentChunk->w,currentChunk->u0,currentChunk->v0,currentChunk->w0,DIFFUSION_CONSTANT,VISCOSITY_CONSTANT,timestep);
}
saveStep(chunks[0]->u[CENTER_LOC], "./chunks/finalizeProj1U");
saveStep(chunks[0]->v[CENTER_LOC], "./chunks/finalizeProj1V");
saveStep(chunks[0]->w[CENTER_LOC], "./chunks/finalizeProj1W");
// saveStep(chunks[0]->u[CENTER_LOC], "./chunks/finalizeProj1U");
// saveStep(chunks[0]->v[CENTER_LOC], "./chunks/finalizeProj1V");
// saveStep(chunks[0]->w[CENTER_LOC], "./chunks/finalizeProj1W");
// exit(0);
//set boundaries a final time for u,v,w
//...
@ -272,12 +268,12 @@ void simulate(
copyNeighborsRaw(DIM,currentChunk->chunkMask,0,3,currentChunk->w0);
}
}
saveStep(chunks[0]->u[CENTER_LOC], "./chunks/projU");
saveStep(chunks[0]->v[CENTER_LOC], "./chunks/projV");
saveStep(chunks[0]->w[CENTER_LOC], "./chunks/projW");
saveStep(chunks[0]->u0[CENTER_LOC], "./chunks/projU0");
saveStep(chunks[0]->v0[CENTER_LOC], "./chunks/projV0");
saveStep(chunks[0]->w0[CENTER_LOC], "./chunks/projW0");
// saveStep(chunks[0]->u[CENTER_LOC], "./chunks/projU");
// saveStep(chunks[0]->v[CENTER_LOC], "./chunks/projV");
// saveStep(chunks[0]->w[CENTER_LOC], "./chunks/projW");
// saveStep(chunks[0]->u0[CENTER_LOC], "./chunks/projU0");
// saveStep(chunks[0]->v0[CENTER_LOC], "./chunks/projV0");
// saveStep(chunks[0]->w0[CENTER_LOC], "./chunks/projW0");
// exit(0);
//swap all vector fields
{
@ -313,12 +309,12 @@ void simulate(
copyNeighborsRaw(DIM,currentChunk->chunkMask,0,3,currentChunk->w0);
}
}
saveStep(chunks[0]->u[CENTER_LOC], "./chunks/swap2U");
saveStep(chunks[0]->v[CENTER_LOC], "./chunks/swap2V");
saveStep(chunks[0]->w[CENTER_LOC], "./chunks/swap2W");
saveStep(chunks[0]->u0[CENTER_LOC], "./chunks/swap2U0");
saveStep(chunks[0]->v0[CENTER_LOC], "./chunks/swap2V0");
saveStep(chunks[0]->w0[CENTER_LOC], "./chunks/swap2W0");
// saveStep(chunks[0]->u[CENTER_LOC], "./chunks/swap2U");
// saveStep(chunks[0]->v[CENTER_LOC], "./chunks/swap2V");
// saveStep(chunks[0]->w[CENTER_LOC], "./chunks/swap2W");
// saveStep(chunks[0]->u0[CENTER_LOC], "./chunks/swap2U0");
// saveStep(chunks[0]->v0[CENTER_LOC], "./chunks/swap2V0");
// saveStep(chunks[0]->w0[CENTER_LOC], "./chunks/swap2W0");
//advect vectors across boundaries
{
//update border arrs
@ -353,12 +349,12 @@ void simulate(
copyNeighborsRaw(DIM,currentChunk->chunkMask,0,3,currentChunk->w);
}
}
saveStep(chunks[0]->u[CENTER_LOC], "./chunks/advectU");
saveStep(chunks[0]->v[CENTER_LOC], "./chunks/advectV");
saveStep(chunks[0]->w[CENTER_LOC], "./chunks/advectW");
saveStep(chunks[0]->u0[CENTER_LOC], "./chunks/advectU0");
saveStep(chunks[0]->v0[CENTER_LOC], "./chunks/advectV0");
saveStep(chunks[0]->w0[CENTER_LOC], "./chunks/advectW0");
// saveStep(chunks[0]->u[CENTER_LOC], "./chunks/advectU");
// saveStep(chunks[0]->v[CENTER_LOC], "./chunks/advectV");
// saveStep(chunks[0]->w[CENTER_LOC], "./chunks/advectW");
// saveStep(chunks[0]->u0[CENTER_LOC], "./chunks/advectU0");
// saveStep(chunks[0]->v0[CENTER_LOC], "./chunks/advectV0");
// saveStep(chunks[0]->w0[CENTER_LOC], "./chunks/advectW0");
//solve projection
{
//update array for vectors

View File

@ -16,14 +16,14 @@
#define SET_BOUND_IGNORE 0
#define SET_BOUND_USE_NEIGHBOR 1
static inline void add_source(int N, float * x, float * s, float dt);
static inline void advect(uint32_t chunk_mask, int N, int b, float ** jrd, float ** jrd0, float * u, float * v, float * w, float dt);
void add_source(int N, float * x, float * s, float dt);
void advect(uint32_t chunk_mask, int N, int b, float ** jrd, float ** jrd0, float * u, float * v, float * w, float dt);
/*
* Adds force to all vectors
*/
static inline void addSourceToVectors
void addSourceToVectors
(
int N,
int chunk_mask,
@ -44,7 +44,7 @@ static inline void addSourceToVectors
/**
* Adds from a source array to a destination array
*/
static inline void add_source(int N, float * x, float * s, float dt){
void add_source(int N, float * x, float * s, float dt){
int i;
int size=N*N*N;
for(i=0; i<size; i++){
@ -55,7 +55,7 @@ static inline void add_source(int N, float * x, float * s, float dt){
/*
* Solves vector diffusion along all axis
*/
static inline void solveVectorDiffuse (
void solveVectorDiffuse (
int N,
int chunk_mask,
float ** jru,
@ -160,10 +160,21 @@ static inline void solveVectorDiffuse (
}
}
/*
/**
* Sets up a projection system of equations
* It stores the first derivative of the field in pr, and zeroes out divr.
* This allows you to calculate the second derivative into divr using the derivative stored in pr.
* @param N The dimension of the grid
* @param ur The x velocity grid
* @param vr The y velocity grid
* @param wr The z velocity grid
* @param pr The grid that will contain the first derivative
* @param divr The grid that will be zeroed out in preparation of the solver
* @param DIFFUSION_CONST The diffusion constant
* @param VISCOSITY_CONST The viscosity constant
* @param dt The timestep for the simulation
*/
static inline void setupProjection(
void setupProjection(
int N,
int chunk_mask,
float ** ur,
@ -243,10 +254,13 @@ static inline void setupProjection(
}
}
/*
* Solves a projection system of equations
/**
* Solves a projection system of equations.
* This performs a single iteration across a the p grid to approximate the gradient field.
* @param jru0 The gradient field
* @param jrv0 The first derivative field
*/
static inline void solveProjection(
void solveProjection(
int N,
int chunk_mask,
float ** jru,
@ -294,10 +308,12 @@ static inline void solveProjection(
}
}
/*
* Finalizes a projection (subtract curl, set bounds, etc)
/**
* Finalizes a projection.
* This subtracts the difference delta along the approximated gradient field.
* Thus we are left with an approximately mass-conserved field.
*/
static inline void finalizeProjection(
void finalizeProjection(
int N,
int chunk_mask,
float ** jru,
@ -381,7 +397,7 @@ static inline void finalizeProjection(
/*
* Advects u, v, and w
*/
static inline void advectVectors(
void advectVectors(
int N,
int chunk_mask,
float ** jru,
@ -402,7 +418,7 @@ static inline void advectVectors(
/**
* Actually performs the advection
*/
static inline void advect(uint32_t chunk_mask, int N, int b, float ** jrd, float ** jrd0, float * u, float * v, float * w, float dt){
void advect(uint32_t chunk_mask, int N, int b, float ** jrd, float ** jrd0, float * u, float * v, float * w, float dt){
int i, j, k, i0, j0, k0, i1, j1, k1;
int m,n,o;
float x, y, z, s0, t0, s1, t1, u1, u0, dtx,dty,dtz;
@ -647,7 +663,7 @@ static inline void advect(uint32_t chunk_mask, int N, int b, float ** jrd, float
/**
* Sets the bounds of this cube to those of its neighbor
*/
static inline void setBoundsToNeighborsRaw(
void setBoundsToNeighborsRaw(
int N,
int chunk_mask,
int vector_dir,
@ -701,7 +717,7 @@ static inline void setBoundsToNeighborsRaw(
/**
* This exclusively copies neighbors to make sure zeroing out stuff doesn't break sim
*/
static inline void copyNeighborsRaw(
void copyNeighborsRaw(
int N,
int chunk_mask,
int cx,

3
src/main/c/build.sh Normal file
View File

@ -0,0 +1,3 @@
#Builds the native code
cmake --preset=default
cmake --build ./out/build/default

View File

@ -21,6 +21,12 @@ extern "C" {
#define electrosphere_server_fluid_manager_ServerFluidChunk_BUFFER_DIM 18L
#undef electrosphere_server_fluid_manager_ServerFluidChunk_BUFFER_SIZE
#define electrosphere_server_fluid_manager_ServerFluidChunk_BUFFER_SIZE 5832L
#undef electrosphere_server_fluid_manager_ServerFluidChunk_IS_HOMOGENOUS
#define electrosphere_server_fluid_manager_ServerFluidChunk_IS_HOMOGENOUS 1.0f
#undef electrosphere_server_fluid_manager_ServerFluidChunk_IS_NOT_HOMOGENOUS
#define electrosphere_server_fluid_manager_ServerFluidChunk_IS_NOT_HOMOGENOUS 0.0f
#undef electrosphere_server_fluid_manager_ServerFluidChunk_HOMOGENOUS_BUFFER_SIZE
#define electrosphere_server_fluid_manager_ServerFluidChunk_HOMOGENOUS_BUFFER_SIZE 4L
/*
* Class: electrosphere_server_fluid_manager_ServerFluidChunk
* Method: allocate

View File

@ -42,9 +42,9 @@ public class FluidAcceleratedSimulator implements ServerFluidSimulator {
String osName = System.getProperty("os.name").toLowerCase();
String libPath = LIB_DIR;
if(osName.contains("win")){
libPath = libPath + "/libfluidsim.dll";
libPath = libPath + "/libStormEngine.dll";
} else {
libPath = libPath + "/libfluidsim.so";
libPath = libPath + "/libStormEngine.so";
}
String absolutePath = new File(libPath).toPath().toAbsolutePath().toString();
System.load(absolutePath);