编程技术、软件应用与系统模拟

(Programming, Applicaiton and Simulation)



本站目录

 

首页
ASP/Access/IIS
DELPHI/PASCAL
PASCAL高级编程
C语言编程实例
WORD
Excel
MATLAB
MINITAB讲座
Windows
DOS
SAS
生物系统模拟
土壤水分剖析器
其他



镜像站点

 

主站
北美镜象站
欧洲镜象站(1)
欧洲镜象站(2)

本站 Google

[搜索]  [站内导航]
座右铭:
只做有益人类的事
不做有害人类的事


PCSMP简介及其在农业上的应用


CSMP(Continuous System Modeling Program)是一种便于在大型数字计算机上对各种连续过程进行数字模拟的语言,而PCSMP(Personal computer Continuous System Modeling Program)则是在微机上运行的CSMP模拟语言的简化版本。其优点是:简化了程序的编制工作,可以方便地使用系统提供的积分函数和插值函数;提供了分类整理程序,程序编制人无须考虑语句的先后顺序;提供了方便的输入输出形式,简化了编程;可以使用FORTRAN语句。PCSMP与CSMP相似,大部分命令也相似或相同,但也有自己的特点,现在我简单介绍一下PCSMP 4.0(1987年版本)的特点、使用方法和在农业上的应用概况。

一、PCSMP简介

(一)PCSMP的语句及语法规则

为了编写PCSMP程序,必需了解PCSMP的语句。PCSMP的语句可以分为以下几种:

1.数据语句

数据语句的作用是把数据赋予参量、常量和初始条件,如:

PARAM CVF=0.05,CRF=0.0009 说明参量

CONST PI=3.1415926 说明常量

INCON X1=0.4,X2=4.55 初始化变量

2.结构语句

结构语句是描述变量之间的关系的语句。PCSMP程序可以使用FORTRAN语句,且所有的FORTRAN函数均有效。另外PCSMP还有一些独有的函数。结构语句例:

WSH = INTGRL(WSHI,GSH)

WRT = INTGRL(WRTI,GRT)

3.输出控制语句

这类语句是用来控制程序的输入与输出的,有TITLE、PRINT、OUTPUT等。TITLE语句有用户指定,它出现在输出表格的开头和页的开头,如:

TITLE THIS IS A BASIC SIMULATOR OF CROP GROWTH

PRINT语句用来指定要输出计算结果的变量,如:

PRINT WLF,WRT,WST,WTL

OUTPUT语句可为要输出图形的变量准备数据。

4.执行控制语句

这类语句是用来控制程序运行的时间、输出的步长、终止程序执行的条件、指定积分的方法、终止作业等,有TIMER、FINISH、METHOD等。

(1) TIMER语句可以指定某些系统变量的值。如:

FINTIM --- 终止模拟的时间

OUTDEL --- 输出图形数据的间隔步长,与OUTPUT配合使用

PRDEL --- 输出变量的时间间隔,与PRINT配合使用

DELT --- 积分的时间间隔

TIME --- 指定时间的初始值,系统缺省值为0

(2) FINISH语句指定程序终止运行的条件,如:

FINISH LAI=2.0

当变量LAI为2.0时程序终止。

(3) METHOD语句指定积分方法,如:

METHOD RECT 指定积分方法为矩形法

METHOD RKS 指定积分方法为具有自适应间隔的Runge-Kutta法

METHOD TRAPZ 指定积分方法为梯形法

METHOD RKSFX 指定积分方法为有固定间隔的Runge-Kutta法

(4) 终止作业语句

END 完成模式说明

STOP 停止模拟

ENDJOB 停止作业*

5.翻译控制语句

这类语句可以控制翻译程序中的分类整理程序的工作,通知分类整理程序源程序中那些是需要进行分类整理的那些是不需要分类整理的,这类语句有SORT,NOSORT,PROCEDURE,ENDPRO,分类整理程序对NOSORT...SORT之间的程序段将不进行分类。

6.语法规则

