18 integer,
intent(in) :: sectType
19 real(kind=
kreal),
intent(out) :: d(:,:)
20 real(kind=
kreal),
intent(in) :: temp
21 real(kind=
kreal) :: ee, pp, coef1, coef2, ina(1), outa(2)
22 integer(kind=kint),
intent(in),
optional :: hdflag
24 real(kind=
kreal) :: k, g
29 call fetch_tabledata(
mc_isoelastic, matl%dict, outa, ierr, ina )
38 select case (secttype)
40 k = ee/(1.d0-2.d0*pp)/3.d0
41 g = ee/(1.d0+pp)*0.5d0
42 if(
present(hdflag) )
then
43 if( hdflag == 1 ) k = 0.d0
44 if( hdflag == 2 ) g = 0.d0
46 d(1,1)=k+(4.d0/3.d0)*g
47 d(1,2)=k-(2.d0/3.d0)*g
71 coef1=ee/((1.d0+pp)*(1.d0-2.d0*pp))
72 coef2=ee/(2.d0*(1.d0+pp))
73 d(1,1)=coef1*(1.d0-pp)
83 coef1=ee*(1.d0-pp)/((1.d0+pp)*(1.d0-2.d0*pp))
84 coef2=(1.d0-2.d0*pp)/(2.d0*(1.d0-pp))
86 d(1,2)=coef1*pp/(1.d0-pp)
102 stop
"Section type not defined"
115 integer,
intent(in) :: secttype
116 real(kind=
kreal),
intent(in) :: bij(3,3)
117 real(kind=
kreal),
intent(out) :: dmat(:,:)
118 real(kind=
kreal),
intent(in) :: temp
119 integer(kind=kint),
intent(in),
optional :: hdflag
120 real(kind=
kreal) :: e1, e2, e3, g12, g23, g13, nyu12, nyu23,nyu13
121 real(kind=
kreal) :: nyu21,nyu32,nyu31, delta1, ina(1), outa(9)
122 real(kind=
kreal) :: tm(6,6)
123 real(kind=
kreal) :: cvol, dvol(6,6), amat(6,6), uvec(6)
130 stop
"Fails in fetching orthotropic elastic constants!"
145 delta1 = 1.d0/(1.d0 -nyu12*nyu21 -nyu23*nyu32 -nyu31*nyu13 -2.d0*nyu21*nyu32*nyu13)
148 dmat(1,1) = e1*(1.d0-nyu23*nyu32)*delta1
149 dmat(2,2) = e2*(1.d0-nyu13*nyu31)*delta1
150 dmat(3,3) = e3*(1.d0-nyu12*nyu21)*delta1
151 dmat(1,2) = e1*(nyu21+nyu31*nyu23)*delta1
152 dmat(1,3) = e1*(nyu31+nyu21*nyu32)*delta1
153 dmat(2,3) = e2*(nyu32+nyu12*nyu31)*delta1
158 dmat(2,1) = dmat(1,2)
159 dmat(3,2) = dmat(2,3)
160 dmat(3,1) = dmat(1,3)
164 dmat = matmul( transpose(tm), dmat)
165 dmat = matmul( dmat, (tm) )
168 if(
present(hdflag) )
then
169 if( hdflag == 1 .or. hdflag == 2 )
then
170 amat(:,:) = dmat(:,:)
171 uvec(:) = 0.d0; uvec(1) = 1.d0; uvec(2) = 1.d0; uvec(3) = 1.d0
173 cvol = 1.d0 / (uvec(1) + uvec(2) + uvec(3))
180 if( hdflag == 1 )
then
181 dmat(:,:) = dmat(:,:) - dvol(:,:)
182 else if( hdflag == 2 )
then
183 dmat(:,:) = dvol(:,:)
193 (matl, secttype, c, &
194 e1_hat, e2_hat, e3_hat, cg1, cg2, cg3, &
199 integer,
intent(in) :: sectType, n_layer
200 real(kind =
kreal),
intent(out) :: c(:, :, :, :)
201 real(kind =
kreal),
intent(in) :: e1_hat(3), e2_hat(3), e3_hat(3)
202 real(kind =
kreal),
intent(in) :: cg1(3), cg2(3), cg3(3)
203 real(kind =
kreal),
intent(out) :: alpha
207 real(kind =
kreal) :: ee, pp, ee2, g12, g23, g31, theta, pp2
208 real(kind =
kreal) :: outa(2)
209 real(kind =
kreal) :: lambda1, lambda2, mu, k_correction
210 real(kind =
kreal) :: c_hat(3, 3, 3, 3), d(5,5), d_hat(5,5), d_temp(5,5), t(5,5)
211 real(kind =
kreal) :: e_hat_dot_cg(3, 3)
212 real(kind =
kreal) :: alpha_over_mu
214 integer :: index_i(5), index_j(5), index_k(5), index_l(5)
215 integer :: is, js, ii, ij, ik, il
216 integer :: i, j, k, l, total_layer, matl_type
226 matl_type = matl%shell_var(n_layer)%ortho
227 if(matl_type == 0)
then
230 ee = matl%shell_var(n_layer)%ee
231 pp = matl%shell_var(n_layer)%pp
245 lambda1 = ee/( 1.0d0-pp*pp )
247 mu = 0.5d0*ee/( 1.0d0+pp )
252 k_correction = 5.0d0/6.0d0
257 alpha = alpha_over_mu*mu
262 c_hat(:, :, :, :) = 0.0d0
266 c_hat(1, 1, 1, 1) = lambda1
267 c_hat(1, 1, 2, 2) = lambda2
268 c_hat(2, 2, 1, 1) = lambda2
269 c_hat(2, 2, 2, 2) = lambda1
270 c_hat(1, 2, 1, 2) = mu
271 c_hat(1, 2, 2, 1) = mu
272 c_hat(2, 1, 1, 2) = mu
273 c_hat(2, 1, 2, 1) = mu
274 c_hat(1, 3, 1, 3) = k_correction*mu
275 c_hat(1, 3, 3, 1) = k_correction*mu
276 c_hat(2, 3, 2, 3) = k_correction*mu
277 c_hat(2, 3, 3, 2) = k_correction*mu
278 c_hat(3, 1, 3, 1) = k_correction*mu
279 c_hat(3, 1, 1, 3) = k_correction*mu
280 c_hat(3, 2, 3, 2) = k_correction*mu
281 c_hat(3, 2, 2, 3) = k_correction*mu
285 elseif(matl_type == 1)
then
286 total_layer = matl%totallyr
288 ee = matl%shell_var(n_layer)%ee
289 pp = matl%shell_var(n_layer)%pp
290 ee2 = matl%shell_var(n_layer)%ee2
291 g12 = matl%shell_var(n_layer)%g12
292 g23 = matl%shell_var(n_layer)%g23
293 g31 = matl%shell_var(n_layer)%g31
294 theta = matl%shell_var(n_layer)%angle
301 k_correction = 5.0d0/6.0d0
305 alpha = alpha_over_mu * 0.5d0 * ee / ( 1.0d0+pp )
318 d(1,1) = ee / (1.0d0 - pp * pp2)
319 d(1,2) = pp2 * ee / (1.0d0- pp * pp2)
320 d(2,1) = pp2 * ee / (1.0d0- pp * pp2)
321 d(2,2) = ee2 / (1.0d0 - pp * pp2)
326 t(1,1) = cos(theta) * cos(theta)
327 t(1,2) = sin(theta) * sin(theta)
328 t(2,1) = sin(theta) * sin(theta)
329 t(2,2) = cos(theta) * cos(theta)
330 t(3,3) = cos(theta) * cos(theta) - sin(theta) * sin(theta)
331 t(1,3) = sin(theta) * cos(theta)
332 t(2,3) = -sin(theta) * cos(theta)
333 t(3,1) = -2.0d0 * sin(theta) * cos(theta)
334 t(3,2) = 2.0d0 * sin(theta) * cos(theta)
342 d_temp(1,1) = d(1,1)*t(1,1)+d(1,2)*t(2,1)
343 d_temp(1,2) = d(1,1)*t(1,2)+d(1,2)*t(2,2)
344 d_temp(2,1) = d(2,1)*t(1,1)+d(2,2)*t(2,1)
345 d_temp(2,2) = d(2,1)*t(1,2)+d(2,2)*t(2,2)
346 d_temp(3,1) = d(3,3)*t(3,1)
347 d_temp(3,2) = d(3,3)*t(3,2)
348 d_temp(1,3) = d(1,1)*t(1,3)+d(1,2)*t(2,3)
349 d_temp(2,3) = d(2,1)*t(1,3)+d(2,2)*t(2,3)
350 d_temp(3,3) = d(3,3)*t(3,3)
351 d_temp(4,4) = d(4,4)*t(4,4)
352 d_temp(4,5) = d(4,4)*t(4,5)
353 d_temp(5,4) = d(5,5)*t(5,4)
354 d_temp(5,5) = d(5,5)*t(5,5)
358 d_hat(1,1) = t(1,1)*d_temp(1,1)+t(1,2)*d_temp(2,1)+t(3,1)*d_temp(3,1)
359 d_hat(1,2) = t(1,1)*d_temp(1,2)+t(1,2)*d_temp(2,2)+t(3,1)*d_temp(3,2)
360 d_hat(2,1) = t(2,1)*d_temp(1,1)+t(2,2)*d_temp(2,1)+t(3,2)*d_temp(3,1)
361 d_hat(2,2) = t(2,1)*d_temp(1,2)+t(2,2)*d_temp(2,2)+t(3,2)*d_temp(3,2)
362 d_hat(3,1) = t(1,3)*d_temp(1,1)+t(2,3)*d_temp(2,1)+t(3,3)*d_temp(3,1)
363 d_hat(3,2) = t(1,3)*d_temp(1,2)+t(2,3)*d_temp(2,2)+t(3,3)*d_temp(3,2)
364 d_hat(1,3) = t(1,1)*d_temp(1,3)+t(1,2)*d_temp(2,3)+t(3,1)*d_temp(3,3)
365 d_hat(2,3) = t(2,1)*d_temp(1,3)+t(2,2)*d_temp(2,3)+t(3,2)*d_temp(3,3)
366 d_hat(3,3) = t(1,3)*d_temp(1,3)+t(2,3)*d_temp(2,3)+t(3,3)*d_temp(3,3)
367 d_hat(4,4) = t(4,4)*d_temp(4,4)+t(5,4)*d_temp(5,4)
368 d_hat(4,5) = t(4,4)*d_temp(4,5)+t(5,4)*d_temp(5,5)
369 d_hat(5,4) = t(4,5)*d_temp(4,4)+t(5,5)*d_temp(5,4)
370 d_hat(5,5) = t(4,5)*d_temp(4,5)+t(5,5)*d_temp(5,5)
375 c_hat(:, :, :, :) = 0.0d0
414 c_hat(ii, ij, ik, il) = d_hat(is, js)
422 write(*,*)
'shell matl type isnot collect'
426 select case( secttype )
430 = e1_hat(1)*cg1(1)+e1_hat(2)*cg1(2) &
433 = e2_hat(1)*cg1(1)+e2_hat(2)*cg1(2) &
435 e_hat_dot_cg(3, 1) = 0.0d0
437 = e1_hat(1)*cg2(1)+e1_hat(2)*cg2(2) &
440 = e2_hat(1)*cg2(1)+e2_hat(2)*cg2(2) &
442 e_hat_dot_cg(3, 2) = 0.0d0
444 = e1_hat(1)*cg3(1)+e1_hat(2)*cg3(2) &
447 = e2_hat(1)*cg3(1)+e2_hat(2)*cg3(2) &
450 = e3_hat(1)*cg3(1)+e3_hat(2)*cg3(2) &
457 c(1, 1, 1, 1) = 0.0d0
458 c(2, 2, 1, 1) = 0.0d0
459 c(1, 2, 1, 1) = 0.0d0
460 c(2, 2, 2, 2) = 0.0d0
461 c(1, 2, 2, 2) = 0.0d0
462 c(1, 2, 1, 2) = 0.0d0
463 c(3, 1, 1, 1) = 0.0d0
464 c(3, 1, 2, 2) = 0.0d0
465 c(3, 1, 1, 2) = 0.0d0
466 c(2, 3, 1, 1) = 0.0d0
467 c(2, 3, 2, 2) = 0.0d0
468 c(2, 3, 1, 2) = 0.0d0
469 c(3, 1, 3, 1) = 0.0d0
470 c(3, 1, 2, 3) = 0.0d0
471 c(2, 3, 2, 3) = 0.0d0
484 *e_hat_dot_cg(i, 1)*e_hat_dot_cg(j ,1) &
485 *e_hat_dot_cg(k, 1)*e_hat_dot_cg(l, 1)
489 *e_hat_dot_cg(i, 2)*e_hat_dot_cg(j, 2) &
490 *e_hat_dot_cg(k, 1)*e_hat_dot_cg(l, 1)
494 *e_hat_dot_cg(i, 1)*e_hat_dot_cg(j, 2) &
495 *e_hat_dot_cg(k, 1)*e_hat_dot_cg(l, 1)
499 *e_hat_dot_cg(i, 2)*e_hat_dot_cg(j, 2) &
500 *e_hat_dot_cg(k, 2)*e_hat_dot_cg(l, 2)
505 *e_hat_dot_cg(i, 1)*e_hat_dot_cg(j, 2) &
506 *e_hat_dot_cg(k, 2)*e_hat_dot_cg(l, 2)
510 *e_hat_dot_cg(i, 1)*e_hat_dot_cg(j, 2) &
511 *e_hat_dot_cg(k, 1)*e_hat_dot_cg(l, 2)
520 *e_hat_dot_cg(i, 3)*e_hat_dot_cg(j, 1) &
521 *e_hat_dot_cg(k, 1)*e_hat_dot_cg(l, 1)
525 *e_hat_dot_cg(i, 3)*e_hat_dot_cg(j, 1) &
526 *e_hat_dot_cg(k, 2)*e_hat_dot_cg(l, 2)
530 *e_hat_dot_cg(i, 3)*e_hat_dot_cg(j, 1) &
531 *e_hat_dot_cg(k, 1)*e_hat_dot_cg(l, 2)
544 *e_hat_dot_cg(i, 2)*e_hat_dot_cg(j, 3) &
545 *e_hat_dot_cg(k, 1)*e_hat_dot_cg(l, 1)
549 *e_hat_dot_cg(i, 2)*e_hat_dot_cg(j, 3) &
550 *e_hat_dot_cg(k, 2)*e_hat_dot_cg(l, 2)
554 *e_hat_dot_cg(i, 2)*e_hat_dot_cg(j, 3) &
555 *e_hat_dot_cg(k, 1)*e_hat_dot_cg(l, 2)
572 *e_hat_dot_cg(i, 3)*e_hat_dot_cg(j, 1) &
573 *e_hat_dot_cg(k, 3)*e_hat_dot_cg(l, 1)
594 *e_hat_dot_cg(i, 3)*e_hat_dot_cg(j, 1) &
595 *e_hat_dot_cg(k, 2)*e_hat_dot_cg(l, 3)
608 *e_hat_dot_cg(i, 2)*e_hat_dot_cg(j, 3) &
609 *e_hat_dot_cg(k, 2)*e_hat_dot_cg(l, 3)
619 c(1, 1, 2, 2) = c(2, 2, 1, 1)
620 c(1, 1, 1, 2) = c(1, 2, 1, 1)
621 c(1, 1, 2, 3) = c(2, 3, 1, 1)
622 c(1, 1, 3, 1) = c(3, 1, 1, 1)
623 c(2, 2, 1, 2) = c(1, 2, 2, 2)
624 c(2, 2, 2, 3) = c(2, 3, 2, 2)
625 c(2, 2, 3, 1) = c(3, 1, 2, 2)
626 c(1, 2, 2, 3) = c(2, 3, 1, 2)
627 c(1, 2, 3, 1) = c(3, 1, 1, 2)
628 c(2, 3, 3, 1) = c(3, 1, 2, 3)
integer(kind=4), parameter kreal
This module provides functions for elastic material.
subroutine calelasticmatrix(matl, sectType, D, temp, hdflag)
Calculate isotropic elastic matrix hdflag: 0=full, 1=deviatoric only (edge-smoothed,...
subroutine linearelastic_shell(matl, sectType, c, e1_hat, e2_hat, e3_hat, cg1, cg2, cg3, alpha, n_layer)
subroutine calelasticmatrix_ortho(matl, sectType, bij, DMAT, temp, hdflag)
Calculate orthotropic elastic matrix bij: rotation matrix from material axes to global axes,...
This module provides aux functions.
subroutine calsolve(NN, A, b)
Solve A x = b for dense NN x NN system (Gaussian elimination with partial pivoting)
subroutine transformation(jacob, tm)
This module summarizes all information of material properties.
integer(kind=kint), parameter m_youngs
integer(kind=kint), parameter planestress
integer(kind=kint), parameter d3
integer(kind=kint), parameter planestrain
integer(kind=kint), parameter shell
integer(kind=kint), parameter m_poisson
integer(kind=kint), parameter axissymetric
character(len=dict_key_length) mc_isoelastic
character(len=dict_key_length) mc_orthoelastic
integer(kind=kint), parameter m_alpha_over_mu
Structure to manage all material related data.