专题:Abaqus子程序调试技术(techdog)

最近在做一些子程序的东西,遇到了各种问题,通往complete的路通常只有一条,但产生error的方式却有有无数条。有些错误完全不是个人能力引发的,而是由体系的不完善或者软件本身的问题导致,但却得花大代价debug,浪费大家时间与精力。由此将一些不常见的,甚至于在网外论坛挂了多年的问题拿来讨论,希望大家就是错也都错在自己的设计问题上,而不是非技术性的、工具自身的问题。

1. 空格与Tab键对编译的影响

Fortran语言对空格和缩进极为敏感,尤其是子程序头部,极易出错(???)。由manual给出的子程序接口并未直接告知其实缩进情况。以Dflux子程序为例说明:

在Sublime中的形式这样的:

Abaqus subroutine debug techdog 专题的图1


一次在编辑好后运行,出现以下错误:

Abaqus subroutine debug techdog 专题的图3

显然是第一句出了问题,主要就是缩进问题。这问题在外网上(www.eng-tips.com)都挂老久,但没人给出有效解答(当然问题可能不一样)。其它论他论坛,包括Intel的论坛含糊其辞。反复检查我的语句,长时间排查不出来。因为该例的形式与缩进量都是与另一个成功案是例一致的(我直接CV的),后来,在光标移至前方空格时,发现了失败案例与成功案例之间的差别:

Abaqus subroutine debug techdog 专题的图4


原来,之前在Sublime中设置了Tab键为两个空格长,且将横线转换为空格。这样每次打Tab就直接是两个空格,当时是为了整段代码端缩进方便而设置的。这就导致我们看起来缩进一致,实际上编译时是当作不同量来处理的,编译器不认这个两个空格的缩进!!

Abaqus subroutine debug techdog 专题的图5

取消将Tab转换为空格,这时就可以正常编译了

Abaqus subroutine debug techdog 专题的图6

此时,不将首句换行也可以正常编译。

所以,Tab不等于2个或4个空格的简单叠加!

事实上关于Tab键与空格在代码中的应用的差异,人们从不同角度分析,见写代码时,缩进使用 tab 还是空格? - 知乎 (zhihu.com),多是考虑一致性,而忽略了本质差异。

话又说回来,本例遇到的问题实在是个小问题,调整编辑器或者细心点,养成良好的习惯都可以避免这问题,但无论如何,当一个这种基本的问题在一个协同项目中出现时,带来的时间花费和挫折感是难以接受的(与错误层次相比)

免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空