tAdded cmd-line arg processing - sphere - GPU-based 3D discrete element method … | |
git clone git://src.adamsgaard.dk/sphere | |
Log | |
Files | |
Refs | |
LICENSE | |
--- | |
commit af2de06847aae3374f42f0ba99feeb25149ae8dc | |
parent ae9ebb8f0258bc86ba0f8a1ad2942f5000e90d73 | |
Author: Anders Damsgaard <[email protected]> | |
Date: Tue, 30 Oct 2012 15:14:55 +0100 | |
Added cmd-line arg processing | |
Diffstat: | |
M python/sphere.py | 12 ++++++++---- | |
M python/tests.py | 10 +++++----- | |
M src/device.cu | 22 +++++++++++++--------- | |
M src/main.cpp | 98 +++++++++++++++++++++--------… | |
M src/sphere.cpp | 3 ++- | |
M src/sphere.h | 3 ++- | |
6 files changed, 96 insertions(+), 52 deletions(-) | |
--- | |
diff --git a/python/sphere.py b/python/sphere.py | |
t@@ -1285,13 +1285,17 @@ def visualize(project, method = 'energy', savefig = Tr… | |
else: | |
plt.show() | |
-def run(project): | |
+def run(project, verbose=True, hideinputfile=False): | |
""" Execute sphere with target project | |
""" | |
- subprocess.call("cd ..; ./sphere_*_X86_64 " + project, shell=True) | |
- | |
+ quiet = "" | |
+ stdout = "" | |
+ if (verbose == False): | |
+ quiet = "-q " | |
+ if (hideinputfile == True): | |
+ stdout = " > /dev/null" | |
+ subprocess.call("cd ..; ./sphere_*_X86_64 "+ quiet + project + stdout, shell… | |
- | |
def status(project): | |
""" Check the status.dat file for the target project, | |
and return the last file numer. | |
diff --git a/python/tests.py b/python/tests.py | |
t@@ -3,9 +3,9 @@ from sphere import * | |
def compare(first, second, string): | |
if (first == second): | |
- print(string + ":\tPassed") | |
+ print(string + "\tPassed") | |
else: | |
- print(string + ":\tFailed") | |
+ print(string + "\tFailed") | |
#### Input/output tests #### | |
t@@ -28,12 +28,12 @@ orig.writebin("orig.bin", verbose=False) | |
# Test Python IO routines | |
py = Spherebin() | |
py.readbin("orig.bin", verbose=False) | |
-compare(orig, py, "Python IO") | |
+compare(orig, py, "Python IO:") | |
# Test C++ IO routines | |
-run("python/orig.bin") | |
+run("python/orig.bin", verbose=False, hideinputfile=True) | |
cpp = Spherebin() | |
cpp.readbin("../output/orig.output0.bin", verbose=False) | |
-compare(orig, cpp, "C++ IO ") | |
+compare(orig, cpp, "C++ IO: ") | |
diff --git a/src/device.cu b/src/device.cu | |
t@@ -46,22 +46,26 @@ __host__ void DEM::initializeGPU(void) | |
std::cerr << "\nERROR: No CUDA-enabled devices availible. Bye.\n"; | |
exit(EXIT_FAILURE); | |
} else if (devicecount == 1) { | |
- cout << "\nSystem contains 1 CUDA compatible device.\n"; | |
+ if (verbose == 1) | |
+ cout << "\nSystem contains 1 CUDA compatible device.\n"; | |
} else { | |
- cout << "\nSystem contains " << devicecount << " CUDA compatible devices.\… | |
+ if (verbose == 1) | |
+ cout << "\nSystem contains " << devicecount << " CUDA compatible devices… | |
} | |
cudaGetDeviceProperties(&prop, cudadevice); | |
cudaDriverGetVersion(&cudaDriverVersion); | |
cudaRuntimeGetVersion(&cudaRuntimeVersion); | |
- cout << "Using CUDA device ID: " << cudadevice << "\n"; | |
- cout << " - Name: " << prop.name << ", compute capability: " | |
- << prop.major << "." << prop.minor << ".\n"; | |
- cout << " - CUDA Driver version: " << cudaDriverVersion/1000 | |
- << "." << cudaDriverVersion%100 | |
- << ", runtime version " << cudaRuntimeVersion/1000 << "." | |
- << cudaRuntimeVersion%100 << "\n\n"; | |
+ if (verbose == 1) { | |
+ cout << "Using CUDA device ID: " << cudadevice << "\n"; | |
+ cout << " - Name: " << prop.name << ", compute capability: " | |
+ << prop.major << "." << prop.minor << ".\n"; | |
+ cout << " - CUDA Driver version: " << cudaDriverVersion/1000 | |
+ << "." << cudaDriverVersion%100 | |
+ << ", runtime version " << cudaRuntimeVersion/1000 << "." | |
+ << cudaRuntimeVersion%100 << "\n\n"; | |
+ } | |
// Comment following line when using a system only containing exclusive mode… | |
cudaChooseDevice(&cudadevice, &prop); | |
diff --git a/src/main.cpp b/src/main.cpp | |
t@@ -26,43 +26,77 @@ | |
// 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 checkConstantVals = 0; | |
+ int render = 0; | |
+ int nfiles = 0; // number of input files | |
- // LOCAL VARIABLE DECLARATIONS | |
- if(!argv[1] || argc != 2) { | |
- std::cerr << "Error: Specify input binary file, e.g. " | |
- << argv[0] << " input/test.bin" << std::endl; | |
- return 1; // Return unsuccessful exit status | |
- } | |
- //char *inputbin = argv[1]; // Input binary file read from command line argu… | |
- std::string inputbin = argv[1]; | |
+ // Process input parameters | |
+ int i; | |
+ for (i=1; i<argc; ++i) { // skip argv[0] | |
- int verbose = 1; | |
- int checkVals = 1; | |
- | |
- if (verbose == 1) { | |
- // Opening cerenomy with fancy ASCII art | |
- std::cout << ".-------------------------------------.\n" | |
- << "| _ Compiled for " << ND << "D |\n" | |
- << "| | | |\n" | |
- << "| ___ _ __ | |__ ___ _ __ ___ |\n" | |
- << "| / __| '_ \\| '_ \\ / _ \\ '__/ _ \\ |\n" | |
- << "| \\__ \\ |_) | | | | __/ | | __/ |\n" | |
- << "| |___/ .__/|_| |_|\\___|_| \\___| |\n" | |
- << "| | | |\n" | |
- << "| |_| Version: " << VERS << " |\n" | |
- << "`-------------------------------------´\n"; | |
- } | |
+ 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 ...]\nOptions:\n" | |
+ << "-h, --help\t\tprint help\n" | |
+ << "-V, --version\t\tprint version information and exit\n" | |
+ << "-q, --quiet\t\tsuppress status messages to stdout\n" | |
+ << "-r, --render\t\trender input files instead of simulating temporal … | |
+ << "-cc, --check-constants\t\tcheck values in constant GPU memory" << … | |
+ return 0; // Exit with success | |
+ } | |
+ | |
+ // Display version with fancy ASCII art | |
+ else if (argvi == "-V" || argvi == "--version") { | |
+ std::cout << ".-------------------------------------.\n" | |
+ << "| _ Compiled for " << ND << "D |\n" | |
+ << "| | | |\n" | |
+ << "| ___ _ __ | |__ ___ _ __ ___ |\n" | |
+ << "| / __| '_ \\| '_ \\ / _ \\ '__/ _ \\ |\n" | |
+ << "| \\__ \\ |_) | | | | __/ | | __/ |\n" | |
+ << "| |___/ .__/|_| |_|\\___|_| \\___| |\n" | |
+ << "| | | |\n" | |
+ << "| |_| Version: " << VERS << " |\n" | |
+ << "`-------------------------------------´\n"; | |
+ return 0; | |
+ } | |
+ | |
+ else if (argvi == "-q" || argvi == "--quiet") | |
+ verbose = 0; | |
- std::cout << "Input file: " << inputbin << std::endl; | |
- | |
- // Create DEM class, read data from input binary, check values | |
- DEM dem(inputbin, verbose, checkVals); | |
+ else if (argvi == "-r" || argvi == "--render") | |
+ render = 1; | |
- // Start iterating through time | |
- dem.startTime(); | |
+ else if (argvi == "-cc" || argvi == "--check-constants") | |
+ checkConstantVals = 1; | |
+ | |
+ // The rest of the values must be input binary files | |
+ else { | |
+ nfiles++; | |
+ | |
+ std::cout << argv[0] << ": processing input file: " << argvi << std::end… | |
+ | |
+ // Create DEM class, read data from input binary, check values | |
+ DEM dem(argvi, verbose, checkConstantVals, render); | |
+ | |
+ // Start iterating through time, unless user chose to render image | |
+ if (render != 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 | |
+ } | |
- // Terminate execution | |
- std::cout << "\nBye!\n"; | |
return 0; // Return successfull exit status | |
} | |
// END OF FILE | |
diff --git a/src/sphere.cpp b/src/sphere.cpp | |
t@@ -12,7 +12,8 @@ | |
// and reports the values | |
DEM::DEM(const std::string inputbin, | |
const int verbosity, | |
- const int checkVals) | |
+ const int checkVals, | |
+ const int render) | |
: verbose(verbosity) | |
{ | |
using std::cout; | |
diff --git a/src/sphere.h b/src/sphere.h | |
t@@ -78,7 +78,8 @@ class DEM { | |
// Constructor, some parameters with default values | |
DEM(std::string inputbin, | |
const int verbosity = 1, | |
- const int checkVals = 1); | |
+ const int checkVals = 1, | |
+ const int render = 0); | |
// Destructor | |
~DEM(void); |