FrontISTR  5.7.0
Large-scale structural analysis program with finit element method
fstr_ctrl_material.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  use hecmw
8  use mmaterial
9  use m_table
10  implicit none
11 
12  private :: read_user_matl
13 
14  include 'fstr_ctrl_util_f.inc'
15 
16 contains
17 
18 
19  !----------------------------------------------------------------------
21  integer function fstr_ctrl_get_material( ctrl, matname )
22  integer(kind=kint), intent(in) :: ctrl
23  character(len=*), intent(out) :: matname
24 
25  matname=""
26  fstr_ctrl_get_material = fstr_ctrl_get_param_ex( ctrl, 'NAME ', '# ', 0, 'S', matname )
27  end function fstr_ctrl_get_material
28 
29  !----------------------------------------------------------------------
31  integer function fstr_ctrl_get_usermaterial( ctrl, mattype, nlgeom, nstatus, matval )
32  integer(kind=kint), intent(in) :: ctrl
33  integer(kind=kint), intent(inout) :: mattype
34  integer(kind=kint), intent(out) :: nlgeom
35  integer(kind=kint), intent(out) :: nstatus
36  real(kind=kreal),intent(out) :: matval(:)
37 
38  integer(kind=kint) :: ipt
39  character(len=HECMW_NAME_LEN) :: data_fmt
40  character(len=256) :: s, fname
41 
43  mattype = usermaterial
44  nlgeom = updatelag !default value
45  nstatus = 1
46  if( fstr_ctrl_get_param_ex( ctrl, 'NSTATUS ', '# ', 0, 'I', nstatus )/= 0) return
47  if( fstr_ctrl_get_param_ex( ctrl, 'KIRCHHOFF ', '# ', 0, 'E', ipt )/= 0) return
48  if( ipt/=0 ) nlgeom = totallag
49 
50  fstr_ctrl_get_usermaterial = read_user_matl( ctrl, matval )
51  end function fstr_ctrl_get_usermaterial
52 
53  !----------------------------------------------------------------------
55  integer function fstr_ctrl_get_elasticity( ctrl, mattype, nlgeom, matval, dict )
56  integer(kind=kint), intent(in) :: ctrl
57  integer(kind=kint), intent(inout) :: mattype
58  integer(kind=kint), intent(out) :: nlgeom
59  real(kind=kreal),intent(out) :: matval(:)
60  type(dict_struct), pointer :: dict
61 
62  integer(kind=kint) :: i,j, rcode, depends, ipt, n
63  real(kind=kreal),pointer :: fval(:,:)
64  character(len=HECMW_NAME_LEN) :: data_fmt
65  type( ttable ) :: mattable
66  logical :: isok
67  character(len=256) :: s
68 
70  depends = 0
71  rcode = fstr_ctrl_get_param_ex( ctrl, 'DEPENDENCIES ', '# ', 0, 'I', depends )
72  if( depends>1 ) depends=1 ! temperature depends only currently
73  if( depends > 3 ) stop "We cannot read dependencies>3 right now"
74  nlgeom = totallag !default value
75 
76  if( fstr_ctrl_get_param_ex( ctrl, 'CAUCHY ', '# ', 0, 'E', ipt )/= 0) return
77  if( ipt/=0 ) nlgeom = updatelag
78  if( fstr_ctrl_get_param_ex( ctrl, 'INFINITESIMAL ', '# ', 0, 'E', ipt )/= 0) return
79  if( ipt/=0 ) nlgeom = infinitesimal
80 
81  ! for backward compatibility
82  if( fstr_ctrl_get_param_ex( ctrl, 'INFINITE ', '# ', 0, 'E', ipt )/= 0) return
83  if( ipt/=0 ) then
84  write(*,*) "Warning : !ELASTIC : parameter 'INFINITE' is deprecated." &
85  & // " Please use the replacement parameter 'INFINITESIMAL'"
86  nlgeom = infinitesimal
87  endif
88 
89  ipt=1
90  s = 'ISOTROPIC,ORTHOTROPIC,USER '
91  if( fstr_ctrl_get_param_ex( ctrl, 'TYPE ', s, 0, 'P', ipt ) /= 0 ) return
92 
93  n = fstr_ctrl_get_data_line_n( ctrl )
94  ! ISOTROPIC
95  if( ipt==1 ) then
96  allocate( fval(2+depends,n) )
97  if( depends==0 ) then
98  data_fmt = "RR "
100  fstr_ctrl_get_data_array_ex( ctrl, data_fmt, fval(1,:), fval(2,:) )
101  endif
102  if( depends==1 ) then
103  data_fmt = "RRR "
105  fstr_ctrl_get_data_array_ex( ctrl, data_fmt, fval(1,:), fval(2,:), fval(3,:) )
106  endif
107  if( fstr_ctrl_get_elasticity ==0 ) then
108  matval(m_youngs) = fval(1,1)
109  matval(m_poisson) = fval(2,1)
110  call init_table( mattable, depends, 2+depends,n, fval )
111  call dict_add_key( dict, mc_isoelastic, mattable )
112  ! call print_table( mattable, 6 ); pause
113  endif
114  mattype = elastic
115 
116  ! ORTHOTROPIC
117  else if( ipt==2 ) then
118  allocate( fval(9+depends,n) )
119  if( depends==0 ) then
120  data_fmt = "RRRRRRRRR "
122  fstr_ctrl_get_data_array_ex( ctrl, data_fmt, &
123  fval(1,:), fval(2,:), fval(3,:), fval(4,:), fval(5,:), fval(6,:), &
124  fval(7,:), fval(8,:), fval(9,:) )
125  else if( depends==1 ) then
126  data_fmt = "RRRRRRRRRR "
128  fstr_ctrl_get_data_array_ex( ctrl, data_fmt, &
129  fval(1,:), fval(2,:), fval(3,:), fval(4,:), fval(5,:), fval(6,:), &
130  fval(7,:), fval(8,:), fval(9,:), fval(10,:) )
131  endif
132  if( fstr_ctrl_get_elasticity ==0 ) then
133  isok = .true.
134  do i=1,n
135  if( fval(1,i)<=0.d0 .or. fval(2,i)<=0.d0 .or. fval(3,i)<=0.d0 .or. &
136  fval(7,i)<=0.d0 .or. fval(8,i)<=0.d0 .or. fval(9,i)<=0.d0 ) then
137  isok = .false.; fstr_ctrl_get_elasticity=1; exit
138  endif
139  enddo
140  if( isok ) then
141  call init_table( mattable, depends, 9+depends,n, fval )
142  call dict_add_key( dict, mc_orthoelastic, mattable )
143  mattype = mn_orthoelastic
144  endif
145  endif
146 
147  else if( ipt==3 ) then
148  fstr_ctrl_get_elasticity = read_user_matl( ctrl, matval(101:200))
149  mattype = userelastic
150  nlgeom = infinitesimal
151 
152  else
153  stop "ERROR: Material type not supported"
154 
155  endif
156 
157  call finalize_table( mattable )
158  if( associated(fval) ) deallocate(fval)
159  end function fstr_ctrl_get_elasticity
160 
161 
162  !----------------------------------------------------------------------
164  integer function fstr_ctrl_get_hyperelastic( ctrl, mattype, nlgeom, matval )
165  integer(kind=kint), intent(in) :: ctrl
166  integer(kind=kint), intent(inout) :: mattype
167  integer(kind=kint), intent(out) :: nlgeom
168  real(kind=kreal),intent(out) :: matval(:)
169 
170  integer(kind=kint) :: i,j, rcode, depends, ipt
171  real(kind=kreal),pointer :: fval(:,:)
172  character(len=HECMW_NAME_LEN) :: data_fmt
173  character(len=256) :: s
174 
176  depends = 0
177  rcode = fstr_ctrl_get_param_ex( ctrl, 'DEPENDENCIES ', '# ', 0, 'I', depends )
178  if( depends > 3 ) stop "We cannot read dependencies>3 right now"
179  nlgeom = totallag !default value
180  if( fstr_ctrl_get_param_ex( ctrl, 'CAUCHY ', '# ', 0, 'E', ipt )/= 0) return
181  if( ipt/=0 ) nlgeom = updatelag
182 
183  ipt=1
184  s = 'NEOHOOKE,MOONEY-RIVLIN,ARRUDA-BOYCE,USER,MOONEY-RIVLIN-ANISO '
185  if( fstr_ctrl_get_param_ex( ctrl, 'TYPE ', s, 0, 'P', ipt ) /= 0 ) return
186 
187  ! NEOHOOKE
188  if( ipt==1 ) then
189  allocate( fval(2,depends+1) )
190  fval =0.0d0
191  if( depends==0 ) then
192  data_fmt = "RR "
194  fstr_ctrl_get_data_array_ex( ctrl, data_fmt, fval(1,:), fval(2,:) )
195  endif
196  if( fstr_ctrl_get_hyperelastic ==0 ) then
197  if( fval(2,1)==0.d0 ) stop "We cannot deal with incompressible material currently"
198  matval(m_plconst1) = fval(1,1)
199  matval(m_plconst2) = 0.d0
200  matval(m_plconst3) = fval(2,1)
201  ! matval(M_YOUNGS) = fval(1,1)
202  ! matval(M_POISSON) = fval(2,1)
203  endif
204  mattype = neohooke
205 
206  ! MOONEY
207  else if( ipt==2 ) then
208  allocate( fval(3,depends+1) )
209  fval =0.0d0
210  if( depends==0 ) then
211  data_fmt = "RRR "
213  fstr_ctrl_get_data_array_ex( ctrl, data_fmt, fval(1,:), fval(2,:), fval(3,:) )
214  endif
215  if( fstr_ctrl_get_hyperelastic ==0 ) then
216  matval(m_plconst1) = fval(1,1)
217  matval(m_plconst2) = fval(2,1)
218  matval(m_plconst3) = fval(3,1)
219  endif
220  mattype = mooneyrivlin
221 
222  ! ARRUDA
223  else if( ipt==3 ) then
224  allocate( fval(3,depends+1) )
225  fval =0.0d0
226  if( depends==0 ) then
227  data_fmt = "RRR "
229  fstr_ctrl_get_data_array_ex( ctrl, data_fmt, fval(1,:), fval(2,:), fval(3,:) )
230  endif
231  if( fstr_ctrl_get_hyperelastic ==0 ) then
232  matval(m_plconst1) = fval(1,1)
233  matval(m_plconst2) = fval(2,1)
234  matval(m_plconst3) = fval(3,1)
235  endif
236  mattype = arrudaboyce
237 
238  else if( ipt==4 ) then !User
239  fstr_ctrl_get_hyperelastic = read_user_matl( ctrl, matval(101:200))
240  mattype = userhyperelastic
241 
242  ! MOONEY-ORTHO
243  else if( ipt==5 ) then
244  allocate( fval(10,depends+1) )
245  fval =0.0d0
246  if( depends==0 ) then
247  data_fmt = "RRRRRrrrrr "
249  fstr_ctrl_get_data_array_ex( ctrl, data_fmt, &
250  fval(1,:), fval(2,:), fval(3,:), fval(4,:), fval(5,:), &
251  fval(6,:), fval(7,:), fval(8,:), fval(9,:), fval(10,:) )
252  endif
253  if( fstr_ctrl_get_hyperelastic ==0 ) then
254  matval(m_plconst1) = fval(1,1)
255  matval(m_plconst2) = fval(2,1)
256  matval(m_plconst3) = fval(3,1)
257  matval(m_plconst4) = fval(4,1)
258  matval(m_plconst5) = fval(5,1)
259  matval(m_plconst6) = fval(6,1)
260  matval(m_plconst7) = fval(7,1)
261  matval(m_plconst8) = fval(8,1)
262  matval(m_plconst9) = fval(9,1)
263  matval(m_plconst10) = fval(10,1)
264  endif
265  mattype = mooneyrivlin_aniso
266 
267  endif
268 
269  if( associated(fval) ) deallocate(fval)
270  end function fstr_ctrl_get_hyperelastic
271 
272 
273  !----------------------------------------------------------------------
275  integer function fstr_ctrl_get_viscoelasticity( ctrl, mattype, nlgeom, dict )
276  integer(kind=kint), intent(in) :: ctrl
277  integer(kind=kint), intent(inout) :: mattype
278  integer(kind=kint), intent(out) :: nlgeom
279  type(dict_struct), pointer :: dict
280 
281  integer(kind=kint) :: i,j, rcode, depends, ipt, n
282  real(kind=kreal),pointer :: fval(:,:)
283  character(len=HECMW_NAME_LEN) :: data_fmt
284  type( ttable ) :: mattable
285  character(len=256) :: s
286 
288  depends = 0
289  rcode = fstr_ctrl_get_param_ex( ctrl, 'DEPENDENCIES ', '# ', 0, 'I', depends )
290  if( depends>1 ) depends=1 ! temperature depends only currently
291  !depends = 0
292  nlgeom = totallag !default value
293  if( fstr_ctrl_get_param_ex( ctrl, 'INFINITESIMAL ', '# ', 0, 'E', ipt )/= 0) return
294  if( ipt/=0 ) nlgeom = infinitesimal
295 
296  ! for backward compatibility
297  if( fstr_ctrl_get_param_ex( ctrl, 'INFINITE ', '# ', 0, 'E', ipt )/= 0) return
298  if( ipt/=0 ) then
299  write(*,*) "Warning : !VISCOELASTIC : parameter 'INFINITE' is deprecated." &
300  & // " Please use the replacement parameter 'INFINITESIMAL'"
301  nlgeom = infinitesimal
302  endif
303 
304  ipt=1
305  s = 'ISOTROPIC,USER '
306  if( fstr_ctrl_get_param_ex( ctrl, 'TYPE ', s, 0, 'P', ipt ) /= 0 ) return
307  ipt = 1
308 
309  ! ISOTROPIC
310  if( ipt==1 ) then
311  n = fstr_ctrl_get_data_line_n( ctrl )
312  allocate( fval(2+depends,n) )
313  if( depends==0 ) then
314  data_fmt = "RR "
316  fstr_ctrl_get_data_array_ex( ctrl, data_fmt, fval(1,:), fval(2,:) )
317  if( fval(2,1)==0.d0 ) stop "Error in defining viscoelasticity: Relaxation time cannot be zero!"
318  endif
319  if( depends==1 ) then
320  data_fmt = "RRR "
322  fstr_ctrl_get_data_array_ex( ctrl, data_fmt, fval(1,:), fval(2,:), fval(3,:) )
323  endif
324  if( fstr_ctrl_get_viscoelasticity ==0 ) then
325  call init_table( mattable, 1, 2+depends,n, fval )
326  call dict_add_key( dict, mc_viscoelastic, mattable )
327  ! call print_table( mattable, 6 ); pause
328  endif
329  mattype = viscoelastic
330 
331  else
332  stop "ERROR: Material type not supported"
333 
334  endif
335 
336  call finalize_table( mattable )
337  if( associated(fval) ) deallocate(fval)
338  end function fstr_ctrl_get_viscoelasticity
339 
340 
342  integer function fstr_ctrl_get_trs( ctrl, mattype, matval )
343  integer(kind=kint), intent(in) :: ctrl
344  integer(kind=kint), intent(inout) :: mattype
345  real(kind=kreal),intent(out) :: matval(:)
346 
347  integer :: ipt
348  character(len=256) :: s
349 
350  ipt=1
351  s = 'WLF,ARRHENIUS '
352  if( fstr_ctrl_get_param_ex( ctrl, 'DEFINITION ', s, 0, 'P', ipt ) /= 0 ) return
353 
355  = fstr_ctrl_get_data_ex( ctrl, 1, "RRR ", matval(1), matval(2), matval(3) )
356  if( fstr_ctrl_get_trs/=0 ) return
357  mattype = mattype+ipt
358 
359  end function fstr_ctrl_get_trs
360 
361 
362  !----------------------------------------------------------------------
364  integer function fstr_ctrl_get_plasticity( ctrl, mattype, nlgeom, matval, mattable, dict )
365  integer(kind=kint), intent(in) :: ctrl
366  integer(kind=kint), intent(inout) :: mattype
367  integer(kind=kint), intent(out) :: nlgeom
368  real(kind=kreal),intent(out) :: matval(:)
369  real(kind=kreal), pointer :: mattable(:)
370  type(dict_struct), pointer :: dict
371 
372  integer(kind=kint) :: i, n, rcode, depends, ipt, hipt
373  real(kind=kreal),pointer :: fval(:,:) => null()
374  real(kind=kreal) :: phi, psi
375  character(len=HECMW_NAME_LEN) :: data_fmt
376  character(len=256) :: s
377  type( ttable ) :: mttable
378  real(kind=kreal), parameter :: pi=3.14159265358979d0
379 
381  ipt = 0; hipt = 0
382 
383  depends = 0
384  rcode = fstr_ctrl_get_param_ex( ctrl, 'DEPENDENCIES ', '# ', 0, 'I', depends )
385  if( depends>1 ) depends = 1 ! we consider temperature dependence only currently
386  if( depends > 3 ) stop "We cannot read dependencies>3 right now"
387  nlgeom = updatelag !default value
388  if( fstr_ctrl_get_param_ex( ctrl, 'KIRCHHOFF ', '# ', 0, 'E', ipt )/= 0) return
389  ! rcode = fstr_ctrl_get_param_ex( ctrl, 'FILE ', '# ', 0, 'S', fname )
390  if( ipt/=0 ) nlgeom = totallag
391  if( fstr_ctrl_get_param_ex( ctrl, 'INFINITESIMAL ', '# ', 0, 'E', ipt )/= 0) return
392  if( ipt/=0 ) nlgeom = infinitesimal
393 
394  ! for backward compatibility
395  if( fstr_ctrl_get_param_ex( ctrl, 'INFINITE ', '# ', 0, 'E', ipt )/= 0) return
396  if( ipt/=0 ) then
397  write(*,*) "Warning : !PLASTIC : parameter 'INFINITE' is deprecated." &
398  & // " Please use the replacement parameter 'INFINITESIMAL'"
399  nlgeom = infinitesimal
400  endif
401 
402  call setdigit( 1, 1, mattype )
403  call setdigit( 2, 2, mattype )
404 
405  ! hardening
406  s = 'BILINEAR,MULTILINEAR,SWIFT,RAMBERG-OSGOOD,KINEMATIC,COMBINED '
407  if( fstr_ctrl_get_param_ex( ctrl, 'HARDEN ', s , 0, 'P', hipt ) /= 0 ) return
408  if( hipt==0 ) hipt=1 ! default: linear hardening
409  call setdigit( 5, hipt-1, mattype )
410 
411  ! yield function
412  s = 'MISES,MOHR-COULOMB,DRUCKER-PRAGER,USER '
413  call setdigit( 2, 2, mattype )
414  if( fstr_ctrl_get_param_ex( ctrl, 'YIELD ', s , 0, 'P', ipt ) /= 0 ) return
415  if( ipt==0 ) ipt=1 ! default: mises yield function
416  call setdigit( 4, ipt-1, mattype )
417 
418  n = fstr_ctrl_get_data_line_n( ctrl )
419  if( n == 0 ) return ! fail in reading plastic
420  if( hipt==2 .and. n<2 ) return ! not enough data
421  if( ( ipt==2 .or. ipt==3 ) .and. hipt>2 ) hipt = 1
422 
423  select case (ipt)
424  case (1) !Mises
425  select case (hipt)
426  case (1,5) ! linear hardening, kinematic hardening
427  allocate( fval(2,n) )
428  data_fmt = "RR "
430  fstr_ctrl_get_data_array_ex( ctrl, data_fmt, fval(1,:), fval(2,:) )
431  if( fstr_ctrl_get_plasticity ==0 ) then
432  matval(m_plconst1) = fval(1,1)
433  if(hipt==1) then
434  matval(m_plconst2) = fval(2,1)
435  else
436  matval(m_plconst2) = 0.d0
437  matval(m_plconst3) = fval(2,1)
438  endif
439  endif
440  case (2) ! multilinear approximation
441  allocate( fval(depends+2,n) )
442  if( depends==0 ) then
443  data_fmt = "RR "
445  fstr_ctrl_get_data_array_ex( ctrl, data_fmt, fval(1,:), fval(2,:) )
446  if( fstr_ctrl_get_plasticity ==0 ) then
447  if( fval(2,1)/=0.d0 ) then
448  print *, "Multilinear hardening: First plastic strain must be zero"
449  stop
450  endif
451  do i=1,n
452  if( fval(2,i)<0.0 ) &
453  stop "Multilinear hardening: Error in plastic strain definition"
454  enddo
455  call init_table( mttable,1, 2+depends, n, fval )
456  call dict_add_key( dict, mc_yield, mttable )
457 
458  endif
459  else ! depends==1
460  data_fmt = "RRR "
462  fstr_ctrl_get_data_array_ex( ctrl, data_fmt, fval(1,:), fval(2,:), fval(3,:) )
463  if( fstr_ctrl_get_plasticity ==0 ) then
464  call init_table( mttable,2, 2+depends,n, fval )
465  call dict_add_key( dict, mc_yield, mttable )
466  endif
467  endif
468  case (3, 4, 6) ! swift, Ramberg-Osgood, Combined
469  allocate( fval(3,1) )
470  data_fmt = "RRR "
472  fstr_ctrl_get_data_array_ex( ctrl, data_fmt, fval(1,:), fval(2,:), fval(3,:) )
473  if( fstr_ctrl_get_plasticity ==0 ) then
474  matval(m_plconst1) = fval(1,1)
475  matval(m_plconst2) = fval(2,1)
476  matval(m_plconst3) = fval(3,1)
477  endif
478  case default
479  print *, "Error in hardening definition!"
480  stop
481  end select
482  case (2, 3) ! Mohr-Coulomb, Drucker-Prager
483  select case (hipt)
484  case (1) ! linear hardening
485  allocate( fval(4,n) )
486  data_fmt = "RRrr "
487  fval(4,:) = -1.d0
489  = fstr_ctrl_get_data_array_ex( ctrl, data_fmt, fval(1,:), fval(2,:), fval(3,:), fval(4,:) )
490  if( fstr_ctrl_get_plasticity ==0 ) then
491  matval(m_plconst1) = fval(1,1) ! c
492  matval(m_plconst2) = fval(3,1) ! H
493  phi = fval(2,1)*pi/180.d0
494  if( fval(4,1) >= 0.d0 ) then
495  psi = fval(4,1)*pi/180.d0
496  else
497  psi = phi
498  endif
499  endif
500  case (2) ! multilinear hardening
501  if( depends>0 ) then
502  stop "Mohr-Coulomb and Drucker-Prager do not support temperature dependency"
503  endif
504  allocate( fval(2,n) )
505  data_fmt = "Rr "
506  fval(2,:) = -1.d0
508  fstr_ctrl_get_data_array_ex( ctrl, data_fmt, fval(1,:), fval(2,:) )
509  if( fstr_ctrl_get_plasticity ==0 ) then
510  phi =fval(1,1)*pi/180.d0
511  if( fval(2,1) >= 0.d0 ) then
512  psi = fval(2,1)*pi/180.d0
513  else
514  psi = phi
515  endif
516  if( fval(2,2)/=0.d0 ) then
517  print *, "Multilinear hardening: First plastic strain must be zero"
518  stop
519  endif
520  do i=2,n
521  if( fval(2,i)<0.0 ) &
522  stop "Multilinear hardening: Error in plastic strain definition"
523  enddo
524  call init_table( mttable,1, 2, n-1, fval(1:2,2:n) )
525  call dict_add_key( dict, mc_yield, mttable )
526  endif
527  end select
528  if( ipt==3 ) then ! Drucker-Prager
529  matval(m_plconst3) = 2.d0*sin(phi)/ ( sqrt(3.d0)*(3.d0+sin(phi)) ) ! eta
530  matval(m_plconst4) = 6.d0*cos(phi)/ ( sqrt(3.d0)*(3.d0+sin(phi)) ) ! xi
531  matval(m_plconst5) = 2.d0*sin(psi)/ ( sqrt(3.d0)*(3.d0+sin(psi)) ) ! etabar
532  else ! Mohr-Coulomb
533  matval(m_plconst3) = phi
534  matval(m_plconst4) = psi
535  endif
536 
537  case(4)
538  fstr_ctrl_get_plasticity = read_user_matl( ctrl, matval(101:200) )
539 
540  case default
541  stop "Yield function not supported"
542  end select
543 
544  if( associated(fval) ) deallocate(fval)
545  call finalize_table( mttable )
546  end function fstr_ctrl_get_plasticity
547 
548 
549  !----------------------------------------------------------------------
551  integer function fstr_ctrl_get_viscoplasticity( ctrl, mattype, nlgeom, dict )
552  integer(kind=kint), intent(in) :: ctrl
553  integer(kind=kint), intent(inout) :: mattype
554  integer(kind=kint), intent(out) :: nlgeom
555  type(dict_struct), pointer :: dict
556 
557  integer(kind=kint) :: i,j, rcode, depends, ipt, n
558  real(kind=kreal),pointer :: fval(:,:)
559  character(len=HECMW_NAME_LEN) :: data_fmt
560  type( ttable ) :: mattable
561  character(len=256) :: s
562 
564  depends = 0
565  rcode = fstr_ctrl_get_param_ex( ctrl, 'DEPENDENCIES ', '# ', 0, 'I', depends )
566  if( depends>1 ) depends=1 ! temperature depends only currently
567  nlgeom = updatelag !default value
568  if( fstr_ctrl_get_param_ex( ctrl, 'KIRCHHOFF ', '# ', 0, 'E', ipt )/= 0) return
569  if( ipt/=0 ) nlgeom = totallag
570 
571  ipt=1
572  s = 'NORTON,USER '
573  if( fstr_ctrl_get_param_ex( ctrl, 'TYPE ', s, 0, 'P', ipt ) /= 0 ) return
574  ipt = 1
575 
576  ! NORTON
577  if( ipt==1 ) then
578  n = fstr_ctrl_get_data_line_n( ctrl )
579  allocate( fval(3+depends,n) )
580  if( depends==0 ) then
581  data_fmt = "RRR "
583  fstr_ctrl_get_data_array_ex( ctrl, data_fmt, fval(1,:), fval(2,:), fval(3,:) )
584  endif
585  if( depends==1 ) then
586  data_fmt = "RRRR "
588  fstr_ctrl_get_data_array_ex( ctrl, data_fmt, fval(1,:), fval(2,:), fval(3,:), fval(4,:) )
589  endif
590  if( fstr_ctrl_get_viscoplasticity ==0 ) then
591  call init_table( mattable, depends, 3+depends,n, fval )
592  call dict_add_key( dict, mc_norton, mattable )
593  ! call print_table( mattable, 6 ); pause
594  endif
595  mattype = norton
596 
597  else
598  stop "ERROR: Material type not supported"
599 
600  endif
601 
602  call finalize_table( mattable )
603  if( associated(fval) ) deallocate(fval)
604  end function fstr_ctrl_get_viscoplasticity
605 
606  !----------------------------------------------------------------------
608  integer function fstr_ctrl_get_density( ctrl, matval )
609  integer(kind=kint), intent(in) :: ctrl
610  real(kind=kreal),intent(out) :: matval(:)
611 
612  integer(kind=kint) :: i, rcode, depends
613  real(kind=kreal),pointer :: fval(:,:)
614  character(len=HECMW_NAME_LEN) :: data_fmt
615 
616  data_fmt = "R "
617 
619 
620  depends = 0
621  rcode = fstr_ctrl_get_param_ex( ctrl, 'DEPENDENCIES ', '# ', 0, 'I', depends )
622  if( depends>1 ) depends = 1 ! we consider temperature dependence only currently
623 
624  allocate( fval(1,depends+1) )
625  do i=2,1+depends
626  data_fmt = data_fmt //"R "
627  enddo
629  = fstr_ctrl_get_data_array_ex( ctrl, data_fmt, fval(1,:) )
630  if( fstr_ctrl_get_density==0 ) matval(m_density) = fval(1,1)
631 
632  if( associated(fval) ) deallocate(fval)
633 
634  end function fstr_ctrl_get_density
635 
636 
637  !----------------------------------------------------------------------
639  integer function fstr_ctrl_get_expansion_coeff( ctrl, matval, dict )
640  integer(kind=kint), intent(in) :: ctrl
641  real(kind=kreal),intent(out) :: matval(:)
642  type(dict_struct), pointer :: dict
643 
644  integer(kind=kint) :: i, n, rcode, depends, ipt
645  real(kind=kreal),pointer :: fval(:,:)
646  type( ttable ) :: mttable
647  character(len=HECMW_NAME_LEN) :: data_fmt, ss
648 
649  data_fmt = "R "
650 
652  n = fstr_ctrl_get_data_line_n( ctrl )
653  if( n == 0 ) return ! fail in reading plastic
654 
655  ss = 'ISOTROPIC,ORTHOTROPIC '
656  ipt = 1 !default
657  if( fstr_ctrl_get_param_ex( ctrl, 'TYPE ', ss, 0, 'P', ipt ) /= 0 ) return
658 
659  depends = 0
660  rcode = fstr_ctrl_get_param_ex( ctrl, 'DEPENDENCIES ', '# ', 0, 'I', depends )
661  if( depends>1 ) depends = 1 ! we consider temperature dependence only currently
662 
663  if( ipt==1 ) then
664  allocate( fval(depends+1, n) )
665  do i=2,1+depends
666  data_fmt = data_fmt //"R "
667  enddo
668  if( depends==0 ) then
670  fstr_ctrl_get_data_array_ex( ctrl, "R ", fval(1,:) )
671  else
673  fstr_ctrl_get_data_array_ex( ctrl, "RR ", fval(1,:), fval(2,:) )
674  endif
675  if( fstr_ctrl_get_expansion_coeff==0 ) then
676  matval(m_exapnsion) = fval(1,1)
677  call init_table( mttable,depends, 1+depends, n, fval )
678  call dict_add_key( dict, mc_themoexp, mttable )
679  endif
680  else
681  allocate( fval(3+depends,n) )
682  do i=2,3+depends
683  data_fmt = trim(data_fmt) //"R "
684  enddo
685  if( depends==0 ) then
687  fstr_ctrl_get_data_array_ex( ctrl, data_fmt, fval(1,:), fval(2,:), fval(3,:) )
688  elseif( depends==1 ) then
690  fstr_ctrl_get_data_array_ex( ctrl, data_fmt, fval(1,:), fval(2,:), fval(3,:), fval(4,:) )
691  endif
692  if( fstr_ctrl_get_expansion_coeff==0 ) then
693  call init_table( mttable, depends, 3+depends,n, fval )
694  if( fstr_ctrl_get_expansion_coeff==0 ) call dict_add_key( dict, mc_orthoexp, mttable )
695  endif
696  endif
697 
698  call finalize_table( mttable )
699  if( associated(fval) ) deallocate(fval)
700  end function fstr_ctrl_get_expansion_coeff
701 
702 
703  integer function read_user_matl( ctrl, matval )
704  integer(kind=kint), intent(in) :: ctrl
705  real(kind=kreal),intent(out) :: matval(:)
706 
707  integer(kind=kint) :: n, i, j
708  real(kind=kreal) :: fval(10,10)
709 
710  read_user_matl = -1
711 
712  n = fstr_ctrl_get_data_line_n( ctrl )
713  if( n > 10 ) stop "Num of data lines for user-defined material exceeds 10"
714  fval =0.d0
715  if( fstr_ctrl_get_data_array_ex( ctrl, 'rrrrrrrrrr ', fval(1,:), fval(2,:), fval(3,:), &
716  fval(4,:), fval(5,:), fval(6,:), fval(7,:), fval(8,:), fval(9,:), fval(10,:) ) /= 0 ) return
717  do i=1,10
718  do j=1,10
719  matval((i-1)*10+j)=fval(j,i)
720  enddo
721  enddo
722 
723  read_user_matl = 0
724  end function read_user_matl
725 
726  !----------------------------------------------------------------------
728  integer function fstr_ctrl_get_fluid( ctrl, mattype, nlgeom, matval, dict )
729  integer(kind=kint), intent(in) :: ctrl
730  integer(kind=kint), intent(inout) :: mattype
731  integer(kind=kint), intent(out) :: nlgeom
732  real(kind=kreal),intent(out) :: matval(:)
733  type(dict_struct), pointer :: dict
734 
735  integer(kind=kint) :: i,j, rcode, depends, ipt, n
736  real(kind=kreal),pointer :: fval(:,:)
737  character(len=HECMW_NAME_LEN) :: data_fmt
738  type( ttable ) :: mattable
739  logical :: isok
740  character(len=256) :: s
741 
743  depends = 0
744  rcode = fstr_ctrl_get_param_ex( ctrl, 'DEPENDENCIES ', '# ', 0, 'I', depends )
745  if( depends>1 ) depends=1 ! temperature depends only currently
746  if( depends > 3 ) stop "We cannot read dependencies>3 right now"
747  nlgeom = totallag !default value
748 
749  ipt=1
750  s = 'INCOMP_NEWTONIAN '
751  if( fstr_ctrl_get_param_ex( ctrl, 'TYPE ', s, 0, 'P', ipt ) /= 0 ) return
752 
753  n = fstr_ctrl_get_data_line_n( ctrl )
754  ! ISOTROPIC
755  if( ipt==1 ) then
756  allocate( fval(1+depends,n) )
757  if( depends==0 ) then
758  data_fmt = "R "
760  fstr_ctrl_get_data_array_ex( ctrl, data_fmt, fval(1,:) )
761  endif
762  if( depends==1 ) then
763  data_fmt = "RR "
765  fstr_ctrl_get_data_array_ex( ctrl, data_fmt, fval(1,:), fval(2,:) )
766  endif
767  if( fstr_ctrl_get_fluid ==0 ) then
768  matval(m_viscocity) = fval(1,1)
769  call init_table( mattable, depends, 1+depends,n, fval )
770  call dict_add_key( dict, mc_incomp_newtonian, mattable )
771  ! call print_table( mattable, 6 ); pause
772  endif
773  mattype = incomp_newtonian
774 
775  else
776  stop "ERROR: Material type not supported"
777 
778  endif
779 
780  call finalize_table( mattable )
781  if( associated(fval) ) deallocate(fval)
782  end function fstr_ctrl_get_fluid
783 
784  !----------------------------------------------------------------------
786  integer function fstr_ctrl_get_spring_d( ctrl, mattype, nlgeom, matval_i, dict )
787  integer(kind=kint), intent(in) :: ctrl
788  integer(kind=kint), intent(inout) :: mattype
789  integer(kind=kint), intent(out) :: nlgeom
790  integer(kind=kint), intent(out) :: matval_i(:)
791  type(dict_struct), pointer :: dict
792 
793  integer(kind=kint) :: i,j, rcode, depends, ipt, n, dof1, dof2
794  real(kind=kreal),pointer :: fval(:,:)
795  integer(kind=kint),pointer :: ival(:,:)
796  character(len=HECMW_NAME_LEN) :: data_fmt
797  type( ttable ) :: mattable
798  logical :: isok
799  character(len=DICT_KEY_LENGTH) :: spkey
800 
802  depends = 0
803  !rcode = fstr_ctrl_get_param_ex( ctrl, 'DEPENDENCIES ', '# ', 0, 'I', depends )
804  !if( depends>1 ) depends=1 ! temperature depends only currently
805  nlgeom = infinitesimal !default value
806 
807  n = fstr_ctrl_get_data_line_n( ctrl )
808  allocate( fval(1+depends,n), ival(2,n) )
809  if( depends==0 ) then
810  data_fmt = "IIR "
812  fstr_ctrl_get_data_array_ex( ctrl, data_fmt, ival(1,:), ival(2,:), fval(1,:) )
813  !else if( depends==1 ) then
814  ! data_fmt = "IIRR "
815  ! fstr_ctrl_get_SPRING_D = &
816  ! fstr_ctrl_get_data_array_ex( ctrl, data_fmt, ival(1,:), ival(2,:), fval(1,:), fval(2,:) )
817  endif
818  if( fstr_ctrl_get_spring_d ==0 ) then
819  matval_i(m_spring_d_ndoffset+1) = n ! number of dof pairs
820  do i=1,n
821  matval_i(m_spring_d_ndoffset+2*i ) = ival(1,i) ! first dof
822  matval_i(m_spring_d_ndoffset+2*i+1) = ival(2,i) ! second dof
823  call init_table( mattable, depends, 1+depends, 1, fval(1,i:i) )
824  write(spkey,'(A,I0)') trim(mc_spring),i
825  call dict_add_key( dict, trim(spkey), mattable )
826  call finalize_table( mattable )
827  enddo
828  endif
829 
830  mattype = connector
831  if( associated(fval) ) deallocate(fval)
832  if( associated(ival) ) deallocate(ival)
833  end function fstr_ctrl_get_spring_d
834 
835  !----------------------------------------------------------------------
837  integer function fstr_ctrl_get_spring_a( ctrl, mattype, nlgeom, matval_i, dict )
838  integer(kind=kint), intent(in) :: ctrl
839  integer(kind=kint), intent(inout) :: mattype
840  integer(kind=kint), intent(out) :: nlgeom
841  integer(kind=kint), intent(out) :: matval_i(:)
842  type(dict_struct), pointer :: dict
843 
844  integer(kind=kint) :: i,j, rcode, depends, ipt, n, dof1, dof2
845  real(kind=kreal),pointer :: fval(:,:)
846  character(len=HECMW_NAME_LEN) :: data_fmt
847  type( ttable ) :: mattable
848  logical :: isok
849  character(len=DICT_KEY_LENGTH) :: spkey
850 
852  depends = 0
853  nlgeom = infinitesimal !default value
854 
855  n = fstr_ctrl_get_data_line_n( ctrl )
856  allocate( fval(1+depends,n) )
857  if( depends==0 ) then
858  data_fmt = "R "
860  fstr_ctrl_get_data_array_ex( ctrl, data_fmt, fval(1,:) )
861  !else if( depends==1 ) then
862  ! data_fmt = "IIRR "
863  ! fstr_ctrl_get_SPRING_A = &
864  ! fstr_ctrl_get_data_array_ex( ctrl, data_fmt, fval(1,:), fval(2,:) )
865  endif
866  if( fstr_ctrl_get_spring_a ==0 ) then
867  matval_i(m_spring_a_ndoffset+1) = 1 ! number of dof pairs
868  do i=1,n
869  call init_table( mattable, depends, 1+depends, 1, fval(1,i:i) )
870  write(spkey,'(A,A)') trim(mc_spring),'_A'
871  call dict_add_key( dict, trim(spkey), mattable )
872  call finalize_table( mattable )
873  enddo
874  endif
875 
876  mattype = connector
877  if( associated(fval) ) deallocate(fval)
878  end function fstr_ctrl_get_spring_a
879 
880  !----------------------------------------------------------------------
882  integer function fstr_ctrl_get_dashpot_d( ctrl, mattype, nlgeom, matval_i, dict )
883  integer(kind=kint), intent(in) :: ctrl
884  integer(kind=kint), intent(inout) :: mattype
885  integer(kind=kint), intent(out) :: nlgeom
886  integer(kind=kint), intent(out) :: matval_i(:)
887  type(dict_struct), pointer :: dict
888 
889  integer(kind=kint) :: i,j, rcode, depends, ipt, n, dof1, dof2
890  real(kind=kreal),pointer :: fval(:,:)
891  integer(kind=kint),pointer :: ival(:,:)
892  character(len=HECMW_NAME_LEN) :: data_fmt
893  type( ttable ) :: mattable
894  logical :: isok
895  character(len=DICT_KEY_LENGTH) :: spkey
896 
898  depends = 0
899  !rcode = fstr_ctrl_get_param_ex( ctrl, 'DEPENDENCIES ', '# ', 0, 'I', depends )
900  !if( depends>1 ) depends=1 ! temperature depends only currently
901  nlgeom = infinitesimal !default value
902 
903  n = fstr_ctrl_get_data_line_n( ctrl )
904  allocate( fval(1+depends,n), ival(2,n) )
905  if( depends==0 ) then
906  data_fmt = "IIR "
908  fstr_ctrl_get_data_array_ex( ctrl, data_fmt, ival(1,:), ival(2,:), fval(1,:) )
909  !else if( depends==1 ) then
910  ! data_fmt = "IIRR "
911  ! fstr_ctrl_get_DASHPOT_D = &
912  ! fstr_ctrl_get_data_array_ex( ctrl, data_fmt, ival(1,:), ival(2,:), fval(1,:), fval(2,:) )
913  endif
914  if( fstr_ctrl_get_dashpot_d ==0 ) then
915  matval_i(m_dashpot_d_ndoffset+1) = n
916  do i=1,n
917  matval_i(m_dashpot_d_ndoffset+2*i ) = ival(1,i) ! first dof
918  matval_i(m_dashpot_d_ndoffset+2*i+1) = ival(2,i) ! second dof
919  call init_table( mattable, depends, 1+depends, 1, fval(1,i:i) )
920  write(spkey,'(A,I0)') trim(mc_dashpot),i
921  call dict_add_key( dict, trim(spkey), mattable )
922  call finalize_table( mattable )
923  enddo
924  endif
925 
926  mattype = connector
927  if( associated(fval) ) deallocate(fval)
928  if( associated(ival) ) deallocate(ival)
929  end function fstr_ctrl_get_dashpot_d
930 
931  !----------------------------------------------------------------------
933  integer function fstr_ctrl_get_dashpot_a( ctrl, mattype, nlgeom, matval_i, dict )
934  integer(kind=kint), intent(in) :: ctrl
935  integer(kind=kint), intent(inout) :: mattype
936  integer(kind=kint), intent(out) :: nlgeom
937  integer(kind=kint), intent(out) :: matval_i(:)
938  type(dict_struct), pointer :: dict
939 
940  integer(kind=kint) :: i,j, rcode, depends, ipt, n, dof1, dof2
941  real(kind=kreal),pointer :: fval(:,:)
942  character(len=HECMW_NAME_LEN) :: data_fmt
943  type( ttable ) :: mattable
944  logical :: isok
945  character(len=DICT_KEY_LENGTH) :: spkey
946 
948  depends = 0
949  nlgeom = infinitesimal !default value
950 
951  n = fstr_ctrl_get_data_line_n( ctrl )
952  allocate( fval(1+depends,n) )
953  if( depends==0 ) then
954  data_fmt = "R "
956  fstr_ctrl_get_data_array_ex( ctrl, data_fmt, fval(1,:) )
957  !else if( depends==1 ) then
958  ! data_fmt = "IIRR "
959  ! fstr_ctrl_get_DASHPOT_A = &
960  ! fstr_ctrl_get_data_array_ex( ctrl, data_fmt, fval(1,:), fval(2,:) )
961  endif
962  if( fstr_ctrl_get_dashpot_a ==0 ) then
963  matval_i(m_dashpot_a_ndoffset+1) = 1 ! number of dof pairs
964  do i=1,n
965  call init_table( mattable, depends, 1+depends, 1, fval(1,i:i) )
966  write(spkey,'(A,A)') trim(mc_dashpot),'_A'
967  call dict_add_key( dict, trim(spkey), mattable )
968  call finalize_table( mattable )
969  enddo
970  endif
971 
972  mattype = connector
973  if( associated(fval) ) deallocate(fval)
974  end function fstr_ctrl_get_dashpot_a
975 
976 end module fstr_ctrl_material
mmaterial::neohooke
integer(kind=kint), parameter neohooke
Definition: material.f90:71
mmaterial::m_plconst10
integer(kind=kint), parameter m_plconst10
Definition: material.f90:124
mmaterial::m_exapnsion
integer(kind=kint), parameter m_exapnsion
Definition: material.f90:105
mmaterial::infinitesimal
integer(kind=kint), parameter infinitesimal
Definition: material.f90:13
mmaterial::mc_viscoelastic
character(len=dict_key_length) mc_viscoelastic
Definition: material.f90:145
mmaterial::m_dashpot_a_ndoffset
integer(kind=kint), parameter m_dashpot_a_ndoffset
Definition: material.f90:137
mmaterial::mc_yield
character(len=dict_key_length) mc_yield
Definition: material.f90:142
mmaterial::totallag
integer(kind=kint), parameter totallag
Definition: material.f90:14
mmaterial::userhyperelastic
integer(kind=kint), parameter userhyperelastic
Definition: material.f90:74
mmaterial::m_density
integer(kind=kint), parameter m_density
Definition: material.f90:94
fstr_ctrl_material::fstr_ctrl_get_density
integer function fstr_ctrl_get_density(ctrl, matval)
Read in !DENSITY.
Definition: fstr_ctrl_material.f90:609
mmaterial::mc_isoelastic
character(len=dict_key_length) mc_isoelastic
Definition: material.f90:140
mmaterial::mc_incomp_newtonian
character(len=dict_key_length) mc_incomp_newtonian
Definition: material.f90:147
m_table
This module provides data structure table which would be dictionaried afterwards.
Definition: ttable.f90:7
mmaterial::mc_spring
character(len=dict_key_length) mc_spring
Definition: material.f90:148
fstr_ctrl_material::fstr_ctrl_get_hyperelastic
integer function fstr_ctrl_get_hyperelastic(ctrl, mattype, nlgeom, matval)
Read in !HYPERELASTIC.
Definition: fstr_ctrl_material.f90:165
mmaterial::mooneyrivlin_aniso
integer(kind=kint), parameter mooneyrivlin_aniso
Definition: material.f90:75
mmaterial::m_plconst2
integer(kind=kint), parameter m_plconst2
Definition: material.f90:99
mmaterial::mc_dashpot
character(len=dict_key_length) mc_dashpot
Definition: material.f90:149
mmaterial::incomp_newtonian
integer(kind=kint), parameter incomp_newtonian
Definition: material.f90:80
mmaterial::m_plconst6
integer(kind=kint), parameter m_plconst6
Definition: material.f90:120
mmaterial::m_plconst8
integer(kind=kint), parameter m_plconst8
Definition: material.f90:122
mmaterial::m_youngs
integer(kind=kint), parameter m_youngs
Definition: material.f90:92
fstr_ctrl_material::fstr_ctrl_get_expansion_coeff
integer function fstr_ctrl_get_expansion_coeff(ctrl, matval, dict)
Read in !EXPANSION_COEFF.
Definition: fstr_ctrl_material.f90:640
mmaterial::m_poisson
integer(kind=kint), parameter m_poisson
Definition: material.f90:93
mmaterial::m_plconst5
integer(kind=kint), parameter m_plconst5
Definition: material.f90:102
mmaterial::viscoelastic
integer(kind=kint), parameter viscoelastic
Definition: material.f90:77
mmaterial::m_spring_a_ndoffset
integer(kind=kint), parameter m_spring_a_ndoffset
Definition: material.f90:135
mmaterial::usermaterial
integer(kind=kint), parameter usermaterial
Definition: material.f90:63
mmaterial::m_plconst3
integer(kind=kint), parameter m_plconst3
Definition: material.f90:100
mmaterial::elastic
integer(kind=kint), parameter elastic
Definition: material.f90:65
fstr_ctrl_material::fstr_ctrl_get_usermaterial
integer function fstr_ctrl_get_usermaterial(ctrl, mattype, nlgeom, nstatus, matval)
Read in !USER_MATERIAL.
Definition: fstr_ctrl_material.f90:32
mmaterial::m_plconst7
integer(kind=kint), parameter m_plconst7
Definition: material.f90:121
mmaterial::userelastic
integer(kind=kint), parameter userelastic
Definition: material.f90:67
mmaterial::m_dashpot_d_ndoffset
integer(kind=kint), parameter m_dashpot_d_ndoffset
Definition: material.f90:136
mmaterial::mc_orthoelastic
character(len=dict_key_length) mc_orthoelastic
Definition: material.f90:141
fstr_ctrl_material::fstr_ctrl_get_spring_d
integer function fstr_ctrl_get_spring_d(ctrl, mattype, nlgeom, matval_i, dict)
Read in !SPRING_D.
Definition: fstr_ctrl_material.f90:787
fstr_ctrl_material::fstr_ctrl_get_spring_a
integer function fstr_ctrl_get_spring_a(ctrl, mattype, nlgeom, matval_i, dict)
Read in !SPRING_A.
Definition: fstr_ctrl_material.f90:838
mmaterial::updatelag
integer(kind=kint), parameter updatelag
Definition: material.f90:15
fstr_ctrl_get_data_line_n
int fstr_ctrl_get_data_line_n(int *ctrl)
Definition: fstr_ctrl_util.c:1462
fstr_ctrl_material::fstr_ctrl_get_elasticity
integer function fstr_ctrl_get_elasticity(ctrl, mattype, nlgeom, matval, dict)
Read in !ELASTIC.
Definition: fstr_ctrl_material.f90:56
mmaterial::m_plconst1
integer(kind=kint), parameter m_plconst1
Definition: material.f90:98
mmaterial::mn_orthoelastic
integer(kind=kint), parameter mn_orthoelastic
Definition: material.f90:66
hecmw
Definition: hecmw.f90:6
mmaterial::arrudaboyce
integer(kind=kint), parameter arrudaboyce
Definition: material.f90:73
mmaterial::mc_orthoexp
character(len=dict_key_length) mc_orthoexp
Definition: material.f90:144
fstr_ctrl_get_param_ex
int fstr_ctrl_get_param_ex(int *ctrl, const char *param_name, const char *value_list, int *necessity, char *type, void *val)
Definition: fstr_ctrl_util.c:1404
mmaterial::setdigit
subroutine setdigit(npos, ival, mtype)
Modify material type.
Definition: material.f90:277
m_table::init_table
subroutine init_table(table, ndp, col, row, tbval)
Definition: ttable.f90:43
mmaterial::m_spring_d_ndoffset
integer(kind=kint), parameter m_spring_d_ndoffset
Definition: material.f90:134
fstr_ctrl_material::fstr_ctrl_get_dashpot_d
integer function fstr_ctrl_get_dashpot_d(ctrl, mattype, nlgeom, matval_i, dict)
Read in !DASHPOT_D.
Definition: fstr_ctrl_material.f90:883
mmaterial::m_plconst4
integer(kind=kint), parameter m_plconst4
Definition: material.f90:101
mmaterial::m_viscocity
integer(kind=kint), parameter m_viscocity
Definition: material.f90:117
mmaterial::mc_themoexp
character(len=dict_key_length) mc_themoexp
Definition: material.f90:143
fstr_ctrl_material::fstr_ctrl_get_plasticity
integer function fstr_ctrl_get_plasticity(ctrl, mattype, nlgeom, matval, mattable, dict)
Read in !PLASTIC.
Definition: fstr_ctrl_material.f90:365
fstr_ctrl_get_data_array_ex
int fstr_ctrl_get_data_array_ex(int *ctrl, const char *format,...)
Definition: fstr_ctrl_util.c:1701
fstr_ctrl_get_data_ex
int fstr_ctrl_get_data_ex(int *ctrl, int *line_no, const char *format,...)
Definition: fstr_ctrl_util.c:1628
mmaterial::m_plconst9
integer(kind=kint), parameter m_plconst9
Definition: material.f90:123
fstr_ctrl_material::fstr_ctrl_get_material
integer function fstr_ctrl_get_material(ctrl, matname)
Read in !MATERIAL.
Definition: fstr_ctrl_material.f90:22
fstr_ctrl_material::fstr_ctrl_get_fluid
integer function fstr_ctrl_get_fluid(ctrl, mattype, nlgeom, matval, dict)
Read in !FLUID.
Definition: fstr_ctrl_material.f90:729
fstr_ctrl_material::fstr_ctrl_get_trs
integer function fstr_ctrl_get_trs(ctrl, mattype, matval)
Read in !TRS.
Definition: fstr_ctrl_material.f90:343
m_table::ttable
Definition: ttable.f90:20
m_table::finalize_table
subroutine finalize_table(table)
Definition: ttable.f90:81
mmaterial
This module summarizes all information of material properties.
Definition: material.f90:6
mmaterial::norton
integer(kind=kint), parameter norton
Definition: material.f90:78
fstr_ctrl_material::fstr_ctrl_get_dashpot_a
integer function fstr_ctrl_get_dashpot_a(ctrl, mattype, nlgeom, matval_i, dict)
Read in !DASHPOT_A.
Definition: fstr_ctrl_material.f90:934
mmaterial::mooneyrivlin
integer(kind=kint), parameter mooneyrivlin
Definition: material.f90:72
fstr_ctrl_material::fstr_ctrl_get_viscoelasticity
integer function fstr_ctrl_get_viscoelasticity(ctrl, mattype, nlgeom, dict)
Read in !VISCOELASTIC.
Definition: fstr_ctrl_material.f90:276
mmaterial::connector
integer(kind=kint), parameter connector
Definition: material.f90:81
fstr_ctrl_material::fstr_ctrl_get_viscoplasticity
integer function fstr_ctrl_get_viscoplasticity(ctrl, mattype, nlgeom, dict)
Read in !CREEP.
Definition: fstr_ctrl_material.f90:552
mmaterial::mc_norton
character(len=dict_key_length) mc_norton
Definition: material.f90:146
fstr_ctrl_material
This module manages read in of various material properties.
Definition: fstr_ctrl_material.f90:6