Simple算法_fortran语言编写

合集下载

fortran 语言编程

fortran 语言编程

fortran 语言编程Fortran 语言编程Fortran(Formula Translation)是一种面向科学计算和工程计算的高级编程语言。

它于1957年诞生于IBM,是最早被广泛采用的科学计算语言之一,目前已经发展到第四个版本(Fortran 2018)。

Fortran是一种编译型语言,它通过编写源代码并使用编译器将其转换成机器语言来执行。

本文将详细介绍Fortran语言的基础知识、语法规则和常用的编程技巧,以帮助读者了解和掌握这门强大的科学计算语言。

第一步:安装Fortran编译器要开始编写和运行Fortran程序,首先需要安装Fortran编译器。

有多种Fortran编译器可供选择,其中最常用的是GNU Fortran(gfortran)和Intel Fortran Compiler(ifort)。

可以从官方网站或其他可信的来源获得这些编译器的安装程序,并按照提示进行安装。

第二步:编写并编译Fortran程序在开始编写Fortran程序之前,需要了解Fortran的基本语法规则。

Fortran使用固定格式或自由格式,固定格式的源代码按照列格式排列,每行的前6列被保留用于行号和注释,从第7列开始是可执行代码。

自由格式没有列格式的限制,更加灵活,但在编译阶段需要指定自由格式。

下面是一个简单的Fortran程序示例,用于计算并输出两个数的和:fortranprogram additionimplicit noneinteger :: a, b, sumprint *, "Enter two numbers:"read *, a, bsum = a + bprint *, "The sum is:", sumend program addition将以上代码保存为一个以.f90为后缀名的文件(例如addition.f90),然后使用编译器将其编译成可执行程序。

Fortran科学计算编程课件

Fortran科学计算编程课件

Fortran科学计算编程课件Fortran(即Formula Translation的缩写)是一种用于科学计算和数值分析的编程语言。

由于其高效性和可靠性,Fortran在科学计算领域广泛应用。

本课件将为您介绍Fortran编程语言,并提供相关的科学计算示例和实践。

第一部分:Fortran简介Fortran是一种面向过程的编程语言,由IBM在1950年代开发,旨在为科学计算提供高性能和可移植性。

Fortran以其强大的数学计算和数组处理能力闻名,是科学家和工程师们首选的编程语言之一。

第二部分:Fortran基本语法2.1 变量和数据类型在Fortran中,变量的类型必须在声明时指定,并且不同类型的变量可以存储不同类型的数据,如整数、实数和字符等。

这一部分将详细介绍Fortran的常用数据类型和变量声明方法。

2.2 控制结构Fortran支持常见的控制结构,例如条件控制语句(if-else语句)、循环语句(do循环)和跳转语句(goto语句)。

我们将逐一介绍这些结构的语法和使用方法,并给出实例演示。

第三部分:科学计算实例为了帮助您更好地理解Fortran的应用,本课件将提供一些科学计算的实例,包括线性代数运算、梯度下降算法等。

通过这些实例,您将学会如何用Fortran编写科学计算程序,并了解其在实践中的应用。

第四部分:Fortran编程工具和资源4.1 编译器Fortran编程需要一个符合语言标准的编译器来将代码转化为可执行文件。

我们将向您介绍几个常用的Fortran编译器,并给出安装和配置的指南。

4.2 开发环境为了提高编程效率,许多IDE(集成开发环境)和编辑器提供了对Fortran的支持。

我们将为您介绍几个常用的Fortran开发环境,并给出使用方法和建议。

4.3 学习资源如果您想深入学习Fortran,我们还准备了一些在线教程和学习资源的链接,方便您进一步扩展知识和技能。

结语通过本课件的学习,您将对Fortran科学计算编程有更深入的了解,并掌握基本的语法和应用技巧。

fortran编程语言概述

fortran编程语言概述

fortran编程语言概述Fortran编程语言概述【引言】Fortran(Formula Translation,公式翻译)是一种高级程序设计语言,最初为科学和工程计算而设计。

自20世纪50年代问世以来,Fortran已成为一种广泛使用的编程语言,为数值计算和科学计算提供了强大的功能和效率。

本文将深入探讨Fortran编程语言的多个方面,包括历史背景、语法特性、应用领域和优缺点等。

【历史背景】Fortran的发展可以追溯到20世纪50年代,当时计算机主要用于数值计算和科学研究。

最早的Fortran编译器于1957年发布,它为科学家和工程师提供了一种简单而强大的编程工具。

随着计算机技术的进步和计算需求的不断增长,Fortran逐渐演化为各种版本,包括Fortran 77、Fortran 90、Fortran 95、Fortran 2003和Fortran 2018等。

【语法特性】Fortran具有一套独特的语法规则和特性,使其适用于科学和工程计算。

首先,Fortran使用固定格式的源代码布局,即每行代码的前六个字符用于行标签,接着是区分符号,然后是代码语句。

其次,Fortran允许使用自然语言类似的语法,使得代码易于阅读和理解。

此外,Fortran 提供了丰富的数学和科学函数,以及数组和矩阵操作,用于处理复杂的数值计算。

【应用领域】由于其优秀的数值计算性能和丰富的科学计算库,Fortran被广泛应用于各个领域。

首先,天文学和物理学领域利用Fortran进行天体力学模拟和物理过程建模。

其次,气象学和气候研究使用Fortran编写气候模型和天气预测程序。

此外,工程学、生物学、化学、经济学等领域也从Fortran的数值计算能力中受益匪浅。

【优点】Fortran具有以下几个明显的优点。

首先,Fortran在数值计算和科学计算方面具有出色的性能,其编译器能够针对各种硬件架构进行优化。

其次,Fortran带有一套丰富的科学计算库,提供了许多常用的数学和科学函数,方便开发人员进行复杂的计算。

fortran编程的步骤

fortran编程的步骤

fortran编程的步骤Fortran编程的步骤一、引言Fortran(Formula Translation)是一种高级程序设计语言,特别适用于科学计算和数值计算。

本文将介绍Fortran编程的步骤,帮助初学者了解如何使用Fortran进行程序开发。

二、编写程序的基本步骤1. 确定程序的目标:在开始编写Fortran程序之前,需要明确程序的目标和需求。

确定程序的输入和输出,以及所需的计算或处理步骤。

这有助于确保编写的程序能够满足预期的功能和要求。

2. 设计算法和数据结构:根据程序的目标,设计合适的算法和数据结构。

算法描述了解决问题的步骤和逻辑,而数据结构则定义了程序中使用的数据类型和数据组织方式。

3. 编写代码:根据算法和数据结构的设计,开始编写Fortran代码。

Fortran使用特定的语法和语句结构,需要熟悉其语法规则和常用的编程技巧。

代码的编写应遵循良好的编码风格,包括适当的缩进、注释和命名规范。

4. 编译程序:编写完Fortran代码后,需要使用Fortran编译器将源代码转换成可执行的机器代码。

编译过程将检查代码中的语法错误和逻辑错误,并生成可执行文件。

Fortran编译器通常会提供丰富的编译选项,可以根据需要进行调整。

5. 调试和测试:编译成功后,可以对程序进行调试和测试。

调试是指查找和修复程序中的错误和问题,测试是指验证程序的正确性和性能。

调试和测试是编程过程中不可或缺的环节,可以使用调试器和测试框架等工具辅助进行。

6. 优化和性能调整:在程序调试和测试完成后,可以考虑对程序进行优化和性能调整。

优化旨在改进程序的执行效率和资源利用率,可以通过改进算法、调整编译选项和使用高级优化技术来实现。

7. 文档撰写:在编程过程中,应及时记录程序的设计和实现细节。

文档可以包括程序的功能描述、算法和数据结构的说明、代码注释和使用说明等。

良好的文档可以提高代码的可读性和可维护性,并方便其他人理解和使用程序。

FORTRAN 程序设计01

FORTRAN 程序设计01
FORTRAN 程序设计
一, Fortran 简介 二,程序流程 三,循环结构 四,数据类型 五,数组 六,过程和模块 七,输入,输出,文件 八,复习,总结
Fortran是目前国际上广泛流行的一种高级语言, 适用于科学计算.Fortran是英文FORmula TRANslation的缩写,意为"公式翻译".它 是为科学,工程问题中的那些能够用数学公式 表达的问题而设计的语言,主要用于数值计算. 这种语言简单易学,因为可以像抄写数学教科 书里的公式一样书写数学公式,它比英文书写 的自然语言更接近数学语言.Fortran语言是 第一个真正推广的高级语言.
Fortran77 (I ~ N)规则; 以(I,j,k,m,l,n)字母开头的 变量为整型. 建议编程时使用声明语句,并在 程序中加入implicit non 语句, 屏蔽(I ~ N)规则;
asb exp sin cos Asin Acos Sqrt ……
asb(x) |x| 指数运算 exp(x) exp(x) 正弦函数 sin(x) sinx 余弦函数 cos(x) cosx 反正弦 Asin(x) arcsinx 反余弦 Acos(x) arccosx 开平方 Sqrt(x) x ………………
系统为每一个常量,变量分配一个存储单元,放它的 值.
6, 数据类型
整型:(数学上的整数集合) integer(n),属性列表,变量列表 例:integer (kind=4) i,t2,pop -2147483638 ~ 2147483637 例:integer (1):: k,m -128 ~127
实型(数学上的实数集合) real(n),属性列表,变量列表 单精度: real(4), real 双精度: real(8), double real(4),:: dx,dy real(8),:: d_p,y2

