35
36
37
38 USE skew_mod
40
41
42
43#include "implicit_f.inc"
44
45
46
47#include "tabsiz_c.inc"
48#include "com01_c.inc"
49#include "com04_c.inc"
50#include "param_c.inc"
51
52
53
54 INTEGER, INTENT(INOUT) :: NSKWP(NSPMD),R_SKEW(NUMELR)
55 INTEGER, DIMENSION(NUMSKW+NSUBMOD+1), INTENT(INOUT) :: TAG_SKN
56 INTEGER, DIMENSION(SCEP), INTENT(IN) :: CEP
57 INTEGER, DIMENSION(NUMSKW+1), INTENT(INOUT) :: ISKWP
58 INTEGER, DIMENSION(NIXR,NUMELR), INTENT(IN) :: IXR
59 INTEGER, DIMENSION(NPROPGI,NUMGEO), INTENT(IN) :: IGEO
60 INTEGER, DIMENSION(LISKN,SISKWN/LISKN), INTENT(IN) :: ISKN
61 INTEGER, DIMENSION(NPROPMI,NUMMAT), INTENT(IN) :: IPM
62 TYPE(PLIST_SKEW_), DIMENSION(NUMSKW+1), INTENT(INOUT) :: MULTIPLE_SKEW
63 INTEGER :: OFFSET
64
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 INTEGER :: I,J,II,NN
97 INTEGER :: NUMBER_SKEW_SP,SPRING_TYPE
98 INTEGER :: N1,N2,N3,IMAIN,SUM_NI,SIZE_SKEW,MAT_TYPE
99 INTEGER :: NL, ISKEW, NB
100 INTEGER, DIMENSION(:), ALLOCATABLE :: SKEW_PER_SP,LOCAL_P,P_SKEW
101 INTEGER, DIMENSION(NSPMD) :: PROC_SKEW
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125 number_skew_sp = 0
126 tag_skn(1:numskw+
nsubmod+1) = -1
127 nb = 0
128 DO i = 1,numskw
129
130
132 IF(nb == 1) tag_skn(i+1) = 0
133 ENDDO
134
135
136 DO i=1,numelr
137 spring_type = igeo( 11,ixr(1,i) )
138 mat_type = 0
139 IF (ixr(5,i) > 0) mat_type = ipm(2,ixr(5,i))
140
141 IF (r_skew(i) > 1) THEN
142 IF( tag_skn(r_skew(i)) >= 0 ) THEN
143 IF(spring_type==8 .OR. (spring_type== 23 .AND. mat_type == 108)) number_skew_sp = number_skew_sp + 1
144 ENDIF
145 ENDIF
146
147 IF (igeo(2,ixr(1,i) )>1) THEN
148 IF( tag_skn( igeo(2,ixr(1,i))) >= 0 ) THEN
149 IF(spring_type==8 .OR. spring_type==13 .OR. spring_type== 23) number_skew_sp = number_skew_sp + 1
150 ENDIF
151 ENDIF
152 ENDDO
153
154
155 ALLOCATE(skew_per_sp(number_skew_sp))
156 ALLOCATE(local_p(number_skew_sp))
157
158
159
160
161 skew_per_sp(1:number_skew_sp) = 0
162 local_p(1:number_skew_sp) = 0
163 number_skew_sp = 0
164
165
166 DO i=1,numelr
167 spring_type = igeo( 11,ixr(1,i) )
168 mat_type = 0
169 IF (ixr(5,i) > 0) mat_type = ipm(2,ixr(5,i))
170
171 IF (r_skew(i) > 1) THEN
172 IF( tag_skn(r_skew(i)) >= 0) THEN
173 IF(spring_type==8 .OR. (spring_type== 23 .AND. mat_type == 108)) THEN
174 number_skew_sp = number_skew_sp + 1
175 skew_per_sp( number_skew_sp ) = r_skew(i)
176 local_p(number_skew_sp) = cep(offset+i)+1
177 tag_skn( r_skew(i) ) = tag_skn( r_skew(i) ) + 1
178 ENDIF
179 ENDIF
180 ENDIF
181
182 IF (igeo( 2,ixr(1,i) )>1) THEN
183 IF( tag_skn(igeo(2,ixr(1,i))) >=0 ) THEN
184 IF(spring_type==8 .OR. spring_type==13 .OR. spring_type== 23) THEN
185 number_skew_sp = number_skew_sp + 1
186 skew_per_sp( number_skew_sp ) = igeo( 2,ixr(1,i) )
187 local_p(number_skew_sp) = cep(offset+i)+1
188 tag_skn( igeo(2,ixr(1,i)) ) = tag_skn( igeo(2,ixr(1,i)) ) + 1
189 ENDIF
190 ENDIF
191 ENDIF
192 ENDDO
193
194
195 DO i=1,numskw+1
196 size_skew = tag_skn(i)
197 IF(size_skew>1) THEN
198 IF(.NOT.ALLOCATED(multiple_skew(i)%PLIST)) ALLOCATE( multiple_skew(i)%PLIST(size_skew) )
199 multiple_skew(i)%PLIST(1:size_skew) = 0
200 ENDIF
201 ENDDO
202
203 ALLOCATE(p_skew(numskw+1))
204 p_skew(1:numskw+1) = 0
205
206
207 DO j=1,number_skew_sp
208 i = skew_per_sp(j)
209 imain = local_p(j)
210 n1=iskn(1,i)
211 n2=iskn(2,i)
212 n3=iskn(3,i)
213 sum_ni = n1+n2+n3
214 IF(sum_ni/=0) THEN
215
219 IF(iskwp(i)==0) iskwp(i) = -imain
220 IF(tag_skn(i)>1) THEN
221 p_skew(i) = p_skew(i) + 1
222 multiple_skew(i)%PLIST(p_skew(i)) = imain
223 ELSE
224 nskwp(imain) = nskwp(imain) + 1
225 ENDIF
226 ENDIF
227 ENDDO
228
229
230 DO i=1,numskw+1
231 size_skew = tag_skn(i)
232 IF(size_skew>1) THEN
233 proc_skew(1:nspmd) = 0
234 DO ii=1,size_skew
235 imain = multiple_skew(i)%PLIST(ii)
236 IF(imain>0) proc_skew(imain) = proc_skew(imain) + 1
237 ENDDO
238 DO ii=1,nspmd
239 IF(proc_skew(ii)>0) nskwp(ii) = nskwp(ii) + 1
240 ENDDO
241 ENDIF
242 ENDDO
243
244
245 DEALLOCATE(skew_per_sp,local_p)
246 DEALLOCATE(p_skew)
247
248 RETURN
subroutine ifrontplus(n, p)
subroutine hm_entity_reference_number(name, sname, id, ref_number)