加权残值法与变分法
应用有限元方法的时候时常困扰着问题:一般推导刚度矩阵的时候采用的都是虚功原理或虚位移原理,那么为什么大部分书里一上来就会讲的是加权残值方法。假如说直接撇开加权残值方法岂不是更直接。本篇就来讲讲这个问题。对于一般的问题,如果是以微分方程形式给出,相应的可以采用加权残值法进行求解;如果问题能以变分原理给出,如最小势能原理(即真实变形是使势能最小,如何求出变形),则可采用变分法。……
Mechanical APDL 在ANSYS帮助文件中是这样称呼我们习以为常的采用APDL来操作也就是那个黑乎乎的程序的。因此后续都用这个来称呼。工欲善其事必先利其器,关于APDL的编辑器,目前来看PSPAD还基本可以。ANSYS看起来并没有设置很好的接口,因为APDL看起来并不是一种很利于编程的语言,无论是数据格式还是流程都相当不友好。网上也有采用Python去做接口,但是仔细一看就是换了……
Mechanical APDL 在ANSYS帮助文件中是这样称呼我们习以为常的采用APDL来操作也就是那个黑乎乎的程序的。因此后续都用这个来称呼。工欲善其事必先利其器,关于APDL的编辑器,目前来看PSPAD还基本可以。
ANSYS看起来并没有设置很好的接口,因为APDL看起来并不是一种很利于编程的语言,无论是数据格式还是流程都相当不友好。网上也有采用Python去做接口,但是仔细一看就是换了种方式写APDL而已。
在一开头首先谈的内容与有限元并没有什么关系,而是如何实现输入输出的更加的人性化。
采用/input
命令,将不同功能的命令进行封装,实现输入的模块化。对于这一点,也是收受到了网上一个人写的资料的启发。
/INPUT, Fname, Ext, Dir, LINE, LOG
例如在main.inp文件内:
/INPUT,CanShu,inp,'F:\New-St\Qiao' !读入前处理参数和坐标控制代码
/INPUT,JiHe,inp,'F:\New-St\Qiao' !读入几何编辑代码
/INPUT,WangGe3,inp,'F:\New-St\Qiao' !读网格划分代码
/INPUT,'Modal3',inp,'F:\New-St\Qiao' !读入计算控制代码
/INPUT,'HouChuLi-Modal',inp,'F:\New-St\Qiao' !读入后处理代码
上述将整个APDL命令流分成了五个部分,从而可以依次分段检查各个代码的正确性。
Mechanical APDL尽管也能进行如出图等后处理,但是如果不能把数据取出,总觉得受限(特别是作图时的背景问题),这里尝试采用输出json格式的数据,一段示例代码如下所示:
*cfopen,file_name,json !输出
*VWRITE,'{'
(A8)
*VWRITE,'"','计算内容', '":','"nonbuck','" ,'
(A1,A8,A2,A8,A8)
*VWRITE,'"','计算日期', '":',chrval(date),','
(A1,A8,A2,A8,A8)
*VWRITE,'"','墙高', '":',h,','
(A1,A4,A2,F8.2,A8)
*VWRITE,'"','墙宽', '":',w,','
(A1,A4,A2,F8.2,A8)
*VWRITE,'"','分段数', '":',n,','
(A1,A6,A2,F8.2,A8)
*VWRITE,'"','间隔', '":',d,','
(A1,A4,A2,F8.2,A8)
*VWRITE,'"','腹板厚度', '":',t,','
(A1,A8,A2,F8.2,A8)
!中部翼缘厚度
*VWRITE,'"','中翼厚度', '":',tf,','
(A1,A8,A2,F8.2,A8)
!端部翼缘厚度
*VWRITE,'"','端翼厚度', '":',tend,','
(A1,A8,A2,F8.2,A8)
*VWRITE,'"','边界条件', '":',chrval(yueshu),','
(A1,A4,A2,A2,,A8)
*VWRITE,'"','荷载步', '":','['
(A1,A6,A2,A8)
*DO,i,1,fnum,1
aa = out1(i,1)
*If,i ,EQ, fnum, Then
*VWRITE,aa
(F20.3)
*ELSE
*VWRITE,aa,','
(F20.3,A8)
*endif
*enddo
*VWRITE,']',','
(A8,A8)
这里归纳起来就是用了*vwrite
语句,然后结合json的数据格式进行输出。不过上述语句显然过于复杂,特别是对于输出数组时,此时代码段就变得过长,为此尝试采用宏,并把宏写在库testmac.inp中(如果是直接写mac扩展名的文件,还要考虑添加系统变量,比较繁琐,直接采用宏库比较合适)。
test
*VWRITE,'"','荷载步', '":','['
(A1,A6,A2,A8)
*DO,i,1,arg2,1
arg20 = arg1(i,1)
*If,i ,EQ, arg2, Then
*VWRITE, arg20
(F20.3)
*ELSE
*VWRITE, arg20,','
(F20.3,A8)
*endif
*enddo
/EOF
并在主程序中添加:
*ULIB, 'testmac', inp
*use,test,out1,fnum
但是宏有一个问题是无法传递数组,最多只能传递19个数值或文字,所以不能一次性利用宏将数组输出完毕,所以说APDL缺陷还是很明显。
国际体育仲裁法庭的判决书里写着WADA要求的是2到8年的禁赛,然后说是根据国际泳联禁药控制条例(FINA DOPING CONTROL RULES)10.7.1条做出八年处罚。Considering that, in June 2014, the Athlete was found guilty of a first anti-doping rule violation (ADRV), the……