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 )
70 print *,
"Elasticity type", matl%mtype,
"not supported"
76 call mat_c2d( cijkl, matrix, secttype )
79 call mat_c2d( cijkl, matrix, secttype )
82 call mat_c2d( cijkl, matrix, secttype )
87 gauss%istatus(1), gauss%fstatus, gauss%plstrain, matrix, temperature, hdflag=hdflag_in )
89 call umatlmatrix( matl%name, matl%variables(101:), gauss%strain, &
90 gauss%stress, gauss%fstatus, matrix, dtime, time )
91 elseif( matl%mtype==
norton )
then
92 call iso_creep( matl, secttype, gauss%stress, gauss%strain, gauss%fstatus, &
93 gauss%plstrain, dtime, time, matrix, temperature, hdflag=hdflag_in )
95 stop
"Material type not supported!"
102 subroutine stressupdate( gauss, sectType, strain, stress, cdsys, time, dtime, temp, tempn, hdflag )
104 integer,
intent(in) :: sectType
105 real(kind=kreal),
intent(in) :: strain(6)
106 real(kind=kreal),
intent(out) :: stress(6)
107 real(kind=kreal),
intent(in) :: cdsys(3,3)
108 real(kind=kreal),
intent(in),
optional :: time
109 real(kind=kreal),
intent(in),
optional :: dtime
110 real(kind=kreal),
intent(in) :: temp
111 real(kind=kreal),
intent(in) :: tempn
112 integer(kind=kint),
intent(in) :: hdflag
121 call uelasticupdate( gauss%pMaterial%variables(101:), strain, stress )
123 if( .not.
present(dtime) ) stop
"error in viscoelastic update!"
124 call updateviscoelastic( gauss%pMaterial, secttype, strain, stress, gauss%fstatus, dtime, temp, tempn )
125 elseif ( gauss%pMaterial%mtype==
norton )
then
126 if( .not.
present(dtime) ) stop
"error in viscoelastic update!"
127 call update_iso_creep( gauss%pMaterial, secttype, strain, stress, gauss%fstatus, &
128 & gauss%plstrain, dtime, time, temp, hdflag=hdflag )
130 call uupdate( gauss%pMaterial%name, gauss%pMaterial%variables(101:), &
131 strain, stress, gauss%fstatus, dtime, time )
137 subroutine mat_c2d( cijkl, dij, itype )
138 real(kind=kreal),
intent(in) :: cijkl(3,3,3,3)
139 real(kind=kreal),
intent(out) :: dij(6,6)
140 integer,
intent(in) :: itype
145 dij(1,1) = cijkl(1,1,1,1)
146 dij(1,2) = cijkl(1,1,2,2)
147 dij(1,3) = cijkl(1,1,3,3)
148 dij(1,4) = cijkl(1,1,1,2)
149 dij(1,5) = cijkl(1,1,2,3)
150 dij(1,6) = cijkl(1,1,3,1)
151 dij(2,1) = cijkl(2,2,1,1)
152 dij(2,2) = cijkl(2,2,2,2)
153 dij(2,3) = cijkl(2,2,3,3)
154 dij(2,4) = cijkl(2,2,1,2)
155 dij(2,5) = cijkl(2,2,2,3)
156 dij(2,6) = cijkl(2,2,3,1)
157 dij(3,1) = cijkl(3,3,1,1)
158 dij(3,2) = cijkl(3,3,2,2)
159 dij(3,3) = cijkl(3,3,3,3)
160 dij(3,4) = cijkl(3,3,1,2)
161 dij(3,5) = cijkl(3,3,2,3)
162 dij(3,6) = cijkl(3,3,3,1)
163 dij(4,1) = cijkl(1,2,1,1)
164 dij(4,2) = cijkl(1,2,2,2)
165 dij(4,3) = cijkl(1,2,3,3)
166 dij(4,4) = cijkl(1,2,1,2)
167 dij(4,5) = cijkl(1,2,2,3)
168 dij(4,6) = cijkl(1,2,3,1)
169 dij(5,1) = cijkl(2,3,1,1)
170 dij(5,2) = cijkl(2,3,2,2)
171 dij(5,3) = cijkl(2,3,3,3)
172 dij(5,4) = cijkl(2,3,1,2)
173 dij(5,5) = cijkl(2,3,2,3)
174 dij(5,6) = cijkl(2,3,3,1)
175 dij(6,1) = cijkl(3,1,1,1)
176 dij(6,2) = cijkl(3,1,2,2)
177 dij(6,3) = cijkl(3,1,3,3)
178 dij(6,4) = cijkl(3,1,1,2)
179 dij(6,5) = cijkl(3,1,2,3)
180 dij(6,6) = cijkl(3,1,3,1)
183 dij(1,1) = cijkl(1,1,1,1)
184 dij(1,2) = cijkl(1,1,2,2)
185 dij(1,3) = cijkl(1,1,1,2)
186 dij(2,1) = cijkl(2,2,1,1)
187 dij(2,2) = cijkl(2,2,2,2)
188 dij(2,3) = cijkl(2,2,1,2)
189 dij(3,1) = cijkl(1,2,1,1)
190 dij(3,2) = cijkl(1,2,2,2)
191 dij(3,3) = cijkl(1,2,1,2)
193 dij(1,1) = cijkl(1,1,1,1)
194 dij(1,2) = cijkl(1,1,2,2)
195 dij(1,3) = cijkl(1,1,1,2)
196 dij(1,4) = cijkl(1,1,3,3)
197 dij(2,1) = cijkl(2,2,1,1)
198 dij(2,2) = cijkl(2,2,2,2)
199 dij(2,3) = cijkl(2,2,1,2)
200 dij(2,4) = cijkl(2,2,3,3)
201 dij(3,1) = cijkl(1,2,1,1)
202 dij(3,2) = cijkl(1,2,2,2)
203 dij(3,3) = cijkl(1,2,1,2)
204 dij(3,4) = cijkl(1,2,3,3)
205 dij(4,1) = cijkl(3,3,1,1)
206 dij(4,2) = cijkl(3,3,2,2)
207 dij(4,3) = cijkl(3,3,1,2)
208 dij(4,4) = cijkl(3,3,3,3)
217 (gauss, secttype, d, &
218 e1_hat, e2_hat, e3_hat, cg1, cg2, cg3, &
223 integer,
intent(in) :: sectType, n_layer
224 real(kind = kreal),
intent(out) :: d(:, :)
225 real(kind = kreal),
intent(in) :: e1_hat(3), e2_hat(3), e3_hat(3)
226 real(kind = kreal),
intent(in) :: cg1(3), cg2(3), cg3(3)
227 real(kind = kreal),
intent(out) :: alpha
231 real(kind = kreal) :: c(3, 3, 3, 3)
236 matl => gauss%pMaterial
242 (matl, secttype, c, &
243 e1_hat, e2_hat, e3_hat, cg1, cg2, cg3, &
248 stop
"Material type not supported!"
266 real(kind = kreal),
intent(in) :: c(:, :, :, :)
267 real(kind = kreal),
intent(out) :: d(:, :)
268 integer,
intent(in) :: itype
272 integer :: index_i(5), index_j(5), &
273 index_k(5), index_l(5)
274 integer :: i, j, k, l
321 d(is, js) = c(i, j, k, l)
340 integer(kind=kint),
intent(in) :: ctype
341 integer(kind=kint),
intent(in) :: dofid
342 real(kind=kreal),
intent(out) :: rparams(:)
343 integer(kind=kint),
intent(out) :: iparams(:)
344 real(kind=kreal),
intent(in),
optional :: stretch
346 real(kind=kreal) ina(1), outa(4)
348 character(len=DICT_KEY_LENGTH) :: cnkey
354 write(cnkey,
'(A,I0)') trim(
mc_spring),dofid
358 write(cnkey,
'(A,A)') trim(
mc_spring),
'_A'
366 stop
"CONNECTOR ctype is not defined"
369 if(
present(stretch) )
then
371 call fetch_tabledata( cnkey, gauss%pMaterial%dict, outa(1:1), ierr, ina )
373 call fetch_tabledata( cnkey, gauss%pMaterial%dict, outa(1:1), ierr )