El compilador predeterminado para las subrutinas de usuario de Abaqus es Intel Fortran, que suele ser demasiado pesado para instalarlo en el sistema. Es preferible utilizar el compilador GNU Fortran en la plataforma Linux.

Configuración en el archivo original .env

El archivo original SMA/site/abaqus_v6.env configura muchos ajustes. De hecho, el archivo de configuración para Linux SMA/site/lnx86_64.env proporciona información más valiosa:

Primer paso: compilar

Suponiendo que gfortran está instalado en su sistema Linux y funciona correctamente, un cambio intuitivo que haríamos debería ser sustituir ifort con gfortran.

Si ejecutamos el comando test $ abaqus veryfy -user_std, habrá errores:

Esto se debe a que los indicadores de compilación utilizados por gfortran no son compatibles con ifort. Así que miremos los indicadores un poco:

  • V Muestra la información de la versión del compilador (igual que la opción -logo). Simplemente podemos quitarlo.
  • auto Hace que todas las variables locales nonsave se asignen en la pila en tiempo de ejecución (igual que –automatic o –nosave). El valor predeterminado es -autoscalar. Sin embargo, si especifica –recursive o openmp, el valor predeterminado es -automatic. Podemos eliminarlo ya que no hay contraparte en gfortran.
  • mP2OPT_hpo_vec_divbyzero-F Donde resuelve dividiendo entre cero. No se ha encontrado ninguna referencia todavía. Simplemente quítalo.
  • WB Convierte una comprobación de límites de tiempo de compilación en una advertencia. Normalmente, las comprobaciones de límites de tiempo de compilación son errores. Esto es una relajación de la rigurosidad del código, podemos eliminarlo o reemplazarlo con –Warray-limits.

Segundo paso: vinculación

Después de la corrección, el error de compilación desaparecería pero se produce un error de vinculación:

 

 

 

Luego hacemos el mismo análisis de los indicadores incompatibles:

  • cxxlib Le dice al compilador que se vincule usando ciertas bibliotecas de tiempo de ejecución de C ++. Para Linux, debe eliminarse.
    threads Especifica que las bibliotecas multiproceso deben estar vinculadas. Supongo que en gfortran podríamos usar –pthread, pero sería preferible usar –fopenmp si OpenMP se usa en la subrutina del usuario.
    parallel Le dice al auto-paralelizador que genere código multihilo para bucles que se pueden ejecutar de forma segura en paralelo. Para usar esta opción, también debe especificar –O2 u –O3. Podemos usar –fopenmp en caso de necesidad, o simplemente eliminarlo.
    i-dynamic Hace que las bibliotecas proporcionadas por Intel se vinculen dinámicamente. Es lo contrario de –i-static. Debería ser eliminado. Si se prefieren las bibliotecas estáticas, se puede usar –static-libgfortran.

Archivo final .env

Finalmente, el archivo abaqus_v6.env modificado en funcionamiento en la ruta del usuario se ve así:

Aunque esto podría pasar el comando de prueba, se puede aplicar una mayor optimización del archivo