Fortran Abaqus子程序UVARM-1.#在Windows&;中查找-世纪之南6.6
我已经为Abaqus编写了子程序Fortran Abaqus子程序UVARM-1.#在Windows&;中查找-世纪之南6.6,fortran,intel-fortran,Fortran,Intel Fortran,我已经为Abaqus编写了子程序UVARM。程序正在运行,但显示结果 -1.#IND 在窗口和 -nan 在Centos 6.6中 以下是部分脚本: 我无法解决它,但在我看来变量INVT变成sqrt(-1)在下面的代码中。我如何通过只提取真实部分来运行它?下面我想它的结尾是INVT=some实数+SQRT(-some number)。我如何解决这个问题 C Stress tensor: CALL GETVRM('S',ARRAY,JARRAY,FLGR
UVARM
。程序正在运行,但显示结果
-1.#IND
在窗口和
-nan
在Centos 6.6中
以下是部分脚本:
我无法解决它,但在我看来变量INVT
变成sqrt(-1)
在下面的代码中。我如何通过只提取真实部分来运行它?下面我想它的结尾是INVT=some实数+SQRT(-some number)
。我如何解决这个问题
C Stress tensor:
CALL GETVRM('S',ARRAY,JARRAY,FLGRAY,JRCD,JMAC,JMATYP,
1 MATLAYO,LACCFLA)
JERROR = JERROR + JRCD
SIGMA11 = ARRAY(1)
SIGMA22 = ARRAY(2)
SIGMA33 = ARRAY(3)
SIGMA12 = ARRAY(4)
SIGMA13 = ARRAY(5)
SIGMA23 = ARRAY(6)
C REARRANGE THE STRESS VECTOR *****
C MCT DECOMPOSITION
SIGMAM=MATMUL(MATQM,SIGMAC)
INVT=(SIGMAM(2,1)+SIGMAM(3,1)+
1 SQRT((SIGMAM(2,1)+SIGMAM(3,1))**2-
2 4*(SIGMAM(2,1)*SIGMAM(3,1)+SIGMAM(4,1)**2)))/2
INVS1=SIGMAM(6,1)**2+SIGMAM(5,1)**2
INVS2=0.25*(SIGMAM(2,1)-SIGMAM(3,1))**2+SIGMAM(4,1)**2
C MACAULAY BRACKETS
IF (INVT.LT.0) THEN
INVT=0.0
END IF
SIGMAEFFT=SQRT((BT/BS1)*INVT**2+INVS1+(BS2/BS1)*INVS2)
SIGMAEFFL=SIGMAM(1,1)
C MACAULAY BRACKETS
IF (SIGMAEFFL.LT.0) THEN
SIGMAEFFL=0.0
END IF
请避免在这里使用plz之类的东西。如果你想使用复杂的算术,请声明你的变量并使其复杂。然后把它转换成真实的。谢谢haraldkl,这可能太基本了,但你能在我的例子中显示出来吗。