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