Openfast: Fallo de segmentación para la versión SIMULINK en linux

Creado en 26 abr. 2021  ·  26Comentarios  ·  Fuente: OpenFAST/openfast

Descripción del error
No se puede ejecutar la versión simulink de OpenFAST debido a un error de segmentación. La función s se compila sin problemas.
Este comportamiento existe en las ramas principal (718d46f7) y dev (216bccbf).
Estoy mostrando los resultados del brach dev ya que la rama principal tiene un error en el que no se informan los errores de simulink.

Detalles del sistema
Linux Mint 20.1, MATLAB 2020b, openblas, gcc y gfortran

Reproducir
Se utilizaron las siguientes opciones ()

  1. cmake .. -DBUILD_OPENFAST_SIMULINK_API = ON -DBUILD_SHARED_LIBS = ON
  2. fabricar
  3. hacer la instalación

Capturas de pantalla, si corresponde
Se adjunta el informe de fallos.

Versión OpenFAST
dev (216bccbf)

matlab_crash_dump.txt

Bug

Todos 26 comentarios

¿Con qué modelo estás probando?

Modifiqué "Run_OpenLoop.m" para ejecutar la turbina 5MW_Land_BD_Linear.

¿El "Run_OpenLoop.m" original también experimentó una falla de segmentación?

Con la turbina AOC_Wst, aparece un error extraño que se muestra a continuación.

%%%%%%%%%%%%%%%%%%
Error informado por la función S 'FAST_SFunc' en 'Turbina eólica no lineal OpenLoop / FAST / Función S':
FAST_InitializeAll: IfW_ Init: IfW_UniformWind_Init : No se pudo leer la columna de flujo ascendente en archivos de viento uniforme. Asumiendo
el flujo ascendente es 0.
FAST_Init ializeAll: SrvD_Init : SrvD_ ReadInput: ReadPrimaryFile : Entrada lógica no
"/home/abhineet/Documents/MyOpenFAST/openfast/reg_tests/r-test/glue-codes/openfast/AOC_WSt/AOC_WSt_ServoDyn.dat"
ocurrió al intentar leer CompNTMD.
%%%%%%%%%%%%%%%%%%%%

el formato del archivo de entrada ServoDyn ha cambiado entre v2.5.0 y lo que está actualmente en la rama de desarrollo. La palabra clave CompNTMD se usó en la versión v2.5.0 (rama principal), pero no en la rama actual dev . Parece que está ejecutando los archivos de entrada de la rama de desarrollo con la versión compilada v2.5.0 de OpenFAST.

Revisé la rama 'dev' (e0a73e19) del submódulo r-test.

Recibo el siguiente error para AOC_Wst
%%%%%%%%%%%%%%%%%
Error al usar Run_OpenLoop (línea 15)
Error informado por la función S 'FAST_SFunc' en 'Turbina eólica no lineal OpenLoop / FAST / Función S':
FAST_InitializeAll: IfW_ Init: IfW_UniformWind_Init : No se pudo leer la columna de flujo ascendente en archivos de viento uniforme. Asumiendo
el flujo ascendente es 0.
FAST_Init ializeAll: SrvD_Init : SrvD_ ReadInput: ReadPrimaryFile : Entrada lógica no
"/home/abhineet/Documents/MyOpenFAST/openfast/reg_tests/r-test/glue-codes/openfast/AOC_WSt/AOC_WSt_ServoDyn.dat"
ocurrió al intentar leer CompNTMD.
%%%%%%%%%%%%%%%%%%

pero obtengo un error en lugar de una falla de segmentación para 5MW_Land_BD_Linear
%%%%%%%%%%%%%%%%%%%%%%
Error al usar Run_OpenLoop (línea 15)
Error informado por la función S 'FAST_SFunc' en 'Turbina eólica no lineal OpenLoop / FAST / Función S':
FAST_Init ializeAll: FAST_Init : Validate InputData: LinOutJac solo se puede usar cuando LinInputs = LinOutputs = 2.
FAST_Init ializeAll: ED_Init : ED_CalcContS tateDeriv: LAPACK_DGETRF : valor ilegal en el argumento -4.
%%%%%%%%%%%%%%%%%%%%%%

También intenté ejecutar las simulaciones para las ramas 'principales' y también obtuve errores.
Puedo volver a ejecutarlos y compartir los errores si eso ayuda en la depuración.
(La rama principal tenía un error que provocaba que los errores de enlace simultáneo no se mostraran (corregidos en la rama de desarrollo), así que pensé que podría ser menos útil para informar de errores).

