我有一个带有例程的 FORTRAN 代码:
SUBROUTINE READ_NC_VALS(NCID, RECID, VARNAME, VARDATA)
integer ncid, recid
character*(*) varname
real*8 vardata
dimension vardata(15,45,75)
etc.
我想为这段代码增加一些灵活性,我想我会先添加一个可选的标志参数来做到这一点:
SUBROUTINE READ_NC_VALS(NCID, RECID, VARNAME, VARDATA, how_to_calculate)
! everything the same and then ...
logical, optional :: how_to_calculate
现在,在这一点上,我什至没有使用“how_to_calculate”。我只是将其放入代码中进行测试。所以我毫不费力地编译了代码。然后我运行它,我在子程序中得到一个错误。具体来说,稍后代码中的某些值会“神奇地”从没有该可选参数的情况下改变。新值对代码的逻辑没有意义,因此它会礼貌地退出并显示错误消息。让我再次强调,在这一点上,我什至没有使用这个可选争论。因此,在云雀中,我回到源代码中调用这个例程的所有地方,即使我的新参数是可选的,我在所有调用中都为其输入了值。当我这样做时,代码运行良好。那么这是什么一回事?仅在子例程中存在未使用的可选参数怎么会导致其他数据被破坏?为这个可选参数添加输入参数如何再次解决问题?顺便说一下,这是用 PGI 编译的。
有任何想法吗?谢谢。
顺便说一句,很抱歉没有提供更多代码。如果我这样做,我的老板可能对我不太满意。我不制定规则;我只是在这里工作。