百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

MacOS系统安装ShengBTE(mac安装苹果系统)

itomcoil 2025-07-24 18:41 7 浏览

本教程基于 Apple Silicon M4 芯片的 macOS 系统,默认 Shell 为 zsh,包管理器为 Homebrew。

1. 安装依赖工具

使用 Homebrew 安装所需组件:

brew install gcc # 安装 gfortran
brew install open-mpi # 安装 mpif90 等 MPI 工具
brew install cmake # 构建 Spglib 使用
brew install lapack # 线性代数库

2. 编译并安装 Spglib 动态库

2.1 获取并构建 Spglib

git clone https://github.com/spglib/spglib.git
cd spglib
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/opt/homebrew
make
make install

2.2 验证动态库生成

ls /opt/homebrew/lib/libsymspg.dylib

3. 配置动态库路径

为使系统能找到 Spglib 的动态链接库,需设置环境变量:

echo 'export DYLD_LIBRARY_PATH=/opt/homebrew/lib:$DYLD_LIBRARY_PATH' >> ~/.zshrc
source ~/.zshrc

验证环境变量设置:

echo $DYLD_LIBRARY_PATH

4. 下载并编译 ShengBTE

4.1 获取源码并准备编译配置

git clone https://github.com/shengbte/shengbte.git
cd shengbte
cp arch.make.example Src/arch.make
cd Src

4.2 检查工具路径(推荐)

确认实际路径以便正确配置 arch.make

which mpif90
which gfortran
find /opt/homebrew -name mpi.mod

以我安装的路径为例:

  • /opt/homebrew/bin/mpif90

  • /opt/homebrew/Cellar/open-mpi/5.0.7/include/mpi.mod

4.3 编辑 arch.make

根据路径填写如下内容:

MPIFC = /opt/homebrew/bin/mpif90

FCFLAGS = -O3 -fopenmp \
-I/opt/homebrew/include \
-I/opt/homebrew/Cellar/open-mpi/5.0.7/include

LDFLAGS = -fopenmp \
-L/opt/homebrew/lib \
-L/opt/homebrew/Cellar/open-mpi/5.0.7/lib

LIBS = -llapack -lblas -lsymspg

4.4 修复 OpenMP 报错

若出现如下编译错误:

Function 'omp_get_thread_num' has no IMPLICIT type

应在 processes.f90 文件开头添加:

use omp_lib

4.5 编译 ShengBTE

完成设置后开始编译:

make clean
make

成功后将在上级目录生成 ShengBTE 可执行文件。

5. 运行 ShengBTE 自带示例

ShengBTE 提供了包含 Si 材料的测试输入文件,可直接运行测试:

cd Test-QE
mpirun -np 2 ../ShengBTE

运行成功则显示:

 Info: symmetry group F-43m detected
Info: 24 symmetry operations
Info: This calculation is running on 2 MPI process(es)
Info: Ntot = 1728
Info: Nlist = 72
Info: about to obtain the spectrum
Info: expecting Quantum Espresso 2nd-order format
Info: about to set the acoustic frequencies at Gamma to zero
Info: original values:
Info: omega(1,1) = -1.0637325153768564E-006 rad/ps
Info: omega(1,2) = -7.1685042455799367E-007 rad/ps
Info: omega(1,3) = -3.6795686840623725E-007 rad/ps
Info: spectrum calculation finished in .220 seconds
Info: start calculating specific heat and kappa in the small-grain limit
Info: Temperature = 300.00000000000000
Info: Ntotal_plus = 744806
Info: Ntotal_minus = 889888
Info: max(N_plus), max(N_minus) 4193 4226
Info: calculating Vp_plus and Vp_minus at 1.406 seconds
Info: 100% done.
Info: start calculating kappa at 53.353 seconds
Info: Temperature= 300.00000000000000
Info: Iteration : 1 Timer : 54.701 seconds
Info: Relative change = 4.3050694775070453E-002
Info: Iteration : 2 Timer : 54.965 seconds
Info: Relative change = 2.2918199207035368E-002
Info: Iteration : 3 Timer : 55.227 seconds
Info: Relative change = 1.0854734510184971E-003
Info: Iteration : 4 Timer : 55.494 seconds
Info: Relative change = 1.1990264474953931E-003
Info: Iteration : 5 Timer : 55.762 seconds
Info: Relative change = 3.6190955255322710E-005
Info: Iteration : 6 Timer : 56.041 seconds
Info: Relative change = 8.6267549862898885E-005
Info: Iteration : 7 Timer : 56.308 seconds
Info: Relative change = 1.1841815598354433E-005
Info: Iteration : 8 Timer : 56.563 seconds
Info: Relative change = 7.5852438801879826E-006
Info: normal exit after 56.580 seconds

