Fortran初学者配置指南

选择现代Fortran

FORTRAN 77肯定是不要再学了,或者至少不要写F77(因为可能免不了要看旧代码,所以也许还是要学)。不够我想说的是,也不要一直留在Fortran 90/95,最好继续学习Fortran 2003/2008以及Fortran 2018的新特性。Fortran 2003/2008提供了近乎完全的面向对象(自定义类型、类型绑定过程、抽象类、继承、多态等)的支持,以及新的内置过程等。虽然不见得所有新特性都用得上,但我认为是值得学的。

关于书,彭国伦的《Fortran 95程序设计》还是很优秀的,选择用这本书入门完全可以。但是既然推荐继续学习Fortran 2003/2008,肯定要看更多的书。直接学习Stephen J. Chapman的《Fortran 95/2003程序设计》也可以,可惜这书的中译版质量有点那啥,比较在意的话还是看彭国伦的吧。其他的中文书就不太推荐了,比如《Fortran权威指南》,声称涵盖了F2003,实际上只是提了一下(不到4页的内容)。P.S. 今年(2019年)有一本新的中文Fortran书《FORTRAN程序设计权威指南》,看了一下目录,似乎介绍了F2003/2008的特性,也许值得一试(但仍然想吐槽标题用的是全部大写的FORTRAN)。
继续阅读Fortran初学者配置指南

Fortran do concurrent语句备忘

本文用于记录一些我了解到的关于Fortran do concurrent语句的信息。本文不是教程,是笔记,而且是可能存在错误、过时、或关于特定编译器的信息。

do concurrent语句是do循环的一个扩展,具体的语法和限制看Modern Fortran ExplainedIntel Fortran Compiler 19.0 Developer Guide and Reference即可。
继续阅读Fortran do concurrent语句备忘

利用.fch文件计算电子密度的代码

最近在看密度泛函的书,于是就想自己写一个能计算电子密度的程序,这样就可以具体地了解一些体系。而且由于更早一些时候才正经学了基组的知识,想弄清楚怎么把市面上的基组放在程序中使用(之前写HF程序用的是STO-3G,不涉及到分裂价层,而且没有涉及更多的壳层)。所以写这么一个程序还是可以帮我学到很多东西的。

代码上传到GitHub:https://github.com/St-Maxwell/ElectronDensity

参考了Sobereva的文章:高斯fch文件与wfn波函数文件的介绍及转换方法利用wfn文件计算电子密度的代码的编写方法

电子密度

在空间 \(\mathbf{r}\)处找到任意一个电子的概率。

$$ \rho(\mathbf{r}) = N \int |\Psi(\mathbf{x}_1, \mathbf{x}_2,\ldots,\mathbf{x}_N)|^2\, d\omega_1 d\mathbf{x}_2\ldots d\mathbf{x}_N $$

将上式展开为空间轨道(分子轨道)\(\{\psi_a\}\),为

$$ \rho(\mathbf{r}) = 2 \sum\limits_a^{N/2} |\psi_a(\mathbf{r})|^2 $$

若是自然轨道,则为

$$ \rho(\mathbf{r}) = \sum\limits_a^{N/2} \lambda_a |\eta_a(\mathbf{r})|^2 $$

其中 \(\eta_a\)是自然轨道,\(\lambda\)是自然轨道占据数。
继续阅读利用.fch文件计算电子密度的代码