24小时热门版块排行榜    

查看: 2944  |  回复: 21

wuluo1213

木虫 (小有名气)


jjdg(金币+1): 感谢参与 2011-11-03 01:29:46
这个不懂,呵呵,也在期待高手的讲解啊、
没什么好与不好。
11楼2011-11-02 20:29:53
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

贺仪

铁杆木虫 (著名写手)

引用回帖:
3楼: Originally posted by snoopyzhao at 2011-10-29 12:16:13:
隐式声明是 fortran 的特色,默认情况下,所有以 I、J、K、L、M、N 开头的变量都是整型,所有以这些字母以外字母开头的变量都是实型。如果你希望以 A 开头的也是实型,你可以用 implicit integer (A) 来声明所 ...

请问:  
       OPEN(UNIT=12,FILE=WAVECAR,ACCESS='DIRECT', &
              FORM='UNFORMATTED',STATUS='UNKNOWN',RECL=IO%ICMPLX)
这里面最后一个参量RECL是干什么的?去掉影不影响?
谢谢!
嘟啦啦嘟啦啦嘟
12楼2011-11-05 10:48:59
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)

【答案】应助回帖


jjdg(金币+1): 感谢参与 2011-11-05 15:41:19
ben_ladeng: 专家考核存档 2011-11-09 00:18:32
引用回帖:
12楼: Originally posted by 贺仪 at 2011-11-05 10:48:59:
请问:  
       OPEN(UNIT=12,FILE=WAVECAR,ACCESS='DIRECT', &
              FORM='UNFORMATTED',STATUS='UNKNOWN',RECL=IO%ICMPLX)
这里面最后一个参量RECL是干什么的?去掉影不影响?
谢谢!

自己看吧:


The recl specifier has a positive value that specifies the length of each
record if the access method is direct or the maximum length of a
record if the access method is sequential. If the file is connected for
formatted input/output, the length is the number of characters. If the
file is connected for unformatted input/output, the length is measured
in processor-dependent units. The length may, for example, be the
number of computer words. If the file exists, the length of the record
specified must be an allowed record length. If the file does not exist,
the file is created with the specified length as an allowed length.
13楼2011-11-05 14:28:37
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

贺仪

铁杆木虫 (著名写手)

引用回帖:
13楼: Originally posted by snoopyzhao at 2011-11-05 14:28:37:
自己看吧:


The recl specifier has a positive value that specifies the length of each
record if the access method is direct or the maximum length of a
record if the access method is sequenti ...

再问一下:写入文件是这样打开的
OPEN(UNIT=12,FILE=WAVECAR,ACCESS='DIRECT', &
              FORM='UNFORMATTED',STATUS='UNKNOWN',RECL=IO%ICMPLX)
我在程序中加入
write(*,*) IO%ICMPLX
得到这个参量的数值为17632,但是我在打开的时候用
OPEN(UNIT=12,FILE=WAVECAR,ACCESS='DIRECT', &
              FORM='UNFORMATTED',STATUS='UNKNOWN',RECL=17632)
可以吗?
我现在这么做的,但是取出来的和写入的数值不一样,这是怎么回事呢?
嘟啦啦嘟啦啦嘟
14楼2011-11-08 16:23:30
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)

【答案】应助回帖


余泽成(金币+1): 谢谢参与应助! 2011-11-08 18:11:44
ben_ladeng: 专家考核存档 2011-11-09 00:18:45
引用回帖:
14楼: Originally posted by 贺仪 at 2011-11-08 16:23:30:
再问一下:写入文件是这样打开的
OPEN(UNIT=12,FILE=WAVECAR,ACCESS='DIRECT', &
              FORM='UNFORMATTED',STATUS='UNKNOWN',RECL=IO%ICMPLX)
我在程序中加入
write(*,*) IO%ICMPLX
得到这 ...

这个你最好给一个可以重现你问题的例子,否则真不好说,呵呵……

另外,你的 RECL 有那么长吗?
15楼2011-11-08 16:28:30
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

贺仪

铁杆木虫 (著名写手)

引用回帖:
15楼: Originally posted by snoopyzhao at 2011-11-08 16:28:30:
这个你最好给一个可以重现你问题的例子,否则真不好说,呵呵……

