地下水污染现状评价的计算程序

如题所述

c fuhezhishu.for,根据水样分析报告数据计算“复合污染指数PI(i)”,

c 本底值用中华人民共和国国家标准《地下水质量标准》(GBT14848-93)中的二级水标准

c 程序中有m个水样,每个水样最多可含n=39项(综合污染指数所要求的)污染组分

c 当某水样实测项目个数nt小于39项时,其所有单项污染指数的算术平均值SI用分母nt计算

c 某水样实测项目nt通过计数器把非-1项类加求得,其间剔除了-1项即未测项;

c 某水样实测项目所有单项污染指数的最大值zmax通过循环比较获得。

c x(m),y(m)-水样点坐标,id(m)-水样点统一编号,c(n,m)-m个水样点n项污染组分的测试值mg/L,缺测项赋-1占位,c0(n)-n项污染组分的(GBT14848-93)二级水标准值mg/L,pi(m)-每个水样的复合污染指数,si(m)-每个水样所有单项污染指数的算术平均值,zmax(m)-每个水样所有单项污染指数中挑出的最大值,nt(m)-每个水样所有实测项目的个数,

c jmax(m)-每个水样挑出的单项污染指数最大值是哪一项

parameter(m=9,n=39)

dimension x(m),y(m),id(m),c(n,m),c0(n),pi(m),si(m)

dimension zmax(m),nt(m),jmax(m),sij(n,m)

c 先读进m个水样的编号、坐标、“色(度)、嗅和味、浑浊度(度)、肉眼可见物、pH值”

c 共5个单项污染指数sij(n,m),缺测项-1占位

open(1,file=’c1-5.dat’)

read(1,*)(id(j),j=1,m)

read(1,*)(x(j),j=1,m)

read(1,*)(y(j),j=1,m)

do 10 i=1,5

10 read(1,*)(sij(i,j),j=1,m)

close(1)

c 再读进6~39项污染组分的序号、(GBT14848-93)二级水标准值mg/L

c 及m个水样第6~39项组分的测试值mg/L,缺测项-1占位

open(1,file=’c0-6-39.dat’)

do 20 i=6,n

20 read(1,*)ia,c0(i),(c(i,j),j=1,m)

close(1)

c 第100句循环体对第j个水样点第i(i=1~5)项组分的单项污染指数sij(1~5,m)统计有值项个数nt(j)

c 找最大项zmax(j)及其项目序号jmax(j)、累加有值项分值之和si(j)

do 100 j=1,m

nt(j)=0

zmax(j)=0

pi(j)=0

si(j)=0

do 90 i=1,5

c 如果第i项组分是缺测项,则跳出i循环计算下一项组分

if(sij(i,j).eq.-1)goto 90

nt(j)=nt(j)+1

si(j)=si(j)+sij(i,j)

if(sij(i,j).le.zmax(j))goto 90

zmax(j)=sij(i,j)

jmax(j)=i

90 continue

100 continue

do 140 j=1,m

do 130 i=6,n

sij(i,j)=-1

c 130循环体计算第j个水样点第i项污染组分的单项污染指数

c 如果第i项污染组分是缺测项,则跳出i循环计算下一项污染组分

if(c(i,j).eq.-1)goto 130

c 当第i项不是缺测项时计算其单项污染指数sij(i,j),计数器加1

c 且污染指数和累加之,参与单项污染指数最大值的比较挑选:

sij(i,j)=c(i,j)/c0(i)

nt(j)=nt(j)+1

si(j)=si(j)+sij(i,j)

if(sij(i,j)-zmax(j))130,130,120

120 zmax(j)=sij(i,j)

jmax(j)=i

130 continue

c 计算第j个水样所有实测项目单项污染指数的算术平均值

si(j)=si(j)/nt(j)

c 计算第j个水样的复合污染指数Pi(j)

pi(j)=sqrt(si(j)*si(j)/2+zmax(j)*zmax(j)/2)

140 continue

open(1,file=’pi-qian.dat’)

c 输出各项:x(j),y(j)-水样点坐标,复合污染指数Pi(j),id(j)-水样点编号

c nt(j)-每个水样实测项目的个数

c zmax(j)-每个水样单项污染指数中的最大值,jmax(j)-每个水样的单项污染指数最大值是哪一项

do 150 j=1,m

150 write(1,160)x(j),y(j),pi(j),id(j),nt(j),zmax(j),jmax(j)

close(1)

160 format(2f8.2,1x,f8.2,1x,i4,1x,i2,1x,f8.2,1x,i2)

c 输出:水样点各单项污染指数sij(j),水样编号id(j),每个水样实测项目个数nt(j)

c 每个水样单项污染指数中最大值zmax(j),每个水样的单项分值最大值是哪一项jmax(j)

open(1,file=’sij.dat’)

write(1,240)(id(j),j=1,m)

do 230 i=1,n

230 write(1,250)i,(sij(i,j),j=1,m)

write(1,260)(nt(j),j=1,m)

write(1,270)(zmax(j),j=1,m)

write(1,280)(jmax(j),j=1,m)

close(1)

240 format(’水样编号’,9i6)

250 format(i8,9f6.2)

260 format(’测试项数’,9i6)

270 format(’最大分值’,9f6.2)

280 format(’最大项号’,9i6)

stop

end

温馨提示:答案为网友推荐,仅供参考
相似回答