5 &(op, x , da,typdia,xa12,xa21,typext, y,c,
6 & ikle1,ikle2,npoin,nelem,w1,w2)
83 INTEGER,
INTENT(IN) :: NELEM,NPOIN
84 INTEGER,
INTENT(IN) :: IKLE1(*),IKLE2(*)
86 DOUBLE PRECISION,
INTENT(INOUT) :: W1(*),W2(*)
87 DOUBLE PRECISION,
INTENT(INOUT) :: X(*)
88 DOUBLE PRECISION,
INTENT(IN) :: Y(*),DA(*)
89 DOUBLE PRECISION,
INTENT(IN) :: XA12(*),XA21(*)
90 DOUBLE PRECISION,
INTENT(IN) :: C
92 CHARACTER(LEN=*),
INTENT(IN) :: OP,TYPDIA,TYPEXT
101 IF(op(1:8).EQ.
'X=AY ')
THEN 105 IF(typext(1:1).EQ.
'S')
THEN 108 w1(ielem) = xa12(ielem) * y(ikle2(ielem))
109 w2(ielem) = xa12(ielem) * y(ikle1(ielem))
112 ELSEIF(typext(1:1).EQ.
'Q')
THEN 115 w1(ielem) = xa12(ielem) * y(ikle2(ielem))
116 w2(ielem) = xa21(ielem) * y(ikle1(ielem))
119 ELSEIF(typext(1:1).EQ.
'0')
THEN 121 CALL ov (
'X=C ', w1 , y , z , 0.d0 , nelem )
122 CALL ov (
'X=C ', w2 , y , z , 0.d0 , nelem )
126 WRITE(
lu,1001) typext
134 IF(typdia(1:1).EQ.
'Q')
THEN 135 CALL ov (
'X=YZ ', x , y , da , c , npoin )
136 ELSEIF(typdia(1:1).EQ.
'I')
THEN 137 CALL ov (
'X=Y ', x , y , z , c , npoin )
138 ELSEIF(typdia(1:1).EQ.
'0')
THEN 139 CALL ov (
'X=C ', x , y , da , 0.d0 , npoin )
141 WRITE(
lu,2001) typdia
148 ELSEIF(op(1:8).EQ.
'X=-AY ')
THEN 152 IF(typext(1:1).EQ.
'S')
THEN 155 w1(ielem) = - xa12(ielem) * y(ikle2(ielem))
156 w2(ielem) = - xa12(ielem) * y(ikle1(ielem))
159 ELSEIF(typext(1:1).EQ.
'Q')
THEN 162 w1(ielem) = - xa12(ielem) * y(ikle2(ielem))
163 w2(ielem) = - xa21(ielem) * y(ikle1(ielem))
166 ELSEIF(typext(1:1).EQ.
'0')
THEN 168 CALL ov (
'X=C ', w1 , y , z , 0.d0 , nelem )
169 CALL ov (
'X=C ', w2 , y , z , 0.d0 , nelem )
173 WRITE(
lu,1001) typext
181 IF(typdia(1:1).EQ.
'Q')
THEN 182 CALL ov (
'X=-YZ ', x , y , da , c , npoin )
183 ELSEIF(typdia(1:1).EQ.
'I')
THEN 184 CALL ov (
'X=-Y ', x , y , z , c , npoin )
185 ELSEIF(typdia(1:1).EQ.
'0')
THEN 186 CALL ov (
'X=C ', x , y , da , 0.d0 , npoin )
188 WRITE(
lu,2001) typdia
195 ELSEIF(op(1:8).EQ.
'X=X+AY ')
THEN 199 IF(typext(1:1).EQ.
'S')
THEN 202 w1(ielem) = w1(ielem) + xa12(ielem) * y(ikle2(ielem))
203 w2(ielem) = w2(ielem) + xa12(ielem) * y(ikle1(ielem))
206 ELSEIF(typext(1:1).EQ.
'Q')
THEN 209 w1(ielem) = w1(ielem) + xa12(ielem) * y(ikle2(ielem))
210 w2(ielem) = w2(ielem) + xa21(ielem) * y(ikle1(ielem))
213 ELSEIF(typext(1:1).NE.
'0')
THEN 215 WRITE(
lu,1001) typext
223 IF(typdia(1:1).EQ.
'Q')
THEN 224 CALL ov (
'X=X+YZ ', x , y , da , c , npoin )
225 ELSEIF(typdia(1:1).EQ.
'I')
THEN 226 CALL ov (
'X=X+Y ', x , y , z , c , npoin )
227 ELSEIF(typdia(1:1).NE.
'0')
THEN 228 WRITE(
lu,2001) typdia
235 ELSEIF(op(1:8).EQ.
'X=X-AY ')
THEN 239 IF(typext(1:1).EQ.
'S')
THEN 242 w1(ielem) = w1(ielem) - xa12(ielem) * y(ikle2(ielem))
243 w2(ielem) = w2(ielem) - xa12(ielem) * y(ikle1(ielem))
246 ELSEIF(typext(1:1).EQ.
'Q')
THEN 249 w1(ielem) = w1(ielem) - xa12(ielem) * y(ikle2(ielem))
250 w2(ielem) = w2(ielem) - xa21(ielem) * y(ikle1(ielem))
253 ELSEIF(typext(1:1).NE.
'0')
THEN 255 WRITE(
lu,1001) typext
263 IF(typdia(1:1).EQ.
'Q')
THEN 264 CALL ov (
'X=X-YZ ', x , y , da , c , npoin )
265 ELSEIF(typdia(1:1).EQ.
'I')
THEN 266 CALL ov (
'X=X-Y ', x , y , z , c , npoin )
267 ELSEIF(typdia(1:1).NE.
'0')
THEN 268 WRITE(
lu,2001) typdia
275 ELSEIF(op(1:8).EQ.
'X=X+CAY ')
THEN 279 IF(typext(1:1).EQ.
'S')
THEN 282 w1(ielem)=w1(ielem) + c * (xa12(ielem) * y(ikle2(ielem)))
283 w2(ielem)=w2(ielem) + c * (xa12(ielem) * y(ikle1(ielem)))
286 ELSEIF(typext(1:1).EQ.
'Q')
THEN 289 w1(ielem)=w1(ielem) + c * (xa12(ielem) * y(ikle2(ielem)))
290 w2(ielem)=w2(ielem) + c * (xa21(ielem) * y(ikle1(ielem)))
293 ELSEIF(typext(1:1).NE.
'0')
THEN 295 WRITE(
lu,1001) typext
303 IF(typdia(1:1).EQ.
'Q')
THEN 304 CALL ov (
'X=X+CYZ ', x , y , da , c , npoin )
305 ELSEIF(typdia(1:1).EQ.
'I')
THEN 306 CALL ov (
'X=X+CY ', x , y , z , c , npoin )
307 ELSEIF(typdia(1:1).NE.
'0')
THEN 308 WRITE(
lu,2001) typdia
315 ELSEIF(op(1:8).EQ.
'X=TAY ')
THEN 319 IF(typext(1:1).EQ.
'S')
THEN 322 w1(ielem) = xa12(ielem) * y(ikle2(ielem))
323 w2(ielem) = xa12(ielem) * y(ikle1(ielem))
326 ELSEIF(typext(1:1).EQ.
'Q')
THEN 329 w1(ielem) = + xa21(ielem) * y(ikle2(ielem))
330 w2(ielem) = + xa12(ielem) * y(ikle1(ielem))
333 ELSEIF(typext(1:1).EQ.
'0')
THEN 335 CALL ov (
'X=C ', w1 , y , z , 0.d0 , nelem )
336 CALL ov (
'X=C ', w2 , y , z , 0.d0 , nelem )
340 WRITE(
lu,1001) typext
348 IF(typdia(1:1).EQ.
'Q')
THEN 349 CALL ov (
'X=YZ ', x , y , da , c , npoin )
350 ELSEIF(typdia(1:1).EQ.
'I')
THEN 351 CALL ov (
'X=Y ', x , y , z , c , npoin )
352 ELSEIF(typdia(1:1).EQ.
'0')
THEN 353 CALL ov (
'X=C ', x , y , da , 0.d0 , npoin )
355 WRITE(
lu,2001) typdia
362 ELSEIF(op(1:8).EQ.
'X=-TAY ')
THEN 366 IF(typext(1:1).EQ.
'S')
THEN 369 w1(ielem) = - xa12(ielem) * y(ikle2(ielem))
370 w2(ielem) = - xa12(ielem) * y(ikle1(ielem))
373 ELSEIF(typext(1:1).EQ.
'Q')
THEN 376 w1(ielem) = - xa21(ielem) * y(ikle2(ielem))
377 w2(ielem) = - xa12(ielem) * y(ikle1(ielem))
380 ELSEIF(typext(1:1).EQ.
'0')
THEN 382 CALL ov (
'X=C ', w1 , y , z , 0.d0 , nelem )
383 CALL ov (
'X=C ', w2 , y , z , 0.d0 , nelem )
387 WRITE(
lu,1001) typext
395 IF(typdia(1:1).EQ.
'Q')
THEN 396 CALL ov (
'X=-YZ ', x , y , da , c , npoin )
397 ELSEIF(typdia(1:1).EQ.
'I')
THEN 398 CALL ov (
'X=-Y ', x , y , z , c , npoin )
399 ELSEIF(typdia(1:1).EQ.
'0')
THEN 400 CALL ov (
'X=C ', x , y , da , 0.d0 , npoin )
402 WRITE(
lu,2001) typdia
409 ELSEIF(op(1:8).EQ.
'X=X+TAY ')
THEN 413 IF(typext(1:1).EQ.
'S')
THEN 416 w1(ielem) = w1(ielem) + xa12(ielem) * y(ikle2(ielem))
417 w2(ielem) = w2(ielem) + xa12(ielem) * y(ikle1(ielem))
420 ELSEIF(typext(1:1).EQ.
'Q')
THEN 423 w1(ielem) = w1(ielem) + xa21(ielem) * y(ikle2(ielem))
424 w2(ielem) = w2(ielem) + xa12(ielem) * y(ikle1(ielem))
427 ELSEIF(typext(1:1).NE.
'0')
THEN 429 WRITE(
lu,1001) typext
437 IF(typdia(1:1).EQ.
'Q')
THEN 438 CALL ov (
'X=X+YZ ', x , y , da , c , npoin )
439 ELSEIF(typdia(1:1).EQ.
'I')
THEN 440 CALL ov (
'X=X+Y ', x , y , z , c , npoin )
441 ELSEIF(typdia(1:1).NE.
'0')
THEN 442 WRITE(
lu,2001) typdia
449 ELSEIF(op(1:8).EQ.
'X=X-TAY ')
THEN 453 IF(typext(1:1).EQ.
'S')
THEN 456 w1(ielem) = w1(ielem) - xa12(ielem) * y(ikle2(ielem))
457 w2(ielem) = w2(ielem) - xa12(ielem) * y(ikle1(ielem))
460 ELSEIF(typext(1:1).EQ.
'Q')
THEN 463 w1(ielem) = w1(ielem) - xa21(ielem) * y(ikle2(ielem))
464 w2(ielem) = w2(ielem) - xa12(ielem) * y(ikle1(ielem))
467 ELSEIF(typext(1:1).NE.
'0')
THEN 469 WRITE(
lu,1001) typext
477 IF(typdia(1:1).EQ.
'Q')
THEN 478 CALL ov (
'X=X-YZ ', x , y , da , c , npoin )
479 ELSEIF(typdia(1:1).EQ.
'I')
THEN 480 CALL ov (
'X=X-Y ', x , y , z , c , npoin )
481 ELSEIF(typdia(1:1).NE.
'0')
THEN 482 WRITE(
lu,2001) typdia
489 ELSEIF(op(1:8).EQ.
'X=X+CTAY')
THEN 493 IF(typext(1:1).EQ.
'S')
THEN 496 w1(ielem) = w1(ielem) + c*(xa12(ielem) * y(ikle2(ielem)))
497 w2(ielem) = w2(ielem) + c*(xa12(ielem) * y(ikle1(ielem)))
500 ELSEIF(typext(1:1).EQ.
'Q')
THEN 503 w1(ielem) = w1(ielem) + c*(xa21(ielem) * y(ikle2(ielem)))
504 w2(ielem) = w2(ielem) + c*(xa12(ielem) * y(ikle1(ielem)))
507 ELSEIF(typext(1:1).NE.
'0')
THEN 509 WRITE(
lu,1001) typext
517 IF(typdia(1:1).EQ.
'Q')
THEN 518 CALL ov (
'X=X+CYZ ', x , y , da , c , npoin )
519 ELSEIF(typdia(1:1).EQ.
'I')
THEN 520 CALL ov (
'X=X+CY ', x , y , z , c , npoin )
521 ELSEIF(typdia(1:1).NE.
'0')
THEN 522 WRITE(
lu,2001) typdia
543 1001
FORMAT(1x,
'MV0202 (BIEF) : EXTRADIAG. TERMS UNKNOWN TYPE : ',a1)
544 2001
FORMAT(1x,
'MV0202 (BIEF) : DIAGONAL : UNKNOWN TYPE : ',a1)
545 3001
FORMAT(1x,
'MV0202 (BIEF) : UNKNOWN OPERATION : ',a8)
subroutine ov(OP, X, Y, Z, C, DIM1)
subroutine mv0202(OP, X, DA, TYPDIA, XA12, XA21, TYPEXT, Y, C, IKLE1, IKLE2, NPOIN, NELEM, W1, W2)