Fortran Coder

标题: 关于文件操作的问题求教 [打印本页]

作者: 我是处手    时间: 2014-8-1 11:39
标题: 关于文件操作的问题求教
问题描述:这是关于非线性混合离散变量优化算法程序其中一段复合型重构子函数,其中想去掉open建立的文件,换做其他形式,只要不影响运算就好
[Fortran] 纯文本查看 复制代码
        subroutine comple
        integer cycle,en,p,eq,cst,fun,sch,qun
        character*1 iyn
        character*3 chr
        CHARACTER*8 NAME
        real x0(20),ix0(20),xl(20),ixl(20),xu(20),ixu(20),xb(20),
     1  ixb(20),xt(20),ixt(20),dx(20),idx(20),g(500),iv(20,41),y(41),
     2  xv(500,20)
        common /c0/i1,i2,i3,i4,i5,i6/c1/n,m,en,p,eq,nv/c2/mi,cycle,cst,
     1  fun,sch,qun/c3/g/c4/x0,ix0/c5/xb,ixb/c6/xt,ixt/c7/xl,ixl,xu,ixu            
     2  /c8/dx,idx/c9/iv,y/c11/n1/c12/f1,f2,pf0,pf1/c10/xv
            common /csub/sub/ci7/i7/cff/ff(11,2),kk,knt/c15/fo(11),df(11,2),
     1  dfdx(11,4),cf(11,4)
       
        WRITE(*,'(1x,A)')'Verticies Storage File Name=****.*** NSCH=***'                                   第二个文件处
        READ(*,'(28X,A8,6X,I3)')NAME,NSCH
919        write(*,'(1x,a,\)')'Input Verticies?(y/n)'
        READ(*,'(A)')IYN
        IF(IYN.EQ.'y'.or.IYN.EQ.'Y') then
        goto 913                                                                                 顺便问下,这里直接转到913标号处,那下面do 300 i=1,n 是不是就没有操作 ??????
        elseif(iyn.ne.'n'.and.iyn.ne.'N') then                                          
        goto 919
        endif
        do 300 i=1,n
300        iv(i,1)=ix0(i)
        y(1)=pf0
430        continue
        do 302 k=1,n
        do 304 i=1,n
        if (i.eq.k) go to 306
        ii=k+1
        iv(i,ii)=ix0(i)
        ii=ii+n
        iv(i,ii)=ix0(i)
        go to 308
306        ii=k+1
        iv(i,ii)=ixl(i)
        ii=ii+n
        iv(i,ii)=ixu(i)
308        continue
304        continue
302        continue
        goto 440
913        OPEN(2,FILE=NAME,ACCESS='DIRECT',FORM='BINARY',RECL=160)
        DO 921 I=1,NV
        READ(2,REC=I)(IV(J,I),J=1,N)
921        CONTINUE
        nv1=nv+1
        read(2,rec=nv1)sch,fun,cst,cycle
        CLOSE(2)
        DO 923 I=1,N
