FrontISTR  6.0.0
Large-scale structural analysis program with finit element method
dynamic_mat_ass_load.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 !-------------------------------------------------------------------------------
6 
8 contains
9 
10  !C
11  !C***
13  !C***
14  !C
15  subroutine dynamic_mat_ass_load(cstep, t_curr, hecMESH, hecMAT, fstrSOLID, fstrDYNAMIC, fstrPARAM, iter )
16 
17  use m_fstr
18  use m_static_lib
19  use m_fstr_precheck
20  use m_fstr_elemact
21  use m_table_dyn
22  use m_common_struct
23  use m_utilities
24 
25  implicit none
26  integer(kind=kint) :: cstep
27  real(kind=kreal) :: t_curr
28  type(hecmwst_matrix) :: hecmat
29  type(hecmwst_local_mesh) :: hecMESH
30  type(fstr_solid) :: fstrSOLID
31  type(fstr_dynamic) :: fstrDYNAMIC
32  type(fstr_param) :: fstrPARAM
33 
34  real(kind=kreal) :: xx(20), yy(20), zz(20)
35  real(kind=kreal) :: params(0:6)
36  real(kind=kreal) :: vect(60)
37  integer(kind=kint) :: iwk(60)
38  integer(kind=kint) :: nodLocal(20)
39  real(kind=kreal) :: tt(20), tt0(20), coords(3,3)
40  real(kind=kreal),pointer:: temp(:)
41  integer(kind=kint) :: ndof, ig0, ig, ityp, ltype, iS0, iE0, ik, in, i, j, grpid
42  integer(kind=kint) :: icel, ic_type, nn, is, isect, id, iset, nsize
43  integer(kind=kint) :: itype, iE, cdsys_ID
44  real(kind=kreal) :: val, rho, thick, pa1
45  logical :: fg_surf
46 
47  integer(kind=kint) :: flag_u
48  integer(kind=kint), optional :: iter
49  real(kind=kreal) :: f_t, t_t
50 
51  integer(kind=kint) :: iiS, idofS, idofE
52  real(kind=kreal) :: ecoord(3, 20)
53  real(kind=kreal) :: v(6, 20), dv(6, 20), r(6*20)
54  real(kind=kreal) :: rhs
55  real(kind=kreal) :: unode_tmp(hecmat%NDOF*hecmesh%n_node)
56 
57  !for torque load
58  integer(kind=kint) :: n_rot, rid, n_nodes, idof
59  type(trotinfo) :: rinfo
60  real(kind=kreal) :: tval, normal(3), ccoord(3), cdisp(3), cdiff(3)
61 
62  ndof = hecmat%NDOF
63  call hecmw_mat_clear_b( hecmat )
64 
65  ! ----- elemact element
66  if( fstrsolid%elemact%ELEMACT_egrp_tot > 0 ) then
67  t_t = fstrdynamic%t_curr
68  if( fstrdynamic%idx_eqa == 11 ) t_t = t_t - fstrdynamic%t_delta
69  call fstr_update_elemact_solid( hecmesh, fstrsolid, 1, t_t )
70  end if
71 
72  !C
73  !C CLOAD
74  !C
75  n_rot = fstrsolid%CLOAD_ngrp_rot
76  if( n_rot > 0 ) call fstr_rotinfo_init(n_rot, rinfo)
77 
78  do ig0 = 1, fstrsolid%CLOAD_ngrp_tot
79  grpid = fstrsolid%CLOAD_ngrp_GRPID(ig0)
80  if( .not. fstr_isloadactive( fstrsolid, grpid, cstep ) ) cycle
81 
82  ig = fstrsolid%CLOAD_ngrp_ID(ig0)
83  ityp = fstrsolid%CLOAD_ngrp_DOF(ig0)
84  val = fstrsolid%CLOAD_ngrp_val(ig0)
85 
86  flag_u = 0
87  call fstr_get_amplitude_dyn(hecmesh, fstrsolid, fstrdynamic, ig0, t_curr, val, flag_u)
88 
89  is0= hecmesh%node_group%grp_index(ig-1)+1
90  ie0= hecmesh%node_group%grp_index(ig )
91 
92  if( fstrsolid%CLOAD_ngrp_rotID(ig0) > 0 ) then ! setup torque load information
93  rid = fstrsolid%CLOAD_ngrp_rotID(ig0)
94  if( .not. rinfo%conds(rid)%active ) then
95  rinfo%conds(rid)%active = .true.
96  rinfo%conds(rid)%center_ngrp_id = fstrsolid%CLOAD_ngrp_centerID(ig0)
97  rinfo%conds(rid)%torque_ngrp_id = ig
98  endif
99  if( ityp>ndof ) ityp = ityp-ndof
100  rinfo%conds(rid)%vec(ityp) = val
101  cycle
102  endif
103 
104  do ik = is0, ie0
105  in = hecmesh%node_group%grp_item(ik)
106  hecmat%B( ndof*(in-1)+ityp ) = hecmat%B( ndof*(in-1)+ityp )+val
107  enddo
108  enddo
109 
110  !Add torque load to hecMAT%B
111  do rid = 1, n_rot
112  if( .not. rinfo%conds(rid)%active ) cycle
113  !get number of slave nodes
114  n_nodes = hecmw_ngrp_get_number(hecmesh, rinfo%conds(rid)%torque_ngrp_id)
115 
116  !get center node
117  ig = rinfo%conds(rid)%center_ngrp_id
118  do idof = 1, ndof
119  ccoord(idof) = hecmw_ngrp_get_totalvalue(hecmesh, ig, ndof, idof, hecmesh%node)
120  cdisp(idof) = hecmw_ngrp_get_totalvalue(hecmesh, ig, ndof, idof, fstrsolid%unode)
121  enddo
122  ccoord(1:ndof) = ccoord(1:ndof) + cdisp(1:ndof)
123 
124  tval = dsqrt(dot_product(rinfo%conds(rid)%vec(1:ndof),rinfo%conds(rid)%vec(1:ndof)))
125  if( tval < 1.d-16 ) then
126  write(*,*) '###ERROR### : norm of torque vector must be > 0.0'
127  call hecmw_abort( hecmw_comm_get_comm() )
128  endif
129  normal(1:ndof) = rinfo%conds(rid)%vec(1:ndof)/tval
130  tval = tval/dble(n_nodes)
131 
132  ig = rinfo%conds(rid)%torque_ngrp_id
133  is0 = hecmesh%node_group%grp_index(ig-1) + 1
134  ie0 = hecmesh%node_group%grp_index(ig )
135  do ik = is0, ie0
136  in = hecmesh%node_group%grp_item(ik)
137  cdiff(1:ndof) = hecmesh%node(ndof*(in-1)+1:ndof*in)+fstrsolid%unode(ndof*(in-1)+1:ndof*in)-ccoord(1:ndof)
138  call cross_product(normal,cdiff,vect(1:ndof))
139  val = dot_product(vect(1:ndof),vect(1:ndof))
140  if( val < 1.d-16 ) then
141  write(*,*) '###ERROR### : torque node is at the same position as that of center node in rotational surface.'
142  call hecmw_abort( hecmw_comm_get_comm() )
143  endif
144  vect(1:ndof) = (tval/val)*vect(1:ndof)
145  hecmat%B(ndof*(in-1)+1:ndof*in) = hecmat%B(ndof*(in-1)+1:ndof*in)+vect(1:ndof)
146  enddo
147  enddo
148  if( n_rot > 0 ) call fstr_rotinfo_finalize(rinfo)
149 
150  !C
151  !C DLOAD
152  !C
153  do ig0 = 1, fstrsolid%DLOAD_ngrp_tot
154  ig = fstrsolid%DLOAD_ngrp_ID(ig0)
155  ltype = fstrsolid%DLOAD_ngrp_LID(ig0)
156  do i = 0, 6
157  params(i) = fstrsolid%DLOAD_ngrp_params(i,ig0)
158  enddo
159  !C START & END
160  fg_surf = (ltype == 100)
161  if( fg_surf ) then ! surface group
162  is0 = hecmesh%surf_group%grp_index(ig-1) + 1
163  ie0 = hecmesh%surf_group%grp_index(ig )
164  else ! element group
165  is0 = hecmesh%elem_group%grp_index(ig-1) + 1
166  ie0 = hecmesh%elem_group%grp_index(ig )
167  endif
168 
169  do ik = is0, ie0
170  if( fg_surf ) then ! surface group
171  ltype = hecmesh%surf_group%grp_item(2*ik)*10
172  icel = hecmesh%surf_group%grp_item(2*ik-1)
173  ic_type = hecmesh%elem_type(icel)
174  else ! element group
175  icel = hecmesh%elem_group%grp_item(ik)
176  ic_type = hecmesh%elem_type(icel)
177  endif
178 
179  !ELEMENT ACTIVATION
180  if( fstrsolid%elements(icel)%elemact_flag == kelact_inactive ) cycle
181 
182  !C** Create local stiffness
183  nn = hecmw_get_max_node(ic_type)
184  !C** node ID
185  is = hecmesh%elem_node_index(icel-1)
186  do j = 1, nn
187  nodlocal(j) = hecmesh%elem_node_item (is+j)
188  !C** nodal coordinate
189  xx(j) = hecmesh%node( 3*nodlocal(j)-2 )
190  yy(j) = hecmesh%node( 3*nodlocal(j)-1 )
191  zz(j) = hecmesh%node( 3*nodlocal(j) )
192  !C** create iwk array ***
193  do i = 1, ndof
194  iwk(ndof*(j-1)+i) = ndof*(nodlocal(j)-1)+i
195  enddo
196  enddo
197  !C** section ID
198  isect = hecmesh%section_ID(icel)
199  !C** Get Properties
200  rho = fstrsolid%elements(icel)%gausses(1)%pMaterial%variables(m_density)
201  call fstr_get_thickness(hecmesh,isect,thick)
202 
203  !C** Section Data
204  if( ndof == 2 ) then
205  id = hecmesh%section%sect_opt(isect)
206  if( id == 0 ) then
207  iset = 1
208  elseif( id == 1 ) then
209  iset = 0
210  elseif( id == 2 ) then
211  iset = 2
212  endif
213  pa1 = 1.0
214  endif
215 
216  !C** Create local stiffness
217  if( ic_type == 241 .or.ic_type == 242 .or. ic_type == 231 .or. ic_type == 232 ) then
218  call dl_c2(ic_type,nn,xx(1:nn),yy(1:nn),rho,pa1,ltype,params,vect(1:nn*ndof),nsize,iset)
219 
220  elseif( ic_type == 341 .or. ic_type == 351 .or. ic_type == 361 .or. &
221  ic_type == 342 .or. ic_type == 352 .or. ic_type == 362 ) then
222  call dl_c3(ic_type,nn,xx(1:nn),yy(1:nn),zz(1:nn),rho,ltype,params,vect(1:nn*ndof),nsize)
223 
224  elseif( ( ic_type == 741 ) .or. ( ic_type == 743 ) .or. ( ic_type == 731 ) ) then
225  call dl_shell(ic_type, nn, ndof, xx, yy, zz, rho, thick, ltype, params, vect, nsize, fstrsolid%elements(icel)%gausses)
226  elseif( ( ic_type==761 ) ) then
227  call dl_shell_33(ic_type, nn, ndof, xx, yy, zz, rho, thick, ltype, params, vect, nsize, &
228  fstrsolid%elements(icel)%gausses)
229  elseif( ( ic_type==781 ) ) then
230  call dl_shell_33(ic_type, nn, ndof, xx, yy, zz, rho, thick, ltype, params, vect, nsize, &
231  fstrsolid%elements(icel)%gausses)
232 
233  endif
234  !
235  !!!!!! time history
236 
237  flag_u = 10
238  ! params(0) is the load magnitude; passing it to the evaluator lets
239  ! VALUE=ABSOLUTE replace it with the amplitude value, while
240  ! VALUE=RELATIVE reduces the factor on vect to a(t).
241  f_t = params(0)
242  call fstr_get_amplitude_dyn(hecmesh, fstrsolid, fstrdynamic, ig0, t_curr, f_t, flag_u)
243  if (dabs(params(0)) > 1.d-30) then
244  f_t = f_t / params(0)
245  else
246  f_t = 1.0d0
247  endif
248  do j=1,nsize
249  vect(j) = vect(j)*f_t
250  enddo
251  !
252  !C** Add vector
253  do j = 1, nsize
254  hecmat%B( iwk(j) )=hecmat%B( iwk(j) )+vect(j)
255  enddo
256  enddo
257  enddo
258 
259  if ( present(iter) ) then
260  if( iter == 1 ) then
261  do i = 1, ndof*hecmesh%n_node
262  unode_tmp(i) = fstrsolid%unode(i)
263  enddo
264 
265  do ig0 = 1, fstrsolid%BOUNDARY_ngrp_tot
266  ig = fstrsolid%BOUNDARY_ngrp_ID(ig0)
267  rhs = fstrsolid%BOUNDARY_ngrp_val(ig0)
268  ityp = fstrsolid%BOUNDARY_ngrp_type(ig0)
269  idofs = ityp/10
270  idofe = ityp-idofs*10
271  is0 = hecmesh%node_group%grp_index(ig-1) + 1
272  ie0 = hecmesh%node_group%grp_index(ig )
273 
274  do ik = is0, ie0
275  in = hecmesh%node_group%grp_item(ik)
276  do idof = idofs, idofe
277  unode_tmp( ndof*(in-1)+idof ) = rhs
278  enddo
279  enddo
280  enddo
281 
282  do itype = 1, hecmesh%n_elem_type
283  ic_type = hecmesh%elem_type_item(itype)
284  if( ic_type == 3414 ) then
285  nn = hecmw_get_max_node(ic_type)
286  if( nn > 20 ) stop "The number of elemental nodes > 20"
287 
288  is = hecmesh%elem_type_index(itype-1)+1
289  ie = hecmesh%elem_type_index(itype )
290  do icel = is, ie
291  if(fstrsolid%elements(icel)%gausses(1)%pMaterial%mtype /= incomp_newtonian) then
292  write(*, *) '###ERROR### : This element is not supported for this material'
293  write(*, *) 'ic_type = ', ic_type, ', mtype = ', fstrsolid%elements(icel)%gausses(1)%pMaterial%mtype
294  stop
295  call hecmw_abort(hecmw_comm_get_comm())
296  endif
297 
298  v = 0.0d0
299  dv= 0.0d0
300  iis = hecmesh%elem_node_index(icel-1)
301  do j = 1, nn
302  nodlocal(j) = hecmesh%elem_node_item(iis+j)
303  do i = 1, 3
304  ! nodal coordinates
305  ecoord(i,j) = hecmesh%node( 3*nodlocal(j)+i-3 )
306  ! nodal velocity
307  v(i,j) = unode_tmp( ndof*nodlocal(j)+i-ndof )
308  fstrsolid%unode( ndof*nodlocal(j)+i-ndof ) = v(i,j)
309  ! nodal velocity increment
310  dv(i,j) = fstrsolid%dunode( ndof*nodlocal(j)+i-ndof )
311  enddo
312  enddo
313 
314  call load_c3_vp &
315  ( ic_type, nn, ecoord(:,1:nn), v(1:4,1:nn), dv(1:4,1:nn), &
316  r(1:nn*ndof), fstrsolid%elements(icel)%gausses(:), &
317  fstrdynamic%t_delta )
318 
319  do j = 1, nn
320  do i = 1, ndof
321  hecmat%B(ndof*(nodlocal(j)-1)+i) = hecmat%B(ndof*(nodlocal(j)-1)+i)+r(ndof*(j-1)+i)
322  enddo
323  enddo
324  enddo ! icel
325  endif
326  enddo ! itype
327 
328  else
329  do itype = 1, hecmesh%n_elem_type
330  ic_type = hecmesh%elem_type_item(itype)
331  if( ic_type == 3414 ) then
332  nn = hecmw_get_max_node(ic_type)
333  if( nn > 20 ) stop "The number of elemental nodes > 20"
334  is = hecmesh%elem_type_index(itype-1)+1
335  ie = hecmesh%elem_type_index(itype )
336  do icel = is, ie
337  iis = hecmesh%elem_node_index(icel-1)
338  do j = 1, nn
339  nodlocal(j) = hecmesh%elem_node_item(iis+j)
340  enddo
341  do j = 1, nn
342  do i = 1, ndof
343  hecmat%B(ndof*(nodlocal(j)-1)+i) = 0.0d0
344  enddo
345  enddo
346  enddo
347  endif
348  enddo
349  endif
350  endif
351 
352  !C
353  !C THERMAL LOAD USING TEMPERATURE
354  !C
355  !C Set Temperature
356  !C
357  if( fstrsolid%TEMP_ngrp_tot > 0 ) then
358 
359  if( hecmesh%my_rank .eq. 0 ) then
360  write(imsg,*) 'stop: THERMAL LOAD is not yet available in dynamic analysis!'
361  endif
362  call hecmw_abort( hecmw_comm_get_comm())
363 
364  allocate ( temp(hecmesh%n_node) )
365  temp=0
366  do ig0= 1, fstrsolid%TEMP_ngrp_tot
367  ig= fstrsolid%TEMP_ngrp_ID(ig0)
368  val=fstrsolid%TEMP_ngrp_val(ig0)
369  !C START & END
370  is0= hecmesh%node_group%grp_index(ig-1) + 1
371  ie0= hecmesh%node_group%grp_index(ig )
372  do ik= is0, ie0
373  in = hecmesh%node_group%grp_item(ik)
374  temp( in ) = val
375  enddo
376  enddo
377  !C
378  !C +-------------------------------+
379  !C | ELEMENT-by-ELEMENT ASSEMBLING |
380  !C | according to ELEMENT TYPE |
381  !C +-------------------------------+
382  !C===
383  do itype = 1, hecmesh%n_elem_type
384 
385  is = hecmesh%elem_type_index(itype-1)+1
386  ie = hecmesh%elem_type_index(itype )
387  ic_type = hecmesh%elem_type_item(itype)
388  if( hecmw_is_etype_link(ic_type) ) cycle
389  if( hecmw_is_etype_patch(ic_type) ) cycle
390  !C** Set number of nodes
391  nn = hecmw_get_max_node(ic_type)
392  !C element loop
393  do icel = is, ie
394 
395  !ELEMENT ACTIVATION
396  if( fstrsolid%elements(icel)%elemact_flag == kelact_inactive ) cycle
397 
398  !C** node ID
399  is= hecmesh%elem_node_index(icel-1)
400  do j=1,nn
401  nodlocal(j)=hecmesh%elem_node_item(is+j)
402  !C** nodal coordinate
403  xx(j)=hecmesh%node(3*nodlocal(j)-2)
404  yy(j)=hecmesh%node(3*nodlocal(j)-1)
405  zz(j)=hecmesh%node(3*nodlocal(j) )
406  tt(j)=temp( nodlocal(j) )
407  tt0(j)=fstrparam%ref_temp
408  !C** create iwk array ***
409  do i=1,ndof
410  iwk(ndof*(j-1)+i)=ndof*(nodlocal(j)-1)+i
411  enddo
412  enddo
413 
414  !C** section ID
415  isect= hecmesh%section_ID(icel)
416  cdsys_id = fstrsolid%elements(icel)%gausses(1)%pMaterial%cdsys_ID
417  call get_coordsys( cdsys_id, hecmesh, fstrsolid, coords, icel )
418 
419  !C** Section Data
420  if( ndof .eq. 2 ) then
421  id=hecmesh%section%sect_opt(isect)
422  if( id.eq.0 ) then
423  iset=1
424  elseif( id.eq.1) then
425  iset=0
426  elseif( id.eq.2) then
427  iset=2
428  endif
429  pa1=1.0
430  endif
431 
432  !C** Create local stiffness
433  if( ic_type == 241 .or. ic_type == 242 .or. ic_type == 231 .or. ic_type == 232 ) then
434  call tload_c2( ic_type, nn, xx(1:nn), yy(1:nn), tt(1:nn), tt0(1:nn), &
435  fstrsolid%elements(icel)%gausses,pa1,iset, vect(1:nn*2) )
436 
437  elseif( ic_type == 361 ) then
438  if( fstrsolid%sections(isect)%elemopt361 == kel361fi ) then
439  call tload_c3 &
440  ( ic_type, nn, xx(1:nn), yy(1:nn), zz(1:nn), tt(1:nn), tt0(1:nn), fstrparam%ref_temp, &
441  fstrsolid%elements(icel)%gausses, vect(1:nn*ndof), cdsys_id, coords )
442  else if( fstrsolid%sections(isect)%elemopt361 == kel361bbar ) then
443  call tload_c3d8bbar &
444  ( ic_type, nn, xx(1:nn), yy(1:nn), zz(1:nn), tt(1:nn), tt0(1:nn), fstrparam%ref_temp, &
445  fstrsolid%elements(icel)%gausses, vect(1:nn*ndof), cdsys_id, coords )
446  else if( fstrsolid%sections(isect)%elemopt361 == kel361ic ) then
447  call tload_c3d8ic &
448  ( ic_type, nn, xx(1:nn), yy(1:nn), zz(1:nn), tt(1:nn), tt0(1:nn), fstrparam%ref_temp, &
449  fstrsolid%elements(icel)%gausses, vect(1:nn*ndof), cdsys_id, coords )
450  else if( fstrsolid%sections(isect)%elemopt361 == kel361fbar ) then
451  call tload_c3d8fbar &
452  ( ic_type, nn, xx(1:nn), yy(1:nn), zz(1:nn), tt(1:nn), tt0(1:nn), fstrparam%ref_temp, &
453  fstrsolid%elements(icel)%gausses, vect(1:nn*ndof), cdsys_id, coords )
454  else if( fstrsolid%sections(isect)%elemopt361 == kel361up ) then
456  !call TLOAD_C3 &
457  ! ( ic_type, nn, xx(1:nn), yy(1:nn), zz(1:nn), tt(1:nn), tt0(1:nn), fstrPARAM%ref_temp, &
458  ! fstrSOLID%elements(icel)%gausses, vect(1:nn*ndof), cdsys_ID, coords )
459  stop "FROM361=UP: TLOAD is not supported"
460  endif
461 
462  elseif (ic_type == 341 .or. ic_type == 351 .or. &
463  ic_type == 342 .or. ic_type == 352 .or. ic_type == 362 ) then
464  call tload_c3 &
465  ( ic_type, nn, xx(1:nn), yy(1:nn), zz(1:nn), tt(1:nn), tt0(1:nn), fstrparam%ref_temp, &
466  fstrsolid%elements(icel)%gausses, vect(1:nn*ndof), cdsys_id, coords )
467 
468  elseif ( ic_type == 741 .or. ic_type == 743 .or. ic_type == 731 .or. &
469  ic_type == 641 .or. ic_type == 761 .or. ic_type == 781 ) then
470  if( myrank == 0 ) then
471  write(imsg,*) '*------------------------', &
472  '-------------------*'
473  write(imsg,*) ' Thermal loading option ', &
474  'not yet available.'
475  write(imsg,*) '*------------------------', &
476  '-------------------*'
477  call hecmw_abort( hecmw_comm_get_comm())
478  endif
479  endif
480  !C** Add vector
481  do j = 1, ndof*nn
482  hecmat%B( iwk(j) ) = hecmat%B( iwk(j) )+vect(j)
483  enddo
484  enddo
485  enddo
486  deallocate ( temp )
487  endif
488  end subroutine dynamic_mat_ass_load
489 
490 
491 end module m_dynamic_mat_ass_load
This modules defines common structures for fem analysis.
subroutine fstr_rotinfo_init(n, rinfo)
subroutine fstr_rotinfo_finalize(rinfo)
This module contains function to set boundary condition of external load in dynamic analysis.
subroutine dynamic_mat_ass_load(cstep, t_curr, hecMESH, hecMAT, fstrSOLID, fstrDYNAMIC, fstrPARAM, iter)
This function sets boundary condition of external load.
This module provide a function to elemact elements.
subroutine fstr_update_elemact_solid(hecMESH, fstrSOLID, cstep, ctime)
This module provides the entry point for ELEMCHECK (pre-analysis input validation)
subroutine fstr_get_thickness(hecMESH, mid, thick)
This module defines common data and basic structures for analysis.
Definition: m_fstr.F90:15
integer(kind=kint), parameter kel361bbar
Definition: m_fstr.F90:85
integer(kind=kint) myrank
PARALLEL EXECUTION.
Definition: m_fstr.F90:107
integer(kind=kint), parameter imsg
Definition: m_fstr.F90:121
integer(kind=kint), parameter kel361up
Definition: m_fstr.F90:88
logical function fstr_isloadactive(fstrSOLID, nbc, cstep)
Definition: m_fstr.F90:1262
integer(kind=kint), parameter kel361fi
Definition: m_fstr.F90:84
subroutine get_coordsys(cdsys_ID, hecMESH, fstrSOLID, coords, icel)
This subroutine fetch coords defined by local coordinate system.
Definition: m_fstr.F90:1307
integer(kind=kint), parameter kel361ic
Definition: m_fstr.F90:86
integer(kind=kint), parameter kel361fbar
Definition: m_fstr.F90:87
This modules just summarizes all modules used in static analysis.
Definition: static_LIB.f90:6
Amplitude evaluation for loading conditions in dynamic analysis.
Definition: table_dyn.f90:6
subroutine fstr_get_amplitude_dyn(hecMESH, fstrSOLID, fstrDYNAMIC, ig0, t_curr, value, flag_u)
Evaluate the amplitude-scaled target value a(t) for dynamic analysis.
Definition: table_dyn.f90:28
This module provides aux functions.
Definition: utilities.f90:6
subroutine cross_product(v1, v2, vn)
Definition: utilities.f90:383
Data for DYNAMIC ANSLYSIS (fstrDYNAMIC)
Definition: m_fstr.F90:525
FSTR INNER CONTROL PARAMETERS (fstrPARAM)
Definition: m_fstr.F90:142