相关推荐

字符串可以这样加索引,你知吗?(字符串怎么加)

相信大多数小伙伴跟咔咔一样,给字符串添加索引从未设置过长度,今天就来聊聊如何正确的给字符串加索引。一、如何建立索引大多数系统都会存在用户表,并且系统初始设计使用了手机号码登录的。这是产品提出了一个需求...

MySQL高频函数Top10!数据分析效率翻倍,拒绝无效加班!

引言:为什么你的SQL代码又臭又长?“同事3行代码搞定的事,你写了30行?”“每次处理日期、字符串都抓狂,疯狂百度?”——不是你不努力,而是没掌握这些高频函数!本文精炼8年数据库开发经验,总结出10个...

上亿数据怎么玩深度分页?兼容MySQL + ES + MongoDB

推荐学习阿里P8MySQL,基础/索引/锁/日志/调优都不误,一锅深扒端给你“吃”完这本Java性能调优实战,MySQL+JVM+Tomcat等问题一键全消面试题&真实经历面试题:在数据量很大的情...

Hive如何比较两张表所有字段的一致性

前言随着MySQL技术发展,通过垂直或水平拆分能够支持相当大的数据量,目前很多公司把SQLServer、Oracledb或其他数据库迁移到MySQL上,迁移数据量很大(数据库已经水平拆分成很多Sha...

MySql:函数盘点(mysql函数用法)

一、MySQL函数1、数学函数常用的有:(1)ABS()绝对值(2)CEILING()大于等于我的最小整数(天花板)(3)FLOOR()小于等于我的最大整数(地板)(4)RAND()返回0~1...

mysql的截取函数用法详解(mysql截取字符串函数的sql语句)

substring()函数测试数据准备:用法:以下语法是mysql自动提示的1:substirng(str,pos):从指定位置开始截取一直到数据完成str:需要截取的字段的pos:开始截取的位置。从...

mysql拼接函数讲解及配合截取函数使用

在上一篇我们讲解了mysql的截取函数用法。本篇我们将讲解mysql的拼接函数以及配合截取函数实现当留言数字过多省略显示的场景。concat函数:把参数连成一个长字符串并返回(任何参数是NULL时返回...

MySQL实现字段分割(一行转多行)(mysql 分割)

先看一下数据结构,我这里字段比较少,只弄了最重要的部分根据我们上次学到的LEFT()函数进行分组SELECTLEFT(provinces,6),COUNT(1)FROM`region_map_c...

MySQL(143)如何优化分页查询?(mysql高效分页查询)

优化分页查询是提升数据库性能和用户体验的重要手段。特别是在处理大数据集时,分页查询的效率对系统性能有显著影响。以下是优化分页查询的详细步骤和代码示例。一、传统分页查询传统的分页查询使用OFFSET...

Go语言实现连接MySql基础操作(golang mysql orm)

在Go中,可以使用database/sql包来连接和操作MySQL数据库。以下是一个简单的示例程序,它演示了如何连接MySQL数据库并执行查询操作:packagemainimpo...

MySQL 如何巧妙解决 Too many connections 报错?

1.背景在日常的MySQL运维中,难免会出现参数设置不合理,导致MySQL在使用过程中出现各种各样的问题。今天,我们就来讲解一下MySQL运维中一种常见的问题:最大连接数设置不合理,一旦...

MYSQL数据同步(mysql数据同步机制)

java开发工程师在实际的开发经常会需要实现两台不同机器上的MySQL数据库的数据同步,要解决这个问题不难,无非就是mysql数据库的数据同步问题。但要看你是一次性的数据同步需求,还是定时数据同步,亦...

Go语言MySQL的简单应用(go mysql prepare)

要在Go中处理MySQL数据库,可以使用第三方包,例如go-sql-driver/mysql。以下是一个简单的示例代码:packagemainimport("dat...

最简洁详细的SSM框架整合(ssm框架完整的功能流程)

创建项目和SSM框架整合思路一、创建项目因为后面会配置springMVC,所以用IDEA的web骨架创建一个maven项目。创建项目目录如下,同时,项目需要的包和文件已手动创建好了:项目目录上图中,a...

部署canal server 1.1.5,消费mysql信息,订阅测试

一、CanalServer的核心架构CanalServer是阿里巴巴开源的MySQLbinlog增量订阅与消费组件,其架构设计围绕高可用、高性能、低延迟三大目标构建,主要包含以下核心...