fortran调试经验
fortran调试经验
程序编好,能够直接运行而且完全正确,基本不可能,这就有调试程序的问题。主要有一下几个方面:
其一,在每个子程序被调用的时候留个心眼,写个输出语句,表示程序已经运行到了这里。这样一个小提示会给调试带来巨大的方便,如果程序运行出错,至少你可以知道它是在运行到哪里出的错,这样,直接去检查那个程序就可以了。不必重头开始检查。
其二,注意对中间计算结果的输出。有时候,而且是很多的时候,程序编译成功,运行也没有问题,就是结果不对,这肯定是计算原理有问题,此时,输入一些重要步骤的中间结果,往往可以检查出问题所在。同时,就算查出了问题所在,也可以不删除这段输出中间计算结果的代码,有可能后面还会有用处,此时,在每行输出语句前加一个感叹号,把代码变成注释的绿体字就可以了。等到再次需要输出的时候,直接删除一个“!”比再写一遍输出代码,当然要简单的多。
其三,对WA TCH功能的应用,FORTRAN提供的这个功能很实用,可以查很多问题,尤其是程序中间计算值,这个和上述的中间结果的输出有点相似。但两者的不同是前者可以进行中间结果的输出控制,就是只有符合了某个条件的才能被输出,这样可以便捷程序的调试,同时对中间结果输出后可以直接用STOP停止程序的运行,这样对于大型程序来说,节省了很多后面继续计算的时间——因为前面的结果已经不对了,后面的算也是白算。
其四,对中间结算结果输出形式的控制,一般来说,FORTRAN计算结果可以输出到文件里面和计算界面两个地方。对较大的计算结果,可以输出到文件里面,反之较少的结果可以直接输出到屏幕上,为了增强数据的可读性,最好进行有格式的数据输出,以利于相同性质的数据的比较。输出到屏幕上的结果直接用WRITE(6,*)就可以(无格式),对于输出到文件里面的数据,可以省些事情,直接用WRITE(X,*)就可以,其中X是一个任意的正整数,最好大于10,也不用事先对这个X设备进行说明,程序会将结果输出到一个FORT.X的文件里面,例如10,就是FORT.10,此时,用NOTEPAD或者ULTRA-EDIT都可以把它打开——FORT.10实质上就是一个.DA T的文件,你可以把它重命名。
fortran 条件编译
fortran 条件编译
Fortran 条件编译
Fortran 是一种广泛应用于科学计算领域的编程语言,它具有强大的数值计算能力和高效的执行速度。为了适应不同的计算环境和需求,Fortran 提供了条件编译的功能,可以根据不同的条件选择性地编译代码。在本文中,我们将探讨 Fortran 条件编译的用法和一些常见的应用场景。
一、条件编译的基本语法
在 Fortran 中,条件编译使用预处理指令来实现,这些指令以 `#` 开头。常见的条件编译指令有 `#ifdef`、`#ifndef`、`#else` 和`#endif`。下面是一个简单的例子:
```fortran
#ifdef DEBUG
write(*,*) "Debug mode"
#else
write(*,*) "Release mode"
#endif
```
在上面的例子中,如果在编译时定义了 `DEBUG` 宏(使用 `-DDEBUG` 编译选项),则会输出"Debug mode";否则,会输出
"Release mode"。通过条件编译,我们可以根据需要在代码中插入或排除特定的语句块,从而实现灵活的代码控制。
二、条件编译的应用场景
1. 调试模式和发布模式
在软件开发过程中,我们通常会将代码分为调试模式和发布模式。调试模式下,我们可以输出更多的调试信息,以便于定位问题;而发布模式下,我们希望代码更加精简和高效。通过条件编译,我们可以在调试模式下输出调试信息,在发布模式下禁用这些信息,从而实现两种不同的编译版本。
2. 平台兼容性
由于不同的操作系统和硬件平台的差异,我们可能需要针对不同的平台进行编译和优化。通过条件编译,我们可以根据不同的平台定义不同的宏,然后根据这些宏来编写平台特定的代码。这样,我们就可以在不同的平台上编译出适应性更强的程序。
fortran编程
上机流程之STEP4:运行程序
执行操作:编译和链接成功后,就可以运行程序了,可
以选择菜单项 Build→Execute 文件名.exe 或单击编辑窗口上 方的相应工具栏图标,之后会生成一个输出结果的新窗口。
3.5 常见运行错误信息一览表
代码 41 70 71 72 73 74 75 77 95 146 147 148 英文信息 中文内容 Insufficient virtual memory 虚拟内存不足 Integer overflow 整数溢出错误 Integer divide by zero 整数除0错误 Floating overflow 浮点数溢出错误 Floating divide by zero 浮点数除0错误 Floating underflow 浮点数下溢错误 Floating point exception 浮点数异常错误 Subscript out of range 数组定义超出边界 Floating-point conversion failed 浮点数格式转换失败 Null pointer error 空指针错误 Stack overflow 堆栈溢出 String length error 字符串长度超出允许范围
POWER STATION 1.0 到FORTRAN POWER STATION4.0编译器后 将其卖给了DEC公司。
DEC随即推出了DVF5.0(Digital Visual FORTRAN 5.0),
fortran stop语句
fortran stop语句
摘要:
1.Fortran语言简介
2.Fortran stop语句的作用
3.如何使用Fortran stop语句
4.Fortran stop语句的注意事项
5.总结
正文:
fortran stop语句是Fortran(Formula Translation)语言中的一种控制结构,用于在程序执行过程中暂停程序的运行,并输出特定信息。Fortran语言是一种高级编程语言,主要用于数值计算和科学计算。下面将详细介绍Fortran stop语句的作用、使用方法及注意事项。
1.Fortran语言简介
Fortran语言始于20世纪50年代,由IBM公司开发。它是第一种专门为数值计算设计的编程语言,具有简洁、高效的特点。Fortran语言中的控制结构包括if、else if、else、while、for等,这些结构可以帮助程序员实现复杂的逻辑控制。
2.Fortran stop语句的作用
Fortran stop语句在程序执行过程中,可以用于暂停程序的运行,并输出特定信息。这种语句通常用于以下情况:
- 当程序遇到错误或异常情况时,可以使用stop语句暂停程序,以便开发
人员排查问题。
- 当程序需要根据某些条件暂停执行时,可以使用stop语句实现这一功能。
- 当程序执行完毕或达到预期目标时,可以使用stop语句结束程序运行。
3.如何使用Fortran stop语句
在Fortran语言中,stop语句的语法如下:
```
STOP "message"
```
其中,"message"是可选的参数,表示在停止程序时输出的信息。如果不指定"message",则默认输出“STOP”字样。例如:
fortran debug案例
fortran debug案例
Fortran是一种程序设计语言,其用途广泛,在科学计算和工程领域使用较多。在编写Fortran程序时,调试是非常重要的,以下是一个Fortran调试的案例。
假设我们有一个Fortran程序,用于计算给定数组的平均值。然而,当我们运行这个程序时,得到的结果并不正确。我们需要进行调试来找到问题所在。
首先,我们可以检查程序中的算法。可以通过在代码中添加打印语句来跟踪程序的执行。例如,我们可以在计算平均值之前打印出数组的值,以确保数组中的数据正确无误。
其次,我们可以检查数组的大小是否与程序的预期相匹配。如果数组的大小不正确,程序可能会访问无效的内存位置,导致错误的结果。在这种情况下,我们需要仔细检查数组的定义和传递给计算平均值函数的参数。
此外,我们还可以使用调试工具来进一步分析程序。例如,我们可以使用gdb或者Ddt来调试Fortran程序。这些调试工具可以帮助我们在程序运行时跟踪变量的值,执行代码的流程,并定位错误所在的位置。
最后,一些常见的Fortran调试技巧包括:
1. 使用正确的输出格式打印变量值,以检查其值是否正确。
2. 检查循环和条件语句的逻辑,确保程序按照预期的方式执行。
3. 检查程序中的错误处理机制,例如数组越界或除以零等情况。
总之,Fortran调试是找出程序错误的关键步骤。通过仔细检查代码逻辑、打印变量值、使用调试工具以及遵循常见的调试技巧,我们可以快速有效地找到问题所在,并修复程序中的错误。
fortran编译器操作
关于fortran语言的编译器使用问题
此文是一个简明教程,仅适合初学者来使用。老鸟们大牛们就不用在看了。本文档的目的是为了方便初学者快速的掌握基本的fortran编译器的使用。
一、关于cvf(compaq virtual fortran)
CVF操作方便,限制不多。一般常用的有两种新建工程的方法:
a)打开cvf,点击新建file----new,弹出选择对话框,简单的程序可以选择fortran console application。在左侧project
name处填写工程名字,在location处填写(选择)工程保存路径。注意cvf中要求不允许出现汉语路径。操作顺序图如下
第一步:
第二步:
第三步:
第四步:运行
至此,所有步骤完成。
b)直接打开cvf,点击新建文档(new)然后单击保存,弹出保存对话框,选择保存路径及文件夹,
文件名改为“工程名.f90”格式此处注意如果是fortran自由格式,请保存为*.f90或*.f95格式,如果是固定格式请保存为*.for或*.f格式。因为编译器是根据后缀的不同调用不同的语言编译器,否则将出错。保存文件的路径和文件夹即为该工程所在的路径和文件夹。同样不能有汉语。示意图如下:第一步
第二步、
第三步、
至此,所有的工程完成。
二、关于CVF的调试(debug)
在相应代码编辑框左侧发灰色的竖线部分,鼠标变为反三角方向的形状时即可右键鼠标,选择insert/remove BreakPoint选项,在代码左侧可以看到一个红色的标示(代码行尽量不要设在代码最后。可以设置到自认为可能发生错误的地方。或者尽量靠前设置),此时就可以按F5进入调试状态。可以在watch窗口查看各个变量,数组的值与内容。按F11进行单步运行。查看错误出处。具体的更细致的调试,请参看相关文献或书籍。这类书籍不少。
fortran安装调试运行过程中的可能错误及其原因
fortran安装、调试、运行过程中的【可能错误及其原因】-中英对照
楼主鲍炜炜2011-04-18 14:37
(欢迎加入气象QQ讨论群:149280902,点击即可加入)
安装
1.关于Fortran编译器的安装和配置?
在安装FEPG之前一般要先安装好Powerstation Fortran 4.0编译器,并设置好Fortran编译器的path、lib 和include路径。
如果你的Powerstation Fortran 4.0编译器安装在目录C:\MSDEV下,设置如下:
·在WIN 2000/XP下的设置:
a.鼠标移到我的电脑图标,单击右键,然后点击属性;
b.点击高级属性;
c.点击环境变量,进行系统变量设置;系统变量如下图:
d. 如果图上的include、lib、path几个变量没有,请点击新建;如有,点击编辑;按下面变量值进行修改:变量:path值:c:\MSDEV\bin; %path%
变量:lib 值:c:\MSDEV\lib;%lib%
变量:include值:c:\MSDEV\include;%include%
注意:如果path、lib和include变量中有相应新增加的内容,可不增加。如果编译器装在其它目录,则把C:\MSDEV换为该目录名。实际上,在安装Powerstation Fortran 4.0时,会出现一个对话框,询问是否增加环境变量,如果选是,这些变量就已经配置好了。安装fepg,需要用户有管理员权限。
2.运行FEPG命令生成Fortran源程序时,出现fl32不是内部命令也不是外部命令的错误(或fl32 is not internal command)?
fortran语言程序设计知识点
fortran语言程序设计知识点
Fortran语言是一种面向科学与工程计算的编程语言,因其在数值计
算和科学应用方面的高效性而受到广泛使用。本文将重点介绍Fortran
语言程序设计的一些重要知识点。
一、基础语法
1.1 变量与数据类型
在Fortran中,变量是用于存储数据的容器。常见的数据类型包括
整型(INTEGER)、实型(REAL/DOUBLE PRECISION)、复数型(COMPLEX)、逻辑型(LOGICAL)等。变量的命名需遵循一定规则,如以字母开头,长度不超过31个字符等。
1.2 运算符与表达式
Fortran支持常见的算术运算符(如+、-、*、/)以及逻辑运算符(如. AND.、. OR.、. NOT.)等。表达式由变量、常数和运算符组成,可以进行数值运算和逻辑判断。
1.3 控制结构
Fortran提供循环结构(DO)、条件结构(IF-THEN-ELSE)和选择结构(SELECT CASE)等控制语句,用于控制程序的流程。
二、数组与数据处理
2.1 数组定义与操作
Fortran中数组是由相同类型的数据元素组成的集合。可以使用DIMENSION语句定义数组的维度和大小,通过下标访问和修改数组元素。
2.2 数组运算与函数
Fortran提供了许多对数组进行运算和处理的函数,如数组求和(SUM)、最大最小值(MAX、MIN)、数组重排(RESHAPE)等,方便对数据进行统计和处理。
2.3 文件读写操作
Fortran支持对文件进行读写操作,可以通过OPEN语句打开文件,
使用READ和WRITE语句读取和写入数据。可以根据需要设置文件的访问模式和格式。
ABAQUS中Fortran子程序调用方法—自己总结
第一种方法:在Job模块里,创建工作,在Edit Job对话框中选择General选项卡,在User subroutine file中点击Select按钮,从弹出对话框中选择你要调用的子程序文件(后缀为.for 或.f)。
第二种方法:
1. 建立工作目录
2. 将Abaqus安装目录\\site下的或拷贝到工作目录,并改名为;
3. 将编译的fortran程序拷贝到工作目录;
4. 将.obj文件拷贝到工作目录;
5. 建立好输入文件.inp;
6. 运行abaqus job=inp_name user=fortran name即可。
以下是网上摘录的资料,供参考:
用户进行二次开发时,要在命令行窗口执行下面的命令:
abaqus job=job_name user=sub_name
ABAQUS会把用户的源程序编译成obj文件,然后临时生成一个静态库和动态库,还有其它一些临时文件,而它的主程序(如和等)则没有任何改变,由此看来ABAQUS是通过加载上述2个库文件来实现对用户程序的连接,而一旦运行结束则删除所有的临时文件。这种运行机制与ANSYS、LS-DYNA、marc等都不同。
这些生成的临时文件要到文件夹C:\Documents and Settings\Administrator\Local
Settings\Temp\中才能找到,这也是6楼所说的藏了一些工作吧,大家不妨试一下。
1 子程序格式(程序后缀是.f; .f90; .for;.obj)
答:我试过,.for格是应该是不可以的,至少和版本应该是不行,其他的没用过,没有发言权。
fortran调试技巧
功能强大的vc6调试器(适用于Compaq Fortran Debug)
作者:yy2better
要成为一位优秀的软件工程师,调试能力必不可缺。本文将较详细介绍VC6调试器的主要用法。
windows平台的调试器主要分为两大类:
1用户模式(user-mode)调试器:它们都基于win32Debugging API,有使用方便的界面,主要用于调试用户模式下的应用程序。这类调试器包括Visual C++调试器、WinDBG、BoundChecker、Borland C++Builder调试器、NTSD等。
2内核模式(kernel-mode)调试器:内核调试器位于CPU和操作系统之间,一旦启动,操作系统也会中止运行,主要用于调试驱动程序或用户模式调试器不易调试的程序。这类调试器包括WDEB386、WinDBG和softice等。其中WinDBG 和softice也可以调试用户模式代码。
国外一位调试高手曾说,他70%调试时间是在用VC++,其余时间是使用WinDBG和softice。毕竟,调试用户模式代码,VC6调试器的效率是非常高的。因此,我将首先在本篇介绍VC6调试器的主要用法,其他调试器的用法及一些调试技能在后续文章中阐述。
一位置断点(Location Breakpoint)
大家最常用的断点是普通的位置断点,在源程序的某一行按F9就设置了一个位置断点。但对于很多问题,这种朴素的断点作用有限。譬如下面这段代码:
void CForDebugDlg::OnOK(){for(int i=0;i<1000;i++)//A{int k=i*10-2;//B SendTo(k);//C int tmp=DoSome(i);//D int j=i/ tmp;//E}}执行此函数,程序崩溃于E行,发现此时tmp为0,假设tmp本不应该为0,怎么这个时候为0呢?所以最好能够跟踪此次循环时DoSome函数是如何运行的,但由于是在循环体内,如果在E行设置断点,可能需要按F5(GO)许多次。这样手要不停的按,很痛苦。使用VC6断点修饰条件就可以轻易解决此问题。步骤如下。
ABAQUS中Fortran子程序调用方法—自己总结
第一种方法: 在Job模块里,创建工作,在Edit Job对话框中选择General选项卡,在User subroutine file中点击Select按钮,从弹出对话框中选择您要调用的子程序文件(后缀为、for或、f)。
第二种方法:
1、建立工作目录
2、将Abaqus安装目录\6、4-pr11\site下的aba_param_dp、inc 或aba_param_sp、inc拷贝到工作目录,并改名为aba_param、inc;
3、将编译的fortran程序拷贝到工作目录;
4、将、obj文件拷贝到工作目录;
5、建立好输入文件、inp;
6、运行abaqus job=inp_name user=fortran name即可。
以下就是网上摘录的资料,供参考:
用户进行二次开发时,要在命令行窗口执行下面的命令:
abaqus job=job_name user=sub_name
ABAQUS会把用户的源程序编译成obj文件,然后临时生成一个静态库standardU、lib与动态库standardU、dll,还有其它一些临时文件,而它的主程序(如standard、exe与explicit、exe等)则没有任何改变,由此瞧来ABAQUS就是通过加载上述2个库文件来实现对用户程序的连接,而一旦运行结束则删除所有的临时文件。这种运行机制与ANSYS、LS-DYNA、marc等都不同。
这些生成的临时文件要到文件夹C:\Documents and Settings\Administrator\Local Settings\Temp\中才能找到,这也就是6楼所说的藏了一些工作吧,大家不妨试一下。
Fortran和MATLAB:哪种更适合科学计算
Fortran和MATLAB:哪种更适合科学计算
在科学计算领域,Fortran和MATLAB都被广泛应用。然而,哪一个更适合科学计算呢?本文将分析Fortran和MATLAB在性能、语言特性、开发效率和应用领域等方面的差异,以帮助读者更好地选择适合自己的工具。
1.性能
Fortran语言在科学计算领域应用非常广泛,其中一个重要原因是它的高性能。Fortran是一种编译型语言,能够通过编译器优化来获得更高的执行效率。Fortran语言的优化功能特别适合于数值计算和科学计算领域,这使得它在性能方面比大多数其他语言都要快。
相比之下,MATLAB的性能较为一般。虽然MATLAB拥有丰富的库函数和易用的语法,但它主要是一种解释型语言。这意味着MATLAB需要在运行时对代码进行解析和编译,因此它无法像Fortran那样进行编译器优化和静态类型检查。由于这些原因,MATLAB的性能通常比Fortran差。
2.语言特性
Fortran和MATLAB在语言特性方面也有很大的差异。Fortran是
一种面向过程的编程语言,通常用于数值计算和科学计算。Fortran拥有强大的数组和矩阵操作功能,可以在循环结构和条件语句之间进行
高效的转换。Fortran的语法和结构非常简单,易于阅读和编写。
与Fortran不同,MATLAB是一种基于矩阵的编程语言。它以矩阵
为核心,在数组、向量和矩阵操作方面非常出色。MATLAB的语法相对
简单,适合于快速原型设计和开发。
3.开发效率
在开发效率方面,MATLAB通常比Fortran更适合科学计算。MATLAB的函数库拥有丰富的函数和工具箱,可以快速开发和测试算法。MATLAB也提供了大量的可视化工具,使得数据可视化和分析变得更加
Fortran的debug与release
fortran debug模式设置和技巧
慧慧转载2010-01-26 16:17:52 阅读152 评论0 字号:大中小订阅
CVF中有两种编译(连接、执行)模式:release模式和debug模式。
调试程序时,宜用debug模式;调好后再用release模式,得到高效的执行程序。
设定debug模式:
点击菜单Build/Set Active Project Configuration,选*- Win32 Debug,OK,即设定为debug模式。
以debug模式执行:
点击“Go (F5)”按钮,或直接按F5键,则执行程序,并在第一个出错语句处停止,在该语句前有一个小黄色箭头。
若程序没错,则一直执行完毕,自动关闭dos窗口。此时,宜用“!”按钮或“Ctrl+F5”键,执行完成后,dos窗口等待用户关闭。
设置断点:
若希望执行时在某一语句处暂停,可将光标置于该语句,点击“手”形状的按钮,或按F9键,则程序执行到该语句时停在该语句处。
单步执行:
F10(不进入子过程程序段)或者F11(遇到子过程进入子过程程序段继续单步执行)。在工具栏上都有相应的按钮。
查看变量值:
小黄箭头停在某语句时,按下Variable按钮,显示当前程序段的变量值;
对于简单变量,将光标放在该变量上,则即时显示该变量值。
先简单说这么多。
如何用Debug模式获得更多的提示信息
依次选择/打开:Project => Settings => Fortran => Compilation Diagnostics
建议选中以下各项:
关于Fortran调用C++函数的小结
关于Fortran调用C++函数的小结
2017-3-12
背景
工作中遇到了需要在Fortran代码中调用C++提供的函数的情况。
通过在网上查阅资料,总结了实现方法,制作了一个实例。
工具
集成开发环境是VS2010。由于默认安装模式下的VS2010是无法编译调试Fortran的,所以又补充安装了Intel(R) Virual Fortran 2011(英特尔可视化Fortran编译器)。
参考资料分析
本文需要用到Fortran与C/C++的混合编程,Fortran和C/C++分别编译各自的功能模块源代码,得到各自的目标文件(.obj),然后集成链接这些obj 文件生成一个统一的可执行文件,实现对对方函数的调用,数据交换通过约定接口来实现[1]。
C++代码中函数说明前需要用到extern关键字,说明函数可以在本模块或其它模块中使用[2]。extern与"C"一起连用时,如: extern "C" void fun(int a, int b);则告诉编译器在编译fun这个函数名时按着C的规则去翻译相应的函数名而不是C++的,C++的规则在翻译这个函数名时会把fun这个名字变得面目全非[3]。
要在Fortran中调用C++的函数,意味着Fortran项目对C++项目产生了依赖关系,如果项目依赖项未设置会导致类似“无法解析的外部符号_XXX,该符号在函数_XX 中被引用”的错误。另外还要保证Fortran与C++项目的运行库设置都是“多线程调试”[4]。
实现过程
创建Fortran项目
1)启动VS2010,新建一个Fortran控制台应用程序,名称为Console1。
fortran 简明教程
fortran 简明教程
Fortran是世界上最早的高级程序设计语言之一,广泛应用于科学计算、工
程和数值分析等领域。以下是Fortran的简明教程:
1. 程序结构:一个Fortran程序由不同的程序单元组成,包括主程序、子程序和模块等。每个程序单元都以END结束。主程序是程序的入口点,可以
包含变量声明、执行语句和控制语句等。子程序可以包含函数和子例程,用于执行特定的任务。模块用于提供程序中的公共代码和数据。
2. 变量声明:在Fortran中,变量必须先声明后使用。变量类型包括整数型、实数型、字符型等。例如,声明一个整数型变量可以这样写:INTEGER :: x
3. 执行语句:执行语句用于控制程序的流程和执行顺序。Fortran提供了多种控制语句,如IF语句、DO循环、WHILE循环等。例如,使用IF语句进行条件判断:IF (x > 0) THEN y = x x ELSE y = -x x END IF
4. 输入输出:Fortran提供了基本的输入输出功能。可以使用READ语句从标准输入读取数据,使用WRITE语句将数据输出到标准输出。例如,读取
一个实数并输出到屏幕:READ(,) x WRITE(,) x
5. 数组和矩阵:Fortran支持一维和多维数组,以及矩阵运算。例如,声明一个二维实数数组并赋值:REAL :: A(3,3) A =
RESHAPE((/1,2,3,4,5,6,7,8,9/), (/3,3/))
6. 子程序和模块:子程序可以用于封装特定的功能或算法,并在主程序中调用。模块可以包含公共的函数、子例程和变量等,用于提供可重用的代码和数据。
fortran语言并行计算程序
fortran语言并行计算程序
【原创版】
目录
1.Fortran 语言概述
2.Fortran 语言在并行计算中的应用
3.Fortran 语言并行计算程序的编写方法
4.Fortran 语言并行计算程序的优点与局限性
正文
1.Fortran 语言概述
Fortran(Formula Translation)是一种高级编程语言,主要用于数值计算和科学计算领域。自 1957 年问世以来,Fortran 语言经历了多个版本的更新,现已成为高性能计算领域的重要语言之一。Fortran 语言具有表达能力强、执行效率高、可移植性好等特点,广泛应用于数值分析、工程计算、气象预报等领域。
2.Fortran 语言在并行计算中的应用
随着计算机技术的发展,并行计算已经成为提高计算性能的重要手段。Fortran 语言在并行计算领域具有丰富的功能和成熟的技术,可以有效地实现多处理器、多核处理器以及分布式系统的并行计算。Fortran 语言提供了多种并行计算方法,如顺序子程序、函数子程序、并行子程序等,可以根据实际需求灵活选择。
3.Fortran 语言并行计算程序的编写方法
Fortran 语言并行计算程序的编写方法主要包括以下几种:
(1)使用顺序子程序:顺序子程序是一种简单的并行计算方法,将
任务分解为多个子程序,按照顺序依次执行。这种方法实现简单,但并行度较低,适用于计算任务较为独立的情况。
(2)使用函数子程序:函数子程序通过将计算任务封装成函数,实现并行计算。这种方法可以提高代码的可读性和可维护性,但需要考虑函数之间的数据通信和同步问题。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
FORTRAN调试程序的时候注意的问题
调试程序的时候注意的问题。
程序编好,能够直接运行而且完全正确,基本不可能,这就有调试程序的问题。主要有一下几个方面:
其一,在每个子程序被调用的时候留个心眼,写个输出语句,表示程序已经运行到了这里。这样一个小提示会给调试带来巨大的方便,如果程序运行出错,至少你可以知道它是在运行到哪里出的错,这样,直接去检查那个程序就可以了。不必重头开始检查。
其二,注意对中间计算结果的输出。有时候,而且是很多的时候,程序编译成功,运行也没有问题,就是结果不对,这肯定是计算原理有问题,此时,输入一些重要步骤的中间结果,往往可以检查出问题所在。同时,就算查出了问题所在,也可以不删除这段输出中间计算结果的代码,有可能后面还会有用处,此时,在每行输出语句前加一个感叹号,把代码变成注释的绿体字就可以了。等到再次需要输出的时候,直接删除一个“!”比再写一遍输出代码,当然要简单的多。
其三,对WATCH功能的应用,FORTRAN提供的这个功能很实用,可以查很多问题,尤其是程序中间计算值,这个和上述的中间结果的输出有点相似。但两者的不同是前者可以进行中间结果的输出控制,就是只有符合了某个条件的才能被输出,这样可以便捷程序的调试,同时对中间结果输出后可以直接用STOP停止程序的运行,这样对于大型程序来说,节省了很多后面继续计算的时间——因为前面的结果已经不对了,后面的算也是白算。
其四,对中间结算结果输出形式的控制,一般来说,FORTRAN计算结果可以输出到文件里面和计算界面两个地方。对较大的计算结果,可以输出到文件里面,反之较少的结果可以直接输出到屏幕上,为了增强数据的可读性,最好进行有格式的数据输出,以利于相同性质的数据的比较。输出到屏幕上的结果直接用WRITE(6,*)就可以(无格式),对于输出到文件里面的数据,可以省些事情,直接用WRITE(X,*)就可以,其中X是一个任意的正整数,最好大于10,也不用事先对这个X设备进行说明,程序会将结果输出到一个FORT.X的文件里面,例如10,就是FORT.10,此时,用NOTEPAD或者ULTRA-EDIT都可以把它打开——FORT.10实质上就是一个.DAT的文件,你可以把它重命名。
3.对数据计算时的误差控制。
以前觉得小数点后的误差不是那回事,没有太在意,可经过实战,终于明白了小小的误差完全可以改变整个计算的结果。因此,如果程序能够输入结果而不正确时,除了寻找算法的问题,不要忽略的误差。一般认为,FORTRAN的REAL变量小数点后8位数字误差定义已经足够,而事实上,这个精度可能在一些情况下不满足,这个时候,需要用更精确的变量类型——REAL(8),同理,当要判断两个数是否相等的时候,一定要慎用相等判断(.EQ.)这个比较运算符,因为任何数据,别看着在现实中它们一定相等,在程序中就不一定了。一旦经过了计算,就不可避免的产生了舍入误差,对于整数和有限几位循环的有理数都问题不大,可一旦是一个无理数或者无限循环的小数,只有在判断了小数点后的每一位都相等的时候,程序才判断为相等成立。这个相等的标准是非常苛刻的,所以一般情况下,可行的方法是将
两个数相减,再取其绝对值,当这个绝对值小于一个预先设定的误差范围ε,比如0.001时,就判断为相等成立。这样以来,便可避免这个问题。