29 subroutine matlmatrix( gauss, sectType, matrix, time, dtime, cdsys, temperature, isEp, hdflag )
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
41 integer :: flag, hdflag_in
42 real(kind=kreal) :: cijkl(3,3,3,3)
47 if(
present(isep) )
then
48 if( isep == 1 )flag = 1
52 if(
present(hdflag) ) hdflag_in = hdflag
58 elseif(
iselastic(matl%mtype) .or. flag==1 )
then
66 call calelasticmatrix( matl, secttype, matrix, temperature, hdflag=hdflag_in )
71 print *,
"Elasticity type", matl%mtype,
"not supported"
78 call mat_c2d( cijkl, matrix, secttype )
81 call mat_c2d( cijkl, matrix, secttype )
84 call mat_c2d( cijkl, matrix, secttype )
89 gauss%istatus(1), gauss%fstatus, gauss%plstrain, matrix, temperature, hdflag=hdflag_in )
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 )
97 stop
"Material type not supported!"
104 subroutine stressupdate( gauss, sectType, strain, stress, cdsys, time, dtime, temp, tempn, hdflag )
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
123 call uelasticupdate( gauss%pMaterial%variables(101:), strain, stress )
125 call backwardeuler( gauss%pMaterial, stress, gauss%plstrain, gauss%istatus(1), gauss%fstatus, &
126 gauss%plpotential, temp )
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 )
135 call uupdate( gauss%pMaterial%name, gauss%pMaterial%variables(101:), &
136 strain, stress, gauss%fstatus, dtime, time )
144 real(kind=kreal),
intent(in) :: tincr
148 elseif( gauss%pMaterial%mtype==
norton )
then
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
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)
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)
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)
237 (gauss, secttype, d, &
238 e1_hat, e2_hat, e3_hat, cg1, cg2, cg3, &
239 alpha, n_layer, cdsys)
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)
252 real(kind = kreal) :: c(3, 3, 3, 3)
257 matl => gauss%pMaterial
263 (matl, secttype, c, &
264 e1_hat, e2_hat, e3_hat, cg1, cg2, cg3, &
265 alpha, n_layer, cdsys)
269 stop
"Material type not supported!"
287 real(kind = kreal),
intent(in) :: c(:, :, :, :)
288 real(kind = kreal),
intent(out) :: d(:, :)
289 integer,
intent(in) :: itype
293 integer :: index_i(5), index_j(5), &
294 index_k(5), index_l(5)
295 integer :: i, j, k, l
342 d(is, js) = c(i, j, k, l)
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
367 real(kind=kreal) ina(1), outa(4)
369 character(len=DICT_KEY_LENGTH) :: cnkey
376 write(cnkey,
'(A,I0)') trim(
mc_spring),dofid
382 write(cnkey,
'(A,A)') trim(
mc_spring),
'_A'
395 stop
"CONNECTOR ctype is not defined"
398 if(
present(stretch) )
then
400 call fetch_tabledata( cnkey, gauss%pMaterial%dict, outa(1:1), ierr, ina )
402 call fetch_tabledata( cnkey, gauss%pMaterial%dict, outa(1:1), ierr )
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)
423 call fetch_tabledata(
mc_isoelastic, matl%dict, outa, ierr, ina )
432 kk = ee / ( 3.0d0*( 1.0d0-2.0d0*pp ) )
433 alpha_inv = 1.0d0 / kk
439 subroutine matlmatrix_up( gauss, sectType, D, lambda, d2, alpha_inv, g, time, dtime, cdsys, temperature )
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
452 real(kind=kreal) :: temp
455 matl => gauss%pMaterial
458 if(
present(temperature) ) temp = temperature
462 call matlmatrix( gauss, secttype, d, time, dtime, cdsys, temp, hdflag=1 )
472 g = gauss%strain(1) + gauss%strain(2) + gauss%strain(3)
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)
487 real(kind=kreal) :: d(6,6)
490 matl => gauss%pMaterial
495 stress(1:6) = matmul( d(1:6,1:6), strain(1:6) )
498 call stressupdate( gauss, secttype, strain, stress, cdsys, temp=0.0d0, tempn=0.0d0, hdflag=1 )
502 stress(1) = stress(1) + lambda
503 stress(2) = stress(2) + lambda
504 stress(3) = stress(3) + lambda
507 g = strain(1) + strain(2) + strain(3)
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.
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.
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...
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.
subroutine updateviscostate(gauss)
Update viscoplastic state.
This module provides functions for hyperelastic calculation.
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.
integer(kind=kint), parameter m_dashpot_axial
integer(kind=kint), parameter m_youngs
integer(kind=kint), parameter mooneyrivlin
integer(kind=kint), parameter mooneyrivlin_aniso
integer(kind=kint), parameter planestress
integer(kind=kint), parameter m_spring_axial
integer function getelastictype(mtype)
Get elastic type.
character(len=dict_key_length) mc_spring
integer(kind=kint), parameter d3
integer(kind=kint), parameter planestrain
integer(kind=kint), parameter elastic
integer(kind=kint), parameter arrudaboyce
integer(kind=kint), parameter shell
integer(kind=kint), parameter norton
character(len=dict_key_length) mc_dashpot
integer(kind=kint), parameter m_poisson
integer(kind=kint), parameter axissymetric
integer(kind=kint), parameter m_dashpot_dof
integer(kind=kint), parameter userelastic
integer(kind=kint), parameter neohooke
integer(kind=kint), parameter usermaterial
integer(kind=kint), parameter m_spring_dof
character(len=dict_key_length) mc_isoelastic
logical function iselastic(mtype)
If it is an elastic material?
integer(kind=kint), parameter userhyperelastic
integer(kind=kint), parameter m_spring_d_ndoffset
integer(kind=kint), parameter m_dashpot_d_ndoffset
logical function isviscoelastic(mtype)
If it is an viscoelastic material?
logical function iselastoplastic(mtype)
If it is an elastoplastic material?
This modules defines a structure to record history dependent parameter in static analysis.
This module provides interface for elastic or hyperelastic calculation.
subroutine uelasticmatrix(matl, strain, D)
This subroutine calculates constitutive relation.
subroutine uelasticupdate(matl, strain, stress)
This subroutine calculate updated strain and stress.
This subroutine read in used-defined material properties tangent.
subroutine uupdate(mname, matl, strain, stress, fstat, dtime, ttime, temperature)
This subroutine calculate strain and stress increment.
subroutine umatlmatrix(mname, matl, strain, stress, fstat, D, dtime, ttime, temperature)
This subroutine calculates constitutive matrix.
This module provides functions for viscoelastic calculation.
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.
All data should be recorded in every quadrature points.