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