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=6),
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=6) :: clyr
456 character(len=4) :: 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
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=4) :: cnum
627 character(len=6),
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(39) )
then
847 eitem = eitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(39), ndof )
850 if( fstrsolid%output_ctrl(4)%outinfo%on(40) )
then
852 eitem = eitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(40), ndof )
855 if( fstrsolid%output_ctrl(4)%outinfo%on(44) )
then
857 eitem = eitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(44), ndof )
861 fstrresult%ng_component = gcomp
862 fstrresult%nn_component = ncomp
863 fstrresult%ne_component = ecomp
864 allocate( fstrresult%ng_dof(gcomp) )
865 allocate( fstrresult%global_label(gcomp) )
866 allocate( fstrresult%global_val_item(gitem) )
867 allocate( fstrresult%nn_dof(ncomp) )
868 allocate( fstrresult%node_label(ncomp) )
869 allocate( fstrresult%node_val_item(nitem*hecmesh%n_node) )
870 allocate( fstrresult%ne_dof(ecomp) )
871 allocate( fstrresult%elem_label(ecomp) )
872 allocate( fstrresult%elem_val_item(eitem*hecmesh%n_elem) )
879 fstrresult%ng_dof(1) = 1
880 fstrresult%global_label(1) =
"TOTALTIME"
881 fstrresult%global_val_item(1) = time
884 if (fstrsolid%output_ctrl(4)%outinfo%on(1) )
then
888 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(1), 3 )
889 fstrresult%nn_dof(ncomp) = nn
890 fstrresult%node_label(ncomp) =
'VELOCITY'
891 do i = 1, hecmesh%n_node
893 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = fstrdynamic%DISP(4*(i-1)+j,idx)
899 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(1), 1 )
900 fstrresult%nn_dof(ncomp) = nn
901 fstrresult%node_label(ncomp) =
'PRESSURE'
902 do i = 1, hecmesh%n_node
903 fstrresult%node_val_item(nitem*(i-1)+1+iitem) = fstrdynamic%DISP(4*i,idx)
906 else if(ndof == 6)
then
908 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(1), 3 )
909 fstrresult%nn_dof(ncomp) = nn
910 fstrresult%node_label(ncomp) =
'DISPLACEMENT'
911 allocate( unode(3*hecmesh%n_node) )
913 if( is_dynamic )
then
914 do i=1, hecmesh%n_node
915 unode((i-1)*3+1:(i-1)*3+3) = fstrdynamic%DISP((i-1)*ndof+1:(i-1)*ndof+3, idx)
918 do i=1, hecmesh%n_node
919 unode((i-1)*3+1:(i-1)*3+3) = fstrsolid%unode((i-1)*ndof+1:(i-1)*ndof+3)
922 do i = 1, hecmesh%n_node
924 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = unode(nn*(i-1)+j)
932 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(1), ndof )
933 fstrresult%nn_dof(ncomp) = nn
934 fstrresult%node_label(ncomp) =
'DISPLACEMENT'
935 allocate( unode(ndof*hecmesh%n_node) )
937 if( is_dynamic )
then
938 unode(:) = fstrdynamic%DISP(:,idx)
940 unode(:) = fstrsolid%unode(:)
942 if(is_33beam == 1)
then
945 if(is_33shell == 1)
then
948 do i = 1, hecmesh%n_node
950 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = unode(nn*(i-1)+j)
959 if( is_dynamic .and. fstrsolid%output_ctrl(4)%outinfo%on(15) )
then
961 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(15), ndof )
962 fstrresult%nn_dof(ncomp) = nn
963 fstrresult%node_label(ncomp) =
'VELOCITY'
964 do i = 1, hecmesh%n_node
966 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = fstrdynamic%VEL(nn*(i-1)+j,idx)
973 if( is_dynamic .and. fstrsolid%output_ctrl(4)%outinfo%on(16) )
then
975 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(16), ndof )
976 fstrresult%nn_dof(ncomp) = nn
977 fstrresult%node_label(ncomp) =
'ACCELERATION'
978 do i = 1, hecmesh%n_node
980 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = fstrdynamic%ACC(nn*(i-1)+j,idx)
987 if( fstrsolid%output_ctrl(4)%outinfo%on(17) .and.
associated(fstrsolid%temperature))
then
989 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(17), ndof )
990 fstrresult%nn_dof(ncomp) = nn
991 fstrresult%node_label(ncomp) =
'TEMPERATURE'
992 do i = 1, hecmesh%n_node
994 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = fstrsolid%temperature(nn*(i-1)+j)
1001 if( fstrsolid%output_ctrl(4)%outinfo%on(18) )
then
1005 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(1), 3 )
1006 fstrresult%nn_dof(ncomp) = nn
1007 fstrresult%node_label(ncomp) =
'ROTATION'
1008 allocate( unode(3*hecmesh%n_node) )
1010 if( is_dynamic )
then
1011 do i=1, hecmesh%n_node
1012 unode((i-1)*3+1:(i-1)*3+3) = fstrdynamic%DISP((i-1)*ndof+4:(i-1)*ndof+6, idx)
1015 do i=1, hecmesh%n_node
1016 unode((i-1)*3+1:(i-1)*3+3) = fstrsolid%unode((i-1)*ndof+4:(i-1)*ndof+6)
1019 do i = 1, hecmesh%n_node
1021 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = unode(nn*(i-1)+j)
1027 if ( is_33shell == 1)
then
1029 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(1), ndof )
1030 fstrresult%nn_dof(ncomp) = nn
1031 fstrresult%node_label(ncomp) =
'ROTATION'
1032 allocate( unode(ndof*hecmesh%n_node) )
1035 do i = 1, hecmesh%n_node
1037 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = unode(nn*(i-1)+j)
1047 if( fstrsolid%output_ctrl(4)%outinfo%on(2) )
then
1049 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(2), ndof )
1050 fstrresult%nn_dof(ncomp) = nn
1051 fstrresult%node_label(ncomp) =
'REACTION_FORCE'
1052 do i = 1, hecmesh%n_node
1054 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = fstrsolid%REACTION(nn*(i-1)+j)
1060 if(is_33shell == 1 .or. ndof == 6)
then
1062 & fstrsolid%SHELL, nitem, iitem, ncomp, eitem, jitem, ecomp, 1,
" " )
1065 & fstrsolid%SOLID, nitem, iitem, ncomp, eitem, jitem, ecomp, 1,
" " )
1069 if(
associated(fstrsolid%SHELL) .and. fstrsolid%output_ctrl(4)%outinfo%on(27) .and. is_33shell == 1 )
then
1070 allocate(clyr(2*ntot_lyr))
1073 clyr(2*i-1)=
"_L"//trim(cnum)//
"+"
1074 clyr(2*i )=
"_L"//trim(cnum)//
"-"
1078 & fstrsolid%SHELL%LAYER(i)%PLUS, nitem, iitem, ncomp, eitem, jitem, ecomp, i+1, clyr(2*i-1) )
1080 & fstrsolid%SHELL%LAYER(i)%MINUS, nitem, iitem, ncomp, eitem, jitem, ecomp, i+1, clyr(2*i ) )
1086 if( fstrsolid%output_ctrl(4)%outinfo%on(12) .and.
associated(tnstrain) )
then
1088 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(12), ndof )
1089 fstrresult%nn_dof(ncomp) = nn
1090 fstrresult%node_label(ncomp) =
'THERMAL_NodalSTRAIN'
1091 do i = 1, hecmesh%n_node
1093 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = tnstrain(nn*(i-1)+j)
1100 if( fstrsolid%output_ctrl(4)%outinfo%on(30) .and.
associated(fstrsolid%CONT_NFORCE) )
then
1102 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(30), ndof )
1103 fstrresult%nn_dof(ncomp) = nn
1104 fstrresult%node_label(ncomp) =
'CONTACT_NFORCE'
1105 do i = 1, hecmesh%n_node
1107 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = fstrsolid%CONT_NFORCE(nn*(i-1)+j)
1114 if( fstrsolid%output_ctrl(4)%outinfo%on(31) .and.
associated(fstrsolid%CONT_FRIC) )
then
1116 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(31), ndof )
1117 fstrresult%nn_dof(ncomp) = nn
1118 fstrresult%node_label(ncomp) =
'CONTACT_FRICTION'
1119 do i = 1, hecmesh%n_node
1121 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = fstrsolid%CONT_FRIC(nn*(i-1)+j)
1128 if( fstrsolid%output_ctrl(4)%outinfo%on(32) .and.
associated(fstrsolid%CONT_RELVEL) )
then
1130 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(32), ndof )
1131 fstrresult%nn_dof(ncomp) = nn
1132 fstrresult%node_label(ncomp) =
'CONTACT_RELVEL'
1133 do i = 1, hecmesh%n_node
1135 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = fstrsolid%CONT_RELVEL(nn*(i-1)+j)
1142 if( fstrsolid%output_ctrl(4)%outinfo%on(33) .and.
associated(fstrsolid%CONT_STATE) )
then
1144 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(33), ndof )
1145 fstrresult%nn_dof(ncomp) = nn
1146 fstrresult%node_label(ncomp) =
'CONTACT_STATE'
1147 do i = 1, hecmesh%n_node
1149 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = fstrsolid%CONT_STATE(nn*(i-1)+j)
1156 if( fstrsolid%output_ctrl(4)%outinfo%on(36) .and.
associated(fstrsolid%CONT_NTRAC) )
then
1158 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(36), ndof )
1159 fstrresult%nn_dof(ncomp) = nn
1160 fstrresult%node_label(ncomp) =
'CONTACT_NTRACTION'
1161 do i = 1, hecmesh%n_node
1163 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = fstrsolid%CONT_NTRAC(nn*(i-1)+j)
1170 if( fstrsolid%output_ctrl(4)%outinfo%on(37) .and.
associated(fstrsolid%CONT_FTRAC) )
then
1172 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(37), ndof )
1173 fstrresult%nn_dof(ncomp) = nn
1174 fstrresult%node_label(ncomp) =
'CONTACT_FTRACTION'
1175 do i = 1, hecmesh%n_node
1177 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = fstrsolid%CONT_FTRAC(nn*(i-1)+j)
1184 if( fstrsolid%output_ctrl(4)%outinfo%on(38) )
then
1186 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(38), ndof )
1187 fstrresult%nn_dof(ncomp) = nn
1188 fstrresult%node_label(ncomp) =
'NODE_ID'
1189 do i = 1, hecmesh%n_node
1190 fstrresult%node_val_item(nitem*(i-1)+1+iitem) = hecmesh%global_node_ID(i)
1209 if(fstrsolid%output_ctrl(4)%outinfo%on(34))
then
1211 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(34), ndof )
1212 fstrresult%ne_dof(ecomp) = nn
1213 fstrresult%elem_label(ecomp) =
'MATERIAL_ID'
1214 do i = 1, hecmesh%n_elem
1215 j = hecmesh%section_ID(i)
1216 fstrresult%elem_val_item(eitem*(i-1)+1+jitem) = hecmesh%section%sect_mat_ID_item(j)
1222 if(fstrsolid%output_ctrl(4)%outinfo%on(39))
then
1224 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(39), ndof )
1225 fstrresult%ne_dof(ecomp) = nn
1226 fstrresult%elem_label(ecomp) =
'ELEM_ID'
1227 do i = 1, hecmesh%n_elem
1228 fstrresult%elem_val_item(eitem*(i-1)+1+jitem) = hecmesh%global_elem_ID(i)
1234 if(fstrsolid%output_ctrl(4)%outinfo%on(40))
then
1236 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(40), ndof )
1237 fstrresult%ne_dof(ecomp) = nn
1238 fstrresult%elem_label(ecomp) =
'SECTION_ID'
1239 do i = 1, hecmesh%n_elem
1240 fstrresult%elem_val_item(eitem*(i-1)+1+jitem) = hecmesh%section_ID(i)
1246 if( fstrsolid%output_ctrl(4)%outinfo%on(44) )
then
1248 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(44), ndof )
1249 fstrresult%ne_dof(ecomp) = nn
1250 fstrresult%elem_label(ecomp) =
'ELEMACT'
1251 do i = 1, hecmesh%n_elem
1252 if( fstrsolid%elements(i)%elemact_flag == kelact_inactive )
then
1253 fstrresult%elem_val_item(eitem*(i-1)+1+jitem) = 1.d0
1255 fstrresult%elem_val_item(eitem*(i-1)+1+jitem) = 0.d0
1264 & iitem, ncomp, eitem, jitem, ecomp, nlyr, clyr )
1272 type (hecmwST_local_mesh) :: hecMESH
1273 type (fstr_solid) :: fstrSOLID
1274 type (hecmwST_result_data):: fstrRESULT
1275 type (fstr_solid_physic_val) :: RES
1276 integer(kind=kint) :: istep, flag
1277 integer(kind=kint) :: n_lyr, cid
1279 character(len=HECMW_HEADER_LEN) :: header
1280 character(len=HECMW_NAME_LEN) :: s, label, nameID, addfname
1281 character(len=6) :: clyr
1282 character(len=4) :: cnum
1283 integer(kind=kint) :: i, j, k, ndof, mdof, id, nitem, eitem, nn, mm, ngauss, it
1284 integer(kind=kint) :: iitem, ncomp, jitem, ecomp, nlyr
1286 ndof = hecmesh%n_dof
1289 if( fstrsolid%output_ctrl(4)%outinfo%on(3))
then
1290 nn =
n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(3), ndof )
1292 fstrresult%nn_dof(ncomp) = nn
1293 fstrresult%node_label(ncomp) =
'NodalSTRAIN'//trim(clyr)
1294 do i = 1, hecmesh%n_node
1296 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = res%STRAIN(nn*(i-1)+j)
1303 if(fstrsolid%output_ctrl(4)%outinfo%on(4))
then
1305 nn =
n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(4), ndof )
1306 fstrresult%nn_dof(ncomp) = nn
1307 fstrresult%node_label(ncomp) =
'NodalSTRESS'//trim(clyr)
1308 do i = 1, hecmesh%n_node
1310 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = res%STRESS((nn)*(i-1)+j)
1317 if(fstrsolid%output_ctrl(4)%outinfo%on(5))
then
1319 nn =
n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(5), ndof )
1320 fstrresult%nn_dof(ncomp) = nn
1321 fstrresult%node_label(ncomp) =
'NodalMISES'//trim(clyr)
1322 do i = 1, hecmesh%n_node
1323 fstrresult%node_val_item(nitem*(i-1)+1+iitem) = res%MISES(i)
1329 if(fstrsolid%output_ctrl(4)%outinfo%on(19))
then
1331 nn =
n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(19), ndof )
1332 fstrresult%nn_dof(ncomp) = nn
1333 fstrresult%node_label(ncomp) =
'NodalPrincipalSTRESS'//trim(clyr)
1334 do i = 1, hecmesh%n_node
1336 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = res%PSTRESS((nn)*(i-1)+j)
1343 if(fstrsolid%output_ctrl(4)%outinfo%on(23))
then
1345 write(cnum,
'(i0)') k
1347 nn =
n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(23), ndof )
1348 fstrresult%nn_dof(ncomp) = nn
1349 fstrresult%node_label(ncomp) =
'NodalPrincipalSTRESSVector'//trim(cnum)//trim(clyr)
1350 do i = 1, hecmesh%n_node
1352 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = res%PSTRESS_VECT((nn)*(i-1)+j,k)
1360 if( fstrsolid%output_ctrl(4)%outinfo%on(21))
then
1361 nn =
n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(21), ndof )
1363 fstrresult%nn_dof(ncomp) = nn
1364 fstrresult%node_label(ncomp) =
'NodalPrincipalSTRAIN'//trim(clyr)
1365 do i = 1, hecmesh%n_node
1367 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = res%PSTRAIN(nn*(i-1)+j)
1374 if( fstrsolid%output_ctrl(4)%outinfo%on(25))
then
1376 write(cnum,
'(i0)') k
1377 nn =
n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(25), ndof )
1379 fstrresult%nn_dof(ncomp) = nn
1380 fstrresult%node_label(ncomp) =
'NodalPrincipalSTRAINVector'//trim(cnum)//trim(clyr)
1381 do i = 1, hecmesh%n_node
1383 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = res%PSTRAIN_VECT(nn*(i-1)+j,k)
1391 if( fstrsolid%output_ctrl(4)%outinfo%on(6))
then
1392 nn =
n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(6), ndof )
1394 fstrresult%ne_dof(ecomp) = nn
1395 fstrresult%elem_label(ecomp) =
'ElementalSTRAIN'
1396 do i = 1, hecmesh%n_elem
1398 fstrresult%elem_val_item(eitem*(i-1)+j+jitem) = res%ESTRAIN(nn*(i-1)+j)
1405 if(fstrsolid%output_ctrl(4)%outinfo%on(7))
then
1407 nn =
n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(7), ndof )
1408 fstrresult%ne_dof(ecomp) = nn
1409 fstrresult%elem_label(ecomp) =
'ElementalSTRESS'
1410 do i = 1, hecmesh%n_elem
1412 fstrresult%elem_val_item(eitem*(i-1)+j+jitem) = res%ESTRESS((nn)*(i-1)+j)
1419 if(fstrsolid%output_ctrl(4)%outinfo%on(8))
then
1421 nn =
n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(8), ndof )
1422 fstrresult%ne_dof(ecomp) = nn
1423 fstrresult%elem_label(ecomp) =
'ElementalMISES'
1424 do i = 1, hecmesh%n_elem
1425 fstrresult%elem_val_item(eitem*(i-1)+1+jitem) = res%EMISES(i)
1431 if(fstrsolid%output_ctrl(4)%outinfo%on(20))
then
1433 nn =
n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(20), ndof )
1434 fstrresult%ne_dof(ecomp) = nn
1435 fstrresult%elem_label(ecomp) =
'ElementalPrincipalSTRESS'
1436 do i = 1, hecmesh%n_elem
1438 fstrresult%elem_val_item(eitem*(i-1)+j+jitem) = res%EPSTRESS((nn)*(i-1)+j)
1445 if(fstrsolid%output_ctrl(4)%outinfo%on(22))
then
1447 nn =
n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(22), ndof )
1448 fstrresult%ne_dof(ecomp) = nn
1449 fstrresult%elem_label(ecomp) =
'ElementalPrincipalSTRAIN'
1450 do i = 1, hecmesh%n_elem
1452 fstrresult%elem_val_item(eitem*(i-1)+j+jitem) = res%EPSTRAIN((nn)*(i-1)+j)
1459 if(fstrsolid%output_ctrl(4)%outinfo%on(24))
then
1463 nn =
n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(24), ndof )
1464 fstrresult%ne_dof(ecomp) = nn
1465 fstrresult%elem_label(ecomp) =
'ElementalPrincipalSTRESSVector'//trim(cnum)
1466 do i = 1, hecmesh%n_elem
1468 fstrresult%elem_val_item(eitem*(i-1)+j+jitem) = res%EPSTRESS_VECT((nn)*(i-1)+j,k)
1476 if(fstrsolid%output_ctrl(4)%outinfo%on(26))
then
1480 nn =
n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(26), ndof )
1481 fstrresult%ne_dof(ecomp) = nn
1482 fstrresult%elem_label(ecomp) =
'ElementalPrincipalSTRAINVector'//trim(cnum)
1483 do i = 1, hecmesh%n_elem
1485 fstrresult%elem_val_item(eitem*(i-1)+j+jitem) = res%EPSTRAIN_VECT((nn)*(i-1)+j,k)
1493 if(fstrsolid%output_ctrl(4)%outinfo%on(43))
then
1495 nn =
n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(43), ndof )
1496 fstrresult%ne_dof(ecomp) = nn
1497 fstrresult%elem_label(ecomp) =
'ElementalPLSTRAIN'
1498 do i = 1, hecmesh%n_elem
1499 res%EPLSTRAIN(i) = 0.d0
1500 do j = 1,
size(fstrsolid%elements(i)%gausses)
1501 res%EPLSTRAIN(i) = res%EPLSTRAIN(i) + fstrsolid%elements(i)%gausses(j)%plstrain
1503 res%EPLSTRAIN(i) = res%EPLSTRAIN(i) /
size(fstrsolid%elements(i)%gausses)
1504 fstrresult%elem_val_item(eitem*(i-1)+1+jitem) = res%EPLSTRAIN(i)
1518 type (hecmwst_local_mesh) :: hecmesh
1519 integer(kind=kint) :: i, j, k, itype, is, ie, ic_type, js, icel
1520 integer(kind=kint) :: mm, n1, n2
1521 real(kind=kreal),
allocatable :: unode(:)
1523 do itype = 1, hecmesh%n_elem_type
1524 is = hecmesh%elem_type_index(itype-1) + 1
1525 ie = hecmesh%elem_type_index(itype )
1526 ic_type = hecmesh%elem_type_item(itype)
1527 if(ic_type == 781)
then
1529 js = hecmesh%elem_node_index(icel-1)
1531 n1 = hecmesh%elem_node_item(js+j )
1532 n2 = hecmesh%elem_node_item(js+j+4)
1533 unode(3*n2-2) = unode(3*n1-2)
1534 unode(3*n2-1) = unode(3*n1-1)
1535 unode(3*n2 ) = unode(3*n1 )
1538 elseif(ic_type == 761)
then
1540 js = hecmesh%elem_node_index(icel-1)
1542 n1 = hecmesh%elem_node_item(js+j )
1543 n2 = hecmesh%elem_node_item(js+j+3)
1544 unode(3*n2-2) = unode(3*n1-2)
1545 unode(3*n2-1) = unode(3*n1-1)
1546 unode(3*n2 ) = unode(3*n1 )
1561 type (hecmwst_local_mesh) :: hecmesh
1562 integer(kind=kint) :: i, j, k, itype, is, ie, ic_type, js, icel
1563 integer(kind=kint) :: mm, n1, n2
1564 real(kind=kreal),
allocatable :: unode(:)
1566 do itype = 1, hecmesh%n_elem_type
1567 is = hecmesh%elem_type_index(itype-1) + 1
1568 ie = hecmesh%elem_type_index(itype )
1569 ic_type = hecmesh%elem_type_item(itype)
1570 if(ic_type == 781)
then
1572 js = hecmesh%elem_node_index(icel-1)
1574 n1 = hecmesh%elem_node_item(js+j)
1575 n2 = hecmesh%elem_node_item(js+j+4)
1576 unode(3*n1-2) = fstrsolid%unode(3*n2-2)
1577 unode(3*n1-1) = fstrsolid%unode(3*n2-1)
1578 unode(3*n1 ) = fstrsolid%unode(3*n2 )
1579 unode(3*n2-2) = fstrsolid%unode(3*n2-2)
1580 unode(3*n2-1) = fstrsolid%unode(3*n2-1)
1581 unode(3*n2 ) = fstrsolid%unode(3*n2 )
1584 elseif(ic_type == 761)
then
1586 js = hecmesh%elem_node_index(icel-1)
1588 n1 = hecmesh%elem_node_item(js+j)
1589 n2 = hecmesh%elem_node_item(js+j+3)
1591 unode(3*n1-2) = fstrsolid%unode(3*n2-2)
1592 unode(3*n1-1) = fstrsolid%unode(3*n2-1)
1593 unode(3*n1 ) = fstrsolid%unode(3*n2 )
1594 unode(3*n2-2) = fstrsolid%unode(3*n2-2)
1595 unode(3*n2-1) = fstrsolid%unode(3*n2-1)
1596 unode(3*n2 ) = fstrsolid%unode(3*n2 )
1611 type (hecmwst_local_mesh) :: hecmesh
1612 integer(kind=kint) :: i, j, k, itype, is, ie, ic_type, js, icel
1613 integer(kind=kint) :: mm, a, b
1614 real(kind=kreal),
allocatable :: unode(:)
1616 do itype = 1, hecmesh%n_elem_type
1617 is = hecmesh%elem_type_index(itype-1) + 1
1618 ie = hecmesh%elem_type_index(itype )
1619 ic_type = hecmesh%elem_type_item(itype)
1620 if(ic_type == 641)
then
1622 js = hecmesh%elem_node_index(icel-1)
1624 a = hecmesh%elem_node_item(js+j)
1625 b = hecmesh%elem_node_item(js+j+2)
1626 unode(3*b-2) = unode(3*a-2)
1627 unode(3*b-1) = unode(3*a-1)
1628 unode(3*b ) = unode(3*a )
1642 type (
fstr_solid),
intent(inout) :: fstrsolid
1643 integer(kind=kint),
intent(in) :: phase
1645 integer(kind=kint),
parameter :: nval = 10
1646 logical,
save :: updated(nval) = .false.
1647 integer(kind=kint) :: ndof, i
1648 real(kind=
kreal) :: area
1650 ndof = hecmesh%n_dof
1652 if( phase == -1 )
then
1653 updated(1:nval) = .false.
1656 if( phase /= 3 .and. phase /= 4 )
return
1660 if( fstrsolid%output_ctrl(phase)%outinfo%on(30) .and.
associated(fstrsolid%CONT_NFORCE) )
then
1668 if( fstrsolid%output_ctrl(phase)%outinfo%on(31) .and.
associated(fstrsolid%CONT_FRIC) )
then
1676 if( fstrsolid%output_ctrl(phase)%outinfo%on(32) .and.
associated(fstrsolid%CONT_RELVEL) )
then
1684 if( fstrsolid%output_ctrl(phase)%outinfo%on(33) .and.
associated(fstrsolid%CONT_STATE) )
then
1692 if( fstrsolid%output_ctrl(phase)%outinfo%on(36) .or. fstrsolid%output_ctrl(phase)%outinfo%on(37) )
then
1699 if( fstrsolid%output_ctrl(phase)%outinfo%on(36) .and.
associated(fstrsolid%CONT_NTRAC) )
then
1703 fstrsolid%CONT_NTRAC(:) = 0.d0
1704 do i=1,hecmesh%nn_internal
1705 area = fstrsolid%CONT_AREA(i)
1706 if( area < 1.d-16 ) cycle
1707 fstrsolid%CONT_NTRAC(3*i-2:3*i) = fstrsolid%CONT_NFORCE(3*i-2:3*i)/area
1713 if( fstrsolid%output_ctrl(phase)%outinfo%on(37) .and.
associated(fstrsolid%CONT_FTRAC) )
then
1717 fstrsolid%CONT_FTRAC(:) = 0.d0
1718 do i=1,hecmesh%nn_internal
1719 area = fstrsolid%CONT_AREA(i)
1720 if( area < 1.d-16 ) cycle
1721 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.
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 fstr_make_result_main(hecMESH, fstrSOLID, fstrRESULT, RES, nitem, iitem, ncomp, eitem, jitem, ecomp, nlyr, clyr)
subroutine, public setup_contact_output_variables(hecMESH, fstrSOLID, phase)
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)