新手问问题:单元编号,节点编号,节点自由度数都是怎么弄的?
在编写FORTRAN程序时,单元编号和节点编号怎么在程序中实现的??还有节点自由度数是什么意思呢?单元阵到总阵组装时该怎么做??
谢谢! 看看最基本的有限元理论吧 这个东西学习起来快忘记也快 知道理论就可以了
找本比较简单的有限元书看看就明白了
看看杆件的或者平面弹性力学,两者都是比较简单,而且书上一般还附带有程序谢谢
我的意思是这样的!因为我这个结构有2000个单元,我如果一个接一个的输入很费时间,所以我想有没有办法可以让他自动输入
哪位高手给点建议,点拨我一下
谢谢了 .
计算规模比较大时,要求程序有前处理功能,你如果是为了分析工程实际问题,建议使用现成的商业程序;如果是学位论文,建议例题不要太大。
网格优化涉及的理论也是很复杂的,简单的可以用坐标增量来自动生成,一般的有限元书后面也能找到,单仅限于非常简单的情况... ...
是比较简单的情况!
是单一结构的全是矩形单元,8节点的
整个区域也是矩形的
我想应该有办法做到的
但是我总转不过那个弯 .
按照单元节点自由度方程编号组装的。
可以看看有限元的书,或将你的算例和程序贴上来,不然不好说的... ... 单元节点自由度方程是什么意思呢?总看到这个,但总是不太明白!
我的例子是,一个1000*500的板,分成40*40个单元,每个单元8个节点,每个节点坐标的数组是XY(24,N),每个单元的节点号是NE(8,N),每个单元8个节点6个自由度,就是这样的一个问题.
我的想法是用DO循环一下输入.
不知道能实现不 .
编的程序放上来... ... SUBROUTINE CPLATE8_INPUT(ID,X,MTH,NR,
&LM,NE,XY,TK,AG,PR,IZ,NZ,NUMNP,NEQ,IN,IO,IP,IM,IX)
IMPLICIT REAL*8 (A-H,O-Z)
DIMENSION ID(6,NUMNP),X(3,NUMNP),MTH(NEQ),NR(10)
DIMENSION LM(48,NR(2)),NE(8,NR(2)),XY(24,NR(2))
DIMENSION TK(NR(3)),AG(NR(3)),PR(1),I8(8)
ND = 6 * 8
C-----------------------------------------------------------------------
C Read and generate shell element information
C-----------------------------------------------------------------------
1 READ( IN,'(8E10.4)') (PR(I),I=1,8)
WRITE(IO,2000) (NR(I),I=2,4),(PR(J),J=1,8)
2 READ( IN,'(2I5)') IZ,NZ
IF(NR(4).NE.0) THEN
WRITE(IO,2010)IZ,NZ
ENDIF
WRITE(IO,2020)
DO 100 I=1,NR(3)
3 READ( IN,'(I5,F10.4,F10.4)') MM,TK(I),AG(I)
100 WRITE(IO,'(I9,F18.4,F22.0)') MM,TK(I)*1000.,AG(I) ! m => mm
WRITE(IO,2030)
C
DO 200 INE=1,NR(2)
4 READ(IN,'(18I5)') MM,(I8(I),I=1,8),KG,(NE(I,INE),I=1,8)
IF(MM.NE.INE) THEN
WRITE(IO,'(//5X,18HERROR IN ELEMENT !,//)')
STOP
ENDIF
DO 105 I=1,8
IF(I8(I).GT.NUMNP) THEN
WRITE(*,'(//5X,18H单元结点编号出错!,2I8//)') MM,I8(I)
STOP
ENDIF
IF(NE(I,INE).GT.NUMNP) THEN
WRITE(*,'(//5X,18H单元结点编号出错!,2I8//)') MM,NE(I,INE)
STOP
ENDIF
105 CONTINUE
WRITE(IO,'(5X,I4,1X,8I7)')INE,(I8(I),I=1,8)
WRITE(IP,'(5X,I4,1X,8I7)')INE,(I8(I),I=1,8)
IF(NR(4).EQ.0.OR.NR(4).EQ.1) THEN
WRITE(IX)(I8(I),I=1,8)
ENDIF
C
C
DO 110 JJ=1,8
DO 110 II=1,3
110 XY(II+3*(JJ-1),INE) = X(II,I8(JJ))
C
DO 120 JJ=1,8
DO 120 II=1,6
120 LM(II+6*(JJ-1),INE) = ID(II,I8(JJ))
C
IF(NR(4).NE.0) THEN
DO 140 II=1,8
IF(NE(II,INE).NE.0) THEN
WRITE(IM) I8(II),NE(II,INE)
DO 130 JJ=1,6
130LM(JJ+6*(II-1),INE) = ID(JJ,NE(II,INE))
ENDIF
140CONTINUE
ENDIF
C
C Determine the active column heights of element with LM
C
CALL COLHT(MTH,LM(1,INE),ND)
C
200 CONTINUE
C
C 处理分层区上下子板中和轴的法向坐标偏移
C
IF(NR(4).EQ.1) THEN
PH = 0.
DO 210 I=1,NR(3)
210PH = PH + TK(I)
EX = 0.
DO 220 I=IZ,NZ
220EX = EX + TK(I)
EZ = (PH-EX)/2.
DO 230 I=1,NR(2)
DO 230 J=1,8
230XY(3*J,I) = XY(3*J,I) + EZ
ENDIF
IF(NR(4).EQ.2) THEN
PH = 0.
DO 240 I=1,NR(3)
240PH = PH + TK(I)
EX = 0.
DO 250 I=IZ,NZ
250EX = EX + TK(I)
EZ =-(PH-EX)/2.
DO 260 I=1,NR(2)
DO 260 J=1,8
260XY(3*J,I) = XY(3*J,I) + EZ
ENDIF 这个是输入信息那部分的
主要就是开始的时候
节点号的位置应该怎么弄呢!?? .
这是8节点复合材料板壳单元,这一段是处理单元的输入信息,而节点信息是不在这个子程序里的,在主程序的前面专门有段节点坐标和约束输入主程序。
程序要从头仔细读,逐行逐句的理解... ...
希望你有进展。 4 READ(IN,'(18I5)') MM,(I8(I),I=1,8),KG,(NE(I,INE),I=1,8)
这句不是输入节点号吗? 您说的节点信息是X(II,I8(JJ))吗?
这个都是一个一个读的吗? .
不是。
这是输入单元的节点编号,存放在NE(I,J)。