Fortran Coder

查看: 21661|回复: 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] 纯文本查看 复制代码
01SUBROUTINE INITIA
021( DLAMD ,IFNEG ,KUNLD ,TFACT )
03IMPLICIT DOUBLE PRECISION (A-H,O-Z)
04C Hyplas global database
05INCLUDE '../MAXDIM.INC'
06INCLUDE '../MATERIAL.INC'
07INCLUDE '../ELEMENTS.INC'
08INCLUDE '../GLBDBASE.INC'
09C Local variables and numerical constants
10LOGICAL LDUMMY
11DATA R0 /
121 0.0D0/
13C***********************************************************************
14C INITIALISES SOME ARRAYS AND VARIABLES
15C
16C REFERENCE: Section 5.3.4
17C***********************************************************************
18KUNLD=0
19TFACT=R0
20DLAMD=R0
21IFNEG=1
22DO 10 IELEM=1,NELEM
23IGRUP=IGRPID(IELEM)
24IELIDN=IELTID(IGRUP)
25NEVAB=IELPRP(5,IELIDN)
26CALL RVZERO(ELOAD(1,IELEM),NEVAB)
27CALL RVZERO(ELOADO(1,IELEM),NEVAB)
2810 CONTINUE
29CALL RVZERO(DTANG,NTOTV)
30CALL RVZERO(TDISP,NTOTV)
31CALL RVZERO(TDISPO,NTOTV)
32CALL RVZERO(DINCR,NTOTV)
33CALL RVZERO(DINCRO,NTOTV)
34CALL RVZERO(DITER,NTOTV)
35C Arrays from common block STATE
36DO 30 IELEM=1,NELEM
37IGRUP=IGRPID(IELEM)
38IELIDN=IELTID(IGRUP)
39NGAUSP=IELPRP(4,IELIDN)
40DO 20 IGAUSP=1,NGAUSP
41C Call material interface routine to initialise material-specific Gauss
42C point data
43MODE=0
44CALL MATISW
451( MODE ,NLARGE ,NTYPE ,
462 IPROPS(1,MATTID(IGRUP)),LALGVA(1,IGAUSP,IELEM,1) ,
473 LDUMMY ,RALGVA(1,IGAUSP,IELEM,1) ,DUMMY ,
484 RPROPS(1,MATTID(IGRUP)) ,
495 RSTAVA(1,IGAUSP,IELEM,1) ,DUMMY ,
506 STRSG(1,IGAUSP,IELEM,1) ,DUMMY )
5120 CONTINUE
5230 CONTINUE
53RETURN
54END
55 
56C----------------(以下仅部分相关代码)----
57SUBROUTINE MATISW
581( MODE ,NLARGE ,NTYPE ,IPROPS ,LALGVC ,
592 LALGVL ,RALGVC ,RALGVL ,RPROPS ,RSTAVC ,
603 RSTAVL ,STRESC ,STRESL )
61IMPLICIT DOUBLE PRECISION (A-H,O-Z)
62INCLUDE '../MATERIAL.INC'
63C Arguments
64LOGICAL
651 LALGVC ,LALGVL
66DIMENSION
671 IPROPS(*) ,LALGVC(*) ,LALGVL(*) ,
682 RALGVC(*) ,RALGVL(*) ,RPROPS(*) ,
693 RSTAVC(*) ,RSTAVL(*) ,STRESC(*) ,
704 STRESL(*)
71C***********************************************************************

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

268

帖子

0

主题

0

精华

版主

World Analyser

F 币
749 元
贡献
526 点

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

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。而这里不定义维度的话,默认为是一个没有维度的变量,会出错。怎么改进呢?

268

帖子

0

主题

0

精华

版主

World Analyser

F 币
749 元
贡献
526 点

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

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, 2025-4-29 02:16

Powered by Discuz! X3.4

© 2013-2025 Comsenz Inc.

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