FrontISTR  5.9.0
Large-scale structural analysis program with finit element method
make_result.f90
Go to the documentation of this file.
1 !-------------------------------------------------------------------------------
2 ! Copyright (c) 2019 FrontISTR Commons
3 ! This software is released under the MIT License, see LICENSE.txt
4 !-------------------------------------------------------------------------------
7  private
8 
9  public:: fstr_write_result
10  public:: fstr_write_result_add
11  public:: fstr_make_result
12  public:: fstr_merge_result
14  public:: fstr_reorder_rot_shell
15  public:: fstr_reorder_node_beam
17 
18 contains
19 
20  !C***
22  !C***
23  subroutine fstr_write_result( hecMESH, fstrSOLID, fstrPARAM, istep, time, flag, fstrDYNAMIC)
24  use m_fstr
25  use hecmw_util
26 
27  implicit none
28  type (hecmwst_local_mesh) :: hecmesh
29  type (fstr_solid) :: fstrsolid
30  type (fstr_param ) :: fstrparam
31  integer(kind=kint) :: istep, flag
32  type (fstr_dynamic), intent(in), optional :: fstrdynamic
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
39 
40  ! --- INITIALIZE
41  header = '*fstrresult'
42  if( present(fstrdynamic) ) then
43  comment = 'dynamic_result'
44  else
45  comment = 'static_result'
46  endif
47  call hecmw_result_init( hecmesh, istep, header, comment )
48 
49  ! --- TIME
50  id = hecmw_result_dtype_global
51  label = 'TOTALTIME'
52  work(1) = time
53  call hecmw_result_add( id, 1, label, work )
54 
55  if( present(fstrdynamic) ) then
56  call fstr_write_result_add( hecmesh, fstrsolid, istep, "", fstrdynamic )
57  else
58  call fstr_write_result_add( hecmesh, fstrsolid, istep, "" )
59  endif
60 
61  ! --- WRITE
62  nameid = 'fstrRES'
63  if( flag==0 ) then
64  call hecmw_result_write_by_name( nameid )
65  else
66  addfname = '_dif'
67  call hecmw_result_write_by_addfname( nameid, addfname )
68  endif
69 
70  ! --- FINALIZE
71  call hecmw_result_finalize
72  end subroutine fstr_write_result
73 
74  !C***
78  !C***
79  subroutine fstr_write_result_add( hecMESH, fstrSOLID, istep, label_suffix, fstrDYNAMIC)
80  use m_fstr
81  use m_out
82  use m_static_lib
83  use mmaterial
84  use hecmw_util
85 
86  implicit none
87  type (hecmwst_local_mesh) :: hecmesh
88  type (fstr_solid) :: fstrsolid
89  integer(kind=kint) :: istep
90  character(len=*) :: label_suffix
91  type (fstr_dynamic), intent(in), optional :: fstrdynamic
92  integer(kind=kint) :: n_lyr, ntot_lyr, tmp, is_33shell, is_33beam, cid
93  integer(kind=kint) :: i, j, k, ndof, mdof, id, nitem, nn, mm, ngauss, it
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(:)
99  logical :: is_dynamic
100 
101  tnstrain => fstrsolid%TNSTRAIN
102  testrain => fstrsolid%TESTRAIN
103  yield_ratio => fstrsolid%YIELD_RATIO
104 
105  is_dynamic = present(fstrdynamic)
106 
107  if( is_dynamic ) then
108  idx = 1
109  if( fstrdynamic%idx_eqa==1 .and. istep>0 ) idx = 2
110  endif
111 
112  ndof = hecmesh%n_dof
113  mm = hecmesh%n_node
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
119 
120  ntot_lyr = fstrsolid%max_lyr
121  is_33shell = fstrsolid%is_33shell
122  is_33beam = fstrsolid%is_33beam
123 
124  nn = mm * mdof
125  allocate( work(nn) )
126 
127  ! --- DISPLACEMENT
128  if( fstrsolid%output_ctrl(3)%outinfo%on(1) ) then
129  if(ndof == 4) then
130  id = hecmw_result_dtype_node
131  ! for VELOCITY
132  nitem = n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(1), 3 )
133  allocate( unode(3*hecmesh%n_node) )
134  unode = 0.0d0
135  do i=1, hecmesh%n_node
136  do j = 1, 3
137  unode((i-1)*3 + j) = fstrdynamic%DISP((i-1)*4 + j, idx)
138  enddo
139  enddo
140  label = 'VELOCITY'
141  call result_add( id, nitem, label, label_suffix, unode )
142  deallocate( unode )
143  ! for PRESSURE
144  nitem = n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(1), 1 )
145  allocate( unode(hecmesh%n_node) )
146  unode = 0.0d0
147  do i=1, hecmesh%n_node
148  unode(i) = fstrdynamic%DISP(i*4, idx)
149  enddo
150  label = 'PRESSURE'
151  call result_add( id, nitem, label, label_suffix, unode )
152  deallocate( 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) )
157  unode = 0.0d0
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)
161  enddo
162  else
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)
165  enddo
166  endif
167  label = 'DISPLACEMENT'
168  call result_add( id, nitem, label, label_suffix, unode )
169  deallocate( unode )
170  else
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) )
174  unode = 0.0d0
175  if( is_dynamic ) then
176  unode(:) = fstrdynamic%DISP(:,idx)
177  else
178  unode(:) = fstrsolid%unode
179  endif
180  label = 'DISPLACEMENT'
181  if(is_33beam == 1)then
182  call fstr_reorder_node_beam(fstrsolid, hecmesh, unode)
183  endif
184  if(is_33shell == 1)then
185  call fstr_reorder_node_shell(fstrsolid, hecmesh, unode)
186  endif
187  call result_add( id, nitem, label, label_suffix, unode )
188  deallocate( unode )
189  endif
190  endif
191 
192  ! --- ROTATION
193  if (fstrsolid%output_ctrl(3)%outinfo%on(18)) then
194  if(ndof == 6) then
195  id = hecmw_result_dtype_node
196  nitem = n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(1), 3 )
197  label = 'ROTATION'
198  allocate( rnode(hecmesh%n_node*3) )
199  rnode = 0.0d0
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)
203  enddo
204  else
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)
207  enddo
208  endif
209  call result_add( id, nitem, label, label_suffix, rnode )
210  deallocate( rnode )
211  else
212  if ( is_33shell == 1) then
213  id = hecmw_result_dtype_node
214  nitem = n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(1), ndof )
215  label = 'ROTATION'
216  allocate( rnode(hecmesh%n_node*ndof) )
217  rnode = 0.0d0
218  call fstr_reorder_rot_shell(fstrsolid, hecmesh, rnode)
219  call result_add( id, nitem, label, label_suffix, rnode )
220  deallocate( rnode )
221  end if
222  end if
223  endif
224 
225  ! --- VELOCITY
226  if( is_dynamic .and. fstrsolid%output_ctrl(3)%outinfo%on(15) ) then
227  id = hecmw_result_dtype_node
228  nitem = n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(15), ndof )
229  label = 'VELOCITY'
230  call result_add( id, nitem, label, label_suffix, fstrdynamic%VEL(:,idx) )
231  endif
232 
233  ! --- ACCELERATION
234  if( is_dynamic .and. fstrsolid%output_ctrl(3)%outinfo%on(16) ) then
235  id = hecmw_result_dtype_node
236  nitem = n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(16), ndof )
237  label = 'ACCELERATION'
238  call result_add( id, nitem, label, label_suffix, fstrdynamic%ACC(:,idx) )
239  endif
240 
241  ! --- REACTION FORCE
242  if( fstrsolid%output_ctrl(3)%outinfo%on(2) ) then
243  id = hecmw_result_dtype_node
244  nitem = n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(2), ndof )
245  label = 'REACTION_FORCE'
246  call result_add( id, nitem, label, label_suffix, fstrsolid%REACTION )
247  endif
248 
249  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
250 
251  if(is_33shell == 1 .or. ndof == 6)then
252  call fstr_write_result_main( hecmesh, fstrsolid, fstrsolid%SHELL, " ", label_suffix )
253  else
254  call fstr_write_result_main( hecmesh, fstrsolid, fstrsolid%SOLID, " ", label_suffix )
255  endif
256 
257  !laminated shell
258  if( associated(fstrsolid%SHELL) .and. fstrsolid%output_ctrl(3)%outinfo%on(27) ) then
259  allocate(clyr(2*ntot_lyr))
260  do i=1,ntot_lyr
261  write(cnum,"(i0)")i
262  clyr(2*i-1)="_L"//trim(cnum)//"+"
263  clyr(2*i )="_L"//trim(cnum)//"-"
264  enddo
265  do i=1,ntot_lyr
266  call fstr_write_result_main( hecmesh, fstrsolid, fstrsolid%SHELL%LAYER(i)%PLUS, clyr(2*i-1), label_suffix )
267  call fstr_write_result_main( hecmesh, fstrsolid, fstrsolid%SHELL%LAYER(i)%MINUS, clyr(2*i ), label_suffix )
268  enddo
269  deallocate(clyr)
270  endif
271 
272  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
273  ! --- STRAIN @gauss
274  if( fstrsolid%output_ctrl(3)%outinfo%on(9) .and. ndof/=6 ) then
275  id = hecmw_result_dtype_elem
276  nitem = n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(9), ndof )
277  ngauss = fstrsolid%maxn_gauss
278  work(:) = 0.d0
279  do k = 1, ngauss
280  write(s,*) k
281  write(label,'(a,a)') 'GaussSTRAIN',trim(adjustl(s))
282  label = adjustl(label)
283  do i = 1, hecmesh%n_elem
284  if( associated(fstrsolid%elements(i)%gausses) ) then
285  if( k <= size(fstrsolid%elements(i)%gausses) ) then
286  do j = 1, nitem
287  work(nitem*(i-1)+j) = fstrsolid%elements(i)%gausses(k)%strain_out(j)
288  enddo
289  endif
290  end if
291  enddo
292  call result_add( id, nitem, label, label_suffix, work )
293  enddo
294  endif
295 
296  ! --- STRESS @gauss
297  if( fstrsolid%output_ctrl(3)%outinfo%on(10) .and. ndof/=6 ) then
298  id = hecmw_result_dtype_elem
299  nitem = n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(10), ndof )
300  ngauss = fstrsolid%maxn_gauss
301  work(:) = 0.d0
302  do k = 1, ngauss
303  write(s,*) k
304  write(label,'(a,a)') 'GaussSTRESS',trim(adjustl(s))
305  label = adjustl(label)
306  do i = 1, hecmesh%n_elem
307  if( associated(fstrsolid%elements(i)%gausses) ) then
308  if( k <= size(fstrsolid%elements(i)%gausses) ) then
309  do j = 1, nitem
310  work(nitem*(i-1)+j) = fstrsolid%elements(i)%gausses(k)%stress_out(j)
311  enddo
312  endif
313  end if
314  enddo
315  call result_add( id, nitem, label, label_suffix, work )
316  enddo
317  endif
318 
319  ! --- PLASTIC STRAIN @gauss
320  if( fstrsolid%output_ctrl(3)%outinfo%on(11) .and. fstrsolid%StaticType/=3 ) then
321  id = hecmw_result_dtype_elem
322  nitem = n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(11), ndof )
323  ngauss = fstrsolid%maxn_gauss
324  work(:) = 0.d0
325  do k = 1, ngauss
326  write(s,*) k
327  write(label,'(a,a)') 'PLASTIC_GaussSTRAIN',trim(adjustl(s))
328  label = adjustl(label)
329  do i = 1, hecmesh%n_elem
330  if( associated(fstrsolid%elements(i)%gausses) ) then
331  if( k <= size(fstrsolid%elements(i)%gausses) ) then
332  work(i) = fstrsolid%elements(i)%gausses(k)%plstrain
333  endif
334  endif
335  enddo
336  call result_add( id, nitem, label, label_suffix, work )
337  enddo
338  endif
339 
340  ! --- THERMAL STRAIN @node
341  if( fstrsolid%output_ctrl(3)%outinfo%on(12) .and. associated(tnstrain) ) then
342  id = hecmw_result_dtype_node
343  nitem = n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(12), ndof )
344  label = 'THERMAL_NodalSTRAIN'
345  call result_add( id, nitem, label, label_suffix, tnstrain )
346  endif
347 
348  ! --- THERMAL STRAIN @element
349  if( fstrsolid%output_ctrl(3)%outinfo%on(13) .and. associated(testrain) ) then
350  id = hecmw_result_dtype_elem
351  nitem = n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(13), ndof )
352  label = 'THERMAL_ElementalSTRAIN'
353  call result_add( id, nitem, label, label_suffix, testrain )
354  endif
355 
356  ! --- THERMAL STRAIN @gauss
357  if( fstrsolid%output_ctrl(3)%outinfo%on(14) .and. associated(testrain) ) then
358  id = hecmw_result_dtype_elem
359  nitem = n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(14), ndof )
360  ngauss = fstrsolid%maxn_gauss
361  do k = 1, ngauss
362  write(s,*) k
363  write(label,'(a,a)') 'THERMAL_GaussSTRAIN',trim(adjustl(s))
364  label = adjustl(label)
365  do i = 1, hecmesh%n_elem
366  if( k > ngauss ) then
367  do j = 1, nitem
368  work(nitem*(i-1)+j) = 0.d0
369  enddo
370  else
371  do j = 1, nitem
372  ! work(nitem*(i-1)+j) = fstrSOLID%elements(i)%gausses(k)%tstrain(j)
373  enddo
374  end if
375  enddo
376  call result_add( id, nitem, label, label_suffix, work )
377  enddo
378  endif
379 
380  ! --- YIELD RATIO
381  if( fstrsolid%output_ctrl(3)%outinfo%on(29) ) then
382  id = hecmw_result_dtype_elem
383  nitem = n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(29), ndof )
384  label = "YIELD_RATIO"
385  call result_add( id, nitem, label, label_suffix, yield_ratio )
386  endif
387 
388  ! --- CONTACT NORMAL FORCE @node
389  if( fstrsolid%output_ctrl(3)%outinfo%on(30) .and. associated(fstrsolid%CONT_NFORCE) ) then
390  id = hecmw_result_dtype_node
391  nitem = n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(30), ndof )
392  label = 'CONTACT_NFORCE'
393  call result_add( id, nitem, label, label_suffix, fstrsolid%CONT_NFORCE )
394  endif
395 
396  ! --- CONTACT FRICTION FORCE @node
397  if( fstrsolid%output_ctrl(3)%outinfo%on(31) .and. associated(fstrsolid%CONT_FRIC) ) then
398  id = hecmw_result_dtype_node
399  nitem = n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(31), ndof )
400  label = 'CONTACT_FRICTION'
401  call result_add( id, nitem, label, label_suffix, fstrsolid%CONT_FRIC )
402  endif
403 
404  ! --- CONTACT RELATIVE VELOCITY @node
405  if( fstrsolid%output_ctrl(3)%outinfo%on(32) .and. associated(fstrsolid%CONT_RELVEL) ) then
406  id = hecmw_result_dtype_node
407  nitem = n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(32), ndof )
408  label = 'CONTACT_RELVEL'
409  call result_add( id, nitem, label, label_suffix, fstrsolid%CONT_RELVEL )
410  endif
411 
412  ! --- CONTACT STATE @node
413  if( fstrsolid%output_ctrl(3)%outinfo%on(33) .and. associated(fstrsolid%CONT_STATE) ) then
414  id = hecmw_result_dtype_node
415  nitem = n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(33), ndof )
416  label = 'CONTACT_STATE'
417  call result_add( id, nitem, label, label_suffix, fstrsolid%CONT_STATE )
418  endif
419 
420  ! --- CONTACT NORMAL TRACTION @node
421  if( fstrsolid%output_ctrl(3)%outinfo%on(36) .and. associated(fstrsolid%CONT_NTRAC) ) then
422  id = hecmw_result_dtype_node
423  nitem = n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(36), ndof )
424  label = 'CONTACT_NTRACTION'
425  call result_add( id, nitem, label, label_suffix, fstrsolid%CONT_NTRAC )
426  endif
427 
428  ! --- CONTACT FRICTION TRACTION @node
429  if( fstrsolid%output_ctrl(3)%outinfo%on(37) .and. associated(fstrsolid%CONT_FTRAC) ) then
430  id = hecmw_result_dtype_node
431  nitem = n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(37), ndof )
432  label = 'CONTACT_FTRACTION'
433  call result_add( id, nitem, label, label_suffix, fstrsolid%CONT_FTRAC )
434  endif
435 
436  ! --- TEMPERATURE @node
437  !if(present(fstrPARAM))then
438  ! if( fstrSOLID%output_ctrl(4)%outinfo%on(38) .and. fstrPARAM%solution_type == kstHEATSTATIC)then
439  ! ncomp = ncomp + 1
440  ! nn = n_comp_valtype( fstrSOLID%output_ctrl(4)%outinfo%vtype(38), ndof )
441  ! fstrRESULT%nn_dof(ncomp) = nn
442  ! fstrRESULT%node_label(ncomp) = 'TEMPERATURE'
443  ! do i = 1, hecMESH%n_node
444  ! do j = 1, nn
445  ! fstrRESULT%node_val_item(nitem*(i-1)+j+iitem) = fstrSOLID%temperature(nn*(i-1)+j)
446  ! enddo
447  ! enddo
448  ! iitem = iitem + nn
449  ! endif
450  !endif
451 
452  ! --- ELEMACT flag @element
453  if( fstrsolid%output_ctrl(3)%outinfo%on(44) ) then
454  id = hecmw_result_dtype_elem
455  nitem = n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(44), ndof )
456  label = 'ELEMACT'
457  work(:) = 0.d0
458  do i = 1, hecmesh%n_elem
459  if( fstrsolid%elements(i)%elemact_flag /= kelact_inactive ) work(i) = 1.d0
460  enddo
461  call result_add( id, nitem, label, label_suffix, work )
462  endif
463 
464  deallocate( work )
465  end subroutine fstr_write_result_add
466 
467  subroutine result_add( dtype, n_dof, label, label_suffix, data )
468  use m_fstr
469  use hecmw_util
470 
471  implicit none
472  integer(kind=kint), intent(in) :: dtype
473  integer(kind=kint), intent(in) :: n_dof
474  character(len=*), intent(in) :: label
475  character(len=*), intent(in) :: label_suffix
476  real(kind=kreal) :: data(:)
477  character(len=HECMW_NAME_LEN) :: name
478 
479  name = trim(label)//trim(label_suffix)
480  call hecmw_result_add( dtype, n_dof, name, data )
481  end subroutine result_add
482 
483  subroutine fstr_write_result_main( hecMESH, fstrSOLID, RES, clyr, label_suffix )
484  use m_fstr
485  use m_out
486  use m_static_lib
487  use mmaterial
488  use hecmw_util
489 
490  implicit none
491  type (hecmwST_local_mesh) :: hecMESH
492  type (fstr_solid) :: fstrSOLID
493  type (fstr_solid_physic_val) :: RES
494  integer(kind=kint) :: istep, flag
495  integer(kind=kint) :: n_lyr, cid
496 
497  character(len=HECMW_HEADER_LEN) :: header
498  character(len=HECMW_NAME_LEN) :: s, label, nameID, addfname
499  character(len=16) :: clyr
500  character(len=*) :: label_suffix
501  character(len=12) :: cnum
502  integer(kind=kint) :: i, j, k, ndof, mdof, id, nitem, nn, mm, ngauss, it
503  real(kind=kreal), allocatable :: work(:)
504 
505  ndof = hecmesh%n_dof
506  allocate( work(hecmesh%n_elem) )
507 
508  ! --- STRAIN @node
509  if (fstrsolid%output_ctrl(3)%outinfo%on(3)) then
510  id = hecmw_result_dtype_node
511  nitem = n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(3), ndof )
512  label = 'NodalSTRAIN'//trim(clyr)
513  call result_add( id, nitem, label, label_suffix, res%STRAIN )
514  endif
515 
516  ! --- STRESS @node
517  if( fstrsolid%output_ctrl(3)%outinfo%on(4) ) then
518  id = hecmw_result_dtype_node
519  nitem = n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(4), ndof )
520  label = 'NodalSTRESS'//trim(clyr)
521  call result_add( id, nitem, label, label_suffix, res%STRESS )
522  endif
523 
524  ! --- MISES @node
525  if( fstrsolid%output_ctrl(3)%outinfo%on(5) ) then
526  id = hecmw_result_dtype_node
527  nitem = n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(5), ndof )
528  label = 'NodalMISES'//trim(clyr)
529  call result_add( id, nitem, label, label_suffix, res%MISES )
530  endif
531 
532  ! --- NODAL PRINC STRESS
533  if( fstrsolid%output_ctrl(3)%outinfo%on(19) ) then
534  id = hecmw_result_dtype_node
535  nitem = n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(19), ndof )
536  label = 'NodalPrincipalSTRESS'//trim(clyr)
537  call result_add( id, nitem, label, label_suffix, res%PSTRESS )
538  endif
539 
540  ! --- NODAL PRINC STRAIN
541  if( fstrsolid%output_ctrl(3)%outinfo%on(21) ) then
542  id = hecmw_result_dtype_node
543  nitem = n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(21), ndof )
544  label = 'NodalPrincipalSTRAIN'//trim(clyr)
545  call result_add( id, nitem, label, label_suffix, res%PSTRAIN )
546  endif
547 
548  ! --- NODAL PRINC STRESS VECTOR
549  if( fstrsolid%output_ctrl(3)%outinfo%on(23) ) then
550  id = hecmw_result_dtype_node
551  do k=1,3
552  write(cnum,'(i0)')k
553  nitem = n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(23), ndof )
554  label = 'NodalPrincipalSTRESSVector'//trim(cnum)//trim(clyr)
555  call result_add( id, nitem, label, label_suffix, res%PSTRESS_VECT(:,k) )
556  end do
557  endif
558 
559  ! --- NODAL PRINC STRAIN VECTOR
560  if( fstrsolid%output_ctrl(3)%outinfo%on(25) ) then
561  id = hecmw_result_dtype_node
562  do k=1,3
563  write(cnum,'(i0)')k
564  nitem = n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(25), ndof )
565  label = 'NodalPrincipalSTRAINVector'//trim(cnum)//trim(clyr)
566  call result_add( id, nitem, label, label_suffix, res%PSTRAIN_VECT(:,k) )
567  end do
568  endif
569 
570  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
571  ! --- STRAIN @element
572  if( fstrsolid%output_ctrl(3)%outinfo%on(6) ) then
573  id = hecmw_result_dtype_elem
574  nitem = n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(6), ndof )
575  label = 'ElementalSTRAIN'//trim(clyr)
576  call result_add( id, nitem, label, label_suffix, res%ESTRAIN )
577  endif
578 
579  ! --- STRESS @element
580  if( fstrsolid%output_ctrl(3)%outinfo%on(7) ) then
581  id = hecmw_result_dtype_elem
582  nitem = n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(7), ndof )
583  label = 'ElementalSTRESS'//trim(clyr)
584  call result_add( id, nitem, label, label_suffix, res%ESTRESS )
585  endif
586 
587  ! --- NQM @element
588  if( fstrsolid%output_ctrl(3)%outinfo%on(35) ) then
589  id = hecmw_result_dtype_elem
590  nitem = n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(35), ndof )
591  label = 'ElementalNQM'//trim(clyr)
592  call result_add( id, nitem, label, label_suffix, res%ENQM )
593  endif
594 
595  ! --- MISES @element
596  if( fstrsolid%output_ctrl(3)%outinfo%on(8)) then
597  id = hecmw_result_dtype_elem
598  nitem = n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(8), ndof )
599  label = 'ElementalMISES'//trim(clyr)
600  call result_add( id, nitem, label, label_suffix, res%EMISES )
601  endif
602 
603  ! --- Principal_STRESS @element
604  if( fstrsolid%output_ctrl(3)%outinfo%on(20) ) then
605  id = hecmw_result_dtype_elem
606  nitem = n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(20), ndof )
607  label = 'ElementalPrincipalSTRESS'//trim(clyr)
608  call result_add( id, nitem, label, label_suffix, res%EPSTRESS )
609  endif
610 
611  ! --- Principal_STRAIN @element
612  if( fstrsolid%output_ctrl(3)%outinfo%on(22) ) then
613  id = hecmw_result_dtype_elem
614  nitem = n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(22), ndof )
615  label = 'ElementalPrincipalSTRAIN'//trim(clyr)
616  call result_add( id, nitem, label, label_suffix, res%EPSTRAIN )
617  endif
618 
619  ! --- ELEM PRINC STRESS VECTOR
620  if( fstrsolid%output_ctrl(3)%outinfo%on(24) ) then
621  id = hecmw_result_dtype_elem
622  do k=1,3
623  write(cnum,'(i0)')k
624  nitem = n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(24), ndof )
625  label = 'ElementalPrincipalSTRESSVector'//trim(cnum)//trim(clyr)
626  call result_add( id, nitem, label, label_suffix, res%EPSTRESS_VECT(:,k) )
627  end do
628  endif
629 
630  !ELEM PRINC STRAIN VECTOR
631  if( fstrsolid%output_ctrl(3)%outinfo%on(26) ) then
632  id = hecmw_result_dtype_elem
633  do k=1,3
634  write(cnum,'(i0)')k
635  nitem = n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(26), ndof )
636  label = 'ElementalPrincipalSTRAINVector'//trim(cnum)//trim(clyr)
637  call result_add( id, nitem, label, label_suffix, res%EPSTRAIN_VECT(:,k) )
638  end do
639  endif
640 
641  ! --- PLASTIC STRAIN @element
642  if( fstrsolid%output_ctrl(3)%outinfo%on(43) ) then
643  id = hecmw_result_dtype_elem
644  nitem = n_comp_valtype( fstrsolid%output_ctrl(3)%outinfo%vtype(43), ndof )
645  label = 'ElementalPLSTRAIN'//trim(clyr)
646  call result_add( id, nitem, label, label_suffix, res%EPLSTRAIN )
647  endif
648  deallocate( work )
649 
650  end subroutine fstr_write_result_main
651 
652  !C***
654  !C***
655  subroutine fstr_make_result( hecMESH, fstrSOLID, fstrRESULT, istep, time, fstrDYNAMIC, label_suffix )
656  use m_fstr
657  use hecmw_util
658 
659  implicit none
660  character(len=*), intent(in), optional :: label_suffix
661  type (hecmwst_local_mesh) :: hecmesh
662  type (fstr_solid) :: fstrsolid
663  type(hecmwst_result_data) :: fstrresult
664  integer(kind=kint) :: istep
665  real(kind=kreal) :: time, coords(3,3)
666  type(fstr_dynamic), intent(in), optional :: fstrdynamic
667  integer(kind=kint) :: n_lyr, ntot_lyr, it, coef33, is_33shell, is_33beam
668  integer(kind=kint) :: i, j, k, ndof, mdof, gcomp, gitem, ncomp, nitem, iitem, ecomp, eitem, jitem, nn, mm
669  integer(kind=kint) :: idx
670  real(kind=kreal), pointer :: tnstrain(:), testrain(:)
671  real(kind=kreal), allocatable ::unode(:)
672  character(len=12) :: cnum
673  character(len=16), allocatable :: clyr(:)
674  logical :: is_dynamic
675 
676  is_dynamic = present(fstrdynamic)
677 
678  tnstrain => fstrsolid%TNSTRAIN
679  testrain => fstrsolid%TESTRAIN
680 
681  ntot_lyr = fstrsolid%max_lyr
682  is_33shell = fstrsolid%is_33shell
683  is_33beam = fstrsolid%is_33beam
684 
685  mm = hecmesh%n_node
686  if( hecmesh%n_elem>hecmesh%n_node ) mm = hecmesh%n_elem
687 
688  if( is_dynamic ) then
689  idx = 1
690  if( fstrdynamic%idx_eqa==1 .and. istep>0 ) idx = 2
691  endif
692 
693  ndof = hecmesh%n_dof
694  if( ndof==2 ) mdof = 3
695  if( ndof==3 ) mdof = 6
696  if( ndof==4 ) mdof = 6
697  if( ndof==6 ) mdof = 6
698 
699  if(is_33shell == 1 .and. fstrsolid%output_ctrl(4)%outinfo%on(27) )then
700  coef33 = 1 + 2*ntot_lyr
701  else
702  coef33 = 1
703  endif
704 
705  call hecmw_nullify_result_data( fstrresult )
706  gcomp = 0
707  gitem = 0
708  ncomp = 0
709  nitem = 0
710  ecomp = 0
711  eitem = 0
712 
713  ! --- COUNT SUM OF ALL NITEM
714  ! --- TIME
715  gcomp = gcomp + 1
716  gitem = gitem + 1
717  ! --- DISPLACEMENT
718  if( fstrsolid%output_ctrl(4)%outinfo%on(1) ) then
719  if(ndof == 4) then
720  ncomp = ncomp + 1
721  nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(1), 3 )
722  ncomp = ncomp + 1
723  nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(1), 1 )
724  else if(ndof == 6) then
725  ncomp = ncomp + 1
726  nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(1), 3 )
727  else
728  ncomp = ncomp + 1
729  nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(1), ndof )
730  endif
731  endif
732  ! --- VELOCITY
733  if( is_dynamic .and. fstrsolid%output_ctrl(4)%outinfo%on(15) ) then
734  ncomp = ncomp + 1
735  nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(15), ndof )
736  endif
737  ! --- ACCELERATION
738  if( is_dynamic .and. fstrsolid%output_ctrl(4)%outinfo%on(16) ) then
739  ncomp = ncomp + 1
740  nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(16), ndof )
741  endif
742  ! --- TEMPERATURE @node
743  if( fstrsolid%output_ctrl(4)%outinfo%on(17) .and. associated(fstrsolid%temperature) ) then
744  ncomp = ncomp + 1
745  nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(17), ndof )
746  endif
747  ! --- ROTATION (Only for 781 shell)
748  if( fstrsolid%output_ctrl(4)%outinfo%on(18) ) then
749  if(ndof == 6) then
750  ncomp = ncomp + 1
751  nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(18), 3 )
752  else
753  if( is_33shell == 1 ) then
754  ncomp = ncomp + 1
755  nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(18), ndof )
756  endif
757  endif
758  endif
759  ! --- REACTION FORCE
760  if( fstrsolid%output_ctrl(4)%outinfo%on(2) ) then
761  ncomp = ncomp + 1
762  nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(2), ndof )
763  endif
764  ! --- STRAIN @node
765  if( fstrsolid%output_ctrl(4)%outinfo%on(3) ) then
766  ncomp = ncomp + 1*coef33
767  nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(3), ndof )*coef33
768  endif
769  ! --- STRESS @node
770  if( fstrsolid%output_ctrl(4)%outinfo%on(4) ) then
771  ncomp = ncomp + 1*coef33
772  nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(4), ndof )*coef33
773  endif
774  ! --- MISES @node
775  if( fstrsolid%output_ctrl(4)%outinfo%on(5) ) then
776  ncomp = ncomp + 1*coef33
777  nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(5), ndof )*coef33
778  endif
779  ! --- Principal Stress @node
780  if( fstrsolid%output_ctrl(4)%outinfo%on(19) ) then
781  ncomp = ncomp + 1*coef33
782  nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(19), ndof )*coef33
783  endif
784  ! --- Principal Strain @node
785  if( fstrsolid%output_ctrl(4)%outinfo%on(21) ) then
786  ncomp = ncomp + 1*coef33
787  nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(21), ndof )*coef33
788  endif
789  ! --- Principal Stress Vector @node
790  if( fstrsolid%output_ctrl(4)%outinfo%on(23) ) then
791  ncomp = ncomp + 3*coef33
792  nitem = nitem + 3*n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(23), ndof )*coef33
793  endif
794  ! --- Principal Strain Vector @node
795  if( fstrsolid%output_ctrl(4)%outinfo%on(25) ) then
796  ncomp = ncomp + 3*coef33
797  nitem = nitem + 3*n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(25), ndof )*coef33
798  endif
799  ! --- THERMAL STRAIN @node
800  if( fstrsolid%output_ctrl(4)%outinfo%on(12) .and. associated(tnstrain) ) then
801  ncomp = ncomp + 1
802  nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(12), ndof )
803  endif
804  ! --- CONTACT NORMAL FORCE @node
805  if( fstrsolid%output_ctrl(4)%outinfo%on(30) .and. associated(fstrsolid%CONT_NFORCE) ) then
806  ncomp = ncomp + 1
807  nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(30), ndof )
808  endif
809  ! --- CONTACT FRICTION FORCE @node
810  if( fstrsolid%output_ctrl(4)%outinfo%on(31) .and. associated(fstrsolid%CONT_FRIC) ) then
811  ncomp = ncomp + 1
812  nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(31), ndof )
813  endif
814  ! --- CONTACT RELATIVE VELOCITY @node
815  if( fstrsolid%output_ctrl(4)%outinfo%on(32) .and. associated(fstrsolid%CONT_RELVEL) ) then
816  ncomp = ncomp + 1
817  nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(32), ndof )
818  endif
819  ! --- CONTACT STATE @node
820  if( fstrsolid%output_ctrl(4)%outinfo%on(33) .and. associated(fstrsolid%CONT_STATE) ) then
821  ncomp = ncomp + 1
822  nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(33), ndof )
823  endif
824  ! --- CONTACT NORMAL TRACTION @node
825  if( fstrsolid%output_ctrl(4)%outinfo%on(36) .and. associated(fstrsolid%CONT_NTRAC) ) then
826  ncomp = ncomp + 1
827  nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(36), ndof )
828  endif
829  ! --- CONTACT FRICTION TRACTION @node
830  if( fstrsolid%output_ctrl(4)%outinfo%on(37) .and. associated(fstrsolid%CONT_FTRAC) ) then
831  ncomp = ncomp + 1
832  nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(37), ndof )
833  endif
834  ! --- NODE ID @node
835  if( fstrsolid%output_ctrl(4)%outinfo%on(38) ) then
836  ncomp = ncomp + 1
837  nitem = nitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(38), ndof )
838  endif
839  ! --- TEMPERATURE @node
840  !if( fstrSOLID%output_ctrl(4)%outinfo%on(41) .and. associated(fstrSOLID%CONT_FTRAC) ) then
841  ! ncomp = ncomp + 1
842  ! nitem = nitem + n_comp_valtype( fstrSOLID%output_ctrl(4)%outinfo%vtype(41), ndof )
843  !endif
844 
845  ! --- STRAIN @element
846  if( fstrsolid%output_ctrl(4)%outinfo%on(6) ) then
847  ecomp = ecomp + 1
848  eitem = eitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(6), ndof )
849  endif
850  ! --- STRESS @element
851  if( fstrsolid%output_ctrl(4)%outinfo%on(7) ) then
852  ecomp = ecomp + 1
853  eitem = eitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(7), ndof )
854  endif
855  ! --- MISES @element
856  if( fstrsolid%output_ctrl(4)%outinfo%on(8) ) then
857  ecomp = ecomp + 1
858  eitem = eitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(8), ndof )
859  endif
860  ! --- Principal Stress @element
861  if( fstrsolid%output_ctrl(4)%outinfo%on(20) ) then
862  ecomp = ecomp + 1
863  eitem = eitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(20), ndof )
864  endif
865  ! --- Principal Strain @element
866  if( fstrsolid%output_ctrl(4)%outinfo%on(22) ) then
867  ecomp = ecomp + 1
868  eitem = eitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(22), ndof )
869  endif
870  ! --- Principal Stress Vector @element
871  if( fstrsolid%output_ctrl(4)%outinfo%on(24) ) then
872  ecomp = ecomp + 3
873  eitem = eitem + 3*n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(24), ndof )
874  endif
875  ! --- Principal Strain Vector @element
876  if( fstrsolid%output_ctrl(4)%outinfo%on(26) ) then
877  ecomp = ecomp + 3
878  eitem = eitem + 3*n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(26), ndof )
879  endif
880  ! --- PLASTIC STRAIN @element
881  if( fstrsolid%output_ctrl(4)%outinfo%on(43) ) then
882  ecomp = ecomp + 1
883  eitem = eitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(43), ndof )
884  endif
885  ! --- MATERIAL @element
886  if( fstrsolid%output_ctrl(4)%outinfo%on(34) ) then
887  ecomp = ecomp + 1
888  eitem = eitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(34), ndof )
889  endif
890  ! --- ORIENTATION @element
891  if( fstrsolid%output_ctrl(4)%outinfo%on(42) ) then
892  ecomp = ecomp + 3*coef33
893  eitem = eitem + 3*n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(42), ndof )*coef33
894  endif
895  ! --- ELEM ID @element
896  if( fstrsolid%output_ctrl(4)%outinfo%on(39) ) then
897  ecomp = ecomp + 1
898  eitem = eitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(39), ndof )
899  endif
900  ! --- SECTION ID @element
901  if( fstrsolid%output_ctrl(4)%outinfo%on(40) ) then
902  ecomp = ecomp + 1
903  eitem = eitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(40), ndof )
904  endif
905  ! --- ELEMACT flag @element
906  if( fstrsolid%output_ctrl(4)%outinfo%on(44) ) then
907  ecomp = ecomp + 1
908  eitem = eitem + n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(44), ndof )
909  endif
910 
911  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
912  fstrresult%ng_component = gcomp
913  fstrresult%nn_component = ncomp
914  fstrresult%ne_component = ecomp
915  allocate( fstrresult%ng_dof(gcomp) )
916  allocate( fstrresult%global_label(gcomp) )
917  allocate( fstrresult%global_val_item(gitem) )
918  allocate( fstrresult%nn_dof(ncomp) )
919  allocate( fstrresult%node_label(ncomp) )
920  allocate( fstrresult%node_val_item(nitem*hecmesh%n_node) )
921  allocate( fstrresult%ne_dof(ecomp) )
922  allocate( fstrresult%elem_label(ecomp) )
923  allocate( fstrresult%elem_val_item(eitem*hecmesh%n_elem) )
924  ncomp = 0
925  iitem = 0
926  ecomp = 0
927  jitem = 0
928 
929  ! --- TIME
930  fstrresult%ng_dof(1) = 1
931  fstrresult%global_label(1) = "TOTALTIME"
932  fstrresult%global_val_item(1) = time
933 
934  ! --- DISPLACEMENT
935  if (fstrsolid%output_ctrl(4)%outinfo%on(1) ) then
936  if(ndof == 4) then
937  ! DIPLACEMENT
938  ncomp = ncomp + 1
939  nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(1), 3 )
940  fstrresult%nn_dof(ncomp) = nn
941  fstrresult%node_label(ncomp) = 'VELOCITY'
942  do i = 1, hecmesh%n_node
943  do j = 1, 3
944  fstrresult%node_val_item(nitem*(i-1)+j+iitem) = fstrdynamic%DISP(4*(i-1)+j,idx)
945  enddo
946  enddo
947  iitem = iitem + nn
948  ! PRESSURE
949  ncomp = ncomp + 1
950  nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(1), 1 )
951  fstrresult%nn_dof(ncomp) = nn
952  fstrresult%node_label(ncomp) = 'PRESSURE'
953  do i = 1, hecmesh%n_node
954  fstrresult%node_val_item(nitem*(i-1)+1+iitem) = fstrdynamic%DISP(4*i,idx)
955  enddo
956  iitem = iitem + nn
957  else if(ndof == 6) then
958  ncomp = ncomp + 1
959  nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(1), 3 )
960  fstrresult%nn_dof(ncomp) = nn
961  fstrresult%node_label(ncomp) = 'DISPLACEMENT'
962  allocate( unode(3*hecmesh%n_node) )
963  unode = 0.0d0
964  if( is_dynamic ) then
965  do i=1, hecmesh%n_node
966  unode((i-1)*3+1:(i-1)*3+3) = fstrdynamic%DISP((i-1)*ndof+1:(i-1)*ndof+3, idx)
967  enddo
968  else
969  do i=1, hecmesh%n_node
970  unode((i-1)*3+1:(i-1)*3+3) = fstrsolid%unode((i-1)*ndof+1:(i-1)*ndof+3)
971  enddo
972  endif
973  do i = 1, hecmesh%n_node
974  do j = 1, nn
975  fstrresult%node_val_item(nitem*(i-1)+j+iitem) = unode(nn*(i-1)+j)
976  enddo
977  enddo
978  deallocate( unode )
979  iitem = iitem + nn
980 
981  else
982  ncomp = ncomp + 1
983  nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(1), ndof )
984  fstrresult%nn_dof(ncomp) = nn
985  fstrresult%node_label(ncomp) = 'DISPLACEMENT'
986  allocate( unode(ndof*hecmesh%n_node) )
987  unode = 0.0d0
988  if( is_dynamic ) then
989  unode(:) = fstrdynamic%DISP(:,idx)
990  else
991  unode(:) = fstrsolid%unode(:)
992  endif
993  if(is_33beam == 1)then
994  call fstr_reorder_node_beam(fstrsolid, hecmesh, unode)
995  endif
996  if(is_33shell == 1)then
997  call fstr_reorder_node_shell(fstrsolid, hecmesh, unode)
998  endif
999  do i = 1, hecmesh%n_node
1000  do j = 1, nn
1001  fstrresult%node_val_item(nitem*(i-1)+j+iitem) = unode(nn*(i-1)+j)
1002  enddo
1003  enddo
1004  deallocate( unode )
1005  iitem = iitem + nn
1006  endif
1007  endif
1008 
1009  ! --- VELOCITY
1010  if( is_dynamic .and. fstrsolid%output_ctrl(4)%outinfo%on(15) ) then
1011  ncomp = ncomp + 1
1012  nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(15), ndof )
1013  fstrresult%nn_dof(ncomp) = nn
1014  fstrresult%node_label(ncomp) = 'VELOCITY'
1015  do i = 1, hecmesh%n_node
1016  do j = 1, nn
1017  fstrresult%node_val_item(nitem*(i-1)+j+iitem) = fstrdynamic%VEL(nn*(i-1)+j,idx)
1018  enddo
1019  enddo
1020  iitem = iitem + nn
1021  endif
1022 
1023  ! --- ACCELERATION
1024  if( is_dynamic .and. fstrsolid%output_ctrl(4)%outinfo%on(16) ) then
1025  ncomp = ncomp + 1
1026  nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(16), ndof )
1027  fstrresult%nn_dof(ncomp) = nn
1028  fstrresult%node_label(ncomp) = 'ACCELERATION'
1029  do i = 1, hecmesh%n_node
1030  do j = 1, nn
1031  fstrresult%node_val_item(nitem*(i-1)+j+iitem) = fstrdynamic%ACC(nn*(i-1)+j,idx)
1032  enddo
1033  enddo
1034  iitem = iitem + nn
1035  endif
1036 
1037  ! --- TEMPERATURE
1038  if( fstrsolid%output_ctrl(4)%outinfo%on(17) .and. associated(fstrsolid%temperature))then
1039  ncomp = ncomp + 1
1040  nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(17), ndof )
1041  fstrresult%nn_dof(ncomp) = nn
1042  fstrresult%node_label(ncomp) = 'TEMPERATURE'
1043  do i = 1, hecmesh%n_node
1044  do j = 1, nn
1045  fstrresult%node_val_item(nitem*(i-1)+j+iitem) = fstrsolid%temperature(nn*(i-1)+j)
1046  enddo
1047  enddo
1048  iitem = iitem + nn
1049  endif
1050 
1051  ! --- ROTATION
1052  if( fstrsolid%output_ctrl(4)%outinfo%on(18) ) then
1053 
1054  if(ndof == 6) then
1055  ncomp = ncomp + 1
1056  nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(1), 3 )
1057  fstrresult%nn_dof(ncomp) = nn
1058  fstrresult%node_label(ncomp) = 'ROTATION'
1059  allocate( unode(3*hecmesh%n_node) )
1060  unode = 0.0d0
1061  if( is_dynamic ) then
1062  do i=1, hecmesh%n_node
1063  unode((i-1)*3+1:(i-1)*3+3) = fstrdynamic%DISP((i-1)*ndof+4:(i-1)*ndof+6, idx)
1064  enddo
1065  else
1066  do i=1, hecmesh%n_node
1067  unode((i-1)*3+1:(i-1)*3+3) = fstrsolid%unode((i-1)*ndof+4:(i-1)*ndof+6)
1068  enddo
1069  endif
1070  do i = 1, hecmesh%n_node
1071  do j = 1, nn
1072  fstrresult%node_val_item(nitem*(i-1)+j+iitem) = unode(nn*(i-1)+j)
1073  enddo
1074  enddo
1075  deallocate( unode )
1076  iitem = iitem + nn
1077  else
1078  if ( is_33shell == 1) then
1079  ncomp = ncomp + 1
1080  nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(1), ndof )
1081  fstrresult%nn_dof(ncomp) = nn
1082  fstrresult%node_label(ncomp) = 'ROTATION'
1083  allocate( unode(ndof*hecmesh%n_node) )
1084  unode = 0.0d0
1085  call fstr_reorder_rot_shell(fstrsolid, hecmesh, unode)
1086  do i = 1, hecmesh%n_node
1087  do j = 1, nn
1088  fstrresult%node_val_item(nitem*(i-1)+j+iitem) = unode(nn*(i-1)+j)
1089  enddo
1090  enddo
1091  deallocate( unode )
1092  iitem = iitem + nn
1093  end if
1094  end if
1095  endif
1096 
1097  ! --- REACTION FORCE
1098  if( fstrsolid%output_ctrl(4)%outinfo%on(2) ) then
1099  ncomp = ncomp + 1
1100  nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(2), ndof )
1101  fstrresult%nn_dof(ncomp) = nn
1102  fstrresult%node_label(ncomp) = 'REACTION_FORCE'
1103  do i = 1, hecmesh%n_node
1104  do j = 1, nn
1105  fstrresult%node_val_item(nitem*(i-1)+j+iitem) = fstrsolid%REACTION(nn*(i-1)+j)
1106  enddo
1107  enddo
1108  iitem = iitem + nn
1109  endif
1110  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1111  if(is_33shell == 1 .or. ndof == 6)then
1112  call fstr_make_result_main( hecmesh, fstrsolid, fstrresult, &
1113  & fstrsolid%SHELL, nitem, iitem, ncomp, eitem, jitem, ecomp, 1, " " )
1114  else
1115  call fstr_make_result_main( hecmesh, fstrsolid, fstrresult, &
1116  & fstrsolid%SOLID, nitem, iitem, ncomp, eitem, jitem, ecomp, 1, " " )
1117  endif
1118 
1119  !laminated shell
1120  if( associated(fstrsolid%SHELL) .and. fstrsolid%output_ctrl(4)%outinfo%on(27) .and. is_33shell == 1 ) then
1121  allocate(clyr(2*ntot_lyr))
1122  do i=1,ntot_lyr
1123  write(cnum,"(i0)")i
1124  clyr(2*i-1)="_L"//trim(cnum)//"+"
1125  clyr(2*i )="_L"//trim(cnum)//"-"
1126  enddo
1127  do i=1,ntot_lyr
1128  call fstr_make_result_main( hecmesh, fstrsolid, fstrresult, &
1129  & fstrsolid%SHELL%LAYER(i)%PLUS, nitem, iitem, ncomp, eitem, jitem, ecomp, i+1, clyr(2*i-1) )
1130  call fstr_make_result_main( hecmesh, fstrsolid, fstrresult, &
1131  & fstrsolid%SHELL%LAYER(i)%MINUS, nitem, iitem, ncomp, eitem, jitem, ecomp, i+1, clyr(2*i ) )
1132  enddo
1133  deallocate(clyr)
1134  endif
1135 
1136  ! --- THERMAL STRAIN @node
1137  if( fstrsolid%output_ctrl(4)%outinfo%on(12) .and. associated(tnstrain) ) then
1138  ncomp = ncomp + 1
1139  nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(12), ndof )
1140  fstrresult%nn_dof(ncomp) = nn
1141  fstrresult%node_label(ncomp) = 'THERMAL_NodalSTRAIN'
1142  do i = 1, hecmesh%n_node
1143  do j = 1, nn
1144  fstrresult%node_val_item(nitem*(i-1)+j+iitem) = tnstrain(nn*(i-1)+j)
1145  enddo
1146  enddo
1147  iitem = iitem + nn
1148  endif
1149 
1150  ! --- CONTACT NORMAL FORCE @node
1151  if( fstrsolid%output_ctrl(4)%outinfo%on(30) .and. associated(fstrsolid%CONT_NFORCE) ) then
1152  ncomp = ncomp + 1
1153  nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(30), ndof )
1154  fstrresult%nn_dof(ncomp) = nn
1155  fstrresult%node_label(ncomp) = 'CONTACT_NFORCE'
1156  do i = 1, hecmesh%n_node
1157  do j = 1, nn
1158  fstrresult%node_val_item(nitem*(i-1)+j+iitem) = fstrsolid%CONT_NFORCE(nn*(i-1)+j)
1159  enddo
1160  enddo
1161  iitem = iitem + nn
1162  endif
1163 
1164  ! --- CONTACT FRICTION FORCE @node
1165  if( fstrsolid%output_ctrl(4)%outinfo%on(31) .and. associated(fstrsolid%CONT_FRIC) ) then
1166  ncomp = ncomp + 1
1167  nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(31), ndof )
1168  fstrresult%nn_dof(ncomp) = nn
1169  fstrresult%node_label(ncomp) = 'CONTACT_FRICTION'
1170  do i = 1, hecmesh%n_node
1171  do j = 1, nn
1172  fstrresult%node_val_item(nitem*(i-1)+j+iitem) = fstrsolid%CONT_FRIC(nn*(i-1)+j)
1173  enddo
1174  enddo
1175  iitem = iitem + nn
1176  endif
1177 
1178  ! --- CONTACT RELATIVE VELOCITY @node
1179  if( fstrsolid%output_ctrl(4)%outinfo%on(32) .and. associated(fstrsolid%CONT_RELVEL) ) then
1180  ncomp = ncomp + 1
1181  nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(32), ndof )
1182  fstrresult%nn_dof(ncomp) = nn
1183  fstrresult%node_label(ncomp) = 'CONTACT_RELVEL'
1184  do i = 1, hecmesh%n_node
1185  do j = 1, nn
1186  fstrresult%node_val_item(nitem*(i-1)+j+iitem) = fstrsolid%CONT_RELVEL(nn*(i-1)+j)
1187  enddo
1188  enddo
1189  iitem = iitem + nn
1190  endif
1191 
1192  ! --- CONTACT STATE @node
1193  if( fstrsolid%output_ctrl(4)%outinfo%on(33) .and. associated(fstrsolid%CONT_STATE) ) then
1194  ncomp = ncomp + 1
1195  nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(33), ndof )
1196  fstrresult%nn_dof(ncomp) = nn
1197  fstrresult%node_label(ncomp) = 'CONTACT_STATE'
1198  do i = 1, hecmesh%n_node
1199  do j = 1, nn
1200  fstrresult%node_val_item(nitem*(i-1)+j+iitem) = fstrsolid%CONT_STATE(nn*(i-1)+j)
1201  enddo
1202  enddo
1203  iitem = iitem + nn
1204  endif
1205 
1206  ! --- CONTACT NORMAL TRACTION @node
1207  if( fstrsolid%output_ctrl(4)%outinfo%on(36) .and. associated(fstrsolid%CONT_NTRAC) ) then
1208  ncomp = ncomp + 1
1209  nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(36), ndof )
1210  fstrresult%nn_dof(ncomp) = nn
1211  fstrresult%node_label(ncomp) = 'CONTACT_NTRACTION'
1212  do i = 1, hecmesh%n_node
1213  do j = 1, nn
1214  fstrresult%node_val_item(nitem*(i-1)+j+iitem) = fstrsolid%CONT_NTRAC(nn*(i-1)+j)
1215  enddo
1216  enddo
1217  iitem = iitem + nn
1218  endif
1219 
1220  ! --- CONTACT FRICTION TRACTION @node
1221  if( fstrsolid%output_ctrl(4)%outinfo%on(37) .and. associated(fstrsolid%CONT_FTRAC) ) then
1222  ncomp = ncomp + 1
1223  nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(37), ndof )
1224  fstrresult%nn_dof(ncomp) = nn
1225  fstrresult%node_label(ncomp) = 'CONTACT_FTRACTION'
1226  do i = 1, hecmesh%n_node
1227  do j = 1, nn
1228  fstrresult%node_val_item(nitem*(i-1)+j+iitem) = fstrsolid%CONT_FTRAC(nn*(i-1)+j)
1229  enddo
1230  enddo
1231  iitem = iitem + nn
1232  endif
1233 
1234  ! --- NODE ID @node
1235  if( fstrsolid%output_ctrl(4)%outinfo%on(38) ) then
1236  ncomp = ncomp + 1
1237  nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(38), ndof )
1238  fstrresult%nn_dof(ncomp) = nn
1239  fstrresult%node_label(ncomp) = 'NODE_ID'
1240  do i = 1, hecmesh%n_node
1241  fstrresult%node_val_item(nitem*(i-1)+1+iitem) = hecmesh%global_node_ID(i)
1242  enddo
1243  iitem = iitem + nn
1244  endif
1245 
1246  ! --- TEMPERATURE @node
1247  !if( fstrSOLID%output_ctrl(4)%outinfo%on(41) .and. associated(fstrSOLID%CONT_FTRAC) ) then
1248  ! ncomp = ncomp + 1
1249  ! nn = n_comp_valtype( fstrSOLID%output_ctrl(4)%outinfo%vtype(41), ndof )
1250  ! fstrRESULT%nn_dof(ncomp) = nn
1251  ! fstrRESULT%node_label(ncomp) = 'TEMPERATURE'
1252  ! do i = 1, hecMESH%n_node
1253  ! fstrRESULT%node_val_item(nitem*(i-1)+1+iitem) = fstrSOLID%global_node_ID(i)
1254  ! enddo
1255  ! iitem = iitem + nn
1256  !endif
1257 
1258 
1259  ! --- MATERIAL @elem
1260  if(fstrsolid%output_ctrl(4)%outinfo%on(34)) then
1261  ecomp = ecomp + 1
1262  nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(34), ndof )
1263  fstrresult%ne_dof(ecomp) = nn
1264  fstrresult%elem_label(ecomp) = 'MATERIAL_ID'
1265  ! hecMESH%section_ID holds the MPC or contact pair index for the pseudo
1266  ! elements of HEC-MW, not a section ID
1267  do i = 1, hecmesh%n_elem
1268  j = hecmesh%section_ID(i)
1269  if( j >= 1 .and. j <= hecmesh%section%n_sect ) then
1270  fstrresult%elem_val_item(eitem*(i-1)+1+jitem) = hecmesh%section%sect_mat_ID_item(j)
1271  else
1272  fstrresult%elem_val_item(eitem*(i-1)+1+jitem) = 0.d0
1273  endif
1274  enddo
1275  jitem = jitem + nn
1276  endif
1277 
1278  ! --- ELEM ID @elem
1279  if(fstrsolid%output_ctrl(4)%outinfo%on(39)) then
1280  ecomp = ecomp + 1
1281  nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(39), ndof )
1282  fstrresult%ne_dof(ecomp) = nn
1283  fstrresult%elem_label(ecomp) = 'ELEM_ID'
1284  do i = 1, hecmesh%n_elem
1285  fstrresult%elem_val_item(eitem*(i-1)+1+jitem) = hecmesh%global_elem_ID(i)
1286  enddo
1287  jitem = jitem + nn
1288  endif
1289 
1290  ! --- SECTION ID @elem
1291  if(fstrsolid%output_ctrl(4)%outinfo%on(40)) then
1292  ecomp = ecomp + 1
1293  nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(40), ndof )
1294  fstrresult%ne_dof(ecomp) = nn
1295  fstrresult%elem_label(ecomp) = 'SECTION_ID'
1296  do i = 1, hecmesh%n_elem
1297  fstrresult%elem_val_item(eitem*(i-1)+1+jitem) = hecmesh%section_ID(i)
1298  enddo
1299  jitem = jitem + nn
1300  endif
1301 
1302  ! --- ELEMACT flag @element
1303  if( fstrsolid%output_ctrl(4)%outinfo%on(44) ) then
1304  ecomp = ecomp + 1
1305  nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(44), ndof )
1306  fstrresult%ne_dof(ecomp) = nn
1307  fstrresult%elem_label(ecomp) = 'ELEMACT'
1308  do i = 1, hecmesh%n_elem
1309  if( fstrsolid%elements(i)%elemact_flag /= kelact_inactive ) then
1310  fstrresult%elem_val_item(eitem*(i-1)+1+jitem) = 1.d0
1311  else
1312  fstrresult%elem_val_item(eitem*(i-1)+1+jitem) = 0.d0
1313  end if
1314  enddo
1315  jitem = jitem + nn
1316  endif
1317 
1318  if( present(label_suffix) ) then
1319  do i = 1, fstrresult%nn_component
1320  fstrresult%node_label(i) = trim(fstrresult%node_label(i))//trim(label_suffix)
1321  enddo
1322  do i = 1, fstrresult%ne_component
1323  fstrresult%elem_label(i) = trim(fstrresult%elem_label(i))//trim(label_suffix)
1324  enddo
1325  endif
1326 
1327  end subroutine fstr_make_result
1328 
1329  !C***
1333  !C***
1334  subroutine fstr_merge_result( hecMESH, fstrRESULT, fstrRESULT_add )
1335  use m_fstr
1336  use hecmw_util
1337 
1338  implicit none
1339  type (hecmwst_local_mesh) :: hecmesh
1340  type (hecmwst_result_data) :: fstrresult
1341  type (hecmwst_result_data) :: fstrresult_add
1342 
1343  type (hecmwst_result_data) :: res
1344  integer(kind=kint) :: i, j, gitem, nitem, eitem, nitem_a, eitem_a
1345 
1346  gitem = sum( fstrresult%ng_dof(1:fstrresult%ng_component) )
1347  nitem = sum( fstrresult%nn_dof(1:fstrresult%nn_component) )
1348  eitem = sum( fstrresult%ne_dof(1:fstrresult%ne_component) )
1349  nitem_a = sum( fstrresult_add%nn_dof(1:fstrresult_add%nn_component) )
1350  eitem_a = sum( fstrresult_add%ne_dof(1:fstrresult_add%ne_component) )
1351 
1352  call hecmw_nullify_result_data( res )
1353  res%ng_component = fstrresult%ng_component
1354  res%nn_component = fstrresult%nn_component + fstrresult_add%nn_component
1355  res%ne_component = fstrresult%ne_component + fstrresult_add%ne_component
1356  allocate( res%ng_dof(res%ng_component), res%global_label(res%ng_component) )
1357  allocate( res%nn_dof(res%nn_component), res%node_label(res%nn_component) )
1358  allocate( res%ne_dof(res%ne_component), res%elem_label(res%ne_component) )
1359  allocate( res%global_val_item(gitem) )
1360  allocate( res%node_val_item((nitem+nitem_a)*hecmesh%n_node) )
1361  allocate( res%elem_val_item((eitem+eitem_a)*hecmesh%n_elem) )
1362 
1363  res%ng_dof(1:res%ng_component) = fstrresult%ng_dof(1:res%ng_component)
1364  res%global_label(1:res%ng_component) = fstrresult%global_label(1:res%ng_component)
1365  res%global_val_item(1:gitem) = fstrresult%global_val_item(1:gitem)
1366 
1367  res%nn_dof(1:fstrresult%nn_component) = fstrresult%nn_dof(1:fstrresult%nn_component)
1368  res%nn_dof(fstrresult%nn_component+1:) = fstrresult_add%nn_dof(1:fstrresult_add%nn_component)
1369  res%node_label(1:fstrresult%nn_component) = fstrresult%node_label(1:fstrresult%nn_component)
1370  res%node_label(fstrresult%nn_component+1:) = fstrresult_add%node_label(1:fstrresult_add%nn_component)
1371  do i = 1, hecmesh%n_node
1372  do j = 1, nitem
1373  res%node_val_item((nitem+nitem_a)*(i-1)+j) = fstrresult%node_val_item(nitem*(i-1)+j)
1374  enddo
1375  do j = 1, nitem_a
1376  res%node_val_item((nitem+nitem_a)*(i-1)+nitem+j) = fstrresult_add%node_val_item(nitem_a*(i-1)+j)
1377  enddo
1378  enddo
1379 
1380  res%ne_dof(1:fstrresult%ne_component) = fstrresult%ne_dof(1:fstrresult%ne_component)
1381  res%ne_dof(fstrresult%ne_component+1:) = fstrresult_add%ne_dof(1:fstrresult_add%ne_component)
1382  res%elem_label(1:fstrresult%ne_component) = fstrresult%elem_label(1:fstrresult%ne_component)
1383  res%elem_label(fstrresult%ne_component+1:) = fstrresult_add%elem_label(1:fstrresult_add%ne_component)
1384  do i = 1, hecmesh%n_elem
1385  do j = 1, eitem
1386  res%elem_val_item((eitem+eitem_a)*(i-1)+j) = fstrresult%elem_val_item(eitem*(i-1)+j)
1387  enddo
1388  do j = 1, eitem_a
1389  res%elem_val_item((eitem+eitem_a)*(i-1)+eitem+j) = fstrresult_add%elem_val_item(eitem_a*(i-1)+j)
1390  enddo
1391  enddo
1392 
1393  call hecmw_result_free( fstrresult )
1394  fstrresult = res
1395  end subroutine fstr_merge_result
1396 
1397  subroutine fstr_make_result_main( hecMESH, fstrSOLID, fstrRESULT, RES, nitem, &
1398  & iitem, ncomp, eitem, jitem, ecomp, nlyr, clyr )
1399  use m_fstr
1400  use m_out
1401  use m_static_lib
1402  use mmaterial
1403  use hecmw_util
1404 
1405  implicit none
1406  type (hecmwST_local_mesh) :: hecMESH
1407  type (fstr_solid) :: fstrSOLID
1408  type (hecmwST_result_data):: fstrRESULT
1409  type (fstr_solid_physic_val) :: RES
1410  integer(kind=kint) :: istep, flag
1411  integer(kind=kint) :: n_lyr, cid
1412 
1413  character(len=HECMW_HEADER_LEN) :: header
1414  character(len=HECMW_NAME_LEN) :: s, label, nameID, addfname
1415  character(len=16) :: clyr
1416  character(len=12) :: cnum
1417  integer(kind=kint) :: i, j, k, ndof, mdof, id, nitem, eitem, nn, mm, ngauss, it
1418  integer(kind=kint) :: iitem, ncomp, jitem, ecomp, nlyr
1419  integer(kind=kint) :: isect, cdsys_ID, serr
1420  real(kind=kreal) :: coords(3,3), coordsys(3, 3)
1421  ndof = hecmesh%n_dof
1422 
1423  ! --- STRAIN @node
1424  if( fstrsolid%output_ctrl(4)%outinfo%on(3)) then
1425  nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(3), ndof )
1426  ncomp = ncomp + 1
1427  fstrresult%nn_dof(ncomp) = nn
1428  fstrresult%node_label(ncomp) = 'NodalSTRAIN'//trim(clyr)
1429  do i = 1, hecmesh%n_node
1430  do j = 1, nn
1431  fstrresult%node_val_item(nitem*(i-1)+j+iitem) = res%STRAIN(nn*(i-1)+j)
1432  enddo
1433  enddo
1434  iitem = iitem + nn
1435  endif
1436 
1437  ! --- STRESS @node
1438  if(fstrsolid%output_ctrl(4)%outinfo%on(4)) then
1439  ncomp = ncomp + 1
1440  nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(4), ndof )
1441  fstrresult%nn_dof(ncomp) = nn
1442  fstrresult%node_label(ncomp) = 'NodalSTRESS'//trim(clyr)
1443  do i = 1, hecmesh%n_node
1444  do j = 1, nn
1445  fstrresult%node_val_item(nitem*(i-1)+j+iitem) = res%STRESS((nn)*(i-1)+j)
1446  enddo
1447  enddo
1448  iitem = iitem + nn
1449  endif
1450 
1451  ! --- MISES @node
1452  if(fstrsolid%output_ctrl(4)%outinfo%on(5)) then
1453  ncomp = ncomp + 1
1454  nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(5), ndof )
1455  fstrresult%nn_dof(ncomp) = nn
1456  fstrresult%node_label(ncomp) = 'NodalMISES'//trim(clyr)
1457  do i = 1, hecmesh%n_node
1458  fstrresult%node_val_item(nitem*(i-1)+1+iitem) = res%MISES(i)
1459  enddo
1460  iitem = iitem + nn
1461  endif
1462 
1463  ! --- Princ STRESS @node
1464  if(fstrsolid%output_ctrl(4)%outinfo%on(19)) then
1465  ncomp = ncomp + 1
1466  nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(19), ndof )
1467  fstrresult%nn_dof(ncomp) = nn
1468  fstrresult%node_label(ncomp) = 'NodalPrincipalSTRESS'//trim(clyr)
1469  do i = 1, hecmesh%n_node
1470  do j = 1, nn
1471  fstrresult%node_val_item(nitem*(i-1)+j+iitem) = res%PSTRESS((nn)*(i-1)+j)
1472  enddo
1473  enddo
1474  iitem = iitem + nn
1475  endif
1476 
1477  ! --- Princ STRESS Vector @node
1478  if(fstrsolid%output_ctrl(4)%outinfo%on(23)) then
1479  do k=1,3
1480  write(cnum, '(i0)') k
1481  ncomp = ncomp + 1
1482  nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(23), ndof )
1483  fstrresult%nn_dof(ncomp) = nn
1484  fstrresult%node_label(ncomp) = 'NodalPrincipalSTRESSVector'//trim(cnum)//trim(clyr)
1485  do i = 1, hecmesh%n_node
1486  do j = 1, nn
1487  fstrresult%node_val_item(nitem*(i-1)+j+iitem) = res%PSTRESS_VECT((nn)*(i-1)+j,k)
1488  enddo
1489  enddo
1490  iitem = iitem + nn
1491  end do
1492  endif
1493 
1494  ! --- Princ STRAIN @node
1495  if( fstrsolid%output_ctrl(4)%outinfo%on(21)) then
1496  nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(21), ndof )
1497  ncomp = ncomp + 1
1498  fstrresult%nn_dof(ncomp) = nn
1499  fstrresult%node_label(ncomp) = 'NodalPrincipalSTRAIN'//trim(clyr)
1500  do i = 1, hecmesh%n_node
1501  do j = 1, nn
1502  fstrresult%node_val_item(nitem*(i-1)+j+iitem) = res%PSTRAIN(nn*(i-1)+j)
1503  enddo
1504  enddo
1505  iitem = iitem + nn
1506  endif
1507 
1508  ! --- Princ STRAIN Vector @node
1509  if( fstrsolid%output_ctrl(4)%outinfo%on(25)) then
1510  do k=1,3
1511  write(cnum, '(i0)') k
1512  nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(25), ndof )
1513  ncomp = ncomp + 1
1514  fstrresult%nn_dof(ncomp) = nn
1515  fstrresult%node_label(ncomp) = 'NodalPrincipalSTRAINVector'//trim(cnum)//trim(clyr)
1516  do i = 1, hecmesh%n_node
1517  do j = 1, nn
1518  fstrresult%node_val_item(nitem*(i-1)+j+iitem) = res%PSTRAIN_VECT(nn*(i-1)+j,k)
1519  enddo
1520  enddo
1521  iitem = iitem + nn
1522  enddo
1523  endif
1524 
1525  ! --- STRAIN @elem
1526  if( fstrsolid%output_ctrl(4)%outinfo%on(6)) then
1527  nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(6), ndof )
1528  ecomp = ecomp + 1
1529  fstrresult%ne_dof(ecomp) = nn
1530  fstrresult%elem_label(ecomp) = 'ElementalSTRAIN'
1531  do i = 1, hecmesh%n_elem
1532  do j = 1, nn
1533  fstrresult%elem_val_item(eitem*(i-1)+j+jitem) = res%ESTRAIN(nn*(i-1)+j)
1534  enddo
1535  enddo
1536  jitem = jitem + nn
1537  endif
1538 
1539  ! --- STRESS @elem
1540  if(fstrsolid%output_ctrl(4)%outinfo%on(7)) then
1541  ecomp = ecomp + 1
1542  nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(7), ndof )
1543  fstrresult%ne_dof(ecomp) = nn
1544  fstrresult%elem_label(ecomp) = 'ElementalSTRESS'
1545  do i = 1, hecmesh%n_elem
1546  do j = 1, nn
1547  fstrresult%elem_val_item(eitem*(i-1)+j+jitem) = res%ESTRESS((nn)*(i-1)+j)
1548  enddo
1549  enddo
1550  jitem = jitem + nn
1551  endif
1552 
1553  ! --- MISES @elem
1554  if(fstrsolid%output_ctrl(4)%outinfo%on(8)) then
1555  ecomp = ecomp + 1
1556  nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(8), ndof )
1557  fstrresult%ne_dof(ecomp) = nn
1558  fstrresult%elem_label(ecomp) = 'ElementalMISES'
1559  do i = 1, hecmesh%n_elem
1560  fstrresult%elem_val_item(eitem*(i-1)+1+jitem) = res%EMISES(i)
1561  enddo
1562  jitem = jitem + nn
1563  endif
1564 
1565  ! --- Principal_STRESS @element
1566  if(fstrsolid%output_ctrl(4)%outinfo%on(20)) then
1567  ecomp = ecomp + 1
1568  nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(20), ndof )
1569  fstrresult%ne_dof(ecomp) = nn
1570  fstrresult%elem_label(ecomp) = 'ElementalPrincipalSTRESS'
1571  do i = 1, hecmesh%n_elem
1572  do j = 1, nn
1573  fstrresult%elem_val_item(eitem*(i-1)+j+jitem) = res%EPSTRESS((nn)*(i-1)+j)
1574  enddo
1575  enddo
1576  jitem = jitem + nn
1577  endif
1578 
1579  ! --- Principal_STRAIN @element
1580  if(fstrsolid%output_ctrl(4)%outinfo%on(22)) then
1581  ecomp = ecomp + 1
1582  nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(22), ndof )
1583  fstrresult%ne_dof(ecomp) = nn
1584  fstrresult%elem_label(ecomp) = 'ElementalPrincipalSTRAIN'
1585  do i = 1, hecmesh%n_elem
1586  do j = 1, nn
1587  fstrresult%elem_val_item(eitem*(i-1)+j+jitem) = res%EPSTRAIN((nn)*(i-1)+j)
1588  enddo
1589  enddo
1590  jitem = jitem + nn
1591  endif
1592 
1593  ! --- ELEM PRINC STRESS VECTOR
1594  if(fstrsolid%output_ctrl(4)%outinfo%on(24)) then
1595  do k = 1, 3
1596  write(cnum,'(i0)')k
1597  ecomp = ecomp + 1
1598  nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(24), ndof )
1599  fstrresult%ne_dof(ecomp) = nn
1600  fstrresult%elem_label(ecomp) = 'ElementalPrincipalSTRESSVector'//trim(cnum)
1601  do i = 1, hecmesh%n_elem
1602  do j = 1, nn
1603  fstrresult%elem_val_item(eitem*(i-1)+j+jitem) = res%EPSTRESS_VECT((nn)*(i-1)+j,k)
1604  enddo
1605  enddo
1606  jitem = jitem + nn
1607  enddo
1608  endif
1609 
1610  ! --- ELEM PRINC STRAIN VECTOR
1611  if(fstrsolid%output_ctrl(4)%outinfo%on(26)) then
1612  do k = 1, 3
1613  write(cnum,'(i0)')k
1614  ecomp = ecomp + 1
1615  nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(26), ndof )
1616  fstrresult%ne_dof(ecomp) = nn
1617  fstrresult%elem_label(ecomp) = 'ElementalPrincipalSTRAINVector'//trim(cnum)
1618  do i = 1, hecmesh%n_elem
1619  do j = 1, nn
1620  fstrresult%elem_val_item(eitem*(i-1)+j+jitem) = res%EPSTRAIN_VECT((nn)*(i-1)+j,k)
1621  enddo
1622  enddo
1623  jitem = jitem + nn
1624  enddo
1625  endif
1626 
1627  ! --- PLSTRAIN @elem
1628  if(fstrsolid%output_ctrl(4)%outinfo%on(43)) then
1629  ecomp = ecomp + 1
1630  nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(43), ndof )
1631  fstrresult%ne_dof(ecomp) = nn
1632  fstrresult%elem_label(ecomp) = 'ElementalPLSTRAIN'
1633  do i = 1, hecmesh%n_elem
1634  res%EPLSTRAIN(i) = 0.d0
1635  do j = 1, size(fstrsolid%elements(i)%gausses)
1636  res%EPLSTRAIN(i) = res%EPLSTRAIN(i) + fstrsolid%elements(i)%gausses(j)%plstrain
1637  enddo
1638  res%EPLSTRAIN(i) = res%EPLSTRAIN(i) / size(fstrsolid%elements(i)%gausses)
1639  fstrresult%elem_val_item(eitem*(i-1)+1+jitem) = res%EPLSTRAIN(i)
1640  enddo
1641  jitem = jitem + nn
1642  endif
1643 
1644  ! --- ORIENTATION @elem
1645  if(fstrsolid%output_ctrl(4)%outinfo%on(42)) then
1646  do i = 1, 3
1647  write(cnum,'(i0)')i
1648  ecomp = ecomp + 1
1649  nn = n_comp_valtype( fstrsolid%output_ctrl(4)%outinfo%vtype(42), ndof )
1650  fstrresult%ne_dof(ecomp) = nn
1651  fstrresult%elem_label(ecomp) = 'ORIENTATION'//trim(cnum)
1652  enddo
1653  ! hecMESH%section_ID holds the MPC or contact pair index for the pseudo
1654  ! elements of HEC-MW, not a section ID
1655  do i = 1, hecmesh%n_elem
1656  isect = hecmesh%section_ID(i)
1657  if( isect >= 1 .and. isect <= hecmesh%section%n_sect ) then
1658  cdsys_id = hecmesh%section%sect_orien_ID(isect)
1659  else
1660  cdsys_id = -1
1661  endif
1662  if(cdsys_id == -1) then
1663  coordsys(:,:) = 0.0d0
1664  else
1665  call get_coordsys(cdsys_id, hecmesh, fstrsolid, coords, i)
1666  call set_localcoordsys( coords, g_localcoordsys(cdsys_id), coordsys(:, :), serr )
1667  endif
1668  do j = 1, 3
1669  do k = 1, 3
1670  fstrresult%elem_val_item(eitem*(i-1)+jitem+nn*(j-1)+k) = coordsys(j,k)
1671  enddo
1672  enddo
1673  enddo
1674  jitem = jitem + 3*nn
1675  endif
1676 
1677  end subroutine fstr_make_result_main
1678 
1679  subroutine fstr_reorder_node_shell(fstrSOLID, hecMESH, unode)
1680  use m_fstr
1681  use m_out
1682  use m_static_lib
1683 
1684  implicit none
1685  type (fstr_solid) :: fstrsolid
1686  type (hecmwst_local_mesh) :: hecmesh
1687  integer(kind=kint) :: i, j, k, itype, is, ie, ic_type, js, icel
1688  integer(kind=kint) :: mm, n1, n2
1689  real(kind=kreal), allocatable :: unode(:)
1690 
1691  do itype = 1, hecmesh%n_elem_type
1692  is = hecmesh%elem_type_index(itype-1) + 1
1693  ie = hecmesh%elem_type_index(itype )
1694  ic_type = hecmesh%elem_type_item(itype)
1695  if(ic_type == 781)then
1696  do icel = is, ie
1697  js = hecmesh%elem_node_index(icel-1)
1698  do j = 1, 4
1699  n1 = hecmesh%elem_node_item(js+j )
1700  n2 = hecmesh%elem_node_item(js+j+4)
1701  unode(3*n2-2) = unode(3*n1-2)
1702  unode(3*n2-1) = unode(3*n1-1)
1703  unode(3*n2 ) = unode(3*n1 )
1704  enddo
1705  enddo
1706  elseif(ic_type == 761)then
1707  do icel = is, ie
1708  js = hecmesh%elem_node_index(icel-1)
1709  do j = 1, 3
1710  n1 = hecmesh%elem_node_item(js+j )
1711  n2 = hecmesh%elem_node_item(js+j+3)
1712  unode(3*n2-2) = unode(3*n1-2)
1713  unode(3*n2-1) = unode(3*n1-1)
1714  unode(3*n2 ) = unode(3*n1 )
1715  enddo
1716  enddo
1717  endif
1718  enddo
1719 
1720  end subroutine fstr_reorder_node_shell
1721 
1722  subroutine fstr_reorder_rot_shell(fstrSOLID, hecMESH, unode)
1723  use m_fstr
1724  use m_out
1725  use m_static_lib
1726 
1727  implicit none
1728  type (fstr_solid) :: fstrsolid
1729  type (hecmwst_local_mesh) :: hecmesh
1730  integer(kind=kint) :: i, j, k, itype, is, ie, ic_type, js, icel
1731  integer(kind=kint) :: mm, n1, n2
1732  real(kind=kreal), allocatable :: unode(:)
1733 
1734  do itype = 1, hecmesh%n_elem_type
1735  is = hecmesh%elem_type_index(itype-1) + 1
1736  ie = hecmesh%elem_type_index(itype )
1737  ic_type = hecmesh%elem_type_item(itype)
1738  if(ic_type == 781)then
1739  do icel = is, ie
1740  js = hecmesh%elem_node_index(icel-1)
1741  do j = 1, 4
1742  n1 = hecmesh%elem_node_item(js+j)
1743  n2 = hecmesh%elem_node_item(js+j+4)
1744  unode(3*n1-2) = fstrsolid%unode(3*n2-2)
1745  unode(3*n1-1) = fstrsolid%unode(3*n2-1)
1746  unode(3*n1 ) = fstrsolid%unode(3*n2 )
1747  unode(3*n2-2) = fstrsolid%unode(3*n2-2)
1748  unode(3*n2-1) = fstrsolid%unode(3*n2-1)
1749  unode(3*n2 ) = fstrsolid%unode(3*n2 )
1750  enddo
1751  enddo
1752  elseif(ic_type == 761)then
1753  do icel = is, ie
1754  js = hecmesh%elem_node_index(icel-1)
1755  do j = 1, 3
1756  n1 = hecmesh%elem_node_item(js+j)
1757  n2 = hecmesh%elem_node_item(js+j+3)
1758 
1759  unode(3*n1-2) = fstrsolid%unode(3*n2-2)
1760  unode(3*n1-1) = fstrsolid%unode(3*n2-1)
1761  unode(3*n1 ) = fstrsolid%unode(3*n2 )
1762  unode(3*n2-2) = fstrsolid%unode(3*n2-2)
1763  unode(3*n2-1) = fstrsolid%unode(3*n2-1)
1764  unode(3*n2 ) = fstrsolid%unode(3*n2 )
1765  enddo
1766  enddo
1767  endif
1768  enddo
1769 
1770  end subroutine fstr_reorder_rot_shell
1771 
1772  subroutine fstr_reorder_node_beam(fstrSOLID, hecMESH, unode)
1773  use m_fstr
1774  use m_out
1775  use m_static_lib
1776 
1777  implicit none
1778  type (fstr_solid) :: fstrsolid
1779  type (hecmwst_local_mesh) :: hecmesh
1780  integer(kind=kint) :: i, j, k, itype, is, ie, ic_type, js, icel
1781  integer(kind=kint) :: mm, a, b
1782  real(kind=kreal), allocatable :: unode(:)
1783 
1784  do itype = 1, hecmesh%n_elem_type
1785  is = hecmesh%elem_type_index(itype-1) + 1
1786  ie = hecmesh%elem_type_index(itype )
1787  ic_type = hecmesh%elem_type_item(itype)
1788  if(ic_type == 641)then
1789  do icel = is, ie
1790  js = hecmesh%elem_node_index(icel-1)
1791  do j = 1, 2
1792  a = hecmesh%elem_node_item(js+j)
1793  b = hecmesh%elem_node_item(js+j+2)
1794  unode(3*b-2) = unode(3*a-2)
1795  unode(3*b-1) = unode(3*a-1)
1796  unode(3*b ) = unode(3*a )
1797  enddo
1798  enddo
1799  endif
1800  enddo
1801 
1802  end subroutine fstr_reorder_node_beam
1803 
1804  subroutine setup_contact_output_variables( hecMESH, fstrSOLID, phase, dtime, expflag )
1805  use m_fstr
1806  use hecmw_util
1807  use mcontact
1808  implicit none
1809  type(hecmwst_local_mesh), intent(in) :: hecmesh
1810  type (fstr_solid), intent(inout) :: fstrsolid
1811  integer(kind=kint), intent(in) :: phase
1812  real(kind=kreal), optional, intent(in) :: dtime
1813  logical, optional, intent(in) :: expflag
1814 
1815  integer(kind=kint), parameter :: nval = 10
1816  logical, save :: updated(nval) = .false.
1817  integer(kind=kint) :: ndof, i
1818  real(kind=kreal) :: area, dt_use
1819 
1820  ndof = hecmesh%n_dof
1821 
1822  if( phase == -1 ) then
1823  updated(1:nval) = .false.
1824  return
1825  else
1826  if( phase /= 3 .and. phase /= 4 ) return !irregular case
1827  end if
1828 
1829  ! Update contact state vectors if dtime is provided
1830  if( present(dtime) .and. dtime > 0.d0 ) then
1831  dt_use = dtime
1832  else
1833  dt_use = 1.d0 ! default value if dtime not available
1834  endif
1835  if( .not. updated(3) .and. .not. updated(4) ) then
1836  call fstr_update_contact_state_vectors( fstrsolid, dt_use )
1837  endif
1838 
1839  ! --- CONTACT NORMAL FORCE @node
1840  if( fstrsolid%output_ctrl(phase)%outinfo%on(30) .and. associated(fstrsolid%CONT_NFORCE) ) then
1841  if( .not. updated(1) ) then
1842  ! Explicit dynamic has no Lagrange matrix, so the solver cannot fill CONT_NFORCE
1843  ! via fstr_calc_contact_output_force. Build it here from the stored contact
1844  ! multipliers before the parallel aggregation. Implicit/static keep the value
1845  ! already computed inside the solver (flag absent), so this is a no-op for them.
1846  if( present(expflag) .and. expflag ) then
1847  call fstr_calc_contact_output_force_exp( hecmesh, fstrsolid )
1848  end if
1849  if( paracontactflag ) then
1850  call fstr_setup_parancon_contactvalue(hecmesh,ndof,fstrsolid%CONT_NFORCE,1)
1851  end if
1852  end if
1853  updated(1) = .true.
1854  endif
1855 
1856  ! --- CONTACT FRICTION FORCE @node
1857  if( fstrsolid%output_ctrl(phase)%outinfo%on(31) .and. associated(fstrsolid%CONT_FRIC) ) then
1858  if( paracontactflag .and. .not. updated(2)) then
1859  call fstr_setup_parancon_contactvalue(hecmesh,ndof,fstrsolid%CONT_FRIC,1)
1860  end if
1861  updated(2) = .true.
1862  endif
1863 
1864  ! --- CONTACT RELATIVE VELOCITY @node
1865  if( fstrsolid%output_ctrl(phase)%outinfo%on(32) .and. associated(fstrsolid%CONT_RELVEL) ) then
1866  if( paracontactflag .and. .not. updated(3)) then
1867  call fstr_setup_parancon_contactvalue(hecmesh,ndof,fstrsolid%CONT_RELVEL,1)
1868  end if
1869  updated(3) = .true.
1870  endif
1871 
1872  ! --- CONTACT STATE @node
1873  if( fstrsolid%output_ctrl(phase)%outinfo%on(33) .and. associated(fstrsolid%CONT_STATE) ) then
1874  if( paracontactflag .and. .not. updated(4)) then
1875  call fstr_setup_parancon_contactvalue(hecmesh,1,fstrsolid%CONT_STATE,2)
1876  end if
1877  updated(4) = .true.
1878  endif
1879 
1880  ! --- CONTACT AREA for CONTACT TRACTION
1881  if( fstrsolid%output_ctrl(phase)%outinfo%on(36) .or. fstrsolid%output_ctrl(phase)%outinfo%on(37) ) then
1882  if( .not. updated(5)) call calc_contact_area( hecmesh, fstrsolid, 0 )
1883  ! fstr_setup_parancon_contactvalue is not necessary because
1884  ! contact area is calculated from original surface group
1885  end if
1886 
1887  ! --- CONTACT NORMAL TRACTION @node
1888  if( fstrsolid%output_ctrl(phase)%outinfo%on(36) .and. associated(fstrsolid%CONT_NTRAC) ) then
1889  if( paracontactflag .and. .not. updated(6)) then
1890  if( .not. updated(1)) call fstr_setup_parancon_contactvalue(hecmesh,ndof,fstrsolid%CONT_NFORCE,1)
1891  end if
1892  fstrsolid%CONT_NTRAC(:) = 0.d0
1893  do i=1,hecmesh%nn_internal
1894  area = fstrsolid%CONT_AREA(i)
1895  if( area < 1.d-16 ) cycle
1896  fstrsolid%CONT_NTRAC(3*i-2:3*i) = fstrsolid%CONT_NFORCE(3*i-2:3*i)/area
1897  end do
1898  updated(6) = .true.
1899  endif
1900 
1901  ! --- CONTACT FRICTION TRACTION @node
1902  if( fstrsolid%output_ctrl(phase)%outinfo%on(37) .and. associated(fstrsolid%CONT_FTRAC) ) then
1903  if( paracontactflag .and. .not. updated(7)) then
1904  if( .not. updated(1)) call fstr_setup_parancon_contactvalue(hecmesh,ndof,fstrsolid%CONT_FRIC,1)
1905  end if
1906  fstrsolid%CONT_FTRAC(:) = 0.d0
1907  do i=1,hecmesh%nn_internal
1908  area = fstrsolid%CONT_AREA(i)
1909  if( area < 1.d-16 ) cycle
1910  fstrsolid%CONT_FTRAC(3*i-2:3*i) = fstrsolid%CONT_FRIC(3*i-2:3*i)/area
1911  end do
1912  updated(7) = .true.
1913  endif
1914 
1915  end subroutine
1916 
1917 end module m_make_result
I/O and Utility.
Definition: hecmw_util_f.F90:7
integer(kind=4), parameter kreal
This module defines common data and basic structures for analysis.
Definition: m_fstr.F90:15
subroutine get_coordsys(cdsys_ID, hecMESH, fstrSOLID, coords, icel)
This subroutine fetch coords defined by local coordinate system.
Definition: m_fstr.F90:1142
logical paracontactflag
PARALLEL CONTACT FLAG.
Definition: m_fstr.F90:107
This module provide a function to prepare output of static analysis.
Definition: make_result.f90:6
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 result_add(dtype, n_dof, label, label_suffix, data)
subroutine, public fstr_reorder_node_beam(fstrSOLID, hecMESH, unode)
subroutine fstr_make_result_main(hecMESH, fstrSOLID, fstrRESULT, RES, nitem, iitem, ncomp, eitem, jitem, ecomp, nlyr, clyr)
subroutine, public 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...
Definition: make_result.f90:80
subroutine, public setup_contact_output_variables(hecMESH, fstrSOLID, phase, dtime, expflag)
subroutine, public fstr_reorder_rot_shell(fstrSOLID, hecMESH, unode)
subroutine, public fstr_write_result(hecMESH, fstrSOLID, fstrPARAM, istep, time, flag, fstrDYNAMIC)
OUTPUT result file for static and dynamic analysis.
Definition: make_result.f90:24
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.
Definition: m_out.f90:6
integer function n_comp_valtype(vtype, ndim)
Definition: m_out.f90:204
This modules just summarizes all modules used in static analysis.
Definition: static_LIB.f90:6
Top-level contact analysis module (System level)
subroutine, public fstr_update_contact_state_vectors(fstrSOLID, dt)
Update contact state output vectors for all contacts.
subroutine, public fstr_calc_contact_output_force_exp(hecMESH, fstrSOLID)
Explicit-dynamic counterpart of fstr_calc_contact_output_force.
This module summarizes all information of material properties.
Definition: material.f90:6
Data for DYNAMIC ANSLYSIS (fstrDYNAMIC)
Definition: m_fstr.F90:540
FSTR INNER CONTROL PARAMETERS (fstrPARAM)
Definition: m_fstr.F90:161