⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 先处理法程序pff.f90.txt

📁 ! 平面杆系结构静力分析程序 ! 先处理法源程序 ! ! 主要功能和特点: ! 可调数组 ! 输入单元结点编号和结点位移编码; ! 先处理法形成总体刚度阵和结构综合结点荷载 ! 存储总刚上三角元素;
💻 TXT
📖 第 1 页 / 共 2 页
字号:
	         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 + -