CASTEP (http://www.castep.org/)是一款電子結構軟體,可以計算Kohn-Sham框架下的平面波DFT,能夠完成VASP能夠完成的大部分計算。相比於VASP有幾個優勢:
能夠完成基本所有VASP能實現的功能和一些VASP不能實現的功能,比如path-integral MD
較高的並行效率,支持G-vector parallelism、k-points parallelism和band parallelism
On-the-fly自動生成和泛函配套的贗勢,所以大部分時候只要給元素和泛函就可以,省事
學術免費,這對於新成立的課題組極度友好,代碼可以通過填表獲取http://www.castep.org/CASTEP/GettingCASTEP
劣勢主要是國內的文檔,特別是中文文檔嚴重不足。本文記錄一下CASTEP並行版的安裝過程(CASTEP 19.1 linux學術版本安裝教程)。
本文的linux版本、編譯環境版本如下:
Linux發行版本:Ubuntu20.04
CASTEP版本: 19.11
編譯器:gfortran9.3.0
並行庫:openmpi
安裝前建議閱讀安裝指南,見代碼主目錄下的README.INSTALL
1. 安裝gfortran,g++等編譯器
打開terminal,輸入
sudo apt install gfortransudo apt install g++sudo apt install gccsudo apt install build-essentialsudo apt install python看一下gfortran的版本
gfortran是9.3.0的,別的版本應該也可以。
2. 安裝intel-mkl數學庫
Intel-mkl的官方網址:
https://software.intel.com/content/www/us/en/develop/articles/installing-intel-free-libs-and-python-apt-repo.html
打開terminal,輸入:
sudo bashcd /tmpwget https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS-2019.PUBapt-key add GPG-PUB-KEY-INTEL-SW-PRODUCTS-2019.PUBrm GPG-PUB-KEY-INTEL-SW-PRODUCTS-2019.PUBexitsudo wget https://apt.repos.intel.com/setup/intelproducts.list -O /etc/apt/sources.list.d/intelproducts.listsudo apt install intel-mkl如果出現以下內容,按esc鍵就會繼續裝了…
3. 安裝openmpi並行庫
Openmpi的官方網址:https://www.open-mpi.org/software/ompi/v4.0/
tar -xzvf openmpi-4.0.4.tar.gzcd openmpi-4.0.4./configure --prefix=$HOME/openmpimake allmake install打開.bashrc添加環境變量
在最後面加上,並保存
export PATH=$PATH:$HOME/openmpi/binexport LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/openmpi/libsource一下~/.bashrc
看一下mpirun有沒有裝上
4. 安裝CASTEP
tar -xzvf CASTEP-19.11.tar.gzcd CASTEP-19.11CASTEP會自動探測默認的編譯環境,輸入
得到
和之前安裝的gfortran9 對得上
設置一下mkl的環境變量
export INCLUDE=/usr/include/mkl/開始安裝castep
make MATHLIBS=mkl10 FFT=mkl COMMS_ARCH=mpi SUBARCH=mpi
分別輸入mkl的blas和mkl的fftw庫位置
/usr/lib/x86_64-linux-gnu/mkl/usr/include/mkl/fftwmake MATHLIBS=mkl10 FFT=mkl COMMS_ARCH=mpi SUBARCH=mpi installmake MATHLIBS=mkl10 FFT=mkl COMMS_ARCH=mpi SUBARCH=mpi install install-tools這裡最終得到了一個在bin下面的文件加,叫做bin/linux_x86_64_gfortran9.0--mpi,裡面有castep的可執行文件castep.mpi
把CASTEP和常用工具二進位可執行文件添加到環境變量
添加以下到最後並保存
export PATH=/home/ziheng/Desktop/CASTEP-19.11/bin/linux_x86_64_gfortran9.0--mpi:$PATHsource一下
安裝完成。
5. 安裝驗證
CASTEP準備了一套自帶的安裝檢測,輸入以下執行:
make MATHLIBS=mkl10 FFT=mkl COMMS_ARCH=mpi SUBARCH=mpi check執行後會顯示如下:
沒有問題。
另外這裡也準備了一個很簡單的例子,大致展示一下castep的使用方法。
不同於VASP,CASTEP運行需要兩個文件:
這裡我們拿Li3PO4晶體做一個簡單的結構優化,首先我們來生成.cell文件,首先下載一個.cif文件保存成LPO.cif,具體文件內容見附錄1。
用自帶的cif2cell工具將cif文件轉換為castep的.cell結構文件,輸入
cif2cell LPO.cif -p CASTEP得到Li3PO4.cell文件,這裡稍微修改一下,讓它自動識別空間群,並讓它使用on-the-fly生成的norm-conserving贗勢,具體見附件2。
繼續建立Li3PO4 .param文件進行計算參數設置設置,這裡用LBFGS方法進行一個結構優化,具體見附件3。
準備好運行Li3PO4 .param和Li3PO4.cell後開始執行castep計算,用4線程計算,輸入:
mpirun -np 4 castep.mpi Li3PO4這裡注意castep不會屏幕輸出,而是輸出在.castep文件裡,可以隨時打開查看。
計算結束後得到以下幾個文件:
其中.castep文件給出了scf收斂過程的等信息,類似於VASP的屏幕輸出和vasprun.xml文件,而-out.cell文件給出的是最終的結構,用VESTA打開可以進行可視化。
關於CASTEP的使用,大部分時候可以用程序內置的文檔,輸入castep.mpi –help即可,以後有緣再說。希望這樣的優秀的學術免費軟體在國內能夠有更大用戶群!
6. 附錄:
附件一、LPO.cif的內容
data_Li3PO4_symmetry_space_group_name_H-M 'P 1'_cell_length_a 4.92244800_cell_length_b 5.29640200_cell_length_c 6.17613600_cell_angle_alpha 90.00000000_cell_angle_beta 90.00000000_cell_angle_gamma 90.00000000_symmetry_Int_Tables_number 1_chemical_formula_structural Li3PO4_chemical_formula_sum 'Li6 P2 O8'_cell_volume 161.01966865_cell_formula_units_Z 2loop_ _symmetry_equiv_pos_site_id _symmetry_equiv_pos_as_xyz 1 'x, y, z'loop_ _atom_site_type_symbol _atom_site_label _atom_site_symmetry_multiplicity _atom_site_fract_x _atom_site_fract_y _atom_site_fract_z _atom_site_occupancy Li Li0 1 0.50941700 0.84452000 0.00000000 1 Li Li1 1 0.00941700 0.15548000 0.50000000 1 Li Li2 1 0.50836300 0.32643400 0.25287300 1 Li Li3 1 0.00836300 0.67356600 0.24712700 1 Li Li4 1 0.00836300 0.67356600 0.75287300 1 Li Li5 1 0.50836300 0.32643400 0.74712700 1 P P6 1 0.50142000 0.82426100 0.50000000 1 P P7 1 0.00142000 0.17573900 0.00000000 1 O O8 1 0.10701000 0.31350900 0.79286200 1 O O9 1 0.60212600 0.10350800 0.50000000 1 O O10 1 0.18519100 0.81839600 0.50000000 1 O O11 1 0.68519100 0.18160400 0.00000000 1 O O12 1 0.60701000 0.68649100 0.29286200 1 O O13 1 0.10701000 0.31350900 0.20713800 1 O O14 1 0.10212600 0.89649200 0.00000000 1 O O15 1 0.60701000 0.68649100 0.70713800 1附件2、Li3PO4.cell
%BLOCK LATTICE_CARTang # angstrom units 4.922448000000000 0.000000000000000 0.000000000000000 0.000000000000000 5.296402000000000 0.000000000000000 0.000000000000000 0.000000000000000 6.176136000000000%ENDBLOCK LATTICE_CART
%BLOCK POSITIONS_FRACP 0.501420000000000 0.824261000000000 0.500000000000000 P 0.001420000000000 0.175739000000000 0.000000000000000 O 0.107010000000000 0.313509000000000 0.792862000000000 O 0.602126000000000 0.103508000000000 0.500000000000000 O 0.185191000000000 0.818396000000000 0.500000000000000 O 0.685191000000000 0.181604000000000 0.000000000000000 O 0.607010000000000 0.686491000000000 0.292862000000000 O 0.107010000000000 0.313509000000000 0.207138000000000 O 0.102126000000000 0.896492000000000 0.000000000000000 O 0.607010000000000 0.686491000000000 0.707138000000000 Li 0.509417000000000 0.844520000000000 0.000000000000000 Li 0.009417000000000 0.155480000000000 0.500000000000000 Li 0.508363000000000 0.326434000000000 0.252873000000000 Li 0.008363000000000 0.673566000000000 0.247127000000000 Li 0.008363000000000 0.673566000000000 0.752873000000000 Li 0.508363000000000 0.326434000000000 0.747127000000000 %ENDBLOCK POSITIONS_FRAC
%BLOCK SPECIES_POTNCP%ENDBLOCK SPECIES_POT
SNAP_TO_SYMMETRYSYMMETRY_GENERATE
%BLOCK EXTERNAL_PRESSURE0 0 0 0 00%ENDBLOCK EXTERNAL_PRESSURE附件三、Li3PO4.param文件
task : geometryoptimizationxc_functional : PBE spin_polarized : false fix_occupancy : false metals_method : dm mixing_scheme : pulay max_scf_cycles : 1000 cut_off_energy : 700 eVopt_strategy : speed page_wvfns : 0 num_dump_cycles : 0 backup_interval : 0 geom_method : LBFGS geom_max_iter : 500mix_history_length : 20 finite_basis_corr : 0fixed_npw : truewrite_cell_structure : truewrite_checkpoint : nonewrite_bib : falsewrite_otfg : falsewrite_cst_esp : falsewrite_bands : falsewrite_geom : falsebs_write_eigenvalues : falsecalculate_stress : true