24小时热门版块排行榜    

查看: 2979  |  回复: 21
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

贺仪

铁杆木虫 (著名写手)

[求助] FORTRAN 基础知识讲解

1. EXTERNAL 声明外部函数的名称  
是不是在整个程序当中都能用?怎么用?在其他子程序中可以直接call吗?

2. INTENT 说明过程哑元的用意 过程哑元
什么是过程哑元?

3. INTRINSIC   声明一个内部函数  
只能在这个子程序里面运行?

4. OPTIONAL  允许过程被调用时哑元    过程哑元     
什么意思?

5. 在F90中,每个变量名都应该在说明部分中说明其类型,不应该使用隐式说明、为了抑制隐式说明发生作用,应该在程序说明部分开始就写出语句:
IMIPLlCIT NONE
既声明不使用隐式说明
什么是隐式说明?

6.程序变量定义的时候这两句话什么意思?   
TYPE (wavedes)  WDES
TYPE (latt)     LATT_CUR,LATT_INI


7. 另外
         INQUIRE(FILE=DIR_APP(1IR_LEN)//'WAVECAR.'//EXT,EXIST=junk)
这个DIR_APP(1IR_LEN)//'WAVECAR.'//EXT中,'WAVECAR.'两端的东东什么意思?,知道这是个函数,不能明确什么意思。那么在一般情况下,文件名前后加上一些东西是为了什么?

8. 程序中常看到。
LATT_INI%A=LATT_CUR%A
  这个%是什么运算?还是只是当做变量名中和字母作用一个字符?

9. 程序里面有很多退出的关键字
exit 是退出当前的循环或者判断语句种吗?
stop 退出主程序?
break 呢?

根据具体情况给分!多答多得!
回复此楼
嘟啦啦嘟啦啦嘟
已阅   回复此楼   关注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) 来声明所 ...

再问一个问题:
NSCALE=NITEMS(INPLIN,INPWRK,.TRUE.,'F') 这个NITEMS() 函数是什么意思?
其中INPLIN是从文件中读取的一行,定义如下
      CHARACTER (255)  INPLIN,INPWRK
      READ(15,'(A)',ERR=147,END=147) INPLIN
麻烦了!
嘟啦啦嘟啦啦嘟
5楼2011-10-30 16:19:23
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

贺仪

铁杆木虫 (著名写手)

引用回帖:
6楼: Originally posted by snoopyzhao at 2011-10-30 17:39:17:
NITEMS 不是标准的内置函数,至于它是什么意思,你得看这个函数是怎么写的了,呵呵……

再问一个:
在开头有
#include "symbol.inc"
#define usgrid
这个#是什么意思?

而在symbol.inc有这些:
#define ZGEMM  CGEMM
#define ZGEMV  CGEMV
#define ZDSCAL CSSCAL
#define ZDOTC  CDOTC
#define ZAXPY  CAXPY
#define ZHEEV  CHEEV
……
这些是什么意思呢?
嘟啦啦嘟啦啦嘟
8楼2011-10-30 18:19:03
已阅   回复此楼   关注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的回帖

贺仪

铁杆木虫 (著名写手)

引用回帖:
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的回帖

贺仪

铁杆木虫 (著名写手)

引用回帖:
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的回帖

贺仪

铁杆木虫 (著名写手)

引用回帖:
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的回帖

贺仪

铁杆木虫 (著名写手)

引用回帖:
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的回帖

贺仪

铁杆木虫 (著名写手)

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

再问一个简单的问题哈 麻烦咯!
deallocate(array)  这个数组里面的值就全部被清空了是吧?
嘟啦啦嘟啦啦嘟
21楼2011-11-11 09:34:18
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 贺仪 的主题更新
信息提示
请填处理意见