OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
snorm3t.F File Reference
#include "implicit_f.inc"

Go to the source code of this file.

Functions/Subroutines

subroutine snorm3t (nel, nft, jale, ixs, xgrid, wgrid, norm, wfac, surf)

Function/Subroutine Documentation

◆ snorm3t()

subroutine snorm3t ( integer, intent(in) nel,
integer, intent(in) nft,
integer, intent(in) jale,
integer, dimension(nixs, *), intent(in) ixs,
dimension(3, *), intent(in) xgrid,
dimension(*), intent(in) wgrid,
dimension(3, 6, nel), target norm,
dimension(3, 6, nel), intent(out) wfac,
dimension(6, nel), intent(out) surf )

Definition at line 33 of file snorm3t.F.

35 use element_mod , only : nixs
36C-----------------------------------------------
37C D e s c r i p t i o n
38C-----------------------------------------------
39C Computes normal vector to the faces of each element in a group
40C for a 3d solid element (hence Snorm3)
41C-----------------------------------------------
42C I m p l i c i t T y p e s
43C-----------------------------------------------
44#include "implicit_f.inc"
45C-----------------------------------------------
46C C o m m o n B l o c k s
47C-----------------------------------------------
48! NIXS
49C-----------------------------------------------
50C D u m m y A r g u m e n t s
51C-----------------------------------------------
52 INTEGER, INTENT(IN) :: NEL, NFT, JALE, IXS(NIXS, *)
53 my_real, INTENT(IN) ::
54 . xgrid(3, *), wgrid(*)
55 my_real, INTENT(OUT) :: wfac(3, 6, nel), surf(6, nel)
56 my_real, INTENT(OUT), TARGET :: norm(3, 6, nel)
57C-----------------------------------------------
58C L o c a l V a r i a b l e s
59C-----------------------------------------------
60 INTEGER :: II, NODE1, NODE2, NODE3, NODE4, KFACE
62 . x1(3), x2(3), x3(3), x4(3),
63 . w1(3), w2(3), w3(3), w4(3), xc(3), xf(3)
64 my_real, POINTER :: nx, ny, nz
65
66 DO ii = 1, nel
67C Nodes of the element locally stored in NODE* for memory access
68 node1 = ixs(2, ii + nft)
69 node2 = ixs(4, ii + nft)
70 node3 = ixs(7, ii + nft)
71 node4 = ixs(6, ii + nft)
72C Node coordinates
73 x1(1:3) = xgrid(1:3, node1)
74 x2(1:3) = xgrid(1:3, node2)
75 x3(1:3) = xgrid(1:3, node3)
76 x4(1:3) = xgrid(1:3, node4)
77
78 xc(1:3) = fourth * (x1(1:3) + x2(1:3) + x3(1:3) + x4(1:3))
79 IF (jale /= 0) THEN
80C Node grid velocities
81 w1(1:3) = wgrid(3 * (node1 - 1) + 1 : 3 * (node1 - 1) + 3)
82 w2(1:3) = wgrid(3 * (node2 - 1) + 1 : 3 * (node2 - 1) + 3)
83 w3(1:3) = wgrid(3 * (node3 - 1) + 1 : 3 * (node3 - 1) + 3)
84 w4(1:3) = wgrid(3 * (node4 - 1) + 1 : 3 * (node4 - 1) + 3)
85 ELSE
86! Euler
87 w1(1:3) = zero
88 w2(1:3) = zero
89 w3(1:3) = zero
90 w4(1:3) = zero
91 ENDIF
92C Face normal
93C Face 1 -> nodes 1 2 3
94 kface = 5
95 norm(1, kface, ii) = half * ((x3(2) - x1(2)) * (x2(3) - x1(3)) -
96 . (x3(3) - x1(3)) * (x2(2) - x1(2)))
97 norm(2, kface, ii) = half * ((x3(3) - x1(3)) * (x2(1) - x1(1)) -
98 . (x3(1) - x1(1)) * (x2(3) - x1(3)))
99 norm(3, kface, ii) = half * ((x3(1) - x1(1)) * (x2(2) - x1(2)) -
100 . (x3(2) - x1(2)) * (x2(1) - x1(1)))
101 nx => norm(1, kface, ii)
102 ny => norm(2, kface, ii)
103 nz => norm(3, kface, ii)
104 surf(kface, ii) = sqrt(nx * nx + ny * ny + nz * nz)
105 nx = -nx / surf(kface, ii)
106 ny = -ny / surf(kface, ii)
107 nz = -nz / surf(kface, ii)
108 xf(1:3) = third * (x1 + x2 + x3)
109 IF ((xf(1) - xc(1)) * nx + (xf(2) - xc(2)) * ny + (xf(3) - xc(3)) * nz < zero) THEN
110 CALL arret(2)
111 ENDIF
112C Face 2
113 kface = 6
114 norm(1, kface, ii) = half * ((x1(2) - x4(2)) * (x2(3) - x4(3)) -
115 . (x1(3) - x4(3)) * (x2(2) - x4(2)))
116 norm(2, kface, ii) = half * ((x1(3) - x4(3)) * (x2(1) - x4(1)) -
117 . (x1(1) - x4(1)) * (x2(3) - x4(3)))
118 norm(3, kface, ii) = half * ((x1(1) - x4(1)) * (x2(2) - x4(2)) -
119 . (x1(2) - x4(2)) * (x2(1) - x4(1)))
120 nx => norm(1, kface, ii)
121 ny => norm(2, kface, ii)
122 nz => norm(3, kface, ii)
123 surf(kface, ii) = sqrt(nx * nx + ny * ny + nz * nz)
124 nx = -nx / surf(kface, ii)
125 ny = -ny / surf(kface, ii)
126 nz = -nz / surf(kface, ii)
127 xf(1:3) = third * (x1 + x2 + x4)
128 IF ((xf(1) - xc(1)) * nx + (xf(2) - xc(2)) * ny + (xf(3) - xc(3)) * nz < zero) THEN
129 CALL arret(2)
130 ENDIF
131C Face 3
132 kface = 2
133 norm(1, kface, ii) = half * ((x2(2) - x4(2)) * (x3(3) - x4(3)) -
134 . (x2(3) - x4(3)) * (x3(2) - x4(2)))
135 norm(2, kface, ii) = half * ((x2(3) - x4(3)) * (x3(1) - x4(1)) -
136 . (x2(1) - x4(1)) * (x3(3) - x4(3)))
137 norm(3, kface, ii) = half * ((x2(1) - x4(1)) * (x3(2) - x4(2)) -
138 . (x2(2) - x4(2)) * (x3(1) - x4(1)))
139 nx => norm(1, kface, ii)
140 ny => norm(2, kface, ii)
141 nz => norm(3, kface, ii)
142 surf(kface, ii) = sqrt(nx * nx + ny * ny + nz * nz)
143 nx = -nx / surf(kface, ii)
144 ny = -ny / surf(kface, ii)
145 nz = -nz / surf(kface, ii)
146 xf(1:3) = third * (x4 + x2 + x3)
147 IF ((xf(1) - xc(1)) * nx + (xf(2) - xc(2)) * ny + (xf(3) - xc(3)) * nz < zero) THEN
148 CALL arret(2)
149 ENDIF
150C Face 4
151 kface = 4
152 norm(1, kface, ii) = half * ((x3(2) - x4(2)) * (x1(3) - x4(3)) -
153 . (x3(3) - x4(3)) * (x1(2) - x4(2)))
154 norm(2, kface, ii) = half * ((x3(3) - x4(3)) * (x1(1) - x4(1)) -
155 . (x3(1) - x4(1)) * (x1(3) - x4(3)))
156 norm(3, kface, ii) = half * ((x3(1) - x4(1)) * (x1(2) - x4(2)) -
157 . (x3(2) - x4(2)) * (x1(1) - x4(1)))
158 nx => norm(1, kface, ii)
159 ny => norm(2, kface, ii)
160 nz => norm(3, kface, ii)
161 surf(kface, ii) = sqrt(nx * nx + ny * ny + nz * nz)
162 nx = -nx / surf(kface, ii)
163 ny = -ny / surf(kface, ii)
164 nz = -nz / surf(kface, ii)
165 xf(1:3) = third * (x1 + x4 + x3)
166 IF ((xf(1) - xc(1)) * nx + (xf(2) - xc(2)) * ny + (xf(3) - xc(3)) * nz < zero) THEN
167 CALL arret(2)
168 ENDIF
169C Face grid velocity 1
170 wfac(1:3, 5, ii) = third * (w1(1:3) + w2(1:3) + w3(1:3))
171C Face grid velocity 2
172 wfac(1:3, 6, ii) = third * (w1(1:3) + w4(1:3) + w2(1:3))
173C Face grid velocity 3
174 wfac(1:3, 2, ii) = third * (w2(1:3) + w4(1:3) + w3(1:3))
175C Face grid velocity 4
176 wfac(1:3, 4, ii) = third * (w1(1:3) + w3(1:3) + w4(1:3))
177C Nullify quantities for KFACE = 1, 3
178 wfac(1:3, 1, ii) = zero
179 wfac(1:3, 3, ii) = zero
180 surf(1, ii) = zero
181 surf(3, ii) = zero
182 norm(1:3, 1, ii) = zero
183 norm(1:3, 3, ii) = zero
184 ENDDO
#define my_real
Definition cppsort.cpp:32
norm(diag(diag(diag(inv(mat))) -id.SOL), 2) % destroy mumps instance id.JOB
subroutine arret(nn)
Definition arret.F:86