盛世青衫 发表于 2024-1-3 15:27:19

请问为什么这个模块无法被调用,另外还有一些关于模块.....

本帖最后由 盛世青衫 于 2024-1-3 16:02 编辑

各位大神好,请教个问题,我的本意是通过76/114这两个子程序计算几个数值,让这几个数值返回主程序在主程序中继续进行计算。经过大神指导,我放弃了common,我书写了 一个模块,我也学习了雪球大神的教程,但是还是有几个问题不明白
(1)对于模块声明public变量的这几个位置,就是我的代码74行这个位置,这几个变量是下面两个子程序输出的我需要的数值,需要他们回到主程序进行计算,请问我这样书写是否能让这两个变量回到主程序中进行计算。如果书写有误,请不吝赐教。感谢
(2)对于use这个模块,第二行这个报错位置,他提示我如下报错形式(我使用的是Gfortran(simply fortran))
Cannot open module file 'module1.mod' for reading at (1): No such file or directory
compilation terminated.
Error: Last command making (build\6_5ifexit.o) returned a bad status
Error: Make execution terminated
请问如何解决,感激不尽。
(3)第三个问题,想请问一下,我记得雪球大神说module不能用在77语言中,请问我这个形式如果在77中如何处理能让这两个变量传回主程序中,是否只能用common,或者更改代码结构了
感激不尽,感激不尽{:5_121:}


Transpose 发表于 2024-1-3 17:38:47

放在main的前面

fcode 发表于 2024-1-3 21:20:34

1. 你给的代码不全,截图只是一部分,所以没法判断你书写是否正确合理。
2. module代码放在前面,或者另外存一个 *.f90 源代码文件,然后包含在项目中。
3. 是的。module 是 F90 新增的语法,F77不能使用。只要你的编译器支持F90,没有任何理由把自己限定在77语法里。
(请注意,固定格式和自由格式,并不是77和90的区别。90是支持固定格式和自由格式的)

盛世青衫 发表于 2024-1-4 09:42:08

本帖最后由 盛世青衫 于 2024-1-4 09:56 编辑

fcode 发表于 2024-1-3 21:20
1. 你给的代码不全,截图只是一部分,所以没法判断你书写是否正确合理。
2. module代码放在前面,或者另外 ...
您好,雪球大神,我将模块提前了,但是因为两个名称一样它提示我
85 |   use module1
      |      2                                             
......
101 |   real(kind=8) qulv_x_i,qulv_x_j,mid,qulv_x,qulv_i_j,wucha_m_mid
      |                                                      1
Error: Symbol 'qulv_i_j' at (1) conflicts with symbol from module 'module1', use-associated at (2)
我没有找到相关的解决办法,我将主程序内(第101行处)的定义删掉了,请问有没有别的更好的处理方法,我看如果我在一开始module里写上SAVE,他是不是说明可以相当于全局变量,是不是因为这样导致的这个报错出现。
同时我还有一个问题,今天早上我突然对子程序的虚参和实参有一点新的认识,比如我在主程序中call(a,b,c),其实如果我在主程序中调用这个abc他其实是可以传回来的,那我应该可以其实假设一个参数D,
写成call(a,b,c,d)让他在子程序的最后等于我要传回主程序的值,这样是不是也不用大改子程序也可以传回我想要的参数。但是这样我发现好像只能回传到上一级。可能比模块还是有很大的缺陷。
同时我上传了我的程序,希望您能帮我看看如果我一开始在module里面一开始声明几个变量,他是否能回传到主程序中。
刚刚接触,可能词不达意,多有叨扰,还望见谅
感激不尽:-lol


necrohan 发表于 2024-1-5 08:28:22

module 里声明的变量,就是全局变量,在模块内部contains后面的子程序和主程序里都不必声明直接使用,可以当公共变量用。
主程序里 use module1 语句后不要再声明和模块同名的变量,去掉主程序中 qulv_i_j 的定义就没有你说的错误了。
如果要保留子程序的计算结果,变量和数组都可以直接放模块中,任何地方的修改都会保存,不用考虑能不能传回来。
save不是你想的那么用的,是用在子程序里保存局部变量的。

盛世青衫 发表于 2024-1-5 10:26:20

necrohan 发表于 2024-1-5 08:28
module 里声明的变量,就是全局变量,在模块内部contains后面的子程序和主程序里都不必声明直接使用,可以 ...

感谢感谢:-victory:

盛世青衫 发表于 2024-1-5 10:45:27

Transpose 发表于 2024-1-3 17:38
放在main的前面

感谢:-lol
页: [1]
查看完整版本: 请问为什么这个模块无法被调用,另外还有一些关于模块.....