OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
timer_interf.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!|| open_interf_time ../engine/source/system/timer_interf.F
25!||--- uses -----------------------------------------------------
26!|| metric_mod ../common_source/modules/interfaces/metric_mod.F
27!||====================================================================
28 SUBROUTINE open_interf_time(ISPMD)
29 USE metric_mod
30C-----------------------------------------------
31C I m p l i c i t T y p e s
32C-----------------------------------------------
33#include "implicit_f.inc"
34#include "chara_c.inc"
35
36C-----------------------------------------------
37C D u m m y A r g u m e n t s
38C-----------------------------------------------
39 INTEGER :: ISPMD
40C-----------------------------------------------
41 CHARACTER FILNAM*100
42 CHARACTER PROCNAM*4
43C-----------------------------------------------
44 WRITE(procnam,'(I4.4)')ispmd+1
45 filnam=rootnam(1:rootlen)//'_'//chrun//'_'//procnam//'.int'
46 OPEN(unit=4999,file=filnam(1:rootlen+15),action='write',
47 . access='SEQUENTIAL',
48 . form='FORMATTED',status='UNKNOWN')
49 END SUBROUTINE
50
51!||====================================================================
52!|| close_interf_time ../engine/source/system/timer_interf.f
53!||--- uses -----------------------------------------------------
54!|| metric_mod ../common_source/modules/interfaces/metric_mod.f
55!||====================================================================
56 SUBROUTINE close_interf_time()
57 USE metric_mod
58C-----------------------------------------------
59C I m p l i c i t T y p e s
60C-----------------------------------------------
61#include "implicit_f.inc"
62C-----------------------------------------------
63C D u m m y A r g u m e n t s
64C-----------------------------------------------
65 CLOSE(unit=file_id)
66 END SUBROUTINE
67
68!||====================================================================
69!|| int_startime ../engine/source/system/timer_interf.F
70!||--- called by ------------------------------------------------------
71!|| inter_sort ../engine/source/interfaces/generic/inter_sort.F
72!|| intfop2 ../engine/source/interfaces/interf/intfop2.F
73!|| inttri ../engine/source/interfaces/intsort/inttri.F
74!||--- uses -----------------------------------------------------
75!|| metric_mod ../common_source/modules/interfaces/metric_mod.F
76!||====================================================================
77 SUBROUTINE int_startime(THIS,EVENT)
78C-----------------------------------------------
79C M o d u l e s
80C-----------------------------------------------
81 USE metric_mod
82C-----------------------------------------------
83C I m p l i c i t T y p e s
84C-----------------------------------------------
85#include "implicit_f.inc"
86C-----------------------------------------------
87C M e s s a g e P a s s i n g
88C-----------------------------------------------
89#include "spmd.inc"
90C-----------------------------------------------
91C D u m m y A r g u m e n t s
92C-----------------------------------------------
93 TYPE(metric_struct_) :: THIS
94 INTEGER :: EVENT
95C-----------------------------------------------
96C L o c a l V a r i a b l e s
97C-----------------------------------------------
98 DOUBLE PRECISION :: tic
99
100#ifdef MPI
101 tic = mpi_wtime()
102 this%TIME(event,2)=tic
103#else
104 this%TIME(event,1:2)=0.0d0
105#endif
106 RETURN
107 END SUBROUTINE
108!||====================================================================
109!|| int_stoptime ../engine/source/system/timer_interf.F
110!||--- called by ------------------------------------------------------
111!|| inter_sort ../engine/source/interfaces/generic/inter_sort.F
112!|| intfop2 ../engine/source/interfaces/interf/intfop2.F
113!|| inttri ../engine/source/interfaces/intsort/inttri.F
114!||--- uses -----------------------------------------------------
115!|| metric_mod ../common_source/modules/interfaces/metric_mod.F
116!||====================================================================
117 SUBROUTINE int_stoptime(THIS,EVENT)
118C-----------------------------------------------
119C M o d u l e s
120C-----------------------------------------------
121 USE metric_mod
122C-----------------------------------------------
123C I m p l i c i t T y p e s
124C-----------------------------------------------
125#include "implicit_f.inc"
126C-----------------------------------------------
127C M e s s a g e P a s s i n g
128C-----------------------------------------------
129#include "spmd.inc"
130C-----------------------------------------------
131C D u m m y A r g u m e n t s
132C-----------------------------------------------
133 TYPE(metric_struct_) :: THIS
134 INTEGER :: EVENT
135C-----------------------------------------------
136C L o c a l V a r i a b l e s
137C-----------------------------------------------
138 DOUBLE PRECISION :: toc
139C
140#ifdef MPI
141 toc = mpi_wtime()
142 this%TIME(event,1)=this%TIME(event,1) + (toc - this%TIME(event,2))
143#else
144 toc = 0.0d0
145 this%TIME(event,1)=this%TIME(event,1) + (toc - this%TIME(event,2))
146#endif
147 RETURN
148 END SUBROUTINE
149!||====================================================================
150!|| printime_interf ../engine/source/system/timer_interf.F
151!||--- called by ------------------------------------------------------
152!|| resol ../engine/source/engine/resol.F
153!||--- calls -----------------------------------------------------
154!|| spmd_dgather ../engine/source/mpi/output/spmd_gather.F
155!||--- uses -----------------------------------------------------
156!|| intbufdef_mod ../common_source/modules/interfaces/intbufdef_mod.F90
157!|| metric_mod ../common_source/modules/interfaces/metric_mod.F
158!||====================================================================
159 SUBROUTINE printime_interf(INTBUF_TAB,IPARI,INTLIST,NBINTC,TRESHOLD)
160C-----------------------------------------------
161C M o d u l e s
162C-----------------------------------------------
163 USE intbufdef_mod
164 USE metric_mod
165C-----------------------------------------------
166C I m p l i c i t T y p e s
167C-----------------------------------------------
168#include "implicit_f.inc"
169C-----------------------------------------------
170C C o m m o n B l o c k s
171C-----------------------------------------------
172#include "com01_c.inc"
173#include "com04_c.inc"
174#include "units_c.inc"
175#include "task_c.inc"
176#include "timerr_c.inc"
177#include "param_c.inc"
178C-----------------------------------------------
179C D u m m y A r g u m e n t s
180C-----------------------------------------------
181 INTEGER, INTENT(IN) :: NBINTC
182 INTEGER, INTENT(IN) :: INTLIST(NBINTC),IPARI(NPARI,NINTER)
183 TYPE(intbuf_struct_),DIMENSION(NINTER), INTENT(IN) :: INTBUF_TAB
184 DOUBLE PRECISION :: TRESHOLD
185C-----------------------------------------------
186C L o c a l V a r i a b l e s
187C-----------------------------------------------
188 DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: SENDBUF
189 DOUBLE PRECISION, DIMENSION(:,:), ALLOCATABLE :: RECVBUF
190 INTEGER :: I,J,N,P
191 DOUBLE PRECISION, DIMENSION(:), ALLOCATABLE :: RATIO
192 DOUBLE PRECISION,DIMENSION(:,:,:), ALLOCATABLE :: SUMMARY
193 DOUBLE PRECISION ::PMAX,TOTAL_TIME
194 INTEGER :: NB_PRINTED_INTERF
195
196
197
198 IF(nspmd > 0) THEN
199 ALLOCATE(sendbuf(size_metric * nbintc))
200 sendbuf(1:size_metric*nbintc) = 0
201 IF(ispmd == 0) THEN
202 ALLOCATE(recvbuf(size_metric*nbintc,nspmd))
203 recvbuf(1:size_metric*nbintc,1:nspmd) = 0
204 ALLOCATE(ratio(nbintc))
205 ALLOCATE(summary(size_metric,3,nbintc))
206 ELSE
207 ALLOCATE(recvbuf(1,1))
208 ALLOCATE(ratio(1))
209 ALLOCATE(summary(1,1,1))
210 ENDIF
211
212 DO i = 1,nbintc
213 n = intlist(i)
214 j = (i-1) * size_metric
215 sendbuf(j + i_main_crit_tri)=intbuf_tab(n)%METRIC%TIME(i_main_crit_tri,1)
216 sendbuf(j + i_main_tri )=intbuf_tab(n)%METRIC%TIME(i_main_tri,1)
217 sendbuf(j + i_main_opt_tri )=intbuf_tab(n)%METRIC%TIME(i_main_opt_tri,1)
218 sendbuf(j + i_main_forces )=intbuf_tab(n)%METRIC%TIME(i_main_forces,1)
219 sendbuf(j + i_noint )=dble(intbuf_tab(n)%METRIC%NOINT )
220 sendbuf(j + i_multimp )=dble(intbuf_tab(n)%METRIC%MULTIMP )
221 sendbuf(j + i_nsn )=dble(intbuf_tab(n)%METRIC%NSN )
222 sendbuf(j + i_nsnr )=dble(intbuf_tab(n)%METRIC%NSNR )
223 sendbuf(j + i_ncont )=dble(intbuf_tab(n)%METRIC%NCONT )
224 ENDDO
225 IF(nspmd > 1) THEN
226 CALL spmd_dgather(sendbuf,size_metric*nbintc,recvbuf,0)
227 ELSE
228 recvbuf(1:size_metric*nbintc,1) = sendbuf(1:size_metric*nbintc)
229 ENDIF
230
231C=================== PRINT ON PROC 0
232 IF( ispmd == 0) THEN
233
234 nb_printed_interf = 0
235 ratio(1:nbintc) = 0.0d0
236 summary(1:size_metric,1:3,1:nbintc) = 0.0d0
237 DO i = 1,nbintc
238 pmax = 0.0d0
239 DO p = 1,nspmd
240 j = (i-1) * size_metric
241
242 ratio(i) = max(ratio(i),
243 . recvbuf(j + i_main_crit_tri,p)
244 . + recvbuf(j + i_main_tri ,p)
245 . + recvbuf(j + i_main_opt_tri ,p)
246 . + recvbuf(j + i_main_forces ,p))
247
248C =========== SUM OVER PROCESSORS
249 summary(i_main_opt_tri,1,i) = summary(i_main_opt_tri,1,i) + recvbuf(j + i_main_opt_tri,p)
250 summary(i_main_crit_tri,1,i)= summary(i_main_crit_tri,1,i)+ recvbuf(j + i_main_crit_tri,p)
251 summary(i_main_tri,1,i) = summary(i_main_tri,1,i) + recvbuf(j + i_main_tri,p)
252 summary(i_main_forces,1,i) = summary(i_main_forces,1,i) + recvbuf(j + i_main_forces,p)
253
254 summary(i_nsn,1,i) = summary(i_nsn,1,i) + recvbuf(j + i_nsn,p)
255 summary(i_nsnr,1,i) = summary(i_nsnr,1,i) + recvbuf(j + i_nsnr,p)
256
257
258C =========== MAX OVER PROCESSORS
259 total_time = recvbuf(i_main_opt_tri+j,p)
260 . + recvbuf(i_main_crit_tri+j,p)
261 . + recvbuf(i_main_tri+j,p)
262 . + recvbuf(i_main_forces+j,p)
263
264 IF(total_time > pmax) THEN
265 summary(i_main_opt_tri,2,i) = recvbuf(j + i_main_opt_tri,p)
266 summary(i_main_crit_tri,2,i)= recvbuf(j + i_main_crit_tri,p)
267 summary(i_main_tri,2,i) = recvbuf(j + i_main_tri,p)
268 summary(i_main_forces,2,i) = recvbuf(j + i_main_forces,p)
269 pmax = total_time
270 ENDIF
271 ENDDO !P
272 IF(ratio(i) > treshold) nb_printed_interf = nb_printed_interf + 1
273 ENDDO ! I
274 IF(nb_printed_interf > 0) THEN
275 WRITE(iout,*)' '
276 WRITE(iout,*)
277 . ' ** INTERFACE SUMMARY **'
278
279 DO i = 1,nbintc
280 IF(ratio(i) > treshold) THEN
281 n = intlist(i)
282 WRITE(iout,*)' '
283 WRITE(iout,*)
284 . 'INTERFACE ID:',intbuf_tab(n)%METRIC%NOINT,' TYPE: ',ipari(7,n)
285 WRITE(iout,'(A,F12.3,A)')
286 . 'REMOTE SECONDARY:',summary(i_nsnr,1,i)/summary(i_nsn,1,i),'%'
287 WRITE(iout,*) 'TIME (s) MAX AVG'
288 WRITE(iout,'(A,2F12.2)')
289 . ' SORT.MAIN:',summary(i_main_tri,2,i),summary(i_main_tri,1,i)/nspmd
290 WRITE(iout,'(A,2F12.3)')
291 . ' SORT.CRIT:',summary(i_main_crit_tri,2,i),summary(i_main_crit_tri,1,i)/nspmd
292 WRITE(iout,'(A,2F12.3)')
293 . ' SORT.OPT:',summary(i_main_opt_tri,2,i),summary(i_main_opt_tri,1,i)/nspmd
294 WRITE(iout,'(A,2F12.3)')
295 . ' FORCES:',summary(i_main_forces,2,i),summary(i_main_forces,1,i)/nspmd
296 ENDIF
297 ENDDO !I = 1,NBINTC
298 ENDIF
299 ENDIF
300 ENDIF
301
302
303 DEALLOCATE(ratio,sendbuf,recvbuf,summary)
304 RETURN
305 END SUBROUTINE
#define max(a, b)
Definition macros.h:21
double precision function mpi_wtime()
Definition mpi.f:561
integer, parameter i_main_tri
Definition metric_mod.F:54
integer, parameter size_metric
Definition metric_mod.F:64
integer, parameter i_nsnr
Definition metric_mod.F:60
integer, parameter i_ncont
Definition metric_mod.F:61
integer, parameter i_main_opt_tri
Definition metric_mod.F:55
integer, parameter i_main_forces
Definition metric_mod.F:56
integer, parameter i_multimp
Definition metric_mod.F:58
integer, parameter i_main_crit_tri
Definition metric_mod.F:53
integer, parameter i_noint
Definition metric_mod.F:57
integer, parameter i_nsn
Definition metric_mod.F:59
integer, parameter file_id
Definition metric_mod.F:67
subroutine spmd_dgather(sendbuf, length, recvbuf, rank)
Definition spmd_gather.F:32
subroutine close_interf_time()
subroutine open_interf_time(ispmd)
subroutine int_stoptime(this, event)
subroutine int_startime(this, event)
subroutine printime_interf(intbuf_tab, ipari, intlist, nbintc, treshold)