33
34
35
36
37
38
39 USE elbufdef_mod
40 USE spmd_mod
41
42
43
44#include "implicit_f.inc"
45
46
47
48#include "spmd.inc"
49
50
51
52#include "com01_c.inc"
53#include "param_c.inc"
54
55
56
57
58
59
60
61 LOGICAL, INTENT(INOUT) :: GLOBAL_ACTIVE_ALE_ELEMENT
62 INTEGER, DIMENSION(NPARG,NGROUP), INTENT(IN) :: IPARG_L
63 INTEGER, INTENT(IN) :: ITHERM
64 TYPE(ELBUF_STRUCT_), DIMENSION(NGROUP), INTENT(IN) :: ELBUF_TAB
65
66
67
68 LOGICAL :: ACTIVE_ALE_ELEMENT
69 INTEGER :: NG,I,NFT
70 INTEGER :: FIRST,LAST
71 INTEGER :: ITY,MTN,JEUL
73#ifdef MPI
74 INTEGER :: IERROR
75#endif
76
77
78 IF(iale+ieuler+itherm /= 0) THEN
79 active_ale_element = .false.
80
81
82 DO ng=1,ngroup
83 ity = iparg_l(5,ng)
84 mtn = iparg_l(1,ng)
85 IF(ity == 1 .OR. ity == 2)THEN
86 jeul = iparg_l(11,ng)
87 ELSEIF (mtn == 151 .AND. ity == 7) THEN
88 jeul = iparg_l(11,ng)
89 ELSE
90 jeul = 0
91 END IF
92 IF(iparg_l(7,ng)+jeul == 0)cycle
93 first = 1
94 last = iparg_l(2,ng)
95 nft = iparg_l(3,ng)
96 DO i=first,last
97 off_value = elbuf_tab(ng)%GBUF%OFF(i)
98 IF(off_value /= zero) THEN
99 active_ale_element = .true.
100 ENDIF
101 ENDDO
102 ENDDO
103
104
105 IF(nspmd>1) THEN
106#ifdef MPI
107 CALL mpi_allreduce(active_ale_element,global_active_ale_element,1,mpi_logical,mpi_lor,spmd_comm_world,ierror)
108#endif
109 ELSE
110 global_active_ale_element = active_ale_element
111 ENDIF
112 ELSE
113 global_active_ale_element = .true.
114 ENDIF
115
116
117 RETURN
subroutine mpi_allreduce(sendbuf, recvbuf, cnt, datatype, operation, comm, ierr)