📄 先处理法程序pff.f90.txt
字号:
CALL ESM(M,NE,E,A,ZI,BL,SI,CO,EK) ! 生成整体坐标下的单刚阵
CALL ELV(M,NE,NJ,IJ,JN,LV) ! 确定单元定位向量
! 按单元定位向量对号入座组集总刚
DO L=1,6
I=LV(L)
IF(I.NE.0) THEN
DO K=1,6
J=LV(K)
IF(J.NE.0) TK(I,J)=TK(I,J)+EK(L,K)
ENDDO
END IF
ENDDO
ENDDO
END
! Calculate element fixed-end forces.
! 计算单元固端力
SUBROUTINE EFF(I,PF,NF,BL,FO)
implicit none
REAL::BL ! 带入哑元
INTEGER::I,NF ! 带入哑元
REAL::PF(NF,4) ! 带入哑元
REAL::FO(6) ! 带出哑元
REAL::Q,C,B,C1,C2,C3 ! 中间变量
INTEGER::NO ! 中间变量
NO=INT(PF(I,2))
Q=PF(I,3)
C=PF(I,4)
B=BL-C
C1=C/BL
C2=C1*C1
C3=C1*C2
FO=0.0
SELECT CASE(NO) ! 按荷载工况计算单元固端力
CASE(1) ! 跨中作用均布力
FO(2)=-Q*C*(1.0-C2+C3/2.0)
FO(3)=-Q*C*C*(0.5-2.0*C1/3.0+0.25*C2)
FO(5)=-Q*C*C2*(1.0-0.5*C1)
FO(6)=Q*C*C*C1*(1.0/3.0-0.25*C1)
CASE(2) ! 跨中作用集中力
FO(2)=-Q*B*B*(1.0+2.0*C1)/BL/BL
FO(3)=-Q*C*B*B/BL/BL
FO(5)=-Q*C2*(1.0+2.0*B/BL)
FO(6)=Q*C2*B
CASE(3) ! 跨中作用集中力矩
FO(2)=6.0*Q*C1*B/BL/BL
FO(3)=Q*B*(2.0-3.0*B/BL)/BL
FO(5)=-6.0*Q*C1*B/BL/BL
FO(6)=Q*C1*(2.0-3.0*C1)
CASE(4) ! 跨中作用线性分布力
FO(2)=-Q*C*(0.5-0.75*C2+0.4*C3)
FO(3)=-Q*C*C*(1.0/3.0-0.5*C1+0.2*C2)
FO(5)=-Q*C*C2*(0.75-0.4*C1)
FO(6)=Q*C*C*C1*(0.25-0.2*C1)
CASE(5) ! 跨中作用轴向均布力
FO(1)=-Q*C*(1.0-0.5*C1)
FO(4)=-0.5*Q*C*C1
CASE(6) ! 跨中作用轴向集中力
FO(1)=-Q*B/BL
FO(4)=-Q*C1
END SELECT
END
! Form total joint load vector.
! 计算结构综合结点荷载列阵
SUBROUTINE JLP(NE,NJ,N,NP,NF,X,Y,IJ,JN,PJ,PF,P)
implicit none
INTEGER::NE,NJ,NP,NF,N ! 带入哑元
REAL::X(NJ),Y(NJ),PJ(NP,3),PF(NF,4) ! 带入哑元
INTEGER::IJ(NE,2),JN(NJ,3) ! 带入哑元
REAL::P(N) ! 带出哑元
REAL::BL,SI,CO,FO(6),PE(6) ! 中间变量
INTEGER::I,J,K,L,M,LV(6) ! 中间变量
P=0.0
! 生成直接结点荷载列阵
IF(NP.GT.0) THEN
DO I=1,NP
J=INT(PJ(I,1))
K=INT(PJ(I,2))
L=JN(J,K)
IF(L.NE.0) P(L)=PJ(I,3)
ENDDO
END IF
! 生成综合结点荷载列阵
IF(NF.GT.0) THEN
DO I=1,NF
! 计算整体坐标下的等效结点荷载
M=INT(PF(I,1))
CALL LSC(M,NE,NJ,X,Y,IJ,BL,SI,CO)
CALL EFF(I,PF,NF,BL,FO)
CALL ELV(M,NE,NJ,IJ,JN,LV)
PE(1)=-FO(1)*CO+FO(2)*SI
PE(2)=-FO(1)*SI-FO(2)*CO
PE(3)=-FO(3)
PE(4)=-FO(4)*CO+FO(5)*SI
PE(5)=-FO(4)*SI-FO(5)*CO
PE(6)=-FO(6)
! 生成综合结点荷载列阵
DO J=1,6
L=LV(J)
IF(L.NE.0) P(L)=P(L)+PE(J)
ENDDO
ENDDO
END IF
END
! Solution of simultaneous equations by the GAUSS elimination method.
! GAUSS消元法解线性代数方程组
SUBROUTINE GAUSS(A,B,N)
implicit none
INTEGER::N !带入哑元
REAL::A(N,N) !带入哑元
REAL::B(N) ! 由B(N)先带入常数项,后代出方程的解
REAL::A1 ! 中间变量
INTEGER::I,J,K ! 中间变量
DO K=1,N-1 ! 消元
DO I=K+1,N
A1=A(K,I)/A(K,K)
DO J=K+1,N
A(I,J)=A(I,J)-A1*A(K,J)
ENDDO
B(I)=B(I)-A1*B(K)
ENDDO
ENDDO
B(N)=B(N)/A(N,N)
DO I=N-1,1,-1 ! 回代
DO J=I+1,N
B(I)=B(I)-A(I,J)*B(J)
ENDDO
B(I)=B(I)/A(I,I)
ENDDO
END
! Print joint displacements.Calculate and print member-end forces of elements.
! 计算并输出单元结点位移和单元杆端力
SUBROUTINE MVN(NE,NJ,N,NF,E,X,Y,IJ,A,ZI,JN,PF,P)
USE KECALL
implicit none
REAL::E !带入哑元
INTEGER::NE,NJ,NF,N !带入哑元
REAL::X(NJ),Y(NJ),A(NE),ZI(NE),PF(NF,4),P(N) !带入哑元
INTEGER::IJ(NE,2),JN(NJ,3)
REAL::BL,SI,CO ! 中间变量
INTEGER::I,J,K,L,M,LV(6) ! 中间变量
REAL::FO(6),FD(6),T(6,6),EK(6,6) ! 中间变量
REAL::D(6) ! 中间变量,单元结点位移
REAL::F(6) ! 中间变量,单元杆端内力
! 输出整体坐标系下的结点位移,包括支座结点
WRITE(2,10)
10 FORMAT(//2x,'JOINT DISPLACEMENTS'/5x,'JOINT',18X,'u',18X,'v',18X,'ceta')
DO J=1,NJ
D=0.0
FORALL(I=1:3,JN(J,I)/=0)D(I)=P(JN(J,I))
WRITE(2,25),J,D(1),D(2),D(3)
25 FORMAT(2X,I6,4X,3E15.6)
ENDDO
WRITE(2,35)
35 FORMAT(/2X,'MEMBER-END FORCES OF ELEMENTS'/4X,'ELEMENT',13X,'N',24X,'V',24X,'M')
! 计算并输出局部坐标下的单元杆端力
! 提取局部坐标下的单元结点位移
DO M=1,NE
CALL LSC(M,NE,NJ,X,Y,IJ,BL,SI,CO)
CALL ESM(M,NE,E,A,ZI,BL,SI,CO,EK)
CALL ELV(M,NE,NJ,IJ,JN,LV)
DO I=1,6
L=LV(I)
D(I)=0.0
IF(L.NE.0) D(I)=P(L)
ENDDO
! 计算整体坐标下结点位移引起的单元杆端力
DO I=1,6
FD(I)=0.0
DO J=1,6
FD(I)=FD(I)+EK(I,J)*D(J)
ENDDO
ENDDO
! 计算局部坐标下结点位移引起的单元杆端力
F(1)=FD(1)*CO+FD(2)*SI
F(2)=-FD(1)*SI+FD(2)*CO
F(3)=FD(3)
F(4)=FD(4)*CO+FD(5)*SI
F(5)=-FD(4)*SI+FD(5)*CO
F(6)=FD(6)
! 叠加局部坐标下的单元固端力
IF(NF.GT.0) THEN
DO I=1,NF
L=INT(PF(I,1))
IF(M.EQ.L) THEN
CALL EFF(I,PF,NF,BL,FO)
DO J=1,6
F(J)=F(J)+FO(J)
ENDDO
END IF
ENDDO
END IF
! 输出局部坐标下的单元杆端力
WRITE(2,90) M,(F(I),I=1,6)
90 FORMAT(2x,I8,4X,'N1=',F12.4,3X,'V1=',F12.4,3X,'M1=',&
F12.4/14X,'N2=',F12.4,3X,'V2=',F12.4,3X,'M2=',F12.4)
ENDDO
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -