From de5f4c8fe6ed54b3007e53e312c03e701516b4f7 Mon Sep 17 00:00:00 2001 From: Oli Date: Tue, 30 Nov 2021 20:41:51 -0300 Subject: [PATCH] delete extra files --- Makefile | 2 +- config.ini | 24 +- fftma_module/gen/Interface/._.DS_Store | Bin 82 -> 0 bytes fftma_module/gen/Interface/condor.h | 442 ----------- fftma_module/gen/Interface/genlib.h | 163 ----- fftma_module/gen/Interface/geostat.h | 690 ------------------ fftma_module/gen/Interface/pressure.h | 21 - fftma_module/gen/Interface/simpio.h | 75 -- fftma_module/gen/Interface/toolsFFTMA.h | 80 -- fftma_module/gen/Interface/toolsIO.h | 91 --- fftma_module/gen/LIBCS106X/._.DS_Store | Bin 82 -> 0 bytes fftma_module/gen/LIBCS106X/Makefile.libCS106X | 13 - fftma_module/gen/LIBCS106X/Makefile_debug | 21 - fftma_module/gen/LIBCS106X/genlib.c | 63 -- fftma_module/gen/LIBCS106X/genlib.h | 163 ----- fftma_module/gen/LIBCS106X/random.c | 77 -- fftma_module/gen/LIBCS106X/random.h | 73 -- fftma_module/gen/LIBCS106X/scanadt.c | 162 ---- fftma_module/gen/LIBCS106X/scanadt.h | 159 ---- fftma_module/gen/LIBCS106X/simpio.c | 157 ---- fftma_module/gen/LIBCS106X/simpio.h | 75 -- fftma_module/gen/LIBCS106X/stack.c | 122 ---- fftma_module/gen/LIBCS106X/stack.h | 115 --- fftma_module/gen/LIBCS106X/strlib.c | 246 ------- fftma_module/gen/LIBCS106X/strlib.h | 243 ------ fftma_module/gen/LIBCS106X/symtab.c | 180 ----- fftma_module/gen/LIBCS106X/symtab.h | 85 --- fftma_module/gen/LIBFFTMA/._.DS_Store | Bin 82 -> 0 bytes fftma_module/gen/LIBFFTMA/Makefile.libFFTMA | 30 - fftma_module/gen/LIBFFTMA/addstat.c | 106 --- fftma_module/gen/LIBFFTMA/axes.c | 41 -- fftma_module/gen/LIBFFTMA/cardsin.c | 18 - fftma_module/gen/LIBFFTMA/cgrid.c | 43 -- fftma_module/gen/LIBFFTMA/cov_value.c | 55 -- fftma_module/gen/LIBFFTMA/covariance.c | 90 --- fftma_module/gen/LIBFFTMA/cubic.c | 17 - fftma_module/gen/LIBFFTMA/exponential.c | 9 - fftma_module/gen/LIBFFTMA/fftma.c | 185 ----- fftma_module/gen/LIBFFTMA/fourt.c | 591 --------------- fftma_module/gen/LIBFFTMA/gammf.c | 16 - fftma_module/gen/LIBFFTMA/gasdev.c | 31 - fftma_module/gen/LIBFFTMA/gaussian.c | 10 - fftma_module/gen/LIBFFTMA/generate.c | 43 -- fftma_module/gen/LIBFFTMA/geostat.h | 689 ----------------- fftma_module/gen/LIBFFTMA/length.c | 39 - .../gen/LIBFFTMA/makefileFFTMA_debug.lib | 36 - fftma_module/gen/LIBFFTMA/maxfactor.c | 35 - fftma_module/gen/LIBFFTMA/nor2log.c | 78 -- fftma_module/gen/LIBFFTMA/nugget.c | 14 - fftma_module/gen/LIBFFTMA/power.c | 10 - fftma_module/gen/LIBFFTMA/ran2.c | 50 -- fftma_module/gen/LIBFFTMA/spherical.c | 17 - fftma_module/gen/LIBFFTMA/stable.c | 10 - fftma_module/gen/LIBFFTMA/test_fact.c | 26 - fftma_module/gen/LIB_FFTMA2/._.DS_Store | Bin 82 -> 0 bytes fftma_module/gen/LIB_FFTMA2/FFTMAmemoire.c | 110 --- .../gen/LIB_FFTMA2/Makefile.libFFTMA2 | 30 - fftma_module/gen/LIB_FFTMA2/addstat2.c | 119 --- fftma_module/gen/LIB_FFTMA2/build_real.c | 45 -- fftma_module/gen/LIB_FFTMA2/clean_real.c | 43 -- fftma_module/gen/LIB_FFTMA2/fftma2.c | 105 --- fftma_module/gen/LIB_FFTMA2/kgeneration.c | 79 -- fftma_module/gen/LIB_FFTMA2/kgeneration2.c | 76 -- fftma_module/gen/LIB_FFTMA2/prebuild_gwn.c | 54 -- fftma_module/gen/LIB_FFTMA2/toolsFFTMA.h | 82 --- fftma_module/gen/LIB_FFTPSIM/._.DS_Store | Bin 82 -> 0 bytes fftma_module/gen/LIB_FFTPSIM/FFTPSim.c | 162 ---- fftma_module/gen/LIB_FFTPSIM/FFTPressure.c | 157 ---- fftma_module/gen/LIB_FFTPSIM/FFTtest.c | 68 -- .../gen/LIB_FFTPSIM/Makefile.libFFTPSim | 34 - fftma_module/gen/LIB_FFTPSIM/build_pressure.c | 66 -- fftma_module/gen/LIB_FFTPSIM/build_velocity.c | 117 --- fftma_module/gen/LIB_FFTPSIM/clean_real2.c | 50 -- fftma_module/gen/LIB_FFTPSIM/derivReal.c | 216 ------ fftma_module/gen/LIB_FFTPSIM/mat_vec.c | 33 - fftma_module/gen/LIB_FFTPSIM/pgeneration.c | 48 -- fftma_module/gen/LIB_FFTPSIM/pgeneration2.c | 99 --- fftma_module/gen/LIB_FFTPSIM/toolsFFTPSIM.h | 59 -- fftma_module/gen/LIB_FFTPSIM/total_pressure.c | 35 - fftma_module/gen/LIB_FFTPSIM/total_velocity.c | 50 -- .../gen/LIB_FFTPSIM/waveVectorCompute3D.c | 156 ---- fftma_module/gen/LIB_IO/._.DS_Store | Bin 82 -> 0 bytes fftma_module/gen/LIB_IO/Makefile.libIO | 31 - fftma_module/gen/LIB_IO/allouememoire.c | 16 - fftma_module/gen/LIB_IO/debuginput.c | 73 -- fftma_module/gen/LIB_IO/inputdata.c | 122 ---- fftma_module/gen/LIB_IO/inputfiledata.c | 71 -- fftma_module/gen/LIB_IO/pressure.h | 21 - fftma_module/gen/LIB_IO/readdata.c | 204 ------ fftma_module/gen/LIB_IO/readdata2.c | 205 ------ fftma_module/gen/LIB_IO/readdata3.c | 206 ------ fftma_module/gen/LIB_IO/readfile_bin.c | 35 - fftma_module/gen/LIB_IO/testmemory.c | 15 - fftma_module/gen/LIB_IO/testopenfile.c | 16 - fftma_module/gen/LIB_IO/toolsIO.h | 93 --- fftma_module/gen/LIB_IO/writefile.c | 32 - fftma_module/gen/LIB_IO/writefile_bin.c | 33 - fftma_module/gen/LIB_PY-API/Py_getvalues.c | 111 --- fftma_module/gen/LIB_PY-API/Py_kgeneration.c | 60 -- fftma_module/gen/LIB_PY-API/Py_py-api.h | 16 - .../FFTMA.cpython-36m-x86_64-linux-gnu.so | Bin 391248 -> 393456 bytes .../lib_src/FFTPressure.o | Bin 21928 -> 21928 bytes .../temp.linux-x86_64-3.6/lib_src/FFTtest.o | Bin 14368 -> 14376 bytes .../lib_src/Py_getvalues.o | Bin 40816 -> 40816 bytes .../lib_src/Py_kgeneration.o | Bin 36888 -> 37744 bytes .../temp.linux-x86_64-3.6/lib_src/addstat.o | Bin 11920 -> 11928 bytes .../temp.linux-x86_64-3.6/lib_src/addstat2.o | Bin 9544 -> 9544 bytes .../temp.linux-x86_64-3.6/lib_src/axes.o | Bin 7576 -> 7576 bytes .../lib_src/build_pressure.o | Bin 9144 -> 9144 bytes .../lib_src/build_real.o | Bin 9088 -> 9096 bytes .../lib_src/build_velocity.o | Bin 13400 -> 13408 bytes .../temp.linux-x86_64-3.6/lib_src/cardsin.o | Bin 7016 -> 7016 bytes .../temp.linux-x86_64-3.6/lib_src/cgrid.o | Bin 9136 -> 9144 bytes .../lib_src/clean_real.o | Bin 9536 -> 9544 bytes .../lib_src/clean_real2.o | Bin 10408 -> 10408 bytes .../temp.linux-x86_64-3.6/lib_src/cov_value.o | Bin 11712 -> 11712 bytes .../lib_src/covariance.o | Bin 11472 -> 11480 bytes .../temp.linux-x86_64-3.6/lib_src/cubic.o | Bin 6848 -> 6848 bytes .../lib_src/debuginput.o | Bin 20824 -> 20832 bytes .../temp.linux-x86_64-3.6/lib_src/derivReal.o | Bin 32104 -> 32104 bytes .../lib_src/exponential.o | Bin 6616 -> 6616 bytes .../temp.linux-x86_64-3.6/lib_src/fftma.o | Bin 19368 -> 19368 bytes .../temp.linux-x86_64-3.6/lib_src/fftma2.o | Bin 13480 -> 14568 bytes .../temp.linux-x86_64-3.6/lib_src/fourt.o | Bin 33000 -> 33008 bytes .../temp.linux-x86_64-3.6/lib_src/gammf.o | Bin 7376 -> 7376 bytes .../temp.linux-x86_64-3.6/lib_src/gasdev.o | Bin 9040 -> 9040 bytes .../temp.linux-x86_64-3.6/lib_src/gaussian.o | Bin 6608 -> 6616 bytes .../temp.linux-x86_64-3.6/lib_src/generate.o | Bin 9256 -> 10096 bytes .../temp.linux-x86_64-3.6/lib_src/genlib.o | Bin 10968 -> 10976 bytes .../temp.linux-x86_64-3.6/lib_src/inputdata.o | Bin 25592 -> 25600 bytes .../lib_src/inputfiledata.o | Bin 19472 -> 19472 bytes .../lib_src/kgeneration.o | Bin 12808 -> 12816 bytes .../lib_src/kgeneration2.o | Bin 12984 -> 12992 bytes .../temp.linux-x86_64-3.6/lib_src/length.o | Bin 6288 -> 6296 bytes .../temp.linux-x86_64-3.6/lib_src/mat_vec.o | Bin 3680 -> 3680 bytes .../temp.linux-x86_64-3.6/lib_src/maxfactor.o | Bin 7480 -> 7488 bytes .../temp.linux-x86_64-3.6/lib_src/nor2log.o | Bin 9624 -> 9624 bytes .../temp.linux-x86_64-3.6/lib_src/nugget.o | Bin 6376 -> 6376 bytes .../lib_src/pgeneration.o | Bin 12184 -> 12192 bytes .../lib_src/pgeneration2.o | Bin 14992 -> 15000 bytes .../temp.linux-x86_64-3.6/lib_src/power.o | Bin 6560 -> 6560 bytes .../lib_src/prebuild_gwn.o | Bin 9400 -> 12544 bytes .../temp.linux-x86_64-3.6/lib_src/ran2.o | Bin 7688 -> 7688 bytes .../temp.linux-x86_64-3.6/lib_src/random.o | Bin 9040 -> 9040 bytes .../temp.linux-x86_64-3.6/lib_src/readdata.o | Bin 28112 -> 28112 bytes .../temp.linux-x86_64-3.6/lib_src/readdata3.o | Bin 29032 -> 29040 bytes .../lib_src/readfile_bin.o | Bin 9864 -> 9872 bytes .../temp.linux-x86_64-3.6/lib_src/scanadt.o | Bin 14816 -> 14816 bytes .../temp.linux-x86_64-3.6/lib_src/simpio.o | Bin 17280 -> 17288 bytes .../temp.linux-x86_64-3.6/lib_src/spherical.o | Bin 6696 -> 6704 bytes .../temp.linux-x86_64-3.6/lib_src/stable.o | Bin 6864 -> 6864 bytes .../temp.linux-x86_64-3.6/lib_src/stack.o | Bin 11264 -> 11264 bytes .../temp.linux-x86_64-3.6/lib_src/strlib.o | Bin 28800 -> 28800 bytes .../temp.linux-x86_64-3.6/lib_src/symtab.o | Bin 14024 -> 14024 bytes .../temp.linux-x86_64-3.6/lib_src/test_fact.o | Bin 6584 -> 6584 bytes .../lib_src/testmemory.o | Bin 7048 -> 7056 bytes .../lib_src/testopenfile.o | Bin 7616 -> 7624 bytes .../lib_src/total_pressure.o | Bin 8608 -> 8616 bytes .../lib_src/total_velocity.o | Bin 9544 -> 9552 bytes .../lib_src/waveVectorCompute3D.o | Bin 15256 -> 15264 bytes .../temp.linux-x86_64-3.6/lib_src/writefile.o | Bin 8776 -> 8784 bytes .../lib_src/writefile_bin.o | Bin 8072 -> 8072 bytes .../build/temp.linux-x86_64-3.6/moduleFFTMA.o | Bin 51440 -> 52248 bytes fftma_module/gen/lib_src/Py_kgeneration.c | 2 + fftma_module/gen/lib_src/fftma2.c | 2 + fftma_module/gen/lib_src/generate.c | 2 + fftma_module/gen/lib_src/prebuild_gwn.c | 6 + fftma_module/gen/moduleFFTMA.c | 2 + fftma_module/gen/sources/._.DS_Store | Bin 82 -> 0 bytes fftma_module/gen/sources/FFTMAmemoire.c | 110 --- fftma_module/gen/sources/FFTPSim.c | 162 ---- fftma_module/gen/sources/FFTPressure.c | 157 ---- fftma_module/gen/sources/FFTtest.c | 68 -- fftma_module/gen/sources/addstat.c | 106 --- fftma_module/gen/sources/addstat2.c | 119 --- fftma_module/gen/sources/allouememoire.c | 16 - fftma_module/gen/sources/autoscan.log | 140 ---- fftma_module/gen/sources/axes.c | 41 -- fftma_module/gen/sources/build_pressure.c | 66 -- fftma_module/gen/sources/build_real.c | 45 -- fftma_module/gen/sources/build_velocity.c | 117 --- fftma_module/gen/sources/cardsin.c | 18 - fftma_module/gen/sources/cgrid.c | 43 -- fftma_module/gen/sources/clean_real.c | 43 -- fftma_module/gen/sources/clean_real2.c | 50 -- fftma_module/gen/sources/cov_value.c | 55 -- fftma_module/gen/sources/covariance.c | 90 --- fftma_module/gen/sources/cubic.c | 17 - fftma_module/gen/sources/debuginput.c | 73 -- fftma_module/gen/sources/derivReal.c | 216 ------ fftma_module/gen/sources/exponential.c | 9 - fftma_module/gen/sources/fftma.c | 185 ----- fftma_module/gen/sources/fftma2.c | 105 --- fftma_module/gen/sources/fourt.c | 591 --------------- fftma_module/gen/sources/gammf.c | 16 - fftma_module/gen/sources/gasdev.c | 31 - fftma_module/gen/sources/gaussian.c | 10 - fftma_module/gen/sources/generate.c | 43 -- fftma_module/gen/sources/genlib.c | 63 -- fftma_module/gen/sources/inputdata.c | 122 ---- fftma_module/gen/sources/inputfiledata.c | 71 -- fftma_module/gen/sources/kgeneration.c | 79 -- fftma_module/gen/sources/kgeneration2.c | 76 -- fftma_module/gen/sources/length.c | 39 - fftma_module/gen/sources/mat_vec.c | 33 - fftma_module/gen/sources/maxfactor.c | 35 - fftma_module/gen/sources/nor2log.c | 78 -- fftma_module/gen/sources/nugget.c | 14 - fftma_module/gen/sources/pgeneration.c | 48 -- fftma_module/gen/sources/pgeneration2.c | 101 --- fftma_module/gen/sources/power.c | 10 - fftma_module/gen/sources/prebuild_gwn.c | 54 -- fftma_module/gen/sources/ran2.c | 50 -- fftma_module/gen/sources/random.c | 77 -- fftma_module/gen/sources/readdata.c | 204 ------ fftma_module/gen/sources/readdata2.c | 205 ------ fftma_module/gen/sources/readdata3.c | 206 ------ fftma_module/gen/sources/readfile_bin.c | 35 - fftma_module/gen/sources/scanadt.c | 162 ---- fftma_module/gen/sources/simpio.c | 157 ---- fftma_module/gen/sources/spherical.c | 17 - fftma_module/gen/sources/stable.c | 10 - fftma_module/gen/sources/stack.c | 122 ---- fftma_module/gen/sources/strlib.c | 246 ------- fftma_module/gen/sources/symtab.c | 180 ----- fftma_module/gen/sources/test_fact.c | 26 - fftma_module/gen/sources/testmemory.c | 15 - fftma_module/gen/sources/testopenfile.c | 16 - fftma_module/gen/sources/total_pressure.c | 35 - fftma_module/gen/sources/total_velocity.c | 50 -- .../gen/sources/waveVectorCompute3D.c | 156 ---- fftma_module/gen/sources/writefile.c | 32 - fftma_module/gen/sources/writefile_bin.c | 33 - 233 files changed, 27 insertions(+), 14870 deletions(-) delete mode 100755 fftma_module/gen/Interface/._.DS_Store delete mode 100755 fftma_module/gen/Interface/condor.h delete mode 100755 fftma_module/gen/Interface/genlib.h delete mode 100755 fftma_module/gen/Interface/geostat.h delete mode 100755 fftma_module/gen/Interface/pressure.h delete mode 100755 fftma_module/gen/Interface/simpio.h delete mode 100755 fftma_module/gen/Interface/toolsFFTMA.h delete mode 100755 fftma_module/gen/Interface/toolsIO.h delete mode 100755 fftma_module/gen/LIBCS106X/._.DS_Store delete mode 100755 fftma_module/gen/LIBCS106X/Makefile.libCS106X delete mode 100755 fftma_module/gen/LIBCS106X/Makefile_debug delete mode 100755 fftma_module/gen/LIBCS106X/genlib.c delete mode 100755 fftma_module/gen/LIBCS106X/genlib.h delete mode 100755 fftma_module/gen/LIBCS106X/random.c delete mode 100755 fftma_module/gen/LIBCS106X/random.h delete mode 100755 fftma_module/gen/LIBCS106X/scanadt.c delete mode 100755 fftma_module/gen/LIBCS106X/scanadt.h delete mode 100755 fftma_module/gen/LIBCS106X/simpio.c delete mode 100755 fftma_module/gen/LIBCS106X/simpio.h delete mode 100755 fftma_module/gen/LIBCS106X/stack.c delete mode 100755 fftma_module/gen/LIBCS106X/stack.h delete mode 100755 fftma_module/gen/LIBCS106X/strlib.c delete mode 100755 fftma_module/gen/LIBCS106X/strlib.h delete mode 100755 fftma_module/gen/LIBCS106X/symtab.c delete mode 100755 fftma_module/gen/LIBCS106X/symtab.h delete mode 100755 fftma_module/gen/LIBFFTMA/._.DS_Store delete mode 100755 fftma_module/gen/LIBFFTMA/Makefile.libFFTMA delete mode 100755 fftma_module/gen/LIBFFTMA/addstat.c delete mode 100755 fftma_module/gen/LIBFFTMA/axes.c delete mode 100755 fftma_module/gen/LIBFFTMA/cardsin.c delete mode 100755 fftma_module/gen/LIBFFTMA/cgrid.c delete mode 100755 fftma_module/gen/LIBFFTMA/cov_value.c delete mode 100755 fftma_module/gen/LIBFFTMA/covariance.c delete mode 100755 fftma_module/gen/LIBFFTMA/cubic.c delete mode 100755 fftma_module/gen/LIBFFTMA/exponential.c delete mode 100755 fftma_module/gen/LIBFFTMA/fftma.c delete mode 100755 fftma_module/gen/LIBFFTMA/fourt.c delete mode 100755 fftma_module/gen/LIBFFTMA/gammf.c delete mode 100755 fftma_module/gen/LIBFFTMA/gasdev.c delete mode 100755 fftma_module/gen/LIBFFTMA/gaussian.c delete mode 100755 fftma_module/gen/LIBFFTMA/generate.c delete mode 100755 fftma_module/gen/LIBFFTMA/geostat.h delete mode 100755 fftma_module/gen/LIBFFTMA/length.c delete mode 100755 fftma_module/gen/LIBFFTMA/makefileFFTMA_debug.lib delete mode 100755 fftma_module/gen/LIBFFTMA/maxfactor.c delete mode 100755 fftma_module/gen/LIBFFTMA/nor2log.c delete mode 100755 fftma_module/gen/LIBFFTMA/nugget.c delete mode 100755 fftma_module/gen/LIBFFTMA/power.c delete mode 100755 fftma_module/gen/LIBFFTMA/ran2.c delete mode 100755 fftma_module/gen/LIBFFTMA/spherical.c delete mode 100755 fftma_module/gen/LIBFFTMA/stable.c delete mode 100755 fftma_module/gen/LIBFFTMA/test_fact.c delete mode 100755 fftma_module/gen/LIB_FFTMA2/._.DS_Store delete mode 100755 fftma_module/gen/LIB_FFTMA2/FFTMAmemoire.c delete mode 100755 fftma_module/gen/LIB_FFTMA2/Makefile.libFFTMA2 delete mode 100755 fftma_module/gen/LIB_FFTMA2/addstat2.c delete mode 100755 fftma_module/gen/LIB_FFTMA2/build_real.c delete mode 100755 fftma_module/gen/LIB_FFTMA2/clean_real.c delete mode 100755 fftma_module/gen/LIB_FFTMA2/fftma2.c delete mode 100755 fftma_module/gen/LIB_FFTMA2/kgeneration.c delete mode 100755 fftma_module/gen/LIB_FFTMA2/kgeneration2.c delete mode 100755 fftma_module/gen/LIB_FFTMA2/prebuild_gwn.c delete mode 100755 fftma_module/gen/LIB_FFTMA2/toolsFFTMA.h delete mode 100755 fftma_module/gen/LIB_FFTPSIM/._.DS_Store delete mode 100755 fftma_module/gen/LIB_FFTPSIM/FFTPSim.c delete mode 100755 fftma_module/gen/LIB_FFTPSIM/FFTPressure.c delete mode 100755 fftma_module/gen/LIB_FFTPSIM/FFTtest.c delete mode 100755 fftma_module/gen/LIB_FFTPSIM/Makefile.libFFTPSim delete mode 100755 fftma_module/gen/LIB_FFTPSIM/build_pressure.c delete mode 100755 fftma_module/gen/LIB_FFTPSIM/build_velocity.c delete mode 100755 fftma_module/gen/LIB_FFTPSIM/clean_real2.c delete mode 100755 fftma_module/gen/LIB_FFTPSIM/derivReal.c delete mode 100755 fftma_module/gen/LIB_FFTPSIM/mat_vec.c delete mode 100755 fftma_module/gen/LIB_FFTPSIM/pgeneration.c delete mode 100755 fftma_module/gen/LIB_FFTPSIM/pgeneration2.c delete mode 100755 fftma_module/gen/LIB_FFTPSIM/toolsFFTPSIM.h delete mode 100755 fftma_module/gen/LIB_FFTPSIM/total_pressure.c delete mode 100755 fftma_module/gen/LIB_FFTPSIM/total_velocity.c delete mode 100755 fftma_module/gen/LIB_FFTPSIM/waveVectorCompute3D.c delete mode 100755 fftma_module/gen/LIB_IO/._.DS_Store delete mode 100755 fftma_module/gen/LIB_IO/Makefile.libIO delete mode 100755 fftma_module/gen/LIB_IO/allouememoire.c delete mode 100755 fftma_module/gen/LIB_IO/debuginput.c delete mode 100755 fftma_module/gen/LIB_IO/inputdata.c delete mode 100755 fftma_module/gen/LIB_IO/inputfiledata.c delete mode 100755 fftma_module/gen/LIB_IO/pressure.h delete mode 100755 fftma_module/gen/LIB_IO/readdata.c delete mode 100755 fftma_module/gen/LIB_IO/readdata2.c delete mode 100755 fftma_module/gen/LIB_IO/readdata3.c delete mode 100755 fftma_module/gen/LIB_IO/readfile_bin.c delete mode 100755 fftma_module/gen/LIB_IO/testmemory.c delete mode 100755 fftma_module/gen/LIB_IO/testopenfile.c delete mode 100755 fftma_module/gen/LIB_IO/toolsIO.h delete mode 100755 fftma_module/gen/LIB_IO/writefile.c delete mode 100755 fftma_module/gen/LIB_IO/writefile_bin.c delete mode 100755 fftma_module/gen/LIB_PY-API/Py_getvalues.c delete mode 100755 fftma_module/gen/LIB_PY-API/Py_kgeneration.c delete mode 100644 fftma_module/gen/LIB_PY-API/Py_py-api.h delete mode 100755 fftma_module/gen/sources/._.DS_Store delete mode 100755 fftma_module/gen/sources/FFTMAmemoire.c delete mode 100755 fftma_module/gen/sources/FFTPSim.c delete mode 100755 fftma_module/gen/sources/FFTPressure.c delete mode 100755 fftma_module/gen/sources/FFTtest.c delete mode 100755 fftma_module/gen/sources/addstat.c delete mode 100755 fftma_module/gen/sources/addstat2.c delete mode 100755 fftma_module/gen/sources/allouememoire.c delete mode 100755 fftma_module/gen/sources/autoscan.log delete mode 100755 fftma_module/gen/sources/axes.c delete mode 100755 fftma_module/gen/sources/build_pressure.c delete mode 100755 fftma_module/gen/sources/build_real.c delete mode 100755 fftma_module/gen/sources/build_velocity.c delete mode 100755 fftma_module/gen/sources/cardsin.c delete mode 100755 fftma_module/gen/sources/cgrid.c delete mode 100755 fftma_module/gen/sources/clean_real.c delete mode 100755 fftma_module/gen/sources/clean_real2.c delete mode 100755 fftma_module/gen/sources/cov_value.c delete mode 100755 fftma_module/gen/sources/covariance.c delete mode 100755 fftma_module/gen/sources/cubic.c delete mode 100755 fftma_module/gen/sources/debuginput.c delete mode 100755 fftma_module/gen/sources/derivReal.c delete mode 100755 fftma_module/gen/sources/exponential.c delete mode 100755 fftma_module/gen/sources/fftma.c delete mode 100755 fftma_module/gen/sources/fftma2.c delete mode 100755 fftma_module/gen/sources/fourt.c delete mode 100755 fftma_module/gen/sources/gammf.c delete mode 100755 fftma_module/gen/sources/gasdev.c delete mode 100755 fftma_module/gen/sources/gaussian.c delete mode 100755 fftma_module/gen/sources/generate.c delete mode 100755 fftma_module/gen/sources/genlib.c delete mode 100755 fftma_module/gen/sources/inputdata.c delete mode 100755 fftma_module/gen/sources/inputfiledata.c delete mode 100755 fftma_module/gen/sources/kgeneration.c delete mode 100755 fftma_module/gen/sources/kgeneration2.c delete mode 100755 fftma_module/gen/sources/length.c delete mode 100755 fftma_module/gen/sources/mat_vec.c delete mode 100755 fftma_module/gen/sources/maxfactor.c delete mode 100755 fftma_module/gen/sources/nor2log.c delete mode 100755 fftma_module/gen/sources/nugget.c delete mode 100755 fftma_module/gen/sources/pgeneration.c delete mode 100755 fftma_module/gen/sources/pgeneration2.c delete mode 100755 fftma_module/gen/sources/power.c delete mode 100755 fftma_module/gen/sources/prebuild_gwn.c delete mode 100755 fftma_module/gen/sources/ran2.c delete mode 100755 fftma_module/gen/sources/random.c delete mode 100755 fftma_module/gen/sources/readdata.c delete mode 100755 fftma_module/gen/sources/readdata2.c delete mode 100755 fftma_module/gen/sources/readdata3.c delete mode 100755 fftma_module/gen/sources/readfile_bin.c delete mode 100755 fftma_module/gen/sources/scanadt.c delete mode 100755 fftma_module/gen/sources/simpio.c delete mode 100755 fftma_module/gen/sources/spherical.c delete mode 100755 fftma_module/gen/sources/stable.c delete mode 100755 fftma_module/gen/sources/stack.c delete mode 100755 fftma_module/gen/sources/strlib.c delete mode 100755 fftma_module/gen/sources/symtab.c delete mode 100755 fftma_module/gen/sources/test_fact.c delete mode 100755 fftma_module/gen/sources/testmemory.c delete mode 100755 fftma_module/gen/sources/testopenfile.c delete mode 100755 fftma_module/gen/sources/total_pressure.c delete mode 100755 fftma_module/gen/sources/total_velocity.c delete mode 100755 fftma_module/gen/sources/waveVectorCompute3D.c delete mode 100755 fftma_module/gen/sources/writefile.c delete mode 100755 fftma_module/gen/sources/writefile_bin.c diff --git a/Makefile b/Makefile index bf17567..805297b 100644 --- a/Makefile +++ b/Makefile @@ -2,7 +2,7 @@ install: source ./script_install.sh -run: +run: binaries ./run_simulation.sh fftma: diff --git a/config.ini b/config.ini index acb1f7c..e83967b 100644 --- a/config.ini +++ b/config.ini @@ -2,16 +2,16 @@ simDir=output startJob=0 [Iterables] -p=[10,39,15] -seeds=[5462,2] +p=[10,39,1] +seeds=[5462,1] lc=[4] -connectivity=[1,2,3] +connectivity=[1] variances=[1] [Generation] -Nx = 16 -Ny = 16 -Nz = 16 +Nx = 8 +Ny = 8 +Nz = 8 variogram_type=1 binary = yes kh = 100 @@ -22,23 +22,23 @@ genera=yes [Connectivity] -keep_aspect= yes +keep_aspect= no block_size = 4 indicators_MinBlockSize =4 Max_sample_size = 12 compGconec= 1 -conec=yes +conec=no [Solver] num_of_cores = 1 ref = 2 -solve = yes +solve = no rtol = 1e-4 [K-Postprocess] MinBlockSize =1 Max_sample_size = 4 -kperm=yes -postprocess=yes -SaveVfield=yes +kperm=no +postprocess=no +SaveVfield=no diff --git a/fftma_module/gen/Interface/._.DS_Store b/fftma_module/gen/Interface/._.DS_Store deleted file mode 100755 index c9474ea62235481b7d27ae5a878d2b4070bc6e05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 82 jcmZQz6=P>$V!#9-F-{;h0%8Rq2JwS{7!DlZEK~*nFE;@e diff --git a/fftma_module/gen/Interface/condor.h b/fftma_module/gen/Interface/condor.h deleted file mode 100755 index 22c6696..0000000 --- a/fftma_module/gen/Interface/condor.h +++ /dev/null @@ -1,442 +0,0 @@ -#include "geostat.h" - -#ifndef _CONDOR_H_ -#define _CONDOR_H_ - - - -/*=======================================================*/ -/*FUNCTIONS*/ -/*---------*/ - - -/*addstat */ -/*adds mean and variance effects to the N(0,1) realization*/ -/*input: */ -/*realin: structure defining a realization - */ -/* must have zero mean and unit variance */ -/*stat: structure defining the mean and variance */ -/*output: */ -/*realout: structure defining a realization - */ -void addstat(struct realization_mod *realin,struct statistic_mod stat ,struct realization_mod *realout); - - -/*condit */ -/*conditioning of a Gaussian realization using */ -/*the primal kriging approach */ -/*inversion method = CONJUGATE GRADIENTS */ -/*NB: The realization and the well data are */ -/*reduced to the standard Gaussian N(0,1) */ -/*INPUT */ -/*k: measurement type */ -/*well: structure with the well data */ -/*variogram: structure describing the variogram model*/ -/*realin: structure defining the input realization */ -/*grid: structure defining the grid */ -/*OUTPUT */ -/*realout: structure defining the output realization */ -void condit(int k,struct welldata_mod well,struct vario_mod variogram,struct grid_mod grid,struct realization_mod *realin,struct realization_mod *realout); - - -/*d_kriging */ -/*interpolation from ponctual data with simple dual */ -/*kriging. d_kriging is used to interpolate standard */ -/*Gaussian data only */ -/*inversion method = CONJUGATE GRADIENTS */ -/*INPUT */ -/*k: measurement type */ -/*well: structure with the well data */ -/*variogram: structure describing the variogram model*/ -/*grid: structure defining the grid */ -/*OUTPUT */ -/*realout: structure defining the output realization */ -void d_kriging(int k,struct welldata_mod well,struct vario_mod variogram,struct grid_mod grid,struct realization_mod *realout); - - -/*dual_condit */ -/*conditioning of a Gaussian realization using */ -/*the dual kriging approach */ -/*inversion method = CONJUGATE GRADIENTS */ -/*NB: The realization and the well data are */ -/*reduced to the standard Gaussian N(0,1) */ -/*INPUT */ -/*k: measurement type */ -/*well: structure with the well data */ -/*variogram: structure describing the variogram model*/ -/*realin: structure defining the input realization */ -/*OUTPUT */ -/*realout: structure defining the output realization */ -void dual_condit(int k,struct welldata_mod well,struct vario_mod variogram,struct grid_mod grid,struct realization_mod *realin,struct realization_mod *realout); - - -/*dual_condit_gen */ -/*conditioning of a Gaussian realization using */ -/*the dual kriging approach */ -/*considered cases : Gaussian data */ -/* Uniform data */ -/* Log */ -/*inversion method = CONJUGATE GRADIENTS */ -/*INPUT */ -/*k: measurement type */ -/*wellin: structure with the well data */ -/*variogram: structure describing the variogram model*/ -/*realin: structure defining the input realization */ -/*stat : structure defining the statistical data */ -/*OUTPUT */ -/*realout: structure defining the output realization */ - -void dual_condit_gen(int k,struct welldata_mod wellin,struct vario_mod variogram,struct grid_mod grid,struct realization_mod *realin,struct statistic_mod stat, struct realization_mod *realout); - - - -/*FAST FOURIER TRANSFORM MOVING AVERAGE METHOD */ -/*Turns a Gaussian white noise vector into a */ -/*spatially correlated vector */ -/*input: */ -/*variogram: structure defining the variogram */ -/* model */ -/*grid: structure defining the grid */ -/*n: vector with the number of cells along the */ -/* X, Y and Z axes for the underlying grid */ -/* i = [0 1 2] */ -/* --> 0 0 0 : n will be computed and */ -/* updated as output */ -/* --> nx ny nz: these dimensions are used */ -/*realin: structure defining a realization - */ -/* must be a Gaussian white noise */ -/*output: */ -/*realout: structure defining a realization - */ -void FFTMA(struct vario_mod variogram,struct grid_mod grid,int n[3],struct realization_mod *realin,struct realization_mod *realout); - - -/*FAST FOURIER TRANSFORM MOVING AVERAGE METHOD */ -/*PLUS GRADIENT CALCULATIONS - GRADIENTS ARE */ -/*CALCULATED FOR THE GRADUAL DEFORMATION PARAMETERS */ -/* */ -/*INPUT: */ -/*------- */ -/*variogram: structure defining the variogram */ -/* model */ -/*grid: structure defining the grid */ -/*n: vector with the number of cells along the */ -/* X, Y and Z axes for the underlying grid */ -/* i = [0 1 2] */ -/* --> 0 0 0 : n will be computed and */ -/* updated as output */ -/* --> nx ny nz: these dimensions are used */ -/*realin: structure defining a realization - */ -/* must be a Gaussian white noise */ -/*DZoverDRHO: gradients calculated durin the gradual */ -/* deformation process */ -/* */ -/*OUTPUT: */ -/*------- */ -/*realout: structure defining a realization - */ -/*DYoverDRHO : structure with the output gradients */ -void FFTMA_gradient(struct vario_mod variogram,struct grid_mod grid,int n[3],struct realization_mod *realin,struct gradients_mod *DZoverDRHO,struct realization_mod *realout,struct gradients_mod *DYoverDRHO); - - -/* GENERATION OF A GAUSSIAN WHITE NOISE VECTOR */ -/*input: */ -/* seed: seed */ -/* n: number of components in the vector */ -/*output: */ -/* realization: structure defining the realization*/ -void generate(long *seed, int n, struct realization_mod *realization); - -void ikrig(int option, struct statfacies_mod facies, int kk,struct welldata_mod data, struct variotable_mod variogram,struct grid_mod grid,float *krigout); - - -/*kriging */ -/*interpolation from ponctual data with simple */ -/*kriging. kriging is used to interpolate standard */ -/*Gaussian data only */ -/*inversion method = CONJUGATE GRADIENTS */ -/*INPUT */ -/*k: measurement type */ -/*well: structure with the well data */ -/*variogram: structure describing the variogram model*/ -/*grid: structure defining the grid */ -/*OUTPUT */ -/*realout: structure defining the output realization */ -void kriging(int k,struct welldata_mod data,struct vario_mod variogram,struct grid_mod grid,struct realization_mod *realout); - - -/*CHOLESKY SIMULATION TECHNIQUE - LUSIM */ -/*appropriate for regular grids and small number */ -/*of points */ -/*input: */ -/*variogram: structure defining the variogram model */ -/*realin: structure defining a realization - */ -/* must be a Gaussian white noise */ -/*output: */ -/*realout: structure defining a realization - */ -void LUSIM(struct vario_mod variogram,struct grid_mod grid,struct realization_mod *realin,struct realization_mod *realout); - - -void nor2any(struct cdf_mod *pcumulf,struct realization_mod *realin,struct realization_mod *realout); - -/*TURNS NORMAL NUMBERS INTO LOGNORMAL NUMBERS */ -/*input: */ -/*realin: structure defining a realization - */ -/* normal numbers */ -/*typelog: --> 3: lognormal (natural) */ -/* --> 4: lognormal (log10) */ -/*output: */ -/*realout: structure defining a realization - */ -/* lognormal numbers */ -void nor2log(struct realization_mod *realin, int typelog, struct realization_mod *realout); - - -/*TURNS NORMAL NUMBERS INTO UNIFORM NUMBERS */ -/*input: */ -/*realin: structure defining a realization - */ -/* must have zero mean and unit variance */ -/*output: */ -/*realout: structure defining a realization - */ -/* uniform numbers */ -void nor2unif(struct realization_mod *realin,struct realization_mod *realout); - - -/*o_kriging */ -/*interpolation from ponctual data with ordinary kriging */ -/*o_kriging is used to interpolate standard Gaussian data*/ -/*only */ -/*INPUT */ -/*k: measurement type or rank */ -/*variogram: structure describing the variogram model */ -/*data: structure with the well data */ -/*grid: structure defining the grid */ -/*OUTPUT */ -/*realout: structure defining the kriged realization */ -void o_kriging(int k,struct vario_mod variogram,struct welldata_mod data,struct grid_mod grid,struct realization_mod *realout); - - -/*od_kriging */ -/*interpolation from ponctual data with ordinary dual*/ -/*kriging. od_kriging is used to interpolate */ -/*Gaussian data only */ -/*inversion method = CONJUGATE GRADIENTS */ -/*INPUT */ -/*k: measurement type */ -/*well: structure with the well data */ -/*variogram: structure describing the variogram model*/ -/*grid: structure defining the grid */ -/*OUTPUT */ -/*realout: structure defining the output realization */ -void od_kriging(int k,struct welldata_mod well,struct vario_mod variogram,struct grid_mod grid,struct realization_mod *realout); - - -/*PLURIGAUSSIAN METHOD */ -/*Starting from two independent Gaussian realizations Y1*/ -/*and Y2 with zero mean and unit variance, but possibly */ -/*different variogram models, a categorial realization is */ -/*built. */ -/*Truncation is performed on the basis of a mask with the */ -/*x-axis associated to Y1 and the y-axis associated to Y2 */ -/*This truncation may be stationary or non stationary */ -/*The mask consists of lines perpendicular to the Y1 and */ -/*Y2 axes. They define rectangular subregions attributed */ -/*to categories i = [1...ncat] */ -/*INPUT: */ -/*facies: structure defining the facies proportions in the*/ -/* whole reservoir model */ -/*ineq: structure defining the mask for truncation */ -/*Y1: first starting Gaussian realization */ -/*Y2: second starting realization - same length as Y1 */ -/*OUTPUT: */ -/*Y: output realization */ -void plurigau(struct statfacies_mod facies,struct inequalities_mod ineq,struct realization_mod *Y1, struct realization_mod *Y2, struct realization_mod *Y); - - -/*tr_kriging */ -/*kriging with an external drift */ -/*The trend is limited to a 2-term function */ -/*m(u) = a0+a1y(u) where y(u) is a secondary */ -/*external variable (e.g., seismic) */ -/*INPUT: */ -/*k: measurement type or rank */ -/*variogram: structure describing the variogram */ -/* model */ -/*data: structure with the well data */ -/*grid: structure defining the grid */ -/*y: secondary external variable */ -/*OUTPUT: */ -/*realout: kriged realization */ -void tr_kriging(int k, struct vario_mod variogram,struct welldata_mod data,struct grid_mod grid,struct realization_mod *Y,struct realization_mod *realout); - - -/*truncat */ -/*TRUNCATES A STANDARD GAUSSIAN REALIZATION */ -/*WITH THE TRUNCATED GAUSSIAN METHOD */ -/*truncation may be stationary or nonstationary*/ -/*INPUT: */ -/*facies: description of the facies proportions*/ -/*thresholds: may be an input if they have been*/ -/* previously computed */ -/*realin: structure defining a realization - */ -/* must be a standard normal */ -/*OUTPUT: */ -/*realout: structure defining a realization - */ -/*thresholds: Gaussian thresholds corresponding*/ -/* to the facies volume fractions if*/ -void truncat(struct statfacies_mod facies,struct realization_mod *realin,struct realization_mod *realout, struct statfacies_mod *thresholds); - - -/*TURNS UNIFORM NUMBERS INTO NORMAL NUMBERS*/ -/*INPUT: */ -/*realin: structure defining a realization - */ -/* uniform numbers */ -/*OUTPUT: */ -/*realout: structure defining a realization - */ -/* must have zero mean and unit variance */ -void unif2nor(struct realization_mod *realin,struct realization_mod *realout); - - -/*Wany2nor */ -/*converts any kind of continuous data to Gaussian data*/ -/*INPUT: */ -/*k: type of measurement */ -/*wellin: structure with the input well data */ -/*seed: seed */ -/*OUTPUT: */ -/*wellout: structure with the output well data */ -/*pcumulf: structure describing the experimental */ -/* cumulative distribution */ -void Wany2nor(int k, struct welldata_mod wellin, long *seed,struct welldata_mod *wellout, struct cdf_mod *pcumulf); - - -/*Wfac2nor0 */ -/*turns the facies well measurements into Gaussian data */ -/*intervals only are respected - spatial variability is */ -/*disregarded */ -/*USES vf2thres, deflimit,trungasdev */ -/*This step is required before performing kriging */ -/*input: */ -/*k: type measurement, may be 1,2,3 ... or ntype */ -/*wellin: structure defining well data */ -/* code = 5 --> facies */ -/*grid: structure defining the grid */ -/*facies: structure defining the facies proportions */ -/*seed: seed */ -/*output: */ -/*wellout: structure defining well data - the kth vector*/ -/*of measures are converted to standard normal data */ -void Wfac2nor0(int k,struct grid_mod grid,struct welldata_mod wellin,struct statfacies_mod facies,long *seed,struct welldata_mod *wellout); - - -/*Wfac2nor1 */ -/*turns the facies well measurements into Gaussian data */ -/*Proceeds in 2 steps */ -/* 1- builds a realization Y = LZ (variability ensured) */ -/* 2- proposes successively local changes for Z to */ -/* respect the intervals-Metropoils-Hastings approach */ -/*input: */ -/*k: type measurement, may be 1,2,3 ... or ntype */ -/*variogram: structure defining the variogram model */ -/*wellin: structure defining well data */ -/* code = 5 --> facies */ -/*grid: structure defining the grid */ -/*facies: structure defining the facies proportions */ -/*seed: seed */ -/*output: */ -/*wellout: structure defining well data - the kth vector*/ -/*of measures are converted to standard normal data */ -void Wfac2nor1(int k,struct vario_mod variogram,struct grid_mod grid,struct welldata_mod wellin,struct statfacies_mod facies,long *seed,struct welldata_mod *wellout); - - -/*Wfac2norPG0 */ -/*turns the facies well measurements into Gaussian data */ -/*intervals only are respected - spatial variability is */ -/*disregarded */ -/*method developed for pluriGaussian realizations */ -/*stationary and nonstationary truncation */ -/*This step is required before performing kriging */ -/*INPUT: */ -/*k: type measurement, may be 1,2,3 ... or ntype */ -/*wellin: structure defining well data */ -/* code = 5 --> facies */ -/*grid: structure defining the grid */ -/*facies: structure defining the facies proportions */ -/*seed: seed */ -/*idreal: identification of the starting realization */ -/* = 1 for realization 1 */ -/* = 2 for realization 2 */ -/*ineq: structure defining the mask for truncation */ -/*OUTPUT: */ -/*wellout: structure defining well data - the kth vector*/ -/*of measures are converted to standard normal data */ -void Wfac2norPG0(int k,struct inequalities_mod ineq,struct grid_mod grid,struct welldata_mod wellin,struct statfacies_mod facies,long *seed,int idreal,struct welldata_mod *wellout); - - -/*Wfac2norPG1 */ -/*turns the facies well measurements into Gaussian data */ -/*Proceeds in 2 steps */ -/* 1- builds a realization Y = LZ (variability ensured) */ -/* 2- proposes successively local changes for Z to */ -/* respect the intervals-Metropoils-Hastings approach */ -/*method developed for pluriGaussian realizations */ -/*STATIONARY TRUNCATION */ -/*INPUT: */ -/*k: type measurement, may be 1,2,3 ... or ntype */ -/*wellin: structure defining well data */ -/* code = 5 --> facies */ -/*grid: structure defining the grid */ -/*facies: structure defining the facies proportions */ -/*seed: seed */ -/*ineq: structure describing the truncation mask */ -/*variogram1: structure describing the variogram model */ -/* for realization Y1 */ -/*variogram2: structure describing the variogram model */ -/* for realization Y2 */ -/*ineq: structure defining the mask for truncation */ -/*OUTPUT: */ -/*wellout1: structure with converted well data for */ -/*realization 1 - the kth vector */ -/*wellout2: structure with converted well data for */ -/*realization 2 - the kth vector */ -void Wfac2norPG1(int k,struct inequalities_mod ineq,struct vario_mod variogram1,struct vario_mod variogram2,struct grid_mod grid,struct welldata_mod wellin,struct statfacies_mod facies,long *seed,struct welldata_mod *wellout1,struct welldata_mod *wellout2); - - -/*Wlog2nor */ -/*turns the log well measurements into std Gaussian data*/ -/*This step is required before performing kriging */ -/*input: */ -/*k: type measurement, may be 1,2,3 ... or ntype */ -/*wellin: structure defining well data */ -/* code = 3 --> natural log */ -/* code = 4 --> logarithm 10 */ -/*grid: structure defining the grid */ -/*stat: structure defining the statistics */ -/*output: */ -/*wellout: structure defining well data - the kth vector*/ -/*of measures are converted to standard normal data */ -void Wlog2nor(int k, struct welldata_mod wellin,struct grid_mod grid,struct statistic_mod stat,struct welldata_mod *wellout); - - -/*Wnor2nor */ -/*converts Well Normal numbers to the standard Gaussian */ -/*input: */ -/*k: type measurement, may be 1,2,3 ... or ntype */ -/*wellin: structure defining well data */ -/*grid: structure defining the grid */ -/*stat: structure defining the statistics */ -/*output: */ -/*wellout: structure defining well data - the kth vector*/ -/*of measures are converted to standard normal data */ -void Wnor2nor(int k, struct welldata_mod wellin,struct grid_mod grid,struct statistic_mod stat,struct welldata_mod *wellout); - - -/*Wunif2nor */ -/*converts Well uniform numbers to the standard Gaussian*/ -/*input: */ -/*k: type measurement, may be 1,2,3 ... or ntype */ -/*wellin: structure defining well data */ -/*output: */ -/*wellout: structure defining well data - the kth vector*/ -/*of measures are converted to standard normal data */ -void Wunif2nor(int k, struct welldata_mod wellin,struct welldata_mod *wellout); - - - -#endif // define _CONDOR_H_ diff --git a/fftma_module/gen/Interface/genlib.h b/fftma_module/gen/Interface/genlib.h deleted file mode 100755 index f5a490f..0000000 --- a/fftma_module/gen/Interface/genlib.h +++ /dev/null @@ -1,163 +0,0 @@ -/* - * File: genlib.h - * Version: 1.0 - * Last modified on Fri Jul 15 15:45:52 1994 by eroberts - * ----------------------------------------------------- - * This file contains several definitions that form the - * core of a general-purpose ANSI C library developed by Eric - * Roberts. The goal of this library is to provide a basic - * set of tools and conventions that increase the readability - * of C programs, particularly as they are used in a teaching - * environment. - * - * The basic definitions provided by genlib.h are: - * - * 1. Declarations for several new "primitive" types - * (most importantly bool and string) that are - * used throughout the other libraries and - * applications as fundamental types. - * - * 2. A new set of functions for memory allocation. - * - * 3. A function for error handling. - */ - -#ifndef _genlib_h -#define _genlib_h - -#include -#include -#include - -/* Section 1 -- Define new "primitive" types */ - -/* - * Type: bool - * ---------- - * This type has two values, FALSE and TRUE, which are equal to 0 - * and 1, respectively. Most of the advantage of defining this type - * comes from readability because it allows the programmer to - * provide documentation that a variable will take on only one of - * these two values. Designing a portable representation, however, - * is surprisingly hard, because many libraries and some compilers - * define these names. The definitions are usually compatible but - * may still be flagged as errors. - */ - -#ifdef THINK_C - typedef int bool; -#else -# ifdef TRUE -# ifndef bool -# define bool int -# endif -# else -# ifdef bool -# define FALSE 0 -# define TRUE 1 -# else - typedef enum {FALSE, TRUE} bool; -# endif -# endif -#endif - -/* - * Type: string - * ------------ - * The type string is identical to the type char *, which is - * traditionally used in C programs. The main point of defining a - * new type is to improve program readability. At the abstraction - * levels at which the type string is used, it is usually not - * important to take the string apart into its component characters. - * Declaring it as a string emphasizes this atomicity. - */ - -typedef char *string; - -/* - * Constant: UNDEFINED - * ------------------- - * Besides NULL, the only other constant of pointer type is - * UNDEFINED, which is used in certain packages as a special - * sentinel to indicate an undefined pointer value. In many - * such contexts, NULL is a legitimate data value and is - * therefore inappropriate as a sentinel. - */ - -#define UNDEFINED ((void *) undefined_object) - -extern char undefined_object[]; - -/* Section 2 -- Memory allocation */ - -/* - * General notes: - * -------------- - * These functions provide a common interface for memory - * allocation. All functions in the library that allocate - * memory do so using GetBlock and FreeBlock. Even though - * the ANSI standard defines malloc and free for the same - * purpose, using GetBlock and FreeBlock provides greater - * compatibility with non-ANSI implementations, automatic - * out-of-memory error detection, and the possibility of - * substituting a garbage-collecting allocator. - */ - -/* - * Function: GetBlock - * Usage: ptr = (type) GetBlock(nbytes); - * ------------------------------------- - * GetBlock allocates a block of memory of the given size. If - * no memory is available, GetBlock generates an error. - */ - -void *GetBlock(size_t nbytes); - -/* - * Function: FreeBlock - * Usage: FreeBlock(ptr); - * ---------------------- - * FreeBlock frees the memory associated with ptr, which must - * have been allocated using GetBlock, New, or NewArray. - */ - -void FreeBlock(void *ptr); - -/* - * Macro: New - * Usage: p = New(pointer-type); - * ----------------------------- - * The New pseudofunction allocates enough space to hold an - * object of the type to which pointer-type points and returns - * a pointer to the newly allocated pointer. Note that - * "New" is different from the "new" operator used in C++; - * the former takes a pointer type and the latter takes the - * target type. - */ - -#define New(type) ((type) GetBlock(sizeof *((type) NULL))) - -/* - * Macro: NewArray - * Usage: p = NewArray(n, element-type); - * ------------------------------------- - * NewArray allocates enough space to hold an array of n - * values of the specified element type. - */ - -#define NewArray(n, type) ((type *) GetBlock((n) * sizeof(type))) - -/* Section 3 -- Basic error handling */ - -/* - * Function: Error - * Usage: Error(msg, ...) - * ---------------------- - * Error generates an error string, expanding % constructions - * appearing in the error message string just as printf does. - * After printing the error message, the program terminates. - */ - -void Error(string msg, ...); - -#endif diff --git a/fftma_module/gen/Interface/geostat.h b/fftma_module/gen/Interface/geostat.h deleted file mode 100755 index 5d48919..0000000 --- a/fftma_module/gen/Interface/geostat.h +++ /dev/null @@ -1,690 +0,0 @@ -#include -#include -#include -#include - - -#ifndef _GEOSTAT_H -#define _GEOSTAT_H - -#define NTAB 32 - -/* Modified january, the 22th 2004 */ -/* from float to double */ - -/* List of structures: */ -/* ------------------- */ - -/* vario_mod */ -/* variotable_mod*/ -/* grid_mod */ -/* welldata_mod */ -/* statfacies_mod */ -/* inequalities_mod */ -/* statistic_mod */ -/* grad_mod */ -/* gradients_mod */ -/* cdf_mod */ -/* realization_mod */ - - -/* List of functions: */ -/* ------------------ */ - -/* axes, cardsin, choldc, coordinates */ -/* covariance, cov_matrix, cov_value, */ -/* cubic, cutspectr, deflimit, dual_kri */ -/* exponential, fourt, funtrun1, G, gammf */ -/* gammln, gammp, gasdev, gaussian, gcf, */ -/* gen_cov_matrix, Ginv, gradual, cgrid, */ -/* gser, invtrun1, krig_stat, length, */ -/* LtimeZ, mat_vec, maxfactor, metrop, norm */ -/* normal, nugget, power, ran2, scal_vect, */ -/* solve3, sort, spherical, stable, statlog2nor */ -/* test_fract, trun1, trungasdev,vec_vec, */ -/* vf2gthres,polint */ - - - - -/*STRUCTURES*/ -/*----------*/ -/*variogram */ -/*Nvario: number of combined variogram models */ -/*vario: model of variogram per variogram model */ -/* 1 --> exponential */ -/* 2 --> gaussian */ -/* 3 --> spherical */ -/* 4 --> cardsin */ -/* 5 --> stable */ -/* 6 --> gamma */ -/* 7 --> cubic */ -/* 8 --> nugget */ -/* 9 --> power */ -/*alpha: exponent for the stable and gamma variogram */ -/* per variogram model */ -/*ap: anisotropy axes per variogram model */ -/*scf: correlation lengths per variogram model */ -/*var: normalized variance per variogram model(sum = 1)*/ -struct vario_mod { - int Nvario; - int *vario; - double *alpha; - double *ap; - double *scf; - double *var; -}; - - - -/*variogram table */ -/*Nvario: number of combined variogram models */ -/*vario: model of variogram per variogram model */ -/* 1 --> exponential */ -/* 2 --> gaussian */ -/* 3 --> spherical */ -/* 4 --> cardsin */ -/* 5 --> stable */ -/* 6 --> gamma */ -/* 7 --> cubic */ -/* 8 --> nugget */ -/* 9 --> power */ -/*alpha: exponent for the stable and gamma variogram */ -/* per variogram model */ -/*ap: anisotropy axes per variogram model */ -/*scf: correlation lengths per variogram model */ -/*var: normalized variance per variogram model(sum = 1)*/ -struct variotable_mod { - int number_of_variograms; - int *Nvario; - int *vario; - float *alpha; - float *ap; - float *scf; - float *var; -}; - - - - - - -/*grid */ -/*NX: number of gridblocks along the X axis*/ -/*NY: number of gridblocks along the Y axis*/ -/*NZ: number of gridblocks along the Z axis*/ -/*DX: gridblock length along the X axis */ -/*DY: gridblock length along the Y axis */ -/*DZ: gridblock length along the Z axis */ -/*Xo: X-cell number of the origin cell */ -/*Yo: Y-cell number of the origin cell */ -/*Zo: Z-cell number of the origin cell */ -struct grid_mod { - int NX, NY, NZ; - double DX,DY,DZ; - double Xo,Yo,Zo; -}; - - -/*well data */ -/*nwell: number of wells */ -/*n: number of measurement points per well */ -/* i = [0...nwell-1] */ -/*ntype: number of measurement types */ -/*code: status of the measurements i=[0...ntype-1] */ -/* --> 0 : Gaussian white noise */ -/* --> 1: standard Normal */ -/* --> 2: non standard Normal */ -/* --> 3: lognormal (neperien) */ -/* --> 4: lognormal (log10) */ -/* --> 5: facies */ -/* --> 6: uniform */ -/* --> 7: any */ -/*x: X-coordinates of the measurements */ -/* i = [0 ... n[0]-1 n[0] ... n[0]+n[1]-1...sum(n[k])-1]*/ -/*y: Y-coordinates of the measurements */ -/* i = [0 ... n[0]-1 n[0] ... n[0]+n[1]-1...sum(n[k])-1]*/ -/*z: Z-coordinates of the measurements */ -/* i = [0 ... n[0]-1 n[0] ... n[0]+n[1]-1...sum(n[k])-1]*/ -/*measure: values of the measurements */ -/* same kind of indexation, but repeated per type of */ -/* measurement */ -/* type 1 : */ -/* i = [0 ... n[0]-1 n[0] ... n[0]+n[1]-1...sum(n[k])-1]*/ -/* type 2 : */ -/* i=[sum(n[k])... sum(n[k])+n[0]-1 ... 2*(sum(n[k])-1)]*/ -struct welldata_mod { - int nwell; - int *n; - int ntype; - int *code; - float *x; - float *y; - float *z; - float *measure; -}; - - - -/*volume fractions for facies */ -/*ncat: number of facies */ -/*nblock: number of gridblocks with different */ -/* volume fractions */ -/* = 1 --> stationary case */ -/* = NX*NY*NZ --> nonstationary case */ -/*vf: volume fractions for the first ncat-1 facies*/ -/* i = [0...ncat-2]*nblock */ -struct statfacies_mod { - int ncat; - int nblock; - float *vf; -}; - - -/*inequalities for truncated plurigaussian realizations*/ -/*only two basic realizations Y1 and Y2 are considered */ -/*Y1 and Y2 are independent */ -/*nsY1: number of unknown thresholds for Y1 */ -/*nsY2: number of unknown thresholds for Y2 */ -/*thresholds: vector with the thresholds and -10 and 10*/ -/* the output values are the Gaussian */ -/* thresholds */ -/* i = [0 ... n+1], n = nsY1+nsY2 */ -/* thresholds[n] = -10,thresholds[n+1] = 10 */ -/* given at the beginning */ -/*address_sY1: successive upper and lower bounds for */ -/* the different facies for Y1 */ -/* i = [0 ... 2*ncat-1] */ -/* the values in address_sY1 are integers */ -/* ranging from 0 to n+1 with n = nsY1+nsY2*/ -/*address_sY2: successive upper and lower bounds for */ -/* the different facies for Y2 */ -/* i = [0 ... 2*ncat-1] */ -/* the values in address_sY2 are integers */ -/* ranging from 0 to n+1 with n = nsY1+nsY2*/ -struct inequalities_mod { - int nsY1; - int nsY2; - float *thresholds; - int *address_sY1; - int *address_sY2; -}; - - -/*statistical data */ -/*type --> 0 : normal */ -/* --> 1 : natural log */ -/* --> 2 : log 10 */ -/*nblock_mean: number of gridblocks with different */ -/* means */ -/* = 1 --> stationary case */ -/* = NX*NY*NZ --> nonstationary case */ -/*mean: mean of the variable i = [0...nblock_mean] */ -/* DHF CHANGE: FOR TYPE 1 AND TYPE 2, MEAN IS LOG MEAN ! */ -/*nblock_var: number of gridblocks with different */ -/* variances */ -/* = 1 --> stationary case */ -/* = NX*NY*NZ --> nonstationary case */ -/*variance: variance of the variable i = [0...nblock_var]*/ -/* DHF CHANGE: FOR TYPE 1 AND TYPE 2, VAR IS LOG VAR ! */ -struct statistic_mod { - int type; - int nblock_mean; - double *mean; - int nblock_var; - double *variance; -}; - - -/*gradual deformation parameters */ -/*Nadded: number of complementary realizations */ -/*NZONES: number of subregions */ -/*rho: gradual deformation parameters */ -/*rho[NZONES*(0...Nadded)] */ -/*cellini[NZONES*(0...2)] lower cell bound for */ -/*for subregions along axes X,Y,Z */ -/*cellfin[NZONES*(0...2)] upper cell bound for */ -/*for subregions along axes X,Y,Z */ -struct grad_mod { - int Nadded, NZONES; - float *rho; - int *cellini, *cellfin; -}; - - -/*gradient structures */ -/*Nparam : number of parameters for which gradients are */ -/* required */ -/*Ncells : number of cells for which gradients are */ -/* calculated */ -/*grad : vector with the calculated gradients */ -/* dimension = Nparam*Ncells */ -/* this vector is organized as */ -/* 0 1...Ncells-1 for the first parameter followed*/ -/* Ncells....2*Ncells-1 for the second parameter */ -/* and so on */ -struct gradients_mod { - int Nparam,Ncells; - float *grad; -}; - - - -/*description of discretized cumulative distributions */ -/*n: number of points */ -/*x: values along the x axis i = [0...n-1] */ -/*fx: corresponding values for the cumulative */ -/* distribution i = [0...n-1] */ -struct cdf_mod { - int n; - float *x; - float *fx; -}; - - -/*realization */ -/*n: number of components */ -/*code: status of the realization */ -/* --> 0 : Gaussian white noise */ -/* --> 1: standard Normal */ -/* --> 2: non standard Normal */ -/* --> 3: lognormal (neperien) */ -/* --> 4: lognormal (log10) */ -/* --> 5: facies */ -/* --> 6: conditional standard Normal */ -/* --> 7: conditional non standard Normal */ -/* --> 8: conditional lognormal (neperien) */ -/* --> 9: conditional lognormal (log10) */ -/* --> 10: conditional facies */ -/* --> 11: uniform numbers */ -/* --> 12: conditional uniform numbers */ -/* --> 13: unconditional any type */ -/* --> 14: conditional any type */ -/*vector: realization vector i = [0...n-1] */ -struct realization_mod { - int n; - int code; - double *vector; -}; - -/*=====================================================*/ - -/*FUNCTIONS*/ -/*---------*/ - - -/*normalization of the anostropy axes */ -/*ap: anisotropy axes */ -/*scf: correlation lengths */ -/* The returned normalized axes are in ap */ -void axes(double *ap, double *scf, int N); - - -/*cardsin covariance value for lag h*/ -double cardsin(double h); - - -/*Cholesky decomposition of matrix C */ -/* C : symetric positive-definite matrix recorded */ -/* (per raws) as a vector with only components */ -/* Cij so that j <= i, 0 <= i <= n */ -/* n : dimension of matrix Cij */ -/* */ -/* C is turned into the lower triangular cholesky matrix*/ -void choldc(double *C, int n); - - -/*computes the coordinates of a given cell */ -/*as numbers of cells along the X,Y and Z axes*/ -/*maille = i[0]+1+i[1]*NX+i[2]*NX*NY */ -/*input: */ -/*maille: number of the cell to identify */ -/*grid: structure defining the grid */ -/*output: */ -/*i: vector with the coordinates */ -void coordinates(int maille, int i[3],struct grid_mod grid); - - -/*builds the sampled covariance function */ -/*dimensions are even */ -/*covar: covariance array, vector of size*/ -/*1+NX*NY*NZ, covar[0] is a dead cell */ -/*variogram: structure defined above */ -/*grid: structure defined above */ -/*n: number of gridblocks along X,Y and Z*/ -void covariance(double *covar,struct vario_mod variogram, struct grid_mod grid, int n[3]); - -/*computation of the covariance matrix for the well data*/ -/*well coordinates are given as a number of cells */ -/*The dimension of C is given by well.nwell */ -/*C is recorded as a vector so that */ -/*C[k] = Cij with i = [0...nwell-1], j = [0...nwell-1] */ -/*and k = j+i(i+1)/2 */ -/*variogram: structure defined above */ -/*well: structure defined above */ -/*grid: structure defined above */ -void cov_matrix(double *C, struct vario_mod variogram, struct welldata_mod well, struct grid_mod grid); - - -/*calculation of the covariance value for a distance h */ -/*defined by i,j,k */ -/*available variogram model: */ -/* 1 -> exponential */ -/* 2 -> gaussian */ -/* 3 -> spherical */ -/* 4 -> cardsin */ -/* 5 -> stable */ -/* 6 -> gamma */ -/* 7 -> cubic */ -/* 8 -> nugget */ -/* 9 -> power */ -/*variogram: variogram with the structure defined above*/ -/*di: distance along the X axis */ -/*dj: distance along the Y axis */ -/*dk: distance along the Z axis */ -/* The returned value is the computed covariance value */ -double cov_value(struct vario_mod variogram,double di,double dj,double dk); - -/*cubic covariance value for lag h*/ -double cubic(double h); - - -/*truncation of the power spectrum to remove */ -/*high frequencies - isotropic case */ -/*covar: power spectrum */ -/*kx: number of cells to save along the x-axis */ -/*ky: number of cells to save along the y-axis */ -/*kz: number of cells to save along the z-axis */ -/*n[3]: number of cells along the X, Y and Z axes*/ -void cutspectr(float *covar, int kx, int ky, int kz, int n[3]); - - -/*defines the threshold interval for a facies x*/ -/*lim_inf: lower bound */ -/*lim_sup: upper bound */ -/*x: facies */ -/*thresholds: Gaussian threshold vector */ -/*facies: structure defined above */ -/*nblock: gridcell number of point x */ -void deflimit(double *plim_inf, double *plim_sup, float x, float *thresholds, struct statfacies_mod facies,int nblock); - - -/*kriges the realization considering weights */ -/*realin: input realization */ -/*variogram: structure defining the variogram */ -/*k: type of measure */ -/*well: structure defining the well data */ -/*grid: structure defined above */ -/*D: weight vector of length Ndata, Di, i = 0...Ndata-1*/ -/*The kriged realization is stored in realout */ -void dual_kri(struct realization_mod *realin, struct vario_mod variogram,struct welldata_mod well, struct grid_mod grid, double *D,struct realization_mod *realout); - - - -/*exponential covariance value for lag h*/ -double exponential(double h); - - -/*Fast Fourier Transform - Cooley-Tukey algorithm */ -/*datar: real part vector - to be transformed */ -/*datai: imaginary part vector - to be transformed */ -/*nn: number of gridblocks along the X,Y and Z axes */ -/*ndim: number of dimensions */ -/*ifrwd: non-zero for forward transform, 0 for inverse*/ -/*icplx: non-zero for complex data, 0 for real */ -/*workr: utility real part vector for storage */ -/*worki: utility imaginary part vector for storage */ -/*The transformed data are returned in datar and datai*/ -void fourt(double *datar,double *datai, int nn[3], int ndim, int ifrwd, int icplx,double *workr,double *worki); - - -/*calculates F(x) = (1/a)*exp(-x*x/2)*/ -double funtrun1(double x); - - -/*cumulative standard normal value*/ -float G(float x); - - -/*gamma covariance value for lag h and exponent alpha*/ -double gammf(double h, double alpha); - - -/*returns the value ln(G(x))*/ -float gammln(float xx); - - -/*incomplete gamma fnction*/ -float gammp(float a, float x); - - -/*returns a normally distributed deviate with 0 mean*/ -/*and unit variance, using ran1(idum) as the source */ -/*of uniform deviates */ -/*idum: seed */ -double gasdev(long *idum, long *idum2, long *iy, long *iv, int *iset); - -/*gaussian covariance value for lag h*/ -double gaussian(double h); - - -/*incomplete gamma function evaluated by its continued */ -/*fraction represented as gammcf, also returns ln(G(a))*/ -/*as gln */ -void gcf(float *gammcf, float a, float x, float *gln); - - -/*computation of the covariance matrix for the well data*/ -/*well coordinates have no specific unit */ -/*The dimension of C is given by n */ -/*C defines the correlation between the first n wells */ -/*C is recorded as a vector so that */ -/*C[k] = Cij with i = [0...nwell-1], j = [0...nwell-1] */ -/*and k = j+i(i+1)/2 */ -/*variogram: structure defined above */ -/*well: structure defined above */ -void gen_cov_matrix(double *C, struct vario_mod variogram, struct welldata_mod well, int n); - - -/*Ginv */ -/*Computes the inverse of the standard normal cumulative*/ -/*distribution function with a numerical approximation */ -/*from Statistical Computing,by W.J. Kennedy, Jr. and */ -/*James E. Gentle, 1980, p. 95. */ -/*input : */ -/*p: cumulative probability value */ -float Ginv(float p); - - -/*gradual combination of 1 realization + Nadded */ -/*complementary realizations */ -/*rho: gradual deformation parameters */ -/*rho[0...NZONES*Nadded-1] */ -/*rangement des vecteurs colonnes les uns apres */ -/*les autres */ -/*Zo: starting realization */ -/*Zo[0...n] */ -/*Z: complementary realizations all stored */ -/*Z[0...n-1 n...2n-1 ...(Nadded-1)n...Nadded.n-1]*/ -/*sequentially in a single vector */ -/*Nadded: number of complementary realizations */ -/*n: number of components per realization */ -/*NZONES: number of subregions */ -/*grid: grid definition */ -void gradual(struct grad_mod grad,float *Zo,float *Z,float *Zfinal,int n,struct grid_mod grid); - - -/*computes the size of the underlying grid for FFTs*/ -/*input: */ -/*variogram: structure defining the variogram model*/ -/*grid: structure defining the actual grid */ -/*output: */ -/*n: vector with the number of cells along the */ -/* X, Y and Z axes for the underlying grid */ -/* i = [0 1 2] */ -void cgrid(struct vario_mod variogram, struct grid_mod grid, int n[3]); - -/*incomplete gamma function evaluated by its series*/ -/*representation as gamser, also returns ln(G(a)) */ -/*as gln */ -void gser(float *gamser, float a, float x, float *gln); - - -/*calculates x so that x = invF(u) */ -/*F is the cumulative density function for the */ -/*function approximating the Gaussian function */ -/*u: uniform deviate between 0 and 1 */ -/*lim_inf: lower bound of the considered interval*/ -/*lim_sup: upper bound of the considered interval*/ -/*C: normalizing constant */ -double invtrun1(double u, double lim_inf, double lim_sup, double C); - - -/*computes the kriging mean and variance*/ -/*for the vector bi, i = [0...n-1] */ -void krig_stat(float *b, int n, struct vario_mod variogram, struct welldata_mod well, float *mean, float *var); - - -/* computes the number of gridblocks for one dimension*/ -/*N: initial number of gridblocks */ -/*i: considered direction */ -/*scf: correlation length */ -/*ap: normalized anisotropy axes */ -int length(int N, int i, double *scf, double *ap, double D, int Nvari); - -/*calculates L.Z/ -/* L : lower triangular matrix recorded */ -/* (per raws) as a vector with only components */ -/* Lij so that j <= i, i = [0...n-1] */ -/* Z : vector, Zi avec i = [0...n-1] */ -/* b : vector, bi avec i = [0...n-1] */ -/* n : dimension of matrix Lij */ -/* */ -/* The solution vector is returned in b */ -void LtimeZ(double *L, float *Z, float *b, int n); - - -/*calculates C.x/ -/* C : symmetric positive-definite matrix recorded */ -/* (per raws) as a vector with only components */ -/* Cij so that j <= i, i = [0...n-1] */ -/* x : vector, xi avec i = [0...n-1] */ -/* b : vector, bi avec i = [0...n-1] */ -/* n : dimension of matrix Cij */ -/* */ -/* The result vector is returned in b */ -void mat_vec(double *C, double *x, double *b, int n); - - -/*determines the greatest prime factor of an integer*/ -int maxfactor(int n); - -/*metrop returns a boolean varible that issues a */ -/*verdict on whether to accept a reconfiguration */ -/*defined by the probability ratio "ratio". */ -/*If ratio >= 1, metrop = 1(true), while if ratio < 1, */ -/*metrop is only true with probability "ratio" */ -int metrop(double ratio,long *idum,long *idum2, long *iy, long *iv); - - -/*2-norm of vector b */ -/* b : vector */ -/* n : length of b, bi, i = [0...n-1]*/ -/*returns the norm of b */ -double norm(double *b,int n); - - -/*value of g(x) where g is the normal function*/ -double normal(double x); - - -/*nugget covariance value for lag h*/ -double nugget(double h); - - -/*power covariance value for lag h and exponent alpha*/ -double power(double h,double alpha); - - -/*generates uniform deviates between 0 and 1*/ -/*idum: seed */ -double ran2(long *idum, long *idum2, long *iy, long *iv); - - - -/*calculates bt.b */ -/* b : vector, bi, i = [0...n-1] */ -/* n : length of b */ -/*returns the scalar product of b*/ -double scal_vec(double *b,int n); - - -/*solves the set of n linear equations Cx = D */ -/* C : symmetric positive-definite matrix recorded */ -/* (per raws) as a vector with only components */ -/* Cij so that j <= i, i = [0...n-1] */ -/* D : right-hand side vector, Di avec i = [0...n-1]*/ -/* n : dimension of matrix Cij */ -/* */ -/* The solution vector is returned in D */ -/* CONJUGATE GRADIENT method */ -void solve3(double *C, double *D, int n); - - -/*sorts an array [0...n-1] into ascending order using */ -/*shell */ -void sort(float n, float *arr); - - -/*spherical covariance value for lag h*/ -double spherical(double h); - - -/*stable covariance value for lag h and exponent alpha*/ -double stable(double h, double alpha); - - -/*conversion of log mean and variance to nor*/ -void statlog2nor(struct statistic_mod *pstat); - - -/*tries factor */ -/*pnum: number to be decomposed */ -/*fact: suggested factor */ -/*pmaxfac: memory to keep the greatest factor*/ -int test_fact(int *pnum, int fact, int *pmaxfac); - - -/*calculates the integrale of an approximate function*/ -/*for the Gaussian function over an interval defined */ -/*by lim_inf and lim_sup */ -/*lim_inf: lower bound of the considered interval */ -/*lim_sup: upper bound of the considered interval */ -double trun1(double lim_inf, double lim_sup); - - -/*draws a truncated gaussian variable between lim_inf*/ -/*and lim_sup */ -/*idum: seed */ -double trungasdev(long *idum,double lim_inf,double lim_sup,long *idum2, long *iy, long iv[NTAB]); - -/* tb1.b2 */ -/* b1 : vector */ -/* b2 : vector */ -/* n : length of b1 and b2, bi, i = [0...n-1]*/ -/*returns the norm the product tb1.b2 */ -double vec_vec(double *b1, double *b2,int n); - - -/*turns the volume fractions into Gaussian thresholds */ -/*facies: structure defined above */ -/*thresholds: output threshold vector fot i = [0...n-1]*/ -/*where n is the number of facies-1 */ -/*USES normal*/ -void vf2gthres(struct statfacies_mod facies,float *thresholds); - -void polint(float xa[],float ya[],int n,float x, float *y,float *dy); - - - -#endif diff --git a/fftma_module/gen/Interface/pressure.h b/fftma_module/gen/Interface/pressure.h deleted file mode 100755 index 826da7e..0000000 --- a/fftma_module/gen/Interface/pressure.h +++ /dev/null @@ -1,21 +0,0 @@ -#include -#include -#include "genlib.h" -#include "geostat.h" - -#ifndef _PRESSURE_H -#define _PRESSURE_H - -/*STRUCTURES*/ -/*----------*/ - -/* pressure_mod */ -/* x: macroscopic gradient value in x direction */ -/* y: macroscopic gradient value in x direction */ -/* z: macroscopic gradient value in x direction */ -struct pressure_mod { - double x,y,z; -}; - - -#endif // define _PRESSURE_H diff --git a/fftma_module/gen/Interface/simpio.h b/fftma_module/gen/Interface/simpio.h deleted file mode 100755 index ca1efc9..0000000 --- a/fftma_module/gen/Interface/simpio.h +++ /dev/null @@ -1,75 +0,0 @@ -/* - * File: simpio.h - * Version: 1.0 - * Last modified on Wed Apr 27 07:29:13 1994 by eroberts - * ----------------------------------------------------- - * This interface provides access to a simple package of - * functions that simplify the reading of input data. - */ - -#ifndef _simpio_h -#define _simpio_h - -#include "genlib.h" - -/* - * Function: GetInteger - * Usage: i = GetInteger(); - * ------------------------ - * GetInteger reads a line of text from standard input and scans - * it as an integer. The integer value is returned. If an - * integer cannot be scanned or if more characters follow the - * number, the user is given a chance to retry. - */ - -int GetInteger(void); - -/* - * Function: GetLong - * Usage: l = GetLong(); - * --------------------- - * GetLong reads a line of text from standard input and scans - * it as a long integer. The value is returned as a long. - * If an integer cannot be scanned or if more characters follow - * the number, the user is given a chance to retry. - */ - -long GetLong(void); - -/* - * Function: GetReal - * Usage: x = GetReal(); - * --------------------- - * GetReal reads a line of text from standard input and scans - * it as a double. If the number cannot be scanned or if extra - * characters follow after the number ends, the user is given - * a chance to reenter the value. - */ - -double GetReal(void); - -/* - * Function: GetLine - * Usage: s = GetLine(); - * --------------------- - * GetLine reads a line of text from standard input and returns - * the line as a string. The newline character that terminates - * the input is not stored as part of the string. - */ - -string GetLine(void); - -/* - * Function: ReadLine - * Usage: s = ReadLine(infile); - * ---------------------------- - * ReadLine reads a line of text from the input file and - * returns the line as a string. The newline character - * that terminates the input is not stored as part of the - * string. The ReadLine function returns NULL if infile - * is at the end-of-file position. - */ - -string ReadLine(FILE *infile); - -#endif diff --git a/fftma_module/gen/Interface/toolsFFTMA.h b/fftma_module/gen/Interface/toolsFFTMA.h deleted file mode 100755 index e2941de..0000000 --- a/fftma_module/gen/Interface/toolsFFTMA.h +++ /dev/null @@ -1,80 +0,0 @@ -#include -#include -#include "genlib.h" -#include "geostat.h" - -#ifndef _TOOLSFFTMA_H -#define _TOOLSFFTMA_H - -/* Create december, the 16th 2002 */ -/* Modified december, the 9th 2002 */ - -/* List of functions: */ -/* ------------------ */ -/* kgeneration, FFTMA2, prebuild_gwn, build_real, addstat2, clean_real */ - - -/*FUNCTIONS*/ -/*----------*/ - -void kgeneration(long seed,struct grid_mod grid,struct statistic_mod stat,struct vario_mod variogram,string filename[8],struct realization_mod *Z,struct realization_mod *Y,struct realization_mod *Y2, int n[3], int *genere, int *gwnwrite, struct realization_mod *gwnoise); - -/*FAST FOURIER TRANSFORM Pressure Simulation */ -/*Turns a Gaussian white noise vector into a */ -/*spatially correlated vector */ -/*input: */ -/*variogram: structure defining the variogram */ -/* model */ -/*grid: structure defining the grid */ -/*n: vector with the number of cells along the */ -/* X, Y and Z axes for the underlying grid */ -/* i = [0 1 2] */ -/* --> 0 0 0 : n will be computed and */ -/* updated as output */ -/* --> nx ny nz: these dimensions are used */ -/*realin: structure defining a realization - */ -/* must be a Gaussian white noise */ -/*gradient: macroscopic gradient pression vector */ -/*output: */ -/*realout: structure defining a realization - */ -/*realout2: structure defining a pressure field */ -/*realout3: structure defining a xvelocity field */ -/*realout4: structure defining a yvelocity field */ -/*realout5: structure defining a zvelocity field */ - -void FFTMA2(struct vario_mod variogram,struct grid_mod grid,int n[3],struct realization_mod *realin,struct realization_mod *realout); - -/* prebuild_gwn */ -/* Produce a first construction in real space of the Gaussian white noise */ -/* grid: structure defining the grid */ -/*n: vector with the number of cells along the */ -/* X, Y and Z axes for the underlying grid */ -/* i = [0 1 2] */ -/* --> 0 0 0 : n will be computed and */ -/* updated as output */ -/* --> nx ny nz: these dimensions are used */ -/*realin: structure defining a realization - */ -/* must be a Gaussian white noise */ -/*realization: structure defining a realization*/ - -void prebuild_gwn(struct grid_mod grid,int n[3],struct realization_mod *realin,double *realization,int solver); - -/* build_real */ -/* build a realization in the spectral domain */ -/*n: vector with the number of cells along the */ -/* X, Y and Z axes for the underlying grid */ -/* i = [0 1 2] */ -/* --> 0 0 0 : n will be computed and */ -/* updated as output */ -/* --> nx ny nz: these dimensions are used */ -/*covar: vector defining the covariance in spectral domain */ -/*realization: vector defining the real part */ -/*ireal: vector defining the i-part */ - -void build_real(int n[3],int NTOT,double *covar,double *realization,double *ireal); - -void addstat2(struct realization_mod *realin,struct statistic_mod stat ,struct realization_mod *realout,struct realization_mod *realout2); - -void clean_real(struct realization_mod *realin,int n[3],struct grid_mod grid,double *vectorresult,struct realization_mod *realout); - -#endif // define _TOOLSFFTMA_H diff --git a/fftma_module/gen/Interface/toolsIO.h b/fftma_module/gen/Interface/toolsIO.h deleted file mode 100755 index 8e22ea5..0000000 --- a/fftma_module/gen/Interface/toolsIO.h +++ /dev/null @@ -1,91 +0,0 @@ -#include -#include -#include "genlib.h" -#include "geostat.h" -#include "pressure.h" - -#ifndef _TOOLSIO_H -#define _TOOLSIO_H - -/* Create december, the 16th 2002 */ -/* Modified december, the 9th 2002 */ - -/* List of functions: */ -/* ------------------ */ -/* writefile,writefile_bin,readfile_bin,inputdata,inputfiledata,readdata,debuginput */ -/* testmemory, testopenfile */ - - -/*FUNCTIONS*/ -/*----------*/ - -/* Lecture dans un fichier */ - -/* Inputdata */ -/* */ -/* input data needed for realizations*/ -/* seed: seed */ -/* grid: structure defining the actual grid */ -/* filename: name of files */ -/* variogram: struture defining the variogram model */ -/* stat: struture defining the mean and the variance of permeability realization */ -/* pression: structure defining the gradient pressure */ - -void inputdata(long *seed,struct grid_mod *grid,string filename[7],struct vario_mod *variogram,struct statistic_mod *stat,struct pressure_mod *pression); - -void inputfiledata(string inputfile,long *seed,struct grid_mod *grid,string filename[7],struct vario_mod *variogram,struct statistic_mod *stat,struct pressure_mod *pression); - -/* void readdata(long *seed,struct grid_mod *grid,string filename[8],struct vario_mod *variogram,struct statistic_mod *stat,struct pressure_mod *pression,int *Ksolver,struct realization_mod *Kfield, char *argv[]); */ - -void readdata(long *seed,struct grid_mod *grid,string filename[8],struct vario_mod *variogram,struct statistic_mod *stat,struct pressure_mod *pression,int *Ksolver,int *genere, int *gwnwrite, struct realization_mod *Kfield,struct realization_mod *gwnoise, char *argv[]); - -void readdata2(long *seed,struct grid_mod *grid,string filename[8],struct vario_mod *variogram,struct statistic_mod *stat,struct pressure_mod *pression,int *Ksolver,int *genere, int *gwnwrite, int *format_file, struct realization_mod *Kfield,struct realization_mod *gwnoise, char *argv[]); - -/* readfile_bin */ -/* */ -/* read in the file "filename" the vector values of a */ -/* realization_mod variable */ -/* filename: explicit */ -/* realin: structure defining a realization */ - -void readfile_bin(string filename, struct realization_mod *realin); - - -/* Writefile */ -/* */ -/* write in the file "filename" the vector values of a */ -/* realization_mod variable */ -/* filename: explicit */ -/* realin: structure defining a realization */ - -void writefile( string filename, struct realization_mod *realin); - -/* Writefile_bin */ -/* */ -/* write in the file "filename" the vector values of a */ -/* realization_mod variable */ -/* filename: explicit */ -/* realin: structure defining a realization */ - -void writefile_bin( string filename, struct realization_mod *realin); - - - -/* DebugInput */ -/* */ -/* Display the input data */ -/* seed: seed */ -/* grid: structure defining the actual grid */ -/* filename: name of files */ -/* variogram: struture defining the variogram model */ -/* stat: struture defining the mean and the variance of permeability realization */ -/* pression: structure defining the gradient pressure */ -void debuginput(long *seed,struct grid_mod *grid,string filename[7],struct vario_mod *variogram,struct statistic_mod *stat,struct pressure_mod *pression,int *Ksolver,int *genere, int *gwnwrite); - -/* Allocation test */ -void testmemory(double *realint); - -/* Test open file */ -void testopenfile(FILE *fp); - -#endif // define _TOOLSIO_H diff --git a/fftma_module/gen/LIBCS106X/._.DS_Store b/fftma_module/gen/LIBCS106X/._.DS_Store deleted file mode 100755 index c9474ea62235481b7d27ae5a878d2b4070bc6e05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 82 jcmZQz6=P>$V!#9-F-{;h0%8Rq2JwS{7!DlZEK~*nFE;@e diff --git a/fftma_module/gen/LIBCS106X/Makefile.libCS106X b/fftma_module/gen/LIBCS106X/Makefile.libCS106X deleted file mode 100755 index ccef6b8..0000000 --- a/fftma_module/gen/LIBCS106X/Makefile.libCS106X +++ /dev/null @@ -1,13 +0,0 @@ -CC = cc -CCFLAG = - -LIB = libCS106X_${ARCH}.a -%.o: %.c - $(CC) $(CCFLAG) -c $< - - -$(LIB) : genlib.o random.o simpio.o strlib.o symtab.o scanadt.o stack.o - ar r $@ $? - -clean : - rm *.o diff --git a/fftma_module/gen/LIBCS106X/Makefile_debug b/fftma_module/gen/LIBCS106X/Makefile_debug deleted file mode 100755 index 0ecafef..0000000 --- a/fftma_module/gen/LIBCS106X/Makefile_debug +++ /dev/null @@ -1,21 +0,0 @@ -# CC = gcc -# CCFLAG = - -ifeq (${ARCH},sun) - CC = cc - CCFLAG = -g -endif -ifeq (${ARCH},linux) - CC = gcc - CCFLAG = -g -endif -LIB = libCS106X_debug_${ARCH}.a -%.o: %.c - $(CC) $(CCFLAG) -c $< - - -$(LIB) : genlib.o random.o simpio.o strlib.o symtab.o scanadt.o stack.o - ar r $@ $? - -clean : - rm *.o diff --git a/fftma_module/gen/LIBCS106X/genlib.c b/fftma_module/gen/LIBCS106X/genlib.c deleted file mode 100755 index 1a106f6..0000000 --- a/fftma_module/gen/LIBCS106X/genlib.c +++ /dev/null @@ -1,63 +0,0 @@ -/* - * File: genlib.c - * Version: 1.0 - * Last modified on Fri Jul 15 15:45:52 1994 by eroberts - * ----------------------------------------------------- - * This file implements the general C library package. See the - * interface description in genlib.h for details. - */ - -#include -#include -#include -#include - -#include "genlib.h" - -/* - * Constants: - * ---------- - * ErrorExitStatus -- Status value used in exit call - */ - -#define ErrorExitStatus 1 - -/* Section 1 -- Define new "primitive" types */ - -/* - * Constant: UNDEFINED - * ------------------- - * This entry defines the target of the UNDEFINED constant. - */ - -char undefined_object[] = "UNDEFINED"; - -/* Section 2 -- Memory allocation */ - -void *GetBlock(size_t nbytes) -{ - void *result; - - result = malloc(nbytes); - if (result == NULL) Error("No memory available"); - return (result); -} - -void FreeBlock(void *ptr) -{ - free(ptr); -} - -/* Section 3 -- Basic error handling */ - -void Error(string msg, ...) -{ - va_list args; - - va_start(args, msg); - fprintf(stderr, "Error: "); - vfprintf(stderr, msg, args); - fprintf(stderr, "\n"); - va_end(args); - exit(ErrorExitStatus); -} diff --git a/fftma_module/gen/LIBCS106X/genlib.h b/fftma_module/gen/LIBCS106X/genlib.h deleted file mode 100755 index f5a490f..0000000 --- a/fftma_module/gen/LIBCS106X/genlib.h +++ /dev/null @@ -1,163 +0,0 @@ -/* - * File: genlib.h - * Version: 1.0 - * Last modified on Fri Jul 15 15:45:52 1994 by eroberts - * ----------------------------------------------------- - * This file contains several definitions that form the - * core of a general-purpose ANSI C library developed by Eric - * Roberts. The goal of this library is to provide a basic - * set of tools and conventions that increase the readability - * of C programs, particularly as they are used in a teaching - * environment. - * - * The basic definitions provided by genlib.h are: - * - * 1. Declarations for several new "primitive" types - * (most importantly bool and string) that are - * used throughout the other libraries and - * applications as fundamental types. - * - * 2. A new set of functions for memory allocation. - * - * 3. A function for error handling. - */ - -#ifndef _genlib_h -#define _genlib_h - -#include -#include -#include - -/* Section 1 -- Define new "primitive" types */ - -/* - * Type: bool - * ---------- - * This type has two values, FALSE and TRUE, which are equal to 0 - * and 1, respectively. Most of the advantage of defining this type - * comes from readability because it allows the programmer to - * provide documentation that a variable will take on only one of - * these two values. Designing a portable representation, however, - * is surprisingly hard, because many libraries and some compilers - * define these names. The definitions are usually compatible but - * may still be flagged as errors. - */ - -#ifdef THINK_C - typedef int bool; -#else -# ifdef TRUE -# ifndef bool -# define bool int -# endif -# else -# ifdef bool -# define FALSE 0 -# define TRUE 1 -# else - typedef enum {FALSE, TRUE} bool; -# endif -# endif -#endif - -/* - * Type: string - * ------------ - * The type string is identical to the type char *, which is - * traditionally used in C programs. The main point of defining a - * new type is to improve program readability. At the abstraction - * levels at which the type string is used, it is usually not - * important to take the string apart into its component characters. - * Declaring it as a string emphasizes this atomicity. - */ - -typedef char *string; - -/* - * Constant: UNDEFINED - * ------------------- - * Besides NULL, the only other constant of pointer type is - * UNDEFINED, which is used in certain packages as a special - * sentinel to indicate an undefined pointer value. In many - * such contexts, NULL is a legitimate data value and is - * therefore inappropriate as a sentinel. - */ - -#define UNDEFINED ((void *) undefined_object) - -extern char undefined_object[]; - -/* Section 2 -- Memory allocation */ - -/* - * General notes: - * -------------- - * These functions provide a common interface for memory - * allocation. All functions in the library that allocate - * memory do so using GetBlock and FreeBlock. Even though - * the ANSI standard defines malloc and free for the same - * purpose, using GetBlock and FreeBlock provides greater - * compatibility with non-ANSI implementations, automatic - * out-of-memory error detection, and the possibility of - * substituting a garbage-collecting allocator. - */ - -/* - * Function: GetBlock - * Usage: ptr = (type) GetBlock(nbytes); - * ------------------------------------- - * GetBlock allocates a block of memory of the given size. If - * no memory is available, GetBlock generates an error. - */ - -void *GetBlock(size_t nbytes); - -/* - * Function: FreeBlock - * Usage: FreeBlock(ptr); - * ---------------------- - * FreeBlock frees the memory associated with ptr, which must - * have been allocated using GetBlock, New, or NewArray. - */ - -void FreeBlock(void *ptr); - -/* - * Macro: New - * Usage: p = New(pointer-type); - * ----------------------------- - * The New pseudofunction allocates enough space to hold an - * object of the type to which pointer-type points and returns - * a pointer to the newly allocated pointer. Note that - * "New" is different from the "new" operator used in C++; - * the former takes a pointer type and the latter takes the - * target type. - */ - -#define New(type) ((type) GetBlock(sizeof *((type) NULL))) - -/* - * Macro: NewArray - * Usage: p = NewArray(n, element-type); - * ------------------------------------- - * NewArray allocates enough space to hold an array of n - * values of the specified element type. - */ - -#define NewArray(n, type) ((type *) GetBlock((n) * sizeof(type))) - -/* Section 3 -- Basic error handling */ - -/* - * Function: Error - * Usage: Error(msg, ...) - * ---------------------- - * Error generates an error string, expanding % constructions - * appearing in the error message string just as printf does. - * After printing the error message, the program terminates. - */ - -void Error(string msg, ...); - -#endif diff --git a/fftma_module/gen/LIBCS106X/random.c b/fftma_module/gen/LIBCS106X/random.c deleted file mode 100755 index 696312d..0000000 --- a/fftma_module/gen/LIBCS106X/random.c +++ /dev/null @@ -1,77 +0,0 @@ -/* - * File: random.c - * Version: 1.0 - * Last modified on Mon Sep 13 10:42:45 1993 by eroberts - * ----------------------------------------------------- - * This file implements the random.h interface. - */ - -#include -#include -#include - -#include "genlib.h" -#include "random.h" - -/* - * Function: Randomize - * ------------------- - * This function operates by setting the random number - * seed to the current time. The srand function is - * provided by the library and requires an - * integer argument. The time function is provided - * by . - */ - -void Randomize(void) -{ - srand((int) time(NULL)); -} - -/* - * Function: RandomInteger - * ----------------------- - * This function first obtains a random integer in - * the range [0..RAND_MAX] by applying four steps: - * (1) Generate a real number between 0 and 1. - * (2) Scale it to the appropriate range size. - * (3) Truncate the value to an integer. - * (4) Translate it to the appropriate starting point. - */ - -int RandomInteger(int low, int high) -{ - int k; - double d; - - d = (double) rand() / ((double) RAND_MAX + 1); - k = (int) (d * (high - low + 1)); - return (low + k); -} - -/* - * Function: RandomReal - * -------------------- - * The implementation of RandomReal is similar to that - * of RandomInteger, without the truncation step. - */ - -double RandomReal(double low, double high) -{ - double d; - - d = (double) rand() / ((double) RAND_MAX + 1); - return (low + d * (high - low)); -} - -/* - * Function: RandomChance - * ---------------------- - * This function uses RandomReal to generate a number - * between 0 and 100, which it then compares to p. - */ - -bool RandomChance(double p) -{ - return (RandomReal(0, 1) < p); -} diff --git a/fftma_module/gen/LIBCS106X/random.h b/fftma_module/gen/LIBCS106X/random.h deleted file mode 100755 index 881af5f..0000000 --- a/fftma_module/gen/LIBCS106X/random.h +++ /dev/null @@ -1,73 +0,0 @@ -/* - * File: random.h - * Version: 1.0 - * Last modified on Fri Jul 22 16:44:36 1994 by eroberts - * ----------------------------------------------------- - * This interface provides several functions for generating - * pseudo-random numbers. - */ - -#ifndef _random_h -#define _random_h - -#include "genlib.h" -#include - -/* - * Constant: RAND_MAX - * ------------------ - * Unfortunately, several libraries that supposedly conform to - * the ANSI standard do not define RAND_MAX in . To - * reduce portability problems, this interface defines RAND_MAX - * to be the largest positive integer if it is undefined. - */ - -#ifndef RAND_MAX -# define RAND_MAX ((int) ((unsigned) ~0 >> 1)) -#endif - -/* - * Function: Randomize - * Usage: Randomize(); - * ------------------- - * This function sets the random seed so that the random sequence - * is unpredictable. During the debugging phase, it is best not - * to call this function, so that program behavior is repeatable. - */ - -void Randomize(void); - -/* - * Function: RandomInteger - * Usage: n = RandomInteger(low, high); - * ------------------------------------ - * This function returns a random integer in the range low to high, - * inclusive. - */ - -int RandomInteger(int low, int high); - -/* - * Function: RandomReal - * Usage: d = RandomReal(low, high); - * --------------------------------- - * This function returns a random real number in the half-open - * interval [low .. high), meaning that the result is always - * greater than or equal to low but strictly less than high. - */ - -double RandomReal(double low, double high); - -/* - * Function: RandomChance - * Usage: if (RandomChance(p)) . . . - * --------------------------------- - * The RandomChance function returns TRUE with the probability - * indicated by p, which should be a floating-point number between - * 0 (meaning never) and 1 (meaning always). For example, calling - * RandomChance(.30) returns TRUE 30 percent of the time. - */ - -bool RandomChance(double p); - -#endif diff --git a/fftma_module/gen/LIBCS106X/scanadt.c b/fftma_module/gen/LIBCS106X/scanadt.c deleted file mode 100755 index bd887c5..0000000 --- a/fftma_module/gen/LIBCS106X/scanadt.c +++ /dev/null @@ -1,162 +0,0 @@ -/* - * File: scanadt.c - * --------------- - * This file implements the scanadt.h interface. - */ - -#include -#include -#include "genlib.h" -#include "strlib.h" -#include "scanadt.h" - -/* - * Type: scannerCDT - * ---------------- - * This structure is the concrete representation of the type - * scannerADT, which is exported by this interface. Its purpose - * is to maintain the state of the scanner between calls. The - * details of the representation are invisible to the client, - * but consist of the following fields: - * - * str -- Copy of string passed to SetScannerString - * len -- Length of string, saved for efficiency - * cp -- Current character position in the string - * savedToken -- String saved by SaveToken (NULL indicates none) - * spaceOption -- Setting of the space option extension - */ - -struct scannerCDT { - string str; - int len; - int cp; - string savedToken; - spaceOptionT spaceOption; -}; - -/* Private function prototypes */ - -static void SkipSpaces(scannerADT scanner); -static int ScanToEndOfIdentifier(scannerADT scanner); - -/* Exported entries */ - -scannerADT NewScanner(void) -{ - scannerADT scanner; - - scanner = New(scannerADT); - scanner->str = NULL; - scanner->spaceOption = PreserveSpaces; - return (scanner); -} - -void FreeScanner(scannerADT scanner) -{ - if (scanner->str != NULL) FreeBlock(scanner->str); - FreeBlock(scanner); -} - -void SetScannerString(scannerADT scanner, string str) -{ - if (scanner->str != NULL) FreeBlock(scanner->str); - scanner->str = CopyString(str); - scanner->len = StringLength(str); - scanner->cp = 0; - scanner->savedToken = NULL; -} - -string ReadToken(scannerADT scanner) -{ - char ch; - string token; - int start, finish; - - if (scanner->str == NULL) { - Error("SetScannerString has not been called"); - } - if (scanner->savedToken != NULL) { - token = scanner->savedToken; - scanner->savedToken = NULL; - return (token); - } - if (scanner->spaceOption == IgnoreSpaces) SkipSpaces(scanner); - start = finish = scanner->cp; - if (start >= scanner->len) return (CopyString("")); - ch = scanner->str[scanner->cp]; - if (isalnum(ch)) { - finish = ScanToEndOfIdentifier(scanner); - } else { - scanner->cp++; - } - return (SubString(scanner->str, start, finish)); -} - -bool MoreTokensExist(scannerADT scanner) -{ - if (scanner->str == NULL) { - Error("SetScannerString has not been called"); - } - if (scanner->savedToken != NULL) { - return (!StringEqual(scanner->savedToken, "")); - } - if (scanner->spaceOption == IgnoreSpaces) SkipSpaces(scanner); - return (scanner->cp < scanner->len); -} - -void SaveToken(scannerADT scanner, string token) -{ - if (scanner->str == NULL) { - Error("SetScannerString has not been called"); - } - if (scanner->savedToken != NULL) { - Error("Token has already been saved"); - } - scanner->savedToken = token; -} - -void SetScannerSpaceOption(scannerADT scanner, spaceOptionT option) -{ - scanner->spaceOption = option; -} - -spaceOptionT GetScannerSpaceOption(scannerADT scanner) -{ - return (scanner->spaceOption); -} - -/* Private functions */ - -/* - * Function: SkipSpaces - * Usage: SkipSpaces(scanner); - * --------------------------- - * This function advances the position of the scanner until the - * current character is not a whitespace character. - */ - -static void SkipSpaces(scannerADT scanner) -{ - while (isspace(scanner->str[scanner->cp])) { - scanner->cp++; - } -} - -/* - * Function: ScanToEndOfIdentifier - * Usage: finish = ScanToEndOfIdentifier(scanner); - * ----------------------------------------------- - * This function advances the position of the scanner until it - * reaches the end of a sequence of letters or digits that make - * up an identifier. The return value is the index of the last - * character in the identifier; the value of the stored index - * cp is the first character after that. - */ - -static int ScanToEndOfIdentifier(scannerADT scanner) -{ - while (isalnum(scanner->str[scanner->cp])) { - scanner->cp++; - } - return (scanner->cp - 1); -} diff --git a/fftma_module/gen/LIBCS106X/scanadt.h b/fftma_module/gen/LIBCS106X/scanadt.h deleted file mode 100755 index 1da09c3..0000000 --- a/fftma_module/gen/LIBCS106X/scanadt.h +++ /dev/null @@ -1,159 +0,0 @@ -/* - * File: scanadt.h - * --------------- - * This file is the interface to a module that exports an abstract - * data type to facilitate dividing a string into logical units - * called "tokens," which are either - * - * 1. Strings of consecutive letters and digits representing words - * 2. One-character strings representing punctuation or separators - * - * To use this package, you must first create an instance of a - * scannerADT by calling - * - * scanner = NewScanner(); - * - * All other calls to the scanner package take this variable as their - * first argument to identify a particular instance of the abstract - * scanner type. - * - * You initialize the scanner to hold a particular string by calling - * - * SetScannerString(scanner, str); - * - * where str is the string from which tokens should be read. To - * retrieve each individual token, you make the following call: - * - * token = ReadToken(scanner); - * - * To determine whether any tokens remain to be read, you can call - * the predicate function MoreTokensExist(scanner). The ReadToken - * function returns the empty string after the last token is read. - * - * The following code fragment serves as an idiom for processing - * each token in the string inputString: - * - * scanner = NewScanner(); - * SetScannerString(scanner, inputString); - * while (MoreTokensExist(scanner)) { - * token = ReadToken(scanner); - * . . . process the token . . . - * } - * - * This version of scanadt.h also supports the following extensions, - * which are documented later in the interface: - * - * SaveToken - * SetScannerSpaceOption - */ - -#ifndef _scanadt_h -#define _scanadt_h - -#include "genlib.h" - -/* - * Type: scannerADT - * ---------------- - * This type is the abstract type used to represent a single instance - * of a scanner. As with any abstract type, the details of the - * internal representation are hidden from the client. - */ - -typedef struct scannerCDT *scannerADT; - -/* - * Function: NewScanner - * Usage: scanner = NewScanner(); - * ------------------------------ - * This function creates a new scanner instance. All other functions - * in this interface take this scanner value as their first argument - * so that they can identify what particular instance of the scanner - * is in use. This design makes it possible for clients to have more - * than one scanner process active at the same time. - */ - -scannerADT NewScanner(void); - -/* - * Function: FreeScanner - * Usage: FreeScanner(scanner); - * ---------------------------- - * This function frees the storage associated with scanner. - */ - -void FreeScanner(scannerADT scanner); - -/* - * Function: SetScannerString - * Usage: SetScannerString(scanner, str); - * -------------------------------------- - * This function initializes the scanner so that it will start - * extracting tokens from the string str. - */ - -void SetScannerString(scannerADT scanner, string str); - -/* - * Function: ReadToken - * Usage: token = ReadToken(scanner); - * ---------------------------------- - * This function returns the next token from scanner. If - * ReadToken is called when no tokens are available, it returns - * the empty string. The token returned by ReadToken is always - * allocated in the heap, which means that clients can call - * FreeBlock when the token is no longer needed. - */ - -string ReadToken(scannerADT scanner); - -/* - * Function: MoreTokensExist - * Usage: if (MoreTokensExist(scanner)) . . . - * ------------------------------------------ - * This function returns TRUE as long as there are additional - * tokens for the scanner to read. - */ - -bool MoreTokensExist(scannerADT scanner); - -/* - * Function: SaveToken - * Usage: SaveToken(scanner, token); - * --------------------------------- - * This function stores the token in the scanner data structure - * in such a way that the next time ReadToken is called, it will - * return that token without reading any additional characters - * from the input. - */ - -void SaveToken(scannerADT scanner, string token); - -/* - * Functions: SetScannerSpaceOption, GetScannerSpaceOption - * Usage: SetScannerSpaceOption(scanner, option); - * option = GetScannerSpaceOption(scanner); - * ----------------------------------------------- - * The SetScannerSpaceOption function controls whether the scanner - * ignores whitespace characters or treats them as valid tokens. - * By default, the ReadToken function treats whitespace characters, - * such as spaces and tabs, just like any other punctuation mark. - * If, however, you call - * - * SetScannerSpaceOption(scanner, IgnoreSpaces); - * - * the scanner will skip over any white space before reading a token. - * You can restore the original behavior by calling - * - * SetScannerSpaceOption(scanner, PreserveSpaces); - * - * The GetScannerSpaceOption function returns the current setting - * of this option. - */ - -typedef enum { PreserveSpaces, IgnoreSpaces } spaceOptionT; - -void SetScannerSpaceOption(scannerADT scanner, spaceOptionT option); -spaceOptionT GetScannerSpaceOption(scannerADT scanner); - -#endif diff --git a/fftma_module/gen/LIBCS106X/simpio.c b/fftma_module/gen/LIBCS106X/simpio.c deleted file mode 100755 index 02e4025..0000000 --- a/fftma_module/gen/LIBCS106X/simpio.c +++ /dev/null @@ -1,157 +0,0 @@ -/* - * File: simpio.c - * Version: 1.0 - * Last modified on Fri Jul 15 14:10:41 1994 by eroberts - * ----------------------------------------------------- - * This file implements the simpio.h interface. - */ - -#include -#include - -#include "genlib.h" -#include "strlib.h" -#include "simpio.h" - -/* - * Constants: - * ---------- - * InitialBufferSize -- Initial buffer size for ReadLine - */ - -#define InitialBufferSize 120 - -/* Exported entries */ - -/* - * Functions: GetInteger, GetLong, GetReal - * --------------------------------------- - * These functions first read a line and then call sscanf to - * translate the number. Reading an entire line is essential to - * good error recovery, because the characters after the point of - * error would otherwise remain in the input buffer and confuse - * subsequent input operations. The sscanf line allows white space - * before and after the number but no other extraneous characters. - */ - -int GetInteger(void) -{ - string line; - int value; - char termch; - - while (TRUE) { - line = GetLine(); - switch (sscanf(line, " %d %c", &value, &termch)) { - case 1: - FreeBlock(line); - return (value); - case 2: - printf("Unexpected character: '%c'\n", termch); - break; - default: - printf("Please enter an integer\n"); - break; - } - FreeBlock(line); - printf("Retry: "); - } -} - -long GetLong(void) -{ - string line; - long value; - char termch; - - while (TRUE) { - line = GetLine(); - switch (sscanf(line, " %ld %c", &value, &termch)) { - case 1: - FreeBlock(line); - return (value); - case 2: - printf("Unexpected character: '%c'\n", termch); - break; - default: - printf("Please enter an integer\n"); - break; - } - FreeBlock(line); - printf("Retry: "); - } -} - -double GetReal(void) -{ - string line; - double value; - char termch; - - while (TRUE) { - line = GetLine(); - switch (sscanf(line, " %lf %c", &value, &termch)) { - case 1: - FreeBlock(line); - return (value); - case 2: - printf("Unexpected character: '%c'\n", termch); - break; - default: - printf("Please enter a real number\n"); - break; - } - FreeBlock(line); - printf("Retry: "); - } -} - -/* - * Function: GetLine - * ----------------- - * This function is a simple wrapper; all the work is done by - * ReadLine. - */ - -string GetLine(void) -{ - return (ReadLine(stdin)); -} - -/* - * Function: ReadLine - * ------------------ - * This function operates by reading characters from the file - * into a dynamically allocated buffer. If the buffer becomes - * full before the end of the line is reached, a new buffer - * twice the size of the previous one is allocated. - */ - -string ReadLine(FILE *infile) -{ - string line, nline; - int n, ch, size; - - n = 0; - size = InitialBufferSize; - line = GetBlock(size + 1); - while ((ch = getc(infile)) != '\n' && ch != EOF) { - if (n == size) { - size *= 2; - nline = (string) GetBlock(size + 1); - strncpy(nline, line, n); - FreeBlock(line); - line = nline; - } - line[n++] = ch; - } - if (n == 0 && ch == EOF) { - FreeBlock(line); - return (NULL); - } - line[n] = '\0'; - nline = (string) GetBlock(n + 1); - strcpy(nline, line); - FreeBlock(line); - return (nline); -} diff --git a/fftma_module/gen/LIBCS106X/simpio.h b/fftma_module/gen/LIBCS106X/simpio.h deleted file mode 100755 index ca1efc9..0000000 --- a/fftma_module/gen/LIBCS106X/simpio.h +++ /dev/null @@ -1,75 +0,0 @@ -/* - * File: simpio.h - * Version: 1.0 - * Last modified on Wed Apr 27 07:29:13 1994 by eroberts - * ----------------------------------------------------- - * This interface provides access to a simple package of - * functions that simplify the reading of input data. - */ - -#ifndef _simpio_h -#define _simpio_h - -#include "genlib.h" - -/* - * Function: GetInteger - * Usage: i = GetInteger(); - * ------------------------ - * GetInteger reads a line of text from standard input and scans - * it as an integer. The integer value is returned. If an - * integer cannot be scanned or if more characters follow the - * number, the user is given a chance to retry. - */ - -int GetInteger(void); - -/* - * Function: GetLong - * Usage: l = GetLong(); - * --------------------- - * GetLong reads a line of text from standard input and scans - * it as a long integer. The value is returned as a long. - * If an integer cannot be scanned or if more characters follow - * the number, the user is given a chance to retry. - */ - -long GetLong(void); - -/* - * Function: GetReal - * Usage: x = GetReal(); - * --------------------- - * GetReal reads a line of text from standard input and scans - * it as a double. If the number cannot be scanned or if extra - * characters follow after the number ends, the user is given - * a chance to reenter the value. - */ - -double GetReal(void); - -/* - * Function: GetLine - * Usage: s = GetLine(); - * --------------------- - * GetLine reads a line of text from standard input and returns - * the line as a string. The newline character that terminates - * the input is not stored as part of the string. - */ - -string GetLine(void); - -/* - * Function: ReadLine - * Usage: s = ReadLine(infile); - * ---------------------------- - * ReadLine reads a line of text from the input file and - * returns the line as a string. The newline character - * that terminates the input is not stored as part of the - * string. The ReadLine function returns NULL if infile - * is at the end-of-file position. - */ - -string ReadLine(FILE *infile); - -#endif diff --git a/fftma_module/gen/LIBCS106X/stack.c b/fftma_module/gen/LIBCS106X/stack.c deleted file mode 100755 index 8bd5ee4..0000000 --- a/fftma_module/gen/LIBCS106X/stack.c +++ /dev/null @@ -1,122 +0,0 @@ -/* - * File: stack.c - * ------------- - * This file implements the stack.h interface. Note that the - * implementation is independent of the type of value stored - * in the stack. That type is defined by the interface as - * the type name stackElementT. - */ - -#include -#include "genlib.h" -#include "stack.h" - -/* - * Constant: InitialStackSize - * -------------------------- - * This constant defines the initial size of the stack array. - * Any positive value will work correctly, although changing - * this parameter can affect performance. Making this value - * larger postpones the first reallocation but causes stacks - * to consume more memory. - */ - -#define InitialStackSize 100 - -/* - * Type: stackCDT - * -------------- - * The type stackCDT is the concrete representation of the type - * stackADT defined by the interface. In this implementation, - * the elements are stored in a dynamic array that doubles in - * size if the old stack becomes full. - */ - -struct stackCDT { - stackElementT *elements; - int count; - int size; -}; - -/* Private function prototypes */ - -static void ExpandStack(stackADT stack); - -/* Exported entries */ - -stackADT NewStack(void) -{ - stackADT stack; - - stack = New(stackADT); - stack->elements = NewArray(InitialStackSize, stackElementT); - stack->count = 0; - stack->size = InitialStackSize; - return (stack); -} - -void FreeStack(stackADT stack) -{ - FreeBlock(stack->elements); - FreeBlock(stack); -} - -void Push(stackADT stack, stackElementT element) -{ - if (stack->count == stack->size) ExpandStack(stack); - stack->elements[stack->count++] = element; -} - -stackElementT Pop(stackADT stack) -{ - if (StackIsEmpty(stack)) Error("Pop of an empty stack"); - return (stack->elements[--stack->count]); -} - -bool StackIsEmpty(stackADT stack) -{ - return (stack->count == 0); -} - -bool StackIsFull(stackADT stack) -{ - return (FALSE); -} - -int StackDepth(stackADT stack) -{ - return (stack->count); -} - -stackElementT GetStackElement(stackADT stack, int index) -{ - if (index < 0 || index >= stack->count) { - Error("Non-existent stack element"); - } - return (stack->elements[stack->count - index - 1]); -} - -/* Private functions */ - -/* Function: ExpandStack - * Usage: ExpandStack(stack); - * -------------------------- - * This function expands a full stack by doubling the size of its - * dynamic array, copying the old elements to the new array, and - * then freeing the old array storage. - */ - -static void ExpandStack(stackADT stack) -{ - stackElementT *array; - int i, newSize; - - newSize = stack->size * 2; - array = NewArray(newSize, stackElementT); - for (i = 0; i < stack->size; i++) { - array[i] = stack->elements[i]; - } - FreeBlock(stack->elements); - stack->elements = array; - stack->size = newSize; -} diff --git a/fftma_module/gen/LIBCS106X/stack.h b/fftma_module/gen/LIBCS106X/stack.h deleted file mode 100755 index 2f765d1..0000000 --- a/fftma_module/gen/LIBCS106X/stack.h +++ /dev/null @@ -1,115 +0,0 @@ -/* - * File: stack.h - * ------------- - * This interface defines an abstraction for stacks. In any - * single application that uses this interface, the values in - * the stack are constrained to a single type, although it - * is easy to change that type by changing the definition of - * stackElementT in this interface. - */ - -#ifndef _stack_h -#define _stack_h - -#include "genlib.h" - -/* - * Type: stackElementT - * ------------------- - * The type stackElementT is used in this interface to indicate - * the type of values that can be stored in the stack. Here the - * stack is used to store values of type double, but that can - * be changed by editing this definition line. - */ - -typedef void *stackElementT; - -/* - * Type: stackADT - * -------------- - * The type stackADT represents the abstract type used to store - * the elements that have been pushed. Because stackADT is - * defined only as a pointer to a concrete structure that is not - * itself defined in the interface, clients have no access to - * the underlying fields. - */ - -typedef struct stackCDT *stackADT; - -/* - * Function: NewStack - * Usage: stack = NewStack(); - * -------------------------- - * This function allocates and returns a new stack, which is - * initially empty. - */ - -stackADT NewStack(void); - -/* - * Function: FreeStack - * Usage: FreeStack(stack); - * ------------------------ - * This function frees the storage associated with the stack. - */ - -void FreeStack(stackADT stack); - -/* - * Function: Push - * Usage: Push(stack, element); - * ---------------------------- - * This function pushes the specified element onto the stack. - */ - -void Push(stackADT stack, stackElementT element); - -/* - * Function: Pop - * Usage: element = Pop(stack); - * ---------------------------- - * This function pops the top element from the stack and returns - * that value. The first value popped is always the last one - * that was pushed. If the stack is empty when Pop is called, - * the function calls Error with an appropriate message. - */ - -stackElementT Pop(stackADT stack); - -/* - * Functions: StackIsEmpty, StackIsFull - * Usage: if (StackIsEmpty(stack)) . . . - * if (StackIsFull(stack)) . . . - * ------------------------------------- - * This functions test whether the stack is empty or full. - */ - -bool StackIsEmpty(stackADT stack); -bool StackIsFull(stackADT stack); - -/* - * Function: StackDepth - * Usage: depth = StackDepth(stack); - * --------------------------------- - * This function returns the number of elements currently pushed - * on the stack. - */ - -int StackDepth(stackADT stack); - -/* - * Function: GetStackElement - * Usage: element = GetStackElement(stack, index); - * ----------------------------------------------- - * This function returns the element at the specified index in - * the stack, where the top of the stack is defined as index 0. - * For example, calling GetStackElement(stack, 0) returns the top - * element on the stack without removing it. If the caller tries - * to select an out-of-range element, GetStackElement calls Error. - * Note: This function is not a fundamental stack operation and - * is instead provided principally to facilitate debugging. - */ - -stackElementT GetStackElement(stackADT stack, int index); - -#endif diff --git a/fftma_module/gen/LIBCS106X/strlib.c b/fftma_module/gen/LIBCS106X/strlib.c deleted file mode 100755 index 6f00938..0000000 --- a/fftma_module/gen/LIBCS106X/strlib.c +++ /dev/null @@ -1,246 +0,0 @@ -/* - * File: strlib.c - * Version: 1.0 - * Last modified on Fri Jul 15 14:10:41 1994 by eroberts - * ----------------------------------------------------- - * This file implements the strlib.h interface. - */ - -/* - * General implementation notes: - * ----------------------------- - * This module implements the strlib library by mapping all - * functions into the appropriate calls to the ANSI - * interface. The implementations of the individual functions - * are all quite simple and do not require individual comments. - * For descriptions of the behavior of each function, see the - * interface. - */ - -#include -#include -#include - -#include "genlib.h" -#include "strlib.h" - -/* - * Constant: MaxDigits - * ------------------- - * This constant must be larger than the maximum - * number of digits that can appear in a number. - */ - -#define MaxDigits 30 - -/* Private function prototypes */ - -static string CreateString(int len); - -/* Section 1 -- Basic string operations */ - -string Concat(string s1, string s2) -{ - string s; - int len1, len2; - - if (s1 == NULL || s2 == NULL) { - Error("NULL string passed to Concat"); - } - len1 = strlen(s1); - len2 = strlen(s2); - s = CreateString(len1 + len2); - strcpy(s, s1); - strcpy(s + len1, s2); - return (s); -} - -char IthChar(string s, int i) -{ - int len; - - if (s == NULL) Error("NULL string passed to IthChar"); - len = strlen(s); - if (i < 0 || i > len) { - Error("Index outside of string range in IthChar"); - } - return (s[i]); -} - -string SubString(string s, int p1, int p2) -{ - int len; - string result; - - if (s == NULL) Error("NULL string passed to SubString"); - len = strlen(s); - if (p1 < 0) p1 = 0; - if (p2 >= len) p2 = len - 1; - len = p2 - p1 + 1; - if (len < 0) len = 0; - result = CreateString(len); - strncpy(result, s + p1, len); - result[len] = '\0'; - return (result); -} - -string CharToString(char ch) -{ - string result; - - result = CreateString(1); - result[0] = ch; - result[1] = '\0'; - return (result); -} - -int StringLength(string s) -{ - if (s == NULL) Error("NULL string passed to StringLength"); - return (strlen(s)); -} - -string CopyString(string s) -{ - string newstr; - - if (s == NULL) Error("NULL string passed to CopyString"); - newstr = CreateString(strlen(s)); - strcpy(newstr, s); - return (newstr); -} - -/* Section 2 -- String comparison functions */ - -bool StringEqual(string s1, string s2) -{ - if (s1 == NULL || s2 == NULL) { - Error("NULL string passed to StringEqual"); - } - return (strcmp(s1, s2) == 0); -} - -int StringCompare(string s1, string s2) -{ - if (s1 == NULL || s2 == NULL) { - Error("NULL string passed to StringCompare"); - } - return (strcmp(s1, s2)); -} - -/* Section 3 -- Search functions */ - -int FindChar(char ch, string text, int start) -{ - char *cptr; - - if (text == NULL) Error("NULL string passed to FindChar"); - if (start < 0) start = 0; - if (start > strlen(text)) return (-1); - cptr = strchr(text + start, ch); - if (cptr == NULL) return (-1); - return ((int) (cptr - text)); -} - -int FindString(string str, string text, int start) -{ - char *cptr; - - if (str == NULL) Error("NULL pattern string in FindString"); - if (text == NULL) Error("NULL text string in FindString"); - if (start < 0) start = 0; - if (start > strlen(text)) return (-1); - cptr = strstr(text + start, str); - if (cptr == NULL) return (-1); - return ((int) (cptr - text)); -} - -/* Section 4 -- Case-conversion functions */ - -string ConvertToLowerCase(string s) -{ - string result; - int i; - - if (s == NULL) { - Error("NULL string passed to ConvertToLowerCase"); - } - result = CreateString(strlen(s)); - for (i = 0; s[i] != '\0'; i++) result[i] = tolower(s[i]); - result[i] = '\0'; - return (result); -} - -string ConvertToUpperCase(string s) -{ - string result; - int i; - - if (s == NULL) { - Error("NULL string passed to ConvertToUpperCase"); - } - result = CreateString(strlen(s)); - for (i = 0; s[i] != '\0'; i++) result[i] = toupper(s[i]); - result[i] = '\0'; - return (result); -} - -/* Section 5 -- Functions for converting numbers to strings */ - -string IntegerToString(int n) -{ - char buffer[MaxDigits]; - - sprintf(buffer, "%d", n); - return (CopyString(buffer)); -} - -int StringToInteger(string s) -{ - int result; - char dummy; - - if (s == NULL) { - Error("NULL string passed to StringToInteger"); - } - if (sscanf(s, " %d %c", &result, &dummy) != 1) { - Error("StringToInteger called on illegal number %s", s); - } - return (result); -} - -string RealToString(double d) -{ - char buffer[MaxDigits]; - - sprintf(buffer, "%G", d); - return (CopyString(buffer)); -} - -double StringToReal(string s) -{ - double result; - char dummy; - - if (s == NULL) Error("NULL string passed to StringToReal"); - if (sscanf(s, " %lg %c", &result, &dummy) != 1) { - Error("StringToReal called on illegal number %s", s); - } - return (result); -} - -/* Private functions */ - -/* - * Function: CreateString - * Usage: s = CreateString(len); - * ----------------------------- - * This function dynamically allocates space for a string of - * len characters, leaving room for the null character at the - * end. - */ - -static string CreateString(int len) -{ - return ((string) GetBlock(len + 1)); -} diff --git a/fftma_module/gen/LIBCS106X/strlib.h b/fftma_module/gen/LIBCS106X/strlib.h deleted file mode 100755 index 796d1d4..0000000 --- a/fftma_module/gen/LIBCS106X/strlib.h +++ /dev/null @@ -1,243 +0,0 @@ -/* - * File: strlib.h - * Version: 1.0 - * Last modified on Fri Jul 15 14:10:40 1994 by eroberts - * ----------------------------------------------------- - * The strlib.h file defines the interface for a simple - * string library. In the context of this package, strings - * are considered to be an abstract data type, which means - * that the client relies only on the operations defined for - * the type and not on the underlying representation. - */ - -/* - * Cautionary note: - * ---------------- - * Although this interface provides an extremely convenient - * abstraction for working with strings, it is not appropriate - * for all applications. In this interface, the functions that - * return string values (such as Concat and SubString) do so - * by allocating new memory. Over time, a program that uses - * this package will consume increasing amounts of memory - * and eventually exhaust the available supply. If you are - * writing a program that runs for a short time and stops, - * the fact that the package consumes memory is not a problem. - * If, however, you are writing an application that must run - * for an extended period of time, using this package requires - * that you make some provision for freeing any allocated - * storage. - */ - -#ifndef _strlib_h -#define _strlib_h - -#include "genlib.h" - -/* Section 1 -- Basic string operations */ - -/* - * Function: Concat - * Usage: s = Concat(s1, s2); - * -------------------------- - * This function concatenates two strings by joining them end - * to end. For example, Concat("ABC", "DE") returns the string - * "ABCDE". - */ - -string Concat(string s1, string s2); - -/* - * Function: IthChar - * Usage: ch = IthChar(s, i); - * -------------------------- - * This function returns the character at position i in the - * string s. It is included in the library to make the type - * string a true abstract type in the sense that all of the - * necessary operations can be invoked using functions. Calling - * IthChar(s, i) is like selecting s[i], except that IthChar - * checks to see if i is within the range of legal index - * positions, which extend from 0 to StringLength(s). - * IthChar(s, StringLength(s)) returns the null character - * at the end of the string. - */ - -char IthChar(string s, int i); - -/* - * Function: SubString - * Usage: t = SubString(s, p1, p2); - * -------------------------------- - * SubString returns a copy of the substring of s consisting - * of the characters between index positions p1 and p2, - * inclusive. The following special cases apply: - * - * 1. If p1 is less than 0, it is assumed to be 0. - * 2. If p2 is greater than the index of the last string - * position, which is StringLength(s) - 1, then p2 is - * set equal to StringLength(s) - 1. - * 3. If p2 < p1, SubString returns the empty string. - */ - -string SubString(string s, int p1, int p2); - -/* - * Function: CharToString - * Usage: s = CharToString(ch); - * ---------------------------- - * This function takes a single character and returns a - * one-character string consisting of that character. The - * CharToString function is useful, for example, if you - * need to concatenate a string and a character. Since - * Concat requires two strings, you must first convert - * the character into a string. - */ - -string CharToString(char ch); - -/* - * Function: StringLength - * Usage: len = StringLength(s); - * ----------------------------- - * This function returns the length of s. - */ - -int StringLength(string s); - -/* - * Function: CopyString - * Usage: newstr = CopyString(s); - * ------------------------------ - * CopyString copies the string s into dynamically allocated - * storage and returns the new string. This function is not - * ordinarily required if this package is used on its own, - * but is often necessary when you are working with more than - * one string package. - */ - -string CopyString(string s); - -/* Section 2 -- String comparison functions */ - -/* - * Function: StringEqual - * Usage: if (StringEqual(s1, s2)) ... - * ----------------------------------- - * This function returns TRUE if the strings s1 and s2 are - * equal. For the strings to be considered equal, every - * character in one string must precisely match the - * corresponding character in the other. Uppercase and - * lowercase characters are considered to be different. - */ - -bool StringEqual(string s1, string s2); - -/* - * Function: StringCompare - * Usage: if (StringCompare(s1, s2) < 0) ... - * ----------------------------------------- - * This function returns a number less than 0 if string s1 - * comes before s2 in alphabetical order, 0 if they are equal, - * and a number greater than 0 if s1 comes after s2. The - * ordering is determined by the internal representation used - * for characters, which is usually ASCII. - */ - -int StringCompare(string s1, string s2); - -/* Section 3 -- Search functions */ - -/* - * Function: FindChar - * Usage: p = FindChar(ch, text, start); - * ------------------------------------- - * Beginning at position start in the string text, this - * function searches for the character ch and returns the - * first index at which it appears or -1 if no match is - * found. - */ - -int FindChar(char ch, string text, int start); - -/* - * Function: FindString - * Usage: p = FindString(str, text, start); - * ---------------------------------------- - * Beginning at position start in the string text, this - * function searches for the string str and returns the - * first index at which it appears or -1 if no match is - * found. - */ - -int FindString(string str, string text, int start); - -/* Section 4 -- Case-conversion functions */ - -/* - * Function: ConvertToLowerCase - * Usage: s = ConvertToLowerCase(s); - * --------------------------------- - * This function returns a new string with all - * alphabetic characters converted to lower case. - */ - -string ConvertToLowerCase(string s); - -/* - * Function: ConvertToUpperCase - * Usage: s = ConvertToUpperCase(s); - * --------------------------------- - * This function returns a new string with all - * alphabetic characters converted to upper case. - */ - -string ConvertToUpperCase(string s); - -/* Section 5 -- Functions for converting numbers to strings */ - -/* - * Function: IntegerToString - * Usage: s = IntegerToString(n); - * ------------------------------ - * This function converts an integer into the corresponding - * string of digits. For example, IntegerToString(123) - * returns "123" as a string. - */ - -string IntegerToString(int n); - -/* - * Function: StringToInteger - * Usage: n = StringToInteger(s); - * ------------------------------ - * This function converts a string of digits into an integer. - * If the string is not a legal integer or contains extraneous - * characters, StringToInteger signals an error condition. - */ - -int StringToInteger(string s); - -/* - * Function: RealToString - * Usage: s = RealToString(d); - * --------------------------- - * This function converts a floating-point number into the - * corresponding string form. For example, calling - * RealToString(23.45) returns "23.45". The conversion is - * the same as that used for "%G" format in printf. - */ - -string RealToString(double d); - -/* - * Function: StringToReal - * Usage: d = StringToReal(s); - * --------------------------- - * This function converts a string representing a real number - * into its corresponding value. If the string is not a - * legal floating-point number or if it contains extraneous - * characters, StringToReal signals an error condition. - */ - -double StringToReal(string s); - -#endif diff --git a/fftma_module/gen/LIBCS106X/symtab.c b/fftma_module/gen/LIBCS106X/symtab.c deleted file mode 100755 index 6e27a10..0000000 --- a/fftma_module/gen/LIBCS106X/symtab.c +++ /dev/null @@ -1,180 +0,0 @@ -/* - * File: symtab.c - * -------------- - * This file implements the symbol table abstraction. - */ - -#include -#include "genlib.h" -#include "strlib.h" -#include "symtab.h" - -/* - * Constants - * --------- - * NBuckets -- Number of buckets in the hash table - */ - -#define NBuckets 101 - -/* - * Type: cellT - * ----------- - * This type defines a linked list cell for the symbol table. - */ - -typedef struct cellT { - string key; - void *value; - struct cellT *link; -} cellT; - -/* - * Type: symtabCDT - * --------------- - * This type defines the underlying concrete representation for a - * symtabADT. These details are not relevant to and therefore - * not exported to the client. In this implementation, the - * underlying structure is a hash table organized as an array of - * "buckets," in which each bucket is a linked list of elements - * that share the same hash code. - */ - -struct symtabCDT { - cellT *buckets[NBuckets]; -}; - -/* Private function declarations */ - -static void FreeBucketChain(cellT *cp); -static cellT *FindCell(cellT *cp, string s); -static int Hash(string s, int nBuckets); - -/* Public entries */ - -symtabADT NewSymbolTable(void) -{ - symtabADT table; - int i; - - table = New(symtabADT); - for (i = 0; i < NBuckets; i++) { - table->buckets[i] = NULL; - } - return (table); -} - -void FreeSymbolTable(symtabADT table) -{ - int i; - - for (i = 0; i < NBuckets; i++) { - FreeBucketChain(table->buckets[i]); - } - FreeBlock(table); -} - -void Enter(symtabADT table, string key, void *value) -{ - int bucket; - cellT *cp; - - bucket = Hash(key, NBuckets); - cp = FindCell(table->buckets[bucket], key); - if (cp == NULL) { - cp = New(cellT *); - cp->key = CopyString(key); - cp->link = table->buckets[bucket]; - table->buckets[bucket] = cp; - } - cp->value = value; -} - -void *Lookup(symtabADT table, string key) -{ - int bucket; - cellT *cp; - - bucket = Hash(key, NBuckets); - cp = FindCell(table->buckets[bucket], key); - if (cp == NULL) return(UNDEFINED); - return (cp->value); -} - -void MapSymbolTable(symtabFnT fn, symtabADT table, - void *clientData) -{ - int i; - cellT *cp; - - for (i = 0; i < NBuckets; i++) { - for (cp = table->buckets[i]; cp != NULL; cp = cp->link) { - fn(cp->key, cp->value, clientData); - } - } -} - -/* Private functions */ - -/* - * Function: FreeBucketChain - * Usage: FreeBucketChain(cp); - * --------------------------- - * This function takes a chain pointer and frees all the cells - * in that chain. Because the package makes copies of the keys, - * this function must free the string storage as well. - */ - -static void FreeBucketChain(cellT *cp) -{ - cellT *next; - - while (cp != NULL) { - next = cp->link; - FreeBlock(cp->key); - FreeBlock(cp); - cp = next; - } -} - -/* - * Function: FindCell - * Usage: cp = FindCell(cp, key); - * ------------------------------ - * This function finds a cell in the chain beginning at cp that - * matches key. If a match is found, a pointer to that cell is - * returned. If no match is found, the function returns NULL. - */ - -static cellT *FindCell(cellT *cp, string key) -{ - while (cp != NULL && !StringEqual(cp->key, key)) { - cp = cp->link; - } - return (cp); -} - -/* - * Function: Hash - * Usage: bucket = Hash(key, nBuckets); - * ------------------------------------ - * This function takes the key and uses it to derive a hash code, - * which is an integer in the range [0, nBuckets - 1]. The hash - * code is computed using a method called linear congruence. The - * choice of the value for Multiplier can have a significant effect - * on the performance of the algorithm, but not on its correctness. - */ - -#define Multiplier -1664117991L - -static int Hash(string s, int nBuckets) -{ - int i; - unsigned long hashcode; - - hashcode = 0; - for (i = 0; s[i] != '\0'; i++) { - hashcode = hashcode * Multiplier + s[i]; - } - return (hashcode % nBuckets); -} diff --git a/fftma_module/gen/LIBCS106X/symtab.h b/fftma_module/gen/LIBCS106X/symtab.h deleted file mode 100755 index c83c307..0000000 --- a/fftma_module/gen/LIBCS106X/symtab.h +++ /dev/null @@ -1,85 +0,0 @@ -/* - * File: symtab.h - * -------------- - * This interface exports a simple symbol table abstraction. - */ - -#ifndef _symtab_h -#define _symtab_h - -#include "genlib.h" - -/* - * Type: symtabADT - * --------------- - * This type is the ADT used to represent a symbol table. - */ - -typedef struct symtabCDT *symtabADT; - -/* - * Type: symtabFnT - * --------------- - * This type defines the class of functions that can be used to - * map over the entries in a symbol table. - */ - -typedef void (*symtabFnT)(string key, void *value, - void *clientData); - -/* Exported entries */ - -/* - * Function: NewSymbolTable - * Usage: table = NewSymbolTable(); - * -------------------------------- - * This function allocates a new symbol table with no entries. - */ - -symtabADT NewSymbolTable(void); - -/* - * Function: FreeSymbolTable - * Usage: FreeSymbolTable(table); - * ------------------------------ - * This function frees the storage associated with the symbol table. - */ - -void FreeSymbolTable(symtabADT table); - -/* - * Function: Enter - * Usage: Enter(table, key, value); - * -------------------------------- - * This function associates key with value in the symbol table. - * Each call to Enter supersedes any previous definition for key. - */ - -void Enter(symtabADT table, string key, void *value); - -/* - * Function: Lookup - * Usage: value = Lookup(table, key); - * ---------------------------------- - * This function returns the value associated with key in the symbol - * table, or UNDEFINED, if no such value exists. - */ - -void *Lookup(symtabADT table, string key); - -/* - * Function: MapSymbolTable - * Usage: MapSymbolTable(fn, table, clientData); - * --------------------------------------------- - * This function goes through every entry in the symbol table - * and calls the function fn, passing it the following arguments: - * the current key, its associated value, and the clientData - * pointer. The clientData pointer allows the client to pass - * additional state information to the function fn, if necessary. - * If no clientData argument is required, this value should be NULL. - */ - -void MapSymbolTable(symtabFnT fn, symtabADT table, - void *clientData); - -#endif diff --git a/fftma_module/gen/LIBFFTMA/._.DS_Store b/fftma_module/gen/LIBFFTMA/._.DS_Store deleted file mode 100755 index c9474ea62235481b7d27ae5a878d2b4070bc6e05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 82 jcmZQz6=P>$V!#9-F-{;h0%8Rq2JwS{7!DlZEK~*nFE;@e diff --git a/fftma_module/gen/LIBFFTMA/Makefile.libFFTMA b/fftma_module/gen/LIBFFTMA/Makefile.libFFTMA deleted file mode 100755 index a492b20..0000000 --- a/fftma_module/gen/LIBFFTMA/Makefile.libFFTMA +++ /dev/null @@ -1,30 +0,0 @@ - -######################################################################## -# -# Makefile for library -# -######################################################################## - - -INTERFACE = ../include -INCLUDE = -I${INTERFACE} -LIBS = -lm -L../lib -CC = cc -CCFLAGS = - -LIB = libFFTMA_${ARCH}.a - -NOBJS= gammf.o fftma.o addstat.o axes.o cgrid.o covariance.o fourt.o length.o maxfactor.o test_fact.o cov_value.o generate.o gasdev.o ran2.o stable.o gaussian.o power.o cubic.o spherical.o nugget.o exponential.o cardsin.o nor2log.o - - -.c.o: - ${CC} $(INCLUDE) $(CCFLAGS) -c $< - -# LIBRARY -$(LIB) : $(NOBJS) - ar cr $(LIB) $(NOBJS) - ranlib $(LIB) - -clean : - rm *.o - diff --git a/fftma_module/gen/LIBFFTMA/addstat.c b/fftma_module/gen/LIBFFTMA/addstat.c deleted file mode 100755 index ffcb781..0000000 --- a/fftma_module/gen/LIBFFTMA/addstat.c +++ /dev/null @@ -1,106 +0,0 @@ -#include -#include -#include "geostat.h" -#include "genlib.h" - - -/*addstat */ -/*adds mean and variance effects to the N(0,1) realization*/ -/*input: */ -/*realin: structure defining a realization - */ -/* must have zeio mean and unit variance */ -/*stat: structure defining the mean and variance */ -/*output: */ -/*realout: structure defining a realization - */ -void addstat(struct realization_mod *realin,struct statistic_mod stat ,struct realization_mod *realout) - -{ - - int i,nblockm,nblockv; - double r,moy,var; - - /*Is the output realization allocated ?*/ - /*is its length equal to realin.n?*/ - if ((*realout).vector == NULL || (*realout).n != (*realin).n) { - (*realout).vector = (double *) malloc((*realin).n * sizeof(double)); - if ((*realout).vector == NULL) - Error("No memory available"); - } - (*realout).n = (*realin).n; - - - /*test over the input realization*/ - switch ((*realin).code) { - case 0: - case 1: - (*realout).code = 2; - break; - case 6: - (*realout).code = 7; - break; - default: - (*realout).code = (*realin).code; - break; - } - - for (i = 0; i < (*realin).n; i++) { - - - /*mean*/ - switch (stat.nblock_mean) { - case 1: - /*stationary case*/ - nblockm = 1; - break; - default: - /*number of the cell - nonstationary case*/ - nblockm = i+1; - break; - } - - - /*variance*/ - switch (stat.nblock_var) { - case 1: - /*stationary case*/ - nblockv = 1; - break; - default: - /*number of the cell - nonstationary case*/ - nblockv = i+1; - break; - } - - - switch (stat.type) { - case 0: - /*normal case*/ - moy = stat.mean[nblockm-1]; - var = stat.variance[nblockv-1]; - break; - case 1: - /*lognormal (natural) case*/ - r = (double)sqrt(stat.variance[nblockv-1])/stat.mean[nblockm-1]; - r *= r; - moy = (double)log(stat.mean[nblockm-1]/sqrt(1.0+r)); - var = (double)log(1.0+r); - break; - case 2: - /*lognormal (log10) case*/ - r = (double)sqrt(stat.variance[nblockv-1])/stat.mean[nblockm-1]; - r *= r; - moy = (double)log10(stat.mean[nblockm-1]/sqrt(1.0+r)); - var = (double)log10(1.0+r); - break; - default: - Error("Type not defined in addstat"); - break; - } - - - - (*realout).vector[i] = (double)sqrt(var)*(*realin).vector[i]+moy; - } - - return; -} diff --git a/fftma_module/gen/LIBFFTMA/axes.c b/fftma_module/gen/LIBFFTMA/axes.c deleted file mode 100755 index b9e8351..0000000 --- a/fftma_module/gen/LIBFFTMA/axes.c +++ /dev/null @@ -1,41 +0,0 @@ -#include -#include - -/*normalizes anisotropy axes*/ -void axes(double *ap,double *scf,int N) -{ - double sclpdt, r, eps = 1.E-6; - int i,j,k; - - - for (k = 0; k < N; k++) { - - r = sqrt(ap[9*k]*ap[9*k]+ap[9*k+1]*ap[9*k+1]+ap[9*k+2]*ap[9*k+2]); - ap[9*k] /= r; - ap[9*k+1] /= r; - ap[9*k+2] /= r; - sclpdt = ap[9*k]*ap[9*k+3]+ap[9*k+1]*ap[9*k+4]+ap[9*k+2]*ap[9*k+5]; - if (sclpdt > eps) { - printf("Non orthogonal axes"); - exit; - } else { - r = sqrt(ap[9*k+3]*ap[9*k+3]+ap[9*k+4]*ap[9*k+4]+ap[9*k+5]*ap[9*k+5]); - ap[9*k+3] /= r; - ap[9*k+4] /= r; - ap[9*k+5] /= r; - ap[9*k+6] = ap[9*k+1]*ap[9*k+5]-ap[9*k+2]*ap[9*k+4]; - ap[9*k+7] = ap[9*k+2]*ap[9*k+3]-ap[9*k]*ap[9*k+5]; - ap[9*k+8] = ap[9*k]*ap[9*k+4]-ap[9*k+1]*ap[9*k+3]; - for (i=0; i<3; i++) { - for (j=0; j<3; j++) { - if (scf[3*k+j] == 0.) - scf[3*k+j] = 1.; - ap[9*k+3*j+i] /= scf[3*k+j]; - } - } - } - - } - return; -} - diff --git a/fftma_module/gen/LIBFFTMA/cardsin.c b/fftma_module/gen/LIBFFTMA/cardsin.c deleted file mode 100755 index 504f286..0000000 --- a/fftma_module/gen/LIBFFTMA/cardsin.c +++ /dev/null @@ -1,18 +0,0 @@ -#include -#include -#include "genlib.h" - -/*cardsin covariance function*/ -double cardsin(double h) -{ - float delta = 20.371; - double z; - - if (h != 0) { - z = (double)(h*delta); - z = sin(z)/z; - } else { - z = 1.; - } - return(z); -} diff --git a/fftma_module/gen/LIBFFTMA/cgrid.c b/fftma_module/gen/LIBFFTMA/cgrid.c deleted file mode 100755 index 19baee0..0000000 --- a/fftma_module/gen/LIBFFTMA/cgrid.c +++ /dev/null @@ -1,43 +0,0 @@ -#include -#include "geostat.h" - - -/*computes the size of the grid for FFTs*/ -/*input: */ -/*variogram: structure defining the variogram model*/ -/*grid: structure defining the actual grid */ -/*output: */ -/*n: vector with the number of cells along the */ -/* X, Y and Z axes for the underlying grid */ -/* i = [0 1 2] */ -void cgrid(struct vario_mod variogram, struct grid_mod grid, int n[3]) -{ - int i,N; - double D; - - if (n == NULL || n[0] == 0 || n[1] == 0 || n[2] == 0) { - for (i = 0; i<3; i++) { - switch (i) { - case 0: - N = grid.NX; - D = grid.DX; - break; - case 1: - N = grid.NY; - D = grid.DY; - break; - case 2: - N = grid.NZ; - D = grid.DZ; - break; - } - n[i] = length(N,i,variogram.scf,variogram.ap,D,variogram.Nvario); - } - } else { - if ((n[0] -#include "geostat.h" -#include "genlib.h" - -/*selection of model covariance*/ -double cov_value(struct vario_mod variogram,double di,double dj,double dk) -{ - double hx,hy,hz,h; - double cov; - int k; - - - cov = 0.; - - for (k = 0; k < variogram.Nvario; k++) { - - hx = di*variogram.ap[9*k]+dj*variogram.ap[9*k+1]+dk*variogram.ap[9*k+2]; - hy = di*variogram.ap[9*k+3]+dj*variogram.ap[9*k+4]+dk*variogram.ap[9*k+5]; - hz = di*variogram.ap[9*k+6]+dj*variogram.ap[9*k+7]+dk*variogram.ap[9*k+8]; - h = sqrt(hx*hx+hy*hy+hz*hz); - - - switch (variogram.vario[k]) { - case 1: - cov += variogram.var[k]*exponential(h); - break; - case 2: - cov += variogram.var[k]*gaussian(h); - break; - case 3: - cov += variogram.var[k]*spherical(h); - break; - case 4: - cov += variogram.var[k]*cardsin(h); - break; - case 5: - cov += variogram.var[k]*stable(h,variogram.alpha[k]); - break; - case 6: - cov += variogram.var[k]*gammf(h,variogram.alpha[k]); - break; - case 7: - cov += variogram.var[k]*cubic(h); - break; - case 8: - cov += variogram.var[k]*nugget(h); - break; - case 9: - cov += variogram.var[k]*power(h,variogram.alpha[k]); - break; - } - } - - return (cov); -} diff --git a/fftma_module/gen/LIBFFTMA/covariance.c b/fftma_module/gen/LIBFFTMA/covariance.c deleted file mode 100755 index 4678b2a..0000000 --- a/fftma_module/gen/LIBFFTMA/covariance.c +++ /dev/null @@ -1,90 +0,0 @@ -#include "geostat.h" - -/*builds the sampled covariance function*/ -/*dimensions are even*/ -void covariance(double *covar, struct vario_mod variogram, struct grid_mod mesh, int n[3]) - -{ - int i,j,k,maille,n2[3],symmetric; - double di,dj,dk; - - - for (i=0;i<3;i++) - n2[i] = n[i]/2; - - for (i=0; i<= n2[0]; i++) { - for (j=0; j<= n2[1]; j++) { - for (k=0; k<= n2[2]; k++) { - - - /*area 1*/ - maille = 1+i+n[0]*(j+n[1]*k); - di = (double)i*mesh.DX; - dj = (double)j*mesh.DY; - dk = (double)k*mesh.DZ; - covar[maille] = (double)cov_value(variogram,di,dj,dk); - - - if (k > 0 && k 0 && j 0 && i 0 && i 0 && k 0 && j 0 && i 0 && j < n2[1]) { - /*area 5*/ - di = -(double)i*mesh.DX; - dj = -(double)j*mesh.DY; - dk = (double)k*mesh.DZ; - maille = 1+(n[0]-i)+n[0]*(n[1]-j+n[1]*k); - covar[maille] = (double)cov_value(variogram,di,dj,dk); - } - - - if (k > 0 && k 0 && j < n2[1]) { - /*area 3*/ - di = (double)i*mesh.DX; - dj = -(double)j*mesh.DY; - dk = (double)k*mesh.DZ; - maille = 1+i+n[0]*(n[1]-j+n[1]*k); - covar[maille] = (double)cov_value(variogram,di,dj,dk); - } - - - if (k > 0 && k 0 && i -#include -#include "genlib.h" - - -/*cubic covariance function*/ -double cubic(double h) -{ - double z; - - if (h >= 1.) { - z = 0.; - } else { - z = 1.-7.*(double)(h*h)+(35./4.)*(double)(h*h*h)-3.5*(double)(h*h*h*h*h)+.75*(double)(h*h*h*h*h*h*h); - } - return (z); -} diff --git a/fftma_module/gen/LIBFFTMA/exponential.c b/fftma_module/gen/LIBFFTMA/exponential.c deleted file mode 100755 index 003d1bb..0000000 --- a/fftma_module/gen/LIBFFTMA/exponential.c +++ /dev/null @@ -1,9 +0,0 @@ -#include -#include -#include "genlib.h" - -/*exponential covariance function*/ -double exponential(double h) -{ - return (exp(-3.*(double)h)); -} diff --git a/fftma_module/gen/LIBFFTMA/fftma.c b/fftma_module/gen/LIBFFTMA/fftma.c deleted file mode 100755 index 3daa08f..0000000 --- a/fftma_module/gen/LIBFFTMA/fftma.c +++ /dev/null @@ -1,185 +0,0 @@ - -#include -#include -#include "geostat.h" - - -/*FAST FOURIER TRANSFORM MOVING AVERAGE METHOD */ -/*Turns a Gaussian white noise vector into a */ -/*spatially correlated vector */ -/*input: */ -/*variogram: structure defining the variogram */ -/* model */ -/*grid: structure defining the grid */ -/*n: vector with the number of cells along the */ -/* X, Y and Z axes for the underlying grid */ -/* i = [0 1 2] */ -/* --> 0 0 0 : n will be computed and */ -/* updated as output */ -/* --> nx ny nz: these dimensions are used */ -/*realin: structure defining a realization - */ -/* must be a Gaussian white noise */ -/*output: */ -/*realout: structure defining a realization - */ - - - -void FFTMA(struct vario_mod variogram,struct grid_mod grid,int n[3],struct realization_mod *realin,struct realization_mod *realout) - -{ - int NTOT,i,j,k,NMAX,NDIM,ntot,nmax,NXYZ,nxyz,maille0,maille1; - double *table,*covar,*workr,*worki,*realization,temp; - - - /*test over the input realization*/ - /*if ((*realin).code != 0) { - printf("Input realizations in FFTMA must be Gaussian white noises"); - exit; - }*/ - - /*covariance axis normalization*/ - axes(variogram.ap,variogram.scf,variogram.Nvario); - - - /*pseudo-grid definition*/ - cgrid(variogram,grid,n); - - - /*constant definition*/ - NTOT = n[0]*n[1]*n[2]; - ntot = NTOT+1; - NMAX = n[0]; - NDIM = 3; - for (i=1;i<3;i++) { - if (n[i] > NMAX) - NMAX = n[i]; - if (n[i] == 1) - NDIM--; - } - nmax = NMAX+1; - NXYZ = grid.NX*grid.NY*grid.NZ; - nxyz = NXYZ+1; - - - /*array initialization*/ - covar = (double *) malloc(ntot * sizeof(double)); - if (covar == NULL) { - printf("FFTMA.c: No memory available for covar"); - exit; - } - - table = (double *) malloc(ntot * sizeof(double)); - if (table == NULL) { - printf("FFTMA.c: No memory available for table"); - exit; - } - - realization = (double *) malloc(ntot * sizeof(double)); - if (realization == NULL) { - printf("FFTMA.c: No memory available for realization"); - exit; - } - - workr = (double *) malloc(nmax * sizeof(double)); - if (workr == NULL) { - printf("FFTMA.c: No memory available for workr"); - exit; - } - - worki = (double *) malloc(nmax * sizeof(double)); - if (worki == NULL) { - printf("FFTMA.c: No memory available for worki"); - exit; - } - - /*covariance function creation*/ - covariance(covar,variogram,grid,n); - - - /*power spectrum*/ - fourt(covar,table,n,NDIM,1,0,workr,worki); - - - /*organization of the input Gaussian white noise*/ - for ( k = 1; k <= n[2]; k++) { - for (j = 1; j <= n[1]; j++) { - for (i = 1; i <= n[0]; i++) { - maille1 = i+(j-1+(k-1)*n[1])*n[0]; - if (i <= grid.NX && j <= grid.NY && k <= grid.NZ) { - maille0 = i-1+(j-1+(k-1)*grid.NY)*grid.NX; - realization[maille1] = (*realin).vector[maille0]; - } else { - realization[maille1] = 0.; - } - } - } - } - - - /*forward fourier transform of the GWN*/ - fourt(realization,table,n,NDIM,1,0,workr,worki); - - - /*decomposition and multiplication in the spectral domain*/ - for ( k = 1; k <= n[2]; k++) { - for (j = 1; j <= n[1]; j++) { - for (i = 1; i <= n[0]; i++) { - maille1 = i+(j-1+(k-1)*n[1])*n[0]; - temp = covar[maille1]; - if (temp > 0.) { - temp = sqrt(temp)/(double) NTOT; - } else if (temp < 0.) { - temp = sqrt(-temp)/(double) NTOT; - } - realization[maille1] *= temp; - table[maille1] *= temp; - } - } - } - - - free(covar); - - - /*backward fourier transform*/ - fourt(realization,table,n,NDIM,0,1,workr,worki); - - - free(table); - free(workr); - free(worki); - - - /*output realization*/ - - /*is the output realization already allocated?*/ - /*if not, memory allocation*/ - if ((*realout).vector == NULL || (*realout).n != (*realin).n) { - (*realout).vector = (double *) malloc((*realin).n * sizeof(double)); - if ((*realout).vector == NULL) { - printf("FFTMA.c: No memory available"); - exit; - } - } - (*realout).n = (*realin).n; - (*realout).code = 1; - for ( k = 1; k <= grid.NZ; k++) { - for (j = 1; j <= grid.NY; j++) { - for (i = 1; i <= grid.NX; i++) { - maille1 = i+(j-1+(k-1)*n[1])*n[0]; - maille0 = i-1+(j-1+(k-1)*grid.NY)*grid.NX; - (*realout).vector[maille0] = realization[maille1]; - } - } - } - - - free(realization); - - - return; -} - - - - diff --git a/fftma_module/gen/LIBFFTMA/fourt.c b/fftma_module/gen/LIBFFTMA/fourt.c deleted file mode 100755 index fe80035..0000000 --- a/fftma_module/gen/LIBFFTMA/fourt.c +++ /dev/null @@ -1,591 +0,0 @@ -#include -#include - -/*fast fourier transform */ -/* THE COOLEY-TUKEY FAST FOURIER TRANSFORM */ -/* EVALUATES COMPLEX FOURIER SERIES FOR COMPLEX OR REAL FUNCTIONS. */ -/* THAT IS, IT COMPUTES */ -/* FTRAN(J1,J2,...)=SUM(DATA(I1,I2,...)*W1**(I1-1)*(J1-1) */ -/* *W2**(I2-1)*(J2-1)*...), */ -/* WHERE W1=EXP(-2*PI*SQRT(-1)/NN(1)), W2=EXP(-2*PI*SQRT(-1)/NN(2)), */ -/* ETC. AND I1 AND J1 RUN FROM 1 TO NN(1), I2 AND J2 RUN FROM 1 TO */ -/* NN(2), ETC. THERE IS NO LIMIT ON THE DIMENSIONALITY (NUMBER OF */ -/* SUBSCRIPTS) OF THE ARRAY OF DATA. THE PROGRAM WILL PERFORM */ -/* A THREE-DIMENSIONAL FOURIER TRANSFORM AS EASILY AS A ONE-DIMEN- */ -/* SIONAL ONE, THO IN A PROPORTIONATELY GREATER TIME. AN INVERSE */ -/* TRANSFORM CAN BE PERFORMED, IN WHICH THE SIGN IN THE EXPONENTIALS */ -/* IS +, INSTEAD OF -. IF AN INVERSE TRANSFORM IS PERFORMED UPON */ -/* AN ARRAY OF TRANSFORMED DATA, THE ORIGINAL DATA WILL REAPPEAR, */ -/* MULTIPLIED BY NN(1)*NN(2)*... THE ARRAY OF INPUT DATA MAY BE */ -/* REAL OR COMPLEX, AT THE PROGRAMMERS OPTION, WITH A SAVING OF */ -/* ABOUT THIRTY PER CENT IN RUNNING TIME FOR REAL OVER COMPLEX. */ -/* (FOR FASTEST TRANSFORM OF REAL DATA, NN(1) SHOULD BE EVEN.) */ -/* THE TRANSFORM VALUES ARE ALWAYS COMPLEX, AND ARE RETURNED IN THE */ -/* ORIGINAL ARRAY OF DATA, REPLACING THE INPUT DATA. THE LENGTH */ -/* OF EACH DIMENSION OF THE DATA ARRAY MAY BE ANY INTEGER. THE */ -/* PROGRAM RUNS FASTER ON COMPOSITE INTEGERS THAN ON PRIMES, AND IS */ -/* PARTICULARLY FAST ON NUMBERS RICH IN FACTORS OF TWO. */ -/* TIMING IS IN FACT GIVEN BY THE FOLLOWING FORMULA. LET NTOT BE THE */ -/* TOTAL NUMBER OF POINTS (REAL OR COMPLEX) IN THE DATA ARRAY, THAT */ -/* IS, NTOT=NN(1)*NN(2)*... DECOMPOSE NTOT INTO ITS PRIME FACTORS, */ -/* SUCH AS 2**K2 * 3**K3 * 5**K5 * ... LET SUM2 BE THE SUM OF ALL */ -/* THE FACTORS OF TWO IN NTOT, THAT IS, SUM2 = 2*K2. LET SUMF BE */ -/* THE SUM OF ALL OTHER FACTORS OF NTOT, THAT IS, SUMF = 3*K3+5*K5+.. */ -/* THE TIME TAKEN BY A MULTIDIMENSIONAL TRANSFORM ON THESE NTOT DATA */ -/* IS T = T0 + T1*NTOT + T2*NTOT*SUM2 + T3*NTOT*SUMF. FOR THE PAR- */ -/* TICULAR IMPLEMENTATION FORTRAN 32 ON THE CDC 3300 (FLOATING POINT */ -/* ADD TIME = SIX MICROSECONDS), */ -/* T = 3000 + 600*NTOT + 50*NTOT*SUM2 + 175*NTOT*SUMF MICROSECONDS */ -/* ON COMPLEX DATA. */ -/* IMPLEMENTATION OF THE DEFINITION BY SUMMATION WILL RUN IN A TIME */ -/* PROPORTIONAL TO NTOT**2. FOR HIGHLY COMPOSITE NTOT, THE SAVINGS */ -/* OFFERED BY COOLEY-TUKEY CAN BE DRAMATIC. A MATRIX 100 BY 100 WILL */ -/* BE TRANSFORMED IN TIME PROPORTIONAL TO 10000*(2+2+2+2+5+5+5+5) = */ -/* 280,000 (ASSUMING T2 AND T3 TO BE ROUGHLY COMPARABLE) VERSUS */ -/* 10000**2 = 100,000,000 FOR THE STRAIGHTFORWARD TECHNIQUE. */ -/* THE COOLEY-TUKEY ALGORITHM PLACES TWO RESTRICTIONS UPON THE */ -/* NATURE OF THE DATA BEYOND THE USUAL RESTRICTION THAT */ -/* THE DATA FROM ONE CYCLE OF A PERIODIC FUNCTION. THEY ARE-- */ -/* 1. THE NUMBER OF INPUT DATA AND THE NUMBER OF TRANSFORM VALUES */ -/* MUST BE THE SAME. */ -/* 2. CONSIDERING THE DATA TO BE IN THE TIME DOMAIN, */ -/* THEY MUST BE EQUI-SPACED AT INTERVALS OF DT. FURTHER, THE TRANS- */ -/* FORM VALUES, CONSIDERED TO BE IN FREQUENCY SPACE, WILL BE EQUI- */ -/* SPACED FROM 0 TO 2*PI*(NN(I)-1)/(NN(I)*DT) AT INTERVALS OF */ -/* 2*PI/(NN(I)*DT) FOR EACH DIMENSION OF LENGTH NN(I). OF COURSE, */ -/* DT NEED NOT BE THE SAME FOR EVERY DIMENSION. */ - -/* THE CALLING SEQUENCE IS-- */ -/* CALL FOURT(DATAR,DATAI,NN,NDIM,IFRWD,ICPLX,WORKR,WORKI) */ - -/* DATAR AND DATAI ARE THE ARRAYS USED TO HOLD THE REAL AND IMAGINARY */ -/* PARTS OF THE INPUT DATA ON INPUT AND THE TRANSFORM VALUES ON */ -/* OUTPUT. THEY ARE FLOATING POINT ARRAYS, MULTIDIMENSIONAL WITH */ -/* IDENTICAL DIMENSIONALITY AND EXTENT. THE EXTENT OF EACH DIMENSION */ -/* IS GIVEN IN THE INTEGER ARRAY NN, OF LENGTH NDIM. THAT IS, */ -/* NDIM IS THE DIMENSIONALITY OF THE ARRAYS DATAR AND DATAI. */ -/* IFRWD IS AN INTEGER USED TO INDICATE THE DIRECTION OF THE FOURIER */ -/* TRANSFORM. IT IS NON-ZERO TO INDICATE A FORWARD TRANSFORM */ -/* (EXPONENTIAL SIGN IS -) AND ZERO TO INDICATE AN INVERSE TRANSFORM */ -/* (SIGN IS +). ICPLX IS AN INTEGER TO INDICATE WHETHER THE DATA */ -/* ARE REAL OR COMPLEX. IT IS NON-ZERO FOR COMPLEX, ZERO FOR REAL. */ -/* IF IT IS ZERO (REAL) THE CONTENTS OF ARRAY DATAI WILL BE ASSUMED */ -/* TO BE ZERO, AND NEED NOT BE EXPLICITLY SET TO ZERO. AS EXPLAINED */ -/* ABOVE, THE TRANSFORM RESULTS ARE ALWAYS COMPLEX AND ARE STORED */ -/* IN DATAR AND DATAI ON RETURN. WORKR AND WORKI ARE ARRAYS USED */ -/* FOR WORKING STORAGE. THEY ARE NOT NECESSARY IF ALL THE DIMENSIONS */ -/* OF THE DATA ARE POWERS OF TWO. IN THIS CASE, THE ARRAYS MAY BE */ -/* REPLACED BY THE NUMBER 0 IN THE CALLING SEQUENCE. THUS, USE OF */ -/* POWERS OF TWO CAN FREE A GOOD DEAL OF STORAGE. IF ANY DIMENSION */ -/* IS NOT A POWER OF TWO, THESE ARRAYS MUST BE SUPPLIED. THEY ARE */ -/* FLOATING POINT, ONE DIMENSIONAL OF LENGTH EQUAL TO THE LARGEST */ -/* ARRAY DIMENSION, THAT IS, TO THE LARGEST VALUE OF NN(I). */ -/* WORKR AND WORKI, IF SUPPLIED, MUST NOT BE THE SAME ARRAYS AS DATAR */ -/* OR DATAI. ALL SUBSCRIPTS OF ALL ARRAYS BEGIN AT 1. */ - -/* THERE ARE NO ERROR MESSAGES OR ERROR HALTS IN THIS PROGRAM. THE */ -/* PROGRAM RETURNS IMMEDIATELY IF NDIM OR ANY NN(I) IS LESS THAN ONE. */ - -/* PROGRAM MODIFIED FROM A SUBROUTINE OF BRENNER */ -/* 10-06-2000, MLR */ - - -void fourt(double *datar,double *datai, int nn[3], int ndim, int ifrwd, int icplx, double *workr,double *worki) -{ - int ifact[21],ntot,idim,np1,n,np2,m,ntwo,iff,idiv,iquot,irem,inon2,non2p,np0,nprev,icase,ifmin,i,j,jmax,np2hf,i2,i1max,i3,j3,i1,ifp1,ifp2,i2max,i1rng,istep,imin,imax,mmax,mmin,mstep,j1,j2max,j2,jmin,j3max,nhalf; - double theta,wstpr,wstpi,wminr,wmini,wr,wi,wtemp,thetm,wmstr,wmsti,twowr,sr,si,oldsr,oldsi,stmpr,stmpi,tempr,tempi,difi,difr,sumr,sumi,TWOPI = 6.283185307179586476925286766559; - - ntot = 1; - for (idim = 0; idim < ndim; idim++) { - ntot *= nn[idim]; - } - - /*main loop for each dimension*/ - np1 = 1; - for (idim = 1; idim <= ndim; idim++) { - n = nn[idim-1]; - np2 = np1*n; - - if (n < 1) { - goto L920; - } else if (n == 1) { - goto L900; - } - - /*is n a power of 2 and if not, what are its factors*/ - m = n; - ntwo = np1; - iff = 1; - idiv = 2; - - L10: - iquot = m/idiv; - irem = m-idiv*iquot; - if (iquot < idiv) - goto L50; - if (irem == 0) { - ntwo *= 2; - ifact[iff] = idiv; - iff++; - m= iquot; - goto L10; - } - idiv = 3; - inon2 = iff; - - L30: - iquot = m/idiv; - irem = m-idiv*iquot; - if (iquot < idiv) - goto L60; - if (irem == 0) { - ifact[iff] = idiv; - iff++; - m = iquot; - goto L30; - } - - idiv += 2; - goto L30; - - L50: - inon2 = iff; - if (irem != 0) - goto L60; - ntwo *= 2; - goto L70; - - L60: - ifact[iff] = m; - - L70: - non2p = np2/ntwo; - - - /*SEPARATE FOUR CASES-- - 1. COMPLEX TRANSFORM - 2. REAL TRANSFORM FOR THE 2ND, 3RD, ETC. DIMENSION. METHOD: TRANSFORM HALF THE DATA, SUPPLYING THE OTHER HALF BY CONJUGATE SYMMETRY. - 3. REAL TRANSFORM FOR THE 1ST DIMENSION, N ODD. METHOD: SET THE IMAGINARY PARTS TO ZERO. - 4. REAL TRANSFORM FOR THE 1ST DIMENSION, N EVEN. METHOD: TRANSFORM A COMPLEX ARRAY OF LENGTH N/2 WHOSE REAL PARTS ARE THE EVEN NUMBERED REAL VALUES AND WHOSE IMAGINARY PARTS ARE THE ODD-NUMBERED REAL VALUES. UNSCRAMBLE AND SUPPLY THE SECOND HALF BY CONJUGATE SYMMETRY. */ - - icase = 1; - ifmin = 1; - if (icplx != 0) - goto L100; - icase = 2; - if (idim > 1) - goto L100; - icase = 3; - if (ntwo <= np1) - goto L100; - icase = 4; - ifmin = 2; - ntwo /= 2; - n /= 2; - np2 /= 2; - ntot /= 2; - i = 1; - for (j = 1; j <= ntot; j++) { - datar[j] = datar[i]; - datai[j] = datar[i+1]; - i += 2; - } - - /*shuffle data by bit reversal, since n = 2^k. As the shuffling can be done by simple interchange, no working array is needed*/ - L100: - if (non2p > 1) - goto L200; - np2hf = np2/2; - j = 1; - for (i2 = 1; i2 <= np2; i2 += np1) { - if (j >= i2) - goto L130; - i1max = i2+np1-1; - for (i1 = i2; i1 <= i1max; i1++) { - for (i3 = i1; i3 <= ntot; i3 += np2) { - j3 = j+i3-i2; - tempr = datar[i3]; - tempi = datai[i3]; - datar[i3] = datar[j3]; - datai[i3] = datai[j3]; - datar[j3] = tempr; - datai[j3] = tempi; - } - } - - L130: - m = np2hf; - - L140: - if (j <= m) { - j += m; - } else { - j -= m; - m /= 2; - if (m >= np1) - goto L140; - } - - } - goto L300; - - /*shuffle data by digit reversal for general n*/ - L200: - for (i1 = 1; i1 <= np1; i1++) { - for (i3 = i1; i3 <= ntot; i3 += np2) { - j = i3; - for (i = 1; i <= n; i++) { - if (icase != 3) { - workr[i] = datar[j]; - worki[i] = datai[j]; - } else { - workr[i] = datar[j]; - worki[i] = 0.; - } - ifp2 = np2; - iff = ifmin; - L250: - ifp1 = ifp2/ifact[iff]; - j += ifp1; - if (j >= i3+ifp2) { - j -= ifp2; - ifp2 = ifp1; - iff += 1; - if (ifp2 > np1) - goto L250; - } - } - i2max = i3+np2-np1; - i = 1; - for (i2 = i3; i2 <= i2max; i2 += np1) { - datar[i2] = workr[i]; - datai[i2] = worki[i]; - i++; - } - - } - } - - /*special case-- W=1*/ - L300: - i1rng = np1; - if (icase == 2) - i1rng = np0*(1+nprev/2); - if (ntwo <= np1) - goto L600; - for (i1 = 1; i1 <= i1rng; i1++) { - imin = np1+i1; - istep = 2*np1; - goto L330; - - L310: - j = i1; - for (i = imin; i <= ntot; i += istep) { - tempr = datar[i]; - tempi = datai[i]; - datar[i] = datar[j]-tempr; - datai[i] = datai[j]-tempi; - datar[j] = datar[j]+tempr; - datai[j] = datai[j]+tempi; - j += istep; - } - imin = 2*imin-i1; - istep *= 2; - - L330: - if (istep <= ntwo) - goto L310; - - /*special case-- W = -sqrt(-1)*/ - imin = 3*np1+i1; - istep = 4*np1; - goto L420; - - L400: - j = imin-istep/2; - for (i = imin; i <= ntot; i += istep) { - if (ifrwd != 0) { - tempr = datai[i]; - tempi = -datar[i]; - } else { - tempr = -datai[i]; - tempi = datar[i]; - } - datar[i] = datar[j]-tempr; - datai[i] = datai[j]-tempi; - datar[j] += tempr; - datai[j] += tempi; - j += istep; - } - - imin = 2*imin-i1; - istep *= 2; - - L420: - if (istep <= ntwo) - goto L400; - } - - /*main loop for factors of 2. W=EXP(-2*PI*SQRT(-1)*m/mmax) */ - theta = -TWOPI/8.; - wstpr = 0.; - wstpi = -1.; - if (ifrwd == 0) { - theta = -theta; - wstpi = 1.; - } - mmax = 8*np1; - goto L540; - - L500: - wminr = cos(theta); - wmini = sin(theta); - wr = wminr; - wi = wmini; - mmin = mmax/2+np1; - mstep = np1*2; - for (m = mmin; m <= mmax; m += mstep) { - for (i1 = 1; i1 <= i1rng; i1++) { - istep = mmax; - imin = m+i1; - L510: - j = imin-istep/2; - for (i = imin; i <= ntot; i += istep) { - tempr = datar[i]*wr-datai[i]*wi; - tempi = datar[i]*wi+datai[i]*wr; - datar[i] = datar[j]-tempr; - datai[i] = datai[j]-tempi; - datar[j] += tempr; - datai[j] += tempi; - j += istep; - } - imin = 2*imin-i1; - istep *= 2; - if (istep <= ntwo) - goto L510; - } - wtemp = wr*wstpi; - wr = wr*wstpr-wi*wstpi; - wi = wi*wstpr+wtemp; - } - wstpr = wminr; - wstpi = wmini; - theta /= 2.; - mmax += mmax; - L540: - if (mmax <= ntwo) - goto L500; - - /*main loop for factors not equal to 2-- W=EXP(-2*PI*SQRT(-1)*(j2-i3)/ifp2)*/ - L600: - if (non2p <= 1) - goto L700; - ifp1 = ntwo; - iff = inon2; - L610: - ifp2 = ifact[iff]*ifp1; - theta = -TWOPI/ (double)ifact[iff]; - if (ifrwd == 0) - theta = -theta; - thetm = theta/ (double)(ifp1/np1); - wstpr = cos(theta); - wstpi = sin(theta); - wmstr = cos(thetm); - wmsti = sin(thetm); - wminr = 1.; - wmini = 0.; - - for (j1 = 1; j1 <= ifp1; j1 += np1) { - i1max = j1+i1rng-1; - for (i1 = j1; i1 <= i1max; i1++) { - for (i3 = i1; i3 <= ntot; i3 += np2) { - i = 1; - wr = wminr; - wi = wmini; - j2max = i3+ifp2-ifp1; - for (j2 = i3; j2 <= j2max; j2 += ifp1) { - twowr = 2.*wr; - jmin = i3; - j3max = j2+np2-ifp2; - for (j3 = j2 ; j3 <= j3max; j3 += ifp2) { - j = jmin+ifp2-ifp1; - sr = datar[j]; - si = datai[j]; - oldsr = 0.; - oldsi = 0.; - j -= ifp1; - L620: - stmpr = sr; - stmpi = si; - sr = twowr*sr-oldsr+datar[j]; - si = twowr*si-oldsi+datai[j]; - oldsr = stmpr; - oldsi = stmpi; - j -= ifp1; - if (j > jmin) - goto L620; - workr[i] = wr*sr-wi*si-oldsr+datar[j]; - worki[i] = wi*sr+wr*si-oldsi+datai[j]; - jmin += ifp2; - i++; - } - wtemp = wr*wstpi; - wr = wr*wstpr-wi*wstpi; - wi = wi*wstpr+wtemp; - } - i = 1; - for (j2 = i3; j2 <= j2max; j2 += ifp1) { - j3max = j2+np2-ifp2; - for (j3 = j2; j3 <= j3max; j3 += ifp2) { - datar[j3] = workr[i]; - datai[j3] = worki[i]; - i++; - } - } - } - } - wtemp = wminr*wmsti; - wminr = wminr*wmstr-wmini*wmsti; - wmini = wmini*wmstr+wtemp; - } - iff++; - ifp1 = ifp2; - if (ifp1 < np2) - goto L610; - - /*complete a real transform in the 1st dimension, n even, by conjugate symmetries*/ - L700: - switch (icase) { - case 1: - goto L900; - break; - case 2: - goto L800; - break; - case 3: - goto L900; - break; - } - - nhalf = n; - n += n; - theta = -TWOPI/ (double) n; - if (ifrwd == 0) - theta = -theta; - wstpr = cos(theta); - wstpi = sin(theta); - wr = wstpr; - wi = wstpi; - imin = 2; - jmin = nhalf; - goto L725; - L710: - j = jmin; - for (i = imin; i <= ntot; i += np2) { - sumr = (datar[i]+datar[j])/2.; - sumi = (datai[i]+datai[j])/2.; - difr = (datar[i]-datar[j])/2.; - difi = (datai[i]-datai[j])/2.; - tempr = wr*sumi+wi*difr; - tempi = wi*sumi-wr*difr; - datar[i] = sumr+tempr; - datai[i] = difi+tempi; - datar[j] = sumr-tempr; - datai[j] = tempi-difi; - j += np2; - } - imin++; - jmin--; - wtemp = wr*wstpi; - wr = wr*wstpr-wi*wstpi; - wi = wi*wstpr+wtemp; - L725: - if (imin < jmin) { - goto L710; - } else if (imin > jmin) { - goto L740; - } - if (ifrwd == 0) - goto L740; - for (i = imin; i <= ntot; i += np2) { - datai[i] = -datai[i]; - } - L740: - np2 *= 2; - ntot *= 2; - j = ntot+1; - imax = ntot/2+1; - L745: - imin = imax-nhalf; - i = imin; - goto L755; - L750: - datar[j] = datar[i]; - datai[j] = -datai[i]; - L755: - i++; - j--; - if (i < imax) - goto L750; - datar[j] = datar[imin]-datai[imin]; - datai[j] = 0.; - if (i >= j) { - goto L780; - } else { - goto L770; - } - L765: - datar[j] = datar[i]; - datai[j] = datai[i]; - L770: - i--; - j--; - if (i > imin) - goto L765; - datar[j] = datar[imin]+datai[imin]; - datai[j] = 0.; - imax = imin; - goto L745; - L780: - datar[1] += datai[1]; - datai[1] = 0.; - goto L900; - - /*complete a real transform for the 2nd, 3rd, ... dimension by conjugate symmetries*/ - L800: - if (nprev <= 2) - goto L900; - for (i3 = 1; i3 <= ntot; i3 += np2) { - i2max = i3+np2-np1; - for (i2 = i3; i2 <= i2max; i2 += np1) { - imax = i2+np1-1; - imin = i2+i1rng; - jmax = 2*i3+np1-imin; - if (i2 > i3) - jmax += np2; - if (idim > 2) { - j = jmax+np0; - for (i = imin; i <= imax; i++) { - datar[i] = datar[j]; - datai[i] = -datai[j]; - j--; - } - } - j = jmax; - for (i = imin; i <= imax; i += np0) { - datar[i] = datar[j]; - datai[i] = -datai[j]; - j -= np0; - } - } - } - - /*end of loop on each dimension*/ - L900: - np0 = np1; - np1 = np2; - nprev = n; - } - L920: - return; -} diff --git a/fftma_module/gen/LIBFFTMA/gammf.c b/fftma_module/gen/LIBFFTMA/gammf.c deleted file mode 100755 index 97ff3f9..0000000 --- a/fftma_module/gen/LIBFFTMA/gammf.c +++ /dev/null @@ -1,16 +0,0 @@ -#include -#include -#include "genlib.h" - - -/*gamma covariance function*/ -double gammf(double h, double alpha) -{ - float delta; - double z; - - delta = pow(20.,1./alpha)-1.; - z = 1./(double)(pow(1.+h*delta,alpha)); - return(z); -} - diff --git a/fftma_module/gen/LIBFFTMA/gasdev.c b/fftma_module/gen/LIBFFTMA/gasdev.c deleted file mode 100755 index a25dfa2..0000000 --- a/fftma_module/gen/LIBFFTMA/gasdev.c +++ /dev/null @@ -1,31 +0,0 @@ -#include -#include "genlib.h" - -#define NTAB 32 - -double gasdev(long *idum,long *idum2, long *iy, long iv[NTAB]) -/*returns a normally distributed deviate with 0 mean*/ -/*and unit variance, using ran2(idum) as the source */ -/*of uniform deviates */ -{ - double ran2(long *idum,long *idum2, long *iy, long iv[NTAB]); - static int iset = 0; - static double gset; - double fac,rsq,v1,v2; - - if (iset == 0) { - do { - v1 = 2.0*ran2(idum,idum2,iy,iv)-1.0; - v2 = 2.0*ran2(idum,idum2,iy,iv)-1.0; - rsq = v1*v1+v2*v2; - } while (rsq >= 1.0 || rsq == 0.0); - - fac = sqrt(-2.0*log(rsq)/rsq); - gset = v1*fac; - iset = 1; - return (v2*fac); - } else { - iset = 0; - return (gset); - } -} diff --git a/fftma_module/gen/LIBFFTMA/gaussian.c b/fftma_module/gen/LIBFFTMA/gaussian.c deleted file mode 100755 index 5ef9911..0000000 --- a/fftma_module/gen/LIBFFTMA/gaussian.c +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include -#include "genlib.h" - - -/*gaussian covariance function*/ -double gaussian(double h) -{ - return (exp(-3.*(double)(h*h))); -} diff --git a/fftma_module/gen/LIBFFTMA/generate.c b/fftma_module/gen/LIBFFTMA/generate.c deleted file mode 100755 index 46869d3..0000000 --- a/fftma_module/gen/LIBFFTMA/generate.c +++ /dev/null @@ -1,43 +0,0 @@ -#include -#include -#include "geostat.h" - - -/* GENERATION OF A GAUSSIAN WHITE NOISE VECTOR */ -/*input: */ -/* seed: seed */ -/* n: number of components in the vector */ -/*output: */ -/* realization: structure defining the realization*/ - -void generate(long *seed, int n, struct realization_mod *realization) -{ - int i; - long idum2 = 123456789,iy = 0; - long *iv; - int iset =0; - - iv = (long *) malloc(NTAB * sizeof(long)); - - /*negative seed*/ - if (*seed > 0.0) - *seed = -(*seed); - - /*realization definition*/ - (*realization).n = n; - (*realization).code = 0; - (*realization).vector = (double *) malloc(n * sizeof(double)); - if ((*realization).vector == NULL) { - printf("No memory available in generate"); - exit; - } - - /*Gaussian white noise generation*/ - for (i=0; i < n; i++) - (*realization).vector[i] = gasdev(seed,&idum2,&iy,iv,&iset); - - return; -} - - - diff --git a/fftma_module/gen/LIBFFTMA/geostat.h b/fftma_module/gen/LIBFFTMA/geostat.h deleted file mode 100755 index 3f36ecf..0000000 --- a/fftma_module/gen/LIBFFTMA/geostat.h +++ /dev/null @@ -1,689 +0,0 @@ -#include -#include -#include -#include - - -#ifndef _GEOSTAT_H -#define _GEOSTAT_H - -#define NTAB 32 - -/* Modified january, the 22th 2004 */ -/* from float to double */ - -/* List of structures: */ -/* ------------------- */ - -/* vario_mod */ -/* variotable_mod*/ -/* grid_mod */ -/* welldata_mod */ -/* statfacies_mod */ -/* inequalities_mod */ -/* statistic_mod */ -/* grad_mod */ -/* gradients_mod */ -/* cdf_mod */ -/* realization_mod */ - - -/* List of functions: */ -/* ------------------ */ - -/* axes, cardsin, choldc, coordinates */ -/* covariance, cov_matrix, cov_value, */ -/* cubic, cutspectr, deflimit, dual_kri */ -/* exponential, fourt, funtrun1, G, gammf */ -/* gammln, gammp, gasdev, gaussian, gcf, */ -/* gen_cov_matrix, Ginv, gradual, cgrid, */ -/* gser, invtrun1, krig_stat, length, */ -/* LtimeZ, mat_vec, maxfactor, metrop, norm */ -/* normal, nugget, power, ran2, scal_vect, */ -/* solve3, sort, spherical, stable, statlog2nor */ -/* test_fract, trun1, trungasdev,vec_vec, */ -/* vf2gthres,polint */ - - - - -/*STRUCTURES*/ -/*----------*/ -/*variogram */ -/*Nvario: number of combined variogram models */ -/*vario: model of variogram per variogram model */ -/* 1 --> exponential */ -/* 2 --> gaussian */ -/* 3 --> spherical */ -/* 4 --> cardsin */ -/* 5 --> stable */ -/* 6 --> gamma */ -/* 7 --> cubic */ -/* 8 --> nugget */ -/* 9 --> power */ -/*alpha: exponent for the stable and gamma variogram */ -/* per variogram model */ -/*ap: anisotropy axes per variogram model */ -/*scf: correlation lengths per variogram model */ -/*var: normalized variance per variogram model(sum = 1)*/ -struct vario_mod { - int Nvario; - int *vario; - double *alpha; - double *ap; - double *scf; - double *var; -}; - - - -/*variogram table */ -/*Nvario: number of combined variogram models */ -/*vario: model of variogram per variogram model */ -/* 1 --> exponential */ -/* 2 --> gaussian */ -/* 3 --> spherical */ -/* 4 --> cardsin */ -/* 5 --> stable */ -/* 6 --> gamma */ -/* 7 --> cubic */ -/* 8 --> nugget */ -/* 9 --> power */ -/*alpha: exponent for the stable and gamma variogram */ -/* per variogram model */ -/*ap: anisotropy axes per variogram model */ -/*scf: correlation lengths per variogram model */ -/*var: normalized variance per variogram model(sum = 1)*/ -struct variotable_mod { - int number_of_variograms; - int *Nvario; - int *vario; - float *alpha; - float *ap; - float *scf; - float *var; -}; - - - - -/*grid */ -/*NX: number of gridblocks along the X axis*/ -/*NY: number of gridblocks along the Y axis*/ -/*NZ: number of gridblocks along the Z axis*/ -/*DX: gridblock length along the X axis */ -/*DY: gridblock length along the Y axis */ -/*DZ: gridblock length along the Z axis */ -/*Xo: X-cell number of the origin cell */ -/*Yo: Y-cell number of the origin cell */ -/*Zo: Z-cell number of the origin cell */ -struct grid_mod { - int NX, NY, NZ; - double DX,DY,DZ; - double Xo,Yo,Zo; -}; - - -/*well data */ -/*nwell: number of wells */ -/*n: number of measurement points per well */ -/* i = [0...nwell-1] */ -/*ntype: number of measurement types */ -/*code: status of the measurements i=[0...ntype-1] */ -/* --> 0 : Gaussian white noise */ -/* --> 1: standard Normal */ -/* --> 2: non standard Normal */ -/* --> 3: lognormal (neperien) */ -/* --> 4: lognormal (log10) */ -/* --> 5: facies */ -/* --> 6: uniform */ -/* --> 7: any */ -/*x: X-coordinates of the measurements */ -/* i = [0 ... n[0]-1 n[0] ... n[0]+n[1]-1...sum(n[k])-1]*/ -/*y: Y-coordinates of the measurements */ -/* i = [0 ... n[0]-1 n[0] ... n[0]+n[1]-1...sum(n[k])-1]*/ -/*z: Z-coordinates of the measurements */ -/* i = [0 ... n[0]-1 n[0] ... n[0]+n[1]-1...sum(n[k])-1]*/ -/*measure: values of the measurements */ -/* same kind of indexation, but repeated per type of */ -/* measurement */ -/* type 1 : */ -/* i = [0 ... n[0]-1 n[0] ... n[0]+n[1]-1...sum(n[k])-1]*/ -/* type 2 : */ -/* i=[sum(n[k])... sum(n[k])+n[0]-1 ... 2*(sum(n[k])-1)]*/ - -struct welldata_mod { - int nwell; - int *n; - int ntype; - int *code; - float *x; - float *y; - float *z; - float *measure; -}; - - - -/*volume fractions for facies */ -/*ncat: number of facies */ -/*nblock: number of gridblocks with different */ -/* volume fractions */ -/* = 1 --> stationary case */ -/* = NX*NY*NZ --> nonstationary case */ -/*vf: volume fractions for the first ncat-1 facies*/ -/* i = [0...ncat-2]*nblock */ -struct statfacies_mod { - int ncat; - int nblock; - float *vf; -}; - - -/*inequalities for truncated plurigaussian realizations*/ -/*only two basic realizations Y1 and Y2 are considered */ -/*Y1 and Y2 are independent */ -/*nsY1: number of unknown thresholds for Y1 */ -/*nsY2: number of unknown thresholds for Y2 */ -/*thresholds: vector with the thresholds and -10 and 10*/ -/* the output values are the Gaussian */ -/* thresholds */ -/* i = [0 ... n+1], n = nsY1+nsY2 */ -/* thresholds[n] = -10,thresholds[n+1] = 10 */ -/* given at the beginning */ -/*address_sY1: successive upper and lower bounds for */ -/* the different facies for Y1 */ -/* i = [0 ... 2*ncat-1] */ -/* the values in address_sY1 are integers */ -/* ranging from 0 to n+1 with n = nsY1+nsY2*/ -/*address_sY2: successive upper and lower bounds for */ -/* the different facies for Y2 */ -/* i = [0 ... 2*ncat-1] */ -/* the values in address_sY2 are integers */ -/* ranging from 0 to n+1 with n = nsY1+nsY2*/ -struct inequalities_mod { - int nsY1; - int nsY2; - float *thresholds; - int *address_sY1; - int *address_sY2; -}; - - -/*statistical data */ -/*type --> 0 : normal */ -/* --> 1 : natural log */ -/* --> 2 : log 10 */ -/*nblock_mean: number of gridblocks with different */ -/* means */ -/* = 1 --> stationary case */ -/* = NX*NY*NZ --> nonstationary case */ -/*mean: mean of the variable i = [0...nblock_mean] */ -/* DHF CHANGE: FOR TYPE 1 AND TYPE 2, MEAN IS LOG MEAN ! */ -/*nblock_var: number of gridblocks with different */ -/* variances */ -/* = 1 --> stationary case */ -/* = NX*NY*NZ --> nonstationary case */ -/*variance: variance of the variable i = [0...nblock_var]*/ -/* DHF CHANGE: FOR TYPE 1 AND TYPE 2, VAR IS LOG VAR ! */ -struct statistic_mod { - int type; - int nblock_mean; - double *mean; - int nblock_var; - double *variance; -}; - - -/*gradual deformation parameters */ -/*Nadded: number of complementary realizations */ -/*NZONES: number of subregions */ -/*rho: gradual deformation parameters */ -/*rho[NZONES*(0...Nadded)] */ -/*cellini[NZONES*(0...2)] lower cell bound for */ -/*for subregions along axes X,Y,Z */ -/*cellfin[NZONES*(0...2)] upper cell bound for */ -/*for subregions along axes X,Y,Z */ -struct grad_mod { - int Nadded, NZONES; - float *rho; - int *cellini, *cellfin; -}; - - -/*gradient structures */ -/*Nparam : number of parameters for which gradients are */ -/* required */ -/*Ncells : number of cells for which gradients are */ -/* calculated */ -/*grad : vector with the calculated gradients */ -/* dimension = Nparam*Ncells */ -/* this vector is organized as */ -/* 0 1...Ncells-1 for the first parameter followed*/ -/* Ncells....2*Ncells-1 for the second parameter */ -/* and so on */ -struct gradients_mod { - int Nparam,Ncells; - float *grad; -}; - - - -/*description of discretized cumulative distributions */ -/*n: number of points */ -/*x: values along the x axis i = [0...n-1] */ -/*fx: corresponding values for the cumulative */ -/* distribution i = [0...n-1] */ -struct cdf_mod { - int n; - float *x; - float *fx; -}; - - -/*realization */ -/*n: number of components */ -/*code: status of the realization */ -/* --> 0 : Gaussian white noise */ -/* --> 1: standard Normal */ -/* --> 2: non standard Normal */ -/* --> 3: lognormal (neperien) */ -/* --> 4: lognormal (log10) */ -/* --> 5: facies */ -/* --> 6: conditional standard Normal */ -/* --> 7: conditional non standard Normal */ -/* --> 8: conditional lognormal (neperien) */ -/* --> 9: conditional lognormal (log10) */ -/* --> 10: conditional facies */ -/* --> 11: uniform numbers */ -/* --> 12: conditional uniform numbers */ -/* --> 13: unconditional any type */ -/* --> 14: conditional any type */ -/*vector: realization vector i = [0...n-1] */ -struct realization_mod { - int n; - int code; - double *vector; -}; - -/*=====================================================*/ - -/*FUNCTIONS*/ -/*---------*/ - - -/*normalization of the anostropy axes */ -/*ap: anisotropy axes */ -/*scf: correlation lengths */ -/* The returned normalized axes are in ap */ -void axes(double *ap, double *scf, int N); - - -/*cardsin covariance value for lag h*/ -double cardsin(double h); - - -/*Cholesky decomposition of matrix C */ -/* C : symetric positive-definite matrix recorded */ -/* (per raws) as a vector with only components */ -/* Cij so that j <= i, 0 <= i <= n */ -/* n : dimension of matrix Cij */ -/* */ -/* C is turned into the lower triangular cholesky matrix*/ -void choldc(double *C, int n); - - -/*computes the coordinates of a given cell */ -/*as numbers of cells along the X,Y and Z axes*/ -/*maille = i[0]+1+i[1]*NX+i[2]*NX*NY */ -/*input: */ -/*maille: number of the cell to identify */ -/*grid: structure defining the grid */ -/*output: */ -/*i: vector with the coordinates */ -void coordinates(int maille, int i[3],struct grid_mod grid); - - -/*builds the sampled covariance function */ -/*dimensions are even */ -/*covar: covariance array, vector of size*/ -/*1+NX*NY*NZ, covar[0] is a dead cell */ -/*variogram: structure defined above */ -/*grid: structure defined above */ -/*n: number of gridblocks along X,Y and Z*/ -void covariance(double *covar,struct vario_mod variogram, struct grid_mod grid, int n[3]); - -/*computation of the covariance matrix for the well data*/ -/*well coordinates are given as a number of cells */ -/*The dimension of C is given by well.nwell */ -/*C is recorded as a vector so that */ -/*C[k] = Cij with i = [0...nwell-1], j = [0...nwell-1] */ -/*and k = j+i(i+1)/2 */ -/*variogram: structure defined above */ -/*well: structure defined above */ -/*grid: structure defined above */ -void cov_matrix(double *C, struct vario_mod variogram, struct welldata_mod well, struct grid_mod grid); - - -/*calculation of the covariance value for a distance h */ -/*defined by i,j,k */ -/*available variogram model: */ -/* 1 -> exponential */ -/* 2 -> gaussian */ -/* 3 -> spherical */ -/* 4 -> cardsin */ -/* 5 -> stable */ -/* 6 -> gamma */ -/* 7 -> cubic */ -/* 8 -> nugget */ -/* 9 -> power */ -/*variogram: variogram with the structure defined above*/ -/*di: distance along the X axis */ -/*dj: distance along the Y axis */ -/*dk: distance along the Z axis */ -/* The returned value is the computed covariance value */ -double cov_value(struct vario_mod variogram,double di,double dj,double dk); - -/*cubic covariance value for lag h*/ -double cubic(double h); - - -/*truncation of the power spectrum to remove */ -/*high frequencies - isotropic case */ -/*covar: power spectrum */ -/*kx: number of cells to save along the x-axis */ -/*ky: number of cells to save along the y-axis */ -/*kz: number of cells to save along the z-axis */ -/*n[3]: number of cells along the X, Y and Z axes*/ -void cutspectr(float *covar, int kx, int ky, int kz, int n[3]); - - -/*defines the threshold interval for a facies x*/ -/*lim_inf: lower bound */ -/*lim_sup: upper bound */ -/*x: facies */ -/*thresholds: Gaussian threshold vector */ -/*facies: structure defined above */ -/*nblock: gridcell number of point x */ -void deflimit(double *plim_inf, double *plim_sup, float x, float *thresholds, struct statfacies_mod facies,int nblock); - - -/*kriges the realization considering weights */ -/*realin: input realization */ -/*variogram: structure defining the variogram */ -/*k: type of measure */ -/*well: structure defining the well data */ -/*grid: structure defined above */ -/*D: weight vector of length Ndata, Di, i = 0...Ndata-1*/ -/*The kriged realization is stored in realout */ -void dual_kri(struct realization_mod *realin, struct vario_mod variogram,struct welldata_mod well, struct grid_mod grid, double *D,struct realization_mod *realout); - - - -/*exponential covariance value for lag h*/ -double exponential(double h); - - -/*Fast Fourier Transform - Cooley-Tukey algorithm */ -/*datar: real part vector - to be transformed */ -/*datai: imaginary part vector - to be transformed */ -/*nn: number of gridblocks along the X,Y and Z axes */ -/*ndim: number of dimensions */ -/*ifrwd: non-zero for forward transform, 0 for inverse*/ -/*icplx: non-zero for complex data, 0 for real */ -/*workr: utility real part vector for storage */ -/*worki: utility imaginary part vector for storage */ -/*The transformed data are returned in datar and datai*/ -void fourt(double *datar,double *datai, int nn[3], int ndim, int ifrwd, int icplx,double *workr,double *worki); - - -/*calculates F(x) = (1/a)*exp(-x*x/2)*/ -double funtrun1(double x); - - -/*cumulative standard normal value*/ -float G(float x); - - -/*gamma covariance value for lag h and exponent alpha*/ -double gammf(double h, double alpha); - - -/*returns the value ln(G(x))*/ -float gammln(float xx); - - -/*incomplete gamma fnction*/ -float gammp(float a, float x); - - -/*returns a normally distributed deviate with 0 mean*/ -/*and unit variance, using ran1(idum) as the source */ -/*of uniform deviates */ -/*idum: seed */ -double gasdev(long *idum, long *idum2, long *iy, long *iv, int *iset); - -/*gaussian covariance value for lag h*/ -double gaussian(double h); - - -/*incomplete gamma function evaluated by its continued */ -/*fraction represented as gammcf, also returns ln(G(a))*/ -/*as gln */ -void gcf(float *gammcf, float a, float x, float *gln); - - -/*computation of the covariance matrix for the well data*/ -/*well coordinates have no specific unit */ -/*The dimension of C is given by n */ -/*C defines the correlation between the first n wells */ -/*C is recorded as a vector so that */ -/*C[k] = Cij with i = [0...nwell-1], j = [0...nwell-1] */ -/*and k = j+i(i+1)/2 */ -/*variogram: structure defined above */ -/*well: structure defined above */ -void gen_cov_matrix(double *C, struct vario_mod variogram, struct welldata_mod well, int n); - - -/*Ginv */ -/*Computes the inverse of the standard normal cumulative*/ -/*distribution function with a numerical approximation */ -/*from Statistical Computing,by W.J. Kennedy, Jr. and */ -/*James E. Gentle, 1980, p. 95. */ -/*input : */ -/*p: cumulative probability value */ -float Ginv(float p); - - -/*gradual combination of 1 realization + Nadded */ -/*complementary realizations */ -/*rho: gradual deformation parameters */ -/*rho[0...NZONES*Nadded-1] */ -/*rangement des vecteurs colonnes les uns apres */ -/*les autres */ -/*Zo: starting realization */ -/*Zo[0...n] */ -/*Z: complementary realizations all stored */ -/*Z[0...n-1 n...2n-1 ...(Nadded-1)n...Nadded.n-1]*/ -/*sequentially in a single vector */ -/*Nadded: number of complementary realizations */ -/*n: number of components per realization */ -/*NZONES: number of subregions */ -/*grid: grid definition */ -void gradual(struct grad_mod grad,float *Zo,float *Z,float *Zfinal,int n,struct grid_mod grid); - - -/*computes the size of the underlying grid for FFTs*/ -/*input: */ -/*variogram: structure defining the variogram model*/ -/*grid: structure defining the actual grid */ -/*output: */ -/*n: vector with the number of cells along the */ -/* X, Y and Z axes for the underlying grid */ -/* i = [0 1 2] */ -void cgrid(struct vario_mod variogram, struct grid_mod grid, int n[3]); - -/*incomplete gamma function evaluated by its series*/ -/*representation as gamser, also returns ln(G(a)) */ -/*as gln */ -void gser(float *gamser, float a, float x, float *gln); - - -/*calculates x so that x = invF(u) */ -/*F is the cumulative density function for the */ -/*function approximating the Gaussian function */ -/*u: uniform deviate between 0 and 1 */ -/*lim_inf: lower bound of the considered interval*/ -/*lim_sup: upper bound of the considered interval*/ -/*C: normalizing constant */ -double invtrun1(double u, double lim_inf, double lim_sup, double C); - - -/*computes the kriging mean and variance*/ -/*for the vector bi, i = [0...n-1] */ -void krig_stat(float *b, int n, struct vario_mod variogram, struct welldata_mod well, float *mean, float *var); - - -/* computes the number of gridblocks for one dimension*/ -/*N: initial number of gridblocks */ -/*i: considered direction */ -/*scf: correlation length */ -/*ap: normalized anisotropy axes */ -int length(int N, int i, double *scf, double *ap, double D, int Nvari); - -/*calculates L.Z/ -/* L : lower triangular matrix recorded */ -/* (per raws) as a vector with only components */ -/* Lij so that j <= i, i = [0...n-1] */ -/* Z : vector, Zi avec i = [0...n-1] */ -/* b : vector, bi avec i = [0...n-1] */ -/* n : dimension of matrix Lij */ -/* */ -/* The solution vector is returned in b */ -void LtimeZ(double *L, float *Z, float *b, int n); - - -/*calculates C.x/ -/* C : symmetric positive-definite matrix recorded */ -/* (per raws) as a vector with only components */ -/* Cij so that j <= i, i = [0...n-1] */ -/* x : vector, xi avec i = [0...n-1] */ -/* b : vector, bi avec i = [0...n-1] */ -/* n : dimension of matrix Cij */ -/* */ -/* The result vector is returned in b */ -void mat_vec(double *C, double *x, double *b, int n); - - -/*determines the greatest prime factor of an integer*/ -int maxfactor(int n); - -/*metrop returns a boolean varible that issues a */ -/*verdict on whether to accept a reconfiguration */ -/*defined by the probability ratio "ratio". */ -/*If ratio >= 1, metrop = 1(true), while if ratio < 1, */ -/*metrop is only true with probability "ratio" */ -int metrop(double ratio,long *idum,long *idum2, long *iy, long *iv); - - -/*2-norm of vector b */ -/* b : vector */ -/* n : length of b, bi, i = [0...n-1]*/ -/*returns the norm of b */ -double norm(double *b,int n); - - -/*value of g(x) where g is the normal function*/ -double normal(double x); - - -/*nugget covariance value for lag h*/ -double nugget(double h); - - -/*power covariance value for lag h and exponent alpha*/ -double power(double h,double alpha); - - -/*generates uniform deviates between 0 and 1*/ -/*idum: seed */ -double ran2(long *idum, long *idum2, long *iy, long *iv); - - - -/*calculates bt.b */ -/* b : vector, bi, i = [0...n-1] */ -/* n : length of b */ -/*returns the scalar product of b*/ -double scal_vec(double *b,int n); - - -/*solves the set of n linear equations Cx = D */ -/* C : symmetric positive-definite matrix recorded */ -/* (per raws) as a vector with only components */ -/* Cij so that j <= i, i = [0...n-1] */ -/* D : right-hand side vector, Di avec i = [0...n-1]*/ -/* n : dimension of matrix Cij */ -/* */ -/* The solution vector is returned in D */ -/* CONJUGATE GRADIENT method */ -void solve3(double *C, double *D, int n); - - -/*sorts an array [0...n-1] into ascending order using */ -/*shell */ -void sort(float n, float *arr); - - -/*spherical covariance value for lag h*/ -double spherical(double h); - - -/*stable covariance value for lag h and exponent alpha*/ -double stable(double h, double alpha); - - -/*conversion of log mean and variance to nor*/ -void statlog2nor(struct statistic_mod *pstat); - - -/*tries factor */ -/*pnum: number to be decomposed */ -/*fact: suggested factor */ -/*pmaxfac: memory to keep the greatest factor*/ -int test_fact(int *pnum, int fact, int *pmaxfac); - - -/*calculates the integrale of an approximate function*/ -/*for the Gaussian function over an interval defined */ -/*by lim_inf and lim_sup */ -/*lim_inf: lower bound of the considered interval */ -/*lim_sup: upper bound of the considered interval */ -double trun1(double lim_inf, double lim_sup); - - -/*draws a truncated gaussian variable between lim_inf*/ -/*and lim_sup */ -/*idum: seed */ -double trungasdev(long *idum,double lim_inf,double lim_sup,long *idum2, long *iy, long iv[NTAB]); - -/* tb1.b2 */ -/* b1 : vector */ -/* b2 : vector */ -/* n : length of b1 and b2, bi, i = [0...n-1]*/ -/*returns the norm the product tb1.b2 */ -double vec_vec(double *b1, double *b2,int n); - - -/*turns the volume fractions into Gaussian thresholds */ -/*facies: structure defined above */ -/*thresholds: output threshold vector fot i = [0...n-1]*/ -/*where n is the number of facies-1 */ -/*USES normal*/ -void vf2gthres(struct statfacies_mod facies,float *thresholds); - -void polint(float xa[],float ya[],int n,float x, float *y,float *dy); - - - -#endif diff --git a/fftma_module/gen/LIBFFTMA/length.c b/fftma_module/gen/LIBFFTMA/length.c deleted file mode 100755 index c2dfc8b..0000000 --- a/fftma_module/gen/LIBFFTMA/length.c +++ /dev/null @@ -1,39 +0,0 @@ -#include - -/* compute the length for one dimension*/ -int length(int N, int i, double *scf, double *ap, double D, int Nvari) -{ - int maxfactor(int n); - double temp1, temp2; - int n, j, k, nmax; - int nlimit = 13; - - if (N == 1) { - n = 1; - } else { - - for (k = 0; k < Nvari; k++) { - temp1 = fabs(ap[9*k+i])*scf[3*k]*scf[3*k]; - for (j = 1; j <3; j++) { - temp2 = fabs(ap[9*k+3*j+i])*scf[3*k+j]*scf[3*k+j]; - if (temp2 > temp1) - temp1 = temp2; - } - } - temp1 = sqrt(temp1); - temp1 /= (double)D; - if ((double)N/temp1 < 2.) { - n = N+(int)(2*temp1); - } else { - n = N+(int)temp1; - } - if ((n % 2) != 0) - n = n+1; - nmax = maxfactor(n); - while (nmax > nlimit) { - n += 2; - nmax = maxfactor(n); - } - } - return (n); -} diff --git a/fftma_module/gen/LIBFFTMA/makefileFFTMA_debug.lib b/fftma_module/gen/LIBFFTMA/makefileFFTMA_debug.lib deleted file mode 100755 index 98f92c5..0000000 --- a/fftma_module/gen/LIBFFTMA/makefileFFTMA_debug.lib +++ /dev/null @@ -1,36 +0,0 @@ -# -######################################################################## -# -# Makefile for library -# -######################################################################## -# - -INCLUDE = -I./ -LIBS = -lm -L./ -# CCFLAGS = -fast -ifeq (${ARCH},sun) - CC = cc - CCFLAGS = -g -endif -ifeq (${ARCH},linux) - CC = gcc - CCFLAGS = -g -endif - -LIB = libFFTMA_debug_${ARCH}.a - -NOBJS= gammf.o FFTMA.o addstat.o axes.o cgrid.o covariance.o fourt.o length.o maxfactor.o test_fact.o cov_value.o generate.o gasdev.o ran2.o stable.o gaussian.o power.o cubic.o spherical.o nugget.o exponential.o cardsin.o nor2log.o - - -.c.o: - ${CC} $(INCLUDE) $(CCFLAGS) -c $< - -# LIBRARY -$(LIB) : $(NOBJS) - ar cr $(LIB) $(NOBJS) - ranlib $(LIB) - -clean : - rm *.o - diff --git a/fftma_module/gen/LIBFFTMA/maxfactor.c b/fftma_module/gen/LIBFFTMA/maxfactor.c deleted file mode 100755 index 842cd8b..0000000 --- a/fftma_module/gen/LIBFFTMA/maxfactor.c +++ /dev/null @@ -1,35 +0,0 @@ -#include "genlib.h" - -/*determines the greatest prime factor of an integer*/ -int maxfactor(int n) -{ - int test_fact(int *pnum, int fact, int *pmaxfac); - int lnum, fact; - int maxfac; - - maxfac = 1; - lnum = n; - - if ( lnum != 0 && lnum != 1 ) { - fact = 2; - if ( test_fact( &lnum, fact,&maxfac)) { - fact = 3; - if ( test_fact( &lnum, fact,&maxfac)) { - fact = 5; - for (;;) { - if (!test_fact( &lnum, fact,&maxfac)) - break; - fact += 2; - if (!test_fact( &lnum, fact,&maxfac)) - break; - fact += 4; - } - } - } - if ( lnum != 1 ) { - if (lnum > maxfac) - maxfac = lnum; - } - } - return (maxfac); -} diff --git a/fftma_module/gen/LIBFFTMA/nor2log.c b/fftma_module/gen/LIBFFTMA/nor2log.c deleted file mode 100755 index 44b6568..0000000 --- a/fftma_module/gen/LIBFFTMA/nor2log.c +++ /dev/null @@ -1,78 +0,0 @@ -#include -#include -#include "geostat.h" - - -/*TURNS NORMAL NUMBERS INTO LOGNORMAL NUMBERS */ -/*input: */ -/*realin: structure defining a realization - */ -/* normal numbers */ -/*typelog: --> 3: lognormal (natural) */ -/* --> 4: lognormal (log10) */ -/*output: */ -/*realout: structure defining a realization - */ -/* lognormal numbers */ - -void nor2log(struct realization_mod *realin, int typelog, struct realization_mod *realout) -{ - - int i; - double coeff; - - - coeff = log(10.0); - - - /*Is the output realization allocated ?*/ - /*is its length equal to realin.n?*/ - if ((*realout).vector == NULL || (*realout).n != (*realin).n) { - (*realout).vector = (double *) malloc((*realin).n * sizeof(double)); - if ((*realout).vector == NULL) { - printf("No memory available"); - return; - } - } - (*realout).n = (*realin).n; - - - switch ((*realin).code) { - case 0: - case 1: - case 2: - (*realout).code = typelog; - break; - case 6: - case 7: - if (typelog == 3) { - (*realout).code = 8; - } else if (typelog == 4) { - (*realout).code = 9; - } - break; - default: - printf("Input is not normal in nor2log"); - return; - break; - } - - - /*anamorphose*/ - for (i = 0; i < (*realin).n; i++) { - switch (typelog) { - case 3: - /*natural logarithm*/ - (*realout).vector[i] = exp((*realin).vector[i]); - break; - case 4: - /*log10*/ - (*realout).vector[i] = exp((*realin).vector[i]*coeff); - break; - default: - printf("Unexpected case in nor2log"); - return; - break; - } - } - - return; -} diff --git a/fftma_module/gen/LIBFFTMA/nugget.c b/fftma_module/gen/LIBFFTMA/nugget.c deleted file mode 100755 index cda4929..0000000 --- a/fftma_module/gen/LIBFFTMA/nugget.c +++ /dev/null @@ -1,14 +0,0 @@ -#include -#include -#include "genlib.h" - - -/*nugget covariance function*/ -double nugget(double h) -{ - if (h == 0) { - return (1.); - } else { - return(0.); - } -} diff --git a/fftma_module/gen/LIBFFTMA/power.c b/fftma_module/gen/LIBFFTMA/power.c deleted file mode 100755 index 88281f6..0000000 --- a/fftma_module/gen/LIBFFTMA/power.c +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include -#include "genlib.h" - - -/*power covariance function*/ -double power(double h, double alpha) -{ - return(pow(h,alpha)); -} diff --git a/fftma_module/gen/LIBFFTMA/ran2.c b/fftma_module/gen/LIBFFTMA/ran2.c deleted file mode 100755 index 8075f4f..0000000 --- a/fftma_module/gen/LIBFFTMA/ran2.c +++ /dev/null @@ -1,50 +0,0 @@ -#include "genlib.h" - -#define IM1 2147483563 -#define IM2 2147483399 -#define AM (1.0/IM1) -#define IMM1 (IM1-1) -#define IA1 40014 -#define IA2 40692 -#define IQ1 53668 -#define IQ2 52774 -#define IR1 12211 -#define IR2 3791 -#define NTAB 32 -#define NDIV (1+IMM1/NTAB) -#define EPS 1.2e-7 -#define RNMX (1.0-EPS) - -double ran2(long *idum, long *idum2, long *iy, long iv[NTAB]) - -{ - int j; - long k; - double temp; - - if (*idum <= 0) { - if (-(*idum) < 1) *idum = 1; - else *idum = -(*idum); - *idum2 = (*idum); - for (j = NTAB+7; j >= 0; j--) { - k = (*idum)/IQ1; - *idum = IA1*(*idum-k*IQ1)-k*IR1; - if (*idum < 0) *idum += IM1; - if (j < NTAB) iv[j] = *idum; - } - *iy = iv[0]; - } - - k = (*idum)/IQ1; - *idum = IA1*(*idum-k*IQ1)-k*IR1; - if (*idum < 0) *idum += IM1; - k = *idum2/IQ2; - *idum2 = IA2*(*idum2-k*IQ2)-k*IR2; - if (*idum2 < 0) *idum2 += IM2; - j = (*iy)/NDIV; - *iy = iv[j]-(*idum2); - iv[j] = *idum; - if (*iy < 1) (*iy) += IMM1; - if ((temp = AM*(*iy)) > RNMX) return (RNMX); - else return (temp); -} diff --git a/fftma_module/gen/LIBFFTMA/spherical.c b/fftma_module/gen/LIBFFTMA/spherical.c deleted file mode 100755 index a36e492..0000000 --- a/fftma_module/gen/LIBFFTMA/spherical.c +++ /dev/null @@ -1,17 +0,0 @@ -#include -#include -#include "genlib.h" - - -/*spherical covariance function*/ -double spherical(double h) -{ - double z; - - if (h >= 1.) { - z = 0.; - } else { - z = 1.-1.5*(double)h+0.5*(double)(h*h*h); - } - return (z); -} diff --git a/fftma_module/gen/LIBFFTMA/stable.c b/fftma_module/gen/LIBFFTMA/stable.c deleted file mode 100755 index 45c5a29..0000000 --- a/fftma_module/gen/LIBFFTMA/stable.c +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include -#include "genlib.h" - - -/*stable covariance function*/ -double stable(double h, double alpha) -{ - return(exp(-3.*(double)pow(h,alpha))); -} diff --git a/fftma_module/gen/LIBFFTMA/test_fact.c b/fftma_module/gen/LIBFFTMA/test_fact.c deleted file mode 100755 index d2456ee..0000000 --- a/fftma_module/gen/LIBFFTMA/test_fact.c +++ /dev/null @@ -1,26 +0,0 @@ -#include "genlib.h" - -/*tries factor*/ -int test_fact(int *pnum, int fact, int *pmaxfac) -{ - int power, t; - - power = 0; - while ( ( t = *pnum / fact ) * fact == *pnum ) { - ++power; - *pnum = t; - } - - if ( power != 0 ) { - if (fact > *pmaxfac) - *pmaxfac = fact; - } - - if ( t > fact ) { - return (1); - } - - return (0); -} - - diff --git a/fftma_module/gen/LIB_FFTMA2/._.DS_Store b/fftma_module/gen/LIB_FFTMA2/._.DS_Store deleted file mode 100755 index c9474ea62235481b7d27ae5a878d2b4070bc6e05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 82 jcmZQz6=P>$V!#9-F-{;h0%8Rq2JwS{7!DlZEK~*nFE;@e diff --git a/fftma_module/gen/LIB_FFTMA2/FFTMAmemoire.c b/fftma_module/gen/LIB_FFTMA2/FFTMAmemoire.c deleted file mode 100755 index 15d7f04..0000000 --- a/fftma_module/gen/LIB_FFTMA2/FFTMAmemoire.c +++ /dev/null @@ -1,110 +0,0 @@ -#include -#include -#include -#include "geostat.h" - - -/*FAST FOURIER TRANSFORM MOVING AVERAGE METHOD */ -/*Turns a Gaussian white noise vector into a */ -/*spatially correlated vector */ -/*input: */ -/*variogram: structure defining the variogram */ -/* model */ -/*grid: structure defining the grid */ -/*n: vector with the number of cells along the */ -/* X, Y and Z axes for the underlying grid */ -/* i = [0 1 2] */ -/* --> 0 0 0 : n will be computed and */ -/* updated as output */ -/* --> nx ny nz: these dimensions are used */ -/*realin: structure defining a realization - */ -/* must be a Gaussian white noise */ -/*output: */ -/*realout: structure defining a realization - */ - -void FFTMA2(struct vario_mod variogram,struct grid_mod grid,int n[3],struct realization_mod *realin,struct realization_mod *realout) -{ - int NTOT,i,j,k,NMAX,NDIM,ntot,nmax,NXYZ,nxyz,maille0,maille1; - int solver; - double temp; - double *ireal,*covar,*workr,*worki,*realization; - string variable; - - /*covariance axis normalization*/ - axes(variogram.ap,variogram.scf,variogram.Nvario); - - /*pseudo-grid definition*/ - cgrid(variogram,grid,n); - - /*constant definition*/ - NTOT = n[0]*n[1]*n[2]; - ntot = NTOT+1; - NMAX = n[0]; - NDIM = 3; - for (i=1;i<3;i++) { - if (n[i] > NMAX) - NMAX = n[i]; - if (n[i] == 1) - NDIM--; - } - nmax = NMAX+1; - NXYZ = grid.NX*grid.NY*grid.NZ; - nxyz = NXYZ+1; - - /*array initialization*/ - covar = (double *) malloc(ntot * sizeof(double)); -/* testmemory(covar); */ - allouememoire(covar,'covar'); - - - - - ireal = (double *) malloc(ntot * sizeof(double)); - testmemory(ireal); - - realization = (double *) malloc(ntot * sizeof(double)); - testmemory(realization); - - workr = (double *) malloc(nmax * sizeof(double)); - testmemory(workr); - - worki = (double *) malloc(nmax * sizeof(double)); - testmemory(worki); - - /*covariance function creation*/ - covariance(covar,variogram,grid,n); - - /*power spectrum*/ - fourt(covar,ireal,n,NDIM,1,0,workr,worki); - - /*organization of the input Gaussian white noise*/ - solver=0; - prebuild_gwn(grid,n,realin,realization,solver); - - /*forward fourier transform of the GWN*/ - fourt(realization,ireal,n,NDIM,1,0,workr,worki); - - /* build realization in spectral domain */ - build_real(n,NTOT,covar,realization,ireal); - - free(covar); - - /*backward fourier transform*/ - fourt(realization,ireal,n,NDIM,0,1,workr,worki); - - - free(ireal); - free(workr); - free(worki); - - /*output realization*/ - clean_real(realin,n,grid,realization,realout); - - free(realization); - - return; -} - - - - diff --git a/fftma_module/gen/LIB_FFTMA2/Makefile.libFFTMA2 b/fftma_module/gen/LIB_FFTMA2/Makefile.libFFTMA2 deleted file mode 100755 index 09fc204..0000000 --- a/fftma_module/gen/LIB_FFTMA2/Makefile.libFFTMA2 +++ /dev/null @@ -1,30 +0,0 @@ - -######################################################################## -# -# Makefile for library -# -######################################################################## - - -INTERFACE = ../include - -INCLUDE = -I${INTERFACE} -LIBS = -lm -L../lib -CC = cc - CCFLAGS = - -LIB = libFFTMA2_${ARCH}.a - -NOBJS= kgeneration.o kgeneration2.o fftma2.o prebuild_gwn.o build_real.o addstat2.o clean_real.o - -.c.o: - ${CC} $(INCLUDE) $(CCFLAGS) -c $< - -# LIBRARY -$(LIB) : $(NOBJS) - ar cr $(LIB) $(NOBJS) - ranlib $(LIB) - -clean : - rm *.o - diff --git a/fftma_module/gen/LIB_FFTMA2/addstat2.c b/fftma_module/gen/LIB_FFTMA2/addstat2.c deleted file mode 100755 index 3096d0f..0000000 --- a/fftma_module/gen/LIB_FFTMA2/addstat2.c +++ /dev/null @@ -1,119 +0,0 @@ -#include -#include -#include "genlib.h" -#include "geostat.h" - -/*addstat */ -/*adds mean and variance effects to the N(0,1) realization*/ -/*input: */ -/*realin: structure defining a realization - */ -/* must have zeio mean and unit variance */ -/*stat: structure defining the mean and variance */ -/*output: */ -/*realout: structure defining a realization - */ - -void addstat2(struct realization_mod *realin,struct statistic_mod stat ,struct realization_mod *realout,struct realization_mod *realout2) - -{ - - int i,nblockm,nblockv; - double r,moy,var; - - /*Is the output realization allocated ?*/ - /*is its length equal to realin.n?*/ - if ((*realout).vector == NULL || (*realout).n != (*realin).n) { - (*realout).vector = (double *) malloc((*realin).n * sizeof(double)); - if ((*realout).vector == NULL) - Error("No memory available"); - } - (*realout).n = (*realin).n; - - if ((*realout2).vector == NULL || (*realout2).n != (*realin).n) { - (*realout2).vector = (double *) malloc((*realin).n * sizeof(double)); - if ((*realout2).vector == NULL) - Error("No memory available"); - } - (*realout2).n = (*realin).n; - - - /*test over the input realization*/ - switch ((*realin).code) { - case 0: - case 1: - (*realout).code = 2; - (*realout2).code = 2; - break; - case 6: - (*realout).code = 7; - (*realout2).code = 7; - break; - default: - (*realout).code = (*realin).code; - (*realout2).code = (*realin).code; - break; - } - - for (i = 0; i < (*realin).n; i++) { - - - /*mean*/ - switch (stat.nblock_mean) { - case 1: - /*stationary case*/ - nblockm = 1; - break; - default: - /*number of the cell - nonstationary case*/ - nblockm = i+1; - break; - } - - - /*variance*/ - switch (stat.nblock_var) { - case 1: - /*stationary case*/ - nblockv = 1; - break; - default: - /*number of the cell - nonstationary case*/ - nblockv = i+1; - break; - } - - - /* switch (stat.type) { */ -/* case 0: */ - - /*normal case*/ - moy = stat.mean[nblockm-1]; - var = stat.variance[nblockv-1]; - -/* break; */ -/* case 1: */ - /*lognormal (natural) case*/ -/* r = (double)sqrt(stat.variance[nblockv-1])/stat.mean[nblockm-1]; */ -/* r *= r; */ -/* moy = (double)log(stat.mean[nblockm-1]/sqrt(1.0+r)); */ -/* var = (double)log(1.0+r); */ -/* break; */ -/* case 2: */ - /*lognormal (log10) case*/ -/* r = (double)sqrt(stat.variance[nblockv-1])/stat.mean[nblockm-1]; */ -/* r *= r; */ -/* moy = (double)log10(stat.mean[nblockm-1]/sqrt(1.0+r)); */ -/* var = (double)log10(1.0+r); */ -/* break; */ -/* default: */ -/* Error("Type not defined in addstat"); */ -/* break; */ -/* } */ - - - - (*realout).vector[i] = (double)sqrt(var)*(*realin).vector[i]; - (*realout2).vector[i] = (double)sqrt(var)*(*realin).vector[i]+moy; - } - - return; -} diff --git a/fftma_module/gen/LIB_FFTMA2/build_real.c b/fftma_module/gen/LIB_FFTMA2/build_real.c deleted file mode 100755 index 4a0e186..0000000 --- a/fftma_module/gen/LIB_FFTMA2/build_real.c +++ /dev/null @@ -1,45 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include "geostat.h" - -/* build_real */ -/* build a realization in the spectral domain */ -/*n: vector with the number of cells along the */ -/* X, Y and Z axes for the underlying grid */ -/* i = [0 1 2] */ -/* --> 0 0 0 : n will be computed and */ -/* updated as output */ -/* --> nx ny nz: these dimensions are used */ -/*covar: vector defining the covariance in spectral domain */ -/*realization: vector defining the real part */ -/*ireal: vector defining the i-part */ - -void build_real(int n[3],int NTOT,double *covar,double *realization,double *ireal) -{ - int i,j,k,maille1; - double temp; - - - /*decomposition and multiplication in the spectral domain*/ - for ( k = 1; k <= n[2]; k++) { - for (j = 1; j <= n[1]; j++) { - for (i = 1; i <= n[0]; i++) { - maille1 = i+(j-1+(k-1)*n[1])*n[0]; - temp = covar[maille1]; - if (temp > 0.) { - temp = sqrt(temp)/(double) NTOT; - } else if (temp < 0.) { - temp = sqrt(-temp)/(double) NTOT; - } - realization[maille1] *= temp; - ireal[maille1] *= temp; - } - } - } - - return; -} diff --git a/fftma_module/gen/LIB_FFTMA2/clean_real.c b/fftma_module/gen/LIB_FFTMA2/clean_real.c deleted file mode 100755 index d249b18..0000000 --- a/fftma_module/gen/LIB_FFTMA2/clean_real.c +++ /dev/null @@ -1,43 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include "geostat.h" - -void clean_real(struct realization_mod *realin,int n[3],struct grid_mod grid,double *vectorresult,struct realization_mod *realout) -{ - int i,j,k,maille0,maille1; - double NTOT; - - NTOT=n[0]*n[1]*n[2]; - /*is the output realization already allocated?*/ - /*if not, memory allocation*/ - - if ((*realout).vector == NULL || (*realout).n != (*realin).n) - { - (*realout).vector = (double *) malloc((*realin).n * sizeof(double)); - if ((*realout).vector == NULL) - { - printf("Clean_real.c: No memory available\n"); - exit; - } - } - - (*realout).n = (*realin).n; - (*realout).code = 1; - for ( k = 1; k <= grid.NZ; k++) { - for (j = 1; j <= grid.NY; j++) { - for (i = 1; i <= grid.NX; i++) { - maille1 = i+(j-1+(k-1)*n[1])*n[0]; - maille0 = i-1+(j-1+(k-1)*grid.NY)*grid.NX; - /* Modif du 18 juin 2003 */ - /*(*realout).vector[maille0] = vectorresult[maille1]/(double) NTOT;*/ - (*realout).vector[maille0] = vectorresult[maille1]; - } - } - } - - return; -} diff --git a/fftma_module/gen/LIB_FFTMA2/fftma2.c b/fftma_module/gen/LIB_FFTMA2/fftma2.c deleted file mode 100755 index 5977690..0000000 --- a/fftma_module/gen/LIB_FFTMA2/fftma2.c +++ /dev/null @@ -1,105 +0,0 @@ -#include -#include -#include -#include "geostat.h" - - -/*FAST FOURIER TRANSFORM MOVING AVERAGE METHOD */ -/*Turns a Gaussian white noise vector into a */ -/*spatially correlated vector */ -/*input: */ -/*variogram: structure defining the variogram */ -/* model */ -/*grid: structure defining the grid */ -/*n: vector with the number of cells along the */ -/* X, Y and Z axes for the underlying grid */ -/* i = [0 1 2] */ -/* --> 0 0 0 : n will be computed and */ -/* updated as output */ -/* --> nx ny nz: these dimensions are used */ -/*realin: structure defining a realization - */ -/* must be a Gaussian white noise */ -/*output: */ -/*realout: structure defining a realization - */ - -void FFTMA2(struct vario_mod variogram,struct grid_mod grid,int n[3],struct realization_mod *realin,struct realization_mod *realout) -{ - int NTOT,i,j,k,NMAX,NDIM,ntot,nmax,NXYZ,nxyz,maille0,maille1; - int solver; - double temp; - double *ireal,*covar,*workr,*worki,*realization; - - /*covariance axis normalization*/ - axes(variogram.ap,variogram.scf,variogram.Nvario); - - /*pseudo-grid definition*/ - cgrid(variogram,grid,n); - - /*constant definition*/ - NTOT = n[0]*n[1]*n[2]; - ntot = NTOT+1; - NMAX = n[0]; - NDIM = 3; - for (i=1;i<3;i++) { - if (n[i] > NMAX) - NMAX = n[i]; - if (n[i] == 1) - NDIM--; - } - nmax = NMAX+1; - NXYZ = grid.NX*grid.NY*grid.NZ; - nxyz = NXYZ+1; - - /*array initialization*/ - covar = (double *) malloc(ntot * sizeof(double)); - testmemory(covar); - - ireal = (double *) malloc(ntot * sizeof(double)); - testmemory(ireal); - - realization = (double *) malloc(ntot * sizeof(double)); - testmemory(realization); - - workr = (double *) malloc(nmax * sizeof(double)); - testmemory(workr); - - worki = (double *) malloc(nmax * sizeof(double)); - testmemory(worki); - - /*covariance function creation*/ - covariance(covar,variogram,grid,n); - - /*power spectrum*/ - fourt(covar,ireal,n,NDIM,1,0,workr,worki); - - /*organization of the input Gaussian white noise*/ - solver=0; - prebuild_gwn(grid,n,realin,realization,solver); - - /*forward fourier transform of the GWN*/ - fourt(realization,ireal,n,NDIM,1,0,workr,worki); - - /* build realization in spectral domain */ - build_real(n,NTOT,covar,realization,ireal); - - free(covar); - - /*backward fourier transform*/ - fourt(realization,ireal,n,NDIM,0,1,workr,worki); - - - free(ireal); - free(workr); - free(worki); - - /*output realization*/ - clean_real(realin,n,grid,realization,realout); - - free(realization); - - return; -} - - - - diff --git a/fftma_module/gen/LIB_FFTMA2/kgeneration.c b/fftma_module/gen/LIB_FFTMA2/kgeneration.c deleted file mode 100755 index 633e4c8..0000000 --- a/fftma_module/gen/LIB_FFTMA2/kgeneration.c +++ /dev/null @@ -1,79 +0,0 @@ -#include -#include -#include -#include -#include -#include "genlib.h" -#include "simpio.h" -#include "geostat.h" -#include "toolsIO.h" -#include "toolsFFTMA.h" - -/* kgeneration */ -/* Z is the GWN with 0-mean and 1-variance */ -/* Y1 is the realization with 0-mean and variance wanted */ -/* Y is the realization with mean and variance wanted */ - -void kgeneration(long seed,struct grid_mod grid,struct statistic_mod stat,struct vario_mod variogram,string filename[7],struct realization_mod *Z,struct realization_mod *Y,struct realization_mod *Y1, int n[3], int *genere, int *gwnwrite, struct realization_mod *gwnoise) - { - int i,N; - int typelog; - string file1,file2; - - /*generate Gaussian white noise*/ - N = grid.NX*grid.NY*grid.NZ; - n[0] = 0; - n[1] = 0; - n[2] = 0; - printf("\n\n\n"); - - switch (*genere) - { - case 0: - generate(&seed,N,Z); - /*save the Gaussian white noise file*/ - if (*gwnwrite == 0) - { - writefile(filename[0],Z); - } - break; - case 1: - (*Z).vector=(double *) malloc(N*sizeof(double)); - (*Z).n = N; - for (i=0;i -#include -#include -#include -#include -#include "genlib.h" -#include "simpio.h" -#include "geostat.h" -#include "toolsIO.h" -#include "toolsFFTMA.h" - -/* kgeneration */ -/* Z is the GWN with 0-mean and 1-variance */ -/* Y1 is the realization with 0-mean and variance wanted */ -/* Y is the realization with mean and variance wanted */ - -void kgeneration2(long seed,struct grid_mod grid,struct statistic_mod stat,struct vario_mod variogram,string filename[7],struct realization_mod *Z,struct realization_mod *Y,struct realization_mod *Y1, int n[3], int *genere, int *gwnwrite, struct realization_mod *gwnoise,int *format_file) - { - int i,N; - int typelog; - string file1,file2; - - /*generate Gaussian white noise*/ - N = grid.NX*grid.NY*grid.NZ; - n[0] = 0; - n[1] = 0; - n[2] = 0; - printf("\n\n\n"); - - switch (*genere) - { - case 0: - generate(&seed,N,Z); - /*save the Gaussian white noise file*/ - if (*gwnwrite == 0) - { - writefile(filename[0],Z); - } - break; - case 1: - (*Z).vector=(double *) malloc(N*sizeof(double)); - (*Z).n = N; - for (i=0;i -#include -#include -#include -#include -#include -#include "geostat.h" - -/* prebuild_gwn */ -/* Produce a first construction in real space of the Gaussian white noise */ -/* grid: structure defining the grid */ -/*n: vector with the number of cells along the */ -/* X, Y and Z axes for the underlying grid */ -/* i = [0 1 2] */ -/* --> 0 0 0 : n will be computed and */ -/* updated as output */ -/* --> nx ny nz: these dimensions are used */ -/*realin: structure defining a realization - */ -/* must be a Gaussian white noise */ -/*realization: structure defining a realization*/ - -void prebuild_gwn(struct grid_mod grid,int n[3],struct realization_mod *realin,double *realization,int solver) - - { - int i,j,k,maille0,maille1; - int ntot; - - ntot=n[0]*n[1]*n[2]; - realization[0]=0.; - if (solver==1) - { - for (i=0;i -#include -#include "genlib.h" -#include "geostat.h" - -#ifndef _TOOLSFFTMA_H -#define _TOOLSFFTMA_H - -/* Create december, the 16th 2002 */ -/* Modified december, the 9th 2002 */ - -/* List of functions: */ -/* ------------------ */ -/* kgeneration, FFTMA2, prebuild_gwn, build_real, addstat2, clean_real */ - - -/*FUNCTIONS*/ -/*----------*/ - -void kgeneration(long seed,struct grid_mod grid,struct statistic_mod stat,struct vario_mod variogram,string filename[8],struct realization_mod *Z,struct realization_mod *Y,struct realization_mod *Y2, int n[3], int *genere, int *gwnwrite, struct realization_mod *gwnoise); - -void kgeneration2(long seed,struct grid_mod grid,struct statistic_mod stat,struct vario_mod variogram,string filename[7],struct realization_mod *Z,struct realization_mod *Y,struct realization_mod *Y1, int n[3], int *genere, int *gwnwrite, struct realization_mod *gwnoise,int *format_file) ; - -/*FAST FOURIER TRANSFORM Pressure Simulation */ -/*Turns a Gaussian white noise vector into a */ -/*spatially correlated vector */ -/*input: */ -/*variogram: structure defining the variogram */ -/* model */ -/*grid: structure defining the grid */ -/*n: vector with the number of cells along the */ -/* X, Y and Z axes for the underlying grid */ -/* i = [0 1 2] */ -/* --> 0 0 0 : n will be computed and */ -/* updated as output */ -/* --> nx ny nz: these dimensions are used */ -/*realin: structure defining a realization - */ -/* must be a Gaussian white noise */ -/*gradient: macroscopic gradient pression vector */ -/*output: */ -/*realout: structure defining a realization - */ -/*realout2: structure defining a pressure field */ -/*realout3: structure defining a xvelocity field */ -/*realout4: structure defining a yvelocity field */ -/*realout5: structure defining a zvelocity field */ - -void FFTMA2(struct vario_mod variogram,struct grid_mod grid,int n[3],struct realization_mod *realin,struct realization_mod *realout); - -/* prebuild_gwn */ -/* Produce a first construction in real space of the Gaussian white noise */ -/* grid: structure defining the grid */ -/*n: vector with the number of cells along the */ -/* X, Y and Z axes for the underlying grid */ -/* i = [0 1 2] */ -/* --> 0 0 0 : n will be computed and */ -/* updated as output */ -/* --> nx ny nz: these dimensions are used */ -/*realin: structure defining a realization - */ -/* must be a Gaussian white noise */ -/*realization: structure defining a realization*/ - -void prebuild_gwn(struct grid_mod grid,int n[3],struct realization_mod *realin,double *realization,int solver); - -/* build_real */ -/* build a realization in the spectral domain */ -/*n: vector with the number of cells along the */ -/* X, Y and Z axes for the underlying grid */ -/* i = [0 1 2] */ -/* --> 0 0 0 : n will be computed and */ -/* updated as output */ -/* --> nx ny nz: these dimensions are used */ -/*covar: vector defining the covariance in spectral domain */ -/*realization: vector defining the real part */ -/*ireal: vector defining the i-part */ - -void build_real(int n[3],int NTOT,double *covar,double *realization,double *ireal); - -void addstat2(struct realization_mod *realin,struct statistic_mod stat ,struct realization_mod *realout,struct realization_mod *realout2); - -void clean_real(struct realization_mod *realin,int n[3],struct grid_mod grid,double *vectorresult,struct realization_mod *realout); - -#endif // define _TOOLSFFTMA_H diff --git a/fftma_module/gen/LIB_FFTPSIM/._.DS_Store b/fftma_module/gen/LIB_FFTPSIM/._.DS_Store deleted file mode 100755 index c9474ea62235481b7d27ae5a878d2b4070bc6e05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 82 jcmZQz6=P>$V!#9-F-{;h0%8Rq2JwS{7!DlZEK~*nFE;@e diff --git a/fftma_module/gen/LIB_FFTPSIM/FFTPSim.c b/fftma_module/gen/LIB_FFTPSIM/FFTPSim.c deleted file mode 100755 index 0f65c29..0000000 --- a/fftma_module/gen/LIB_FFTPSIM/FFTPSim.c +++ /dev/null @@ -1,162 +0,0 @@ -#include -#include -#include "geostat.h" -#include "toolsludo.h" - - -/*FAST FOURIER TRANSFORM Pressure Simulation */ -/*Turns a Gaussian white noise vector into a */ -/*spatially correlated vector */ -/*input: */ -/*variogram: structure defining the variogram */ -/* model */ -/*grid: structure defining the grid */ -/*n: vector with the number of cells along the */ -/* X, Y and Z axes for the underlying grid */ -/* i = [0 1 2] */ -/* --> 0 0 0 : n will be computed and */ -/* updated as output */ -/* --> nx ny nz: these dimensions are used */ -/*realin: structure defining a realization - */ -/* must be a Gaussian white noise */ -/*gradient: macroscopic gradient pression vector */ -/*output: */ -/*realout: structure defining a realization - */ -/*realout2: structure defining a pressure field */ -/*realout3: structure defining a xvelocity field */ -/*realout4: structure defining a yvelocity field */ -/*realout5: structure defining a zvelocity field */ - - -void FFTPSim(struct vario_mod variogram,struct statistic_mod stat,struct grid_mod grid,int n[3],struct realization_mod *realin,struct pressure_mod gradient,struct realization_mod *realout,struct realization_mod *realout2,struct realization_mod *realout3,struct realization_mod *realout4,struct realization_mod *realout5) - -{ - int NTOT,i,j,k,NMAX,NDIM,ntot,nmax,NXYZ,nxyz,maille0,maille1; - double *workr,*worki,temp,temp2,coeff; - double *covar,*realization,*pressure; - double *icovar,*ireal,*ipressure; - double *xvelocity,*ixvelocity,*yvelocity,*iyvelocity,*zvelocity,*izvelocity; - double ki,kj,kk; - - /*covariance axis normalization*/ - axes(variogram.ap,variogram.scf,variogram.Nvario); - - /*pseudo-grid definition*/ - cgrid(variogram,grid,n); - - /*constant definition*/ - NTOT = n[0]*n[1]*n[2]; - ntot = NTOT+1; - NMAX = n[0]; - NDIM = 3; - for (i=1;i<3;i++) { - if (n[i] > NMAX) - NMAX = n[i]; - if (n[i] == 1) - NDIM--; - } - nmax = NMAX+1; - NXYZ = grid.NX*grid.NY*grid.NZ; - nxyz = NXYZ+1; - - /*array initialization*/ - covar = (double *) malloc(ntot * sizeof(double)); - testmemory(covar); - - icovar = (double *) malloc(ntot * sizeof(double)); - testmemory(icovar); - - realization = (double *) malloc(ntot * sizeof(double)); - testmemory(realization); - - ireal = (double *) malloc(ntot * sizeof(double)); - testmemory(ireal); - - pressure = (double *) malloc(ntot * sizeof(double)); - testmemory(pressure); - - ipressure = (double *) malloc(ntot * sizeof(double)); - testmemory(ipressure); - - xvelocity = (double *) malloc(ntot * sizeof(double)); - testmemory(xvelocity); - - ixvelocity = (double *) malloc(ntot * sizeof(double)); - testmemory(ixvelocity); - - yvelocity = (double *) malloc(ntot * sizeof(double)); - testmemory(yvelocity); - - iyvelocity = (double *) malloc(ntot * sizeof(double)); - testmemory(iyvelocity); - - zvelocity = (double *) malloc(ntot * sizeof(double)); - testmemory(zvelocity); - - izvelocity = (double *) malloc(ntot * sizeof(double)); - testmemory(izvelocity); - - workr = (double *) malloc(nmax * sizeof(double)); - testmemory(workr); - - worki = (double *) malloc(nmax * sizeof(double)); - testmemory(worki); - - /*covariance function creation*/ - covariance(covar,variogram,grid,n); - - /*power spectrum*/ - fourt(covar,icovar,n,NDIM,1,0,workr,worki); - - /*organization of the input Gaussian white noise*/ - - prebuild_gwn(grid,n,realin,realization); - - /*forward fourier transform of the GWN*/ - fourt(realization,ireal,n,NDIM,1,0,workr,worki); - - /* build realization in spectral domain */ - build_real(n,NTOT,covar,realization,ireal); - - free(covar); - - /* pressure calculation in the spectral domain*/ - - build_pressure(n,grid,gradient,realization,ireal,pressure,ipressure); - build_velocity(n,grid,stat,gradient,realization,ireal,xvelocity,ixvelocity,1); - build_velocity(n,grid,stat,gradient,realization,ireal,yvelocity,iyvelocity,2); - build_velocity(n,grid,stat,gradient,realization,ireal,zvelocity,izvelocity,3); - - /*backward fourier transform*/ - fourt(realization,ireal,n,NDIM,0,1,workr,worki); - fourt(pressure,ipressure,n,NDIM,0,1,workr,worki); - fourt(xvelocity,ixvelocity,n,NDIM,0,1,workr,worki); - fourt(yvelocity,iyvelocity,n,NDIM,0,1,workr,worki); - fourt(zvelocity,izvelocity,n,NDIM,0,1,workr,worki); - - free(ireal); - free(ipressure); - free(ixvelocity); - free(iyvelocity); - free(izvelocity); - free(workr); - free(worki); - - /*output realization*/ - /*is the output realization already allocated?*/ - /*if not, memory allocation*/ - - clean_real(realin,n,grid,realization,realout); - clean_real(realin,n,grid,pressure,realout2); - clean_real(realin,n,grid,xvelocity,realout3); - clean_real(realin,n,grid,yvelocity,realout4); - clean_real(realin,n,grid,zvelocity,realout5); - - free(realization); - free(pressure); - free(xvelocity); - free(yvelocity); - free(zvelocity); - - return; -} diff --git a/fftma_module/gen/LIB_FFTPSIM/FFTPressure.c b/fftma_module/gen/LIB_FFTPSIM/FFTPressure.c deleted file mode 100755 index 15ab392..0000000 --- a/fftma_module/gen/LIB_FFTPSIM/FFTPressure.c +++ /dev/null @@ -1,157 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include "geostat.h" -#include "pressure.h" - - -/*FAST FOURIER TRANSFORM Pressure Simulation */ -/*Turns a Gaussian white noise vector into a */ -/*spatially correlated vector */ -/*input: */ -/*variogram: structure defining the variogram */ -/* model */ -/*grid: structure defining the grid */ -/*n: vector with the number of cells along the */ -/* X, Y and Z axes for the underlying grid */ -/* i = [0 1 2] */ -/* --> 0 0 0 : n will be computed and */ -/* updated as output */ -/* --> nx ny nz: these dimensions are used */ -/*realin: structure defining a realization - */ -/* must be a Gaussian white noise */ -/*gradient: macroscopic gradient pression vector */ -/*output: */ -/*realout: structure defining a realization - */ -/*realout2: structure defining a pressure field */ -/*realout3: structure defining a xvelocity field */ -/*realout4: structure defining a yvelocity field */ -/*realout5: structure defining a zvelocity field */ - - -void FFTPressure(int n[3],struct grid_mod grid,struct realization_mod *realin,struct statistic_mod stat,struct pressure_mod gradient,struct realization_mod *realout,struct realization_mod *realout2,struct realization_mod *realout3,struct realization_mod *realout4,int solver) - -{ - int NTOT,i,j,k,NMAX,NDIM,ntot,nmax,NXYZ,nxyz,maille0,maille1; - double *workr,*worki,temp,temp2,coeff; - double *realization,*pressure; - double *ireal,*ipressure; - double *xvelocity,*ixvelocity,*yvelocity,*iyvelocity,*zvelocity,*izvelocity; - double ki,kj,kk; - FILE *fp; -/* string nomfichier; */ - - /*constant definition*/ - NTOT = n[0]*n[1]*n[2]; - ntot = NTOT+1; - NMAX = n[0]; - NDIM = 3; - for (i=1;i<3;i++) { - if (n[i] > NMAX) - NMAX = n[i]; - if (n[i] == 1) - NDIM--; - } - nmax = NMAX+1; - NXYZ = grid.NX*grid.NY*grid.NZ; - nxyz = NXYZ+1; - - realization = (double *) malloc(ntot * sizeof(double)); - testmemory(realization); - - ireal = (double *) malloc(ntot * sizeof(double)); - testmemory(ireal); - - pressure = (double *) malloc(ntot * sizeof(double)); - testmemory(pressure); - - ipressure = (double *) malloc(ntot * sizeof(double)); - testmemory(ipressure); - - xvelocity = (double *) malloc(ntot * sizeof(double)); - testmemory(xvelocity); - - ixvelocity = (double *) malloc(ntot * sizeof(double)); - testmemory(ixvelocity); - - yvelocity = (double *) malloc(ntot * sizeof(double)); - testmemory(yvelocity); - - iyvelocity = (double *) malloc(ntot * sizeof(double)); - testmemory(iyvelocity); - - zvelocity = (double *) malloc(ntot * sizeof(double)); - testmemory(zvelocity); - - izvelocity = (double *) malloc(ntot * sizeof(double)); - testmemory(izvelocity); - - workr = (double *) malloc(nmax * sizeof(double)); - testmemory(workr); - - worki = (double *) malloc(nmax * sizeof(double)); - testmemory(worki); - - /*organization of the realization*/ - prebuild_gwn(grid,n,realin,realization,solver); - - /*forward fourier transform of the GWN*/ - fourt(realization,ireal,n,NDIM,1,0,workr,worki); - - /* pressure calculation in the spectral domain*/ - - build_pressure(n,grid,gradient,realization,ireal,pressure,ipressure); - - build_velocity(n,grid,stat,gradient,realization,ireal,xvelocity,ixvelocity,1); - build_velocity(n,grid,stat,gradient,realization,ireal,yvelocity,iyvelocity,2); - build_velocity(n,grid,stat,gradient,realization,ireal,zvelocity,izvelocity,3); - - /*backward fourier transform*/ - fourt(realization,ireal,n,NDIM,0,1,workr,worki); - fourt(pressure,ipressure,n,NDIM,0,1,workr,worki); - fourt(xvelocity,ixvelocity,n,NDIM,0,1,workr,worki); - fourt(yvelocity,iyvelocity,n,NDIM,0,1,workr,worki); - fourt(zvelocity,izvelocity,n,NDIM,0,1,workr,worki); - - free(ireal); - free(ipressure); - free(ixvelocity); - free(iyvelocity); - free(izvelocity); - free(workr); - free(worki); - - for (i=1;i<=NTOT;i++) - realization[i]=realization[i]/(double) NTOT; - - fp = fopen("realization.test", "w"); - for (i=1;i<=NTOT;i++) - fprintf(fp,"%f\n",realization[i]); - fclose(fp); - -/* nomfichier="pression.test"; */ - fp = fopen("pression.test", "w"); - for (i=1;i<=NTOT;i++) - fprintf(fp,"%f\n",pressure[i]); - fclose(fp); - - /*output realization*/ - /*is the output realization already allocated?*/ - /*if not, memory allocation*/ - - clean_real2(realin,n,grid,solver,pressure,realout); - clean_real2(realin,n,grid,solver,xvelocity,realout2); - clean_real2(realin,n,grid,solver,yvelocity,realout3); - clean_real2(realin,n,grid,solver,zvelocity,realout4); - - /* free(realization); */ - /* free(pressure); */ - /* free(xvelocity); */ - /* free(yvelocity); */ - /* free(zvelocity); */ - - return; -} diff --git a/fftma_module/gen/LIB_FFTPSIM/FFTtest.c b/fftma_module/gen/LIB_FFTPSIM/FFTtest.c deleted file mode 100755 index 9f88ee0..0000000 --- a/fftma_module/gen/LIB_FFTPSIM/FFTtest.c +++ /dev/null @@ -1,68 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include "geostat.h" - - -/*FAST FOURIER TRANSFORM Test */ - -void FFTtest(int n[3],struct grid_mod grid,struct realization_mod *realin,struct realization_mod *realout,int solver) - -{ - int NTOT,i,j,k,NMAX,NDIM,ntot,nmax,NXYZ,nxyz,maille0,maille1; - double *workr,*worki,temp,temp2,coeff; - double *realization; - double *ireal; - double ki,kj,kk; - FILE *fp; - - /*constant definition*/ - NTOT = n[0]*n[1]*n[2]; - ntot = NTOT+1; - NMAX = n[0]; - NDIM = 3; - for (i=1;i<3;i++) { - if (n[i] > NMAX) - NMAX = n[i]; - if (n[i] == 1) - NDIM--; - } - nmax = NMAX+1; - NXYZ = grid.NX*grid.NY*grid.NZ; - nxyz = NXYZ+1; - - realization = (double *) malloc(ntot * sizeof(double)); - testmemory(realization); - - ireal = (double *) malloc(ntot * sizeof(double)); - testmemory(ireal); - - workr = (double *) malloc(nmax * sizeof(double)); - testmemory(workr); - - worki = (double *) malloc(nmax * sizeof(double)); - testmemory(worki); - - /*organization of the realization*/ - prebuild_gwn(grid,n,realin,realization,solver); - - fp = fopen("perm.test", "w"); - for (i=1;i<=NTOT;i++) - fprintf(fp,"%f\n",realization[i]); - fclose(fp); - - /*forward fourier transform of the GWN*/ - fourt(realization,ireal,n,NDIM,1,0,workr,worki); - - /*backward fourier transform*/ - fourt(realization,ireal,n,NDIM,0,1,workr,worki); - - fp = fopen("perm2.test", "w"); - for (i=1;i<=NTOT;i++) - fprintf(fp,"%f\n",realization[i]); - fclose(fp); - return; -} diff --git a/fftma_module/gen/LIB_FFTPSIM/Makefile.libFFTPSim b/fftma_module/gen/LIB_FFTPSIM/Makefile.libFFTPSim deleted file mode 100755 index 49f4e7a..0000000 --- a/fftma_module/gen/LIB_FFTPSIM/Makefile.libFFTPSim +++ /dev/null @@ -1,34 +0,0 @@ - -######################################################################## -# -# Makefile for library -# -######################################################################## - - -#INTERFACE = ${BOSSE}/CODES/LIBS_C/Interface -#INTERFACE2= ${BOSSE}/CODES/Geostat/FFTPSim/Version_binaire2/src/Interface - -INTERFACE = ../include -#INTERFACE2= ../Interface - -INCLUDE = -I${INTERFACE} -LIBS = -lm -L../lib -CCFLAGS = -CC = cc - -LIB = libFFTPSIM_${ARCH}.a - -NOBJS= pgeneration.o pgeneration2.o FFTPressure.o FFTtest.o build_pressure.o build_velocity.o total_pressure.o total_velocity.o clean_real2.o waveVectorCompute3D.o mat_vec.o derivReal.o - -.c.o: - ${CC} $(INCLUDE) $(CCFLAGS) -c $< - -# LIBRARY -$(LIB) : $(NOBJS) - ar cr $(LIB) $(NOBJS) - ranlib $(LIB) - -clean : - rm *.o - diff --git a/fftma_module/gen/LIB_FFTPSIM/build_pressure.c b/fftma_module/gen/LIB_FFTPSIM/build_pressure.c deleted file mode 100755 index b9ded34..0000000 --- a/fftma_module/gen/LIB_FFTPSIM/build_pressure.c +++ /dev/null @@ -1,66 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include "geostat.h" -#include "pressure.h" - -/* Build_pressure */ -/* build pressure in spectral domain */ - -void build_pressure(int n[3],struct grid_mod grid,struct pressure_mod gradient,double *realization,double *ireal,double *pressure,double *ipressure) -{ - int i,j,k,maille1; - double ki,kj,kk; - double coeff,temp,temp2; - - /* pressure calculation in the spectral domain*/ - for ( k = 1; k <= n[2]; k++) { - for (j = 1; j <= n[1]; j++) { - for (i = 1; i <= n[0]; i++) { - maille1 = i+(j-1+(k-1)*n[1])*n[0]; - if (n[0]==1) - { - ki=0.; - } - else - { - ki =(double)(i-1)/(double)(grid.NX*grid.DX); - } - if (n[1]==1) - { - kj=0.; - } - else - { - kj =(double)j/(double)(grid.NY*grid.DY); - } - if (n[2]==1) - { - kk=0.; - } - else - { - kk =(double)k/(double)(grid.NZ*grid.DZ); - } - - coeff = (gradient.x*ki+gradient.y*kj+gradient.z*kk)/(ki*ki+kj*kj+kk*kk); - temp = realization[maille1]; - temp2= ireal[maille1]; - if (maille1==1) - { - pressure[maille1] =0.; - ipressure[maille1]=0.; - } - else - { - pressure[maille1] =-1./(2*3.14)*coeff*temp2; - ipressure[maille1]= 1./(2*3.14)*coeff*temp; - } - } - } - } - return; -} diff --git a/fftma_module/gen/LIB_FFTPSIM/build_velocity.c b/fftma_module/gen/LIB_FFTPSIM/build_velocity.c deleted file mode 100755 index 7511c4d..0000000 --- a/fftma_module/gen/LIB_FFTPSIM/build_velocity.c +++ /dev/null @@ -1,117 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include "geostat.h" -#include "pressure.h" - -/* Build_velocity */ -/* Build velocity in spectral domain */ - -void build_velocity(int n[3],struct grid_mod grid,struct statistic_mod stat,struct pressure_mod gradient,double *realization,double *ireal,double *xvelocity,double *ixvelocity,int direction) -{ - int i,j,k,maille1; - int x,y,z; - double ki,kj,kk; - double coeff,temp,temp2; - double grad; - - /* x-direction velocity calculation in the spectral domain*/ - switch(direction) - { - case 1: - grad = gradient.x; - x=1; - y=0; - z=0; - break; - case 2: - grad = gradient.y; - x=0; - y=1; - z=0; - break; - case 3: - grad = gradient.z; - x=0; - y=0; - z=1; - break; - default : - printf("build_velocity.c: wrong velocity direction!!! direction: %d\n",direction); - break; - } - - for ( k = 1; k <= n[2]; k++) { - for (j = 1; j <= n[1]; j++) { - for (i = 1; i <= n[0]; i++) { - maille1 = i+(j-1+(k-1)*n[1])*n[0]; -/* if (i -#include -#include -#include -#include -#include -#include "geostat.h" - -void clean_real2(struct realization_mod *realin,int n[3],struct grid_mod grid,int solver,double *vectorresult,struct realization_mod *realout) -{ - int i,j,k,maille0,maille1; - double NTOT; - - NTOT=n[0]*n[1]*n[2]; - /*is the output realization already allocated?*/ - /*if not, memory allocation*/ - - if ((*realout).vector == NULL || (*realout).n != (*realin).n) - { - (*realout).vector = (double *) malloc((*realin).n * sizeof(double)); - if ((*realout).vector == NULL) - { - printf("Clean_real2.c: No memory available\n"); - exit; - } - } - - (*realout).n = (*realin).n; - (*realout).code = 1; - if (solver==1) - { - for ( k = 1; k <= NTOT;k++) - { - (*realout).vector[k-1] = vectorresult[k]/(double) NTOT; - } - } - else - { - for ( k = 1; k <= grid.NZ; k++) { - for (j = 1; j <= grid.NY; j++) { - for (i = 1; i <= grid.NX; i++) { - maille1 = i+(j-1+(k-1)*n[1])*n[0]; - maille0 = i-1+(j-1+(k-1)*grid.NY)*grid.NX; - (*realout).vector[maille0] = vectorresult[maille1]/(double) NTOT; - } - } - } - } - return; -} diff --git a/fftma_module/gen/LIB_FFTPSIM/derivReal.c b/fftma_module/gen/LIB_FFTPSIM/derivReal.c deleted file mode 100755 index 7e7e02b..0000000 --- a/fftma_module/gen/LIB_FFTPSIM/derivReal.c +++ /dev/null @@ -1,216 +0,0 @@ -#include -#include -#include -#include "condor.h" -#include "geostat.h" - -/* Private functions */ -void normAxes(double *vec, double *normed); - - -void derivReal(struct realization_mod *Z, struct realization_mod *dZ, double *dir, struct grid_mod *grid, struct vario_mod vario) { - - int n[3],i,j,k,maille,extMaille; - int NTOT,ntot,NMAX,nmax,NDIM; -// int NXYZ,nxyz; - double nDir[3]; - double *table,*workr,*worki,*realization,*waveVect; - - - int Ngrid; - double tmp; - double *ExtendedWaveVect; - -/* Test the input real*/ -/* if ((*Z).code != 1) { */ -/* printf("Realization should be Standard Normal\n"); */ -/* return; */ -/* } */ - - printf("grid.Nx = %d\n",(*grid).NX); - printf("grid.Ny = %d\n",(*grid).NY); - printf("grid.Nz = %d\n",(*grid).NZ); - - printf("vario.Nvario = %d\n",vario.Nvario); - for(i=0; i NMAX) NMAX = n[i]; - if (n[i] == 1) NDIM = NDIM-1; - } - nmax = NMAX+1; - - printf("NTOT = %d, ntot = %d, NMAX = %d\n",NTOT,ntot,NMAX); - -/* wave vector computation */ - normAxes(dir,nDir); - printf("Derivation direction (normed) %f %f %f\n",nDir[0],nDir[1],nDir[2]); - waveVect = (double *) malloc(Ngrid*sizeof(double)); - if (waveVect == NULL) { - printf("waveVectCompute.cpp : No memory available for waveVect\n"); - return; - } - waveVectorCompute3D((*grid).NX,(*grid).NY,(*grid).NZ,nDir,waveVect); - -/* memory allocation */ - table = (double *) malloc(ntot * sizeof(double)); - if (table == NULL) { - printf("derivReal.cpp: No memory availble for table\n"); - return; - } - - realization = (double *) malloc(ntot * sizeof(double)); - if (realization == NULL) { - printf("derivReal.cpp: No memory availble for realization\n"); - return; - } - - ExtendedWaveVect = (double *) malloc(ntot * sizeof(double)); - if (ExtendedWaveVect == NULL) { - printf("derivReal.cpp: No memory availble for realization\n"); - return; - } - - workr = (double *) malloc(nmax * sizeof(double)); - if (workr == NULL) { - printf("derivReal.cpp: No memory available for workr\n"); - return; - } - - worki = (double *) malloc(nmax * sizeof(double)); - if (worki == NULL) { - printf("derivReal.cpp: No memory available for worki\n"); - return; - } - - extMaille =0; -/* organization of the extended realization */ - for (k=1;k<=n[2];k++) { - for (j=1;j<=n[1];j++) { - for (i=1;i<=n[0];i++) { - extMaille = i + ((j-1) + (((k-1) * n[1]) * n[0])); - if (i <= (*grid).NX && j <= (*grid).NY && k <= (*grid).NZ) { - maille = i-1 + ((j-1) + ((k-1) * (*grid).NY) * (*grid).NX); - realization[extMaille] = (*Z).vector[maille]; - ExtendedWaveVect[extMaille] = waveVect[maille]; - } else { - realization[extMaille] = 0.0; - ExtendedWaveVect[extMaille] = 0.0; - } - } - } - } - -/* forward fourier transform of the realization */ - fourt(realization,table,n,NDIM,1,0,workr,worki); - FILE *wave; - wave = fopen("/home/irsrvshare1/R03/UPS_FLEX/waveVector.eas","w"); - - for (i=1;i -#include -#include -#include -#include -#include "genlib.h" -#include "simpio.h" -#include "geostat.h" -#include "pressure.h" -#include "toolsIO.h" - -void pgeneration(int n[3],struct grid_mod grid,struct statistic_mod stat,struct vario_mod variogram,string filename[7],struct pressure_mod pression,struct realization_mod *Y,struct realization_mod *P,struct realization_mod *VX,struct realization_mod *VY,struct realization_mod *VZ, int solver) - { - int i,ntot; - struct realization_mod GP; - - FFTPressure(n,grid,Y,stat,pression,P,VX,VY,VZ,solver); - /*save the delta-pressure realization*/ - writefile(filename[2],P); - - total_pressure(grid,pression,P); - - total_velocity(grid,stat.mean[0],1,pression,VX); - total_velocity(grid,stat.mean[0],2,pression,VY); - total_velocity(grid,stat.mean[0],3,pression,VZ); - - /*save the total pressure realization*/ - writefile(filename[3],P); - /*save the x-velocity realization*/ - writefile(filename[4],VX); - /*save the y-velocity realization*/ - writefile(filename[5],VY); - /*save the z-velocity realization*/ - writefile(filename[6],VZ); - - ntot=grid.NX*grid.NY*grid.NZ; - GP.vector = (double *) malloc(ntot * sizeof(double)); - testmemory(GP.vector); - GP.n= ntot-1; - for (i = 0; i < ntot-1; i++) - { - GP.vector[i]=(*P).vector[i]-(*P).vector[i-1]; - } - /*save the pressure gradient realization*/ - writefile(filename[7],&GP); - - return; - } diff --git a/fftma_module/gen/LIB_FFTPSIM/pgeneration2.c b/fftma_module/gen/LIB_FFTPSIM/pgeneration2.c deleted file mode 100755 index b81df82..0000000 --- a/fftma_module/gen/LIB_FFTPSIM/pgeneration2.c +++ /dev/null @@ -1,99 +0,0 @@ -#include -#include -#include -#include -#include -#include "genlib.h" -#include "simpio.h" -#include "geostat.h" -#include "pressure.h" -#include "toolsIO.h" - -void pgeneration2(int n[3],struct grid_mod grid,struct statistic_mod stat,struct vario_mod variogram,string filename[7],struct pressure_mod pression,struct realization_mod *Y,struct realization_mod *P,struct realization_mod *VX,struct realization_mod *VY,struct realization_mod *VZ, int solver, int format_file) - { - int i,ntot; - struct realization_mod GP; - - FFTPressure(n,grid,Y,stat,pression,P,VX,VY,VZ,solver); - - /*save the delta-pressure realization*/ - switch (format_file) - { - case 0: - writefile(filename[2],P); - break; - case 1: - writefile_bin(filename[2],P); - break; - } - - total_pressure(grid,pression,P); - total_velocity(grid,stat.mean[0],1,pression,VX); - total_velocity(grid,stat.mean[0],2,pression,VY); - total_velocity(grid,stat.mean[0],3,pression,VZ); - - /*save the total pressure realization*/ - switch (format_file) - { - case 0: - writefile(filename[3],P); - break; - case 1: - writefile_bin(filename[3],P); - break; - } - - /*save the x-velocity realization*/ - switch (format_file) - { - case 0: - writefile(filename[4],VX); - break; - case 1: - writefile_bin(filename[4],VX); - break; - } - - /*save the y-velocity realization*/ - switch (format_file) - { - case 0: - writefile(filename[5],VY); - break; - case 1: - writefile_bin(filename[5],VY); - break; - } - /*save the z-velocity realization*/ - switch (format_file) - { - case 0: - writefile(filename[6],VZ); - break; - case 1: - writefile_bin(filename[6],VZ); - break; - } - - ntot=grid.NX*grid.NY*grid.NZ; - GP.vector = (double *) malloc(ntot * sizeof(double)); - testmemory(GP.vector); - GP.n= ntot-1; - for (i = 0; i < ntot-1; i++) - { - GP.vector[i]=(*P).vector[i]-(*P).vector[i-1]; - } - - /*save the pressure gradient realization*/ - switch (format_file) - { - case 0: - writefile(filename[7],&GP); - break; - case 1: - writefile_bin(filename[7],&GP); - break; - } - - return; - } diff --git a/fftma_module/gen/LIB_FFTPSIM/toolsFFTPSIM.h b/fftma_module/gen/LIB_FFTPSIM/toolsFFTPSIM.h deleted file mode 100755 index 41fd3e3..0000000 --- a/fftma_module/gen/LIB_FFTPSIM/toolsFFTPSIM.h +++ /dev/null @@ -1,59 +0,0 @@ -#include -#include "geostat.h" -#include "pressure.h" - - -#ifndef _TOOLSFFTPSIM_H -#define _TOOLSFFTPSIM_H - -/* Create december, the 16th 2002 */ - -/* List of functions: */ -/* ------------------ */ -/* pgeneration, FFTPSim, FFTPressure, build_pressure, build_velocity,total_pressure,total_velocity, clean_real2 */ - -/*Functions */ -/*----------*/ - -void pgeneration(int n[3],struct grid_mod grid,struct statistic_mod stat,struct vario_mod variogram,string filename[8],struct pressure_mod pression,struct realization_mod *Y,struct realization_mod *P,struct realization_mod *VX,struct realization_mod *VY,struct realization_mod *VZ, int solver); - -void pgeneration2(int n[3],struct grid_mod grid,struct statistic_mod stat,struct vario_mod variogram,string filename[8],struct pressure_mod pression,struct realization_mod *Y,struct realization_mod *P,struct realization_mod *VX,struct realization_mod *VY,struct realization_mod *VZ, int solver, int format_file); - -void FFTPSim(struct vario_mod variogram,struct statistic_mod stat,struct grid_mod grid,int n[3],struct realization_mod *realin,struct pressure_mod gradient,struct realization_mod *realout,struct realization_mod *realout2,struct realization_mod *realout3,struct realization_mod *realout4,struct realization_mod *realout5); - -void FFTPressure(int n[3],struct grid_mod grid,struct realization_mod *realin,struct statistic_mod stat,struct pressure_mod gradient,struct realization_mod *realout,struct realization_mod *realout2,struct realization_mod *realout3,struct realization_mod *realout4, int solver); - -void build_pressure(int n[3],struct grid_mod grid,struct pressure_mod gradient,double *realization,double *ireal,double *pressure,double *ipressure); - -void build_velocity(int n[3],struct grid_mod grid,struct statistic_mod stat,struct pressure_mod gradient,double *realization,double *ireal,double *xvelocity,double *ixvelocity,int direction); - -/* total_pressure */ -/* Build total pressure */ -/* grid: structure defining the grid */ -/* pression:: structure defining the gradient pressure */ -/* realout: structure defining a realization */ - -void total_pressure(struct grid_mod grid,struct pressure_mod gradient,struct realization_mod *realout); - -/* total_velocity */ -/* Build total velocity in one direction */ -/* grid: structure defining the grid */ -/* mean: permeability mean */ -/* dgradient: macroscopic pressure gradient in wanted direction */ -/* realout: structure defining a X velocity realization */ - -void total_velocity(struct grid_mod grid,double mean,int direction,struct pressure_mod gradient,struct realization_mod *realout); - -void clean_real2(struct realization_mod *realin,int n[3],struct grid_mod grid,int solver,double *vectorresult,struct realization_mod *realout); - -void normAxes(double *vec, double *normed); -void waveVectorCompute1D(int n,double *vec); - -void waveVectorCompute3D(int nX,int nY, int nZ, /*float dX, float dY, float dZ,*/ double nDir[3], double *waveVect); - -void derivReal(struct realization_mod *Z, struct realization_mod *dZ, double *dir, struct grid_mod *grid, struct vario_mod vario); - -void mat_vec(double *C, double *x, double *b, int n); - - -#endif // define _TOOLSFFTPSIM_H diff --git a/fftma_module/gen/LIB_FFTPSIM/total_pressure.c b/fftma_module/gen/LIB_FFTPSIM/total_pressure.c deleted file mode 100755 index 24135c1..0000000 --- a/fftma_module/gen/LIB_FFTPSIM/total_pressure.c +++ /dev/null @@ -1,35 +0,0 @@ -#include -#include -#include -#include -#include "geostat.h" -#include "pressure.h" - - - -/* total_pressure */ -/* Build total pressure */ -/* grid: structure defining the grid */ -/* pression: structure defining the gradient pressure */ -/* realout: structure defining a realization */ - -void total_pressure(struct grid_mod grid,struct pressure_mod gradient,struct realization_mod *realout) -{ - int i,j,k,maille0,maille1; - double temp,reference; - - reference=abs(gradient.x)*grid.NX*grid.DX+abs(gradient.y)*grid.NY*grid.DY+abs(gradient.z)*grid.NZ*grid.DZ; - /* pressure reconstruction */ - for ( k = 0; k < grid.NZ; k++) { - for (j = 0; j < grid.NY; j++) { - for (i = 0; i < grid.NX; i++) { - maille1 = i+(j+k*grid.NY)*grid.NX; -/* temp=reference+gradient.x*i*grid.DX+gradient.y*j*grid.DY+gradient.z*k*grid.DZ+(*realout).vector[maille1]; */ - temp=-gradient.x*(i+1)/grid.NX-gradient.y*(j+1)/grid.NY-gradient.z*(k+1)/grid.NZ+(*realout).vector[maille1]; - (*realout).vector[maille1]=temp; - } - } - } - - return; -} diff --git a/fftma_module/gen/LIB_FFTPSIM/total_velocity.c b/fftma_module/gen/LIB_FFTPSIM/total_velocity.c deleted file mode 100755 index 63344c1..0000000 --- a/fftma_module/gen/LIB_FFTPSIM/total_velocity.c +++ /dev/null @@ -1,50 +0,0 @@ -#include -#include -#include -#include -#include "geostat.h" -#include "pressure.h" - - - -/* total_velocity */ -/* Build total velocity */ -/* grid: structure defining the grid */ -/* mean: permeability mean */ -/* dgradient: macroscopic pressure gradient in wanted direction */ -/* realout: structure defining a X velocity realization */ - -void total_velocity(struct grid_mod grid,double mean,int direction,struct pressure_mod gradient,struct realization_mod *realout) -{ - int i,j,k,maille0,maille1; - double temp,grad; - switch(direction) - { - case 1: - grad = gradient.x/(grid.NX*grid.DX); - break; - case 2: - grad = gradient.y/(grid.NY*grid.DY);/* *grid.NY*grid.DY; */ - break; - case 3: - grad = gradient.z/(grid.NZ*grid.DZ); /* *grid.NZ*grid.DZ; */ - break; - default : - printf("build_velocity.c: wrong velocity direction!!! direction: %d\n",direction); - break; - } - - /* x velocity reconstruction */ - for ( k = 0; k < grid.NZ; k++) { - for (j = 0; j < grid.NY; j++) { - for (i = 0; i < grid.NX; i++) { - maille1 = i+(j+k*grid.NY)*grid.NX; - temp=mean*grad+(*realout).vector[maille1]; -/* temp=mean*grad; */ - (*realout).vector[maille1]=temp; - } - } - } - - return; -} diff --git a/fftma_module/gen/LIB_FFTPSIM/waveVectorCompute3D.c b/fftma_module/gen/LIB_FFTPSIM/waveVectorCompute3D.c deleted file mode 100755 index 58e8342..0000000 --- a/fftma_module/gen/LIB_FFTPSIM/waveVectorCompute3D.c +++ /dev/null @@ -1,156 +0,0 @@ -//#include -//#include -#include -#include -#include -#include -#include -#include - -//using namespace std; - -/*Private functions */ -void waveVectorCompute1D(int n,double *vec); - -void waveVectorCompute3D(int nX,int nY, int nZ, /*double dX, double dY, double dZ,*/ double nDir[3], double *waveVect) { - - int nTot; - double *vecX,*vecY,*vecZ; - double *waveVect3DX, *waveVect3DY, *waveVect3DZ; - - int i, j, k, maille; - - nTot = nX*nY*nZ; -// printf("nX = %d, nY = %d, nZ = %d, nTot = %d\n",nX,nY,nZ,nTot); -// printf("Entering waveVectorCompute3D\n"); - -/*Memory allocation */ - waveVect3DX = (double *)malloc(nTot * sizeof(double)); - if (waveVect3DX == NULL) { - printf("waveVectCompute.cpp : No memory available for waveVect3DX\n"); - return; - } - waveVect3DY = (double *)malloc(nTot * sizeof(double)); - if (waveVect3DY == NULL) { - printf("waveVectCompute.cpp : No memory available for waveVect3DY\n"); - return; - } - waveVect3DZ = (double *)malloc(nTot * sizeof(double)); - if (waveVect3DZ == NULL) { - printf("waveVectCompute.cpp : No memory available for waveVect3DZ\n"); - return; - } - - vecX = (double *)malloc(nX * sizeof(double)); - if (vecX == NULL) { - printf("waveVectCompute.cpp : No memory available for vecX\n"); - return; - } - - vecY = (double *)malloc(nY * sizeof(double)); - if (vecY == NULL) { - printf("waveVectCompute.cpp : No memory available for vecY\n"); - return; - } - - vecZ = (double *)malloc(nZ * sizeof(double)); - if (vecZ == NULL) { - printf("waveVectCompute.cpp : No memory available for vecZ\n"); - return; - } - -// printf("memory allocation done.\n"); - - waveVectorCompute1D(nX,vecX); - waveVectorCompute1D(nY,vecY); - waveVectorCompute1D(nZ,vecZ); -// printf("waveVectorCompute1D: done!\n"); - - for(k = 0; k < nZ; k++) { -// printf("k=%d\n",k); - for(j = 0; j < nY; j++) { -// printf("j=%d: ",j); - for(i = 0; i < nX; i++) { - maille = i + (j + (k)*nY)*nX; -// waveVect3DX[maille] = vecX[i]/(nX*dX); -// waveVect3DY[maille] = vecY[j]/(nY*dY); -// waveVect3DZ[maille] = vecZ[k]/(nZ*dZ); - waveVect3DX[maille] = vecX[i]; - waveVect3DY[maille] = vecY[j]; - waveVect3DZ[maille] = vecZ[k]; -// printf("i=%d: %f ",i,vecZ[k]); - } -// printf("\n"); - } - } -// printf("waveVector3DX, Y and Z rearanged\n"); - free(vecX); - free(vecY); - free(vecZ); - if (waveVect == NULL) { - printf("allocate memory for waveVect\n"); - waveVect = (double *) malloc((nTot+1)*sizeof(double)); - if (waveVect == NULL) { - printf("waveVectCompute.cpp : No memory available for waveVect\n"); - return; - } - printf("after allocate memory for waveVect\n"); - } - - for (i=1;i<=nTot;i++) { - waveVect[i] = nDir[0]*waveVect3DX[i-1] + nDir[1]*waveVect3DY[i-1] + nDir[2]*waveVect3DZ[i-1]; -// printf("waveVect[%d] = %f\n",i,waveVect[i]); - } -// printf("waveVector rearanged\n"); - - free(waveVect3DX); - free(waveVect3DY); - free(waveVect3DZ); - -} - -void waveVectorCompute1D(int n,double *vec){ - - int midPoint,k; - - if(ceil(n/2) - floor(n/2) < 1.) { -// printf("coucou\n"); -/*n is even */ - midPoint = (int) floor(n/2); - vec[midPoint] = (double) midPoint; - } else { -/*n is odd */ - midPoint = (int) floor(n/2)-1; - vec[midPoint] = (double) midPoint+1; - } - for (k=1;k$V!#9-F-{;h0%8Rq2JwS{7!DlZEK~*nFE;@e diff --git a/fftma_module/gen/LIB_IO/Makefile.libIO b/fftma_module/gen/LIB_IO/Makefile.libIO deleted file mode 100755 index 6c4b2af..0000000 --- a/fftma_module/gen/LIB_IO/Makefile.libIO +++ /dev/null @@ -1,31 +0,0 @@ -# -######################################################################## -# -# Makefile for library -# -######################################################################## -# - -#INTERFACE = ${BOSSE}/CODES/LIBS_C/Interface -INTERFACE = ../include - -INCLUDE = -I${INTERFACE} -CC = cc -CCFLAGS = - - -LIB = libIO_${ARCH}.a - -NOBJS= inputdata.o inputfiledata.o debuginput.o readdata.o readfile_bin.o writefile.o writefile_bin.o testmemory.o testopenfile.o readdata2.o readdata3.o - -.c.o: - ${CC} $(INCLUDE) $(CCFLAGS) -c $< - -# LIBRARY -$(LIB) : $(NOBJS) - ar cr $(LIB) $(NOBJS) - ranlib $(LIB) - -clean : - rm *.o - diff --git a/fftma_module/gen/LIB_IO/allouememoire.c b/fftma_module/gen/LIB_IO/allouememoire.c deleted file mode 100755 index 78f6975..0000000 --- a/fftma_module/gen/LIB_IO/allouememoire.c +++ /dev/null @@ -1,16 +0,0 @@ -#include -#include -#include -#include -#include -#include - -void allouememoire(double *realint, string variable) -{ - - if (realint == NULL) { - printf("Testmemory.c: No memory available for %s\n",variable); - exit; - } - return; -} diff --git a/fftma_module/gen/LIB_IO/debuginput.c b/fftma_module/gen/LIB_IO/debuginput.c deleted file mode 100755 index b9c3a45..0000000 --- a/fftma_module/gen/LIB_IO/debuginput.c +++ /dev/null @@ -1,73 +0,0 @@ -#include -#include -#include -#include -#include -#include "genlib.h" -#include "geostat.h" -#include "toolsIO.h" - - -/* DebugInput */ -/* */ -/* Display the input data */ -/* seed: seed */ -/* grid: structure defining the actual grid */ -/* filename: name of files */ -/* variogram: struture defining the variogram model */ -/* stat: struture defining the mean and the variance of permeability realization */ -/* pression: structure defining the gradient pressure */ - -void debuginput(long *seed,struct grid_mod *grid,string filename[8],struct vario_mod *variogram,struct statistic_mod *stat,struct pressure_mod *pression,int *Ksolver,int *genere, int *gwnwrite) -{ - int i; - - - /* debug du 8/7/2002 */ - printf("\n\n"); - - printf("Starting seed (integer): %d\n",(*seed)); - printf("Number of cells along the X axis: %d\n",(*grid).NX); - printf("Number of cells along the Y axis: %d\n",(*grid).NY); - printf("Number of cells along the Z axis: %d\n",(*grid).NZ); - printf("cell length along the X axis: %6.4f\n",(*grid).DX); - printf("cell length along the Y axis: %6.4f\n",(*grid).DY); - printf("cell length along the Z axis: %6.4f\n",(*grid).DZ); - printf("Number of structures for the variogram: %d\n",(*variogram).Nvario); - i=0; - printf("Weight: %6.4f\n",(*variogram).var[i]); - printf("Type of variogram: %d\n",(*variogram).vario[i]); - printf("Exponent: %6.4f\n",(*variogram).alpha[i]); - - printf("Mean of the output realization: %15.8f\n",(*stat).mean[0]); - printf("Variance of the output realization: %6.4f\n",(*stat).variance[0]); - printf("Structure of the field (0-normal case 1-lognormal case 2-log10 case) : %d\n",(*stat).type); - - /*output files*/ - printf("output filename for permeability realization: %s\n", filename[1]); - printf("\n\n"); - if (*gwnwrite == 0) - { - printf("K field generation with Gaussian white noise!\n"); - printf("output filename for Gaussian white noise: %s\n",filename[0]); - } - printf("\n\n"); - if ((*Ksolver == 1) | (*Ksolver == 2)) - { - printf("P field generation: %d/n",*Ksolver); - printf("output filename for pressure realization: %s\n", filename[2]); - printf("output filename for pressure total realization: %s\n", filename[3]); - printf("output filename for x-velocity realization: %s\n", filename[4]); - printf("output filename for y-velocity realization: %s\n", filename[5]); - printf("output filename for z-velocity realization: %s\n", filename[6]); - printf("output filename for pressure gradient realization: %s\n", filename[7]); - - /*Pressure data*/ - printf("Pressure gradient in x direction: %6.4f\n",(*pression).x); - printf("Pressure gradient in y direction: %6.4f\n",(*pression).y); - printf("Pressure gradient in z direction: %6.4f\n",(*pression).z); - } - printf("\n\n"); - - return; -} diff --git a/fftma_module/gen/LIB_IO/inputdata.c b/fftma_module/gen/LIB_IO/inputdata.c deleted file mode 100755 index 259f1dd..0000000 --- a/fftma_module/gen/LIB_IO/inputdata.c +++ /dev/null @@ -1,122 +0,0 @@ -#include -#include -#include -#include -#include -#include "genlib.h" -#include "simpio.h" -#include "geostat.h" -#include "toolsIO.h" - - - -/* Inputdata */ -/* */ -/* input data needed for realizations*/ -/* seed: seed */ -/* grid: structure defining the actual grid */ -/* filename: name of files */ -/* variogram: struture defining the variogram model */ -/* stat: struture defining the mean and the variance of permeability realization */ -/* pression: structure defining the gradient pressure */ - -void inputdata(long *seed,struct grid_mod *grid,string filename[7],struct vario_mod *variogram,struct statistic_mod *stat,struct pressure_mod *pression) -{ - int i,j; - - - /*seed*/ - printf("Starting seed (integer): \n"); - *seed = GetInteger(); - - /*Grid description*/ - printf("Number of cells along the X axis: \n"); - (*grid).NX = GetInteger(); - printf("Number of cells along the Y axis: \n"); - (*grid).NY = GetInteger(); - printf("Number of cells along the Z axis: \n"); - (*grid).NZ = GetInteger(); - printf("cell length along the X axis: \n"); - (*grid).DX = GetReal(); - printf("cell length along the Y axis: \n"); - (*grid).DY = GetReal(); - printf("cell length along the Z axis: \n"); - (*grid).DZ = GetReal(); - - /*output file*/ - printf("output filename for Gaussian white noise: \n"); - filename[0] = GetLine(); - - /*variogram description*/ - printf("Number of structures for the variogram: \n"); - (*variogram).Nvario = GetInteger(); - (*variogram).vario = (int *) malloc((*variogram).Nvario * sizeof(int)); - (*variogram).alpha = (double *) malloc((*variogram).Nvario * sizeof(double)); - (*variogram).ap = (double *) malloc(9*(*variogram).Nvario * sizeof(double)); - (*variogram).scf = (double *) malloc(3*(*variogram).Nvario * sizeof(double)); - (*variogram).var = (double *) malloc((*variogram).Nvario * sizeof(double)); - for (i= 0; i < (*variogram).Nvario; i++) { - printf("i %d\n",i); - printf("Weight: \n"); - (*variogram).var[i] = GetReal(); - printf("Type of variogram: \n"); - (*variogram).vario[i] = GetInteger(); - printf("Exponent: \n"); - (*variogram).alpha[i] = GetReal(); - printf("Correlation lengths (3): \n"); - for (j = 0; j < 3; j++) - (*variogram).scf[i*3+j]=GetReal(); - printf("Coordinates of the first two main axes (first axis first, then second): \n"); - for (j = 0; j < 6; j++) - (*variogram).ap[i*9+j] = GetReal(); - } - - /*statistical data*/ - (*stat).nblock_mean = 1; - (*stat).nblock_var = 1; - (*stat).mean = (double *)malloc((*stat).nblock_mean * sizeof(double)); - if ((*stat).mean == NULL) - Error("No memory available"); - (*stat).variance = (double *)malloc((*stat).nblock_var * sizeof(double)); - if ((*stat).variance == NULL) - Error("No memory available"); - printf("Mean of the output realization: \n"); - (*stat).mean[0] = GetReal(); - printf("Variance of the output realization: \n"); - (*stat).variance[0] = GetReal(); - printf("Structure of the field (0-normal case 1-lognormal case 2-log10 case) : \n"); - (*stat).type = GetInteger(); - - /*output file*/ - printf("output filename for permeability realization: \n"); - filename[1] = GetLine(); - - /*Pressure data*/ - printf("Macroscopic pressure gradient in x direction: \n"); - (*pression).x = GetReal(); - printf("Macroscopic pressure gradient in y direction: \n"); - (*pression).y = GetReal(); - printf("Macroscopic pressure gradient in z direction: \n"); - (*pression).z = GetReal(); - - - /*output pressure file*/ - printf("output filename for pressure realization: \n"); - filename[2] = GetLine(); - - /*output pressure totale file*/ - printf("output filename for total pressure realization: \n"); - filename[3] = GetLine(); - - /*output x-velocity file*/ - printf("output filename for x-velocity realization: \n"); - filename[4] = GetLine(); - /*output y-velocity file*/ - printf("output filename for y-velocity realization: \n"); - filename[5] = GetLine(); - /*output z-velocity file*/ - printf("output filename for z-velocity realization: \n"); - filename[6] = GetLine(); - - return; -} diff --git a/fftma_module/gen/LIB_IO/inputfiledata.c b/fftma_module/gen/LIB_IO/inputfiledata.c deleted file mode 100755 index 404d482..0000000 --- a/fftma_module/gen/LIB_IO/inputfiledata.c +++ /dev/null @@ -1,71 +0,0 @@ -#include -#include -#include -#include -#include -#include "genlib.h" -#include "simpio.h" -#include "geostat.h" -#include "toolsIO.h" - -void inputfiledata(string inputfile,long *seed,struct grid_mod *grid,string filename[7],struct vario_mod *variogram,struct statistic_mod *stat,struct pressure_mod *pression) -{ - FILE *fp; - int i,j; - - fp=fopen(inputfile,"r"); - if(fp== NULL) - { - printf("Erreur d'ouverture du fichier\n"); - exit(0); - } - *seed=atoi(ReadLine(fp)); - (*grid).NX = atoi(ReadLine(fp)); - (*grid).NY = atoi(ReadLine(fp)); - (*grid).NZ = atoi(ReadLine(fp)); - (*grid).DX = atof(ReadLine(fp)); - (*grid).DY = atof(ReadLine(fp)); - (*grid).DZ = atof(ReadLine(fp)); - filename[0] = ReadLine(fp); - (*variogram).Nvario = atoi(ReadLine(fp)); - - (*variogram).vario = (int *) malloc((*variogram).Nvario * sizeof(int)); - (*variogram).alpha = (double *) malloc((*variogram).Nvario * sizeof(double)); - (*variogram).ap = (double *) malloc(9*(*variogram).Nvario * sizeof(double)); - (*variogram).scf = (double *) malloc(3*(*variogram).Nvario * sizeof(double)); - (*variogram).var = (double *) malloc((*variogram).Nvario * sizeof(double)); - for (i= 0; i < (*variogram).Nvario; i++) { - (*variogram).var[i] = atof(ReadLine(fp)); - (*variogram).vario[i] = atoi(ReadLine(fp)); - (*variogram).alpha[i] = atof(ReadLine(fp)); - for (j = 0; j < 3; j++) - (*variogram).scf[i*3+j]= atof(ReadLine(fp)); - for (j = 0; j < 6; j++) - (*variogram).ap[i*9+j] = atof(ReadLine(fp)); - } - /*statistical data*/ - (*stat).nblock_mean = 1; - (*stat).nblock_var = 1; - (*stat).mean = (double *)malloc((*stat).nblock_mean * sizeof(double)); - if ((*stat).mean == NULL) - Error("No memory available"); - (*stat).variance = (double *)malloc((*stat).nblock_var * sizeof(double)); - if ((*stat).variance == NULL) - Error("No memory available"); - - (*stat).mean[0] = atof(ReadLine(fp)); - (*stat).variance[0] = atof(ReadLine(fp)); - (*stat).type = atoi(ReadLine(fp)); - - filename[1] = ReadLine(fp); - (*pression).x = atof(ReadLine(fp)); - (*pression).y = atof(ReadLine(fp)); - (*pression).z = atof(ReadLine(fp)); - filename[2] = ReadLine(fp); - filename[3] = ReadLine(fp); - filename[4] = ReadLine(fp); - filename[5] = ReadLine(fp); - filename[6] = ReadLine(fp); - fclose(fp); - return; -} diff --git a/fftma_module/gen/LIB_IO/pressure.h b/fftma_module/gen/LIB_IO/pressure.h deleted file mode 100755 index 826da7e..0000000 --- a/fftma_module/gen/LIB_IO/pressure.h +++ /dev/null @@ -1,21 +0,0 @@ -#include -#include -#include "genlib.h" -#include "geostat.h" - -#ifndef _PRESSURE_H -#define _PRESSURE_H - -/*STRUCTURES*/ -/*----------*/ - -/* pressure_mod */ -/* x: macroscopic gradient value in x direction */ -/* y: macroscopic gradient value in x direction */ -/* z: macroscopic gradient value in x direction */ -struct pressure_mod { - double x,y,z; -}; - - -#endif // define _PRESSURE_H diff --git a/fftma_module/gen/LIB_IO/readdata.c b/fftma_module/gen/LIB_IO/readdata.c deleted file mode 100755 index 3a70123..0000000 --- a/fftma_module/gen/LIB_IO/readdata.c +++ /dev/null @@ -1,204 +0,0 @@ -#include -#include -#include -#include -#include -#include "genlib.h" -#include "simpio.h" -#include "geostat.h" -#include "pressure.h" -#include "toolsIO.h" - - -void readdata(long *seed,struct grid_mod *grid,string filename[8],struct vario_mod *variogram,struct statistic_mod *stat,struct pressure_mod *pression,int *Ksolver,int *genere, int *gwnwrite, struct realization_mod *Kfield,struct realization_mod *gwnoise, char *argv[]) -{ - FILE *fp; - int i,j,n; - char *file1,*file2,*file3,*file4,*file5; - char *prog=argv[0]; - double tmp; - - file1=argv[1]; - file2=argv[2]; - - /* Ouverture du fichier de données principal */ - - if ((fp=fopen(file1,"r")) == NULL) - { - fprintf(stderr,"%s :impossible d'ouvrir %s\n",prog, file1); - exit(1); - } - else - { - *Ksolver = atoi(ReadLine(fp)); - *genere = atoi(ReadLine(fp)); - *gwnwrite = atoi(ReadLine(fp)); - if (*gwnwrite==0) - { - filename[0] = ReadLine(fp); - } - (*grid).NX = atoi(ReadLine(fp)); - (*grid).NY = atoi(ReadLine(fp)); - (*grid).NZ = atoi(ReadLine(fp)); - (*grid).DX = atof(ReadLine(fp)); - (*grid).DY = atof(ReadLine(fp)); - (*grid).DZ = atof(ReadLine(fp)); - - fclose(fp); - } - n=(*grid).NX*(*grid).NY*(*grid).NZ; - -/* Ouverture du fichier de données sur le champ de perméabilité */ - - if ((fp=fopen(file2,"r")) == NULL) - { - fprintf(stderr,"%s :impossible d'ouvrir %s\n",prog, file2); - exit(1); - } - else - { - *seed=atoi(ReadLine(fp)); - (*variogram).Nvario = atoi(ReadLine(fp)); - (*variogram).vario = (int *) malloc((*variogram).Nvario * sizeof(int)); - (*variogram).alpha = (double *) malloc((*variogram).Nvario * sizeof(double)); - (*variogram).ap = (double *) malloc(9*(*variogram).Nvario * sizeof(double)); - (*variogram).scf = (double *) malloc(3*(*variogram).Nvario * sizeof(double)); - (*variogram).var = (double *) malloc((*variogram).Nvario * sizeof(double)); - for (i= 0; i < (*variogram).Nvario; i++) { - (*variogram).var[i] = atof(ReadLine(fp)); - (*variogram).vario[i] = atoi(ReadLine(fp)); - (*variogram).alpha[i] = atof(ReadLine(fp)); - for (j = 0; j < 3; j++) - (*variogram).scf[i*3+j]= atof(ReadLine(fp)); - for (j = 0; j < 6; j++) - (*variogram).ap[i*9+j] = atof(ReadLine(fp)); - } - /*statistical data*/ - (*stat).nblock_mean = 1; - (*stat).nblock_var = 1; - (*stat).mean = (double *)malloc((*stat).nblock_mean * sizeof(double)); - if ((*stat).mean == NULL) - Error("No memory available"); - (*stat).variance = (double *)malloc((*stat).nblock_var * sizeof(double)); - if ((*stat).variance == NULL) - Error("No memory available"); - - (*stat).mean[0] = atof(ReadLine(fp)); - (*stat).variance[0] = atof(ReadLine(fp)); - (*stat).type = atoi(ReadLine(fp)); - - filename[1] = ReadLine(fp); - fclose(fp); - } - - switch (*Ksolver) - { - case 0: - /* Ouverture du fichier contenant le gaussian white noise */ - if (*genere == 1) - { - file3=argv[3]; - if ((fp=fopen(file3,"r")) == NULL) - { - fprintf(stderr,"%s :impossible d'ouvrir %s\n",prog, file3); - exit(1); - } - else - { - /* Ouverture du champ de permeabilite K */ - (*gwnoise).vector = (double *) malloc(n * sizeof(double)); - for (i=0;i -#include -#include -#include -#include -#include "genlib.h" -#include "simpio.h" -#include "geostat.h" -#include "pressure.h" -#include "toolsIO.h" - - -void readdata2(long *seed,struct grid_mod *grid,string filename[8],struct vario_mod *variogram,struct statistic_mod *stat,struct pressure_mod *pression,int *Ksolver,int *genere, int *gwnwrite, int *format_file, struct realization_mod *Kfield,struct realization_mod *gwnoise, char *argv[]) -{ - FILE *fp; - int i,j,n; - char *file1,*file2,*file3,*file4,*file5; - char *prog=argv[0]; - double tmp; - - file1=argv[1]; - file2=argv[2]; - - /* Ouverture du fichier de données principal */ - - if ((fp=fopen(file1,"r")) == NULL) - { - fprintf(stderr,"%s :impossible d'ouvrir %s\n",prog, file1); - exit(1); - } - else - { - *Ksolver = atoi(ReadLine(fp)); - *genere = atoi(ReadLine(fp)); - *gwnwrite = atoi(ReadLine(fp)); - if (*gwnwrite==0) - { - filename[0] = ReadLine(fp); - } - *format_file=atoi(ReadLine(fp)); - (*grid).NX = atoi(ReadLine(fp)); - (*grid).NY = atoi(ReadLine(fp)); - (*grid).NZ = atoi(ReadLine(fp)); - (*grid).DX = atof(ReadLine(fp)); - (*grid).DY = atof(ReadLine(fp)); - (*grid).DZ = atof(ReadLine(fp)); - - fclose(fp); - } - n=(*grid).NX*(*grid).NY*(*grid).NZ; - -/* Ouverture du fichier de données sur le champ de perméabilité */ - - if ((fp=fopen(file2,"r")) == NULL) - { - fprintf(stderr,"%s :impossible d'ouvrir %s\n",prog, file2); - exit(1); - } - else - { - *seed=atoi(ReadLine(fp)); - (*variogram).Nvario = atoi(ReadLine(fp)); - (*variogram).vario = (int *) malloc((*variogram).Nvario * sizeof(int)); - (*variogram).alpha = (double *) malloc((*variogram).Nvario * sizeof(double)); - (*variogram).ap = (double *) malloc(9*(*variogram).Nvario * sizeof(double)); - (*variogram).scf = (double *) malloc(3*(*variogram).Nvario * sizeof(double)); - (*variogram).var = (double *) malloc((*variogram).Nvario * sizeof(double)); - for (i= 0; i < (*variogram).Nvario; i++) { - (*variogram).var[i] = atof(ReadLine(fp)); - (*variogram).vario[i] = atoi(ReadLine(fp)); - (*variogram).alpha[i] = atof(ReadLine(fp)); - for (j = 0; j < 3; j++) - (*variogram).scf[i*3+j]= atof(ReadLine(fp)); - for (j = 0; j < 6; j++) - (*variogram).ap[i*9+j] = atof(ReadLine(fp)); - } - /*statistical data*/ - (*stat).nblock_mean = 1; - (*stat).nblock_var = 1; - (*stat).mean = (double *)malloc((*stat).nblock_mean * sizeof(double)); - if ((*stat).mean == NULL) - Error("No memory available"); - (*stat).variance = (double *)malloc((*stat).nblock_var * sizeof(double)); - if ((*stat).variance == NULL) - Error("No memory available"); - - (*stat).mean[0] = atof(ReadLine(fp)); - (*stat).variance[0] = atof(ReadLine(fp)); - (*stat).type = atoi(ReadLine(fp)); - - filename[1] = ReadLine(fp); - fclose(fp); - } - - switch (*Ksolver) - { - case 0: - /* Ouverture du fichier contenant le gaussian white noise */ - if (*genere == 1) - { - file3=argv[3]; - if ((fp=fopen(file3,"r")) == NULL) - { - fprintf(stderr,"%s :impossible d'ouvrir %s\n",prog, file3); - exit(1); - } - else - { - /* Ouverture du champ de permeabilite K */ - (*gwnoise).vector = (double *) malloc(n * sizeof(double)); - for (i=0;i -#include -#include -#include -#include -#include "genlib.h" -#include "simpio.h" -#include "geostat.h" -#include "pressure.h" -#include "toolsIO.h" - - -void readdata3(long *seed,struct grid_mod *grid,string filename[8],struct vario_mod *variogram,struct statistic_mod *stat,struct pressure_mod *pression,int *Ksolver,int *genere, int *gwnwrite, int *format_file,int *Psolver, struct realization_mod *Kfield,struct realization_mod *gwnoise, char *argv[]) -{ - FILE *fp; - int i,j,n; - char *file1,*file2,*file3,*file4,*file5; - char *prog=argv[0]; - double tmp; - - file1=argv[1]; - file2=argv[2]; - - /* Ouverture du fichier de données principal */ - - if ((fp=fopen(file1,"r")) == NULL) - { - fprintf(stderr,"%s :impossible d'ouvrir %s\n",prog, file1); - exit(1); - } - else - { - *Ksolver = atoi(ReadLine(fp)); - *genere = atoi(ReadLine(fp)); - *gwnwrite = atoi(ReadLine(fp)); - if (*gwnwrite==0) - { - filename[0] = ReadLine(fp); - } - *format_file=atoi(ReadLine(fp)); - *Psolver=atoi(ReadLine(fp)); - (*grid).NX = atoi(ReadLine(fp)); - (*grid).NY = atoi(ReadLine(fp)); - (*grid).NZ = atoi(ReadLine(fp)); - (*grid).DX = atof(ReadLine(fp)); - (*grid).DY = atof(ReadLine(fp)); - (*grid).DZ = atof(ReadLine(fp)); - - fclose(fp); - } - n=(*grid).NX*(*grid).NY*(*grid).NZ; - -/* Ouverture du fichier de données sur le champ de perméabilité */ - - if ((fp=fopen(file2,"r")) == NULL) - { - fprintf(stderr,"%s :impossible d'ouvrir %s\n",prog, file2); - exit(1); - } - else - { - *seed=atoi(ReadLine(fp)); - (*variogram).Nvario = atoi(ReadLine(fp)); - (*variogram).vario = (int *) malloc((*variogram).Nvario * sizeof(int)); - (*variogram).alpha = (double *) malloc((*variogram).Nvario * sizeof(double)); - (*variogram).ap = (double *) malloc(9*(*variogram).Nvario * sizeof(double)); - (*variogram).scf = (double *) malloc(3*(*variogram).Nvario * sizeof(double)); - (*variogram).var = (double *) malloc((*variogram).Nvario * sizeof(double)); - for (i= 0; i < (*variogram).Nvario; i++) { - (*variogram).var[i] = atof(ReadLine(fp)); - (*variogram).vario[i] = atoi(ReadLine(fp)); - (*variogram).alpha[i] = atof(ReadLine(fp)); - for (j = 0; j < 3; j++) - (*variogram).scf[i*3+j]= atof(ReadLine(fp)); - for (j = 0; j < 6; j++) - (*variogram).ap[i*9+j] = atof(ReadLine(fp)); - } - /*statistical data*/ - (*stat).nblock_mean = 1; - (*stat).nblock_var = 1; - (*stat).mean = (double *)malloc((*stat).nblock_mean * sizeof(double)); - if ((*stat).mean == NULL) - Error("No memory available"); - (*stat).variance = (double *)malloc((*stat).nblock_var * sizeof(double)); - if ((*stat).variance == NULL) - Error("No memory available"); - - (*stat).mean[0] = atof(ReadLine(fp)); - (*stat).variance[0] = atof(ReadLine(fp)); - (*stat).type = atoi(ReadLine(fp)); - - filename[1] = ReadLine(fp); - fclose(fp); - } - - switch (*Ksolver) - { - case 0: - /* Ouverture du fichier contenant le gaussian white noise */ - if (*genere == 1) - { - file3=argv[3]; - if ((fp=fopen(file3,"r")) == NULL) - { - fprintf(stderr,"%s :impossible d'ouvrir %s\n",prog, file3); - exit(1); - } - else - { - /* Ouverture du champ de permeabilite K */ - (*gwnoise).vector = (double *) malloc(n * sizeof(double)); - for (i=0;i -#include -#include -#include -#include -#include -#include "genlib.h" -#include "geostat.h" - -/*readfile */ -/* read in the file "filename" the vector values of a */ -/* realization_mod variable */ -/* filename: explicit */ -/* realin: structure defining a realization */ - -void readfile_bin(string filename, struct realization_mod *realin) -{ - FILE *fp; - int i; - double prout; - - /*read the permeability realization*/ - - - fp = fopen(filename, "r"); - - for (i=0;i<(*realin).n;i++) - { - fread(&prout,sizeof(double),1,fp); - printf("Prout: %15.10f\n",prout); - } - - fclose(fp); - return; -} diff --git a/fftma_module/gen/LIB_IO/testmemory.c b/fftma_module/gen/LIB_IO/testmemory.c deleted file mode 100755 index 7cbd10e..0000000 --- a/fftma_module/gen/LIB_IO/testmemory.c +++ /dev/null @@ -1,15 +0,0 @@ -#include -#include -#include -#include -#include -#include - -void testmemory(double *realint) -{ - if (realint == NULL) { - printf("Testmemory.c: No memory available \n"); - exit; - } - return; -} diff --git a/fftma_module/gen/LIB_IO/testopenfile.c b/fftma_module/gen/LIB_IO/testopenfile.c deleted file mode 100755 index dee13a8..0000000 --- a/fftma_module/gen/LIB_IO/testopenfile.c +++ /dev/null @@ -1,16 +0,0 @@ -#include -#include -#include -#include -#include -#include - -void testopenfile(FILE *fp) -{ - if (fp == NULL) - { - printf("Erreur d'ouverture de fichier\n"); - exit(0); - } - return; -} diff --git a/fftma_module/gen/LIB_IO/toolsIO.h b/fftma_module/gen/LIB_IO/toolsIO.h deleted file mode 100755 index e6a6eb9..0000000 --- a/fftma_module/gen/LIB_IO/toolsIO.h +++ /dev/null @@ -1,93 +0,0 @@ -#include -#include -#include "genlib.h" -#include "geostat.h" -#include "pressure.h" - -#ifndef _TOOLSIO_H -#define _TOOLSIO_H - -/* Create december, the 16th 2002 */ -/* Modified december, the 9th 2002 */ - -/* List of functions: */ -/* ------------------ */ -/* writefile,writefile_bin,readfile_bin,inputdata,inputfiledata,readdata,debuginput */ -/* testmemory, testopenfile */ - - -/*FUNCTIONS*/ -/*----------*/ - -/* Lecture dans un fichier */ - -/* Inputdata */ -/* */ -/* input data needed for realizations*/ -/* seed: seed */ -/* grid: structure defining the actual grid */ -/* filename: name of files */ -/* variogram: struture defining the variogram model */ -/* stat: struture defining the mean and the variance of permeability realization */ -/* pression: structure defining the gradient pressure */ - -void inputdata(long *seed,struct grid_mod *grid,string filename[7],struct vario_mod *variogram,struct statistic_mod *stat,struct pressure_mod *pression); - -void inputfiledata(string inputfile,long *seed,struct grid_mod *grid,string filename[7],struct vario_mod *variogram,struct statistic_mod *stat,struct pressure_mod *pression); - -/* void readdata(long *seed,struct grid_mod *grid,string filename[8],struct vario_mod *variogram,struct statistic_mod *stat,struct pressure_mod *pression,int *Ksolver,struct realization_mod *Kfield, char *argv[]); */ - -void readdata(long *seed,struct grid_mod *grid,string filename[8],struct vario_mod *variogram,struct statistic_mod *stat,struct pressure_mod *pression,int *Ksolver,int *genere, int *gwnwrite, struct realization_mod *Kfield,struct realization_mod *gwnoise, char *argv[]); - -void readdata2(long *seed,struct grid_mod *grid,string filename[8],struct vario_mod *variogram,struct statistic_mod *stat,struct pressure_mod *pression,int *Ksolver,int *genere, int *gwnwrite, int *format_file, struct realization_mod *Kfield,struct realization_mod *gwnoise, char *argv[]); - -void readdata3(long *seed,struct grid_mod *grid,string filename[8],struct vario_mod *variogram,struct statistic_mod *stat,struct pressure_mod *pression,int *Ksolver,int *genere, int *gwnwrite, int *format_file,int *Psolver, struct realization_mod *Kfield,struct realization_mod *gwnoise, char *argv[]); - -/* readfile_bin */ -/* */ -/* read in the file "filename" the vector values of a */ -/* realization_mod variable */ -/* filename: explicit */ -/* realin: structure defining a realization */ - -void readfile_bin(string filename, struct realization_mod *realin); - - -/* Writefile */ -/* */ -/* write in the file "filename" the vector values of a */ -/* realization_mod variable */ -/* filename: explicit */ -/* realin: structure defining a realization */ - -void writefile( string filename, struct realization_mod *realin); - -/* Writefile_bin */ -/* */ -/* write in the file "filename" the vector values of a */ -/* realization_mod variable */ -/* filename: explicit */ -/* realin: structure defining a realization */ - -void writefile_bin( string filename, struct realization_mod *realin); - - - -/* DebugInput */ -/* */ -/* Display the input data */ -/* seed: seed */ -/* grid: structure defining the actual grid */ -/* filename: name of files */ -/* variogram: struture defining the variogram model */ -/* stat: struture defining the mean and the variance of permeability realization */ -/* pression: structure defining the gradient pressure */ -void debuginput(long *seed,struct grid_mod *grid,string filename[7],struct vario_mod *variogram,struct statistic_mod *stat,struct pressure_mod *pression,int *Ksolver,int *genere, int *gwnwrite); - -/* Allocation test */ -void testmemory(double *realint); - -/* Test open file */ -void testopenfile(FILE *fp); - -#endif // define _TOOLSIO_H diff --git a/fftma_module/gen/LIB_IO/writefile.c b/fftma_module/gen/LIB_IO/writefile.c deleted file mode 100755 index dbe3dd0..0000000 --- a/fftma_module/gen/LIB_IO/writefile.c +++ /dev/null @@ -1,32 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include "genlib.h" -#include "geostat.h" - -/*writefile */ -/* write in the file "filename" the vector values of a */ -/* realization_mod variable */ -/* filename: explicit */ -/* realin: structure defining a realization */ - -void writefile(string filename, struct realization_mod *realin) -{ - FILE *fp; - int i; - /* string filename;*/ - /*struct realization_mod *realin;*/ - - - /*save the permeability realization*/ - fp = fopen(filename, "w"); -/* printf("writefile.c : (*realin).vector[0] %f\n",(*realin).vector[0]); */ -/* (*realin).vector[0]=1.1; */ - for (i=0;i<(*realin).n;i++) - fprintf(fp,"%15.10f\n",(*realin).vector[i]); - fclose(fp); - return; -} diff --git a/fftma_module/gen/LIB_IO/writefile_bin.c b/fftma_module/gen/LIB_IO/writefile_bin.c deleted file mode 100755 index 8df2da8..0000000 --- a/fftma_module/gen/LIB_IO/writefile_bin.c +++ /dev/null @@ -1,33 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include "genlib.h" -#include "geostat.h" - -/*writefile */ -/* write in the file "filename" the vector values of a */ -/* realization_mod variable */ -/* filename: explicit */ -/* realin: structure defining a realization */ - -void writefile_bin(string filename, struct realization_mod *realin) -{ - FILE *fp; - int i; - double *prout; - - /*save the permeability realization*/ - fp = fopen(filename, "w"); - - for (i=0;i<(*realin).n;i++) - { - prout=(*realin).vector; - fwrite(&prout[i],sizeof(double),1,fp); - } - - fclose(fp); - return; -} diff --git a/fftma_module/gen/LIB_PY-API/Py_getvalues.c b/fftma_module/gen/LIB_PY-API/Py_getvalues.c deleted file mode 100755 index cef5b17..0000000 --- a/fftma_module/gen/LIB_PY-API/Py_getvalues.c +++ /dev/null @@ -1,111 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include "Py_py-api.h" -#include "genlib.h" -#include "simpio.h" -#include "geostat.h" -#include "pressure.h" -#include "toolsIO.h" - -#if PY_MAJOR_VERSION >= 3 - #define PyIntObject PyLongObject - #define PyInt_Type PyLong_Type - #define PyInt_Check(op) PyLong_Check(op) - #define PyInt_CheckExact(op) PyLong_CheckExact(op) - #define PyInt_FromString PyLong_FromString - #define PyInt_FromUnicode PyLong_FromUnicode - #define PyInt_FromLong PyLong_FromLong - #define PyInt_FromSize_t PyLong_FromSize_t - #define PyInt_FromSsize_t PyLong_FromSsize_t - #define PyInt_AsLong PyLong_AsLong - #define PyInt_AS_LONG PyLong_AS_LONG - #define PyInt_AsSsize_t PyLong_AsSsize_t - #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask - #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask - #define PyNumber_Int PyNumber_Long -#endif - -#if PY_MAJOR_VERSION >= 3 - #define PyBoolObject PyLongObject -#endif - -#if PY_MAJOR_VERSION >= 3 && CYTHON_COMPILING_IN_PYPY - #ifndef PyUnicode_InternFromString - #define PyUnicode_InternFromString(s) PyUnicode_FromString(s) - #endif -#endif - - -int Py_getvalues(PyObject* args, long* seed,struct grid_mod* grid,struct vario_mod* variogram,struct statistic_mod* stat) -{ - int i, varioNargs=12, j=0; - PyObject* listvario; - PyObject* vgr; - //char* gwnfilename; - - - stat->nblock_mean=1; - stat->nblock_var=1; - stat->mean=(double*)malloc(stat->nblock_mean * sizeof(double)); - if (stat->mean == NULL) return 0; - stat->variance=(double*)malloc(stat->nblock_var * sizeof(double)); - if (stat->variance == NULL) return 0; - - - if(!PyArg_ParseTuple(args, "iiidddlO!ddi", /*"iiidddslO!ddi",*/ - &(grid->NX), - &(grid->NY), - &(grid->NZ), - &(grid->DX), - &(grid->DY), - &(grid->DZ), - /*gwnfilename,*/ - seed, - &PyList_Type, &listvario, - stat->mean+0, - stat->variance+0, - &(stat->type))) return 0; - - - variogram->Nvario=PyList_Size(listvario); - - variogram->var=(double*)malloc(variogram->Nvario*sizeof(double)); - if(variogram->var==NULL) return 0; - variogram->vario=(int*)malloc(variogram->Nvario*sizeof(int)); - if(variogram->vario==NULL) return 0; - variogram->alpha=(double*)malloc(variogram->Nvario*sizeof(double)); - if(variogram->alpha==NULL) return 0; - variogram->scf=(double*)malloc(3*variogram->Nvario*sizeof(double)); - if(variogram->var==NULL) return 0; - variogram->ap=(double*)malloc(9*variogram->Nvario*sizeof(double)); - if(variogram->var==NULL) return 0; - for(i=0;iNvario;i++) - { - vgr=PyList_GetItem(listvario,i); - if(PyTuple_Size(vgr)!=12) return 0; - (variogram->var)[i]=PyFloat_AsDouble(PyTuple_GetItem(vgr,j++)); - (variogram->vario)[i]=(int)PyInt_AsLong(PyTuple_GetItem(vgr,j++)); - (variogram->alpha)[i]=PyFloat_AsDouble(PyTuple_GetItem(vgr,j++)); - (variogram->scf)[i*3+0]=PyFloat_AsDouble(PyTuple_GetItem(vgr,j++)); - (variogram->scf)[i*3+1]=PyFloat_AsDouble(PyTuple_GetItem(vgr,j++)); - (variogram->scf)[i*3+2]=PyFloat_AsDouble(PyTuple_GetItem(vgr,j++)); - (variogram->ap)[i*9+0]=PyFloat_AsDouble(PyTuple_GetItem(vgr,j++)); - (variogram->ap)[i*9+1]=PyFloat_AsDouble(PyTuple_GetItem(vgr,j++)); - (variogram->ap)[i*9+2]=PyFloat_AsDouble(PyTuple_GetItem(vgr,j++)); - (variogram->ap)[i*9+3]=PyFloat_AsDouble(PyTuple_GetItem(vgr,j++)); - (variogram->ap)[i*9+4]=PyFloat_AsDouble(PyTuple_GetItem(vgr,j++)); - (variogram->ap)[i*9+5]=PyFloat_AsDouble(PyTuple_GetItem(vgr,j++)); - } - - - - - - - return 1; -} diff --git a/fftma_module/gen/LIB_PY-API/Py_kgeneration.c b/fftma_module/gen/LIB_PY-API/Py_kgeneration.c deleted file mode 100755 index dc7dbfd..0000000 --- a/fftma_module/gen/LIB_PY-API/Py_kgeneration.c +++ /dev/null @@ -1,60 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include "Py_py-api.h" -#include "genlib.h" -#include "simpio.h" -#include "geostat.h" -#include "toolsIO.h" -#include "toolsFFTMA.h" - -/* kgeneration */ -/* Z is the GWN with 0-mean and 1-variance */ -/* Y1 is the realization with 0-mean and variance wanted */ -/* Y is the realization with mean and variance wanted */ - -void Py_kgeneration(long seed,struct grid_mod grid,struct statistic_mod stat,struct vario_mod variogram,struct realization_mod *Z,struct realization_mod *Y,struct realization_mod *Y1, int n[3]) - { - int i,N; - int typelog; - - - /*generate Gaussian white noise*/ - N = grid.NX*grid.NY*grid.NZ; - n[0] = 0; - n[1] = 0; - n[2] = 0; - - - - - generate(&seed,N,Z); - /*save the Gaussian white noise file*/ - // if (*gwnwrite == 0) - // { - // writefile(filename[0],Z); - // } - - - - /*FFTMA*/ - FFTMA2(variogram,grid,n,Z,Y); - - /*add the statistics*/ - if (stat.mean[0] != 0 || stat.variance[0]!= 1) - addstat2(Y,stat,Y1,Y); - - /* make a log normal realization */ - if (stat.type==1 || stat.type==2){ - - typelog=stat.type+2; - /* nor2log(Y1,typelog,Y1); */ - nor2log(Y,typelog,Y); - } - - return; - } diff --git a/fftma_module/gen/LIB_PY-API/Py_py-api.h b/fftma_module/gen/LIB_PY-API/Py_py-api.h deleted file mode 100644 index b224b2e..0000000 --- a/fftma_module/gen/LIB_PY-API/Py_py-api.h +++ /dev/null @@ -1,16 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include "genlib.h" -#include "simpio.h" -#include "geostat.h" -#include "pressure.h" -#include "toolsIO.h" - - -int Py_getvalues(PyObject*, long*, struct grid_mod*, struct vario_mod*, struct statistic_mod*); -void Py_kgeneration(long,struct grid_mod,struct statistic_mod,struct vario_mod,struct realization_mod*,struct realization_mod*,struct realization_mod*, int [3]); diff --git a/fftma_module/gen/build/lib.linux-x86_64-3.6/FFTMA.cpython-36m-x86_64-linux-gnu.so b/fftma_module/gen/build/lib.linux-x86_64-3.6/FFTMA.cpython-36m-x86_64-linux-gnu.so index ca87dd8fca8b85ebb67aebf21890962534f6086b..2de8d59e08b77ea7370130237843ecc37b12fe9d 100755 GIT binary patch literal 393456 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 literal 391248 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ⅇ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 T7}l?xlOIZx!?fh2CyTTT@bHyw delta 720 zcmZ8eF=!KE6wbSAgp`0pkmIstC{#=Gqaxn*(v-U-y%yS7X$EyjIKo*2Nkh_V=~9#; zMTM5|Ejn}%1*=8S-V_I8CMix`EFHw9Al1d_RPEr8cNx4N{`cVfzW2TNzkhR!Hn-?? zXHaK1YgL=oDrJ_bm2Oq-xrKSQU{xx1;{qGE8x5;k=9o2KoN1JXxP(n#%a32q#nW+p zdVWz%7o=$U*O+~xGB)jbC};7AVm_^1w@sC+!9^Z@QF%jDiXcJ z3x&zso>9T4$)T%A@>S2F?qgpfrb;vbRb})QWz`gP5!>n*E#inn3eF6#(`U4XnSAIq zsFUl_oAe_{lcJ%Zi$3(Rr$n6B66C9N0j>=C-$fgzTZ z=m2W6NOe3;GJ1fWq)Dd{8F?bg4P^0yLW=_Au`#H9(xNlPyWA9uKhN7o7P}WNjxr1ndidZly`j6 h9=__sSJ36PD^4ia4pJ67Gne>>Qht=4IC_4T{sLXjo;Cmg diff --git a/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/FFTtest.o b/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/FFTtest.o index f68ba2001a22806741b6f616c096b28b6e5fd0a7..8135237eb9c4351aef6c767dc288d199cda3aed6 100644 GIT binary patch delta 1531 zcmZA1T}YE*6bJA<)2vwrliJ%W!CczDG+*b(bWp4bHTwdMA_~-2&RRG>Dp4;gBnlyk z>`zGsk(8;Ff{ZTK%^Y2664?hTbt84vg|)mA40>p17oNf1XPn=2&U4NKd!M$Aw%xM} z`=sNR3BAfr$CXgHqd9Os)Y`JAEqFN`44ex!hZ+NoT2s^2aG)XF+St(?)Gh>DFmC!9 znNc#*BC|QO8S2Y4-T#jzR&WNa_jFcBc85llq4$_cOf?k*BCPNk^D|gG=gB(il@K0#eV?@bgS7 z(J%EqMSn59De7U`2ba{%lv~U6Ap%l+shbB(m(efvJIy=J^djO?_fqB0Of@8=mQdxN zOz*;CQ*s6=H=EYfydHt$wjwc)9-E>s6d1G>scBT{2-|DIl1)*&NIx+xh0!jjCtYUx z7CyUQJx#q?)02ayx-etN-XPW>9GdXML^Wdm}w?_1)ZWU5-sRV6OZB2 z6xBpWu5DU>dC5*HGh1&hZ7J)cg+-{LTIV delta 1525 zcmZ|LT}YE*6bJAfO_!B{QhR!}3+LCSL*GqIjVKu!ZWZO|izJd^7DbwxAbo(X4={qz z{$No=&4Ns*Sfel^WEYWdL&0e)Di^dvsD+ zQ=^}9#?$FO!gggplw$e!S)JG{%k;iNfAc937zkD?e78G|Hm=yfd$RH!Jo(CqaJ^sX zQv|gxuvqmdW!qMDYO^%0%Z(x8Wrk8Kx;lf`&Q_F zgtS(&ei7P-h}LP=KSJvf*V@EtTZCHBS*YkYE)_O- zrnu&^s5#0fUl(~6s7M*a=@X%+;n8a4bV4W))Ov#_nh_etfYxDF3-8H!_aLVABzKi7 zbO`fWE0!dNDHECwd$BV5INdDNih$Ou+)cmG3kYeQWep3xg^1RJtZ#(YAYQEeF7E2H z&~JS6vm*C#p2o8#Z(tB!hf4WjL6f6A=Oe$;A&O=!7;=<*Uh)}R1!wdB7b5QlIhDuc zPNs#v;?w3tJ_f(Dfp%lSsVEl@oXzwM86_swVSPyhT|r3y&O}770mSus9$BTPuJo2F z<2DcQi*F}6WiC3k7I3;eE%EB4K1Nudun8aZdI027#yRe(R#e`D$E7G8epe5vXw21< zYFy)2&M#ejXf^_-@{jZI85xUpf``xiPrgdz-H4dV=;o*Lget^MMG6aM4~?MHt&9=w zYMZFEAnaCTi9UB*Q)o0AtEeUF09B6BC}Nep^cCK9W3&cT)j%8Jud1fI2vyb6Bw~7f X52~&uH@td1i;!Mx5Ywv^m0h26{ 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 EZ)4XOL;wH) diff --git a/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/Py_kgeneration.o b/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/Py_kgeneration.o index c93e2c808a07d443a89276ef0166e54deb2a30ac..da43e8feeb523f2bf40f5272842c13c63f518c8b 100644 GIT binary patch literal 37744 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 Y@SMjw+C26^&x{@HNqIADprMEV1FYtjWB>pF delta 879 zcmZ9KO=uHA7>4t$N@>X@NIDrYf189fX|vlEwBSJrEo=+^#2;*ngp!tEaxl8_4}{u- z2R&)Zi=b7+^x~l&8usGf!Q!cUXhp^LX7Ex99)bt)qK;;AnSp%==6S#GdxxF-`C7i# zN9&DLj~{n?_a;V*)oS5M=GfsLJfl|28Kuf2JC#O@W}4@84Z^AipRuhLC4f{ee`+Mb+Z9Y!7q4&P~gxorn)*?T~VQ04t)_ z#b(&15kw<4eL^{6YKJr|L=1jbmVH#prqPTrUY7K`LNCG>W&E0?T{2Q9$`ND*y&Q(*pl>BTs?bGz5cIL6^9r2=>5RUC>n5L;p7)C9Bnmp?w`8`aLSJHD z(5LdWTe>>;dW03xAK28*Jr(IO6pyY!j~V2}i5R0ZD922?hX+FMU^Qmb8hmj^SCEQ- zp=D6Qr01@c_({AZ`z`Eh|NG9&60%9gXXR~{6*>z?&?TASl|q-?dUB0u!gW$}L>p+O z|Iib(`sZjJ&VWr{@nT@8`!{P(Orsvy4R0nc9;1~xEYuOYg@(`?T0%XrjDPAF$-i}= BlTrWx diff --git a/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/addstat2.o b/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/addstat2.o index d4a4c68694e58550aa8c2b60fa916c5944a3d73b..ab189e5ab74e4e2ffb8018419045ba8a196451e1 100644 GIT binary patch delta 813 zcmZ9IKWI}?6vlHB3;rWC(wCF_l7@x|r3L%QV2ia-3(Bj-rAsR=&u5dCr%7X4Gjvfi zX+fmr8>-L_MZwkZx^&D|r`AR4B4!ddyEupxFXm*q7v4GW{l0VGckaQ=!OTZL9=?m$ z34S~?v>H_EWq%>4E?;?ETB(%$2SGU~`bB4P@kzz^D%E1WTymC5%OUsPqVRrVBSu>| z>0=C7XURg2nG_nA88@uEYMLVd&+Sf&oY(z={=TAVvAPrM$nyrhj<)5{4;wz-Ptwpr|_rjl>YON9ZaFHmd=FUkuX*d`+LpLVpeV6q}l^iW--Y z-Nm-ivRySHbljlF$fY^@i!h!ZQI^1}Ve-&OJ9H0CUANHIbqpCQ)eb5I zC#6gMmIw-F5EqApM+XtX3_=k>1r=PxAdU_$4${G^Ia%(7dk%cR@80_z?(X#NblVH( z)U{g0SG96UoS(^@%j9OK zRMD>n%i-%3Bo61v3Wb6z_WdFHf?p$Ibb&(um(y>d1G*p7+hJXzaYP{NT$J}%nKGQ8 z&~bz;4E5y&gWf{VQS=>l#Fc6GG!4%otVRSq!`;Y|%&_OH;du=bVmROozhOH9r$km} z^*sO9F(!ljkFhO;Jj1u;4f+;c;nF;Yqb~i#TvX8v8oDl{6BV+^r@k4ds_1FD!Ss(o zZ^D*BUgkU_+y{B?Ag5`I)uRS2V^z~6-<&h(8?-ci!RnSlpWuTOu@b9~47z8*ijC0? zjK_q$%J8#c+JdKPmj~K2=qqe%y2EOiLkHYoBA7p8xkrLDn9;Dvw UqaP@xCukh4^jTUAdg&tl1>2H^jQ{`u diff --git a/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/axes.o b/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/axes.o index 5ef814deb2c7842464c22c44fd902d745f71a2f7..ebed1ac8647643652f83e115ff0f047c8e830537 100644 GIT binary patch delta 234 zcmbPXJ;Qp#0^Z4wc>O0Y;FZxV&de>%Nlebn&(kePEy_(zOv=p3Oi4`9PfIJwO^naY zPbtkw)lW~&n{2>mvN?nA0E^-m1_%&^(p*5A2Z$vZAp(+<4~mITP7scm>>$iB`GBwk zBkyEJ5pkwh43niq+$5hswKYI#n0D65l_L8Y<0o5+E@!&SF!_;anc`ijl2uTXVM<}* j8z)Z`6W=^ROoNp%ZSqcOb4HuVAEoUX(>5E*q%#5lk<2%8 delta 231 zcmbPXJ;Qp#0^Z5*d1X{RQj3Zbb2C%(N)n6XgNu^2UGkIl10q8_{QY#DbsYmd_0v=H zCeP;$m~6^t%*e1gmG3Z%q8TFt7>GhB1}-4Y1H`AGe96fN#l$Bk2uCpSFizej?8fLn znNdWXNr!Q=l!%+88dP@!R5eVu`{YWI{fyC*Ek&0z$umxVBwD5@4^_GfO2d@G#5Yc! gC?>vnf|v#?W76cE(&mg7lRrw^GbU{|lu2g<07zXg!~g&Q diff --git a/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/build_pressure.o b/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/build_pressure.o index 0967a56bf4b03f969a9e6a505b41222f5e4bbd2b..571183d7906b96076835cc704f77741ff66cb782 100644 GIT binary patch delta 838 zcmZ9I&1(};6vcC&0YM>lU?w+jGKo4s}tE+yR*6AP67v{sd# zr`-R?8XdV^*||G=KVV?9I-&5;zDNpF4(ov$d1ei3h}dEED~HQYmG0oS6Hy-9S>T-n z){Vd<{9=P_TrIM`wPOUo7@h$4ikuZcFGkr+i&i$;{&hoxz;uDO+gYpr1s)Y3MJpro;LVY1}mEmZV-AdRO*;Z|H|%xlA=w+)(`{ zoN}xBfLQiQWc+J-7`Utt3B7O76k9I4b*cYq&^H8CuIUL0Pv%GKk4N7?Tn_0v`eoJ? w@yr{Z{diJt&=vUJB`RRe3)L`(7haVfq<_3&o}S^YKb?K8;0S$B=Yl2r2a delta 836 zcmZ9KPiPZC6vp?B6`{qF#UwAYS;UPfl+r9YNP1F=wcCJy(pIYNC9E|R6)R1HV)0T$ z5IluXutfyhn|M%Jl%f|sT2CSfdN6pjw1*t^qKkQZnT6Tmz2EoE`-a`kU^95x?#E=x zJu+TzG{Wmw>I=8|!ISZ3}PHH)#~54C^PVtEn2&L4+ArWx{f%NYC*s6Oe^YZ1^sQ z4a0B=UbaRltYld~-P48JhUPL}WjP-FF&j_^HnUz4Wmys@Ne^O#nI2+>1GQISgU9F{ zez8w~p>w`IF19a*?G(Zs>(fGa4LXHZjw`c5_sK<)k^7}i8~sr91*3lfop{z!nQ_dZ zf8c4>_k^A?=v_=`E=>z<8FWDEiyBZFuf2>cyJtE03_{7U^~L+imyIdwlcC@!Kw(pzUa)Fi-ygR`7Py diff --git a/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/build_real.o b/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/build_real.o index 20851d65a8585f7797ab47fa4285f5ca567a21e6..b66db778e8d03abcfb93ce9d8c90cdcc9bb004f6 100644 GIT binary patch delta 833 zcmZ9IPiPZS5XN`5cxY);RMQKDkU!b|q_}@@A}!jxxTD5Yuj4bOhZKE~ z`K+S@lgV_Z9{FvBpUn9i}gqPV?nR~3B~W$BcDbKe(=`;u>4 zS9Fv2davjOY)C;#>_|udK*(e!sUM|`BlmJafphQS=5QnPjuzl&&r<=l=+MFD(A6N%k{9(j2Mr-bh%})8{>(_=#S9>q^7Rtl^jp|HzFP@|DXU8Cg z19pF#d`hwZkKHV>Bf1{dZxRcg!uk@!%gzZ|;!x2D-GuE3xoI`+vO$X|I6mD)%?ac? z&MX<3*ZAxRDq_#6$Pb*^GBQ=Dgm7nh58n*hV_`XQS?)5pc2`K_}sf zfPP_G>qD#xpBjj??!rzA`IWnNjIIU>n*L_mFess>DKS09wY8taSV@ZE9J^_QW_ebh z;lJVadBcAUl0uHK`^caQSxw{YJ~QYtl=QQM{KZcOZRhod;oJDAXWr+o9|j%6zVxl* z7Se7XUBQU!laB>gPzf*GEvlf_b%%1;>+-F01UEGy$J?6!^WcGIZQav&xRlx;+78u; zd7=SCC;!kQqV9QGgYp8J!&@&$hY)#r>W7#9r%LNKR*3i|A6K z4l06;-=G~t#X%64M;5oxMR0Hkh_;9l1rY~_I0y=Yhvq(qd*OZu&hNX2@4UA*)0$Z} zY09-W2kTDoGC>CWtxLu7Vkvj7See~DSC}ssa%YRBVm_Cb)6)y(T((@vFO~}Od||f! zt>2;g$(^MDy})Y72;B|%HqMSt@pW_U;rrCzX$aJY4fKY`#RPRaM?2-e^CzldLpW;A zX^kF-8nJ>Qzg7^%5@AhN6Eo`U;0vcFrO_2QOz)}g9gQyF3DZNW`%t3;XbwqAgJOo*r`QM0 z^A0xCWwj5f6khWC$i*a`K#lb}R@wPcIlR1{^A_4MgEnD{DaDBLyw#@N#+WJTBC4h# zf?b_&wN+Jb&Lg;HmM);r%K8Icn77W*Uo+L;DM33R@ZSXI)?IkkdvW~+}W_Z$-4_8N^PYFdvO>dY4g8nl1`H#B_M>Tmz#=fvSs`eGqdoSqWXseC?D4vEoBxtuEGGr^G5%Ijn}Mz%An8@rale5cKuXfjiXJ!64_K7+xuS~(dJStXMrPDq zg5OZiy1}^&tDEsnHQP4>-NcxiQ5`wApu1Rd3;sqKx~gcOv5to9^G?yH1{y=3E@&80 zozZn9bitR^Je}%&w)-$tq|-o6Ptp@`Pg479!WGXsYNGBDR7B6%h z$m|071l>Zw_n79Zbzi?m1J&lx9ML_@4zE%-!hty&Kuu;G;b4q(ECff$i&`+Eja$&L i?8Tmt{A~~pMJS6|nOmsITt_n$>6!PpKDdvFivEAUkgYWU diff --git a/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/cardsin.o b/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/cardsin.o index 484c3110e237e73b3ffc4e07be54190d9f152258..2ab6d5d7e48d88cf76c1a0b118c2c53cb40a920c 100644 GIT binary patch delta 781 zcmZ9IJ4gdT5QZ~RAu({dOCsw=n+O&P8UnsZ6BIFA7b_oya+(+-xx{B-X(?zS(}<74 zQV=v8Xr02!LedC=_yCKbg{Yt?DjsIi%);)l|M$<#&X#-1J;$>y>(CVeoOLy~EoRK+ ztTCO*=Q`$63uelg%49Q1BN?8VSu%}DGoM_}ro!n|&boH@fz{|KJE03f5up{Q<9{_& zf}`G!9(&i5F7ZAfFrkdf4|3?tIfg|=1h2_I!sw#|UzJWsW5^qqr)1h zws%4n$#la^QPfls6i|`h87%=0s6%pta6857IPJKv3VA`L2N_LZNsYrkN-Yi>XlP;B z!A<*o#-b+VJ7wLmtRH-_X>CpAC0~qsFys^RfYbohsJ_RC!#<(k5^ZDjiiYcEdV%i! zOz*^k-RqO8tuyMzdz+pR-D7kYHGeqrKpoE+J)*2jrZ?fdU+AqwzZv}{-A#W}o%)S* nh3PF=^2g;F(I}%jMgjunEjiBLQOcm?&9OK2pkeBO$<`1!7NLUqKy8!6e1!9TG^kyQD}*Gk)olk zB`9ugaBc{fsG&$25^T{SDjGWSz2!T&dwHMV^SVuD2vqjhLJh+he!%s_9)ZPRN_pRaAc=~M}SlN z2D?Sm3ug*|Q{lcB+94&z)`}}UC#tj)c8>l~UQxtY(s%DV>a&!WFE8dN<&G;XY m(|e&JN0}L?#yC0+eua{prYfO!vI<2OB=1mWAtGtSnIV7X8eu>H diff --git a/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/cgrid.o b/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/cgrid.o index 5250330e5f1721ad97b28caf0b14773b2feb9bf8..49afcd1ee11d37b52e15eef2ca529c5decaa63fe 100644 GIT binary patch delta 823 zcmZ9KOK1~O6ozxAZl-FRz)Wsun6yr^NkuzmAu1?i5i_PBB7zWH)YK$pAZdM7T#4Yu z_yFbKxhaC1;>I`|T~$%U*=Pg0P(g{{LN_9a1jNUcoVd6bX3pjR{`0sq_g?TIxRIw` zd-CJP=-`M?SU=)So(Y>vjmn8|abfGp+UaJkG8Z<&YNhJc>t~yl+2&$(sZsOhYYWlU z(d{&pNF<`wWO>LclibRc>W9Rzj2q-rN5K%<9t|_bIdbsW5HyN6MnKo#nu3P0%k=0L zLesN8Y5m+~rNkQA(qo`&&eB&*r-gOlUthU;{qVopZk$RB?FZpXx=8oYk=CPZ-Ouw4 z=K2K^f-b=lf%c3rCyI0jE5g$r5#EX^E5~_VC2up_F<}*${#58r93B%TpQ*_Q8uWa@ z?yRC0*}qNEb+l!#-+ah@3jKhtq(`{sF@vcFWj(waYg@!q^!xqfwO=5ls2TdYjG3-v}gaJWF>N_?Ec z&x3RQ^cqf5IXCfS*?OL+Q9ra?~+r;d#2Ge~X+m@GN%HO7F_n zvj%+xM|oDv!fjQeH)t!@vMg+>vowsvkkZHHhx{_?vM4eg7aEh@qa&S1lj)$SqXxZz z)gd)q7Ing)1?ek!<4%0JI;~2C9$98EMRgN`0ww11n^N-hj^(;H%K?(aQ^ zsO3hup7~02KMaoMiMG)h{zsqC8Cm0b;CS>D-<%14V~No`>(#v&aEzhDv4F%_o^q&i J96>O4;y>sUfzSW| diff --git a/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/clean_real.o b/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/clean_real.o index 3b7760669351f5d690132b2da78996e25bdb6b24..07a02fea4e1600ed3a1643d896a01965e07c2939 100644 GIT binary patch delta 820 zcmZ9JO=uHA6vy*cM5ADAX?8M6+%(-n6VVP4r4*D<55@)y+JX`g+SP1JBp>x7)m|z+ zc=1&GKgE;nMf7Cclb~P)p$89@9>jwOLB;xk77rQ`bYv%&8QAxh_xu0fd%N>AznWi2 z(P}f@7xETEV}z5Tc=~dwQZGB_OSS6$Y4=jab`@VV0ZfBd>r%`Iw zV`Bp;u~;tIqFgM9$#VWy$zEDr5vx|QXje~(j9sl-rGoUVmHErn{0SKmxw+ZQ^i=#@ zJe9j3ZrDqW>48~l><&&)BYLD`P!py{^o6PC|HDy>Ff4nn@_Wk3xuBbzLfgam z_#xN6uF=~V@(TKllsC->Rc2kw^uqBndV($QJol^2cP+Dp1Y`V_>hMRS6<93Ix#8N! zRjS)?11&ilRhuU@`T=_^ZNv?n@tvoysQH93X5hW=Bu%01WBiJm+tKE(VTd!HSM)%m zH<6NbTs1nX&TgX$Dw5t;ZcL*#97+4t=9ET1;)|r4%6+8K=O91hGs=Cb(H}_o1uesp znXF>pw9H*RleDhBhg6Gh^S5Zp4L0_quEPv4{y-(pYRL`E1O(Mklll(zz#UpcY*c5j?e{w2*{XcU6`M6VlGC`t4Sj`>$Ma*nOh tHq3BZY9V}@e!~eTX%ua#A()XQ?ZA@y5RTMEv?IyBPSCya6W)YI{{f$?lj8sY diff --git a/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/clean_real2.o b/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/clean_real2.o index 69a66764488f8917f37fddea8e908e9d38def4e0..7449249b2e0bd0667c185770a558bc192e925f5a 100644 GIT binary patch delta 790 zcmZY5Pe@cj90&0Iy+tT7@R2ZY_MfgoD?v_c2T6!Bt*t}QyL1tBU+&v_@!mdH-y#t# zCKT9h`$FJF=u&%%tvZi$gnmXd0N`!0+?>4ZoST-L^k|GUH!n zlWvK}Vc?3;_ry%N&RQ16;Z85fioY3 zm4@$%M{X^S&R?duJy1@beMyPG%fybwFlzN1uMA9DbG)eFX2%n~^6Zm)4_g-F_mZ9T zeND4Cuml~#wKP%tD0S{<_jprxUFV5(sUZdREh5^9Z_d@!p~^Q z-W%%XYnpz;cB*8Y5PH+M=@@oe7(WSX=`pHeE6sSI`u4QG2nSN1DLv724Q7V%KPr39 z=nUMQXdP2hAE@lGrhTYO9ac9_YPyQIQlF~q3r(l7lVPb5m3^aWA_*fqMhwL);~9nD zwW8N>q^_vZe{0%AD=TOM+cG}Ev5cF@=NK*GYEIAwJQ)caxfQZu4hp)6DH;1wAAC>m zz=s5Vz}=xEURKYW?fLg>#$o3f?|zu8Yy3Q4>Y*R_dSQZ^pu%;m7S6!tP5i&t)7 zuGFfLsa4A6Y;ECMHCk#lO)IQaqQ)^Z6*U@Rwai-BoIl@KILa1NoV_qLGd(&v8Wam= zFbyQAdZ&y3x7Mg@MNe=?&+D9cK3kq`P)cdYzPlD}V=R@|zSETt zimNyJCOTYuN;*$i^aHk1dFQx;f%G~0fl}Hy#=-4$jxJ*(t#n!HzF2iv@s;Va&|en4 z0e4X837KfG;&+(JvBluZGn>d*@bPr{YlX#e2CcqssR6)Qo ziTcnQJ%%1O^bCdJU42Q8cd@_wXuYdxq2wz)BfCa6jc@t+e%itN!zbuEXyi0Kjf0Uz F`U~wlfHD98 diff --git a/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/cov_value.o b/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/cov_value.o index 9e6b0ee085f1f8c3d7095b36fda2fc560ed7ef45..e7ad817059d9fd17f27bee20503124be338e84e8 100644 GIT binary patch delta 913 zcmZ9}KWGzi6bJCWGf`8q63*u55AJf!(WFLOj|`$iMNiP9ogxUeR4iw6ErBGBe=<5` za8M{Te23zq2!hbXlmiE+1e_EKS;Q_v1_h-{5tmN>hVj zhx_^i!nSS{A64tEn!i$AZ_G4+6+PEpXO?MtFC;Okp>( znWQzi21C<0ZjO&c*Qf|5#O-U*GyfOh7IkbI*XTV42IJ0=$ZkYoB<^7#lhHYF)1i-; zGd&tb$7KAEob^JfpGRNRx3DMbFC&#*=BMT41Eul}+F8cuDN3hgjL)^OllAx~nZ2Uu z6QnK1Z8>>C(YJ6dPy0rAZr!9W7+8+>m7q;rpzA12Fg_>yek*-t_(B(?o|JDGZ*&hG zp+98Ll%fIpLT6-lR?(w45SoyaZ!78}mt(vvv#%7L#Vw)nu3bgHqn&dojU7?5FL(Q? z)HE>6vD6)@r%ucOFXkZ`hbDWv>t`O?1DyJr1Ol&Ck_+QpNhXn z2sh6t#A4o~NxT-7lk$XQ^8d;$41{jUw@)j&3o0(-9Sm`hU_gWs=*hk$=-{K py66aXrMilap!sutV&z&V+OZgK0FQ741o?5#NwycZsadw$<{zH@o4xz^myhX~F@<94xH zt9cLaRhOQ6Pv**ff>-gY^ckJFRJlWaIK`TQrvgeydH|JhsD2bP@iL_Kx?E7W-Zot#D%=9E@4>r1krl#k( zd)A;H+L|tN_o6|I=xG|@$+HICKqe#A8h76s^aXBdI?3G~gLYBRI8?^2){HazZfNeK ztLZww_7rb1c-L!$Ee9d%D2i5yexqVJw2p>VpfBiHQV8Myu(E=-5Vob-;@RDy{_h-2 z*@kON+D64L&?4Sz7U6KWIOM+W-In diff --git a/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/covariance.o b/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/covariance.o index bb78913e4b7a808245021ba6984cc12ce075c896..8107a3e8c9faaf3f77e89dd595a61642828d130f 100644 GIT binary patch delta 892 zcmZ9IPiPZC6vp$m6s&p)+KdxyHk+83O={PGqPHcWhTQblAXHbA>Ppg@XwievdK9dr zdYQ?GZpEos6T)83ettvB}DZxxy+_z#nix@E~0`0`KLm^5T5HtxJCC7HZ0nTf+6I#zM$8Nk`+b6rv}sC3e8}_ryi@@xpVJ5 z7Ty`6^n>@VOZEvjJN_h_7XMe%IHYEn=c-Q*>$Lul^0LFYgz zi)`dmALT5Ue$XGhyH|SFGtw`K+Fob3O>`2b`Iq*>%uf5~#cYvgu#r7LOE7b`wk8qo jk6-_gY`Tn&zrTVxY*P#FuszU92j!n3pV9vTJOquR delta 808 zcmZ9IKWG#|6vppu3jY^U(pigICcK zt)LYZJ#V?-g;p?Zz=~a>@3lld( znt~TE(FU4IpW#>Bp`VZmNABjTFIv@pR1!jVGu_Z=1Ph9$nC{}2bUJR~eL{@om|7Y= z%y(P!4|0#An!kjECFCsAQyQJXSxdMlnJ#G5;QMpUe~qV>BQsp}Nu&R;raB(s`PVc$ z4Kpd|BJ89iO=br;+xY{Fs3#q|f~L|UJ|~47=j0zPc^;IyZR8BhrykKY>`6N`jG^>b zT85bsv>e!(4@4h>R&Rk+Q`i1aeQ>k))Y;FL=q~gRj60aNOQSpWb4 diff --git a/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/cubic.o b/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/cubic.o index a0383b94d6b4ab7f610bb7f6b3ad7da822f1480c..882a9ffd314e845ebbbff4b080364645576aacaa 100644 GIT binary patch delta 715 zcmZ9IPbhp*6vyX0$;`-`_h!mGoP+~{1mVS$$KlPKckcF2yv$?nKz4iTkzvrBLFA^7tqnelX8tQ?!jq%guG<%{j+3CM?^^8d)(lRd9@P$ITXPQ%svV zZ!y#a-e&l}0zftrFt zd{?AI7f z;HZ`Y4|n}@1^;QnpMvXx|D`GJq|_@KI^!Qi-z55lYd!_)SVOK#$8#*{EFC1;Cee4Q z)h_8T^u&au?_+C}@jgloOSBe8qAcD-bWNgHq;E_5I&MWp`ja}|NVG($dr8;nMURr6 zL_Nm1Mrw#$mEWkw{uqM>9F3*;16A&kJiXp&>`ygh@UbBYHgevpY=p5CuJ`gh13z)H BZuqF!U|1bxfa2w>8W>mkwnt%Jup(kHa5AabMQ} diff --git a/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/debuginput.o b/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/debuginput.o index 6d6334668deac72f0b5894e91232af117d7f6cfc..e4ff9f4c72b78faa45fe4ffa8976fb91308c687c 100644 GIT binary patch delta 926 zcmZ9KO=uHA7>4`BiqhgmgkklPg!>MA4WQPu4?No2{vUHofz7j^E5>ES^i-d@wg!%vjmNBrllhv^C-9lXj+vwKw4p#VKRi&*&aL`eWpU zC&080X&Tg2TdU7wIKb!#>_Ch{a713hc7Rhax`SMMCu`VH-ui%ikZGSK{iV>as0jK~ z(tWPoE1to+puZ*cDs&DMVwx^z3@Y?K^botSAZc8oEAn|(881n{tc;JK9Ab10iy^L^ zlFoa@xq^nM=Z~!Rn?j$%V=!0Ug@|#IvapR9y?|pd8b{sWpo=WS6j?&K?=d}qC&G1?v=8px zeGENvMYl5ERhxduYtWX{B2fSx>TT*kZc2S>!{R5m6A- z{1OxxsL(@1kld$%(R}C+^^*Cr2x6l^hzR#m7+4+K*+b{R{hh<_^Eu~yFZUK^DL+eh z?9?#lINKNyXA;9vk%-4cXJYXDaCBreEk+~pcr@h}-O*GkG8~h=NP6ICYH+VqMEK;f z?oeOzf#yKCM+`+r%*n=wWM0}GB=dDs-b!njaf&)8S^f=#)-L!&QH zbO-tAs&adevMLE{5ol$6TAkdfQHEq|kS-!CYd5G(Pzp|2-y+h+_K^JvuE_N-~(6pI7G){C5M(=a7 zV6}Ig-eIh7eQkt-}q?V+@2 diff --git a/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/derivReal.o b/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/derivReal.o index 0d063a9b18fc04fe5afe35cb3b78c228ca54b684..a2a94df641af3d0bc86daa76e8b5be0a6b246bea 100644 GIT binary patch delta 710 zcmZXQ!Al!K6vlmHp;9D8YFVbO2kD{pV28C}ikBo54IWwubsIOfuG=K)N@8L(G}J;b zf_SpwJLS-W^pI1bWuOP4g-|HuQuI&oR0|^J;K5wl!JQOb2j;!u`@QeYn>lRLVVgcz zqH;GHBUGYyhE~0NIp?Om!t!u2TgqqMS60?8+=n!8K7mj(}IRkRWXW&s*LLiN#{?WQ za{+xNW2B%5Ji2l5Cy%v$a!E(3G;wQBG~09&+U*iT8^zYFtu4fp z9wetUdHFp7D$h{aG;ox>%vSrllBiF43SrA23vr9HO}z`}e402a zmcf3ho~u6EK|@kg_22f<*JxQadV}hGjDF&`v==a%;&OgFRi6kYJCZMAtD}Fr>{FVv^TooIz8@ zbqsh$q^@>5JbnBp$JAg)|K*YPrp^s2eB#XUvO!&Z@qPs98%o6}1<@$pq==xWEA$s- C){zzf diff --git a/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/exponential.o b/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/exponential.o index 0aa8aac91ef8eacd1b79f191451685eb70062b68..badfdaa3209df16927620c4bd308b65fe5613fb8 100644 GIT binary patch delta 764 zcmZ9IJxD@P6vw@<52Nz=d=6g^2%ojKFvO8ZmFfAIut=P zL{m!`Z)%EYbc&#Ck%(HFa*2$<9(i2Og?kV8|NEcAIj0aP1aeWkd1@bL5Vd#puO*F* zl(v-2q=#1YRYTVnlc{7}i~ACZbwi68nfOLZ_buyb^SLR&Or?2GVqQ3F<(?zS_J2C6 z!PacW7V9dg3y8FF_-vgMC3J*|GX|Q2yNl?bCG^b(2M#YY;MNfm*JwH>rc3b1T>4}% zDldpTG!=wSL;6r10=N(tbi8aJXTjoA?hB zy$>QTE-F}Um(V)cvS<$JDWThN zDH&R{ik1;AA}9%x2-*}uMFc$-UGmK44$M8=@B5v@nJI-zp~HDA6l$89qseSmUri;` z8+vYWD!bGN>GY3TV zlN$)|^96L3vJdRK7rK66hg+$tvdOn#YvGjJN2Con!`w%OHt z@D+$VDKqJ|U`Jq++jpF~E7&b4I{g7J+H=7^Bfl0n1E-5J9qq4RM?vGZAE|a_Y{%c>?{#Hxf$5O07kI;%SZuEBH5jEc{w}xPx(M=4-EefI*XZ)ygUe}yY zP?yf{*p$xmpoB%Ikxd9XgT;j4Z&Zh$TIwB|3C2Gt8c_H1rhh_P(l3gJHEQ5glJT#K zj%sucIZ3^i*EBkhB}p5qO;w{$@k-KVMH?Euf>x4I6u*;#PbyDa^Nb*!VtiY5JE(T= zUN2CSbWLT1M)Rnr7!|RZ5;TNusmtJ|pdDnTRm_NK5sj zCe=h;>ISx?{s9dO+K-6TKG?%Q=&GB$^q`j-*h*V`SGD-)@4f)9<1Qi@#`CJ%XN~4z zXDr^Y-olPX`_YuykUF`e(Gc1)8&=t4{|3tC%?-P`(K`nygZJ4aeFKeMrsHmUY?}T8 Du8W+2 delta 899 zcmZ9KPe@cj9LN2c{aFKHVPTjEBrsVE8`k|_W;{1|J`eSlEh&QZAQn5VgTpKM^#}A*pGA``%XNFFn>do~Uwk1l%viqm|EV;AMJLEWA%^T6^Rm?~lv?*(J70)GIR@oOCy^Cg=(GhH=1%IMEp5~c`kzxFc>b6_$ z!M(nrBI%mS2#wC7mSHr8dPYzW)}=0kX9azSCG|3*dXJ!>b9y; z8_uA~xq1s58s%untfNle)~EwdX1i22@^7GA!Q3u4pS!t>2C!tM=__dX1chB=xI}*e Da@L=5 diff --git a/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/fftma2.o b/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/fftma2.o index 85b7ea6b2e32c70feac7564dd56f3f296e1b8c94..2c04770fb13d715fc21d81f4a4229e1f75900147 100644 GIT binary patch literal 14568 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 delta 1195 zcmZ8fTWAwm81_HorImFtE;^1ZN);hNnnMJwiV&;PF|L<-ZzH?oG&ftDrb*hS@zR)= zWd$+Yez16X&?r9Wi^iZYf*R3>u&}P|Dh5=DzGy*h1;vV@r{?6rIWXU0zVG|b|DE|~ zB+Xu=*`Ic@=NuzDG1~I;!gYaI%nY{&x_ZpGu`T9Xv^L`7&8^$lZQfMBroOS+!$X0t z{OnyNniT2u$7A`Wtzp6i?=Sfe-szLIEo{QKWvgrxri%Rs@w`Kwsj^=QE6hH6kDRG$ zLrTT7%VPDSY^wAOV~UXDxmm**1gRAfLMUwe$>IJac5M_ZEJE zg7v;8x{N`esug8%165qr>>E+=sdNY>pH2@@=hx{f+WnmF;e?-Saar}BrD{LQepO3L z^_4~a1Ga#wWu!Vq#;bOGg2sUA$x3y;MO`UBoWsK3l|7bN_yx#{UaKU#(V_-%U#Qgt zgBJA*D5%mMXhE+1E6@Mi;&~1;sCq8Sv}KFhAm2Y(_%(SjeE~Xx*#RHDvc@=saBQI{k%YJEu#yAkcx5 zz#?ipxETEMj)bVqb#UfV^3OUp5nYF?lhZAjof&$JQGwHt4s)7|oWL;3VVzFF(UqVP zWV<*$#C?GmK@mP)8!_lK1|v7w=ZV69hSHas@6Pn{SGtN!<{$FfRur+>+6qMtfKEl?M8NX+bK`%kQ<0)JM z@4)QkY%#-7uainB2x=Ik0-vI;&!A?c`#77)aHa1z+5lUE(+)HW{2$RohSf8${$uP% z1w;K#W@otF|B#m9M3QUE|32-g+tfhVyh$2j^epidrvEgYA1kgy;#?SiZaob?0`Wd;IX$Z_qO zJTIJQ6b*$1`e~FOj#dDZ%9M6Q*q~USv=6Torj@Dm97l6lRU&YXVP6Ecanq;68J;<3 z6`y@f`=YE0m-UN^pJ|P*+9W`(dPfhAJM@xrf*e(`;Abrj-sX0Q_MSoC#dkC*o2HkkCMvMpY m40E12x=(U?lRe*h&;Scq4Gh6G_6EnqH#c^*wAmZMDEtAb&u3}? delta 734 zcmca$dBJi+0O#a>E*Vvi)S{xq+|1OxlEmWp;G$%0m;7Y?fXEOJe?MJkUB>`V{q)ql z&HkJYjGM1=Ni%MK!!5(i*fW`vU!UnE!(=P|IL6?~Gx_x;{TUg+AOJ!!Z~8s<`s$p;0+CC@^Q_C}Mn zOCfj0?#Ycp`i!3^Zv>KWCqEPtm;3_N^&Cyt@5zF~;*w0v5SK7QRl#iJoa_jcg^5a| z$qGy^6c+b1hl(1Y$!bGwvOyDH59NEHiMLI@2(&8_DmocWHgPheh`1ylRCEcN?5xR# zBKn4AP#Z6y$+AQFchSTpCr<>LSqs(03=IRA-{U496cJ}sn0!;j-B1>)(+W+EJCyH= lChoa8P;@>kW5nc-Qs#{NCu>UEGri=VtjHs_xj{OB5de!SVQByW diff --git a/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/gasdev.o b/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/gasdev.o index 8d9da11c3bf8b9ee235fabfc454063b30dced5ff..457b31402557157c54923c111e37efe87ad45d0e 100644 GIT binary patch delta 893 zcmZ9I!Al!a5Qj5qD6x<(h3r0GjE60SR*F7Sg@Pz5)I=ea1`76;Zp~^JcC)S~^wPhe zHyu4Fl#)~HEjE|72cfp0o+|X#gOW=@58BXMLFi&;FSD>ayzl$HH?!|3f0S=tPqk)J zk6~K9^gUbouA?6L^L5Xz)>c%_a$S3QSgkl--L>W&zdE>NFMGE2!f~C7RZ$BIHP0%0 zex>f(YSFH?Hf}0t9ca%IFp6ecnC~HW_2}IayAjq@_}+_mfy8!J;8J=LUgJ($JUAyl z&GLU}U1a<+hX2w-@CFC;0vuwX3%N^2Y_jMrZ0G_;@UyNUiKlv5{-k7wB}-@-BGXT! z_fU;SzW`h_@)8M;Gd+eKL&!EAJ;!VnO;La^=!D-*+z|>I*cK`W*Sa(OX89!Xzl>`* z)hnbyHbvc{5&JO+?H=v9%j_L&^orR_vSZAi&}Gap{*Bg886QEALJFeqnAI>B+8@-b z$?ONTq{^L9$75y>XxAy@gZMQ(^FCRP?jZX2EOul;9+Mqq_Boa^h4>lZR%Qr3;bEpM ze^LAIEcyzk`V_2V(07rGGR;Ic95svh9^*w^%?c>CwzK;Q2rw`o!du)nC*u1WmXgND H+fU#>ikX8G delta 892 zcmZ9JO=uHQ5XUp?D%ui*lFjQ&bLe_0#Wt^74~kS`P?N2wO=v+X(y)}JP02PUsl|h5 z&#glb?L`V+dP|KLy@=m2g(3*?BEg#|_-tl9%!9YX{Qm#>*xlXSZmxMGnpF$c zz*p5uSzWHq-3|Pu<%U}JDiyzeM!9~y?geGdyhdrNK6hGMRAFY?oxCw}X(U^iQ1kv$ z>u_`uTARnyU_>IVcd=V0+($bu>^4LWj@1p39v!3lexh9BeoEk-_(iyfJ8?1gUDy9R zSGwW9e~kKEV>|=+E1rf2IArDFE!Hd{pHqtsW}U(*ys! zvP2_~Q4Cji41Ac#$vwgsn0yX92_ZjI>zhnnL|f$HHu7LwTF=A$+NO22>TJZxFuwEOumG4p7Z`rryS4GH(nUxS34D zQ~Z!D$rLqu!>kR=_A6M$TK^9x^fb-x?+Ay5{1xLauB8OHt?kr%69TN+XJG@k?Tqm{ MhQ*_aC#MSV7acu$djJ3c diff --git a/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/gaussian.o b/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/gaussian.o index b0f4bf06da8369599e47dd9a4783fbbc8c5a0dcb..8b6e75f06638ea9b7cf22b8ae6f39255d2334974 100644 GIT binary patch delta 820 zcmZ9JF=*6K7{~KH!Psk)+{JqDf}&gpX#^WW(Mmx=2YW3jc#F7|w0G6OUE5PD;&NTp z#qwY3;35d#;7~FZ6zn9lAc7!8aOl=k9JG{jT{M_4%M0XvT&yiO>fW9DLVR%I zG?5k?xo3i|ccFKDhJ z?D0KZQutf=1?fz3n;VK+Kvmbaa&P8a_XzXB_C;5;a5?% zrBh_u$FA&x`cbtdoke6<{O`Q;xZ=6S-&xJF$KzdF7c>=j2Lqxkc_)VkMf`kjKR_??c|TG5`jw!GMBOzMcLUB6nnd}-?9 zlv}H+TmEWvKQ&9yQD2^-k@RMQo?v@G^?y6oyCmvE0zU_qWSx3Wl}TF9%o%!s-Aq}&;m`{s^a`Vvpb}=RWx2zdPe$e(LQCWWF7eBtlL>sW=H&t7 z(>&vjV{iwB+~Y@=40;p6V4414N9!Yyt>_Sr)&qF9kUx0qv$1uEr<(p{dSuWfb~Q~h z9p)MLNuz6v>I}OR294WK8~$rPyN17sdRE9qb{`wGfrpyf?7lSUbA(ytOmq9U2JPqb zzTpocn-g+_x8iRQzugjCO&55_O7{L$O!EkGWqFe61%tYHpA%GxzUNX2nv1%_MWQ=! uPW+>@aKr}PKq$&|1;534`U+>HNEQOEHbSlU(A7EzM;56Mfz~aAa{NC*6nt|4 diff --git a/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/generate.o b/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/generate.o index 548c40476cc29a5bf175163bfa39bae0956832ff..65755014f7dbd65954613c781f43d9a4fde12414 100644 GIT binary patch literal 10096 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 diff --git a/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/genlib.o b/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/genlib.o index eb7331c6bdb872614321bdcf79cc7120757edc29..06cb9a334c6f4e1f013343ef0c2f62ef265f6fea 100644 GIT binary patch delta 1054 zcmZ9JOK1~O6ozvqwMem#h;VcBBBr)^K$%9ABB(J%7^7X-MGb|}IGR)vlGGTB4=fU0 zsVFV~q7+@2jdbH;h#OaFH-Zbnf}*9H#+@rkUB#7Gb0cyu%zuXS{pT@vzRv89W)EK@@hXm^6Ks7V9uQ9+(~N0vH00SFPf63HV(LeeG5-2bH*qd@!oL>B z;c)8YM%-!ehtjj6cv7f28RhZTndVQW=ZoSAA<7xQCwKUv&ct6{K_jTTbh5z``VLJO;~!+zwo>&84maaFlKxcaH^c=U&^nv+ z%h=uUJIaEdm9?V^J&BrIr_SeT!HLp(Nc<(jn2^>D1 zB8dA88m>R`t&(Q9BjBH-2dMgWs=*REfu{c!cgcU-*w>le-N;1wFyk9?)@OyTqbBI2 z+*j*WYq$QZbt$wB3h2~EG{AU8-p82YslW^{n#G-f&S#}3p?H$m6rN;#JFu!zs9qk4 z5jkOvHs~D6!TWR@tzbjkixo0x3hmGY9Yr)8qZG;fx;lDQ#*q=7w$Q5KHu;6et-Ag;?Vj~ zx`WnpMrkkR>fEjUiDWWQ4IaVas8ckHt$ zU#z=H`HS_%8v2AVW4^H+wtv_D%4XXw_gZ-esB*wzwJ@YvA3eY-W89(i5lz1Uax$6% zcM4*NI8B;{d{Ir@tI;fG{DQK`NzI^2IHhR@^Cf@APTqW~HAGa0 zLfaDcA=N%j*HCU>qK7DS{QVcnI6?=}V}$IndaTwrAZ>I|3cLb<)<{87L;h!tUJMAfB26}b8Uslq)=E*ZrXa;$ z?DAnnkb(%JphAcu=%Eb==DJX<^`iCQO|~6J|qx=SL@AghoV#B#5W;tp#pMKg}|utra?Ig%0gS+k;O22qb_Vu3w;QRo~R5ku(CPI))0x(?lNMK$r1 zZw@Ndi%8U<7_Q5B5_VLlASkBOdjw*d_{3eSO4nzYl746UO`*SF#kACM_S4I`>&MyC z@wro}-{bdwrJlmNoHft04k`2*JaJ9fT)n2y8KfmGadlpydDP>&+`1t(S!T z+KxxO;ZKFWal)PO(`7^whIr2KFk9^|Jc+vroxHFUMxdXUf2e5M+$)%Odp$@cbur88 zphDllO6qh4t)xaTv6?if1dpN90@5SxQZ6zXrT4cB_;Lo+=xMRXQ+W|6+a%1+TF rT;?J@fNgI4mm+t7_9LAO(HU4WW?{>?1Xn&pZKP#<3+qp`^Lu^+DjTX# delta 881 zcmZ9IJ!n%=6vuPYf+S#T5WHSL2`Ds`$Y{XSg5G;N|3WZXYFf}bs#0XBk+-rz-0rxGZ{_>@%orMvO;EnEySI)`{jr!~|? zOrRf9r~*e=;UA=j*Op(OkPI`vC+Rl}-A7f>14(W6k-722duR#zN79oP`V~V#@5+uo z3tfjR!r}*#Y8HA__FS{nJ5qngQg5OZVU$KKqVR`O)3Ina(TgyCNN(?=h5i6Vnf>?# zPDFjQjd)b2U#LeJt)LlI#9I5Jat3aVai=uLWvlTz@G$cK$zzL0sEcZf@wRm6oBDt2Kr6+ljZR7@FI)x_(PQYeijv4z zQ4{$rdLo}S_l)8sy*G`83Q-3A^bUPTBU7Op;MpB|hJIEj74F;|`C#N!d&-aC>0{W+ f%}@&coGQlfyh^(;MC_uGR~_B?k)1EtSUCF^Aj!2< diff --git a/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/inputfiledata.o b/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/inputfiledata.o index cd5e54664304a34418517db78d3fc37ab3e0db6c..ba7582236f20f1b51abb847346df741fb5600498 100644 GIT binary patch delta 1088 zcmZXRPiPZC6vq2f6;iC2gBb^k5^IDW+R5fmg9o)uA|X+vxl}J&qe)~XNlmo`4?-(= z)TaHAwxUQX2zqLpi@m5h2E0Us5ImGZFNz?+gH$NEm>0ouVc%oF-#2f*nJq0*X^B=> zT$OFtXTplBZ{W6>o6aV$o0Iv$Tj{A>I(f~^nyF+;Wioei$%))#YC4-%H`4ja+x~H? z9CokTy|1b3&*Nyft{$uJx88=WEgaJHT^oK4U6B`fSxCd{Bd6lE&H0LuI!-8HQHmv9Y?pig5S5}=t)2b%y!8s~cmV=u;@;u+}{oeL}?QFJ& z`H+warqBPQ)sUi}XoZUM635+l;NJ;8%!b8Z>dU@I(W1UumEQxJDBwM+7A*8z19t3(Y} zXOGq5{y`0Yo{m~;XtjHr{mQ1=pi`TlAnf;DmpMKb(C`&xl#rkKa7?2!C@4iYP*$dV z!J1`F0~jtrTZp(u+I12gZbeD>-OBjI`gfYX`9N(;MVq&w;1=>I)2c>~qioYOCv4|lPv`)7guKri zPieFa!=^Xc@tj7VBk2*5dYZUKkFjS?o3F9kLv6l@l1I=SDjp@%tof*E?!n;|@(kbf zyGGw5?iG!mCQN$!Xca47llHOW6_m%GSCNU+K9l^&_=G&f;ZCwu{c~JI!KbK*vQN++ zzWJ0aa+E1execRV&=*Ad6}`cnT^I4#uA8XXbqy^84`{<$8Q5->VP3Y-Ui*LbWmPN( zgdAeJ`X4O?6jiYsn3a$CrUwuI>o9})p!iEWG&+i>HXY^Q-5OoMPEgPS_JSs@!ygiI vos(S9luO9ibctzHqeCc!1Pxgmq1k4-1tU5@UojCKY&_C~OjnonG8&`bN5iG_ diff --git a/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/kgeneration.o b/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/kgeneration.o index ea66405de727598da5ce25687dd11a30d209563f..33f5431d009e66ba7b99e8138ee77b0a1c9419cc 100644 GIT binary patch delta 1126 zcmZXRO-NKx7>4JYvQlVaNQaZmICs?1k(}dHAmKud@-k410zna`uFkav=0_dvkH`!H zD=PI}sf!qJlTjhJAZ%d-5d$q|grIN{Llgx;iL|jr9rC#Fbm6|2^F7aZzH>R_v5DA3 zJ>?gIp$ccZ;xQc)=h8`Aq!V#*G~G9nv{SECg_Rv9*i6=)AR$n}wY8DW6&ubn_}^HN=5get*@JSQNw?AM6V!>DKEVU3>#f$+h=Pyt zLyCUUXbZ?-{D`71_tuGh2pcRCQM6K{Z`9ha)zfN5NUOiYq}**;(GHFNQtKO9{gLu- zY4uU88jNO8>KFX7a&nq;5hwlZz$tb9j~dOXu63=x?#7HiL_p4O@)ZSJ)E#eL#u9?n zg07&u+NATyRx|!xnOu$AG{Y!JGY6_+WPsNQnnOfpH!jJ%j|VdE;6sgYzjC9jHcAf> zuf4~kYG7N*);sA$d4N$0!GK98Fc|njYmQadOjL>K`U}*B@*v|~>esIB+}gZ`c1hRN z){`2&i$O`_>OW@xqghEE)jOwA2L(wpiayb32GqcKuR7JDMtc#KbYAto*66%rHT)sU zJJ$YDqMs->F3|w8p-~!#A(rSlio&Ex1e=;^0#;KiEg~!PC5kfhFv6|Uw`8^KKE#lqAc#7&GpKXn{(hYA=llDe-#PbA^xo^8 zXr$G&*YAjkzQjOWB>F9JJkfJ?AU-%UEJkAe{qf{}(Hc)CV*{4dV#AltCVTcti|Dv` zuJufN^RebgN1M1DAIw~EEK=rl)evP?SZA57+JR?s6%%4i^4%eYq^Y*VWWU|Z6V zqTe)n1a3Fu&(u5>Di`NDfvBYAY92$QX{6k&ZB5aG8g;1kNlgza{~b-wBPaLDDs@Vu zQ>Ziqy+*`f{H0>+nx`E@2CLqs)SntXY{yf>Pam*mnB1v`IHYp%z^@SW2)c%t#|$Rb zmCb7&zgly}i?zep^a%b|(H4z5;jR<(8BrO}BPC-FX&K)kS0`+xcI>I|rmq;PAEz!* z1LINE=uBDRUny>L1;GZB#&NwNPx*|sH$=oR(>Thf)u$cZ@qfWIf?me+s@-jk<`I+h zy}GQ28ePETKlF)47m<~8QFUI>Xad`kCKO%L=q%hm#%I;cS&hyi>SHvQv3$RYRx?)9 z7||DOH7`>i=KW)I3tq8I&#@&;dVpXcME79@!nP%b=Vg*OQ RFdqz;fAkfu=M&ORu0Jy_z?A?1 diff --git a/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/kgeneration2.o b/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/kgeneration2.o index 7c8b16b04512f3c858c32c4db391f1e030bae35c..b7f392744dd21858776857bc9bc2183352b3faf4 100644 GIT binary patch delta 1069 zcmZXTUr19?9LN2wBo_3r2RWUx{c}23xT}NySdx>Vi#7fS$5rVNjBnA4=LrOs-2!tpkFoYl$K4b)SXumypx^REz+~4Q(JHLC+;Xbz( ztOvC;nh6}P$WB*G61plX0|SZVV0W}D(c4qkXZ0to==nr z3sz6|fEc4}Zf8@uZJF?6Ptg9;R`&0bC^QI!onZn}P9e{3Ddt;?L)msU?ohWK8KI)@fT`*_8mMnB-PSG2xodR(Jl`T4e%f5!e@EkBIBSI`vJyoS8V&Z6dAMMISc zo#wawtkET|`laQ+*>IyONNLPener{eBYdKzjaY!)XV5SjeI^YdKz)r1drdO zlSuf#(|We8)wzJPqYw}>&fjWn+q~#HJbQ&)=a$zrI*y2|q*WY6Ud20bgqqd=6H)OI(jos}18lnm delta 1145 zcmZ9KT}TvB6vsVl7DX05*m#Tf+mChGy^cL3iY%MqC`2koAb~c?RFb;68fgTk5CuV5 zf2e#Y@Ffj;(3Z%cPzj=^$UZ2aLSO35l_1KXy0mAZ?!cUL=l}cPGw0lyd1uxcE2F`g zP<3Hko=o&OGSS^7_a{2f^f+*lbvB@kLT&xMtQ>NO&u!)rD}{3O3fEl<+*mbu)aI$I!-8ew~P0b^Y_}9NjY0o&R2IUCftU| z+mMl)HToQjZb=D{#}XfNGw{0Rc?{cQxHjhEoTpu^u<3(l8pfK(5Wl#IRgHdu&ufWM zS4Ix7E8F4`jCc+4oh#RBv>G#Bi|*owikA`hNxF?b6$6;?8KRsAThex!SX8u%=~s=$ zKz>8q<9_lvXZxv#spwBu{Th7;+ix_!;clxnTFB4!njT{RMNLm*LA`5^)tefyLSLjf>OL-TB}hvs94fxm?|EIUED#hv7px9u%_0Z&{A@Z4q&;&5OrLkDKGPr zWb2hzt|G#CUX0P17casRB!K zj*eoy!lJ8KuGmXgAk3KSks5Z}4xBd2XcpsUj0Ul!;suDx7*(OIGPZdvoH>9M*b&bk DJlnec diff --git a/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/length.o b/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/length.o index e77bd97d52309c1353476488069222182fba1fdb..e33b6724fa583c4aee2b98d636b9b7617440c4ce 100644 GIT binary patch delta 392 zcmZ9G&r1SP5XavrL@uRk)@}w-5P=5uu!L?|5J<=J<{^2xPkpd&SM~>80`t}_VJ`I- zRL8|b$NCGZTXyZXx9A?Vsa+bF&zG6+Ff+ZvRiT%IL6GkzI<#d=PHj`reY@^UZh0>C zm}zoni@HMkCaVkET5oela&{t2VK9R>8lGe|X&b)DX_H&Tw_MS*xUnoOkJMYtA-{E# zN#b$Y-W;+(EK^9~5w~SK-f&VfTvaM@LP-BqVR5*}x9LmxLXo7|GDPhtsv{vvq*GC@ zVUW}pcE+y#&s6~5lN*r2bV`Q`=2NdwL{N2D#H>m|#{=~ywgUL69!JJuTF(~8n;ypc zcc+Tov<}t&b@~}V?TbtY-~z+hZ@9&9t^)%US{Z5>Xxngvp;n5WDY!SG;jW&8a};_B ZKJYH$BZd)QFh5^POwNq{eZnBK^aGpRYRdos delta 354 zcmbPXIKgm&2IGZ|nvI+ic{!Q6nI#ORdBvIOd8sK1nRz7)$r*`7lUH)es(Pdr6(#0o zrskC-7RLt{C2PCnC+i19hIsh<={oB=26*bHr{+y&fB$84!wr3rO<-vDM^@eBw-}879Bt(~}f}Dr!elF!`fsJ2r~?28@>3N6 diff --git a/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/mat_vec.o b/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/mat_vec.o index 45bbab57e093c68046aecc9b3349875a8ff1f5e0..ee117bbde6b590ea9a0edc40b60a114e248f19af 100644 GIT binary patch delta 128 zcmaDL^FU@p1dD2MW^QRtVsd7Fo^C;EQEqBtQf5wON@9wBT3ShNVtj6XN@-5&{(qSs0H`Zsaj%VrHGZ Ti^q;hmvwR@tJr1%-T+1b5I-W; delta 124 zcmaDL^FU@p1dF0aYEe;QZf0s;Nn&w)a8a_hOMbF`KxBxAzn`wNu491b{(qSr`vbZsaj%`p+_X7mpp2 PChO!zR@b6Hp$CNs#rb5KbUOTcdI>`7YSI$OHnp|TlY&qY zPc9!Q9zFFWQi50zu~iRVMD}8-#X~Prs31iY#6$YpOfIwVzTthpd2eRkE*6#wkB{0` zYT@`?thp7tN_ZLTJ2qVlX6pW}T4UnmWOXX2`ZsI!TE(w;V`Fy$e>7-RX6jXMygJc5 z*L9l6Y6kl@ZGC~P-Op_YYp;nrD~H?N%I>%EsCz{JV|Y;{O@bVi-mu&DH9>z`IOXK% zE_|n`KX6hgk`}S-DElwrn=_(6bJB`Px`C3b(wbZSCFpm;efP3{#`p-w&Lo$x?kc^; zSDzPj9BxmMUZ8CBA)fbmG>^#We^9T|_MUdFRdFhYyrB-$--0UmhQ4BVKUePba}Z&# zy0Xdiu%K%^Tu%6Jd0!BI0b4trusbJc7y9E$zvo&{1bvE9+{^#qiXR1i!>7IoKZ^x( zXP)UFK@(Vy7xNL*L;OOW*<0+N5PlZr#HjwtojefqI--O}!=U6l^LLh$isqZE$=5_n z2vaROi%_>{17Z3erQl|Y)Id3NhK3Mk25AbB(OI~CgEWAW(N74C<281ouF88w?b%7 delta 867 zcmZ9KO=uHQ6oqrAb&)pENixaH%S37wA+#jZfS|-h5-m*w{-jzcL9q-WNKj)f3un8{iK(kitKOKKIejX3JXfjLtc$IV`z(Bd-16`t za&JVwX>=F%h!`6m2>t&O{uLVX?tkYU=Mp3Yo{y9ZN6D9tF$pR!YrarZ^e-6Gg_b82 z^*r4~Td&eOR&|kn!3~dS6zn2ie=XBy(}z{3vi z#6>O5)KqAW^Zkmxmv`h9{T2G&u3Jo}6?z6yLljOjT~_EI=Z_Q}Xc(5va@T8x{>BqS z$OG*EgF=_EX$YFfwoxs_neF4+-~}qIPbhjDc49%Mc<%#+&ZC#GsE%-QU9Rwixk3M5 z2qv$%{p3rcH8`nVnuH^FX$wyJHtCRNl`g?H57QJJv!rz*pi~k+%q%TJW=fPr!;2em Syts&7rW7s()%CtrGr6A7 z7tM64bJj^`|jg&QBGXU0ZZFdPzL(%``%#Wff>Njr^|}B*RPxx6tP`*61e{>bem-H7i@`k(x&-v0=@L9roR8l~ ztxi01h2ayOjPX6nRMGnj%T3}iW1!*;3uw3GLQ-aly3-Ob!K~dyd}9IS1+d3G1{b*L z7RnRgiMxw;Q14snX_#{}K0ww%-(1+pk4>Bf$H=xz_JhvqmG}hZMKg%CEnmZaDIDQtOFztFuEh^Kmev}FKc4n$ssI20 delta 749 zcmZ9Ize_?<6vsWUC^F0f^S-M^N+m_;#W128q93F$q2E|8ikOK*1{P6E5Jf{v&}p!- zhK5?SH? zR$?>0m`nCeZY0HAbSX4DP92z=1dzW+9OdP^#hWwk$*zcS8<;+9-$2)5`D#@ zL2rm=CAx?2ocWK4-b!?Y`g=)#z+Q*Y5|k=SG(i2Yq%Y9^^;E0BafufW#t+CXBsz^H vhkz)8Q@{`UopD7~@YJ~tA9_Pu2Y^fOZ9l1lbG+*ugk>yuj>5j~?@GfT3N~g| diff --git a/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/nugget.o b/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/nugget.o index 1baae466d8624e64ec6e9ebb6b5f3f749ffafb0d..d74a5f8b8d4942363a647fc2a1a19ffeff1c0ad8 100644 GIT binary patch delta 692 zcmZ9IyGz4h6vca^SlgyetKcQ-;A<(OA%YZikPccL1ncIYlG+D_K73RcLFgagQ0}DQ zpdfS-G2kE$ij#@Cf^WBqF^oo9@IL)Y22U47!!PRtj zEn_UE^SObg#7Z_{#L}5`+=y$*WFc!TWb^U0OhQW~a%Qo)7tFG&OM)<6c{B+n`thto zBQ49QCMC!JHC-PLw>3T1eM5UPN;Lp2=i!(xyr}j! z)akom>Z7U`rAHvQZvu8G>O-}Its$s;?E>di^dZdAwl4yQ^lUvhDX3^xi&;fepSZ=n zkb0#(1=TO6p91}+TZ{fOb@H?~o)GwPvVr^b2=s%`3JUrQf8wy9?~~z2b(B+60&Sv_ zAN4k-C4pYDZvSh$;TApkHMPncuZ7eZbq7$Dx&O03hbU@M534SA*(W=w7(i&H?Lb7o h7BRIThs328sZ1umzLwh9 zjqj{1WRiVTn@KGiTMW<5dMCZ((TJ8#Z5Xn(ABH?Q4Yd0&C94FTm4Y=)&{tttc(z&oE(BrDw^j3^(q>aD5hxYGf(j-q+Tem zpju-3Af^pw(0llfK|w#KxEs|&rZWN!)2SQvC8nnW zZQ%Y)&`;>et*HZ?x)EZNZy`!tTDkT?w528d6 zlzM3Tfwmx0iwAoVV-8XfqBA^Z)U5Q%|4F2k$6CKIZ!ALdrMBr zn*ozd^af2D#z;_526Y+RXa*VIRaM`$sy(zN{iEnFjsArv#P~HePru5}JZ@wpeWlc} zMz6v?psI69qZ@cF>9$fIYjgoSl1?i1xkg7pVL>-xgc-k~*jLTd4=c=$zgPSG*65B4 zOW`4!$7a~%9~3;RMs?P!ArujG2_q5HIPdPB#5uj=`J!sQiaUA?TM@yRR7a=Up+De> z3VMW$j9%DL;rdKii;mF>D3+7JiV6AMh}Ecs-hmqBQ6FH$TPp)ENS@V*GoDea%^vAa z=Jd|Pk~FXW{6M1|jks)t^|(n{bfhz@Hdxi1b%YX(>a7cjk3`GpoZ6>dbWZQn6?6t4 q(mmKolkQ+6d5&(OlT1?`#!#A`z?N|lO&O(M#-lJqn%=?|C;tJExTEd> delta 1004 zcmZ9KO=wd=6oqrs291kqFzGO8{*#h4O`d`%agzka*KABnU6_r}P(mnZmDWnNZtlutncMxVd~ z8f_sh;t3Q3nwiYl2;87Aum%kQrh=N-uLS4m6>LNE+>lK_TDlLQ*VNHmA6g<_kwe`& z@;|O%JjDJL&nwhGSx|@c`B0$_G(tLGlNYg~&^6e?jF+UX7YZ#kQ{gv6i|7m=(hfS2 zL-E==Blqbpicy^kco)4u6X-+}<`P40co1W;5IsOKmY^!$iYSUiJc_uMu-3!fshUVd G+`j>S!KeKI diff --git a/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/pgeneration2.o b/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/pgeneration2.o index 3f42a5e0033a3dfda69a6207fe66e1980b8885b5..fd8aeea1a59bca7a62c4eca8ab04f9911202f96a 100644 GIT binary patch delta 1132 zcmZ9LUr19?9LM*&7N`+42ybU-VuIV++-ZePbEDCLG4L;@F57|K85{#D6nJuE$|$;zXRv<{hr_VcQ1Fg^sqGR zqYGvKfX80*EE6U@&Hfv?LMd-u&5e$9j%CLSS?fwJpUYSoV`%7R!AciKGo^gi7|xE^ z*P3TZbGhuFE#vj#6}kQ`cXe|$%6Vmw1fn-PMm+>v9TH#)K$x zmkotRZ1<7R+JEfS?=%EU-7I&;>gjc}}zpC%PqnHz&45J#e}wX$-lzNq13>cT)vUJf;0^!I@|idJ;a( fbr9DR$LStc5-EBQN7jAtCsPeiBh}zG!m-xBAdIb; delta 1038 zcmZ9KO=uHA7>4_$DpgRZKMdPir66v$+hh{brb!Q`#o~4^{lOoQA|;eyBS~x0hEVXY zNDoob*7smUsGfuzYYl9)fhHxvR^%t?(=G>x^#0);V=yLbqrUCBf$;e^24Rz|jZk8T#E!8;}`3D$F}f zx*5H~UAIMXtO_zBNuNwtImKJl8jKFYFf6)=lo)%kU~tOfv%&3knc=0fYeVYGioQ+$ zWlhm{BHF~Xz0$3c9j#=T!i;e1rCYDKD<}zfQdaaT?qfJj%>F9fV~V>==A2UWlH{)` zdI9|=qcez`T)QEeC55?zIg@FJWZL(NyM|Shx%O1!kLjg(7|j;_K&qM1P2`$6oy3Ar zdO;qhZI$6FZK@n;!wDC1r?jHRUT*Dd&SfAW+x=i)Jw+$XR*P z-P`{sgD43%DC;yRZWfMkvof?>ar0X-fYZ7`9dLph6oS)snTC-HS#%W( np*C@uolt~+!5@ye)*FxxAE7Il3rFZV95L3w-yWenQtkR*qyD@i diff --git a/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/power.o b/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/power.o index c98827d0081746d9f252b91ea8d6186b294173ff..dfc1b1bc7e55de46bc9d01b6e3435b4d894fb9f1 100644 GIT binary patch delta 786 zcmZ9KOGpAy6o$PPh?3)@$L(4KE(#245PQ)kgv{L8rpKn3QbTZhSkbyot6Ic?C?wHk zw5S*eS{4*Uo7x0!${+|@1Q8`hM1!8$oPn9ceBXc0odc5#f#Hy;ysEe_+R9v2qFKA9{57S0%17_9(8+F|KYc^G` z#%eLy^jf)*3sCAg+|^Br5+))fIRimE_grIsg4j0`r0v~Ig}gm1@)+79pQ1c2IvwD3aB+^Khl!2Cm?O;cu&+PY;n^Xx z47i*!D?rf6MG?D-r0W%yb^DI?huAO3>-G?71E!4ck>K9RBTs03#1?S5Ucxi@9wfXQ z{4OraIBknqD=4}>Lwi8%ChWLm{|laYOYAXrJrK^}!^I=*XpNu9*zOOxwWd1O;Gf7P s!rNfX9Trz;2Z;^AshhJY?Z#cIW#e$c`&kQ=`H(qegJoNj7Hy8Qf0)i|WB>pF delta 782 zcmZ9J%P#{_6vo{lsZQGI3)dYsm5`t{p%L*&m}s;ULcKyGA(N(Qy6_re&)TNW0t>>* zmQ4Hs?8KrhNF)fcW7UmUEDSxfxs%MCobUI2=bp(uh#W+Y_Z^TgudR=#4MU&LrWaQA zmAP>v)f`<+DT(And}KJ>A665Zl1VR^dyY0@RyrfZjEX%1S%Y;K4SotG|4(JHl!#XS zd+)Gkpa&>ixu#hsDM}g=+c^WOo66@nXNsdC0*1SVWZ}>qV|!@Y;Y?dVBr1dikfm96 zgr-N%)CM_;%1PYfoudH(&ZPmCN8E(fUa}5?9?DK}bd;k*FzShs7udDFEAZ@5$OHJi z3b_H*OW8f9p19NtEL-#y={H9UaA?stR4dSB?<2ysmuf*&8#!8osdi4^#$M(0C1~|g z){W{WM+ZT-=qJv!@4((<19Cp4wE^iRmo1=v%jp3q_^6ga`oqya?46~>Te8ox|3~6< q8Akmv=D<`JM^!lSQ!;5@_&>_X7@W}#Lg9<{3aSXpVwIVwPLN-*yJFb@ diff --git a/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/prebuild_gwn.o b/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/prebuild_gwn.o index 411b45d76066745621c3a47ce3976f376db1f83b..cbb8977155a8f01dc9ada3d2c305ca3af0231b47 100644 GIT binary patch literal 12544 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 delta 691 zcmeCM>9E=0!##NtkBq8EYEe;QZf0s;Nn&w)a8a_hOMbF`KxBxAzn`wNu490wetK%& zW^ZnH#?3c)3>Y`F@P#l*RxvVwfgprp-~!UzK%6qUP(YmNGQ;F90XN3d$rlCmnQR#+ zGYRT3wof(`6qowK1kn(Orq6(JauQI{)X5VC^%>7kJ_uBL1gdlqx>Baep9JF=Z%z&r z5|{L1hRD7`QxrS7QAnIgoN4kbAvea$lOF<=T0xbXL!AzD^7F}p!s3k4lQo6i8J|xs z1d{V7?-bT&d^q`~u)ZWaRM%xRU3`-bMZ_gVp|Wq$WMw8N0%et)|4@4ygoTm#-5RJ^Fo<)MgX^ZW<>x1 diff --git a/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/random.o b/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/random.o index ab39b08e15a407b65c2e5680c234d5ac9cc401a0..3d275ef780e7e16fc4a46ed4fcf9922d8bbb388c 100644 GIT binary patch delta 934 zcmZ9JKWGzi6vy*oi_~bO=5oLM+H<&yLag?Z#SRV{XmcnEiHizwf=@T|3{-zgmyA zti4sjddx}R2y64zU@EN79=}$(UaJIG!)jO#%HH(!&00{Z)ywnMiZ@f4ZQa{8@Hl8#ibk+xmGlYrd=;Lz7)&aCmUq||bO5=euir5}%C)!Q3oM)L1b3bgbOmck zKe|B}vh&nNV0+QeghhLd>R7dvzQwukB6k;ChTdoTThK>vmC_wnE&isxjTTWfRI!>C zbT=A?9^uY8K?A%t^a87o1szAn&`qBEOwb<~OnGzwxs=jB+4Dtso?_0>OHBU?dJ)Sh zUpINT4A2pYjc5EtD9HG=E9a8r@Sg&=}h|AV@)ATE5GJDdAp<__m~?tSONY-hK#FF%EG zvMYIbvgG^4@_cFGR`F)xqCaMio%}h^TI6riHDC6bbYo&!|D_o}L{jRfQg+k4b z-J|SA{yuqfe^tpX)`Ldw1*tK1Hhg3AD zkFe*7@WfGxD!PhVw4g`X^G$f(A`(-2ncDI%LC+u)%W2Cj@$VdESCDWWb<;b}lP3gy zfmSSMB`owhS^9vY<61EbYtArT$EKsS&wbxT-x78Wy~p&opjD)l(gU0*$~8!|f+<61 zSRE8JkBXuFJUJuibG$P25v$9BE@8*e5muiG`U8=;OVh~2l@4zGEIf~~Xy{Yk=Z~N@ z)Z;nb;A|sYgS~u^cIhk9TIKh+^OEqK;K}nsA7lR=p|4<7tMpH%4+QODeO>5x@kQUJ zE12rdQ6FmN-HDz5--C$)h43&@&{a;NI@u|Km0h+w<909)+$fEv~I<-KJi#IT!3=dGV%PATbpYIBA@L1cE8#b;>Q~8|X0w*l3wL z+`?<70oyTcijptn4>EsF!=L6wIE(>Hc;=~z6(&tl(`zh$jSnmX8gbbYGDWpV$;}UT z3f*3zoKmj=SFuBV@8OtNhfZAe>e8mF_pB<0o*E&$h<;_X7lVrS6Lo31w(=+TVM5UX zqI(z}#k8VtDJ^5P5wkVIDx}&fM(3%I0Ly>V|6P_p$3U%+w<%3B`ULxHb!ftra&8h^ zVom~=70uAO1$2q|Ni}rW>F^lO)){hzDyy0E9h1uWfSEeOGfi{7V$M3%?kAq#zZ$K2 zU9OXDGI|LU^*Rh=T7B5@A;2RnYS2rDN!qbx<3@{`)6j6hEh99^!JQj<4?B(CA5H(IG+T(#0n9cFIFCi)9+<%Xu#gk9&mc2bF{S7#_4t(0UR(}~W4&}ricuF; zjsBP8A-ftv*kKE~NC$spQV5fZ4$&olVsr>IijGt5H%7-1B0|m({l(~vE%!yl3J&c6Tv delta 1327 zcmZXST}TvB6vsVon-~&oR+lj!A~LkFX+t)BGVx<)){ot_2!trsbv4NpHHv~Lp$A{2 z>>q;p5F1tm1ubKOsnmvoW{``}Lx!@HRs`kNQ{Y3F_Uwb#ftg|czu!6c+?knQr1?d9 zzFdR{uG~B$)YTQZ&>CvL80bEGqAPf)q9dsL8crJCy2A3pGM}lpgxam8qA9Yzxn{_E zT0FJAL{Crqe>jr2v~BX9CC}_F$zYd~S5q?35NQ^8?LJNmAVX+ZZOPnJ{Bk%AL62b? zI`!g;;igPP4UrRPe@O9#4Zn>uln=itoF90I&x&N{p?@j)UksXV8bI6>+B2>_!ULx^ z=7Pf`$cF-tn_i+*UhiPcqtgh!dvqRLN6g8={2TlJY8zVH|Ur2 zCeu9%jUXy%7Qc={g$^K5EleBNRw^`?pZ!W+%H3`&`A_(3g!Z1(utLM=snIEnh;(L{ zEh|nR;*w@_YUg!QJFS4DR;Mp0t95I6%&HV;6=CVjAy(^lPV>G-6vxHS`$&M9UeO1wHvqt&aYXV`GhdzjWR>%B$mXz=OUL)Lxv z#fe$u&mbB^X1$(spQRmJH#XX9v+C;)IJ8FIN&e1_yc_*N zp|vxu+(e_2j_^O&sL;1a1O=T!X47RFM^BT`#<|asVy++}=?c&INTCymH;JPYyh=o& z>)i9jrW^-DRWyvwkkCG|w4g}C2ur%eALo-omk^V5lxx2#bQIJqv{|Nq6gq1;n_t=K Z2NLIx(RCEGm8L%_MyzGGb)(Hk{{XgA%WD7t diff --git a/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/readdata3.o b/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/readdata3.o index c96c7a0f971512c6639755213daeefa16f9068fe..a5a990fdc1174aeb5c31d1f05808747b32a442f2 100644 GIT binary patch delta 827 zcmZ9IO=uHQ6oq@Ic3}}Df*nWPRFoRQ3|&Z)B8^e#ke{YW(~Sy^qe&+t^OIC#P!XF= zpeWREHWmdpLI{XZ2hoBM21E?F&_#>xv?90>ErRIISM##yyv4c0{m#65-u<>gKR4*^ z5h|_tp9h_Tp_7D9!2|xwx>+&Qi@I$cD;4I=f_gzW^t_sv=jN`MYRMR+Y>P!DXCG5snH zVMP~d$m!@of%Z9MM2OxXYPRVE$hyV$T(jC#MATMj0E>2z9>TRF)B%+u^bS#`3#c&- P!DU(ml_PWy(elVYeQ>W% delta 858 zcmZ8fO=wd=5bnGvG$N=4T^9utu+k#+MG#_pN#jpnUYfsWiX<1CQqttrG=B!echzl zF3MKBm%VWH9_$RH%jJ;?Go8OYa%nhT9zA-dFsjCqLxE_d=X8%hrmLBB-umqIlQq^m zM%G53YZtvmLuc+&j<&yNZ_~By5Pqk)14H987#yHJP)MbpI3AjzDpp1O5{(e! z_oVaExUxe(0PhqLgAYn_kgTz z^?C+>WSCB1A)-07LeFk+0qmgr+!_6a6q8viXjd1U7n z*NwX1-jdmXE&B+242_nM6!tt8gnff8V@5gYz_oK9=@X1NqfwY~mCs4)!|ne+-xjLz z3N531NIbNa99rq1`{0>HiefdxcvRBP%HPwPD}Y9ZQ2@@YCcc@GWx|>wE}|;pBG$8- z((XWqdCb`^7oNk2$&fM=JRuRwCYrEnrdOfemNVxgdIf!Ag*M>K-y{#F^DC5sUeJhe ur{JY|tQUOBS|8kp_rX={68-g}kFH=^SP#~PO~G06IcLY43x9x-JM;&?@V7Dm diff --git a/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/readfile_bin.o b/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/readfile_bin.o index 7f86c077118da5e2f2c8065b5f30db0057b36297..f77b0b3e49f3e41a0e47cc022d4837d277047a8c 100644 GIT binary patch delta 936 zcmZ9JKWI}?7{&8h>rgEIO>SOen>?G=2GL6@l0}*pDp8?Az(GL>&*rs0$sf}sXu%RK z4(*^O9;B1f3<}~DBBD6dY&vEUU6g=BK#I61br3(zjl;e0&V}=S+hzVT|{5g6mrT3c{WQokfK+pH!x; zWp1M35fsNqPb~aH)f`iIx8_?ldtCD`A}$2Iha+OthZ^foYzax*5%Nl7Sxq&ysa52> z!YC{HRikUDGJT|Iulf?*CVSCj`b^P)Mm-=y7zyQ$Yczl`(+M?uMx$%6n3k0LK%*B> zVd_`z6OHab!;o|s-#Oz|?2DFp4s$>lce~rF7TvvWBR(MM1a7hBQDc3B7V9SV_$0l? z6ze|ZSWltqyGM`f;R7WiA8LbwKH%M;qzP=X-au$5#(r){7)MowOmF9(cVFg1mFc3Q z*EG6_Cew&2xUA6#$S(|2(K{M7>tX*lqITUhqeNv`2RCRE=5UG5qdL4nE3kqw`i-Z- h2vyJuMtL=JB+AQLtm~+<2GC-?4s$e0FJX-y`U84&q~QPn delta 949 zcmZ9JKWLLd7{>d4#lc`{Qk(B`X_N4oL=sB?AZOjE_QVl~n#*1-}>C>dJY#6bts zItYmSwN zB2=tKZ?quT+8G|qV(ks2~5Gt<_imI7JX z))BH^ICq-)S8DpdTy|-4h`LYg3O3rAwx95${Sq%p(|}_7gtVLSOtXEQQfMA!w@G!> z+)3UqJ@*yQAs9NNCy43e{G{}JRy-e3)fs;&GyGC0@Lf;xKFvOkNLS+;uaIDjUyzdr z6#5RcEJ>%ZD)cAFW6}xq2rVG(Vf>ct`l58*L0M2px}(rV)C3)sdD>)c+Soj=In~c!x<=cMACLD|oCXF|9LN2QZkD8=WUnVd>>nLRUB^9$CX^ZE1YPu!6roJ*8f&f_>DD13gEBVC z+`bTa%Dog3Wb4quifBD_C?Yn9C@&i2RhA4Q3YyyAUf#gWFDZE-RG#6gmyt zXHps|pCt!alTtK3=$yKLu@E?5gETFPw*UmRu$*?it2!n zadzIP&?)o;ESf~p{k}pjU{V}ZZ_*q>^+L{b*C(axK5UmhV)|X7Pmpry70y%1YcbC< zvMycWs!yRK$k&TY{p{SO&_8@quTnQk3s-VgslR3Yb)}x-{T-$Lq2PmS4F)BUX%Mp5 z`A$*3!J11q+5d+^TT!jMGx8KWI9>4u4x>l6Xg`v=NxQJ5o3e#{jws4@P@|AG(*cFP zN2t+~_xS87h5C_ld&@b)O@)pi+h|e^@~&ou{a-7ZJiLaG7nyq4sW`Ax&#f;Am@{wDQ5bDQa-PSl+FJO<#pCCZZWB`HP*R~faxPuq=mCW;fI>n} za<8e-NrYV5&b?g delta 1236 zcmZ9KUq}>D6vjO>*&jj0(k@q$aR0bF>Uy1*G$A%C9V@5}g|G*0ktIZ0OC?{*N{CXi zT0V**2+SwJz-0n4Nb;p5qL2uwC-tS?YU$5Q6iw~fmpd?Xx!>?yNxqUYIGJ$VMQItc%BOG@JjQ1L!~9;Gd?|^JLRVMgcFvapXjw5 zDni;)^atyfGHesut6OOloz)IK##HsNanVG1%}rW&XKEVA*kNL$_QF5$RHTl+Vl1L) z-d%|7Cc`lCv2KyxkUisIh@gV{c>B7?)Tn-|60N GjL~0qkh0qV diff --git a/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/simpio.o b/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/simpio.o index 6bfdd635be910285ba9503c6474a4852d9c9c8ab..b3ccc4698774221282da58f707579add28808ac8 100644 GIT binary patch delta 1192 zcmZ9IUr5tY6vuaFVG~IW?AH}D#g|PtZ_{CO=H_NK1%vb<7*Xq&ZZ_Cl(@7A4`H}`n zjV}p{5ayfpV77uD0<#`Mh+q#rOd_b4{=Ae>U_N!n?iB8Y-#Pbpzn}ZP=bT%!G&f84 z%`~@anXk)k*FB-r{AxTF;_+yNpNfx6#X{rBNuJcB(a=N(pNzz&qWVZAK5n}fnuvw; zE0JhqR3GKxa5AO`WAV|cXo!!6#+-B z8gavXi3KI(Qy@3C%o_Vva1-lXG3{CmqshYQB8Dt}_C_)b3bTS$i$=GxVF|MLlKG@C zeekwuY+BavM^VE_wD{SMRLwG%+UP(|+})JUK1FQ=wfd?=N! zQ}}Xu{#iLch$gGXYNfiZsPz~U>QQ6S^N`G?3Y#%w)l7F~g{`pLG`zG{Gp}@UEBq^b zv1$VgQa!Jz8}k2wa-NXMvuVZ;M*Os$ zp|h~JY3!{;dSp|jRv$xe{3xb<2tt z_ZMeZGFr+uwF@+b9~}h`=Ga5+R){R9=`5gL5xbG-)MzPtr&D+&G34Ylh8d^E z4#>I(3-5?kdM=4or=NE4&l%ihpfH0-bnQ7TD(W&aLS2^r%ZfUToKT15fL|!81LV@g zyqL>R{m@++YnDEL6|x^G7pDN$MNDH$+)8In-Bo4uI?LQ1A~OP>H97*;J59fl?p>os z1iXH_fQF|9LN2&38qoIhj>0&$~j0gZtHW+blt4o)o9g&xfH~nmO+--Lxv{(Ata-N zB3Q{c4@(!-+bS^dDBxg zIYp05ntW@`Ho*4#oBA?iWA@c-W@OyHp1wFX95{DvSPZ2u^<5YY_6Fla{o+by#Cg~7 zlANdh3_0GTv0B=mYW=<1dtcLDR3HXr*Zlp=QRT`^#`!(-dGgGkS*G&52OAa%w7P zdrnpDDJ}m6yRz1g1AzoxMpDKsasfd}tOo@Dty~qgDi3@o7_U`5cQoolT+(_)tCgdQ zlQc#pJ*H@*MyHXNbX8^BGDNs`pgZ<@Ml4@O1b zF4DB&B<3nt-p3(UxPiNid7ulWv94?t)~y3$pF6iJHJWT+rVk_=Ix2 zT2uaUDvr0DxenRmJyK!8hn25xm&#EQ4Im$8QnM0H&@WI|ng(EZG2W;2x&QQYlJ2Ol zu&B`;6eJx~oBv9qgV>d{Rdrs`Xe*3Jg3qYV-!+=Sy$GWj=r-Z3bx}WJ+|RW=&Pl9T zN^kMeL2V!h2Mi_+|e(YjtT0ZH=!uwk0wGvdhF-Bb3||8_57n{ qcN9s8IaD=N92vJ!83XjO{06D)R{xm;Cjda delta 844 zcmZ9KzfTik7{~jZLvtm)>y?zZFAn|~2-M)4N(o7qra>q-C?zn+Ali@%U|MR*k5yTW zrw%>8qni_M;w8q>(TfX&fk~qSi9sFkAJB_^y1bX%`{ez6KhOI6s=i;)*Sdw1KicOA+>L zA%|I=;sN{9zrlemXcm!Oqc3nWHCn@RM$rlUjFJ&gajbP6;wU5J38%lc^ee~_@|4pg z*Zz&CC_2J5c%G|TdXe{I8qe_^lNx`HAU^E@r?<4UZ@VLapZfQJ=C|fHMr)4dj=KYMu3t@FIY0%@)%~gm# z!5{idPvMJ4^Z{nRMoU=8Pf-bezGAGT5Tu6iEk8>4Vaf^}!j0E1{CK^CNLI`rgT3GA IBZAzee~3PNz5oCK diff --git a/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/stable.o b/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/stable.o index 5d686a36fce40504142eac1d3ab545ba84df6cfc..43125689272e79d034185e0fdd0cfab7f06bea50 100644 GIT binary patch delta 767 zcmZ9KJ4gdT5QeiCBqrkJ?Yd%!cGerl&A<= zYNK)>X)RLOB#mg}1H>W_Bp@m(;$kMvF6<8bfB($Rz?Pz==y}y)Da``}s*cX^vXRP} z+PslT_blp5DP5a0Oe3Kslw@)xrOl=?iJYk`3wqj0IQxi|cNHYk4^yo)R3^6n6|4uF zi^mqe-BMj(pam!#wZ_>8IwmkSoHO8+X-5(LF@aWWFedjB6SA_(j?k1BOgm7Psq{*q zBG0f>G~ElPA<*2EQSA3!px?0VR@oNPZj6l{Lr~+n1*|+S&}j&HRB{XkKUd+xqmTo5 z;^!@Ry_7v*)}xU10;8N(k$wsE4YHh`pc+6|qaP<6d+Ee8(y&19aJHzR@8f+`(0hUS zDEq}~n*w!0gwso;hXUOI&8I}3@x^O_o?+IFp!?v8*X%<2BTzfkIQ>K_+v~*}voi?! oRaQhgEKn8J{ggzkJ%6l;#G%$c$p225jYzvLmIfJ0#Qpa+QP0 z!ecGp*O)WVoD}w~ldO-Fr3jLWa~c$xHlAXigh0Cq49Y!Z4svpc?VxE(FcslKrjl2J z7kP#qpy^I9^@3)jYzn9N6zCTeZ6S7!v=d`x#uhMm?J;&97HACI_7Hi33_tU5WLL>8 zJn-`p6os-IthyJf9wEr-GtwV{en5`XS5%$os?1Xj`wES;quL?RCam%a`X=TzCFo5OdY*t1L?X0903GoB#j- diff --git a/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/stack.o b/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/stack.o index 3e01d6279a7f0f6d1466b7c9aa2982b60bd02298..630a23147d77471261b0815e0c9a7fdba06950f4 100644 GIT binary patch delta 1015 zcmZ9LO=uHA6vy+Drf5}cTI+PONt$hP&`2`|!4D9$Y8wI`nu|1E!nWDgg?wm}Q0qb3 zV|%gjfmC{sUIY(9X}pLBv3d~%tq3Ir(NOdxl!6|lAWo9Eht9&z4FCV{y?L|qc6M}j zboK4gs=M<642fHXoGA)fOI$0Amvd&mR1_s6n>DA-h@zD%XN_^IkRP~hPUTEv%*t9B zBO@jzN;xB)D`d)9Q%suqDtatf>t1wYkRQOM-cJ3i%h7y#T9czg&WGf?;A{yT>tTl9 zdoKe=oin~odP3nRG07PmMvDvB#m77jSFkSm6O?~h;jf~{n}+Ln$IJL1Vzw3L0Lr>(8=vRzY%>z(btIA6#YEbn$_`$eLi+;@umgY=Jz{)+0~QuH`NfWdv_fjIP_5n#MXgnh?$Jt3?} z*Z$T+l+Sj@@J%4j_bB$R;_9gP3AlktIqu+GpWwf!&Mk$!hwq!rUpbz|lfg86#`&P& zJH%z$_V>s^+z2*ug3e^$alNrlG{+fz8lK~BbFKFa**eMo*Uojou257$gP}AG;7X_w zup!qjjD;C@(E%3Q_ivLzL%Jz)mld~$l`w-^^;vk@E&mohat^*=DssvBuM0iLj#pPB GBk&)&2d1k4 delta 990 zcmZ9KOK1~O6ozxgR!T)<;^XG#Jx#V1`#GnORF^cuEX%`9+ zl%~H(CAg@#=|&1cL^Sc5?no7i#oWknVf1qDQuahKzw79QypbL{nHuQtJ<=Obo5tC~X!WgqlB&~=b40f4 zKPTGhA<8bHFRimRo^8#=)@iL9toJY161A|vSJz=ox;oG;H_I=9MyemHzWPBHCM=nKSsA~wSGwnF!EeP8L@QSupPil^QybSKxJ zl>RgR|7E3L0{I2KhV&=tG;)3+pR%HxCt4>HK-r?3m?jkZ7;pSZ`HSgQh326L44Ov9 ziYu517_xOz%Zl;}J~TAHt+)q0!7P15DQL(Q)}3ivdq<98Az1$=>4NS;>h;`g#B2H( z&0@8Y>s^L*buwMAv^EXSP}CB|Ls{y51EGzvm3Y&a6Zb`wT9isVutsi5P!{;falYUVIHv$nG9wyQ!ypx!Bj zvb;A@7$}qpT_jtO6q%8bP?AMR(cflWBq8l}g3Y>T3C_TrGrZ6H{hag7NQ_2ebU#=e zoi9EvAy|AQzuy-a^y}TeVBe|BW;kH#T|U3h&<(}w9SG=JAZQHwO{K@|i+(;mK^dAB zHv7?QZ;!sTUpiR&gVJ`NoaC0a-`WpYZ&rFz$Q5)q*I7bGdGHWMYCP;3&*Bi=cMz|U z+3h_^*)32FHm5?b;c}`h%so?r=OpHxGG$`Lsj*S+*$_M>D6f^-Gv32rfj&m4R%NA9 zQdYPtb>8-MZ8XC%RK6*5cLYSdYQfBbVr~c z;j(C$_rv&}>L-R#i*9hWK%n)Qua_Nup1De(UwEY^L9gO7iwOEH>)K+90nC^NY)u(c%ozLs@b zM|rDCl^AbTr4t!=+qxyKNO*p}%F_0^ceN(>7R6ESQK<;y9)$|AV69j2%d<$6m}^Vu z@wS9+YftE|_DSkQtbLJ2FnwW`N~4YrJJB(WUYsRA@;ejtLY*3AVXbqLDx050X;y-km(V|4aNFiFcg*= z_J9yD12Sb+!e=rp&=M4xvg0VHV*=gcO-u-S$`3)`M#Pk98*`>gLx@{-hxnWy3eI8J zyfO{rj91ND<(@Z!XO(cnTSXqkyfS;je}&(I$rH`#ncPbqnC`RFO?>D(CoS6%IeR!- H7;L0}A9C~F delta 1393 zcmZ9KTWAwO6ox$;FQ|x(qQg`X^Pnhdwi+ZVh^|Vvv9?Kiu}Rg&wb^JPO-LGFZPgbm zXbt~^7!ipNRzbuP6;v>$6vUTmg(9M$@$#UQLKJ)vFB>yKn1!8T|L;F%&N;IKMH(p5 zow!R=kHvdUH6HCz_r$x8_nNU(pPDkFQ8VdM8_Z|SSCR9~>I!P~rH z_Xf@9QIDFjT+FpbnH35p&A!~5&F2YmcQ7~RjxO51TAA_hu~)Vk^Q?V=_4;iUVTq*I zQAOb84O)CL2KEN{xKKTk`vyvT86Tcmkvk-sg`-iW=kPb`JS99=B##p#jf@)btTDt- z3(rT%vkBTh#ud@YPl^6QVxP|Y1yx0*)jpSF!ivp^%pQqe1vTk(3m$9zhIErk*HN(6 zCnz;B{!~PLmZHYtXl8s;&_5D=3%^D0ih8)%tMz=uNsF!$(|1br0!EsdCnhr2OLV39 zZjtmeB3oM0-^1=@wUa`Y)VuaO3{^u|Fbgs>+-1wN3;Vc~fJWZqM*C~j#Ew9J} zYW?pwL|ir7Ss1N(>sNEMmHj;BFmI*ejxo<@;9Fiib9&p|g)7$*-6 z(`~HnDxa6=3XvTXT|=bhjL<@bej;InXb~n1l~|6Byd!0W4IjFlGzEK@)n>$q9W|9v zR9mu4yTVSok3^W!Lkxyh`hf>wm46ZeDJkF+$YgwrxRZW~Zox*Ac~%N~Mxu3M{^upV z>W8HNM%rZb8#hgz9-(BN`$*jLJ;_;sBf_YFtr5MpMpXVn^3*8EMCvJnVubO>qLeAg fl*!qT4$YwevN1PZ#Ov4&rQk+-+tOTJ+(&-_f_M8G diff --git a/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/symtab.o b/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/symtab.o index 4ca5131d0d71b3708d454e85cad744f889e7728f..58d3db4691b87db7270a90601b69772bd559f7ec 100644 GIT binary patch delta 1024 zcmZ{iO=uHA6vy+Tp}{Z6#mQ)U$R_5aF&zYBrB<|3y0&;QAe4Hr#wN9aY`?UWikBQj z@nra8B_7lq1fv&q@!+v|i6B%#3<@FvFCI!MBH}@DYF;h_F6?`=|KES!yf_9J8o`C>~;K5ft=$XJT{P_k@! zi#=t-GmoYv=r(>?kz+9%{H@A_!$`hbk4pP7C)XctPFp5cCWa&GtY6VEig$*N`0 zZZtP3SMD?DeFUOHzGC&7L9bvy(=4mY1|7p(R8bn$s2DlRY}N31wzlr@lc6v3gg*?u z?u9otM6(!Bod15VJxwzuj8Fw54zNShcu`pZHl2q+;(xzm-7)`hiCt6@Ni;Tm`P#-P9X$9?-By?Y>JkPf1aC`uBQZj*y1sE2wmgtD!LY(kSt>7j)j z{6Itq4=MpKK|Qoyta}nfD0rw^@Z*x!i_J--N-5QYpx~6e6&!G2=gt0q|MxM=E?SG$ zlW#p~akXNZqEZ?aXDdV3EVDdb6XV5F$*dj`17@{av__>?tQ9U)hhowqa)TEK&Yz2) ziKlZJF=CeOuRY6P`}QTk<8ry|2=w3V=G~g~y%Do>Kf&y;ghTLDGc98Kml(nK{eZah= zD?~RHTEM!bGc?aGiq1TnI4|iEsk%Z-*pc)GRX(B64*Elkdx>6G=yOa<`hZlYzti^; zj)eqFU@OG3_sR2Csql*`e^m5ky5SE+_j%AA?uVzC2@C$6V1kM`jceElGq7-0dQ#-M zsd%!u5oUat+B{b1Wz-^!XDRoSLLXsXQj^r3+q%Dj)BOO}BMhdn88P5CcI2MIXjH%| z4n`;B=XfvADH{&m0|}Zj1BUHROul4sGA;?u#@8W-&EBo^t6l?|=ogGPY0`!5|8`r$ tv|yPvnsiB_Ny>WnAHA*U)7TOWrtN1!ctOW6M~}g7)cTTe(k}Lmz#qQ&qh7>W=J5hMnK(({&klY39{{d~XYo^udB2=5NNtaVouaM;zq;=7D( zUJW*I#H;aFn&MnYec`5;MSqAs3ABv<`Ve$C=?==-GwdKJEUFM~6zC&$2?+WnE!`>T zyQnLSw^M3Rpc1YWX$8@&K#wr5Fv#JxqVWRtKM_28==U++K-1m`G=MQ50~JkQgrCtb vE#$TL9l}#z1pKI|jCT=B2%c5!S2f63GitINM)8_;!yPL1y-;bz>XYybK#Xd} delta 732 zcmZ9HJ4k|26vsWE5ovzvr_}ZKfGi3m^wWZZma@V}Ln*zN!py|L9@ZSRMO&O9qRFYH zA^H}H7NMnZE_AD)*Hi@25@mQ??uB~~=l}bk!~f=bbG>JCb(l4@bcPa{Oe~#BtZm1( z7AG_D?$PzQ8kwI8O^mxo-2O;dO(xc~*}5^%o()crbULlJz67v^_a^2XDEI%Tp;C0l za{a%z)N{<+8G7X*UmsMYVIo!M25krn`W)gC`5UDu2vZ-JwX*Ox(I1w4ABw0r20^by9ZC2D>+@xN diff --git a/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/testmemory.o b/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/testmemory.o index fe534a46a79cbb41b0b8246bc287b66b3bc0beea..b8ee6e2aac6d4353de466b58daac72c097345d72 100644 GIT binary patch delta 823 zcmZ9JPiPZC6vp?h2h)@!yV>AmHiASU+C#HOl=uf-EMgQdiWg6oO_ORMX|-AqJV+0M zUbOLp-aG_^qBk25>8+QF7o{SIxh*I}MEnO*^-xFi*24_!d(8Ly=DjyNx61S7`CVi^ z9#=i$1F@|mR~oI^W-!s1o*KPWpJ~;DYNOex1vPJS@@gv>Z%x-`n|1F(eX9Fv zs6eJ+bbrL}nQ|W)|CT*SMqK4#^<6_JARx|bQh(ha5q%3zw7iM{V(y+ zKs8yU`)DUCvd5;jW_pRQNkM50rN-qu_Po(N6PQa0H_MZL*62^dQtG%|V7!BKbdj^L zEg`>g>BAab#Zjw5k8oSXMXXsKJpkDrWl^$)+_q`Z>#cUGfI!hvrr$NX7i~qCSWR%} zXr4n@vBk;FtZvt6k1to$^w+#UsOcW^X(98h-qdIuXB3U5U(o0i%%#23d+zvLqtAH$ zsB<*`F@&mSf$1;pQ~|c*nV$$_PLXoB?09qv9Y>fi2+K;kgAdN4dhT{c$UfKj!v8Vq z@DwWEML>Cc?4eBGz-cXMd$O_Hip)AuHLg~|QwqCoj{P=`3G7{gogkC delta 872 zcmZ9LPiPZC6vp$$OE#gKO}5QANkJ5XNhR3?gh&OGsx;jqw!vOnkXS;nEf{Gmh$r#p zpG(3ALh&RXq{lQjk39&YLJ#7X2(P^1M>(Sxq$OJ|u3Dj#qMSJQu^Y)X+Pte6>E z$GTafx7abIddY@Inqdy%P=&f!4M|lw)Q4ZRngu)#NpV`>S!j~pgDk0LxHQZ24d(ia zoF!=su2rHvw7mEPA1sG*tlsjfLx{Yu|s#T_w8m(d?B6Am*-q+}0r-z!piF*;pJJ$$9WOEN(FVPe(asqib8VjRX7Xw8^!5nrDnX`ZI!3j=&6GE5kM{&MKP8XKLc2a aouMQ)Vg)buytt24ykHdhB5dIxdgL#pK7j22 diff --git a/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/testopenfile.o b/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/testopenfile.o index 33bca265e08cd973c36cdd8c019905477dd8c4d2..eda714a3c7b21a813d570e4e1168cd02f5eed008 100644 GIT binary patch delta 865 zcmZ9JPe>F|9LMK3DYQA zn&xkJ?dp7j#8aGD;IvNRyTxtbV-M4ZbsY5E%s!mYtw6Fg*^?om+=9)SyRax#!>&%sAuwa>X%)enUaf%d&Dop(#9yvn-SJnLxZJ>kh_Op7H&6+oXO}cil(ja6P}nO)Q5G`rh@;|JV}(mQ6J-bvT9pf&^F9|hm7@~ zMip8|!D3YRJ?oHY(k~_)qUWgb4Z4qF@*ypuncSdF)KYn&?4~Z#8hF~#zjvX*EX=0| eX$Q5mLtoJp)&TE!r~}1*C-Tb*2Kj=O#F;-Sgo^C| delta 903 zcmZvZO=uHA6vy+{ifxr{KDLgV7%(8%An7#tMJ*CTwMh=vii-3gWi3lBA)> z@MiFTQxNtpg|e4kq|Hsig9Q-}iVZ@wdMbF(lMc<>gM$P6hWG#d-@JV@uSV8Kngg`H zlK$15m$z#bSJuk2@!BA z_5%A$nxC*_3gax{sX0gw@!BlVM?}KHUgd&kTERH-;VIgJr#$YS4*a5dX0QOvvr6%-r#?K!ifl~;$EacJ7}r+7(G!*KQJ7XcATr;XjLgJMTI@UbW5WW zD~g_G8sb5Mj=#}X^c>TKMwbzZiP9*m8I7j7)3Bz$=lr6k-^bmUuy3;3)aWEUMf+Lx zH2NGHF_}Hd9p7oRkMqx(K8CC%?0K%*%Tork--2UFBW>V`HApwmvLs#dcdUK1Xa%>` z_3!%}<@38V{ZDY`njZK~P51en*#C8Z;ovq=(RU8zh??;1HM#>QzDSSIj<3-wyhMQ- j*iM|GWuy-0=mVVH=&AS?Z56wbO6Dj8N5yaOlE?l6DM*Pr diff --git a/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/total_pressure.o b/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/total_pressure.o index 140ce914b2a0a779dd07176d990e8e1d16b36698..ff1c36821e85db5362c68ea4f0aeb9ac3d9e4c76 100644 GIT binary patch delta 806 zcmZ9KF=$gk7{~iPQCcO~CNH^MnwSKaM5xz-P@JA=i%*x54x(ad`)tx0d9O9Lg+>>< zwct?wFI_}4sf!ripc&ubpoN&ICa%s&ii^cMiFOC<; zcl##{x`Reo^xZIe{(l?;gY04C3LmD9Q0%mxqp}~9>lLaI#)l4dqbucdnXJNkKec$iRJZ4{b+ur6VjdZfN zBltO#I$drwo3+JTjit5Po$B>weeCjbT~E!=lqau^d*kj@MK3g#g00963eF!ZQgHWp zQP4ZQ9o8a3=nk(_6Sb&Rff)Gr&Gxo|BW6EpRu=83qy~1PnnHYumS_+eN2&wnpIN+* zX{Sm<=ose7p%U%WXAhzJ4K@Xk^1r-%M-zVFRrX0^0l>KvlZ zN@hG7EJZI6%26wG!)vtaV#b?q9$lziZ`8yUukKYv)tQ~W*$|b+e6>}tIdipU@MZTI z3Xa4-7_^K(dmW=~Ae*>FXW=IpUpI#Suc<*9+Aix3xeMqe7)|0w!l4cDq)Ty#B;%1S z1LIT8KaFm(LKgbc^G4e(p_gKOM$umyy$0fpFDe>QPZ5r?3wcRzD>|mpGK8eZRLA2Q z-HEQG_Y^H_bOCQAy{u?gqbB;C(Qgc!4nL(l;Wve|?ZG*d@wS@no7UkD+9snG9-9v3 zuqOKm<;bZ-*k=y05r^($QtBrxjxhdE-5B3G_@L1F2)^{3Mo;P#$g0q52y2O+pl>mH zhT&0%4r4-U2Hxm%Dh089QG;Ft_WmN#X9)X^%-Lgi=_-7w%dpcfeTA1UPy~LuNO^2Z YJpp^XNUtEIcHm2$#-`L&*ar^&1H8_Q&Hw-a delta 858 zcmZ9JL1+^}7=`<9JQxLIg2`l>HZ~?m*Ahp_L2qHPxJfNGMWrnWF_fr_Nn_G@vq;cG z6`^V0r3yl;2OIEU%|TCU@X#I<(xVDuK`1>Ip$AV6W^$Q@eFN`%|37cp_Q>W)eURqY z&6vj$w@SslC>0zrT$;XH%+FM3MKxC_{9%E z+{&cI&HPMr)H6ZN-J=(&dCs?K(07nuxQD3c|HDxWGi3aeysn&d2lO10=VAGNLCep0 z!qu@SH2MI0ej#^80yaOQGRs=Vg<62oGdvAsc~E73YMBEQ>u!Zz%d#qeVnG z<72AOF?DteRWUBzE$oMjlRIPq}P=DT%&*B?G-c!tC#Vs ziv7?sb0|ytL46OY7TxCWuqrp)!IspQpb(=5cu3Ggq(g$YReDF8`ie!Fe1wKfKE^kx zqj2|S={=mj1-`7(uMc#7U-zyRc>4tvVM)D>a{nv3(Bxr{K`TvjAW77Q6ZuFfm?!Sj zbu^^bVMcA*Mmc(xTxdj-M%;%*UtlRVNM~TilC%a#>O2}!GuVwK-JimpTQ^W1IQ|a^ CE0;+C diff --git a/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/waveVectorCompute3D.o b/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/waveVectorCompute3D.o index 156fe648646233f91bf1f08d3f4a5952b5a80ddc..95bababbe52fa4563620f9f008084bd31d86228b 100644 GIT binary patch delta 856 zcmZ9JOK1~O6ozxsMO%eJMYvp2gRPj%G>_{vN*jwtQJMw>b)#K1Oq;0&^3>Mp#=1}_ zC}Qis@v%u)nqA{;?5bpEL68a}1*rx>*A)eIqqpRa$XvMpf%E<6ocnlW*X$*Y4mR|9 zV6Sc7ur68Cvx&14s159Q5`B||w}C$WdcHVUFsJk7QmkTKD_Z7MzL3wEIWaRcTQsx9 za&E3*i7QsgSvoLI9X_AWc^}Ml(tY%YME3)~OvuI2OfXbJr|1G2A;!O|e5Q?kdt~g9 zJBLxi3}i5l{XynzHsCwzRbWH(@{@qd&;&!vCG{M33{Es_wO??haZy RI*%Qx&tZ(FNJDir{1>SiqsIUM delta 869 zcmZXRO=uHQ6oq@I3vEF`LC4qH#wbl@nx8S&{!FUGXf?45o6>IL!X%U+UD(<*FvNwe zi_%>&9x5s>iuhL$A6ur27KxR3$C)|JJ*8r)dj_;g-2&w)Ajaldmf=gllxcdVNl z9jNHbtr%)M*pbW^3b`xe`H5m~Ix|uj3k*z-8L9MWa_B(-J*tn&uOY`=?jy(PW6?b< z(IU#6c8kqXiLPUf(^b)(ljuX#IL(UgZHYF+8!%`F!vU401^Xa*9^nS3tKvStB>EN= zzM+UMuCK5sXwWmngDQPOI%rWAPVfmomqHoxVl!lr4^3f%0x-FbVw~#&?sC0{^{_>6 z?6_eyvT1SEeLLMBSpQ6uaE_^LP(<+jN2yC?En>DH(H1+>HLuVqyV|`%%Fhm5>wV4h znSC?#6xF^J+Ca%n&{wRPz4RR0W=z>=$CPJ3Qc>+MjK=6Ys$8#Po9hzH{#etY<8Hzl HsK@gMeb$~r diff --git a/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/writefile.o b/fftma_module/gen/build/temp.linux-x86_64-3.6/lib_src/writefile.o index 9ff738d57cda2a5d27c2d38e6d72adbca57f21aa..b542b468e870b401a9cad19d6ed44a1f83aaafc4 100644 GIT binary patch delta 911 zcmZ9KKWGzS7{>3tDg|Q-P44{eYKgfz*g}&ti&7}2)oLsVT6M5Gq^C(^BuR}La8d#a z;*|I-ic`9EjOXAM?BE}8XazxVD6t?o)kp@N^pm`C_&&Jr<(}X3zW3bS_ik=ut~O5R zniIKz|1ofdPz#Js+|Cy(1@BsZr4+lFy;aP5SM!B@#>=?N%Xf-iy10_56tZqETkFS>dH_W(wp8Gy1eT!(C!d_zfO`$ooO)+0$s`0nz zXW3?VP|+*w->>L9nB6DrF;-&=)lrsohwsa)>pBc2Spfn(0f0PUE$tgB-D?&_Ta5vO{#qZ;vKP zo&hJ)A`MP7jBcbr7Q6#3IxX*0w2plAC|yP)nxqG4%l#1?CrL~2?3udE|1IcM%xd?Wre zNXcqwvK6~+U46-Xv6#JC$WPzO&QA;%bN%s|oSq)Ll1vQ^TpWm{2ldJPwDF{MoQz2O zFc}X!X06&9S^j^WjbLdpW1G2F(CLt(ZozTKHEo_v7ZlSQR2)(}X>G`9g^pm`q0>i@ zGZC?~XG!t=6%FBqqR-%tb3*fR)>nnD;FnWs;I8%*I*NcRq1m|dQFb*4dyKM6YC*1i zR-wzNx)P#W;E(GPZ6fB@g%l{d!!(47TWTYm_f5$g$F@mxOn)nM3gnSmA9vKwvDwia zA|~Bs^_W6$AZyY%S3IrI7A%?c71NAD@8N?-M(#6RR_F;nR}}p_Y*HUgan@&r_Vf9N zqTl7&Yl>b$SxQ>ObE%7%z$Y1|+c=OqJwV8-(`$^Gdl`#fU7R7j^@i!PvExmVcAXn| zbg1!vo6j|cj8AGwzV4+$_faZQtj*?nD_s}8=&*D85;wp1?V+?-P=ysfx1mATw}IqwwnRqwRxC3z3J z;{lpNHYEDbP2>8qTZ<7?YnQsyoJ;t90$)O-6hkv47Yjc^6Vp8e#y^Iwfs5A7Ba=@CygdCr05x+u%XdixVA$9tSIM*om0&z!dLVO zQ-fz}&wdvdwqyPwBw{H_ARBY2jt{Cf@J-b!nyPNV5{`LE7!%7hjYIK~l5pcfCb?Ik qasJk$gslNcw9HDJMmNZdv!RWDInO+sl+)Pt!9S<)yCR3)vn9=)h| z(8`ZOMTF*3=%rZp4=A~of(X6nMS|c_5E1m&!8`?LVP|;1@0)$|*tO(Za&OF!?ZCs1 zbg^7^-@Pr)eQ@7TkCzKw&*uwHHb0RbeHDKeAIxT)+2Wj+^QXx>4&;d}?@3dukG>!m zRPBetx_Kh?&GPF#px-O5ZB%0l-+}`)iCR$E>+EL?KL#lky+EgQ=sWTyku(eBzHZzZZh)M?6(^EJ}UZaSx(~y z?dRToMt;Hdu#sn?ujwS<~pzd|ZU^a%{94Vu7#+SI^}D!atJW*YAQ#Z_!+ jy2`!E20cSHs_4u+jP5tkPyA?mN)J$LOHz;59-F2A;=gl_ diff --git a/fftma_module/gen/build/temp.linux-x86_64-3.6/moduleFFTMA.o b/fftma_module/gen/build/temp.linux-x86_64-3.6/moduleFFTMA.o index 92bbe8cda41c3b3caffbde9fa39a3eec4a55ff8f..0456f97eb3f78c200766721a51b88a92c2995582 100644 GIT binary patch literal 52248 zcmbuo3w%`7wLgANCXnGBh`dn-1O+AGDc}sM#h=z(as(kyQN5aP ze)I|6TWYozPn<;Mi_f318^H9PyNRdflDY|})Le4Kgl$~NPl(oCQZ-?I&BgEX?F)7e zI{zqe6Wg?!OByG{YA(r7DBbg;30uJb|Nb@tvLWUF?yY9)6BDjM^L3Y;KcNKzq$ADe zPnd*4_4J*O^~cR8Bh(>uwv*Jy%?b35@+K|Ew7i+#xAp=zZ1tR&;fe{nsCeE-(VDHB zN>BCH`M7_oSGTopLd~9SyNl@FbFrEWcIJ!EtC?S1v-JkHX-mz_F>K_n0T4xIKk3=& zJ3rjT3Jw~(88W?94KO9V+5&B@58k`^*-H5Wf$bMcFE>%0!nuetcyuD&%}tD`j+ z|7B18w3-WkGwA&GkkUskjOLGbJx~!_=W6}K{XrM}oLbwu5cS`s`dbgA=H>p@qqR|G ze=a(G=Se3&J7}yo{WIqSHRl};9oRr!gTr#fW~6;TsI#Z^*ghV#6;pO)_H4VRx96Sr zIaFuHK^NYFX7_B{29)Z&g3@`P`(49f%Bb4p$$wzfPCEGmQqWmLhi2AEd@jtD zLJ=3{OQDzxHB#usg?cIU=E52&ME%R5;VDw+>tBn)Iw|z`N#RZ@lyV_2g&{sIcblXz z%wLMaW+@E!zk$NJQW)Xi3~A>{VT^x23R|Qw(Z3#S+oVwL-+{t4QmEjaSS!79y3tm3pot zatC$16yw_jtRzY@`qS`I4+fBP5PA{{j6UzsGH)Q=8pQYK`GgBSKSWnDT@u|1uHrv~ zrIcOh0VxM~#Z`FY3VlZt zBIH5DCFIxw+OPZ}hxV%=G9r^fXI4q{X4D_b8a@VU$hCzR)^!+ac>M?Z&*P1|+kbq~ z&%sg>C0T+@V1yeUFrm=efEfjK2FwY_qlrXEJa6ErT!9>Yfg=YkBQ=;|P$St)$djib zd_;;lhD4(L#*LSL!0y4LA00gF0^H%zA3U4dQJR}ChR&zpb}8}nCpEW&-~so=YC~?` z288=DWP3s5A-B+k7xa#R;l6<3eqvy4hKvZbDJ?s-3}J`0DQhS7mF~C=kt^yA2jFe< z%TDyE%9Ens#?d;Vka9M1rz!`gK4bl{@GA ztI^I*DQxj?fV7vSu$8Uzx)d(;U&NiarSKj9zfjmEh41?JqtV?`xZK}?!Y5L=!tYb+ zd7qDPq^0Zpf8yRGEnV+dptWgQ zy1|d2G*?SE`qyL7=4L|G^Kqqy*C-zV1;I!n%2s=T>}aib(kx25vk ze`DZtybdPYm0;9{5TWR2}hnbFbOf>WXQ<(Dy3Fd4gPMVY( z9H%yS?>G7WMRcF^zRKLc?-ss)C*3D4A9weM@T8SKJ@5iEy-G~f$ooB*!s`6+6XyKP zaSnpXtm3$b=~wpS?YK9psjJm1dxWFyDCE*!*`w@mquP<8mp#Uo7OU?dTGEHICrF8y z;QvYV1fid#z&1(fr%3!Xp?4BJSLmmSo-gz>)NTz%gJerrpCyfjeEtcLCDCW_%Dw&# z2;b?eefrl2DLjLj53}%|^m?#8@q+t0h z`}hQAI@vL8C@`^1<{T6A%RX7w-+Apn$Pqp0hB^Kj(UK69{gY@((aJt2T5bFX>ugPC)r0yQV>!BYlBR&aTBL$xer%0iQ3+tp1;X
aBG#HKKKDb~zn(w(_ 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 diff --git a/fftma_module/gen/lib_src/Py_kgeneration.c b/fftma_module/gen/lib_src/Py_kgeneration.c index dc7dbfd..7ed8be7 100755 --- a/fftma_module/gen/lib_src/Py_kgeneration.c +++ b/fftma_module/gen/lib_src/Py_kgeneration.c @@ -22,6 +22,8 @@ void Py_kgeneration(long seed,struct grid_mod grid,struct statistic_mod stat,st int i,N; int typelog; + printf("\nESTOY ACAAAAA\n"); + /*generate Gaussian white noise*/ N = grid.NX*grid.NY*grid.NZ; diff --git a/fftma_module/gen/lib_src/fftma2.c b/fftma_module/gen/lib_src/fftma2.c index 5977690..990a2a2 100755 --- a/fftma_module/gen/lib_src/fftma2.c +++ b/fftma_module/gen/lib_src/fftma2.c @@ -28,6 +28,8 @@ void FFTMA2(struct vario_mod variogram,struct grid_mod grid,int n[3],struct real int solver; double temp; double *ireal,*covar,*workr,*worki,*realization; + + printf("no puede haber tanto\n"); /*covariance axis normalization*/ axes(variogram.ap,variogram.scf,variogram.Nvario); diff --git a/fftma_module/gen/lib_src/generate.c b/fftma_module/gen/lib_src/generate.c index 46869d3..1d761f6 100755 --- a/fftma_module/gen/lib_src/generate.c +++ b/fftma_module/gen/lib_src/generate.c @@ -17,6 +17,8 @@ void generate(long *seed, int n, struct realization_mod *realization) long *iv; int iset =0; + printf("ESROY EN ESTE GENERATE\n"); + iv = (long *) malloc(NTAB * sizeof(long)); /*negative seed*/ diff --git a/fftma_module/gen/lib_src/prebuild_gwn.c b/fftma_module/gen/lib_src/prebuild_gwn.c index 447e9e7..3f01994 100755 --- a/fftma_module/gen/lib_src/prebuild_gwn.c +++ b/fftma_module/gen/lib_src/prebuild_gwn.c @@ -25,6 +25,8 @@ void prebuild_gwn(struct grid_mod grid,int n[3],struct realization_mod *realin,d int i,j,k,maille0,maille1; int ntot; + printf("por favor\n"); + ntot=n[0]*n[1]*n[2]; realization[0]=0.; if (solver==1) @@ -40,9 +42,13 @@ void prebuild_gwn(struct grid_mod grid,int n[3],struct realization_mod *realin,d for (j = 1; j <= n[1]; j++) { for (i = 1; i <= n[0]; i++) { maille1 = i+(j-1+(k-1)*n[1])*n[0]; + printf("n[1] es %d y grid.NY %d\n", n[1], grid.NY); + printf("n[0] es %d y grid.NX %d\n", n[0], grid.NX); if (i <= grid.NX && j <= grid.NY && k <= grid.NZ) { maille0 = i-1+(j-1+(k-1)*grid.NY)*grid.NX; + printf("maille0: %d\n", maille0); realization[maille1] = (*realin).vector[maille0]; + printf("en realization maille1 %d pos guarde %f\n", maille1, realization[maille1]); } else { realization[maille1] = 0.; } diff --git a/fftma_module/gen/moduleFFTMA.c b/fftma_module/gen/moduleFFTMA.c index b68dfd2..226d980 100755 --- a/fftma_module/gen/moduleFFTMA.c +++ b/fftma_module/gen/moduleFFTMA.c @@ -32,6 +32,8 @@ static PyObject* genFunc(PyObject* self, PyObject* args) PyObject* out_array; npy_intp out_dims[NPY_MAXDIMS]; + printf("estoy en genfunc"); + if(!Py_getvalues(args, &seed, &grid, &variogram, &stat)) return NULL; Py_kgeneration(seed,grid,stat,variogram,&Z,&Y,&Y1,n); diff --git a/fftma_module/gen/sources/._.DS_Store b/fftma_module/gen/sources/._.DS_Store deleted file mode 100755 index c9474ea62235481b7d27ae5a878d2b4070bc6e05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 82 jcmZQz6=P>$V!#9-F-{;h0%8Rq2JwS{7!DlZEK~*nFE;@e diff --git a/fftma_module/gen/sources/FFTMAmemoire.c b/fftma_module/gen/sources/FFTMAmemoire.c deleted file mode 100755 index 15d7f04..0000000 --- a/fftma_module/gen/sources/FFTMAmemoire.c +++ /dev/null @@ -1,110 +0,0 @@ -#include -#include -#include -#include "geostat.h" - - -/*FAST FOURIER TRANSFORM MOVING AVERAGE METHOD */ -/*Turns a Gaussian white noise vector into a */ -/*spatially correlated vector */ -/*input: */ -/*variogram: structure defining the variogram */ -/* model */ -/*grid: structure defining the grid */ -/*n: vector with the number of cells along the */ -/* X, Y and Z axes for the underlying grid */ -/* i = [0 1 2] */ -/* --> 0 0 0 : n will be computed and */ -/* updated as output */ -/* --> nx ny nz: these dimensions are used */ -/*realin: structure defining a realization - */ -/* must be a Gaussian white noise */ -/*output: */ -/*realout: structure defining a realization - */ - -void FFTMA2(struct vario_mod variogram,struct grid_mod grid,int n[3],struct realization_mod *realin,struct realization_mod *realout) -{ - int NTOT,i,j,k,NMAX,NDIM,ntot,nmax,NXYZ,nxyz,maille0,maille1; - int solver; - double temp; - double *ireal,*covar,*workr,*worki,*realization; - string variable; - - /*covariance axis normalization*/ - axes(variogram.ap,variogram.scf,variogram.Nvario); - - /*pseudo-grid definition*/ - cgrid(variogram,grid,n); - - /*constant definition*/ - NTOT = n[0]*n[1]*n[2]; - ntot = NTOT+1; - NMAX = n[0]; - NDIM = 3; - for (i=1;i<3;i++) { - if (n[i] > NMAX) - NMAX = n[i]; - if (n[i] == 1) - NDIM--; - } - nmax = NMAX+1; - NXYZ = grid.NX*grid.NY*grid.NZ; - nxyz = NXYZ+1; - - /*array initialization*/ - covar = (double *) malloc(ntot * sizeof(double)); -/* testmemory(covar); */ - allouememoire(covar,'covar'); - - - - - ireal = (double *) malloc(ntot * sizeof(double)); - testmemory(ireal); - - realization = (double *) malloc(ntot * sizeof(double)); - testmemory(realization); - - workr = (double *) malloc(nmax * sizeof(double)); - testmemory(workr); - - worki = (double *) malloc(nmax * sizeof(double)); - testmemory(worki); - - /*covariance function creation*/ - covariance(covar,variogram,grid,n); - - /*power spectrum*/ - fourt(covar,ireal,n,NDIM,1,0,workr,worki); - - /*organization of the input Gaussian white noise*/ - solver=0; - prebuild_gwn(grid,n,realin,realization,solver); - - /*forward fourier transform of the GWN*/ - fourt(realization,ireal,n,NDIM,1,0,workr,worki); - - /* build realization in spectral domain */ - build_real(n,NTOT,covar,realization,ireal); - - free(covar); - - /*backward fourier transform*/ - fourt(realization,ireal,n,NDIM,0,1,workr,worki); - - - free(ireal); - free(workr); - free(worki); - - /*output realization*/ - clean_real(realin,n,grid,realization,realout); - - free(realization); - - return; -} - - - - diff --git a/fftma_module/gen/sources/FFTPSim.c b/fftma_module/gen/sources/FFTPSim.c deleted file mode 100755 index 0f65c29..0000000 --- a/fftma_module/gen/sources/FFTPSim.c +++ /dev/null @@ -1,162 +0,0 @@ -#include -#include -#include "geostat.h" -#include "toolsludo.h" - - -/*FAST FOURIER TRANSFORM Pressure Simulation */ -/*Turns a Gaussian white noise vector into a */ -/*spatially correlated vector */ -/*input: */ -/*variogram: structure defining the variogram */ -/* model */ -/*grid: structure defining the grid */ -/*n: vector with the number of cells along the */ -/* X, Y and Z axes for the underlying grid */ -/* i = [0 1 2] */ -/* --> 0 0 0 : n will be computed and */ -/* updated as output */ -/* --> nx ny nz: these dimensions are used */ -/*realin: structure defining a realization - */ -/* must be a Gaussian white noise */ -/*gradient: macroscopic gradient pression vector */ -/*output: */ -/*realout: structure defining a realization - */ -/*realout2: structure defining a pressure field */ -/*realout3: structure defining a xvelocity field */ -/*realout4: structure defining a yvelocity field */ -/*realout5: structure defining a zvelocity field */ - - -void FFTPSim(struct vario_mod variogram,struct statistic_mod stat,struct grid_mod grid,int n[3],struct realization_mod *realin,struct pressure_mod gradient,struct realization_mod *realout,struct realization_mod *realout2,struct realization_mod *realout3,struct realization_mod *realout4,struct realization_mod *realout5) - -{ - int NTOT,i,j,k,NMAX,NDIM,ntot,nmax,NXYZ,nxyz,maille0,maille1; - double *workr,*worki,temp,temp2,coeff; - double *covar,*realization,*pressure; - double *icovar,*ireal,*ipressure; - double *xvelocity,*ixvelocity,*yvelocity,*iyvelocity,*zvelocity,*izvelocity; - double ki,kj,kk; - - /*covariance axis normalization*/ - axes(variogram.ap,variogram.scf,variogram.Nvario); - - /*pseudo-grid definition*/ - cgrid(variogram,grid,n); - - /*constant definition*/ - NTOT = n[0]*n[1]*n[2]; - ntot = NTOT+1; - NMAX = n[0]; - NDIM = 3; - for (i=1;i<3;i++) { - if (n[i] > NMAX) - NMAX = n[i]; - if (n[i] == 1) - NDIM--; - } - nmax = NMAX+1; - NXYZ = grid.NX*grid.NY*grid.NZ; - nxyz = NXYZ+1; - - /*array initialization*/ - covar = (double *) malloc(ntot * sizeof(double)); - testmemory(covar); - - icovar = (double *) malloc(ntot * sizeof(double)); - testmemory(icovar); - - realization = (double *) malloc(ntot * sizeof(double)); - testmemory(realization); - - ireal = (double *) malloc(ntot * sizeof(double)); - testmemory(ireal); - - pressure = (double *) malloc(ntot * sizeof(double)); - testmemory(pressure); - - ipressure = (double *) malloc(ntot * sizeof(double)); - testmemory(ipressure); - - xvelocity = (double *) malloc(ntot * sizeof(double)); - testmemory(xvelocity); - - ixvelocity = (double *) malloc(ntot * sizeof(double)); - testmemory(ixvelocity); - - yvelocity = (double *) malloc(ntot * sizeof(double)); - testmemory(yvelocity); - - iyvelocity = (double *) malloc(ntot * sizeof(double)); - testmemory(iyvelocity); - - zvelocity = (double *) malloc(ntot * sizeof(double)); - testmemory(zvelocity); - - izvelocity = (double *) malloc(ntot * sizeof(double)); - testmemory(izvelocity); - - workr = (double *) malloc(nmax * sizeof(double)); - testmemory(workr); - - worki = (double *) malloc(nmax * sizeof(double)); - testmemory(worki); - - /*covariance function creation*/ - covariance(covar,variogram,grid,n); - - /*power spectrum*/ - fourt(covar,icovar,n,NDIM,1,0,workr,worki); - - /*organization of the input Gaussian white noise*/ - - prebuild_gwn(grid,n,realin,realization); - - /*forward fourier transform of the GWN*/ - fourt(realization,ireal,n,NDIM,1,0,workr,worki); - - /* build realization in spectral domain */ - build_real(n,NTOT,covar,realization,ireal); - - free(covar); - - /* pressure calculation in the spectral domain*/ - - build_pressure(n,grid,gradient,realization,ireal,pressure,ipressure); - build_velocity(n,grid,stat,gradient,realization,ireal,xvelocity,ixvelocity,1); - build_velocity(n,grid,stat,gradient,realization,ireal,yvelocity,iyvelocity,2); - build_velocity(n,grid,stat,gradient,realization,ireal,zvelocity,izvelocity,3); - - /*backward fourier transform*/ - fourt(realization,ireal,n,NDIM,0,1,workr,worki); - fourt(pressure,ipressure,n,NDIM,0,1,workr,worki); - fourt(xvelocity,ixvelocity,n,NDIM,0,1,workr,worki); - fourt(yvelocity,iyvelocity,n,NDIM,0,1,workr,worki); - fourt(zvelocity,izvelocity,n,NDIM,0,1,workr,worki); - - free(ireal); - free(ipressure); - free(ixvelocity); - free(iyvelocity); - free(izvelocity); - free(workr); - free(worki); - - /*output realization*/ - /*is the output realization already allocated?*/ - /*if not, memory allocation*/ - - clean_real(realin,n,grid,realization,realout); - clean_real(realin,n,grid,pressure,realout2); - clean_real(realin,n,grid,xvelocity,realout3); - clean_real(realin,n,grid,yvelocity,realout4); - clean_real(realin,n,grid,zvelocity,realout5); - - free(realization); - free(pressure); - free(xvelocity); - free(yvelocity); - free(zvelocity); - - return; -} diff --git a/fftma_module/gen/sources/FFTPressure.c b/fftma_module/gen/sources/FFTPressure.c deleted file mode 100755 index 15ab392..0000000 --- a/fftma_module/gen/sources/FFTPressure.c +++ /dev/null @@ -1,157 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include "geostat.h" -#include "pressure.h" - - -/*FAST FOURIER TRANSFORM Pressure Simulation */ -/*Turns a Gaussian white noise vector into a */ -/*spatially correlated vector */ -/*input: */ -/*variogram: structure defining the variogram */ -/* model */ -/*grid: structure defining the grid */ -/*n: vector with the number of cells along the */ -/* X, Y and Z axes for the underlying grid */ -/* i = [0 1 2] */ -/* --> 0 0 0 : n will be computed and */ -/* updated as output */ -/* --> nx ny nz: these dimensions are used */ -/*realin: structure defining a realization - */ -/* must be a Gaussian white noise */ -/*gradient: macroscopic gradient pression vector */ -/*output: */ -/*realout: structure defining a realization - */ -/*realout2: structure defining a pressure field */ -/*realout3: structure defining a xvelocity field */ -/*realout4: structure defining a yvelocity field */ -/*realout5: structure defining a zvelocity field */ - - -void FFTPressure(int n[3],struct grid_mod grid,struct realization_mod *realin,struct statistic_mod stat,struct pressure_mod gradient,struct realization_mod *realout,struct realization_mod *realout2,struct realization_mod *realout3,struct realization_mod *realout4,int solver) - -{ - int NTOT,i,j,k,NMAX,NDIM,ntot,nmax,NXYZ,nxyz,maille0,maille1; - double *workr,*worki,temp,temp2,coeff; - double *realization,*pressure; - double *ireal,*ipressure; - double *xvelocity,*ixvelocity,*yvelocity,*iyvelocity,*zvelocity,*izvelocity; - double ki,kj,kk; - FILE *fp; -/* string nomfichier; */ - - /*constant definition*/ - NTOT = n[0]*n[1]*n[2]; - ntot = NTOT+1; - NMAX = n[0]; - NDIM = 3; - for (i=1;i<3;i++) { - if (n[i] > NMAX) - NMAX = n[i]; - if (n[i] == 1) - NDIM--; - } - nmax = NMAX+1; - NXYZ = grid.NX*grid.NY*grid.NZ; - nxyz = NXYZ+1; - - realization = (double *) malloc(ntot * sizeof(double)); - testmemory(realization); - - ireal = (double *) malloc(ntot * sizeof(double)); - testmemory(ireal); - - pressure = (double *) malloc(ntot * sizeof(double)); - testmemory(pressure); - - ipressure = (double *) malloc(ntot * sizeof(double)); - testmemory(ipressure); - - xvelocity = (double *) malloc(ntot * sizeof(double)); - testmemory(xvelocity); - - ixvelocity = (double *) malloc(ntot * sizeof(double)); - testmemory(ixvelocity); - - yvelocity = (double *) malloc(ntot * sizeof(double)); - testmemory(yvelocity); - - iyvelocity = (double *) malloc(ntot * sizeof(double)); - testmemory(iyvelocity); - - zvelocity = (double *) malloc(ntot * sizeof(double)); - testmemory(zvelocity); - - izvelocity = (double *) malloc(ntot * sizeof(double)); - testmemory(izvelocity); - - workr = (double *) malloc(nmax * sizeof(double)); - testmemory(workr); - - worki = (double *) malloc(nmax * sizeof(double)); - testmemory(worki); - - /*organization of the realization*/ - prebuild_gwn(grid,n,realin,realization,solver); - - /*forward fourier transform of the GWN*/ - fourt(realization,ireal,n,NDIM,1,0,workr,worki); - - /* pressure calculation in the spectral domain*/ - - build_pressure(n,grid,gradient,realization,ireal,pressure,ipressure); - - build_velocity(n,grid,stat,gradient,realization,ireal,xvelocity,ixvelocity,1); - build_velocity(n,grid,stat,gradient,realization,ireal,yvelocity,iyvelocity,2); - build_velocity(n,grid,stat,gradient,realization,ireal,zvelocity,izvelocity,3); - - /*backward fourier transform*/ - fourt(realization,ireal,n,NDIM,0,1,workr,worki); - fourt(pressure,ipressure,n,NDIM,0,1,workr,worki); - fourt(xvelocity,ixvelocity,n,NDIM,0,1,workr,worki); - fourt(yvelocity,iyvelocity,n,NDIM,0,1,workr,worki); - fourt(zvelocity,izvelocity,n,NDIM,0,1,workr,worki); - - free(ireal); - free(ipressure); - free(ixvelocity); - free(iyvelocity); - free(izvelocity); - free(workr); - free(worki); - - for (i=1;i<=NTOT;i++) - realization[i]=realization[i]/(double) NTOT; - - fp = fopen("realization.test", "w"); - for (i=1;i<=NTOT;i++) - fprintf(fp,"%f\n",realization[i]); - fclose(fp); - -/* nomfichier="pression.test"; */ - fp = fopen("pression.test", "w"); - for (i=1;i<=NTOT;i++) - fprintf(fp,"%f\n",pressure[i]); - fclose(fp); - - /*output realization*/ - /*is the output realization already allocated?*/ - /*if not, memory allocation*/ - - clean_real2(realin,n,grid,solver,pressure,realout); - clean_real2(realin,n,grid,solver,xvelocity,realout2); - clean_real2(realin,n,grid,solver,yvelocity,realout3); - clean_real2(realin,n,grid,solver,zvelocity,realout4); - - /* free(realization); */ - /* free(pressure); */ - /* free(xvelocity); */ - /* free(yvelocity); */ - /* free(zvelocity); */ - - return; -} diff --git a/fftma_module/gen/sources/FFTtest.c b/fftma_module/gen/sources/FFTtest.c deleted file mode 100755 index 9f88ee0..0000000 --- a/fftma_module/gen/sources/FFTtest.c +++ /dev/null @@ -1,68 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include "geostat.h" - - -/*FAST FOURIER TRANSFORM Test */ - -void FFTtest(int n[3],struct grid_mod grid,struct realization_mod *realin,struct realization_mod *realout,int solver) - -{ - int NTOT,i,j,k,NMAX,NDIM,ntot,nmax,NXYZ,nxyz,maille0,maille1; - double *workr,*worki,temp,temp2,coeff; - double *realization; - double *ireal; - double ki,kj,kk; - FILE *fp; - - /*constant definition*/ - NTOT = n[0]*n[1]*n[2]; - ntot = NTOT+1; - NMAX = n[0]; - NDIM = 3; - for (i=1;i<3;i++) { - if (n[i] > NMAX) - NMAX = n[i]; - if (n[i] == 1) - NDIM--; - } - nmax = NMAX+1; - NXYZ = grid.NX*grid.NY*grid.NZ; - nxyz = NXYZ+1; - - realization = (double *) malloc(ntot * sizeof(double)); - testmemory(realization); - - ireal = (double *) malloc(ntot * sizeof(double)); - testmemory(ireal); - - workr = (double *) malloc(nmax * sizeof(double)); - testmemory(workr); - - worki = (double *) malloc(nmax * sizeof(double)); - testmemory(worki); - - /*organization of the realization*/ - prebuild_gwn(grid,n,realin,realization,solver); - - fp = fopen("perm.test", "w"); - for (i=1;i<=NTOT;i++) - fprintf(fp,"%f\n",realization[i]); - fclose(fp); - - /*forward fourier transform of the GWN*/ - fourt(realization,ireal,n,NDIM,1,0,workr,worki); - - /*backward fourier transform*/ - fourt(realization,ireal,n,NDIM,0,1,workr,worki); - - fp = fopen("perm2.test", "w"); - for (i=1;i<=NTOT;i++) - fprintf(fp,"%f\n",realization[i]); - fclose(fp); - return; -} diff --git a/fftma_module/gen/sources/addstat.c b/fftma_module/gen/sources/addstat.c deleted file mode 100755 index ffcb781..0000000 --- a/fftma_module/gen/sources/addstat.c +++ /dev/null @@ -1,106 +0,0 @@ -#include -#include -#include "geostat.h" -#include "genlib.h" - - -/*addstat */ -/*adds mean and variance effects to the N(0,1) realization*/ -/*input: */ -/*realin: structure defining a realization - */ -/* must have zeio mean and unit variance */ -/*stat: structure defining the mean and variance */ -/*output: */ -/*realout: structure defining a realization - */ -void addstat(struct realization_mod *realin,struct statistic_mod stat ,struct realization_mod *realout) - -{ - - int i,nblockm,nblockv; - double r,moy,var; - - /*Is the output realization allocated ?*/ - /*is its length equal to realin.n?*/ - if ((*realout).vector == NULL || (*realout).n != (*realin).n) { - (*realout).vector = (double *) malloc((*realin).n * sizeof(double)); - if ((*realout).vector == NULL) - Error("No memory available"); - } - (*realout).n = (*realin).n; - - - /*test over the input realization*/ - switch ((*realin).code) { - case 0: - case 1: - (*realout).code = 2; - break; - case 6: - (*realout).code = 7; - break; - default: - (*realout).code = (*realin).code; - break; - } - - for (i = 0; i < (*realin).n; i++) { - - - /*mean*/ - switch (stat.nblock_mean) { - case 1: - /*stationary case*/ - nblockm = 1; - break; - default: - /*number of the cell - nonstationary case*/ - nblockm = i+1; - break; - } - - - /*variance*/ - switch (stat.nblock_var) { - case 1: - /*stationary case*/ - nblockv = 1; - break; - default: - /*number of the cell - nonstationary case*/ - nblockv = i+1; - break; - } - - - switch (stat.type) { - case 0: - /*normal case*/ - moy = stat.mean[nblockm-1]; - var = stat.variance[nblockv-1]; - break; - case 1: - /*lognormal (natural) case*/ - r = (double)sqrt(stat.variance[nblockv-1])/stat.mean[nblockm-1]; - r *= r; - moy = (double)log(stat.mean[nblockm-1]/sqrt(1.0+r)); - var = (double)log(1.0+r); - break; - case 2: - /*lognormal (log10) case*/ - r = (double)sqrt(stat.variance[nblockv-1])/stat.mean[nblockm-1]; - r *= r; - moy = (double)log10(stat.mean[nblockm-1]/sqrt(1.0+r)); - var = (double)log10(1.0+r); - break; - default: - Error("Type not defined in addstat"); - break; - } - - - - (*realout).vector[i] = (double)sqrt(var)*(*realin).vector[i]+moy; - } - - return; -} diff --git a/fftma_module/gen/sources/addstat2.c b/fftma_module/gen/sources/addstat2.c deleted file mode 100755 index 3096d0f..0000000 --- a/fftma_module/gen/sources/addstat2.c +++ /dev/null @@ -1,119 +0,0 @@ -#include -#include -#include "genlib.h" -#include "geostat.h" - -/*addstat */ -/*adds mean and variance effects to the N(0,1) realization*/ -/*input: */ -/*realin: structure defining a realization - */ -/* must have zeio mean and unit variance */ -/*stat: structure defining the mean and variance */ -/*output: */ -/*realout: structure defining a realization - */ - -void addstat2(struct realization_mod *realin,struct statistic_mod stat ,struct realization_mod *realout,struct realization_mod *realout2) - -{ - - int i,nblockm,nblockv; - double r,moy,var; - - /*Is the output realization allocated ?*/ - /*is its length equal to realin.n?*/ - if ((*realout).vector == NULL || (*realout).n != (*realin).n) { - (*realout).vector = (double *) malloc((*realin).n * sizeof(double)); - if ((*realout).vector == NULL) - Error("No memory available"); - } - (*realout).n = (*realin).n; - - if ((*realout2).vector == NULL || (*realout2).n != (*realin).n) { - (*realout2).vector = (double *) malloc((*realin).n * sizeof(double)); - if ((*realout2).vector == NULL) - Error("No memory available"); - } - (*realout2).n = (*realin).n; - - - /*test over the input realization*/ - switch ((*realin).code) { - case 0: - case 1: - (*realout).code = 2; - (*realout2).code = 2; - break; - case 6: - (*realout).code = 7; - (*realout2).code = 7; - break; - default: - (*realout).code = (*realin).code; - (*realout2).code = (*realin).code; - break; - } - - for (i = 0; i < (*realin).n; i++) { - - - /*mean*/ - switch (stat.nblock_mean) { - case 1: - /*stationary case*/ - nblockm = 1; - break; - default: - /*number of the cell - nonstationary case*/ - nblockm = i+1; - break; - } - - - /*variance*/ - switch (stat.nblock_var) { - case 1: - /*stationary case*/ - nblockv = 1; - break; - default: - /*number of the cell - nonstationary case*/ - nblockv = i+1; - break; - } - - - /* switch (stat.type) { */ -/* case 0: */ - - /*normal case*/ - moy = stat.mean[nblockm-1]; - var = stat.variance[nblockv-1]; - -/* break; */ -/* case 1: */ - /*lognormal (natural) case*/ -/* r = (double)sqrt(stat.variance[nblockv-1])/stat.mean[nblockm-1]; */ -/* r *= r; */ -/* moy = (double)log(stat.mean[nblockm-1]/sqrt(1.0+r)); */ -/* var = (double)log(1.0+r); */ -/* break; */ -/* case 2: */ - /*lognormal (log10) case*/ -/* r = (double)sqrt(stat.variance[nblockv-1])/stat.mean[nblockm-1]; */ -/* r *= r; */ -/* moy = (double)log10(stat.mean[nblockm-1]/sqrt(1.0+r)); */ -/* var = (double)log10(1.0+r); */ -/* break; */ -/* default: */ -/* Error("Type not defined in addstat"); */ -/* break; */ -/* } */ - - - - (*realout).vector[i] = (double)sqrt(var)*(*realin).vector[i]; - (*realout2).vector[i] = (double)sqrt(var)*(*realin).vector[i]+moy; - } - - return; -} diff --git a/fftma_module/gen/sources/allouememoire.c b/fftma_module/gen/sources/allouememoire.c deleted file mode 100755 index 78f6975..0000000 --- a/fftma_module/gen/sources/allouememoire.c +++ /dev/null @@ -1,16 +0,0 @@ -#include -#include -#include -#include -#include -#include - -void allouememoire(double *realint, string variable) -{ - - if (realint == NULL) { - printf("Testmemory.c: No memory available for %s\n",variable); - exit; - } - return; -} diff --git a/fftma_module/gen/sources/autoscan.log b/fftma_module/gen/sources/autoscan.log deleted file mode 100755 index accbebb..0000000 --- a/fftma_module/gen/sources/autoscan.log +++ /dev/null @@ -1,140 +0,0 @@ -autoscan: warning: missing AC_CHECK_FUNCS([floor]) wanted by: - waveVectorCompute3D.c:116 - waveVectorCompute3D.c:119 - waveVectorCompute3D.c:123 -autoscan: warning: missing AC_CHECK_FUNCS([pow]) wanted by: - gammf.c:12 - gammf.c:13 - power.c:9 - stable.c:9 -autoscan: warning: missing AC_CHECK_FUNCS([strchr]) wanted by: - strlib.c:140 -autoscan: warning: missing AC_CHECK_FUNCS([strstr]) wanted by: - strlib.c:153 -autoscan: warning: missing AC_FUNC_MALLOC wanted by: - addstat.c:25 - addstat2.c:25 - addstat2.c:32 - clean_real.c:20 - clean_real2.c:20 - derivReal.c:83 - derivReal.c:91 - derivReal.c:97 - derivReal.c:103 - derivReal.c:109 - derivReal.c:115 - derivReal.c:165 - derivReal.c:205 - FFTMA.c:65 - FFTMA.c:71 - FFTMA.c:77 - FFTMA.c:83 - FFTMA.c:89 - FFTMA.c:158 - FFTMA2.c:54 - FFTMA2.c:57 - FFTMA2.c:60 - FFTMA2.c:63 - FFTMA2.c:66 - FFTMAmemoire.c:55 - FFTMAmemoire.c:62 - FFTMAmemoire.c:65 - FFTMAmemoire.c:68 - FFTMAmemoire.c:71 - FFTPressure.c:62 - FFTPressure.c:65 - FFTPressure.c:68 - FFTPressure.c:71 - FFTPressure.c:74 - FFTPressure.c:77 - FFTPressure.c:80 - FFTPressure.c:83 - FFTPressure.c:86 - FFTPressure.c:89 - FFTPressure.c:92 - FFTPressure.c:95 - FFTPSim.c:63 - FFTPSim.c:66 - FFTPSim.c:69 - FFTPSim.c:72 - FFTPSim.c:75 - FFTPSim.c:78 - FFTPSim.c:81 - FFTPSim.c:84 - FFTPSim.c:87 - FFTPSim.c:90 - FFTPSim.c:93 - FFTPSim.c:96 - FFTPSim.c:99 - FFTPSim.c:102 - FFTtest.c:37 - FFTtest.c:40 - FFTtest.c:43 - FFTtest.c:46 - generate.c:20 - generate.c:29 - genlib.c:41 - inputdata.c:53 - inputdata.c:54 - inputdata.c:55 - inputdata.c:56 - inputdata.c:57 - inputdata.c:77 - inputdata.c:80 - inputfiledata.c:32 - inputfiledata.c:33 - inputfiledata.c:34 - inputfiledata.c:35 - inputfiledata.c:36 - inputfiledata.c:49 - inputfiledata.c:52 - kgeneration.c:41 - kgeneration2.c:41 - nor2log.c:29 - pgeneration.c:37 - pgeneration2.c:79 - readdata.c:62 - readdata.c:63 - readdata.c:64 - readdata.c:65 - readdata.c:66 - readdata.c:79 - readdata.c:82 - readdata.c:109 - readdata.c:145 - readdata.c:194 - readdata2.c:63 - readdata2.c:64 - readdata2.c:65 - readdata2.c:66 - readdata2.c:67 - readdata2.c:80 - readdata2.c:83 - readdata2.c:110 - readdata2.c:146 - readdata2.c:195 - readdata3.c:64 - readdata3.c:65 - readdata3.c:66 - readdata3.c:67 - readdata3.c:68 - readdata3.c:81 - readdata3.c:84 - readdata3.c:111 - readdata3.c:147 - readdata3.c:196 - waveVectorCompute3D.c:28 - waveVectorCompute3D.c:33 - waveVectorCompute3D.c:38 - waveVectorCompute3D.c:44 - waveVectorCompute3D.c:50 - waveVectorCompute3D.c:56 - waveVectorCompute3D.c:92 -autoscan: warning: missing AC_HEADER_STDBOOL wanted by: - random.c:74 - scanadt.c:95 - stack.c:76 - stack.c:81 - strlib.c:115 -autoscan: warning: missing AC_PREREQ wanted by: - autoscan diff --git a/fftma_module/gen/sources/axes.c b/fftma_module/gen/sources/axes.c deleted file mode 100755 index b9e8351..0000000 --- a/fftma_module/gen/sources/axes.c +++ /dev/null @@ -1,41 +0,0 @@ -#include -#include - -/*normalizes anisotropy axes*/ -void axes(double *ap,double *scf,int N) -{ - double sclpdt, r, eps = 1.E-6; - int i,j,k; - - - for (k = 0; k < N; k++) { - - r = sqrt(ap[9*k]*ap[9*k]+ap[9*k+1]*ap[9*k+1]+ap[9*k+2]*ap[9*k+2]); - ap[9*k] /= r; - ap[9*k+1] /= r; - ap[9*k+2] /= r; - sclpdt = ap[9*k]*ap[9*k+3]+ap[9*k+1]*ap[9*k+4]+ap[9*k+2]*ap[9*k+5]; - if (sclpdt > eps) { - printf("Non orthogonal axes"); - exit; - } else { - r = sqrt(ap[9*k+3]*ap[9*k+3]+ap[9*k+4]*ap[9*k+4]+ap[9*k+5]*ap[9*k+5]); - ap[9*k+3] /= r; - ap[9*k+4] /= r; - ap[9*k+5] /= r; - ap[9*k+6] = ap[9*k+1]*ap[9*k+5]-ap[9*k+2]*ap[9*k+4]; - ap[9*k+7] = ap[9*k+2]*ap[9*k+3]-ap[9*k]*ap[9*k+5]; - ap[9*k+8] = ap[9*k]*ap[9*k+4]-ap[9*k+1]*ap[9*k+3]; - for (i=0; i<3; i++) { - for (j=0; j<3; j++) { - if (scf[3*k+j] == 0.) - scf[3*k+j] = 1.; - ap[9*k+3*j+i] /= scf[3*k+j]; - } - } - } - - } - return; -} - diff --git a/fftma_module/gen/sources/build_pressure.c b/fftma_module/gen/sources/build_pressure.c deleted file mode 100755 index b9ded34..0000000 --- a/fftma_module/gen/sources/build_pressure.c +++ /dev/null @@ -1,66 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include "geostat.h" -#include "pressure.h" - -/* Build_pressure */ -/* build pressure in spectral domain */ - -void build_pressure(int n[3],struct grid_mod grid,struct pressure_mod gradient,double *realization,double *ireal,double *pressure,double *ipressure) -{ - int i,j,k,maille1; - double ki,kj,kk; - double coeff,temp,temp2; - - /* pressure calculation in the spectral domain*/ - for ( k = 1; k <= n[2]; k++) { - for (j = 1; j <= n[1]; j++) { - for (i = 1; i <= n[0]; i++) { - maille1 = i+(j-1+(k-1)*n[1])*n[0]; - if (n[0]==1) - { - ki=0.; - } - else - { - ki =(double)(i-1)/(double)(grid.NX*grid.DX); - } - if (n[1]==1) - { - kj=0.; - } - else - { - kj =(double)j/(double)(grid.NY*grid.DY); - } - if (n[2]==1) - { - kk=0.; - } - else - { - kk =(double)k/(double)(grid.NZ*grid.DZ); - } - - coeff = (gradient.x*ki+gradient.y*kj+gradient.z*kk)/(ki*ki+kj*kj+kk*kk); - temp = realization[maille1]; - temp2= ireal[maille1]; - if (maille1==1) - { - pressure[maille1] =0.; - ipressure[maille1]=0.; - } - else - { - pressure[maille1] =-1./(2*3.14)*coeff*temp2; - ipressure[maille1]= 1./(2*3.14)*coeff*temp; - } - } - } - } - return; -} diff --git a/fftma_module/gen/sources/build_real.c b/fftma_module/gen/sources/build_real.c deleted file mode 100755 index 4a0e186..0000000 --- a/fftma_module/gen/sources/build_real.c +++ /dev/null @@ -1,45 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include "geostat.h" - -/* build_real */ -/* build a realization in the spectral domain */ -/*n: vector with the number of cells along the */ -/* X, Y and Z axes for the underlying grid */ -/* i = [0 1 2] */ -/* --> 0 0 0 : n will be computed and */ -/* updated as output */ -/* --> nx ny nz: these dimensions are used */ -/*covar: vector defining the covariance in spectral domain */ -/*realization: vector defining the real part */ -/*ireal: vector defining the i-part */ - -void build_real(int n[3],int NTOT,double *covar,double *realization,double *ireal) -{ - int i,j,k,maille1; - double temp; - - - /*decomposition and multiplication in the spectral domain*/ - for ( k = 1; k <= n[2]; k++) { - for (j = 1; j <= n[1]; j++) { - for (i = 1; i <= n[0]; i++) { - maille1 = i+(j-1+(k-1)*n[1])*n[0]; - temp = covar[maille1]; - if (temp > 0.) { - temp = sqrt(temp)/(double) NTOT; - } else if (temp < 0.) { - temp = sqrt(-temp)/(double) NTOT; - } - realization[maille1] *= temp; - ireal[maille1] *= temp; - } - } - } - - return; -} diff --git a/fftma_module/gen/sources/build_velocity.c b/fftma_module/gen/sources/build_velocity.c deleted file mode 100755 index 7511c4d..0000000 --- a/fftma_module/gen/sources/build_velocity.c +++ /dev/null @@ -1,117 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include "geostat.h" -#include "pressure.h" - -/* Build_velocity */ -/* Build velocity in spectral domain */ - -void build_velocity(int n[3],struct grid_mod grid,struct statistic_mod stat,struct pressure_mod gradient,double *realization,double *ireal,double *xvelocity,double *ixvelocity,int direction) -{ - int i,j,k,maille1; - int x,y,z; - double ki,kj,kk; - double coeff,temp,temp2; - double grad; - - /* x-direction velocity calculation in the spectral domain*/ - switch(direction) - { - case 1: - grad = gradient.x; - x=1; - y=0; - z=0; - break; - case 2: - grad = gradient.y; - x=0; - y=1; - z=0; - break; - case 3: - grad = gradient.z; - x=0; - y=0; - z=1; - break; - default : - printf("build_velocity.c: wrong velocity direction!!! direction: %d\n",direction); - break; - } - - for ( k = 1; k <= n[2]; k++) { - for (j = 1; j <= n[1]; j++) { - for (i = 1; i <= n[0]; i++) { - maille1 = i+(j-1+(k-1)*n[1])*n[0]; -/* if (i -#include -#include "genlib.h" - -/*cardsin covariance function*/ -double cardsin(double h) -{ - float delta = 20.371; - double z; - - if (h != 0) { - z = (double)(h*delta); - z = sin(z)/z; - } else { - z = 1.; - } - return(z); -} diff --git a/fftma_module/gen/sources/cgrid.c b/fftma_module/gen/sources/cgrid.c deleted file mode 100755 index 19baee0..0000000 --- a/fftma_module/gen/sources/cgrid.c +++ /dev/null @@ -1,43 +0,0 @@ -#include -#include "geostat.h" - - -/*computes the size of the grid for FFTs*/ -/*input: */ -/*variogram: structure defining the variogram model*/ -/*grid: structure defining the actual grid */ -/*output: */ -/*n: vector with the number of cells along the */ -/* X, Y and Z axes for the underlying grid */ -/* i = [0 1 2] */ -void cgrid(struct vario_mod variogram, struct grid_mod grid, int n[3]) -{ - int i,N; - double D; - - if (n == NULL || n[0] == 0 || n[1] == 0 || n[2] == 0) { - for (i = 0; i<3; i++) { - switch (i) { - case 0: - N = grid.NX; - D = grid.DX; - break; - case 1: - N = grid.NY; - D = grid.DY; - break; - case 2: - N = grid.NZ; - D = grid.DZ; - break; - } - n[i] = length(N,i,variogram.scf,variogram.ap,D,variogram.Nvario); - } - } else { - if ((n[0] -#include -#include -#include -#include -#include -#include "geostat.h" - -void clean_real(struct realization_mod *realin,int n[3],struct grid_mod grid,double *vectorresult,struct realization_mod *realout) -{ - int i,j,k,maille0,maille1; - double NTOT; - - NTOT=n[0]*n[1]*n[2]; - /*is the output realization already allocated?*/ - /*if not, memory allocation*/ - - if ((*realout).vector == NULL || (*realout).n != (*realin).n) - { - (*realout).vector = (double *) malloc((*realin).n * sizeof(double)); - if ((*realout).vector == NULL) - { - printf("Clean_real.c: No memory available\n"); - exit; - } - } - - (*realout).n = (*realin).n; - (*realout).code = 1; - for ( k = 1; k <= grid.NZ; k++) { - for (j = 1; j <= grid.NY; j++) { - for (i = 1; i <= grid.NX; i++) { - maille1 = i+(j-1+(k-1)*n[1])*n[0]; - maille0 = i-1+(j-1+(k-1)*grid.NY)*grid.NX; - /* Modif du 18 juin 2003 */ - /*(*realout).vector[maille0] = vectorresult[maille1]/(double) NTOT;*/ - (*realout).vector[maille0] = vectorresult[maille1]; - } - } - } - - return; -} diff --git a/fftma_module/gen/sources/clean_real2.c b/fftma_module/gen/sources/clean_real2.c deleted file mode 100755 index 058be88..0000000 --- a/fftma_module/gen/sources/clean_real2.c +++ /dev/null @@ -1,50 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include "geostat.h" - -void clean_real2(struct realization_mod *realin,int n[3],struct grid_mod grid,int solver,double *vectorresult,struct realization_mod *realout) -{ - int i,j,k,maille0,maille1; - double NTOT; - - NTOT=n[0]*n[1]*n[2]; - /*is the output realization already allocated?*/ - /*if not, memory allocation*/ - - if ((*realout).vector == NULL || (*realout).n != (*realin).n) - { - (*realout).vector = (double *) malloc((*realin).n * sizeof(double)); - if ((*realout).vector == NULL) - { - printf("Clean_real2.c: No memory available\n"); - exit; - } - } - - (*realout).n = (*realin).n; - (*realout).code = 1; - if (solver==1) - { - for ( k = 1; k <= NTOT;k++) - { - (*realout).vector[k-1] = vectorresult[k]/(double) NTOT; - } - } - else - { - for ( k = 1; k <= grid.NZ; k++) { - for (j = 1; j <= grid.NY; j++) { - for (i = 1; i <= grid.NX; i++) { - maille1 = i+(j-1+(k-1)*n[1])*n[0]; - maille0 = i-1+(j-1+(k-1)*grid.NY)*grid.NX; - (*realout).vector[maille0] = vectorresult[maille1]/(double) NTOT; - } - } - } - } - return; -} diff --git a/fftma_module/gen/sources/cov_value.c b/fftma_module/gen/sources/cov_value.c deleted file mode 100755 index e7baf5d..0000000 --- a/fftma_module/gen/sources/cov_value.c +++ /dev/null @@ -1,55 +0,0 @@ -#include -#include "geostat.h" -#include "genlib.h" - -/*selection of model covariance*/ -double cov_value(struct vario_mod variogram,double di,double dj,double dk) -{ - double hx,hy,hz,h; - double cov; - int k; - - - cov = 0.; - - for (k = 0; k < variogram.Nvario; k++) { - - hx = di*variogram.ap[9*k]+dj*variogram.ap[9*k+1]+dk*variogram.ap[9*k+2]; - hy = di*variogram.ap[9*k+3]+dj*variogram.ap[9*k+4]+dk*variogram.ap[9*k+5]; - hz = di*variogram.ap[9*k+6]+dj*variogram.ap[9*k+7]+dk*variogram.ap[9*k+8]; - h = sqrt(hx*hx+hy*hy+hz*hz); - - - switch (variogram.vario[k]) { - case 1: - cov += variogram.var[k]*exponential(h); - break; - case 2: - cov += variogram.var[k]*gaussian(h); - break; - case 3: - cov += variogram.var[k]*spherical(h); - break; - case 4: - cov += variogram.var[k]*cardsin(h); - break; - case 5: - cov += variogram.var[k]*stable(h,variogram.alpha[k]); - break; - case 6: - cov += variogram.var[k]*gammf(h,variogram.alpha[k]); - break; - case 7: - cov += variogram.var[k]*cubic(h); - break; - case 8: - cov += variogram.var[k]*nugget(h); - break; - case 9: - cov += variogram.var[k]*power(h,variogram.alpha[k]); - break; - } - } - - return (cov); -} diff --git a/fftma_module/gen/sources/covariance.c b/fftma_module/gen/sources/covariance.c deleted file mode 100755 index 46ca138..0000000 --- a/fftma_module/gen/sources/covariance.c +++ /dev/null @@ -1,90 +0,0 @@ -#include "geostat.h" - -/*builds the sampled covariance function*/ -/*dimensions are even*/ -void covariance(double *covar, struct vario_mod variogram, struct grid_mod mesh, int n[3]) - -{ - int i,j,k,maille,n2[3],symmetric; - double di,dj,dk; - - - for (i=0;i<3;i++) - n2[i] = n[i]/2; - - for (i=0; i<= n2[0]; i++) { - for (j=0; j<= n2[1]; j++) { - for (k=0; k<= n2[2]; k++) { - - - /*area 1*/ - maille = 1+i+n[0]*(j+n[1]*k); - di = (double)i*mesh.DX; - dj = (double)j*mesh.DY; - dk = (double)k*mesh.DZ; - covar[maille] = (double)cov_value(variogram,di,dj,dk); - - - if (k > 0 && k 0 && j 0 && i 0 && i 0 && k 0 && j 0 && i 0 && j < n2[1]) { - /*area 5*/ - di = -(double)i*mesh.DX; - dj = -(double)j*mesh.DY; - dk = (double)k*mesh.DZ; - maille = 1+(n[0]-i)+n[0]*(n[1]-j+n[1]*k); - covar[maille] = (double)cov_value(variogram,di,dj,dk); - } - - - if (k > 0 && k 0 && j < n2[1]) { - /*area 3*/ - di = (double)i*mesh.DX; - dj = -(double)j*mesh.DY; - dk = (double)k*mesh.DZ; - maille = 1+i+n[0]*(n[1]-j+n[1]*k); - covar[maille] = (double)cov_value(variogram,di,dj,dk); - } - - - if (k > 0 && k 0 && i -#include -#include "genlib.h" - - -/*cubic covariance function*/ -double cubic(double h) -{ - double z; - - if (h >= 1.) { - z = 0.; - } else { - z = 1.-7.*(double)(h*h)+(35./4.)*(double)(h*h*h)-3.5*(double)(h*h*h*h*h)+.75*(double)(h*h*h*h*h*h*h); - } - return (z); -} diff --git a/fftma_module/gen/sources/debuginput.c b/fftma_module/gen/sources/debuginput.c deleted file mode 100755 index b9c3a45..0000000 --- a/fftma_module/gen/sources/debuginput.c +++ /dev/null @@ -1,73 +0,0 @@ -#include -#include -#include -#include -#include -#include "genlib.h" -#include "geostat.h" -#include "toolsIO.h" - - -/* DebugInput */ -/* */ -/* Display the input data */ -/* seed: seed */ -/* grid: structure defining the actual grid */ -/* filename: name of files */ -/* variogram: struture defining the variogram model */ -/* stat: struture defining the mean and the variance of permeability realization */ -/* pression: structure defining the gradient pressure */ - -void debuginput(long *seed,struct grid_mod *grid,string filename[8],struct vario_mod *variogram,struct statistic_mod *stat,struct pressure_mod *pression,int *Ksolver,int *genere, int *gwnwrite) -{ - int i; - - - /* debug du 8/7/2002 */ - printf("\n\n"); - - printf("Starting seed (integer): %d\n",(*seed)); - printf("Number of cells along the X axis: %d\n",(*grid).NX); - printf("Number of cells along the Y axis: %d\n",(*grid).NY); - printf("Number of cells along the Z axis: %d\n",(*grid).NZ); - printf("cell length along the X axis: %6.4f\n",(*grid).DX); - printf("cell length along the Y axis: %6.4f\n",(*grid).DY); - printf("cell length along the Z axis: %6.4f\n",(*grid).DZ); - printf("Number of structures for the variogram: %d\n",(*variogram).Nvario); - i=0; - printf("Weight: %6.4f\n",(*variogram).var[i]); - printf("Type of variogram: %d\n",(*variogram).vario[i]); - printf("Exponent: %6.4f\n",(*variogram).alpha[i]); - - printf("Mean of the output realization: %15.8f\n",(*stat).mean[0]); - printf("Variance of the output realization: %6.4f\n",(*stat).variance[0]); - printf("Structure of the field (0-normal case 1-lognormal case 2-log10 case) : %d\n",(*stat).type); - - /*output files*/ - printf("output filename for permeability realization: %s\n", filename[1]); - printf("\n\n"); - if (*gwnwrite == 0) - { - printf("K field generation with Gaussian white noise!\n"); - printf("output filename for Gaussian white noise: %s\n",filename[0]); - } - printf("\n\n"); - if ((*Ksolver == 1) | (*Ksolver == 2)) - { - printf("P field generation: %d/n",*Ksolver); - printf("output filename for pressure realization: %s\n", filename[2]); - printf("output filename for pressure total realization: %s\n", filename[3]); - printf("output filename for x-velocity realization: %s\n", filename[4]); - printf("output filename for y-velocity realization: %s\n", filename[5]); - printf("output filename for z-velocity realization: %s\n", filename[6]); - printf("output filename for pressure gradient realization: %s\n", filename[7]); - - /*Pressure data*/ - printf("Pressure gradient in x direction: %6.4f\n",(*pression).x); - printf("Pressure gradient in y direction: %6.4f\n",(*pression).y); - printf("Pressure gradient in z direction: %6.4f\n",(*pression).z); - } - printf("\n\n"); - - return; -} diff --git a/fftma_module/gen/sources/derivReal.c b/fftma_module/gen/sources/derivReal.c deleted file mode 100755 index 7e7e02b..0000000 --- a/fftma_module/gen/sources/derivReal.c +++ /dev/null @@ -1,216 +0,0 @@ -#include -#include -#include -#include "condor.h" -#include "geostat.h" - -/* Private functions */ -void normAxes(double *vec, double *normed); - - -void derivReal(struct realization_mod *Z, struct realization_mod *dZ, double *dir, struct grid_mod *grid, struct vario_mod vario) { - - int n[3],i,j,k,maille,extMaille; - int NTOT,ntot,NMAX,nmax,NDIM; -// int NXYZ,nxyz; - double nDir[3]; - double *table,*workr,*worki,*realization,*waveVect; - - - int Ngrid; - double tmp; - double *ExtendedWaveVect; - -/* Test the input real*/ -/* if ((*Z).code != 1) { */ -/* printf("Realization should be Standard Normal\n"); */ -/* return; */ -/* } */ - - printf("grid.Nx = %d\n",(*grid).NX); - printf("grid.Ny = %d\n",(*grid).NY); - printf("grid.Nz = %d\n",(*grid).NZ); - - printf("vario.Nvario = %d\n",vario.Nvario); - for(i=0; i NMAX) NMAX = n[i]; - if (n[i] == 1) NDIM = NDIM-1; - } - nmax = NMAX+1; - - printf("NTOT = %d, ntot = %d, NMAX = %d\n",NTOT,ntot,NMAX); - -/* wave vector computation */ - normAxes(dir,nDir); - printf("Derivation direction (normed) %f %f %f\n",nDir[0],nDir[1],nDir[2]); - waveVect = (double *) malloc(Ngrid*sizeof(double)); - if (waveVect == NULL) { - printf("waveVectCompute.cpp : No memory available for waveVect\n"); - return; - } - waveVectorCompute3D((*grid).NX,(*grid).NY,(*grid).NZ,nDir,waveVect); - -/* memory allocation */ - table = (double *) malloc(ntot * sizeof(double)); - if (table == NULL) { - printf("derivReal.cpp: No memory availble for table\n"); - return; - } - - realization = (double *) malloc(ntot * sizeof(double)); - if (realization == NULL) { - printf("derivReal.cpp: No memory availble for realization\n"); - return; - } - - ExtendedWaveVect = (double *) malloc(ntot * sizeof(double)); - if (ExtendedWaveVect == NULL) { - printf("derivReal.cpp: No memory availble for realization\n"); - return; - } - - workr = (double *) malloc(nmax * sizeof(double)); - if (workr == NULL) { - printf("derivReal.cpp: No memory available for workr\n"); - return; - } - - worki = (double *) malloc(nmax * sizeof(double)); - if (worki == NULL) { - printf("derivReal.cpp: No memory available for worki\n"); - return; - } - - extMaille =0; -/* organization of the extended realization */ - for (k=1;k<=n[2];k++) { - for (j=1;j<=n[1];j++) { - for (i=1;i<=n[0];i++) { - extMaille = i + ((j-1) + (((k-1) * n[1]) * n[0])); - if (i <= (*grid).NX && j <= (*grid).NY && k <= (*grid).NZ) { - maille = i-1 + ((j-1) + ((k-1) * (*grid).NY) * (*grid).NX); - realization[extMaille] = (*Z).vector[maille]; - ExtendedWaveVect[extMaille] = waveVect[maille]; - } else { - realization[extMaille] = 0.0; - ExtendedWaveVect[extMaille] = 0.0; - } - } - } - } - -/* forward fourier transform of the realization */ - fourt(realization,table,n,NDIM,1,0,workr,worki); - FILE *wave; - wave = fopen("/home/irsrvshare1/R03/UPS_FLEX/waveVector.eas","w"); - - for (i=1;i -#include -#include "genlib.h" - -/*exponential covariance function*/ -double exponential(double h) -{ - return (exp(-3.*(double)h)); -} diff --git a/fftma_module/gen/sources/fftma.c b/fftma_module/gen/sources/fftma.c deleted file mode 100755 index 64f941e..0000000 --- a/fftma_module/gen/sources/fftma.c +++ /dev/null @@ -1,185 +0,0 @@ - -#include -#include -#include "geostat.h" - - -/*FAST FOURIER TRANSFORM MOVING AVERAGE METHOD */ -/*Turns a Gaussian white noise vector into a */ -/*spatially correlated vector */ -/*input: */ -/*variogram: structure defining the variogram */ -/* model */ -/*grid: structure defining the grid */ -/*n: vector with the number of cells along the */ -/* X, Y and Z axes for the underlying grid */ -/* i = [0 1 2] */ -/* --> 0 0 0 : n will be computed and */ -/* updated as output */ -/* --> nx ny nz: these dimensions are used */ -/*realin: structure defining a realization - */ -/* must be a Gaussian white noise */ -/*output: */ -/*realout: structure defining a realization - */ - - - -void FFTMA(struct vario_mod variogram,struct grid_mod grid,int n[3],struct realization_mod *realin,struct realization_mod *realout) - -{ - int NTOT,i,j,k,NMAX,NDIM,ntot,nmax,NXYZ,nxyz,maille0,maille1; - double *table,*covar,*workr,*worki,*realization,temp; - - - /*test over the input realization*/ - /*if ((*realin).code != 0) { - printf("Input realizations in FFTMA must be Gaussian white noises"); - exit; - }*/ - - /*covariance axis normalization*/ - axes(variogram.ap,variogram.scf,variogram.Nvario); - - - /*pseudo-grid definition*/ - cgrid(variogram,grid,n); - - - /*constant definition*/ - NTOT = n[0]*n[1]*n[2]; - ntot = NTOT+1; - NMAX = n[0]; - NDIM = 3; - for (i=1;i<3;i++) { - if (n[i] > NMAX) - NMAX = n[i]; - if (n[i] == 1) - NDIM--; - } - nmax = NMAX+1; - NXYZ = grid.NX*grid.NY*grid.NZ; - nxyz = NXYZ+1; - - - /*array initialization*/ - covar = (double *) malloc(ntot * sizeof(double)); - if (covar == NULL) { - printf("FFTMA.c: No memory available for covar"); - exit; - } - - table = (double *) malloc(ntot * sizeof(double)); - if (table == NULL) { - printf("FFTMA.c: No memory available for table"); - exit; - } - - realization = (double *) malloc(ntot * sizeof(double)); - if (realization == NULL) { - printf("FFTMA.c: No memory available for realization"); - exit; - } - - workr = (double *) malloc(nmax * sizeof(double)); - if (workr == NULL) { - printf("FFTMA.c: No memory available for workr"); - exit; - } - - worki = (double *) malloc(nmax * sizeof(double)); - if (worki == NULL) { - printf("FFTMA.c: No memory available for worki"); - exit; - } - - /*covariance function creation*/ - covariance(covar,variogram,grid,n); - - - /*power spectrum*/ - fourt(covar,table,n,NDIM,1,0,workr,worki); - - - /*organization of the input Gaussian white noise*/ - for ( k = 1; k <= n[2]; k++) { - for (j = 1; j <= n[1]; j++) { - for (i = 1; i <= n[0]; i++) { - maille1 = i+(j-1+(k-1)*n[1])*n[0]; - if (i <= grid.NX && j <= grid.NY && k <= grid.NZ) { - maille0 = i-1+(j-1+(k-1)*grid.NY)*grid.NX; - realization[maille1] = (*realin).vector[maille0]; - } else { - realization[maille1] = 0.; - } - } - } - } - - - /*forward fourier transform of the GWN*/ - fourt(realization,table,n,NDIM,1,0,workr,worki); - - - /*decomposition and multiplication in the spectral domain*/ - for ( k = 1; k <= n[2]; k++) { - for (j = 1; j <= n[1]; j++) { - for (i = 1; i <= n[0]; i++) { - maille1 = i+(j-1+(k-1)*n[1])*n[0]; - temp = covar[maille1]; - if (temp > 0.) { - temp = sqrt(temp)/(double) NTOT; - } else if (temp < 0.) { - temp = sqrt(-temp)/(double) NTOT; - } - realization[maille1] *= temp; - table[maille1] *= temp; - } - } - } - - - free(covar); - - - /*backward fourier transform*/ - fourt(realization,table,n,NDIM,0,1,workr,worki); - - - free(table); - free(workr); - free(worki); - - - /*output realization*/ - - /*is the output realization already allocated?*/ - /*if not, memory allocation*/ - if ((*realout).vector == NULL || (*realout).n != (*realin).n) { - (*realout).vector = (double *) malloc((*realin).n * sizeof(double)); - if ((*realout).vector == NULL) { - printf("FFTMA.c: No memory available"); - exit; - } - } - (*realout).n = (*realin).n; - (*realout).code = 1; - for ( k = 1; k <= grid.NZ; k++) { - for (j = 1; j <= grid.NY; j++) { - for (i = 1; i <= grid.NX; i++) { - maille1 = i+(j-1+(k-1)*n[1])*n[0]; - maille0 = i-1+(j-1+(k-1)*grid.NY)*grid.NX; - (*realout).vector[maille0] = realization[maille1]; - } - } - } - - - free(realization); - - - return; -} - - - - diff --git a/fftma_module/gen/sources/fftma2.c b/fftma_module/gen/sources/fftma2.c deleted file mode 100755 index 5977690..0000000 --- a/fftma_module/gen/sources/fftma2.c +++ /dev/null @@ -1,105 +0,0 @@ -#include -#include -#include -#include "geostat.h" - - -/*FAST FOURIER TRANSFORM MOVING AVERAGE METHOD */ -/*Turns a Gaussian white noise vector into a */ -/*spatially correlated vector */ -/*input: */ -/*variogram: structure defining the variogram */ -/* model */ -/*grid: structure defining the grid */ -/*n: vector with the number of cells along the */ -/* X, Y and Z axes for the underlying grid */ -/* i = [0 1 2] */ -/* --> 0 0 0 : n will be computed and */ -/* updated as output */ -/* --> nx ny nz: these dimensions are used */ -/*realin: structure defining a realization - */ -/* must be a Gaussian white noise */ -/*output: */ -/*realout: structure defining a realization - */ - -void FFTMA2(struct vario_mod variogram,struct grid_mod grid,int n[3],struct realization_mod *realin,struct realization_mod *realout) -{ - int NTOT,i,j,k,NMAX,NDIM,ntot,nmax,NXYZ,nxyz,maille0,maille1; - int solver; - double temp; - double *ireal,*covar,*workr,*worki,*realization; - - /*covariance axis normalization*/ - axes(variogram.ap,variogram.scf,variogram.Nvario); - - /*pseudo-grid definition*/ - cgrid(variogram,grid,n); - - /*constant definition*/ - NTOT = n[0]*n[1]*n[2]; - ntot = NTOT+1; - NMAX = n[0]; - NDIM = 3; - for (i=1;i<3;i++) { - if (n[i] > NMAX) - NMAX = n[i]; - if (n[i] == 1) - NDIM--; - } - nmax = NMAX+1; - NXYZ = grid.NX*grid.NY*grid.NZ; - nxyz = NXYZ+1; - - /*array initialization*/ - covar = (double *) malloc(ntot * sizeof(double)); - testmemory(covar); - - ireal = (double *) malloc(ntot * sizeof(double)); - testmemory(ireal); - - realization = (double *) malloc(ntot * sizeof(double)); - testmemory(realization); - - workr = (double *) malloc(nmax * sizeof(double)); - testmemory(workr); - - worki = (double *) malloc(nmax * sizeof(double)); - testmemory(worki); - - /*covariance function creation*/ - covariance(covar,variogram,grid,n); - - /*power spectrum*/ - fourt(covar,ireal,n,NDIM,1,0,workr,worki); - - /*organization of the input Gaussian white noise*/ - solver=0; - prebuild_gwn(grid,n,realin,realization,solver); - - /*forward fourier transform of the GWN*/ - fourt(realization,ireal,n,NDIM,1,0,workr,worki); - - /* build realization in spectral domain */ - build_real(n,NTOT,covar,realization,ireal); - - free(covar); - - /*backward fourier transform*/ - fourt(realization,ireal,n,NDIM,0,1,workr,worki); - - - free(ireal); - free(workr); - free(worki); - - /*output realization*/ - clean_real(realin,n,grid,realization,realout); - - free(realization); - - return; -} - - - - diff --git a/fftma_module/gen/sources/fourt.c b/fftma_module/gen/sources/fourt.c deleted file mode 100755 index fe80035..0000000 --- a/fftma_module/gen/sources/fourt.c +++ /dev/null @@ -1,591 +0,0 @@ -#include -#include - -/*fast fourier transform */ -/* THE COOLEY-TUKEY FAST FOURIER TRANSFORM */ -/* EVALUATES COMPLEX FOURIER SERIES FOR COMPLEX OR REAL FUNCTIONS. */ -/* THAT IS, IT COMPUTES */ -/* FTRAN(J1,J2,...)=SUM(DATA(I1,I2,...)*W1**(I1-1)*(J1-1) */ -/* *W2**(I2-1)*(J2-1)*...), */ -/* WHERE W1=EXP(-2*PI*SQRT(-1)/NN(1)), W2=EXP(-2*PI*SQRT(-1)/NN(2)), */ -/* ETC. AND I1 AND J1 RUN FROM 1 TO NN(1), I2 AND J2 RUN FROM 1 TO */ -/* NN(2), ETC. THERE IS NO LIMIT ON THE DIMENSIONALITY (NUMBER OF */ -/* SUBSCRIPTS) OF THE ARRAY OF DATA. THE PROGRAM WILL PERFORM */ -/* A THREE-DIMENSIONAL FOURIER TRANSFORM AS EASILY AS A ONE-DIMEN- */ -/* SIONAL ONE, THO IN A PROPORTIONATELY GREATER TIME. AN INVERSE */ -/* TRANSFORM CAN BE PERFORMED, IN WHICH THE SIGN IN THE EXPONENTIALS */ -/* IS +, INSTEAD OF -. IF AN INVERSE TRANSFORM IS PERFORMED UPON */ -/* AN ARRAY OF TRANSFORMED DATA, THE ORIGINAL DATA WILL REAPPEAR, */ -/* MULTIPLIED BY NN(1)*NN(2)*... THE ARRAY OF INPUT DATA MAY BE */ -/* REAL OR COMPLEX, AT THE PROGRAMMERS OPTION, WITH A SAVING OF */ -/* ABOUT THIRTY PER CENT IN RUNNING TIME FOR REAL OVER COMPLEX. */ -/* (FOR FASTEST TRANSFORM OF REAL DATA, NN(1) SHOULD BE EVEN.) */ -/* THE TRANSFORM VALUES ARE ALWAYS COMPLEX, AND ARE RETURNED IN THE */ -/* ORIGINAL ARRAY OF DATA, REPLACING THE INPUT DATA. THE LENGTH */ -/* OF EACH DIMENSION OF THE DATA ARRAY MAY BE ANY INTEGER. THE */ -/* PROGRAM RUNS FASTER ON COMPOSITE INTEGERS THAN ON PRIMES, AND IS */ -/* PARTICULARLY FAST ON NUMBERS RICH IN FACTORS OF TWO. */ -/* TIMING IS IN FACT GIVEN BY THE FOLLOWING FORMULA. LET NTOT BE THE */ -/* TOTAL NUMBER OF POINTS (REAL OR COMPLEX) IN THE DATA ARRAY, THAT */ -/* IS, NTOT=NN(1)*NN(2)*... DECOMPOSE NTOT INTO ITS PRIME FACTORS, */ -/* SUCH AS 2**K2 * 3**K3 * 5**K5 * ... LET SUM2 BE THE SUM OF ALL */ -/* THE FACTORS OF TWO IN NTOT, THAT IS, SUM2 = 2*K2. LET SUMF BE */ -/* THE SUM OF ALL OTHER FACTORS OF NTOT, THAT IS, SUMF = 3*K3+5*K5+.. */ -/* THE TIME TAKEN BY A MULTIDIMENSIONAL TRANSFORM ON THESE NTOT DATA */ -/* IS T = T0 + T1*NTOT + T2*NTOT*SUM2 + T3*NTOT*SUMF. FOR THE PAR- */ -/* TICULAR IMPLEMENTATION FORTRAN 32 ON THE CDC 3300 (FLOATING POINT */ -/* ADD TIME = SIX MICROSECONDS), */ -/* T = 3000 + 600*NTOT + 50*NTOT*SUM2 + 175*NTOT*SUMF MICROSECONDS */ -/* ON COMPLEX DATA. */ -/* IMPLEMENTATION OF THE DEFINITION BY SUMMATION WILL RUN IN A TIME */ -/* PROPORTIONAL TO NTOT**2. FOR HIGHLY COMPOSITE NTOT, THE SAVINGS */ -/* OFFERED BY COOLEY-TUKEY CAN BE DRAMATIC. A MATRIX 100 BY 100 WILL */ -/* BE TRANSFORMED IN TIME PROPORTIONAL TO 10000*(2+2+2+2+5+5+5+5) = */ -/* 280,000 (ASSUMING T2 AND T3 TO BE ROUGHLY COMPARABLE) VERSUS */ -/* 10000**2 = 100,000,000 FOR THE STRAIGHTFORWARD TECHNIQUE. */ -/* THE COOLEY-TUKEY ALGORITHM PLACES TWO RESTRICTIONS UPON THE */ -/* NATURE OF THE DATA BEYOND THE USUAL RESTRICTION THAT */ -/* THE DATA FROM ONE CYCLE OF A PERIODIC FUNCTION. THEY ARE-- */ -/* 1. THE NUMBER OF INPUT DATA AND THE NUMBER OF TRANSFORM VALUES */ -/* MUST BE THE SAME. */ -/* 2. CONSIDERING THE DATA TO BE IN THE TIME DOMAIN, */ -/* THEY MUST BE EQUI-SPACED AT INTERVALS OF DT. FURTHER, THE TRANS- */ -/* FORM VALUES, CONSIDERED TO BE IN FREQUENCY SPACE, WILL BE EQUI- */ -/* SPACED FROM 0 TO 2*PI*(NN(I)-1)/(NN(I)*DT) AT INTERVALS OF */ -/* 2*PI/(NN(I)*DT) FOR EACH DIMENSION OF LENGTH NN(I). OF COURSE, */ -/* DT NEED NOT BE THE SAME FOR EVERY DIMENSION. */ - -/* THE CALLING SEQUENCE IS-- */ -/* CALL FOURT(DATAR,DATAI,NN,NDIM,IFRWD,ICPLX,WORKR,WORKI) */ - -/* DATAR AND DATAI ARE THE ARRAYS USED TO HOLD THE REAL AND IMAGINARY */ -/* PARTS OF THE INPUT DATA ON INPUT AND THE TRANSFORM VALUES ON */ -/* OUTPUT. THEY ARE FLOATING POINT ARRAYS, MULTIDIMENSIONAL WITH */ -/* IDENTICAL DIMENSIONALITY AND EXTENT. THE EXTENT OF EACH DIMENSION */ -/* IS GIVEN IN THE INTEGER ARRAY NN, OF LENGTH NDIM. THAT IS, */ -/* NDIM IS THE DIMENSIONALITY OF THE ARRAYS DATAR AND DATAI. */ -/* IFRWD IS AN INTEGER USED TO INDICATE THE DIRECTION OF THE FOURIER */ -/* TRANSFORM. IT IS NON-ZERO TO INDICATE A FORWARD TRANSFORM */ -/* (EXPONENTIAL SIGN IS -) AND ZERO TO INDICATE AN INVERSE TRANSFORM */ -/* (SIGN IS +). ICPLX IS AN INTEGER TO INDICATE WHETHER THE DATA */ -/* ARE REAL OR COMPLEX. IT IS NON-ZERO FOR COMPLEX, ZERO FOR REAL. */ -/* IF IT IS ZERO (REAL) THE CONTENTS OF ARRAY DATAI WILL BE ASSUMED */ -/* TO BE ZERO, AND NEED NOT BE EXPLICITLY SET TO ZERO. AS EXPLAINED */ -/* ABOVE, THE TRANSFORM RESULTS ARE ALWAYS COMPLEX AND ARE STORED */ -/* IN DATAR AND DATAI ON RETURN. WORKR AND WORKI ARE ARRAYS USED */ -/* FOR WORKING STORAGE. THEY ARE NOT NECESSARY IF ALL THE DIMENSIONS */ -/* OF THE DATA ARE POWERS OF TWO. IN THIS CASE, THE ARRAYS MAY BE */ -/* REPLACED BY THE NUMBER 0 IN THE CALLING SEQUENCE. THUS, USE OF */ -/* POWERS OF TWO CAN FREE A GOOD DEAL OF STORAGE. IF ANY DIMENSION */ -/* IS NOT A POWER OF TWO, THESE ARRAYS MUST BE SUPPLIED. THEY ARE */ -/* FLOATING POINT, ONE DIMENSIONAL OF LENGTH EQUAL TO THE LARGEST */ -/* ARRAY DIMENSION, THAT IS, TO THE LARGEST VALUE OF NN(I). */ -/* WORKR AND WORKI, IF SUPPLIED, MUST NOT BE THE SAME ARRAYS AS DATAR */ -/* OR DATAI. ALL SUBSCRIPTS OF ALL ARRAYS BEGIN AT 1. */ - -/* THERE ARE NO ERROR MESSAGES OR ERROR HALTS IN THIS PROGRAM. THE */ -/* PROGRAM RETURNS IMMEDIATELY IF NDIM OR ANY NN(I) IS LESS THAN ONE. */ - -/* PROGRAM MODIFIED FROM A SUBROUTINE OF BRENNER */ -/* 10-06-2000, MLR */ - - -void fourt(double *datar,double *datai, int nn[3], int ndim, int ifrwd, int icplx, double *workr,double *worki) -{ - int ifact[21],ntot,idim,np1,n,np2,m,ntwo,iff,idiv,iquot,irem,inon2,non2p,np0,nprev,icase,ifmin,i,j,jmax,np2hf,i2,i1max,i3,j3,i1,ifp1,ifp2,i2max,i1rng,istep,imin,imax,mmax,mmin,mstep,j1,j2max,j2,jmin,j3max,nhalf; - double theta,wstpr,wstpi,wminr,wmini,wr,wi,wtemp,thetm,wmstr,wmsti,twowr,sr,si,oldsr,oldsi,stmpr,stmpi,tempr,tempi,difi,difr,sumr,sumi,TWOPI = 6.283185307179586476925286766559; - - ntot = 1; - for (idim = 0; idim < ndim; idim++) { - ntot *= nn[idim]; - } - - /*main loop for each dimension*/ - np1 = 1; - for (idim = 1; idim <= ndim; idim++) { - n = nn[idim-1]; - np2 = np1*n; - - if (n < 1) { - goto L920; - } else if (n == 1) { - goto L900; - } - - /*is n a power of 2 and if not, what are its factors*/ - m = n; - ntwo = np1; - iff = 1; - idiv = 2; - - L10: - iquot = m/idiv; - irem = m-idiv*iquot; - if (iquot < idiv) - goto L50; - if (irem == 0) { - ntwo *= 2; - ifact[iff] = idiv; - iff++; - m= iquot; - goto L10; - } - idiv = 3; - inon2 = iff; - - L30: - iquot = m/idiv; - irem = m-idiv*iquot; - if (iquot < idiv) - goto L60; - if (irem == 0) { - ifact[iff] = idiv; - iff++; - m = iquot; - goto L30; - } - - idiv += 2; - goto L30; - - L50: - inon2 = iff; - if (irem != 0) - goto L60; - ntwo *= 2; - goto L70; - - L60: - ifact[iff] = m; - - L70: - non2p = np2/ntwo; - - - /*SEPARATE FOUR CASES-- - 1. COMPLEX TRANSFORM - 2. REAL TRANSFORM FOR THE 2ND, 3RD, ETC. DIMENSION. METHOD: TRANSFORM HALF THE DATA, SUPPLYING THE OTHER HALF BY CONJUGATE SYMMETRY. - 3. REAL TRANSFORM FOR THE 1ST DIMENSION, N ODD. METHOD: SET THE IMAGINARY PARTS TO ZERO. - 4. REAL TRANSFORM FOR THE 1ST DIMENSION, N EVEN. METHOD: TRANSFORM A COMPLEX ARRAY OF LENGTH N/2 WHOSE REAL PARTS ARE THE EVEN NUMBERED REAL VALUES AND WHOSE IMAGINARY PARTS ARE THE ODD-NUMBERED REAL VALUES. UNSCRAMBLE AND SUPPLY THE SECOND HALF BY CONJUGATE SYMMETRY. */ - - icase = 1; - ifmin = 1; - if (icplx != 0) - goto L100; - icase = 2; - if (idim > 1) - goto L100; - icase = 3; - if (ntwo <= np1) - goto L100; - icase = 4; - ifmin = 2; - ntwo /= 2; - n /= 2; - np2 /= 2; - ntot /= 2; - i = 1; - for (j = 1; j <= ntot; j++) { - datar[j] = datar[i]; - datai[j] = datar[i+1]; - i += 2; - } - - /*shuffle data by bit reversal, since n = 2^k. As the shuffling can be done by simple interchange, no working array is needed*/ - L100: - if (non2p > 1) - goto L200; - np2hf = np2/2; - j = 1; - for (i2 = 1; i2 <= np2; i2 += np1) { - if (j >= i2) - goto L130; - i1max = i2+np1-1; - for (i1 = i2; i1 <= i1max; i1++) { - for (i3 = i1; i3 <= ntot; i3 += np2) { - j3 = j+i3-i2; - tempr = datar[i3]; - tempi = datai[i3]; - datar[i3] = datar[j3]; - datai[i3] = datai[j3]; - datar[j3] = tempr; - datai[j3] = tempi; - } - } - - L130: - m = np2hf; - - L140: - if (j <= m) { - j += m; - } else { - j -= m; - m /= 2; - if (m >= np1) - goto L140; - } - - } - goto L300; - - /*shuffle data by digit reversal for general n*/ - L200: - for (i1 = 1; i1 <= np1; i1++) { - for (i3 = i1; i3 <= ntot; i3 += np2) { - j = i3; - for (i = 1; i <= n; i++) { - if (icase != 3) { - workr[i] = datar[j]; - worki[i] = datai[j]; - } else { - workr[i] = datar[j]; - worki[i] = 0.; - } - ifp2 = np2; - iff = ifmin; - L250: - ifp1 = ifp2/ifact[iff]; - j += ifp1; - if (j >= i3+ifp2) { - j -= ifp2; - ifp2 = ifp1; - iff += 1; - if (ifp2 > np1) - goto L250; - } - } - i2max = i3+np2-np1; - i = 1; - for (i2 = i3; i2 <= i2max; i2 += np1) { - datar[i2] = workr[i]; - datai[i2] = worki[i]; - i++; - } - - } - } - - /*special case-- W=1*/ - L300: - i1rng = np1; - if (icase == 2) - i1rng = np0*(1+nprev/2); - if (ntwo <= np1) - goto L600; - for (i1 = 1; i1 <= i1rng; i1++) { - imin = np1+i1; - istep = 2*np1; - goto L330; - - L310: - j = i1; - for (i = imin; i <= ntot; i += istep) { - tempr = datar[i]; - tempi = datai[i]; - datar[i] = datar[j]-tempr; - datai[i] = datai[j]-tempi; - datar[j] = datar[j]+tempr; - datai[j] = datai[j]+tempi; - j += istep; - } - imin = 2*imin-i1; - istep *= 2; - - L330: - if (istep <= ntwo) - goto L310; - - /*special case-- W = -sqrt(-1)*/ - imin = 3*np1+i1; - istep = 4*np1; - goto L420; - - L400: - j = imin-istep/2; - for (i = imin; i <= ntot; i += istep) { - if (ifrwd != 0) { - tempr = datai[i]; - tempi = -datar[i]; - } else { - tempr = -datai[i]; - tempi = datar[i]; - } - datar[i] = datar[j]-tempr; - datai[i] = datai[j]-tempi; - datar[j] += tempr; - datai[j] += tempi; - j += istep; - } - - imin = 2*imin-i1; - istep *= 2; - - L420: - if (istep <= ntwo) - goto L400; - } - - /*main loop for factors of 2. W=EXP(-2*PI*SQRT(-1)*m/mmax) */ - theta = -TWOPI/8.; - wstpr = 0.; - wstpi = -1.; - if (ifrwd == 0) { - theta = -theta; - wstpi = 1.; - } - mmax = 8*np1; - goto L540; - - L500: - wminr = cos(theta); - wmini = sin(theta); - wr = wminr; - wi = wmini; - mmin = mmax/2+np1; - mstep = np1*2; - for (m = mmin; m <= mmax; m += mstep) { - for (i1 = 1; i1 <= i1rng; i1++) { - istep = mmax; - imin = m+i1; - L510: - j = imin-istep/2; - for (i = imin; i <= ntot; i += istep) { - tempr = datar[i]*wr-datai[i]*wi; - tempi = datar[i]*wi+datai[i]*wr; - datar[i] = datar[j]-tempr; - datai[i] = datai[j]-tempi; - datar[j] += tempr; - datai[j] += tempi; - j += istep; - } - imin = 2*imin-i1; - istep *= 2; - if (istep <= ntwo) - goto L510; - } - wtemp = wr*wstpi; - wr = wr*wstpr-wi*wstpi; - wi = wi*wstpr+wtemp; - } - wstpr = wminr; - wstpi = wmini; - theta /= 2.; - mmax += mmax; - L540: - if (mmax <= ntwo) - goto L500; - - /*main loop for factors not equal to 2-- W=EXP(-2*PI*SQRT(-1)*(j2-i3)/ifp2)*/ - L600: - if (non2p <= 1) - goto L700; - ifp1 = ntwo; - iff = inon2; - L610: - ifp2 = ifact[iff]*ifp1; - theta = -TWOPI/ (double)ifact[iff]; - if (ifrwd == 0) - theta = -theta; - thetm = theta/ (double)(ifp1/np1); - wstpr = cos(theta); - wstpi = sin(theta); - wmstr = cos(thetm); - wmsti = sin(thetm); - wminr = 1.; - wmini = 0.; - - for (j1 = 1; j1 <= ifp1; j1 += np1) { - i1max = j1+i1rng-1; - for (i1 = j1; i1 <= i1max; i1++) { - for (i3 = i1; i3 <= ntot; i3 += np2) { - i = 1; - wr = wminr; - wi = wmini; - j2max = i3+ifp2-ifp1; - for (j2 = i3; j2 <= j2max; j2 += ifp1) { - twowr = 2.*wr; - jmin = i3; - j3max = j2+np2-ifp2; - for (j3 = j2 ; j3 <= j3max; j3 += ifp2) { - j = jmin+ifp2-ifp1; - sr = datar[j]; - si = datai[j]; - oldsr = 0.; - oldsi = 0.; - j -= ifp1; - L620: - stmpr = sr; - stmpi = si; - sr = twowr*sr-oldsr+datar[j]; - si = twowr*si-oldsi+datai[j]; - oldsr = stmpr; - oldsi = stmpi; - j -= ifp1; - if (j > jmin) - goto L620; - workr[i] = wr*sr-wi*si-oldsr+datar[j]; - worki[i] = wi*sr+wr*si-oldsi+datai[j]; - jmin += ifp2; - i++; - } - wtemp = wr*wstpi; - wr = wr*wstpr-wi*wstpi; - wi = wi*wstpr+wtemp; - } - i = 1; - for (j2 = i3; j2 <= j2max; j2 += ifp1) { - j3max = j2+np2-ifp2; - for (j3 = j2; j3 <= j3max; j3 += ifp2) { - datar[j3] = workr[i]; - datai[j3] = worki[i]; - i++; - } - } - } - } - wtemp = wminr*wmsti; - wminr = wminr*wmstr-wmini*wmsti; - wmini = wmini*wmstr+wtemp; - } - iff++; - ifp1 = ifp2; - if (ifp1 < np2) - goto L610; - - /*complete a real transform in the 1st dimension, n even, by conjugate symmetries*/ - L700: - switch (icase) { - case 1: - goto L900; - break; - case 2: - goto L800; - break; - case 3: - goto L900; - break; - } - - nhalf = n; - n += n; - theta = -TWOPI/ (double) n; - if (ifrwd == 0) - theta = -theta; - wstpr = cos(theta); - wstpi = sin(theta); - wr = wstpr; - wi = wstpi; - imin = 2; - jmin = nhalf; - goto L725; - L710: - j = jmin; - for (i = imin; i <= ntot; i += np2) { - sumr = (datar[i]+datar[j])/2.; - sumi = (datai[i]+datai[j])/2.; - difr = (datar[i]-datar[j])/2.; - difi = (datai[i]-datai[j])/2.; - tempr = wr*sumi+wi*difr; - tempi = wi*sumi-wr*difr; - datar[i] = sumr+tempr; - datai[i] = difi+tempi; - datar[j] = sumr-tempr; - datai[j] = tempi-difi; - j += np2; - } - imin++; - jmin--; - wtemp = wr*wstpi; - wr = wr*wstpr-wi*wstpi; - wi = wi*wstpr+wtemp; - L725: - if (imin < jmin) { - goto L710; - } else if (imin > jmin) { - goto L740; - } - if (ifrwd == 0) - goto L740; - for (i = imin; i <= ntot; i += np2) { - datai[i] = -datai[i]; - } - L740: - np2 *= 2; - ntot *= 2; - j = ntot+1; - imax = ntot/2+1; - L745: - imin = imax-nhalf; - i = imin; - goto L755; - L750: - datar[j] = datar[i]; - datai[j] = -datai[i]; - L755: - i++; - j--; - if (i < imax) - goto L750; - datar[j] = datar[imin]-datai[imin]; - datai[j] = 0.; - if (i >= j) { - goto L780; - } else { - goto L770; - } - L765: - datar[j] = datar[i]; - datai[j] = datai[i]; - L770: - i--; - j--; - if (i > imin) - goto L765; - datar[j] = datar[imin]+datai[imin]; - datai[j] = 0.; - imax = imin; - goto L745; - L780: - datar[1] += datai[1]; - datai[1] = 0.; - goto L900; - - /*complete a real transform for the 2nd, 3rd, ... dimension by conjugate symmetries*/ - L800: - if (nprev <= 2) - goto L900; - for (i3 = 1; i3 <= ntot; i3 += np2) { - i2max = i3+np2-np1; - for (i2 = i3; i2 <= i2max; i2 += np1) { - imax = i2+np1-1; - imin = i2+i1rng; - jmax = 2*i3+np1-imin; - if (i2 > i3) - jmax += np2; - if (idim > 2) { - j = jmax+np0; - for (i = imin; i <= imax; i++) { - datar[i] = datar[j]; - datai[i] = -datai[j]; - j--; - } - } - j = jmax; - for (i = imin; i <= imax; i += np0) { - datar[i] = datar[j]; - datai[i] = -datai[j]; - j -= np0; - } - } - } - - /*end of loop on each dimension*/ - L900: - np0 = np1; - np1 = np2; - nprev = n; - } - L920: - return; -} diff --git a/fftma_module/gen/sources/gammf.c b/fftma_module/gen/sources/gammf.c deleted file mode 100755 index 97ff3f9..0000000 --- a/fftma_module/gen/sources/gammf.c +++ /dev/null @@ -1,16 +0,0 @@ -#include -#include -#include "genlib.h" - - -/*gamma covariance function*/ -double gammf(double h, double alpha) -{ - float delta; - double z; - - delta = pow(20.,1./alpha)-1.; - z = 1./(double)(pow(1.+h*delta,alpha)); - return(z); -} - diff --git a/fftma_module/gen/sources/gasdev.c b/fftma_module/gen/sources/gasdev.c deleted file mode 100755 index a25dfa2..0000000 --- a/fftma_module/gen/sources/gasdev.c +++ /dev/null @@ -1,31 +0,0 @@ -#include -#include "genlib.h" - -#define NTAB 32 - -double gasdev(long *idum,long *idum2, long *iy, long iv[NTAB]) -/*returns a normally distributed deviate with 0 mean*/ -/*and unit variance, using ran2(idum) as the source */ -/*of uniform deviates */ -{ - double ran2(long *idum,long *idum2, long *iy, long iv[NTAB]); - static int iset = 0; - static double gset; - double fac,rsq,v1,v2; - - if (iset == 0) { - do { - v1 = 2.0*ran2(idum,idum2,iy,iv)-1.0; - v2 = 2.0*ran2(idum,idum2,iy,iv)-1.0; - rsq = v1*v1+v2*v2; - } while (rsq >= 1.0 || rsq == 0.0); - - fac = sqrt(-2.0*log(rsq)/rsq); - gset = v1*fac; - iset = 1; - return (v2*fac); - } else { - iset = 0; - return (gset); - } -} diff --git a/fftma_module/gen/sources/gaussian.c b/fftma_module/gen/sources/gaussian.c deleted file mode 100755 index 5ef9911..0000000 --- a/fftma_module/gen/sources/gaussian.c +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include -#include "genlib.h" - - -/*gaussian covariance function*/ -double gaussian(double h) -{ - return (exp(-3.*(double)(h*h))); -} diff --git a/fftma_module/gen/sources/generate.c b/fftma_module/gen/sources/generate.c deleted file mode 100755 index 46869d3..0000000 --- a/fftma_module/gen/sources/generate.c +++ /dev/null @@ -1,43 +0,0 @@ -#include -#include -#include "geostat.h" - - -/* GENERATION OF A GAUSSIAN WHITE NOISE VECTOR */ -/*input: */ -/* seed: seed */ -/* n: number of components in the vector */ -/*output: */ -/* realization: structure defining the realization*/ - -void generate(long *seed, int n, struct realization_mod *realization) -{ - int i; - long idum2 = 123456789,iy = 0; - long *iv; - int iset =0; - - iv = (long *) malloc(NTAB * sizeof(long)); - - /*negative seed*/ - if (*seed > 0.0) - *seed = -(*seed); - - /*realization definition*/ - (*realization).n = n; - (*realization).code = 0; - (*realization).vector = (double *) malloc(n * sizeof(double)); - if ((*realization).vector == NULL) { - printf("No memory available in generate"); - exit; - } - - /*Gaussian white noise generation*/ - for (i=0; i < n; i++) - (*realization).vector[i] = gasdev(seed,&idum2,&iy,iv,&iset); - - return; -} - - - diff --git a/fftma_module/gen/sources/genlib.c b/fftma_module/gen/sources/genlib.c deleted file mode 100755 index 1a106f6..0000000 --- a/fftma_module/gen/sources/genlib.c +++ /dev/null @@ -1,63 +0,0 @@ -/* - * File: genlib.c - * Version: 1.0 - * Last modified on Fri Jul 15 15:45:52 1994 by eroberts - * ----------------------------------------------------- - * This file implements the general C library package. See the - * interface description in genlib.h for details. - */ - -#include -#include -#include -#include - -#include "genlib.h" - -/* - * Constants: - * ---------- - * ErrorExitStatus -- Status value used in exit call - */ - -#define ErrorExitStatus 1 - -/* Section 1 -- Define new "primitive" types */ - -/* - * Constant: UNDEFINED - * ------------------- - * This entry defines the target of the UNDEFINED constant. - */ - -char undefined_object[] = "UNDEFINED"; - -/* Section 2 -- Memory allocation */ - -void *GetBlock(size_t nbytes) -{ - void *result; - - result = malloc(nbytes); - if (result == NULL) Error("No memory available"); - return (result); -} - -void FreeBlock(void *ptr) -{ - free(ptr); -} - -/* Section 3 -- Basic error handling */ - -void Error(string msg, ...) -{ - va_list args; - - va_start(args, msg); - fprintf(stderr, "Error: "); - vfprintf(stderr, msg, args); - fprintf(stderr, "\n"); - va_end(args); - exit(ErrorExitStatus); -} diff --git a/fftma_module/gen/sources/inputdata.c b/fftma_module/gen/sources/inputdata.c deleted file mode 100755 index 259f1dd..0000000 --- a/fftma_module/gen/sources/inputdata.c +++ /dev/null @@ -1,122 +0,0 @@ -#include -#include -#include -#include -#include -#include "genlib.h" -#include "simpio.h" -#include "geostat.h" -#include "toolsIO.h" - - - -/* Inputdata */ -/* */ -/* input data needed for realizations*/ -/* seed: seed */ -/* grid: structure defining the actual grid */ -/* filename: name of files */ -/* variogram: struture defining the variogram model */ -/* stat: struture defining the mean and the variance of permeability realization */ -/* pression: structure defining the gradient pressure */ - -void inputdata(long *seed,struct grid_mod *grid,string filename[7],struct vario_mod *variogram,struct statistic_mod *stat,struct pressure_mod *pression) -{ - int i,j; - - - /*seed*/ - printf("Starting seed (integer): \n"); - *seed = GetInteger(); - - /*Grid description*/ - printf("Number of cells along the X axis: \n"); - (*grid).NX = GetInteger(); - printf("Number of cells along the Y axis: \n"); - (*grid).NY = GetInteger(); - printf("Number of cells along the Z axis: \n"); - (*grid).NZ = GetInteger(); - printf("cell length along the X axis: \n"); - (*grid).DX = GetReal(); - printf("cell length along the Y axis: \n"); - (*grid).DY = GetReal(); - printf("cell length along the Z axis: \n"); - (*grid).DZ = GetReal(); - - /*output file*/ - printf("output filename for Gaussian white noise: \n"); - filename[0] = GetLine(); - - /*variogram description*/ - printf("Number of structures for the variogram: \n"); - (*variogram).Nvario = GetInteger(); - (*variogram).vario = (int *) malloc((*variogram).Nvario * sizeof(int)); - (*variogram).alpha = (double *) malloc((*variogram).Nvario * sizeof(double)); - (*variogram).ap = (double *) malloc(9*(*variogram).Nvario * sizeof(double)); - (*variogram).scf = (double *) malloc(3*(*variogram).Nvario * sizeof(double)); - (*variogram).var = (double *) malloc((*variogram).Nvario * sizeof(double)); - for (i= 0; i < (*variogram).Nvario; i++) { - printf("i %d\n",i); - printf("Weight: \n"); - (*variogram).var[i] = GetReal(); - printf("Type of variogram: \n"); - (*variogram).vario[i] = GetInteger(); - printf("Exponent: \n"); - (*variogram).alpha[i] = GetReal(); - printf("Correlation lengths (3): \n"); - for (j = 0; j < 3; j++) - (*variogram).scf[i*3+j]=GetReal(); - printf("Coordinates of the first two main axes (first axis first, then second): \n"); - for (j = 0; j < 6; j++) - (*variogram).ap[i*9+j] = GetReal(); - } - - /*statistical data*/ - (*stat).nblock_mean = 1; - (*stat).nblock_var = 1; - (*stat).mean = (double *)malloc((*stat).nblock_mean * sizeof(double)); - if ((*stat).mean == NULL) - Error("No memory available"); - (*stat).variance = (double *)malloc((*stat).nblock_var * sizeof(double)); - if ((*stat).variance == NULL) - Error("No memory available"); - printf("Mean of the output realization: \n"); - (*stat).mean[0] = GetReal(); - printf("Variance of the output realization: \n"); - (*stat).variance[0] = GetReal(); - printf("Structure of the field (0-normal case 1-lognormal case 2-log10 case) : \n"); - (*stat).type = GetInteger(); - - /*output file*/ - printf("output filename for permeability realization: \n"); - filename[1] = GetLine(); - - /*Pressure data*/ - printf("Macroscopic pressure gradient in x direction: \n"); - (*pression).x = GetReal(); - printf("Macroscopic pressure gradient in y direction: \n"); - (*pression).y = GetReal(); - printf("Macroscopic pressure gradient in z direction: \n"); - (*pression).z = GetReal(); - - - /*output pressure file*/ - printf("output filename for pressure realization: \n"); - filename[2] = GetLine(); - - /*output pressure totale file*/ - printf("output filename for total pressure realization: \n"); - filename[3] = GetLine(); - - /*output x-velocity file*/ - printf("output filename for x-velocity realization: \n"); - filename[4] = GetLine(); - /*output y-velocity file*/ - printf("output filename for y-velocity realization: \n"); - filename[5] = GetLine(); - /*output z-velocity file*/ - printf("output filename for z-velocity realization: \n"); - filename[6] = GetLine(); - - return; -} diff --git a/fftma_module/gen/sources/inputfiledata.c b/fftma_module/gen/sources/inputfiledata.c deleted file mode 100755 index 404d482..0000000 --- a/fftma_module/gen/sources/inputfiledata.c +++ /dev/null @@ -1,71 +0,0 @@ -#include -#include -#include -#include -#include -#include "genlib.h" -#include "simpio.h" -#include "geostat.h" -#include "toolsIO.h" - -void inputfiledata(string inputfile,long *seed,struct grid_mod *grid,string filename[7],struct vario_mod *variogram,struct statistic_mod *stat,struct pressure_mod *pression) -{ - FILE *fp; - int i,j; - - fp=fopen(inputfile,"r"); - if(fp== NULL) - { - printf("Erreur d'ouverture du fichier\n"); - exit(0); - } - *seed=atoi(ReadLine(fp)); - (*grid).NX = atoi(ReadLine(fp)); - (*grid).NY = atoi(ReadLine(fp)); - (*grid).NZ = atoi(ReadLine(fp)); - (*grid).DX = atof(ReadLine(fp)); - (*grid).DY = atof(ReadLine(fp)); - (*grid).DZ = atof(ReadLine(fp)); - filename[0] = ReadLine(fp); - (*variogram).Nvario = atoi(ReadLine(fp)); - - (*variogram).vario = (int *) malloc((*variogram).Nvario * sizeof(int)); - (*variogram).alpha = (double *) malloc((*variogram).Nvario * sizeof(double)); - (*variogram).ap = (double *) malloc(9*(*variogram).Nvario * sizeof(double)); - (*variogram).scf = (double *) malloc(3*(*variogram).Nvario * sizeof(double)); - (*variogram).var = (double *) malloc((*variogram).Nvario * sizeof(double)); - for (i= 0; i < (*variogram).Nvario; i++) { - (*variogram).var[i] = atof(ReadLine(fp)); - (*variogram).vario[i] = atoi(ReadLine(fp)); - (*variogram).alpha[i] = atof(ReadLine(fp)); - for (j = 0; j < 3; j++) - (*variogram).scf[i*3+j]= atof(ReadLine(fp)); - for (j = 0; j < 6; j++) - (*variogram).ap[i*9+j] = atof(ReadLine(fp)); - } - /*statistical data*/ - (*stat).nblock_mean = 1; - (*stat).nblock_var = 1; - (*stat).mean = (double *)malloc((*stat).nblock_mean * sizeof(double)); - if ((*stat).mean == NULL) - Error("No memory available"); - (*stat).variance = (double *)malloc((*stat).nblock_var * sizeof(double)); - if ((*stat).variance == NULL) - Error("No memory available"); - - (*stat).mean[0] = atof(ReadLine(fp)); - (*stat).variance[0] = atof(ReadLine(fp)); - (*stat).type = atoi(ReadLine(fp)); - - filename[1] = ReadLine(fp); - (*pression).x = atof(ReadLine(fp)); - (*pression).y = atof(ReadLine(fp)); - (*pression).z = atof(ReadLine(fp)); - filename[2] = ReadLine(fp); - filename[3] = ReadLine(fp); - filename[4] = ReadLine(fp); - filename[5] = ReadLine(fp); - filename[6] = ReadLine(fp); - fclose(fp); - return; -} diff --git a/fftma_module/gen/sources/kgeneration.c b/fftma_module/gen/sources/kgeneration.c deleted file mode 100755 index 633e4c8..0000000 --- a/fftma_module/gen/sources/kgeneration.c +++ /dev/null @@ -1,79 +0,0 @@ -#include -#include -#include -#include -#include -#include "genlib.h" -#include "simpio.h" -#include "geostat.h" -#include "toolsIO.h" -#include "toolsFFTMA.h" - -/* kgeneration */ -/* Z is the GWN with 0-mean and 1-variance */ -/* Y1 is the realization with 0-mean and variance wanted */ -/* Y is the realization with mean and variance wanted */ - -void kgeneration(long seed,struct grid_mod grid,struct statistic_mod stat,struct vario_mod variogram,string filename[7],struct realization_mod *Z,struct realization_mod *Y,struct realization_mod *Y1, int n[3], int *genere, int *gwnwrite, struct realization_mod *gwnoise) - { - int i,N; - int typelog; - string file1,file2; - - /*generate Gaussian white noise*/ - N = grid.NX*grid.NY*grid.NZ; - n[0] = 0; - n[1] = 0; - n[2] = 0; - printf("\n\n\n"); - - switch (*genere) - { - case 0: - generate(&seed,N,Z); - /*save the Gaussian white noise file*/ - if (*gwnwrite == 0) - { - writefile(filename[0],Z); - } - break; - case 1: - (*Z).vector=(double *) malloc(N*sizeof(double)); - (*Z).n = N; - for (i=0;i -#include -#include -#include -#include -#include "genlib.h" -#include "simpio.h" -#include "geostat.h" -#include "toolsIO.h" -#include "toolsFFTMA.h" - -/* kgeneration */ -/* Z is the GWN with 0-mean and 1-variance */ -/* Y1 is the realization with 0-mean and variance wanted */ -/* Y is the realization with mean and variance wanted */ - -void kgeneration2(long seed,struct grid_mod grid,struct statistic_mod stat,struct vario_mod variogram,string filename[7],struct realization_mod *Z,struct realization_mod *Y,struct realization_mod *Y1, int n[3], int *genere, int *gwnwrite, struct realization_mod *gwnoise,int *format_file) - { - int i,N; - int typelog; - string file1,file2; - - /*generate Gaussian white noise*/ - N = grid.NX*grid.NY*grid.NZ; - n[0] = 0; - n[1] = 0; - n[2] = 0; - printf("\n\n\n"); - - switch (*genere) - { - case 0: - generate(&seed,N,Z); - /*save the Gaussian white noise file*/ - if (*gwnwrite == 0) - { - writefile(filename[0],Z); - } - break; - case 1: - (*Z).vector=(double *) malloc(N*sizeof(double)); - (*Z).n = N; - for (i=0;i - -/* compute the length for one dimension*/ -int length(int N, int i, double *scf, double *ap, double D, int Nvari) -{ - int maxfactor(int n); - double temp1, temp2; - int n, j, k, nmax; - int nlimit = 13; - - if (N == 1) { - n = 1; - } else { - - for (k = 0; k < Nvari; k++) { - temp1 = fabs(ap[9*k+i])*scf[3*k]*scf[3*k]; - for (j = 1; j <3; j++) { - temp2 = fabs(ap[9*k+3*j+i])*scf[3*k+j]*scf[3*k+j]; - if (temp2 > temp1) - temp1 = temp2; - } - } - temp1 = sqrt(temp1); - temp1 /= (double)D; - if ((double)N/temp1 < 2.) { - n = N+(int)(2*temp1); - } else { - n = N+(int)temp1; - } - if ((n % 2) != 0) - n = n+1; - nmax = maxfactor(n); - while (nmax > nlimit) { - n += 2; - nmax = maxfactor(n); - } - } - return (n); -} diff --git a/fftma_module/gen/sources/mat_vec.c b/fftma_module/gen/sources/mat_vec.c deleted file mode 100755 index 831121b..0000000 --- a/fftma_module/gen/sources/mat_vec.c +++ /dev/null @@ -1,33 +0,0 @@ -/*calculates C.x/ -/* C : symetric positive-definite matrix recorded */ -/* (per raws) as a vector with only components */ -/* Cij so that j <= i, i = [0...n-1]*/ -/* x : vector, xi avec i = [0...n-1]*/ -/* b : vector, bi avec i = [0...n-1]*/ -/* n : dimension of matrix Cij*/ -/* */ -/* The solution vector is returned in b*/ - -void mat_vec(double *C, double *x, double *b, int n) - -{ - int i,k,l; - double temp; - - for (i = 0; i < n; i++) { - temp = 0.; - - for (k = 0; k < n; k++) { - if ( k <= i ) { - l = k+i*(i+1)/2; - } else { - l = i+k*(k+1)/2; - } - temp += C[l]*x[k]; - } - - b[i] = temp; - } - - return; -} diff --git a/fftma_module/gen/sources/maxfactor.c b/fftma_module/gen/sources/maxfactor.c deleted file mode 100755 index 842cd8b..0000000 --- a/fftma_module/gen/sources/maxfactor.c +++ /dev/null @@ -1,35 +0,0 @@ -#include "genlib.h" - -/*determines the greatest prime factor of an integer*/ -int maxfactor(int n) -{ - int test_fact(int *pnum, int fact, int *pmaxfac); - int lnum, fact; - int maxfac; - - maxfac = 1; - lnum = n; - - if ( lnum != 0 && lnum != 1 ) { - fact = 2; - if ( test_fact( &lnum, fact,&maxfac)) { - fact = 3; - if ( test_fact( &lnum, fact,&maxfac)) { - fact = 5; - for (;;) { - if (!test_fact( &lnum, fact,&maxfac)) - break; - fact += 2; - if (!test_fact( &lnum, fact,&maxfac)) - break; - fact += 4; - } - } - } - if ( lnum != 1 ) { - if (lnum > maxfac) - maxfac = lnum; - } - } - return (maxfac); -} diff --git a/fftma_module/gen/sources/nor2log.c b/fftma_module/gen/sources/nor2log.c deleted file mode 100755 index 44b6568..0000000 --- a/fftma_module/gen/sources/nor2log.c +++ /dev/null @@ -1,78 +0,0 @@ -#include -#include -#include "geostat.h" - - -/*TURNS NORMAL NUMBERS INTO LOGNORMAL NUMBERS */ -/*input: */ -/*realin: structure defining a realization - */ -/* normal numbers */ -/*typelog: --> 3: lognormal (natural) */ -/* --> 4: lognormal (log10) */ -/*output: */ -/*realout: structure defining a realization - */ -/* lognormal numbers */ - -void nor2log(struct realization_mod *realin, int typelog, struct realization_mod *realout) -{ - - int i; - double coeff; - - - coeff = log(10.0); - - - /*Is the output realization allocated ?*/ - /*is its length equal to realin.n?*/ - if ((*realout).vector == NULL || (*realout).n != (*realin).n) { - (*realout).vector = (double *) malloc((*realin).n * sizeof(double)); - if ((*realout).vector == NULL) { - printf("No memory available"); - return; - } - } - (*realout).n = (*realin).n; - - - switch ((*realin).code) { - case 0: - case 1: - case 2: - (*realout).code = typelog; - break; - case 6: - case 7: - if (typelog == 3) { - (*realout).code = 8; - } else if (typelog == 4) { - (*realout).code = 9; - } - break; - default: - printf("Input is not normal in nor2log"); - return; - break; - } - - - /*anamorphose*/ - for (i = 0; i < (*realin).n; i++) { - switch (typelog) { - case 3: - /*natural logarithm*/ - (*realout).vector[i] = exp((*realin).vector[i]); - break; - case 4: - /*log10*/ - (*realout).vector[i] = exp((*realin).vector[i]*coeff); - break; - default: - printf("Unexpected case in nor2log"); - return; - break; - } - } - - return; -} diff --git a/fftma_module/gen/sources/nugget.c b/fftma_module/gen/sources/nugget.c deleted file mode 100755 index cda4929..0000000 --- a/fftma_module/gen/sources/nugget.c +++ /dev/null @@ -1,14 +0,0 @@ -#include -#include -#include "genlib.h" - - -/*nugget covariance function*/ -double nugget(double h) -{ - if (h == 0) { - return (1.); - } else { - return(0.); - } -} diff --git a/fftma_module/gen/sources/pgeneration.c b/fftma_module/gen/sources/pgeneration.c deleted file mode 100755 index 18e1abb..0000000 --- a/fftma_module/gen/sources/pgeneration.c +++ /dev/null @@ -1,48 +0,0 @@ -#include -#include -#include -#include -#include -#include "genlib.h" -#include "simpio.h" -#include "geostat.h" -#include "pressure.h" -#include "toolsIO.h" - -void pgeneration(int n[3],struct grid_mod grid,struct statistic_mod stat,struct vario_mod variogram,string filename[7],struct pressure_mod pression,struct realization_mod *Y,struct realization_mod *P,struct realization_mod *VX,struct realization_mod *VY,struct realization_mod *VZ, int solver) - { - int i,ntot; - struct realization_mod GP; - - FFTPressure(n,grid,Y,stat,pression,P,VX,VY,VZ,solver); - /*save the delta-pressure realization*/ - writefile(filename[2],P); - - total_pressure(grid,pression,P); - - total_velocity(grid,stat.mean[0],1,pression,VX); - total_velocity(grid,stat.mean[0],2,pression,VY); - total_velocity(grid,stat.mean[0],3,pression,VZ); - - /*save the total pressure realization*/ - writefile(filename[3],P); - /*save the x-velocity realization*/ - writefile(filename[4],VX); - /*save the y-velocity realization*/ - writefile(filename[5],VY); - /*save the z-velocity realization*/ - writefile(filename[6],VZ); - - ntot=grid.NX*grid.NY*grid.NZ; - GP.vector = (double *) malloc(ntot * sizeof(double)); - testmemory(GP.vector); - GP.n= ntot-1; - for (i = 0; i < ntot-1; i++) - { - GP.vector[i]=(*P).vector[i]-(*P).vector[i-1]; - } - /*save the pressure gradient realization*/ - writefile(filename[7],&GP); - - return; - } diff --git a/fftma_module/gen/sources/pgeneration2.c b/fftma_module/gen/sources/pgeneration2.c deleted file mode 100755 index 323e45e..0000000 --- a/fftma_module/gen/sources/pgeneration2.c +++ /dev/null @@ -1,101 +0,0 @@ -#include -#include -#include -#include -#include -#include "genlib.h" -#include "simpio.h" -#include "geostat.h" -#include "pressure.h" -#include "toolsIO.h" - -void pgeneration2(int n[3],struct grid_mod grid,struct statistic_mod stat,struct vario_mod variogram,string filename[7], - struct pressure_mod pression,struct realization_mod *Y,struct realization_mod *P, - struct realization_mod *VX,struct realization_mod *VY,struct realization_mod *VZ, int solver, int format_file) - { - int i,ntot; - struct realization_mod GP; - - FFTPressure(n,grid,Y,stat,pression,P,VX,VY,VZ,solver); - - /*save the delta-pressure realization*/ - switch (format_file) - { - case 0: - writefile(filename[2],P); - break; - case 1: - writefile_bin(filename[2],P); - break; - } - - total_pressure(grid,pression,P); - total_velocity(grid,stat.mean[0],1,pression,VX); - total_velocity(grid,stat.mean[0],2,pression,VY); - total_velocity(grid,stat.mean[0],3,pression,VZ); - - /*save the total pressure realization*/ - switch (format_file) - { - case 0: - writefile(filename[3],P); - break; - case 1: - writefile_bin(filename[3],P); - break; - } - - /*save the x-velocity realization*/ - switch (format_file) - { - case 0: - writefile(filename[4],VX); - break; - case 1: - writefile_bin(filename[4],VX); - break; - } - - /*save the y-velocity realization*/ - switch (format_file) - { - case 0: - writefile(filename[5],VY); - break; - case 1: - writefile_bin(filename[5],VY); - break; - } - /*save the z-velocity realization*/ - switch (format_file) - { - case 0: - writefile(filename[6],VZ); - break; - case 1: - writefile_bin(filename[6],VZ); - break; - } - - ntot=grid.NX*grid.NY*grid.NZ; - GP.vector = (double *) malloc(ntot * sizeof(double)); - testmemory(GP.vector); - GP.n= ntot-1; - for (i = 0; i < ntot-1; i++) - { - GP.vector[i]=(*P).vector[i]-(*P).vector[i-1]; - } - - /*save the pressure gradient realization*/ - switch (format_file) - { - case 0: - writefile(filename[7],&GP); - break; - case 1: - writefile_bin(filename[7],&GP); - break; - } - - return; - } diff --git a/fftma_module/gen/sources/power.c b/fftma_module/gen/sources/power.c deleted file mode 100755 index 88281f6..0000000 --- a/fftma_module/gen/sources/power.c +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include -#include "genlib.h" - - -/*power covariance function*/ -double power(double h, double alpha) -{ - return(pow(h,alpha)); -} diff --git a/fftma_module/gen/sources/prebuild_gwn.c b/fftma_module/gen/sources/prebuild_gwn.c deleted file mode 100755 index 447e9e7..0000000 --- a/fftma_module/gen/sources/prebuild_gwn.c +++ /dev/null @@ -1,54 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include "geostat.h" - -/* prebuild_gwn */ -/* Produce a first construction in real space of the Gaussian white noise */ -/* grid: structure defining the grid */ -/*n: vector with the number of cells along the */ -/* X, Y and Z axes for the underlying grid */ -/* i = [0 1 2] */ -/* --> 0 0 0 : n will be computed and */ -/* updated as output */ -/* --> nx ny nz: these dimensions are used */ -/*realin: structure defining a realization - */ -/* must be a Gaussian white noise */ -/*realization: structure defining a realization*/ - -void prebuild_gwn(struct grid_mod grid,int n[3],struct realization_mod *realin,double *realization,int solver) - - { - int i,j,k,maille0,maille1; - int ntot; - - ntot=n[0]*n[1]*n[2]; - realization[0]=0.; - if (solver==1) - { - for (i=0;i= 0; j--) { - k = (*idum)/IQ1; - *idum = IA1*(*idum-k*IQ1)-k*IR1; - if (*idum < 0) *idum += IM1; - if (j < NTAB) iv[j] = *idum; - } - *iy = iv[0]; - } - - k = (*idum)/IQ1; - *idum = IA1*(*idum-k*IQ1)-k*IR1; - if (*idum < 0) *idum += IM1; - k = *idum2/IQ2; - *idum2 = IA2*(*idum2-k*IQ2)-k*IR2; - if (*idum2 < 0) *idum2 += IM2; - j = (*iy)/NDIV; - *iy = iv[j]-(*idum2); - iv[j] = *idum; - if (*iy < 1) (*iy) += IMM1; - if ((temp = AM*(*iy)) > RNMX) return (RNMX); - else return (temp); -} diff --git a/fftma_module/gen/sources/random.c b/fftma_module/gen/sources/random.c deleted file mode 100755 index 696312d..0000000 --- a/fftma_module/gen/sources/random.c +++ /dev/null @@ -1,77 +0,0 @@ -/* - * File: random.c - * Version: 1.0 - * Last modified on Mon Sep 13 10:42:45 1993 by eroberts - * ----------------------------------------------------- - * This file implements the random.h interface. - */ - -#include -#include -#include - -#include "genlib.h" -#include "random.h" - -/* - * Function: Randomize - * ------------------- - * This function operates by setting the random number - * seed to the current time. The srand function is - * provided by the library and requires an - * integer argument. The time function is provided - * by . - */ - -void Randomize(void) -{ - srand((int) time(NULL)); -} - -/* - * Function: RandomInteger - * ----------------------- - * This function first obtains a random integer in - * the range [0..RAND_MAX] by applying four steps: - * (1) Generate a real number between 0 and 1. - * (2) Scale it to the appropriate range size. - * (3) Truncate the value to an integer. - * (4) Translate it to the appropriate starting point. - */ - -int RandomInteger(int low, int high) -{ - int k; - double d; - - d = (double) rand() / ((double) RAND_MAX + 1); - k = (int) (d * (high - low + 1)); - return (low + k); -} - -/* - * Function: RandomReal - * -------------------- - * The implementation of RandomReal is similar to that - * of RandomInteger, without the truncation step. - */ - -double RandomReal(double low, double high) -{ - double d; - - d = (double) rand() / ((double) RAND_MAX + 1); - return (low + d * (high - low)); -} - -/* - * Function: RandomChance - * ---------------------- - * This function uses RandomReal to generate a number - * between 0 and 100, which it then compares to p. - */ - -bool RandomChance(double p) -{ - return (RandomReal(0, 1) < p); -} diff --git a/fftma_module/gen/sources/readdata.c b/fftma_module/gen/sources/readdata.c deleted file mode 100755 index 3a70123..0000000 --- a/fftma_module/gen/sources/readdata.c +++ /dev/null @@ -1,204 +0,0 @@ -#include -#include -#include -#include -#include -#include "genlib.h" -#include "simpio.h" -#include "geostat.h" -#include "pressure.h" -#include "toolsIO.h" - - -void readdata(long *seed,struct grid_mod *grid,string filename[8],struct vario_mod *variogram,struct statistic_mod *stat,struct pressure_mod *pression,int *Ksolver,int *genere, int *gwnwrite, struct realization_mod *Kfield,struct realization_mod *gwnoise, char *argv[]) -{ - FILE *fp; - int i,j,n; - char *file1,*file2,*file3,*file4,*file5; - char *prog=argv[0]; - double tmp; - - file1=argv[1]; - file2=argv[2]; - - /* Ouverture du fichier de données principal */ - - if ((fp=fopen(file1,"r")) == NULL) - { - fprintf(stderr,"%s :impossible d'ouvrir %s\n",prog, file1); - exit(1); - } - else - { - *Ksolver = atoi(ReadLine(fp)); - *genere = atoi(ReadLine(fp)); - *gwnwrite = atoi(ReadLine(fp)); - if (*gwnwrite==0) - { - filename[0] = ReadLine(fp); - } - (*grid).NX = atoi(ReadLine(fp)); - (*grid).NY = atoi(ReadLine(fp)); - (*grid).NZ = atoi(ReadLine(fp)); - (*grid).DX = atof(ReadLine(fp)); - (*grid).DY = atof(ReadLine(fp)); - (*grid).DZ = atof(ReadLine(fp)); - - fclose(fp); - } - n=(*grid).NX*(*grid).NY*(*grid).NZ; - -/* Ouverture du fichier de données sur le champ de perméabilité */ - - if ((fp=fopen(file2,"r")) == NULL) - { - fprintf(stderr,"%s :impossible d'ouvrir %s\n",prog, file2); - exit(1); - } - else - { - *seed=atoi(ReadLine(fp)); - (*variogram).Nvario = atoi(ReadLine(fp)); - (*variogram).vario = (int *) malloc((*variogram).Nvario * sizeof(int)); - (*variogram).alpha = (double *) malloc((*variogram).Nvario * sizeof(double)); - (*variogram).ap = (double *) malloc(9*(*variogram).Nvario * sizeof(double)); - (*variogram).scf = (double *) malloc(3*(*variogram).Nvario * sizeof(double)); - (*variogram).var = (double *) malloc((*variogram).Nvario * sizeof(double)); - for (i= 0; i < (*variogram).Nvario; i++) { - (*variogram).var[i] = atof(ReadLine(fp)); - (*variogram).vario[i] = atoi(ReadLine(fp)); - (*variogram).alpha[i] = atof(ReadLine(fp)); - for (j = 0; j < 3; j++) - (*variogram).scf[i*3+j]= atof(ReadLine(fp)); - for (j = 0; j < 6; j++) - (*variogram).ap[i*9+j] = atof(ReadLine(fp)); - } - /*statistical data*/ - (*stat).nblock_mean = 1; - (*stat).nblock_var = 1; - (*stat).mean = (double *)malloc((*stat).nblock_mean * sizeof(double)); - if ((*stat).mean == NULL) - Error("No memory available"); - (*stat).variance = (double *)malloc((*stat).nblock_var * sizeof(double)); - if ((*stat).variance == NULL) - Error("No memory available"); - - (*stat).mean[0] = atof(ReadLine(fp)); - (*stat).variance[0] = atof(ReadLine(fp)); - (*stat).type = atoi(ReadLine(fp)); - - filename[1] = ReadLine(fp); - fclose(fp); - } - - switch (*Ksolver) - { - case 0: - /* Ouverture du fichier contenant le gaussian white noise */ - if (*genere == 1) - { - file3=argv[3]; - if ((fp=fopen(file3,"r")) == NULL) - { - fprintf(stderr,"%s :impossible d'ouvrir %s\n",prog, file3); - exit(1); - } - else - { - /* Ouverture du champ de permeabilite K */ - (*gwnoise).vector = (double *) malloc(n * sizeof(double)); - for (i=0;i -#include -#include -#include -#include -#include "genlib.h" -#include "simpio.h" -#include "geostat.h" -#include "pressure.h" -#include "toolsIO.h" - - -void readdata2(long *seed,struct grid_mod *grid,string filename[8],struct vario_mod *variogram,struct statistic_mod *stat,struct pressure_mod *pression,int *Ksolver,int *genere, int *gwnwrite, int *format_file, struct realization_mod *Kfield,struct realization_mod *gwnoise, char *argv[]) -{ - FILE *fp; - int i,j,n; - char *file1,*file2,*file3,*file4,*file5; - char *prog=argv[0]; - double tmp; - - file1=argv[1]; - file2=argv[2]; - - /* Ouverture du fichier de données principal */ - - if ((fp=fopen(file1,"r")) == NULL) - { - fprintf(stderr,"%s :impossible d'ouvrir %s\n",prog, file1); - exit(1); - } - else - { - *Ksolver = atoi(ReadLine(fp)); - *genere = atoi(ReadLine(fp)); - *gwnwrite = atoi(ReadLine(fp)); - if (*gwnwrite==0) - { - filename[0] = ReadLine(fp); - } - *format_file=atoi(ReadLine(fp)); - (*grid).NX = atoi(ReadLine(fp)); - (*grid).NY = atoi(ReadLine(fp)); - (*grid).NZ = atoi(ReadLine(fp)); - (*grid).DX = atof(ReadLine(fp)); - (*grid).DY = atof(ReadLine(fp)); - (*grid).DZ = atof(ReadLine(fp)); - - fclose(fp); - } - n=(*grid).NX*(*grid).NY*(*grid).NZ; - -/* Ouverture du fichier de données sur le champ de perméabilité */ - - if ((fp=fopen(file2,"r")) == NULL) - { - fprintf(stderr,"%s :impossible d'ouvrir %s\n",prog, file2); - exit(1); - } - else - { - *seed=atoi(ReadLine(fp)); - (*variogram).Nvario = atoi(ReadLine(fp)); - (*variogram).vario = (int *) malloc((*variogram).Nvario * sizeof(int)); - (*variogram).alpha = (double *) malloc((*variogram).Nvario * sizeof(double)); - (*variogram).ap = (double *) malloc(9*(*variogram).Nvario * sizeof(double)); - (*variogram).scf = (double *) malloc(3*(*variogram).Nvario * sizeof(double)); - (*variogram).var = (double *) malloc((*variogram).Nvario * sizeof(double)); - for (i= 0; i < (*variogram).Nvario; i++) { - (*variogram).var[i] = atof(ReadLine(fp)); - (*variogram).vario[i] = atoi(ReadLine(fp)); - (*variogram).alpha[i] = atof(ReadLine(fp)); - for (j = 0; j < 3; j++) - (*variogram).scf[i*3+j]= atof(ReadLine(fp)); - for (j = 0; j < 6; j++) - (*variogram).ap[i*9+j] = atof(ReadLine(fp)); - } - /*statistical data*/ - (*stat).nblock_mean = 1; - (*stat).nblock_var = 1; - (*stat).mean = (double *)malloc((*stat).nblock_mean * sizeof(double)); - if ((*stat).mean == NULL) - Error("No memory available"); - (*stat).variance = (double *)malloc((*stat).nblock_var * sizeof(double)); - if ((*stat).variance == NULL) - Error("No memory available"); - - (*stat).mean[0] = atof(ReadLine(fp)); - (*stat).variance[0] = atof(ReadLine(fp)); - (*stat).type = atoi(ReadLine(fp)); - - filename[1] = ReadLine(fp); - fclose(fp); - } - - switch (*Ksolver) - { - case 0: - /* Ouverture du fichier contenant le gaussian white noise */ - if (*genere == 1) - { - file3=argv[3]; - if ((fp=fopen(file3,"r")) == NULL) - { - fprintf(stderr,"%s :impossible d'ouvrir %s\n",prog, file3); - exit(1); - } - else - { - /* Ouverture du champ de permeabilite K */ - (*gwnoise).vector = (double *) malloc(n * sizeof(double)); - for (i=0;i -#include -#include -#include -#include -#include "genlib.h" -#include "simpio.h" -#include "geostat.h" -#include "pressure.h" -#include "toolsIO.h" - - -void readdata3(long *seed,struct grid_mod *grid,string filename[8],struct vario_mod *variogram,struct statistic_mod *stat,struct pressure_mod *pression,int *Ksolver,int *genere, int *gwnwrite, int *format_file,int *Psolver, struct realization_mod *Kfield,struct realization_mod *gwnoise, char *argv[]) -{ - FILE *fp; - int i,j,n; - char *file1,*file2,*file3,*file4,*file5; - char *prog=argv[0]; - double tmp; - - file1=argv[1]; - file2=argv[2]; - - /* Ouverture du fichier de données principal */ - - if ((fp=fopen(file1,"r")) == NULL) - { - fprintf(stderr,"%s :impossible d'ouvrir %s\n",prog, file1); - exit(1); - } - else - { - *Ksolver = atoi(ReadLine(fp)); - *genere = atoi(ReadLine(fp)); - *gwnwrite = atoi(ReadLine(fp)); - if (*gwnwrite==0) - { - filename[0] = ReadLine(fp); - } - *format_file=atoi(ReadLine(fp)); - *Psolver=atoi(ReadLine(fp)); - (*grid).NX = atoi(ReadLine(fp)); - (*grid).NY = atoi(ReadLine(fp)); - (*grid).NZ = atoi(ReadLine(fp)); - (*grid).DX = atof(ReadLine(fp)); - (*grid).DY = atof(ReadLine(fp)); - (*grid).DZ = atof(ReadLine(fp)); - - fclose(fp); - } - n=(*grid).NX*(*grid).NY*(*grid).NZ; - -/* Ouverture du fichier de données sur le champ de perméabilité */ - - if ((fp=fopen(file2,"r")) == NULL) - { - fprintf(stderr,"%s :impossible d'ouvrir %s\n",prog, file2); - exit(1); - } - else - { - *seed=atoi(ReadLine(fp)); - (*variogram).Nvario = atoi(ReadLine(fp)); - (*variogram).vario = (int *) malloc((*variogram).Nvario * sizeof(int)); - (*variogram).alpha = (double *) malloc((*variogram).Nvario * sizeof(double)); - (*variogram).ap = (double *) malloc(9*(*variogram).Nvario * sizeof(double)); - (*variogram).scf = (double *) malloc(3*(*variogram).Nvario * sizeof(double)); - (*variogram).var = (double *) malloc((*variogram).Nvario * sizeof(double)); - for (i= 0; i < (*variogram).Nvario; i++) { - (*variogram).var[i] = atof(ReadLine(fp)); - (*variogram).vario[i] = atoi(ReadLine(fp)); - (*variogram).alpha[i] = atof(ReadLine(fp)); - for (j = 0; j < 3; j++) - (*variogram).scf[i*3+j]= atof(ReadLine(fp)); - for (j = 0; j < 6; j++) - (*variogram).ap[i*9+j] = atof(ReadLine(fp)); - } - /*statistical data*/ - (*stat).nblock_mean = 1; - (*stat).nblock_var = 1; - (*stat).mean = (double *)malloc((*stat).nblock_mean * sizeof(double)); - if ((*stat).mean == NULL) - Error("No memory available"); - (*stat).variance = (double *)malloc((*stat).nblock_var * sizeof(double)); - if ((*stat).variance == NULL) - Error("No memory available"); - - (*stat).mean[0] = atof(ReadLine(fp)); - (*stat).variance[0] = atof(ReadLine(fp)); - (*stat).type = atoi(ReadLine(fp)); - - filename[1] = ReadLine(fp); - fclose(fp); - } - - switch (*Ksolver) - { - case 0: - /* Ouverture du fichier contenant le gaussian white noise */ - if (*genere == 1) - { - file3=argv[3]; - if ((fp=fopen(file3,"r")) == NULL) - { - fprintf(stderr,"%s :impossible d'ouvrir %s\n",prog, file3); - exit(1); - } - else - { - /* Ouverture du champ de permeabilite K */ - (*gwnoise).vector = (double *) malloc(n * sizeof(double)); - for (i=0;i -#include -#include -#include -#include -#include -#include "genlib.h" -#include "geostat.h" - -/*readfile */ -/* read in the file "filename" the vector values of a */ -/* realization_mod variable */ -/* filename: explicit */ -/* realin: structure defining a realization */ - -void readfile_bin(string filename, struct realization_mod *realin) -{ - FILE *fp; - int i; - double prout; - - /*read the permeability realization*/ - - - fp = fopen(filename, "r"); - - for (i=0;i<(*realin).n;i++) - { - fread(&prout,sizeof(double),1,fp); - printf("Prout: %15.10f\n",prout); - } - - fclose(fp); - return; -} diff --git a/fftma_module/gen/sources/scanadt.c b/fftma_module/gen/sources/scanadt.c deleted file mode 100755 index bd887c5..0000000 --- a/fftma_module/gen/sources/scanadt.c +++ /dev/null @@ -1,162 +0,0 @@ -/* - * File: scanadt.c - * --------------- - * This file implements the scanadt.h interface. - */ - -#include -#include -#include "genlib.h" -#include "strlib.h" -#include "scanadt.h" - -/* - * Type: scannerCDT - * ---------------- - * This structure is the concrete representation of the type - * scannerADT, which is exported by this interface. Its purpose - * is to maintain the state of the scanner between calls. The - * details of the representation are invisible to the client, - * but consist of the following fields: - * - * str -- Copy of string passed to SetScannerString - * len -- Length of string, saved for efficiency - * cp -- Current character position in the string - * savedToken -- String saved by SaveToken (NULL indicates none) - * spaceOption -- Setting of the space option extension - */ - -struct scannerCDT { - string str; - int len; - int cp; - string savedToken; - spaceOptionT spaceOption; -}; - -/* Private function prototypes */ - -static void SkipSpaces(scannerADT scanner); -static int ScanToEndOfIdentifier(scannerADT scanner); - -/* Exported entries */ - -scannerADT NewScanner(void) -{ - scannerADT scanner; - - scanner = New(scannerADT); - scanner->str = NULL; - scanner->spaceOption = PreserveSpaces; - return (scanner); -} - -void FreeScanner(scannerADT scanner) -{ - if (scanner->str != NULL) FreeBlock(scanner->str); - FreeBlock(scanner); -} - -void SetScannerString(scannerADT scanner, string str) -{ - if (scanner->str != NULL) FreeBlock(scanner->str); - scanner->str = CopyString(str); - scanner->len = StringLength(str); - scanner->cp = 0; - scanner->savedToken = NULL; -} - -string ReadToken(scannerADT scanner) -{ - char ch; - string token; - int start, finish; - - if (scanner->str == NULL) { - Error("SetScannerString has not been called"); - } - if (scanner->savedToken != NULL) { - token = scanner->savedToken; - scanner->savedToken = NULL; - return (token); - } - if (scanner->spaceOption == IgnoreSpaces) SkipSpaces(scanner); - start = finish = scanner->cp; - if (start >= scanner->len) return (CopyString("")); - ch = scanner->str[scanner->cp]; - if (isalnum(ch)) { - finish = ScanToEndOfIdentifier(scanner); - } else { - scanner->cp++; - } - return (SubString(scanner->str, start, finish)); -} - -bool MoreTokensExist(scannerADT scanner) -{ - if (scanner->str == NULL) { - Error("SetScannerString has not been called"); - } - if (scanner->savedToken != NULL) { - return (!StringEqual(scanner->savedToken, "")); - } - if (scanner->spaceOption == IgnoreSpaces) SkipSpaces(scanner); - return (scanner->cp < scanner->len); -} - -void SaveToken(scannerADT scanner, string token) -{ - if (scanner->str == NULL) { - Error("SetScannerString has not been called"); - } - if (scanner->savedToken != NULL) { - Error("Token has already been saved"); - } - scanner->savedToken = token; -} - -void SetScannerSpaceOption(scannerADT scanner, spaceOptionT option) -{ - scanner->spaceOption = option; -} - -spaceOptionT GetScannerSpaceOption(scannerADT scanner) -{ - return (scanner->spaceOption); -} - -/* Private functions */ - -/* - * Function: SkipSpaces - * Usage: SkipSpaces(scanner); - * --------------------------- - * This function advances the position of the scanner until the - * current character is not a whitespace character. - */ - -static void SkipSpaces(scannerADT scanner) -{ - while (isspace(scanner->str[scanner->cp])) { - scanner->cp++; - } -} - -/* - * Function: ScanToEndOfIdentifier - * Usage: finish = ScanToEndOfIdentifier(scanner); - * ----------------------------------------------- - * This function advances the position of the scanner until it - * reaches the end of a sequence of letters or digits that make - * up an identifier. The return value is the index of the last - * character in the identifier; the value of the stored index - * cp is the first character after that. - */ - -static int ScanToEndOfIdentifier(scannerADT scanner) -{ - while (isalnum(scanner->str[scanner->cp])) { - scanner->cp++; - } - return (scanner->cp - 1); -} diff --git a/fftma_module/gen/sources/simpio.c b/fftma_module/gen/sources/simpio.c deleted file mode 100755 index 02e4025..0000000 --- a/fftma_module/gen/sources/simpio.c +++ /dev/null @@ -1,157 +0,0 @@ -/* - * File: simpio.c - * Version: 1.0 - * Last modified on Fri Jul 15 14:10:41 1994 by eroberts - * ----------------------------------------------------- - * This file implements the simpio.h interface. - */ - -#include -#include - -#include "genlib.h" -#include "strlib.h" -#include "simpio.h" - -/* - * Constants: - * ---------- - * InitialBufferSize -- Initial buffer size for ReadLine - */ - -#define InitialBufferSize 120 - -/* Exported entries */ - -/* - * Functions: GetInteger, GetLong, GetReal - * --------------------------------------- - * These functions first read a line and then call sscanf to - * translate the number. Reading an entire line is essential to - * good error recovery, because the characters after the point of - * error would otherwise remain in the input buffer and confuse - * subsequent input operations. The sscanf line allows white space - * before and after the number but no other extraneous characters. - */ - -int GetInteger(void) -{ - string line; - int value; - char termch; - - while (TRUE) { - line = GetLine(); - switch (sscanf(line, " %d %c", &value, &termch)) { - case 1: - FreeBlock(line); - return (value); - case 2: - printf("Unexpected character: '%c'\n", termch); - break; - default: - printf("Please enter an integer\n"); - break; - } - FreeBlock(line); - printf("Retry: "); - } -} - -long GetLong(void) -{ - string line; - long value; - char termch; - - while (TRUE) { - line = GetLine(); - switch (sscanf(line, " %ld %c", &value, &termch)) { - case 1: - FreeBlock(line); - return (value); - case 2: - printf("Unexpected character: '%c'\n", termch); - break; - default: - printf("Please enter an integer\n"); - break; - } - FreeBlock(line); - printf("Retry: "); - } -} - -double GetReal(void) -{ - string line; - double value; - char termch; - - while (TRUE) { - line = GetLine(); - switch (sscanf(line, " %lf %c", &value, &termch)) { - case 1: - FreeBlock(line); - return (value); - case 2: - printf("Unexpected character: '%c'\n", termch); - break; - default: - printf("Please enter a real number\n"); - break; - } - FreeBlock(line); - printf("Retry: "); - } -} - -/* - * Function: GetLine - * ----------------- - * This function is a simple wrapper; all the work is done by - * ReadLine. - */ - -string GetLine(void) -{ - return (ReadLine(stdin)); -} - -/* - * Function: ReadLine - * ------------------ - * This function operates by reading characters from the file - * into a dynamically allocated buffer. If the buffer becomes - * full before the end of the line is reached, a new buffer - * twice the size of the previous one is allocated. - */ - -string ReadLine(FILE *infile) -{ - string line, nline; - int n, ch, size; - - n = 0; - size = InitialBufferSize; - line = GetBlock(size + 1); - while ((ch = getc(infile)) != '\n' && ch != EOF) { - if (n == size) { - size *= 2; - nline = (string) GetBlock(size + 1); - strncpy(nline, line, n); - FreeBlock(line); - line = nline; - } - line[n++] = ch; - } - if (n == 0 && ch == EOF) { - FreeBlock(line); - return (NULL); - } - line[n] = '\0'; - nline = (string) GetBlock(n + 1); - strcpy(nline, line); - FreeBlock(line); - return (nline); -} diff --git a/fftma_module/gen/sources/spherical.c b/fftma_module/gen/sources/spherical.c deleted file mode 100755 index a36e492..0000000 --- a/fftma_module/gen/sources/spherical.c +++ /dev/null @@ -1,17 +0,0 @@ -#include -#include -#include "genlib.h" - - -/*spherical covariance function*/ -double spherical(double h) -{ - double z; - - if (h >= 1.) { - z = 0.; - } else { - z = 1.-1.5*(double)h+0.5*(double)(h*h*h); - } - return (z); -} diff --git a/fftma_module/gen/sources/stable.c b/fftma_module/gen/sources/stable.c deleted file mode 100755 index 45c5a29..0000000 --- a/fftma_module/gen/sources/stable.c +++ /dev/null @@ -1,10 +0,0 @@ -#include -#include -#include "genlib.h" - - -/*stable covariance function*/ -double stable(double h, double alpha) -{ - return(exp(-3.*(double)pow(h,alpha))); -} diff --git a/fftma_module/gen/sources/stack.c b/fftma_module/gen/sources/stack.c deleted file mode 100755 index 8bd5ee4..0000000 --- a/fftma_module/gen/sources/stack.c +++ /dev/null @@ -1,122 +0,0 @@ -/* - * File: stack.c - * ------------- - * This file implements the stack.h interface. Note that the - * implementation is independent of the type of value stored - * in the stack. That type is defined by the interface as - * the type name stackElementT. - */ - -#include -#include "genlib.h" -#include "stack.h" - -/* - * Constant: InitialStackSize - * -------------------------- - * This constant defines the initial size of the stack array. - * Any positive value will work correctly, although changing - * this parameter can affect performance. Making this value - * larger postpones the first reallocation but causes stacks - * to consume more memory. - */ - -#define InitialStackSize 100 - -/* - * Type: stackCDT - * -------------- - * The type stackCDT is the concrete representation of the type - * stackADT defined by the interface. In this implementation, - * the elements are stored in a dynamic array that doubles in - * size if the old stack becomes full. - */ - -struct stackCDT { - stackElementT *elements; - int count; - int size; -}; - -/* Private function prototypes */ - -static void ExpandStack(stackADT stack); - -/* Exported entries */ - -stackADT NewStack(void) -{ - stackADT stack; - - stack = New(stackADT); - stack->elements = NewArray(InitialStackSize, stackElementT); - stack->count = 0; - stack->size = InitialStackSize; - return (stack); -} - -void FreeStack(stackADT stack) -{ - FreeBlock(stack->elements); - FreeBlock(stack); -} - -void Push(stackADT stack, stackElementT element) -{ - if (stack->count == stack->size) ExpandStack(stack); - stack->elements[stack->count++] = element; -} - -stackElementT Pop(stackADT stack) -{ - if (StackIsEmpty(stack)) Error("Pop of an empty stack"); - return (stack->elements[--stack->count]); -} - -bool StackIsEmpty(stackADT stack) -{ - return (stack->count == 0); -} - -bool StackIsFull(stackADT stack) -{ - return (FALSE); -} - -int StackDepth(stackADT stack) -{ - return (stack->count); -} - -stackElementT GetStackElement(stackADT stack, int index) -{ - if (index < 0 || index >= stack->count) { - Error("Non-existent stack element"); - } - return (stack->elements[stack->count - index - 1]); -} - -/* Private functions */ - -/* Function: ExpandStack - * Usage: ExpandStack(stack); - * -------------------------- - * This function expands a full stack by doubling the size of its - * dynamic array, copying the old elements to the new array, and - * then freeing the old array storage. - */ - -static void ExpandStack(stackADT stack) -{ - stackElementT *array; - int i, newSize; - - newSize = stack->size * 2; - array = NewArray(newSize, stackElementT); - for (i = 0; i < stack->size; i++) { - array[i] = stack->elements[i]; - } - FreeBlock(stack->elements); - stack->elements = array; - stack->size = newSize; -} diff --git a/fftma_module/gen/sources/strlib.c b/fftma_module/gen/sources/strlib.c deleted file mode 100755 index 6f00938..0000000 --- a/fftma_module/gen/sources/strlib.c +++ /dev/null @@ -1,246 +0,0 @@ -/* - * File: strlib.c - * Version: 1.0 - * Last modified on Fri Jul 15 14:10:41 1994 by eroberts - * ----------------------------------------------------- - * This file implements the strlib.h interface. - */ - -/* - * General implementation notes: - * ----------------------------- - * This module implements the strlib library by mapping all - * functions into the appropriate calls to the ANSI - * interface. The implementations of the individual functions - * are all quite simple and do not require individual comments. - * For descriptions of the behavior of each function, see the - * interface. - */ - -#include -#include -#include - -#include "genlib.h" -#include "strlib.h" - -/* - * Constant: MaxDigits - * ------------------- - * This constant must be larger than the maximum - * number of digits that can appear in a number. - */ - -#define MaxDigits 30 - -/* Private function prototypes */ - -static string CreateString(int len); - -/* Section 1 -- Basic string operations */ - -string Concat(string s1, string s2) -{ - string s; - int len1, len2; - - if (s1 == NULL || s2 == NULL) { - Error("NULL string passed to Concat"); - } - len1 = strlen(s1); - len2 = strlen(s2); - s = CreateString(len1 + len2); - strcpy(s, s1); - strcpy(s + len1, s2); - return (s); -} - -char IthChar(string s, int i) -{ - int len; - - if (s == NULL) Error("NULL string passed to IthChar"); - len = strlen(s); - if (i < 0 || i > len) { - Error("Index outside of string range in IthChar"); - } - return (s[i]); -} - -string SubString(string s, int p1, int p2) -{ - int len; - string result; - - if (s == NULL) Error("NULL string passed to SubString"); - len = strlen(s); - if (p1 < 0) p1 = 0; - if (p2 >= len) p2 = len - 1; - len = p2 - p1 + 1; - if (len < 0) len = 0; - result = CreateString(len); - strncpy(result, s + p1, len); - result[len] = '\0'; - return (result); -} - -string CharToString(char ch) -{ - string result; - - result = CreateString(1); - result[0] = ch; - result[1] = '\0'; - return (result); -} - -int StringLength(string s) -{ - if (s == NULL) Error("NULL string passed to StringLength"); - return (strlen(s)); -} - -string CopyString(string s) -{ - string newstr; - - if (s == NULL) Error("NULL string passed to CopyString"); - newstr = CreateString(strlen(s)); - strcpy(newstr, s); - return (newstr); -} - -/* Section 2 -- String comparison functions */ - -bool StringEqual(string s1, string s2) -{ - if (s1 == NULL || s2 == NULL) { - Error("NULL string passed to StringEqual"); - } - return (strcmp(s1, s2) == 0); -} - -int StringCompare(string s1, string s2) -{ - if (s1 == NULL || s2 == NULL) { - Error("NULL string passed to StringCompare"); - } - return (strcmp(s1, s2)); -} - -/* Section 3 -- Search functions */ - -int FindChar(char ch, string text, int start) -{ - char *cptr; - - if (text == NULL) Error("NULL string passed to FindChar"); - if (start < 0) start = 0; - if (start > strlen(text)) return (-1); - cptr = strchr(text + start, ch); - if (cptr == NULL) return (-1); - return ((int) (cptr - text)); -} - -int FindString(string str, string text, int start) -{ - char *cptr; - - if (str == NULL) Error("NULL pattern string in FindString"); - if (text == NULL) Error("NULL text string in FindString"); - if (start < 0) start = 0; - if (start > strlen(text)) return (-1); - cptr = strstr(text + start, str); - if (cptr == NULL) return (-1); - return ((int) (cptr - text)); -} - -/* Section 4 -- Case-conversion functions */ - -string ConvertToLowerCase(string s) -{ - string result; - int i; - - if (s == NULL) { - Error("NULL string passed to ConvertToLowerCase"); - } - result = CreateString(strlen(s)); - for (i = 0; s[i] != '\0'; i++) result[i] = tolower(s[i]); - result[i] = '\0'; - return (result); -} - -string ConvertToUpperCase(string s) -{ - string result; - int i; - - if (s == NULL) { - Error("NULL string passed to ConvertToUpperCase"); - } - result = CreateString(strlen(s)); - for (i = 0; s[i] != '\0'; i++) result[i] = toupper(s[i]); - result[i] = '\0'; - return (result); -} - -/* Section 5 -- Functions for converting numbers to strings */ - -string IntegerToString(int n) -{ - char buffer[MaxDigits]; - - sprintf(buffer, "%d", n); - return (CopyString(buffer)); -} - -int StringToInteger(string s) -{ - int result; - char dummy; - - if (s == NULL) { - Error("NULL string passed to StringToInteger"); - } - if (sscanf(s, " %d %c", &result, &dummy) != 1) { - Error("StringToInteger called on illegal number %s", s); - } - return (result); -} - -string RealToString(double d) -{ - char buffer[MaxDigits]; - - sprintf(buffer, "%G", d); - return (CopyString(buffer)); -} - -double StringToReal(string s) -{ - double result; - char dummy; - - if (s == NULL) Error("NULL string passed to StringToReal"); - if (sscanf(s, " %lg %c", &result, &dummy) != 1) { - Error("StringToReal called on illegal number %s", s); - } - return (result); -} - -/* Private functions */ - -/* - * Function: CreateString - * Usage: s = CreateString(len); - * ----------------------------- - * This function dynamically allocates space for a string of - * len characters, leaving room for the null character at the - * end. - */ - -static string CreateString(int len) -{ - return ((string) GetBlock(len + 1)); -} diff --git a/fftma_module/gen/sources/symtab.c b/fftma_module/gen/sources/symtab.c deleted file mode 100755 index 6e27a10..0000000 --- a/fftma_module/gen/sources/symtab.c +++ /dev/null @@ -1,180 +0,0 @@ -/* - * File: symtab.c - * -------------- - * This file implements the symbol table abstraction. - */ - -#include -#include "genlib.h" -#include "strlib.h" -#include "symtab.h" - -/* - * Constants - * --------- - * NBuckets -- Number of buckets in the hash table - */ - -#define NBuckets 101 - -/* - * Type: cellT - * ----------- - * This type defines a linked list cell for the symbol table. - */ - -typedef struct cellT { - string key; - void *value; - struct cellT *link; -} cellT; - -/* - * Type: symtabCDT - * --------------- - * This type defines the underlying concrete representation for a - * symtabADT. These details are not relevant to and therefore - * not exported to the client. In this implementation, the - * underlying structure is a hash table organized as an array of - * "buckets," in which each bucket is a linked list of elements - * that share the same hash code. - */ - -struct symtabCDT { - cellT *buckets[NBuckets]; -}; - -/* Private function declarations */ - -static void FreeBucketChain(cellT *cp); -static cellT *FindCell(cellT *cp, string s); -static int Hash(string s, int nBuckets); - -/* Public entries */ - -symtabADT NewSymbolTable(void) -{ - symtabADT table; - int i; - - table = New(symtabADT); - for (i = 0; i < NBuckets; i++) { - table->buckets[i] = NULL; - } - return (table); -} - -void FreeSymbolTable(symtabADT table) -{ - int i; - - for (i = 0; i < NBuckets; i++) { - FreeBucketChain(table->buckets[i]); - } - FreeBlock(table); -} - -void Enter(symtabADT table, string key, void *value) -{ - int bucket; - cellT *cp; - - bucket = Hash(key, NBuckets); - cp = FindCell(table->buckets[bucket], key); - if (cp == NULL) { - cp = New(cellT *); - cp->key = CopyString(key); - cp->link = table->buckets[bucket]; - table->buckets[bucket] = cp; - } - cp->value = value; -} - -void *Lookup(symtabADT table, string key) -{ - int bucket; - cellT *cp; - - bucket = Hash(key, NBuckets); - cp = FindCell(table->buckets[bucket], key); - if (cp == NULL) return(UNDEFINED); - return (cp->value); -} - -void MapSymbolTable(symtabFnT fn, symtabADT table, - void *clientData) -{ - int i; - cellT *cp; - - for (i = 0; i < NBuckets; i++) { - for (cp = table->buckets[i]; cp != NULL; cp = cp->link) { - fn(cp->key, cp->value, clientData); - } - } -} - -/* Private functions */ - -/* - * Function: FreeBucketChain - * Usage: FreeBucketChain(cp); - * --------------------------- - * This function takes a chain pointer and frees all the cells - * in that chain. Because the package makes copies of the keys, - * this function must free the string storage as well. - */ - -static void FreeBucketChain(cellT *cp) -{ - cellT *next; - - while (cp != NULL) { - next = cp->link; - FreeBlock(cp->key); - FreeBlock(cp); - cp = next; - } -} - -/* - * Function: FindCell - * Usage: cp = FindCell(cp, key); - * ------------------------------ - * This function finds a cell in the chain beginning at cp that - * matches key. If a match is found, a pointer to that cell is - * returned. If no match is found, the function returns NULL. - */ - -static cellT *FindCell(cellT *cp, string key) -{ - while (cp != NULL && !StringEqual(cp->key, key)) { - cp = cp->link; - } - return (cp); -} - -/* - * Function: Hash - * Usage: bucket = Hash(key, nBuckets); - * ------------------------------------ - * This function takes the key and uses it to derive a hash code, - * which is an integer in the range [0, nBuckets - 1]. The hash - * code is computed using a method called linear congruence. The - * choice of the value for Multiplier can have a significant effect - * on the performance of the algorithm, but not on its correctness. - */ - -#define Multiplier -1664117991L - -static int Hash(string s, int nBuckets) -{ - int i; - unsigned long hashcode; - - hashcode = 0; - for (i = 0; s[i] != '\0'; i++) { - hashcode = hashcode * Multiplier + s[i]; - } - return (hashcode % nBuckets); -} diff --git a/fftma_module/gen/sources/test_fact.c b/fftma_module/gen/sources/test_fact.c deleted file mode 100755 index d2456ee..0000000 --- a/fftma_module/gen/sources/test_fact.c +++ /dev/null @@ -1,26 +0,0 @@ -#include "genlib.h" - -/*tries factor*/ -int test_fact(int *pnum, int fact, int *pmaxfac) -{ - int power, t; - - power = 0; - while ( ( t = *pnum / fact ) * fact == *pnum ) { - ++power; - *pnum = t; - } - - if ( power != 0 ) { - if (fact > *pmaxfac) - *pmaxfac = fact; - } - - if ( t > fact ) { - return (1); - } - - return (0); -} - - diff --git a/fftma_module/gen/sources/testmemory.c b/fftma_module/gen/sources/testmemory.c deleted file mode 100755 index 7cbd10e..0000000 --- a/fftma_module/gen/sources/testmemory.c +++ /dev/null @@ -1,15 +0,0 @@ -#include -#include -#include -#include -#include -#include - -void testmemory(double *realint) -{ - if (realint == NULL) { - printf("Testmemory.c: No memory available \n"); - exit; - } - return; -} diff --git a/fftma_module/gen/sources/testopenfile.c b/fftma_module/gen/sources/testopenfile.c deleted file mode 100755 index dee13a8..0000000 --- a/fftma_module/gen/sources/testopenfile.c +++ /dev/null @@ -1,16 +0,0 @@ -#include -#include -#include -#include -#include -#include - -void testopenfile(FILE *fp) -{ - if (fp == NULL) - { - printf("Erreur d'ouverture de fichier\n"); - exit(0); - } - return; -} diff --git a/fftma_module/gen/sources/total_pressure.c b/fftma_module/gen/sources/total_pressure.c deleted file mode 100755 index 24135c1..0000000 --- a/fftma_module/gen/sources/total_pressure.c +++ /dev/null @@ -1,35 +0,0 @@ -#include -#include -#include -#include -#include "geostat.h" -#include "pressure.h" - - - -/* total_pressure */ -/* Build total pressure */ -/* grid: structure defining the grid */ -/* pression: structure defining the gradient pressure */ -/* realout: structure defining a realization */ - -void total_pressure(struct grid_mod grid,struct pressure_mod gradient,struct realization_mod *realout) -{ - int i,j,k,maille0,maille1; - double temp,reference; - - reference=abs(gradient.x)*grid.NX*grid.DX+abs(gradient.y)*grid.NY*grid.DY+abs(gradient.z)*grid.NZ*grid.DZ; - /* pressure reconstruction */ - for ( k = 0; k < grid.NZ; k++) { - for (j = 0; j < grid.NY; j++) { - for (i = 0; i < grid.NX; i++) { - maille1 = i+(j+k*grid.NY)*grid.NX; -/* temp=reference+gradient.x*i*grid.DX+gradient.y*j*grid.DY+gradient.z*k*grid.DZ+(*realout).vector[maille1]; */ - temp=-gradient.x*(i+1)/grid.NX-gradient.y*(j+1)/grid.NY-gradient.z*(k+1)/grid.NZ+(*realout).vector[maille1]; - (*realout).vector[maille1]=temp; - } - } - } - - return; -} diff --git a/fftma_module/gen/sources/total_velocity.c b/fftma_module/gen/sources/total_velocity.c deleted file mode 100755 index 63344c1..0000000 --- a/fftma_module/gen/sources/total_velocity.c +++ /dev/null @@ -1,50 +0,0 @@ -#include -#include -#include -#include -#include "geostat.h" -#include "pressure.h" - - - -/* total_velocity */ -/* Build total velocity */ -/* grid: structure defining the grid */ -/* mean: permeability mean */ -/* dgradient: macroscopic pressure gradient in wanted direction */ -/* realout: structure defining a X velocity realization */ - -void total_velocity(struct grid_mod grid,double mean,int direction,struct pressure_mod gradient,struct realization_mod *realout) -{ - int i,j,k,maille0,maille1; - double temp,grad; - switch(direction) - { - case 1: - grad = gradient.x/(grid.NX*grid.DX); - break; - case 2: - grad = gradient.y/(grid.NY*grid.DY);/* *grid.NY*grid.DY; */ - break; - case 3: - grad = gradient.z/(grid.NZ*grid.DZ); /* *grid.NZ*grid.DZ; */ - break; - default : - printf("build_velocity.c: wrong velocity direction!!! direction: %d\n",direction); - break; - } - - /* x velocity reconstruction */ - for ( k = 0; k < grid.NZ; k++) { - for (j = 0; j < grid.NY; j++) { - for (i = 0; i < grid.NX; i++) { - maille1 = i+(j+k*grid.NY)*grid.NX; - temp=mean*grad+(*realout).vector[maille1]; -/* temp=mean*grad; */ - (*realout).vector[maille1]=temp; - } - } - } - - return; -} diff --git a/fftma_module/gen/sources/waveVectorCompute3D.c b/fftma_module/gen/sources/waveVectorCompute3D.c deleted file mode 100755 index 58e8342..0000000 --- a/fftma_module/gen/sources/waveVectorCompute3D.c +++ /dev/null @@ -1,156 +0,0 @@ -//#include -//#include -#include -#include -#include -#include -#include -#include - -//using namespace std; - -/*Private functions */ -void waveVectorCompute1D(int n,double *vec); - -void waveVectorCompute3D(int nX,int nY, int nZ, /*double dX, double dY, double dZ,*/ double nDir[3], double *waveVect) { - - int nTot; - double *vecX,*vecY,*vecZ; - double *waveVect3DX, *waveVect3DY, *waveVect3DZ; - - int i, j, k, maille; - - nTot = nX*nY*nZ; -// printf("nX = %d, nY = %d, nZ = %d, nTot = %d\n",nX,nY,nZ,nTot); -// printf("Entering waveVectorCompute3D\n"); - -/*Memory allocation */ - waveVect3DX = (double *)malloc(nTot * sizeof(double)); - if (waveVect3DX == NULL) { - printf("waveVectCompute.cpp : No memory available for waveVect3DX\n"); - return; - } - waveVect3DY = (double *)malloc(nTot * sizeof(double)); - if (waveVect3DY == NULL) { - printf("waveVectCompute.cpp : No memory available for waveVect3DY\n"); - return; - } - waveVect3DZ = (double *)malloc(nTot * sizeof(double)); - if (waveVect3DZ == NULL) { - printf("waveVectCompute.cpp : No memory available for waveVect3DZ\n"); - return; - } - - vecX = (double *)malloc(nX * sizeof(double)); - if (vecX == NULL) { - printf("waveVectCompute.cpp : No memory available for vecX\n"); - return; - } - - vecY = (double *)malloc(nY * sizeof(double)); - if (vecY == NULL) { - printf("waveVectCompute.cpp : No memory available for vecY\n"); - return; - } - - vecZ = (double *)malloc(nZ * sizeof(double)); - if (vecZ == NULL) { - printf("waveVectCompute.cpp : No memory available for vecZ\n"); - return; - } - -// printf("memory allocation done.\n"); - - waveVectorCompute1D(nX,vecX); - waveVectorCompute1D(nY,vecY); - waveVectorCompute1D(nZ,vecZ); -// printf("waveVectorCompute1D: done!\n"); - - for(k = 0; k < nZ; k++) { -// printf("k=%d\n",k); - for(j = 0; j < nY; j++) { -// printf("j=%d: ",j); - for(i = 0; i < nX; i++) { - maille = i + (j + (k)*nY)*nX; -// waveVect3DX[maille] = vecX[i]/(nX*dX); -// waveVect3DY[maille] = vecY[j]/(nY*dY); -// waveVect3DZ[maille] = vecZ[k]/(nZ*dZ); - waveVect3DX[maille] = vecX[i]; - waveVect3DY[maille] = vecY[j]; - waveVect3DZ[maille] = vecZ[k]; -// printf("i=%d: %f ",i,vecZ[k]); - } -// printf("\n"); - } - } -// printf("waveVector3DX, Y and Z rearanged\n"); - free(vecX); - free(vecY); - free(vecZ); - if (waveVect == NULL) { - printf("allocate memory for waveVect\n"); - waveVect = (double *) malloc((nTot+1)*sizeof(double)); - if (waveVect == NULL) { - printf("waveVectCompute.cpp : No memory available for waveVect\n"); - return; - } - printf("after allocate memory for waveVect\n"); - } - - for (i=1;i<=nTot;i++) { - waveVect[i] = nDir[0]*waveVect3DX[i-1] + nDir[1]*waveVect3DY[i-1] + nDir[2]*waveVect3DZ[i-1]; -// printf("waveVect[%d] = %f\n",i,waveVect[i]); - } -// printf("waveVector rearanged\n"); - - free(waveVect3DX); - free(waveVect3DY); - free(waveVect3DZ); - -} - -void waveVectorCompute1D(int n,double *vec){ - - int midPoint,k; - - if(ceil(n/2) - floor(n/2) < 1.) { -// printf("coucou\n"); -/*n is even */ - midPoint = (int) floor(n/2); - vec[midPoint] = (double) midPoint; - } else { -/*n is odd */ - midPoint = (int) floor(n/2)-1; - vec[midPoint] = (double) midPoint+1; - } - for (k=1;k -#include -#include -#include -#include -#include -#include "genlib.h" -#include "geostat.h" - -/*writefile */ -/* write in the file "filename" the vector values of a */ -/* realization_mod variable */ -/* filename: explicit */ -/* realin: structure defining a realization */ - -void writefile(string filename, struct realization_mod *realin) -{ - FILE *fp; - int i; - /* string filename;*/ - /*struct realization_mod *realin;*/ - - - /*save the permeability realization*/ - fp = fopen(filename, "w"); -/* printf("writefile.c : (*realin).vector[0] %f\n",(*realin).vector[0]); */ -/* (*realin).vector[0]=1.1; */ - for (i=0;i<(*realin).n;i++) - fprintf(fp,"%15.10f\n",(*realin).vector[i]); - fclose(fp); - return; -} diff --git a/fftma_module/gen/sources/writefile_bin.c b/fftma_module/gen/sources/writefile_bin.c deleted file mode 100755 index 8df2da8..0000000 --- a/fftma_module/gen/sources/writefile_bin.c +++ /dev/null @@ -1,33 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include "genlib.h" -#include "geostat.h" - -/*writefile */ -/* write in the file "filename" the vector values of a */ -/* realization_mod variable */ -/* filename: explicit */ -/* realin: structure defining a realization */ - -void writefile_bin(string filename, struct realization_mod *realin) -{ - FILE *fp; - int i; - double *prout; - - /*save the permeability realization*/ - fp = fopen(filename, "w"); - - for (i=0;i<(*realin).n;i++) - { - prout=(*realin).vector; - fwrite(&prout[i],sizeof(double),1,fp); - } - - fclose(fp); - return; -}