diff --git a/.gitignore b/.gitignore index a27d7d9..b2a75a7 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,5 @@ petsc/ petsc4py/ openmpi-2.1.1/ openmpi-2.1.1.tar.bz2 +tests/integration/tmp_output/ +output/ \ No newline at end of file diff --git a/mpirunner.py b/mpirunner.py index 8111d05..a609343 100755 --- a/mpirunner.py +++ b/mpirunner.py @@ -6,6 +6,13 @@ import os import sys from tools.Prealization import realization +CONFIG_FILE_PATH = os.environ['CONFIG_FILE_PATH'] + +print(CONFIG_FILE_PATH) + +dir_path = os.path.dirname(os.path.realpath(__file__)) +print(dir_path) + def main(): comm = MPI.COMM_WORLD @@ -25,7 +32,7 @@ def main(): def sequential(): comm = MPI.COMM_WORLD - conffile = './config.ini' + conffile = CONFIG_FILE_PATH parser,iterables = get_config(conffile) njobs = DotheLoop(-1,parser,iterables) start_job=0 @@ -35,7 +42,7 @@ def sequential(): def manager(): comm = MPI.COMM_WORLD - conffile = './config.ini' + conffile = CONFIG_FILE_PATH parser,iterables = get_config(conffile) njobs = DotheLoop(-1,parser,iterables) start_job=0 diff --git a/script_install.sh b/script_install.sh index c5cbcc2..6e3e7c8 100755 --- a/script_install.sh +++ b/script_install.sh @@ -18,9 +18,9 @@ cd openmpi-2.1.1 make all make install -echo "export PATH=\$PATH:\$HOME/opt/openmpi/bin" >> $HOME/.bashrc +echo "export PATH=\$PATH:\$HOME/opt/openmpi/bin" >> $HOME/.$1rc -echo "export LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:\$HOME/opt/openmpi/lib" >> $HOME/.bashrc +echo "export LD_LIBRARY_PATH=\$LD_LIBRARY_PATH:\$HOME/opt/openmpi/lib" >> $HOME/.$1rc source ~/.$1rc @@ -52,7 +52,7 @@ conda activate py2_7 python --version -pip install --user numpy scipy matplotlib ipython jupyter pandas sympy nose +pip install --user numpy scipy matplotlib ipython jupyter pandas sympy nose mpi4py # setup petsc diff --git a/tests/integration/conf_test.ini b/tests/integration/conf_test.ini new file mode 100644 index 0000000..f34ffb4 --- /dev/null +++ b/tests/integration/conf_test.ini @@ -0,0 +1,44 @@ +[General] +simDir=tests/integration/tmp_output +startJob=0 +[Iterables] +p=[10,39,15] +seeds=[5462,2] +lc=[4] +connectivity=[1,2,3] +variances=[1] + +[Generation] +Nx = 16 +Ny = 16 +Nz = 16 +variogram_type=1 +binary = yes +kh = 100 +kl = 0.01 +compute_lc = yes +lcBin=yes +genera=yes + + +[Connectivity] +keep_aspect= yes +block_size = 4 +indicators_MinBlockSize =4 +Max_sample_size = 12 +compGconec= 1 +conec=yes + + +[Solver] +num_of_cores = 1 +ref = 2 +solve = yes +rtol = 1e-4 + +[K-Postprocess] +MinBlockSize =1 +Max_sample_size = 4 +kperm=yes +postprocess=yes +SaveVfield=yes \ No newline at end of file diff --git a/tests/integration/main.py b/tests/integration/main.py deleted file mode 100644 index e69de29..0000000 diff --git a/tests/integration/test.py b/tests/integration/test.py new file mode 100644 index 0000000..68c16fa --- /dev/null +++ b/tests/integration/test.py @@ -0,0 +1,78 @@ +import filecmp +import os.path +import numpy as np + +def are_dir_trees_equal(dir1, dir2): + """ + Compare two directories recursively. Files in each directory are + assumed to be equal if their names and contents are equal. + + @param dir1: First directory path + @param dir2: Second directory path + + @return: True if the directory trees are the same and + there were no errors while accessing the directories or files, + False otherwise. + """ + + dirs_cmp = filecmp.dircmp(dir1, dir2) + if len(dirs_cmp.left_only)>0 or len(dirs_cmp.right_only)>0 or \ + len(dirs_cmp.funny_files)>0: + print("error aca :(") + return False + (_, mismatch, errors) = filecmp.cmpfiles( + dir1, dir2, dirs_cmp.common_files, shallow=False) + if (len(mismatch)>0 or len(errors)>0) and dirs_cmp.common_files[0] != 'config.ini': + print(dir1) + print(dir2) + #print(dirs_cmp.common_files) + print(mismatch) + print(errors) + print("error aca 2 :(") + + return False + print(dirs_cmp.common_dirs) + for common_dir in dirs_cmp.common_dirs: + print(common_dir) + new_dir1 = os.path.join(dir1, common_dir) + new_dir2 = os.path.join(dir2, common_dir) + are_equal = are_dir_trees_equal(new_dir1, new_dir2) + if not are_equal: + print("error aca 3 :(") + return False + print("todo ok!") + print(dir1, dir2) + return True + +def equal_binaries(path_original, path): + binary_original = np.load(path_original) + + binary = np.load(path) + + diffs = binary_original - binary + + comparisons = np.array([abs(x) < 0.001 for x in diffs]) #NO ME DA TAMPOCO CON ESTE ERROR + + if comparisons.all(): + return True + return False + + +def test(): + os.chdir('../..') #LO COMENTE PARA EVITAR VOLVER A CORRERLO + #config_file = os.path.abspath("./tests/integration/conf_test.ini") + #os.system("CONFIG_FILE_PATH="+ config_file + " mpirun python mpirunner.py") + + #are_equal = are_dir_trees_equal("./tests/integration/tmp_output","./test_loop") + + for i in range(90): # HABRIA QUE HACER ESTO PERO PARA TODOS + path = './tests/integration/tmp_output/{}/D.npy'.format(i) + path_original = './test_loop/{}/D.npy'.format(i) + + if not equal_binaries(path_original, path): + print("Failure :( on {}".format(i)) + return + + print("Success!") + +test() \ No newline at end of file diff --git a/tools/Prealization.py b/tools/Prealization.py index 9abb286..d2860cd 100755 --- a/tools/Prealization.py +++ b/tools/Prealization.py @@ -9,13 +9,15 @@ from shutil import copyfile from solver.comp_Kperm_scale import comp_kperm_sub from solver.Ndar import PetscP +CONFIG_FILE_PATH = os.environ['CONFIG_FILE_PATH'] + def realization(job): if job==-1: return - conffile='./config.ini' + conffile=CONFIG_FILE_PATH parser, iterables = get_config(conffile) start_job=int(parser.get('General',"startJob")) @@ -27,11 +29,11 @@ def realization(job): datadir=rdir+str(job)+'/' create_dir(datadir,job) if job==0: - copyfile(conffile,rdir+conffile[2:]) + copyfile(conffile,rdir+"config.ini") genera=parser.get('Generation',"genera") if genera!='no': - os.system('python ./tools/generation/fftma_gen.py '+ datadir +' '+str(job)+' '+conffile) + os.system('CONFIG_FILE_PATH='+CONFIG_FILE_PATH+ ' python ./tools/generation/fftma_gen.py '+ datadir +' '+str(job)) nr= DotheLoop(job,parser, iterables)[3] -iterables['seeds'][0] diff --git a/tools/Prealization.pyc b/tools/Prealization.pyc index b8861cc..398c9c2 100644 Binary files a/tools/Prealization.pyc and b/tools/Prealization.pyc differ diff --git a/tools/generation/config.py b/tools/generation/config.py index 4938da2..a5168fe 100755 --- a/tools/generation/config.py +++ b/tools/generation/config.py @@ -2,12 +2,18 @@ import numpy as np import configparser import json +import os + +dir_path = os.path.dirname(os.path.realpath(__file__)) +print(dir_path) def get_config(conffile): parser = configparser.ConfigParser() - parser.read(conffile) + print(parser.read(conffile)) + + print(parser) cons=json.loads(parser.get('Iterables',"connectivity")) ps=json.loads(parser.get('Iterables',"p")) diff --git a/tools/generation/config.pyc b/tools/generation/config.pyc index 15f2ec0..7e3f310 100644 Binary files a/tools/generation/config.pyc and b/tools/generation/config.pyc differ diff --git a/tools/generation/fftma_gen.py b/tools/generation/fftma_gen.py index 5ad317d..8f2293e 100755 --- a/tools/generation/fftma_gen.py +++ b/tools/generation/fftma_gen.py @@ -8,6 +8,7 @@ from variograma import get_lc from scipy.interpolate import interp1d import sys import time +import os @@ -153,5 +154,6 @@ def binarize(kc,kh,kl,p): kc=np.where(kc