OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
i25main_norm.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!|| i25main_norm ../engine/source/interfaces/int25/i25main_norm.F
25!||--- called by ------------------------------------------------------
26!|| inttri ../engine/source/interfaces/intsort/inttri.F
27!||--- calls -----------------------------------------------------
28!|| i25assnp ../engine/source/interfaces/int25/i25norm.F
29!|| i25normp ../engine/source/interfaces/int25/i25norm.F
30!|| i25tagn ../engine/source/interfaces/int25/i25norm.F
31!|| my_barrier ../engine/source/system/machine.F
32!||--- uses -----------------------------------------------------
33!|| intbufdef_mod ../common_source/modules/interfaces/intbufdef_mod.F90
34!|| mpi_commod ../engine/share/modules/mpi_comm_mod.F
35!|| sensor_mod ../common_source/modules/sensor_mod.F90
36!||====================================================================
37 SUBROUTINE i25main_norm(
38 1 INTLIST25,IPARI ,INTBUF_TAB ,JTASK ,X ,
39 2 ITAB ,NSENSOR ,SENSOR_TAB,IAD_FRNOR ,FR_NOR ,
40 3 IAD_FREDG,FR_EDG,IAD_ELEM,FR_ELEM,FSKYN25,
41 4 ADDCSRECT,PROCNOR)
42C=======================================================================
43C-----------------------------------------------
44C M o d u l e s
45C-----------------------------------------------
46 USE mpi_commod
47 USE intbufdef_mod
48 USE sensor_mod
49C-----------------------------------------------
50C I m p l i c i t T y p e s
51C-----------------------------------------------
52#include "implicit_f.inc"
53C-----------------------------------------------
54C C o m m o n B l o c k s
55C-----------------------------------------------
56#include "com01_c.inc"
57#include "com04_c.inc"
58#include "com08_c.inc"
59#include "param_c.inc"
60#include "task_c.inc"
61#include "spmd_c.inc"
62C-----------------------------------------------
63C D u m m y A r g u m e n t s
64C-----------------------------------------------
65 INTEGER ,INTENT(IN) :: JTASK,NSENSOR
66 INTEGER IPARI(NPARI,NINTER), INTLIST25(*), ITAB(*),
67 . IAD_FRNOR(NINTER25,*), FR_NOR(*), IAD_FREDG(NINTER25,*), FR_EDG(*),
68 . IAD_ELEM(2,*), FR_ELEM(*),ADDCSRECT(*), PROCNOR(*)
69C REAL
70 my_real :: x(3,*)
71 TYPE(intbuf_struct_),DIMENSION(NINTER) :: INTBUF_TAB
72 TYPE(MPI_COMM_NOR_STRUCT) , DIMENSION(NINTER25) :: BUFFERS
73 REAL*4 FSKYN25(3,*)
74 TYPE (SENSOR_STR_) ,DIMENSION(NSENSOR) ,INTENT(IN) :: SENSOR_TAB
75C-----------------------------------------------
76C L o c a l V a r i a b l e s
77C-----------------------------------------------
78 INTEGER N, NTY, ISENS, SIZE, NI25, NADMSR, IEDGE, NADMSRF6, NADMSRL6,
79 . NRTM, NSN, NSNR, NIN, NRTM_SH, NRTM0, FLAGREMN ,NCSHIFT ,ISHIFT,
80 . SIZE_NODNOR_E2S,I,J,NOD,CC,SOL_EDGE
81 INTEGER :: NEDGE
82C REAL
84 . ts, startt, stopt
85 real*4 rzero
86C-----------------------------------------------
87 rzero = 0.
88C
89C Calcul // des normales
90C
91 IF(jtask==1) THEN
92 DO i=1,ninter25
93 n = intlist25(i)
94 nrtm = ipari(4,n)
95 ALLOCATE(intbuf_tab(n)%TAGNOD(numnod), intbuf_tab(n)%WNOD_NORMAL(3,4,nrtm))
96 ALLOCATE(intbuf_tab(n)%TAGE(nrtm))
97 ENDDO
98 END IF
99C
100 CALL my_barrier()
101C
102 ncshift = 1
103 ishift = 0
104 DO ni25=1,ninter25
105
106 n = intlist25(ni25)
107C
108 startt=intbuf_tab(n)%VARIABLES(3)
109 stopt =intbuf_tab(n)%VARIABLES(11)
110 IF(startt>tt) cycle
111 IF(tt>stopt) cycle
112C
113 isens = ipari(64,n)
114 IF (isens > 0) THEN ! Interface activated by sensor
115 ts = sensor_tab(isens)%TSTART
116 ELSE
117 ts = tt
118 ENDIF
119 IF(tt<ts) cycle
120C
121 IF(jtask == 1) THEN
122
123 size_nodnor_e2s = 0
124
125 iedge = ipari(58,n)
126 sol_edge =0
127 IF(iedge /= 0) sol_edge =iedge/10 ! solids
128
129 IF(sol_edge/=0)THEN
130 DO i = 1, nspmd
131 IF(iad_frnor(ni25,i+1)-iad_frnor(ni25,i)>0) THEN
132 DO j=iad_frnor(ni25,i),iad_frnor(ni25,i+1)-1
133 nod = ishift + fr_nor(j)
134 DO cc = addcsrect(nod),addcsrect(nod+1)-1
135 IF(procnor(cc)==i) THEN
136 size_nodnor_e2s = size_nodnor_e2s + 6
137 ENDIF
138 END DO
139 END DO
140 ENDIF
141 ENDDO
142 ENDIF
143
144 ALLOCATE(buffers(ni25)%SEND_BUF( 3*(iad_fredg(ni25,nspmd+1)-iad_fredg(ni25,1))
145 . +2*3*(iad_frnor(ni25,nspmd+1)-iad_frnor(ni25,1))
146 . + (iad_frnor(ni25,nspmd+1)-iad_frnor(ni25,1))
147 . + size_nodnor_e2s))
148 ALLOCATE(buffers(ni25)%RECV_BUF( 3*(iad_fredg(ni25,nspmd+1)-iad_fredg(ni25,1))
149 . +2*3*(iad_frnor(ni25,nspmd+1)-iad_frnor(ni25,1))
150 . + (iad_frnor(ni25,nspmd+1)-iad_frnor(ni25,1))
151 . + size_nodnor_e2s))
152
153 ALLOCATE(buffers(ni25)%ISINDEX(nspmd))
154 ALLOCATE(buffers(ni25)%IRINDEX(nspmd))
155 ALLOCATE(buffers(ni25)%SEND_RQ(nspmd))
156 ALLOCATE(buffers(ni25)%RECV_RQ(nspmd))
157 ALLOCATE(buffers(ni25)%IAD_RECV(nspmd+1))
158 ALLOCATE(buffers(ni25)%IAD_SEND(nspmd+1))
159 ENDIF
160C
161 nadmsr = ipari(67,n)
162 nrtm = ipari(4,n)
163 nsn = ipari(5,n)
164 nsnr = ipari(24,n)
165
166
167
168 nrtm_sh=ipari(42,n)
169 nrtm0 =nrtm-nrtm_sh
170 flagremn = ipari(63,n)
171
172 iedge = ipari(58,n)
173 nedge = ipari(68,n) ! Updated in i25normp
174 sol_edge =0
175 IF(iedge /= 0) sol_edge =iedge/10 ! solids
176
177 CALL i25tagn(ni25 ,n ,nrtm ,nsn ,nsnr ,
178 2 jtask ,iad_frnor ,fr_nor ,intbuf_tab(n)%IRTLM,intbuf_tab(n)%MSEGTYP24 ,
179 3 intbuf_tab(n)%I_STOK(2), intbuf_tab(n)%I_STOK(3), intbuf_tab(n)%CAND_OPT_E,
180 . intbuf_tab(n)%STFNS, intbuf_tab(n)%ACTNOR,intbuf_tab(n)%IRECTM,
181 4 intbuf_tab(n)%TAGNOD,iad_elem,fr_elem ,intbuf_tab(n)%ADMSR,intbuf_tab(n)%KNOR2MSR,
182 5 intbuf_tab(n)%NOR2MSR,flagremn,intbuf_tab(n)%KREMNOR,intbuf_tab(n)%REMNOR,
183 6 iedge, nedge, intbuf_tab(n)%LEDGE,intbuf_tab(n)%NRTM_FREE,
184 . intbuf_tab(n)%FREE_IRECT_ID,intbuf_tab(n)%I_STOK_E(2),
185 7 intbuf_tab(n)%CANDM_E2S,intbuf_tab(n)%CANDS_E2S,intbuf_tab(n)%MVOISIN,
186 8 intbuf_tab(n)%E2S_ACTNOR,nadmsr,intbuf_tab(n)%STFM,
187 8 intbuf_tab(n)%NUMBER_EDGE_TYPE1,intbuf_tab(n)%NUMBER_EDGE_TYPE1_0,
188 . intbuf_tab(n)%EDGE_TYPE1,intbuf_tab(n)%EDGE_TYPE1_0 )
189
190
191C
192 nadmsrf6= 1+(jtask-1)*6*nadmsr/ nthread
193 nadmsrl6= jtask*6*nadmsr/nthread
194 intbuf_tab(n)%VTX_BISECTOR(nadmsrf6:nadmsrl6)=rzero
195C
196 IF(jtask==1) ALLOCATE(intbuf_tab(n)%TAGSEG(4,4*nrtm))
197
198 CALL my_barrier()
199C
200
201 CALL i25normp(
202 1 ni25,nrtm,nrtm0,intbuf_tab(n)%IRECTM,x ,
203 2 intbuf_tab(n)%EDGE_BISECTOR,ipari(6,n),intbuf_tab(n)%MSR ,
204 . jtask,intbuf_tab(n)%STFM,intbuf_tab(n)%STFE,
205 3 intbuf_tab(n)%ACTNOR,intbuf_tab(n)%MSEGTYP24,intbuf_tab(n)%TAGNOD,
206 . intbuf_tab(n)%MVOISIN,intbuf_tab(n)%EVOISIN,
207 4 iad_fredg,fr_edg,intbuf_tab(n)%WNOD_NORMAL,buffers(ni25),iedge,ipari(68,n),
208 5 intbuf_tab(n)%LEDGE,intbuf_tab(n)%LBOUND,nadmsr,intbuf_tab(n)%ADMSR,
209 6 iad_frnor,fr_nor,intbuf_tab(n)%VTX_BISECTOR,1,
210 7 intbuf_tab(n)%NB_TAGSEG, intbuf_tab(n)%TAGSEG,intbuf_tab(n)%TAGE,intbuf_tab(n)%FREE_IRECT_ID,intbuf_tab(n)%NRTM_FREE,
211 8 fskyn25(1,ncshift),intbuf_tab(n)%IADNOR,ishift,addcsrect,procnor,sol_edge ,
212 9 fskyn25 )
213
214C
215 CALL my_barrier()
216
217 ncshift=ncshift+intbuf_tab(n)%ADSKYN(nadmsr+1)-1
218 ishift = ishift + ipari(67,n)
219
220 IF(jtask==1) DEALLOCATE(intbuf_tab(n)%TAGSEG)
221
222C
223 END DO
224
225C ALLOCATE(INTBUF_TAB(I)%TAGSEG(1,1))
226
227 ncshift = 1
228 ishift = 0
229 DO ni25=1,ninter25
230
231 n = intlist25(ni25)
232C
233 startt=intbuf_tab(n)%VARIABLES(3)
234 stopt =intbuf_tab(n)%VARIABLES(11)
235 IF(startt>tt) cycle
236 IF(tt>stopt) cycle
237C
238 isens = ipari(64,n)
239 IF (isens > 0) THEN ! Interface activated by sensor
240 ts = sensor_tab(isens)%TSTART
241 ELSE
242 ts = tt
243 ENDIF
244 IF(tt<ts) cycle
245
246 nadmsr = ipari(67,n)
247 nrtm = ipari(4,n)
248 nsn = ipari(5,n)
249 nsnr = ipari(24,n)
250
251 nrtm_sh=ipari(42,n)
252 nrtm0 =nrtm-nrtm_sh
253
254 iedge = ipari(58,n)
255C NEDGE = IPARI(68,N) ! Updated in i25normp
256 sol_edge =0
257 IF(iedge /= 0) sol_edge =iedge/10 ! solids
258
259 CALL my_barrier()
260
261 CALL i25normp(
262 1 ni25,nrtm,nrtm0,intbuf_tab(n)%IRECTM,x ,
263 2 intbuf_tab(n)%EDGE_BISECTOR,ipari(6,n),intbuf_tab(n)%MSR ,
264 . jtask,intbuf_tab(n)%STFM,intbuf_tab(n)%STFE,
265 3 intbuf_tab(n)%ACTNOR,intbuf_tab(n)%MSEGTYP24,intbuf_tab(n)%TAGNOD,
266 . intbuf_tab(n)%MVOISIN,intbuf_tab(n)%EVOISIN,
267 4 iad_fredg,fr_edg,intbuf_tab(n)%WNOD_NORMAL,buffers(ni25),iedge,ipari(68,n),
268 5 intbuf_tab(n)%LEDGE,intbuf_tab(n)%LBOUND,nadmsr,intbuf_tab(n)%ADMSR,
269 6 iad_frnor,fr_nor,intbuf_tab(n)%VTX_BISECTOR,2,
270 7 intbuf_tab(n)%NB_TAGSEG,intbuf_tab(n)%TAGSEG,intbuf_tab(n)%TAGE,intbuf_tab(n)%FREE_IRECT_ID,intbuf_tab(n)%NRTM_FREE,
271 8 fskyn25(1,ncshift),intbuf_tab(n)%IADNOR,ishift,addcsrect,procnor,sol_edge,
272 9 fskyn25 )
273
274
275 CALL my_barrier()
276
277 ncshift=ncshift+intbuf_tab(n)%ADSKYN(nadmsr+1)-1
278 ishift = ishift + ipari(67,n)
279
280 IF(jtask == 1) THEN
281 DEALLOCATE(buffers(ni25)%SEND_BUF)
282 DEALLOCATE(buffers(ni25)%RECV_BUF)
283 DEALLOCATE(buffers(ni25)%ISINDEX)
284 DEALLOCATE(buffers(ni25)%IRINDEX)
285 DEALLOCATE(buffers(ni25)%SEND_RQ)
286 DEALLOCATE(buffers(ni25)%RECV_RQ)
287 DEALLOCATE(buffers(ni25)%IAD_RECV)
288 DEALLOCATE(buffers(ni25)%IAD_SEND)
289 ENDIF
290 CALL my_barrier()
291 END DO
292C
293
294c CALL STOPTIME(TIMERS,MACRO_TIMER_T25NORM)
295 ncshift = 1
296 DO ni25=1,ninter25
297C
298 n = intlist25(ni25)
299
300 iedge = ipari(58,n)
301C NEDGE = IPARI(68,N) ! Updated in i25normp
302 sol_edge =0
303 IF(iedge /= 0) sol_edge =iedge/10 ! solids
304
305 IF(sol_edge/=0)THEN
306
307 isens = ipari(64,n)
308 IF (isens > 0) THEN ! Interface activated by sensor
309 ts = sensor_tab(isens)%TSTART
310 ELSE
311 ts = tt
312 ENDIF
313
314 nadmsr = ipari(67,n)
315 IF(tt >= ts) THEN
316 CALL i25assnp(
317 1 jtask ,nadmsr ,intbuf_tab(n)%E2S_NOD_NORMAL,intbuf_tab(n)%ADMSR,intbuf_tab(n)%ADSKYN,
318 2 intbuf_tab(n)%IADNOR,intbuf_tab(n)%E2S_ACTNOR,fskyn25(1,ncshift))
319 END IF
320
321 ncshift=ncshift+intbuf_tab(n)%ADSKYN(nadmsr+1)-1
322 ENDIF
323
324 END DO
325c CALL STARTIME(TIMERS,MACRO_TIMER_T25NORM)
326C
327 CALL my_barrier()
328
329 IF(jtask==1)THEN
330 DO i=1,ninter25
331 n = intlist25(i)
332 DEALLOCATE(intbuf_tab(n)%TAGNOD, intbuf_tab(n)%WNOD_NORMAL,intbuf_tab(n)%TAGE)
333 ENDDO
334 ENDIF
335C
336 RETURN
337 END
#define my_real
Definition cppsort.cpp:32
subroutine i25main_norm(intlist25, ipari, intbuf_tab, jtask, x, itab, nsensor, sensor_tab, iad_frnor, fr_nor, iad_fredg, fr_edg, iad_elem, fr_elem, fskyn25, addcsrect, procnor)
subroutine i25normp(ni25, nrtm, nrtm0, irect, x, nod_normal, nmn, msr, jtask, stifm, stfe, actnor, msegtyp, tagnod, mvoisin, evoisin, iad_fredg, fr_edg, wnod_normal, buffers, iedge, nedge, ledge, lbound, nadmsr, admsr, iad_frnor, fr_nor, vtx_bisector, flag, nb_free_bound, free_bound, tage, free_irect_id, nrtm_free, fskyt, iadnor, ishift, addcsrect, procnor, sol_edge, fskyn25)
Definition i25norm.F:446
subroutine i25tagn(ni25, nin, nrtm, nsn, nsnr, jtask, iad_frnor, fr_nor, irtlm, msegtyp, i_stok_glo, i_stok_rtlm, cand_opt_e, stfns, actnor, irect, tagnod, iad_elem, fr_elem, admsr, knor2msr, nor2msr, flagremn, kremnor, remnor, iedge, nedge, ledge, nrtm_free, free_irect_id, i_stok_e2s, candm_e2s, cands_e2s, mvoisin, e2s_actnor, nadmsr, stfm, number_edge_type1, number_edge_type1_0, edge_type1, edge_type1_0)
Definition i25norm.F:42
subroutine i25assnp(jtask, nadmsr, nod_normal, admsr, adskyt, iadnor, actnor, fskyt)
Definition i25norm.F:1127
subroutine my_barrier
Definition machine.F:31