1.Quantum Espresso 之pw.x输入文件解读
2.Matlab通信仿真系列——信号的傅里叶(Fourier)分析
3.ASE调用DFT/MD程序使用简介
4.VASP软件中文版手册第二章:VASP简介、程序结构概要及教程
5.求频率细化分析zoomfft的C++源代码
Quantum Espresso 之pw.x输入文件解读
Quantum Espresso(QE)是一款基于密度泛函理论、采用平面波方法及赝势理论的第一性原理计算软件。其开源特性与全面的超软赝势库使其在量子化学计算领域优势显著,尤其适合对VASP版权有顾虑的研究人员。本文将聚焦于QE的reaco源码分析DFT计算模块pw.x的输入文件解析。
pw.x的输入文件结构清晰,由一系列“&”和“/”符号分割的控制计算部分组成。各选项间默认有默认值,具体规则在源码包路径下的文档中详细列出。文件中包括了所有模块及命令的列表,点击即可跳转至对应的解释、默认值及设置方法。
值得注意的是,要成功运行pw.x,还需要下载对应的赝势文件。这些文件可在Quantum Espresso的官方网站上找到,下载网址为:pseudopotentials.quantum-espresso.org...
对于QE的安装、运行及后处理过程,可参考以下链接了解更多:
最新版Quantum Espresso的分享朋友圈源码安装与使用
物理VS化学吸附?RDG,让你的文章与众不同
祝您科研顺利,探索量子化学的奥秘!
公众号推荐:计算运维鸟
Matlab通信仿真系列——信号的傅里叶(Fourier)分析
本文主要阐述了信号的傅里叶分析,包括连续信号傅里叶变换和离散信号的傅里叶变换两部分内容。对于连续信号,傅里叶变换定义为特定积分形式,反变换同样基于积分。在Matlab中,利用fourier和ifourier函数求解傅里叶变换及其逆变换。若非周期信号满足狄利克雷条件,则可展开为傅里叶级数,级数中包含信号的不同频率成分的幅度和相位信息。
针对离散信号的傅里叶变换,其定义与连续信号类似,但适用于离散时间序列。通过Matlab实现频谱图绘制,验证DTFT的频移和卷积性质。同时,通过DFT和IDFT的三角突破源码实现,展示了有限离散序列在时域和频域的转换过程。此外,Matlab源码提供了实现傅里叶分析所需的功能,包括fourier和ifourier函数源码,Matlab频谱图绘制源码,DTFT验证源码,DFT和IDFT实现源码,以及DFT卷积性质验证源码。
ASE调用DFT/MD程序使用简介
ASE,一个专为原子尺度模拟和材料性质计算设计的Python库,提供了一系列工具,适用于构建、操作和分析原子结构,以及执行多种模拟方法,如分子动力学、量子力学、分子力学和Monte Carlo等。ASE支持多种计算方法,包括能量、考试资料网源码力、应力、振动频率和电子结构的计算,以及从外部文件读取和写入结构。它与多种第三方计算软件如VASP、Quantum ESPRESSO、LAMMPS等集成,可轻松融入模拟工作流程。
ASE的安装简易,只需确保Python运行环境正确,通过pip install ase命令安装。对于离线状态,从官网下载源码包,解压后用python3 setup.py install –user安装。建议安装最新版本的ASE配合最新Python运行环境(Python版本大于3.5)以确保兼容性。使用Ubuntu 以后版本的Linux系统,自带较高版本的Python及库文件,可简化安装流程。
ASE调用计算程序如VASP、移动购物网站源码QE、DMOL3、LAMMPS等主要通过添加特定的计算器选择类中的环境变量。以下示例展示了调用不同程序的基本步骤:
1. **调用VASP**:
通过配置环境变量,编写代码直接运行,减少设置INCAR、KPOINTS、POTCAR等文件的步骤。利用Python的灵活性进行循环计算和数据处理。
2. **调用QE**:
类似于调用VASP,仅需调整环境变量名称即可。
3. **调用DMOL3**:
需要通过LAMMPS自带的Python接口加载LAMMPS程序作为Python库,然后通过ASE接口命令调用。
4. **调用LAMMPS**:
通过LAMMPS自带的Python接口,直接调用分子动力学软件。
示例代码如官网提供的使用ASE调用VASP计算NaCl总磁矩的例子(test.py),只需配置好环境变量,编写代码并运行python test.py > test.out即可完成任务。
查阅更多关于ASE调用计算程序的详细信息和操作指南,请访问ASE的计算器使用说明网站:wiki.fysik.dtu.dk/ase/a...
祝大家科研工作顺利,探索原子模拟领域的无限可能!
VASP软件中文版手册第二章:VASP简介、程序结构概要及教程
VASP是广受专业人士认可的DFT计算软件,每年发表的论文超过1万篇,至年底,文章总量达到万篇。其计算结果不仅验证实验,还能预测实验结果,为实验路线提供指导。
本文为华算科技朱老师技术团队的Cilver老师和Ravi老师制作的《VASP官方入门手册》第二篇。该教程将详细介绍VASP软件及其计算方法,帮助读者快速入门VASP计算,掌握顶刊技能。
VASP简介
VASP.4.X是一个Fortran 程序,具有动态内存分配和单一可执行文件的特点,适用于各种类型的计算。
源代码和赝势函数位于以下目录:VASP/src/vasp.4.lib、VASP/src/vasp.4.X、VASP/pot/、VASP/pot_GGA/、VASP/potpaw/、VASP/potpaw_GGA/。VASP.4.lib目录中的源代码很少更改,通常不需要重新安装。vasp.4.X目录包含主要的Fortran 代码。pot/pot_GGA/(以及可能为potpaw/ potpaw_GGA/)目录分别包含(超软)赝势和投影缀加波。LDA版本放在pot和potpaw目录中,而GGA版本(Perdew, Wang )放在pot_GGA和potpaw_GGA目录中。源文件和赝势可在文件服务器上获取(第3.2节提及)。
计算通常在工作目录下进行。在开始计算前,需要在目录下创建几个关键文件:INCAR、POTCAR、POSCAR、KPOINTS。
教程,第一步:金刚石
将tutor/diamond目录下的所有文件复制到工作目录下,然后按步骤执行。
INCAR文件是核心输入文件,决定“做什么和怎么做”。它是一个带标签的自由ASCII文件,每行由标签、等号和值组成。大多数参数有默认值。检查提供的INCAR文件长度可能比实际需要的要长。
POSCAR文件包含离子的位置。以金刚石为例,POSCAR文件包含以下几行:cubic diamond comment line、3.7 universal scaling factor、0.5 0.5 0.0 first Bravais lattice vector、等。
KPOINTS文件决定K点设置。4x4x4 Comment、 = automatic generation of k-points、Monkhorst M use Monkhorst Pack等。
POTCAR文件包含赝势(如果有多个种类的赝势,可使用UNIX命令cat连接POTCAR文件)。POTCAR文件还包含原子的相关信息。
键入命令运行VASP:> vasp。搜索路径通常在UNIX shell的PATH变量中提供(第3.2节提及)。启动VASP后,将得到类似以下的输出结果。
VASP使用Pulay混合方法的自洽循环和迭代矩阵对角化方案来计算Kohn-Sham(KS)基态。在计算中,波函数会被迭代改进,电荷密度也会被优化。stdout的副本也会写入OSZICAR文件中。各列的含义如下:N列是电子迭代步骤计数,E是当前的自由能,dE是两步之间自由能的变化,d eps是能带结构能量的变化。ncg栏表示哈密顿算符应用于波函数的频率。rms这一列给出了在所有占据带上求和的残差向量的初始范数(R = (H−εS)|φi),并表示波函数的收敛程度。最后一栏rms(c)表示输入和输出电荷密度之间的差值。在前五步中,密度和势能没有更新,对波函数进行预收敛(因此rms(c)没有显示)。前五次迭代后,开始更新电荷密度。
OUTCAR文件中包含有关力和应力张量的更多信息。WAVECAR文件存储着最终的波函数。
要计算平衡晶格常数,请尝试输入./run。确定平衡体积(例如,使用能量的二次拟合),平衡晶格常数应接近3.。在POS
求频率细化分析zoomfft的C++源代码
//下面的FFT我用了很多年了:
// 离散傅里叶变换DFT代码:
int DFT (long count, CComplex * input, CComplex * output)
{
assert(count);
assert(input);
assert(output);
CComplex F, X, T, W; int n, i;
long N = abs(count); long Inversing = count < 0? 1: -1;
for(n = 0; n < N ; n++){ // compute from line 0 to N-1
F = CComplex(0.0f, 0.0f); // clear a line
for(i = 0; i < N; i++) {
T = input[i];
W = HarmonicPI2(Inversing * n * i, N);
X = T * W;
F += X; // fininshing a line
}//next i
// save data to outpus
memcpy(output + n, &F, sizeof(F));
}//next n
return 0;
}//end DFT
//快速傅里叶变换代码FFT
int fft (long count, CComplex * input, CComplex * output)
{
assert(count);
assert(input);
assert(output);
int N = abs(count); long Inversing = count < 0? -1: 1;
if (N % 2 || N < 5) return DFT(count, input, output);
long N2 = N / 2;
CComplex * iEven = new CComplex[N2]; memset(iEven, 0, sizeof(CComplex) * N2);
CComplex * oEven = new CComplex[N2]; memset(oEven, 0, sizeof(CComplex) * N2);
CComplex * iOdd = new CComplex[N2]; memset(iOdd , 0, sizeof(CComplex) * N2);
CComplex * oOdd = new CComplex[N2]; memset(oOdd , 0, sizeof(CComplex) * N2);
int i = 0; CComplex W;
for(i = 0; i < N2; i++) {
iEven[i] = input[i * 2];
iOdd [i] = input[i * 2 + 1];
}//next i
fft(N2 * Inversing, iEven, oEven);
fft(N2 * Inversing, iOdd, oOdd );
for(i = 0; i < N2; i++) {
W = HarmonicPI2(Inversing * (- i), N);
output[i] = oEven[i] + W * oOdd[i];
output[i + N2] = oEven[i] - W * oOdd[i];
}//next i
return 0;
}//end FFT