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

Go to the source code of this file.

Functions/Subroutines

subroutine sorthdir3 (rx, ry, rz, sx, sy, sz, tx, ty, tz, e1x, e2x, e3x, e1y, e2y, e3y, e1z, e2z, e3z, gama0, gama, nel, irep)

Function/Subroutine Documentation

◆ sorthdir3()

subroutine sorthdir3 ( intent(in) rx,
intent(in) ry,
intent(in) rz,
intent(in) sx,
intent(in) sy,
intent(in) sz,
intent(in) tx,
intent(in) ty,
intent(in) tz,
intent(in) e1x,
intent(in) e2x,
intent(in) e3x,
intent(in) e1y,
intent(in) e2y,
intent(in) e3y,
intent(in) e1z,
intent(in) e2z,
intent(in) e3z,
intent(in) gama0,
intent(out) gama,
integer, intent(in) nel,
integer, intent(in) irep )

Definition at line 35 of file sorthdir3.F.

42C-----------------------------------------------
43C I m p l i c i t T y p e s
44C-----------------------------------------------
45#include "implicit_f.inc"
46C-----------------------------------------------
47C G l o b a l P a r a m e t e r s
48C-----------------------------------------------
49#include "mvsiz_p.inc"
50C-----------------------------------------------
51C D u m m y A r g u m e n t s
52C-----------------------------------------------
53 INTEGER, INTENT(IN) :: NEL
54 INTEGER, INTENT(IN) :: IREP
55 my_real, DIMENSION(NEL), INTENT(IN) ::
56 . rx, ry, rz, sx, sy, sz, tx, ty, tz,
57 . e1x, e1y, e1z, e2x, e2y, e2z, e3x, e3y, e3z
58 my_real,
59 . DIMENSION(NEL,6), INTENT(IN) :: gama0
60 my_real,
61 . DIMENSION(MVSIZ,6), INTENT(OUT) :: gama
62C-----------------------------------------------
63C C o m m o n B l o c k s
64C-----------------------------------------------
65C-----------------------------------------------
66C L o c a l V a r i a b l e s
67C-----------------------------------------------
68 INTEGER I
69C REAL
71 . ux,uy,uz,vx,vy,vz,wx,wy,wz,d1,d2,d3,gx,gy,gz,suma,s2,s3
72C=======================================================================
73 IF (irep == 0) THEN
74 DO i=1,nel
75 gama(i,1) = gama0(i,1)
76 gama(i,2) = gama0(i,2)
77 gama(i,3) = gama0(i,3)
78 gama(i,4) = gama0(i,4)
79 gama(i,5) = gama0(i,5)
80 gama(i,6) = gama0(i,6)
81 ENDDO
82 ELSEIF (irep > 0) THEN
83ctmp ELSEIF (IREP == 1) THEN
84C dir 1 = const
85 DO i=1,nel
86C Dir 1
87
88 d1 = gama0(i,1)*rx(i) + gama0(i,2)*sx(i) + gama0(i,3)*tx(i)
89 d2 = gama0(i,1)*ry(i) + gama0(i,2)*sy(i) + gama0(i,3)*ty(i)
90 d3 = gama0(i,1)*rz(i) + gama0(i,2)*sz(i) + gama0(i,3)*tz(i) !DIRECTION1 DS GLOBAL
91 ! ISO -> ELEM
92 ux = d1*e1x(i)+ d2*e1y(i) + d3*e1z(i)
93 uy = d1*e2x(i)+ d2*e2y(i) + d3*e2z(i)
94 uz = d1*e3x(i)+ d2*e3y(i) + d3*e3z(i) ! COORD DU ORTHO DS ELEME
95 suma = one/sqrt(ux*ux + uy*uy + uz*uz)
96 gama(i,1) = ux*suma
97 gama(i,2) = uy*suma
98 gama(i,3) = uz*suma
99C Dir 2
100 d1 = gama0(i,4)*rx(i) + gama0(i,5)*sx(i) + gama0(i,6)*tx(i)
101 d2 = gama0(i,4)*ry(i) + gama0(i,5)*sy(i) + gama0(i,6)*ty(i)
102 d3 = gama0(i,4)*rz(i) + gama0(i,5)*sz(i) + gama0(i,6)*tz(i)
103 vx = d1*e1x(i)+ d2*e1y(i) + d3*e1z(i)
104 vy = d1*e2x(i)+ d2*e2y(i) + d3*e2z(i)
105 vz = d1*e3x(i)+ d2*e3y(i) + d3*e3z(i)
106 suma = one/sqrt(vx*vx + vy*vy + vz*vz)
107 vx = vx*suma
108 vy = vy*suma
109 vz = vz*suma
110C Orthogonalisation:
111C Dir1' = Dir1, Dir3 = Dir1 x Dir2, Dir2' = Dir3 x Dir1
112C ON VEUT LA 3EME DIRECTION DE GAMA (ELEM -> ORTHO)
113 d1 = gama(i,2) * vz - gama(i,3) * vy
114 d2 = gama(i,3) * vx - gama(i,1) * vz
115 d3 = gama(i,1) * vy - gama(i,2) * vx
116 gama(i,4) = d2 * gama(i,3) - d3 * gama(i,2)
117 gama(i,5) = d3 * gama(i,1) - d1 * gama(i,3)
118 gama(i,6) = d1 * gama(i,2) - d2 * gama(i,1)
119
120 ENDDO
121c ELSEIF (IREP == 2) THEN
122C Plan (dir1,dir2) = const
123c DO I=1,NEL
124C Dir 1 - normale au plan
125c D1 = GAMA0(I,1)*RX(I) + GAMA0(I,2)*SX(I) + GAMA0(I,3)*TX(I)
126c D2 = GAMA0(I,1)*RY(I) + GAMA0(I,2)*SY(I) + GAMA0(I,3)*TY(I)
127c D3 = GAMA0(I,1)*RZ(I) + GAMA0(I,2)*SZ(I) + GAMA0(I,3)*TZ(I)
128c UX = D1*E1X(I)+ D2*E1Y(I) + D3*E1Z(I)
129c UY = D1*E2X(I)+ D2*E2Y(I) + D3*E2Z(I)
130c UZ = D1*E3X(I)+ D2*E3Y(I) + D3*E3Z(I)
131c SUM= ONE/SQRT(UX*UX + UY*UY + UZ*UZ)
132c UX = UX*S2
133c UY = UY*S2
134c UZ = UZ*S2
135C Dir 2
136c D1 = GAMA0(I,4)*RX(I) + GAMA0(I,5)*SX(I) + GAMA0(I,6)*TX(I)
137c D2 = GAMA0(I,4)*RY(I) + GAMA0(I,5)*SY(I) + GAMA0(I,6)*TY(I)
138c D3 = GAMA0(I,4)*RZ(I) + GAMA0(I,5)*SZ(I) + GAMA0(I,6)*TZ(I)
139c VX = D1*E1X(I)+ D2*E1Y(I) + D3*E1Z(I)
140c VY = D1*E2X(I)+ D2*E2Y(I) + D3*E2Z(I)
141c VZ = D1*E3X(I)+ D2*E3Y(I) + D3*E3Z(I)
142c S2 = ONE/SQRT(VX*VX + VY*VY + VZ*VZ)
143c VX = VX*S2
144c VY = VY*S2
145c VZ = VZ*S2
146C Dir 3
147c UX = VY*WZ - VZ*WY
148c UY = VZ*WX - VX*WZ
149c UZ = VX*WY - VY*WX
150c
151c D1 = GAMA0(I,7)*RX(I) + GAMA0(I,8)*SX(I) + GAMA0(I,9)*TX(I)
152c D2 = GAMA0(I,7)*RY(I) + GAMA0(I,8)*SY(I) + GAMA0(I,9)*TY(I)
153c D3 = GAMA0(I,7)*RZ(I) + GAMA0(I,8)*SZ(I) + GAMA0(I,9)*TZ(I)
154c WX = D1*E1X(I)+ D2*E1Y(I) + D3*E1Z(I)
155c WY = D1*E2X(I)+ D2*E2Y(I) + D3*E2Z(I)
156c WZ = D1*E3X(I)+ D2*E3Y(I) + D3*E3Z(I)
157c S3 = ONE/SQRT(WX*WX + WY*WY + WZ*WZ)
158c WX = WX*S3
159c WY = WY*S3
160c WZ = WZ*S3
161C Dir 1 = Dir2 x Dir3
162c UX = VY*WZ - VZ*WY
163c UY = VZ*WX - VX*WZ
164c UZ = VX*WY - VY*WX
165C Orthogonalisation de la base dir2/dir3 :
166C Dir2'/Dir3' = dir2/dir3 orthogonalize symmetriquement, Dir1=Dir3xDir2
167c SUMA = SQRT(S2/S3)
168c D1 = VX + (WY*UZ-WZ*UY)*SUMA
169c D2 = VY + (WZ*UX-WX*UZ)*SUMA
170c D3 = VZ + (WX*UY-WY*UX)*SUMA
171c SUMA = ONE/SQRT(D1*D1 + D2*D2 + D3*D3)
172c SUMA = ONE / MAX(SQRT(SUMA),EM20)
173c GAMA(1,I) = UX
174c GAMA(2,I) = UY
175c GAMA(3,I) = UZ
176c GAMA(4,I) = D1 * SUMA
177c GAMA(5,I) = D2 * SUMA
178c GAMA(6,I) = D3 * SUMA
179c ENDDO
180 ENDIF
181C-------------
182 RETURN
#define my_real
Definition cppsort.cpp:32