35
36
37
38 USE skew_mod
40 use element_mod , only : nixr
41
42
43
44#include "implicit_f.inc"
45
46
47
48#include "tabsiz_c.inc"
49#include "com01_c.inc"
50#include "com04_c.inc"
51#include "param_c.inc"
52
53
54
55 INTEGER, INTENT(INOUT) :: NSKWP(NSPMD),R_SKEW(NUMELR)
56 INTEGER, DIMENSION(NUMSKW+NSUBMOD+1), INTENT(INOUT) :: TAG_SKN
57 INTEGER, DIMENSION(SCEP), INTENT(IN) :: CEP
58 INTEGER, DIMENSION(NUMSKW+1), INTENT(INOUT) :: ISKWP
59 INTEGER, DIMENSION(NIXR,NUMELR), INTENT(IN) :: IXR
60 INTEGER, DIMENSION(NPROPGI,NUMGEO), INTENT(IN) :: IGEO
61 INTEGER, DIMENSION(LISKN,SISKWN/LISKN), INTENT(IN) :: ISKN
62 INTEGER, DIMENSION(NPROPMI,NUMMAT), INTENT(IN) :: IPM
63 TYPE(PLIST_SKEW_), DIMENSION(NUMSKW+1), INTENT(INOUT) :: MULTIPLE_SKEW
64 INTEGER :: OFFSET
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97 INTEGER :: I,J,II
98 INTEGER :: NUMBER_SKEW_SP,SPRING_TYPE
99 INTEGER :: N1,N2,N3,IMAIN,SUM_NI,SIZE_SKEW,MAT_TYPE
100 INTEGER :: NB
101 INTEGER, DIMENSION(:), ALLOCATABLE :: SKEW_PER_SP,LOCAL_P,P_SKEW
102 INTEGER, DIMENSION(NSPMD) :: PROC_SKEW
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126 number_skew_sp = 0
127 tag_skn(1:numskw+
nsubmod+1) = -1
128 nb = 0
129 DO i = 1,numskw
130
131
133 IF(NB == 1) TAG_SKN(I+1) = 0
134 ENDDO
135
136
137 DO I=1,NUMELR
138 SPRING_TYPE = IGEO( 11,IXR(1,I) )
139 MAT_TYPE = 0
140 IF (IXR(5,I) > 0) MAT_TYPE = IPM(2,IXR(5,I))
141
142 IF (R_SKEW(I) > 1) THEN
143 IF( TAG_SKN(R_SKEW(I)) >= 0 ) THEN
144.OR..AND. IF(SPRING_TYPE==8 (SPRING_TYPE== 23 MAT_TYPE == 108)) NUMBER_SKEW_SP = NUMBER_SKEW_SP + 1
145 ENDIF
146 ENDIF
147
148 IF (IGEO(2,IXR(1,I) )>1) THEN
149 IF( TAG_SKN( IGEO(2,IXR(1,I))) >= 0 ) THEN
150.OR..OR. IF(SPRING_TYPE==8 SPRING_TYPE==13 SPRING_TYPE== 23) NUMBER_SKEW_SP = NUMBER_SKEW_SP + 1
151 ENDIF
152 ENDIF
153 ENDDO
154
155! allocation and initialization of local array
156 ALLOCATE(SKEW_PER_SP(NUMBER_SKEW_SP))
157 ALLOCATE(LOCAL_P(NUMBER_SKEW_SP))
158
159
160
161
162 SKEW_PER_SP(1:NUMBER_SKEW_SP) = 0
163 LOCAL_P(1:NUMBER_SKEW_SP) = 0
164 NUMBER_SKEW_SP = 0
165
166! link between SPRING and SKEW (only for SPRING type =8,13 or 23)
167 DO I=1,NUMELR
168 SPRING_TYPE = IGEO( 11,IXR(1,I) )
169 MAT_TYPE = 0
170 IF (IXR(5,I) > 0) MAT_TYPE = IPM(2,IXR(5,I))
171
172 IF (R_SKEW(I) > 1) THEN
173 IF( TAG_SKN(R_SKEW(I)) >= 0) THEN
174.OR..AND. IF(SPRING_TYPE==8 (SPRING_TYPE== 23 MAT_TYPE == 108)) THEN
175 NUMBER_SKEW_SP = NUMBER_SKEW_SP + 1
176 SKEW_PER_SP( NUMBER_SKEW_SP ) = R_SKEW(I)
177 LOCAL_P(NUMBER_SKEW_SP) = CEP(OFFSET+I)+1
178 TAG_SKN( R_SKEW(I) ) = TAG_SKN( R_SKEW(I) ) + 1
179 ENDIF
180 ENDIF
181 ENDIF
182
183 IF (IGEO( 2,IXR(1,I) )>1) THEN
184 IF( TAG_SKN(IGEO(2,IXR(1,I))) >=0 ) THEN
185.OR..OR. IF(SPRING_TYPE==8 SPRING_TYPE==13 SPRING_TYPE== 23) THEN
186 NUMBER_SKEW_SP = NUMBER_SKEW_SP + 1
187 SKEW_PER_SP( NUMBER_SKEW_SP ) = IGEO( 2,IXR(1,I) )
188 LOCAL_P(NUMBER_SKEW_SP) = CEP(OFFSET+I)+1
189 TAG_SKN( IGEO(2,IXR(1,I)) ) = TAG_SKN( IGEO(2,IXR(1,I)) ) + 1
190 ENDIF
191 ENDIF
192 ENDIF
193 ENDDO
194
195! allocation of MULTIPLE_SKEW
196 DO I=1,NUMSKW+1
197 SIZE_SKEW = TAG_SKN(I)
198 IF(SIZE_SKEW>1) THEN
199.NOT. IF(ALLOCATED(MULTIPLE_SKEW(I)%PLIST)) ALLOCATE( MULTIPLE_SKEW(I)%PLIST(SIZE_SKEW) )
200 MULTIPLE_SKEW(I)%PLIST(1:SIZE_SKEW) = 0
201 ENDIF
202 ENDDO
203
204 ALLOCATE(P_SKEW(NUMSKW+1))
205 P_SKEW(1:NUMSKW+1) = 0
206
207! stick a SKEW on a given processor
208 DO J=1,NUMBER_SKEW_SP
209 I = SKEW_PER_SP(J)
210 IMAIN = LOCAL_P(J)
211 N1=ISKN(1,I)
212 N2=ISKN(2,I)
213 N3=ISKN(3,I)
214 SUM_NI = N1+N2+N3
215 IF(SUM_NI/=0) THEN
216
217 CALL IFRONTPLUS(N1,IMAIN)
218 CALL IFRONTPLUS(N2,IMAIN)
219 CALL IFRONTPLUS(N3,IMAIN)
220 IF(ISKWP(I)==0) ISKWP(I) = -IMAIN
221 IF(TAG_SKN(I)>1) THEN
222 P_SKEW(I) = P_SKEW(I) + 1
223 MULTIPLE_SKEW(I)%PLIST(P_SKEW(I)) = IMAIN
224 ELSE
225 NSKWP(IMAIN) = NSKWP(IMAIN) + 1
226 ENDIF
227 ENDIF
228 ENDDO
229
230! count and add the number of SKEW per processor in the case of multiple SPRING per SKEW
231 DO I=1,NUMSKW+1
232 SIZE_SKEW = TAG_SKN(I)
233 IF(SIZE_SKEW>1) THEN
234 PROC_SKEW(1:NSPMD) = 0
235 DO II=1,SIZE_SKEW
236 IMAIN = MULTIPLE_SKEW(I)%PLIST(II)
237 IF(IMAIN>0) PROC_SKEW(IMAIN) = PROC_SKEW(IMAIN) + 1
238 ENDDO
239 DO II=1,NSPMD
240 IF(PROC_SKEW(II)>0) NSKWP(II) = NSKWP(II) + 1
241 ENDDO
242 ENDIF
243 ENDDO
244
245! deallocation of local arrais
246 DEALLOCATE(SKEW_PER_SP,LOCAL_P)
247 DEALLOCATE(P_SKEW)
248
249 RETURN
subroutine hm_entity_reference_number(name, sname, id, ref_number)