o 变量名最多为6个字符

o 一行一个语句

o 句尾的"..."为续行符,表示下一行为续行

o 变量名和运算符之间允许有空格

o 第1-72列为程序,73-80列为说明

o 语句可以从任一列开始,但ENDJOB必须从第一列开始

o 第一列为"*",此行为注释行

o 实数必须有小数点

(二)PCSMP常用的函数

下面介绍几个最常用的PCSMP函数:

1.积分函数

Y=INTGRL(IC,X), 其中IC为时间为零时的Y值, 例如:

WRT = INTGRL(WRTI,GRT)

GRT = (GPHOT-MAINT) * CVF

2.任意函数生成元(线性关系)

Y=AFGEN(FUNCT,X), 其中FUNCT为成对数据名,X为自变量名,如:

Y=AFGEN(DF,X)

FUNCTION DF=1.0,0.05, 2.0,0.3, 5.0,1.2, 10.0,20.0

3.任意函数生成元(二次函数关系)

Y=NLFGEN(FUNCT,X), 其中FUNCT为成对数据名,X为自变量名,如:

Y=NLFGEN(DF,X)

FUNCTION DF=1.0,0.05, 2.0,0.3, 5.0,1.2, 10.0,20.0

4.限定函数

Y=LIMIT(p1,p2,X)

当X<p1时,Y=p1

当X>p2时,Y=p2

当p1<=X<=p2时,Y=x

5.开关函数

Y=INSW(X1,X2,X3)

当X1<0时,Y=X2;当X1>=0时,Y=X3。

(三)数据的输入

1.成对数据的输入

格式: FUNCTION 数据名=X1,Y1,X2,Y2,X3,Y3,...

在程序中使用成对数据时要用AFGEN或NLFGEN函数把数据拟合成直线或曲线,然后进行插值运算。

2.大量数据的输入

格式: STORAGE 数组名(整数)

TABLE 数组名(整数)=X1,X2,X3,...

例如:

STORAGE WS(365)

TABLE WS(365)=2.1,0.3,3.1,0.0,1.0,4.0,...

3.2,4.3,5.6,7.6,2.1,5.3,...

......

(四)程序结构

TITLE 标题* FIXED 宣布整型变量

STORAGE 宣布数组变量

INITIAL

初始化部分

DYNAMIC

程序体部分

TERMINAL 指示DYNAMIC部分结束

END

STOP 程序结束

ENDJOB

其中,程序体部分还可细分为以下三部分:

(1)描述变量之间的关系部分

(2)程序运行控制和输出控制部分

(3)参数和数组赋值部分

一个完整的程序例子:

TITLE DRY MATTER PRODUCTION

TWT = WSH + WRT

WSH = INTGRL(WSHI,GSH)

WRT = INTGRL(WRTI,GRT)

INCON WSHI = 50.,WRTI=50.

GSH = 0.7 * GTW

GRT = 0.3 * GTW

GTW = (GRHOT - MAINT) * CVF

MAINT = (WSH + WRT) * 0.015

GRHOT = GPHST * (1 - EXP( - 0.7 * LAT))

LAI = AMIN1(WSH / 500., 5.)

PARAM CVF = 0.7, GPHST = 400.

TIMER FINTIM = 100.0 DELT = 1.0, PRDELT = 15.0

METHOD RECT

PRINT TWT,WSH,WRT,GTW

END

PARAM CVF = 2.7

END

STOP

ENDJOB

二、PCSMP的使用方法

(一)编写程序

首先对问题进行全面的分析,写出程序,然后用文本编辑器进行编辑。编辑器可以使用WS等,使用WS要用其N功能进行编辑。

(二)执行程序的过程

1.翻译过程(Translation)

有PCSMP系统首先把PCSMP的源程序翻译成FORTRAN源程序,在翻译过程中会产生以下几个文件:

FOR03.DAT 内容同源程序,其中注释出翻译过程中的错误

UPDATE.FOR 以子程序形式存在的FORTRAN源程序

