|
计算要求是这样的:
有两种文件:
第一种文件数据为 a1,a2,a3....a100
第二种文件数据为 b1,b2,b3...b100
; 其中每种文件各有1000个,文件名分别是x1,x2,....x100(x对应第一种文件)和y1,y2,...y100(y对应第二种文件),分别放入名为x和y的两个文件夹内。
计算过程是:
以各自文件夹的第一个文件为例子,对应文件x1和y1,
b1-a(1,100)
b2-a(1,100)
...
b100-a(1,100)
分别用b1减去全部数据a, b2减去全部数据a,.....直到第a100; 这样得到共10000数据个差。
对它进行运算,对最后的运算结果求和,为输出的第一个数......循环操作全部1000个文件,最后得到共1000个输出结果。
这是经过帮助优化后的计算程序:
[Fortran] 纯文本查看 复制代码 03 | REAL , ALLOCATABLE :: a ( : ) , b ( : ) , hhs ( : ) |
04 | INTEGER :: i , z , j , k , tn , num , numm |
05 | REAL :: summ , cos 2 , r 1 , q 1 , w 1 |
06 | character ( 160 ) :: filename |
08 | Integer ( 4 ) time 0 , time 1 , dtime |
13 | ALLOCATE ( a ( num ) , b ( num ) , hhs ( numm ) ) |
15 | Call system_clock ( time 0 ) |
16 | OPEN ( 10 , FILE = 'output.dat' , status = 'unknown' ) |
19 | write ( filename , '(i6)' ) i |
20 | Open ( 200 , File = "D : \x\" / / trim ( adjustl ( filename ) ) / / '.dat' , status = 'old' ) |
23 | Open ( 300 , File = "D : \y\" / / trim ( adjustl ( filename ) ) / / '.dat' , status = 'old' ) |
33 | cos 2 = ( r 1 * q 1 + r 1 * r 1 + q 1 * q 1 ) * * 2 / 3 |
35 | if ( w 1 .GT. 0 .and. w 1 .LE. 20 ) then |
36 | hhs ( z ) = cos 2 / ( w 1 * w 1 * w 1 ) |
41 | WRITE ( 10 , '(1X,F12.6)' ) summ |
45 | Call system_clock ( time 1 , dtime ) |
46 | time = 1 D 0 * ( time 1 - time 0 ) / dtime |
47 | Write ( * , '(a7,f16.7)' ) 'Time = ' , time |
现在我想改变一下运算,就是将其中的 r1 = 20由定量换成变量,让它等于以各自文件夹的第一个文件操作所得到的数据差,
对应文件x1和y1,
b1-a(1,100)
b2-a(1,100)
...
b100-a(1,100)
分别用b1减去全部数据a, b2减去全部数据a,.....直到第a100; 这样得到共10000数据。以最初的10000个数据作为r1,然后循环其他文件和它进行计算。
我想问能不能不再另外写循环实现这个目的? 我现在的写法是另外独立写一个循环读取,这样又降低了计算速度。
感谢指导!
|
|