Несогласованный вывод при запуске программы fortran, скомпилированной с помощью f2py

У меня есть код Фортрана, который объединяет систему обыкновенных дифференциальных уравнений. Я компилирую код двумя разными способами: (1) с помощью f2py и (2) с помощью gfortran.

Когда я компилирую ту же программу с помощью gfortran и запускаю ее, программа всегда занимает 97 временных шагов, чтобы достичь указанного времени окончания.

Когда я компилирую программу с помощью f2py и запускаю ту же программу, часто требуется 97 шагов, чтобы достичь указанного времени окончания. НО иногда (~ 1/10 раз) программе требуется более 97 шагов, чтобы достичь времени окончания (~ 120 шагов). Другими словами, программа не согласована между запусками.

Почему это? Как я могу это исправить?

При компиляции с помощью gfortran (версия 10.2.0) я использую флаги -O3 -fopenmp -freal-4-real-8

При компиляции с помощью f2py (который использует gfortran 10.2.0) я указываю те же флаги, но некоторые дополнительные добавляются с помощью f2py. Ниже представлена ​​вторая половина вывода f2py.

compiling Fortran 90 module sources
Fortran f77 compiler: /usr/local/bin/gfortran -fopenmp -freal-4-real-8 -m64 -fPIC -O3
Fortran f90 compiler: /usr/local/bin/gfortran -fopenmp -freal-4-real-8 -m64 -fPIC -O3
Fortran fix compiler: /usr/local/bin/gfortran -Wall -g -ffixed-form -fno-second-underscore -fopenmp -freal-4-real-8 -m64 -fPIC -O3
creating /var/folders/rh/h610cb491m93m8kyz5br7gwc0000gq/T/tmp9cykppjq/src
creating /var/folders/rh/h610cb491m93m8kyz5br7gwc0000gq/T/tmp9cykppjq/src/modules
compile options: '-I/var/folders/rh/h610cb491m93m8kyz5br7gwc0000gq/T/tmp9cykppjq/src.macosx-10.9-x86_64-3.7 -I/Users/nicholas/Applications/anaconda3/lib/python3.7/site-packages/numpy/core/include -I/Users/nicholas/Applications/anaconda3/include/python3.7m -c'
extra options: '-J/var/folders/rh/h610cb491m93m8kyz5br7gwc0000gq/T/tmp9cykppjq/ -I/var/folders/rh/h610cb491m93m8kyz5br7gwc0000gq/T/tmp9cykppjq/'
gfortran:fix: src/modules/Rainout_vars.f90
gfortran:fix: src/modules/reading_vars.f90
gfortran:f90: src/Photochem.f90
compiling Fortran sources
Fortran f77 compiler: /usr/local/bin/gfortran -fopenmp -freal-4-real-8 -m64 -fPIC -O3
Fortran f90 compiler: /usr/local/bin/gfortran -fopenmp -freal-4-real-8 -m64 -fPIC -O3
Fortran fix compiler: /usr/local/bin/gfortran -Wall -g -ffixed-form -fno-second-underscore -fopenmp -freal-4-real-8 -m64 -fPIC -O3
compile options: '-I/var/folders/rh/h610cb491m93m8kyz5br7gwc0000gq/T/tmp9cykppjq/src.macosx-10.9-x86_64-3.7 -I/Users/nicholas/Applications/anaconda3/lib/python3.7/site-packages/numpy/core/include -I/Users/nicholas/Applications/anaconda3/include/python3.7m -c'
extra options: '-J/var/folders/rh/h610cb491m93m8kyz5br7gwc0000gq/T/tmp9cykppjq/ -I/var/folders/rh/h610cb491m93m8kyz5br7gwc0000gq/T/tmp9cykppjq/'
gfortran:f90: /var/folders/rh/h610cb491m93m8kyz5br7gwc0000gq/T/tmp9cykppjq/src.macosx-10.9-x86_64-3.7/Photochem-f2pywrappers2.f90
gfortran:f77: src/lin_alg.f
/usr/local/bin/gfortran -Wall -g -m64 -Wall -g -undefined dynamic_lookup -bundle /var/folders/rh/h610cb491m93m8kyz5br7gwc0000gq/T/tmp9cykppjq/var/folders/rh/h610cb491m93m8kyz5br7gwc0000gq/T/tmp9cykppjq/src.macosx-10.9-x86_64-3.7/Photochemmodule.o /var/folders/rh/h610cb491m93m8kyz5br7gwc0000gq/T/tmp9cykppjq/var/folders/rh/h610cb491m93m8kyz5br7gwc0000gq/T/tmp9cykppjq/src.macosx-10.9-x86_64-3.7/fortranobject.o /var/folders/rh/h610cb491m93m8kyz5br7gwc0000gq/T/tmp9cykppjq/src/modules/Rainout_vars.o /var/folders/rh/h610cb491m93m8kyz5br7gwc0000gq/T/tmp9cykppjq/src/modules/reading_vars.o /var/folders/rh/h610cb491m93m8kyz5br7gwc0000gq/T/tmp9cykppjq/src/Photochem.o /var/folders/rh/h610cb491m93m8kyz5br7gwc0000gq/T/tmp9cykppjq/src/lin_alg.o /var/folders/rh/h610cb491m93m8kyz5br7gwc0000gq/T/tmp9cykppjq/var/folders/rh/h610cb491m93m8kyz5br7gwc0000gq/T/tmp9cykppjq/src.macosx-10.9-x86_64-3.7/Photochem-f2pywrappers2.o -L/usr/local/Cellar/gcc/10.2.0/lib/gcc/10/gcc/x86_64-apple-darwin19/10.2.0 -L/usr/local/Cellar/gcc/10.2.0/lib/gcc/10/gcc/x86_64-apple-darwin19/10.2.0/../../.. -L/usr/local/Cellar/gcc/10.2.0/lib/gcc/10/gcc/x86_64-apple-darwin19/10.2.0/../../.. -lgomp -lgfortran -o ./Photochem.cpython-37m-darwin.so
ld: warning: dylib (/usr/local/Cellar/gcc/10.2.0/lib/gcc/10/libgomp.dylib) was built for newer macOS version (10.15) than being linked (10.9)
ld: warning: dylib (/usr/local/Cellar/gcc/10.2.0/lib/gcc/10/libgfortran.dylib) was built for newer macOS version (10.15) than being linked (10.9)
ld: warning: dylib (/usr/local/Cellar/gcc/10.2.0/lib/gcc/10/libquadmath.dylib) was built for newer macOS version (10.15) than being linked (10.9)
Removing build directory /var/folders/rh/h610cb491m93m8kyz5br7gwc0000gq/T/tmp9cykppjq

