14 type(hecmwst_local_mesh) :: hecMESH
15 type(hecmwst_matrix) :: hecMAT
18 integer(kind=kint) :: NNDOF, NPNDOF, i, j
19 real(kind=kreal) :: chk, shift
20 real(kind=kreal),
allocatable :: t(:), u(:)
22 nndof = hecmat%N *hecmat%NDOF
23 npndof = hecmat%NP*hecmat%NDOF
25 allocate(fstreig%resid(fstreig%nget))
31 if(fstreig%is_free) shift = fstreig%sigma
33 do j = 1, fstreig%nget
36 u(i) = fstreig%eigvec(i,j)
42 chk = chk + (t(i) - (fstreig%eigval(j) + shift)*fstreig%mass(i)*u(i))**2
44 call hecmw_allreduce_r1(hecmesh, chk, hecmw_sum)
45 fstreig%resid(j) = dsqrt(chk)
56 type(hecmwst_local_mesh) :: hecmesh
57 type(hecmwst_matrix) :: hecMAT
60 integer(kind=kint) :: N, NDOF
61 integer(kind=kint) :: i, j, k, in, nget
62 real(kind=kreal) :: gm
63 real(kind=kreal),
allocatable :: r(:)
64 real(kind=kreal),
pointer :: mass(:), eigval(:), eigvec(:,:)
71 eigval => fstreig%eigval
72 eigvec => fstreig%eigvec
74 allocate(fstreig%effmass(ndof*nget))
75 allocate(fstreig%partfactor(ndof*nget))
77 fstreig%effmass = 0.0d0
78 fstreig%partfactor = 0.0d0
86 r(k) = r(k) + mass(in)*eigvec(in,i)
87 gm = gm + mass(in)*eigvec(in,i)*eigvec(in,i)
91 call hecmw_allreduce_r(hecmesh, r, ndof, hecmw_sum)
92 call hecmw_allreduce_r1(hecmesh, gm, hecmw_sum)
97 fstreig%partfactor(in) = gm*r(j)
98 fstreig%effmass(in) = gm*r(j)*r(j)
102 call eglist(hecmesh, hecmat, fstreig)
106 write(
imsg,*)
'*----------------------------------------------*'
107 write(
imsg,*)
'*--E I G E N V A L U E C O N V E R G E N C E--*'
108 write(
imsg,*)
'Absolute residual = |(||Kx - lambda*Mx||)|'
109 write(
imsg,*)
' Iter.# Eigenvalue Abs. Residual '
110 write(
ilog,*)
' Iter.# Eigenvalue Abs. Residual '
111 write(
imsg,*)
' *-----* *---------* *--------------*'
114 do j = 1, fstreig%nget
116 write(
imsg,
'(2x,i5,2x,1p5e15.6)') j, eigval(j), fstreig%resid(j)
117 write(
ilog,
'(i5,1p5e12.4)') j, eigval(j), fstreig%resid(j)
122 write(
imsg,*)
'* ---END Eigenvalue listing--- *'
136 type(hecmwst_result_data) :: fstrRESULT
138 integer(kind=kint) :: i, istep, nget, NP, NDOF, NPNDOF, totalmpc, MPC_METHOD
139 real(kind=
kreal) :: t1
140 real(kind=
kreal),
pointer :: eigvec(:,:)
141 real(kind=
kreal),
allocatable :: x(:), egval(:)
142 real(kind=
kreal),
allocatable :: disp3(:), rot3(:)
143 character(len=HECMW_HEADER_LEN) :: header
144 character(len=HECMW_MSG_LEN) :: comment
145 character(len=HECMW_NAME_LEN) :: label
146 character(len=HECMW_NAME_LEN) :: nameID
151 npndof = hecmat%NP*hecmat%NDOF
155 eigvec => fstreig%eigvec
162 egval(1) = fstreig%eigval(istep)
164 x(i) = eigvec(i,istep)
178 call hecmw_update_r(hecmesh, x, hecmat%NP, ndof)
187 allocate(disp3(np*3))
192 disp3((i-1)*3+1:(i-1)*3+3) = x((i-1)*ndof+1:(i-1)*ndof+3)
193 rot3((i-1)*3+1:(i-1)*3+3) = x((i-1)*ndof+4:(i-1)*ndof+6)
198 header =
"*fstrresult"
199 comment =
"eigen_result"
200 call hecmw_result_init(hecmesh,istep,header,comment)
202 call hecmw_result_add(hecmw_result_dtype_global,1,label,egval)
204 label =
"DISPLACEMENT"
205 call hecmw_result_add(hecmw_result_dtype_node,3,label,disp3)
207 call hecmw_result_add(hecmw_result_dtype_node,3,label,rot3)
209 label =
"DISPLACEMENT"
210 call hecmw_result_add(hecmw_result_dtype_node,ndof,label,x)
213 call hecmw_result_write_by_name(nameid)
214 call hecmw_result_finalize
218 call hecmw_nullify_result_data(fstrresult)
219 fstrresult%ng_component = 1
220 fstrresult%ne_component = 0
221 allocate(fstrresult%ng_dof(1))
222 allocate(fstrresult%global_label(1))
223 allocate(fstrresult%global_val_item(1))
224 fstrresult%ng_dof(1) = 1
225 fstrresult%global_label(1) =
'EIGENVALUE'
226 fstrresult%global_val_item(1) = egval(1)
228 fstrresult%nn_component = 2
229 allocate(fstrresult%nn_dof(2))
230 allocate(fstrresult%node_label(2))
231 allocate(fstrresult%node_val_item(6*np))
232 fstrresult%nn_dof(1) = 3
233 fstrresult%nn_dof(2) = 3
234 fstrresult%node_label(1) =
'DISPLACEMENT'
235 fstrresult%node_label(2) =
'ROTATION'
237 fstrresult%node_val_item((i-1)*6+1:(i-1)*6+3) = disp3((i-1)*3+1:(i-1)*3+3)
238 fstrresult%node_val_item((i-1)*6+4:(i-1)*6+6) = rot3((i-1)*3+1:(i-1)*3+3)
241 fstrresult%nn_component = 1
242 allocate(fstrresult%nn_dof(1))
243 allocate(fstrresult%node_label(1))
244 allocate(fstrresult%node_val_item(ndof*np))
245 fstrresult%nn_dof(1) = ndof
246 fstrresult%node_label(1) =
'DISPLACEMENT'
247 fstrresult%node_val_item = x
250 call hecmw_visualize_init
251 call hecmw_visualize( hecmesh, fstrresult, istep )
252 call hecmw_visualize_finalize
254 call hecmw_result_free(fstrresult)
268 subroutine eglist(hecMESH, hecMAT, fstrEIG)
277 integer(kind=kint) :: NDOF
278 integer(kind=kint) :: i, j, in, iter ,nget
279 real(kind=
kreal) :: pi, angle, freq, pf(3), em(3)
280 real(kind=
kreal),
pointer :: eigval(:)
285 pi = 4.0d0 * datan(1.0d0)
286 eigval => fstreig%eigval
290 write(
ilog,
"(a)")
"********************************"
291 write(
ilog,
"(a)")
"*RESULT OF EIGEN VALUE ANALYSIS*"
292 write(
ilog,
"(a)")
"********************************"
294 write(
ilog,
"(a,i8)")
"NUMBER OF ITERATIONS = ",iter
295 write(
ilog,
"(a,1pe12.4)")
"TOTAL MASS = ",fstreig%totalmass
297 write(
ilog,
"(3a)")
" ANGLE FREQUENCY ",&
298 "PARTICIPATION FACTOR EFFECTIVE MASS"
299 write(
ilog,
"(3a)")
" NO. EIGENVALUE FREQUENCY (HZ) ",&
301 write(
ilog,
"(3a)")
" --- ---------- ---------- ---------- ",&
302 "---------- ---------- ---------- ---------- ---------- ----------"
304 write(*,
"(a)")
"#----------------------------------#"
305 write(*,
"(a)")
"# RESULT OF EIGEN VALUE ANALYSIS #"
306 write(*,
"(a)")
"#----------------------------------#"
308 write(*,
"(a,i8)")
"### NUMBER OF ITERATIONS = ",iter
309 write(*,
"(a,1pe12.4)")
"### TOTAL MASS = ",fstreig%totalmass
311 write(*,
"(3a)")
" PERIOD FREQUENCY ",&
312 "PARTICIPATION FACTOR EFFECTIVE MASS"
313 write(*,
"(3a)")
" NO. [Sec] [HZ] ",&
315 write(*,
"(3a)")
" --- --------- --------- ",&
316 "--------- --------- --------- --------- --------- ---------"
321 if(eigval(i) < 0.0d0) eigval(i) = 0.0d0
322 angle = dsqrt(eigval(i))
323 freq = angle*0.5d0/pi
327 do j = 1, min(ndof, 3)
328 pf(j) = fstreig%partfactor(ndof*(i-1) + j)
329 em(j) = fstreig%effmass(ndof*(i-1) + j)
332 write(
ilog,
'(I5,1P9E12.4)') in, eigval(i), angle, freq, pf(1), pf(2), pf(3), em(1), em(2), em(3)
333 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 fstr_eigen_residual(hecMESH, hecMAT, fstrEIG)
residual of the eigenproblem as solved, i.e. in the reduced space of the MPC elimination
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.