尽管很容易获得当前步数或增量数(变量KSTEP和KINC,但是当在子例程UMAT中时,我找不到找到知道迭代数的简便方法。
我知道下面的“ if子句”会告诉我是否在第一步的第一次增量的第一次迭代中:
IF((KINC.EQ.1).AND.(SUM(STRAN+DSTRAN).EQ.0.0D0)) THEN
而且我也知道我可以将迭代编号写入外部文件。但是,是否可以仅在UMAT子例程中执行此操作?
从来没有真正的理由需要知道UMAT中的迭代编号。如果您认为需要了解它,通常表明您有更好的方法来实现自己想要的知识。
您可以使用一个公共块来跟踪输入umat的频率以及进行的迭代。但我真的建议反对。没有充分的理由知道迭代次数。除非您的算法是完美的,否则它将给您带来比其价值更大的问题。
还可以在代码中检查第一个增量-它不会告诉您何时处于实际迭代中,它很有可能会在PRE中发生。
尽管其他答案给出了解决方案,主要是使用大小限制为NElements * NIntegration的全局数组,但作者听起来似乎从来没有理由在您的算法中使用它。您可能想知道迭代编号的原因可能有很多种。我使用的UMAT中的一个示例将调用限制为更新昂贵的分析Jacobian。