📄 atf1.f90
字号:
DV=W(igaus)*dl*0.5
CALL Shape_Function_T(nel,L,coren)
DO inode=1,NNODE(IELES(nel,MNODE+1))
SELECT CASE(nconp)
CASE(1)
rvece(3*inode-2)=rvece(3*inode-2) &
+(Rx(1)*L(1)+Rx(2)*L(2))*SHAPE_N_matrix(1,3*inode-2)*DV &
+(Ry(1)*L(1)+Ry(2)*L(2))*SHAPE_N_matrix(2,3*inode-2)*DV
rvece(3*inode-1)=rvece(3*inode-1) &
+(Rx(1)*L(1)+Rx(2)*L(2))*SHAPE_N_matrix(1,3*inode-1)*DV &
+(Ry(1)*L(1)+Ry(2)*L(2))*SHAPE_N_matrix(2,3*inode-1)*DV
rvece(3*inode)=rvece(3*inode) &
+(Rx(1)*L(1)+Rx(2)*L(2))*SHAPE_N_matrix(1,3*inode)*DV &
+(Ry(1)*L(1)+Ry(2)*L(2))*SHAPE_N_matrix(2,3*inode)*DV
CASE(2)
rvece(3*inode-2)=rvece(3*inode-2) &
+(Rx(1)*L(2)+Rx(2)*L(3))*SHAPE_N_matrix(1,3*inode-2)*DV &
+(Ry(1)*L(2)+Ry(2)*L(3))*SHAPE_N_matrix(2,3*inode-2)*DV
rvece(3*inode-1)=rvece(3*inode-1) &
+(Rx(1)*L(2)+Rx(2)*L(3))*SHAPE_N_matrix(1,3*inode-1)*DV &
+(Ry(1)*L(2)+Ry(2)*L(3))*SHAPE_N_matrix(2,3*inode-1)*DV
rvece(3*inode)=rvece(3*inode) &
+(Rx(1)*L(2)+Rx(2)*L(3))*SHAPE_N_matrix(1,3*inode)*DV &
+(Ry(1)*L(2)+Ry(2)*L(3))*SHAPE_N_matrix(2,3*inode)*DV
CASE(3)
rvece(3*inode-2)=rvece(3*inode-2) &
+(Rx(1)*L(3)+Rx(2)*L(1))*SHAPE_N_matrix(1,3*inode-2)*DV &
+(Ry(1)*L(3)+Ry(2)*L(1))*SHAPE_N_matrix(2,3*inode-2)*DV
rvece(3*inode-1)=rvece(3*inode-1) &
+(Rx(1)*L(3)+Rx(2)*L(1))*SHAPE_N_matrix(1,3*inode-1)*DV &
+(Ry(1)*L(3)+Ry(2)*L(1))*SHAPE_N_matrix(2,3*inode-1)*DV
rvece(3*inode)=rvece(3*inode) &
+(Rx(1)*L(3)+Rx(2)*L(1))*SHAPE_N_matrix(1,3*inode)*DV &
+(Ry(1)*L(3)+Ry(2)*L(1))*SHAPE_N_matrix(2,3*inode)*DV
END SELECT
END DO
DEALLOCATE(SHAPE_N_matrix)
END DO
DO ievab=1,MEVAB
eload(nel,ievab)=eload(nel,ievab)+rvece(ievab)
END DO
END SUBROUTINE LOADD_2D_PLANE_METHOD_3
!*============================================================================*!
!*S16. LOADG 功能: 二维平面单元(无旋转自由度)重力荷载 *!
!*============================================================================*!
SUBROUTINE LOADG(eload)
USE M0_PROBLEM_TYPE
USE M1_Gobal_information
USE M2_Local_information
USE M3_Stru_information
USE M4_Support_information
USE M5_Para_Gauss_Integral
USE M6_Matrix_Element
USE M8_Shape_Function
REAL*8, DIMENSION(NELEM,MEVAB) :: eload
REAL*8,DIMENSION(:),ALLOCATABLE:: rvece
REAL*8, DIMENSION(:,:),ALLOCATABLE:: coren
REAL*8, DIMENSION(3) :: L
REAL*8:: dense,djacb,DV,gx,gy,thick,theta,gravy,XX,YY
REAL*8:: GS1,GS2,GS3,GS4,A1,B3,C3
INTEGER:: nel,nty,nic,kg,j,m
INTEGER:: idime,ielem,igaus,ievab,inode,jgaus
ALLOCATE(rvece(MEVAB),coren(NDIME,MNODE))
WRITE(3,'(A)') ' -----------------------------------------------------------&
-----------'
READ(1,*) theta, gravy
WRITE(3,*) 'theta=', theta, ' gravy=',gravy
WRITE(3,'(A)') ' -----------------------------------------------------------&
-----------'
DO ielem=1,NELEM
nel=IELES(ielem,MNODE+1)
nty=IELES(ielem,MNODE+2)
thick=PROPS(nty,3)
dense=PROPS(nty,4)
IF(dense==0.0) CYCLE
gx= dense*gravy*SIN(theta)
gy=-dense*gravy*COS(theta)
rvece=0.0
DO inode=1,MNODE
nic=IELES(ielem,inode)
DO idime=1,NDIME
coren(idime,inode)=COORD(nic,idime)
END DO
END DO
SELECT CASE(ELESP(nel))
CASE(4)
CALL GAUSS_quadrilateral(NGAUS(nel))
DO igaus=1,NGAUS(nel)
DO jgaus=1,NGAUS(nel)
XX=POSGP(igaus)
YY=POSGP(jgaus)
CALL Shape_Function_Q(ielem,XX,YY,coren)
kg=1
SELECT CASE(ELMOD(nel))
CASE(1:2)
CALL JACOBI_2or3_DIMENSION(ielem,djacb,kg,coren)
CASE(3:4)
CALL JACOBI_FOR_AREA_COODINATE(ielem,djacb,kg,coren)
END SELECT
DV=djacb*WEIGP(igaus)*WEIGP(jgaus)
IF(thick/=0.0) DV=DV*thick
DO inode=1,NNODE(nel)
rvece(2*inode-1)=rvece(2*inode-1)+gx*SHAPE_N(inode)*DV
rvece(2*inode) =rvece(2*inode) +gy*SHAPE_N(inode)*DV
END DO
DEALLOCATE(SHAPE_N,DERIV_N,CORGP,CARTD)
END DO
END DO
CASE(3)
CALL GAUSS_triangular(NGAUS(nel))
GS1=POSGP(1);GS2=POSGP(2);GS3=POSGP(3);GS4=POSGP(4)
A1=WEIGP(1) ; B3=WEIGP(2) ; C3=WEIGP(3)
kg=1
IF(A1/=0.0) THEN
L=1.0/3.0
CALL Shape_Function_T(ielem,L,coren)
CALL JACOBI_2or3_DIMENSION(ielem,djacb,kg,coren)
DV=djacb*A1
IF(thick/=0.0) DV=DV*thick
DO inode=1,NNODE(nel)
rvece(2*inode-1)=rvece(2*inode-1)+gx*SHAPE_N(inode)*DV
rvece(2*inode) =rvece(2*inode) +gy*SHAPE_N(inode)*DV
END DO
DEALLOCATE(SHAPE_N,DERIV_N,CORGP,CARTD)
END IF
IF(B3/=0.0) THEN
DO igaus=1, 3
SELECT CASE(igaus)
CASE(1)
L(1)=GS1; L(2)=GS1; L(3)=GS2
CASE(2)
L(1)=GS1; L(2)=GS2; L(3)=GS1
CASE(3)
L(1)=GS2; L(2)=GS1; L(3)=GS1
END SELECT
CALL Shape_Function_T(ielem,L,coren)
CALL JACOBI_2or3_DIMENSION(ielem,djacb,kg,coren)
DV=djacb*B3
IF(thick/=0.0) DV=DV*thick
DO inode=1,NNODE(nel)
rvece(2*inode-1)=rvece(2*inode-1)+gx*SHAPE_N(inode)*DV
rvece(2*inode) =rvece(2*inode) +gy*SHAPE_N(inode)*DV
END DO
DEALLOCATE(SHAPE_N,DERIV_N,CORGP,CARTD)
END DO
END IF
IF(C3/=0.0) THEN
DO igaus=1, 3
SELECT CASE(igaus)
CASE(1)
L(1)=GS3; L(2)=GS3; L(3)=GS4
CASE(2)
L(1)=GS3; L(2)=GS4; L(3)=GS3
CASE(3)
L(1)=GS4; L(2)=GS3; L(3)=GS3
END SELECT
CALL Shape_Function_T(ielem,L,coren)
CALL JACOBI_2or3_DIMENSION(ielem,djacb,kg,coren)
DV=djacb*C3
IF(thick/=0.0) DV=DV*thick
DO inode=1,NNODE(nel)
rvece(2*inode-1)=rvece(2*inode-1)+gx*SHAPE_N(inode)*DV
rvece(2*inode) =rvece(2*inode) +gy*SHAPE_N(inode)*DV
END DO
DEALLOCATE(SHAPE_N,DERIV_N,CORGP,CARTD)
END DO
END IF
END SELECT
DO ievab=1,MEVAB
eload(ielem,ievab)=eload(ielem,ievab)+rvece(ievab)
END DO
DEALLOCATE(POSGP,WEIGP)
END DO
DEALLOCATE(rvece,coren)
END SUBROUTINE LOADG
!*============================================================================*!
!*S17. LOADD_2D_Plate 功能: 二维板弯曲单元均布荷载 *!
!*============================================================================*!
SUBROUTINE LOADD_2D_Plate(eload)
USE M0_PROBLEM_TYPE
USE M1_Gobal_information
USE M2_Local_information
USE M3_Stru_information
USE M5_Para_Gauss_Integral
USE M6_Matrix_Element
USE M8_Shape_Function
REAL*8, DIMENSION(NELEM,MEVAB):: eload
INTEGER,DIMENSION(:), ALLOCATABLE:: noprs
INTEGER::ipart,ielem
INTEGER::ntp,nelef,nelel,nqpart
REAL*8 ::q
READ(1,*) nqpart
WRITE(3,*) ' *There are ',nqpart,' element groups under uniform loadings.'
IF(nqpart>0) THEN
WRITE(3,'(A)') ' -----------------------------------------------------------&
-----------'
DO ipart=1,nqpart
READ(1,*) nelef,nelel,q
WRITE(3,*) ' *The No.', ipart, ' uniform loading from element',nelef,' to',nelel
WRITE(3,*) ' and the loading q=',q
DO ielem=nelef, nelel
ntp=IELES(ielem,MNODE+1)
SELECT CASE(ELESP(ntp))
CASE(3)
CALL LOADD_2D_PLATE_T(ielem,q,eload)
CASE(4)
CALL LOADD_2D_PLATE_Q(ielem,q,eload)
END SELECT
END DO
END DO
END IF
WRITE(3,'(A)') ' -----------------------------------------------------------&
-----------'
END SUBROUTINE LOADD_2D_Plate
!*============================================================================*!
!*S18. LOADD_2D_PLATE_T 功能: 二维三角形板单元均布荷载 *!
!*============================================================================*!
SUBROUTINE LOADD_2D_PLATE_T(nel,q,eload)
USE M0_PROBLEM_TYPE
USE M1_Gobal_information
USE M2_Local_information
USE M3_Stru_information
USE M5_Para_Gauss_Integral
USE M6_Matrix_Element
USE M8_Shape_Function
REAL*8, DIMENSION(MEVAB) :: rvece
REAL*8, DIMENSION(NDIME,MNODE):: coren
REAL*8, DIMENSION(NELEM,MEVAB):: eload
REAL*8,DIMENSION(3):: L
REAL*8 :: q,A1,B3,C3,GS1,GS2,GS3,GS4,DV,djacb
INTEGER:: kg,nel,etp,nic
INTEGER:: idime,inode,igaus,ievab
etp=IELES(nel,MNODE+1)
DO inode=1,MNODE
nic=IELES(nel,inode)
DO idime=1,NDIME
IF(nic/=0) coren(idime,inode)=COORD(nic,idime)
END DO
END DO
CALL GAUSS_triangular(NGAUS(etp))
GS1=POSGP(1);GS2=POSGP(2);GS3=POSGP(3);GS4=POSGP(4)
A1=WEIGP(1) ; B3=WEIGP(2) ; C3=WEIGP(3)
rvece=0.0; kg=0
IF(A1/=0.0) THEN
L=1.0/3.0
kg=kg+1
CALL Shape_Function_T(nel,L,coren)
CALL JACOBI_2or3_DIMENSION(nel,djacb,kg,coren)
DV=0.5*djacb*A1
rvece=rvece+DV*q*SHAPE_N
DEALLOCATE(SHAPE_N,DERIV_N,CORGP,CARTD)
END IF
IF(B3/=0.0) THEN
DO igaus=1,3
kg=kg+1
SELECT CASE(igaus)
CASE(1)
L(1)=GS1; L(2)=GS1; L(3)=GS2
CASE(2)
L(1)=GS1; L(2)=GS2; L(3)=GS1
CASE(3)
L(1)=GS2; L(2)=GS1; L(3)=GS1
END SELECT
CALL Shape_Function_T(nel,L,coren)
CALL JACOBI_2or3_DIMENSION(nel,djacb,kg,coren)
DV=0.5*djacb*B3
rvece=rvece+DV*q*SHAPE_N
DEALLOCATE(SHAPE_N,DERIV_N,CORGP,CARTD)
END DO
END IF
IF(C3/=0.0) THEN
DO igaus=1,3
kg=kg+1
SELECT CASE(igaus)
CASE(1)
L(1)=GS3; L(2)=GS3; L(3)=GS4
CASE(2)
L(1)=GS3; L(2)=GS4; L(3)=GS3
CASE(3)
L(1)=GS4; L(2)=GS3; L(3)=GS3
END SELECT
CALL Shape_Function_T(nel,L,coren)
CALL JACOBI_2or3_DIMENSION(nel,djacb,kg,coren)
DV=0.5*djacb*C3
rvece=rvece+DV*q*SHAPE_N
DEALLOCATE(SHAPE_N,DERIV_N,CORGP,CARTD)
END DO
END IF
DO ievab=1,NEVAB(etp)
eload(nel,ievab)=eload(nel,ievab)+rvece(ievab)
END DO
DEALLOCATE(POSGP,WEIGP)
END SUBROUTINE LOADD_2D_PLATE_T
!*============================================================================*!
!*S19. LOADD_2D_PLATE_Q 功能: 二维四边形板单元均布荷载 *!
!*============================================================================*!
SUBROUTINE LOADD_2D_PLATE_Q(nel,q,eload)
USE M0_PROBLEM_TYPE
USE M1_Gobal_information
USE M2_Local_information
USE M3_Stru_information
USE M5_Para_Gauss_Integral
USE M6_Matrix_Element
USE M8_Shape_Function
REAL*8, DIMENSION(:),ALLOCATABLE:: rvece !(MEVAB)
REAL*8, DIMENSION(NDIME,MNODE):: coren
REAL*8, DIMENSION(NELEM,MEVAB):: eload
REAL*8 :: q,S,T,djacb
INTEGER:: kg,nel,nic,etp
INTEGER:: inode,idime,igaus,jgaus,ievab,jdofn
etp=IELES(nel,MNODE+1)
ALLOCATE(rvece(NEVAB(etp)))
DO inode=1,MNODE
nic=IELES(nel,inode)
DO idime=1,NDIME
IF(nic/=0) coren(idime,inode)=COORD(nic,idime)
END DO
END DO
CALL GAUSS_quadrilateral(NGAUS(etp))
rvece=0.0; kg=0
DO igaus=1,NGAUS(etp)
DO jgaus=1,NGAUS(etp)
kg=kg+1
S=POSGP(igaus);T=POSGP(jgaus)
CALL Shape_Function_Q(nel,S,T,coren)
CALL JACOBI_2or3_DIMENSION(nel,djacb,kg,coren)
rvece=rvece+djacb*WEIGP(igaus)*WEIGP(jgaus)*q*SHAPE_N
DEALLOCATE(SHAPE_N,DERIV_N,CORGP,CARTD)
END DO
END DO
DO ievab=1,NEVAB(etp)
SELECT CASE(TYPE2)
CASE(3)
eload(nel,ievab)=eload(nel,ievab)+rvece(ievab)
CASE(4)
eload(nel,ievab)=eload(nel,ievab)+rvece(ievab)
END SELECT
END DO
DEALLOCATE(POSGP,WEIGP,rvece)
END SUBROUTINE LOADD_2D_PLATE_Q
!*============================================================================*!
!*S20. LOADD_2D_Composite_Plate 功能: 层合板单元面内边界分布与横向均布荷载 *!
!*============================================================================*!
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -