FrontISTR  6.0.0
Large-scale structural analysis program with finit element method
calMatMatrix.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 module m_matmatrix
7  use hecmw_util
8  use mmaterial
9  use mmechgauss
10  use m_elasticlinear
11  use mhyperelastic
12  use m_elastoplastic
13  use mviscoelastic
14  use mcreep
15  use muelastic
16  use mumat
17 
18  implicit none
19 
20 contains
21 
23  integer function getnlgeomflag( gauss )
24  type( tgaussstatus ), intent(in) :: gauss
25  getnlgeomflag = gauss%pMaterial%nlgeom_flag
26  end function
27 
29  subroutine matlmatrix( gauss, sectType, matrix, time, dtime, cdsys, temperature, isEp, hdflag )
30  type( tgaussstatus ), intent(in) :: gauss
31  integer, intent(in) :: sectType
32  real(kind=kreal), intent(out) :: matrix(:,:)
33  real(kind=kreal), intent(in) :: time
34  real(kind=kreal), intent(in) :: dtime
35  real(kind=kreal), intent(in) :: cdsys(3,3)
36  real(kind=kreal), intent(in) :: temperature
37  integer(kind=kint), intent(in), optional :: isEp
38  integer(kind=kint), intent(in), optional :: hdflag
39 
40  integer :: i
41  integer :: flag, hdflag_in
42  real(kind=kreal) :: cijkl(3,3,3,3)
43  type( tmaterial ), pointer :: matl
44  matl=>gauss%pMaterial
45 
46  flag = 0
47  if( present(isep) )then
48  if( isep == 1 )flag = 1
49  endif
50 
51  hdflag_in = 0
52  if( present(hdflag) ) hdflag_in = hdflag
53 
54  if( matl%mtype==userelastic ) then
55  call uelasticmatrix( matl%variables(101:), gauss%strain, matrix )
56  elseif( isviscoelastic(matl%mtype) ) then
57  call calviscoelasticmatrix( matl, secttype, dtime, matrix, temperature )
58  elseif( iselastic(matl%mtype) .or. flag==1 ) then
59  if(flag==1)then
61  else
62  i = getelastictype(gauss%pMaterial%mtype)
63  endif
64 
65  if( i==0 ) then
66  call calelasticmatrix( matl, secttype, matrix, temperature, hdflag=hdflag_in )
67  elseif( i==1 ) then
68  call calelasticmatrix_ortho( gauss%pMaterial, secttype, cdsys, matrix, temperature, hdflag=hdflag_in )
69  else
70  !$omp critical
71  print *, "Elasticity type", matl%mtype, "not supported"
72  !$omp end critical
73  stop
74  endif
75 
76  elseif( matl%mtype==neohooke .or. matl%mtype==mooneyrivlin ) then
77  call calelasticmooneyrivlin( matl, secttype, cijkl, gauss%strain, hdflag=hdflag_in )
78  call mat_c2d( cijkl, matrix, secttype )
79  elseif( matl%mtype==arrudaboyce ) then
80  call calelasticarrudaboyce( matl, secttype, cijkl, gauss%strain )
81  call mat_c2d( cijkl, matrix, secttype )
82  elseif( matl%mtype==mooneyrivlin_aniso ) then
83  call calelasticmooneyrivlinaniso( matl, secttype, cijkl, gauss%strain, cdsys, hdflag=hdflag_in )
84  call mat_c2d( cijkl, matrix, secttype )
85  elseif( matl%mtype==userhyperelastic ) then
86  call uelasticmatrix( matl%variables(101:), gauss%strain, matrix )
87  elseif( iselastoplastic(matl%mtype) ) then
88  call calelastoplasticmatrix( matl, secttype, gauss%stress, &
89  gauss%istatus(1), gauss%fstatus, gauss%plstrain, matrix, temperature, hdflag=hdflag_in )
90  elseif( matl%mtype==usermaterial ) then
91  call umatlmatrix( matl%name, matl%variables(101:), gauss%strain, &
92  gauss%stress, gauss%fstatus, matrix, dtime, time )
93  elseif( matl%mtype==norton ) then
94  call iso_creep( matl, secttype, gauss%stress, gauss%strain, gauss%fstatus, &
95  gauss%plstrain, dtime, time, matrix, temperature, hdflag=hdflag_in )
96  else
97  stop "Material type not supported!"
98  endif
99 
100  end subroutine
101 
102  !
104  subroutine stressupdate( gauss, sectType, strain, stress, cdsys, time, dtime, temp, tempn, hdflag )
105  type( tgaussstatus ), intent(inout) :: gauss
106  integer, intent(in) :: sectType
107  real(kind=kreal), intent(in) :: strain(6)
108  real(kind=kreal), intent(inout) :: stress(6)
109  real(kind=kreal), intent(in) :: cdsys(3,3)
110  real(kind=kreal), intent(in), optional :: time
111  real(kind=kreal), intent(in), optional :: dtime
112  real(kind=kreal), intent(in) :: temp
113  real(kind=kreal), intent(in) :: tempn
114  integer(kind=kint), intent(in) :: hdflag
115 
116  if( gauss%pMaterial%mtype==neohooke .or. gauss%pMaterial%mtype==mooneyrivlin ) then
117  call calupdateelasticmooneyrivlin( gauss%pMaterial, secttype, strain, stress, gauss%strain_energy, hdflag=hdflag )
118  elseif( gauss%pMaterial%mtype==arrudaboyce ) then ! Arruda-Boyce Hyperelastic material
119  call calupdateelasticarrudaboyce( gauss%pMaterial, secttype, strain, stress )
120  elseif( gauss%pMaterial%mtype==mooneyrivlin_aniso ) then
121  call calupdateelasticmooneyrivlinaniso( gauss%pMaterial, secttype, strain, stress, cdsys, hdflag=hdflag )
122  elseif( gauss%pMaterial%mtype==userhyperelastic .or. gauss%pMaterial%mtype==userelastic ) then ! user-defined
123  call uelasticupdate( gauss%pMaterial%variables(101:), strain, stress )
124  elseif( iselastoplastic( gauss%pMaterial%mtype ) ) then
125  call backwardeuler( gauss%pMaterial, stress, gauss%plstrain, gauss%istatus(1), gauss%fstatus, &
126  gauss%plpotential, temp )
127  elseif( isviscoelastic( gauss%pMaterial%mtype) ) then
128  if( .not. present(dtime) ) stop "error in viscoelastic update!"
129  call updateviscoelastic( gauss%pMaterial, secttype, strain, stress, gauss%fstatus, dtime, temp, tempn )
130  elseif ( gauss%pMaterial%mtype==norton ) then
131  if( .not. present(dtime) ) stop "error in viscoelastic update!"
132  call update_iso_creep( gauss%pMaterial, secttype, strain, stress, gauss%fstatus, &
133  & gauss%plstrain, dtime, time, temp, hdflag=hdflag )
134  elseif ( gauss%pMaterial%mtype==usermaterial) then ! user-defined
135  call uupdate( gauss%pMaterial%name, gauss%pMaterial%variables(101:), &
136  strain, stress, gauss%fstatus, dtime, time )
137  end if
138 
139  end subroutine stressupdate
140 
142  subroutine matlstateupdate( gauss, tincr )
143  type( tgaussstatus ), intent(inout) :: gauss
144  real(kind=kreal), intent(in) :: tincr
145 
146  if( iselastoplastic( gauss%pMaterial%mtype ) ) then
147  call updateepstate( gauss )
148  elseif( gauss%pMaterial%mtype==norton ) then
149  if( tincr>0.d0 ) call updateviscostate( gauss )
150  elseif( isviscoelastic( gauss%pMaterial%mtype ) ) then
151  if( tincr>0.d0 ) call updateviscoelasticstate( gauss )
152  endif
153 
154  end subroutine matlstateupdate
155 
157  subroutine mat_c2d( cijkl, dij, itype )
158  real(kind=kreal), intent(in) :: cijkl(3,3,3,3)
159  real(kind=kreal), intent(out) :: dij(6,6)
160  integer, intent(in) :: itype
161 
162  dij(:,:) = 0.d0
163  select case( itype )
164  case( d3 )
165  dij(1,1) = cijkl(1,1,1,1) ! ---
166  dij(1,2) = cijkl(1,1,2,2)
167  dij(1,3) = cijkl(1,1,3,3)
168  dij(1,4) = cijkl(1,1,1,2)
169  dij(1,5) = cijkl(1,1,2,3)
170  dij(1,6) = cijkl(1,1,3,1)
171  dij(2,1) = cijkl(2,2,1,1) ! ---
172  dij(2,2) = cijkl(2,2,2,2)
173  dij(2,3) = cijkl(2,2,3,3)
174  dij(2,4) = cijkl(2,2,1,2)
175  dij(2,5) = cijkl(2,2,2,3)
176  dij(2,6) = cijkl(2,2,3,1)
177  dij(3,1) = cijkl(3,3,1,1) ! ---
178  dij(3,2) = cijkl(3,3,2,2)
179  dij(3,3) = cijkl(3,3,3,3)
180  dij(3,4) = cijkl(3,3,1,2)
181  dij(3,5) = cijkl(3,3,2,3)
182  dij(3,6) = cijkl(3,3,3,1)
183  dij(4,1) = cijkl(1,2,1,1) ! ---
184  dij(4,2) = cijkl(1,2,2,2)
185  dij(4,3) = cijkl(1,2,3,3)
186  dij(4,4) = cijkl(1,2,1,2)
187  dij(4,5) = cijkl(1,2,2,3)
188  dij(4,6) = cijkl(1,2,3,1)
189  dij(5,1) = cijkl(2,3,1,1) ! ---
190  dij(5,2) = cijkl(2,3,2,2)
191  dij(5,3) = cijkl(2,3,3,3)
192  dij(5,4) = cijkl(2,3,1,2)
193  dij(5,5) = cijkl(2,3,2,3)
194  dij(5,6) = cijkl(2,3,3,1)
195  dij(6,1) = cijkl(3,1,1,1) ! ---
196  dij(6,2) = cijkl(3,1,2,2)
197  dij(6,3) = cijkl(3,1,3,3)
198  dij(6,4) = cijkl(3,1,1,2)
199  dij(6,5) = cijkl(3,1,2,3)
200  dij(6,6) = cijkl(3,1,3,1)
201  !
202  case( planestress, planestrain )
203  dij(1,1) = cijkl(1,1,1,1) ! ---
204  dij(1,2) = cijkl(1,1,2,2)
205  dij(1,3) = cijkl(1,1,1,2)
206  dij(2,1) = cijkl(2,2,1,1) ! ---
207  dij(2,2) = cijkl(2,2,2,2)
208  dij(2,3) = cijkl(2,2,1,2)
209  dij(3,1) = cijkl(1,2,1,1) ! ---
210  dij(3,2) = cijkl(1,2,2,2)
211  dij(3,3) = cijkl(1,2,1,2)
212  case( axissymetric )
213  dij(1,1) = cijkl(1,1,1,1)
214  dij(1,2) = cijkl(1,1,2,2)
215  dij(1,3) = cijkl(1,1,1,2)
216  dij(1,4) = cijkl(1,1,3,3)
217  dij(2,1) = cijkl(2,2,1,1)
218  dij(2,2) = cijkl(2,2,2,2)
219  dij(2,3) = cijkl(2,2,1,2)
220  dij(2,4) = cijkl(2,2,3,3)
221  dij(3,1) = cijkl(1,2,1,1)
222  dij(3,2) = cijkl(1,2,2,2)
223  dij(3,3) = cijkl(1,2,1,2)
224  dij(3,4) = cijkl(1,2,3,3)
225  dij(4,1) = cijkl(3,3,1,1)
226  dij(4,2) = cijkl(3,3,2,2)
227  dij(4,3) = cijkl(3,3,1,2)
228  dij(4,4) = cijkl(3,3,3,3)
229  case( shell )
230  end select
231 
232  end subroutine mat_c2d
233 
234  ! (Gaku Hashimoto, The University of Tokyo, 2012/11/15) <
235  !####################################################################
236  subroutine matlmatrix_shell &
237  (gauss, secttype, d, &
238  e1_hat, e2_hat, e3_hat, cg1, cg2, cg3, &
239  alpha, n_layer, cdsys)
240  !####################################################################
241 
242  type(tgaussstatus), intent(in) :: gauss
243  integer, intent(in) :: sectType, n_layer
244  real(kind = kreal), intent(out) :: d(:, :)
245  real(kind = kreal), intent(in) :: e1_hat(3), e2_hat(3), e3_hat(3)
246  real(kind = kreal), intent(in) :: cg1(3), cg2(3), cg3(3)
247  real(kind = kreal), intent(out) :: alpha
248  real(kind = kreal), intent(in), optional :: cdsys(3, 3)
249 
250  !--------------------------------------------------------------------
251 
252  real(kind = kreal) :: c(3, 3, 3, 3)
253  type(tmaterial), pointer :: matl
254 
255  !--------------------------------------------------------------------
256 
257  matl => gauss%pMaterial
258 
259  !--------------------------------------------------------------------
260 
261  if( iselastic(matl%mtype) ) then
262  call linearelastic_shell &
263  (matl, secttype, c, &
264  e1_hat, e2_hat, e3_hat, cg1, cg2, cg3, &
265  alpha, n_layer, cdsys)
266 
267  call mat_c2d_shell(c, d, secttype)
268  else
269  stop "Material type not supported!"
270  end if
271 
272  !--------------------------------------------------------------------
273 
274  return
275 
276  !####################################################################
277  end subroutine matlmatrix_shell
278  !####################################################################
279  ! > (Gaku Hashimoto, The University of Tokyo, 2012/11/15)
280 
281 
282  ! (Gaku Hashimoto, The University of Tokyo, 2012/11/15) <
283  !####################################################################
284  subroutine mat_c2d_shell(c, D, itype)
285  !####################################################################
286 
287  real(kind = kreal), intent(in) :: c(:, :, :, :)
288  real(kind = kreal), intent(out) :: d(:, :)
289  integer, intent(in) :: itype
290 
291  !--------------------------------------------------------------------
292 
293  integer :: index_i(5), index_j(5), &
294  index_k(5), index_l(5)
295  integer :: i, j, k, l
296  integer :: is, js
297 
298  !--------------------------------------------------------------------
299 
300  index_i(1) = 1
301  index_i(2) = 2
302  index_i(3) = 1
303  index_i(4) = 2
304  index_i(5) = 3
305 
306  index_j(1) = 1
307  index_j(2) = 2
308  index_j(3) = 2
309  index_j(4) = 3
310  index_j(5) = 1
311 
312  index_k(1) = 1
313  index_k(2) = 2
314  index_k(3) = 1
315  index_k(4) = 2
316  index_k(5) = 3
317 
318  index_l(1) = 1
319  index_l(2) = 2
320  index_l(3) = 2
321  index_l(4) = 3
322  index_l(5) = 1
323 
324  !--------------------------------------------------------------------
325 
326  d(:, :) = 0.0d0
327 
328  !--------------------------------------------------------------------
329 
330  select case( itype )
331  case( shell )
332 
333  do js = 1, 5
334 
335  do is = 1, 5
336 
337  i = index_i(is)
338  j = index_j(is)
339  k = index_k(js)
340  l = index_l(js)
341 
342  d(is, js) = c(i, j, k, l)
343 
344  end do
345 
346  end do
347 
348  end select
349 
350  !--------------------------------------------------------------------
351 
352  return
353 
354  !####################################################################
355  end subroutine mat_c2d_shell
356  !####################################################################
357  ! > (Gaku Hashimoto, The University of Tokyo, 2012/11/15)
358 
359  subroutine getconnectorproperty( gauss, ctype, dofid, rparams, iparams, stretch )
360  type( tgaussstatus ), intent(in) :: gauss
361  integer(kind=kint), intent(in) :: ctype
362  integer(kind=kint), intent(in) :: dofid
363  real(kind=kreal), intent(out) :: rparams(:)
364  integer(kind=kint), intent(out) :: iparams(:)
365  real(kind=kreal), intent(in), optional :: stretch
366 
367  real(kind=kreal) ina(1), outa(4)
368  logical :: ierr
369  character(len=DICT_KEY_LENGTH) :: cnkey
370 
371  rparams(:) = 0.d0
372  iparams(:) = 0
373 
374  if( ctype == m_spring_dof ) then ! Dof Spring
375  !$omp critical
376  write(cnkey,'(A,I0)') trim(mc_spring),dofid
377  !$omp end critical
378  iparams(1) = gauss%pMaterial%variables_i(m_spring_d_ndoffset+2*dofid )
379  iparams(2) = gauss%pMaterial%variables_i(m_spring_d_ndoffset+2*dofid+1)
380  else if( ctype == m_spring_axial ) then ! Dof Spring
381  !$omp critical
382  write(cnkey,'(A,A)') trim(mc_spring),'_A'
383  !$omp end critical
384  else if( ctype == m_dashpot_dof ) then ! Dof Dashpot
385  !$omp critical
386  write(cnkey,'(A,I0)') trim(mc_dashpot),dofid
387  !$omp end critical
388  iparams(1) = gauss%pMaterial%variables_i(m_dashpot_d_ndoffset+2*dofid )
389  iparams(2) = gauss%pMaterial%variables_i(m_dashpot_d_ndoffset+2*dofid+1)
390  else if( ctype == m_dashpot_axial ) then ! Dof Dashpot
391  !$omp critical
392  write(cnkey,'(A,A)') trim(mc_dashpot),'_A'
393  !$omp end critical
394  else
395  stop "CONNECTOR ctype is not defined"
396  endif
397 
398  if( present(stretch) ) then
399  ina(1) = stretch
400  call fetch_tabledata( cnkey, gauss%pMaterial%dict, outa(1:1), ierr, ina )
401  else
402  call fetch_tabledata( cnkey, gauss%pMaterial%dict, outa(1:1), ierr )
403  endif
404  rparams(1) = outa(1)
405 
406  end subroutine
407 
415  subroutine getbulkmodulusinv( matl, temperature, alpha_inv )
416  type( tmaterial ), intent(in) :: matl
417  real(kind=kreal), intent(in) :: temperature
418  real(kind=kreal), intent(out) :: alpha_inv
419  real(kind=kreal) :: ee, pp, kk, ina(1), outa(2)
420  logical :: ierr
421 
422  ina(1) = temperature
423  call fetch_tabledata( mc_isoelastic, matl%dict, outa, ierr, ina )
424  if( ierr ) then
425  ee = matl%variables(m_youngs)
426  pp = matl%variables(m_poisson)
427  else
428  ee = outa(1)
429  pp = outa(2)
430  endif
431 
432  kk = ee / ( 3.0d0*( 1.0d0-2.0d0*pp ) ) ! bulk modulus
433  alpha_inv = 1.0d0 / kk
434  end subroutine getbulkmodulusinv
435 
439  subroutine matlmatrix_up( gauss, sectType, D, lambda, d2, alpha_inv, g, time, dtime, cdsys, temperature )
440  type( tgaussstatus ), intent(in) :: gauss
441  integer, intent(in) :: sectType
442  real(kind=kreal), intent(out) :: d(:,:)
443  real(kind=kreal), intent(in) :: lambda
444  real(kind=kreal), intent(out) :: d2(6)
445  real(kind=kreal), intent(out) :: alpha_inv
446  real(kind=kreal), intent(out) :: g
447  real(kind=kreal), intent(in) :: time
448  real(kind=kreal), intent(in) :: dtime
449  real(kind=kreal), intent(in) :: cdsys(3,3)
450  real(kind=kreal), intent(in), optional :: temperature
451 
452  real(kind=kreal) :: temp
453  type( tmaterial ), pointer :: matl
454 
455  matl => gauss%pMaterial
456 
457  temp = 0.0d0
458  if( present(temperature) ) temp = temperature
459 
460  ! Deviatoric tangent (hdflag=1 sets K=0). MatlMatrix dispatches over every
461  ! material type, so the material branching is not duplicated here.
462  call matlmatrix( gauss, secttype, d, time, dtime, cdsys, temp, hdflag=1 )
463 
464  ! d2 = dS/dlambda = I (Voigt notation: normal components only)
465  d2(1:3) = 1.0d0
466  d2(4:6) = 0.0d0
467 
468  ! alpha_inv = 1/K (compressibility parameter)
469  call getbulkmodulusinv( matl, temp, alpha_inv )
470 
471  ! g = volumetric strain = tr(strain)
472  g = gauss%strain(1) + gauss%strain(2) + gauss%strain(3)
473 
474  end subroutine matlmatrix_up
475 
478  subroutine stressupdate_up( gauss, sectType, strain, stress, lambda, g, cdsys )
479  type( tgaussstatus ), intent(inout) :: gauss
480  integer, intent(in) :: sectType
481  real(kind=kreal), intent(in) :: strain(6)
482  real(kind=kreal), intent(out) :: stress(6)
483  real(kind=kreal), intent(in) :: lambda
484  real(kind=kreal), intent(out) :: g
485  real(kind=kreal), intent(in) :: cdsys(3,3)
486 
487  real(kind=kreal) :: d(6,6)
488  type( tmaterial ), pointer :: matl
489 
490  matl => gauss%pMaterial
491 
492  if( iselastic(matl%mtype) ) then
493  ! elastic : StressUpdate has no elastic branch, so S_dev = D_dev*strain here
494  call calelasticmatrix( matl, secttype, d, 0.0d0, hdflag=1 )
495  stress(1:6) = matmul( d(1:6,1:6), strain(1:6) )
496  else
497  ! hyperelastic / user material : deviatoric stress via StressUpdate (hdflag=1)
498  call stressupdate( gauss, secttype, strain, stress, cdsys, temp=0.0d0, tempn=0.0d0, hdflag=1 )
499  endif
500 
501  ! pressure (Lagrange multiplier) contribution: S = S_dev + lambda*I
502  stress(1) = stress(1) + lambda
503  stress(2) = stress(2) + lambda
504  stress(3) = stress(3) + lambda
505 
506  ! volumetric strain g = tr(strain)
507  g = strain(1) + strain(2) + strain(3)
508 
509  end subroutine stressupdate_up
510 
511 end module m_matmatrix
I/O and Utility.
Definition: hecmw_util_f.F90:7
This module provides functions for elastic material.
subroutine linearelastic_shell(matl, sectType, c, e1_hat, e2_hat, e3_hat, cg1, cg2, cg3, alpha, n_layer, cdsys)
subroutine calelasticmatrix(matl, sectType, D, temp, hdflag)
Calculate isotropic elastic matrix hdflag: 0=full, 1=deviatoric only (edge-smoothed,...
subroutine calelasticmatrix_ortho(matl, sectType, bij, DMAT, temp, hdflag)
Calculate orthotropic elastic matrix bij: rotation matrix from material axes to global axes,...
This module provide functions for elastoplastic calculation.
subroutine, public backwardeuler(matl, stress, plstrain, istat, fstat, plpotential, temp, hdflag)
This subroutine does backward-Euler return calculation.
subroutine, public calelastoplasticmatrix(matl, sectType, stress, istat, extval, plstrain, D, temperature, hdflag)
This subroutine calculates elastoplastic constitutive relation.
subroutine, public updateepstate(gauss)
Clear elatoplastic state.
This module manages calculation relates with materials.
Definition: calMatMatrix.f90:6
subroutine getconnectorproperty(gauss, ctype, dofid, rparams, iparams, stretch)
subroutine getbulkmodulusinv(matl, temperature, alpha_inv)
Calculate material matrix for u-p mixed formulation Returns deviatoric tangent D, volumetric coupling...
subroutine matlstateupdate(gauss, tincr)
Commit the material history of a converged increment.
subroutine matlmatrix(gauss, sectType, matrix, time, dtime, cdsys, temperature, isEp, hdflag)
Calculate constituive matrix.
subroutine stressupdate_up(gauss, sectType, strain, stress, lambda, g, cdsys)
Update stress for the u-p mixed formulation. Deviatoric stress from the material law (K=0) plus the p...
subroutine mat_c2d_shell(c, D, itype)
integer function getnlgeomflag(gauss)
Fetch the nlgeom flag of the material.
subroutine matlmatrix_shell(gauss, sectType, D, e1_hat, e2_hat, e3_hat, cg1, cg2, cg3, alpha, n_layer, cdsys)
subroutine matlmatrix_up(gauss, sectType, D, lambda, d2, alpha_inv, g, time, dtime, cdsys, temperature)
Constitutive matrix for the u-p mixed formulation. Returns the deviatoric tangent D (K=0),...
subroutine mat_c2d(cijkl, dij, itype)
Transfer rank 4 constituive matrix to rank 2 form.
subroutine stressupdate(gauss, sectType, strain, stress, cdsys, time, dtime, temp, tempn, hdflag)
Update strain and stress for elastic and hyperelastic materials.
This module provides functions for creep calculation.
Definition: creep.f90:6
subroutine update_iso_creep(matl, sectType, strain, stress, extval, plstrain, dtime, ttime, temp, hdflag)
This subroutine calculates stresses and creep status for an elastically isotropic material with isotr...
Definition: creep.f90:122
subroutine iso_creep(matl, sectType, stress, strain, extval, plstrain, dtime, ttime, stiffness, temp, hdflag)
This subroutine calculates stiffness for elastically isotropic materials with isotropic creep.
Definition: creep.f90:19
subroutine updateviscostate(gauss)
Update viscoplastic state.
Definition: creep.f90:233
This module provides functions for hyperelastic calculation.
Definition: Hyperelastic.f90:6
subroutine calupdateelasticarrudaboyce(matl, sectType, dstrain, dstress)
This subroutine provides to update stress and strain for Arrude-Royce material.
subroutine calelasticarrudaboyce(matl, sectType, cijkl, strain)
This subroutine provides elastic tangent coefficient for Arruda-Boyce hyperelastic material.
subroutine calelasticmooneyrivlinaniso(matl, sectType, cijkl, strain, cdsys, hdflag)
This subroutine provides elastic tangent coefficient for anisotropic Mooney-Rivlin hyperelastic mater...
subroutine calupdateelasticmooneyrivlinaniso(matl, sectType, strain, stress, cdsys, hdflag)
This subroutine provides to update stress and strain for anisotropic Mooney-Rivlin material.
subroutine calelasticmooneyrivlin(matl, sectType, cijkl, strain, hdflag)
This subroutine provides elastic tangent coefficient for Mooney-Rivlin hyperelastic material.
subroutine calupdateelasticmooneyrivlin(matl, sectType, strain, stress, strain_energy, hdflag)
This subroutine provides to update stress and strain for Mooney-Rivlin material.
This module summarizes all information of material properties.
Definition: material.f90:6
integer(kind=kint), parameter m_dashpot_axial
Definition: material.f90:134
integer(kind=kint), parameter m_youngs
Definition: material.f90:95
integer(kind=kint), parameter mooneyrivlin
Definition: material.f90:75
integer(kind=kint), parameter mooneyrivlin_aniso
Definition: material.f90:78
integer(kind=kint), parameter planestress
Definition: material.f90:88
integer(kind=kint), parameter m_spring_axial
Definition: material.f90:132
integer function getelastictype(mtype)
Get elastic type.
Definition: material.f90:282
character(len=dict_key_length) mc_spring
Definition: material.f90:150
integer(kind=kint), parameter d3
Definition: material.f90:87
integer(kind=kint), parameter planestrain
Definition: material.f90:89
integer(kind=kint), parameter elastic
Definition: material.f90:68
integer(kind=kint), parameter arrudaboyce
Definition: material.f90:76
integer(kind=kint), parameter shell
Definition: material.f90:91
integer(kind=kint), parameter norton
Definition: material.f90:81
character(len=dict_key_length) mc_dashpot
Definition: material.f90:151
integer(kind=kint), parameter m_poisson
Definition: material.f90:96
integer(kind=kint), parameter axissymetric
Definition: material.f90:90
integer(kind=kint), parameter m_dashpot_dof
Definition: material.f90:133
integer(kind=kint), parameter userelastic
Definition: material.f90:70
integer(kind=kint), parameter neohooke
Definition: material.f90:74
integer(kind=kint), parameter usermaterial
Definition: material.f90:66
integer(kind=kint), parameter m_spring_dof
Definition: material.f90:131
character(len=dict_key_length) mc_isoelastic
Definition: material.f90:142
logical function iselastic(mtype)
If it is an elastic material?
Definition: material.f90:327
integer(kind=kint), parameter userhyperelastic
Definition: material.f90:77
integer(kind=kint), parameter m_spring_d_ndoffset
Definition: material.f90:136
integer(kind=kint), parameter m_dashpot_d_ndoffset
Definition: material.f90:138
logical function isviscoelastic(mtype)
If it is an viscoelastic material?
Definition: material.f90:354
logical function iselastoplastic(mtype)
If it is an elastoplastic material?
Definition: material.f90:336
This modules defines a structure to record history dependent parameter in static analysis.
Definition: mechgauss.f90:6
This module provides interface for elastic or hyperelastic calculation.
Definition: uelastic.f90:7
subroutine uelasticmatrix(matl, strain, D)
This subroutine calculates constitutive relation.
Definition: uelastic.f90:13
subroutine uelasticupdate(matl, strain, stress)
This subroutine calculate updated strain and stress.
Definition: uelastic.f90:41
This subroutine read in used-defined material properties tangent.
Definition: umat.f90:7
subroutine uupdate(mname, matl, strain, stress, fstat, dtime, ttime, temperature)
This subroutine calculate strain and stress increment.
Definition: umat.f90:31
subroutine umatlmatrix(mname, matl, strain, stress, fstat, D, dtime, ttime, temperature)
This subroutine calculates constitutive matrix.
Definition: umat.f90:17
This module provides functions for viscoelastic calculation.
Definition: Viscoelastic.f90:6
subroutine updateviscoelasticstate(gauss)
Update viscoplastic state.
subroutine updateviscoelastic(matl, sectType, eps, sig, vsig, dt, temp, tempn)
This subroutine provides to update stress for viscoelastic material.
subroutine calviscoelasticmatrix(matl, sectType, dt, D, temp)
This subroutine calculates tangent moduli for isotropic viscoelastic material.
Structure to manage all material related data.
Definition: material.f90:169
All data should be recorded in every quadrature points.
Definition: mechgauss.f90:15