21 subroutine fstr_write_result( hecMESH, fstrSOLID, fstrPARAM, istep, time, flag, fstrDYNAMIC)
32 integer(kind=kint) :: istep, flag
34 real(kind=
kreal) :: time
35 integer(kind=kint) :: n_lyr, ntot_lyr, tmp, is_33shell, is_33beam, cid
36 integer(kind=kint) :: i, j, k, ndof, mdof, id, nitem, nn, mm, ngauss, it
37 real(kind=
kreal),
pointer :: tnstrain(:), testrain(:), yield_ratio(:)
38 integer(kind=kint) :: idx
39 real(kind=
kreal),
allocatable :: work(:), unode(:), rnode(:)
40 character(len=HECMW_HEADER_LEN) :: header
41 character(len=HECMW_MSG_LEN) :: comment
42 character(len=HECMW_NAME_LEN) :: s, label, nameid, addfname, cnum
43 character(len=16),
allocatable :: clyr(:)
46 tnstrain => fstrsolid%TNSTRAIN
47 testrain => fstrsolid%TESTRAIN
48 yield_ratio => fstrsolid%YIELD_RATIO
50 is_dynamic =
present(fstrdynamic)
54 if( fstrdynamic%idx_eqa==1 .and. istep>0 ) idx = 2
59 if( hecmesh%n_elem > hecmesh%n_node ) mm = hecmesh%n_elem
60 if( ndof==2 ) mdof = 3
61 if( ndof==3 ) mdof = 6
62 if( ndof==4 ) mdof = 6
63 if( ndof==6 ) mdof = 6
65 ntot_lyr = fstrsolid%max_lyr
66 is_33shell = fstrsolid%is_33shell
67 is_33beam = fstrsolid%is_33beam
73 header =
'*fstrresult'
74 if(
present(fstrdynamic) )
then
75 comment =
'dynamic_result'
77 comment =
'static_result'
79 call hecmw_result_init( hecmesh, istep, header, comment )
82 id = hecmw_result_dtype_global
85 call hecmw_result_add( id, 1, label, work )
88 if( fstrsolid%output_ctrl(3)%outinfo%on(1) )
then
90 id = hecmw_result_dtype_node
92 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(1), 3 )
93 allocate( unode(3*hecmesh%n_node) )
95 do i=1, hecmesh%n_node
97 unode((i-1)*3 + j) = fstrdynamic%DISP((i-1)*4 + j, idx)
101 call hecmw_result_add( id, nitem, label, unode )
104 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(1), 1 )
105 allocate( unode(hecmesh%n_node) )
107 do i=1, hecmesh%n_node
108 unode(i) = fstrdynamic%DISP(i*4, idx)
111 call hecmw_result_add( id, nitem, label, unode )
113 else if(ndof == 6)
then
114 id = hecmw_result_dtype_node
115 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(1), 3 )
116 allocate( unode(hecmesh%n_node*3) )
118 if( is_dynamic )
then
119 do i=1, hecmesh%n_node
120 unode((i-1)*3+1:(i-1)*3+3) = fstrdynamic%DISP((i-1)*ndof+1:(i-1)*ndof+3, idx)
123 do i=1, hecmesh%n_node
124 unode((i-1)*3+1:(i-1)*3+3) = fstrsolid%unode((i-1)*ndof+1:(i-1)*ndof+3)
127 label =
'DISPLACEMENT'
128 call hecmw_result_add( id, nitem, label, unode )
131 id = hecmw_result_dtype_node
132 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(1), ndof )
133 allocate( unode(hecmesh%n_node*ndof) )
135 if( is_dynamic )
then
136 unode(:) = fstrdynamic%DISP(:,idx)
138 unode(:) = fstrsolid%unode
140 label =
'DISPLACEMENT'
141 if(is_33beam == 1)
then
144 if(is_33shell == 1)
then
147 call hecmw_result_add( id, nitem, label, unode )
153 if (fstrsolid%output_ctrl(3)%outinfo%on(18))
then
155 id = hecmw_result_dtype_node
156 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(1), 3 )
158 allocate( rnode(hecmesh%n_node*3) )
160 if( is_dynamic )
then
161 do i=1, hecmesh%n_node
162 rnode((i-1)*3+1:(i-1)*3+3) = fstrdynamic%DISP((i-1)*ndof+4:(i-1)*ndof+6, idx)
165 do i=1, hecmesh%n_node
166 rnode((i-1)*3+1:(i-1)*3+3) = fstrsolid%unode((i-1)*ndof+4:(i-1)*ndof+6)
169 call hecmw_result_add( id, nitem, label, rnode )
172 if ( is_33shell == 1)
then
173 id = hecmw_result_dtype_node
174 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(1), ndof )
176 allocate( rnode(hecmesh%n_node*ndof) )
179 call hecmw_result_add( id, nitem, label, rnode )
186 if( is_dynamic .and. fstrsolid%output_ctrl(3)%outinfo%on(15) )
then
187 id = hecmw_result_dtype_node
188 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(15), ndof )
190 call hecmw_result_add( id, nitem, label, fstrdynamic%VEL(:,idx) )
194 if( is_dynamic .and. fstrsolid%output_ctrl(3)%outinfo%on(16) )
then
195 id = hecmw_result_dtype_node
196 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(16), ndof )
197 label =
'ACCELERATION'
198 call hecmw_result_add( id, nitem, label, fstrdynamic%ACC(:,idx) )
202 if( fstrsolid%output_ctrl(3)%outinfo%on(2) )
then
203 id = hecmw_result_dtype_node
204 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(2), ndof )
205 label =
'REACTION_FORCE'
206 call hecmw_result_add( id, nitem, label, fstrsolid%REACTION )
211 if(is_33shell == 1 .or. ndof == 6)
then
218 if(
associated(fstrsolid%SHELL) .and. fstrsolid%output_ctrl(3)%outinfo%on(27) )
then
219 allocate(clyr(2*ntot_lyr))
222 clyr(2*i-1)=
"_L"//trim(cnum)//
"+"
223 clyr(2*i )=
"_L"//trim(cnum)//
"-"
234 if( fstrsolid%output_ctrl(3)%outinfo%on(9) .and. ndof/=6 )
then
235 id = hecmw_result_dtype_elem
236 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(9), ndof )
237 ngauss = fstrsolid%maxn_gauss
241 write(label,
'(a,a)')
'GaussSTRAIN',trim(adjustl(s))
242 label = adjustl(label)
243 do i = 1, hecmesh%n_elem
244 if(
associated(fstrsolid%elements(i)%gausses) )
then
245 if( k <=
size(fstrsolid%elements(i)%gausses) )
then
247 work(nitem*(i-1)+j) = fstrsolid%elements(i)%gausses(k)%strain_out(j)
252 call hecmw_result_add( id, nitem, label, work )
257 if( fstrsolid%output_ctrl(3)%outinfo%on(10) .and. ndof/=6 )
then
258 id = hecmw_result_dtype_elem
259 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(10), ndof )
260 ngauss = fstrsolid%maxn_gauss
264 write(label,
'(a,a)')
'GaussSTRESS',trim(adjustl(s))
265 label = adjustl(label)
266 do i = 1, hecmesh%n_elem
267 if(
associated(fstrsolid%elements(i)%gausses) )
then
268 if( k <=
size(fstrsolid%elements(i)%gausses) )
then
270 work(nitem*(i-1)+j) = fstrsolid%elements(i)%gausses(k)%stress_out(j)
275 call hecmw_result_add( id, nitem, label, work )
280 if( fstrsolid%output_ctrl(3)%outinfo%on(11) .and. fstrsolid%StaticType/=3 )
then
281 id = hecmw_result_dtype_elem
282 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(11), ndof )
283 ngauss = fstrsolid%maxn_gauss
287 write(label,
'(a,a)')
'PLASTIC_GaussSTRAIN',trim(adjustl(s))
288 label = adjustl(label)
289 do i = 1, hecmesh%n_elem
290 if(
associated(fstrsolid%elements(i)%gausses) )
then
291 if( k <=
size(fstrsolid%elements(i)%gausses) )
then
292 work(i) = fstrsolid%elements(i)%gausses(k)%plstrain
296 call hecmw_result_add( id, nitem, label, work )
301 if( fstrsolid%output_ctrl(3)%outinfo%on(12) .and.
associated(tnstrain) )
then
302 id = hecmw_result_dtype_node
303 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(12), ndof )
304 label =
'THERMAL_NodalSTRAIN'
305 call hecmw_result_add( id, nitem, label, tnstrain )
309 if( fstrsolid%output_ctrl(3)%outinfo%on(13) .and.
associated(testrain) )
then
310 id = hecmw_result_dtype_elem
311 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(13), ndof )
312 label =
'THERMAL_ElementalSTRAIN'
313 call hecmw_result_add( id, nitem, label, testrain )
317 if( fstrsolid%output_ctrl(3)%outinfo%on(14) .and.
associated(testrain) )
then
318 id = hecmw_result_dtype_elem
319 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(14), ndof )
320 ngauss = fstrsolid%maxn_gauss
323 write(label,
'(a,a)')
'THERMAL_GaussSTRAIN',trim(adjustl(s))
324 label = adjustl(label)
325 do i = 1, hecmesh%n_elem
326 if( k > ngauss )
then
328 work(nitem*(i-1)+j) = 0.d0
336 call hecmw_result_add( id, nitem, label, work )
341 if( fstrsolid%output_ctrl(3)%outinfo%on(29) )
then
342 id = hecmw_result_dtype_elem
343 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(29), ndof )
344 label =
"YIELD_RATIO"
345 call hecmw_result_add( id, nitem, label, yield_ratio )
349 if( fstrsolid%output_ctrl(3)%outinfo%on(30) .and.
associated(fstrsolid%CONT_NFORCE) )
then
350 id = hecmw_result_dtype_node
351 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(30), ndof )
352 label =
'CONTACT_NFORCE'
353 call hecmw_result_add( id, nitem, label, fstrsolid%CONT_NFORCE )
357 if( fstrsolid%output_ctrl(3)%outinfo%on(31) .and.
associated(fstrsolid%CONT_FRIC) )
then
358 id = hecmw_result_dtype_node
359 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(31), ndof )
360 label =
'CONTACT_FRICTION'
361 call hecmw_result_add( id, nitem, label, fstrsolid%CONT_FRIC )
365 if( fstrsolid%output_ctrl(3)%outinfo%on(32) .and.
associated(fstrsolid%CONT_RELVEL) )
then
366 id = hecmw_result_dtype_node
367 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(32), ndof )
368 label =
'CONTACT_RELVEL'
369 call hecmw_result_add( id, nitem, label, fstrsolid%CONT_RELVEL )
373 if( fstrsolid%output_ctrl(3)%outinfo%on(33) .and.
associated(fstrsolid%CONT_STATE) )
then
374 id = hecmw_result_dtype_node
375 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(33), ndof )
376 label =
'CONTACT_STATE'
377 call hecmw_result_add( id, nitem, label, fstrsolid%CONT_STATE )
381 if( fstrsolid%output_ctrl(3)%outinfo%on(36) .and.
associated(fstrsolid%CONT_NTRAC) )
then
382 id = hecmw_result_dtype_node
383 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(36), ndof )
384 label =
'CONTACT_NTRACTION'
385 call hecmw_result_add( id, nitem, label, fstrsolid%CONT_NTRAC )
389 if( fstrsolid%output_ctrl(3)%outinfo%on(37) .and.
associated(fstrsolid%CONT_FTRAC) )
then
390 id = hecmw_result_dtype_node
391 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(37), ndof )
392 label =
'CONTACT_FTRACTION'
393 call hecmw_result_add( id, nitem, label, fstrsolid%CONT_FTRAC )
413 if( fstrsolid%output_ctrl(3)%outinfo%on(44) )
then
414 id = hecmw_result_dtype_elem
415 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(44), ndof )
418 do i = 1, hecmesh%n_elem
419 if( fstrsolid%elements(i)%elemact_flag /= kelact_inactive ) work(i) = 1.d0
421 call hecmw_result_add( id, nitem, label, work )
427 call hecmw_result_write_by_name( nameid )
430 call hecmw_result_write_by_addfname( nameid, addfname )
434 call hecmw_result_finalize
447 type (hecmwST_local_mesh) :: hecMESH
448 type (fstr_solid) :: fstrSOLID
449 type (fstr_solid_physic_val) :: RES
450 integer(kind=kint) :: istep, flag
451 integer(kind=kint) :: n_lyr, cid
453 character(len=HECMW_HEADER_LEN) :: header
454 character(len=HECMW_NAME_LEN) :: s, label, nameID, addfname
455 character(len=16) :: clyr
456 character(len=12) :: cnum
457 integer(kind=kint) :: i, j, k, ndof, mdof, id, nitem, nn, mm, ngauss, it
458 real(kind=
kreal),
allocatable :: work(:)
461 allocate( work(hecmesh%n_elem) )
464 if (fstrsolid%output_ctrl(3)%outinfo%on(3))
then
465 id = hecmw_result_dtype_node
466 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(3), ndof )
467 label =
'NodalSTRAIN'//trim(clyr)
468 call hecmw_result_add( id, nitem, label, res%STRAIN )
472 if( fstrsolid%output_ctrl(3)%outinfo%on(4) )
then
473 id = hecmw_result_dtype_node
474 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(4), ndof )
475 label =
'NodalSTRESS'//trim(clyr)
476 call hecmw_result_add( id, nitem, label, res%STRESS )
480 if( fstrsolid%output_ctrl(3)%outinfo%on(5) )
then
481 id = hecmw_result_dtype_node
482 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(5), ndof )
483 label =
'NodalMISES'//trim(clyr)
484 call hecmw_result_add( id, nitem, label, res%MISES )
488 if( fstrsolid%output_ctrl(3)%outinfo%on(19) )
then
489 id = hecmw_result_dtype_node
490 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(19), ndof )
491 label =
'NodalPrincipalSTRESS'//trim(clyr)
492 call hecmw_result_add( id, nitem, label, res%PSTRESS )
496 if( fstrsolid%output_ctrl(3)%outinfo%on(21) )
then
497 id = hecmw_result_dtype_node
498 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(21), ndof )
499 label =
'NodalPrincipalSTRAIN'//trim(clyr)
500 call hecmw_result_add( id, nitem, label, res%PSTRAIN )
504 if( fstrsolid%output_ctrl(3)%outinfo%on(23) )
then
505 id = hecmw_result_dtype_node
508 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(23), ndof )
509 label =
'NodalPrincipalSTRESSVector'//trim(cnum)//trim(clyr)
510 call hecmw_result_add( id, nitem, label, res%PSTRESS_VECT(:,k) )
515 if( fstrsolid%output_ctrl(3)%outinfo%on(25) )
then
516 id = hecmw_result_dtype_node
519 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(25), ndof )
520 label =
'NodalPrincipalSTRAINVector'//trim(cnum)//trim(clyr)
521 call hecmw_result_add( id, nitem, label, res%PSTRAIN_VECT(:,k) )
527 if( fstrsolid%output_ctrl(3)%outinfo%on(6) )
then
528 id = hecmw_result_dtype_elem
529 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(6), ndof )
530 label =
'ElementalSTRAIN'//trim(clyr)
531 call hecmw_result_add( id, nitem, label, res%ESTRAIN )
535 if( fstrsolid%output_ctrl(3)%outinfo%on(7) )
then
536 id = hecmw_result_dtype_elem
537 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(7), ndof )
538 label =
'ElementalSTRESS'//trim(clyr)
539 call hecmw_result_add( id, nitem, label, res%ESTRESS )
543 if( fstrsolid%output_ctrl(3)%outinfo%on(35) )
then
544 id = hecmw_result_dtype_elem
545 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(35), ndof )
546 label =
'ElementalNQM'//trim(clyr)
547 call hecmw_result_add( id, nitem, label, res%ENQM )
551 if( fstrsolid%output_ctrl(3)%outinfo%on(8))
then
552 id = hecmw_result_dtype_elem
553 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(8), ndof )
554 label =
'ElementalMISES'//trim(clyr)
555 call hecmw_result_add( id, nitem, label, res%EMISES )
559 if( fstrsolid%output_ctrl(3)%outinfo%on(20) )
then
560 id = hecmw_result_dtype_elem
561 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(20), ndof )
562 label =
'ElementalPrincipalSTRESS'//trim(clyr)
563 call hecmw_result_add( id, nitem, label, res%EPSTRESS )
567 if( fstrsolid%output_ctrl(3)%outinfo%on(22) )
then
568 id = hecmw_result_dtype_elem
569 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(22), ndof )
570 label =
'ElementalPrincipalSTRAIN'//trim(clyr)
571 call hecmw_result_add( id, nitem, label, res%EPSTRAIN )
575 if( fstrsolid%output_ctrl(3)%outinfo%on(24) )
then
576 id = hecmw_result_dtype_elem
579 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(24), ndof )
580 label =
'ElementalPrincipalSTRESSVector'//trim(cnum)//trim(clyr)
581 call hecmw_result_add( id, nitem, label, res%EPSTRESS_VECT(:,k) )
586 if( fstrsolid%output_ctrl(3)%outinfo%on(26) )
then
587 id = hecmw_result_dtype_elem
590 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(26), ndof )
591 label =
'ElementalPrincipalSTRAINVector'//trim(cnum)//trim(clyr)
592 call hecmw_result_add( id, nitem, label, res%EPSTRAIN_VECT(:,k) )
597 if( fstrsolid%output_ctrl(3)%outinfo%on(43) )
then
598 id = hecmw_result_dtype_elem
599 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(43), ndof )
600 label =
'ElementalPLSTRAIN'//trim(clyr)
601 call hecmw_result_add( id, nitem, label, res%EPLSTRAIN )
617 type(hecmwst_result_data) :: fstrresult
618 integer(kind=kint) :: istep
619 real(kind=
kreal) :: time, coords(3,3)
621 integer(kind=kint) :: n_lyr, ntot_lyr, it, coef33, is_33shell, is_33beam
622 integer(kind=kint) :: i, j, k, ndof, mdof, gcomp, gitem, ncomp, nitem, iitem, ecomp, eitem, jitem, nn, mm
623 integer(kind=kint) :: idx
624 real(kind=
kreal),
pointer :: tnstrain(:), testrain(:)
625 real(kind=
kreal),
allocatable ::unode(:)
626 character(len=12) :: cnum
627 character(len=16),
allocatable :: clyr(:)
628 logical :: is_dynamic
630 is_dynamic =
present(fstrdynamic)
632 tnstrain => fstrsolid%TNSTRAIN
633 testrain => fstrsolid%TESTRAIN
635 ntot_lyr = fstrsolid%max_lyr
636 is_33shell = fstrsolid%is_33shell
637 is_33beam = fstrsolid%is_33beam
640 if( hecmesh%n_elem>hecmesh%n_node ) mm = hecmesh%n_elem
642 if( is_dynamic )
then
644 if( fstrdynamic%idx_eqa==1 .and. istep>0 ) idx = 2
648 if( ndof==2 ) mdof = 3
649 if( ndof==3 ) mdof = 6
650 if( ndof==4 ) mdof = 6
651 if( ndof==6 ) mdof = 6
653 if(is_33shell == 1 .and. fstrsolid%output_ctrl(4)%outinfo%on(27) )
then
654 coef33 = 1 + 2*ntot_lyr
659 call hecmw_nullify_result_data( fstrresult )
672 if( fstrsolid%output_ctrl(4)%outinfo%on(1) )
then
675 nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(1), 3 )
677 nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(1), 1 )
678 else if(ndof == 6)
then
680 nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(1), 3 )
683 nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(1), ndof )
687 if( is_dynamic .and. fstrsolid%output_ctrl(4)%outinfo%on(15) )
then
689 nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(15), ndof )
692 if( is_dynamic .and. fstrsolid%output_ctrl(4)%outinfo%on(16) )
then
694 nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(16), ndof )
697 if( fstrsolid%output_ctrl(4)%outinfo%on(17) .and.
associated(fstrsolid%temperature) )
then
699 nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(17), ndof )
702 if( fstrsolid%output_ctrl(4)%outinfo%on(18) )
then
705 nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(18), 3 )
707 if( is_33shell == 1 )
then
709 nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(18), ndof )
714 if( fstrsolid%output_ctrl(4)%outinfo%on(2) )
then
716 nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(2), ndof )
719 if( fstrsolid%output_ctrl(4)%outinfo%on(3) )
then
720 ncomp = ncomp + 1*coef33
721 nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(3), ndof )*coef33
724 if( fstrsolid%output_ctrl(4)%outinfo%on(4) )
then
725 ncomp = ncomp + 1*coef33
726 nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(4), ndof )*coef33
729 if( fstrsolid%output_ctrl(4)%outinfo%on(5) )
then
730 ncomp = ncomp + 1*coef33
731 nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(5), ndof )*coef33
734 if( fstrsolid%output_ctrl(4)%outinfo%on(19) )
then
735 ncomp = ncomp + 1*coef33
736 nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(19), ndof )*coef33
739 if( fstrsolid%output_ctrl(4)%outinfo%on(21) )
then
740 ncomp = ncomp + 1*coef33
741 nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(21), ndof )*coef33
744 if( fstrsolid%output_ctrl(4)%outinfo%on(23) )
then
745 ncomp = ncomp + 3*coef33
746 nitem = nitem + 3*n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(23), ndof )*coef33
749 if( fstrsolid%output_ctrl(4)%outinfo%on(25) )
then
750 ncomp = ncomp + 3*coef33
751 nitem = nitem + 3*n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(25), ndof )*coef33
754 if( fstrsolid%output_ctrl(4)%outinfo%on(12) .and.
associated(tnstrain) )
then
756 nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(12), ndof )
759 if( fstrsolid%output_ctrl(4)%outinfo%on(30) .and.
associated(fstrsolid%CONT_NFORCE) )
then
761 nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(30), ndof )
764 if( fstrsolid%output_ctrl(4)%outinfo%on(31) .and.
associated(fstrsolid%CONT_FRIC) )
then
766 nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(31), ndof )
769 if( fstrsolid%output_ctrl(4)%outinfo%on(32) .and.
associated(fstrsolid%CONT_RELVEL) )
then
771 nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(32), ndof )
774 if( fstrsolid%output_ctrl(4)%outinfo%on(33) .and.
associated(fstrsolid%CONT_STATE) )
then
776 nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(33), ndof )
779 if( fstrsolid%output_ctrl(4)%outinfo%on(36) .and.
associated(fstrsolid%CONT_NTRAC) )
then
781 nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(36), ndof )
784 if( fstrsolid%output_ctrl(4)%outinfo%on(37) .and.
associated(fstrsolid%CONT_FTRAC) )
then
786 nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(37), ndof )
789 if( fstrsolid%output_ctrl(4)%outinfo%on(38) )
then
791 nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(38), ndof )
800 if( fstrsolid%output_ctrl(4)%outinfo%on(6) )
then
802 eitem = eitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(6), ndof )
805 if( fstrsolid%output_ctrl(4)%outinfo%on(7) )
then
807 eitem = eitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(7), ndof )
810 if( fstrsolid%output_ctrl(4)%outinfo%on(8) )
then
812 eitem = eitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(8), ndof )
815 if( fstrsolid%output_ctrl(4)%outinfo%on(20) )
then
817 eitem = eitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(20), ndof )
820 if( fstrsolid%output_ctrl(4)%outinfo%on(22) )
then
822 eitem = eitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(22), ndof )
825 if( fstrsolid%output_ctrl(4)%outinfo%on(24) )
then
827 eitem = eitem + 3*n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(24), ndof )
830 if( fstrsolid%output_ctrl(4)%outinfo%on(26) )
then
832 eitem = eitem + 3*n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(26), ndof )
835 if( fstrsolid%output_ctrl(4)%outinfo%on(43) )
then
837 eitem = eitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(43), ndof )
840 if( fstrsolid%output_ctrl(4)%outinfo%on(34) )
then
842 eitem = eitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(34), ndof )
845 if( fstrsolid%output_ctrl(4)%outinfo%on(42) )
then
846 ecomp = ecomp + 3*coef33
847 eitem = eitem + 3*n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(42), ndof )*coef33
850 if( fstrsolid%output_ctrl(4)%outinfo%on(39) )
then
852 eitem = eitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(39), ndof )
855 if( fstrsolid%output_ctrl(4)%outinfo%on(40) )
then
857 eitem = eitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(40), ndof )
860 if( fstrsolid%output_ctrl(4)%outinfo%on(44) )
then
862 eitem = eitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(44), ndof )
866 fstrresult%ng_component = gcomp
867 fstrresult%nn_component = ncomp
868 fstrresult%ne_component = ecomp
869 allocate( fstrresult%ng_dof(gcomp) )
870 allocate( fstrresult%global_label(gcomp) )
871 allocate( fstrresult%global_val_item(gitem) )
872 allocate( fstrresult%nn_dof(ncomp) )
873 allocate( fstrresult%node_label(ncomp) )
874 allocate( fstrresult%node_val_item(nitem*hecmesh%n_node) )
875 allocate( fstrresult%ne_dof(ecomp) )
876 allocate( fstrresult%elem_label(ecomp) )
877 allocate( fstrresult%elem_val_item(eitem*hecmesh%n_elem) )
884 fstrresult%ng_dof(1) = 1
885 fstrresult%global_label(1) =
"TOTALTIME"
886 fstrresult%global_val_item(1) = time
889 if (fstrsolid%output_ctrl(4)%outinfo%on(1) )
then
893 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(1), 3 )
894 fstrresult%nn_dof(ncomp) = nn
895 fstrresult%node_label(ncomp) =
'VELOCITY'
896 do i = 1, hecmesh%n_node
898 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = fstrdynamic%DISP(4*(i-1)+j,idx)
904 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(1), 1 )
905 fstrresult%nn_dof(ncomp) = nn
906 fstrresult%node_label(ncomp) =
'PRESSURE'
907 do i = 1, hecmesh%n_node
908 fstrresult%node_val_item(nitem*(i-1)+1+iitem) = fstrdynamic%DISP(4*i,idx)
911 else if(ndof == 6)
then
913 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(1), 3 )
914 fstrresult%nn_dof(ncomp) = nn
915 fstrresult%node_label(ncomp) =
'DISPLACEMENT'
916 allocate( unode(3*hecmesh%n_node) )
918 if( is_dynamic )
then
919 do i=1, hecmesh%n_node
920 unode((i-1)*3+1:(i-1)*3+3) = fstrdynamic%DISP((i-1)*ndof+1:(i-1)*ndof+3, idx)
923 do i=1, hecmesh%n_node
924 unode((i-1)*3+1:(i-1)*3+3) = fstrsolid%unode((i-1)*ndof+1:(i-1)*ndof+3)
927 do i = 1, hecmesh%n_node
929 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = unode(nn*(i-1)+j)
937 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(1), ndof )
938 fstrresult%nn_dof(ncomp) = nn
939 fstrresult%node_label(ncomp) =
'DISPLACEMENT'
940 allocate( unode(ndof*hecmesh%n_node) )
942 if( is_dynamic )
then
943 unode(:) = fstrdynamic%DISP(:,idx)
945 unode(:) = fstrsolid%unode(:)
947 if(is_33beam == 1)
then
950 if(is_33shell == 1)
then
953 do i = 1, hecmesh%n_node
955 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = unode(nn*(i-1)+j)
964 if( is_dynamic .and. fstrsolid%output_ctrl(4)%outinfo%on(15) )
then
966 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(15), ndof )
967 fstrresult%nn_dof(ncomp) = nn
968 fstrresult%node_label(ncomp) =
'VELOCITY'
969 do i = 1, hecmesh%n_node
971 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = fstrdynamic%VEL(nn*(i-1)+j,idx)
978 if( is_dynamic .and. fstrsolid%output_ctrl(4)%outinfo%on(16) )
then
980 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(16), ndof )
981 fstrresult%nn_dof(ncomp) = nn
982 fstrresult%node_label(ncomp) =
'ACCELERATION'
983 do i = 1, hecmesh%n_node
985 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = fstrdynamic%ACC(nn*(i-1)+j,idx)
992 if( fstrsolid%output_ctrl(4)%outinfo%on(17) .and.
associated(fstrsolid%temperature))
then
994 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(17), ndof )
995 fstrresult%nn_dof(ncomp) = nn
996 fstrresult%node_label(ncomp) =
'TEMPERATURE'
997 do i = 1, hecmesh%n_node
999 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = fstrsolid%temperature(nn*(i-1)+j)
1006 if( fstrsolid%output_ctrl(4)%outinfo%on(18) )
then
1010 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(1), 3 )
1011 fstrresult%nn_dof(ncomp) = nn
1012 fstrresult%node_label(ncomp) =
'ROTATION'
1013 allocate( unode(3*hecmesh%n_node) )
1015 if( is_dynamic )
then
1016 do i=1, hecmesh%n_node
1017 unode((i-1)*3+1:(i-1)*3+3) = fstrdynamic%DISP((i-1)*ndof+4:(i-1)*ndof+6, idx)
1020 do i=1, hecmesh%n_node
1021 unode((i-1)*3+1:(i-1)*3+3) = fstrsolid%unode((i-1)*ndof+4:(i-1)*ndof+6)
1024 do i = 1, hecmesh%n_node
1026 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = unode(nn*(i-1)+j)
1032 if ( is_33shell == 1)
then
1034 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(1), ndof )
1035 fstrresult%nn_dof(ncomp) = nn
1036 fstrresult%node_label(ncomp) =
'ROTATION'
1037 allocate( unode(ndof*hecmesh%n_node) )
1040 do i = 1, hecmesh%n_node
1042 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = unode(nn*(i-1)+j)
1052 if( fstrsolid%output_ctrl(4)%outinfo%on(2) )
then
1054 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(2), ndof )
1055 fstrresult%nn_dof(ncomp) = nn
1056 fstrresult%node_label(ncomp) =
'REACTION_FORCE'
1057 do i = 1, hecmesh%n_node
1059 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = fstrsolid%REACTION(nn*(i-1)+j)
1065 if(is_33shell == 1 .or. ndof == 6)
then
1067 & fstrsolid%SHELL, nitem, iitem, ncomp, eitem, jitem, ecomp, 1,
" " )
1070 & fstrsolid%SOLID, nitem, iitem, ncomp, eitem, jitem, ecomp, 1,
" " )
1074 if(
associated(fstrsolid%SHELL) .and. fstrsolid%output_ctrl(4)%outinfo%on(27) .and. is_33shell == 1 )
then
1075 allocate(clyr(2*ntot_lyr))
1078 clyr(2*i-1)=
"_L"//trim(cnum)//
"+"
1079 clyr(2*i )=
"_L"//trim(cnum)//
"-"
1083 & fstrsolid%SHELL%LAYER(i)%PLUS, nitem, iitem, ncomp, eitem, jitem, ecomp, i+1, clyr(2*i-1) )
1085 & fstrsolid%SHELL%LAYER(i)%MINUS, nitem, iitem, ncomp, eitem, jitem, ecomp, i+1, clyr(2*i ) )
1091 if( fstrsolid%output_ctrl(4)%outinfo%on(12) .and.
associated(tnstrain) )
then
1093 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(12), ndof )
1094 fstrresult%nn_dof(ncomp) = nn
1095 fstrresult%node_label(ncomp) =
'THERMAL_NodalSTRAIN'
1096 do i = 1, hecmesh%n_node
1098 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = tnstrain(nn*(i-1)+j)
1105 if( fstrsolid%output_ctrl(4)%outinfo%on(30) .and.
associated(fstrsolid%CONT_NFORCE) )
then
1107 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(30), ndof )
1108 fstrresult%nn_dof(ncomp) = nn
1109 fstrresult%node_label(ncomp) =
'CONTACT_NFORCE'
1110 do i = 1, hecmesh%n_node
1112 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = fstrsolid%CONT_NFORCE(nn*(i-1)+j)
1119 if( fstrsolid%output_ctrl(4)%outinfo%on(31) .and.
associated(fstrsolid%CONT_FRIC) )
then
1121 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(31), ndof )
1122 fstrresult%nn_dof(ncomp) = nn
1123 fstrresult%node_label(ncomp) =
'CONTACT_FRICTION'
1124 do i = 1, hecmesh%n_node
1126 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = fstrsolid%CONT_FRIC(nn*(i-1)+j)
1133 if( fstrsolid%output_ctrl(4)%outinfo%on(32) .and.
associated(fstrsolid%CONT_RELVEL) )
then
1135 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(32), ndof )
1136 fstrresult%nn_dof(ncomp) = nn
1137 fstrresult%node_label(ncomp) =
'CONTACT_RELVEL'
1138 do i = 1, hecmesh%n_node
1140 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = fstrsolid%CONT_RELVEL(nn*(i-1)+j)
1147 if( fstrsolid%output_ctrl(4)%outinfo%on(33) .and.
associated(fstrsolid%CONT_STATE) )
then
1149 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(33), ndof )
1150 fstrresult%nn_dof(ncomp) = nn
1151 fstrresult%node_label(ncomp) =
'CONTACT_STATE'
1152 do i = 1, hecmesh%n_node
1154 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = fstrsolid%CONT_STATE(nn*(i-1)+j)
1161 if( fstrsolid%output_ctrl(4)%outinfo%on(36) .and.
associated(fstrsolid%CONT_NTRAC) )
then
1163 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(36), ndof )
1164 fstrresult%nn_dof(ncomp) = nn
1165 fstrresult%node_label(ncomp) =
'CONTACT_NTRACTION'
1166 do i = 1, hecmesh%n_node
1168 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = fstrsolid%CONT_NTRAC(nn*(i-1)+j)
1175 if( fstrsolid%output_ctrl(4)%outinfo%on(37) .and.
associated(fstrsolid%CONT_FTRAC) )
then
1177 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(37), ndof )
1178 fstrresult%nn_dof(ncomp) = nn
1179 fstrresult%node_label(ncomp) =
'CONTACT_FTRACTION'
1180 do i = 1, hecmesh%n_node
1182 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = fstrsolid%CONT_FTRAC(nn*(i-1)+j)
1189 if( fstrsolid%output_ctrl(4)%outinfo%on(38) )
then
1191 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(38), ndof )
1192 fstrresult%nn_dof(ncomp) = nn
1193 fstrresult%node_label(ncomp) =
'NODE_ID'
1194 do i = 1, hecmesh%n_node
1195 fstrresult%node_val_item(nitem*(i-1)+1+iitem) = hecmesh%global_node_ID(i)
1214 if(fstrsolid%output_ctrl(4)%outinfo%on(34))
then
1216 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(34), ndof )
1217 fstrresult%ne_dof(ecomp) = nn
1218 fstrresult%elem_label(ecomp) =
'MATERIAL_ID'
1219 do i = 1, hecmesh%n_elem
1220 j = hecmesh%section_ID(i)
1221 fstrresult%elem_val_item(eitem*(i-1)+1+jitem) = hecmesh%section%sect_mat_ID_item(j)
1227 if(fstrsolid%output_ctrl(4)%outinfo%on(39))
then
1229 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(39), ndof )
1230 fstrresult%ne_dof(ecomp) = nn
1231 fstrresult%elem_label(ecomp) =
'ELEM_ID'
1232 do i = 1, hecmesh%n_elem
1233 fstrresult%elem_val_item(eitem*(i-1)+1+jitem) = hecmesh%global_elem_ID(i)
1239 if(fstrsolid%output_ctrl(4)%outinfo%on(40))
then
1241 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(40), ndof )
1242 fstrresult%ne_dof(ecomp) = nn
1243 fstrresult%elem_label(ecomp) =
'SECTION_ID'
1244 do i = 1, hecmesh%n_elem
1245 fstrresult%elem_val_item(eitem*(i-1)+1+jitem) = hecmesh%section_ID(i)
1251 if( fstrsolid%output_ctrl(4)%outinfo%on(44) )
then
1253 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(44), ndof )
1254 fstrresult%ne_dof(ecomp) = nn
1255 fstrresult%elem_label(ecomp) =
'ELEMACT'
1256 do i = 1, hecmesh%n_elem
1257 if( fstrsolid%elements(i)%elemact_flag /= kelact_inactive )
then
1258 fstrresult%elem_val_item(eitem*(i-1)+1+jitem) = 1.d0
1260 fstrresult%elem_val_item(eitem*(i-1)+1+jitem) = 0.d0
1269 & iitem, ncomp, eitem, jitem, ecomp, nlyr, clyr )
1277 type (hecmwST_local_mesh) :: hecMESH
1278 type (fstr_solid) :: fstrSOLID
1279 type (hecmwST_result_data):: fstrRESULT
1280 type (fstr_solid_physic_val) :: RES
1281 integer(kind=kint) :: istep, flag
1282 integer(kind=kint) :: n_lyr, cid
1284 character(len=HECMW_HEADER_LEN) :: header
1285 character(len=HECMW_NAME_LEN) :: s, label, nameID, addfname
1286 character(len=16) :: clyr
1287 character(len=12) :: cnum
1288 integer(kind=kint) :: i, j, k, ndof, mdof, id, nitem, eitem, nn, mm, ngauss, it
1289 integer(kind=kint) :: iitem, ncomp, jitem, ecomp, nlyr
1290 integer(kind=kint) :: isect, cdsys_ID, serr
1291 real(kind=
kreal) :: coords(3,3), coordsys(3, 3)
1292 ndof = hecmesh%n_dof
1295 if( fstrsolid%output_ctrl(4)%outinfo%on(3))
then
1296 nn =
n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(3), ndof )
1298 fstrresult%nn_dof(ncomp) = nn
1299 fstrresult%node_label(ncomp) =
'NodalSTRAIN'//trim(clyr)
1300 do i = 1, hecmesh%n_node
1302 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = res%STRAIN(nn*(i-1)+j)
1309 if(fstrsolid%output_ctrl(4)%outinfo%on(4))
then
1311 nn =
n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(4), ndof )
1312 fstrresult%nn_dof(ncomp) = nn
1313 fstrresult%node_label(ncomp) =
'NodalSTRESS'//trim(clyr)
1314 do i = 1, hecmesh%n_node
1316 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = res%STRESS((nn)*(i-1)+j)
1323 if(fstrsolid%output_ctrl(4)%outinfo%on(5))
then
1325 nn =
n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(5), ndof )
1326 fstrresult%nn_dof(ncomp) = nn
1327 fstrresult%node_label(ncomp) =
'NodalMISES'//trim(clyr)
1328 do i = 1, hecmesh%n_node
1329 fstrresult%node_val_item(nitem*(i-1)+1+iitem) = res%MISES(i)
1335 if(fstrsolid%output_ctrl(4)%outinfo%on(19))
then
1337 nn =
n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(19), ndof )
1338 fstrresult%nn_dof(ncomp) = nn
1339 fstrresult%node_label(ncomp) =
'NodalPrincipalSTRESS'//trim(clyr)
1340 do i = 1, hecmesh%n_node
1342 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = res%PSTRESS((nn)*(i-1)+j)
1349 if(fstrsolid%output_ctrl(4)%outinfo%on(23))
then
1351 write(cnum,
'(i0)') k
1353 nn =
n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(23), ndof )
1354 fstrresult%nn_dof(ncomp) = nn
1355 fstrresult%node_label(ncomp) =
'NodalPrincipalSTRESSVector'//trim(cnum)//trim(clyr)
1356 do i = 1, hecmesh%n_node
1358 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = res%PSTRESS_VECT((nn)*(i-1)+j,k)
1366 if( fstrsolid%output_ctrl(4)%outinfo%on(21))
then
1367 nn =
n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(21), ndof )
1369 fstrresult%nn_dof(ncomp) = nn
1370 fstrresult%node_label(ncomp) =
'NodalPrincipalSTRAIN'//trim(clyr)
1371 do i = 1, hecmesh%n_node
1373 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = res%PSTRAIN(nn*(i-1)+j)
1380 if( fstrsolid%output_ctrl(4)%outinfo%on(25))
then
1382 write(cnum,
'(i0)') k
1383 nn =
n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(25), ndof )
1385 fstrresult%nn_dof(ncomp) = nn
1386 fstrresult%node_label(ncomp) =
'NodalPrincipalSTRAINVector'//trim(cnum)//trim(clyr)
1387 do i = 1, hecmesh%n_node
1389 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = res%PSTRAIN_VECT(nn*(i-1)+j,k)
1397 if( fstrsolid%output_ctrl(4)%outinfo%on(6))
then
1398 nn =
n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(6), ndof )
1400 fstrresult%ne_dof(ecomp) = nn
1401 fstrresult%elem_label(ecomp) =
'ElementalSTRAIN'
1402 do i = 1, hecmesh%n_elem
1404 fstrresult%elem_val_item(eitem*(i-1)+j+jitem) = res%ESTRAIN(nn*(i-1)+j)
1411 if(fstrsolid%output_ctrl(4)%outinfo%on(7))
then
1413 nn =
n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(7), ndof )
1414 fstrresult%ne_dof(ecomp) = nn
1415 fstrresult%elem_label(ecomp) =
'ElementalSTRESS'
1416 do i = 1, hecmesh%n_elem
1418 fstrresult%elem_val_item(eitem*(i-1)+j+jitem) = res%ESTRESS((nn)*(i-1)+j)
1425 if(fstrsolid%output_ctrl(4)%outinfo%on(8))
then
1427 nn =
n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(8), ndof )
1428 fstrresult%ne_dof(ecomp) = nn
1429 fstrresult%elem_label(ecomp) =
'ElementalMISES'
1430 do i = 1, hecmesh%n_elem
1431 fstrresult%elem_val_item(eitem*(i-1)+1+jitem) = res%EMISES(i)
1437 if(fstrsolid%output_ctrl(4)%outinfo%on(20))
then
1439 nn =
n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(20), ndof )
1440 fstrresult%ne_dof(ecomp) = nn
1441 fstrresult%elem_label(ecomp) =
'ElementalPrincipalSTRESS'
1442 do i = 1, hecmesh%n_elem
1444 fstrresult%elem_val_item(eitem*(i-1)+j+jitem) = res%EPSTRESS((nn)*(i-1)+j)
1451 if(fstrsolid%output_ctrl(4)%outinfo%on(22))
then
1453 nn =
n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(22), ndof )
1454 fstrresult%ne_dof(ecomp) = nn
1455 fstrresult%elem_label(ecomp) =
'ElementalPrincipalSTRAIN'
1456 do i = 1, hecmesh%n_elem
1458 fstrresult%elem_val_item(eitem*(i-1)+j+jitem) = res%EPSTRAIN((nn)*(i-1)+j)
1465 if(fstrsolid%output_ctrl(4)%outinfo%on(24))
then
1469 nn =
n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(24), ndof )
1470 fstrresult%ne_dof(ecomp) = nn
1471 fstrresult%elem_label(ecomp) =
'ElementalPrincipalSTRESSVector'//trim(cnum)
1472 do i = 1, hecmesh%n_elem
1474 fstrresult%elem_val_item(eitem*(i-1)+j+jitem) = res%EPSTRESS_VECT((nn)*(i-1)+j,k)
1482 if(fstrsolid%output_ctrl(4)%outinfo%on(26))
then
1486 nn =
n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(26), ndof )
1487 fstrresult%ne_dof(ecomp) = nn
1488 fstrresult%elem_label(ecomp) =
'ElementalPrincipalSTRAINVector'//trim(cnum)
1489 do i = 1, hecmesh%n_elem
1491 fstrresult%elem_val_item(eitem*(i-1)+j+jitem) = res%EPSTRAIN_VECT((nn)*(i-1)+j,k)
1499 if(fstrsolid%output_ctrl(4)%outinfo%on(43))
then
1501 nn =
n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(43), ndof )
1502 fstrresult%ne_dof(ecomp) = nn
1503 fstrresult%elem_label(ecomp) =
'ElementalPLSTRAIN'
1504 do i = 1, hecmesh%n_elem
1505 res%EPLSTRAIN(i) = 0.d0
1506 do j = 1,
size(fstrsolid%elements(i)%gausses)
1507 res%EPLSTRAIN(i) = res%EPLSTRAIN(i) + fstrsolid%elements(i)%gausses(j)%plstrain
1509 res%EPLSTRAIN(i) = res%EPLSTRAIN(i) /
size(fstrsolid%elements(i)%gausses)
1510 fstrresult%elem_val_item(eitem*(i-1)+1+jitem) = res%EPLSTRAIN(i)
1516 if(fstrsolid%output_ctrl(4)%outinfo%on(42))
then
1520 nn =
n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(42), ndof )
1521 fstrresult%ne_dof(ecomp) = nn
1522 fstrresult%elem_label(ecomp) =
'ORIENTATION'//trim(cnum)
1524 do i = 1, hecmesh%n_elem
1525 isect = hecmesh%section_ID(i)
1526 cdsys_id = hecmesh%section%sect_orien_ID(isect)
1527 if(cdsys_id == -1)
then
1528 coordsys(:,:) = 0.0d0
1530 call get_coordsys(cdsys_id, hecmesh, fstrsolid, coords, i)
1531 call set_localcoordsys( coords, g_localcoordsys(cdsys_id), coordsys(:, :), serr )
1535 fstrresult%elem_val_item(eitem*(i-1)+jitem+nn*(j-1)+k) = coordsys(j,k)
1539 jitem = jitem + 3*nn
1551 type (hecmwst_local_mesh) :: hecmesh
1552 integer(kind=kint) :: i, j, k, itype, is, ie, ic_type, js, icel
1553 integer(kind=kint) :: mm, n1, n2
1554 real(kind=kreal),
allocatable :: unode(:)
1556 do itype = 1, hecmesh%n_elem_type
1557 is = hecmesh%elem_type_index(itype-1) + 1
1558 ie = hecmesh%elem_type_index(itype )
1559 ic_type = hecmesh%elem_type_item(itype)
1560 if(ic_type == 781)
then
1562 js = hecmesh%elem_node_index(icel-1)
1564 n1 = hecmesh%elem_node_item(js+j )
1565 n2 = hecmesh%elem_node_item(js+j+4)
1566 unode(3*n2-2) = unode(3*n1-2)
1567 unode(3*n2-1) = unode(3*n1-1)
1568 unode(3*n2 ) = unode(3*n1 )
1571 elseif(ic_type == 761)
then
1573 js = hecmesh%elem_node_index(icel-1)
1575 n1 = hecmesh%elem_node_item(js+j )
1576 n2 = hecmesh%elem_node_item(js+j+3)
1577 unode(3*n2-2) = unode(3*n1-2)
1578 unode(3*n2-1) = unode(3*n1-1)
1579 unode(3*n2 ) = unode(3*n1 )
1594 type (hecmwst_local_mesh) :: hecmesh
1595 integer(kind=kint) :: i, j, k, itype, is, ie, ic_type, js, icel
1596 integer(kind=kint) :: mm, n1, n2
1597 real(kind=kreal),
allocatable :: unode(:)
1599 do itype = 1, hecmesh%n_elem_type
1600 is = hecmesh%elem_type_index(itype-1) + 1
1601 ie = hecmesh%elem_type_index(itype )
1602 ic_type = hecmesh%elem_type_item(itype)
1603 if(ic_type == 781)
then
1605 js = hecmesh%elem_node_index(icel-1)
1607 n1 = hecmesh%elem_node_item(js+j)
1608 n2 = hecmesh%elem_node_item(js+j+4)
1609 unode(3*n1-2) = fstrsolid%unode(3*n2-2)
1610 unode(3*n1-1) = fstrsolid%unode(3*n2-1)
1611 unode(3*n1 ) = fstrsolid%unode(3*n2 )
1612 unode(3*n2-2) = fstrsolid%unode(3*n2-2)
1613 unode(3*n2-1) = fstrsolid%unode(3*n2-1)
1614 unode(3*n2 ) = fstrsolid%unode(3*n2 )
1617 elseif(ic_type == 761)
then
1619 js = hecmesh%elem_node_index(icel-1)
1621 n1 = hecmesh%elem_node_item(js+j)
1622 n2 = hecmesh%elem_node_item(js+j+3)
1624 unode(3*n1-2) = fstrsolid%unode(3*n2-2)
1625 unode(3*n1-1) = fstrsolid%unode(3*n2-1)
1626 unode(3*n1 ) = fstrsolid%unode(3*n2 )
1627 unode(3*n2-2) = fstrsolid%unode(3*n2-2)
1628 unode(3*n2-1) = fstrsolid%unode(3*n2-1)
1629 unode(3*n2 ) = fstrsolid%unode(3*n2 )
1644 type (hecmwst_local_mesh) :: hecmesh
1645 integer(kind=kint) :: i, j, k, itype, is, ie, ic_type, js, icel
1646 integer(kind=kint) :: mm, a, b
1647 real(kind=kreal),
allocatable :: unode(:)
1649 do itype = 1, hecmesh%n_elem_type
1650 is = hecmesh%elem_type_index(itype-1) + 1
1651 ie = hecmesh%elem_type_index(itype )
1652 ic_type = hecmesh%elem_type_item(itype)
1653 if(ic_type == 641)
then
1655 js = hecmesh%elem_node_index(icel-1)
1657 a = hecmesh%elem_node_item(js+j)
1658 b = hecmesh%elem_node_item(js+j+2)
1659 unode(3*b-2) = unode(3*a-2)
1660 unode(3*b-1) = unode(3*a-1)
1661 unode(3*b ) = unode(3*a )
1675 type (
fstr_solid),
intent(inout) :: fstrsolid
1676 integer(kind=kint),
intent(in) :: phase
1677 real(kind=
kreal),
optional,
intent(in) :: dtime
1679 integer(kind=kint),
parameter :: nval = 10
1680 logical,
save :: updated(nval) = .false.
1681 integer(kind=kint) :: ndof, i
1682 real(kind=
kreal) :: area, dt_use
1684 ndof = hecmesh%n_dof
1686 if( phase == -1 )
then
1687 updated(1:nval) = .false.
1690 if( phase /= 3 .and. phase /= 4 )
return
1694 if(
present(dtime) .and. dtime > 0.d0 )
then
1699 if( .not. updated(3) .and. .not. updated(4) )
then
1704 if( fstrsolid%output_ctrl(phase)%outinfo%on(30) .and.
associated(fstrsolid%CONT_NFORCE) )
then
1706 call fstr_setup_parancon_contactvalue(hecmesh,ndof,fstrsolid%CONT_NFORCE,1)
1712 if( fstrsolid%output_ctrl(phase)%outinfo%on(31) .and.
associated(fstrsolid%CONT_FRIC) )
then
1714 call fstr_setup_parancon_contactvalue(hecmesh,ndof,fstrsolid%CONT_FRIC,1)
1720 if( fstrsolid%output_ctrl(phase)%outinfo%on(32) .and.
associated(fstrsolid%CONT_RELVEL) )
then
1722 call fstr_setup_parancon_contactvalue(hecmesh,ndof,fstrsolid%CONT_RELVEL,1)
1728 if( fstrsolid%output_ctrl(phase)%outinfo%on(33) .and.
associated(fstrsolid%CONT_STATE) )
then
1730 call fstr_setup_parancon_contactvalue(hecmesh,1,fstrsolid%CONT_STATE,2)
1736 if( fstrsolid%output_ctrl(phase)%outinfo%on(36) .or. fstrsolid%output_ctrl(phase)%outinfo%on(37) )
then
1737 if( .not. updated(5))
call calc_contact_area( hecmesh, fstrsolid, 0 )
1743 if( fstrsolid%output_ctrl(phase)%outinfo%on(36) .and.
associated(fstrsolid%CONT_NTRAC) )
then
1745 if( .not. updated(1))
call fstr_setup_parancon_contactvalue(hecmesh,ndof,fstrsolid%CONT_NFORCE,1)
1747 fstrsolid%CONT_NTRAC(:) = 0.d0
1748 do i=1,hecmesh%nn_internal
1749 area = fstrsolid%CONT_AREA(i)
1750 if( area < 1.d-16 ) cycle
1751 fstrsolid%CONT_NTRAC(3*i-2:3*i) = fstrsolid%CONT_NFORCE(3*i-2:3*i)/area
1757 if( fstrsolid%output_ctrl(phase)%outinfo%on(37) .and.
associated(fstrsolid%CONT_FTRAC) )
then
1759 if( .not. updated(1))
call fstr_setup_parancon_contactvalue(hecmesh,ndof,fstrsolid%CONT_FRIC,1)
1761 fstrsolid%CONT_FTRAC(:) = 0.d0
1762 do i=1,hecmesh%nn_internal
1763 area = fstrsolid%CONT_AREA(i)
1764 if( area < 1.d-16 ) cycle
1765 fstrsolid%CONT_FTRAC(3*i-2:3*i) = fstrsolid%CONT_FRIC(3*i-2:3*i)/area
integer(kind=4), parameter kreal
This module defines common data and basic structures for analysis.
subroutine get_coordsys(cdsys_ID, hecMESH, fstrSOLID, coords, icel)
This subroutine fetch coords defined by local coordinate system.
logical paracontactflag
PARALLEL CONTACT FLAG.
This module provide a function to prepare output of static analysis.
subroutine, public fstr_reorder_node_shell(fstrSOLID, hecMESH, unode)
subroutine, public fstr_make_result(hecMESH, fstrSOLID, fstrRESULT, istep, time, fstrDYNAMIC)
MAKE RESULT for static and dynamic analysis (WITHOUT ELEMENTAL RESULTS) -----------------------------...
subroutine, public fstr_reorder_node_beam(fstrSOLID, hecMESH, unode)
subroutine, public setup_contact_output_variables(hecMESH, fstrSOLID, phase, dtime)
subroutine fstr_make_result_main(hecMESH, fstrSOLID, fstrRESULT, RES, nitem, iitem, ncomp, eitem, jitem, ecomp, nlyr, clyr)
subroutine, public fstr_reorder_rot_shell(fstrSOLID, hecMESH, unode)
subroutine, public fstr_write_result(hecMESH, fstrSOLID, fstrPARAM, istep, time, flag, fstrDYNAMIC)
OUTPUT result file for static and dynamic analysis.
subroutine fstr_write_result_main(hecMESH, fstrSOLID, RES, clyr)
This module manages step information.
integer function n_comp_valtype(vtype, ndim)
This modules just summarizes all modules used in static analysis.
This module summarizes all information of material properties.
Data for DYNAMIC ANSLYSIS (fstrDYNAMIC)
FSTR INNER CONTROL PARAMETERS (fstrPARAM)