54 adlmag,mdload,ndload,rex,nodes,numnp,&
86 IMPLICIT DOUBLE PRECISION (
a-h, o-
z)
91 INTEGER,
DIMENSION(1:8,1:NumNp) :: nodes
92 REAL*8,
DIMENSION(1:3*NumNp) :: rex
93 REAL*8,
DIMENSION(1:3,1:NumNp) :: coords
94 INTEGER,
DIMENSION(1:NumElVol) :: mapsfelvolel
95 dimension jdltyp(mdload,1:2),adlmag(mdload)
101 REAL*8,
DIMENSION(1:3) :: veca, vecb, outwd_surface_normal, &
102 half_normal_veca, half_normal_vecb
106 INTEGER :: nd1, nd2, nd3, nd4, nd5, nd6, nd7, nd8
108 REAL*8,
DIMENSION(1:24) :: dlvec
113 DATA eigth /0.125000000000000/
121 idvolel = mapsfelvolel(
i)
122 ltype = jdltyp(iload,2)
124 nd1 = nodes(1,idvolel)
125 nd2 = nodes(2,idvolel)
126 nd3 = nodes(3,idvolel)
127 nd4 = nodes(4,idvolel)
128 nd5 = nodes(5,idvolel)
129 nd6 = nodes(6,idvolel)
130 nd7 = nodes(7,idvolel)
131 nd8 = nodes(8,idvolel)
143 veca(1:3) = coords(1:3,nd4) - coords(1:3,nd1)
144 vecb(1:3) = coords(1:3,nd2) - coords(1:3,nd1)
146 half_normal_veca(1) = veca(2)*vecb(3) - vecb(2)*veca(3)
147 half_normal_veca(2) = veca(3)*vecb(1) - vecb(3)*veca(1)
148 half_normal_veca(3) = veca(1)*vecb(2) - vecb(1)*veca(2)
150 veca(1:3) = coords(1:3,nd2) - coords(1:3,nd3)
151 vecb(1:3) = coords(1:3,nd4) - coords(1:3,nd3)
153 half_normal_vecb(1) = veca(2)*vecb(3) - vecb(2)*veca(3)
154 half_normal_vecb(2) = veca(3)*vecb(1) - vecb(3)*veca(1)
155 half_normal_vecb(3) = veca(1)*vecb(2) - vecb(1)*veca(2)
157 outwd_surface_normal = half_normal_veca + half_normal_vecb
159 pmag = -eigth * adlmag(iload)
161 dlvec(1:3) = pmag * outwd_surface_normal(1:3)
162 dlvec(4:6) = pmag * outwd_surface_normal(1:3)
163 dlvec(7:9) = pmag * outwd_surface_normal(1:3)
164 dlvec(10:12) = pmag * outwd_surface_normal(1:3)
168 veca(1:3) = coords(1:3,nd6) - coords(1:3,nd5)
169 vecb(1:3) = coords(1:3,nd8) - coords(1:3,nd5)
171 half_normal_veca(1) = veca(2)*vecb(3) - vecb(2)*veca(3)
172 half_normal_veca(2) = veca(3)*vecb(1) - vecb(3)*veca(1)
173 half_normal_veca(3) = veca(1)*vecb(2) - vecb(1)*veca(2)
175 veca(1:3) = coords(1:3,nd8) - coords(1:3,nd7)
176 vecb(1:3) = coords(1:3,nd6) - coords(1:3,nd7)
178 half_normal_vecb(1) = veca(2)*vecb(3) - vecb(2)*veca(3)
179 half_normal_vecb(2) = veca(3)*vecb(1) - vecb(3)*veca(1)
180 half_normal_vecb(3) = veca(1)*vecb(2) - vecb(1)*veca(2)
182 outwd_surface_normal = half_normal_veca + half_normal_vecb
184 pmag = -eigth * adlmag(iload)
186 dlvec(13:15) = pmag * outwd_surface_normal(1:3)
187 dlvec(16:18) = pmag * outwd_surface_normal(1:3)
188 dlvec(19:21) = pmag * outwd_surface_normal(1:3)
189 dlvec(22:24) = pmag * outwd_surface_normal(1:3)
193 veca(1:3) = coords(1:3,nd2) - coords(1:3,nd1)
194 vecb(1:3) = coords(1:3,nd5) - coords(1:3,nd1)
196 half_normal_veca(1) = veca(2)*vecb(3) - vecb(2)*veca(3)
197 half_normal_veca(2) = veca(3)*vecb(1) - vecb(3)*veca(1)
198 half_normal_veca(3) = veca(1)*vecb(2) - vecb(1)*veca(2)
200 veca(1:3) = coords(1:3,nd5) - coords(1:3,nd6)
201 vecb(1:3) = coords(1:3,nd2) - coords(1:3,nd6)
203 half_normal_vecb(1) = veca(2)*vecb(3) - vecb(2)*veca(3)
204 half_normal_vecb(2) = veca(3)*vecb(1) - vecb(3)*veca(1)
205 half_normal_vecb(3) = veca(1)*vecb(2) - vecb(1)*veca(2)
207 outwd_surface_normal = half_normal_veca + half_normal_vecb
209 pmag = -eigth * adlmag(iload)
211 dlvec(1:3) = pmag * outwd_surface_normal(1:3)
212 dlvec(4:6) = pmag * outwd_surface_normal(1:3)
213 dlvec(13:15) = pmag * outwd_surface_normal(1:3)
214 dlvec(16:18) = pmag * outwd_surface_normal(1:3)
218 veca(1:3) = coords(1:3,nd3) - coords(1:3,nd2)
219 vecb(1:3) = coords(1:3,nd6) - coords(1:3,nd2)
221 half_normal_veca(1) = veca(2)*vecb(3) - vecb(2)*veca(3)
222 half_normal_veca(2) = veca(3)*vecb(1) - vecb(3)*veca(1)
223 half_normal_veca(3) = veca(1)*vecb(2) - vecb(1)*veca(2)
225 veca(1:3) = coords(1:3,nd6) - coords(1:3,nd7)
226 vecb(1:3) = coords(1:3,nd3) - coords(1:3,nd7)
228 half_normal_vecb(1) = veca(2)*vecb(3) - vecb(2)*veca(3)
229 half_normal_vecb(2) = veca(3)*vecb(1) - vecb(3)*veca(1)
230 half_normal_vecb(3) = veca(1)*vecb(2) - vecb(1)*veca(2)
232 outwd_surface_normal = half_normal_veca + half_normal_vecb
233 pmag = -eigth * adlmag(iload)
235 dlvec(4:6) = pmag * outwd_surface_normal(1:3)
236 dlvec(7:9) = pmag * outwd_surface_normal(1:3)
237 dlvec(16:18) = pmag * outwd_surface_normal(1:3)
238 dlvec(19:21) = pmag * outwd_surface_normal(1:3)
243 veca(1:3) = coords(1:3,nd4) - coords(1:3,nd3)
244 vecb(1:3) = coords(1:3,nd7) - coords(1:3,nd3)
246 half_normal_veca(1) = veca(2)*vecb(3) - vecb(2)*veca(3)
247 half_normal_veca(2) = veca(3)*vecb(1) - vecb(3)*veca(1)
248 half_normal_veca(3) = veca(1)*vecb(2) - vecb(1)*veca(2)
250 veca(1:3) = coords(1:3,nd7) - coords(1:3,nd8)
251 vecb(1:3) = coords(1:3,nd4) - coords(1:3,nd8)
253 half_normal_vecb(1) = veca(2)*vecb(3) - vecb(2)*veca(3)
254 half_normal_vecb(2) = veca(3)*vecb(1) - vecb(3)*veca(1)
255 half_normal_vecb(3) = veca(1)*vecb(2) - vecb(1)*veca(2)
257 outwd_surface_normal = half_normal_veca + half_normal_vecb
258 pmag = -eigth * adlmag(iload)
260 dlvec(7:9) = pmag * outwd_surface_normal(1:3)
261 dlvec(10:12) = pmag * outwd_surface_normal(1:3)
262 dlvec(19:21) = pmag * outwd_surface_normal(1:3)
263 dlvec(22:24) = pmag * outwd_surface_normal(1:3)
267 veca(1:3) = coords(1:3,nd5) - coords(1:3,nd1)
268 vecb(1:3) = coords(1:3,nd4) - coords(1:3,nd1)
270 half_normal_veca(1) = veca(2)*vecb(3) - vecb(2)*veca(3)
271 half_normal_veca(2) = veca(3)*vecb(1) - vecb(3)*veca(1)
272 half_normal_veca(3) = veca(1)*vecb(2) - vecb(1)*veca(2)
274 veca(1:3) = coords(1:3,nd4) - coords(1:3,nd8)
275 vecb(1:3) = coords(1:3,nd5) - coords(1:3,nd8)
277 half_normal_vecb(1) = veca(2)*vecb(3) - vecb(2)*veca(3)
278 half_normal_vecb(2) = veca(3)*vecb(1) - vecb(3)*veca(1)
279 half_normal_vecb(3) = veca(1)*vecb(2) - vecb(1)*veca(2)
281 outwd_surface_normal = half_normal_veca + half_normal_vecb
283 pmag = -eigth * adlmag(iload)
285 dlvec(1:3) = pmag * outwd_surface_normal(1:3)
286 dlvec(10:12) = pmag * outwd_surface_normal(1:3)
287 dlvec(13:15) = pmag * outwd_surface_normal(1:3)
288 dlvec(22:24) = pmag * outwd_surface_normal(1:3)
302 nd = nodes(
i,idvolel)
303 rex(3*nd-2) = rex(3*nd-2) + dlvec(icnt)
304 rex(3*nd-1) = rex(3*nd-1) + dlvec(icnt+1)
305 rex(3*nd ) = rex(3*nd ) + dlvec(icnt+2)
311 1100
FORMAT (/,2
x,
'>>> Non-uniform surface tractions are not', &
312 /,2
x,
' supported (i.e. UnNU). Aborting !')
subroutine get_external_loads(coords, jdltyp, adlmag, mdload, ndload, Rex, nodes, NumNp, MapSElVolEl, NumElVol)
int dimension() const
Get the dimension of the mesh.
void int int int REAL REAL REAL * z