FrontISTR  5.7.0
Large-scale structural analysis program with finit element method
fstr_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  implicit none
9 contains
10  !
11  !======================================================================!
17 
18  subroutine fstr_ass_load(cstep, ctime, hecMESH, hecMAT, fstrSOLID, fstrPARAM)
19  !======================================================================!
20  use m_fstr
21  use m_static_lib
22  use m_fstr_precheck
23  use mmechgauss
24  use mreadtemp
25  use muload
26  use m_fstr_spring
27  use m_common_struct
28  use m_utilities
29 
30  integer(kind=kint), intent(in) :: cstep
31  real(kind=kreal), intent(in) :: ctime
32  type(hecmwst_matrix), intent(inout) :: hecmat
33  type(hecmwst_local_mesh), intent(in) :: hecMESH
34  type(fstr_solid), intent(inout) :: fstrSOLID
35  type(fstr_param), intent(inout) :: fstrPARAM
36 
37  real(kind=kreal) :: xx(20), yy(20), zz(20)
38  real(kind=kreal) :: params(0:6)
39  real(kind=kreal) :: vect(60)
40  integer(kind=kint) :: iwk(60)
41  integer(kind=kint) :: nodLocal(20)
42  real(kind=kreal) :: tt(20), tt0(20), coords(3, 3), factor
43  integer(kind=kint) :: ndof, ig0, ig, ityp, ltype, iS0, iE0, ik, in, i, j
44  integer(kind=kint) :: icel, ic_type, nn, is, isect, id, iset, nsize
45  integer(kind=kint) :: itype, iE, ierror, grpid, cdsys_ID, jj_n_amp
46  real(kind=kreal) :: fval, rho, thick, pa1
47  logical :: fg_surf
48  integer(kind=kint) :: tstep
49  type(tmaterial), pointer :: material
50  integer(kind=kint) :: ihead
51  real(kind=kreal) :: a
52 
53  !for torque load
54  integer(kind=kint) :: n_rot, rid, n_nodes, idof
55  type(trotinfo) :: rinfo
56  real(kind=kreal) :: tval, normal(3), direc(3), ccoord(3), cdisp(3), cdiff(3)
57 
58  ndof = hecmat%NDOF
59 
60  ! -------------------------------------------------------------------
61  ! CLOAD
62  ! -------------------------------------------------------------------
63  n_rot = fstrsolid%CLOAD_ngrp_rot
64  if( n_rot > 0 ) call fstr_rotinfo_init(n_rot, rinfo)
65 
66  fstrsolid%GL(:) = 0.0d0
67  fstrsolid%EFORCE(:) = 0.0d0
68  do ig0 = 1, fstrsolid%CLOAD_ngrp_tot
69  grpid = fstrsolid%CLOAD_ngrp_GRPID(ig0)
70  if( .not. fstr_isloadactive( fstrsolid, grpid, cstep ) ) cycle
71  jj_n_amp = fstrsolid%CLOAD_ngrp_amp(ig0)
72  if( jj_n_amp <= 0 ) then ! Amplitude not defined
73  factor = fstrsolid%FACTOR(2)
74  else
75  call table_amp(hecmesh,fstrsolid,cstep,jj_n_amp,ctime,factor)
76  endif
77 
78  if( fstr_isloadactive( fstrsolid, grpid, cstep-1 ) ) factor = 1.0d0
79  ig = fstrsolid%CLOAD_ngrp_ID(ig0)
80  ityp = fstrsolid%CLOAD_ngrp_DOF(ig0)
81  fval = fstrsolid%CLOAD_ngrp_val(ig0)
82  is0 = hecmesh%node_group%grp_index(ig-1) + 1
83  ie0 = hecmesh%node_group%grp_index(ig )
84 
85  if( fstrsolid%CLOAD_ngrp_rotID(ig0) > 0 ) then ! setup torque load information
86  rid = fstrsolid%CLOAD_ngrp_rotID(ig0)
87  if( .not. rinfo%conds(rid)%active ) then
88  rinfo%conds(rid)%active = .true.
89  rinfo%conds(rid)%center_ngrp_id = fstrsolid%CLOAD_ngrp_centerID(ig0)
90  rinfo%conds(rid)%torque_ngrp_id = ig
91  endif
92  if( ityp>ndof ) ityp = ityp-ndof
93  rinfo%conds(rid)%vec(ityp) = factor*fval
94  cycle
95  endif
96 
97  do ik = is0, ie0
98  in = hecmesh%node_group%grp_item(ik)
99  fstrsolid%GL(ndof*(in-1)+ityp) = fstrsolid%GL(ndof*(in-1)+ityp)+factor*fval
100  enddo
101  enddo
102 
103  !Add torque load to fstrSOLID%GL
104  do rid = 1, n_rot
105  if( .not. rinfo%conds(rid)%active ) cycle
106  !get number of slave nodes
107  n_nodes = hecmw_ngrp_get_number(hecmesh, rinfo%conds(rid)%torque_ngrp_id)
108 
109  !get center node
110  ig = rinfo%conds(rid)%center_ngrp_id
111  do idof = 1, ndof
112  ccoord(idof) = hecmw_ngrp_get_totalvalue(hecmesh, ig, ndof, idof, hecmesh%node)
113  cdisp(idof) = hecmw_ngrp_get_totalvalue(hecmesh, ig, ndof, idof, fstrsolid%unode)
114  cdisp(idof) = cdisp(idof) + hecmw_ngrp_get_totalvalue(hecmesh, ig, ndof, idof, fstrsolid%dunode)
115  enddo
116  ccoord(1:ndof) = ccoord(1:ndof) + cdisp(1:ndof)
117 
118  tval = dsqrt(dot_product(rinfo%conds(rid)%vec(1:ndof),rinfo%conds(rid)%vec(1:ndof)))
119  if( tval < 1.d-16 ) then
120  write(*,*) '###ERROR### : norm of torque vector must be > 0.0'
121  call hecmw_abort( hecmw_comm_get_comm() )
122  endif
123  normal(1:ndof) = rinfo%conds(rid)%vec(1:ndof)/tval
124  tval = tval/dble(n_nodes)
125 
126  ig = rinfo%conds(rid)%torque_ngrp_id
127  is0 = hecmesh%node_group%grp_index(ig-1) + 1
128  ie0 = hecmesh%node_group%grp_index(ig )
129  do ik = is0, ie0
130  in = hecmesh%node_group%grp_item(ik)
131  cdiff(1:ndof) = hecmesh%node(ndof*(in-1)+1:ndof*in)+fstrsolid%unode(ndof*(in-1)+1:ndof*in) &
132  & +fstrsolid%dunode(ndof*(in-1)+1:ndof*in)-ccoord(1:ndof)
133  call cross_product(normal,cdiff,vect(1:ndof))
134  fval = dot_product(vect(1:ndof),vect(1:ndof))
135  if( fval < 1.d-16 ) then
136  write(*,*) '###ERROR### : torque node is at the same position as that of center node in rotational surface.'
137  call hecmw_abort( hecmw_comm_get_comm() )
138  endif
139  vect(1:ndof) = (tval/fval)*vect(1:ndof)
140  fstrsolid%GL(ndof*(in-1)+1:ndof*in) = fstrsolid%GL(ndof*(in-1)+1:ndof*in)+vect(1:ndof)
141  enddo
142  enddo
143  if( n_rot > 0 ) call fstr_rotinfo_finalize(rinfo)
144  !
145  ! -------------------------------------------------------------------
146  ! DLOAD
147  ! -------------------------------------------------------------------
148  do ig0 = 1, fstrsolid%DLOAD_ngrp_tot
149  grpid = fstrsolid%DLOAD_ngrp_GRPID(ig0)
150  if( .not. fstr_isloadactive( fstrsolid, grpid, cstep ) ) cycle
151  jj_n_amp = fstrsolid%DLOAD_ngrp_amp(ig0)
152  if( jj_n_amp <= 0 ) then ! Amplitude not defined
153  factor = fstrsolid%FACTOR(2)
154  else
155  call table_amp(hecmesh,fstrsolid,cstep,jj_n_amp,ctime,factor)
156  endif
157 
158  if( fstr_isloadactive( fstrsolid, grpid, cstep-1 ) ) factor = 1.0d0
159  ig = fstrsolid%DLOAD_ngrp_ID(ig0)
160  ltype = fstrsolid%DLOAD_ngrp_LID(ig0)
161  do i = 0, 6
162  params(i)= fstrsolid%DLOAD_ngrp_params(i,ig0)
163  enddo
164  ! ----- START & END
165  fg_surf = (ltype == 100)
166  if( fg_surf ) then ! surface group
167  is0 = hecmesh%surf_group%grp_index(ig-1) + 1
168  ie0 = hecmesh%surf_group%grp_index(ig )
169  else ! element group
170  is0 = hecmesh%elem_group%grp_index(ig-1) + 1
171  ie0 = hecmesh%elem_group%grp_index(ig )
172  endif
173  do ik = is0, ie0
174  if( fg_surf ) then ! surface group
175  ltype = hecmesh%surf_group%grp_item(2*ik)*10
176  icel = hecmesh%surf_group%grp_item(2*ik-1)
177  ic_type = hecmesh%elem_type(icel)
178  else ! element group
179  icel = hecmesh%elem_group%grp_item(ik)
180  ic_type = hecmesh%elem_type(icel)
181  endif
182  if( hecmw_is_etype_link(ic_type) ) cycle
183  if( hecmw_is_etype_patch(ic_type) ) cycle
184  ! if( ic_type==3422 ) ic_type=342
185  nn = hecmw_get_max_node(ic_type)
186  ! ----- node ID
187  is = hecmesh%elem_node_index(icel-1)
188  if( fstrsolid%DLOAD_follow == 0 ) then
189  do j = 1, nn
190  nodlocal(j) = hecmesh%elem_node_item (is+j)
191  ! ----- nodal coordinate
192  xx(j) = hecmesh%node( 3*nodlocal(j)-2 )
193  yy(j) = hecmesh%node( 3*nodlocal(j)-1 )
194  zz(j) = hecmesh%node( 3*nodlocal(j) )
195  ! ----- create iwk array ***
196  do i = 1, ndof
197  iwk( ndof*(j-1)+i ) = ndof*( nodlocal(j)-1 )+i
198  enddo
199  enddo
200  else
201  do j = 1, nn
202  nodlocal(j) = hecmesh%elem_node_item (is+j)
203  ! ----- nodal coordinate
204  if (ndof==2) then
205  xx(j) = hecmesh%node( 3*nodlocal(j)-2 )+fstrsolid%unode( 2*nodlocal(j)-1 )+fstrsolid%dunode( 2*nodlocal(j)-1 )
206  yy(j) = hecmesh%node( 3*nodlocal(j)-1 )+fstrsolid%unode( 2*nodlocal(j) )+fstrsolid%dunode( 2*nodlocal(j) )
207  else if (ndof==3) then
208  xx(j) = hecmesh%node( 3*nodlocal(j)-2 )+fstrsolid%unode( 3*nodlocal(j)-2 )+fstrsolid%dunode( 3*nodlocal(j)-2 )
209  yy(j) = hecmesh%node( 3*nodlocal(j)-1 )+fstrsolid%unode( 3*nodlocal(j)-1 )+fstrsolid%dunode( 3*nodlocal(j)-1 )
210  zz(j) = hecmesh%node( 3*nodlocal(j) )+fstrsolid%unode( 3*nodlocal(j) )+fstrsolid%dunode( 3*nodlocal(j) )
211  else if (ndof==6) then
212  xx(j) = hecmesh%node( 3*nodlocal(j)-2 )+fstrsolid%unode( 6*nodlocal(j)-5 )+fstrsolid%dunode( 6*nodlocal(j)-5 )
213  yy(j) = hecmesh%node( 3*nodlocal(j)-1 )+fstrsolid%unode( 6*nodlocal(j)-4 )+fstrsolid%dunode( 6*nodlocal(j)-4 )
214  zz(j) = hecmesh%node( 3*nodlocal(j) )+fstrsolid%unode( 6*nodlocal(j)-3 )+fstrsolid%dunode( 6*nodlocal(j)-3 )
215  endif
216  ! ----- create iwk array ***
217  do i = 1, ndof
218  iwk( ndof*(j-1)+i ) = ndof*( nodlocal(j)-1 )+i
219  enddo
220  enddo
221  end if
222  ! ----- section ID
223  isect = hecmesh%section_ID(icel)
224  ! ----- Get Properties
225  material => fstrsolid%elements(icel)%gausses(1)%pMaterial
226  rho = material%variables(m_density)
227  call fstr_get_thickness(hecmesh,isect,thick)
228  ! ----- Section Data
229  if( ndof == 2 ) then
230  id=hecmesh%section%sect_opt(isect)
231  if( id == 0 ) then
232  iset = 1
233  else if( id == 1 ) then
234  iset = 0
235  else if( id == 2) then
236  iset = 2
237  endif
238  pa1=1.d0
239  endif
240  ! ----- Create local stiffness
241  if (ic_type==301)then
242  ihead = hecmesh%section%sect_R_index(isect-1)
243  call dl_c1(ic_type,nn,xx(1:nn),yy(1:nn),zz(1:nn),rho,thick,ltype,params,vect(1:nn*ndof),nsize)
244 
245  elseif( ic_type == 241 .or. ic_type == 242 .or. ic_type == 231 .or. ic_type == 232 .or. ic_type == 2322 ) then
246  call dl_c2(ic_type,nn,xx(1:nn),yy(1:nn),rho,pa1,ltype,params,vect(1:nn*ndof),nsize,iset)
247 
248  else if ( ic_type == 341 .or. ic_type == 351 .or. ic_type == 361 .or. &
249  ic_type == 342 .or. ic_type == 352 .or. ic_type == 362 ) then
250  call dl_c3(ic_type,nn,xx(1:nn),yy(1:nn),zz(1:nn),rho,ltype,params,vect(1:nn*ndof),nsize)
251 
252  else if ( ic_type == 641 ) then
253  ihead = hecmesh%section%sect_R_index(isect-1)
254  call dl_beam_641(ic_type, nn, xx(1:nn), yy(1:nn), zz(1:nn), rho, ltype, params, &
255  hecmesh%section%sect_R_item(ihead+1:), vect(1:nn*ndof), nsize)
256 
257  else if( ( ic_type == 741 ) .or. ( ic_type == 743 ) .or. ( ic_type == 731 ) ) then
258  call dl_shell(ic_type, nn, ndof, xx, yy, zz, rho, thick, ltype, params, vect, nsize, fstrsolid%elements(icel)%gausses)
259 
260  else if( ( ic_type==761 ) .or. ( ic_type==781 ) ) then
261  call dl_shell_33(ic_type, nn, ndof, xx, yy, zz, rho, thick, ltype, params, vect, nsize, &
262  fstrsolid%elements(icel)%gausses)
263 
264  else
265  nsize = 0
266  write(*,*)"### WARNING: DLOAD",ic_type
267 
268  endif
269  ! ----- Add vector
270  do j=1,nsize
271  fstrsolid%GL( iwk(j) )=fstrsolid%GL( iwk(j) )+factor*vect(j)
272  enddo
273  enddo
274  enddo
275 
276  ! -----Uload
277  call uloading( cstep, factor, fstrsolid%GL )
278 
279  !C
280  !C Update for fstrSOLID%GL
281  !C
282  call hecmw_update_r (hecmesh,fstrsolid%GL,hecmesh%n_node, hecmesh%n_dof)
283 
284  call hecmw_mat_clear_b( hecmat )
285  do i=1, hecmesh%n_node* hecmesh%n_dof
286  hecmat%B(i)=fstrsolid%GL(i)-fstrsolid%QFORCE(i)
287  enddo
288 
289  do i=1, hecmat%NDOF*hecmat%NP
290  !thermal load is not considered
291  fstrsolid%EFORCE(i) = fstrsolid%GL(i)
292  enddo
293 
294  ! -------------------------------------------------------------------
295  ! TLOAD : THERMAL LOAD USING TEMPERATURE
296  ! -------------------------------------------------------------------
297  !C
298  !C Set Temperature
299  !C
300  if( fstrsolid%TEMP_ngrp_tot > 0 .or. fstrsolid%TEMP_irres > 0 ) then
301  do ig0 = 1, fstrsolid%TEMP_ngrp_tot
302  grpid = fstrsolid%TEMP_ngrp_GRPID(ig0)
303  if( .not. fstr_isloadactive( fstrsolid, grpid, cstep ) ) cycle
304  factor = fstrsolid%factor(2)
305  if( fstr_isloadactive( fstrsolid, grpid, cstep-1 ) ) factor = 1.0d0
306  ig = fstrsolid%TEMP_ngrp_ID(ig0)
307  fval =fstrsolid%TEMP_ngrp_val(ig0)
308  is0 = hecmesh%node_group%grp_index(ig-1)+1
309  ie0 = hecmesh%node_group%grp_index(ig )
310  do ik = is0, ie0
311  in = hecmesh%node_group%grp_item(ik)
312  pa1 = fstrsolid%temp_bak( in )
313  fstrsolid%temperature( in ) = pa1+(fval-pa1)*factor
314  enddo
315  enddo
316 
317  if( fstrsolid%TEMP_irres > 0 ) then
318  call read_temperature_result(hecmesh, fstrsolid%TEMP_irres, fstrsolid%TEMP_tstep, &
319  & fstrsolid%TEMP_rtype, fstrsolid%TEMP_interval, fstrsolid%TEMP_factor, ctime, &
320  & fstrsolid%temperature, fstrsolid%temp_bak)
321  endif
322 
323  ! ----- element TYPE loop.
324  do itype = 1, hecmesh%n_elem_type
325 
326  is = hecmesh%elem_type_index(itype-1)+1
327  ie = hecmesh%elem_type_index(itype )
328  ic_type = hecmesh%elem_type_item(itype)
329  if( hecmw_is_etype_link(ic_type) ) cycle
330  if( hecmw_is_etype_patch(ic_type) ) cycle
331  ! ----- Set number of nodes
332  nn = hecmw_get_max_node(ic_type)
333 
334  ! ----- element loop
335  do icel = is, ie
336 
337  ! ----- node ID
338  is= hecmesh%elem_node_index(icel-1)
339  do j=1,nn
340  nodlocal(j)=hecmesh%elem_node_item(is+j)
341  ! ----- nodal coordinate
342  if (ndof==2) then
343  xx(j)=hecmesh%node(3*nodlocal(j)-2)+fstrsolid%unode(ndof*nodlocal(j)-1)
344  yy(j)=hecmesh%node(3*nodlocal(j)-1)+fstrsolid%unode(ndof*nodlocal(j) )
345  else if (ndof==3) then
346  xx(j)=hecmesh%node(3*nodlocal(j)-2)+fstrsolid%unode(ndof*nodlocal(j)-2)
347  yy(j)=hecmesh%node(3*nodlocal(j)-1)+fstrsolid%unode(ndof*nodlocal(j)-1)
348  zz(j)=hecmesh%node(3*nodlocal(j) )+fstrsolid%unode(ndof*nodlocal(j))
349  endif
350  tt0(j)=fstrsolid%last_temp( nodlocal(j) )
351  tt(j) = fstrsolid%temperature( nodlocal(j) )
352  ! ----- create iwk array ***
353  do i=1,ndof
354  iwk(ndof*(j-1)+i)=ndof*(nodlocal(j)-1)+i
355  enddo
356  enddo
357 
358  ! ----- section Data
359  isect= hecmesh%section_ID(icel)
360  cdsys_id = hecmesh%section%sect_orien_ID(isect)
361  call get_coordsys(cdsys_id, hecmesh, fstrsolid, coords)
362 
363  if( ndof == 2 ) then
364  id=hecmesh%section%sect_opt(isect)
365  if( id==0 ) then
366  iset = 1
367  else if( id == 1 ) then
368  iset = 0
369  else if( id == 2 ) then
370  iset = 2
371  endif
372  pa1 = 1.0d0
373  endif
374 
375  if( ic_type == 641 ) then
376 
377  isect= hecmesh%section_ID(icel)
378  ihead = hecmesh%section%sect_R_index(isect-1)
379 
380  call tload_beam_641( ic_type, nn, ndof, xx(1:nn), yy(1:nn), zz(1:nn), tt(1:nn), tt0(1:nn), &
381  fstrsolid%elements(icel)%gausses, hecmesh%section%sect_R_item(ihead+1:), &
382  vect(1:nn*ndof) )
383 
384  do j = 1, ndof*nn
385  hecmat%B( iwk(j) ) = hecmat%B( iwk(j) )+vect(j)
386  end do
387  cycle
388  end if
389 
390  ! ----- Create local stiffness
391  if(ic_type == 241 .or. ic_type == 242 .or. ic_type == 231 .or. ic_type == 232 ) then
392  call tload_c2( ic_type, nn, xx(1:nn), yy(1:nn), tt(1:nn), tt0(1:nn), &
393  fstrsolid%elements(icel)%gausses,pa1, iset, vect(1:nn*2) )
394 
395  else if( ic_type == 361 ) then
396  if( fstrsolid%sections(isect)%elemopt361 == kel361fi ) then
397  call tload_c3 &
398  ( ic_type, nn, xx(1:nn), yy(1:nn), zz(1:nn), tt(1:nn), tt0(1:nn), &
399  fstrsolid%elements(icel)%gausses, vect(1:nn*ndof), cdsys_id, coords )
400  else if( fstrsolid%sections(isect)%elemopt361 == kel361bbar ) then
401  call tload_c3d8bbar &
402  ( ic_type, nn, xx(1:nn), yy(1:nn), zz(1:nn), tt(1:nn), tt0(1:nn), &
403  fstrsolid%elements(icel)%gausses, vect(1:nn*ndof), cdsys_id, coords )
404  else if( fstrsolid%sections(isect)%elemopt361 == kel361ic ) then
405  call tload_c3d8ic &
406  ( ic_type, nn, xx(1:nn), yy(1:nn), zz(1:nn), tt(1:nn), tt0(1:nn), &
407  fstrsolid%elements(icel)%gausses, vect(1:nn*ndof), cdsys_id, coords )
408  else if( fstrsolid%sections(isect)%elemopt361 == kel361fbar ) then
409  call tload_c3d8fbar &
410  ( ic_type, nn, xx(1:nn), yy(1:nn), zz(1:nn), tt(1:nn), tt0(1:nn), &
411  fstrsolid%elements(icel)%gausses, vect(1:nn*ndof), cdsys_id, coords )
412  endif
413 
414  else if( ic_type == 341 .or. ic_type == 351 .or. &
415  ic_type == 342 .or. ic_type == 352 .or. ic_type == 362 ) then
416  call tload_c3 &
417  ( ic_type, nn, xx(1:nn), yy(1:nn), zz(1:nn), tt(1:nn), tt0(1:nn), &
418  fstrsolid%elements(icel)%gausses, vect(1:nn*ndof), cdsys_id, coords )
419 
420  else if( ic_type == 741 .or. ic_type == 743 .or. ic_type == 731 ) then
421  if( myrank == 0 ) then
422  write(imsg,*) '*------------------------', &
423  '-------------------*'
424  write(imsg,*) ' Thermal loading option for shell elements', &
425  'not yet available.'
426  write(imsg,*) '*------------------------', &
427  '-------------------*'
428  call hecmw_abort( hecmw_comm_get_comm())
429  endif
430 
431  endif
432 
433  ! ----- Add vector
434  do j = 1, ndof*nn
435  ! fstrSOLID%GL( iwk(j) )=fstrSOLID%GL( iwk(j) )+vect(j)
436  hecmat%B( iwk(j) ) = hecmat%B( iwk(j) )+vect(j)
437  enddo
438 
439  enddo
440  enddo
441  endif
442 
443  ! ----- Spring force
444  call fstr_update_ndforce_spring( cstep, hecmesh, fstrsolid, hecmat%B )
445 
446  end subroutine fstr_ass_load
447 
448 end module m_fstr_ass_load
m_fstr_ass_load
This module provides functions to take into account external load.
Definition: fstr_ass_load.f90:7
m_utilities
This module provides aux functions.
Definition: utilities.f90:6
m_fstr::fstr_isloadactive
logical function fstr_isloadactive(fstrSOLID, nbc, cstep)
Definition: m_fstr.f90:1038
m_fstr::kel361fi
integer(kind=kint), parameter kel361fi
Definition: m_fstr.f90:77
m_fstr::myrank
integer(kind=kint) myrank
PARALLEL EXECUTION.
Definition: m_fstr.f90:96
m_fstr::kel361bbar
integer(kind=kint), parameter kel361bbar
Definition: m_fstr.f90:78
m_common_struct::fstr_rotinfo_init
subroutine fstr_rotinfo_init(n, rinfo)
Definition: m_common_struct.f90:99
muload
This subroutine read in used-defined loading tangent.
Definition: uload.f90:7
m_fstr::fstr_solid
Definition: m_fstr.f90:238
m_fstr::fstr_param
FSTR INNER CONTROL PARAMETERS (fstrPARAM)
Definition: m_fstr.f90:154
m_fstr_precheck::fstr_get_thickness
subroutine fstr_get_thickness(hecMESH, mid, thick)
Definition: fstr_precheck.f90:50
m_common_struct
This modules defines common structures for fem analysis.
Definition: m_common_struct.f90:6
mmechgauss
This modules defines a structure to record history dependent parameter in static analysis.
Definition: mechgauss.f90:6
m_fstr
This module defines common data and basic structures for analysis.
Definition: m_fstr.f90:15
muload::uloading
subroutine uloading(cstep, factor, exForce)
This subroutine take consider of user-defined external loading.
Definition: uload.f90:31
m_fstr_spring::fstr_update_ndforce_spring
subroutine fstr_update_ndforce_spring(cstep, hecMESH, fstrSOLID, B)
Definition: fstr_Spring.f90:46
mreadtemp::read_temperature_result
subroutine, public read_temperature_result(hecMESH, nstep, sstep, rtype, interval, factor, ctime, temp, temp_bak)
Read in temperature distribution from external file.
Definition: readtemp.f90:14
m_fstr::table_amp
subroutine table_amp(hecMESH, fstrSOLID, cstep, jj_n_amp, time, f_t)
Definition: m_fstr.f90:1155
m_common_struct::fstr_rotinfo_finalize
subroutine fstr_rotinfo_finalize(rinfo)
Definition: m_common_struct.f90:117
m_fstr::get_coordsys
subroutine get_coordsys(cdsys_ID, hecMESH, fstrSOLID, coords)
This subroutine fetch coords defined by local coordinate system.
Definition: m_fstr.f90:1073
mreadtemp
Definition: readtemp.f90:5
m_fstr::kel361fbar
integer(kind=kint), parameter kel361fbar
Definition: m_fstr.f90:80
m_fstr::kel361ic
integer(kind=kint), parameter kel361ic
Definition: m_fstr.f90:79
m_fstr_precheck
This module provides function to check input data of IFSTR solver.
Definition: fstr_precheck.f90:6
m_fstr_ass_load::fstr_ass_load
subroutine fstr_ass_load(cstep, ctime, hecMESH, hecMAT, fstrSOLID, fstrPARAM)
This subroutine assmble following external force into fstrSOLIDGL and hecMATB afterwards.
Definition: fstr_ass_load.f90:19
m_static_lib
This modules just summarizes all modules used in static analysis.
Definition: static_LIB.f90:6
m_fstr_spring
This module provides functions to deal with spring force.
Definition: fstr_Spring.f90:7
m_common_struct::trotinfo
Definition: m_common_struct.f90:21
m_utilities::cross_product
subroutine cross_product(v1, v2, vn)
Definition: utilities.f90:330
m_fstr::imsg
integer(kind=kint), parameter imsg
Definition: m_fstr.f90:110