SIMPLE算法编程实例

SIMPLE算法编程实例

c Demonstration of the SIMPLE (overlapping grid) scheme for a flow problem in a duct cc Dec. 2007 Hangzhou Dianzi Universitydimension u(32),uf(33),a(33),p(32),pp(32),aa(32),su(32)dimension aup(33),aue(33),auw(33),ap(32),ae(32),aw(32),s(32)c u --- velocity on main cell centerc uf --- velocity on main cell facec a --- cell side areac p --- pressurec pp --- pressure correctionc aa --- cell center cross-section areac su --- source term for momentum eqationc aup --- main coefficient for momentum equationc aue --- east coefficient for momentum equationc auw --- west coefficient for momentum equationc ap --- main coefficient for pressure correction equationc ae --- east coefficient for pressure correction equationc aw --- west coefficient for pressure correction equationc s --- source term for pressure correction equationc grid-generation for the converging-diverging ductdx=0.01do i=1,33aaa=0.1/16.**2bb=0.1a(i)=aaa*float(i-17)**2+bbend dodo i=1,32aa(i)=.5*(a(i)+a(i+1))end doc parameter settingden=1000.c boundary conditionsu(1)=10.u(32)=10.viscos=0.001c boundary condition for face velocityuf(1)=10.uf(33)=10.c initial conditiondo i=2,32u(i)=10.uf(i)=10.p(i)=0.end doc do-loop starts (iteration starts)do N=1,1000c solving momentum equation on 2nd griddo i=2,32aue(i)=amax1(abs(den*u(i)*AA(i)/2.),viscos*aa(i)/dx)* -den*u(i)*AA(i)/2.auw(i)=amax1(abs(den*u(i-1)*AA(i-1)/2.),viscos*aa(i-1)/dx)* +den*u(i-1)*AA(i-1)/2.su(i)=a(i)*(p(i-1)-p(i))aup(i)=auw(i)+aue(i)end doc write(6,*)aue(10),auw(10),aup(10),su(10),' aue,auw,aup,su'c small iterationsdo i=2,32uf(i)=(aue(i)*uf(i+1)+auw(i)*uf(i-1)+su(i))/aup(i)end doc extrapolationc aue(1)=aue(2)c auw(1)=auw(2)c aue(33)=aue(32)c auw(33)=auw(32)c solving pressure correction equation on main griddo i=2,31aw(i)=den*a(i)**2/aup(i)ae(i)=den*a(i+1)**2/aup(i+1)ap(i)=aw(i)+ae(i)s(i)=den*a(i)*uf(i)-den*a(i+1)*uf(i+1)end doc set pp=0do i=1,32pp(i)=0.end doc small iterationsdo its=1,30do i=2,31pp(i)=(ae(i)*pp(i+1)+aw(i)*pp(i-1)+s(i))/ap(i)end doend doc correct velocitydo i=2,32uf(i)=uf(i)+(pp(i-1)-pp(i))*a(i)/aup(i)end doc interpolationdo i=1,32u(i)=.5*(uf(i+1)+uf(i))end doc correct pressuredo i=2,31p(i)=p(i)+0.1*pp(i)end doc extrapolationp(1)=2.*p(2)-p(3)p(32)=2.*p(31)-p(30)c monitoring the iterationswrite(6,*)'N=',N, (' u(',i,')=',u(i),i=10,20,10)write(6,*)'N=',N, (' uf(',i,')=',uf(i),i=10,20,10) write(6,*)'N=',N, (' p(',i,')=',p(i),i=10,20,10)end doc results writing into a fileopen(1,file='result.txt')do i=1,32write(1,*)'i=',i,'p(',i,')=',p(i),' u(',i,')=',u(i) * ,' uf(',i,')=',uf(i)end dostopend。

fortran 编程指南

fortran 编程指南

fortran 编程指南英文回答:Fortran is a programming language that was developed in the 1950s and is still widely used today, especially in scientific and engineering applications. It stands for Formula Translation and was designed to be used for numerical and scientific computing. Fortran has evolved over the years and the latest version is Fortran 2018.One of the main advantages of Fortran is its efficiency in handling numerical computations. It has built-in support for arrays and mathematical functions, making it ideal for scientific calculations. Fortran also has a strong static typing system, which helps catch errors at compile-time and improves performance.Another benefit of Fortran is its extensive library of mathematical and scientific functions. These libraries provide a wide range of pre-written code for tasks such aslinear algebra, numerical integration, and solving differential equations. This saves programmers time and effort, as they don't have to write these functions from scratch.Fortran also has a long history and a large communityof users, which means there are plenty of resourcesavailable for learning and troubleshooting. There are numerous books, tutorials, and online forums dedicated to Fortran programming. This makes it easier for beginners to get started and for experienced programmers to find help when needed.One of the drawbacks of Fortran is its syntax, whichcan be seen as outdated compared to modern programming languages. It uses a fixed-format style, where each linehas a specific structure and indentation is not significant. This can make the code look less readable and harder to maintain.Furthermore, Fortran is not as versatile as some other languages when it comes to non-numerical tasks. It lacksbuilt-in support for string manipulation and file I/O operations, which can be limiting in certain applications. However, there are ways to work around these limitations by using external libraries or interfacing with other languages.In conclusion, Fortran is a powerful language for numerical and scientific computing, with a long history and a large community of users. It offers efficiency, extensive libraries, and plenty of resources for learning and troubleshooting. While its syntax may be seen as outdated, it remains a popular choice for scientific and engineering applications.中文回答:Fortran是一种编程语言,于1950年代开发,并且至今仍广泛应用于科学和工程领域。

SIMPLE算法讲解

SIMPLE算法讲解

SIMPLE算法讲解在计算机科学中,算法是一组解决问题的明确指令步骤。

算法可以用于执行各种复杂任务,从图像处理到数据排序。

而SIMPLE(The Symbolic Instruction Manipulation Program for Libraries and Education)算法是为了简化低级机器指令的编写而产生的一种高级编程语言。

本篇文章将简要介绍SIMPLE算法及其应用。

SIMPLE算法最初由美国化学家Daniel D. McCracken于1960年代开发,旨在为非计算机专业人士提供一种易于学习和使用的编程语言。

SIMPLE算法的语法类似于英语,因此非常易于理解和阅读。

它被广泛应用于教育领域,并被用作初学者编程课程的教学工具。

```BEGININPUTa,bc:=a+bOUTPUTcEND```上述代码的功能是输入两个数值a和b,然后将它们相加,并将结果输出。

通过这个简单的例子,我们可以看到SIMPLE算法注重指令的可读性和可理解性。

除了基本的输入输出操作,SIMPLE算法还提供了条件语句和循环语句等控制结构,使得编写复杂程序也变得相对容易。

例如,我们可以使用条件语句来实现一个简单的判断奇偶数的程序:```BEGININPUT numIF num % 2 = 0 THENOUTPUT "Even"ELSEOUTPUT "Odd"ENDIFEND```上述代码通过使用IF-ELSE语句对给定的数字进行判断,并输出相应的结果。

通过使用条件语句,我们可以根据不同的条件执行不同的指令,从而实现程序的分支控制。

SIMPLE算法还提供了多种数据类型和操作符,包括整型、字符型、浮点型、数组等。

这使得编写更复杂的程序成为可能。

同时,SIMPLE算法不仅可以用于简单的算术和逻辑操作,还可以进行文件读写、排序等更高级的计算操作。

尽管SIMPLE算法已经有一段时间没有被广泛使用,但它的原则和设计理念仍然对现代编程有一定的影响。

SIMPLEC 二维、结构网格单相流SIMPLE 算法的C 语言实现的说明

SIMPLEC 二维、结构网格单相流SIMPLE 算法的C 语言实现的说明