person nicholaswogan    schedule 02.01.2021    source источник
comment
Нужно посмотреть программу.   -  person evets    schedule 03.01.2021
comment
@evets код находится здесь: github.com/Nicholaswogan/PhotochemPy. Чтобы воспроизвести то, что я обсуждаю, скомпилируйте код с ./compile.sh, затем запустите тест 10 или 20 раз: python test_PhotochemPy.py. Код должен делать 97 шагов для большинства запусков, но будет делать ›97 шагов ~ 1/10 раз   -  person nicholaswogan    schedule 03.01.2021
comment
Я не использую питон. Я предполагаю, что f2py не является компилятором Fortran и искажает код таким образом, что сомнительный параметр -freal-4-real-8 больше продвигает проверку сходимости к чему-то, что работает. Я не слежу за случайными ссылками, размещенными на SO.   -  person evets    schedule 03.01.2021
comment
Да, покажите, пожалуйста, здесь минимальный пример. Я согласен с тем, что использование -freal-4-real-8 - очень плохая идея.   -  person Pierre de Buyl    schedule 04.01.2021


Ответы (1)


Я понял. Проблема заключалась в неинициализированных переменных.

Когда код компилировался с помощью gfortran, по какой-то причине неинициализированные переменные всегда принимали 0 в качестве значений по умолчанию. Когда код был скомпилирован с помощью f2py, неинициализированные переменные иногда по умолчанию были равны 0, но иногда по умолчанию были и другие значения.

Я нашел неинициализированные переменные с valgrind (флаг -Wuninitialized gfortran их не поймал!).

person nicholaswogan    schedule 04.01.2021