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
109 write(*,*)
"** error setMASS"
116 if(ic_type == 611)
then
117 fstreig%mass(js+1) = fstreig%mass(js+1) + val
118 fstreig%mass(js+2) = fstreig%mass(js+2) + val
119 fstreig%mass(js+3) = fstreig%mass(js+3) + val
120 fstreig%mass(js+4) = fstreig%mass(js+4) + 0.0d0
121 fstreig%mass(js+5) = fstreig%mass(js+5) + 0.0d0
122 fstreig%mass(js+6) = fstreig%mass(js+6) + 0.0d0
124 elseif(ic_type == 641)
then
125 if(j == 1 .or. j == 2)
then
126 fstreig%mass(js+1) = fstreig%mass(js+1) + val
127 fstreig%mass(js+2) = fstreig%mass(js+2) + val
128 fstreig%mass(js+3) = fstreig%mass(js+3) + val
129 elseif(j == 3 .or. j == 4)
then
130 fstreig%mass(js+1) = fstreig%mass(js+1) + 0.0d0
131 fstreig%mass(js+2) = fstreig%mass(js+2) + 0.0d0
132 fstreig%mass(js+3) = fstreig%mass(js+3) + 0.0d0
135 elseif(ic_type == 761)
then
136 if(j == 1 .or. j == 2 .or. j == 3)
then
137 fstreig%mass(js+1) = fstreig%mass(js+1) + val
138 fstreig%mass(js+2) = fstreig%mass(js+2) + val
139 fstreig%mass(js+3) = fstreig%mass(js+3) + val
140 elseif(j == 4 .or. j == 5 .or. j == 6)
then
141 fstreig%mass(js+1) = fstreig%mass(js+1) + 0.0d0
142 fstreig%mass(js+2) = fstreig%mass(js+2) + 0.0d0
143 fstreig%mass(js+3) = fstreig%mass(js+3) + 0.0d0
146 else if( ic_type == 781 )
then
147 if(j == 1 .or. j == 2 .or. j == 3 .or. j == 4)
then
148 fstreig%mass(js+1) = fstreig%mass(js+1) + val
149 fstreig%mass(js+2) = fstreig%mass(js+2) + val
150 fstreig%mass(js+3) = fstreig%mass(js+3) + val
151 elseif(j == 5 .or. j == 6 .or. j == 7 .or. j == 8)
then
152 fstreig%mass(js+1) = fstreig%mass(js+1) + 0.0d0
153 fstreig%mass(js+2) = fstreig%mass(js+2) + 0.0d0
154 fstreig%mass(js+3) = fstreig%mass(js+3) + 0.0d0
157 elseif(ic_type == 301)
then
158 fstreig%mass(js+1) = fstreig%mass(js+1) + val
159 fstreig%mass(js+2) = fstreig%mass(js+2) + val
160 fstreig%mass(js+3) = fstreig%mass(js+3) + val
164 fstreig%mass(js+k) = fstreig%mass(js+k) + lumped(ndof*(j-1)+k)
171 call hecmw_update_m_r(hecmesh, fstreig%mass, np, ndof)
176 chkmass = chkmass + fstreig%mass(ii)
178 call hecmw_allreduce_r1(hecmesh, chkmass,
hecmw_sum)
179 fstreig%totalmass = chkmass
182 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 defined coomon data and basic structures for analysis.
integer(kind=kint) myrank
PARALLEL EXECUTION.
integer(kind=kint), parameter imsg
This module provide a function to fetch material properties from hecmw.
subroutine mass_shell(etype, nn, elem, rho, thick, gausses, mass, lumped)
This module summarizes all infomation of material properties.
integer(kind=kint), parameter m_density
integer(kind=kint), parameter m_thick
Package of data used by Lanczos eigenvalue solver.