Fortran Coder

查看: 21058|回复: 5
打印 上一主题 下一主题

[求助] #8284 and DUMMY

[复制链接]

27

帖子

7

主题

0

精华

熟手

F 币
124 元
贡献
66 点
跳转到指定楼层
楼主
发表于 2020-3-3 11:43:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位高手:

一个子程序 INITIA 调用另一个子程序MATISW,然后出现如下错误。主要是INITIA调用时对应的第6、8、11、13个参数,分别是LDUMMY,DUMMY,DUMMY,DUMMY;而相应子程序MATISW中的参数是LALGVL,RALGVL,RSTAVL,STRESL.二者有些不匹配,所以出现错误,具体可见代码。

这是别人写的代码,不大懂DUMMY是什么意思?是系统默认的关键词吗?那程序INITIA定义的LDUMMY又是什么?有相关资料可以学习一下吗?谢谢!


1>E:\work directory\HYPLAS_v2.0\src\GENERAL\initia.f(44): error #8284: If the actual argument is scalar, the dummy argument shall be scalar unless the actual argument is of type character or is an element of an array that is not assumed shape, pointer, or polymorphic.   [LALGVL]
1>E:\work directory\HYPLAS_v2.0\src\GENERAL\initia.f(44): error #8284: If the actual argument is scalar, the dummy argument shall be scalar unless the actual argument is of type character or is an element of an array that is not assumed shape, pointer, or polymorphic.   [RALGVL]
1>E:\work directory\HYPLAS_v2.0\src\GENERAL\initia.f(44): error #8284: If the actual argument is scalar, the dummy argument shall be scalar unless the actual argument is of type character or is an element of an array that is not assumed shape, pointer, or polymorphic.   [RSTAVL]
1>E:\work directory\HYPLAS_v2.0\src\GENERAL\initia.f(44): error #8284: If the actual argument is scalar, the dummy argument shall be scalar unless the actual argument is of type character or is an element of an array that is not assumed shape, pointer, or polymorphic.   [STRESL]



[Fortran] 纯文本查看 复制代码
 SUBROUTINE INITIA
1( DLAMD ,IFNEG ,KUNLD ,TFACT )
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
C Hyplas global database
INCLUDE '../MAXDIM.INC'
INCLUDE '../MATERIAL.INC'
INCLUDE '../ELEMENTS.INC'
INCLUDE '../GLBDBASE.INC'
C Local variables and numerical constants
LOGICAL LDUMMY
DATA R0 /
1 0.0D0/
C***********************************************************************
C INITIALISES SOME ARRAYS AND VARIABLES
C
C REFERENCE: Section 5.3.4
C***********************************************************************
KUNLD=0
TFACT=R0
DLAMD=R0
IFNEG=1
DO 10 IELEM=1,NELEM
IGRUP=IGRPID(IELEM)
IELIDN=IELTID(IGRUP)
NEVAB=IELPRP(5,IELIDN)
CALL RVZERO(ELOAD(1,IELEM),NEVAB)
CALL RVZERO(ELOADO(1,IELEM),NEVAB)
10 CONTINUE
CALL RVZERO(DTANG,NTOTV)
CALL RVZERO(TDISP,NTOTV)
CALL RVZERO(TDISPO,NTOTV)
CALL RVZERO(DINCR,NTOTV)
CALL RVZERO(DINCRO,NTOTV)
CALL RVZERO(DITER,NTOTV)
C Arrays from common block STATE
DO 30 IELEM=1,NELEM
IGRUP=IGRPID(IELEM)
IELIDN=IELTID(IGRUP)
NGAUSP=IELPRP(4,IELIDN)
DO 20 IGAUSP=1,NGAUSP
C Call material interface routine to initialise material-specific Gauss
C point data
MODE=0
CALL MATISW
1( MODE ,NLARGE ,NTYPE ,
2 IPROPS(1,MATTID(IGRUP)),LALGVA(1,IGAUSP,IELEM,1) ,
3 LDUMMY ,RALGVA(1,IGAUSP,IELEM,1) ,DUMMY ,
4 RPROPS(1,MATTID(IGRUP)) ,
5 RSTAVA(1,IGAUSP,IELEM,1) ,DUMMY ,
6 STRSG(1,IGAUSP,IELEM,1) ,DUMMY )
20 CONTINUE
30 CONTINUE
RETURN
END