923        IX0(I)=IV(I,1)
        CALL ROUND(X0,IX0)
        PF0=EF(X0)
        Y(1)=PF0
        write(*,'(1x,2hx0,6f13.6)')(x0(i),i=1,n)
        write(*,'(1x,5hf(x0),3x,f13.6)')pf0
        write(*,'(1x,4hsch=,i4,3x,4hfun=,i5,3x,4hcst=,i5,3x,6hcycle=,i2)
     1  ')sch,fun,cst,cycle
440        continue
        do 310 i=2,nv
        do 312 j=1,n
312        ixt(j)=iv(j,i)
        call round(xt,ixt)
310        y(i)=ef(xt)
450        call compar
        if (i6.ne.1) go to 350
        write(*,1000) (y(i),i=1,nV)
1000        format(1x,2hf=,/,5f15.7)
        do 320 i=1,nv
        do 315 j=1,n
315        ixt(j)=iv(j,i)
        call round(xt,ixt)
        write(*,1010) i,(xt(ii),ii=1,n)
1010        format(1x,2hx=,i5,/,(5f15.7))
320        continue
350        ir=0
        do 352 i=1,n
        dl=1.e10
        du=-1.e10
        do 354 j=1,nv
        w=iv(i,j)
        if (w.ge.du) du=w
        if (w.le.dl) dl=w
354        continue
        w=du-dl
        if (w.le.idx(i)) ir=ir+1
352        continue
        if (ir.ge.en) go to 470
        if (i2.ne.1) go to 360
        w=sch/15
        iw=int(w)
        if (iw.le.qun) go to 360
        call quadr
        if (f1.ge.y(1)) go to 360
        call round(xb,ixb)
        write(*,1020) qun,f1,(xb(i),i=1,n)
1020        format(10x,7hsuccess,/,10x,4hqun=,i5,/,10x,2hf=,f15.7,/,
     1  10x,2hx=,/,(5f15.7))
        y(nv)=f1
        do 356 i=1,n
356        iv(i,nv)=ixb(i)
        go to 450
360        continue
        IF(I7.EQ.1) THEN
        isch=sch/50
        if (isch*50.ne.sch) go to 351
        ngl=0
        do 337 i=1,n
        ngt=0
        nlt=0
        do 331 j=2,nv
        if (iv(i,j).gt.iv(i,1)) ngt=ngt+1
        if (iv(i,j).lt.iv(i,1)) nlt=nlt+1
331        continue
        if (ngt.gt.1.and.nlt.gt.1) ngl=ngl+1
337        continue
        if (ngl.gt.1) go to 351
        sub=1.
        n1=nv
        call search
        if (f1.gE.y(n1)) go to 351
        do 346 i=1,n
346        iv(i,nv)=ixb(i)
        y(nv)=f1
        KT=4
        go to 450
351        continue
        ENDIF
        n1=nv
460        MSCH=SCH/NSCH
        IF(MSCH*NSCH.EQ.SCH) THEN
        OPEN(2,FILE=NAME,STATUS='NEW',ACCESS='DIRECT',FORM='BINARY',
     1  RECL=160)
        DO 927 I=1,NV
        WRITE(2,REC=I)(IV(J,I),J=1,N)
927        CONTINUE
        nv1=nv+1
        write(2,rec=nv1)sch,fun,cst,cycle
        CLOSE(2)
        ENDIF

由于,优化时,file2总是提示cannt overwrite file2,这个提示说事file2已经存在,但事实上其并没有建立过,我认为是recl=??的原因, 但又不知道怎么确定其长度.所以想在子函数功能相同的情况下,把这个文件用别的形式代替下删除掉,应该怎么改写,谢谢各位指导了

作者: fcode    时间: 2014-8-1 13:16
是的,goto 到某行以后,goto语句后的语句就不会执行。但具体如何执行,goto本身是否执行,是否会从别的地方goto到这里,需要结合你的代码,数据,及if条件等是否满足来决定。

正因为如此,goto语句不建议使用。

你的代码只是一个片段,实在没法判断其执行的流程。你想知道流程可以有几种方法:
1.代码设计前画好流程图。
2.进行debug单步调试,跟踪。

cannt overwrite file2 意思是无法覆盖已经存在的文件。说明file2一定生成了。你认为没有生成,那肯定什么地方有问题了。

我感觉你遇到问题,总是在想如何逃避,如何换一种方式,而不是想去解决,我认为,这是不可取的。

最后,你要把一段不属于你的代码,修改一种其他的方式,这本身就很冒险,这必须建立在你对这段代码很熟悉的前提之上。你让其他网友帮你修改,这风险更大。
作者: 我是处手    时间: 2014-8-2 20:12
fcode哥,这个问题不能纠结了,毕业答辩我已经推迟半年了,这毕业题目老师给弄的,要改也来不及了,老师也不允许,现在只想把程序调通出结果,后面还有有限元分析,如果可能,帮我看看全部代码可好?给我个邮箱或者能传给你的途径.
确实挺悲催的,一个学位答辩,因为一个论文题目,我三年就完了,你博士毕业应该理解的
作者: fcode    时间: 2014-8-2 21:48
你不要在这里一直发帖啊,私信啊。

如果你想解决问题,一定要冷静。一定要明白,这里没有神仙,你想让别人帮助你,那么你必须冷静的提供应该提供的信息。而不是一直抱怨自己毕不了业,抱怨你的导师,抱怨这代码。

抱怨是没有作用的!

需要的信息有:

1.代码的使用方法,含所有输入参数。给一组正常的合理输入。例如
   N=**  M=***  EQ=**  P=**  EN=**  NN=***  MI=*******
这里应该输入什么?

2.你现在的代码出现的问题,现象,错误提示。

作者: 我是处手    时间: 2014-8-2 21:52
N=7 M=13 EQ=0 P=7 En=7 NN=0 MI=100000
作者: fcode    时间: 2014-8-2 21:53
你真是,属青蛙的啊,问一句答一句。后面还有很多输入你不知道吗?唉,跟你沟通太难了

好吧,这程序你自己跑一遍,然后把整个 console 窗口的内容复制粘贴下来,这样你明白了吗?

作者: 我是处手    时间: 2014-8-2 21:56

          ***MDCP***



   Options:
   Checkout Adjacent Points?(Y/N)y
   Quadratic accelerating?(Y/N)y
   Change Search Direction?(Y/N)y
   Reconstruct Complex?(Y/N)y
   Search Along Bounds?(Y/N)y
   Show Computational Details?(Y/N)n
        I1        I2        I3        I4        I5        I6
         1         1         1         1         1         0
   data file name=****.***
                  bbbb.dat
   a new file or an old one?(new/old)new
   New Problem Parameters?(Y/N)y
   N=**  M=***  EQ=**  P=**  EN=**  NN=***  MI=*******
     7     14      0     7      7      0       1000000
   N= 7  M= 14  EQ= 0  P= 7  EN= 7  NN=  0  MI= 100000  NV=15
   New Initial Point?(Y/N)y
   X0( 1)=*****.*****
            1.6
             1.60000
   X0( 2)=*****.*****
            0.33
             0.33000
   X0( 3)=*****.*****
           0.26
             0.26000
   X0( 4)=*****.*****
          10.
            10.00000
   X0( 5)=*****.*****
           5.
             5.00000
   X0( 6)=*****.*****
             10.
            10.00000
   X0( 7)=*****.*****
            0.014
             0.01400
   all right?(y/n)y
   New Upper Bounds?(Y/N)y
   XU( 1)=*****.*****
             1.6
             1.60000
   XU( 2)=*****.*****
            0.36
             0.36000
   XU( 3)=*****.*****
             0.28
             0.28000
   XU( 4)=*****.*****
             18.0
            18.00000
   XU( 5)=*****.*****
             6.
             6.00000
   XU( 6)=*****.*****
           45.
            45.00000
   XU( 7)=*****.*****
             0.02
             0.02000
   all right?(y/n)y
   New Lower Bounds?(Y/N)y
   XL( 1)=*****.*****
             1.2
             1.20000
   XL( 2)=*****.*****
            0.28
             0.28000
   XL( 3)=*****.*****
          0.24
             0.24000
   XL( 4)=*****.*****
           5.
             5.00000
   XL( 5)=*****.*****
             2.
             2.00000
   XL( 6)=*****.*****
              0.0
             0.00000
   XL( 7)=*****.*****
            0.01
             0.01000
   all right?(y/n)y
   New Variable Increaments?(Y/N)y
   DX( 1)=*****.*****
           0.04
             0.04000
   DX( 2)=*****.*****
              0.01
             0.01000
   DX( 3)=*****.*****
            0.01
             0.01000
   DX( 4)=*****.*****
            1.0
             1.00000
   DX( 5)=*****.*****
             1.0
             1.00000
   DX( 6)=*****.*****
             5.0
             5.00000
   DX( 7)=*****.*****
             0.0005
             0.00050
   all right?(y/n)y
     X0(I)=   1.600   0.330   0.260  10.000   5.000  10.000   0.014
     G=
    -57.7818222     -0.0012803  -2129.2568359      1.7387390    -10.7781057
     G=
    -34.2218933     -0.0938359     -1.3461046     -3.6538954     -1.0582243
     G=
  -3448.5156250 -57390.9375000      3.3648872     28.1651459
     PF0= 100033.2656250
Vertices Storage File Name=****.*** NSCH=***

作者: fcode    时间: 2014-8-2 22:34
青蛙先生,请问此时的 Vertices Storage File Name=****.*** NSCH=*** 应该输入什么?
作者: 我是处手    时间: 2014-8-3 11:33
Ep=   0.9390775
T_tssj =    5.011206
T_tssj =    5.011206
M_zhuanju=    10248.44
F_zhou=    89452.49
M_zhuanju*delt_w/1000.=    26.85092
N_yunzhuan=    99.91586
G=
    -32.3871765      0.0012197  -3197.2973633     -1.6417618     -2.1462691
G=
    -42.8537292     -0.0890775     -0.0112062     -4.9887938     -0.5462485
G=
  -9751.5566406-110547.5078125    -13.1490793     -0.0841370
     XV= 3
X=
      1.5999999      0.3000000      0.2400000     15.0000000      4.0000000
30.0000000      0.0115000
stress=    122.6128
0.04 / (2.72**(1.95+1.36*0.4 /X(1)))**0.5=   1.2719749E-02
N_lin=    6929.730
Qh=    101.6418
delt1*180/PI  =    47.14627
Ep=   0.9390775
T_tssj =    5.011206
T_tssj =    5.011206
M_zhuanju=    10248.44
F_zhou=    89452.49
M_zhuanju*delt_w/1000.=    26.85092
N_yunzhuan=    99.91586
G=
    -32.3871765      0.0012197  -3197.2973633     -1.6417618     -2.1462691
G=
    -42.8537292     -0.0890775     -0.0112062     -4.9887938     -0.5462485
G=
  -9751.5566406-110547.5078125    -13.1490793     -0.0841370
     XV= 4
X=
      1.5999999      0.3000000      0.2400000     15.0000000      4.0000000
30.0000000      0.0115000
stress=    122.6128
0.04 / (2.72**(1.95+1.36*0.4 /X(1)))**0.5=   1.2719749E-02
N_lin=    6929.730
Qh=    101.6418
delt1*180/PI  =    47.14627
Ep=   0.9390775
T_tssj =    5.011206
T_tssj =    5.011206
M_zhuanju=    10248.44
F_zhou=    89452.49
M_zhuanju*delt_w/1000.=    26.85092
N_yunzhuan=    99.91586
G=
    -32.3871765      0.0012197  -3197.2973633     -1.6417618     -2.1462691
G=
    -42.8537292     -0.0890775     -0.0112062     -4.9887938     -0.5462485
G=
  -9751.5566406-110547.5078125    -13.1490793     -0.0841370
     XV= 5
X=
      1.5999999      0.3000000      0.2400000     15.0000000      4.0000000
30.0000000      0.0115000
stress=    122.6128
0.04 / (2.72**(1.95+1.36*0.4 /X(1)))**0.5=   1.2719749E-02
N_lin=    6929.730
Qh=    101.6418
delt1*180/PI  =    47.14627
Ep=   0.9390775
T_tssj =    5.011206
T_tssj =    5.011206
M_zhuanju=    10248.44
F_zhou=    89452.49
M_zhuanju*delt_w/1000.=    26.85092
N_yunzhuan=    99.91586
G=
    -32.3871765      0.0012197  -3197.2973633     -1.6417618     -2.1462691
G=
    -42.8537292     -0.0890775     -0.0112062     -4.9887938     -0.5462485
G=
  -9751.5566406-110547.5078125    -13.1490793     -0.0841370
     XV= 6
X=
      1.5999999      0.3000000      0.2400000     15.0000000      4.0000000
30.0000000      0.0115000
stress=    122.6128
0.04 / (2.72**(1.95+1.36*0.4 /X(1)))**0.5=   1.2719749E-02
N_lin=    6929.730
Qh=    101.6418
delt1*180/PI  =    47.14627
Ep=   0.9390775
T_tssj =    5.011206
T_tssj =    5.011206
M_zhuanju=    10248.44
F_zhou=    89452.49
M_zhuanju*delt_w/1000.=    26.85092
N_yunzhuan=    99.91586
G=
    -32.3871765      0.0012197  -3197.2973633     -1.6417618     -2.1462691
G=
    -42.8537292     -0.0890775     -0.0112062     -4.9887938     -0.5462485
G=
  -9751.5566406-110547.5078125    -13.1490793     -0.0841370
     XV= 7
X=
      1.5999999      0.3000000      0.2400000     15.0000000      4.0000000
30.0000000      0.0115000
stress=    122.6128
0.04 / (2.72**(1.95+1.36*0.4 /X(1)))**0.5=   1.2719749E-02
N_lin=    6929.730
Qh=    101.6418
delt1*180/PI  =    47.14627
Ep=   0.9390775
T_tssj =    5.011206
T_tssj =    5.011206
M_zhuanju=    10248.44
F_zhou=    89452.49
M_zhuanju*delt_w/1000.=    26.85092
N_yunzhuan=    99.91586
G=
    -32.3871765      0.0012197  -3197.2973633     -1.6417618     -2.1462691
G=
    -42.8537292     -0.0890775     -0.0112062     -4.9887938     -0.5462485
G=
  -9751.5566406-110547.5078125    -13.1490793     -0.0841370
     XV= 8
X=
      1.5999999      0.3000000      0.2400000     15.0000000      4.0000000
30.0000000      0.0115000
stress=    122.6128
0.04 / (2.72**(1.95+1.36*0.4 /X(1)))**0.5=   1.2719749E-02
N_lin=    6929.730
Qh=    101.6418
delt1*180/PI  =    47.14627
Ep=   0.9390775
T_tssj =    5.011206
T_tssj =    5.011206
M_zhuanju=    10248.44
F_zhou=    89452.49
M_zhuanju*delt_w/1000.=    26.85092
N_yunzhuan=    99.91586
G=
    -32.3871765      0.0012197  -3197.2973633     -1.6417618     -2.1462691
G=
    -42.8537292     -0.0890775     -0.0112062     -4.9887938     -0.5462485
G=
  -9751.5566406-110547.5078125    -13.1490793     -0.0841370
     XV= 9
X=
      1.5999999      0.3000000      0.2400000     15.0000000      4.0000000
30.0000000      0.0115000
stress=    122.6128
0.04 / (2.72**(1.95+1.36*0.4 /X(1)))**0.5=   1.2719749E-02
N_lin=    6929.730
Qh=    101.6418
delt1*180/PI  =    47.14627
Ep=   0.9390775
T_tssj =    5.011206
T_tssj =    5.011206
M_zhuanju=    10248.44
F_zhou=    89452.49
M_zhuanju*delt_w/1000.=    26.85092
N_yunzhuan=    99.91586
G=
    -32.3871765      0.0012197  -3197.2973633     -1.6417618     -2.1462691
G=
    -42.8537292     -0.0890775     -0.0112062     -4.9887938     -0.5462485
G=
  -9751.5566406-110547.5078125    -13.1490793     -0.0841370
     XV=10
X=
      1.5999999      0.3000000      0.2400000     15.0000000      4.0000000
30.0000000      0.0115000
stress=    122.6128
0.04 / (2.72**(1.95+1.36*0.4 /X(1)))**0.5=   1.2719749E-02
N_lin=    6929.730
Qh=    101.6418
delt1*180/PI  =    47.14627
Ep=   0.9390775
T_tssj =    5.011206
T_tssj =    5.011206
M_zhuanju=    10248.44
F_zhou=    89452.49
M_zhuanju*delt_w/1000.=    26.85092
N_yunzhuan=    99.91586
G=
    -32.3871765      0.0012197  -3197.2973633     -1.6417618     -2.1462691
G=
    -42.8537292     -0.0890775     -0.0112062     -4.9887938     -0.5462485
G=
  -9751.5566406-110547.5078125    -13.1490793     -0.0841370
     XV=11
X=
      1.5999999      0.3000000      0.2400000     15.0000000      4.0000000
30.0000000      0.0115000
stress=    122.6128
0.04 / (2.72**(1.95+1.36*0.4 /X(1)))**0.5=   1.2719749E-02
N_lin=    6929.730
Qh=    101.6418
delt1*180/PI  =    47.14627
Ep=   0.9390775
T_tssj =    5.011206
T_tssj =    5.011206
M_zhuanju=    10248.44
F_zhou=    89452.49
M_zhuanju*delt_w/1000.=    26.85092
N_yunzhuan=    99.91586
G=
    -32.3871765      0.0012197  -3197.2973633     -1.6417618     -2.1462691
G=
    -42.8537292     -0.0890775     -0.0112062     -4.9887938     -0.5462485
G=
  -9751.5566406-110547.5078125    -13.1490793     -0.0841370
     XV=12
X=
      1.5999999      0.3000000      0.2400000     15.0000000      4.0000000
30.0000000      0.0110000
stress=    125.3824
0.04 / (2.72**(1.95+1.36*0.4 /X(1)))**0.5=   1.2719749E-02
N_lin=    6998.018
Qh=    101.6418
delt1*180/PI  =    47.14627
Ep=   0.9390775
T_tssj =    5.011206
T_tssj =    5.011206
M_zhuanju=    10248.44
F_zhou=    89452.49
M_zhuanju*delt_w/1000.=    26.85092
N_yunzhuan=    99.78317
G=
    -29.6175613      0.0017197  -3248.5131836     -1.6417618     -2.1462691
G=
    -42.8537292     -0.0890775     -0.0112062     -4.9887938     -0.5462485
G=
  -9751.5566406-110547.5078125    -13.1490793     -0.2168274
     XV=13
X=
      1.5999999      0.3000000      0.2400000     15.0000000      4.0000000
30.0000000      0.0110000
stress=    125.3824
0.04 / (2.72**(1.95+1.36*0.4 /X(1)))**0.5=   1.2719749E-02
N_lin=    6996.936
Qh=    101.6418
delt1*180/PI  =    47.14627
Ep=   0.9390775
T_tssj =    5.011206
T_tssj =    5.011206
M_zhuanju=    10248.44
F_zhou=    89452.49
M_zhuanju*delt_w/1000.=    26.85092
N_yunzhuan=    99.78317
G=
    -29.6175613      0.0017197  -3247.7021484     -1.6417618     -2.1462691
G=
    -42.8537292     -0.0890775     -0.0112062     -4.9887938     -0.5462485
G=
  -9751.5566406-110547.5078125    -13.1490793     -0.2168274
     XV=14
X=
      1.5999999      0.3000000      0.2400000     15.0000000      4.0000000
30.0000000      0.0110000
stress=    125.3824
0.04 / (2.72**(1.95+1.36*0.4 /X(1)))**0.5=   1.2719749E-02
N_lin=    6996.936
Qh=    101.6418
delt1*180/PI  =    47.14627
Ep=   0.9390775
T_tssj =    5.011206
T_tssj =    5.011206
M_zhuanju=    10248.44
F_zhou=    89452.49
M_zhuanju*delt_w/1000.=    26.85092
N_yunzhuan=    99.78317
G=
    -29.6175613      0.0017197  -3247.7021484     -1.6417618     -2.1462691
G=
    -42.8537292     -0.0890775     -0.0112062     -4.9887938     -0.5462485
G=
  -9751.5566406-110547.5078125    -13.1490793     -0.2168274
     XV=15
X=
      1.5999999      0.3000000      0.2400000     15.0000000      4.0000000
30.0000000      0.0110000
stress=    125.3824
0.04 / (2.72**(1.95+1.36*0.4 /X(1)))**0.5=   1.2719749E-02
N_lin=    6996.936
Qh=    101.6418
delt1*180/PI  =    47.14627
Ep=   0.9390775
T_tssj =    5.011206
T_tssj =    5.011206
M_zhuanju=    10248.44
F_zhou=    89452.49
M_zhuanju*delt_w/1000.=    26.85092
N_yunzhuan=    99.78317
G=
    -29.6175613      0.0017197  -3247.7021484     -1.6417618     -2.1462691
G=
    -42.8537292     -0.0890775     -0.0112062     -4.9887938     -0.5462485
G=
  -9751.5566406-110547.5078125    -13.1490793     -0.2168274
Press any key to continue结束了,结果不对
作者: pasuka    时间: 2014-8-5 13:27
我是处手 发表于 2014-8-2 20:12
fcode哥,这个问题不能纠结了,毕业答辩我已经推迟半年了,这毕业题目老师给弄的,要改也来不及了,老师也不允许 ...

不要再抱怨了,掏钱找人搞定,找对人的话几千块钱一个月时间就够了




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2