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 if( getspacedimension( ic_type )==2 ) thick =1.d0
87 material => fstrsolid%elements(icel)%gausses(1)%pMaterial
89 if( ic_type==241 .or. ic_type==242 .or. ic_type==231 .or. ic_type==232 .or. ic_type==2322)
then
90 if( material%nlgeom_flag /= infinitesimal )
call stiffmat_abort( ic_type, 2 )
91 call stf_c2( ic_type,nn,ecoord(1:2,1:nn),fstrsolid%elements(icel)%gausses(:),thick, &
92 stiffness(1:nn*ndof,1:nn*ndof), fstrsolid%elements(icel)%iset, &
95 elseif ( ic_type==301 )
then
96 call stf_c1( ic_type,nn,ecoord(:,1:nn),thick,fstrsolid%elements(icel)%gausses(:), &
97 stiffness(1:nn*ndof,1:nn*ndof), u(1:3,1:nn) )
99 elseif ( ic_type==361 )
then
100 if( fstrsolid%sections(isect)%elemopt361 ==
kel361fi )
then
102 ( ic_type, nn, ecoord(:, 1:nn), fstrsolid%elements(icel)%gausses(:), &
103 stiffness(1:nn*ndof, 1:nn*ndof), cdsys_id, coords, time, tincr, u(1:3,1:nn), tt(1:nn) )
104 else if( fstrsolid%sections(isect)%elemopt361 ==
kel361bbar )
then
106 ( ic_type, nn, ecoord(:, 1:nn), fstrsolid%elements(icel)%gausses(:), &
107 stiffness(1:nn*ndof,1:nn*ndof), cdsys_id, coords, time, tincr, u(1:3, 1:nn), tt(1:nn) )
108 else if( fstrsolid%sections(isect)%elemopt361 ==
kel361ic )
then
110 ( ic_type, nn, ecoord(:,1:nn), fstrsolid%elements(icel)%gausses(:), &
111 stiffness(1:nn*ndof, 1:nn*ndof), cdsys_id, coords, time, tincr, u(1:3,1:nn), &
112 fstrsolid%elements(icel)%aux, tt(1:nn) )
113 else if( fstrsolid%sections(isect)%elemopt361 ==
kel361fbar )
then
115 ( ic_type, nn, ecoord(:, 1:nn), fstrsolid%elements(icel)%gausses(:), &
116 stiffness(1:nn*ndof,1:nn*ndof), cdsys_id, coords, time, tincr, u(1:3, 1:nn), tt(1:nn) )
119 elseif (ic_type==341 .or. ic_type==351 .or. ic_type==342 .or. ic_type==352 .or. ic_type==362 )
then
120 if( ic_type==341 .and. fstrsolid%sections(isect)%elemopt341 ==
kel341sesns ) cycle
122 ( ic_type, nn, ecoord(:, 1:nn), fstrsolid%elements(icel)%gausses(:), &
123 stiffness(1:nn*ndof, 1:nn*ndof), cdsys_id, coords, time, tincr, u(1:3,1:nn), tt(1:nn) )
125 else if( ic_type == 511)
then
126 call stf_connector( ic_type,nn,ecoord(:,1:nn),fstrsolid%elements(icel)%gausses(:), &
127 stiffness(1:nn*ndof,1:nn*ndof), u(1:3,1:nn), tincr, tt(1:nn) )
129 else if( ic_type == 611)
then
130 if( material%nlgeom_flag /= infinitesimal )
call stiffmat_abort( ic_type, 2 )
131 call stf_beam(ic_type, nn, ecoord, hecmesh%section%sect_R_item(ihead+1:), &
132 & material%variables(m_youngs), material%variables(m_poisson), stiffness(1:nn*ndof,1:nn*ndof))
134 else if( ic_type == 641 )
then
135 if( material%nlgeom_flag /= infinitesimal )
call stiffmat_abort( ic_type, 2 )
136 call stf_beam_641(ic_type, nn, ecoord, fstrsolid%elements(icel)%gausses(:), &
137 & hecmesh%section%sect_R_item(ihead+1:), stiffness(1:nn*ndof,1:nn*ndof))
139 else if( ( ic_type == 741 ) .or. ( ic_type == 743 ) .or. ( ic_type == 731 ) )
then
140 if( material%nlgeom_flag /= infinitesimal )
call stiffmat_abort( ic_type, 2 )
141 call stf_shell_mitc(ic_type, nn, ndof, ecoord(1:3, 1:nn), fstrsolid%elements(icel)%gausses(:), &
142 & stiffness(1:nn*ndof, 1:nn*ndof), thick, 0)
144 else if( ic_type == 761 )
then
145 if( material%nlgeom_flag /= infinitesimal )
call stiffmat_abort( ic_type, 2 )
146 call stf_shell_mitc(731, 3, 6, ecoord(1:3, 1:3), fstrsolid%elements(icel)%gausses(:), &
147 & stiffness(1:nn*ndof, 1:nn*ndof), thick, 2)
149 else if( ic_type == 781 )
then
150 if( material%nlgeom_flag /= infinitesimal )
call stiffmat_abort( ic_type, 2 )
151 call stf_shell_mitc(741, 4, 6, ecoord(1:3, 1:4), fstrsolid%elements(icel)%gausses(:), &
152 & stiffness(1:nn*ndof, 1:nn*ndof), thick, 1)
154 elseif ( ic_type==3414 )
then
155 if( material%mtype /= incomp_newtonian)
call stiffmat_abort( ic_type, 3, material%mtype )
157 ( ic_type, nn, ecoord(:, 1:nn),fstrsolid%elements(icel)%gausses(:), &
158 stiffness(1:nn*ndof, 1:nn*ndof), tincr, u_prev(1:4, 1:nn) )
159 else if ( ic_type == 881 .or. ic_type == 891 )
then
160 call stf_c3d4_sesns &
161 ( ic_type,nn,nodlocal,ecoord(:, 1:nn), fstrsolid%elements(icel)%gausses(:), &
162 stiffness, cdsys_id, coords, time, tincr, u(1:3,1:nn), tt(1:nn) )
168 call hecmw_mat_ass_elem(hecmat, nn, nodlocal, stiffness)
178 integer(kind=kint),
intent(in) :: ic_type
179 integer(kind=kint),
intent(in) :: flag
180 integer(kind=kint),
intent(in),
optional :: mtype
183 write(*,*)
'###ERROR### : Element type not supported for static analysis'
184 else if( flag == 2 )
then
185 write(*,*)
'###ERROR### : Element type not supported for nonlinear static analysis'
186 else if( flag == 3 )
then
187 write(*,*)
'###ERROR### : This element is not supported for this material'
189 write(*,*)
' ic_type = ', ic_type
190 if(
present(mtype) )
write(*,*)
' mtype = ', mtype
191 call hecmw_abort(hecmw_comm_get_comm())