C----------------(以下仅部分相关代码)----
SUBROUTINE MATISW
1( MODE ,NLARGE ,NTYPE ,IPROPS ,LALGVC ,
2 LALGVL ,RALGVC ,RALGVL ,RPROPS ,RSTAVC ,
3 RSTAVL ,STRESC ,STRESL )
IMPLICIT DOUBLE PRECISION (A-H,O-Z)
INCLUDE '../MATERIAL.INC'
C Arguments
LOGICAL 
1 LALGVC ,LALGVL
DIMENSION
1 IPROPS(*) ,LALGVC(*) ,LALGVL(*) ,
2 RALGVC(*) ,RALGVL(*) ,RPROPS(*) ,
3 RSTAVC(*) ,RSTAVL(*) ,STRESC(*) ,
4 STRESL(*)
C***********************************************************************

分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

259

帖子

0

主题

0

精华

版主

World Analyser

F 币
717 元
贡献
510 点

新人勋章美女勋章元老勋章热心勋章规矩勋章管理勋章

QQ
沙发
发表于 2020-3-3 14:24:57 | 只看该作者
实参虚参的名字是可以不同的,但是类型,精度需要一致。
dummy不是语法规定的名字,字面意思来看,一般指的是,没什么实际作用,用来占个位的变量。

27

帖子

7

主题

0

精华

熟手

F 币
124 元
贡献
66 点
板凳
 楼主| 发表于 2020-3-3 17:08:01 | 只看该作者
本帖最后由 sunkingf 于 2020-3-3 17:14 编辑
kyra 发表于 2020-3-3 14:24
实参虚参的名字是可以不同的,但是类型,精度需要一致。
dummy不是语法规定的名字,字面意思来看,一般指的 ...

可以理解其字面意思,那为什么写的是"DUMMY"而不是随便写一个呢,比如“AAAAA”? 而随便写一个不会出错吗?这里的“DUMMY”为什么不需要定义呢? 现在写的“DUMMY”“LDUMMY”为什么又出错了呢?肯定哪里有相关说明的资料的,只是我不熟悉。

27

帖子

7

主题

0

精华

熟手

F 币
124 元
贡献
66 点
地板
 楼主| 发表于 2020-3-3 18:11:56 | 只看该作者
kyra 发表于 2020-3-3 14:24
实参虚参的名字是可以不同的,但是类型,精度需要一致。
dummy不是语法规定的名字,字面意思来看,一般指的 ...

这里面LDUMMY和DUMMY指代的都是长度不确定的数组LALGVL,RALGVL,RSTAVL,STRESL。而这里不定义维度的话,默认为是一个没有维度的变量,会出错。怎么改进呢?

259

帖子

0

主题

0

精华

版主

World Analyser

F 币
717 元
贡献
510 点

新人勋章美女勋章元老勋章热心勋章规矩勋章管理勋章

QQ
5#
发表于 2020-3-4 09:43:31 | 只看该作者
sunkingf 发表于 2020-3-3 17:08
可以理解其字面意思,那为什么写的是"DUMMY"而不是随便写一个呢,比如“AAAAA”? 而随便写一个不会出错吗 ...

1.因为用一个有意义的名字,比随便写一个,更容易理解。
2.未定义的变量,参考IN规则。
3.出错,是因为虚参是数组,而实参就只能是数组,而不能是普通标量的变量。
4.资料很多,教科书、语法规范文档。
5. LDUMMY和DUMMY指代什么,请看他的定义,无定义则参考IN规则。
6.改进的方法是,让虚参和实参一致。(至于虚参迁就实参,还是实参迁就虚参,看情况)

27

帖子

7

主题

0

精华

熟手

F 币
124 元
贡献
66 点
6#
 楼主| 发表于 2020-3-4 10:59:58 | 只看该作者
kyra 发表于 2020-3-4 09:43
1.因为用一个有意义的名字,比随便写一个,更容易理解。
2.未定义的变量,参考IN规则。
3.出错,是因为虚 ...

好的,谢谢,给实参DUMMY定义了一个维度,可以通过。问题暂时解决,谢谢!
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-11-23 10:05

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表