v ∂ ( ρφ ) + div ( ρ uφ ) = div( Γgradφ ) + S (传热 2.13) ∂t
(热图 2.1) 在一个控制容积上的流量平衡 此微元内的传递行为可以用下面的式子统一地表示:
∂ ( ρφ ) + divJ φ = S (1) ∂t ∂ ∂J ∂J y ∂J z ( ρφ ) 代表单位容积内 φ 的变化率。divJ φ = x + + ∂ ∂x ∂y ∂z
关于文中的公式与图表的引用为了方便读者与传热与流体流动的数值计算的对照凡是从原著上摘抄的公式与图表均保持原著中的编号
二维、结构网格单相流 SIMPLE 算法的 C 语言实现的说明 qzhen@flotu.org Page 1/49
第一节 前言
SIMPLE 算法的全称是“Semi-Implicit Method for Pressure-Linked Equations”,意思是求解压力耦合 的质量/动量/能量传递方程的半隐式方法。自从 S.V.Patankar(帕坦卡)和 D.B.Spalding(斯伯丁)于 1972 年提出 SIMPLE 算法后,它实际上已经成为许多工程流动、传热以及反应体系的数值模拟的最重要的方法。 许多商业 CFD 软件,如 cfx 与 fluent,其核心也都基于 SIMPLE 算法。 了解 SIMPLE 算法是学习差分数值计算以及 CFD(计算流体力学)一个非常好的起点。而且,SIMPLE 算法对 于很多工程问题也足够用了。介绍 SIMPLE 算法最好的书自然是帕坦卡自己所著的《传热与流体流动的数值 计算》[1]。不过,这本优秀、简洁的著作没有附带源代码。 我在学习 SIMPLE 的过程中,了解到一份可靠、简单、说明文档完整、可方便地编译执行的源代码对于初学 者的重要性。于是我用 C 语言改写了 SIMPLE 算法(称之为 SIMPLE_C),并给出了详细的文档,希望能够缩 短算法与代码之间的距离。算法源自水木清华 BBS 上 orange01 与 moran 两位同学所给予的 FORTRAN SIMPLE 代码。同时清华大学化工系反应工程教研组刘飞同学的笔记也给了我很大的帮助,在此一并谢过。 目前,SIMPLE_C 只能解决二维直角坐标、结构网格的问题。取决于表征问题的微分方程,SIMPLE_C 在这个 几何框架下能够模拟瞬态或者时均的流动、传热以及反应耦合的单相流体系。应该说明,下面的一些问题 可能或者根本不在 SIMPLE_C 的能力范围之内:高精度的流场预测;多相流;三维流动;复杂流场或者几何 结构;边界层行为预测;马赫数接近或超过 1 的高速流动。 关于 orange01 与 moran 两位同学的 SIMPLE FORTRAN 代码的版权问题,我在源代码上看见这么一段,在此 原封不动地摘录如下: Cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc Cccc This computer program was copied from the graduate student course program Cccc of the University of Minnesota. Part of it was re-formulated to meet the Cccc personal computer environment. Some inappropriate expressions were also Cccc corrected. The program is used only for teaching purpose. No part of it Cccc may be published. You may use it as a frame to re-develop your own code Cccc for research purpose. XJTU Instructor, 1995.11 Cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc 本文的工作是非常粗浅的。本质上它是帕坦卡在70年代就已解决的问题的一个简单的复述。不过,希望它 能起到抛砖引玉的作用――期望更多的研究者能够将手头基于SIMPLE的先进算法的源代码整理并共享出 来。下面一些特性是特别欢迎的: l l 三维网格; 非结构/自适应网格; 高精度差分格式; 欧拉+欧拉模式的多相流; 欧拉+拉格朗日模式的多相流; 基于PC CLUSTER(个人电脑集群,MIMD体系)的并行算法。

基于Fortran95的SIMPLE程序设计

基于Fortran95的SIMPLE程序设计
ra a l . e d b e
Ke r s SMP ;F r n 5 9 ;p ga n ;n meia h a ll fr y wo d : I L E ot 9 /0 r rmmig u rcl e t 'l e a r o tts l
0 引言
SMP正 ( I I 一mpii Me o o rsue Ln e I l t td frPe sr ik c h d
装数据的功能的运用; 删除了所有功能强大但易破坏程序结构的 C T , O语句; O 一些比较符合结构化编程的新的语句
块 的运用 ; ra 5中增强 了的数组功能在待求数组赋初值 、 F tn or 9 设定边 界条件 等方 面的运用 等 。并 通过实 例进行 了新
旧两种编程方法的对比。结果表明基于新语法的程序具有 比原有程序更易维护、 可读性好的特点。 关键词 : Байду номын сангаас L 算法 ; ra 5 0程序设计 ; S PE I F tn / ; or 9 9 数值传热学
Fra 作为一门高级 编程语 言 , or tn 是最适合 用于
科学计算 的。正因此 N T的教学 中使用 的程 序多 H E utn) q aos算法是数值传热学 ( H ) i N r里最基本也是最
重要的算法。这一算法及其各种改进方案在世界各 由 Fra or tn编制。Fra6 o r 6和 Fra 7 tn or 7 都是这 门语 tn 言相 当成熟 的标 准 , 自都 流行 了十几年 。但是 各
Fra6 不是结构化的语 言 , o- 6 en 没有直接实现三种基
中圈分 类号 :K 2 T 14 文献 标识 码 : A
L n,DA a rY, I IO N ie 删 Y .i Mi . uqu 2

Simply_Fortran_Oper

Simply_Fortran_Oper

Simply Fortran简单操作一.Simply Fortran是什么?Simply Fortran是Approximatrix公司的产品。

基于GFortran的集成开发环境。

具有安装简单,无需额外设置,操作简单,编辑器专属Fortran设计等特点。

二.如何创建简单源代码文件点击File菜单选择New新建输入代码点击保存按钮输入保存的文件名并选择格式(自由或固定格式)此时Untitled变为***.f90点击Build Project即可完成编译,链接弹出编译状态(Build Status)看到Complete说明成功链接,否则表示有错误两种运行方式:Run in External Console弹出新命令行窗口运行Open Console在本窗口界面运行通常我建议使用前者Run in External Console所保存的文件夹下File.f90是源代码File.exe是编译后的可执行文件三.如何创建工程当需要多个源代码共同链接时,可使用工程进行管理。

选择Project菜单New Project选择工程类型,通常为命令行程序(Console程序)选择保存路径保存为prj工程文件如,保存为fcode_proj可看到左侧的工程管理窗口(Project Outline)如看不到,可点击左侧栏的文件柜图标()在工程上右键,选择Add File(s)...选择多个需要打开的源代码文件。

比如file.f90和sub.f90可看到添加了两个源代码文件。

双击任何一个可开始编辑点击Project菜单Save Project保存工程可通过选项卡切换多个打开的文件,分别进行编辑点击Build Project开始编译链接编译完成运行程序下次打开Simply Fortran 可直接加载工程选择Project菜单Open Project...选择上次保存的prj文件上次加载的源代码文件(及各种参数设置)就自动被加载了四.如何调试关于调试的概念性问题,请参考本站其他文章:在所需插入断点的地方行的最前方点击,既可插入断点。

fortran 编程指南

fortran 编程指南

fortran 编程指南英文回答:Fortran is a programming language that is widely usedin scientific and engineering applications. It was developed in the 1950s and has gone through several versions since then. Fortran is known for its efficiency and performance in numerical calculations, making it a popular choice for scientific computing.One important aspect of Fortran programming is understanding the syntax and structure of the language. Fortran uses a fixed-format layout, where each line of code is divided into specific columns. This can be a bit different from other modern programming languages that use free-formatting. It's important to pay attention to the column layout to ensure the code is correctly interpreted by the compiler.Another key aspect of Fortran programming is the use ofarrays. Fortran provides extensive support for arrays, allowing for efficient manipulation of large sets of data. Arrays in Fortran are declared using the DIMENSION statement, and they can be used for various purposes, such as storing data, performing calculations, and passing data between subroutines.Fortran also has a rich set of built-in functions and mathematical libraries that make it easy to perform complex mathematical operations. For example, the intrinsicfunction SIN calculates the sine of an angle, and the intrinsic function SQRT calculates the square root of a number. These functions are designed to work efficientlywith arrays, making it easy to perform calculations onlarge datasets.In addition to its numerical capabilities, Fortran also supports character manipulation and input/output operations. This allows for the creation of user-friendly programs that can interact with the user through text-based interfaces. For example, a Fortran program can prompt the user for input, perform calculations, and display the results in aformatted manner.中文回答:Fortran是一种广泛应用于科学和工程领域的编程语言。

fortran 教程

fortran 教程

fortran 教程Fortran是一种古老而强大的编程语言,最初在1957年开发。

它被广泛用于科学和工程计算,特别是对大型和复杂的计算任务。

Fortran之所以如此受欢迎,是因为它在数学计算领域表现出色。

它拥有丰富的数学函数和运算符,并且支持高精度计算。

此外,Fortran还具有强大的数组处理能力,可以轻松处理大规模数据。

Fortran的语法相对简单,易于学习和使用。

它使用英语类似的语法,语句以换行符结束。

Fortran中的语句通常以关键字开始,例如"PROGRAM","SUBROUTINE"和"DO"等。

Fortran具有自己的变量类型,包括整数(INTEGER)、实数(REAL)和字符(CHARACTER)等。

变量必须在使用之前先声明,并且可以指定其大小和精度。

Fortran还支持过程式编程,包括子程序和函数的定义。

子程序可以接受输入参数,并返回结果。