Dado que su mensaje de error indica occurred while trying to read CompNTMD , la versión de OpenFAST que ejecuta simulink no es la versión de desarrollo. ¿Qué versión informa OpenFAST en las primeras líneas de salida?

La salida de OpenFAST dice:

%%%%%%%%%%%%%%%%%%%%%%
OpenFAST-v2.4.0-133-gb913c945-sucio
Compilar información:

  • Compilador: GCC versión 9.3.0
  • Arquitectura: 64 bits
  • Precisión: doble
  • Fecha: 5 de enero de 2021
  • Hora: 21:12:45
    Información de ejecución:
  • Fecha: 26/04/2021
  • Hora: 09: 48: 55-0500
    %%%%%%%%%%%%%%%%%%%%%%

Además, aquí hay una captura de pantalla de mi registro de git
image

commit b913c945 está en la rama principal desde hace 4 meses. ¿Puede volver a compilar su versión actualmente extraída y volver a ejecutar el script create_FAST_SFunc.m? Esperaría ver el hash de git terminando en -g216bccbf en la salida de OpenFAST si realmente está usando la versión dev que está verificada.

Screen Shot 2021-04-26 at 9 04 32 AM

Solo para asegurarse, cuando dice recompilar, quiere decir que debería ejecutar los siguientes comandos (con la versión actual extraída)

1) cmake .. -DBUILD_OPENFAST_SIMULINK_API = ON -DBUILD_SHARED_LIBS = ON
2) hacer
3) hacer la instalación

Si. Sin embargo, primero elimine todo en el directorio de compilación ( rm -rf * dentro del directorio de compilación). Esto asegurará absolutamente que no queden módulos sobrantes de una compilación anterior.

También puede querer obtener las etiquetas recientes (git no las toma por defecto por alguna razón): get fetch --all --tags

Está bien, lo haré.

La falla de segmentación podría deberse a un conflicto en las bibliotecas LAPACK entre Matlab y OpenFAST. Recomiendo mirar https://github.com/OpenFAST/openfast/issues/482 (particularmente los últimos comentarios sobre ese tema) para ver si eso ayuda.

Otro pensamiento que mencionó @rafmudaf es verificar la ruta de instalación.

En el archivo CMakeCache.txt dentro del directorio de compilación, ¿qué muestra la entrada para la variable CMAKE_INSTALL_PREFIX ? ¿Es la misma que la ubicación especificada en create_FAST_SFunc.m ? De lo contrario, es posible que una versión anterior en la ubicación especificada en el script create_FAST_SFunc.m esté vinculando en la función mex.

Otro pensamiento que mencionó @rafmudaf es verificar la ruta de instalación.

En el archivo CMakeCache.txt dentro del directorio de compilación, ¿qué muestra la entrada para la variable CMAKE_INSTALL_PREFIX ? ¿Es la misma que la ubicación especificada en create_FAST_SFunc.m ? De lo contrario, es posible que una versión anterior en la ubicación especificada en el script create_FAST_SFunc.m esté vinculando en la función mex.

El CMakeCache.txt tiene lo siguiente
CMAKE_INSTALL_ PREFIX: PATH = / home / abhineet / Documents / MyOpenFAST / openfast / install

que es lo mismo que estoy usando en create_FAST_SFUNC.m

if ( ispc ) % Windows PC
        installDir = '../../../install';
        outDir = fullfile(installDir, 'lib');
        % If there are shared libraries does it work for outDir to be the local directory?
    else
        installDir = '../../../install';  %%%%%%% <<<<<<<<< **Here**
        outDir = '.';
    end

Si. Sin embargo, primero elimine todo en el directorio de compilación ( rm -rf * dentro del directorio de compilación). Esto asegurará absolutamente que no queden módulos sobrantes de una compilación anterior.

También puede querer obtener las etiquetas recientes (git no las toma por defecto por alguna razón): get fetch --all --tags

@ andrew-platt
Intenté lo siguiente basándome en tus comentarios
1) cd openfast
2) rm -rf ./build
3) rm -rf ./instalar
4) mkdir ./build
5) cd ./build
6) cmake .. -DBUILD_OPENFAST_SIMULINK_API = ON -DBUILD_SHARED_LIBS = ON
7) hacer -j12
8) hacer la instalación
9) cd-cdigos de pegamento / simulink / src /
10) rm ./FAST_SFunc.mexa64
11) rm ../examples/FAST_SFunc.mexa64
12) edite y ejecute create_FAST_SFunc.m (para asegurar las opciones correctas para linux built_with_visualStudio = false y installDir = '../../../install; )
13) cp ./FAST_SFunc.mexa64 ../examples/
14) ejecutar Run_OpenLoop.m con la turbina AOC_WSt

