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 )
415 call hecmw_result_write_by_name( nameid )
418 call hecmw_result_write_by_addfname( nameid, addfname )
422 call hecmw_result_finalize
435 type (hecmwST_local_mesh) :: hecMESH
436 type (fstr_solid) :: fstrSOLID
437 type (fstr_solid_physic_val) :: RES
438 integer(kind=kint) :: istep, flag
439 integer(kind=kint) :: n_lyr, cid
441 character(len=HECMW_HEADER_LEN) :: header
442 character(len=HECMW_NAME_LEN) :: s, label, nameID, addfname
443 character(len=6) :: clyr
444 character(len=4) :: cnum
445 integer(kind=kint) :: i, j, k, ndof, mdof, id, nitem, nn, mm, ngauss, it
446 real(kind=
kreal),
allocatable :: work(:)
449 allocate( work(hecmesh%n_elem) )
452 if (fstrsolid%output_ctrl(3)%outinfo%on(3))
then
453 id = hecmw_result_dtype_node
454 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(3), ndof )
455 label =
'NodalSTRAIN'//trim(clyr)
456 call hecmw_result_add( id, nitem, label, res%STRAIN )
460 if( fstrsolid%output_ctrl(3)%outinfo%on(4) )
then
461 id = hecmw_result_dtype_node
462 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(4), ndof )
463 label =
'NodalSTRESS'//trim(clyr)
464 call hecmw_result_add( id, nitem, label, res%STRESS )
468 if( fstrsolid%output_ctrl(3)%outinfo%on(5) )
then
469 id = hecmw_result_dtype_node
470 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(5), ndof )
471 label =
'NodalMISES'//trim(clyr)
472 call hecmw_result_add( id, nitem, label, res%MISES )
476 if( fstrsolid%output_ctrl(3)%outinfo%on(19) )
then
477 id = hecmw_result_dtype_node
478 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(19), ndof )
479 label =
'NodalPrincipalSTRESS'//trim(clyr)
480 call hecmw_result_add( id, nitem, label, res%PSTRESS )
484 if( fstrsolid%output_ctrl(3)%outinfo%on(21) )
then
485 id = hecmw_result_dtype_node
486 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(21), ndof )
487 label =
'NodalPrincipalSTRAIN'//trim(clyr)
488 call hecmw_result_add( id, nitem, label, res%PSTRAIN )
492 if( fstrsolid%output_ctrl(3)%outinfo%on(23) )
then
493 id = hecmw_result_dtype_node
496 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(23), ndof )
497 label =
'NodalPrincipalSTRESSVector'//trim(cnum)//trim(clyr)
498 call hecmw_result_add( id, nitem, label, res%PSTRESS_VECT(:,k) )
503 if( fstrsolid%output_ctrl(3)%outinfo%on(25) )
then
504 id = hecmw_result_dtype_node
507 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(25), ndof )
508 label =
'NodalPrincipalSTRAINVector'//trim(cnum)//trim(clyr)
509 call hecmw_result_add( id, nitem, label, res%PSTRAIN_VECT(:,k) )
515 if( fstrsolid%output_ctrl(3)%outinfo%on(6) )
then
516 id = hecmw_result_dtype_elem
517 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(6), ndof )
518 label =
'ElementalSTRAIN'//trim(clyr)
519 call hecmw_result_add( id, nitem, label, res%ESTRAIN )
523 if( fstrsolid%output_ctrl(3)%outinfo%on(7) )
then
524 id = hecmw_result_dtype_elem
525 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(7), ndof )
526 label =
'ElementalSTRESS'//trim(clyr)
527 call hecmw_result_add( id, nitem, label, res%ESTRESS )
531 if( fstrsolid%output_ctrl(3)%outinfo%on(35) )
then
532 id = hecmw_result_dtype_elem
533 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(35), ndof )
534 label =
'ElementalNQM'//trim(clyr)
535 call hecmw_result_add( id, nitem, label, res%ENQM )
539 if( fstrsolid%output_ctrl(3)%outinfo%on(8))
then
540 id = hecmw_result_dtype_elem
541 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(8), ndof )
542 label =
'ElementalMISES'//trim(clyr)
543 call hecmw_result_add( id, nitem, label, res%EMISES )
547 if( fstrsolid%output_ctrl(3)%outinfo%on(20) )
then
548 id = hecmw_result_dtype_elem
549 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(20), ndof )
550 label =
'ElementalPrincipalSTRESS'//trim(clyr)
551 call hecmw_result_add( id, nitem, label, res%EPSTRESS )
555 if( fstrsolid%output_ctrl(3)%outinfo%on(22) )
then
556 id = hecmw_result_dtype_elem
557 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(22), ndof )
558 label =
'ElementalPrincipalSTRAIN'//trim(clyr)
559 call hecmw_result_add( id, nitem, label, res%EPSTRAIN )
563 if( fstrsolid%output_ctrl(3)%outinfo%on(24) )
then
564 id = hecmw_result_dtype_elem
567 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(24), ndof )
568 label =
'ElementalPrincipalSTRESSVector'//trim(cnum)//trim(clyr)
569 call hecmw_result_add( id, nitem, label, res%EPSTRESS_VECT(:,k) )
574 if( fstrsolid%output_ctrl(3)%outinfo%on(26) )
then
575 id = hecmw_result_dtype_elem
578 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(26), ndof )
579 label =
'ElementalPrincipalSTRAINVector'//trim(cnum)//trim(clyr)
580 call hecmw_result_add( id, nitem, label, res%EPSTRAIN_VECT(:,k) )
585 if( fstrsolid%output_ctrl(3)%outinfo%on(43) )
then
587 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(43), ndof )
588 ngauss = fstrsolid%maxn_gauss
589 label =
'ElementalPLSTRAIN'//trim(clyr)
590 do i = 1, hecmesh%n_elem
592 do j = 1,
size(fstrsolid%elements(i)%gausses)
593 work(i) = work(i) + fstrsolid%elements(i)%gausses(j)%plstrain
595 work(i) = work(i) /
size(fstrsolid%elements(i)%gausses)
596 res%EPLSTRAIN(i) = work(i)
598 call hecmw_result_add( id, nitem, label, work )
607 subroutine fstr_make_result( hecMESH, fstrSOLID, fstrRESULT, istep, time, fstrDYNAMIC )
614 type(hecmwst_result_data) :: fstrresult
615 integer(kind=kint) :: istep
616 real(kind=
kreal) :: time
618 integer(kind=kint) :: n_lyr, ntot_lyr, it, coef33, is_33shell, is_33beam
619 integer(kind=kint) :: i, j, k, ndof, mdof, gcomp, gitem, ncomp, nitem, iitem, ecomp, eitem, jitem, nn, mm
620 integer(kind=kint) :: idx
621 real(kind=
kreal),
pointer :: tnstrain(:), testrain(:)
622 real(kind=
kreal),
allocatable ::unode(:)
623 character(len=4) :: cnum
624 character(len=6),
allocatable :: clyr(:)
625 logical :: is_dynamic
627 is_dynamic =
present(fstrdynamic)
629 tnstrain => fstrsolid%TNSTRAIN
630 testrain => fstrsolid%TESTRAIN
632 ntot_lyr = fstrsolid%max_lyr
633 is_33shell = fstrsolid%is_33shell
634 is_33beam = fstrsolid%is_33beam
637 if( hecmesh%n_elem>hecmesh%n_node ) mm = hecmesh%n_elem
639 if( is_dynamic )
then
641 if( fstrdynamic%idx_eqa==1 .and. istep>0 ) idx = 2
645 if( ndof==2 ) mdof = 3
646 if( ndof==3 ) mdof = 6
647 if( ndof==4 ) mdof = 6
648 if( ndof==6 ) mdof = 6
650 if(is_33shell == 1 .and. fstrsolid%output_ctrl(4)%outinfo%on(27) )
then
651 coef33 = 1 + 2*ntot_lyr
656 call hecmw_nullify_result_data( fstrresult )
669 if( fstrsolid%output_ctrl(4)%outinfo%on(1) )
then
672 nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(1), 3 )
674 nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(1), 1 )
675 else if(ndof == 6)
then
677 nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(1), 3 )
680 nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(1), ndof )
684 if( is_dynamic .and. fstrsolid%output_ctrl(4)%outinfo%on(15) )
then
686 nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(15), ndof )
689 if( is_dynamic .and. fstrsolid%output_ctrl(4)%outinfo%on(16) )
then
691 nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(16), ndof )
694 if( fstrsolid%output_ctrl(4)%outinfo%on(17) .and.
associated(fstrsolid%temperature) )
then
696 nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(17), ndof )
699 if( fstrsolid%output_ctrl(4)%outinfo%on(18) )
then
702 nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(18), 3 )
704 if( is_33shell == 1 )
then
706 nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(18), ndof )
711 if( fstrsolid%output_ctrl(4)%outinfo%on(2) )
then
713 nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(2), ndof )
716 if( fstrsolid%output_ctrl(4)%outinfo%on(3) )
then
717 ncomp = ncomp + 1*coef33
718 nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(3), ndof )*coef33
721 if( fstrsolid%output_ctrl(4)%outinfo%on(4) )
then
722 ncomp = ncomp + 1*coef33
723 nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(4), ndof )*coef33
726 if( fstrsolid%output_ctrl(4)%outinfo%on(5) )
then
727 ncomp = ncomp + 1*coef33
728 nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(5), ndof )*coef33
731 if( fstrsolid%output_ctrl(4)%outinfo%on(19) )
then
732 ncomp = ncomp + 1*coef33
733 nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(19), ndof )*coef33
736 if( fstrsolid%output_ctrl(4)%outinfo%on(21) )
then
737 ncomp = ncomp + 1*coef33
738 nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(21), ndof )*coef33
741 if( fstrsolid%output_ctrl(4)%outinfo%on(23) )
then
742 ncomp = ncomp + 3*coef33
743 nitem = nitem + 3*n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(23), ndof )*coef33
746 if( fstrsolid%output_ctrl(4)%outinfo%on(25) )
then
747 ncomp = ncomp + 3*coef33
748 nitem = nitem + 3*n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(25), ndof )*coef33
751 if( fstrsolid%output_ctrl(4)%outinfo%on(12) .and.
associated(tnstrain) )
then
753 nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(12), ndof )
756 if( fstrsolid%output_ctrl(4)%outinfo%on(30) .and.
associated(fstrsolid%CONT_NFORCE) )
then
758 nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(30), ndof )
761 if( fstrsolid%output_ctrl(4)%outinfo%on(31) .and.
associated(fstrsolid%CONT_FRIC) )
then
763 nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(31), ndof )
766 if( fstrsolid%output_ctrl(4)%outinfo%on(32) .and.
associated(fstrsolid%CONT_RELVEL) )
then
768 nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(32), ndof )
771 if( fstrsolid%output_ctrl(4)%outinfo%on(33) .and.
associated(fstrsolid%CONT_STATE) )
then
773 nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(33), ndof )
776 if( fstrsolid%output_ctrl(4)%outinfo%on(36) .and.
associated(fstrsolid%CONT_NTRAC) )
then
778 nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(36), ndof )
781 if( fstrsolid%output_ctrl(4)%outinfo%on(37) .and.
associated(fstrsolid%CONT_FTRAC) )
then
783 nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(37), ndof )
786 if( fstrsolid%output_ctrl(4)%outinfo%on(38) )
then
788 nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(38), ndof )
797 if( fstrsolid%output_ctrl(4)%outinfo%on(6) )
then
799 eitem = eitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(6), ndof )
802 if( fstrsolid%output_ctrl(4)%outinfo%on(7) )
then
804 eitem = eitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(7), ndof )
807 if( fstrsolid%output_ctrl(4)%outinfo%on(8) )
then
809 eitem = eitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(8), ndof )
812 if( fstrsolid%output_ctrl(4)%outinfo%on(20) )
then
814 eitem = eitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(20), ndof )
817 if( fstrsolid%output_ctrl(4)%outinfo%on(22) )
then
819 eitem = eitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(22), ndof )
822 if( fstrsolid%output_ctrl(4)%outinfo%on(24) )
then
824 eitem = eitem + 3*n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(24), ndof )
827 if( fstrsolid%output_ctrl(4)%outinfo%on(26) )
then
829 eitem = eitem + 3*n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(26), ndof )
832 if( fstrsolid%output_ctrl(4)%outinfo%on(43) )
then
834 eitem = eitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(43), ndof )
837 if( fstrsolid%output_ctrl(4)%outinfo%on(34) )
then
839 eitem = eitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(34), ndof )
842 if( fstrsolid%output_ctrl(4)%outinfo%on(39) )
then
844 eitem = eitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(39), ndof )
847 if( fstrsolid%output_ctrl(4)%outinfo%on(40) )
then
849 eitem = eitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(40), ndof )
853 fstrresult%ng_component = gcomp
854 fstrresult%nn_component = ncomp
855 fstrresult%ne_component = ecomp
856 allocate( fstrresult%ng_dof(gcomp) )
857 allocate( fstrresult%global_label(gcomp) )
858 allocate( fstrresult%global_val_item(gitem) )
859 allocate( fstrresult%nn_dof(ncomp) )
860 allocate( fstrresult%node_label(ncomp) )
861 allocate( fstrresult%node_val_item(nitem*hecmesh%n_node) )
862 allocate( fstrresult%ne_dof(ecomp) )
863 allocate( fstrresult%elem_label(ecomp) )
864 allocate( fstrresult%elem_val_item(eitem*hecmesh%n_elem) )
871 fstrresult%ng_dof(1) = 1
872 fstrresult%global_label(1) =
"TOTALTIME"
873 fstrresult%global_val_item(1) = time
876 if (fstrsolid%output_ctrl(4)%outinfo%on(1) )
then
880 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(1), 3 )
881 fstrresult%nn_dof(ncomp) = nn
882 fstrresult%node_label(ncomp) =
'VELOCITY'
883 do i = 1, hecmesh%n_node
885 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = fstrdynamic%DISP(4*(i-1)+j,idx)
891 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(1), 1 )
892 fstrresult%nn_dof(ncomp) = nn
893 fstrresult%node_label(ncomp) =
'PRESSURE'
894 do i = 1, hecmesh%n_node
895 fstrresult%node_val_item(nitem*(i-1)+1+iitem) = fstrdynamic%DISP(4*i,idx)
898 else if(ndof == 6)
then
900 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(1), 3 )
901 fstrresult%nn_dof(ncomp) = nn
902 fstrresult%node_label(ncomp) =
'DISPLACEMENT'
903 allocate( unode(3*hecmesh%n_node) )
905 if( is_dynamic )
then
906 do i=1, hecmesh%n_node
907 unode((i-1)*3+1:(i-1)*3+3) = fstrdynamic%DISP((i-1)*ndof+1:(i-1)*ndof+3, idx)
910 do i=1, hecmesh%n_node
911 unode((i-1)*3+1:(i-1)*3+3) = fstrsolid%unode((i-1)*ndof+1:(i-1)*ndof+3)
914 do i = 1, hecmesh%n_node
916 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = unode(nn*(i-1)+j)
924 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(1), ndof )
925 fstrresult%nn_dof(ncomp) = nn
926 fstrresult%node_label(ncomp) =
'DISPLACEMENT'
927 allocate( unode(ndof*hecmesh%n_node) )
929 if( is_dynamic )
then
930 unode(:) = fstrdynamic%DISP(:,idx)
932 unode(:) = fstrsolid%unode(:)
934 if(is_33beam == 1)
then
937 if(is_33shell == 1)
then
940 do i = 1, hecmesh%n_node
942 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = unode(nn*(i-1)+j)
951 if( is_dynamic .and. fstrsolid%output_ctrl(4)%outinfo%on(15) )
then
953 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(15), ndof )
954 fstrresult%nn_dof(ncomp) = nn
955 fstrresult%node_label(ncomp) =
'VELOCITY'
956 do i = 1, hecmesh%n_node
958 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = fstrdynamic%VEL(nn*(i-1)+j,idx)
965 if( is_dynamic .and. fstrsolid%output_ctrl(4)%outinfo%on(16) )
then
967 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(16), ndof )
968 fstrresult%nn_dof(ncomp) = nn
969 fstrresult%node_label(ncomp) =
'ACCELERATION'
970 do i = 1, hecmesh%n_node
972 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = fstrdynamic%ACC(nn*(i-1)+j,idx)
979 if( fstrsolid%output_ctrl(4)%outinfo%on(17) .and.
associated(fstrsolid%temperature))
then
981 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(17), ndof )
982 fstrresult%nn_dof(ncomp) = nn
983 fstrresult%node_label(ncomp) =
'TEMPERATURE'
984 do i = 1, hecmesh%n_node
986 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = fstrsolid%temperature(nn*(i-1)+j)
993 if( fstrsolid%output_ctrl(4)%outinfo%on(18) )
then
997 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(1), 3 )
998 fstrresult%nn_dof(ncomp) = nn
999 fstrresult%node_label(ncomp) =
'ROTATION'
1000 allocate( unode(3*hecmesh%n_node) )
1002 if( is_dynamic )
then
1003 do i=1, hecmesh%n_node
1004 unode((i-1)*3+1:(i-1)*3+3) = fstrdynamic%DISP((i-1)*ndof+4:(i-1)*ndof+6, idx)
1007 do i=1, hecmesh%n_node
1008 unode((i-1)*3+1:(i-1)*3+3) = fstrsolid%unode((i-1)*ndof+4:(i-1)*ndof+6)
1011 do i = 1, hecmesh%n_node
1013 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = unode(nn*(i-1)+j)
1019 if ( is_33shell == 1)
then
1021 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(1), ndof )
1022 fstrresult%nn_dof(ncomp) = nn
1023 fstrresult%node_label(ncomp) =
'ROTATION'
1024 allocate( unode(ndof*hecmesh%n_node) )
1027 do i = 1, hecmesh%n_node
1029 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = unode(nn*(i-1)+j)
1039 if( fstrsolid%output_ctrl(4)%outinfo%on(2) )
then
1041 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(2), ndof )
1042 fstrresult%nn_dof(ncomp) = nn
1043 fstrresult%node_label(ncomp) =
'REACTION_FORCE'
1044 do i = 1, hecmesh%n_node
1046 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = fstrsolid%REACTION(nn*(i-1)+j)
1052 if(is_33shell == 1 .or. ndof == 6)
then
1054 & fstrsolid%SHELL, nitem, iitem, ncomp, eitem, jitem, ecomp, 1,
" " )
1057 & fstrsolid%SOLID, nitem, iitem, ncomp, eitem, jitem, ecomp, 1,
" " )
1061 if(
associated(fstrsolid%SHELL) .and. fstrsolid%output_ctrl(4)%outinfo%on(27) .and. is_33shell == 1 )
then
1062 allocate(clyr(2*ntot_lyr))
1065 clyr(2*i-1)=
"_L"//trim(cnum)//
"+"
1066 clyr(2*i )=
"_L"//trim(cnum)//
"-"
1070 & fstrsolid%SHELL%LAYER(i)%PLUS, nitem, iitem, ncomp, eitem, jitem, ecomp, i+1, clyr(2*i-1) )
1072 & fstrsolid%SHELL%LAYER(i)%MINUS, nitem, iitem, ncomp, eitem, jitem, ecomp, i+1, clyr(2*i ) )
1078 if( fstrsolid%output_ctrl(4)%outinfo%on(12) .and.
associated(tnstrain) )
then
1080 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(12), ndof )
1081 fstrresult%nn_dof(ncomp) = nn
1082 fstrresult%node_label(ncomp) =
'THERMAL_NodalSTRAIN'
1083 do i = 1, hecmesh%n_node
1085 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = tnstrain(nn*(i-1)+j)
1092 if( fstrsolid%output_ctrl(4)%outinfo%on(30) .and.
associated(fstrsolid%CONT_NFORCE) )
then
1094 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(30), ndof )
1095 fstrresult%nn_dof(ncomp) = nn
1096 fstrresult%node_label(ncomp) =
'CONTACT_NFORCE'
1097 do i = 1, hecmesh%n_node
1099 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = fstrsolid%CONT_NFORCE(nn*(i-1)+j)
1106 if( fstrsolid%output_ctrl(4)%outinfo%on(31) .and.
associated(fstrsolid%CONT_FRIC) )
then
1108 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(31), ndof )
1109 fstrresult%nn_dof(ncomp) = nn
1110 fstrresult%node_label(ncomp) =
'CONTACT_FRICTION'
1111 do i = 1, hecmesh%n_node
1113 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = fstrsolid%CONT_FRIC(nn*(i-1)+j)
1120 if( fstrsolid%output_ctrl(4)%outinfo%on(32) .and.
associated(fstrsolid%CONT_RELVEL) )
then
1122 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(32), ndof )
1123 fstrresult%nn_dof(ncomp) = nn
1124 fstrresult%node_label(ncomp) =
'CONTACT_RELVEL'
1125 do i = 1, hecmesh%n_node
1127 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = fstrsolid%CONT_RELVEL(nn*(i-1)+j)
1134 if( fstrsolid%output_ctrl(4)%outinfo%on(33) .and.
associated(fstrsolid%CONT_STATE) )
then
1136 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(33), ndof )
1137 fstrresult%nn_dof(ncomp) = nn
1138 fstrresult%node_label(ncomp) =
'CONTACT_STATE'
1139 do i = 1, hecmesh%n_node
1141 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = fstrsolid%CONT_STATE(nn*(i-1)+j)
1148 if( fstrsolid%output_ctrl(4)%outinfo%on(36) .and.
associated(fstrsolid%CONT_NTRAC) )
then
1150 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(36), ndof )
1151 fstrresult%nn_dof(ncomp) = nn
1152 fstrresult%node_label(ncomp) =
'CONTACT_NTRACTION'
1153 do i = 1, hecmesh%n_node
1155 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = fstrsolid%CONT_NTRAC(nn*(i-1)+j)
1162 if( fstrsolid%output_ctrl(4)%outinfo%on(37) .and.
associated(fstrsolid%CONT_FTRAC) )
then
1164 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(37), ndof )
1165 fstrresult%nn_dof(ncomp) = nn
1166 fstrresult%node_label(ncomp) =
'CONTACT_FTRACTION'
1167 do i = 1, hecmesh%n_node
1169 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = fstrsolid%CONT_FTRAC(nn*(i-1)+j)
1176 if( fstrsolid%output_ctrl(4)%outinfo%on(38) )
then
1178 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(38), ndof )
1179 fstrresult%nn_dof(ncomp) = nn
1180 fstrresult%node_label(ncomp) =
'NODE_ID'
1181 do i = 1, hecmesh%n_node
1182 fstrresult%node_val_item(nitem*(i-1)+1+iitem) = hecmesh%global_node_ID(i)
1201 if(fstrsolid%output_ctrl(4)%outinfo%on(34))
then
1203 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(34), ndof )
1204 fstrresult%ne_dof(ecomp) = nn
1205 fstrresult%elem_label(ecomp) =
'MATERIAL_ID'
1206 do i = 1, hecmesh%n_elem
1207 j = hecmesh%section_ID(i)
1208 fstrresult%elem_val_item(eitem*(i-1)+1+jitem) = hecmesh%section%sect_mat_ID_item(j)
1214 if(fstrsolid%output_ctrl(4)%outinfo%on(39))
then
1216 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(39), ndof )
1217 fstrresult%ne_dof(ecomp) = nn
1218 fstrresult%elem_label(ecomp) =
'ELEM_ID'
1219 do i = 1, hecmesh%n_elem
1220 fstrresult%elem_val_item(eitem*(i-1)+1+jitem) = hecmesh%global_elem_ID(i)
1226 if(fstrsolid%output_ctrl(4)%outinfo%on(40))
then
1228 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(40), ndof )
1229 fstrresult%ne_dof(ecomp) = nn
1230 fstrresult%elem_label(ecomp) =
'SECTION_ID'
1231 do i = 1, hecmesh%n_elem
1232 fstrresult%elem_val_item(eitem*(i-1)+1+jitem) = hecmesh%section_ID(i)
1239 & iitem, ncomp, eitem, jitem, ecomp, nlyr, clyr )
1247 type (hecmwST_local_mesh) :: hecMESH
1248 type (fstr_solid) :: fstrSOLID
1249 type (hecmwST_result_data):: fstrRESULT
1250 type (fstr_solid_physic_val) :: RES
1251 integer(kind=kint) :: istep, flag
1252 integer(kind=kint) :: n_lyr, cid
1254 character(len=HECMW_HEADER_LEN) :: header
1255 character(len=HECMW_NAME_LEN) :: s, label, nameID, addfname
1256 character(len=6) :: clyr
1257 character(len=4) :: cnum
1258 integer(kind=kint) :: i, j, k, ndof, mdof, id, nitem, eitem, nn, mm, ngauss, it
1259 integer(kind=kint) :: iitem, ncomp, jitem, ecomp, nlyr
1261 ndof = hecmesh%n_dof
1264 if( fstrsolid%output_ctrl(4)%outinfo%on(3))
then
1265 nn =
n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(3), ndof )
1267 fstrresult%nn_dof(ncomp) = nn
1268 fstrresult%node_label(ncomp) =
'NodalSTRAIN'//trim(clyr)
1269 do i = 1, hecmesh%n_node
1271 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = res%STRAIN(nn*(i-1)+j)
1278 if(fstrsolid%output_ctrl(4)%outinfo%on(4))
then
1280 nn =
n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(4), ndof )
1281 fstrresult%nn_dof(ncomp) = nn
1282 fstrresult%node_label(ncomp) =
'NodalSTRESS'//trim(clyr)
1283 do i = 1, hecmesh%n_node
1285 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = res%STRESS((nn)*(i-1)+j)
1292 if(fstrsolid%output_ctrl(4)%outinfo%on(5))
then
1294 nn =
n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(5), ndof )
1295 fstrresult%nn_dof(ncomp) = nn
1296 fstrresult%node_label(ncomp) =
'NodalMISES'//trim(clyr)
1297 do i = 1, hecmesh%n_node
1298 fstrresult%node_val_item(nitem*(i-1)+1+iitem) = res%MISES(i)
1304 if(fstrsolid%output_ctrl(4)%outinfo%on(19))
then
1306 nn =
n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(19), ndof )
1307 fstrresult%nn_dof(ncomp) = nn
1308 fstrresult%node_label(ncomp) =
'NodalPrincipalSTRESS'//trim(clyr)
1309 do i = 1, hecmesh%n_node
1311 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = res%PSTRESS((nn)*(i-1)+j)
1318 if(fstrsolid%output_ctrl(4)%outinfo%on(23))
then
1320 write(cnum,
'(i0)') k
1322 nn =
n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(23), ndof )
1323 fstrresult%nn_dof(ncomp) = nn
1324 fstrresult%node_label(ncomp) =
'NodalPrincipalSTRESSVector'//trim(cnum)//trim(clyr)
1325 do i = 1, hecmesh%n_node
1327 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = res%PSTRESS_VECT((nn)*(i-1)+j,k)
1335 if( fstrsolid%output_ctrl(4)%outinfo%on(21))
then
1336 nn =
n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(21), ndof )
1338 fstrresult%nn_dof(ncomp) = nn
1339 fstrresult%node_label(ncomp) =
'NodalPrincipalSTRAIN'//trim(clyr)
1340 do i = 1, hecmesh%n_node
1342 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = res%PSTRAIN(nn*(i-1)+j)
1349 if( fstrsolid%output_ctrl(4)%outinfo%on(25))
then
1351 write(cnum,
'(i0)') k
1352 nn =
n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(25), ndof )
1354 fstrresult%nn_dof(ncomp) = nn
1355 fstrresult%node_label(ncomp) =
'NodalPrincipalSTRAINVector'//trim(cnum)//trim(clyr)
1356 do i = 1, hecmesh%n_node
1358 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = res%PSTRAIN_VECT(nn*(i-1)+j,k)
1366 if( fstrsolid%output_ctrl(4)%outinfo%on(6))
then
1367 nn =
n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(6), ndof )
1369 fstrresult%ne_dof(ecomp) = nn
1370 fstrresult%elem_label(ecomp) =
'ElementalSTRAIN'
1371 do i = 1, hecmesh%n_elem
1373 fstrresult%elem_val_item(eitem*(i-1)+j+jitem) = res%ESTRAIN(nn*(i-1)+j)
1380 if(fstrsolid%output_ctrl(4)%outinfo%on(7))
then
1382 nn =
n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(7), ndof )
1383 fstrresult%ne_dof(ecomp) = nn
1384 fstrresult%elem_label(ecomp) =
'ElementalSTRESS'
1385 do i = 1, hecmesh%n_elem
1387 fstrresult%elem_val_item(eitem*(i-1)+j+jitem) = res%ESTRESS((nn)*(i-1)+j)
1394 if(fstrsolid%output_ctrl(4)%outinfo%on(8))
then
1396 nn =
n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(8), ndof )
1397 fstrresult%ne_dof(ecomp) = nn
1398 fstrresult%elem_label(ecomp) =
'ElementalMISES'
1399 do i = 1, hecmesh%n_elem
1400 fstrresult%elem_val_item(eitem*(i-1)+1+jitem) = res%EMISES(i)
1406 if(fstrsolid%output_ctrl(4)%outinfo%on(20))
then
1408 nn =
n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(20), ndof )
1409 fstrresult%ne_dof(ecomp) = nn
1410 fstrresult%elem_label(ecomp) =
'ElementalPrincipalSTRESS'
1411 do i = 1, hecmesh%n_elem
1413 fstrresult%elem_val_item(eitem*(i-1)+j+jitem) = res%EPSTRESS((nn)*(i-1)+j)
1420 if(fstrsolid%output_ctrl(4)%outinfo%on(22))
then
1422 nn =
n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(22), ndof )
1423 fstrresult%ne_dof(ecomp) = nn
1424 fstrresult%elem_label(ecomp) =
'ElementalPrincipalSTRAIN'
1425 do i = 1, hecmesh%n_elem
1427 fstrresult%elem_val_item(eitem*(i-1)+j+jitem) = res%EPSTRAIN((nn)*(i-1)+j)
1434 if(fstrsolid%output_ctrl(4)%outinfo%on(24))
then
1438 nn =
n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(24), ndof )
1439 fstrresult%ne_dof(ecomp) = nn
1440 fstrresult%elem_label(ecomp) =
'ElementalPrincipalSTRESSVector'//trim(cnum)
1441 do i = 1, hecmesh%n_elem
1443 fstrresult%elem_val_item(eitem*(i-1)+j+jitem) = res%EPSTRESS_VECT((nn)*(i-1)+j,k)
1451 if(fstrsolid%output_ctrl(4)%outinfo%on(26))
then
1455 nn =
n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(26), ndof )
1456 fstrresult%ne_dof(ecomp) = nn
1457 fstrresult%elem_label(ecomp) =
'ElementalPrincipalSTRAINVector'//trim(cnum)
1458 do i = 1, hecmesh%n_elem
1460 fstrresult%elem_val_item(eitem*(i-1)+j+jitem) = res%EPSTRAIN_VECT((nn)*(i-1)+j,k)
1468 if(fstrsolid%output_ctrl(4)%outinfo%on(43))
then
1470 nn =
n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(43), ndof )
1471 fstrresult%ne_dof(ecomp) = nn
1472 fstrresult%elem_label(ecomp) =
'ElementalPLSTRAIN'
1473 do i = 1, hecmesh%n_elem
1474 res%EPLSTRAIN(i) = 0.d0
1475 do j = 1,
size(fstrsolid%elements(i)%gausses)
1476 res%EPLSTRAIN(i) = res%EPLSTRAIN(i) + fstrsolid%elements(i)%gausses(j)%plstrain
1478 res%EPLSTRAIN(i) = res%EPLSTRAIN(i) /
size(fstrsolid%elements(i)%gausses)
1479 fstrresult%elem_val_item(eitem*(i-1)+1+jitem) = res%EPLSTRAIN(i)
1493 type (hecmwst_local_mesh) :: hecmesh
1494 integer(kind=kint) :: i, j, k, itype, is, ie, ic_type, js, icel
1495 integer(kind=kint) :: mm, n1, n2
1496 real(kind=kreal),
allocatable :: unode(:)
1498 do itype = 1, hecmesh%n_elem_type
1499 is = hecmesh%elem_type_index(itype-1) + 1
1500 ie = hecmesh%elem_type_index(itype )
1501 ic_type = hecmesh%elem_type_item(itype)
1502 if(ic_type == 781)
then
1504 js = hecmesh%elem_node_index(icel-1)
1506 n1 = hecmesh%elem_node_item(js+j )
1507 n2 = hecmesh%elem_node_item(js+j+4)
1508 unode(3*n2-2) = unode(3*n1-2)
1509 unode(3*n2-1) = unode(3*n1-1)
1510 unode(3*n2 ) = unode(3*n1 )
1513 elseif(ic_type == 761)
then
1515 js = hecmesh%elem_node_index(icel-1)
1517 n1 = hecmesh%elem_node_item(js+j )
1518 n2 = hecmesh%elem_node_item(js+j+3)
1519 unode(3*n2-2) = unode(3*n1-2)
1520 unode(3*n2-1) = unode(3*n1-1)
1521 unode(3*n2 ) = unode(3*n1 )
1536 type (hecmwst_local_mesh) :: hecmesh
1537 integer(kind=kint) :: i, j, k, itype, is, ie, ic_type, js, icel
1538 integer(kind=kint) :: mm, n1, n2
1539 real(kind=kreal),
allocatable :: unode(:)
1541 do itype = 1, hecmesh%n_elem_type
1542 is = hecmesh%elem_type_index(itype-1) + 1
1543 ie = hecmesh%elem_type_index(itype )
1544 ic_type = hecmesh%elem_type_item(itype)
1545 if(ic_type == 781)
then
1547 js = hecmesh%elem_node_index(icel-1)
1549 n1 = hecmesh%elem_node_item(js+j)
1550 n2 = hecmesh%elem_node_item(js+j+4)
1551 unode(3*n1-2) = fstrsolid%unode(3*n2-2)
1552 unode(3*n1-1) = fstrsolid%unode(3*n2-1)
1553 unode(3*n1 ) = fstrsolid%unode(3*n2 )
1554 unode(3*n2-2) = fstrsolid%unode(3*n2-2)
1555 unode(3*n2-1) = fstrsolid%unode(3*n2-1)
1556 unode(3*n2 ) = fstrsolid%unode(3*n2 )
1559 elseif(ic_type == 761)
then
1561 js = hecmesh%elem_node_index(icel-1)
1563 n1 = hecmesh%elem_node_item(js+j)
1564 n2 = hecmesh%elem_node_item(js+j+3)
1566 unode(3*n1-2) = fstrsolid%unode(3*n2-2)
1567 unode(3*n1-1) = fstrsolid%unode(3*n2-1)
1568 unode(3*n1 ) = fstrsolid%unode(3*n2 )
1569 unode(3*n2-2) = fstrsolid%unode(3*n2-2)
1570 unode(3*n2-1) = fstrsolid%unode(3*n2-1)
1571 unode(3*n2 ) = fstrsolid%unode(3*n2 )
1586 type (hecmwst_local_mesh) :: hecmesh
1587 integer(kind=kint) :: i, j, k, itype, is, ie, ic_type, js, icel
1588 integer(kind=kint) :: mm, a, b
1589 real(kind=kreal),
allocatable :: unode(:)
1591 do itype = 1, hecmesh%n_elem_type
1592 is = hecmesh%elem_type_index(itype-1) + 1
1593 ie = hecmesh%elem_type_index(itype )
1594 ic_type = hecmesh%elem_type_item(itype)
1595 if(ic_type == 641)
then
1597 js = hecmesh%elem_node_index(icel-1)
1599 a = hecmesh%elem_node_item(js+j)
1600 b = hecmesh%elem_node_item(js+j+2)
1601 unode(3*b-2) = unode(3*a-2)
1602 unode(3*b-1) = unode(3*a-1)
1603 unode(3*b ) = unode(3*a )
1617 type (
fstr_solid),
intent(inout) :: fstrsolid
1618 integer(kind=kint),
intent(in) :: phase
1620 integer(kind=kint),
parameter :: nval = 10
1621 logical,
save :: updated(nval) = .false.
1622 integer(kind=kint) :: ndof, i
1623 real(kind=
kreal) :: area
1625 ndof = hecmesh%n_dof
1627 if( phase == -1 )
then
1628 updated(1:nval) = .false.
1631 if( phase /= 3 .and. phase /= 4 )
return
1635 if( fstrsolid%output_ctrl(phase)%outinfo%on(30) .and.
associated(fstrsolid%CONT_NFORCE) )
then
1643 if( fstrsolid%output_ctrl(phase)%outinfo%on(31) .and.
associated(fstrsolid%CONT_FRIC) )
then
1651 if( fstrsolid%output_ctrl(phase)%outinfo%on(32) .and.
associated(fstrsolid%CONT_RELVEL) )
then
1659 if( fstrsolid%output_ctrl(phase)%outinfo%on(33) .and.
associated(fstrsolid%CONT_STATE) )
then
1667 if( fstrsolid%output_ctrl(phase)%outinfo%on(36) .or. fstrsolid%output_ctrl(phase)%outinfo%on(37) )
then
1674 if( fstrsolid%output_ctrl(phase)%outinfo%on(36) .and.
associated(fstrsolid%CONT_NTRAC) )
then
1678 fstrsolid%CONT_NTRAC(:) = 0.d0
1679 do i=1,hecmesh%nn_internal
1680 area = fstrsolid%CONT_AREA(i)
1681 if( area < 1.d-16 ) cycle
1682 fstrsolid%CONT_NTRAC(3*i-2:3*i) = fstrsolid%CONT_NFORCE(3*i-2:3*i)/area
1688 if( fstrsolid%output_ctrl(phase)%outinfo%on(37) .and.
associated(fstrsolid%CONT_FTRAC) )
then
1692 fstrsolid%CONT_FTRAC(:) = 0.d0
1693 do i=1,hecmesh%nn_internal
1694 area = fstrsolid%CONT_AREA(i)
1695 if( area < 1.d-16 ) cycle
1696 fstrsolid%CONT_FTRAC(3*i-2:3*i) = fstrsolid%CONT_FRIC(3*i-2:3*i)/area