北京普然生态环境科技有限公司版权所有     京ICP备19017998号-1

网站建设:中企动力 北二分

地址:北京市朝阳区北苑东路19号院(中国铁建广场)2号楼1711

创造美好生活和优美人居环境的愿景和使命,践行人类、自然生态环境相统一的核心价值

电话 :15810752621

关于我们

工程技术

联系我们

友情链接

北京诚壹普然环保科技有限公司

邮箱:<puran01@purane.net>

如何编译CALPUFF.exe ?

【摘要】:
空气质量模式CALPUFF免费教程全集之(十)

CALPUFF模型系统以及相关的处理程序均采用Fortran 95语言编写,并采用Lahey 95Fortran编译器测试和调试。

不同FORTRAN编译器的差别在于:在编译过程中所执行的代码评估水平(语法规则等);此种评估检查时如何配置的。当编译一个顺利传至另外一个编译器的代码时或者编译一个带有一个“非不可恢复警报信息”的代码时,在默认情况下,一个编译器可能返回一个不可恢复的错误。平台所提供的实用工具也经常不同,这可能影响用于处理系统日期与时间的调用指令(call)(这只是其中一个例子)。

使用一个“新的”编译器编译一个代码一般要求:对代码中非相容用法进行修改(这些非相容用法可由编译器侦测出来);在适当的时候重新配置编译器指令,以去除不影响代码运行的限制;替代使得可执行文件只限于某一平台的系统子程序的调用指令(call)。

针对特定编译器的报告

CALPUFF系统代码只在少数几个子程序里拥有单独的编译器以及针对特定平台的报告。这些子程序被置于“CALUTILS.FOR”文件的末尾,并包含若干常见编译器的报告。有两个处理程序在“PARAMSinclude-file”文件中还包含了针对特定编译器的设定。正如在BETA测试中所分布的,该代码专为“Lahey F95FORTRAN”编译器所配置,以使得其他编译器的替代报告处于非活跃状态(显示为评注)。如果使用了“Lahey F77”、 “Microsoft”或“COMPAQ DF90”编码器,那么应该对为“Lahey F95”所确定的块(block)进行评注,而 “Lahey F77”、“Microsoft”或“COMPAQ DF90” 相应的块(block)应被激活(去除评注)。

包含了针对特定编译器的设置的子程序有:

CALMET -- datetm, undrflw, comline

CALPUFF -- datetm, undrflw, comline

        CALPOST -- comline

        POSTUTIL -- comline

这3条子程序(“datetm”、“underflw”与“comline”)位于CALUTILS程序的末尾,由“CALMET”、“CALPUFF”与“POSTUTIL” 调用,并与“CALMET”、“CALPUFF”与“POSTUTIL” 一起编译。如果针对特定编译器/平台,该3条子程序得到了充分修改,那么相同的、经修改的“CALUTILS”也可用于编译“CALMET”、“CALPUFF”、“CALPOST”与“POSTUTIL”(但是在编译之前,需要在各个代码目录中对其进行复制)。

对于地球物理学预处理程序,包含了针对特定编译器的设置的参数文件有:

CTGPROC -- params.ctg

        TERREL -- params.trl

在其他代码中,无需进行更改。

编译器配置示例

通常要避免进行最优化,除非你能够轻松证明该最优化对于所产生的结果不产生影响。

Lahey/ Fujitsu LF95

使用以下选项,编译并连接一个文件(例如:CALMET.FOR)中的代码:

  选项:

-nap           -c             -nchk           -nchkglobal    -dal

-ndbl           -ndll          -nf95          -fix           -ng

-nin            -ninfo         -li            -nlst          -nlong

-maxfatals 50   -o0            -npause        -nprivate      -npca

-nquad          -nsav          -nstaticlink    -stchk         -tp

-trace          -ntrap         -w            -winconsole     -nwo

-nxref          -zero

如果你没有足够的内存(这可导致编译器放弃任务),那么可以试着将“.FOR”文件分解为若干部分,依次对各个文件进行编译,以创建一系列“.OBJ”文件。然后再将这些“.OBJ”文件连接起来,创建可执行文件。

Compaq Digital FORTRAN

因为子程序“comline”要求不同的编码器指令,你将需要在两个文件中为CALMETCALPUFFCALPOSTPOSTUTIL处理代码。从“FORTRAN”文件中剪切“comline”子程序,将其储存为“COMLINE.FOR”。以CALPUFF为例,以以下命令(开始一行命令)编译除了“comline”之外的所有子程序:

df calpuff.for /compile_only /nologo /fpe:0 /fpscomp:general

                     /fpscomp:ioformat /fpscomp:logicals

                     /iface:nomixed_str_len_arg /iface:cref /optimize:0

                     /warn:nofileopt /traceback

然后以以下命令编译“comline”(例如: COMLINE.FOR)(开始一行命令):

df comline.for /compile_only /nologo /fpe:0 /fpscomp:general

              /fpscomp:ioformat /fpscomp:logicals /iface:cref

                        /optimize:0 /warn:nofileopt /traceback

以以下命令连接两个“.OBJ”文件:

df calpuff.obj comline.obj

Lahey F77

注意:以“FORTRAN 77”编译的代码一般不可在现行的Windows操作系统上运行。正常情况下,要求使用“FORTRAN 95”。当使用“FORTRAN 77”进行编译时,使用以下选项编译与连接一个文件(例如:CALMET.FOR)中的代码:

选项    描述                               选项    描述

/n0 – 标准“FORTRAN 77 IMPLICIT”           / L – 行数回溯表

/n2 – 生成387 常数与代码                      / P – 保护常数参数

/n4 – 无 80486 最优化                       / Q1 – 限制NDP堆叠输入(stack entries

/n7 – 最优化相互报告                          /nQ2 – 无受保护模式的RPC

/ A2 – 检查可分配的排列                       /nQ3 – 无真模式RPC

/ B – 检查排列下标界限                        / R – 记忆本地变量

/nC – 忽略非标准使用                         /nS – 无“SOLD”文件被创建

/nC1 – “INTEGER”常数4字节                 /nT – “INTEGER*4”、“LOGICAL*4”默认值

/ D – 无标题的“DIRECT”文件                  /nV – 无“VAX”解释

/nH – 无硬拷贝源清单                         / W – 显示警报信息

/ I – 检查子程序界面                         /nX – 无“Xref”清单

/nK – 生成 80x87 代码                     /nZ1 – 更佳“SOLD”纠错