13 type(hecmwst_local_mesh),
intent(in) :: hecMESH
14 integer(kind=kint),
intent(in) :: numcomp
15 type(hecmwst_result_data),
intent(inout) :: fstrRESULT
19 call hecmw_nullify_result_data(fstrresult)
20 fstrresult%ng_component = 0
21 fstrresult%nn_component = numcomp
22 fstrresult%ne_component = 0
23 allocate( fstrresult%nn_dof(numcomp) )
24 allocate( fstrresult%node_label(numcomp) )
25 allocate( fstrresult%node_val_item(numcomp*hecmesh%n_dof*hecmesh%n_node))
30 type(hecmwst_result_data),
intent(inout) :: fstrRESULT
31 type(hecmwst_local_mesh),
intent(in) :: hecMESH
32 integer(kind=kint),
intent(in) :: comp_index
33 integer(kind=kint),
intent(in) :: ndof
34 character(len=HECMW_NAME_LEN),
intent(in) :: label
35 real(kind=kreal),
intent(in) :: vect(:)
37 integer(kind=kint) :: i, k, alldof, offset
40 fstrresult%nn_dof(comp_index) = ndof
41 fstrresult%node_label(comp_index) = label
42 alldof = fstrresult%nn_component*ndof
43 offset = ndof*(comp_index-1)
44 do i=1, hecmesh%n_node
46 fstrresult%node_val_item(alldof*(i-1) + k + offset) = vect(ndof*(i-1) + k)
70 fstrDYNAMIC, fstrRESULT, fstrPARAM, &
71 fstrCPL, fstrFREQ, fstrMAT, restart_step_num)
75 type(hecmwst_local_mesh) :: hecMESH
76 type(hecmwst_matrix) :: hecMAT
79 type(hecmwst_result_data) :: fstrRESULT
85 integer(kind=kint) :: restart_step_num
90 integer(kind=kint) :: numnode, numelm, startmode, endmode, nummode, ndof, im, in, ntotal, vistype
91 integer(kind=kint) :: numfreq, idnode, numdisp
92 integer(kind=kint) :: freqiout(3)
93 integer(kind=kint),
parameter :: ilogin = 9056
94 real(kind=kreal),
allocatable :: eigenvalue(:), loadvecre(:), loadvecim(:)
95 real(kind=kreal),
allocatable :: bjre(:), bjim(:), dvare(:), dvaim(:), disp(:), vel(:), acc(:)
96 real(kind=kreal),
allocatable :: dispre(:), dispim(:), velre(:), velim(:), accre(:), accim(:)
97 real(kind=kreal) :: freq, omega, val, dx, dy, dz, f_start, f_end
98 real(kind=kreal) :: t_start, t_end, time, dxi, dyi, dzi
101 numnode = hecmesh%nn_internal
102 numelm = hecmesh%n_elem
104 startmode = fstrfreq%start_mode
105 endmode = fstrfreq%end_mode
106 nummode = endmode - startmode +1
108 freqdata%numMode = nummode
109 freqdata%numNodeDOF = numnode*ndof
110 allocate(freqdata%eigOmega(nummode))
111 allocate(freqdata%eigVector(numnode*ndof, nummode))
113 call setupfreqparam(fstrdynamic, f_start, f_end, numfreq, freqdata%rayAlpha, freqdata%rayBeta, idnode, vistype, freqiout)
114 write(*,*)
"Rayleigh alpha:", freqdata%rayAlpha
115 write(*,*)
"Rayleigh beta:", freqdata%rayBeta
116 write(
ilog,*)
"Rayleigh alpha:", freqdata%rayAlpha
117 write(
ilog,*)
"Rayleigh beta:", freqdata%rayBeta
120 allocate(eigenvalue(nummode))
121 allocate(loadvecre(numnode*ndof))
122 allocate(loadvecim(numnode*ndof))
123 allocate(bjre(nummode))
124 allocate(bjim(nummode))
125 allocate(dvare(numnode*ndof))
126 allocate(dvaim(numnode*ndof))
127 allocate(disp(numnode*ndof))
128 allocate(vel(numnode*ndof))
129 allocate(acc(numnode*ndof))
130 allocate(dispre(numnode*ndof))
131 allocate(dispim(numnode*ndof))
132 allocate(velre(numnode*ndof))
133 allocate(velim(numnode*ndof))
134 allocate(accre(numnode*ndof))
135 allocate(accim(numnode*ndof))
140 write(*,*)
"--frequency analysis--"
141 write(*, *)
"read from=", trim(fstrfreq%eigenlog_filename)
142 write(
ilog,*)
"read from=", trim(fstrfreq%eigenlog_filename)
143 write(*, *)
"start mode=", startmode
144 write(
ilog,*)
"start mode=", startmode
145 write(*, *)
"end mode=", endmode
146 write(
ilog,*)
"end mode=", endmode
147 open(unit=ilogin, file=trim(fstrfreq%eigenlog_filename), status=
"OLD", action=
"READ")
148 call read_eigen_values(ilogin, startmode, endmode, eigenvalue, freqdata%eigOmega)
157 write(*,*)
"calc mass matrix"
158 call calcmassmatrix(fstrparam, hecmesh, hecmat, fstrsolid, fstreig, fstrmat)
159 write(*,*)
"scale eigenvector"
162 write(*, *)
"start frequency:", f_start
163 write(
ilog,*)
"start frequency:", f_start
164 write(*, *)
"end frequency:", f_end
165 write(
ilog,*)
"end frequency:", f_end
166 write(* ,*)
"number of the sampling points", numfreq
167 write(
ilog,*)
"number of the sampling points", numfreq
168 write(* ,*)
"monitor nodeid=", idnode
169 write(
ilog,*)
"monitor nodeid=", idnode
172 freq = (f_end-f_start)/dble(numfreq)*dble(im) + f_start
173 omega = 2.0d0 * 3.14159265358979d0 * freq
175 call calcfreqcoeff(freqdata, loadvecre, loadvecim, omega, bjre, bjim)
178 dx = sqrt(dvare(3*(idnode-1)+1)**2 + dvaim(3*(idnode-1)+1)**2)
179 dy = sqrt(dvare(3*(idnode-1)+2)**2 + dvaim(3*(idnode-1)+2)**2)
180 dz = sqrt(dvare(3*(idnode-1)+3)**2 + dvaim(3*(idnode-1)+3)**2)
181 val = sqrt(dx**2 + dy**2 + dz**2)
182 write(*, *) freq,
"[Hz] : ", val
183 write(
ilog, *) freq,
"[Hz] : ", val
184 disp(:) = abs(cmplx(dvare(:), dvaim(:)))
186 call calcvelvector(freqdata, omega, bjre, bjim, dvare, dvaim)
187 vel(:) = abs(cmplx(dvare(:), dvaim(:)))
189 call calcaccvector(freqdata, omega, bjre, bjim, dvare, dvaim)
190 acc(:) = abs(cmplx(dvare(:), dvaim(:)))
193 write(*, *) freq,
"[Hz] : ", im,
".res"
194 write(
ilog,*) freq,
"[Hz] : ", im,
".res"
197 if(
ivisual==1 .and. vistype==1)
then
198 write(*, *) freq,
"[Hz] : ", im,
".vis"
199 write(
ilog,*) freq,
"[Hz] : ", im,
".vis"
205 write(*, *)
"start time:", t_start
206 write(
ilog,*)
"start time:", t_start
207 write(*, *)
"end time:", t_end
208 write(
ilog,*)
"end time:", t_end
209 write(*, *)
"freqency:", freq
210 write(
ilog,*)
"freqency:", freq
211 write(*, *)
"node id:", idnode
212 write(
ilog,*)
"node id:", idnode
213 write(*, *)
"num disp:", numdisp
214 write(
ilog,*)
"num disp:", numdisp
216 omega = 2.0d0 * 3.14159265358979d0 * freq
217 call calcfreqcoeff(freqdata, loadvecre, loadvecim, omega, bjre, bjim)
221 time = (t_end-t_start)/dble(numdisp)*dble(im-1) + t_start
223 dx = dvare(3*(idnode-1)+1)
224 dy = dvare(3*(idnode-1)+2)
225 dz = dvare(3*(idnode-1)+3)
226 dxi = dvaim(3*(idnode-1)+1)
227 dyi = dvaim(3*(idnode-1)+2)
228 dzi = dvaim(3*(idnode-1)+3)
233 write(*, *)
"time=", time,
" : ", im,
".res"
234 write(
ilog,*)
"time=", time,
" : ", im,
".res"
235 call outputdyna_resfile(hecmesh, time, im, dvare, dvaim, velre, velim, accre, accim, freqiout)
237 if(
ivisual==1 .and. vistype==2)
then
238 write(*, *)
"time=", time,
" : ", im,
".vis"
239 write(
ilog,*)
"time=", time,
" : ", im,
".vis"
240 call outputdyna_visfile(hecmesh, im, dvare, dvaim, velre, velim, accre, accim, freqiout)
244 deallocate(freqdata%eigOmega)
245 deallocate(freqdata%eigVector)
246 deallocate(eigenvalue)
247 deallocate(loadvecre)
248 deallocate(loadvecim)
267 integer(kind=kint),
intent(in) :: logfile
268 integer(kind=kint),
intent(in) :: startmode
269 integer(kind=kint),
intent(in) :: endmode
270 real(kind=kreal),
intent(inout) :: eigenvalue(:)
271 real(kind=kreal),
intent(inout) :: anglfreq(:)
273 integer(kind=kint) :: im, endflag, id
274 character(len=HECMW_MSG_LEN) :: line
275 real(kind=kreal) :: freq
282 read(logfile,
'(A80)', err=119) line
283 if(trim(adjustl(line)) ==
"NO. EIGENVALUE FREQUENCY (HZ) X Y Z X")
then
288 read(logfile,
'(A80)') line
291 read(logfile,
'(A80)') line
293 do im=1, (endmode-startmode+1)
294 read(logfile,
'(i5,3e12.4,a)', err=119) id, eigenvalue(im), anglfreq(im), freq, line
299 119
write(*,*)
"Error to find eigenvalue information from logfile"
300 write(
ilog,*)
"Error to find eigenvalue information from logfile"
306 integer(kind=kint),
intent(in) :: logfile
307 integer(kind=kint),
intent(in) :: startmode
308 integer(kind=kint),
intent(in) :: endmode
309 integer(kind=kint),
intent(in) :: numdof
310 integer(kind=kint),
intent(in) :: numnode
311 real(kind=kreal),
intent(inout) :: eigenvector(:, :)
313 integer(kind=kint) :: im, in, gblid, j, idx
314 real(kind=kreal) :: vec(6)
315 character(len=HECMW_MSG_LEN) :: line
322 read(logfile,
'(a80)', err=119,
end=119) line
323 if(line(1:9) ==
" Mode No.")
then
330 do im=1, (endmode-startmode+1)
333 read(logfile,
'(a80)', err=119,
end=119) line
334 if(line(1:9) ==
" Mode No.")
then
339 read(logfile,
'(a80)', err=119) line
340 read(logfile,
'(a80)', err=119) line
341 read(logfile,
'(a80)', err=119) line
342 read(logfile,
'(a80)', err=119) line
347 read(logfile,
'(i10,2e12.4)', err=119) gblid, (vec(j), j=1,2)
351 read(logfile,
'(i10,3e16.8)', err=119) gblid, (vec(j), j=1,3)
354 read(logfile,
'(i10,6e12.4)', err=119) gblid, (vec(j), j=1,6)
361 idx = (in-1)*numdof + j
362 eigenvector(idx,im) = vec(j)
369 119
write(*,*)
"Error to find eigenvector from logfile"
370 write(ilog,*)
"Error to find eigenvector from logfile"
377 type(hecmwst_local_mesh),
intent(in) :: hecMESH
378 integer(kind=kint),
intent(in) :: startmode
379 integer(kind=kint),
intent(in) :: endmode
380 integer(kind=kint),
intent(in) :: numdof
381 integer(kind=kint),
intent(in) :: numnode
382 real(kind=kreal),
intent(inout) :: eigenvector(:, :)
384 integer(kind=kint),
parameter :: compidx = 1
385 integer(kind=kint) :: imode, idx, ind, a, b, nallcomp, j
386 type(hecmwst_result_data) :: eigenres
387 character(len=HECMW_NAME_LEN) :: name
391 do imode=startmode, endmode
392 call nullify_result_data(eigenres)
393 call hecmw_result_read_by_name(hecmesh, name, imode, eigenres)
396 do ind=1,eigenres%nn_component
397 nallcomp = nallcomp + eigenres%nn_dof(ind)
400 idx = imode - startmode + 1
403 a = (ind-1)*nallcomp + j
404 b = (ind-1)*numdof + j
405 eigenvector(b,imode) = eigenres%node_val_item(a)
408 call free_result_data(eigenres)
413 subroutine free_result_data(res)
415 type(hecmwst_result_data) :: res
418 if(
associated(res%nn_dof))
deallocate(res%nn_dof)
419 if(
associated(res%ne_dof))
deallocate(res%ne_dof)
420 if(
associated(res%node_label))
deallocate(res%node_label)
421 if(
associated(res%elem_label))
deallocate(res%elem_label)
422 if(
associated(res%node_val_item))
deallocate(res%node_val_item)
423 if(
associated(res%elem_val_item))
deallocate(res%elem_val_item)
426 subroutine nullify_result_data(res)
428 type(hecmwst_result_data) :: res
433 nullify(res%node_label)
434 nullify(res%elem_label)
435 nullify(res%node_val_item)
436 nullify(res%elem_val_item)
444 type(hecmwst_local_mesh),
intent(in) :: hecMESH
445 real(kind=kreal),
intent(in) :: freq
446 integer(kind=kint),
intent(in) :: ifreq
447 real(kind=kreal),
intent(in) :: disp(:)
448 real(kind=kreal),
intent(in) :: vel(:)
449 real(kind=kreal),
intent(in) :: acc(:)
450 integer(kind=kint),
intent(in) :: iout(3)
452 integer(kind=kint) :: im
453 character(len=HECMW_HEADER_LEN) :: header
454 character(len=HECMW_MSG_LEN) :: comment
455 character(len=HECMW_NAME_LEN) :: label, nameid
456 real(kind=kreal) :: freqval(1)
461 comment=
'frequency_result'
462 call hecmw_result_init(hecmesh, ifreq, header, comment)
466 call hecmw_result_add(3, 1, label, freqval)
468 if(iout(1) == 1)
then
470 call hecmw_result_add(1, 3, label, disp)
472 if(iout(2) == 1)
then
474 call hecmw_result_add(1, 3, label, vel)
476 if(iout(3) == 1)
then
478 call hecmw_result_add(1, 3, label, acc)
480 call hecmw_result_write_by_name(nameid)
481 call hecmw_result_finalize()
487 type(hecmwst_local_mesh),
intent(in) :: hecmesh
488 integer(kind=kint),
intent(in) :: ifreq
489 real(kind=kreal),
intent(in) :: disp(:)
490 real(kind=kreal),
intent(in) :: vel(:)
491 real(kind=kreal),
intent(in) :: acc(:)
492 integer(kind=kint),
intent(in) :: iout(3)
494 type(hecmwst_result_data) :: fstrRESULT
495 character(len=HECMW_NAME_LEN) :: label
496 integer(kind=kint) :: ncomp, i
500 if(iout(i) == 1)
then
505 call fstr_freq_result_init(hecmesh, ncomp, fstrresult)
507 if(iout(1) == 1)
then
508 label =
'displace_abs'
509 call fstr_freq_result_add(fstrresult, hecmesh, ncomp, 3, label, disp)
512 if(iout(2) == 1)
then
513 label =
'velocity_abs'
514 call fstr_freq_result_add(fstrresult, hecmesh, ncomp, 3, label, vel)
517 if(iout(3) == 1)
then
518 label =
'acceleration_abs'
519 call fstr_freq_result_add(fstrresult, hecmesh, ncomp, 3, label, acc)
523 call fstr2hecmw_mesh_conv(hecmesh)
524 call hecmw_visualize_init
525 call hecmw_visualize( hecmesh, fstrresult, ifreq )
526 call hecmw2fstr_mesh_conv(hecmesh)
527 call hecmw_result_free(fstrresult)
532 type(hecmwst_local_mesh),
intent(in) :: hecMESH
533 type(fstr_freqanalysis),
intent(in) :: freqData
534 integer(kind=kint),
intent(in) :: numdof
535 real(kind=kreal),
intent(inout) :: loadvecre(:)
536 real(kind=kreal),
intent(inout) :: loadvecim(:)
538 integer(kind=kint),
parameter :: MAXNODE = 100
539 integer(kind=kint) :: sgrpID, is, ie, ic, nsurf, ic_type, outtype, node_index(MAXNODE)
540 integer(kind=kint) :: nn, iss, nodeid, dof_index, ndof
541 integer(kind=kint) :: i, j, k, l, m, isn, nsize
542 integer(kind=kint) :: iwk(60), nodLOCAL(20)
543 real(kind=kreal) :: vect(60), xx(20), yy(20), zz(20), forcere(3), forceim(3)
547 do i=1,freqdata%FLOAD_ngrp_tot
548 if(freqdata%FLOAD_ngrp_TYPE(i) == kfloadtype_surf)
then
549 sgrpid = freqdata%FLOAD_ngrp_ID(i)
550 dof_index = freqdata%FLOAD_ngrp_DOF(i)
553 forcere(dof_index) = freqdata%FLOAD_ngrp_valre(i)
554 forceim(dof_index) = freqdata%FLOAD_ngrp_valim(i)
556 is = hecmesh%surf_group%grp_index(sgrpid-1) + 1
557 ie = hecmesh%surf_group%grp_index(sgrpid)
559 ic = hecmesh%surf_group%grp_item(2*j-1)
560 nsurf = hecmesh%surf_group%grp_item(2*j)
561 ic_type = hecmesh%elem_type(ic)
562 nn = hecmw_get_max_node(ic_type)
563 isn = hecmesh%elem_node_index(ic-1)
565 nodlocal(k) = hecmesh%elem_node_item(isn+k)
566 xx(k) = hecmesh%node(3*nodlocal(k)-2)
567 yy(k) = hecmesh%node(3*nodlocal(k)-1)
568 zz(k) = hecmesh%node(3*nodlocal(k) )
570 iwk(ndof*(k-1)+l) = ndof*(nodlocal(k)-1)+l
574 call dl_c3_freq(ic_type, nn, xx, yy, zz, nsurf, forcere, vect, nsize)
576 loadvecre(iwk(k)) = loadvecre(iwk(k)) + vect(k)
579 call dl_c3_freq(ic_type, nn, xx, yy, zz, nsurf, forceim, vect, nsize)
581 loadvecim(iwk(k)) = loadvecim(iwk(k)) + vect(k)
590 subroutine dl_c3_freq(ETYPE, NN, XX, YY, ZZ, LTYPE, force, VECT, nsize)
592 integer(kind=kint),
intent(in) :: ETYPE
593 integer(kind=kint),
intent(in) :: NN
594 integer(kind=kint),
intent(in) :: LTYPE
595 real(kind=kreal),
intent(in) :: xx(:)
596 real(kind=kreal),
intent(in) :: yy(:)
597 real(kind=kreal),
intent(in) :: zz(:)
598 real(kind=kreal),
intent(in) :: force(3)
599 real(kind=kreal),
intent(inout) :: vect(:)
600 integer(kind=kint),
intent(inout) :: nsize
602 integer(kind=kint),
parameter :: NDOF = 3
603 real(kind=kreal) :: wg
604 integer(kind=kint) :: NOD(NN)
605 real(kind=kreal) :: elecoord(3, nn), localcoord(3)
606 real(kind=kreal) :: h(nn)
607 integer(kind=kint) :: I, IG2, NSUR, SURTYPE
610 call getsubface( etype, ltype, surtype, nod )
611 nsur = getnumberofnodes( surtype )
614 elecoord(1,i)=xx(nod(i))
615 elecoord(2,i)=yy(nod(i))
616 elecoord(3,i)=zz(nod(i))
619 vect(1:nsize) = 0.0d0
620 do ig2=1,numofquadpoints( surtype )
621 call getquadpoint( surtype, ig2, localcoord(1:2) )
622 call getshapefunc( surtype, localcoord(1:2), h(1:nsur) )
624 wg=getweight( surtype, ig2 )
626 vect(3*nod(i)-2)=vect(3*nod(i)-2)+wg*h(i)*force(1)
627 vect(3*nod(i)-1)=vect(3*nod(i)-1)+wg*h(i)*force(2)
628 vect(3*nod(i) )=vect(3*nod(i) )+wg*h(i)*force(3)
635 type(hecmwst_local_mesh),
intent(in) :: hecMESH
636 type(fstr_freqanalysis),
intent(in) :: freqData
637 integer(kind=kint),
intent(in) :: numdof
638 real(kind=kreal),
intent(inout) :: loadvecre(:)
639 real(kind=kreal),
intent(inout) :: loadvecim(:)
641 integer(kind=kint) :: i, vecsize, ig, is, ie, in, nodeid, dof_index
645 do i=1, freqdata%FLOAD_ngrp_tot
646 if(freqdata%FLOAD_ngrp_TYPE(i) == kfloadtype_node)
then
647 ig = freqdata%FLOAD_ngrp_ID(i)
648 is = hecmesh%node_group%grp_index(ig-1) + 1
649 ie = hecmesh%node_group%grp_index(ig)
651 nodeid = hecmesh%node_group%grp_item(in)
652 dof_index = freqdata%FLOAD_ngrp_DOF(i)
653 loadvecre((nodeid-1)*numdof + dof_index) = loadvecre((nodeid-1)*numdof + dof_index) + freqdata%FLOAD_ngrp_valre(i)
654 loadvecim((nodeid-1)*numdof + dof_index) = loadvecim((nodeid-1)*numdof + dof_index) + freqdata%FLOAD_ngrp_valim(i)
661 subroutine calcmassmatrix(fstrPARAM, hecMESH, hecMAT, fstrSOLID, fstrEIG, fstrMAT)
663 type(fstr_param),
intent(in) :: fstrPARAM
664 type(hecmwst_local_mesh),
intent(in) :: hecMESH
665 type(hecmwst_matrix),
intent(inout) :: hecMAT
666 type(fstr_solid),
intent(inout) :: fstrSOLID
667 type(fstr_eigen),
intent(inout) :: fstrEIG
668 type(fstrst_matrix_contact_lagrange),
intent(inout) :: fstrMAT
670 integer(kind=kint) :: ntotal
674 fstrsolid%dunode = 0.d0
675 call fstr_stiffmatrix( hecmesh, hecmat, fstrsolid, 0.d0, 0.d0 )
676 call fstr_addbc(1, hecmesh, hecmat, fstrsolid, fstrparam, fstrmat, 2)
678 call setmass(fstrsolid, hecmesh, hecmat, fstreig)
684 type(fstr_eigen),
intent(in) :: fstrEIG
685 integer(kind=kint),
intent(in) :: ntotaldof
686 integer(kind=kint),
intent(in) :: nmode
687 real(kind=kreal),
intent(inout) :: eigenvector(:, :)
689 integer(kind=kint) :: imode, idof
690 real(kind=kreal) :: mas
696 mas = mas + fstreig%mass(idof)*eigenvector(idof,imode)**2
699 eigenvector(idof,imode) = eigenvector(idof,imode) / sqrt(mas)
706 type(fstr_eigen),
intent(in) :: fstreig
707 real(kind=kreal),
intent(in) :: eigenvector(:, :)
708 integer(kind=kint),
intent(in) :: imode
709 integer(kind=kint),
intent(in) :: jmode
710 real(kind=kreal),
intent(inout) :: prod
712 integer(kind=kint) :: idof, s
714 s =
size(eigenvector(:,1))
718 prod = prod + eigenvector(idof,imode)*fstreig%mass(idof)*eigenvector(idof,jmode)
725 integer(kind=kint),
intent(in) :: im
726 real(kind=kreal),
intent(in) :: vector(:)
728 integer(kind=kint) :: i, s
733 write(*,
'("eigenvec",i2.2,":[",e12.5", ")') im, vector(i)
735 write(*,
'(e12.5,", ")') vector(i)
737 write(*,
'(e12.5,"];")') vector(i)
746 real(kind=kreal),
intent(in) :: a(:)
747 real(kind=kreal),
intent(in) :: b(:)
748 real(kind=kreal),
intent(inout) :: c
751 c = dot_product(a, b)
758 type(fstr_freqanalysis_data),
intent(in) :: freqdata
759 real(kind=kreal),
intent(in) :: loadre(:)
760 real(kind=kreal),
intent(in) :: loadim(:)
761 real(kind=kreal),
intent(in) :: inpomega
762 real(kind=kreal),
intent(inout) :: bjre(:)
763 real(kind=kreal),
intent(inout) :: bjim(:)
765 integer(kind=kint) :: imode
766 real(kind=kreal) :: ujfr, ujfi, a, b, alp, beta
769 alp = freqdata%rayAlpha
770 beta = freqdata%rayBeta
772 do imode=1, freqdata%numMode
776 a = ujfr*(freqdata%eigOmega(imode)**2 - inpomega**2) + ujfi*(alp + beta*freqdata%eigOmega(imode)**2)*inpomega
777 b = (freqdata%eigOmega(imode)**2 - inpomega**2)**2 + ((alp + beta*freqdata%eigOmega(imode)**2)*inpomega)**2
780 a = ujfi*(freqdata%eigOmega(imode)**2 -inpomega**2) - ujfr*(alp + beta*freqdata%eigOmega(imode)**2)*inpomega
781 b = (freqdata%eigOmega(imode)**2 - inpomega**2)**2 + ((alp + beta*freqdata%eigOmega(imode)**2)*inpomega)**2
789 type(fstr_freqanalysis_data),
intent(in) :: freqdata
790 real(kind=kreal),
intent(in) :: bjre(:)
791 real(kind=kreal),
intent(in) :: bjim(:)
792 real(kind=kreal),
intent(inout) :: dispre(:)
793 real(kind=kreal),
intent(inout) :: dispim(:)
795 integer(kind=kint) :: imode
801 do imode=1, freqdata%numMode
802 dispre(:) = dispre(:) + bjre(imode)*freqdata%eigVector(:,imode)
803 dispim(:) = dispim(:) + bjim(imode)*freqdata%eigVector(:,imode)
810 type(fstr_freqanalysis_data),
intent(in) :: freqData
811 real(kind=kreal),
intent(in) :: omega
812 real(kind=kreal),
intent(in) :: bjre(:)
813 real(kind=kreal),
intent(in) :: bjim(:)
814 real(kind=kreal),
intent(inout) :: velre(:)
815 real(kind=kreal),
intent(inout) :: velim(:)
817 integer(kind=kint) :: imode
823 do imode=1, freqdata%numMode
824 velre(:) = velre(:) - omega * bjim(imode) * freqdata%eigVector(:,imode)
825 velim(:) = velim(:) + omega * bjre(imode) * freqdata%eigVector(:,imode)
831 type(fstr_freqanalysis_data),
intent(in) :: freqData
832 real(kind=kreal),
intent(in) :: omega
833 real(kind=kreal),
intent(in) :: bjre(:)
834 real(kind=kreal),
intent(in) :: bjim(:)
835 real(kind=kreal),
intent(inout) :: accre(:)
836 real(kind=kreal),
intent(inout) :: accim(:)
838 integer(kind=kint) :: imode
844 do imode=1, freqdata%numMode
845 accre(:) = accre(:) - omega**2 * bjre(imode) * freqdata%eigVector(:,imode)
846 accim(:) = accim(:) - omega**2 * bjim(imode) * freqdata%eigVector(:,imode)
851 subroutine setupfreqparam(fstrDYNAMIC, f_start, f_end, numfreq, raym, rayk, idnode, vistype, ioutl)
853 type(fstr_dynamic),
intent(in) :: fstrDYNAMIC
854 real(kind=kreal),
intent(inout) :: f_start
855 real(kind=kreal),
intent(inout) :: f_end
856 integer(kind=kint),
intent(inout) :: numfreq
857 real(kind=kreal),
intent(inout) :: raym
858 real(kind=kreal),
intent(inout) :: rayk
859 integer(kind=kint),
intent(inout) :: idnode
860 integer(kind=kint),
intent(inout) :: vistype
861 integer(kind=kint),
intent(inout) :: ioutl(3)
865 f_start = fstrdynamic%t_start
866 f_end = fstrdynamic%t_end
867 numfreq = fstrdynamic%n_step
868 raym = fstrdynamic%ray_m
869 rayk = fstrdynamic%ray_k
870 idnode = fstrdynamic%nout_monit
871 vistype = fstrdynamic%ngrp_monit
872 ioutl(1:3) = fstrdynamic%iout_list(1:3)
878 type(fstr_freqanalysis_data),
intent(in) :: freqData
879 real(kind=kreal),
intent(in) :: time
880 real(kind=kreal),
intent(in) :: omega
881 real(kind=kreal),
intent(in) :: bjre(:)
882 real(kind=kreal),
intent(in) :: bjim(:)
883 real(kind=kreal),
intent(inout) :: dispre(:)
884 real(kind=kreal),
intent(inout) :: dispim(:)
886 integer(kind=kint) :: imode, idf, s
887 complex(kind=kreal) :: a, b, c
892 a = exp(cmplx(0.0d0, omega*time))
894 do imode=1, freqdata%numMode
895 s =
size(freqdata%eigvector(:,imode))
896 b = cmplx(bjre(imode), bjim(imode)) * a
898 c = b*cmplx(freqdata%eigVector(idf,imode), 0.0d0)
899 dispre(idf) = dispre(idf) + dble(c)
900 dispim(idf) = dispim(idf) + imag(c)
908 type(fstr_freqanalysis_data),
intent(in) :: freqData
909 real(kind=kreal),
intent(in) :: time
910 real(kind=kreal),
intent(in) :: omega
911 real(kind=kreal),
intent(in) :: bjre(:)
912 real(kind=kreal),
intent(in) :: bjim(:)
913 real(kind=kreal),
intent(inout) :: velre(:)
914 real(kind=kreal),
intent(inout) :: velim(:)
916 integer(kind=kint) :: imode, idf, s
917 complex(kind=kreal) :: a, b, c
922 a = cmplx(0.0d0, 1.0d0)*cmplx(omega, 0.0d0)*exp(cmplx(0.0d0, omega*time))
924 do imode=1, freqdata%numMode
925 s =
size(freqdata%eigvector(:,imode))
926 b = cmplx(bjre(imode), bjim(imode)) * a
928 c = b*cmplx(freqdata%eigVector(idf,imode), 0.0d0)
929 velre(idf) = velre(idf) + dble(c)
930 velim(idf) = velim(idf) + imag(c)
938 type(fstr_freqanalysis_data),
intent(in) :: freqData
939 real(kind=kreal),
intent(in) :: time
940 real(kind=kreal),
intent(in) :: omega
941 real(kind=kreal),
intent(in) :: bjre(:)
942 real(kind=kreal),
intent(in) :: bjim(:)
943 real(kind=kreal),
intent(inout) :: accre(:)
944 real(kind=kreal),
intent(inout) :: accim(:)
946 integer(kind=kint) :: imode, idf, s
947 complex(kind=kreal) :: a, b, c
952 a = cmplx(-1.0d0, 0.0d0)*cmplx(omega**2, 0.0d0)*exp(cmplx(0.0d0, omega*time))
954 do imode=1, freqdata%numMode
955 s =
size(freqdata%eigvector(:,imode))
956 b = cmplx(bjre(imode), bjim(imode)) * a
958 c = b*cmplx(freqdata%eigVector(idf,imode), 0.0d0)
959 accre(idf) = accre(idf) + dble(c)
960 accim(idf) = accim(idf) + imag(c)
968 type(fstr_dynamic),
intent(in) :: fstrDYNAMIC
969 real(kind=kreal),
intent(inout) :: t_start
970 real(kind=kreal),
intent(inout) :: t_end
971 real(kind=kreal),
intent(inout) :: dynafreq
972 integer(kind=kint),
intent(inout) :: numdisp
975 t_start = fstrdynamic%ganma
976 t_end = fstrdynamic%beta
977 dynafreq = fstrdynamic%t_delta
978 numdisp = fstrdynamic%nout
984 type(hecmwst_local_mesh),
intent(in) :: hecMESH
985 real(kind=kreal),
intent(in) :: time
986 integer(kind=kint),
intent(in) :: istp
987 real(kind=kreal),
intent(in) :: dispre(:)
988 real(kind=kreal),
intent(in) :: dispim(:)
989 real(kind=kreal),
intent(in) :: velre(:)
990 real(kind=kreal),
intent(in) :: velim(:)
991 real(kind=kreal),
intent(in) :: accre(:)
992 real(kind=kreal),
intent(in) :: accim(:)
993 integer(kind=kint),
intent(in) :: iout(3)
995 integer(kind=kint) :: im, s
996 character(len=HECMW_HEADER_LEN) :: header
997 character(len=HECMW_MSG_LEN) :: comment
998 character(len=HECMW_NAME_LEN) :: label, nameid
999 real(kind=kreal),
allocatable :: absval(:)
1006 header=
'*fstrresult'
1007 comment=
'frequency_result'
1009 call hecmw_result_init(hecmesh, istp, header, comment)
1013 call hecmw_result_add(3, 1, label, absval)
1015 if(iout(1) == 1)
then
1016 label=
'displacement_real'
1017 call hecmw_result_add(1, 3, label, dispre)
1018 label=
'displacement_imag'
1019 call hecmw_result_add(1, 3, label, dispim)
1020 label=
'displacement_abs'
1021 absval(:) = abs(cmplx(dispre(:), dispim(:)))
1022 call hecmw_result_add(1, 3, label, absval)
1025 if(iout(2) == 1)
then
1026 label=
'velocity_real'
1027 call hecmw_result_add(1, 3, label, velre)
1028 label=
'velocity_imag'
1029 call hecmw_result_add(1, 3, label, velim)
1030 label=
'velocity_abs'
1031 absval(:) = abs(cmplx(velre(:), velim(:)))
1032 call hecmw_result_add(1, 3, label, absval)
1035 if(iout(3) == 1)
then
1036 label=
'acceleration_real'
1037 call hecmw_result_add(1, 3, label, accre)
1038 label=
'acceleration_imag'
1039 call hecmw_result_add(1, 3, label, accim)
1040 label=
'acceleration_abs'
1041 absval(:) = abs(cmplx(velre(:), velim(:)))
1042 call hecmw_result_add(1, 3, label, absval)
1045 call hecmw_result_write_by_name(nameid)
1046 call hecmw_result_finalize()
1054 type(hecmwst_local_mesh),
intent(inout) :: hecmesh
1055 integer(kind=kint),
intent(in) :: istp
1056 real(kind=kreal),
intent(in) :: dispre(:)
1057 real(kind=kreal),
intent(in) :: dispim(:)
1058 real(kind=kreal),
intent(in) :: velre(:)
1059 real(kind=kreal),
intent(in) :: velim(:)
1060 real(kind=kreal),
intent(in) :: accre(:)
1061 real(kind=kreal),
intent(in) :: accim(:)
1062 integer(kind=kint),
intent(in) :: iout(3)
1064 type(hecmwst_result_data) :: fstrRESULT
1065 character(len=HECMW_NAME_LEN) :: label
1066 integer(kind=kint) :: s, ncomp, i
1067 real(kind=kreal),
allocatable :: absval(:)
1075 if(iout(i) == 1)
then
1080 call fstr_freq_result_init(hecmesh, ncomp, fstrresult)
1084 if(iout(1) == 1)
then
1085 label =
'displace_real'
1086 call fstr_freq_result_add(fstrresult, hecmesh, ncomp, 3, label, dispre)
1089 label =
'displace_imag'
1090 call fstr_freq_result_add(fstrresult, hecmesh, ncomp, 3, label, dispim)
1093 label =
'displace_abs'
1094 absval(:) = abs(cmplx(dispre(:), dispim(:)))
1095 call fstr_freq_result_add(fstrresult, hecmesh, ncomp, 3, label, absval)
1099 if(iout(2) == 1)
then
1100 label =
'velocity_real'
1101 call fstr_freq_result_add(fstrresult, hecmesh, ncomp, 3, label, velre)
1104 label =
'velocity_imag'
1105 call fstr_freq_result_add(fstrresult, hecmesh, ncomp, 3, label, velim)
1108 label =
'velocity_abs'
1109 absval(:) = abs(cmplx(velre(:), velim(:)))
1110 call fstr_freq_result_add(fstrresult, hecmesh, ncomp, 3, label, absval)
1114 if(iout(3) == 1)
then
1115 label =
'acceleration_real'
1116 call fstr_freq_result_add(fstrresult, hecmesh, ncomp, 3, label, accre)
1119 label =
'acceleration_imag'
1120 call fstr_freq_result_add(fstrresult, hecmesh, ncomp, 3, label, accim)
1123 label =
'acceleration_abs'
1124 absval(:) = abs(cmplx(accre(:), accim(:)))
1125 call fstr_freq_result_add(fstrresult, hecmesh, ncomp, 3, label, absval)
1129 call fstr2hecmw_mesh_conv(hecmesh)
1130 call hecmw_visualize_init
1131 call hecmw_visualize( hecmesh, fstrresult, istp )
1132 call hecmw2fstr_mesh_conv(hecmesh)
1133 call hecmw_result_free(fstrresult)
subroutine outputdyna_resfile(hecmesh, time, istp, dispre, dispim, velre, velim, accre, accim, iout)
subroutine read_eigen_vector(logfile, startmode, endmode, numdof, numnode, eigenvector)
subroutine calcvelvectortime(freqdata, time, omega, bjre, bjim, velre, velim)
subroutine calcdotproduct(a, b, c)
subroutine outputdyna_visfile(hecmesh, istp, dispre, dispim, velre, velim, accre, accim, iout)
subroutine calcdispvector(freqdata, bjre, bjim, dispre, dispim)
subroutine checkorthvector(fstreig, eigenvector, imode, jmode, prod)
subroutine extract_surf2node(hecmesh, freqdata, numdof, loadvecre, loadvecim)
subroutine setupdynaparam(fstrdynamic, t_start, t_end, dynafreq, numdisp)
subroutine output_resfile(hecmesh, freq, ifreq, disp, vel, acc, iout)
subroutine writeoutvector(im, vector)
subroutine dl_c3_freq(etype, nn, xx, yy, zz, ltype, force, vect, nsize)
subroutine calcdispvectortime(freqdata, time, omega, bjre, bjim, dispre, dispim)
subroutine assemble_nodeload(hecmesh, freqdata, numdof, loadvecre, loadvecim)
subroutine calcfreqcoeff(freqdata, loadre, loadim, inpomega, bjre, bjim)
subroutine setupfreqparam(fstrdynamic, f_start, f_end, numfreq, raym, rayk, idnode, vistype, ioutl)
subroutine output_visfile(hecmesh, ifreq, disp, vel, acc, iout)
subroutine calcmassmatrix(fstrparam, hecmesh, hecmat, fstrsolid, fstreig, fstrmat)
subroutine scaleeigenvector(fstreig, ntotaldof, nmode, eigenvector)
subroutine calcaccvectortime(freqdata, time, omega, bjre, bjim, accre, accim)
subroutine read_eigen_values(logfile, startmode, endmode, eigenvalue, anglfreq)
subroutine read_eigen_vector_res(hecmesh, startmode, endmode, numdof, numnode, eigenvector)
subroutine calcvelvector(freqdata, omega, bjre, bjim, velre, velim)
subroutine calcaccvector(freqdata, omega, bjre, bjim, accre, accim)
subroutine fstr_solve_frequency_analysis(hecmesh, hecmat, fstrsolid, fstreig, fstrdynamic, fstrresult, fstrparam, fstrcpl, fstrfreq, fstrmat, restart_step_num)
This module contains steady state frequency analysis.
subroutine fstr_freq_result_init(hecmesh, numcomp, fstrresult)
subroutine fstr_freq_result_add(fstrresult, hecmesh, comp_index, ndof, label, vect)
This module provides a function to deal with prescribed displacement.
Set up lumped mass matrix.
This module provides function to calcualte tangent stiffness matrix.
This module defined coomon data and basic structures for analysis.
integer(kind=kint), pointer iresult
integer(kind=kint), parameter ilog
FILE HANDLER.
integer(kind=kint), pointer ivisual
HECMW to FSTR Mesh Data Converter. Convering Conectivity of Element Type 232, 342 and 352.
Data for coupling analysis.
Data for DYNAMIC ANSLYSIS (fstrDYNAMIC)
Package of data used by Lanczos eigenvalue solver.
FSTR INNER CONTROL PARAMETERS (fstrPARAM)