14 type(hecmwst_local_mesh) :: hecMESH
15 type(hecmwst_matrix) :: hecMAT
18 integer(kind=kint) :: N, NP, NDOF, NNDOF, NPNDOF
19 integer(kind=kint) :: i, j, k, in, jn, nget
20 real(kind=kreal) :: chk, gm
21 real(kind=kreal),
allocatable :: s(:), t(:), u(:), r(:)
22 real(kind=kreal),
pointer :: mass(:), eigval(:), eigvec(:,:)
32 eigval => fstreig%eigval
33 eigvec => fstreig%eigvec
35 allocate(fstreig%effmass(ndof*nget))
36 allocate(fstreig%partfactor(ndof*nget))
41 fstreig%effmass = 0.0d0
42 fstreig%partfactor = 0.0d0
50 r(k) = r(k) + mass(in)*eigvec(in,i)
51 gm = gm + mass(in)*eigvec(in,i)*eigvec(in,i)
55 call hecmw_allreduce_r(hecmesh, r, ndof, hecmw_sum)
56 call hecmw_allreduce_r1(hecmesh, gm, hecmw_sum)
61 fstreig%partfactor(in) = gm*r(j)
62 fstreig%effmass(in) = gm*r(j)*r(j)
66 call eglist(hecmesh, hecmat, fstreig)
70 write(
imsg,*)
'*----------------------------------------------*'
71 write(
imsg,*)
'*--E I G E N V A L U E C O N V E R G E N C E--*'
72 write(
imsg,*)
'Absolute residual = |(||Kx - lambda*Mx||)|'
73 write(
imsg,*)
' Iter.# Eigenvalue Abs. Residual '
74 write(
ilog,*)
' Iter.# Eigenvalue Abs. Residual '
75 write(
imsg,*)
' *-----* *---------* *--------------*'
78 do j = 1, fstreig%nget
86 s(i) = mass(i)*eigvec(i,j)
91 chk = chk + (t(i) - (eigval(j)-fstreig%sigma)*s(i))**2
93 call hecmw_allreduce_r1(hecmesh, chk, hecmw_sum)
97 write(
imsg,
'(2x,i5,2x,1p5e15.6)') j, eigval(j), chk
98 write(
ilog,
'(i5,1p5e12.4)') j, eigval(j), chk
103 write(
imsg,*)
'* ---END Eigenvalue listing--- *'
120 type(hecmwst_result_data) :: fstrRESULT
122 integer(kind=kint) :: i, istep, nget, NP, NDOF, NPNDOF, totalmpc, MPC_METHOD
123 real(kind=
kreal) :: t1
124 real(kind=
kreal),
pointer :: eigvec(:,:)
125 real(kind=
kreal),
allocatable :: x(:), egval(:)
126 real(kind=
kreal),
allocatable :: disp3(:), rot3(:)
127 character(len=HECMW_HEADER_LEN) :: header
128 character(len=HECMW_MSG_LEN) :: comment
129 character(len=HECMW_NAME_LEN) :: label
130 character(len=HECMW_NAME_LEN) :: nameID
135 npndof = hecmat%NP*hecmat%NDOF
139 eigvec => fstreig%eigvec
146 egval(1) = fstreig%eigval(istep)
148 x(i) = eigvec(i,istep)
162 call hecmw_update_r(hecmesh, x, hecmat%NP, ndof)
171 allocate(disp3(np*3))
176 disp3((i-1)*3+1:(i-1)*3+3) = x((i-1)*ndof+1:(i-1)*ndof+3)
177 rot3((i-1)*3+1:(i-1)*3+3) = x((i-1)*ndof+4:(i-1)*ndof+6)
182 header =
"*fstrresult"
183 comment =
"eigen_result"
184 call hecmw_result_init(hecmesh,istep,header,comment)
186 call hecmw_result_add(hecmw_result_dtype_global,1,label,egval)
188 label =
"DISPLACEMENT"
189 call hecmw_result_add(hecmw_result_dtype_node,3,label,disp3)
191 call hecmw_result_add(hecmw_result_dtype_node,3,label,rot3)
193 label =
"DISPLACEMENT"
194 call hecmw_result_add(hecmw_result_dtype_node,ndof,label,x)
197 call hecmw_result_write_by_name(nameid)
198 call hecmw_result_finalize
202 call hecmw_nullify_result_data(fstrresult)
203 fstrresult%ng_component = 1
204 fstrresult%ne_component = 0
205 allocate(fstrresult%ng_dof(1))
206 allocate(fstrresult%global_label(1))
207 allocate(fstrresult%global_val_item(1))
208 fstrresult%ng_dof(1) = 1
209 fstrresult%global_label(1) =
'EIGENVALUE'
210 fstrresult%global_val_item(1) = egval(1)
212 fstrresult%nn_component = 2
213 allocate(fstrresult%nn_dof(2))
214 allocate(fstrresult%node_label(2))
215 allocate(fstrresult%node_val_item(6*np))
216 fstrresult%nn_dof(1) = 3
217 fstrresult%nn_dof(2) = 3
218 fstrresult%node_label(1) =
'DISPLACEMENT'
219 fstrresult%node_label(2) =
'ROTATION'
221 fstrresult%node_val_item((i-1)*6+1:(i-1)*6+3) = disp3((i-1)*3+1:(i-1)*3+3)
222 fstrresult%node_val_item((i-1)*6+4:(i-1)*6+6) = rot3((i-1)*3+1:(i-1)*3+3)
225 fstrresult%nn_component = 1
226 allocate(fstrresult%nn_dof(1))
227 allocate(fstrresult%node_label(1))
228 allocate(fstrresult%node_val_item(ndof*np))
229 fstrresult%nn_dof(1) = ndof
230 fstrresult%node_label(1) =
'DISPLACEMENT'
231 fstrresult%node_val_item = x
234 call hecmw_visualize_init
235 call hecmw_visualize( hecmesh, fstrresult, istep )
236 call hecmw_visualize_finalize
238 call hecmw_result_free(fstrresult)
252 subroutine eglist(hecMESH, hecMAT, fstrEIG)
261 integer(kind=kint) :: NDOF
262 integer(kind=kint) :: i, j, in, iter ,nget
263 real(kind=
kreal) :: pi, angle, freq, pf(3), em(3)
264 real(kind=
kreal),
pointer :: eigval(:)
269 pi = 4.0d0 * datan(1.0d0)
270 eigval => fstreig%eigval
274 write(
ilog,
"(a)")
"********************************"
275 write(
ilog,
"(a)")
"*RESULT OF EIGEN VALUE ANALYSIS*"
276 write(
ilog,
"(a)")
"********************************"
278 write(
ilog,
"(a,i8)")
"NUMBER OF ITERATIONS = ",iter
279 write(
ilog,
"(a,1pe12.4)")
"TOTAL MASS = ",fstreig%totalmass
281 write(
ilog,
"(3a)")
" ANGLE FREQUENCY ",&
282 "PARTICIPATION FACTOR EFFECTIVE MASS"
283 write(
ilog,
"(3a)")
" NO. EIGENVALUE FREQUENCY (HZ) ",&
285 write(
ilog,
"(3a)")
" --- ---------- ---------- ---------- ",&
286 "---------- ---------- ---------- ---------- ---------- ----------"
288 write(*,
"(a)")
"#----------------------------------#"
289 write(*,
"(a)")
"# RESULT OF EIGEN VALUE ANALYSIS #"
290 write(*,
"(a)")
"#----------------------------------#"
292 write(*,
"(a,i8)")
"### NUMBER OF ITERATIONS = ",iter
293 write(*,
"(a,1pe12.4)")
"### TOTAL MASS = ",fstreig%totalmass
295 write(*,
"(3a)")
" PERIOD FREQUENCY ",&
296 "PARTICIPATION FACTOR EFFECTIVE MASS"
297 write(*,
"(3a)")
" NO. [Sec] [HZ] ",&
299 write(*,
"(3a)")
" --- --------- --------- ",&
300 "--------- --------- --------- --------- --------- ---------"
305 if(eigval(i) < 0.0d0) eigval(i) = 0.0d0
306 angle = dsqrt(eigval(i))
307 freq = angle*0.5d0/pi
311 do j = 1, min(ndof, 3)
312 pf(j) = fstreig%partfactor(ndof*(i-1) + j)
313 em(j) = fstreig%effmass(ndof*(i-1) + j)
316 write(
ilog,
'(I5,1P9E12.4)') in, eigval(i), angle, freq, pf(1), pf(2), pf(3), em(1), em(2), em(3)
317 write(* ,
'(I5,1P8E11.3)') in, 1.0d0/freq, freq, pf(1), pf(2), pf(3), em(1), em(2), em(3)
subroutine, public hecmw_matvec(hecMESH, hecMAT, X, Y, COMMtime)
integer(kind=4), parameter kreal
subroutine fstr_eigen_make_result(hecMESH, hecMAT, fstrEIG, fstrRESULT)
subroutine fstr_eigen_output(hecMESH, hecMAT, fstrEIG)
subroutine eglist(hecMESH, hecMAT, fstrEIG)
Output eigenvalues and vectors.
This module defines common data and basic structures for analysis.
integer(kind=kint), pointer iresult
integer(kind=kint) myrank
PARALLEL EXECUTION.
integer(kind=kint), parameter imsg
integer(kind=kint), parameter ilog
FILE HANDLER.
integer(kind=kint), pointer ivisual
HECMW to FSTR Mesh Data Converter. Converting Connectivity of Element Type 232, 342 and 352.
subroutine fstr2hecmw_mesh_conv(hecMESH)
subroutine hecmw2fstr_mesh_conv(hecMESH)
Package of data used by Lanczos eigenvalue solver.