Commit cea20be7 authored by bader's avatar bader

made OpenGl version run with SWE_WavePropagationBlockCuda

parent fbe0b971
...@@ -58,6 +58,7 @@ ...@@ -58,6 +58,7 @@
</Link> </Link>
<CudaCompile> <CudaCompile>
<Runtime>MD</Runtime> <Runtime>MD</Runtime>
<CodeGeneration>compute_20,sm_20</CodeGeneration>
</CudaCompile> </CudaCompile>
<PostBuildEvent> <PostBuildEvent>
<Command>xcopy /y "$(ProjectDir)SDL\lib\SDL.dll" "$(OutDir)" </Command> <Command>xcopy /y "$(ProjectDir)SDL\lib\SDL.dll" "$(OutDir)" </Command>
...@@ -106,6 +107,7 @@ ...@@ -106,6 +107,7 @@
<ClCompile Include="src\scenarios\SWE_VtkScenario.cpp" /> <ClCompile Include="src\scenarios\SWE_VtkScenario.cpp" />
<ClCompile Include="src\scenarios\SWE_VtkScenarioVisInfo.cpp" /> <ClCompile Include="src\scenarios\SWE_VtkScenarioVisInfo.cpp" />
<ClCompile Include="src\SWE_Block.cpp" /> <ClCompile Include="src\SWE_Block.cpp" />
<ClCompile Include="src\SWE_WavePropagationBlock.cpp" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<CudaCompile Include="src\opengl\simulation.cu"> <CudaCompile Include="src\opengl\simulation.cu">
...@@ -115,6 +117,8 @@ ...@@ -115,6 +117,8 @@
<CudaCompile Include="src\SWE_BlockCUDA_kernels.cu" /> <CudaCompile Include="src\SWE_BlockCUDA_kernels.cu" />
<CudaCompile Include="src\SWE_RusanovBlockCUDA.cu" /> <CudaCompile Include="src\SWE_RusanovBlockCUDA.cu" />
<CudaCompile Include="src\SWE_RusanovBlockCUDA_kernels.cu" /> <CudaCompile Include="src\SWE_RusanovBlockCUDA_kernels.cu" />
<CudaCompile Include="src\SWE_WavePropagationBlockCuda.cu" />
<CudaCompile Include="src\SWE_WavePropagationBlockCuda_kernels.cu" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="src\SWE_Block.hh" /> <None Include="src\SWE_Block.hh" />
...@@ -122,6 +126,9 @@ ...@@ -122,6 +126,9 @@
<None Include="src\SWE_BlockCUDA_kernels.hh" /> <None Include="src\SWE_BlockCUDA_kernels.hh" />
<None Include="src\SWE_RusanovBlockCUDA.hh" /> <None Include="src\SWE_RusanovBlockCUDA.hh" />
<None Include="src\SWE_RusanovBlockCUDA_kernels.hh" /> <None Include="src\SWE_RusanovBlockCUDA_kernels.hh" />
<None Include="src\SWE_WavePropagationBlock.hh" />
<None Include="src\SWE_WavePropagationBlockCuda.hh" />
<None Include="src\SWE_WavePropagationBlockCuda_kernels.hh" />
</ItemGroup> </ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets"> <ImportGroup Label="ExtensionTargets">
......
...@@ -68,6 +68,9 @@ ...@@ -68,6 +68,9 @@
<ClCompile Include="src\SWE_Block.cpp"> <ClCompile Include="src\SWE_Block.cpp">
<Filter>Quelldateien</Filter> <Filter>Quelldateien</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="src\SWE_WavePropagationBlock.cpp">
<Filter>Quelldateien</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<CudaCompile Include="src\opengl\simulation.cu"> <CudaCompile Include="src\opengl\simulation.cu">
...@@ -85,6 +88,12 @@ ...@@ -85,6 +88,12 @@
<CudaCompile Include="src\SWE_RusanovBlockCUDA.cu"> <CudaCompile Include="src\SWE_RusanovBlockCUDA.cu">
<Filter>Quelldateien</Filter> <Filter>Quelldateien</Filter>
</CudaCompile> </CudaCompile>
<CudaCompile Include="src\SWE_WavePropagationBlockCuda.cu">
<Filter>Quelldateien</Filter>
</CudaCompile>
<CudaCompile Include="src\SWE_WavePropagationBlockCuda_kernels.cu">
<Filter>Quelldateien</Filter>
</CudaCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="src\SWE_RusanovBlockCUDA_kernels.hh"> <None Include="src\SWE_RusanovBlockCUDA_kernels.hh">
...@@ -102,5 +111,14 @@ ...@@ -102,5 +111,14 @@
<None Include="src\SWE_Block.hh"> <None Include="src\SWE_Block.hh">
<Filter>Headerdateien</Filter> <Filter>Headerdateien</Filter>
</None> </None>
<None Include="src\SWE_WavePropagationBlock.hh">
<Filter>Headerdateien</Filter>
</None>
<None Include="src\SWE_WavePropagationBlockCuda.hh">
<Filter>Headerdateien</Filter>
</None>
<None Include="src\SWE_WavePropagationBlockCuda_kernels.hh">
<Filter>Headerdateien</Filter>
</None>
</ItemGroup> </ItemGroup>
</Project> </Project>
\ No newline at end of file
...@@ -168,6 +168,35 @@ void SWE_WavePropagationBlockCuda::simulateTimestep(float i_dT) { ...@@ -168,6 +168,35 @@ void SWE_WavePropagationBlockCuda::simulateTimestep(float i_dT) {
updateUnknowns(i_dT); updateUnknowns(i_dT);
} }
/**
* perform forward-Euler time steps, starting with simulation time tStart,:
* until simulation time tEnd is reached;
* device-global variables hd, hud, hvd are updated;
* unknowns h, hu, hv in main memory are not updated.
* Ghost layers and bathymetry sources are updated between timesteps.
* intended as main simulation loop between two checkpoints
*/
__host__
float SWE_WavePropagationBlockCuda::simulate(float tStart, float tEnd) {
float t = tStart;
do {
// set values in ghost cells:
setGhostLayer();
// Compute the numerical fluxes/net-updates in the wave propagation formulation.
computeNumericalFluxes();
// Update the unknowns with the net-updates.
updateUnknowns(maxTimestep);
t += maxTimestep;
// cout << "Simulation at time " << t << endl << flush;
} while(t < tEnd);
return t;
}
/** /**
* Compute the numerical fluxes (net-update formulation here) on all edges. * Compute the numerical fluxes (net-update formulation here) on all edges.
* *
......
...@@ -74,11 +74,8 @@ class SWE_WavePropagationBlockCuda: public SWE_BlockCUDA { ...@@ -74,11 +74,8 @@ class SWE_WavePropagationBlockCuda: public SWE_BlockCUDA {
// compute a single time step (net-updates + update of the cells). // compute a single time step (net-updates + update of the cells).
void simulateTimestep( float i_dT ); void simulateTimestep( float i_dT );
// TODO: Not implemented // simulate multiple time steps (start and end time provided as parameters)
float simulate(float, float) { float simulate(float, float);
assert(false);
return 0;
};
// TODO: not implemented, max time step reduction is done in each call of computeNumericalFluxes(...) // TODO: not implemented, max time step reduction is done in each call of computeNumericalFluxes(...)
void computeMaxTimestep() { void computeMaxTimestep() {
......
...@@ -26,7 +26,8 @@ ...@@ -26,7 +26,8 @@
#include "../scenarios/SWE_simple_scenarios_vis.h" #include "../scenarios/SWE_simple_scenarios_vis.h"
#include "../scenarios/SWE_VtkScenarioVisInfo.h" #include "../scenarios/SWE_VtkScenarioVisInfo.h"
#include "../SWE_BlockCUDA.hh" #include "../SWE_BlockCUDA.hh"
#include "../SWE_RusanovBlockCUDA.hh" // #include "../SWE_RusanovBlockCUDA.hh"
#include "../SWE_WavePropagationBlockCUDA.hh"
// For SDL compatibility // For SDL compatibility
#undef main #undef main
...@@ -105,7 +106,8 @@ int main(int argc, char *argv[]) ...@@ -105,7 +106,8 @@ int main(int argc, char *argv[])
SWE_Block::initGridData(nx,ny,dx,dy); SWE_Block::initGridData(nx,ny,dx,dy);
splash = new SWE_RusanovBlockCUDA(); // splash = new SWE_RusanovBlockCUDA();
splash = new SWE_WavePropagationBlockCuda();
// define boundary type at all four domain boundaries: // define boundary type at all four domain boundaries:
splash->setWallBoundaries(); // walls at all boundaries splash->setWallBoundaries(); // walls at all boundaries
......
...@@ -244,7 +244,10 @@ void Simulation::calculateWaterSurface(float3* destBuffer) { ...@@ -244,7 +244,10 @@ void Simulation::calculateWaterSurface(float3* destBuffer) {
isFirstStep = 0; isFirstStep = 0;
} else { } else {
//splash->simulateConstTimestep(); //splash->simulateConstTimestep();
curTime = splash->simulate(curTime, curTime + 0.001f); // curTime = splash->simulate(curTime, curTime + 5*splash->getMaxTimestep());
float dt = splash->getMaxTimestep();
splash->simulateTimestep(dt);
curTime += dt;
} }
// splash->updateVisBuffer(destBuffer, wAverage, wScale, wOffset); // splash->updateVisBuffer(destBuffer, wAverage, wScale, wOffset);
updateVisBuffer(destBuffer); updateVisBuffer(destBuffer);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment