13 subroutine fstr_get_prop(hecMESH,shell_var,isect,ee,pp,rho,alpha,thick,n_totlyr,alpha_over_mu, &
14 beam_radius,beam_angle1,beam_angle2,beam_angle3, &
15 beam_angle4,beam_angle5,beam_angle6)
20 type (hecmwST_local_mesh) :: hecMESH
21 type (tshellmat),
pointer :: shell_var(:)
22 integer(kind=kint) :: n_item, n_subitem, ihead, isect, mid, mpos
23 integer(kind=kint) :: shell_ortho, n_totlyr, section_type
24 real(kind=kreal) :: ee, pp, rho, alpha, thick, alpha_over_mu
25 real(kind=kreal) :: beam_radius,beam_angle1,beam_angle2,beam_angle3,beam_angle4,beam_angle5,beam_angle6
32 n_item = hecmesh%section%sect_R_index(isect)-hecmesh%section%sect_R_index(isect-1)
33 ihead = hecmesh%section%sect_R_index(isect-1)
36 thick = hecmesh%section%sect_R_item(ihead+1)
37 section_type = hecmesh%section%sect_type(isect)
44 mid=hecmesh%section%sect_mat_ID_item(isect)
47 n_item=hecmesh%material%mat_ITEM_index(mid)-hecmesh%material%mat_ITEM_index(mid-1)
50 ihead=hecmesh%material%mat_ITEM_index(mid-1)
61 if( n_item .lt. 1 )
then
62 write(
imsg,*)
'n_item=',n_item
63 write(
imsg,*)
'###Error 1'
68 if ( n_item.ge.1 )
then
70 n_subitem = hecmesh%material%mat_subITEM_index(ihead+1) &
71 - hecmesh%material%mat_subITEM_index(ihead)
73 mpos=hecmesh%material%mat_subITEM_index(ihead)
77 if (section_type == 2)
then
78 call fstr_get_prop_shell(hecmesh,shell_var,mid,n_subitem,ee,pp,rho,alpha,thick,alpha_over_mu, &
79 n_totlyr,shell_ortho,mpos)
81 if( n_subitem .lt. 1 )
then
82 write(
imsg,*)
'###Error 2'
85 if ( n_subitem.ge.1 )
then
86 ee=hecmesh%material%mat_val(mpos+1)
88 if ( n_subitem.ge.2 )
then
89 pp=hecmesh%material%mat_val(mpos+2)
91 if ( n_subitem.ge.9 )
then
92 beam_radius = hecmesh%material%mat_val(mpos+3)
93 beam_angle1 = hecmesh%material%mat_val(mpos+4)
94 beam_angle2 = hecmesh%material%mat_val(mpos+5)
95 beam_angle3 = hecmesh%material%mat_val(mpos+6)
96 beam_angle4 = hecmesh%material%mat_val(mpos+7)
97 beam_angle5 = hecmesh%material%mat_val(mpos+8)
98 beam_angle6 = hecmesh%material%mat_val(mpos+9)
104 if ( n_item.ge.2 )
then
106 n_subitem=hecmesh%material%mat_subITEM_index(ihead+2) &
107 -hecmesh%material%mat_subITEM_index(ihead+1)
109 mpos=hecmesh%material%mat_subITEM_index(ihead+1)
111 if( n_subitem .lt. 1 )
then
112 write(
imsg,*)
'###Error 3'
115 if ( n_subitem.ge.1 )
then
116 rho=hecmesh%material%mat_val(mpos+1)
118 if ( n_subitem.ge.2 )
then
119 alpha_over_mu=hecmesh%material%mat_val(mpos+2)
124 if ( n_item.ge.3 )
then
126 n_subitem=hecmesh%material%mat_subITEM_index(ihead+3) &
127 -hecmesh%material%mat_subITEM_index(ihead+2)
129 mpos=hecmesh%material%mat_subITEM_index(ihead+2)
131 if( n_subitem .lt. 1 )
then
132 write(
imsg,*)
'###Error 4'
135 if ( n_subitem.ge.1 )
then
136 alpha=hecmesh%material%mat_val(mpos+1)
142 subroutine fstr_get_prop_shell(hecMESH,shell_var,mid,n_subitem,ee,pp,rho,alpha,thick,alpha_over_mu, &
143 n_totlyr,shell_ortho,mpos)
146 type (hecmwST_local_mesh) :: hecMESH
147 type (tshellmat),
pointer :: shell_var(:)
148 real(kind=kreal) :: ee, pp, rho, alpha, thick, alpha_over_mu, tmp
149 integer(kind=kint) :: mid, count, i, j, flag
150 integer(kind=kint) :: shell_ortho, n_totlyr
151 integer(kind=kint) :: n_subitem, mpos
153 if( n_subitem .lt. 1 )
then
154 write(
imsg,*)
'###Error 2'
156 elseif( n_subitem == 2)
then
159 ee = hecmesh%material%mat_val(mpos+1)
160 pp = hecmesh%material%mat_val(mpos+2)
162 allocate(shell_var(1))
163 shell_var(1)%ortho = 0
166 shell_var(1)%weight= 1.0d0
168 elseif( n_subitem == 3)
then
171 ee = hecmesh%material%mat_val(mpos+1)
172 pp = hecmesh%material%mat_val(mpos+2)
173 thick=hecmesh%material%mat_val(mpos+3)
175 allocate(shell_var(1))
176 shell_var(1)%ortho = 0
179 shell_var(1)%weight= 1.0d0
181 write(
imsg,*)
'###NOTICE : shell thickness is updated'
183 elseif( n_subitem >= 4)
then
187 flag=int(hecmesh%material%mat_val(mpos+i))
189 if(mod(n_subitem-1, 3) == 0)
then
190 n_totlyr=(n_subitem-1)/3
192 write(
imsg,*)
'###Error: Shell property invalid'
193 write(*,*)
'###Error: Shell property invalid'
196 elseif(flag == 1)
then
197 if(mod(n_subitem-1, 8) == 0)
then
198 n_totlyr=(n_subitem-1)/8
200 write(
imsg,*)
'###Error: Shell property invalid'
201 write(*,*)
'###Error: Shell property invalid'
205 write(
imsg,*)
'###Error: Shell property invalid'
206 write(*,*)
'###Error: Shell property invalid'
210 allocate(shell_var(n_totlyr))
216 shell_var(count)%ortho = dble(flag)
217 shell_var(count)%ee = hecmesh%material%mat_val(mpos+i )
218 shell_var(count)%pp = hecmesh%material%mat_val(mpos+i+1)
219 shell_var(count)%weight= hecmesh%material%mat_val(mpos+i+2)
222 shell_var(count)%ortho = dble(flag)
223 shell_var(count)%ee = hecmesh%material%mat_val(mpos+i )
224 shell_var(count)%pp = hecmesh%material%mat_val(mpos+i+1)
225 shell_var(count)%ee2 = hecmesh%material%mat_val(mpos+i+2)
226 shell_var(count)%g12 = hecmesh%material%mat_val(mpos+i+3)
227 shell_var(count)%g23 = hecmesh%material%mat_val(mpos+i+4)
228 shell_var(count)%g31 = hecmesh%material%mat_val(mpos+i+5)
229 shell_var(count)%angle = hecmesh%material%mat_val(mpos+i+6)
230 shell_var(count)%weight= hecmesh%material%mat_val(mpos+i+7)
233 write(
imsg,*)
'###Error: Shell property invalid'
242 tmp = tmp + shell_var(i)%weight
245 shell_var(i)%weight = shell_var(i)%weight / tmp
248 write(
imsg,
"(a)")
"### NOTICCE: Total thickness is not equal to the sum of laminated layers' thickness"