5 &(op , dm,typdim,xm,typexm, dn,typdin,xn,typexn, c,
6 & nulone,nelbor,nbor,nelmax,ndiag,nptfr,nelebx,neleb)
132 INTEGER,
INTENT(IN) :: NELMAX,NDIAG,NPTFR,NELEBX,NELEB
133 CHARACTER(LEN=8),
INTENT(IN) :: OP
134 INTEGER,
INTENT(IN) :: NULONE(nelebx),NELBOR(nelebx)
135 INTEGER,
INTENT(IN) :: NBOR(*)
136 DOUBLE PRECISION,
INTENT(IN) :: DN(*),XN(*)
137 DOUBLE PRECISION,
INTENT(INOUT) :: DM(*),XM(nelmax,*)
138 CHARACTER(LEN=1),
INTENT(INOUT) :: TYPDIM,TYPEXM,TYPDIN,TYPEXN
139 DOUBLE PRECISION,
INTENT(IN) :: C
145 DOUBLE PRECISION Z(1)
149 INTEGER :: CORNSY(6,6)
150 parameter( cornsy = reshape( (/
151 & 1 , 6 , 17, 0 , 0 , 0 ,
152 & 3 , 8 , 12, 0 , 0 , 0 ,
153 & 7 , 11, 5 , 0 , 0 , 0 ,
154 & 16, 21, 2 , 0 , 0 , 0 ,
155 & 18, 23, 27, 0 , 0 , 0 ,
156 & 22, 26, 20, 0 , 0 , 0 /), shape=(/ 6,6 /) ) )
157 INTEGER :: CORSYM(6,3)
158 parameter( corsym = reshape( (/
159 & 1 , 6 , 2 , 0 , 0 , 0 ,
160 & 3 , 8 , 12, 0 , 0 , 0 ,
161 & 7 , 11, 5 , 0 , 0 , 0 /), shape=(/ 6,3 /) ) )
165 IF(op(1:8).EQ.
'M=M+N ')
THEN 167 IF(typdim.EQ.
'Q'.AND.typdim.EQ.
'Q'.AND.ndiag.GE.nptfr)
THEN 168 CALL ovdb(
'X=X+Y ' , dm , dn , z , c , nbor , nptfr )
170 WRITE(
lu,199) typdim(1:1),op(1:8),typdin(1:1)
171 199
FORMAT(1x,
'OM1302 (BIEF) : TYPDIM = ',a1,
' NOT IMPLEMENTED',
172 & /,1x,
'FOR THE OPERATION : ',a8,
' WITH TYPDIN = ',a1)
177 IF(typexm(1:1).EQ.
'Q'.AND.typexn(1:1).EQ.
'Q')
THEN 183 xm( iel , cornsy(nulone(k),1) ) =
184 & xm( iel , cornsy(nulone(k),1) ) + xn(k)
185 xm( iel , cornsy(nulone(k),2) ) =
186 & xm( iel , cornsy(nulone(k),2) ) + xn(k+nelebx)
187 xm( iel , cornsy(nulone(k),3) ) =
188 & xm( iel , cornsy(nulone(k),3) ) + xn(k+2*nelebx)
189 xm( iel , cornsy(nulone(k),4) ) =
190 & xm( iel , cornsy(nulone(k),4) ) + xn(k+3*nelebx)
191 xm( iel , cornsy(nulone(k),5) ) =
192 & xm( iel , cornsy(nulone(k),5) ) + xn(k+4*nelebx)
193 xm( iel , cornsy(nulone(k),6) ) =
194 & xm( iel , cornsy(nulone(k),6) ) + xn(k+5*nelebx)
198 ELSEIF(typexm(1:1).EQ.
'Q'.AND.typexn(1:1).EQ.
'S')
THEN 204 xm( iel , cornsy(nulone(k),1) ) =
205 & xm( iel , cornsy(nulone(k),1) ) + xn(k)
206 xm( iel , cornsy(nulone(k),2) ) =
207 & xm( iel , cornsy(nulone(k),2) ) + xn(k+nelebx)
208 xm( iel , cornsy(nulone(k),3) ) =
209 & xm( iel , cornsy(nulone(k),3) ) + xn(k+2*nelebx)
210 xm( iel , cornsy(nulone(k),4) ) =
211 & xm( iel , cornsy(nulone(k),4) ) + xn(k)
212 xm( iel , cornsy(nulone(k),5) ) =
213 & xm( iel , cornsy(nulone(k),5) ) + xn(k+nelebx)
214 xm( iel , cornsy(nulone(k),6) ) =
215 & xm( iel , cornsy(nulone(k),6) ) + xn(k+2*nelebx)
218 ELSEIF(typexm(1:1).EQ.
'S'.AND.typexn(1:1).EQ.
'S')
THEN 224 xm( iel , corsym(nulone(k),1) ) =
225 & xm( iel , corsym(nulone(k),1) ) + xn(k)
226 xm( iel , corsym(nulone(k),2) ) =
227 & xm( iel , corsym(nulone(k),2) ) + xn(k+nelebx)
228 xm( iel , corsym(nulone(k),3) ) =
229 & xm( iel , corsym(nulone(k),3) ) + xn(k+2*nelebx)
232 WRITE(
lu,99) typexm(1:1),op(1:8),typexn(1:1)
233 99
FORMAT(1x,
'OM1302 (BIEF) : TYPEXM = ',a1,
' DOES NOT GO',
234 & /,1x,
'FOR THE OPERATION : ',a8,
' WITH TYPEXN = ',a1)
241 ELSEIF(op(1:8).EQ.
'M=M+TN ')
THEN 243 CALL ovdb(
'X=X+Y ' , dm , dn , z , c , nbor , nptfr )
245 IF(typexm(1:1).EQ.
'Q'.AND.typexn(1:1).EQ.
'Q')
THEN 251 xm( iel , cornsy(nulone(k),1) ) =
252 & xm( iel , cornsy(nulone(k),1) ) + xn(k+3*nelebx)
253 xm( iel , cornsy(nulone(k),2) ) =
254 & xm( iel , cornsy(nulone(k),2) ) + xn(k+4*nelebx)
255 xm( iel , cornsy(nulone(k),3) ) =
256 & xm( iel , cornsy(nulone(k),3) ) + xn(k+5*nelebx)
257 xm( iel , cornsy(nulone(k),4) ) =
258 & xm( iel , cornsy(nulone(k),4) ) + xn(k)
259 xm( iel , cornsy(nulone(k),5) ) =
260 & xm( iel , cornsy(nulone(k),5) ) + xn(k+nelebx)
261 xm( iel , cornsy(nulone(k),6) ) =
262 & xm( iel , cornsy(nulone(k),6) ) + xn(k+2*nelebx)
265 ELSEIF(typexm(1:1).EQ.
'Q'.AND.typexn(1:1).EQ.
'S')
THEN 271 xm( iel , cornsy(nulone(k),1) ) =
272 & xm( iel , cornsy(nulone(k),1) ) + xn(k)
273 xm( iel , cornsy(nulone(k),2) ) =
274 & xm( iel , cornsy(nulone(k),2) ) + xn(k+nelebx)
275 xm( iel , cornsy(nulone(k),3) ) =
276 & xm( iel , cornsy(nulone(k),3) ) + xn(k+2*nelebx)
277 xm( iel , cornsy(nulone(k),4) ) =
278 & xm( iel , cornsy(nulone(k),4) ) + xn(k)
279 xm( iel , cornsy(nulone(k),5) ) =
280 & xm( iel , cornsy(nulone(k),5) ) + xn(k+nelebx)
281 xm( iel , cornsy(nulone(k),6) ) =
282 & xm( iel , cornsy(nulone(k),6) ) + xn(k+2*nelebx)
285 ELSEIF(typexm(1:1).EQ.
'S'.AND.typexn(1:1).EQ.
'S')
THEN 291 xm( iel , corsym(nulone(k),1) ) =
292 & xm( iel , corsym(nulone(k),1) ) + xn(k)
293 xm( iel , corsym(nulone(k),2) ) =
294 & xm( iel , corsym(nulone(k),2) ) + xn(k+nelebx)
295 xm( iel , corsym(nulone(k),3) ) =
296 & xm( iel , corsym(nulone(k),3) ) + xn(k+2*nelebx)
300 WRITE(
lu,99) typexm(1:1),op(1:8),typexn(1:1)
310 141
FORMAT(1x,
'OM1302 (BIEF) : UNKNOWN OPERATION : ',a8)
subroutine ovdb(OP, X, Y, Z, C, NBOR, NPTFR)
subroutine om1302(OP, DM, TYPDIM, XM, TYPEXM, DN, TYPDIN, XN, TYPEXN, C, NULONE, NELBOR, NBOR, NELMAX, NDIAG, NPTFR, NELEBX, NELEB)