24小时热门版块排行榜    

Znn3bq.jpeg
查看: 3228  |  回复: 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的回帖

贺仪

铁杆木虫 (著名写手)

引用回帖:
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的回帖
查看全部 22 个回答

snoopyzhao

至尊木虫 (职业作家)

【答案】应助回帖


jjdg(金币+1): 感谢参与 2011-10-29 23:02:17
ben_ladeng: 专家考核存档 2011-10-30 07:11:16
贺仪(金币+30): 多谢你的热心帮助! 2011-10-30 09:48:21
引用回帖:
1. EXTERNAL 声明外部函数的名称  
是不是在整个程序当中都能用?怎么用?在其他子程序中可以直接call吗?

这个不清楚你想表达什么意思?比如我自己写了一个外部函数,叫 sqrt,因为 Fortran 内置了 sqrt,但我希望我的程序用我自己写的这个,这个时候就需要用 external sqrt 来声明。在每个调用该函数的程序/子程序中都应该这样声明。
引用回帖:
2. INTENT 说明过程哑元的用意 过程哑元
什么是过程哑元?

INTENT 主要是说明函数或者子程度的变量(哑元)是输入变量(in),还是输出变量(out),还是既有输入也有输出(inout)的。所谓的哑元,就是程序后面的那些个变量,比如 subroutine sub (a,b,c) 中的 a, b, c,呵呵……如果是属性是 in,那么表示这个哑元的值不能被改变。如果是 out,表示该程序会输出这个变量,如果是 inout,表明它的值在调用前后会发生变化。
引用回帖:
3. INTRINSIC   声明一个内部函数  
只能在这个子程序里面运行?

只是表明这个程序是内置的函数,与 external 是对应的……
引用回帖:
4. OPTIONAL  允许过程被调用时哑元    过程哑元     
什么意思?

如果函数 subroutine sub(a,b,c) 中的 c 是一个 optional 哑元,那么调用这个函数是可以用 call sub(a, b)……
2楼2011-10-29 11:59:43
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

snoopyzhao

至尊木虫 (职业作家)

【答案】应助回帖


jjdg(金币+1): 感谢参与 2011-10-29 23:02:26
ben_ladeng: 专家考核存档 2011-10-30 07:11:22
贺仪(金币+30): 多谢你的热心帮助 2011-10-30 09:48:56
引用回帖:
5. 在F90中,每个变量名都应该在说明部分中说明其类型,不应该使用隐式说明、为了抑制隐式说明发生作用,应该在程序说明部分开始就写出语句:
IMIPLlCIT NONE
既声明不使用隐式说明
什么是隐式说明?

隐式声明是 fortran 的特色,默认情况下,所有以 I、J、K、L、M、N 开头的变量都是整型,所有以这些字母以外字母开头的变量都是实型。如果你希望以 A 开头的也是实型,你可以用 implicit integer (A) 来声明所有以 A 开头的也是整型。除非你显示地声明了变量的类型。

如果使用 implicit none, 那么以上的规则就不再算数了,所有的变量都必须声明。
引用回帖:
6.程序变量定义的时候这两句话什么意思?   
TYPE (wavedes)  WDES
TYPE (latt)     LATT_CUR,LATT_INI

这应该是较新的 Fortran 才引入的特性,允许自定义数据的类型,因此,上面的两句话声明 WDES 是 wavedes 一类的变量,而 LATT_CUR, LATT_INI 是 latt 一类的变量。
引用回帖:
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
  这个%是什么运算?还是只是当做变量名中和字母作用一个字符?

这里的 LATT_INI 应该是一组变量的一个综合体,如:
CODE:
TYPE Date
   INTEGER :: Day=1
   INTEGER :: Month=1
   INTEGER :: Year=2000
END TYPE Date
TYPE (Date) :: D

这里的 D 就相当于你的 LATT_INI,它应该包括了三个变量,即 Day, Month, Year,如果你想对 D 中的 Day 赋值,那就要用 D%Day = 25...
引用回帖:
9. 程序里面有很多退出的关键字
exit 是退出当前的循环或者判断语句种吗?
stop 退出主程序?
break 呢?

exit 表示退出循环
stop 表示停止整个程序的运行,不管是不是在主程序中……
break 不是 Fortran 中的,至少我没有看到过用 break 的……
3楼2011-10-29 12:16:13
已阅   回复此楼   关注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的回帖
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 300求调剂 +10 橙a777 2026-04-15 10/500 2026-04-16 12:50 by maoqinghuijz
[考研] 322求调剂 +8 123安康 2026-04-12 15/750 2026-04-16 11:07 by Espannnnnol
[考研] 327求调剂 +26 Xxjc1107. 2026-04-13 29/1450 2026-04-16 10:52 by Espannnnnol
[考研] 294求调剂 +11 淡然654321 2026-04-15 11/550 2026-04-16 10:23 by beilsong20
[考研] 药学求调剂 +14 喽哈加油 2026-04-14 16/800 2026-04-16 10:15 by beilsong20
[考研] 恳请有学校收留 +6 柯淮然 2026-04-12 6/300 2026-04-16 07:23 by 学员JpLReM
[考研] 求调剂学校 +14 不会吃肉 2026-04-13 16/800 2026-04-15 21:59 by noqvsozv
[考研] 22专硕求调剂 +9 haoyun上岸 2026-04-11 11/550 2026-04-15 14:47 by elainzaizai
[考研] 272分材料子求调剂 +41 Loy0361 2026-04-10 54/2700 2026-04-14 18:00 by lhj2009
[考研] 一志愿西交机械专硕求调剂 +9 求上岸的小王 2026-04-10 9/450 2026-04-13 16:08 by jiangguiquan11
[考研] 0831一轮调剂失败求助 +10 小熊睿睿_s 2026-04-11 10/500 2026-04-12 22:43 by 长弓傲
[考研] 求调剂,一志愿材料科学与工程985,365分, +8 材化李可 2026-04-11 10/500 2026-04-12 08:42 by 852137818
[考研] 085600材料与化工329分求调剂 +16 叶zilin 2026-04-10 16/800 2026-04-11 11:04 by may_新宇
[考研] 085402通信工程调剂,有4项学科竞赛国奖(电赛国二),硕士研究生调剂自荐信。 +5 m永o不v言o弃m 2026-04-09 5/250 2026-04-11 09:33 by zhq0425
[考研] 083200 305分 求二轮调剂 不接受跨专业 +9 Claireyyyy 2026-04-09 10/500 2026-04-10 21:21 by Claireyyyy
[考研] 计算机类求调剂,22408-274分 +7 上岸de小虫 2026-04-09 8/400 2026-04-10 19:56 by fxue1114
[考研] 265求调剂 +12 风说她早忘了 2026-04-10 13/650 2026-04-10 18:56 by chemisry
[考研] 初试261 +3 Asht少 2026-04-10 6/300 2026-04-10 16:38 by Asht少
[考研] 青岛科技大学材料学院,环境学院调剂补录4月10日以前都可以 +3 1青科大。 2026-04-09 5/250 2026-04-10 09:58 by 翩翩一书生
[考研] 337求调剂 +4 Gky09300550, 2026-04-09 4/200 2026-04-09 17:18 by 帕尔马拉特
信息提示
请填处理意见