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
integer(kind=kint), parameter hecmw_sum
integer(kind=4), parameter kreal
This module contains subroutines used in 3d eigen analysis for.
real(kind=kreal) function get_length(ecoord)
subroutine mass_c2(etype, nn, ecoord, gausses, sec_opt, thick, mass, lumped, temperature)
real(kind=kreal) function get_face4(ecoord)
real(kind=kreal) function get_face3(ecoord)
subroutine mass_c3(etype, nn, ecoord, gausses, mass, lumped, temperature)
This modules just summarizes all modules used in eigen analysis.
Set up lumped mass matrix.
subroutine setmass(fstrSOLID, hecMESH, hecMAT, fstrEIG)
This module defines common data and basic structures for analysis.
integer(kind=kint) myrank
PARALLEL EXECUTION.
integer(kind=kint), parameter imsg
This module provides a function to fetch material properties from hecmw.
subroutine mass_shell(etype, nn, elem, rho, thick, gausses, mass, lumped)
This module summarizes all information of material properties.
integer(kind=kint), parameter m_density
integer(kind=kint), parameter m_thick
Package of data used by Lanczos eigenvalue solver.