|
下面以一个弹塑性立方块求解为例.
基本建模
/prep7
Et,1,solid45
Mp,ex,1,3e4
Mp,nuxy,1,0.3
TB,BKIN,1,1,2,1
TBDATA,,20,10,,,,
Block,,10,,10,,10
Esize,1
Vmesh,1
Asel,s,loc,y,0
Da,all,all
!求解部分共三种方法比较
方法1:采用do循环批处理
*DO,I,1,2
/SOLU
TIME,I
nsel,s,loc,y,10
D,all,uy,-1*I
allsel,all
Solve
*ENDDO
I=1时: 时间TIME从0 算到1
I=2时: 时间TIME从0算到2 ,都是基于初始构型计算的,不具有对前一步计算结果的继承性,相当于时间函数只有一个点(1,2)
最终循环计算的结果是number step= 1 ; time=2
方法2:step by step求解步
ALLSEL,ALL
/SOLU
TIME,1 !一个时间对应一个荷载步,后一步是在前一步继承计算的
NSEL,S,LOC,Y,10
D,all,uy,-1
allsel,all
Solve
TIME,2
NSEL,S,LOC,Y,10
D,all,uy,-2
allsel,all
Solve
该方法是在前一步计算结果的基础上继承计算的,时间函数上有两个点(1,1),(2,2)
最终计算的结果是NUMBER STEP=2, TIME=2
!如果TIME=1计算顺利完毕,采用重启动是多余的,如果中途结束,需要重启动把TIME=1算完
方法3:
用lswire文件的方法,设置荷载步(在线性计算时相当于荷载工况)和时间,此方法对前一步结果有
继承性,计算结果同方法2
方法4:
对第一种方法,要具有继承性,采取重启动的方法:
/solu
RESCONTRL,DEFINE,ALL,1,1 !保存每一子步计算结果,用于重启动
*DO,I,1,2
*IF,I,GT,1,THEN
ANTYPE,,REST !重启动以后,变量I恢复到上一步了,新的荷载步需要I=I+1,重启动文件将变量也保存了
!I=I+1
*ENDIF
TIME,I
nsel,s,loc,y,10
D,all,uy,-1*I
allsel,all
Solve
SAVE
*ENDDO
计算结果同方法2
方法5:是对方法4的一点补充,如果不明示TIME
/solu
RESCONTRL,DEFINE,ALL,1,1 !保存每一子步计算结果,用于重启动
*DO,I,1,2
*IF,I,GT,1,THEN
ANTYPE,,REST,I-1,LAST,0 !重启动以后,变量I恢复到上一步了,新的荷载步需要I=I+1,重启动文件将变量也保存了
I=I+1
*ENDIF
nsel,s,loc,y,10
D,all,uy,-1*I
allsel,all
Solve
*ENDDO
计算结果,time的值自动+1,计算结果同上
注意:1. 每个时间输入的荷载,是荷载-时间曲线上的点,也就是荷载水平,不是荷载增量,这一点与ADINA相同
2. 后继时间点一定1,3要大于前面的时间点,如果小于,则系统在前面时间自动+1
3. NUMBER STEP(在线性分析中相当于荷载工况)的数目,是通过solve来确定的,每执行solve一次,就会有一个记录,与时间没什么关系
4. 关于*do循环与Fortran语法的区别
*do,i,1,3
i=i-1 !这里的变量不参与循环,开始就把循环次数算完了,没有递归
*enddo
!即当:i=1, i=i-1=0,此时i=0没有返回循环结构*DO中
! i=2, i=i-1=1
! i=3, i=i-1=2
但在FORTRAN中,这种写法会出现错误Error: An assignment to a DO variable within a DO body is invalid. [I],循环体中不能出现
GMT+8, 2024-11-5 22:34 , Processed in 0.034110 second(s), 15 queries , Gzip On.
Powered by Discuz! X3.4
Copyright © 2001-2021, Tencent Cloud.