Introduction
Introduction Statistics Contact Development Disclaimer Help
tdo not generate separate binary for porous flow, add exclusive mode flag - sph…
git clone git://src.adamsgaard.dk/sphere
Log
Files
Refs
LICENSE
---
commit 7310210eeea7eaea39afad0b6642866a417ef323
parent 7e9994c85ea1f10fc5040bb9d7d628bc5b4cc133
Author: Anders Damsgaard <[email protected]>
Date: Mon, 28 Jul 2014 09:58:07 +0200
do not generate separate binary for porous flow, add exclusive mode flag
Diffstat:
M python/sphere.py | 4 ++--
M src/CMakeLists.txt | 2 --
M src/device.cu | 11 ++++++-----
M src/main.cpp | 13 +++++++++++--
D src/porousflow.cpp | 83 -----------------------------…
M src/sphere.cpp | 15 ++++++++-------
M src/sphere.h | 4 +++-
7 files changed, 30 insertions(+), 102 deletions(-)
---
diff --git a/python/sphere.py b/python/sphere.py
t@@ -3103,10 +3103,10 @@ class sim:
if (cudamemcheck == True):
cudamemchk = "cuda-memcheck --leak-check full "
if (self.fluid == True):
- binary = "porousflow"
+ fluidarg = "--fluid "
cmd = "cd ..; " + valgrindbin + cudamemchk + "./" + binary + " " \
- + quiet + dryarg + "input/" + self.sid + ".bin " + stdout
+ + quiet + dryarg + fluidarg + "input/" + self.sid + ".bin " + …
#print(cmd)
status = subprocess.call(cmd, shell=True)
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
t@@ -30,8 +30,6 @@ CUDA_ADD_EXECUTABLE(../porosity
CUDA_ADD_EXECUTABLE(../forcechains
forcechains.cpp file_io.cpp sphere.cpp device.cu utility.cu utility.cpp
navierstokes.cpp)
-CUDA_ADD_EXECUTABLE(../porousflow
- porousflow.cpp navierstokes.cpp file_io.cpp sphere.cpp device.cu utility.c…
#ADD_EXECUTABLE(unittests boost-unit-tests.cpp sphere.cpp)
#TARGET_LINK_LIBRARIES(unittests
diff --git a/src/device.cu b/src/device.cu
t@@ -109,12 +109,13 @@ __host__ void DEM::initializeGPU(void)
}
device = cudadevice; // store in DEM class
- cout << " Using CUDA device ID " << cudadevice << " with "
- << max_ncudacores << " cores." << std::endl;
- // Comment following line when using a system only containing
- // exclusive mode GPUs
- cudaChooseDevice(&cudadevice, &prop);
+ // Only call cudaChooseDevice if the exlusive mode flag isn't set
+ if (exclusive_mode != 1) {
+ cout << " Using CUDA device ID " << cudadevice << " with "
+ << max_ncudacores << " cores." << std::endl;
+ cudaChooseDevice(&cudadevice, &prop);
+ }
checkForCudaErrors("While initializing CUDA device");
}
diff --git a/src/main.cpp b/src/main.cpp
t@@ -36,6 +36,8 @@ int main(const int argc, const char *argv[])
int nfiles = 0; // number of input files
float max_val = 0.0f; // max value of colorbar
float lower_cutoff = 0.0f;// lower cutoff, particles below won't be render…
+ int fluid = 0;
+ int exclusive_mode = 0; // system GPUs are running on exclusive mode
// Process input parameters
int i;
t@@ -54,6 +56,7 @@ int main(const int argc, const char *argv[])
"-e, --exclusive\t\tset this flag for systems containing\n"
" \t\tonly exclusive-mode GPUs\n"
"-n, --dry\t\tshow key experiment parameters and quit\n"
+ "-f, --fluid\t\tsimulate fluid between particles\n"
"-r, --render\t\trender input files to images instead of\n"
" \t\tsimulating the temporal evolution\n"
"-dc, --dont-check\tdon't check values before running\n"
t@@ -101,6 +104,12 @@ int main(const int argc, const char *argv[])
else if (argvi == "-dc" || argvi == "--dont-check")
checkVals = 0;
+ else if (argvi == "-f" || argvi == "--fluid")
+ fluid = 1;
+
+ else if (argvi == "-e" || argvi == "--exclusive")
+ exlusive_mode = 1;
+
else if (argvi == "-m" || argvi == "--method") {
render = 1;
t@@ -153,7 +162,7 @@ int main(const int argc, const char *argv[])
// Create DEM class, read data from input binary, check values,
// init cuda, transfer const mem
- DEM dem(argvi, verbose, checkVals, dry, 1, 1);
+ DEM dem(argvi, verbose, checkVals, dry, 1, 1, fluid, exclusive…
// Render image if requested
if (render == 1)
dem.render(method, max_val, lower_cutoff);
t@@ -165,7 +174,7 @@ int main(const int argc, const char *argv[])
} else {
// Do not transfer to const. mem after the first file
- DEM dem(argvi, verbose, checkVals, dry, 1, 0);
+ DEM dem(argvi, verbose, checkVals, dry, 1, 0, fluid, exclusive…
// Render image if requested
if (render == 1)
diff --git a/src/porousflow.cpp b/src/porousflow.cpp
t@@ -1,83 +0,0 @@
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-/* SPHERE source code by Anders Damsgaard Christensen, 2010-12, */
-/* a 3D Discrete Element Method algorithm with CUDA GPU acceleration. */
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-// Licence: GNU Public License (GPL) v. 3. See license.txt.
-// See doc/sphere-doc.pdf for full documentation.
-// Compile with GNU make by typing 'make' in the src/ directory.
-// SPHERE is called from the command line with './sphere_<architecture> projec…
-
-
-// Including library files
-#include <iostream>
-#include <string>
-#include <cstdlib>
-
-// Including user files
-#include "constants.h"
-#include "datatypes.h"
-#include "sphere.h"
-
-//////////////////
-// MAIN ROUTINE //
-//////////////////
-// The main loop returns the value 0 to the shell, if the program terminated
-// successfully, and 1 if an error occured which caused the program to crash.
-int main(const int argc, const char *argv[])
-{
- // Default values
- int verbose = 1;
- int dry = 0;
- int nfiles = 0;
- int darcy = 1;
-
- // Process input parameters
- int i;
- for (i=1; i<argc; ++i) { // skip argv[0]
-
- std::string argvi = std::string(argv[i]);
-
- // Display help if requested
- if (argvi == "-h" || argvi == "--help") {
- std::cout << argv[0] << ": particle dynamics simulator\n"
- << "Usage: " << argv[0] << " [OPTION[S]]... [FILE1 ...]\nOptio…
- << "-h, --help\t\tprint help\n"
- << "-n, --dry\t\tshow key experiment parameters and quit\n"
- << std::endl;
- return 0; // Exit with success
- }
-
- else if (argvi == "-n" || argvi == "--dry")
- dry = 1;
-
- else if (argvi == "-q" || argvi == "--quiet")
- verbose = 0;
-
- // The rest of the values must be input binary files
- else {
- nfiles++;
-
- if (verbose == 1)
- std::cout << argv[0] << ": processing input file: " << argvi <<
- std::endl;
-
- // Create DEM class, read data from input binary,
- // check values, init cuda, transfer const mem, solve Darcy flow
- DEM dem(argvi, verbose, 1, dry, 1, 1, darcy);
- if (dry == 0)
- dem.startTime();
- }
- }
-
- // Check whether there are input files specified
- if (!argv[0] || argc == 1 || nfiles == 0) {
- std::cerr << argv[0] << ": missing input binary file\n"
- << "See `" << argv[0] << " --help` for more information"
- << std::endl;
- return 1; // Return unsuccessful exit status
- }
-
- return 0; // Return successfull exit status
-}
-// vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
diff --git a/src/sphere.cpp b/src/sphere.cpp
t@@ -14,13 +14,14 @@
// Constructor: Reads an input binary, and optionally checks
// and reports the values
DEM::DEM(const std::string inputbin,
- const int verbosity,
- const int checkVals,
- const int dry,
- const int initCuda,
- const int transferConstMem,
- const int porousflow)
-: verbose(verbosity), navierstokes(porousflow)
+ const int verbosity,
+ const int checkVals,
+ const int dry,
+ const int initCuda,
+ const int transferConstMem,
+ const int fluidFlow,
+ const int exlusive)
+: verbose(verbosity), navierstokes(fluidFlow), exlusive_mode(exlusive)
{
using std::cout;
using std::cerr;
diff --git a/src/sphere.h b/src/sphere.h
t@@ -57,6 +57,7 @@ class DEM {
int ndevices; // number of CUDA GPUs
int device; // primary GPU
int* domain_size; // elements per GPU
+ int exlusive_mode; // devices are running in exclusive mode (1)
// DEVICE ARRAYS
t@@ -296,7 +297,8 @@ class DEM {
const int dry = 0,
const int initCuda = 1,
const int transferConstMem = 1,
- const int darcyflow = 0);
+ const int fluidFlow = 0,
+ const int exclusive = 0);
// Destructor
~DEM(void);
You are viewing proxied material from mx1.adamsgaard.dk. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.