27 integer(kind=kint) :: iter
28 integer(kind=kint) :: nnode
29 integer(kind=kint) :: i, j
30 real(kind=kreal) :: normal(3)
32 real(kind=kreal) :: fcoeff, tpenalty
33 real(kind=kreal) :: lagrange
34 real(kind=kreal) :: tf_trial(3), length_tft
35 real(kind=kreal) :: tangent(3)
36 real(kind=kreal) :: stiffness(:,:)
39 real(kind=kreal) :: dot_tn
41 nnode =
size(tsurf%nodes)
48 normal(1:3) = ctstate%direction(1:3)
51 ntm(1:(nnode+1)*3) = matmul(transpose(tm(1:3, 1:3*(nnode+1))), normal)
55 stiffness(i,j) = ntm(j); stiffness(j,i) = ntm(j)
58 if( fcoeff /= 0.0d0 )
then
59 if( lagrange>0.0d0 .or. iter==1 )
then
64 stiffness(i,j) = stiffness(i,j) + tpenalty * dot_product(tt(1:3,i), tt(1:3,j))
67 stiffness(j,i) = stiffness(i,j)
74 tf_trial(1:3) = ctstate%tangentForce_trial(1:3)
75 length_tft = dsqrt(dot_product(tf_trial,tf_trial))
76 tangent(1:3) = tf_trial(1:3)/length_tft
79 q(1:(nnode+1)*3) = matmul(transpose(tm(1:3, 1:3*(nnode+1))), tangent)
82 dot_tn = dot_product(tangent, normal)
86 stiffness(i,j) = stiffness(i,j) + tpenalty * (-q(i)*q(j) + q(i)*ntm(j)*dot_tn)
88 stiffness(j,i) = stiffness(i,j)
94 stiffness(1:(nnode+1)*3,1:(nnode+1)*3) = (fcoeff*lagrange/length_tft) * stiffness(1:(nnode+1)*3,1:(nnode+1)*3)
97 stiffness(1:(nnode+1)*3, (nnode+1)*3+1) = stiffness(1:(nnode+1)*3, (nnode+1)*3+1) + fcoeff * q(1:(nnode+1)*3)
110 integer(kind=kint) :: nnode
111 integer(kind=kint) :: j
112 real(kind=kreal) :: fcoeff, tpenalty
113 real(kind=kreal) :: lagrange
114 real(kind=kreal) :: ndcoord(:), nddu(:)
115 real(kind=kreal) :: normal(3)
117 real(kind=kreal) :: tf_trial(3), length_tft, tangent(3), tf_final(3)
118 real(kind=kreal) :: ctnforce(:)
119 real(kind=kreal) :: cttforce(:)
124 ctstate%multiplier(1) = lagrange
126 nnode =
size(tsurf%nodes)
134 normal(1:3) = ctstate%direction(1:3)
137 ntm(1:(nnode+1)*3) = -matmul(transpose(tm(1:3, 1:3*(nnode+1))), normal)
139 do j = 1, (nnode+1)*3
140 ctnforce(j) = lagrange*ntm(j)
143 ctnforce(j) = dot_product(ntm(1:(nnode+1)*3),ndcoord(1:(nnode+1)*3))
145 if(fcoeff /= 0.0d0 .and. lagrange > 0.0d0)
then
148 ctstate%reldisp(1:3) = matmul(tt(1:3,1:3*(nnode+1)), nddu(1:3*(nnode+1)))
153 tf_final(1:3) = ctstate%tangentForce_trial(1:3)
155 tf_trial(1:3) = ctstate%tangentForce_trial(1:3)
156 length_tft = dsqrt(dot_product(tf_trial,tf_trial))
157 tangent(1:3) = tf_trial(1:3)/length_tft
158 tf_final(1:3) = fcoeff*dabs(lagrange)*tangent(1:3)
160 ctstate%tangentForce_final(1:3) = tf_final(1:3)
162 tf_final(1:3) = ctstate%tangentForce_final(1:3)
166 cttforce(1:(nnode+1)*3) = -matmul(transpose(tm(1:3, 1:3*(nnode+1))), tf_final)
176 integer(kind=kint) :: nnode
177 integer(kind=kint) :: idof
178 real(kind=kreal) :: stiffness(:,:)
180 integer(kind=kint) :: i, j
183 real(kind=kreal) :: e_idof(3)
185 nnode =
size(tsurf%nodes)
197 ntm(1:(nnode+1)*3) = matmul(transpose(tm(1:3, 1:3*(nnode+1))), e_idof)
200 do j = 1, (nnode+1)*3
201 stiffness(i,j) = ntm(j); stiffness(j,i) = ntm(j)
210 integer(kind=kint) :: nnode
211 integer(kind=kint) :: idof
212 real(kind=kreal) :: ndu(:)
213 real(kind=kreal) :: lagrange
214 real(kind=kreal) :: ctnforce(:)
215 real(kind=kreal) :: cttforce(:)
217 integer(kind=kint) :: j
218 real(kind=kreal) :: normal(3)
222 real(kind=kreal) :: e_idof(3), e_normal(3), e_tangent(3)
224 nnode =
size(tsurf%nodes)
232 normal(1:3) = ctstate%direction(1:3)
239 e_normal = -normal(idof) * normal
242 e_tangent = -e_idof - e_normal
245 ntm(1:(nnode+1)*3) = matmul(transpose(tm(1:3, 1:3*(nnode+1))), e_normal)
246 ttm(1:(nnode+1)*3) = matmul(transpose(tm(1:3, 1:3*(nnode+1))), e_tangent)
248 do j = 1, (nnode+1)*3
249 ctnforce(j) = lagrange*ntm(j)
250 cttforce(j) = lagrange*ttm(j)
253 ctnforce(j) = dot_product(ntm(1:(nnode+1)*3),ndu(1:(nnode+1)*3))
254 cttforce(j) = dot_product(ttm(1:(nnode+1)*3),ndu(1:(nnode+1)*3))
This module encapsulate the basic functions of all elements provide by this software.
This module manages surface elements in 3D It provides basic definition of surface elements (triangla...
integer(kind=kint), parameter l_max_surface_node
Structure to define surface group.