首先,我不推荐大家对这一部分内容过多的研究和投入,因为经过我在Linux系统上的使用体验来看,程序运行的效果并不好。所以,如果我们不是很精通计算机的话,使用Windows版本运行程序就ok了。
写这部分内容只是想把方法分享出来,而需不需要使用就看大家自己的选择了。
一、说明书UserGuide上的Linux编译部分
直接看第6部分。
首先,我们要知道编译的目的是什么。编译的目的和结果就是,会产生一个ddscat运行文件,就是和Windows版本功能一样的ddscat.exe文件,不过,这次产生的是运行在Linux系统上的文件(Windows系统自带了ddscat,而使用Linux需要我们手动编译出ddscat)。
接下来,我们要知道怎么编译。在Linux系统上对源文件进行编译,需要一个Makefile文件。什么是Makefile,看一下某百科对其的定义:一个工程中的源文件不计其数,其按类型、功能、模块分别放在若干个目录中,Makefile定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 Makefile就像一个Shell脚本一样,也可以执行操作系统的命令。也就是说,这个Makefile文件写了一些编译的规则。
再看说明书。说明书表示,ddscat的src文件夹中,有一个默认的Makefile文件,等下我们展示。那么想要编译Makefile文件的话,有一些前提:Linux系统需要已安装了Fortran-90编译器(如,gfortran, g95, Intel R ifort, or NAG R f95),和cpp。
There are a number of different ways to create an executable,表示Makefile中记录了本次编译需要什么编译器,是单精度还是双精度(sp or dp),是否开启OpenMP、MKL、MPI。然后说明书给出了Makefile默认的配置:使用gfortran编译器、单精度算法、不使用OpenMP、MKL、MPI(OpenMP和MPI都是用来做并行计算的,MKL是英特尔数学核心函数库,这三个我们暂时用不到)。
现在我们来看看Makefile文件,进入到src文件夹中,使用文本编译器打开Make file文件。
准备好需要的配置,接下来就是编译代码。需要在Linux系统中,进入到当前src文件夹,然后在终端运行make ddscat就可以。
二、编译前的准备——软件安装系统配置
如说明书中的要求,我们需要先安装fortran系列编译器和ifort,ifort需不需要安装我这里不太确定,记得最开始研究的时候是需要安装ifort的。我们先来装gfortran。
一般安装Fortran总共需要四步:分别安装gcc、g++、gfortran、ifort。
1)安装gcc编译器。
一般Linux系统会自带gcc。查看是否装有gcc可通过指令"gcc -v"。
若没有安装gcc,则可通过指令"yum -y install gcc"来安装。
图中我的电脑自带了gcc
2)安装g++。
可通过命令"sudo apt-get install build-essential"来安装,通过"g++ -v"可查看是否安装成功。
图中我的电脑已安装过g++,所以输入sudo apt-get...之后,显示0 upgraded, 0 newly instaled...
3)安装gfortran。
可通过命令"sudo apt-get install gfortran"来安装,通过"gfortran -v"可查看是否安装成功。
图中第一次命令检测gfortran是否安装,发现没有安装。
第二次命令忽略。
第三次命令执行安装gfortran的命令,开始安装gfortran。
重新检测,发现这次安装好了gfortran。
4)安装ifort(可选项,可以不安装)。
这个过程比较麻烦,需要先去intel的官网下载ifort的安装包。我们下一部分专门介绍怎么去下载这个安装包,现在只讲怎么安装。
1. 打开ifort的安装包
2. 找到install_GUI.sh,然后在终端中运行它,就会开启可视化安装界面。如果运行的是install.sh,则是在终端中进行文字版安装。
3. 选择安装模式,选哪个都可以。
输入root密码后,继续进行。
4. 选择激活方式,没有激活码就选第三个,有激活码选第二个。因为我的卸载了一遍,所以多了第一个选项,而不能选第三个选项(如何获取激活码,我们下一部分介绍)。
5. 选择第二个选项
6. 选择第一个选项
7. 安装进行中,直到完成。
8. 在bashrc中进行配置
在终端中输入vi ~/.bashrc,进入对.bashrc的编辑模式(在这里使用到了vi编辑器,如果不熟练的话需要先学一下)。
然后在文本最末添加上下面的内容:
source /opt/intel/bin/compilervars.sh intel64
按Esc之后,输入:wq表示保存退出,然后在终端输入source ~/.bashrc让上一步的修改生效。
9. 检测是否安装成功
在终端中输入ifort -help,如果出现以下结果,即表示安装成功,并且配置成功。
三、make
下面是编译部分。
先下载好资源。我们去ddscat的官网下载ddscat程序的文件,在主页点Downloads,然后下载最新的7.3.3版本的code,和Examples。很明显,code(即源码)后面已经说明了need compilation,需要编译。下载好这两个资源,我们就可以开始在Linux系统上对ddscat进行编译和使用了。
1)没有完整配置下的失败编译。
先来看一种没有安装gfortran情况下的编译,这个时候会报错,表示没有发现gfortran编译器。
先进入src文件夹,会看到一个DDSCAT.f90的文件,这个就是DDSCAT的主程序。
然后在当前位置打开终端,在终端中输入make ddscat开始编译。
此时显示"make: gfortran: Command not found",表示系统里面找不到gfortran指令,说明没有安装gfortran。当然,如果你没有安装别的必要软件(gcc、g++等),也是不能正常编译的。
2)完整配置下的正常编译。
1. 终端输入make ddscat开始编译(我这里还试了一下输入make,都是是不可以的,输入make ddscat才正确)
2. 下图编译结束最后显示的部分
3. 回到src文件夹,发现多了一些文件,其中最重要的就是一个菱形图标的ddscat。这个就相当于Windows系统里面的ddscat运行程序了。
4. 现在我们进入到ddscat7.3.3_examples/examples_exp/RCTLPRSM_NEARFILED文件夹,并将上一步产生的ddscat文件放进当前文件夹,然后在终端运行ddscat(这个文件夹里自带有ddscat.par文件,所以我们在这个文件夹里直接可以测试运行)。下图表示正常运行结束。
5. 正确运行结束会出现我们之前在Windows系统中正常运行结束后出现的一些文件,如qtable、w000r000kooo.E1等。
6. 编译ddpostprocess。这个时候你会想到什么,既然编译了ddscat,那么肯定可以有办法得到ddposrprocess。此时我们返回src文件夹,并在终端输入ddpostprocess,开始编译。
这里有个细节,我在编译完ddpostprocess之后,又执行了一下make ddscat指令,结果显示ddscat是最新版本。说明ddscat已经存在,无需再编译了。如果还想编译ddscat的话,可以把之前编译出的ddscat移走,就可以继续编译ddscat了。
7. 正常编译结束后,会产生ddpostprocess运行文件(还是这个图,其实是在编译完ddpostprocess之后才截的图)。
8. 现在再回到ddscat7.3.3_examples/examples_exp/RCTLPRSM_NEARFILED文件夹,将上一步产生的ddpostprocess文件复制过来,接着在终端输入ddpostprocess指令,就开始运行后处理程序了。
9. ddpostprocess正常运行结束后,会产生vtr等文件。
10. 我们把vtr文件拷Windows系统中,然后用vislt可视化,结果如下图所示。
四、总结
为什么使用Linux系统呢,因为Linux系统运行更快。一般情况下,做计算Linux都是会比Windows系统运行程序快的。但是,这里视情况而定了,如果大家要计算的模型不大,且入射波长在1μm以内,计算量就不算大,用Windows系统运行就可以了。
这里还有一些情况,我在使用Linux系统运行ddscat的时候,运行到比较大的波长(如到700、800nm的时候),整个电脑就卡住了。说明我还是没有掌握在Linux系统上使用ddscat。
所以,这部分的目的只是给大家说明一下怎么在Linux系统上编译、运行ddscat,而不推荐在Linux系统上使用ddscat。
转载:https://blog.csdn.net/XD_Yangf/article/details/102500625