OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
intfop8.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!|| intfop8 ../engine/source/interfaces/interf/intfop8.f
25!||--- called by ------------------------------------------------------
26!|| resol ../engine/source/engine/resol.F
27!||--- calls -----------------------------------------------------
28!|| intvo8 ../engine/source/interfaces/inter3d/intvo8.F
29!|| spmd_i8_reduce ../engine/source/mpi/interfaces/spmd_i8tool.F
30!||--- uses -----------------------------------------------------
31!|| h3d_mod ../engine/share/modules/h3d_mod.F
32!|| int8_mod ../common_source/modules/interfaces/int8_mod.f90
33!|| intbufdef_mod ../common_source/modules/interfaces/intbufdef_mod.F90
34!|| output_mod ../common_source/modules/output/output_mod.F90
35!|| sensor_mod ../common_source/modules/sensor_mod.F90
36!||====================================================================
37 SUBROUTINE intfop8(output,
38 1 IPARI ,X ,A ,
39 2 ICODT ,FSAV ,WA ,V ,MS ,
40 3 DT2T ,NELTST ,ITYPTST ,ITAB ,STIFN,
41 4 NPC ,TF ,FSKYI ,ISKY ,VR ,
42 5 FCONT ,IN ,BUFSF ,FNCONT ,NSENSOR,
43 6 FTCONT,ICONTACT,RCONTACT,NUM_IMP,NS_IMP,
44 7 NE_IMP ,NT_IMP ,SENSOR_TAB,INTBUF_TAB ,
45 8 H3D_DATA,PSKIDS,TAGNCONT,KLOADPINTER,LOADPINTER,
46 9 LOADP_HYD_INTER)
47C-----------------------------------------------
48C M o d u l e s
49C-----------------------------------------------
50 use output_mod
51 USE intbufdef_mod
52 USE int8_mod
53 USE h3d_mod
54 USE sensor_mod
55C-----------------------------------------------
56C I m p l i c i t T y p e s
57C-----------------------------------------------
58#include "implicit_f.inc"
59#include "comlock.inc"
60C-----------------------------------------------
61C C o m m o n B l o c k s
62C-----------------------------------------------
63#include "com01_c.inc"
64#include "com04_c.inc"
65#include "com08_c.inc"
66#include "param_c.inc"
67#include "parit_c.inc"
68#include "impl1_c.inc"
69C-----------------------------------------------
70C D u m m y A r g u m e n t s
71C-----------------------------------------------
72 type(output_), intent(inout) :: output
73 INTEGER ,INTENT(IN) :: NSENSOR
74 INTEGER NELTST,ITYPTST
75 INTEGER NUM_IMP(*),NS_IMP(*),NE_IMP(*),NT_IMP
76 INTEGER IPARI(NPARI,*), ICODT(*),ITAB(*),
77 . NPC(*), ISKY(*),
78 . ICONTACT(*),TAGNCONT(NLOADP_HYD_INTER,NUMNOD),
79 . KLOADPINTER(NINTER+1),LOADPINTER(NINTER*NLOADP_HYD),
80 . LOADP_HYD_INTER(NLOADP_HYD)
81
82C REAL
83 my_real dt2t,
84 . x(*), a(*), fsav(nthvki,*) , wa(*), v(*),ms(*),
85 . stifn(*), tf(*),fskyi(lsky,nfskyi),vr(3,*),fcont(3,*),in(*),
86 . bufsf(*), fncont(3,*),ftcont(3,*),rcontact(*),pskids(*)
87
88 TYPE(intbuf_struct_) INTBUF_TAB(*)
89 TYPE(H3D_DATABASE) :: H3D_DATA
90 TYPE (SENSOR_STR_) ,DIMENSION(NSENSOR) :: SENSOR_TAB
91
92C-----------------------------------------------
93C L o c a l V a r i a b l e s
94C-----------------------------------------------
95 INTEGER N, IAD, ISENS,I
96 my_real TS,STARTT,STOPT
97 INTEGER NSLV,SIZ,NBT8
98 my_real, DIMENSION(:,:), ALLOCATABLE :: ftsav_buf
99 INTEGER :: NTY
100C-----------------------------------------------
101 !CALL STARTIME(TIMERS,96)
102 NBT8 = 0
103
104
105 IF (impl_s==1) iad = 1
106C
107 DO 200 n=1,ninter
108 nty =ipari(7,n)
109 ! used to identify the communication
110 ! Will be replace by MPI_Request with
111 ! MPI 3.0 support
112c IF(ISPMD/=0) GOTO 200 !TO REMOVE
113 IF(nty==8) THEN
114 nbt8 = nbt8 + 1
115 IF(ipari(16,n)==ncycle)THEN
116 ELSE
117 ipari(16,n) = ncycle
118C
119 isens = 0 ! ???
120
121 IF (isens > 0) THEN ! IF INTERFACE is activated by sensor
122 ts = sensor_tab(isens)%TSTART
123 ELSE
124 ts = tt
125 ENDIF
126C
127 IF(n2d==0)THEN
128 IF(impl_s/=1)THEN
129 IF(tt>=ts) THEN
130 CALL intvo8(output,
131 1 ipari(1,n) ,x,a ,
132 2 icodt ,fsav(1,n) ,v ,ms ,
133 3 fskyi ,isky ,fcont ,fncont ,ftcont ,
134 4 icontact ,rcontact,
135 5 stifn ,itab,intbuf_tab(n),intbuf_tab(n)%T8,h3d_data,
136 6 n ,pskids ,tagncont,kloadpinter,loadpinter,
137 7 loadp_hyd_inter)
138 ENDIF
139 ELSE
140 num_imp(n) =0
141 IF(tt>=ts) THEN
142 CALL intvo8(output,
143 1 ipari(1,n) ,x ,a ,
144 2 icodt ,fsav(1,n) ,v ,ms ,
145 3 fskyi ,isky ,fcont ,fncont ,ftcont ,
146 4 icontact ,rcontact,
147 5 stifn ,itab,intbuf_tab(n),intbuf_tab(n)%T8,h3d_data,
148 6 n ,pskids ,tagncont,kloadpinter,loadpinter,
149 7 loadp_hyd_inter)
150 ENDIF
151 iad=iad+num_imp(n)
152 END IF
153 ELSE
154
155 ENDIF !N2D
156 ENDIF !IPARI(16)
157 ENDIF !NTY==8
158 200 CONTINUE
159C
160
161 IF(nspmd > 1) THEN
162 nbt8 = 0
163 DO n=1,ninter
164 nty =ipari(7,n)
165c IF(ISPMD/=0) GOTO 200 !TO REMOVE
166 IF(nty==8) THEN
167 nbt8 = nbt8+1
168 startt=intbuf_tab(n)%VARIABLES(3)
169 stopt=intbuf_tab(n)%VARIABLES(11)
170 IF(startt<=tt .AND. tt<= stopt) THEN
171 IF(ipari(48,n) == 2) THEN
172 nslv = ipari(5,n)
173 ALLOCATE(ftsav_buf(3,nslv))
174 ftsav_buf(1:3,1:nslv) = 0
175 DO i = 1, nslv
176 ftsav_buf(1,i) = intbuf_tab(n)%FTSAVX(i)
177 ftsav_buf(2,i) = intbuf_tab(n)%FTSAVY(i)
178 ftsav_buf(3,i) = intbuf_tab(n)%FTSAVZ(i)
179 ENDDO
180 siz = 3*nslv
181 CALL spmd_i8_reduce(ftsav_buf,siz,nbt8)
182 DO i = 1, nslv
183 intbuf_tab(n)%FTSAVX(i) = ftsav_buf(1,i)
184 intbuf_tab(n)%FTSAVY(i) = ftsav_buf(2,i)
185 intbuf_tab(n)%FTSAVZ(i) = ftsav_buf(3,i)
186 ENDDO
187 DEALLOCATE(ftsav_buf)
188 ENDIF
189 ENDIF
190 ENDIF
191 ENDDO
192 ENDIF
193
194 IF (impl_s==1) nt_imp=iad-1
195 !CALL STOPTIME(TIMERS,96)
196
197C
198 RETURN
199 END
200C
#define my_real
Definition cppsort.cpp:32
subroutine intfop8(output, ipari, x, a, icodt, fsav, wa, v, ms, dt2t, neltst, ityptst, itab, stifn, npc, tf, fskyi, isky, vr, fcont, in, bufsf, fncont, nsensor, ftcont, icontact, rcontact, num_imp, ns_imp, ne_imp, nt_imp, sensor_tab, intbuf_tab, h3d_data, pskids, tagncont, kloadpinter, loadpinter, loadp_hyd_inter)
Definition intfop8.F:47
subroutine intvo8(output, ipari, x, a, icodt, fsav, v, ms, fskyi, isky, fcont, fncont, ftcont, icontact, rcontact, stifn, itab, intbuf_tab, t8, h3d_data, nin, pskids, tagncont, kloadpinter, loadpinter, loadp_hyd_inter)
Definition intvo8.F:53
subroutine spmd_i8_reduce(tab, n, num)