回 帖 发 新 帖 刷新版面

主题:[讨论]大量子程序文件的接口,怎么缩减?

subroutine文件较多时怎样写接口比较好一点?用interface还是module?

比如这一段程序

Program main
implicit none
interface head
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
subroutine CreateNode(ModelLenth,ModelHeight,         &
                        ModelCelLenth,ModelCelHeight,   &
                        CrackLenth,CrackHeight,         &
                        CrackCelLenth,CrackCelHeight,   &
                        XNodeNum,YNodeNum,NodeNum,      &
                        CrackNodeNum,CrackRightNodeNum, &
                        BodyNode,CrackNode,ModelNode)
implicit none

real*8,intent(in)::   ModelLenth,ModelHeight,         &                   !模型半长和半高
                        ModelCelLenth,ModelCelHeight,   &                   !Y方向正中间两个节点距离的半高
                        CrackLenth,CrackHeight,         &                   !初始裂纹半长和裂纹宽
                        CrackCelLenth,CrackCelHeight                        !裂纹单元尺寸
            
integer,intent(in)::  XNodeNum,YNodeNum,NodeNum,      &                   !X方向节点数,Y方向节点数,总结点数
                        CrackNodeNum,CrackRightNodeNum                      !裂纹从x=0到裂尖的总结点数,裂纹右侧节点数

real*8,intent(out),dimension(:,:)::  BodyNode,      &                    !基体节点和坐标
                                         CrackNode,     &                   !裂纹节点和坐标
                                         ModelNode                          !整体模型节点和坐标

end subroutine CreateNode
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
subroutine WriteNode(node)
implicit none
real*8,intent(in),dimension(:,:):: node
end subroutine WriteNode
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
end interface head

real*8::   ModelLenth,ModelHeight,         &                   !模型半长和半高
            ModelCelLenth,ModelCelHeight,   &                   !Y方向正中间两个节点距离的半高
            CrackLenth,CrackHeight,         &                   !初始裂纹半长和裂纹宽
            CrackCelLenth,CrackCelHeight                        !裂纹单元尺寸
            
integer::  XNodeNum,YNodeNum,NodeNum,      &                   !X方向节点数,Y方向节点数,总结点数
            CrackNodeNum,CrackRightNodeNum, &                   !裂纹从x=0到裂尖的总结点数,裂纹右侧节点数
            i,j,k,l,m,n                                         !循环参数
real*8,allocatable:: BodyNode(:,:),      &                   !基体节点和坐标
                        CrackNode(:,:),     &                   !裂纹节点和坐标
                        ModelNode(:,:)                          !整体模型节点和坐标

CrackLenth=40.0e-6
CrackHeight=1.0e-6
ModelLenth=4.5e-2
ModelHeight=4.5e-2/2.0
XNodeNum=20
YNodeNum=15
CrackNodeNum=5
ModelCelHeight=ModelHeight/YNodeNum
ModelCelLenth=ModelLenth/(XNodeNum-1)
CrackCelHeight=CrackHeight/(CrackNodeNum-1)
CrackCelLenth=CrackLenth/(CrackNodeNum-1)
CrackRightNodeNum=int((ModelLenth-CrackLenth)/ModelCelLenth)+1
NodeNum=2*YNodeNum*XNodeNum+CrackNodeNum*2-1+CrackRightNodeNum

allocate(  BodyNode(YNodeNum*XNodeNum,3),    &
            CrackNode(CrackNodeNum*2-1+CrackRightNodeNum,3),&
            ModelNode(NodeNum,3))

call CreateNode(ModelLenth,ModelHeight,         &
                ModelCelLenth,ModelCelHeight,   &
                CrackLenth,CrackHeight,         &
                CrackCelLenth,CrackCelHeight,   &
                XNodeNum,YNodeNum,NodeNum,      &
                CrackNodeNum,CrackRightNodeNum, &
                BodyNode,CrackNode,ModelNode)
call WriteNode(ModelNode)
!Read(*,*)
end Program main

两个subroutine文件就不列出了。

本意是不想把一个文件写的太长。但subroutine多了之后main文件的interface的篇幅也很可观,严重影响可读性。

那段interface能写在另一个文件中么?


回复列表 (共4个回复)

沙发

把子程序放在 module 里。

use 这个 module

就不必写 interface 了

板凳


大量的声明能不能写到另外的文件,比如C++的头文件?

3 楼


哦,明白了。直接在module声明,不用加contains。

4 楼

[quote]
大量的声明能不能写到另外的文件,比如C++的头文件?[/quote]

多数编译器支持包含文件。具体请参阅编译器的说明书

我来回复

您尚未登录,请登录后再回复。点此登录或注册