34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
51 use element_mod , only : nixs
52
53
54
55#include "implicit_f.inc"
56
57
58
59#include "com01_c.inc"
60
61
62
63 INTEGER, INTENT(IN) :: NUMELS
64 INTEGER, DIMENSION(NIXS,*), INTENT(IN) :: IXS
65 INTEGER, DIMENSION(NSPMD) :: SIZE_ALE_ELM
66 TYPE(split_cfd_type), DIMENSION(NSPMD), INTENT(INOUT) :: ALE_ELM
67 TYPE(t_ale_connectivity), INTENT(INOUT) :: ALE_CONNECTIVITY
68
69
70
71
72
73
74
75
76
77
78
79
80 LOGICAL, DIMENSION(NSPMD) :: BOOL
81 INTEGER :: I,J,K,L,N,NS,IAD1,LGTH
82 INTEGER :: SOLV,ISPMD,NBR_PROC,NEW_SIZE_II,MIN_SIZE
83 INTEGER, DIMENSION(NSPMD) :: ID_SPMD,II
84 INTEGER, DIMENSION(:), ALLOCATABLE :: TMP
85
86
87
88
89 size_ale_elm(1:nspmd) = numels/nspmd+1
90 DO ispmd=1,nspmd
91 ALLOCATE( ale_elm(ispmd)%SOL_ID(size_ale_elm(ispmd)) )
92 ENDDO
93
94 ii(1:nspmd) = 0
95 DO i=1,numels
96
97
98 bool(1:nspmd)=.false.
99 iad1 = ale_connectivity%ee_connect%iad_connect(i)
100 lgth = ale_connectivity%ee_connect%iad_connect(i+1)-ale_connectivity%ee_connect%iad_connect(i)
101 DO j=1,8
102 ns = ixs(j+1,i)
103 DO k=1,lgth
104 solv = ale_connectivity%ee_connect%connected(iad1 + k - 1)
105 IF (solv>0) THEN
106 DO l=1,8
107 n = ixs(l+1,solv)
109 DO ispmd=1,nbr_proc
110 bool(id_spmd(ispmd)) = .true.
111 ENDDO
112 ENDDO
113 ENDIF
114 ENDDO
115 ENDDO
116
117
118 DO ispmd=1,nspmd
119 IF( bool(ispmd) ) THEN
120 ii(ispmd) = ii(ispmd) + 1
121 IF( ii(ispmd)>size_ale_elm(ispmd) ) THEN
122
123 min_size=
max(1,5* numels/ ( 4*nspmd ))
124 new_size_ii = size_ale_elm(ispmd) + min_size
125 ALLOCATE( tmp( new_size_ii ) )
126 tmp(1:size_ale_elm(ispmd)) = ale_elm(ispmd)%SOL_ID( 1:size_ale_elm(ispmd) )
127 CALL move_alloc(from=tmp,to=ale_elm(ispmd)%SOL_ID)
128 size_ale_elm(ispmd) = new_size_ii
129 ENDIF
130 ale_elm(ispmd)%SOL_ID(ii(ispmd)) = i
131 ENDIF
132 ENDDO
133
134 ENDDO
135
136
137 size_ale_elm(1:nspmd) = ii(1:nspmd)
138
139 RETURN