使用VSCode开发STAR-CCM+用户程序:通过Fortran构建动态库
虽然STAR-CCM+官方文档专门说明,Windows下不支持 FORTRAN1。但实际上,只要编译器支持,在Windows下使用Fortran编译出来的用户程序一样能正常在STAR-CCM+中正常加载运行。
1. 构建CMake工程
首先我们参考官方文档当中的教程案例2,编写CMake项目,项目结构如下:
STARCCM_FORTRAN_SAMPLE
│ CMakeLists.txt # CMake配置文件
│ README.md # 说明文件,非必须
├───.vscode
│ launch.json # 启动调试模式时自动生成的文件,非必须
│ settings.json # 定义CMake相关变量
└───src
initVelocity.f
StarReal.f.in
sutherlandViscosity.f
uflib.f
zeroGradT.f
CMake配置文件CMakeLists.txt
主要内容如下:
cmake_minimum_required(VERSION 3.10)
# Project name
project(UserFortran LANGUAGES Fortran)
set(CMAKE_Fortran_STANDARD 2008)
# Check for STARCCM_USER_LIB_DIR
if(NOT DEFINED STARCCM_USER_LIB_DIR)
message(FATAL_ERROR "STARCCM_USER_LIB_DIR is not defined. Please specify the path to the STAR-CCM+ UserFunctions library directory.")
# For example, in Windows : C:/Program Files/Siemens/19.06.009-R8/STAR-CCM+19.06.009-R8/star/lib/win64/clang17.0vc14.2-r8/lib
# In Linux : /opt/Siemens/19.06.009-R8/STAR-CCM+19.06.009-R8/star/lib/linux-x86_64-2.28/gnu11.4-r8/lib"
else()
message(STATUS "STARCCM_USER_LIB_DIR location : " ${STARCCM_USER_LIB_DIR})
endif()
# Check for STARCCM_STD_LIB_DIR
if(NOT DEFINED STARCCM_STD_LIB_DIR)
message(STATUS "STARCCM_STD_LIB_DIR undefined. using system standard library. ")
# For example, in Linux : /opt/Siemens/19.06.009-R8/STAR-CCM+19.06.009-R8/star/lib/linux-x86_64-2.28/system/gnu11.4-64"
else()
message(STATUS "STARCCM_STD_LIB_DIR location : " ${STARCCM_STD_LIB_DIR})
endif()
# STAR-CCM+ output precision
if(USE_DOUBLE_PRECISION)
message(STATUS "Using double precision for STAR-CCM+")
set(STAR_REAL "1D0")
else()
message(STATUS "Using float precision for STAR-CCM+")
set(STAR_REAL "1.0")
endif()
# generate the StarReal.f file
configure_file(src/StarReal.f.in ${CMAKE_BINARY_DIR}/StarReal.f @ONLY)
# Include directories
include_directories(${PROJECT_SOURCE_DIR}/include
)
# Link with STARCCM LIB directory
link_directories(${STARCCM_USER_LIB_DIR}
${STARCCM_STD_LIB_DIR}
)
# Specify the source files
set(SOURCES
${CMAKE_BINARY_DIR}/StarReal.f
src/initVelocity.f
src/sutherlandViscosity.f
src/zeroGradT.f
src/uflib.f
)
# Add library
add_library(${CMAKE_PROJECT_NAME} SHARED
${SOURCES}
)
# Link library
target_link_libraries(${CMAKE_PROJECT_NAME} UserFunctions)
# Install target
install(TARGETS ${CMAKE_PROJECT_NAME}
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib/static
)
其中有两个关键设置:
阅读时长4分钟
Andrew Moa