OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
alew.F
Go to the documentation of this file.
1Copyright> OpenRadioss
2Copyright> Copyright (C) 1986-2025 Altair Engineering Inc.
3Copyright>
4Copyright> This program is free software: you can redistribute it and/or modify
5Copyright> it under the terms of the GNU Affero General Public License as published by
6Copyright> the Free Software Foundation, either version 3 of the License, or
7Copyright> (at your option) any later version.
8Copyright>
9Copyright> This program is distributed in the hope that it will be useful,
10Copyright> but WITHOUT ANY WARRANTY; without even the implied warranty of
11Copyright> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12Copyright> GNU Affero General Public License for more details.
13Copyright>
14Copyright> You should have received a copy of the GNU Affero General Public License
15Copyright> along with this program. If not, see <https://www.gnu.org/licenses/>.
16Copyright>
17Copyright>
18Copyright> Commercial Alternative: Altair Radioss Software
19Copyright>
20Copyright> As an alternative to this open-source version, Altair also offers Altair Radioss
21Copyright> software under a commercial license. Contact Altair to discuss further if the
22Copyright> commercial version may interest you: https://www.altair.com/radioss/.
23!||====================================================================
24!|| alew ../engine/source/ale/grid/alew.F
25!||--- called by ------------------------------------------------------
26!|| alewdx ../engine/source/ale/grid/alewdx.F
27!||--- calls -----------------------------------------------------
28!|| my_barrier ../engine/source/system/machine.F
29!|| spmd_wvois ../engine/source/mpi/fluid/spmd_cfd.F
30!||--- uses -----------------------------------------------------
31!|| ale_connectivity_mod ../common_source/modules/ale/ale_connectivity_mod.F
32!|| ale_mod ../common_source/modules/ale/ale_mod.F
33!||====================================================================
34 SUBROUTINE alew(
35 1 X ,D ,V ,W ,WA ,
36 2 ALE_NN_CONNECT ,NALE ,NODFT ,NODLT ,
37 3 NBRCVOIS ,NBSDVOIS,LNRCVOIS ,LNSDVOIS )
38C-----------------------------------------------
39C M o d u l e s
40C-----------------------------------------------
42 USE ale_mod
43C-----------------------------------------------
44C D e s c r i p t i o n
45C-----------------------------------------------
46C Compute Grid for /ALE/GRID/DONEA
47C
48C X,D,V are allocated to SX,SD,DV=3*(NUMNOD_L+NUMVVOIS_L)
49C in grid subroutine it may needed to access nodes which
50C are connected to a remote elem. They are sored in X(1:3,NUMNOD+1:)
51C Consequently X is defined here X(3,SX/3) instead of X(3,NUMNOD) as usually
52C-----------------------------------------------
53C I m p l i c i t T y p e s
54C-----------------------------------------------
55#include "implicit_f.inc"
56C-----------------------------------------------
57C C o m m o n B l o c k s
58C-----------------------------------------------
59#include "com01_c.inc"
60#include "com04_c.inc"
61#include "com08_c.inc"
62#include "tabsiz_c.inc"
63C-----------------------------------------------
64C D u m m y A r g u m e n t s
65C-----------------------------------------------
66 INTEGER NALE(*), NODFT, NODLT,
67 . NBRCVOIS(*),NBSDVOIS(*),
68 . LNRCVOIS(*),LNSDVOIS(*)
69 my_real x(3,sx/3), d(3,sd/3), v(3,sv/3), w(3,sw/3), wa(3,*)
70 TYPE(t_connectivity), INTENT(IN) :: ALE_NN_CONNECT
71C-----------------------------------------------
72C L o c a l V a r i a b l e s
73C-----------------------------------------------
74 INTEGER N, I, NCI, K, J, LENCOM, IAD1, IAD2
75 my_real LIJ, XLAGR, FIX, FIY, FIZ, SLI, WIX, WIY, WIZ, FAC,LIJ2,LIJSQR
76C-----------------------------------------------
77C S o u r c e L i n e s
78C-----------------------------------------------
79
80 DO n = nodft,nodlt
81 wa(1,n)=w(1,n)
82 wa(2,n)=w(2,n)
83 wa(3,n)=w(3,n)
84 ENDDO
85
86 CALL my_barrier() !adjacent WA()
87C
88C SPMD EXCHANGE : X, D, WA (X is already OK if INCOMP=0)
89C
90 IF(nspmd > 1)THEN
91!$OMP SINGLE
92 lencom=nbrcvois(nspmd+1)+nbsdvois(nspmd+1)
93 CALL spmd_wvois(x,d,wa,nbrcvois,nbsdvois,lnrcvois,lnsdvois,lencom)
94!$OMP END SINGLE
95
96 END IF
97C
98 DO n = nodft,nodlt
99 xlagr=min(1,iabs(iabs(nale(n))-2))
100 w(1,n)=v(1,n)*xlagr
101 w(2,n)=v(2,n)*xlagr
102 w(3,n)=v(3,n)*xlagr
103 ENDDO
104C
105 IF(ale%GRID%ALPHA == zero) THEN
106 DO i = nodft,nodlt
107 IF(nale(i) /= 0) THEN
108 nci=0
109 wix=zero
110 wiy=zero
111 wiz=zero
112 iad1 = ale_nn_connect%IAD_CONNECT(i)
113 iad2 = ale_nn_connect%IAD_CONNECT(i + 1) - 1
114 DO k = iad1, iad2
115 j = ale_nn_connect%CONNECTED(k)
116 IF (j > 0) THEN
117 nci = nci + 1
118 wix = wix + wa(1,j)
119 wiy = wiy + wa(2,j)
120 wiz = wiz + wa(3,j)
121 ENDIF
122 ENDDO
123C
124 w(1,i) = wix / nci
125 w(2,i) = wiy / nci
126 w(3,i) = wiz / nci
127 ENDIF
128 ENDDO
129C
130 ELSE
131 DO i = nodft,nodlt
132 IF(nale(i) /= 0) THEN
133 nci=0
134 fix=zero
135 fiy=zero
136 fiz=zero
137 sli=zero
138 wix=zero
139 wiy=zero
140 wiz=zero
141 iad1 = ale_nn_connect%IAD_CONNECT(i)
142 iad2 = ale_nn_connect%IAD_CONNECT(i + 1) - 1
143 DO k = iad1, iad2
144 j = ale_nn_connect%CONNECTED(k)
145 IF (j > 0) THEN
146 nci = nci + 1
147 lij2= (x(1,j)-x(1,i))*(x(1,j)-x(1,i))+ (x(2,j)-x(2,i))*(x(2,j)-x(2,i))+ (x(3,j)-x(3,i))*(x(3,j)-x(3,i))
148 lijsqr = sqrt(lij2)
149 lij=max(em20,lijsqr)
150 IF(lij < ep20) THEN
151 sli=sli+lij
152 fix=fix+(d(1,j)-d(1,i))/lij
153 fiy=fiy+(d(2,j)-d(2,i))/lij
154 fiz=fiz+(d(3,j)-d(3,i))/lij
155 ENDIF
156 wix=wix+wa(1,j)
157 wiy=wiy+wa(2,j)
158 wiz=wiz+wa(3,j)
159 ENDIF
160 ENDDO
161C
162 fac=ale%GRID%ALPHA*sli/(nci*nci*dt2)
163 w(1,i) = wix/nci + fac*fix
164 w(2,i) = wiy/nci + fac*fiy
165 w(3,i) = wiz/nci + fac*fiz
166C
167 ENDIF
168 ENDDO
169 ENDIF
170C
171 IF(ale%GRID%GAMMA < eighty19)THEN
172 DO i = nodft,nodlt
173 IF(nale(i) /= 0) THEN
174 IF(v(1,i) /= zero) w(1,i)=ale%GRID%VGX*v(1,i)*max((one-ale%GRID%GAMMA), min((one+ale%GRID%GAMMA),w(1,i)/v(1,i)))
175 IF(v(2,i) /= zero) w(2,i)=ale%GRID%VGY*v(2,i)*max((one-ale%GRID%GAMMA), min((one+ale%GRID%GAMMA),w(2,i)/v(2,i)))
176 IF(v(3,i) /= zero) w(3,i)=ale%GRID%VGZ*v(3,i)*max((one-ale%GRID%GAMMA), min((one+ale%GRID%GAMMA),w(3,i)/v(3,i)))
177 ENDIF
178 ENDDO
179 ENDIF
180C
181 RETURN
182 END
subroutine alew(x, d, v, w, wa, ale_nn_connect, nale, nodft, nodlt, nbrcvois, nbsdvois, lnrcvois, lnsdvois)
Definition alew.F:38
#define my_real
Definition cppsort.cpp:32
#define min(a, b)
Definition macros.h:20
#define max(a, b)
Definition macros.h:21
type(ale_) ale
Definition ale_mod.F:249
subroutine spmd_wvois(x, d, w, nbrcvois, nbsdvois, lnrcvois, lnsdvois, lencom)
Definition spmd_cfd.F:141
subroutine my_barrier
Definition machine.F:31