経緯
我らが尊師の書AMBER24とAmberTools24のインストール方法(Ag_smithさん)において特にSilicon Macでインストールがうまくできないと言う問題があるようです 個人的に原因を探ったので文章にまとめました
環境
- Machine: M2 MacBook Air, 16GB RAM
- OS: MacOS Sonoma 14.5 (尊師より少し新しい)
- Xcode: Xcode 15.4 (こちらも尊師より少し新しい)
- 尊師の書を参考にXcodeのcommand line utils的なものを入れておいてください
- 通常はこれで大体の開発ツールが入ります
現象
以下のagsmith.shにおいて次のエラーでmakeが止まる
シェルファイルの名前に尊師の御名を書き記すことを許してほしい(Elton JohnのYour songの気持ちで)
agsmith.sh
#!/bin/bash
# macOSのHomebrewで必要なソフトウェアをインストールしておく。
brew install cmake gcc wget open-mpi boost cmake-docs
# HomebrewのPrefixを設定
HOMEBREW_PREFIX=`brew --prefix`
echo $HOMEBREW_PREFIX
# HOMEBREW_PREFIXの値は、Intel Macならば/usr/local, M1 Macならば/opt/homebrewとなる。
# Homebrewのgfortran-13をgfortranとしてシンボリックリンクを貼っておく必要がある。
# これなくてよかった(gfortran14)
# ln -sf HOMEBREWPREFIX/bin/gfortran−13{HOMEBREW_PREFIX}/bin/gfortran
# # ダウンロードしてきたソースコードをtar jxvfで解凍する
tar jxvf AmberTools24.tar.bz2 ; tar jxvf Amber24.tar.bz2
cd amber24_src
# # updateを実行する
./update_amber --update
# # cmake用のbuildディレクトリに入る
cd build
# ###############################
# # ここが最重要の設定。-DCMAKE_INSTALL_PREFIXにインストール先ディレクトリを指定する
# # 下の例はホームディレクトリ以下のapps/amber24にインストールする設定。
# # MPIはONにする。Macの場合、COMPILERはCLANGを指定する。
# # -DBoost_DIR=${HOMEBREW_PREFIX}/opt/boostと-DFORCE_EXTERNAL_LIBS="boost"とすることで、
# # Homebrewで入れたBoostを使うようになる。なぜか必須のようだ。
# # 2024年5月2日時点で、macOS Sonoma 14.4とXCode 15.3とOpenMPIを使っている場合、gfortranのMPIのLinker flagsに問題があるようで、
# # -DMPI_Fortran_LINK_FLAGS=-Wl,-ld_classicをつける必要がある。
# ###############################
HOMEBREW_PREFIX=`brew --prefix`
AMBER_PREFIX=$(dirname $(dirname `pwd`))
cmake $AMBER_PREFIX/amber24_src \
-DCMAKE_INSTALL_PREFIX=${HOME}/apps/amber24 -DCOMPILER=CLANG -DBLA_VENDOR=Apple \
-DBoost_DIR=${HOMEBREW_PREFIX}/opt/boost -DFORCE_EXTERNAL_LIBS="boost" \
-DMPI=TRUE -DBUILD_GUI=FALSE -DCUDA=FALSE -DINSTALL_TESTS=TRUE -DMPI_Fortran_LINK_FLAGS=-Wl,-ld_classic \
-DDOWNLOAD_MINICONDA=TRUE -LA 2>&1 | tee cmake.log
# # Intel Macの人向け:mpi4pyをどうしても入れたい人へ
# # makeが終わってからでも良い
# ./CMakeFiles/miniconda/install/bin/python3.11 -m pip install mpi4py
# # Configureが正常終了していることを確認したらmakeとインストールを実行する
make -j8 install
エラー時のシェル
[ 96%] Building Fortran object src/pmemd/src/CMakeFiles/pmemd.decomp.dir/dihedrals.F90.o
/Users/kitty/amber24/amber24_src/src/pmemd/src/dihedrals.i:2:7:
2 | use ti_decomp_mod
| 1
Fatal Error: Cannot open module file 'ti_decomp_mod.mod' for reading at (1): No such file or directory
compilation terminated.
make[2]: *** [src/pmemd/src/CMakeFiles/pmemd.decomp.dir/dihedrals.F90.o] Error 1
make[1]: *** [src/pmemd/src/CMakeFiles/pmemd.decomp.dir/all] Error 2
make: *** [all] Error 2
現象の再現
- 10/10(100%)
原因
hoge.i
というのはFortranのインクルードファイル的なもののようで、その中でamber modulesにあるライブラリ的なものをuse
で使おうとしてファイルが、ない! って失敗している
つまりti_decomp_mod.mod
がないのだ(これが主な原因)
しかしソースコードの周囲を見ると
#ifdef TIDECOMP
use ti_decomp_mod
#endif
use gbl_constants_mod
use mdin_ctrl_dat_mod
use parallel_dat_mod
use prmtop_dat_mod
use ti_mod
#ifdef _OPENMP_
use omp_lib
#endif
implicit none
エラーの原因であるuse ti_decomp_mod
はTIDECOMP
がdefineされているときに限り通過する
つまりこれを回避してしまえばmakeは通る(makeるが勝ち?)
/amber24_src/src/pmemd/src/CMakelists.txt
の二行だけ修正を加えるとこれが可能となる
自分の環境では修正を施した代替ファイルを用意してしまって、まるっとダウンロードしたソースコードに
上書きしている
正直2行を示してこう書き換えてねでもいいのだしパッチファイルを作るのが正しいが
我々は次のファイルをamber24_src
ディレクトリと同じ階層に配置するとその次に示す
agsmith.sh
(改)を実行するだけで上書いてmake
が通るようになる(なんと!)
CMakeLists.txt.mod
と言う名前でamber24_src
と同じ階層にこのファイルを配置する
#CMake buildfile for PMEMD
add_subdirectory(xray)
set(PMEMD_FORTRAN_SOURCES gbl_constants.F90 gbl_datatypes.F90 state_info.F90 file_io_dat.F90
external_dat.F90
mdin_ctrl_dat.F90 mdin_emil_dat.F90 mdin_ewald_dat.F90 mdin_debugf_dat.F90 prmtop_dat.F90
inpcrd_dat.F90 dynamics_dat.F90 emil.F90 img.F90 nbips.F90 offload_allocation.F90
parallel_dat.F90 parallel.F90 gb_parallel.F90
pme_direct.F90 pme_recip_dat.F90 pme_slab_recip.F90 pme_blk_recip.F90
pme_slab_fft.F90 pme_blk_fft.F90 pme_fft_dat.F90 fft1d.F90
bspline.F90 nebread.F90 neb.F90 pme_force.F90 pbc.F90 nb_pairlist.F90 gb_ene_hybrid.F90
nb_exclusions.F90 cit.F90 dynamics.F90 bonds.F90 angles.F90 dihedrals.F90
extra_pnts_nb14.F90 runmd.F90 resamplekin.F90 loadbal.F90 shake.F90 prfs.F90 mol_list.F90
runmin.F90 constraints.F90 axis_optimize.F90 gb_ene.F90 veclib.F90 gb_force.F90
timers.F90 pmemd_lib.F90 runfiles.F90 file_io.F90
bintraj.F90 binrestart.F90 phmd.F90
pmemd.F90 random.F90 degcnt.F90 erfcfun.F90 nmr_calls.F90 nmr_lib.F90
get_cmdline.F90 master_setup.F90 pme_alltasks_setup.F90 pme_setup.F90
ene_frc_splines.F90 gb_alltasks_setup.F90 nextprmtop_section.F90
angles_ub.F90 dihedrals_imp.F90 cmap.F90 charmm.F90 charmm_gold.F90
findmask.F90 remd.F90 multipmemd.F90 remd_exchg.F90 amd.F90 gamd.F90 ti.F90 gbsa.F90
barostats.F90 scaledMD.F90 constantph.F90 constante.F90 energy_records.F90 constantph_dat.F90
constante_dat.F90 external.F90 relaxmd.F90 sgld.F90 emap.F90 get_efield_energy.F90
processor.F90 parallel_processor.F90 pme_fft_midpoint.F90 pme_recip_midpoint.F90
dihedrals_midpoint.F90 angles_midpoint.F90 bonds_midpoint.F90 runreweight.F90
dbg_arrays.F90 mcres.F90 ensure_alloc.F90 reservoir.F90 sams.F90 ramd.F90
asm_CV.F90 asm_multiCV.F90 asm_splines_utilities.F90
asm_utilities.F90 asm_CV_utilities.F90 asm.F90
gti.F90 reaf.F90 rmsd.F90
xray_globals.F90
xray_interface.F90
xray_interface_impl_cpu.F90
xray_interface_pre_init_data.F90
constants.F90 assert.F90
hybridsolvent_remd.F90
md_scheme.F90
ti_decomp.F90)
set(PMEMD_FORTRAN_GPU_SOURCES
xray_interface_impl_gpu.F90
)
set(PMEMD_C_SOURCES pmemd_clib.c)
set(PMEMD_CXX_SOURCES boost-gamma-distribution.cpp)
# PLUMED
set(PLUMED_SOURCE Plumed.c)
#Fortran NFE sources
set(PMEMD_NFE_SOURCES nfe_lib.F90 nfe_setup.F90 nfe_colvar.F90 nfe_smd.F90 nfe_abmd.F90 nfe_pmd.F90 nfe_bbmd.F90 nfe_stsm.F90)
message(STATUS "KMMD_LIB: ${KMMD_LIB}")
#build settings
#------------------------------------------------------------------------------------------
set_property(SOURCE ${PMEMD_C_SOURCES} PROPERTY COMPILE_FLAGS "${PMEMD_CFLAGS_SPC}")
set_property(SOURCE ${PMEMD_FORTRAN_SOURCES} ${PMEMD_NFE_SOURCES} PROPERTY COMPILE_FLAGS "${PMEMD_FFLAGS_SPC}")
# compile pmemd prmtop_dat at lower optimization for buggy gnu 5.x: see bug 303.
if(PMEMD_GNU_BUG_303)
append_compile_flags(-fno-tree-vectorize prmtop_dat.F90)
endif()
# PLUMED
set_property(SOURCE ${PLUMED_SOURCE} PROPERTY COMPILE_FLAGS "${PMEMD_NO_OPT_CFLAGS_SPC}")
if(plumed_ENABLED)
set_property(SOURCE ${PLUMED_SOURCE} PROPERTY COMPILE_DEFINITIONS __PLUMED_STATIC_KERNEL)
elseif(PLUMED_RUNTIME_LINK)
set_property(SOURCE ${PLUMED_SOURCE} PROPERTY COMPILE_DEFINITIONS __PLUMED_HAS_DLOPEN)
endif()
#executables
#------------------------------------------------------------------------------------------
include_directories(.)
if(CUDA)
add_subdirectory(cuda)
# avoid building all of the source code multiple times by making an object library
# --------------------------------------------------------------------
add_library(pmemd_obj_cuda OBJECT ${PMEMD_C_SOURCES} ${PMEMD_CXX_SOURCES} ${PMEMD_FORTRAN_SOURCES} ${PMEMD_FORTRAN_GPU_SOURCES} ${PMEMD_NFE_SOURCES} ${PLUMED_SOURCE})
config_module_dirs(pmemd_obj_cuda ${PMEMD_MOD_DIR}/cuda ${AMBER_COMMON_MOD_DIR} ${NETCDF_FORTRAN_MOD_DIR})
add_dependencies(pmemd_obj_cuda amber_common netcdff)
target_compile_definitions(pmemd_obj_cuda PRIVATE ${PMEMD_DEFINITIONS} ${PMEMD_CUDA_DEFINES})
target_include_directories(pmemd_obj_cuda PRIVATE $<TARGET_PROPERTY:boost_headers,INTERFACE_INCLUDE_DIRECTORIES>)
if(${CMAKE_VERSION} VERSION_LESS "3.12.0")
target_include_directories(
pmemd_obj_cuda
PUBLIC
$<TARGET_PROPERTY:PMEMD::xray_gpu,INTERFACE_INCLUDE_DIRECTORIES>
)
target_compile_definitions(
pmemd_obj_cuda
PUBLIC
$<TARGET_PROPERTY:PMEMD::xray_gpu,INTERFACE_COMPILE_DEFINITIONS>
)
add_dependencies(pmemd_obj_cuda PMEMD::xray_gpu)
else()
target_link_libraries(pmemd_obj_cuda PUBLIC PMEMD::xray_gpu) # requires CMake-3.12
endif()
if(MPI)
make_mpi_version(pmemd_obj_cuda pmemd_obj_cuda_mpi LANGUAGES Fortran)
target_compile_options(pmemd_obj_cuda_mpi PRIVATE ${PMEMD_MPI_FLAGS})
target_compile_definitions(pmemd_obj_cuda_mpi PRIVATE ${PMEMD_MPI_DEFINITIONS})
config_module_dirs(pmemd_obj_cuda_mpi ${PMEMD_MOD_DIR}/cuda_mpi ${AMBER_COMMON_MOD_DIR} ${NETCDF_FORTRAN_MOD_DIR})
endif()
# now make the executables
# --------------------------------------------------------------------
foreach(PRECISION ${PMEMD_CUDA_PRECISIONS})
if(HIP)
set(EXE_NAME pmemd.hip_${PRECISION})
else()
set(EXE_NAME pmemd.cuda_${PRECISION})
endif()
add_executable(${EXE_NAME} $<TARGET_OBJECTS:pmemd_obj_cuda>)
set_property(TARGET ${EXE_NAME} PROPERTY LINKER_LANGUAGE Fortran)
target_link_libraries(${EXE_NAME} pmemd_cuda_${PRECISION} emil amber_common netcdff netlib boost_headers ${KMMD_LIB} PMEMD::xray_gpu)
cuda_add_cufft_to_target(${EXE_NAME})
# PLUMED
if(PLUMED_RUNTIME_LINK)
target_link_libraries(${EXE_NAME} dl)
set_target_properties(${EXE_NAME} PROPERTIES ENABLE_EXPORTS TRUE)
else()
if(plumed_ENABLED)
target_link_libraries(${EXE_NAME} plumed)
endif()
endif()
install(TARGETS ${EXE_NAME} DESTINATION ${BINDIR} COMPONENT pmemd_CUDA)
if(MPI)
add_executable(${EXE_NAME}.MPI $<TARGET_OBJECTS:pmemd_obj_cuda_mpi>)
set_property(TARGET ${EXE_NAME}.MPI PROPERTY LINKER_LANGUAGE Fortran)
target_link_libraries(${EXE_NAME}.MPI pmemd_cuda_${PRECISION}_mpi emil_mpi amber_common netcdff netlib mpi_c mpi_cxx mpi_fortran boost_headers PMEMD::xray_gpu ${KMMD_LIB})
# PLUMED
if(PLUMED_RUNTIME_LINK)
target_link_libraries(${EXE_NAME}.MPI dl)
set_target_properties(${EXE_NAME}.MPI PROPERTIES ENABLE_EXPORTS TRUE)
else()
if(plumed_ENABLED)
target_link_libraries(${EXE_NAME}.MPI plumed)
endif()
endif()
install(TARGETS ${EXE_NAME}.MPI DESTINATION ${BINDIR} COMPONENT pmemd_CUDA)
endif()
endforeach()
if(HIP)
#copy pmemd.hip.SPFP to pmemd.hip.
install(CODE "execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink
\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${BINDIR}/pmemd.hip_${PMEMD_DEFAULT_PRECISION}
\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${BINDIR}/pmemd.hip)" COMPONENT pmemd_CUDA)
if(MPI)
install(CODE "execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink
\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${BINDIR}/pmemd.hip_${PMEMD_DEFAULT_PRECISION}.MPI
\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${BINDIR}/pmemd.hip.MPI)" COMPONENT pmemd_CUDA)
endif()
else()
#copy pmemd.cuda.SPFP to pmemd.cuda.
#This is actually kind of tricky, as CMake doesn't support renaming targets on install, so we have to do it ourselves.
install(CODE "execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink
\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${BINDIR}/pmemd.cuda_${PMEMD_DEFAULT_PRECISION}
\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${BINDIR}/pmemd.cuda)" COMPONENT pmemd_CUDA)
if(MPI)
install(CODE "execute_process(COMMAND ${CMAKE_COMMAND} -E create_symlink
\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${BINDIR}/pmemd.cuda_${PMEMD_DEFAULT_PRECISION}.MPI
\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${BINDIR}/pmemd.cuda.MPI)" COMPONENT pmemd_CUDA)
endif()
endif()
endif()
add_executable(pmemd ${PMEMD_C_SOURCES} ${PMEMD_CXX_SOURCES} ${PMEMD_FORTRAN_SOURCES} ${PMEMD_NFE_SOURCES} ${PLUMED_SOURCE})
config_module_dirs(pmemd ${PMEMD_MOD_DIR} ${AMBER_COMMON_MOD_DIR} ${NETCDF_FORTRAN_MOD_DIR})
# Address sanitizer must be first linked library
target_link_libraries(pmemd emil amber_common netcdff netlib boost_headers ${KMMD_LIB} PMEMD::xray_cpu)
target_compile_definitions(pmemd PRIVATE ${PMEMD_DEFINITIONS})
set_property(TARGET pmemd PROPERTY LINKER_LANGUAGE Fortran)
# PLUMED
if(PLUMED_RUNTIME_LINK)
target_link_libraries(pmemd dl)
set_target_properties(pmemd PROPERTIES ENABLE_EXPORTS TRUE)
else()
if(plumed_ENABLED)
target_link_libraries(pmemd plumed::plumed)
endif()
endif()
if(mbx_ENABLED)
target_link_libraries(pmemd MBX::mbx)
target_compile_definitions(pmemd PRIVATE MBX)
endif()
install(TARGETS pmemd DESTINATION ${BINDIR} COMPONENT pmemd)
add_executable(pmemd.decomp ${PMEMD_C_SOURCES} ${PMEMD_CXX_SOURCES} ${PMEMD_FORTRAN_SOURCES} ${PMEMD_NFE_SOURCES} ${PLUMED_SOURCE})
config_module_dirs(pmemd.decomp ${PMEMD_MOD_DIR} ${AMBER_COMMON_MOD_DIR} ${NETCDF_FORTRAN_MOD_DIR})
# Address sanitizer must be first linked library
target_link_libraries(pmemd.decomp emil amber_common netcdff netlib boost_headers ${KMMD_LIB} PMEMD::xray_cpu)
#list(APPEND PMEMD_DEFINITIONS TIDECOMP)
target_compile_definitions(pmemd.decomp PRIVATE ${PMEMD_DEFINITIONS})
set_property(TARGET pmemd.decomp PROPERTY LINKER_LANGUAGE Fortran)
# PLUMED
if(PLUMED_RUNTIME_LINK)
target_link_libraries(pmemd.decomp dl)
set_target_properties(pmemd.decomp PROPERTIES ENABLE_EXPORTS TRUE)
else()
if(plumed_ENABLED)
target_link_libraries(pmemd.decomp plumed::plumed)
endif()
endif()
if(mbx_ENABLED)
target_link_libraries(pmemd.decomp MBX::mbx)
target_compile_definitions(pmemd.decomp PRIVATE MBX)
endif()
install(TARGETS pmemd.decomp DESTINATION ${BINDIR} COMPONENT pmemd_decomp)
#list(REMOVE_ITEM PMEMD_DEFINITIONS TIDECOMP)
# MPI parallelization
if(MPI)
make_mpi_version(pmemd pmemd.MPI LANGUAGES Fortran)
config_module_dirs(pmemd.MPI ${PMEMD_MOD_DIR}/mpi ${AMBER_COMMON_MOD_DIR} ${NETCDF_FORTRAN_MOD_DIR})
target_compile_definitions(pmemd.MPI PRIVATE ${PMEMD_MPI_DEFINITIONS})
target_compile_options(pmemd.MPI PRIVATE ${PMEMD_MPI_FLAGS})
install(TARGETS pmemd.MPI DESTINATION ${BINDIR} COMPONENT pmemd_MPI)
if(OPENMP AND PMEMD_OMP_MPI)
make_openmp_version(pmemd.MPI pmemd.OMP.MPI LANGUAGES Fortran)
config_module_dirs(pmemd.OMP.MPI ${PMEMD_MOD_DIR}/omp_mpi ${AMBER_COMMON_MOD_DIR} ${NETCDF_FORTRAN_MOD_DIR})
target_compile_definitions(pmemd.OMP.MPI PRIVATE ${PMEMD_OMP_DEFINITIONS})
target_compile_options(pmemd.OMP.MPI PRIVATE ${PMEMD_OMP_FLAGS})
target_link_libraries(pmemd.OMP.MPI openmp_fortran ${KMMD_LIB})
install(TARGETS pmemd.OMP.MPI DESTINATION ${BINDIR} COMPONENT pmemd_MPI)
endif()
endif()
# MIC parallelization
if(MIC_KL)
# mic2 only exists as an MPI version
copy_target(pmemd.MPI pmemd.mic_kl.MPI)
config_module_dirs(pmemd.mic_kl.MPI ${PMEMD_MOD_DIR}/mic_kl ${AMBER_COMMON_MOD_DIR} ${NETCDF_FORTRAN_MOD_DIR})
target_link_libraries(pmemd.mic_kl.MPI openmp_fortran)
# add mic flags
target_compile_options(pmemd.mic_kl.MPI PRIVATE ${PMEMD_MIC_FLAGS})
# also add openmp flags
target_compile_definitions(pmemd.mic_kl.MPI PRIVATE ${PMEMD_OMP_DEFINITIONS})
target_compile_options(pmemd.mic_kl.MPI PRIVATE ${PMEMD_OMP_FLAGS})
install(TARGETS pmemd.mic_kl.MPI DESTINATION ${BINDIR} COMPONENT pmemd_MIC)
endif()
修正箇所
223: #list(APPEND PMEMD_DEFINITIONS TIDECOMP) # 223行目をコメントアウト
244: #list(REMOVE_ITEM PMEMD_DEFINITIONS TIDECOMP) # 244行目もコメントアウト
agsmith.sh
(改)
#!/bin/bash
# macOSのHomebrewで必要なソフトウェアをインストールしておく。
brew install cmake gcc wget open-mpi boost cmake-docs
# HomebrewのPrefixを設定
HOMEBREW_PREFIX=`brew --prefix`
echo $HOMEBREW_PREFIX
# HOMEBREW_PREFIXの値は、Intel Macならば/usr/local, M1 Macならば/opt/homebrewとなる。
# Homebrewのgfortran-13をgfortranとしてシンボリックリンクを貼っておく必要がある。
# これなくてよかった(gfortran14)
# ln -sf HOMEBREWPREFIX/bin/gfortran−13{HOMEBREW_PREFIX}/bin/gfortran
# # ダウンロードしてきたソースコードをtar jxvfで解凍する
tar jxvf AmberTools24.tar.bz2 ; tar jxvf Amber24.tar.bz2
# つけるタイプの魔法(?)
cp ./CMakelists.txt.mod ./amber24_src/src/pmemd/src/CMakelists.txt
cd amber24_src
# # updateを実行する
./update_amber --update
# # cmake用のbuildディレクトリに入る
cd build
# ###############################
# # ここが最重要の設定。-DCMAKE_INSTALL_PREFIXにインストール先ディレクトリを指定する
# # 下の例はホームディレクトリ以下のapps/amber24にインストールする設定。
# # MPIはONにする。Macの場合、COMPILERはCLANGを指定する。
# # -DBoost_DIR=${HOMEBREW_PREFIX}/opt/boostと-DFORCE_EXTERNAL_LIBS="boost"とすることで、
# # Homebrewで入れたBoostを使うようになる。なぜか必須のようだ。
# # 2024年5月2日時点で、macOS Sonoma 14.4とXCode 15.3とOpenMPIを使っている場合、gfortranのMPIのLinker flagsに問題があるようで、
# # -DMPI_Fortran_LINK_FLAGS=-Wl,-ld_classicをつける必要がある。
# ###############################
HOMEBREW_PREFIX=`brew --prefix`
AMBER_PREFIX=$(dirname $(dirname `pwd`))
cmake $AMBER_PREFIX/amber24_src \
-DCMAKE_INSTALL_PREFIX=${HOME}/apps/amber24 -DCOMPILER=CLANG -DBLA_VENDOR=Apple \
-DBoost_DIR=${HOMEBREW_PREFIX}/opt/boost -DFORCE_EXTERNAL_LIBS="boost" \
-DMPI=TRUE -DBUILD_GUI=FALSE -DCUDA=FALSE -DINSTALL_TESTS=TRUE -DMPI_Fortran_LINK_FLAGS=-Wl,-ld_classic \
-DDOWNLOAD_MINICONDA=TRUE -LA 2>&1 | tee cmake.log
# # Intel Macの人向け:mpi4pyをどうしても入れたい人へ
# # makeが終わってからでも良い
# ./CMakeFiles/miniconda/install/bin/python3.11 -m pip install mpi4py
# # Configureが正常終了していることを確認したらmakeとインストールを実行する
make -j8 install
そして
- 実はamber24ではわりと最近のアップデートでFortranのソースコードにこの
TIDECOMP
でifdef
を切りまくって新しい修正を入れている - つまりこれを無効化するのは最新の修正(=私たちの欲しかったもの)が入らないのでコレジャナイ感がすごい
本当に必要な修正は
-
amber24_src/build/amber-modules/pmemd
以下にti_decomp_mod.mod
があることが望ましい - またそのファイルをFortranソースコードから作り出すようにcmakeを調整する必要がある
- たぶん配布物を入れ忘れただけのような気がする
- もしLinuxで最新のビルドが問題なければ単純にMac向けアップデータのダウンロードしたペイロードに必要なファイルが入ってなかっただけである
そして伝説へ...
尊師にはもちろん広島カープにも頑張ってほしい
Q.E.D