24小时热门版块排行榜    

查看: 3048  |  回复: 7

hanye0517

木虫 (小有名气)

[求助] fortran module 中如何进行赋值计算 已有1人参与

我想实现这样一个功能,就是有一些变量,比如 A,B,C,用module声明之后在其他子程序中调用
其中,C=A*B-2  ,用namelist 对A,B 赋初值。然后由前式计算C
在子程序中,USE module_name ,ONLY  :A,B,C
但是实际上在module中赋值时,module中不允许进行计算声明,同时,用contains
包含子程序也需要调用才能执行。

如何在module中,读入A ,B 两个值后,自动计算C 的值,并使之可以在 subroutine中被调用?
或者有没有其他的实现方法?
Plus , 虽然可以在子程序中进行计算C,但是我C其实也算是一个初始变量,只不过需要一个简单的计算,多个子程序都要用到C的值,所以
希望它能像A B 一样可以被调用,求帮助!
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

道之所在,虽千万人吾往矣。
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

fish.yfyh

铜虫 (小有名气)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
感谢参与,应助指数 +1
hanye0517: 金币+25, ★★★很有帮助, 虽然不是我想要的,但提供以一种解决问题的方法,谢谢,能不能有更方便的方法?》 2014-06-28 17:05:31
Fortran代码如下:
<pre>
      module module_name
      real(8) :: a,b,c
      
      contains
          subroutine initial_ab
          namelist /ab/ a,b
          open(10,file='test.inp',action='read')
          read(10,nml=ab)
          close(10)
          end subroutine
         
          subroutine initial_c
          c = a*b - 2.0
          end subroutine
      end module
      
      ! main program
      program main
      use module_name
      implicit none
      
      call initial_ab
      call initial_c
      
      print*, 'a = ',a
      print*, 'b = ',b
      print*, 'c = ',c
      
      stop
      end program
</pre>
输入文件test.inp如下
<pre>
&ab
    a = 1.5
    b = 2.5
/
</pre>
结果
<pre>
a =    1.50000000000000     
b =    2.50000000000000     
c =    1.75000000000000
</pre>
2楼2014-06-28 03:34:52
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

hanye0517

木虫 (小有名气)

引用回帖:
2楼: Originally posted by fish.yfyh at 2014-06-28 03:34:52
Fortran代码如下:
<pre>
      module module_name
      real(8) :: a,b,c
      
      contains
          subroutine initial_ab
          namelist /ab/ a,b
          open(10,file='test.in ...

谢谢你的回复,你的方法当然可行,在主程序中先把C 值调用计算后存入内存。可以把其放在主程序中进行初始赋值。
相当于编了一个计算C 的程序,然后在主程序里边调用(call),对C进行赋值,我的问题是,我要在多个子程序里边调用A,B,C 的值,在多个子程序中。能不能在module中就进行计算,直接出C的值?不需要在主程序中调用?
这样显得会方便些,同时也省得记住要计算C的值。
道之所在,虽千万人吾往矣。
3楼2014-06-28 17:04:30
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

绿遍山原

铜虫 (小有名气)

引用回帖:
3楼: Originally posted by hanye0517 at 2014-06-28 17:04:30
谢谢你的回复,你的方法当然可行,在主程序中先把C 值调用计算后存入内存。可以把其放在主程序中进行初始赋值。
相当于编了一个计算C 的程序,然后在主程序里边调用(call),对C进行赋值,我的问题是,我要在多个 ...

最开头调用一次不就行了。
要夢遊,不要催眠。
4楼2014-06-28 17:48:57
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

fish.yfyh

铜虫 (小有名气)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★
hanye0517: 金币+10, 有帮助, 与楼上方法相同,谢谢回复 2014-06-29 20:10:43
引用回帖:
3楼: Originally posted by hanye0517 at 2014-06-28 17:04:30
谢谢你的回复,你的方法当然可行,在主程序中先把C 值调用计算后存入内存。可以把其放在主程序中进行初始赋值。
相当于编了一个计算C 的程序,然后在主程序里边调用(call),对C进行赋值,我的问题是,我要在多个 ...

至少需要调用一次,不然c的值怎么得到?
解决办法就是在主程序开始,调用一次初始化,把c的值放入内存,后面的每一个subroutine都可以用了。
5楼2014-06-28 19:21:57
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

hanye0517

木虫 (小有名气)

引用回帖:
5楼: Originally posted by fish.yfyh at 2014-06-28 19:21:57
至少需要调用一次,不然c的值怎么得到?
解决办法就是在主程序开始,调用一次初始化,把c的值放入内存,后面的每一个subroutine都可以用了。...

这么说没办法在module中直接计算么,我是觉得a,b的值计算C 这调用一次比较麻烦,如果值能这样的话,只好做一个初始化的计算子历程,把所有的需要初步计算的值都统一调用计算一遍了
道之所在,虽千万人吾往矣。
6楼2014-06-29 20:10:16
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

fish.yfyh

铜虫 (小有名气)

引用回帖:
6楼: Originally posted by hanye0517 at 2014-06-29 20:10:16
这么说没办法在module中直接计算么,我是觉得a,b的值计算C 这调用一次比较麻烦,如果值能这样的话,只好做一个初始化的计算子历程,把所有的需要初步计算的值都统一调用计算一遍了...

use只是在调用module中的变量。
里面的值要么是parameter,已经定义好了的。
要么就你这样,未定的,一定要计算一次才有值的,那么就必须显式call一次。

调用一次,有“那么麻烦吗”??
7楼2014-06-30 10:58:15
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

hanye0517

木虫 (小有名气)

引用回帖:
7楼: Originally posted by fish.yfyh at 2014-06-30 10:58:15
use只是在调用module中的变量。
里面的值要么是parameter,已经定义好了的。
要么就你这样,未定的,一定要计算一次才有值的,那么就必须显式call一次。

调用一次,有“那么麻烦吗”??...

一个其实不麻烦,很多个就比较烦躁,只能集合在一起了
道之所在,虽千万人吾往矣。
8楼2014-06-30 14:51:28
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 hanye0517 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[硕博家园] 售SCI文章,我:8O.5.5.1O.54,科目全,可十急 +3 vZfe6xYu34yj 2026-09-14 3/150 2026-09-17 05:16 by k06BKNblrGRH
[公派出国] 售SCI一区文章,我:8.O.551.O.5.4,科目全,可伽急 +4 40ms4Wlo4umh 2026-09-14 4/200 2026-09-17 04:26 by k06BKNblrGRH
[硕博家园] 售SCI一区T0P文章,我:8.O.55.1.O54,科目全,可伽急 +4 23jxep3nCNZb 2026-09-14 4/200 2026-09-17 04:14 by k06BKNblrGRH
[硕博家园] 售SCI一区文章,我:8.O.55.1.O.54,科目齐全,可伽急 +5 40ms4Wlo4umh 2026-09-14 5/250 2026-09-17 04:14 by k06BKNblrGRH
[硕博家园] 售SCI一区T0P文章,我:8.O.55.1.O.54,科目齐全,可+急 +3 6F5UbRU2I5hL 2026-09-14 3/150 2026-09-17 03:16 by Tql5LQhh5rLK
[考研] 售SCI-T0P文章,我:8O.5.5.1.O.54,科目齐全,可+急 +5 6F5UbRU2I5hL 2026-09-14 5/250 2026-09-17 03:14 by Tql5LQhh5rLK
[博后之家] 售SCI文章,我:8O5.5.1.O.54,科目齐全,可+急 +3 s3fFTmArrBt6 2026-09-13 6/300 2026-09-17 02:26 by Tql5LQhh5rLK
[找工作] 售SCI一区T0P文章,我:8.O.55.1.O.54,科目齐全,可+急 +5 LwdutQ8HoqWP 2026-09-13 5/250 2026-09-17 02:02 by Tql5LQhh5rLK
[硕博家园] 售一区SCI文章T0P,我:8O.551.O54,科目全,可十急 +6 LwdutQ8HoqWP 2026-09-13 6/300 2026-09-17 01:50 by Tql5LQhh5rLK
[硕博家园] 售SCI-T0P文章,我:8O.5.5.1.O.54,科目齐全,可+急 +5 3n8v2C8RimXI 2026-09-13 5/250 2026-09-17 01:26 by Tql5LQhh5rLK
[考研] 售SCI一区文章,我:8.O.551.O.5.4,科目全,可伽急 +7 QUjhNVAcOSff 2026-09-13 8/400 2026-09-17 01:16 by Tql5LQhh5rLK
[博后之家] 售SCI一区文章,我:8O5.5.1.O5.4,科目全,可伽急 +4 s3fFTmArrBt6 2026-09-13 5/250 2026-09-16 16:12 by i3KBRD19ERkG
[考研] 售SCI一区T0P文章,我:8.O.55.1.O.5.4,科目全,可+急 +4 s3fFTmArrBt6 2026-09-13 6/300 2026-09-16 16:00 by i3KBRD19ERkG
[找工作] 售SCI一区T0P文章,我:8.O.55.1.O.5.4,科目全,可+急 +7 QUjhNVAcOSff 2026-09-13 8/400 2026-09-16 02:23 by DgNGHc3h5tPl
[找工作] 售SCI一区T0P文章,我:8.O.55.1.O54,科目全,可伽急 +4 s3fFTmArrBt6 2026-09-14 5/250 2026-09-15 16:39 by CgyNCDVNhGVg
[硕博家园] 售SCI一区T0P文章,我:8.O55.1.O.54,科目全,可十急 +5 s3fFTmArrBt6 2026-09-14 5/250 2026-09-15 16:35 by CgyNCDVNhGVg
[公派出国] 售SCI一区T0P文章,我:8O.55.1.O.5.4,科目齐全,可+急 +4 3n8v2C8RimXI 2026-09-13 5/250 2026-09-15 14:58 by CgyNCDVNhGVg
[教师之家] 售SCI一区文章,我:8.O.55.1.O.54,科目齐全,可伽急 +4 s3fFTmArrBt6 2026-09-13 4/200 2026-09-15 06:50 by 5BDX0d0WFp7t
[博后之家] 售SCI一区T0P文章,我:8.O55.1.O.54,科目全,可十急 +6 3n8v2C8RimXI 2026-09-13 6/300 2026-09-15 05:50 by 5BDX0d0WFp7t
[教师之家] 售SCI一区文章,我:8.O.55.1.O.54,科目齐全,可伽急 +3 LwdutQ8HoqWP 2026-09-13 4/200 2026-09-14 16:13 by Aj1rhIDL5ixY
信息提示
请填处理意见