character(len=2): :c
real(rkind)::x
integer(ikind) ::n,b,ij
i=il
X=l
, (L2)oo"
x=log lO(x)
n=int(x:计2
doj=n-2,0,-1
b=mod(i, IO**j)
lFC;-b)l(1 0拿勺)
i=i-b气lO**j)
c(n-j -l : n 于 l)=ach叫iachar('O')+b)
enddo
end 也llctlon ltOC
subroutine Gauss(GStif,GLoad,GDisp)
real (rkind),intent (in):: GStif(: ,:),GLoad(:)
real (rkind),intent (out) :: GDisp(:)
i.llteger (ikind) :: ij ,k
mteg町 (ikind) :: N
real (rkind) :: P,Il,X ,Y
real (rki.r.l哟, allocatable :
N=size(GDisp,di.r.n= l)
allocate (A(N,N+ 1))
A(1 :N,1 :N)=GStif( 1 :N, I:N)
A( l ,N,N+ l }=GLo,d( l ,N)
00 j= I,N
P=O.ODO
: A(:,:)
OO k=j ,N
IF(ABS(A(kj )).LE.P) 'yde
P~AB S (A(kj ))
Il=k
enddo
IF(P.GE.I E-15)GO TO 230
WRITE (22 ,'(A川、m UNIQUE SOLUTION'
RETURN
IF(Il.EQ.j)GO TO 280
00 270 K=J,N+l
X~A(J , K)
A(J,K)ooAOl ,K)
AOl ,K)ooX
Y= I .DO/A(J,J)
00 310 K=J,N+l
230
270
280
5
3 10
A(J,K)二Y拿A(J, K)
DO 380 I= l ,N
lF(lEQ .J)GO TO 380
Y~-A(I月
DO 370 K=J,N+ 1
A(I,K)~A(I ,K)+Y'A(J , K)
370
380
390 enddo
CONllNUE
GDisp=A(l :N,N+ l )
end subroutine Gauss
end module Lxz Tools
2 : TypeDef . f90
include 'Lxz Tool5 . f90'
皿。 dule TypeDef
use Lxz Tools
implici t none
integer(ikind) , par皿et 盯
NDOF=6 ,阳。 de =2
type : : typ_Joint
X, Y, Z
real (rkind)
integer(ikind)
end type typ_Joint
GDOF(NDOF)
JointNo(阳。 de)
type : : typ_Element
integer (ikind)
real {rkind} : El y, Elz, EA, Glp, Length, CosA, CosB, CosC, A
real (rkind} : :EK (NDOF*阳ode , NDOF*NNode} , ET (NDOF*NNode , NDOF*阳ode}
integer(ikind) : :GlbDOF (NDOF*NNode)
real {rkind} : :EForce(NDOF*NNode) , ELForce (NDOF*NNode}
end type typ_Element
type: : typ_JointLoad
integer(ikind): :JointNo, LodDOF
real {rkind} : : LodVal
end type typ_JointLoad
type: : typ_ElemLoad
lnteger 归 kind) : : Ele~~o, Indx
real {rkind) : :Pos, LodVal
end type typ_ElemLoad
6
contalns
subroutine Set E le皿Pro p ( Elem, ]oint )
type (typ_Element ) , int ent ( inout ) : :E lem ( : )
type (typ_]oint ) , intent (i n) : : ]oint ( :)
integer (ikind)
i , E]1 , E]2
real (rkind) : : T (3, 3) , x, y, z
real (rkind)
do i =1, size (Elem)
: CX , cy, cz , cs , ca, sa
Elem (i )实主 K= zero;Elem ( i )%ET= zero;T= zero
E]l =Elem (i )%]ointNo ( l ) ;E]2=Elem (i )%]ointNo (2)
Elem ( i ) %G lbDOF ( 1 : 6) =]oint (E]1 ) 如回F (o)
Elem ( i ) %GlbDOF (7 : 12) =]oint (E]2) %GDOF ( : )
x=]oint (E]2)%X- ]oint (E] I )%X
y=]oint (E]2)%Y- ]oint (E] I )%Y
z=]oint (E]2)%Z- ]oint (E]1 )%Z
Elem ( i )%Length=sQrt (x**2+y**2+z**2)
Elem ( i ) %CosA=x! Elem (i )%Length
Elem ( i ) %CosB=y! Elem (i )%Length
Elem ( i ) %CosC=z! Elem (i )%Length
cx = Elem ( i ) %C osA;c y= Elem ( i ) 旺。 sB;cz = Elem ( i )%CosC
ca=cos (Elem ( i) %A) ; sa=sin (Elem ( i) %A)
cs = sQrt ( cx料 2+c y材 2)
i f (cs . NE. zero) then
T(l, 1) =cx; T(l, 2) =c y; T(l, 3) =cz
T (2, 1) =- (ca*cy+sa*cx*cz ) ! cs;
T (2, 2) = (ca*cx- sa*cy*cz ) ! cs
T (2, 3) =cs*sa
T (3, 1) = (sa*cy- ca*cx*cz ) ! cs;
T (3, 2) =- (sa*cx+ca*cy*cz ) ! cs
T (3, 3) =cs*ca;
else
T(l, 3) =one;
T (2, 1) =-sa;T (2, 2) =ca
T (3, 1) =-ca;T (3, 2) =-sa;
end i f
Elem (i )%ET (1 : 3, 1 : 3) =T; Elem(i )%ET (4 : 6, 4 : 6) =T;
Elem (i )%ET (7 : 9, 7 :9) =T; Elem(i )%ET (l O: 12, 10 : 12) =T;
T=zero
T ( 1, 1) =Elem (i )%EA!Elem (i )%Length
T (2, 2) =12DO*Elem ( i )%Elz! (Elem ( i )%Lengt h**3)
T (3, 3) =12DO*Elem ( i )%El y! (Elem ( i )%Length**3)
Elem (i )%EK (l : 3, 1 : 3) =T
Elem (i )%王 K ( 7 , 9 , 7 , 9 ) =T
7
Elem ( i )%EK(1 : 3, 7 :9) =-T
Elem ( i )%EK(7 :9, 1 : 3) =transpose (- T)
T=zero
T (1 , l) =Elem ( 。 如 Ip/ E lem ( i )%Len gt h
T(2, 2) =4DO*Elem (i )%El y/ Elem ( i )%Length
T(3, 3) =4DO*Elem (i )%Elz/ Elem ( i )%Length
Elem ( i )%EK(4 :6, 4 :6) =T; Elem (i )%EK(10 : 12, 10 : 12) =T
T=zero
T(2, 3) =6DO*Elem (i )%Elz/ (Elem (i )%Length**2)
T(3, 2) =-6DO*Elem ( i )%El y/ (Elem ( i )%Length**2)
Elem (i )%EK (1 : 3, 4 :6) =T; Elem (i )%EK (1 : 3, 10 : 12) =T
Elem ( i )%EK(4 :6, 1 : 3) =transpose (T)
Elem ( i) %EK (1 0 : 12, 1 : 3) =transpose (T)
Elem ( i )%EK(7 :9, 10 : 12) =-T
Elem ( i) 实主 K ( 10 : 12 , 7: 9) =-transpose (T)
T=zero
T(2, 3) =6DO*Elem (i )%Ely/ (Elem (i )%Length**2)
T(3, 2) =-6DO*Elem ( i )%Elz/ (Elem ( i )%Length**2)
Elem (i )%王 K (4 , 6, 7 , 9 ) =T
Elem ( i )%EK(7 :9, 4 :6) =transpose (T)
T=zero
T ( I , l) =-E lem ( i )%Glp /Elem (i)%正 en g th
T(2, 2) =2DO*Elem (i )%El y/ Elem ( i )%Length
T(3, 3) =2DO*Elem (i )%Elz/ Elem ( i )%Length
Elem ( i )%EK(4 :6, 10 : 12) =T
Elem ( i )%EK(10 : 12, 4 : 6) =t ranspose (T)
!call mat print(Elem (i )%EK, 10)
? 盯 i te (1 6 ,的 E lem (i )%ET
? 盯 i t e (筝,叫
end do
end subroutine SetElemProp
end module TypeDef
3 : SolveDisp . f90
include 'TypeDef. f90'
皿。 dule Sol ve
use TypeDef
t ype
t yp_Kcol
real (rkind) , pointer
ro时)
end t ype t yp_Kcol
contalns
subrout ine Sol veDisp (GDisp, Elem, ]oint, GLoad)
8