如何指示子例程,可分配数组使用哪个模块

雨果·亨索德(Hugo_Hensoldt)

我正在从事的项目要求大量的数组应该通过一堆子例程和函数传递,因此我选择了一个模块。

这些数组都是可分配的,它们不会造成太大的麻烦,除非我必须明确说明子例程应该使用这些数组中的哪个。我管理代码运行的方式实在是太过分了。

工作方式:

Program Principal
 Use Info
 open(unit=1,file="dadose6h.dat")
 call get_data
 call sortsupply
 call sortcost
 call ratecapacity
end Program

Module Info
 integer i,j
 integer, dimension (:), allocatable :: supply
 integer, dimension (:), allocatable :: cost
 integer, dimension (:,:), allocatable :: capacity
 integer, dimension (:,:), allocatable :: demand
End module info


subroutine get_data
 use info
 read(1,*) j,i
 allocate (supply (j))
 allocate (cost (j))
 allocate (capacity (j,i))
 allocate (demand (j,i))
 read(1,*) supply
 read(1,*) cost
 read(1,*) capacity
 read(1,*) demand
end subroutine

Subroutine SortCost
 use info
 integer u
 !u=cost(1)
 !...
 print*, cost
End subroutine

Subroutine Sortsupply
 use info
 integer u
 !u=supply(1)
 !...
 print*, supply
End subroutine

Subroutine ratecapacity
 use info
 integer u
 !u=capacity(1,1)     
 !...
 print *, j,i
 print*, capacity
End subroutine

上面的示例除了要排序的数组之外,还有两个子例程sortcost和sortsupply相等。我确实想要一个独特的子程序来完成这两项任务。我只是不能声明正确的方法。

方式应该是:

Program Principal
 Use Info
 open(unit=1,file="dadose6h.dat")
 call get_data
 call sort(supply)
 call sort(cost)
 call rate(capacity)
end Program

Module Info
 integer i,j
 integer, dimension (:), allocatable :: supply
 integer, dimension (:), allocatable :: cost
 integer, dimension (:,:), allocatable :: capacity
 integer, dimension (:,:), allocatable :: demand
End module info


subroutine get_data
 use info
 read(1,*) j,i
 allocate (supply (j))
 allocate (cost (j))
 allocate (capacity (j,i))
 allocate (demand (j,i))
 read(1,*) supply
 read(1,*) cost
 read(1,*) capacity
 read(1,*) demand
end subroutine

Subroutine Sort(X)
 !use info
 !i dunno how the declaration should be
 integer u
 !u=X(1)
 !...
 print*, "Sort:",X
End subroutine

Subroutine rate(X)
 !use info
 !i dunno how the declaration should be neither
 integer u
 !u=X(1,1)
 !...
 print*, "rate:", X
End subroutine

我确实尝试了一些声明但是没有用,这些家伙有一个类似的问题FORTRAN-子例程中的可分配数组如何将可分配数组传递给Fortran中的子例程,首先答案是故意的,但我已经尝试了(inout ,out,in)仍然不起作用。第二个有一个关于显式接口的答案,但是我不会对分配状态做任何事情。

注意:我问这个问题的老师经常会漏掉这一点,问题不是关于将可分配数组传递给例程,我已经可以使用Info模块来做到这一点,但是我需要显示子例程。

我真的很感激谁能写这两个子程序声明。排序(一维数组)和Rate(二维)。或者至少教我。

dadose.dat文件的内容:

4 
7
1000 2000 2000 2000
100 100 100 100 
10 10 74 19
60 1 25 20
90 50 7 2
11 31 51 96
15 10 94 36
52 89 47 13
30 35 4 12
100 150 50 200
100 100 200 75
100 100 200 250
100 100 150 250
150 100 200 250
200 100 200 250
200 150 200 250
弗拉基米尔F

您的设计对我还是很困惑。我会这样做:

Module Info
 integer i,j
 integer, dimension (:), allocatable :: supply
 integer, dimension (:), allocatable :: cost
 integer, dimension (:,:), allocatable :: capacity
 integer, dimension (:,:), allocatable :: demand
End module info


Module Procedures

contains

  Subroutine Sort(X)
   integer :: X(:)

   integer u
   !u=X(1)
   !...
   print*, "Sort:",X
  End subroutine

End module Procedures


Program Principal
 Use Info
 Use Procedures

 open(unit=1,file="dadose6h.dat")
 call get_data
 call sort(supply)
 call sort(cost)
 call rate(capacity)
end Program

这是一个很小的变化,所以我可能不理解您的描述。我看不出为什么排序过程需要包含数据的模块的任何原因。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Fortran子例程中使用可分配数组?

来自分类Dev

FORTRAN-子例程中的可分配数组

来自分类Dev

fortran,将可分配数组传递给具有右边界的子例程

来自分类Dev

在Fortran子例程中分配数组

来自分类Dev

共享可分配数组

来自分类Dev

如何使用名称列表以派生类型编写可分配数组?

来自分类Dev

如何使用名称列表以派生类型编写可分配数组?

来自分类Dev

Fortran函数返回可分配数组

来自分类Dev

Intel Fortran错误“未分配可分配数组或指针”

来自分类Dev

分配具有自身值的可分配数组

来自分类Dev

forrtl:严重(151):可分配数组已分配-

来自分类Dev

可分配数组(实型)的内存分配问题

来自分类Dev

使用Fortran 90将txt文件读入可分配数组时,结果错误

来自分类Dev

可分配数组值函数。gfortran与ifort

来自分类Dev

为什么在Fortran中需要可分配数组?

来自分类Dev

可分配数组的f2py错误

来自分类Dev

可分配数组的Openmp并行工作共享

来自分类Dev

指向包含可分配数组的派生类型的指针

来自分类Dev

可分配数组值函数。gfortran与ifort

来自分类Dev

fortran 77和gfortran中的可分配数组

来自分类Dev

可分配数组的Openmp并行工作共享

来自分类Dev

为什么在Fortran中需要可分配数组?

来自分类Dev

写入 Fortran 可分配数组时出现访问冲突

来自分类Dev

重置(取消分配/无效化)已损坏的Fortran可分配数组

来自分类Dev

用move_alloc和源分配扩展可分配数组

来自分类Dev

重置(取消分配/无效化)已损坏的Fortran可分配数组

来自分类Dev

将可选的可分配数组与可选的不可分配虚拟参数相关联时出现分段错误

来自分类Dev

Fortran:派生类型的可分配数组,包含派生类型的数组

来自分类Dev

将分配的数组从子例程传递到fortran中的主程序;使用还是模块?接口?

Related 相关文章

  1. 1

    如何在Fortran子例程中使用可分配数组?

  2. 2

    FORTRAN-子例程中的可分配数组

  3. 3

    fortran,将可分配数组传递给具有右边界的子例程

  4. 4

    在Fortran子例程中分配数组

  5. 5

    共享可分配数组

  6. 6

    如何使用名称列表以派生类型编写可分配数组?

  7. 7

    如何使用名称列表以派生类型编写可分配数组?

  8. 8

    Fortran函数返回可分配数组

  9. 9

    Intel Fortran错误“未分配可分配数组或指针”

  10. 10

    分配具有自身值的可分配数组

  11. 11

    forrtl:严重(151):可分配数组已分配-

  12. 12

    可分配数组(实型)的内存分配问题

  13. 13

    使用Fortran 90将txt文件读入可分配数组时,结果错误

  14. 14

    可分配数组值函数。gfortran与ifort

  15. 15

    为什么在Fortran中需要可分配数组?

  16. 16

    可分配数组的f2py错误

  17. 17

    可分配数组的Openmp并行工作共享

  18. 18

    指向包含可分配数组的派生类型的指针

  19. 19

    可分配数组值函数。gfortran与ifort

  20. 20

    fortran 77和gfortran中的可分配数组

  21. 21

    可分配数组的Openmp并行工作共享

  22. 22

    为什么在Fortran中需要可分配数组?

  23. 23

    写入 Fortran 可分配数组时出现访问冲突

  24. 24

    重置(取消分配/无效化)已损坏的Fortran可分配数组

  25. 25

    用move_alloc和源分配扩展可分配数组

  26. 26

    重置(取消分配/无效化)已损坏的Fortran可分配数组

  27. 27

    将可选的可分配数组与可选的不可分配虚拟参数相关联时出现分段错误

  28. 28

    Fortran:派生类型的可分配数组,包含派生类型的数组

  29. 29

    将分配的数组从子例程传递到fortran中的主程序;使用还是模块?接口?

热门标签

归档