这种模块化的编程方法可以提高代码的可读性和可维护性。

Fortran程序通常由一个主程序(PROGRAM)和若干个子程序(SUBROUTINE)组成。

主程序是程序的入口点,而子程序则可以被主程序或其他子程序调用。

Fortran还提供了许多控制结构,包括条件语句(IF-THEN-ELSE)和循环语句(DO)等。

这些结构可以帮助程序在不同的情况下做出不同的决策和重复执行特定的代码块。

在写Fortran程序时,编码风格非常重要。

良好的编码风格可以使程序更易于阅读和理解,减少错误的发生。

在Fortran中,常用的编码风格包括正确缩进、适当的变量命名和注释的使用等。

总结起来,Fortran是一种强大而易于学习的编程语言,特别适用于数学计算和科学工程领域。

通过掌握Fortran的基本语法和编码风格,您将能够编写高效且可靠的程序。

simple算法的实施步骤

simple算法的实施步骤

Simple算法的实施步骤1. 简介Simple算法是一种基础的算法,它的实施步骤简单明了,适用于解决一些较为简单的问题。

本文将详细介绍Simple算法的实施步骤以及相关注意事项。

2. 步骤以下是Simple算法的实施步骤:1.理解问题:首先,你需要完全理解你要解决的问题。

明确问题的输入和输出,了解问题的背景和约束条件。

2.设计解决方案:在理解问题的基础上,开始设计解决方案。

可以采用以下的步骤来设计解决方案:–分解问题:将复杂的问题分解成更小、更简单的子问题。

这样可以更容易理解和解决每个子问题。

–选择合适的数据结构和算法:根据问题的特点和要求,选择合适的数据结构和算法。

例如,如果需要对一组数据进行排序,可以选择快速排序算法。

–编写伪代码:编写伪代码来描述解决问题的思路和步骤。

伪代码不是具体的编程语言,而是一种类似于自然语言的描述方式,用来描述算法解决问题的过程。

–优化解决方案:对解决方案进行优化,考虑时间复杂度和空间复杂度。

可以通过改进算法、优化数据结构和减少不必要的操作等方式来优化解决方案。

3.实施解决方案:在设计完成后,可以根据编写的伪代码来实施解决方案。

具体步骤如下:–编写代码:根据伪代码,选择合适的编程语言,编写实际的代码。

–调试代码:编写完成后,进行代码调试,确保代码运行正确,并能够解决问题。

4.测试和验证:在实施解决方案后,需要进行测试和验证,以确保解决方案的正确性。

可以采用以下方式进行测试和验证:–构造合适的测试用例:根据问题的输入和输出,构造一组合适的测试用例,测试解决方案的准确性和鲁棒性。

–运行测试用例并验证结果:运行测试用例,比对实际输出和期望输出,验证解决方案是否正确。

–分析性能和效果:分析解决方案的性能和效果,评估算法的时间复杂度和空间复杂度,以及解决问题的效果和可行性。

5.优化和改进:根据测试和验证的结果,进行优化和改进。

可以根据测试结果,调整算法和数据结构,优化解决方案的性能和效果。

fortran 简明教程

fortran 简明教程

fortran 简明教程Fortran是世界上最早的高级程序设计语言之一,广泛应用于科学计算、工程和数值分析等领域。

以下是Fortran的简明教程:1. 程序结构:一个Fortran程序由不同的程序单元组成,包括主程序、子程序和模块等。

每个程序单元都以END结束。

主程序是程序的入口点,可以包含变量声明、执行语句和控制语句等。

子程序可以包含函数和子例程,用于执行特定的任务。

模块用于提供程序中的公共代码和数据。

2. 变量声明:在Fortran中,变量必须先声明后使用。

变量类型包括整数型、实数型、字符型等。

例如,声明一个整数型变量可以这样写:INTEGER :: x3. 执行语句:执行语句用于控制程序的流程和执行顺序。

Fortran提供了多种控制语句,如IF语句、DO循环、WHILE循环等。

例如,使用IF语句进行条件判断:IF (x > 0) THEN y = x x ELSE y = -x x END IF4. 输入输出:Fortran提供了基本的输入输出功能。

可以使用READ语句从标准输入读取数据,使用WRITE语句将数据输出到标准输出。

例如,读取一个实数并输出到屏幕:READ(,) x WRITE(,) x5. 数组和矩阵:Fortran支持一维和多维数组,以及矩阵运算。

例如,声明一个二维实数数组并赋值:REAL :: A(3,3) A =RESHAPE((/1,2,3,4,5,6,7,8,9/), (/3,3/))6. 子程序和模块:子程序可以用于封装特定的功能或算法,并在主程序中调用。

模块可以包含公共的函数、子例程和变量等,用于提供可重用的代码和数据。

7. 调试和优化:Fortran提供了多种调试工具和技术,如断点、单步执行、变量监视等。

还可以使用性能分析工具来检查程序的性能瓶颈并进行优化。

以上是Fortran的简明教程,希望能帮助您快速入门Fortran编程。

Fortran语言教程

Fortran语言教程

Fortran语言教程Fortran(Formula Translation)是一种面向科学和工程计算的高级程序设计语言,由IBM公司于1950年代初开发。

它是世界上第一种高级程序设计语言,也是最早被广泛应用于科学计算领域的编程语言之一、Fortran在过去几十年中一直是科学计算领域中最受欢迎的编程语言之一,它提供了丰富的数值计算和数组处理功能,并具有高效的性能。

Fortran语言的主要特点是其简洁、清晰的语法结构和丰富的数学函数库。

它使用类似于数学公式的语法,使得编写科学计算程序变得更加直观和容易。

Fortran支持各种数据类型,包括整型、实型、复型和字符型等。

它还提供了强大的数组操作功能,可以方便地进行矩阵运算和向量处理。

此外,Fortran还支持模块化编程和面向对象编程的特性,使得程序的开发和维护更加灵活和高效。

Fortran语言的代码以子程序(subroutine)为基本单位,程序的执行从主程序开始,通过调用子程序来完成具体的计算任务。

子程序可以接受输入参数,并返回计算结果。

这种模块化的设计使得程序的结构清晰,易于理解和维护。

Fortran还支持递归调用,可以方便地处理复杂的计算问题。

Fortran语言还具有很好的可移植性和跨平台性。

由于Fortran语言的标准化程度较高,因此几乎所有的Fortran编译器都遵循相同的语法规则和标准库函数接口。

这使得Fortran程序可以在不同的计算机平台上进行编译和运行,而不需要进行太多的修改。

虽然Fortran语言在过去几十年中一直是科学计算领域的主流语言,但随着计算机硬件和编程技术的快速发展,它的地位逐渐下降。

现在,许多科学计算任务更倾向于使用更现代的编程语言,如C、C++和Python等。

但是,由于Fortran在科学计算领域的广泛应用和丰富的数值计算功能,它仍然是一种重要的编程语言,尤其在一些特定的领域,如气象学、物理学和地球科学等。

总结起来,Fortran是一种面向科学和工程计算的编程语言,具有简洁、清晰的语法结构和丰富的数值计算功能。

基于Fortran95的SIMPLE程序设计

基于Fortran95的SIMPLE程序设计

基于Fortran95的SIMPLE程序设计
李旻;刁乃仁;胡玉秋
【期刊名称】《山东建筑大学学报》
【年(卷),期】2006(021)002
【摘要】提出了基于Fortran95新特性改写SIMPLE算法的主要方法与内容.其中主要包括Fortran95中MODULE模块封装数据的功能的运用;删除了所有功能强大但易破坏程序结构的GOTO语句;一些比较符合结构化编程的新的语句块的运用;Fortran95中增强了的数组功能在待求数组赋初值、设定边界条件等方面的运用等.并通过实例进行了新旧两种编程方法的对比.结果表明基于新语法的程序具有比原有程序更易维护、可读性好的特点.
【总页数】6页(P159-164)
【作者】李旻;刁乃仁;胡玉秋
【作者单位】山东建筑工程学院,热能工程学院,山东,济南,250101;山东建筑工程学院,热能工程学院,山东,济南,250101;山东农业大学,水利土木工程学院,山东,泰安,271018
【正文语种】中文
【中图分类】TK124
【相关文献】
1.一种基于三角形非结构化网格SIMPLE 算法的程序设计 [J], 刘波;李忠媛;张涛
2.SIMPLE:一种新型多范型程序设计语言 [J], 吴迪;陈林;徐宝文
3.一种基于Householder变换的Simpler GMRES算法 [J], 丁伯伦;凌婷婷;耿杰
4.基于SIMPLER算法的多重网格方法研究 [J], 赵智峰;欧阳洁;杨继业
5.基于区域分解的并行SIMPLER算法研究 [J], 肖曼玉;欧阳洁;李永刚
因版权原因,仅展示原文概要,查看原文内容请购买。

简单编程

简单编程