Obtengo el siguiente resultado en matlab

OpenFAST-v2.4.0-133-gb913c945-dirty
 Compile Info:
  - Compiler: GCC version 9.3.0
  - Architecture: 64 bit
  - Precision: double
  - Date: Jan  5 2021
  - Time: 21:12:45
 Execution Info:
  - Date: 04/26/2021
  - Time: 11:16:55-0500

y el mismo error
%%%%%%%%%%%%%%%%%%
Error al usar Run_OpenLoop (línea 12)
Error informado por la función S 'FAST_SFunc' en 'Turbina eólica no lineal OpenLoop / FAST / Función S':
FAST_InitializeAll: IfW_ Init: IfW_UniformWind_Init : No se pudo leer la columna de flujo ascendente en archivos de viento uniforme. Asumiendo
el flujo ascendente es 0.
FAST_Init ializeAll: SrvD_Init : SrvD_ ReadInput: ReadPrimaryFile : Entrada lógica no
"../../../reg_tests/r-test/glue-codes/openfast/AOC_WSt/AOC_WSt_ServoDyn.dat" se produjo al intentar leer
CompNTMD.
%%%%%%%%%%%%%%%%%%

Me sorprende que la información de la versión no haya cambiado. ¿Qué devuelve git describe --tags ? Espero ver algo como v2.5.0-1017-g216bccbf8

Además, ¿puedes hacer find /usr -name *openfast* ?

Además, tenga en cuenta que la fecha de compilación dice Jan 5 2021 . Definitivamente no está utilizando el archivo de biblioteca openfast que acaba de crear.

Además, ¿puedes hacer find /usr -name *openfast* ?

Ah, buena captura. La salida es

/usr/local/include/openfast
/usr/local/lib/libopenfast_prelib.so
/usr/local/lib/libopenfast_postlib.so
/usr/local/lib/libopenfastlib.so
/usr/local/bin/openfast

Supongo que está priorizando la versión anterior de OpenFAST que tiene en mi sistema una ruta de mayor prioridad.
Mi mal, y perdón por el descuido.

¿Existe una manera fácil de eliminar OpenFAST en / usr / local? ¿O debería eliminar todos los archivos OpenFAST de la carpeta / usr?

Mientras tanto, intentaré ejecutar la versión correcta de OpenFAST para asegurarme de que no se produzca ningún error de segmentación.

No hay una solución general, pero puede hacer estas cosas:

find /usr/local -name *openfast* -delete
find /usr/local -name *dyn*
# If there's something related to OpenFAST (aerodynlib, beamdynlib, etc), delete those
ls /usr/local/include
# Remove anything here related to OpenFAST

Gracias a todos por la ayuda. Conseguí que la simulación funcionara aunque tuve más problemas con las bibliotecas LAPACK.

Tengo entendido, después de leer un poco sobre el tema, que OpenBLAS incluye la biblioteca 'LAPACK' pero no 'LAPACKE', que es necesaria para OpenFAST. Esto se puede arreglar con

sudo apt install liblapacke liblapacke-dev

y luego ejecutando lo siguiente (en una nueva terminal para evitar cualquier confusión)

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:<path to openfast/install/lib>
export BLAS_VERSION=libopenblas.so
export LAPACK_VERSION=liblapacke.so
matlab

Espero que esto ayude a alguien.

Para nuestra referencia, ¿cuál fue el error LAPACK que encontró y solucionó al instalar LAPACKE?

Si utilizo las siguientes opciones

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:<path to openfast/install/lib>
export BLAS_VERSION=libopenblas.so
export LAPACK_VERSION=libopenblas.so
matlab

Recibo el siguiente error (que se solucionó usando LAPACKE)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Error al usar Run_OpenLoop (línea 12)
Error en 'OpenLoop / FAST Nonlinear Wind Turbine / S-Function' al ejecutar C MEX S-function 'FAST_SFunc', (mdlStart),
en el momento 0.0.
Causado por:
Error al usar Run_OpenLoop (línea 12)
Error de carga de LAPACK:
/usr/lib/x86_64-linux-gnu/libopenblas.so.0: símbolo indefinido: LAPACKE_sbdsdc
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Gracias.

¿Fue útil esta página
0 / 5 - 0 calificaciones