CalculiX  2.13
A Free Software Three-Dimensional Structural Finite Element Program
coriolissolve.f File Reference

Go to the source code of this file.

Functions/Subroutines

subroutine coriolissolve (cc, nev, a, b, x, eiga, eigb, eigcorio, iter, d, temp)
 

Function/Subroutine Documentation

◆ coriolissolve()

subroutine coriolissolve ( real*8, dimension(nev,*)  cc,
integer  nev,
complex*16, dimension(nev,*)  a,
complex*16, dimension(nev,*)  b,
complex*16, dimension(nev,*)  x,
complex*16, dimension(*)  eiga,
complex*16, dimension(*)  eigb,
complex*16, dimension(*)  eigcorio,
integer, dimension(*)  iter,
real*8, dimension(*)  d,
complex*16, dimension(nev,*)  temp 
)
21 !
22 ! solves for the complex eigenfrequencies due to Coriolis
23 ! forces
24 !
25  implicit none
26 !
27  logical wantx
28 !
29  integer nev,iter(*),n,i,j,k,l,m,iii,ksmall,nincrement,
30  & nevcomplex,
31  & ninc,id,ipos
32 !
33  real*8 cc(nev,*),d(*),size
34 !
35  complex*16 a(nev,*),b(nev,*),x(nev,*),eiga(*),eigb(*),eigcorio(*),
36  & temp(nev,*),deig,eig,eignew
37 !
38  n=nev
39  wantx=.false.
40  nincrement=10
41  nevcomplex=0
42  ninc=2
43  ipos=0
44 !
45 ! loop over all modes
46 !
47  loop2: do i=1,nev
48  if(d(i).lt.0.d0) cycle
49 !
50 ! initial values are taken at regular intervals between
51 ! the eigenvalues without Coriolis
52 !
53  loop1: do m=1,nincrement
54 !
55 ! initial frequency
56 !
57  if(ipos.eq.0) then
58  eig=dsqrt(d(i))*(1.d0,0.d0)*m/nincrement
59  else
60  eig=(dsqrt(d(i-1))+
61  & (dsqrt(d(i))-dsqrt(d(i-1)))*m/nincrement)*(1.d0,0.d0)
62  endif
63 !
64  iii=0
65  do
66  do k=1,nev
67  do l=1,nev
68  a(k,l)=eig*cc(k,l)*(0.d0,1.d0)
69  b(k,l)=-cc(k,l)*(0.d0,1.d0)
70  enddo
71  a(k,k)=a(k,k)-eig*eig+d(k)
72  b(k,k)=b(k,k)+2.d0*eig
73  enddo
74 !
75 ! solving for the complex eigenvalues
76 !
77  call dlzhes(n,a,n,b,n,temp,n,wantx)
78  call dlzit(n,a,n,b,n,temp,n,wantx,iter,eiga,eigb)
79 !
80  if(iter(1).eq.-1) then
81  write(*,*) '*ERROR in coriolissolve: fatal error'
82  write(*,*) ' in dlzit'
83  call exit(201)
84  elseif(cdabs(eigb(1)).lt.1.d-10) then
85  write(*,*) '*ERROR in coriolissolve: eigenvalue'
86  write(*,*) ' out of bounds'
87  deig=0.
88  else
89  size=1.d30
90  do k=1,nev
91  deig=eiga(k)/eigb(k)
92  if(cdabs(deig).lt.size) then
93  ksmall=k
94  size=cdabs(deig)
95  endif
96  enddo
97  deig=eiga(ksmall)/eigb(ksmall)
98  endif
99  iii=iii+1
100 c write(*,*) 'coriolissolve ',iii,eig
101 !
102  if((cdabs(deig).lt.1.d-3*cdabs(eig)).or.
103  & (cdabs(deig).lt.1.d-3).or.(iii.eq.100)) then
104 c write(*,*) 'csolve ',i,m,(eig+deig)
105 !
106  id=0
107  eignew=eig+deig
108 !
109  if((i.ne.1).or.(m.ne.1)) then
110  call ident2(eigcorio,eignew,nevcomplex,ninc,id)
111  if(id.ne.0) then
112  if((cdabs(eignew-eigcorio(id)).lt.
113  & 2.d-3*cdabs(eignew)).or.
114  & (cdabs(eignew).lt.1.d-3)) cycle loop1
115  endif
116  if(id.ne.nevcomplex) then
117  if((cdabs(eignew-eigcorio(id+1)).lt.
118  & 2.d-3*cdabs(eignew)).or.
119  & (cdabs(eignew).lt.1.d-3)) cycle loop1
120  endif
121  endif
122 !
123 ! solve for the eigenvalues AND eigenvectors
124 !
125  do k=1,nev
126  do l=1,nev
127  a(k,l)=eig*cc(k,l)*(0.d0,1.d0)
128  b(k,l)=-cc(k,l)*(0.d0,1.d0)
129  enddo
130  a(k,k)=a(k,k)-eig*eig+d(k)
131  b(k,k)=b(k,k)+2.d0*eig
132  enddo
133  wantx=.true.
134  call dlzhes(n,a,n,b,n,temp,n,wantx)
135  call dlzit(n,a,n,b,n,temp,n,wantx,iter,eiga,eigb)
136 !
137 ! copying the eigenvector into the right place
138 !
139  nevcomplex=nevcomplex+1
140 !
141  do k=nevcomplex,id+2,-1
142  eigcorio(k)=eigcorio(k-1)
143  do j=1,nev
144  x(j,k)=x(j,k-1)
145  enddo
146  enddo
147 !
148  do j=1,nev
149  x(j,id+1)=temp(j,ksmall)
150  enddo
151  eigcorio(id+1)=eignew
152 !
153  if(nevcomplex.eq.nev) exit loop2
154  exit
155  else
156  eig=eig+deig
157  endif
158 !
159  enddo
160  enddo loop1
161  ipos=1
162  enddo loop2
163 !
164  return
subroutine dlzhes(N, A, NA, B, NB, X, NX, WANTX)
Definition: dlz.f:7
subroutine ident2(x, px, n, ninc, id)
Definition: ident2.f:27
subroutine dlzit(N, A, NA, B, NB, X, NX, WANTX, ITER, EIGA, EIGB)
Definition: dlz.f:161
Hosted by OpenAircraft.com, (Michigan UAV, LLC)