15 subroutine setmass(fstrSOLID, hecMESH, hecMAT, fstrEIG)
25 integer(kind=kint) :: i, iS, iE, ii, nn, j, jn, jS, k
26 integer(kind=kint) :: N, NP, NDOF
27 integer(kind=kint) :: icel, ic_type, itype, isect, ihead, sec_opt, cid
28 integer(kind=kint) :: nodLOCAL(20)
29 real(kind=
kreal) :: val, surf, chkmass
30 real(kind=
kreal) :: rho, thick, length
31 real(kind=
kreal) :: lumped(120), mass(20*6, 20*6), ecoord(3,20)
34 write(
imsg,*)
"* mass matrix generation"
41 allocate(fstreig%mass(np*ndof))
45 do itype = 1, hecmesh%n_elem_type
46 is = hecmesh%elem_type_index(itype-1) + 1
47 ie = hecmesh%elem_type_index(itype )
48 ic_type = hecmesh%elem_type_item(itype)
49 nn = hecmw_get_max_node(ic_type)
51 if(hecmw_is_etype_link(ic_type)) cycle
52 if(hecmw_is_etype_patch(ic_type)) cycle
53 if(ic_type == 3414) cycle
56 js = hecmesh%elem_node_index(icel-1)
58 nodlocal(j) = hecmesh%elem_node_item(js+j)
60 ecoord(i,j) = hecmesh%node(3*(nodlocal(j)-1)+i)
64 isect = hecmesh%section_ID(icel)
65 ihead = hecmesh%section%sect_R_index(isect-1)
66 cid = hecmesh%section%sect_mat_ID_item(isect)
67 sec_opt = hecmesh%section%sect_opt(isect)
68 rho = fstrsolid%materials(cid)%variables(
m_density)
69 thick = fstrsolid%materials(cid)%variables(
m_thick)
72 if(ic_type == 231 .or. ic_type == 232 .or. ic_type == 241 .or. ic_type == 242)
then
73 call mass_c2(ic_type, nn, ecoord(1:2,1:nn), fstrsolid%elements(icel)%gausses, sec_opt, thick, mass, lumped)
75 elseif(ic_type == 341 .or. ic_type == 342 .or. ic_type == 351 .or. ic_type == 352 .or. &
76 & ic_type == 361 .or. ic_type == 362 )
then
77 call mass_c3(ic_type, nn, ecoord(1:3,1:nn), fstrsolid%elements(icel)%gausses, mass, lumped)
79 elseif(ic_type==731 .or. ic_type==741 .or. ic_type==743)
then
80 rho = fstrsolid%materials(cid)%variables(
m_density)
81 thick = fstrsolid%materials(cid)%variables(
m_thick)
82 call mass_shell(ic_type, nn, ecoord(1:3,1:nn), rho, thick, fstrsolid%elements(icel)%gausses, mass, lumped)
84 elseif(ic_type == 761)
then
86 rho = fstrsolid%materials(cid)%variables(
m_density)
87 thick = fstrsolid%materials(cid)%variables(
m_thick)
88 val = surf*thick*rho/3.0d0
90 elseif(ic_type == 781)
then
92 rho = fstrsolid%materials(cid)%variables(
m_density)
93 thick = fstrsolid%materials(cid)%variables(
m_thick)
94 val = surf*thick*rho/4.0d0
96 elseif(ic_type == 611 .or. ic_type == 641)
then
97 surf = hecmesh%section%sect_R_item(ihead+4)
99 rho = fstrsolid%materials(cid)%variables(
m_density)
100 val = 0.5d0*surf*length*rho
102 elseif(ic_type == 301)
then
103 surf = hecmesh%section%sect_R_item(ihead+1)
105 rho = fstrsolid%materials(cid)%variables(
m_density)
106 val = 0.5d0*surf*length*rho
108 elseif( ic_type/100 == 5 )
then
110 write(*,*)
"** error setMASS"
117 if(ic_type == 611)
then
118 fstreig%mass(js+1) = fstreig%mass(js+1) + val
119 fstreig%mass(js+2) = fstreig%mass(js+2) + val
120 fstreig%mass(js+3) = fstreig%mass(js+3) + val
121 fstreig%mass(js+4) = fstreig%mass(js+4) + 0.0d0
122 fstreig%mass(js+5) = fstreig%mass(js+5) + 0.0d0
123 fstreig%mass(js+6) = fstreig%mass(js+6) + 0.0d0
125 elseif(ic_type == 641)
then
126 if(j == 1 .or. j == 2)
then
127 fstreig%mass(js+1) = fstreig%mass(js+1) + val
128 fstreig%mass(js+2) = fstreig%mass(js+2) + val
129 fstreig%mass(js+3) = fstreig%mass(js+3) + val
130 elseif(j == 3 .or. j == 4)
then
131 fstreig%mass(js+1) = fstreig%mass(js+1) + 0.0d0
132 fstreig%mass(js+2) = fstreig%mass(js+2) + 0.0d0
133 fstreig%mass(js+3) = fstreig%mass(js+3) + 0.0d0
136 elseif(ic_type == 761)
then
137 if(j == 1 .or. j == 2 .or. j == 3)
then
138 fstreig%mass(js+1) = fstreig%mass(js+1) + val
139 fstreig%mass(js+2) = fstreig%mass(js+2) + val
140 fstreig%mass(js+3) = fstreig%mass(js+3) + val
141 elseif(j == 4 .or. j == 5 .or. j == 6)
then
142 fstreig%mass(js+1) = fstreig%mass(js+1) + 0.0d0
143 fstreig%mass(js+2) = fstreig%mass(js+2) + 0.0d0
144 fstreig%mass(js+3) = fstreig%mass(js+3) + 0.0d0
147 else if( ic_type == 781 )
then
148 if(j == 1 .or. j == 2 .or. j == 3 .or. j == 4)
then
149 fstreig%mass(js+1) = fstreig%mass(js+1) + val
150 fstreig%mass(js+2) = fstreig%mass(js+2) + val
151 fstreig%mass(js+3) = fstreig%mass(js+3) + val
152 elseif(j == 5 .or. j == 6 .or. j == 7 .or. j == 8)
then
153 fstreig%mass(js+1) = fstreig%mass(js+1) + 0.0d0
154 fstreig%mass(js+2) = fstreig%mass(js+2) + 0.0d0
155 fstreig%mass(js+3) = fstreig%mass(js+3) + 0.0d0
158 elseif(ic_type == 301)
then
159 fstreig%mass(js+1) = fstreig%mass(js+1) + val
160 fstreig%mass(js+2) = fstreig%mass(js+2) + val
161 fstreig%mass(js+3) = fstreig%mass(js+3) + val
165 fstreig%mass(js+k) = fstreig%mass(js+k) + lumped(ndof*(j-1)+k)
172 call hecmw_update_r(hecmesh, fstreig%mass, np, ndof)
177 chkmass = chkmass + fstreig%mass(ii)
179 call hecmw_allreduce_r1(hecmesh, chkmass,
hecmw_sum)
180 fstreig%totalmass = chkmass
183 write(
imsg,
"(a,1pe12.5)")
"** Total mass: ", chkmass