另外,你的 RECL 有那么长吗?

IF (PRESENT(EXT)) THEN
         OPEN(UNIT=12,FILE=DIR_APP(1IR_LEN)//'WAVECAR.'//EXT,ACCESS='DIRECT', &
              FORM='UNFORMATTED',STATUS='UNKNOWN',RECL=IO%IRECLW)
      ELSE
         OPEN(UNIT=12,FILE=DIR_APP(1IR_LEN)//'WAVECAR',ACCESS='DIRECT', &
              FORM='UNFORMATTED',STATUS='UNKNOWN',RECL=IO%IRECLW)
      ENDIF

      ALLOCATE(CW(NPL_TOT),CRD(NPL_TOT),EIG(WDES%NB_TOT))
我在着后面加上了
      junk=.TRUE.
       DO I=1,9
         write(FL,'(a,i0)') 'WI', I
         INQUIRE(FILE=FL,EXIST=junk)
         IF (.NOT.junk) THEN
            OPEN(991, FILE=FL,STATUS = 'NEW')
            EXIT   
         ENDIF
       ENDDO
      WRITE(991,*)  'RECL :',IO%IRECLW
输出的,没有错吧?
嘟啦啦嘟啦啦嘟
16楼2011-11-08 16:35:49
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)

【答案】应助回帖

贺仪(金币+5): 多谢指教! 2011-11-08 22:04:02
ben_ladeng: 专家考核存档 2011-11-09 00:19:00
引用回帖:
16楼: Originally posted by 贺仪 at 2011-11-08 16:35:49:
IF (PRESENT(EXT)) THEN
         OPEN(UNIT=12,FILE=DIR_APP(1IR_LEN)//'WAVECAR.'//EXT,ACCESS='DIRECT', &
              FORM='UNFORMATTED',STATUS='UNKNOWN',RECL=IO%IRECLW)
      ELSE
       ...

这不是一个可以重现的例子,也就是说,不是一个完整的程序……

你的 IO%IRECLW 到底是个啥?它的值是如何得到的?
17楼2011-11-08 16:55:26
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

贺仪

铁杆木虫 (著名写手)

引用回帖:
17楼: Originally posted by snoopyzhao at 2011-11-08 16:55:26:
这不是一个可以重现的例子,也就是说,不是一个完整的程序……

你的 IO%IRECLW 到底是个啥?它的值是如何得到的?

大哥 这个是vasp的WAVECAR输出的子程序,里面有很多调用的其他子程序,不可能全部看完的,只是感觉上面我加的部分没错的话就应该可以吧
嘟啦啦嘟啦啦嘟
18楼2011-11-08 17:02:55
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)

【答案】应助回帖

★ ★
余泽成(金币+2): 谢谢参与应助! 2011-11-08 18:11:57
ben_ladeng: 专家考核存档 2011-11-09 00:19:08
引用回帖:
18楼: Originally posted by 贺仪 at 2011-11-08 17:02:55:
大哥 这个是vasp的WAVECAR输出的子程序,里面有很多调用的其他子程序,不可能全部看完的,只是感觉上面我加的部分没错的话就应该可以吧

好吧,你直接用就好了,呵呵……
至于错还是没有错,你只能自己测试了,在 Fortran 中读写文件是一件很麻烦的事情,尤其是在文件还是 unformatted 的情况下……
19楼2011-11-08 17:19:02
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

贺仪

铁杆木虫 (著名写手)

引用回帖:
19楼: Originally posted by snoopyzhao at 2011-11-08 17:19:02:
好吧,你直接用就好了,呵呵……
至于错还是没有错,你只能自己测试了,在 Fortran 中读写文件是一件很麻烦的事情,尤其是在文件还是 unformatted 的情况下……

对于这种不知道输出长度的输出,如果要格式化输出怎么写个格式呀?    如   
  WRITE(991,*) RNPL,WDES%VKPT(1,K),WDES%VKPT(2,K), &
                       WDES%VKPT(3,K),(EIG(J),W%FERTOT(J,K,ISP),J=1,WDES%NB_TOT)
嘟啦啦嘟啦啦嘟
20楼2011-11-08 22:03:45
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 贺仪 的主题更新
信息提示
请填处理意见