31 integer(kind=kint) :: istep, flag
33 real(kind=
kreal) :: time
34 integer(kind=kint) :: id
35 real(kind=
kreal) :: work(1)
36 character(len=HECMW_HEADER_LEN) :: header
37 character(len=HECMW_MSG_LEN) :: comment
38 character(len=HECMW_NAME_LEN) :: label, nameid, addfname
41 header =
'*fstrresult'
42 if(
present(fstrdynamic) )
then
43 comment =
'dynamic_result'
45 comment =
'static_result'
47 call hecmw_result_init( hecmesh, istep, header, comment )
50 id = hecmw_result_dtype_global
53 call hecmw_result_add( id, 1, label, work )
55 if(
present(fstrdynamic) )
then
64 call hecmw_result_write_by_name( nameid )
67 call hecmw_result_write_by_addfname( nameid, addfname )
71 call hecmw_result_finalize
89 integer(kind=kint) :: istep
90 character(len=*) :: label_suffix
92 integer(kind=kint) :: ntot_lyr, is_33shell, is_33beam
93 integer(kind=kint) :: i, j, k, ndof, mdof, id, nitem, nn, mm, ngauss
94 real(kind=
kreal),
pointer :: tnstrain(:), testrain(:), yield_ratio(:)
95 integer(kind=kint) :: idx
96 real(kind=
kreal),
allocatable :: work(:), unode(:), rnode(:)
97 character(len=HECMW_NAME_LEN) :: s, label, cnum
98 character(len=16),
allocatable :: clyr(:)
101 tnstrain => fstrsolid%TNSTRAIN
102 testrain => fstrsolid%TESTRAIN
103 yield_ratio => fstrsolid%YIELD_RATIO
105 is_dynamic =
present(fstrdynamic)
107 if( is_dynamic )
then
109 if( fstrdynamic%idx_eqa/=11 .and. istep>0 ) idx = 2
114 if( hecmesh%n_elem > hecmesh%n_node ) mm = hecmesh%n_elem
115 if( ndof==2 ) mdof = 3
116 if( ndof==3 ) mdof = 6
117 if( ndof==4 ) mdof = 6
118 if( ndof==6 ) mdof = 6
120 ntot_lyr = fstrsolid%max_lyr
121 is_33shell = fstrsolid%is_33shell
122 is_33beam = fstrsolid%is_33beam
128 if( fstrsolid%output_ctrl(3)%outinfo%on(1) )
then
130 id = hecmw_result_dtype_node
132 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(1), 3 )
133 allocate( unode(3*hecmesh%n_node) )
135 do i=1, hecmesh%n_node
137 unode((i-1)*3 + j) = fstrdynamic%DISP((i-1)*4 + j, idx)
141 call result_add( id, nitem, label, label_suffix, unode )
144 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(1), 1 )
145 allocate( unode(hecmesh%n_node) )
147 do i=1, hecmesh%n_node
148 unode(i) = fstrdynamic%DISP(i*4, idx)
151 call result_add( id, nitem, label, label_suffix, unode )
153 else if(ndof == 6)
then
154 id = hecmw_result_dtype_node
155 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(1), 3 )
156 allocate( unode(hecmesh%n_node*3) )
158 if( is_dynamic )
then
159 do i=1, hecmesh%n_node
160 unode((i-1)*3+1:(i-1)*3+3) = fstrdynamic%DISP((i-1)*ndof+1:(i-1)*ndof+3, idx)
163 do i=1, hecmesh%n_node
164 unode((i-1)*3+1:(i-1)*3+3) = fstrsolid%unode((i-1)*ndof+1:(i-1)*ndof+3)
167 label =
'DISPLACEMENT'
168 call result_add( id, nitem, label, label_suffix, unode )
171 id = hecmw_result_dtype_node
172 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(1), ndof )
173 allocate( unode(hecmesh%n_node*ndof) )
175 if( is_dynamic )
then
176 unode(:) = fstrdynamic%DISP(:,idx)
178 unode(:) = fstrsolid%unode
180 label =
'DISPLACEMENT'
181 if(is_33beam == 1)
then
184 if(is_33shell == 1)
then
187 call result_add( id, nitem, label, label_suffix, unode )
193 if (fstrsolid%output_ctrl(3)%outinfo%on(18))
then
195 id = hecmw_result_dtype_node
196 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(1), 3 )
198 allocate( rnode(hecmesh%n_node*3) )
200 if( is_dynamic )
then
201 do i=1, hecmesh%n_node
202 rnode((i-1)*3+1:(i-1)*3+3) = fstrdynamic%DISP((i-1)*ndof+4:(i-1)*ndof+6, idx)
205 do i=1, hecmesh%n_node
206 rnode((i-1)*3+1:(i-1)*3+3) = fstrsolid%unode((i-1)*ndof+4:(i-1)*ndof+6)
209 call result_add( id, nitem, label, label_suffix, rnode )
212 if ( is_33shell == 1 .or. is_33beam == 1 )
then
213 id = hecmw_result_dtype_node
214 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(1), ndof )
216 allocate( rnode(hecmesh%n_node*ndof) )
220 call result_add( id, nitem, label, label_suffix, rnode )
227 if( is_dynamic .and. fstrsolid%output_ctrl(3)%outinfo%on(15) )
then
228 id = hecmw_result_dtype_node
229 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(15), ndof )
231 call result_add( id, nitem, label, label_suffix, fstrdynamic%VEL(:,idx) )
235 if( is_dynamic .and. fstrsolid%output_ctrl(3)%outinfo%on(16) )
then
236 id = hecmw_result_dtype_node
237 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(16), ndof )
238 label =
'ACCELERATION'
239 call result_add( id, nitem, label, label_suffix, fstrdynamic%ACC(:,idx) )
243 if( fstrsolid%output_ctrl(3)%outinfo%on(2) )
then
244 id = hecmw_result_dtype_node
245 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(2), ndof )
246 label =
'REACTION_FORCE'
247 call result_add( id, nitem, label, label_suffix, fstrsolid%REACTION )
252 if(is_33shell == 1 .or. ndof == 6)
then
259 if(
associated(fstrsolid%SHELL) .and. fstrsolid%output_ctrl(3)%outinfo%on(27) )
then
260 allocate(clyr(2*ntot_lyr))
263 clyr(2*i-1)=
"_L"//trim(cnum)//
"+"
264 clyr(2*i )=
"_L"//trim(cnum)//
"-"
267 call fstr_write_result_main( hecmesh, fstrsolid, fstrsolid%SHELL%LAYER(i)%PLUS, clyr(2*i-1), label_suffix )
268 call fstr_write_result_main( hecmesh, fstrsolid, fstrsolid%SHELL%LAYER(i)%MINUS, clyr(2*i ), label_suffix )
274 ngauss = fstrsolid%maxn_gauss
275 if( fstrsolid%output_ctrl(3)%outinfo%on(11) .or. &
276 (ndof/=6 .and. any(fstrsolid%output_ctrl(3)%outinfo%on(9:10))) )
then
277 do i = 1, hecmesh%n_elem
278 if(
associated(fstrsolid%elements(i)%shell_layer_gausses) )
then
279 ngauss = max(ngauss,
size(fstrsolid%elements(i)%shell_layer_gausses))
282 call hecmw_allreduce_i1(hecmesh, ngauss,
hecmw_max)
287 if( fstrsolid%output_ctrl(3)%outinfo%on(9) .and. ndof/=6 )
then
288 id = hecmw_result_dtype_elem
289 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(9), ndof )
293 if( k>fstrsolid%maxn_gauss ) work(:) = 0.d0
295 write(label,
'(a,a)')
'GaussSTRAIN',trim(adjustl(s))
296 label = adjustl(label)
297 do i = 1, hecmesh%n_elem
298 if(
associated(fstrsolid%elements(i)%shell_layer_gausses) )
then
299 work(nitem*(i-1)+1:nitem*i) = 0.d0
300 if( k <=
size(fstrsolid%elements(i)%shell_layer_gausses) )
then
301 work(nitem*(i-1)+1:nitem*i) = fstrsolid%elements(i)%shell_layer_gausses(k)%strain_out(1:nitem)
303 else if(
associated(fstrsolid%elements(i)%gausses) )
then
304 if( k <=
size(fstrsolid%elements(i)%gausses) )
then
306 work(nitem*(i-1)+j) = fstrsolid%elements(i)%gausses(k)%strain_out(j)
311 call result_add( id, nitem, label, label_suffix, work )
316 if( fstrsolid%output_ctrl(3)%outinfo%on(10) .and. ndof/=6 )
then
317 id = hecmw_result_dtype_elem
318 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(10), ndof )
321 if( k>fstrsolid%maxn_gauss ) work(:) = 0.d0
323 write(label,
'(a,a)')
'GaussSTRESS',trim(adjustl(s))
324 label = adjustl(label)
325 do i = 1, hecmesh%n_elem
326 if(
associated(fstrsolid%elements(i)%shell_layer_gausses) )
then
327 work(nitem*(i-1)+1:nitem*i) = 0.d0
328 if( k <=
size(fstrsolid%elements(i)%shell_layer_gausses) )
then
329 work(nitem*(i-1)+1:nitem*i) = fstrsolid%elements(i)%shell_layer_gausses(k)%stress_out(1:nitem)
331 else if(
associated(fstrsolid%elements(i)%gausses) )
then
332 if( k <=
size(fstrsolid%elements(i)%gausses) )
then
334 work(nitem*(i-1)+j) = fstrsolid%elements(i)%gausses(k)%stress_out(j)
339 call result_add( id, nitem, label, label_suffix, work )
344 if( fstrsolid%output_ctrl(3)%outinfo%on(11) .and. fstrsolid%StaticType/=3 )
then
345 id = hecmw_result_dtype_elem
346 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(11), ndof )
349 if( k>fstrsolid%maxn_gauss ) work(:) = 0.d0
351 write(label,
'(a,a)')
'PLASTIC_GaussSTRAIN',trim(adjustl(s))
352 label = adjustl(label)
353 do i = 1, hecmesh%n_elem
355 if(
associated(fstrsolid%elements(i)%shell_layer_gausses) )
then
357 if( k <=
size(fstrsolid%elements(i)%shell_layer_gausses) )
then
358 work(i) = fstrsolid%elements(i)%shell_layer_gausses(k)%plstrain
360 else if(
associated(fstrsolid%elements(i)%gausses) )
then
361 if( k <=
size(fstrsolid%elements(i)%gausses) )
then
362 work(i) = fstrsolid%elements(i)%gausses(k)%plstrain
366 call result_add( id, nitem, label, label_suffix, work )
371 if( fstrsolid%output_ctrl(3)%outinfo%on(12) .and.
associated(tnstrain) )
then
372 id = hecmw_result_dtype_node
373 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(12), ndof )
374 label =
'THERMAL_NodalSTRAIN'
375 call result_add( id, nitem, label, label_suffix, tnstrain )
379 if( fstrsolid%output_ctrl(3)%outinfo%on(13) .and.
associated(testrain) )
then
380 id = hecmw_result_dtype_elem
381 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(13), ndof )
382 label =
'THERMAL_ElementalSTRAIN'
383 call result_add( id, nitem, label, label_suffix, testrain )
387 if( fstrsolid%output_ctrl(3)%outinfo%on(14) .and.
associated(testrain) )
then
388 id = hecmw_result_dtype_elem
389 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(14), ndof )
390 ngauss = fstrsolid%maxn_gauss
393 write(label,
'(a,a)')
'THERMAL_GaussSTRAIN',trim(adjustl(s))
394 label = adjustl(label)
395 do i = 1, hecmesh%n_elem
396 if( k > ngauss )
then
398 work(nitem*(i-1)+j) = 0.d0
406 call result_add( id, nitem, label, label_suffix, work )
411 if( fstrsolid%output_ctrl(3)%outinfo%on(29) )
then
412 id = hecmw_result_dtype_elem
413 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(29), ndof )
414 label =
"YIELD_RATIO"
415 call result_add( id, nitem, label, label_suffix, yield_ratio )
419 if( fstrsolid%output_ctrl(3)%outinfo%on(30) .and.
associated(fstrsolid%CONT_NFORCE) )
then
420 id = hecmw_result_dtype_node
421 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(30), ndof )
422 label =
'CONTACT_NFORCE'
423 call result_add( id, nitem, label, label_suffix, fstrsolid%CONT_NFORCE )
427 if( fstrsolid%output_ctrl(3)%outinfo%on(31) .and.
associated(fstrsolid%CONT_FRIC) )
then
428 id = hecmw_result_dtype_node
429 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(31), ndof )
430 label =
'CONTACT_FRICTION'
431 call result_add( id, nitem, label, label_suffix, fstrsolid%CONT_FRIC )
435 if( fstrsolid%output_ctrl(3)%outinfo%on(32) .and.
associated(fstrsolid%CONT_RELVEL) )
then
436 id = hecmw_result_dtype_node
437 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(32), ndof )
438 label =
'CONTACT_RELVEL'
439 call result_add( id, nitem, label, label_suffix, fstrsolid%CONT_RELVEL )
443 if( fstrsolid%output_ctrl(3)%outinfo%on(33) .and.
associated(fstrsolid%CONT_STATE) )
then
444 id = hecmw_result_dtype_node
445 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(33), ndof )
446 label =
'CONTACT_STATE'
447 call result_add( id, nitem, label, label_suffix, fstrsolid%CONT_STATE )
451 if( fstrsolid%output_ctrl(3)%outinfo%on(36) .and.
associated(fstrsolid%CONT_NTRAC) )
then
452 id = hecmw_result_dtype_node
453 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(36), ndof )
454 label =
'CONTACT_NTRACTION'
455 call result_add( id, nitem, label, label_suffix, fstrsolid%CONT_NTRAC )
459 if( fstrsolid%output_ctrl(3)%outinfo%on(37) .and.
associated(fstrsolid%CONT_FTRAC) )
then
460 id = hecmw_result_dtype_node
461 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(37), ndof )
462 label =
'CONTACT_FTRACTION'
463 call result_add( id, nitem, label, label_suffix, fstrsolid%CONT_FTRAC )
483 if( fstrsolid%output_ctrl(3)%outinfo%on(44) )
then
484 id = hecmw_result_dtype_elem
485 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(44), ndof )
488 do i = 1, hecmesh%n_elem
489 if( fstrsolid%elements(i)%elemact_flag /= kelact_inactive ) work(i) = 1.d0
491 call result_add( id, nitem, label, label_suffix, work )
503 type(hecmwst_local_mesh),
intent(in) :: hecMESH
505 character(len=*),
intent(in) :: label_suffix
506 integer(kind=kint) :: i, k, ngauss, nfield
507 real(kind=kreal) :: strain(6), stress(6)
508 real(kind=kreal),
allocatable :: values(:,:)
509 character(len=HECMW_NAME_LEN) :: label
511 nfield = count(fstrsolid%output_ctrl(3)%outinfo%on(9:10))
512 if( nfield==0 )
return
514 do i=1,hecmesh%n_elem
517 call hecmw_allreduce_i1(hecmesh, ngauss, hecmw_max)
518 allocate(values(6*hecmesh%n_elem,nfield))
520 do i=1,hecmesh%n_elem
522 if( fstrsolid%output_ctrl(3)%outinfo%on(9) ) values(6*i-5:6*i,1) = strain
523 if( fstrsolid%output_ctrl(3)%outinfo%on(10) ) values(6*i-5:6*i,nfield) = stress
525 if( fstrsolid%output_ctrl(3)%outinfo%on(9) )
then
526 write(label,
'(a,i0)')
'GaussSTRAIN',k
527 call result_add(hecmw_result_dtype_elem, 6, label, label_suffix, values(:,1))
529 if( fstrsolid%output_ctrl(3)%outinfo%on(10) )
then
530 write(label,
'(a,i0)')
'GaussSTRESS',k
531 call result_add(hecmw_result_dtype_elem, 6, label, label_suffix, values(:,nfield))
537 subroutine result_add( dtype, n_dof, label, label_suffix, data )
542 integer(kind=kint),
intent(in) :: dtype
543 integer(kind=kint),
intent(in) :: n_dof
544 character(len=*),
intent(in) :: label
545 character(len=*),
intent(in) :: label_suffix
546 real(kind=
kreal) ::
data(:)
547 character(len=HECMW_NAME_LEN) :: name
549 name = trim(label)//trim(label_suffix)
550 call hecmw_result_add( dtype, n_dof, name,
data )
561 type (hecmwST_local_mesh) :: hecMESH
562 type (fstr_solid) :: fstrSOLID
563 type (fstr_solid_physic_val) :: RES
565 character(len=HECMW_NAME_LEN) :: label
566 character(len=16) :: clyr
567 character(len=*) :: label_suffix
568 character(len=12) :: cnum
569 integer(kind=kint) :: k, ndof, id, nitem
570 real(kind=
kreal),
allocatable :: work(:)
573 allocate( work(hecmesh%n_elem) )
576 if (fstrsolid%output_ctrl(3)%outinfo%on(3))
then
577 id = hecmw_result_dtype_node
578 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(3), ndof )
579 label =
'NodalSTRAIN'//trim(clyr)
580 call result_add( id, nitem, label, label_suffix, res%STRAIN )
584 if( fstrsolid%output_ctrl(3)%outinfo%on(4) )
then
585 id = hecmw_result_dtype_node
586 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(4), ndof )
587 label =
'NodalSTRESS'//trim(clyr)
588 call result_add( id, nitem, label, label_suffix, res%STRESS )
592 if( fstrsolid%output_ctrl(3)%outinfo%on(5) )
then
593 id = hecmw_result_dtype_node
594 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(5), ndof )
595 label =
'NodalMISES'//trim(clyr)
596 call result_add( id, nitem, label, label_suffix, res%MISES )
600 if( fstrsolid%output_ctrl(3)%outinfo%on(19) )
then
601 id = hecmw_result_dtype_node
602 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(19), ndof )
603 label =
'NodalPrincipalSTRESS'//trim(clyr)
604 call result_add( id, nitem, label, label_suffix, res%PSTRESS )
608 if( fstrsolid%output_ctrl(3)%outinfo%on(21) )
then
609 id = hecmw_result_dtype_node
610 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(21), ndof )
611 label =
'NodalPrincipalSTRAIN'//trim(clyr)
612 call result_add( id, nitem, label, label_suffix, res%PSTRAIN )
616 if( fstrsolid%output_ctrl(3)%outinfo%on(23) )
then
617 id = hecmw_result_dtype_node
620 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(23), ndof )
621 label =
'NodalPrincipalSTRESSVector'//trim(cnum)//trim(clyr)
622 call result_add( id, nitem, label, label_suffix, res%PSTRESS_VECT(:,k) )
627 if( fstrsolid%output_ctrl(3)%outinfo%on(25) )
then
628 id = hecmw_result_dtype_node
631 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(25), ndof )
632 label =
'NodalPrincipalSTRAINVector'//trim(cnum)//trim(clyr)
633 call result_add( id, nitem, label, label_suffix, res%PSTRAIN_VECT(:,k) )
639 if( fstrsolid%output_ctrl(3)%outinfo%on(6) )
then
640 id = hecmw_result_dtype_elem
641 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(6), ndof )
642 label =
'ElementalSTRAIN'//trim(clyr)
643 call result_add( id, nitem, label, label_suffix, res%ESTRAIN )
647 if( fstrsolid%output_ctrl(3)%outinfo%on(7) )
then
648 id = hecmw_result_dtype_elem
649 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(7), ndof )
650 label =
'ElementalSTRESS'//trim(clyr)
651 call result_add( id, nitem, label, label_suffix, res%ESTRESS )
655 if( fstrsolid%output_ctrl(3)%outinfo%on(35) )
then
656 id = hecmw_result_dtype_elem
657 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(35), ndof )
658 label =
'ElementalNQM'//trim(clyr)
659 call result_add( id, nitem, label, label_suffix, res%ENQM )
663 if( fstrsolid%output_ctrl(3)%outinfo%on(8))
then
664 id = hecmw_result_dtype_elem
665 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(8), ndof )
666 label =
'ElementalMISES'//trim(clyr)
667 call result_add( id, nitem, label, label_suffix, res%EMISES )
671 if( fstrsolid%output_ctrl(3)%outinfo%on(20) )
then
672 id = hecmw_result_dtype_elem
673 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(20), ndof )
674 label =
'ElementalPrincipalSTRESS'//trim(clyr)
675 call result_add( id, nitem, label, label_suffix, res%EPSTRESS )
679 if( fstrsolid%output_ctrl(3)%outinfo%on(22) )
then
680 id = hecmw_result_dtype_elem
681 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(22), ndof )
682 label =
'ElementalPrincipalSTRAIN'//trim(clyr)
683 call result_add( id, nitem, label, label_suffix, res%EPSTRAIN )
687 if( fstrsolid%output_ctrl(3)%outinfo%on(24) )
then
688 id = hecmw_result_dtype_elem
691 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(24), ndof )
692 label =
'ElementalPrincipalSTRESSVector'//trim(cnum)//trim(clyr)
693 call result_add( id, nitem, label, label_suffix, res%EPSTRESS_VECT(:,k) )
698 if( fstrsolid%output_ctrl(3)%outinfo%on(26) )
then
699 id = hecmw_result_dtype_elem
702 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(26), ndof )
703 label =
'ElementalPrincipalSTRAINVector'//trim(cnum)//trim(clyr)
704 call result_add( id, nitem, label, label_suffix, res%EPSTRAIN_VECT(:,k) )
709 if( fstrsolid%output_ctrl(3)%outinfo%on(43) )
then
710 id = hecmw_result_dtype_elem
711 nitem =
n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(43), ndof )
712 label =
'ElementalPLSTRAIN'//trim(clyr)
713 call result_add( id, nitem, label, label_suffix, res%EPLSTRAIN )
722 subroutine fstr_make_result( hecMESH, fstrSOLID, fstrRESULT, istep, time, fstrDYNAMIC, label_suffix )
728 character(len=*),
intent(in),
optional :: label_suffix
731 type(hecmwst_result_data) :: fstrresult
732 integer(kind=kint) :: istep
733 real(kind=
kreal) :: time
735 integer(kind=kint) :: ntot_lyr, coef33, is_33shell, is_33beam
736 integer(kind=kint) :: i, j, ndof, mdof, gcomp, gitem, ncomp, nitem, iitem, ecomp, eitem, jitem, nn, mm
737 integer(kind=kint) :: idx
738 real(kind=
kreal),
pointer :: tnstrain(:), testrain(:)
739 real(kind=
kreal),
allocatable ::unode(:)
740 character(len=12) :: cnum
741 character(len=16),
allocatable :: clyr(:)
742 logical :: is_dynamic
744 is_dynamic =
present(fstrdynamic)
746 tnstrain => fstrsolid%TNSTRAIN
747 testrain => fstrsolid%TESTRAIN
749 ntot_lyr = fstrsolid%max_lyr
750 is_33shell = fstrsolid%is_33shell
751 is_33beam = fstrsolid%is_33beam
754 if( hecmesh%n_elem>hecmesh%n_node ) mm = hecmesh%n_elem
756 if( is_dynamic )
then
758 if( fstrdynamic%idx_eqa/=11 .and. istep>0 ) idx = 2
762 if( ndof==2 ) mdof = 3
763 if( ndof==3 ) mdof = 6
764 if( ndof==4 ) mdof = 6
765 if( ndof==6 ) mdof = 6
767 if(is_33shell == 1 .and. fstrsolid%output_ctrl(4)%outinfo%on(27) )
then
768 coef33 = 1 + 2*ntot_lyr
773 call hecmw_nullify_result_data( fstrresult )
786 if( fstrsolid%output_ctrl(4)%outinfo%on(1) )
then
789 nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(1), 3 )
791 nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(1), 1 )
792 else if(ndof == 6)
then
794 nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(1), 3 )
797 nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(1), ndof )
801 if( is_dynamic .and. fstrsolid%output_ctrl(4)%outinfo%on(15) )
then
803 nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(15), ndof )
806 if( is_dynamic .and. fstrsolid%output_ctrl(4)%outinfo%on(16) )
then
808 nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(16), ndof )
811 if( fstrsolid%output_ctrl(4)%outinfo%on(17) .and.
associated(fstrsolid%temperature) )
then
813 nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(17), ndof )
816 if( fstrsolid%output_ctrl(4)%outinfo%on(18) )
then
819 nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(18), 3 )
821 if( is_33shell == 1 .or. is_33beam == 1 )
then
823 nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(18), ndof )
828 if( fstrsolid%output_ctrl(4)%outinfo%on(2) )
then
830 nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(2), ndof )
833 if( fstrsolid%output_ctrl(4)%outinfo%on(3) )
then
834 ncomp = ncomp + 1*coef33
835 nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(3), ndof )*coef33
838 if( fstrsolid%output_ctrl(4)%outinfo%on(4) )
then
839 ncomp = ncomp + 1*coef33
840 nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(4), ndof )*coef33
843 if( fstrsolid%output_ctrl(4)%outinfo%on(5) )
then
844 ncomp = ncomp + 1*coef33
845 nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(5), ndof )*coef33
848 if( fstrsolid%output_ctrl(4)%outinfo%on(19) )
then
849 ncomp = ncomp + 1*coef33
850 nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(19), ndof )*coef33
853 if( fstrsolid%output_ctrl(4)%outinfo%on(21) )
then
854 ncomp = ncomp + 1*coef33
855 nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(21), ndof )*coef33
858 if( fstrsolid%output_ctrl(4)%outinfo%on(23) )
then
859 ncomp = ncomp + 3*coef33
860 nitem = nitem + 3*n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(23), ndof )*coef33
863 if( fstrsolid%output_ctrl(4)%outinfo%on(25) )
then
864 ncomp = ncomp + 3*coef33
865 nitem = nitem + 3*n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(25), ndof )*coef33
868 if( fstrsolid%output_ctrl(4)%outinfo%on(12) .and.
associated(tnstrain) )
then
870 nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(12), ndof )
873 if( fstrsolid%output_ctrl(4)%outinfo%on(30) .and.
associated(fstrsolid%CONT_NFORCE) )
then
875 nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(30), ndof )
878 if( fstrsolid%output_ctrl(4)%outinfo%on(31) .and.
associated(fstrsolid%CONT_FRIC) )
then
880 nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(31), ndof )
883 if( fstrsolid%output_ctrl(4)%outinfo%on(32) .and.
associated(fstrsolid%CONT_RELVEL) )
then
885 nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(32), ndof )
888 if( fstrsolid%output_ctrl(4)%outinfo%on(33) .and.
associated(fstrsolid%CONT_STATE) )
then
890 nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(33), ndof )
893 if( fstrsolid%output_ctrl(4)%outinfo%on(36) .and.
associated(fstrsolid%CONT_NTRAC) )
then
895 nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(36), ndof )
898 if( fstrsolid%output_ctrl(4)%outinfo%on(37) .and.
associated(fstrsolid%CONT_FTRAC) )
then
900 nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(37), ndof )
903 if( fstrsolid%output_ctrl(4)%outinfo%on(38) )
then
905 nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(38), ndof )
914 if( fstrsolid%output_ctrl(4)%outinfo%on(6) )
then
916 eitem = eitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(6), ndof )
919 if( fstrsolid%output_ctrl(4)%outinfo%on(7) )
then
921 eitem = eitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(7), ndof )
924 if( fstrsolid%output_ctrl(4)%outinfo%on(8) )
then
926 eitem = eitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(8), ndof )
929 if( fstrsolid%output_ctrl(4)%outinfo%on(20) )
then
931 eitem = eitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(20), ndof )
934 if( fstrsolid%output_ctrl(4)%outinfo%on(22) )
then
936 eitem = eitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(22), ndof )
939 if( fstrsolid%output_ctrl(4)%outinfo%on(24) )
then
941 eitem = eitem + 3*n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(24), ndof )
944 if( fstrsolid%output_ctrl(4)%outinfo%on(26) )
then
946 eitem = eitem + 3*n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(26), ndof )
949 if( fstrsolid%output_ctrl(4)%outinfo%on(43) )
then
951 eitem = eitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(43), ndof )
954 if( fstrsolid%output_ctrl(4)%outinfo%on(34) )
then
956 eitem = eitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(34), ndof )
959 if( fstrsolid%output_ctrl(4)%outinfo%on(42) )
then
960 ecomp = ecomp + 3*coef33
961 eitem = eitem + 3*n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(42), ndof )*coef33
964 if( fstrsolid%output_ctrl(4)%outinfo%on(39) )
then
966 eitem = eitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(39), ndof )
969 if( fstrsolid%output_ctrl(4)%outinfo%on(40) )
then
971 eitem = eitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(40), ndof )
974 if( fstrsolid%output_ctrl(4)%outinfo%on(44) )
then
976 eitem = eitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(44), ndof )
980 fstrresult%ng_component = gcomp
981 fstrresult%nn_component = ncomp
982 fstrresult%ne_component = ecomp
983 allocate( fstrresult%ng_dof(gcomp) )
984 allocate( fstrresult%global_label(gcomp) )
985 allocate( fstrresult%global_val_item(gitem) )
986 allocate( fstrresult%nn_dof(ncomp) )
987 allocate( fstrresult%node_label(ncomp) )
988 allocate( fstrresult%node_val_item(nitem*hecmesh%n_node) )
989 allocate( fstrresult%ne_dof(ecomp) )
990 allocate( fstrresult%elem_label(ecomp) )
991 allocate( fstrresult%elem_val_item(eitem*hecmesh%n_elem) )
998 fstrresult%ng_dof(1) = 1
999 fstrresult%global_label(1) =
"TOTALTIME"
1000 fstrresult%global_val_item(1) = time
1003 if (fstrsolid%output_ctrl(4)%outinfo%on(1) )
then
1007 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(1), 3 )
1008 fstrresult%nn_dof(ncomp) = nn
1009 fstrresult%node_label(ncomp) =
'VELOCITY'
1010 do i = 1, hecmesh%n_node
1012 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = fstrdynamic%DISP(4*(i-1)+j,idx)
1018 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(1), 1 )
1019 fstrresult%nn_dof(ncomp) = nn
1020 fstrresult%node_label(ncomp) =
'PRESSURE'
1021 do i = 1, hecmesh%n_node
1022 fstrresult%node_val_item(nitem*(i-1)+1+iitem) = fstrdynamic%DISP(4*i,idx)
1025 else if(ndof == 6)
then
1027 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(1), 3 )
1028 fstrresult%nn_dof(ncomp) = nn
1029 fstrresult%node_label(ncomp) =
'DISPLACEMENT'
1030 allocate( unode(3*hecmesh%n_node) )
1032 if( is_dynamic )
then
1033 do i=1, hecmesh%n_node
1034 unode((i-1)*3+1:(i-1)*3+3) = fstrdynamic%DISP((i-1)*ndof+1:(i-1)*ndof+3, idx)
1037 do i=1, hecmesh%n_node
1038 unode((i-1)*3+1:(i-1)*3+3) = fstrsolid%unode((i-1)*ndof+1:(i-1)*ndof+3)
1041 do i = 1, hecmesh%n_node
1043 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = unode(nn*(i-1)+j)
1051 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(1), ndof )
1052 fstrresult%nn_dof(ncomp) = nn
1053 fstrresult%node_label(ncomp) =
'DISPLACEMENT'
1054 allocate( unode(ndof*hecmesh%n_node) )
1056 if( is_dynamic )
then
1057 unode(:) = fstrdynamic%DISP(:,idx)
1059 unode(:) = fstrsolid%unode(:)
1061 if(is_33beam == 1)
then
1064 if(is_33shell == 1)
then
1067 do i = 1, hecmesh%n_node
1069 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = unode(nn*(i-1)+j)
1078 if( is_dynamic .and. fstrsolid%output_ctrl(4)%outinfo%on(15) )
then
1080 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(15), ndof )
1081 fstrresult%nn_dof(ncomp) = nn
1082 fstrresult%node_label(ncomp) =
'VELOCITY'
1083 do i = 1, hecmesh%n_node
1085 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = fstrdynamic%VEL(nn*(i-1)+j,idx)
1092 if( is_dynamic .and. fstrsolid%output_ctrl(4)%outinfo%on(16) )
then
1094 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(16), ndof )
1095 fstrresult%nn_dof(ncomp) = nn
1096 fstrresult%node_label(ncomp) =
'ACCELERATION'
1097 do i = 1, hecmesh%n_node
1099 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = fstrdynamic%ACC(nn*(i-1)+j,idx)
1106 if( fstrsolid%output_ctrl(4)%outinfo%on(17) .and.
associated(fstrsolid%temperature))
then
1108 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(17), ndof )
1109 fstrresult%nn_dof(ncomp) = nn
1110 fstrresult%node_label(ncomp) =
'TEMPERATURE'
1111 do i = 1, hecmesh%n_node
1113 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = fstrsolid%temperature(nn*(i-1)+j)
1120 if( fstrsolid%output_ctrl(4)%outinfo%on(18) )
then
1124 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(1), 3 )
1125 fstrresult%nn_dof(ncomp) = nn
1126 fstrresult%node_label(ncomp) =
'ROTATION'
1127 allocate( unode(3*hecmesh%n_node) )
1129 if( is_dynamic )
then
1130 do i=1, hecmesh%n_node
1131 unode((i-1)*3+1:(i-1)*3+3) = fstrdynamic%DISP((i-1)*ndof+4:(i-1)*ndof+6, idx)
1134 do i=1, hecmesh%n_node
1135 unode((i-1)*3+1:(i-1)*3+3) = fstrsolid%unode((i-1)*ndof+4:(i-1)*ndof+6)
1138 do i = 1, hecmesh%n_node
1140 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = unode(nn*(i-1)+j)
1146 if ( is_33shell == 1 .or. is_33beam == 1 )
then
1148 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(1), ndof )
1149 fstrresult%nn_dof(ncomp) = nn
1150 fstrresult%node_label(ncomp) =
'ROTATION'
1151 allocate( unode(ndof*hecmesh%n_node) )
1155 do i = 1, hecmesh%n_node
1157 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = unode(nn*(i-1)+j)
1167 if( fstrsolid%output_ctrl(4)%outinfo%on(2) )
then
1169 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(2), ndof )
1170 fstrresult%nn_dof(ncomp) = nn
1171 fstrresult%node_label(ncomp) =
'REACTION_FORCE'
1172 do i = 1, hecmesh%n_node
1174 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = fstrsolid%REACTION(nn*(i-1)+j)
1180 if(is_33shell == 1 .or. ndof == 6)
then
1182 & fstrsolid%SHELL, nitem, iitem, ncomp, eitem, jitem, ecomp,
" " )
1185 & fstrsolid%SOLID, nitem, iitem, ncomp, eitem, jitem, ecomp,
" " )
1189 if(
associated(fstrsolid%SHELL) .and. fstrsolid%output_ctrl(4)%outinfo%on(27) .and. is_33shell == 1 )
then
1190 allocate(clyr(2*ntot_lyr))
1193 clyr(2*i-1)=
"_L"//trim(cnum)//
"+"
1194 clyr(2*i )=
"_L"//trim(cnum)//
"-"
1198 & fstrsolid%SHELL%LAYER(i)%PLUS, nitem, iitem, ncomp, eitem, jitem, ecomp, clyr(2*i-1) )
1200 & fstrsolid%SHELL%LAYER(i)%MINUS, nitem, iitem, ncomp, eitem, jitem, ecomp, clyr(2*i ) )
1206 if( fstrsolid%output_ctrl(4)%outinfo%on(12) .and.
associated(tnstrain) )
then
1208 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(12), ndof )
1209 fstrresult%nn_dof(ncomp) = nn
1210 fstrresult%node_label(ncomp) =
'THERMAL_NodalSTRAIN'
1211 do i = 1, hecmesh%n_node
1213 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = tnstrain(nn*(i-1)+j)
1220 if( fstrsolid%output_ctrl(4)%outinfo%on(30) .and.
associated(fstrsolid%CONT_NFORCE) )
then
1222 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(30), ndof )
1223 fstrresult%nn_dof(ncomp) = nn
1224 fstrresult%node_label(ncomp) =
'CONTACT_NFORCE'
1225 do i = 1, hecmesh%n_node
1227 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = fstrsolid%CONT_NFORCE(nn*(i-1)+j)
1234 if( fstrsolid%output_ctrl(4)%outinfo%on(31) .and.
associated(fstrsolid%CONT_FRIC) )
then
1236 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(31), ndof )
1237 fstrresult%nn_dof(ncomp) = nn
1238 fstrresult%node_label(ncomp) =
'CONTACT_FRICTION'
1239 do i = 1, hecmesh%n_node
1241 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = fstrsolid%CONT_FRIC(nn*(i-1)+j)
1248 if( fstrsolid%output_ctrl(4)%outinfo%on(32) .and.
associated(fstrsolid%CONT_RELVEL) )
then
1250 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(32), ndof )
1251 fstrresult%nn_dof(ncomp) = nn
1252 fstrresult%node_label(ncomp) =
'CONTACT_RELVEL'
1253 do i = 1, hecmesh%n_node
1255 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = fstrsolid%CONT_RELVEL(nn*(i-1)+j)
1262 if( fstrsolid%output_ctrl(4)%outinfo%on(33) .and.
associated(fstrsolid%CONT_STATE) )
then
1264 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(33), ndof )
1265 fstrresult%nn_dof(ncomp) = nn
1266 fstrresult%node_label(ncomp) =
'CONTACT_STATE'
1267 do i = 1, hecmesh%n_node
1269 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = fstrsolid%CONT_STATE(nn*(i-1)+j)
1276 if( fstrsolid%output_ctrl(4)%outinfo%on(36) .and.
associated(fstrsolid%CONT_NTRAC) )
then
1278 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(36), ndof )
1279 fstrresult%nn_dof(ncomp) = nn
1280 fstrresult%node_label(ncomp) =
'CONTACT_NTRACTION'
1281 do i = 1, hecmesh%n_node
1283 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = fstrsolid%CONT_NTRAC(nn*(i-1)+j)
1290 if( fstrsolid%output_ctrl(4)%outinfo%on(37) .and.
associated(fstrsolid%CONT_FTRAC) )
then
1292 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(37), ndof )
1293 fstrresult%nn_dof(ncomp) = nn
1294 fstrresult%node_label(ncomp) =
'CONTACT_FTRACTION'
1295 do i = 1, hecmesh%n_node
1297 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = fstrsolid%CONT_FTRAC(nn*(i-1)+j)
1304 if( fstrsolid%output_ctrl(4)%outinfo%on(38) )
then
1306 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(38), ndof )
1307 fstrresult%nn_dof(ncomp) = nn
1308 fstrresult%node_label(ncomp) =
'NODE_ID'
1309 do i = 1, hecmesh%n_node
1310 fstrresult%node_val_item(nitem*(i-1)+1+iitem) = hecmesh%global_node_ID(i)
1329 if(fstrsolid%output_ctrl(4)%outinfo%on(34))
then
1331 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(34), ndof )
1332 fstrresult%ne_dof(ecomp) = nn
1333 fstrresult%elem_label(ecomp) =
'MATERIAL_ID'
1336 do i = 1, hecmesh%n_elem
1337 j = hecmesh%section_ID(i)
1338 if( j >= 1 .and. j <= hecmesh%section%n_sect )
then
1339 fstrresult%elem_val_item(eitem*(i-1)+1+jitem) = hecmesh%section%sect_mat_ID_item(j)
1341 fstrresult%elem_val_item(eitem*(i-1)+1+jitem) = 0.d0
1348 if(fstrsolid%output_ctrl(4)%outinfo%on(39))
then
1350 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(39), ndof )
1351 fstrresult%ne_dof(ecomp) = nn
1352 fstrresult%elem_label(ecomp) =
'ELEM_ID'
1353 do i = 1, hecmesh%n_elem
1354 fstrresult%elem_val_item(eitem*(i-1)+1+jitem) = hecmesh%global_elem_ID(i)
1360 if(fstrsolid%output_ctrl(4)%outinfo%on(40))
then
1362 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(40), ndof )
1363 fstrresult%ne_dof(ecomp) = nn
1364 fstrresult%elem_label(ecomp) =
'SECTION_ID'
1365 do i = 1, hecmesh%n_elem
1366 fstrresult%elem_val_item(eitem*(i-1)+1+jitem) = hecmesh%section_ID(i)
1372 if( fstrsolid%output_ctrl(4)%outinfo%on(44) )
then
1374 nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(44), ndof )
1375 fstrresult%ne_dof(ecomp) = nn
1376 fstrresult%elem_label(ecomp) =
'ELEMACT'
1377 do i = 1, hecmesh%n_elem
1378 if( fstrsolid%elements(i)%elemact_flag /= kelact_inactive )
then
1379 fstrresult%elem_val_item(eitem*(i-1)+1+jitem) = 1.d0
1381 fstrresult%elem_val_item(eitem*(i-1)+1+jitem) = 0.d0
1387 if(
present(label_suffix) )
then
1388 do i = 1, fstrresult%nn_component
1389 fstrresult%node_label(i) = trim(fstrresult%node_label(i))//trim(label_suffix)
1391 do i = 1, fstrresult%ne_component
1392 fstrresult%elem_label(i) = trim(fstrresult%elem_label(i))//trim(label_suffix)
1409 type (hecmwst_result_data) :: fstrresult
1410 type (hecmwst_result_data) :: fstrresult_add
1412 type (hecmwst_result_data) :: res
1413 integer(kind=kint) :: i, j, gitem, nitem, eitem, nitem_a, eitem_a
1415 gitem = sum( fstrresult%ng_dof(1:fstrresult%ng_component) )
1416 nitem = sum( fstrresult%nn_dof(1:fstrresult%nn_component) )
1417 eitem = sum( fstrresult%ne_dof(1:fstrresult%ne_component) )
1418 nitem_a = sum( fstrresult_add%nn_dof(1:fstrresult_add%nn_component) )
1419 eitem_a = sum( fstrresult_add%ne_dof(1:fstrresult_add%ne_component) )
1421 call hecmw_nullify_result_data( res )
1422 res%ng_component = fstrresult%ng_component
1423 res%nn_component = fstrresult%nn_component + fstrresult_add%nn_component
1424 res%ne_component = fstrresult%ne_component + fstrresult_add%ne_component
1425 allocate( res%ng_dof(res%ng_component), res%global_label(res%ng_component) )
1426 allocate( res%nn_dof(res%nn_component), res%node_label(res%nn_component) )
1427 allocate( res%ne_dof(res%ne_component), res%elem_label(res%ne_component) )
1428 allocate( res%global_val_item(gitem) )
1429 allocate( res%node_val_item((nitem+nitem_a)*hecmesh%n_node) )
1430 allocate( res%elem_val_item((eitem+eitem_a)*hecmesh%n_elem) )
1432 res%ng_dof(1:res%ng_component) = fstrresult%ng_dof(1:res%ng_component)
1433 res%global_label(1:res%ng_component) = fstrresult%global_label(1:res%ng_component)
1434 res%global_val_item(1:gitem) = fstrresult%global_val_item(1:gitem)
1436 res%nn_dof(1:fstrresult%nn_component) = fstrresult%nn_dof(1:fstrresult%nn_component)
1437 res%nn_dof(fstrresult%nn_component+1:) = fstrresult_add%nn_dof(1:fstrresult_add%nn_component)
1438 res%node_label(1:fstrresult%nn_component) = fstrresult%node_label(1:fstrresult%nn_component)
1439 res%node_label(fstrresult%nn_component+1:) = fstrresult_add%node_label(1:fstrresult_add%nn_component)
1440 do i = 1, hecmesh%n_node
1442 res%node_val_item((nitem+nitem_a)*(i-1)+j) = fstrresult%node_val_item(nitem*(i-1)+j)
1445 res%node_val_item((nitem+nitem_a)*(i-1)+nitem+j) = fstrresult_add%node_val_item(nitem_a*(i-1)+j)
1449 res%ne_dof(1:fstrresult%ne_component) = fstrresult%ne_dof(1:fstrresult%ne_component)
1450 res%ne_dof(fstrresult%ne_component+1:) = fstrresult_add%ne_dof(1:fstrresult_add%ne_component)
1451 res%elem_label(1:fstrresult%ne_component) = fstrresult%elem_label(1:fstrresult%ne_component)
1452 res%elem_label(fstrresult%ne_component+1:) = fstrresult_add%elem_label(1:fstrresult_add%ne_component)
1453 do i = 1, hecmesh%n_elem
1455 res%elem_val_item((eitem+eitem_a)*(i-1)+j) = fstrresult%elem_val_item(eitem*(i-1)+j)
1458 res%elem_val_item((eitem+eitem_a)*(i-1)+eitem+j) = fstrresult_add%elem_val_item(eitem_a*(i-1)+j)
1462 call hecmw_result_free( fstrresult )
1467 & iitem, ncomp, eitem, jitem, ecomp, clyr )
1475 type (hecmwST_local_mesh) :: hecMESH
1476 type (fstr_solid) :: fstrSOLID
1477 type (hecmwST_result_data):: fstrRESULT
1478 type (fstr_solid_physic_val) :: RES
1480 character(len=16) :: clyr
1481 character(len=12) :: cnum
1482 integer(kind=kint) :: i, j, k, ndof, nitem, eitem, nn
1483 integer(kind=kint) :: iitem, ncomp, jitem, ecomp
1484 integer(kind=kint) :: isect, cdsys_ID, serr
1485 real(kind=
kreal) :: coords(3,3), coordsys(3, 3)
1486 ndof = hecmesh%n_dof
1489 if( fstrsolid%output_ctrl(4)%outinfo%on(3))
then
1490 nn =
n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(3), ndof )
1492 fstrresult%nn_dof(ncomp) = nn
1493 fstrresult%node_label(ncomp) =
'NodalSTRAIN'//trim(clyr)
1494 do i = 1, hecmesh%n_node
1496 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = res%STRAIN(nn*(i-1)+j)
1503 if(fstrsolid%output_ctrl(4)%outinfo%on(4))
then
1505 nn =
n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(4), ndof )
1506 fstrresult%nn_dof(ncomp) = nn
1507 fstrresult%node_label(ncomp) =
'NodalSTRESS'//trim(clyr)
1508 do i = 1, hecmesh%n_node
1510 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = res%STRESS((nn)*(i-1)+j)
1517 if(fstrsolid%output_ctrl(4)%outinfo%on(5))
then
1519 nn =
n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(5), ndof )
1520 fstrresult%nn_dof(ncomp) = nn
1521 fstrresult%node_label(ncomp) =
'NodalMISES'//trim(clyr)
1522 do i = 1, hecmesh%n_node
1523 fstrresult%node_val_item(nitem*(i-1)+1+iitem) = res%MISES(i)
1529 if(fstrsolid%output_ctrl(4)%outinfo%on(19))
then
1531 nn =
n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(19), ndof )
1532 fstrresult%nn_dof(ncomp) = nn
1533 fstrresult%node_label(ncomp) =
'NodalPrincipalSTRESS'//trim(clyr)
1534 do i = 1, hecmesh%n_node
1536 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = res%PSTRESS((nn)*(i-1)+j)
1543 if(fstrsolid%output_ctrl(4)%outinfo%on(23))
then
1545 write(cnum,
'(i0)') k
1547 nn =
n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(23), ndof )
1548 fstrresult%nn_dof(ncomp) = nn
1549 fstrresult%node_label(ncomp) =
'NodalPrincipalSTRESSVector'//trim(cnum)//trim(clyr)
1550 do i = 1, hecmesh%n_node
1552 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = res%PSTRESS_VECT((nn)*(i-1)+j,k)
1560 if( fstrsolid%output_ctrl(4)%outinfo%on(21))
then
1561 nn =
n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(21), ndof )
1563 fstrresult%nn_dof(ncomp) = nn
1564 fstrresult%node_label(ncomp) =
'NodalPrincipalSTRAIN'//trim(clyr)
1565 do i = 1, hecmesh%n_node
1567 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = res%PSTRAIN(nn*(i-1)+j)
1574 if( fstrsolid%output_ctrl(4)%outinfo%on(25))
then
1576 write(cnum,
'(i0)') k
1577 nn =
n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(25), ndof )
1579 fstrresult%nn_dof(ncomp) = nn
1580 fstrresult%node_label(ncomp) =
'NodalPrincipalSTRAINVector'//trim(cnum)//trim(clyr)
1581 do i = 1, hecmesh%n_node
1583 fstrresult%node_val_item(nitem*(i-1)+j+iitem) = res%PSTRAIN_VECT(nn*(i-1)+j,k)
1591 if( fstrsolid%output_ctrl(4)%outinfo%on(6))
then
1592 nn =
n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(6), ndof )
1594 fstrresult%ne_dof(ecomp) = nn
1595 fstrresult%elem_label(ecomp) =
'ElementalSTRAIN'
1596 do i = 1, hecmesh%n_elem
1598 fstrresult%elem_val_item(eitem*(i-1)+j+jitem) = res%ESTRAIN(nn*(i-1)+j)
1605 if(fstrsolid%output_ctrl(4)%outinfo%on(7))
then
1607 nn =
n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(7), ndof )
1608 fstrresult%ne_dof(ecomp) = nn
1609 fstrresult%elem_label(ecomp) =
'ElementalSTRESS'
1610 do i = 1, hecmesh%n_elem
1612 fstrresult%elem_val_item(eitem*(i-1)+j+jitem) = res%ESTRESS((nn)*(i-1)+j)
1619 if(fstrsolid%output_ctrl(4)%outinfo%on(8))
then
1621 nn =
n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(8), ndof )
1622 fstrresult%ne_dof(ecomp) = nn
1623 fstrresult%elem_label(ecomp) =
'ElementalMISES'
1624 do i = 1, hecmesh%n_elem
1625 fstrresult%elem_val_item(eitem*(i-1)+1+jitem) = res%EMISES(i)
1631 if(fstrsolid%output_ctrl(4)%outinfo%on(20))
then
1633 nn =
n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(20), ndof )
1634 fstrresult%ne_dof(ecomp) = nn
1635 fstrresult%elem_label(ecomp) =
'ElementalPrincipalSTRESS'
1636 do i = 1, hecmesh%n_elem
1638 fstrresult%elem_val_item(eitem*(i-1)+j+jitem) = res%EPSTRESS((nn)*(i-1)+j)
1645 if(fstrsolid%output_ctrl(4)%outinfo%on(22))
then
1647 nn =
n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(22), ndof )
1648 fstrresult%ne_dof(ecomp) = nn
1649 fstrresult%elem_label(ecomp) =
'ElementalPrincipalSTRAIN'
1650 do i = 1, hecmesh%n_elem
1652 fstrresult%elem_val_item(eitem*(i-1)+j+jitem) = res%EPSTRAIN((nn)*(i-1)+j)
1659 if(fstrsolid%output_ctrl(4)%outinfo%on(24))
then
1663 nn =
n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(24), ndof )
1664 fstrresult%ne_dof(ecomp) = nn
1665 fstrresult%elem_label(ecomp) =
'ElementalPrincipalSTRESSVector'//trim(cnum)
1666 do i = 1, hecmesh%n_elem
1668 fstrresult%elem_val_item(eitem*(i-1)+j+jitem) = res%EPSTRESS_VECT((nn)*(i-1)+j,k)
1676 if(fstrsolid%output_ctrl(4)%outinfo%on(26))
then
1680 nn =
n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(26), ndof )
1681 fstrresult%ne_dof(ecomp) = nn
1682 fstrresult%elem_label(ecomp) =
'ElementalPrincipalSTRAINVector'//trim(cnum)
1683 do i = 1, hecmesh%n_elem
1685 fstrresult%elem_val_item(eitem*(i-1)+j+jitem) = res%EPSTRAIN_VECT((nn)*(i-1)+j,k)
1693 if(fstrsolid%output_ctrl(4)%outinfo%on(43))
then
1695 nn =
n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(43), ndof )
1696 fstrresult%ne_dof(ecomp) = nn
1697 fstrresult%elem_label(ecomp) =
'ElementalPLSTRAIN'
1698 do i = 1, hecmesh%n_elem
1699 if( len_trim(clyr) == 0 )
then
1700 if(
associated(fstrsolid%elements(i)%shell_layer_gausses) )
then
1701 res%EPLSTRAIN(i) = fstrsolid%EPLSTRAIN(i)
1703 res%EPLSTRAIN(i) = fstr_element_average_plstrain(fstrsolid%elements(i))
1706 fstrresult%elem_val_item(eitem*(i-1)+1+jitem) = res%EPLSTRAIN(i)
1712 if(fstrsolid%output_ctrl(4)%outinfo%on(42))
then
1716 nn =
n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(42), ndof )
1717 fstrresult%ne_dof(ecomp) = nn
1718 fstrresult%elem_label(ecomp) =
'ORIENTATION'//trim(cnum)
1722 do i = 1, hecmesh%n_elem
1723 isect = hecmesh%section_ID(i)
1724 if( isect >= 1 .and. isect <= hecmesh%section%n_sect )
then
1725 cdsys_id = hecmesh%section%sect_orien_ID(isect)
1729 if(cdsys_id == -1)
then
1730 coordsys(:,:) = 0.0d0
1732 call get_coordsys(cdsys_id, hecmesh, fstrsolid, coords, i)
1733 call set_localcoordsys( coords, g_localcoordsys(cdsys_id), coordsys(:, :), serr )
1737 fstrresult%elem_val_item(eitem*(i-1)+jitem+nn*(j-1)+k) = coordsys(j,k)
1741 jitem = jitem + 3*nn
1753 type (hecmwst_local_mesh) :: hecmesh
1754 integer(kind=kint) :: j, itype, is, ie, ic_type, js, icel
1755 integer(kind=kint) :: n1, n2
1756 real(kind=kreal),
allocatable :: unode(:)
1758 do itype = 1, hecmesh%n_elem_type
1759 is = hecmesh%elem_type_index(itype-1) + 1
1760 ie = hecmesh%elem_type_index(itype )
1761 ic_type = hecmesh%elem_type_item(itype)
1762 if(ic_type == 781)
then
1764 js = hecmesh%elem_node_index(icel-1)
1766 n1 = hecmesh%elem_node_item(js+j )
1767 n2 = hecmesh%elem_node_item(js+j+4)
1768 unode(3*n2-2) = unode(3*n1-2)
1769 unode(3*n2-1) = unode(3*n1-1)
1770 unode(3*n2 ) = unode(3*n1 )
1773 elseif(ic_type == 761)
then
1775 js = hecmesh%elem_node_index(icel-1)
1777 n1 = hecmesh%elem_node_item(js+j )
1778 n2 = hecmesh%elem_node_item(js+j+3)
1779 unode(3*n2-2) = unode(3*n1-2)
1780 unode(3*n2-1) = unode(3*n1-1)
1781 unode(3*n2 ) = unode(3*n1 )
1796 type (hecmwst_local_mesh) :: hecmesh
1797 integer(kind=kint) :: j, itype, is, ie, ic_type, js, icel
1798 integer(kind=kint) :: n1, n2
1799 real(kind=kreal),
allocatable :: unode(:)
1801 do itype = 1, hecmesh%n_elem_type
1802 is = hecmesh%elem_type_index(itype-1) + 1
1803 ie = hecmesh%elem_type_index(itype )
1804 ic_type = hecmesh%elem_type_item(itype)
1805 if(ic_type == 781)
then
1807 js = hecmesh%elem_node_index(icel-1)
1809 n1 = hecmesh%elem_node_item(js+j)
1810 n2 = hecmesh%elem_node_item(js+j+4)
1811 unode(3*n1-2) = fstrsolid%unode(3*n2-2)
1812 unode(3*n1-1) = fstrsolid%unode(3*n2-1)
1813 unode(3*n1 ) = fstrsolid%unode(3*n2 )
1814 unode(3*n2-2) = fstrsolid%unode(3*n2-2)
1815 unode(3*n2-1) = fstrsolid%unode(3*n2-1)
1816 unode(3*n2 ) = fstrsolid%unode(3*n2 )
1819 elseif(ic_type == 761)
then
1821 js = hecmesh%elem_node_index(icel-1)
1823 n1 = hecmesh%elem_node_item(js+j)
1824 n2 = hecmesh%elem_node_item(js+j+3)
1826 unode(3*n1-2) = fstrsolid%unode(3*n2-2)
1827 unode(3*n1-1) = fstrsolid%unode(3*n2-1)
1828 unode(3*n1 ) = fstrsolid%unode(3*n2 )
1829 unode(3*n2-2) = fstrsolid%unode(3*n2-2)
1830 unode(3*n2-1) = fstrsolid%unode(3*n2-1)
1831 unode(3*n2 ) = fstrsolid%unode(3*n2 )
1846 type (hecmwst_local_mesh) :: hecmesh
1847 real(kind=kreal) :: unode(:)
1848 integer(kind=kint) :: j, itype, is, ie, ic_type, js, icel
1849 integer(kind=kint) :: n1, n2
1851 do itype = 1, hecmesh%n_elem_type
1852 is = hecmesh%elem_type_index(itype-1) + 1
1853 ie = hecmesh%elem_type_index(itype )
1854 ic_type = hecmesh%elem_type_item(itype)
1855 if(ic_type /= 641) cycle
1857 js = hecmesh%elem_node_index(icel-1)
1859 n1 = hecmesh%elem_node_item(js+j)
1860 n2 = hecmesh%elem_node_item(js+j+2)
1861 unode(3*n1-2:3*n1) = fstrsolid%unode(3*n2-2:3*n2)
1862 unode(3*n2-2:3*n2) = fstrsolid%unode(3*n2-2:3*n2)
1876 type (hecmwst_local_mesh) :: hecmesh
1877 integer(kind=kint) :: j, itype, is, ie, ic_type, js, icel
1878 integer(kind=kint) :: a, b
1879 real(kind=kreal),
allocatable :: unode(:)
1881 do itype = 1, hecmesh%n_elem_type
1882 is = hecmesh%elem_type_index(itype-1) + 1
1883 ie = hecmesh%elem_type_index(itype )
1884 ic_type = hecmesh%elem_type_item(itype)
1885 if(ic_type == 641)
then
1887 js = hecmesh%elem_node_index(icel-1)
1889 a = hecmesh%elem_node_item(js+j)
1890 b = hecmesh%elem_node_item(js+j+2)
1891 unode(3*b-2) = unode(3*a-2)
1892 unode(3*b-1) = unode(3*a-1)
1893 unode(3*b ) = unode(3*a )
1907 type (
fstr_solid),
intent(inout) :: fstrsolid
1908 integer(kind=kint),
intent(in) :: phase
1909 real(kind=
kreal),
optional,
intent(in) :: dtime
1910 logical,
optional,
intent(in) :: expflag
1912 integer(kind=kint),
parameter :: nval = 10
1914 real(kind=
kreal),
parameter :: cont_force_eps2 = 1.d-40
1915 logical,
save :: updated(nval) = .false.
1916 integer(kind=kint) :: ndof, i, ic, is, jn, slave
1917 real(kind=
kreal) :: area, dt_use
1919 ndof = hecmesh%n_dof
1921 if( phase == -1 )
then
1922 updated(1:nval) = .false.
1925 if( phase /= 3 .and. phase /= 4 )
return
1931 if(
present(dtime) )
then
1932 if( dtime > 0.d0 ) dt_use = dtime
1934 if( .not. updated(3) .and. .not. updated(4) )
then
1948 if(
associated(fstrsolid%CONT_STATE) .and.
associated(fstrsolid%CONT_NFORCE) )
then
1949 do ic = 1, fstrsolid%n_contacts
1950 if( fstrsolid%contacts(ic)%method /= contacts2s ) cycle
1951 if( .not.
associated(fstrsolid%contacts(ic)%slave_surf) ) cycle
1952 do is = 1,
size(fstrsolid%contacts(ic)%slave_surf)
1953 do jn = 1,
size(fstrsolid%contacts(ic)%slave_surf(is)%nodes)
1954 slave = fstrsolid%contacts(ic)%slave_surf(is)%nodes(jn)
1955 if( dot_product( fstrsolid%CONT_NFORCE(3*slave-2:3*slave), &
1956 & fstrsolid%CONT_NFORCE(3*slave-2:3*slave) ) > cont_force_eps2 )
then
1957 if( any( fstrsolid%contacts(ic)%slave_surf(is)%lam_work_fstate(jn, &
1958 & 1:fstrsolid%contacts(ic)%slave_surf(is)%lam_work_n) == contactslip ) )
then
1959 fstrsolid%CONT_STATE(slave) = dble(contactslip)
1961 fstrsolid%CONT_STATE(slave) = dble(contactstick)
1970 if( fstrsolid%output_ctrl(phase)%outinfo%on(30) .and.
associated(fstrsolid%CONT_NFORCE) )
then
1971 if( .not. updated(1) )
then
1977 if(
present(expflag) )
then
1981 call fstr_setup_parancon_contactvalue(hecmesh,ndof,fstrsolid%CONT_NFORCE,1)
1988 if( fstrsolid%output_ctrl(phase)%outinfo%on(31) .and.
associated(fstrsolid%CONT_FRIC) )
then
1990 call fstr_setup_parancon_contactvalue(hecmesh,ndof,fstrsolid%CONT_FRIC,1)
1996 if( fstrsolid%output_ctrl(phase)%outinfo%on(32) .and.
associated(fstrsolid%CONT_RELVEL) )
then
1998 call fstr_setup_parancon_contactvalue(hecmesh,ndof,fstrsolid%CONT_RELVEL,1)
2004 if( fstrsolid%output_ctrl(phase)%outinfo%on(33) .and.
associated(fstrsolid%CONT_STATE) )
then
2006 call fstr_setup_parancon_contactvalue(hecmesh,1,fstrsolid%CONT_STATE,2)
2012 if( fstrsolid%output_ctrl(phase)%outinfo%on(36) .or. fstrsolid%output_ctrl(phase)%outinfo%on(37) )
then
2013 if( .not. updated(5))
call calc_contact_area( hecmesh, fstrsolid, 0 )
2019 if( fstrsolid%output_ctrl(phase)%outinfo%on(36) .and.
associated(fstrsolid%CONT_NTRAC) )
then
2021 if( .not. updated(1))
call fstr_setup_parancon_contactvalue(hecmesh,ndof,fstrsolid%CONT_NFORCE,1)
2023 fstrsolid%CONT_NTRAC(:) = 0.d0
2024 do i=1,hecmesh%nn_internal
2025 area = fstrsolid%CONT_AREA(i)
2026 if( area < 1.d-16 ) cycle
2027 fstrsolid%CONT_NTRAC(3*i-2:3*i) = fstrsolid%CONT_NFORCE(3*i-2:3*i)/area
2029 if(
paracontactflag )
call fstr_setup_parancon_contactvalue(hecmesh,ndof,fstrsolid%CONT_NTRAC,1)
2034 if( fstrsolid%output_ctrl(phase)%outinfo%on(37) .and.
associated(fstrsolid%CONT_FTRAC) )
then
2036 if( .not. updated(1))
call fstr_setup_parancon_contactvalue(hecmesh,ndof,fstrsolid%CONT_FRIC,1)
2038 fstrsolid%CONT_FTRAC(:) = 0.d0
2039 do i=1,hecmesh%nn_internal
2040 area = fstrsolid%CONT_AREA(i)
2041 if( area < 1.d-16 ) cycle
2042 fstrsolid%CONT_FTRAC(3*i-2:3*i) = fstrsolid%CONT_FRIC(3*i-2:3*i)/area
2044 if(
paracontactflag )
call fstr_setup_parancon_contactvalue(hecmesh,ndof,fstrsolid%CONT_FTRAC,1)
integer(kind=kint), parameter hecmw_max
integer(kind=4), parameter kreal
This module provides functions to calculation nodal stress.
subroutine fstr_get_shell_gauss_output(hecMESH, fstrSOLID, icel, k, strain, stress)
Read stored shell tensors or evaluate one elastic thickness point without changing history.
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_merge_result(hecMESH, fstrRESULT, fstrRESULT_add)
MERGE the node and the element components of two result data into one, so that plural sets of the sam...
subroutine fstr_write_result_main(hecMESH, fstrSOLID, RES, clyr, label_suffix)
subroutine, public fstr_reorder_node_shell(fstrSOLID, hecMESH, unode)
subroutine, public fstr_write_result(hecMESH, fstrSOLID, istep, time, flag, fstrDYNAMIC)
OUTPUT result file for static and dynamic analysis.
subroutine result_add(dtype, n_dof, label, label_suffix, data)
subroutine, public fstr_reorder_node_beam(fstrSOLID, hecMESH, unode)
subroutine fstr_write_shell_gauss_result(hecMESH, fstrSOLID, label_suffix)
Write one thickness-point field at a time, sharing evaluation of strain and stress.
subroutine, public fstr_write_result_add(hecMESH, fstrSOLID, istep, label_suffix, fstrDYNAMIC)
ADD result items of static and dynamic analysis to the result file being written. label_suffix is app...
subroutine, public fstr_reorder_rot_beam(fstrSOLID, hecMESH, unode)
Rotation of 641 beams: nodes 3 and 4 carry the rotations of nodes 1 and 2 as their displacements....
subroutine, public setup_contact_output_variables(hecMESH, fstrSOLID, phase, dtime, expflag)
subroutine fstr_make_result_main(hecMESH, fstrSOLID, fstrRESULT, RES, nitem, iitem, ncomp, eitem, jitem, ecomp, clyr)
subroutine, public fstr_reorder_rot_shell(fstrSOLID, hecMESH, unode)
subroutine, public fstr_make_result(hecMESH, fstrSOLID, fstrRESULT, istep, time, fstrDYNAMIC, label_suffix)
MAKE RESULT for static and dynamic analysis (WITHOUT ELEMENTAL RESULTS) -----------------------------...
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.
This modules defines a structure to record history dependent parameter in static analysis.
integer(kind=kint) function fstr_shell_output_point_count(element)
Number of shell thickness-point tensors available for result output.
real(kind=kreal) function fstr_element_average_plstrain(element)
Average equivalent plastic strain over the active quadrature history. Average shell history points eq...
Data for DYNAMIC ANSLYSIS (fstrDYNAMIC)