DATA.FOR 包含变量名和公共变量表

CONTRO.SYS 控制变量、参数和数据表

TABLE.TMP 变量维数表

2.编译过程(Compiling)

完成翻译过程,而且没有发生错误,则调用FORTRAN编译器把生成的源程序编译为目标文件(.OBJ),生成DATA.OBJ,UPDATE.OBJ,UPDATE.LST。

3.连接过程(Linkage)

调用连接器(LINK.EXE),把目标文件连接为可执行文件UPDATE.EXE。

4.执行过程(Execution)

可执行文件生成后,就自动执行,进行模拟计算。运行完毕,产生如下文件:

FOR06.DAT 包含要求输出的结果

PREP1.DAT 包含绘图所需的X,Y的最大值、最小值

PREP2.DAT 含有绘图所需变量的计算值

PCSMP运行一个完整的程序的整个过程如下:

翻译 编译 连接 执行

使用的文件 RICE.CSM DATA.FOR UPDATE.OBJ UPDATE.EXE

UPDATE.FOR DATA.OBJ

MAIN2.OBJ

SUBR.LIB

FORTRAN.LIB

EXECUT.LIB

生成的文件 UPDATE.FOR UPDATE.OBJ UPDATE.EXE FOR06.DAT

DATA.FOR DATA.OBJ PREP1.DAT

FOR03.DAT UPDATE.LST PREP2.DAT

TABLE.TMP

三、运行和调试程序

(一)运行程序

在系统的提示符下,执行:

PCSMP 文件名 [开关]

可选择的开关有:

D(ebug) 运行过程中把执行文件存到磁盘上

E(xecute) 执行,为缺省开关

S(ave) 把编译过程中的所有中间文件存盘

C(ompile) 编译程序

L(ink) 连接程序

(二)调试技巧

o 在翻译过程中出错时,用编辑器打开FOR03.DAT文件,查看哪些语句出错,然后在打开源程序,进行修改。

o 在编译过程中出错时,可以首先查看UPDATE.FOR。

o 在执行过程中出现问题时,查看CONTRO.SYS文件,检查数据是否有误。

o 要更改数据或参数,重新运行程序时,可以直接修改CONTRO.SYS文件种的有关数据,然后在DOS下直接执行UPDATE.EXE文件。

o 程序的运行结果存贮在FOR06.DAT中,可以对其进行编辑打印。

四、PCSMP在农业上的应用

PCSMP可以用于任何连续变量的模拟过程,如模拟作物的生长发育、动物的生长发育、天气状况的更替等。下面简单介绍PCSMP在作物模拟中的应用。

荷兰,从60年代开始,以de Wit为首的一批科学家就模拟了作物的光合作用、呼吸作用、作物的水分蒸腾作用。几十年来,他们取得了令世人瞩目的成就,先后完成了多个作物生长发育模拟器。

ELCROS 初级作物生长模拟器(ELementary CROp growth Simulator, de Wit, 1970)

BACROS 基本作物生长模拟器(BAsic CROp growth Simulator, de Wit, 1978)

SUCROS 通用作物生长模拟器(A Simple and Universal CROp growth Simulator, van Keulen, 1982)

MACROS 一年生作物生长模拟器(Module of an Annual CROp Simulator, Penning de Vries, 1989)

MIDAS 旱地耕作制度生态经济模型(A bioeconomic model of a dryland farm system, Kingwell, 1987)

TAMW 小麦生长发育模拟模型(A whaet growth and development simulation model, van Keulen, 1987)

这些模拟器均是用PCSMP编写的,具有结构简明,易于修改和扩充的特点。Penning de Vries在国际水稻研究所工作期间与他人合作,完成一个适合于一年生作物使用的作物生长发育的概要模型MACROS,其中包含了一系列子模型,如L1D,LIQ,SAWAH,SAHEL等,具有较高的理论和实际应用价值。




© 1998-, 董占山, 版权所有。
转载文章请注明出处(www.sunfinedata.com/articles)。