[cig-commits] [commit] master: Add Greens file input/output tests (b2163be)
cig_noreply at geodynamics.org
cig_noreply at geodynamics.org
Wed Dec 10 10:00:40 PST 2014
Repository : https://github.com/geodynamics/vq
On branch : master
Link : https://github.com/geodynamics/vq/compare/4d339b3a383b69e1552cfeef4ca20868a1377289...d0edc6ddd56f9105f6d2488db4a9f36368529695
>---------------------------------------------------------------
commit b2163befde8b3742868ecc66e752fe4cd0f02524
Author: Eric Heien <emheien at ucdavis.edu>
Date: Thu Dec 4 13:35:26 2014 -0800
Add Greens file input/output tests
>---------------------------------------------------------------
b2163befde8b3742868ecc66e752fe4cd0f02524
examples/CMakeLists.txt | 57 ++++++++++++++++++++++++
examples/{example_params.d => greens_generate.d} | 3 +-
examples/{example_params.d => greens_input.d} | 4 +-
examples/sum_greens.py | 32 +++++++++++++
4 files changed, 93 insertions(+), 3 deletions(-)
diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt
index b6ab4ca..d9f7e2a 100644
--- a/examples/CMakeLists.txt
+++ b/examples/CMakeLists.txt
@@ -20,6 +20,7 @@ ENDIF(DEFINED MPI_C_FOUND AND MPI_CXX_FOUND)
SET(SETUP_PARAMS_SCRIPT ${VQ_EXAMPLE_DIR}/setup_params.sh)
SET(CHECK_SCRIPT ${VQ_EXAMPLE_DIR}/check_results.py)
+SET(GREENS_SCRIPT ${VQ_EXAMPLE_DIR}/sum_greens.py)
SET(ENV{PATH} $ENV{PATH}:${CMAKE_CURRENT_BINARY_DIR}/../src/)
LIST(LENGTH TAPER_METHODS N)
@@ -177,8 +178,64 @@ FOREACH(TAPER_IND RANGE ${NUM_TAPER})
ENDFOREACH(TAPER_IND RANGE ${NUM_TAPER})
+# Confirm HDF5 Greens file output and input works correctly on one or more processors
+IF (HDF5_FOUND)
+ FOREACH(NPROC ${NUM_PROCS})
+ SET(TEST_DIR ${CMAKE_CURRENT_BINARY_DIR}/GREENS_P${NPROC}/)
+ SET(RES 3000)
+ FILE(MAKE_DIRECTORY ${TEST_DIR})
+ SET(TEST_SUFFIX P${NPROC}_green_${RES})
+ SET(EVENT_FILE ${TEST_DIR}events_${RES}.txt)
+ SET(SWEEP_FILE ${TEST_DIR}sweeps_${RES}.txt)
+
+ ADD_TEST(
+ NAME mesh_${TEST_SUFFIX} WORKING_DIRECTORY ${TEST_DIR}
+ COMMAND mesher
+ --import_file=../../fault_traces/single_fault_trace.txt
+ --import_file_type=trace --import_trace_element_size=${RES}
+ --taper_fault_method=none
+ --export_file=single_fault_${RES}.txt
+ --export_file_type=text
+ )
+ ADD_TEST(NAME param_gen_${TEST_SUFFIX} WORKING_DIRECTORY ${TEST_DIR}
+ COMMAND ${SETUP_PARAMS_SCRIPT} ${RES} 0.5 single_fault ${VQ_EXAMPLE_DIR}/greens_generate.d)
+ SET_TESTS_PROPERTIES (param_gen_${TEST_SUFFIX} PROPERTIES DEPENDS mesh_${TEST_SUFFIX})
+
+ ADD_TEST(NAME param_run_${TEST_SUFFIX} WORKING_DIRECTORY ${TEST_DIR}
+ COMMAND ${SETUP_PARAMS_SCRIPT} ${RES} 0.5 single_fault ${VQ_EXAMPLE_DIR}/greens_input.d)
+ SET_TESTS_PROPERTIES (param_run_${TEST_SUFFIX} PROPERTIES DEPENDS param_gen_${TEST_SUFFIX})
+
+ ADD_TEST(NAME run_gen_${TEST_SUFFIX} WORKING_DIRECTORY ${TEST_DIR}
+ COMMAND ${MPIEXEC} ${MPIEXEC_NUMPROC_FLAG} ${NPROC} ${VQ_BINARY_DIR}/vq params_${RES}.d)
+ SET_TESTS_PROPERTIES (run_gen_${TEST_SUFFIX} PROPERTIES DEPENDS param_run_${TEST_SUFFIX})
+
+ ADD_TEST(NAME check_${TEST_SUFFIX} WORKING_DIRECTORY ${TEST_DIR}
+ COMMAND ${PYTHON_EXECUTABLE} ${GREENS_SCRIPT} greens_3000.h5 6.93247959318e-08 -92400201.204)
+ SET_TESTS_PROPERTIES (check_${TEST_SUFFIX} PROPERTIES DEPENDS run_gen_${TEST_SUFFIX})
+ # Test that the simulation runs with the resulting mesh
+ ADD_TEST(NAME run_full_${TEST_SUFFIX} WORKING_DIRECTORY ${TEST_DIR}
+ COMMAND ${MPIEXEC} ${MPIEXEC_NUMPROC_FLAG} ${NPROC} ${VQ_BINARY_DIR}/vq params_${RES}.d)
+ SET_TESTS_PROPERTIES (run_full_${TEST_SUFFIX} PROPERTIES DEPENDS run_gen_${TEST_SUFFIX})
+ # Check that the results are internally self consistent
+ ADD_TEST(NAME check_consistent_${TEST_SUFFIX} WORKING_DIRECTORY ${TEST_DIR}
+ COMMAND ${PYTHON_EXECUTABLE} ${CHECK_SCRIPT} --event_file ${EVENT_FILE} --sweep_file ${SWEEP_FILE} --check_consistent)
+ SET_TESTS_PROPERTIES (check_consistent_${TEST_SUFFIX} PROPERTIES
+ DEPENDS run_full_${TEST_SUFFIX}
+ ENVIRONMENT "PYTHONPATH=${QUAKELIB_BINARY_DIR}/python/")
+ # Check that the mean slip is near our expectations
+ # These two faults have same slip rate as single fault, so using
+ # same mean slip values
+ IF (NOT ${MEANSLIP} EQUAL 0)
+ ADD_TEST(NAME check_slip_${TEST_SUFFIX} WORKING_DIRECTORY ${TEST_DIR}
+ COMMAND ${PYTHON_EXECUTABLE} ${CHECK_SCRIPT} --event_file ${EVENT_FILE} --sweep_file ${SWEEP_FILE} --mean_slip ${MEANSLIP})
+ SET_TESTS_PROPERTIES (test_two_slip_${TAPER}_${RES} PROPERTIES
+ DEPENDS run_full_${TEST_SUFFIX}
+ ENVIRONMENT "PYTHONPATH=${QUAKELIB_BINARY_DIR}/python/")
+ ENDIF (NOT ${MEANSLIP} EQUAL 0)
+ ENDFOREACH(NPROC ${NUM_PROCS})
+ENDIF (HDF5_FOUND)
diff --git a/examples/example_params.d b/examples/greens_generate.d
similarity index 81%
copy from examples/example_params.d
copy to examples/greens_generate.d
index 72c222d..fcfbeab 100644
--- a/examples/example_params.d
+++ b/examples/greens_generate.d
@@ -1,7 +1,8 @@
sim.version = 2.0
-sim.time.end_year = 10000
+sim.time.end_year = 1
sim.greens.method = standard
sim.greens.use_normal = false
+sim.greens.output = greens_ELEM_SIZE.h5
sim.friction.dynamic = DYNAMIC
sim.file.input = INPUTFILE.txt
sim.file.input_type = text
diff --git a/examples/example_params.d b/examples/greens_input.d
similarity index 79%
copy from examples/example_params.d
copy to examples/greens_input.d
index 72c222d..9f7ccf5 100644
--- a/examples/example_params.d
+++ b/examples/greens_input.d
@@ -1,7 +1,7 @@
sim.version = 2.0
sim.time.end_year = 10000
-sim.greens.method = standard
-sim.greens.use_normal = false
+sim.greens.method = file
+sim.greens.input = greens_ELEM_SIZE.h5
sim.friction.dynamic = DYNAMIC
sim.file.input = INPUTFILE.txt
sim.file.input_type = text
diff --git a/examples/sum_greens.py b/examples/sum_greens.py
new file mode 100755
index 0000000..a268cba
--- /dev/null
+++ b/examples/sum_greens.py
@@ -0,0 +1,32 @@
+#!/usr/bin/env python
+
+import h5py
+import sys
+
+if len(sys.argv) != 4:
+ print(sys.argv[0]+" file_name expected_normal_value expected_shear_value")
+ exit(1)
+
+file_name = sys.argv[1]
+expected_normal = float(sys.argv[2])
+expected_shear = float(sys.argv[3])
+
+fp = h5py.File(file_name, "r")
+
+greens_normal = fp["greens_normal"]
+greens_shear = fp["greens_shear"]
+normal_sum = sum([sum(row) for row in greens_normal])
+shear_sum = sum([sum(row) for row in greens_shear])
+fp.close()
+
+normal_err = abs(expected_normal - normal_sum)/abs(max(expected_normal, normal_sum))
+shear_err = abs(expected_shear - shear_sum)/abs(max(expected_shear, shear_sum))
+print("Type", "Expected", "Actual", "Error")
+print("Normal", expected_normal, normal_sum, normal_err)
+print("Shear", expected_shear, shear_sum, shear_err)
+
+if normal_err > 1e-5 or shear_err > 1e-5:
+ exit(1)
+
+exit(0)
+
More information about the CIG-COMMITS
mailing list