33 1 POIN_GROUP_MID_SHELL,POIN_GROUP_PID_SHELL,
34 2 MID_SHELL,TAB_LOC,TAB_SHELL_LOC,TAB_MAT)
65#include "implicit_f.inc"
74 INTEGER,
INTENT(IN) ::N_SHELL
75 INTEGER,
DIMENSION(NUMMAT),
INTENT(IN) :: MID_SHELL
76 INTEGER,
DIMENSION(N_SHELL),
INTENT(IN) :: IGROUC_SHELL,POIN_GROUP_MID_SHELL,POIN_GROUP_PID_SHELL
77 INTEGER,
DIMENSION(NGROUP,5),
INTENT(IN) :: TAB_SHELL_LOC
78 INTEGER,
DIMENSION(N_SHELL,3),
INTENT(INOUT) :: TAB_LOC
79 my_real,
INTENT(IN) :: tab_mat(ngroup)
83 INTEGER ::I,J,II,JJ,NBR_MID_PID_GRP
84 INTEGER :: NG,NGG,NGG_LOC
85 INTEGER :: MARQUEUR,MARQUEUR_2,MARQUEUR_3,COMPTEUR_MAT_PROP_SHELL,COMPTEUR
86 INTEGER :: FIRST,LAST,SHIFT,GR_ID,GR_ID2
87 INTEGER :: MID,MAX_MID
88 INTEGER :: PID,MAX_PID,PID_1,PID_2
89 INTEGER,
DIMENSION(:),
ALLOCATABLE :: PID_INDEX,INDEX
90 INTEGER,
DIMENSION(:),
ALLOCATABLE :: POIN_MID_SHELL
92 TYPE(
mid_pid_type),
DIMENSION(:),
ALLOCATABLE :: MID_PID_SHELL
94 ALLOCATE(mid_pid_shell(nummat))
95 ALLOCATE(pid_index(nummat) )
96 CALL my_alloc(poin_mid_shell,n_shell)
97 pid_index(1:nummat) = 0
101 ng = igrouc_shell(ngg)
102 mid = poin_group_mid_shell(ngg)
103 pid = poin_group_pid_shell(ngg)
104 IF(.NOT.
ALLOCATED(mid_pid_shell(mid)%PID1D))
THEN
105 ALLOCATE( mid_pid_shell(mid)%PID1D( mid_shell(mid) ) )
106 ALLOCATE( mid_pid_shell(mid)%GROUP1D(mid_shell(mid) ) )
108 mid_pid_shell(mid)%PID1D( 1:mid_shell(mid) ) = 0
109 mid_pid_shell(mid)%GROUP1D( 1:mid_shell(mid) ) = 0
113 pid_index(mid) = pid_index(mid) + 1
114 mid_pid_shell(mid)%PID1D( pid_index(mid) ) = -pid
115 mid_pid_shell(mid)%GROUP1D( pid_index(mid) ) = ngg
116 compteur = compteur + 1
117 poin_mid_shell(compteur) = mid
120 pid_index(mid) = pid_index(mid) + 1
121 mid_pid_shell(mid)%PID1D( pid_index(mid) ) = -pid
122 mid_pid_shell(mid)%GROUP1D( pid_index(mid) ) = ngg
132 mid = poin_mid_shell(i)
133 max_pid =
max( max_pid,pid_index(mid) )
136 ALLOCATE( index(max_pid) )
138 compteur_mat_prop_shell = 0
141 mid = poin_mid_shell(ii)
142 DO i=1,pid_index(mid)
143 pid_1 = mid_pid_shell(mid)%PID1D( i )
147 mid_pid_shell(mid)%PID1D( i ) = -pid_1
150 DO j=i+1,pid_index(mid)
151 pid_2 = mid_pid_shell(mid)%PID1D( j )
152 IF(pid_1 == pid_2 )
THEN
153 mid_pid_shell(mid)%PID1D( j ) = -pid_2
154 compteur = compteur + 1
162 ngg_loc = mid_pid_shell(mid)%GROUP1D( index(j) )
163 tab_loc(jj,1) = ngg_loc
164 tab_loc(jj,2) = tab_shell_loc(ngg_loc,1)
165 tab_loc(jj,3) = compteur
167 compteur_mat_prop_shell = compteur_mat_prop_shell + 1
173 DEALLOCATE( pid_index )
179 DO WHILE((marqueur==0).and.(i>0))
183 mid = tab_shell_loc(ii,3)
184 pid = tab_shell_loc(ii,4)
185 gr_id = tab_shell_loc(ii,2)
186 poids_j = tab_mat(gr_id)
188 mid = tab_shell_loc(jj,3)
189 pid = tab_shell_loc(jj,4)
190 gr_id2 = tab_shell_loc(jj,2)
192 poids_j1 = tab_mat(gr_id2)
193 IF(poids_j<poids_j1)
then
194 marqueur = tab_loc(j,1)
195 marqueur_2 = tab_loc(j,2)
196 marqueur_3 = tab_loc(j,3)
197 tab_loc(j,1) = tab_loc(j+1,1)
198 tab_loc(j,2) = tab_loc(j+1,2)
199 tab_loc(j,3) = tab_loc(j+1,3)
200 tab_loc(j+1,1) = marqueur
201 tab_loc(j+1,2) = marqueur_2
202 tab_loc(j+1,3) = marqueur_3
211 DO i =1,compteur_mat_prop_shell
213 mid = tab_shell_loc(j,3)
214 pid = tab_shell_loc(j,4)
215 nbr_mid_pid_grp = tab_loc(shift,3)
217 last = first + nbr_mid_pid_grp - 1
220 DO WHILE(marqueur==0.and.ii>0)
223 if(tab_loc(jj,2)<tab_loc(jj+1,2))
then
224 marqueur = tab_loc(jj,1)
225 marqueur_2 = tab_loc(jj,2)
226 marqueur_3 = tab_loc(jj,3)
227 tab_loc(jj,1) = tab_loc(jj+1,1)
228 tab_loc(jj,2) = tab_loc(jj+1,2)
229 tab_loc(jj+1,1) = marqueur
230 tab_loc(jj+1,2) = marqueur_2
231 tab_loc(jj+1,3) = marqueur_3
237 shift = shift + nbr_mid_pid_grp
241 mid = poin_mid_shell(i)
242 DEALLOCATE( mid_pid_shell(mid)%GROUP1D )
243 DEALLOCATE( mid_pid_shell(mid)%PID1D )
246 DEALLOCATE(mid_pid_shell)
247 DEALLOCATE(poin_mid_shell)