3. 变量类型
变量是开辟的存储单元,用来存放常量的,相应 的有整型变量、实型变量、双精度变量、复型变量、 逻辑型变量和字符型变量。变量在内存中所占的字节 数和数据存储形式与相应类型的常数相同。 变量类型的规定:
1. I-N隐含约定:凡以字母I、J、K、L、M、N六个 字母开头的,即认为该变量为整型变量。以其它字母 开头的变量为实型变量。
几点说明: 1. 优先级:类型说明语句 > implicit语句 > I-N隐含约定 IMPLICIT REAL (I, J) INTEGER IMAX 2. 类型说明语句和implicit语句都是非执行语句; 3. 类型说明只在本程序单位内有效; 4. implicit语句和类型说明语句应该出现在本程序单位中 的所有执行语句的前面,其中,implicit语句又应在所有 的类型说明语句的前面。
★ N-S图又称盒图 (box diagram)
3)伪代码表示和PAD图(部分使用)
伪 代 码 表 示
P A D 图
伪代码:介于自然语言和计算机语言之间,无固定格式。不是程序! PAD图:Program Analysis Diagram, 分别按横纵向展开,层次感强。
练习题
用传统流程图和N-S图表示下题算法: 将100-200之间的素数打印出来。
二、简单的Fortran程序分析
求三数平均
C Calculate the average of three numbers x=90.5 y=87.0 z=68.5 aver=(x+y+z)/3.0 write(*,*) 'The three numbers are', x, y, z write(*,*) 'average=', aver end
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

CcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccCccc This computer program was copied from the graduate student course programCccc of the University of Minnesota. Part of it was re-formulated to meet theCccc personal computer environment. Some inappropriate expressions were alsoCccc corrected. The program is used only for teaching purpose. No part of itCccc may be published. You may use it as a frame to re-develop your own codeCccc for research purpose. XJTU Instructor, 1995.11**************************************************************************** *----------------------------MAIN PROGRAM-----------------------------------**************************************************************************** LOGICAL LSTOPCOMMON/CNTL/LSTOP**************************************************************************** OPEN(08,FILE='teresul')CALL SETUP0CALL GRIDCALL SETUP1CALL START10 CALL DENSECALL BOUNDCALL OUTPUTIF(.NOT.LSTOP) GO TO 15CLOSE(08)STOP15 CALL SETUP2GO TO 10END*---------------------------------------------------------------------------SUBROUTINE DIFLOW**************************************************************************** COMMON/COEF/FLOW,DIFF,ACOF**************************************************************************** ACOF=DIFFIF(FLOW .EQ.0.0)RETURNTEMP=DIFF-ABS(FLOW)*0.1ACOF=0.IF(TEMP .LE. 0. ) RETURNTEMP=TEMP/DIFFACOF=DIFF*TEMP**5RETURNEND*--------------------------------------------------------------------------SUBROUTINE SOLVE****************************************************************************DOUBLE PRECISION TITLELOGICAL LSOLVE,LPRINT,LBLK,LSTOPCOMMON F(22,22,10),P(22,22),RHO(22,22),GAM(22,22),CON(22,22),& AIP(22,22),AIM(22,22),AJP(22,22),AJM(22,22),AP(22,22),& X(22),XU(22),XDIF(22),XCV(22),XCVS(22),& Y(22),YV(22),YDIF(22),YCV(22),YCVS(22),& YCVR(22),YCVRS(22),ARX(22),ARXJ(22),ARXJP(22),& R(22),RMN(22),SX(22),SXMN(22),XCVI(22),XCVIP(22)COMMON DU(22,22),DV(22,22),FV(22),FVP(22),& FX(22),FXM(22),FY(22),FYM(22),PT(22),QT(22)COMMON /INDX/NF,NFMAX,NP,NRHO,NGAM,L1,L2,L3,M1,M2,M3,& IST,JST,ITER,LAST,TITLE(13),RELAX(13),TIME,DT,XL,YL,&IPREF,JPREF,LSOLVE(10),LPRINT(13),LBLK(10),MODE,NTIMES(10),RHOCON**************************************************************************** ISTF=IST-1JSTF=JST-1IT1=L2+ISTIT2=L3+ISTJT1=M2+JSTJT2=M3+JST**************************************************************************** DO 999 NT=1,NTIMES(NF)DO 999 N=NF,NF*---------------------------------------------------------------------------IF(.NOT. LBLK(NF)) GO TO 10PT(ISTF)=0.QT(ISTF)=0.DO 11 I=IST,L2BL=0.BLP=0.BLM=0.BLC=0.DO 12 J=JST,M2BL=BL+AP(I,J)IF(J .NE. M2) BL=BL-AJP(I,J)IF(J .NE. JST) BL=BL-AJM(I,J)BLP=BLP+AIP(I,J)BLM=BLM+AIM(I,J)BLC=BLC+CON(I,J)+AIP(I,J)*F(I+1,J,N)+AIM(I,J)*F(I-1,J,N)& +AJP(I,J)*F(I,J+1,N)+AJM(I,J)*F(I,J-1,N)-AP(I,J)*F(I,J,N)12 CONTINUEDENOM=BL-PT(I-1)*BLMDENO=1.E15IF(ABS(DENOM/BL) .LT. 1.E-10) DENOM=1.E20*DENOQT(I)=(BLC+BLM*QT(I-1))/DENOM11 CONTINUEBL=0.DO 13 II=IST,L2I=IT1-IIBL=BL*PT(I)+QT(I)DO 13 J=JST,M213 F(I,J,N)=F(I,J,N)+BL*--------------------------------------------------------------------------- PT(JSTF)=0.QT(JSTF)=0.DO 21 J=JST,M2BL=0.BLP=0.BLM=0.BLC=0.DO 22 I=IST,L2BL=BL+AP(I,J)IF(I .NE. L2) BL=BL-AIP(I,J)IF(I .NE. IST) BL=BL-AIM(I,J)BLP=BLP+AJP(I,J)BLM=BLM+AJM(I,J)BLC=BLC+CON(I,J)+AIP(I,J)*F(I+1,J,N)+AIM(I,J)*F(I-1,J,N)& +AJP(I,J)*F(I,J+1,N)+AJM(I,J)*F(I,J-1,N)-AP(I,J)*F(I,J,N)22 CONTINUEDENOM=BL-PT(J-1)*BLMIF (ABS(DENOM/BL) .LT. 1E-10) DENOM=1.E20*DENOPT(J)=BLP/DENOMQT(J)=(BLC+BLM*QT(J-1))/DENOM21 CONTINUEBL=0.DO 23 JJ=JST,M2J=JT1-JJBL=BL*PT(J)+QT(J)DO 23 I=IST,L223 F(I,J,N)=F(I,J,N)+BL10 CONTINUE*-----------------------------------------------------------------------DO 90 J=JST,M2PT(ISTF)=0.QT(ISTF)=F(ISTF,J,N)DO 70 I=IST,L2DENOM=AP(I,J)-PT(I-1)*AIM(I,J)TEMP=CON(I,J)+AJP(I,J)*F(I,J+1,N)+AJM(I,J)*F(I,J-1,N)QT(I)=(TEMP+AIM(I,J)*QT(I-1))/DENOM70 CONTINUEDO 80 II=IST,L2I=IT1-II80 F(I,J,N)=F(I+1,J,N)*PT(I)+QT(I)90 CONTINUE*----------------------------------------------------------------------- DO 190 JJ=JST,M3J=JT2-JJPT(ISTF)=0.QT(ISTF)=F(ISTF,J,N)DO 170 I=IST,L2DENOM=AP(I,J)-PT(I-1)*AIM(I,J)PT(I)=AIP(I,J)/DENOMTEMP=CON(I,J)+AJP(I,J)*F(I,J+1,N)+AJM(I,J)*F(I,J-1,N)QT(I)=(TEMP+AIM(I,J)*QT(I-1))/DENOM170 CONTINUEDO 180 II=IST,L2I=IT1-II180 F(I,J,N)=F(I+1,J,N)*PT(I)+QT(I)190 CONTINUE*----------------------------------------------------------------------- DO 290 I=IST,L2PT(JSTF)=0.QT(JSTF)=F(I,JSTF,N)DO 270 J=JST,M2DENOM=AP(I,J)-PT(J-1)*AJM(I,J)PT(J)=AJP(I,J)/DENOMTEMP=CON(I,J)+AIP(I,J)*F(I+1,J,N)+AIM(I,J)*F(I-1,J,N)QT(J)=(TEMP+AJM(I,J)*QT(J-1))/DENOM270 CONTINUEDO 280 JJ=JST,M2J=JT1-JJ280 F(I,J,N)=F(I,J+1,N)*PT(J)+QT(J)290 CONTINUE*----------------------------------------------------------------------- DO 390 II=IST,L3I=IT2-IIPT(JSTF)=0.QT(JSTF)=F(I,JSTF,N)DO 370 J=JST,M2DENOM=AP(I,J)-PT(J-1)*AJM(I,J)TEMP=CON(I,J)+AIP(I,J)*F(I+1,J,N)+AIM(I,J)*F(I-1,J,N)QT(J)=(TEMP+AJM(I,J)*QT(J-1))/DENOM370 CONTINUEDO 380 JJ=JST,M2J=JT1-JJ380 F(I,J,N)=F(I,J+1,N)*PT(J)+QT(J)390 CONTINUE************************************************************************ 999 CONTINUEDO 400 J=2,M2DO 400 I=2,L2CON(I,J)=0.AP(I,J)=0.400 CONTINUERETURNEND************************************************************************ SUBROUTINE SETUP************************************************************************ DOUBLE PRECISION TITLELOGICAL LSOLVE,LPRINT,LBLK,LSTOPCOMMON F(22,22,10),P(22,22),RHO(22,22),GAM(22,22),CON(22,22),& AIP(22,22),AIM(22,22),AJP(22,22),AJM(22,22),AP(22,22),& X(22),XU(22),XDIF(22),XCV(22),XCVS(22),& Y(22),YV(22),YDIF(22),YCV(22),YCVS(22),&YCVR(22),YCVRS(22),ARX(22),ARXJ(22),ARXJP(22),&R(22),RMN(22),SX(22),SXMN(22),XCVI(22),XCVIP(22)COMMON DU(22,22),DV(22,22),FV(22),FVP(22),& FX(22),FXM(22),FY(22),FYM(22),PT(22),QT(22)COMMON /INDX/NF,NFMAX,NP,NRHO,NGAM,L1,L2,L3,M1,M2,M3,& IST,JST,ITER,LAST,TITLE(13),RELAX(13),TIME,DT,XL,YL,& IPREF,JPREF,LSOLVE(10),LPRINT(13),LBLK(10),MODE,NTIMES(10),RHOCONCOMMON/CNTL/LSTOPCOMMON/SORC/SMAX,SSUMCOMMON/COEF/FLOW,DIFF,ACOFDIMENSION U(22,22),V(22,22),PC(22,22)EQUIVALENCE (F(1,1,1),U(1,1)),(F(1,1,2),V(1,1)),(F(1,1,3),PC(1,1))************************************************************************1 FORMAT(//15X,'COMPUTATION IN CARTISIAN COORDINATES')2 FORMAT(//15X,'COMPUTATION FOR AXISYMMETRICAL SITUATION')3 FORMAT(//15X,' COMPUTATION IN POLAR COORDINATES ')4 FORMAT(1X,14X,40(1H*),//)*-----------------------------------------------------------------------ENTRY SETUP0NFMAX=10NP=11NRHO=12NGAM=13LSTOP=.FALSE.DO 779 I=1,10LSOLVE(I)=.FALSE.LBLK(I)=.TRUE.779 NTIMES(I)=1DO 889 I=1,13LPRINT(I)=.FALSE.889 RELAX(I)=1.MODE=1LAST=5TIME=0.ITER=0DT=1.0E+10IPREF=1JPREF=1RHOCON=1RETURN*----------------------------------------------------------------------- ENTRY SETUP1L2=L1-1L3=L2-1M2=M1-1M3=M2-1X(1)=XU(2)DO 5 I=2,L25 X(I)=0.5*(XU(I+1)+XU(I))X(L1)=XU(L1)Y(1)=YV(2)DO 10 J=2,M210 Y(J)=0.5*(YV(J+1)+YV(J))Y(M1)=YV(M1)DO 15 I=2,L115 XDIF(I)=X(I)-X(I-1)DO 18 I=2,L218 XCV(I)=XU(I+1)-XU(I)DO 20 I=3,L220 XCVS(I)=XDIF(I)XCVS(3)=XCVS(3)+XDIF(2)XCVS(L2)=XCVS(L2)+XDIF(L1)DO 22 I=3,L3XCVI(I)=0.5*XCV(I)22 XCVIP(I)=XCVI(I)XCVIP(2)=XCV(2)XCVI(L2)=XCV(L2)DO 35 J=2,M135 YDIF(J)=Y(J)-Y(J-1)DO 40 J=2,M240 YCV(J)=YV(J+1)-YV(J)DO 45 J=3,M245 YCVS(J)=YDIF(J)YCVS(3)=YCVS(3)+YDIF(2)YCVS(M2)=YCVS(M2)+YDIF(M1)IF (MODE .NE. 1) GO TO 55DO 52 J=1,M1RMN(J)=1.52 R(J)=1.GO TO 5655 DO 50 J=2,M150 R(J)=R(J-1)+YDIF(J)RMN(2)=R(1)DO 60 J=3,M260 RMN(J)=RMN(J-1)+YCV(J-1)RMN(M1)=R(M1)56 CONTINUEDO 57 J=1,M1SX(J)=1.SXMN(J)=1.IF(MODE .NE. 3) GO TO 57SX(J)=R(J)IF(J .NE. 1) SXMN(J)=RMN(J)57 CONTINUEDO 62 J=2,M2YCVR(J)=R(J)*YCV(J)ARX(J)=YCVR(J)IF (MODE .NE. 3) GO TO 62ARX(J)=YCV(J)62 CONTINUEDO 64 J=4,M364 YCVRS(J)=0.5*(R(J)+R(J-1))*YDIF(J)YCVRS(3)=0.5*(R(3)+R(1))*YCVS(3)YCVRS(M2)=0.5*(R(M1)+R(M3))*YCVS(M2) IF(MODE .NE. 2) GO TO 67DO 65 J=3,M3ARXJ(J)=0.25*(1.+RMN(J)/R(J))*ARX(J)65 ARXJP(J)=ARX(J)-ARXJ(J)GO TO 6867 DO 66 J=3,M3ARXJ(J)=0.5*ARX(J)66 ARXJP(J)=ARXJ(J)68 ARXJP(2)=ARX(2)ARXJ(M2)=ARX(M2)DO 70 J=3,M3FV(J)=ARXJP(J)/ARX(J)70 FVP(J)=1.-FV(J)DO 85 I=3,L2FX(I)=0.5*XCV(I-1)/XDIF(I)85 FXM(I)=1.-FX(I)FX(2)=0.FXM(2)=1.FX(L1)=1.FXM(L1)=0.DO 90 J=3,M2FY(J)=0.5*YCV(J-1)/YDIF(J)90 FYM(J)=1.-FY(J)FY(2)=0.FYM(2)=1.FY(M1)=1.FYM(M1)=0.*---CON,AP,U,V,RHO,PC AND P ARRAYS ARE INITIALIZED HERE---- DO 95 J=1,M1DO 95 I=1,L1PC(I,J)=0.U(I,J)=0.V(I,J)=0.CON(I,J)=0.AP(I,J)=0.RHO(I,J)=RHOCONP(I,J)=0.95 CONTINUEIF(MODE .EQ. 1) WRITE(8,1)IF(MODE .EQ. 2) WRITE(8,2)IF(MODE .EQ. 3) WRITE(8,3)WRITE(8,4)RETURN*----------------------------------------------------------------------ENTRY SETUP2*---COEFFICIENTS FOR THE U EQUATION----NF=1IF(.NOT. LSOLVE(NF)) GO TO 100IST=3JST=2CALL GAMSORREL=1.-RELAX(NF)DO 102 I=3,L2FL=XCVI(I)*V(I,2)*RHO(I,1)FLM=XCVIP(I-1)*V(I-1,2)*RHO(I-1,1)FLOW=R(1)*(FL+FLM)DIFF=R(1)*(XCVI(I)*GAM(I,1)+XCVIP(I-1)*GAM(I-1,1))/YDIF(2)CALL DIFLOW102 AJM(I,2)=ACOF+AMAX1(0.,FLOW)DO 103 J=2,M2FLOW=ARX(J)*U(2,J)*RHO(1,J)DIFF=ARX(J)*GAM(1,J)/(XCV(2)*SX(J))CALL DIFLOWAIM(3,J)=ACOF+AMAX1(0.,FLOW)DO 103 I=3,L2IF(I .EQ. L2) GO TO 104FL=U(I,J)*(FX(I)*RHO(I,J)+FXM(I)*RHO(I-1,J))FLP=U(I+1,J)*(FX(I+1)*RHO(I+1,J)+FXM(I+1)*RHO(I,J))FLOW=ARX(J)*0.5*(FL+FLP)DIFF=ARX(J)*GAM(I,J)/(XCV(I)*SX(J))GO TO 105104 FLOW=ARX(J)*U(L1,J)*RHO(L1,J)DIFF=ARX(J)*GAM(L1,J)/(XCV(L2)*SX(J))105 CALL DIFLOWAIM(I+1,J)=ACOF+AMAX1(0.,FLOW)AIP(I,J)=AIM(I+1,J)-FLOWIF (J .EQ. M2) GOTO 106FL=XCVI(I)*V(I,J+1)*(FY(J+1)*RHO(I,J+1)+FYM(J+1)*RHO(I,J))FLM=XCVIP(I-1)*V(I-1,J+1)*(FY(J+1)*RHO(I-1,J+1)+FYM(J+1)*& RHO(I-1,J))GM=GAM(I,J)*GAM(I,J+1)/(YCV(J)*GAM(I,J+1)+YCV(J+1)*GAM(I,J)+ & 1.0E-30)*XCVI(I)GMM=GAM(I-1,J)*GAM(I-1,J+1)/(YCV(J)*GAM(I-1,J+1)+YCV(J+1)*& GAM(I-1,J)+1.E-30)*XCVIP(I-1)DIFF=RMN(J+1)*2.*(GM+GMM)GO TO 107106 FL=XCVI(I)*V(I,M1)*RHO(I,M1)FLM=XCVIP(I-1)*V(I-1,M1)*RHO(I-1,M1)DIFF=R(M1)*(XCVI(I)*GAM(I,M1)+XCVIP(I-1)*GAM(I-1,M1))/YDIF(M1) 107 FLOW=RMN(J+1)*(FL+FLM)CALL DIFLOWAJM(I,J+1)=ACOF+AMAX1(0.,FLOW)AJP(I,J)=AJM(I,J+1)-FLOWVOL=YCVR(J)*XCVS(I)APT=(RHO(I,J)*XCVI(I)+RHO(I-1,J)*XCVIP(I-1))& /(XCVS(I)*DT)AP(I,J)=AP(I,J)-APTCON(I,J)=CON(I,J)+APT*U(I,J)AP(I,J)=(-AP(I,J)*VOL+AIP(I,J)+AIM(I,J)+AJP(I,J)+AJM(I,J))& /RELAX(NF)CON(I,J)=CON(I,J)*VOL+REL*AP(I,J)*U(I,J)DU(I,J)=VOL/(XDIF(I)*SX(J))CON(I,J)=CON(I,J)+DU(I,J)*(P(I-1,J)-P(I,J))DU(I,J)=DU(I,J)/AP(I,J)103 CONTINUECALL SOLVE100 CONTINUE*---COEFFICIENTS FOR THE V EQUATION----NF=2IF(.NOT. LSOLVE(NF)) GO TO 200IST=2JST=3CALL GAMSORREL=1.-RELAX(NF)DO 202 I=2,L2AREA=R(1)*XCV(I)FLOW=AREA*V(I,2)*RHO(I,1)DIFF=AREA*GAM(I,1)/YCV(2)CALL DIFLOW202 AJM(I,3)=ACOF+AMAX1(0.,FLOW)DO 203 J=3,M2FL=ARXJ(J)*U(2,J)*RHO(1,J)FLM=ARXJP(J-1)*U(2,J-1)*RHO(1,J-1)FLOW=FL+FLMDIFF=(ARXJ(J)*GAM(1,J)+ARXJP(J-1)*GAM(1,J-1))/(XDIF(2)*SXMN(J)) CALL DIFLOWAIM(2,J)=ACOF+AMAX1(0.,FLOW)DO 203 I=2,L2IF(I .EQ. L2)GO TO 204FL=ARXJ(J)*U(I+1,J)*(FX(I+1)*RHO(I+1,J)+FXM(I+1)*RHO(I,J))FLM=ARXJP(J-1)*U(I+1,J-1)*(FX(I+1)*RHO(I+1,J-1)+FXM(I+1)*& RHO(I,J-1))GM=GAM(I,J)*GAM(I+1,J)/(XCV(I)*GAM(I+1,J)+XCV(I+1)*GAM(I,J)+ & 1.E-30)*ARXJ(J)GMM=GAM(I,J-1)*GAM(I+1,J-1)/(XCV(I)*GAM(I+1,J-1)+XCV(I+1)*& GAM(I,J-1)+1.0E-30)*ARXJP(J-1)DIFF=2.*(GM+GMM)/SXMN(J)GO TO 205204 FL=ARXJ(J)*U(L1,J)*RHO(L1,J)FLM=ARXJP(J-1)*U(L1,J-1)*RHO(L1,J-1)DIFF=(ARXJ(J)*GAM(L1,J)+ARXJP(J-1)*GAM(L1,J-1))/(XDIF(L1)*SXMN(J)) 205 FLOW=FL+FLMCALL DIFLOWAIM(I+1,J)=ACOF+AMAX1(0.,FLOW)AIP(I,J)=AIM(I+1,J)-FLOWIF(J .EQ. M2) GO TO 206AREA=R(J)*XCV(I)FL=V(I,J)*(FY(J)*RHO(I,J)+FYM(J)*RHO(I,J-1))*RMN(J)FLP=V(I,J+1)*(FY(J+1)*RHO(I,J+1)+FYM(J+1)*RHO(I,J))*RMN(J+1)FLOW=(FV(J)*FL+FVP(J)*FLP)*XCV(I)DIFF=AREA*GAM(I,J)/YCV(J)GO TO 207206 AREA=R(M1)*XCV(I)FLOW=AREA*V(I,M1)*RHO(I,M1)DIFF=AREA*GAM(I,M1)/YCV(M2)207 CALL DIFLOWAJM(I,J+1)=ACOF+AMAX1(0.,FLOW)AJP(I,J)=AJM(I,J+1)-FLOWVOL=YCVRS(J)*XCV(I)SXT=SX(J)IF(J .EQ. M2) SXT=SX(M1)SXB=SX(J-1)IF(J .EQ. 3) SXB=SX(1)APT=(ARXJ(J)*RHO(I,J)*0.5*(SXT+SXMN(J))+ARXJP(J-1)*RHO(I,J-1)*& 0.5*(SXB+SXMN(J)))/(YCVRS(J)*DT)AP(I,J)=AP(I,J)-APTCON(I,J)=CON(I,J)+APT*V(I,J)AP(I,J)=(-AP(I,J)*VOL+AIP(I,J)+AIM(I,J)+AJP(I,J)+AJM(I,J))& /RELAX(NF)CON(I,J)=CON(I,J)*VOL+REL*AP(I,J)*V(I,J)DV(I,J)=VOL/YDIF(J)CON(I,J)=CON(I,J)+DV(I,J)*(P(I,J-1)-P(I,J))DV(I,J)=DV(I,J)/AP(I,J)203 CONTINUECALL SOLVE200 CONTINUE*---COEFIICIENTS FOR THE PRESSURE CORRECTION EQUATION----NF=3IF(.NOT. LSOLVE(NF)) GO TO 500IST=2JST=2CALL GAMSORSMAX=0.SSUM=0.DO 410 J=2,M2DO 410 I=2,L2VOL=YCVR(J)*XCV(I)410 CON(I,J)=CON(I,J)*VOLDO 402 I=2,L2ARHO=R(1)*XCV(I)*RHO(I,1)CON(I,2)=CON(I,2)+ARHO*V(I,2)402 AJM(I,2)=0.DO 403 J=2,M2ARHO=ARX(J)*RHO(1,J)CON(2,J)=CON(2,J)+ARHO*U(2,J)AIM(2,J)=0.DO 403 I=2,L2IF(I .EQ. L2) GO TO 404ARHO=ARX(J)*(FX(I+1)*RHO(I+1,J)+FXM(I+1)*RHO(I,J))FLOW=ARHO*U(I+1,J)CON(I,J)=CON(I,J)-FLOWCON(I+1,J)=CON(I+1,J)+FLOWAIP(I,J)=ARHO*DU(I+1,J)AIM(I+1,J)=AIP(I,J)GO TO 405404 ARHO=ARX(J)*RHO(L1,J)CON(I,J)=CON(I,J)-ARHO*U(L1,J)AIP(I,J)=0.405 IF(J .EQ. M2) GO TO 406ARHO=RMN(J+1)*XCV(I)*(FY(J+1)*RHO(I,J+1)+FYM(J+1)*RHO(I,J)) FLOW=ARHO*V(I,J+1)CON(I,J)=CON(I,J)-FLOWCON(I,J+1)=CON(I,J+1)+FLOWAJP(I,J)=ARHO*DV(I,J+1)AJM(I,J+1)=AJP(I,J)GO TO 407406 ARHO=RMN(M1)*XCV(I)*RHO(I,M1)CON(I,J)=CON(I,J)-ARHO*V(I,M1)AJP(I,J)=0.407 AP(I,J)=AIP(I,J)+AIM(I,J)+AJP(I,J)+AJM(I,J)PC(I,J)=0.SMAX=AMAX1(SMAX,ABS(CON(I,J)))SSUM=SSUM+CON(I,J)403 CONTINUECALL SOLVE*---COMEE HERE TO CORRECT THE PRESSURE AND VELOCITIES DO 501 J=2,M2DO 501 I=2,L2P(I,J)=P(I,J)+PC(I,J)*RELAX(NP)IF(I .NE. 2) U(I,J)=U(I,J)+DU(I,J)*(PC(I-1,J)-PC(I,J))IF(J .NE. 2) V(I,J)=V(I,J)+DV(I,J)*(PC(I,J-1)-PC(I,J))501 CONTINUE500 CONTINUE*---COEFFICIENTS FOR OTHER EQUATIONS----IST=2JST=2DO 600 N=4,NFMAXNF=NIF(.NOT. LSOLVE(NF)) GO TO 600CALL GAMSORREL=1.-RELAX(NF)DO 602 I=2,L2AREA=R(1)*XCV(I)FLOW=AREA*V(I,2)*RHO(I,1)DIFF=AREA*GAM(I,1)/YDIF(2)CALL DIFLOW602 AJM(I,2)=ACOF+AMAX1(0.,FLOW)DO 603 J=2,M2FLOW=ARX(J)*U(2,J)*RHO(1,J)DIFF=ARX(J)*GAM(1,J)/(XDIF(2)*SX(J))CALL DIFLOWAIM(2,J)=ACOF+AMAX1(0.,FLOW)DO 603 I=2,L2IF(I .EQ. L2) GO TO 604FLOW=ARX(J)*U(I+1,J)*(FX(I+1)*RHO(I+1,J)+FXM(I+1)*RHO(I,J))DIFF=ARX(J)*2.*GAM(I,J)*GAM(I+1,J)/((XCV(I)*GAM(I+1,J)+& XCV(I+1)*GAM(I,J)+1.0E-30)*SX(J))GO TO 605604 FLOW=ARX(J)*U(L1,J)*RHO(L1,J)DIFF=ARX(J)*GAM(L1,J)/(XDIF(L1)*SX(J))605 CALL DIFLOWAIM(I+1,J)=ACOF+AMAX1(0.,FLOW)AIP(I,J)=AIM(I+1,J)-FLOWAREA=RMN(J+1)*XCV(I)IF(J .EQ. M2) GO TO 606FLOW=AREA*V(I,J+1)*(FY(J+1)*RHO(I,J+1)+FYM(J+1)*RHO(I,J))DIFF=AREA*2.*GAM(I,J)*GAM(I,J+1)/(YCV(J)*GAM(I,J+1)+& YCV(J+1)*GAM(I,J)+1.0E-30)GO TO 607606 FLOW=AREA*V(I,M1)*RHO(I,M1)DIFF=AREA*GAM(I,M1)/YDIF(M1)607 CALL DIFLOWAJM(I,J+1)=ACOF+AMAX1(0.,FLOW)AJP(I,J)=AJM(I,J+1)-FLOWVOL=YCVR(J)*XCV(I)APT=RHO(I,J)/DTAP(I,J)=AP(I,J)-APTCON(I,J)=CON(I,J)+APT*F(I,J,NF)AP(I,J)=(-AP(I,J)*VOL+AIP(I,J)+AIM(I,J)+AJP(I,J)+AJM(I,J))& /RELAX(NF)CON(I,J)=CON(I,J)*VOL+REL*AP(I,J)*F(I,J,NF)603 CONTINUECALL SOLVE600 CONTINUETIME=TIME+DTITER=ITER+1IF(ITER .GE. LAST) LSTOP=.TRUE.RETURNEND*-----------------------------------------------------------------------SUBROUTINE SUPPLY************************************************************************ DOUBLE PRECISION TITLELOGICAL LSOLVE,LPRINT,LBLK,LSTOPCOMMON F(22,22,10),P(22,22),RHO(22,22),GAM(22,22),CON(22,22),& AIP(22,22),AIM(22,22),AJP(22,22),AJM(22,22),AP(22,22),& X(22),XU(22),XDIF(22),XCV(22),XCVS(22),& Y(22),YV(22),YDIF(22),YCV(22),YCVS(22),&YCVR(22),YCVRS(22),ARX(22),ARXJ(22),ARXJP(22),&R(22),RMN(22),SX(22),SXMN(22),XCVI(22),XCVIP(22)COMMON DU(22,22),DV(22,22),FV(22),FVP(22),&FX(22),FXM(22),FY(22),FYM(22),PT(22),QT(22)COMMON/INDX/NF,NFMAX,NP,NRHO,NGAM,L1,L2,L3,M1,M2,M3,& IST,JST,ITER,LAST,TITLE(13),RELAX(13),TIME,DT,XL,YL,& IPREF,JPREF,LSOLVE(10),LPRINT(13),LBLK(10),MODE,NTIMES(10),RHOCONDIMENSION U(22,22),V(22,22),PC(22,22)EQUIVALENCE (F(1,1,1),U(1,1)),(F(1,1,2),V(1,1)),(F(1,1,3),PC(1,1))************************************************************************10 FORMAT(1X,26(1H*),3X,A10,3X,26(1H*))20 FORMAT(1X,4H I =,I6,6I9)30 FORMAT(1X,1HJ)40 FORMAT(1X,I2,3X,1P7E9.2)50 FORMAT(1X,1H )51 FORMAT(1X,' I =',2X,7(I4,5X))52 FORMAT(1X,' X =',1P7E9.2)53 FORMAT(1X,'TH =',1P7E9.2)54 FORMAT(1X,'J =',2X,7(I4,5X))55 FORMAT(1X,'Y =',1P7E9.2)************************************************************************ ENTRY UGRIDXU(2)=0.DX=XL/FLOAT(L1-2)DO 1 I=3,L11 XU(I)=XU(I-1)+DXYV(2)=0.DY=YL/FLOAT(M1-2)DO 2 J=3,M12 YV(J)=YV(J-1)+DYRETURN************************************************************************ ENTRY PRINTIF(.NOT. LPRINT(3)) GO TO 80*---CALCULATE THE STREAM FUNTION----------------------------------------F(2,2,3)=0.DO 82 I=2,L1IF(I .NE. 2) F(I,2,3)=F(I-1,2,3)-RHO(I-1,1)*V(I-1,2)& *R(1)*XCV(I-1)DO 82 J=3,M1RHOM=FX(I)*RHO(I,J-1)+FXM(I)*RHO(I-1,J-1)82 F(I,J,3)=F(I,J-1,3)+RHOM*U(I,J-1)*ARX(J-1)80 CONTINUE*IF( .NOT. LPRINT(NP)) GO TO 90**---CONSTRUCT BOUNDARY PRESSURES BY EXTRAPOLATIONDO 91 J=2,M2P(1,J)=(P(2,J)*XCVS(3)-P(3,J)*XDIF(2))/XDIF(3)91 P(L1,J)=(P(L2,J)*XCVS(L2)-P(L3,J)*XDIF(L1))/XDIF(L2)DO 92 I=2,L2P(I,1)=(P(I,2)*YCVS(3)-P(I,3)*YDIF(2))/YDIF(3)92 P(I,M1)=(P(I,M2)*YCVS(M2)-P(I,M3)*YDIF(M1))/YDIF(M2)P(1,1)=P(2,1)+P(1,2)-P(2,2)P(L1,1)=P(L2,1)+P(L1,2)-P(L2,2)P(1,M1)=P(2,M1)+P(1,M2)-P(2,M2)P(L1,M1)=P(L2,M1)+P(L1,M2)-P(L2,M2)PREF=P(IPREF,JPREF)DO 93 J=1,M1DO 93 I=1,L193 P(I,J)=P(I,J)-PREF90 CONTINUE*IF(TIME.GT.0.5*DT) GOTO 320WRITE (8,50)IEND=0301 IF(IEND .EQ. L1) GO TO 310IBEG=IEND+1IEND=IEND+7IEND=MIN0(IEND,L1)WRITE (8,50)WRITE(8,51) (I,I=IBEG,IEND)IF(MODE .EQ. 3) GO TO 302WRITE(8,52) (X(I),I=IBEG,IEND)GO TO 303302 WRITE (8,53) (X(I),I=IBEG,IEND)303 GO TO 301310 JEND=0WRITE(8,50)311 IF(JEND .EQ. M1) GO TO 320JBEG=JEND+1JEND=JEND+7JEND=MIN0(JEND,M1)WRITE(8,50)WRITE(8,54) (J,J=JBEG,JEND)WRITE(8,55) (Y(J),J=JBEG,JEND)GO TO 311320 CONTINUE*DO 999 N=1,NGAMNF=NIF(.NOT. LPRINT(NF)) GO TO 999WRITE(8,50)WRITE(8,10) TITLE(NF)IFST=1JFST=1IF(NF .EQ. 1 .OR. NF .EQ. 3) IFST=2IF(NF .EQ. 2 .OR. NF .EQ. 3) JFST=2IBEG=IFST-7110 CONTINUEIBEG=IBEG+7IEND=IBEG+6IEND=MIN0(IEND,L1)WRITE(8,50)WRITE(8,20) (I,I=IBEG,IEND)WRITE(8,30)JFL=JFST+M1DO 115 JJ=JFST,M1J=JFL-JJWRITE(8,40) J,(F(I,J,NF),I=IBEG,IEND) 115 CONTINUEIF(IEND .LT. L1) GO TO 110999 CONTINUERETURNEND。

相关文档
最新文档