python — Исключение с плавающей точкой при использовании OpenFOAM и matplotlib.path.Path.contains_points

В коде Python я использую ctypes (позже переключился на Cython) вызывать функции из разделяемой библиотеки C ++, которую я написал сам. Библиотека представляет собой небольшую оболочку над сторонней библиотекой (OpenFOAM, чтобы быть конкретным, но не важным для этого вопроса). Сторонняя библиотека использует MPI (и, скорее всего, также PETSc), и это вызывает у меня проблемы, когда я пытаюсь позвонить contains_points от matplotlib.path.Path,

Каждый раз звоню contains_points до того, как я вызвал функцию из библиотеки C ++, она работала нормально. Но когда я пытаюсь позвонить contains_points после того, как я хотя бы вызвал одну функцию из библиотеки C ++, я получаю следующую ошибку:

[0]PETSC ERROR: ------------------------------------------------------------------------
[0]PETSC ERROR: Caught signal number 8 FPE: Floating Point Exception,probably divide by zero
[0]PETSC ERROR: Try option -start_in_debugger or -on_error_attach_debugger
[0]PETSC ERROR: or see http://www.mcs.anl.gov/petsc/documentation/faq.html#valgrind[0]PETSC ERROR: or try http://valgrind.org on GNU/linux and Apple Mac OS X to find memory corruption errors
[0]PETSC ERROR: configure using --with-debugging=yes, recompile, link, and run
[0]PETSC ERROR: to get more information on the crash.
--------------------------------------------------------------------------
MPI_ABORT was invoked on rank 0 in communicator MPI_COMM_WORLD
with errorcode 59.

NOTE: invoking MPI_ABORT causes Open MPI to kill all MPI processes.
You may or may not see output from other processes, depending on
exactly when Open MPI kills them.
--------------------------------------------------------------------------

Что здесь происходит и как я могу решить это? Заранее большое спасибо!

ОБНОВЛЕНИЕ 27/07/2016

Я попытался создать как можно более минималистичный фрагмент кода, чтобы воспроизвести ошибку. Ошибка теперь другая и более многословная, но по сути та же самая. Триггер все еще Исключение с плавающей точкой:

#0  Foam::error::printStack(Foam::Ostream&) at ??:?
#1  Foam::sigFpe::sigHandler(int) at ??:?
#2  ? in "/usr/lib/libpthread.so.0"#3  agg::math_stroke<agg::pod_bvector<agg::point_base<double>, 6u> >::calc_join(agg::pod_bvector<agg::point_base<double>, 6u>&, agg::vertex_dist const&, agg::vertex_dist const&, agg::vertex_dist const&, double, double) at ??:?
#4  agg::vcgen_contour::vertex(double*, double*) at ??:?
#5  agg::conv_adaptor_vcgen<agg::conv_curve<PathNanRemover<agg::conv_transform<py::PathIterator, agg::trans_affine> >, agg::curve3, agg::curve4>, agg::vcgen_contour, agg::null_markers>::vertex(double*, double*) at ??:?
#6  void point_in_path_impl<agg::conv_contour<agg::conv_curve<PathNanRemover<agg::conv_transform<py::PathIterator, agg::trans_affine> >, agg::curve3, agg::curve4> >, numpy::array_view<double const, 2>, numpy::array_view<bool, 1> >(numpy::array_view<double const, 2>&, agg::conv_contour<agg::conv_curve<PathNanRemover<agg::conv_transform<py::PathIterator, agg::trans_affine> >, agg::curve3, agg::curve4> >&, numpy::array_view<bool, 1>&) at ??:?
#7  ? at ??:?
#8  PyCFunction_Call in "/usr/lib/libpython3.5m.so.1.0"#9  PyEval_EvalFrameEx in "/usr/lib/libpython3.5m.so.1.0"#10  ? in "/usr/lib/libpython3.5m.so.1.0"#11  PyEval_EvalFrameEx in "/usr/lib/libpython3.5m.so.1.0"#12  ? in "/usr/lib/libpython3.5m.so.1.0"#13  PyEval_EvalCodeEx in "/usr/lib/libpython3.5m.so.1.0"#14  PyEval_EvalCode in "/usr/lib/libpython3.5m.so.1.0"#15  ? in "/usr/lib/libpython3.5m.so.1.0"#16  PyRun_FileExFlags in "/usr/lib/libpython3.5m.so.1.0"#17  PyRun_SimpleFileExFlags in "/usr/lib/libpython3.5m.so.1.0"#18  Py_Main in "/usr/lib/libpython3.5m.so.1.0"#19  main at ??:?
#20  __libc_start_main in "/usr/lib/libc.so.6"#21  _start at ??:?
./run.sh: line 3:  6828 Floating point exception(core dumped) PYTHONPATH=$(pwd)/pythonFOAM:$PYTHONPATH python test.py

НОТА: Я могу обойти ошибку, запустив это в терминале, прежде чем запустить свой код:

unset FOAM_SIGFPE

Все работает нормально, если я сбросил FOAM_SIGFPE, но это не очень хорошая практика, и настоящая проблема вообще не решена.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]