23 type (hecmwst_local_mesh) :: hecmesh
24 type (hecmwst_matrix) :: hecmat
26 real(kind=kreal),
intent(in) :: time
27 real(kind=kreal),
intent(in) :: tincr
29 type( tmaterial ),
pointer :: material
31 real(kind=kreal) :: stiffness(fstrsolid%max_ncon_stf*6, fstrsolid%max_ncon_stf*6)
32 integer(kind=kint) :: nodlocal(fstrsolid%max_ncon)
33 real(kind=kreal) :: tt(fstrsolid%max_ncon), ecoord(3,fstrsolid%max_ncon)
34 real(kind=kreal) :: thick
35 integer(kind=kint) :: ndof, itype, is, ie, ic_type, nn, icel, iis, i, j
36 real(kind=kreal) :: u(6,fstrsolid%max_ncon), du(6,fstrsolid%max_ncon), coords(3,3), u_prev(6,fstrsolid%max_ncon)
37 integer :: isect, ihead, cdsys_id
40 call hecmw_mat_clear( hecmat )
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)
50 if (hecmw_is_etype_link(ic_type)) cycle
51 if (hecmw_is_etype_patch(ic_type)) cycle
63 iis= hecmesh%elem_node_index(icel-1)
64 nn = hecmesh%elem_node_index(icel)-iis
68 nodlocal(j)= hecmesh%elem_node_item (iis+j)
70 ecoord(i,j) = hecmesh%node(3*nodlocal(j)+i-3)
73 du(i,j) = fstrsolid%dunode(ndof*nodlocal(j)+i-ndof)
74 u(i,j) = fstrsolid%unode(ndof*nodlocal(j)+i-ndof) + du(i,j)
75 u_prev(i,j) = fstrsolid%unode(ndof*nodlocal(j)+i-ndof)
77 if( fstrsolid%TEMP_ngrp_tot > 0 .or. fstrsolid%TEMP_irres >0 ) &
78 tt(j)=fstrsolid%temperature( nodlocal(j) )
81 isect = hecmesh%section_ID(icel)
82 ihead = hecmesh%section%sect_R_index(isect-1)
83 cdsys_id = hecmesh%section%sect_orien_ID(isect)
84 if( cdsys_id > 0 )
call get_coordsys(cdsys_id, hecmesh, fstrsolid, coords)
85 thick = hecmesh%section%sect_R_item(ihead+1)
86 material => fstrsolid%elements(icel)%gausses(1)%pMaterial
88 if( ic_type==241 .or. ic_type==242 .or. ic_type==231 .or. ic_type==232 .or. ic_type==2322)
then
89 if( material%nlgeom_flag /= infinitesimal )
call stiffmat_abort( ic_type, 2 )
90 call stf_c2( ic_type,nn,ecoord(1:2,1:nn),fstrsolid%elements(icel)%gausses(:),thick, &
91 stiffness(1:nn*ndof,1:nn*ndof), fstrsolid%elements(icel)%iset, &
94 elseif ( ic_type==301 )
then
95 call stf_c1( ic_type,nn,ecoord(:,1:nn),thick,fstrsolid%elements(icel)%gausses(:), &
96 stiffness(1:nn*ndof,1:nn*ndof), u(1:3,1:nn) )
98 elseif ( ic_type==361 )
then
99 if( fstrsolid%sections(isect)%elemopt361 ==
kel361fi )
then
101 ( ic_type, nn, ecoord(:, 1:nn), fstrsolid%elements(icel)%gausses(:), &
102 stiffness(1:nn*ndof, 1:nn*ndof), cdsys_id, coords, time, tincr, u(1:3,1:nn), tt(1:nn) )
103 else if( fstrsolid%sections(isect)%elemopt361 ==
kel361bbar )
then
105 ( ic_type, nn, ecoord(:, 1:nn), fstrsolid%elements(icel)%gausses(:), &
106 stiffness(1:nn*ndof,1:nn*ndof), cdsys_id, coords, time, tincr, u(1:3, 1:nn), tt(1:nn) )
107 else if( fstrsolid%sections(isect)%elemopt361 ==
kel361ic )
then
109 ( ic_type, nn, ecoord(:,1:nn), fstrsolid%elements(icel)%gausses(:), &
110 stiffness(1:nn*ndof, 1:nn*ndof), cdsys_id, coords, time, tincr, u(1:3,1:nn), &
111 fstrsolid%elements(icel)%aux, tt(1:nn) )
112 else if( fstrsolid%sections(isect)%elemopt361 ==
kel361fbar )
then
114 ( ic_type, nn, ecoord(:, 1:nn), fstrsolid%elements(icel)%gausses(:), &
115 stiffness(1:nn*ndof,1:nn*ndof), cdsys_id, coords, time, tincr, u(1:3, 1:nn), tt(1:nn) )
118 elseif (ic_type==341 .or. ic_type==351 .or. ic_type==342 .or. ic_type==352 .or. ic_type==362 )
then
119 if( ic_type==341 .and. fstrsolid%sections(isect)%elemopt341 ==
kel341sesns ) cycle
121 ( ic_type, nn, ecoord(:, 1:nn), fstrsolid%elements(icel)%gausses(:), &
122 stiffness(1:nn*ndof, 1:nn*ndof), cdsys_id, coords, time, tincr, u(1:3,1:nn), tt(1:nn) )
124 else if( ic_type == 511)
then
125 call stf_connector( ic_type,nn,ecoord(:,1:nn),fstrsolid%elements(icel)%gausses(:), &
126 stiffness(1:nn*ndof,1:nn*ndof), u(1:3,1:nn), tincr, tt(1:nn) )
128 else if( ic_type == 611)
then
129 if( material%nlgeom_flag /= infinitesimal )
call stiffmat_abort( ic_type, 2 )
130 call stf_beam(ic_type, nn, ecoord, hecmesh%section%sect_R_item(ihead+1:), &
131 & material%variables(m_youngs), material%variables(m_poisson), stiffness(1:nn*ndof,1:nn*ndof))
133 else if( ic_type == 641 )
then
134 if( material%nlgeom_flag /= infinitesimal )
call stiffmat_abort( ic_type, 2 )
135 call stf_beam_641(ic_type, nn, ecoord, fstrsolid%elements(icel)%gausses(:), &
136 & hecmesh%section%sect_R_item(ihead+1:), stiffness(1:nn*ndof,1:nn*ndof))
138 else if( ( ic_type == 741 ) .or. ( ic_type == 743 ) .or. ( ic_type == 731 ) )
then
139 if( material%nlgeom_flag /= infinitesimal )
call stiffmat_abort( ic_type, 2 )
140 call stf_shell_mitc(ic_type, nn, ndof, ecoord(1:3, 1:nn), fstrsolid%elements(icel)%gausses(:), &
141 & stiffness(1:nn*ndof, 1:nn*ndof), thick, 0)
143 else if( ic_type == 761 )
then
144 if( material%nlgeom_flag /= infinitesimal )
call stiffmat_abort( ic_type, 2 )
145 call stf_shell_mitc(731, 3, 6, ecoord(1:3, 1:3), fstrsolid%elements(icel)%gausses(:), &
146 & stiffness(1:nn*ndof, 1:nn*ndof), thick, 2)
148 else if( ic_type == 781 )
then
149 if( material%nlgeom_flag /= infinitesimal )
call stiffmat_abort( ic_type, 2 )
150 call stf_shell_mitc(741, 4, 6, ecoord(1:3, 1:4), fstrsolid%elements(icel)%gausses(:), &
151 & stiffness(1:nn*ndof, 1:nn*ndof), thick, 1)
153 elseif ( ic_type==3414 )
then
154 if( material%mtype /= incomp_newtonian)
call stiffmat_abort( ic_type, 3, material%mtype )
156 ( ic_type, nn, ecoord(:, 1:nn),fstrsolid%elements(icel)%gausses(:), &
157 stiffness(1:nn*ndof, 1:nn*ndof), tincr, u_prev(1:4, 1:nn) )
158 else if ( ic_type == 881 .or. ic_type == 891 )
then
159 call stf_c3d4_sesns &
160 ( ic_type,nn,nodlocal,ecoord(:, 1:nn), fstrsolid%elements(icel)%gausses(:), &
161 stiffness, cdsys_id, coords, time, tincr, u(1:3,1:nn), tt(1:nn) )
167 if( fstrsolid%elements(icel)%elemact_flag == kelact_inactive )
then
168 call stf_dummy( ndof, nn, ecoord(:,1:nn), u(1:3,1:nn), &
169 & stiffness(1:nn*ndof, 1:nn*ndof), fstrsolid%elements(icel) )
174 call hecmw_mat_ass_elem(hecmat, nn, nodlocal, stiffness)
184 integer(kind=kint),
intent(in) :: ic_type
185 integer(kind=kint),
intent(in) :: flag
186 integer(kind=kint),
intent(in),
optional :: mtype
189 write(*,*)
'###ERROR### : Element type not supported for static analysis'
190 else if( flag == 2 )
then
191 write(*,*)
'###ERROR### : Element type not supported for nonlinear static analysis'
192 else if( flag == 3 )
then
193 write(*,*)
'###ERROR### : This element is not supported for this material'
195 write(*,*)
' ic_type = ', ic_type
196 if(
present(mtype) )
write(*,*)
' mtype = ', mtype
197 call hecmw_abort(hecmw_comm_get_comm())
This module provides function to calculate tangent stiffness matrix.
subroutine, public fstr_stiffmatrix(hecMESH, hecMAT, fstrSOLID, time, tincr)
This subroutine creates tangential stiffness matrix.
subroutine stiffmat_abort(ic_type, flag, mtype)
This module defines common data and basic structures for analysis.
integer(kind=kint), parameter kel361bbar
subroutine get_coordsys(cdsys_ID, hecMESH, fstrSOLID, coords)
This subroutine fetch coords defined by local coordinate system.
integer(kind=kint), parameter kel341sesns
integer(kind=kint), parameter kel361fi
integer(kind=kint), parameter kel361ic
integer(kind=kint), parameter kel361fbar
This modules just summarizes all modules used in static analysis.
This modules defines a structure to record history dependent parameter in static analysis.