6 & xa12,xa13,xa14,xa21,xa23,xa24,xa31,xa32,xa34,xa41,xa42,xa43,
7 & typext, y,c,ikle1,ikle2,ikle3,ikle4,npoin,nelem,w1,w2,w3,w4)
98 INTEGER,
INTENT(IN) :: NELEM,NPOIN
100 INTEGER,
INTENT(IN) :: IKLE1(*),IKLE2(*),IKLE3(*),IKLE4(*)
102 DOUBLE PRECISION,
INTENT(INOUT) :: W1(*),W2(*),W3(*),W4(*)
103 DOUBLE PRECISION,
INTENT(IN) :: Y(*),DA(*)
104 DOUBLE PRECISION,
INTENT(INOUT) :: X(*)
105 DOUBLE PRECISION,
INTENT(IN) :: XA12(*),XA13(*),XA14(*)
106 DOUBLE PRECISION,
INTENT(IN) :: XA21(*),XA23(*),XA24(*)
107 DOUBLE PRECISION,
INTENT(IN) :: XA31(*),XA32(*),XA34(*)
108 DOUBLE PRECISION,
INTENT(IN) :: XA41(*),XA42(*),XA43(*)
109 DOUBLE PRECISION,
INTENT(IN) :: C
111 CHARACTER(LEN=8),
INTENT(IN) :: OP
112 CHARACTER(LEN=1),
INTENT(IN) :: TYPDIA,TYPEXT
117 DOUBLE PRECISION Z(1)
121 IF(op(1:8).EQ.
'X=AY ')
THEN 125 IF(typext(1:1).EQ.
'Q'.OR.typext(1:1).EQ.
'S')
THEN 128 w1(ielem) = xa12(ielem) * y(ikle2(ielem))
129 & + xa13(ielem) * y(ikle3(ielem))
130 & + xa14(ielem) * y(ikle4(ielem))
131 w2(ielem) = xa21(ielem) * y(ikle1(ielem))
132 & + xa23(ielem) * y(ikle3(ielem))
133 & + xa24(ielem) * y(ikle4(ielem))
134 w3(ielem) = xa31(ielem) * y(ikle1(ielem))
135 & + xa32(ielem) * y(ikle2(ielem))
136 & + xa34(ielem) * y(ikle4(ielem))
137 w4(ielem) = xa41(ielem) * y(ikle1(ielem))
138 & + xa42(ielem) * y(ikle2(ielem))
139 & + xa43(ielem) * y(ikle3(ielem))
142 ELSEIF(typext(1:1).EQ.
'0')
THEN 144 CALL ov (
'X=C ', w1 , y , z , 0.d0 , nelem )
145 CALL ov (
'X=C ', w2 , y , z , 0.d0 , nelem )
146 CALL ov (
'X=C ', w3 , y , z , 0.d0 , nelem )
147 CALL ov (
'X=C ', w4 , y , z , 0.d0 , nelem )
151 WRITE(
lu,1001) typext
159 IF(typdia(1:1).EQ.
'Q')
THEN 160 CALL ov (
'X=YZ ', x , y , da , c , npoin )
161 ELSEIF(typdia(1:1).EQ.
'I')
THEN 162 CALL ov (
'X=Y ', x , y , z , c , npoin )
163 ELSEIF(typdia(1:1).EQ.
'0')
THEN 164 CALL ov (
'X=C ', x , y , z , 0.d0 , npoin )
166 WRITE(
lu,2001) typdia
173 ELSEIF(op(1:8).EQ.
'X=CAY ')
THEN 177 IF(typext(1:1).EQ.
'Q'.OR.typext(1:1).EQ.
'S')
THEN 180 w1(ielem) = c * ( xa12(ielem) * y(ikle2(ielem))
181 & + xa13(ielem) * y(ikle3(ielem))
182 & + xa14(ielem) * y(ikle4(ielem)) )
183 w2(ielem) = c * ( xa21(ielem) * y(ikle1(ielem))
184 & + xa23(ielem) * y(ikle3(ielem))
185 & + xa24(ielem) * y(ikle4(ielem)) )
186 w3(ielem) = c * ( xa31(ielem) * y(ikle1(ielem))
187 & + xa32(ielem) * y(ikle2(ielem))
188 & + xa34(ielem) * y(ikle4(ielem)) )
189 w4(ielem) = c * ( xa41(ielem) * y(ikle1(ielem))
190 & + xa42(ielem) * y(ikle2(ielem))
191 & + xa43(ielem) * y(ikle3(ielem)) )
194 ELSEIF(typext(1:1).EQ.
'0')
THEN 196 CALL ov (
'X=C ', w1 , y , z , 0.d0 , nelem )
197 CALL ov (
'X=C ', w2 , y , z , 0.d0 , nelem )
198 CALL ov (
'X=C ', w3 , y , z , 0.d0 , nelem )
199 CALL ov (
'X=C ', w4 , y , z , 0.d0 , nelem )
203 WRITE(
lu,1001) typext
211 IF(typdia(1:1).EQ.
'Q')
THEN 212 CALL ov (
'X=CYZ ', x , y , da , c , npoin )
213 ELSEIF(typdia(1:1).EQ.
'I')
THEN 214 CALL ov (
'X=CY ', x , y , z , c , npoin )
215 ELSEIF(typdia(1:1).EQ.
'0')
THEN 216 CALL ov (
'X=C ', x , y , z , 0.d0 , npoin )
218 WRITE(
lu,2001) typdia
225 ELSEIF(op(1:8).EQ.
'X=-AY ')
THEN 229 IF(typext(1:1).EQ.
'Q'.OR.typext(1:1).NE.
'S')
THEN 232 w1(ielem) = - xa12(ielem) * y(ikle2(ielem))
233 & - xa13(ielem) * y(ikle3(ielem))
234 & - xa14(ielem) * y(ikle4(ielem))
235 w2(ielem) = - xa21(ielem) * y(ikle1(ielem))
236 & - xa23(ielem) * y(ikle3(ielem))
237 & - xa24(ielem) * y(ikle4(ielem))
238 w3(ielem) = - xa31(ielem) * y(ikle1(ielem))
239 & - xa32(ielem) * y(ikle2(ielem))
240 & - xa34(ielem) * y(ikle4(ielem))
241 w4(ielem) = - xa41(ielem) * y(ikle1(ielem))
242 & - xa42(ielem) * y(ikle2(ielem))
243 & - xa43(ielem) * y(ikle3(ielem))
246 ELSEIF(typext(1:1).EQ.
'0')
THEN 248 CALL ov (
'X=C ', w1 , y , z , 0.d0 , nelem )
249 CALL ov (
'X=C ', w2 , y , z , 0.d0 , nelem )
250 CALL ov (
'X=C ', w3 , y , z , 0.d0 , nelem )
251 CALL ov (
'X=C ', w4 , y , z , 0.d0 , nelem )
255 WRITE(
lu,1001) typext
263 IF(typdia(1:1).EQ.
'Q')
THEN 264 CALL ov (
'X=-YZ ', x , y , da , c , npoin )
265 ELSEIF(typdia(1:1).EQ.
'I')
THEN 266 CALL ov (
'X=-Y ', x , y , z , c , npoin )
267 ELSEIF(typdia(1:1).EQ.
'0')
THEN 268 CALL ov (
'X=C ', x , y , z , 0.d0 , npoin )
270 WRITE(
lu,2001) typdia
277 ELSEIF(op(1:8).EQ.
'X=X+AY ')
THEN 281 IF(typext(1:1).EQ.
'Q'.OR.typext(1:1).EQ.
'S')
THEN 284 w1(ielem) = w1(ielem) + xa12(ielem) * y(ikle2(ielem))
285 & + xa13(ielem) * y(ikle3(ielem))
286 & + xa14(ielem) * y(ikle4(ielem))
287 w2(ielem) = w2(ielem) + xa21(ielem) * y(ikle1(ielem))
288 & + xa23(ielem) * y(ikle3(ielem))
289 & + xa24(ielem) * y(ikle4(ielem))
290 w3(ielem) = w3(ielem) + xa31(ielem) * y(ikle1(ielem))
291 & + xa32(ielem) * y(ikle2(ielem))
292 & + xa34(ielem) * y(ikle4(ielem))
293 w4(ielem) = w4(ielem) + xa41(ielem) * y(ikle1(ielem))
294 & + xa42(ielem) * y(ikle2(ielem))
295 & + xa43(ielem) * y(ikle3(ielem))
298 ELSEIF(typext(1:1).NE.
'0')
THEN 300 WRITE(
lu,1001) typext
308 IF(typdia(1:1).EQ.
'Q')
THEN 309 CALL ov (
'X=X+YZ ', x , y , da , c , npoin )
310 ELSEIF(typdia(1:1).EQ.
'I')
THEN 311 CALL ov (
'X=X+Y ', x , y , z , c , npoin )
312 ELSEIF(typdia(1:1).NE.
'0')
THEN 313 WRITE(
lu,2001) typdia
320 ELSEIF(op(1:8).EQ.
'X=X-AY ')
THEN 324 IF(typext(1:1).EQ.
'Q'.OR.typext(1:1).EQ.
'S')
THEN 327 w1(ielem) = w1(ielem) - xa12(ielem) * y(ikle2(ielem))
328 & - xa13(ielem) * y(ikle3(ielem))
329 & - xa14(ielem) * y(ikle4(ielem))
330 w2(ielem) = w2(ielem) - xa21(ielem) * y(ikle1(ielem))
331 & - xa23(ielem) * y(ikle3(ielem))
332 & - xa24(ielem) * y(ikle4(ielem))
333 w3(ielem) = w3(ielem) - xa31(ielem) * y(ikle1(ielem))
334 & - xa32(ielem) * y(ikle2(ielem))
335 & - xa34(ielem) * y(ikle4(ielem))
336 w4(ielem) = w4(ielem) - xa41(ielem) * y(ikle1(ielem))
337 & - xa42(ielem) * y(ikle2(ielem))
338 & - xa43(ielem) * y(ikle3(ielem))
341 ELSEIF(typext(1:1).NE.
'0')
THEN 343 WRITE(
lu,1001) typext
351 IF(typdia(1:1).EQ.
'Q')
THEN 352 CALL ov (
'X=X-YZ ', x , y , da , c , npoin )
353 ELSEIF(typdia(1:1).EQ.
'I')
THEN 354 CALL ov (
'X=X-Y ', x , y , z , c , npoin )
355 ELSEIF(typdia(1:1).NE.
'0')
THEN 356 WRITE(
lu,2001) typdia
363 ELSEIF(op(1:8).EQ.
'X=X+CAY ')
THEN 367 IF(typext(1:1).EQ.
'Q'.OR.typext(1:1).EQ.
'S')
THEN 370 w1(ielem) = w1(ielem)
371 & + c * ( xa12(ielem) * y(ikle2(ielem))
372 & + xa13(ielem) * y(ikle3(ielem))
373 & + xa14(ielem) * y(ikle4(ielem)) )
374 w2(ielem) = w2(ielem)
375 & + c * ( xa21(ielem) * y(ikle1(ielem))
376 & + xa23(ielem) * y(ikle3(ielem))
377 & + xa24(ielem) * y(ikle4(ielem)) )
378 w3(ielem) = w3(ielem)
379 & + c * ( xa31(ielem) * y(ikle1(ielem))
380 & + xa32(ielem) * y(ikle2(ielem))
381 & + xa34(ielem) * y(ikle4(ielem)) )
382 w4(ielem) = w4(ielem)
383 & + c * ( xa41(ielem) * y(ikle1(ielem))
384 & + xa42(ielem) * y(ikle2(ielem))
385 & + xa43(ielem) * y(ikle3(ielem)) )
388 ELSEIF(typext(1:1).NE.
'0')
THEN 390 WRITE(
lu,1001) typext
398 IF(typdia(1:1).EQ.
'Q')
THEN 399 CALL ov (
'X=X+CYZ ', x , y , da , c , npoin )
400 ELSEIF(typdia(1:1).EQ.
'I')
THEN 401 CALL ov (
'X=X+CY ', x , y , z , c , npoin )
402 ELSEIF(typdia(1:1).NE.
'0')
THEN 403 WRITE(
lu,2001) typdia
410 ELSEIF(op(1:8).EQ.
'X=TAY ')
THEN 414 IF(typext(1:1).EQ.
'Q'.OR.typext(1:1).EQ.
'S')
THEN 417 w1(ielem) = + xa21(ielem) * y(ikle2(ielem))
418 & + xa31(ielem) * y(ikle3(ielem))
419 & + xa41(ielem) * y(ikle4(ielem))
420 w2(ielem) = + xa12(ielem) * y(ikle1(ielem))
421 & + xa32(ielem) * y(ikle3(ielem))
422 & + xa42(ielem) * y(ikle4(ielem))
423 w3(ielem) = + xa13(ielem) * y(ikle1(ielem))
424 & + xa23(ielem) * y(ikle2(ielem))
425 & + xa43(ielem) * y(ikle4(ielem))
426 w4(ielem) = + xa14(ielem) * y(ikle1(ielem))
427 & + xa24(ielem) * y(ikle2(ielem))
428 & + xa34(ielem) * y(ikle3(ielem))
431 ELSEIF(typext(1:1).EQ.
'0')
THEN 433 CALL ov (
'X=C ', w1 , y , z , 0.d0 , nelem )
434 CALL ov (
'X=C ', w2 , y , z , 0.d0 , nelem )
435 CALL ov (
'X=C ', w3 , y , z , 0.d0 , nelem )
436 CALL ov (
'X=C ', w4 , y , z , 0.d0 , nelem )
440 WRITE(
lu,1001) typext
448 IF(typdia(1:1).EQ.
'Q')
THEN 449 CALL ov (
'X=YZ ', x , y , da , c , npoin )
450 ELSEIF(typdia(1:1).EQ.
'I')
THEN 451 CALL ov (
'X=Y ', x , y , z , c , npoin )
452 ELSEIF(typdia(1:1).EQ.
'0')
THEN 453 CALL ov (
'X=C ', x , y , da , 0.d0 , npoin )
455 WRITE(
lu,2001) typdia
462 ELSEIF(op(1:8).EQ.
'X=-TAY ')
THEN 466 IF(typext(1:1).EQ.
'Q'.OR.typext(1:1).EQ.
'S')
THEN 469 w1(ielem) = - xa21(ielem) * y(ikle2(ielem))
470 & - xa31(ielem) * y(ikle3(ielem))
471 & - xa41(ielem) * y(ikle4(ielem))
472 w2(ielem) = - xa12(ielem) * y(ikle1(ielem))
473 & - xa32(ielem) * y(ikle3(ielem))
474 & - xa42(ielem) * y(ikle4(ielem))
475 w3(ielem) = - xa13(ielem) * y(ikle1(ielem))
476 & - xa23(ielem) * y(ikle2(ielem))
477 & - xa43(ielem) * y(ikle4(ielem))
478 w4(ielem) = - xa14(ielem) * y(ikle1(ielem))
479 & - xa24(ielem) * y(ikle2(ielem))
480 & - xa34(ielem) * y(ikle3(ielem))
483 ELSEIF(typext(1:1).EQ.
'0')
THEN 485 CALL ov (
'X=C ', w1 , y , z , 0.d0 , nelem )
486 CALL ov (
'X=C ', w2 , y , z , 0.d0 , nelem )
487 CALL ov (
'X=C ', w3 , y , z , 0.d0 , nelem )
488 CALL ov (
'X=C ', w4 , y , z , 0.d0 , nelem )
492 WRITE(
lu,1001) typext
500 IF(typdia(1:1).EQ.
'Q')
THEN 501 CALL ov (
'X=-YZ ', x , y , da , c , npoin )
502 ELSEIF(typdia(1:1).EQ.
'I')
THEN 503 CALL ov (
'X=-Y ', x , y , z , c , npoin )
504 ELSEIF(typdia(1:1).EQ.
'0')
THEN 505 CALL ov (
'X=C ', x , y , da , 0.d0 , npoin )
507 WRITE(
lu,2001) typdia
514 ELSEIF(op(1:8).EQ.
'X=X+TAY ')
THEN 518 IF(typext(1:1).EQ.
'Q'.OR.typext(1:1).EQ.
'S')
THEN 521 w1(ielem) = w1(ielem) + xa21(ielem) * y(ikle2(ielem))
522 & + xa31(ielem) * y(ikle3(ielem))
523 & + xa41(ielem) * y(ikle4(ielem))
524 w2(ielem) = w2(ielem) + xa12(ielem) * y(ikle1(ielem))
525 & + xa32(ielem) * y(ikle3(ielem))
526 & + xa42(ielem) * y(ikle4(ielem))
527 w3(ielem) = w3(ielem) + xa13(ielem) * y(ikle1(ielem))
528 & + xa23(ielem) * y(ikle2(ielem))
529 & + xa43(ielem) * y(ikle4(ielem))
530 w4(ielem) = w4(ielem) + xa14(ielem) * y(ikle1(ielem))
531 & + xa24(ielem) * y(ikle2(ielem))
532 & + xa34(ielem) * y(ikle3(ielem))
535 ELSEIF(typext(1:1).NE.
'0')
THEN 537 WRITE(
lu,1001) typext
545 IF(typdia(1:1).EQ.
'Q')
THEN 546 CALL ov (
'X=X+YZ ', x , y , da , c , npoin )
547 ELSEIF(typdia(1:1).EQ.
'I')
THEN 548 CALL ov (
'X=X+Y ', x , y , z , c , npoin )
549 ELSEIF(typdia(1:1).NE.
'0')
THEN 550 WRITE(
lu,2001) typdia
557 ELSEIF(op(1:8).EQ.
'X=X-TAY ')
THEN 561 IF(typext(1:1).EQ.
'Q'.OR.typext(1:1).EQ.
'S')
THEN 564 w1(ielem) = w1(ielem) - xa21(ielem) * y(ikle2(ielem))
565 & - xa31(ielem) * y(ikle3(ielem))
566 & - xa41(ielem) * y(ikle4(ielem))
567 w2(ielem) = w2(ielem) - xa12(ielem) * y(ikle1(ielem))
568 & - xa32(ielem) * y(ikle3(ielem))
569 & - xa42(ielem) * y(ikle4(ielem))
570 w3(ielem) = w3(ielem) - xa13(ielem) * y(ikle1(ielem))
571 & - xa23(ielem) * y(ikle2(ielem))
572 & - xa43(ielem) * y(ikle4(ielem))
573 w4(ielem) = w4(ielem) - xa14(ielem) * y(ikle1(ielem))
574 & - xa24(ielem) * y(ikle2(ielem))
575 & - xa34(ielem) * y(ikle3(ielem))
578 ELSEIF(typext(1:1).NE.
'0')
THEN 580 WRITE(
lu,1001) typext
588 IF(typdia(1:1).EQ.
'Q')
THEN 589 CALL ov (
'X=X-YZ ', x , y , da , c , npoin )
590 ELSEIF(typdia(1:1).EQ.
'I')
THEN 591 CALL ov (
'X=X-Y ', x , y , z , c , npoin )
592 ELSEIF(typdia(1:1).NE.
'0')
THEN 593 WRITE(
lu,2001) typdia
600 ELSEIF(op(1:8).EQ.
'X=X+CTAY')
THEN 604 IF(typext(1:1).EQ.
'Q'.OR.typext(1:1).EQ.
'S')
THEN 607 w1(ielem) = w1(ielem)
608 & + c * ( + xa21(ielem) * y(ikle2(ielem))
609 & + xa31(ielem) * y(ikle3(ielem))
610 & + xa41(ielem) * y(ikle4(ielem)) )
611 w2(ielem) = w2(ielem)
612 & + c * ( + xa12(ielem) * y(ikle1(ielem))
613 & + xa32(ielem) * y(ikle3(ielem))
614 & + xa42(ielem) * y(ikle4(ielem)) )
615 w3(ielem) = w3(ielem)
616 & + c * ( + xa13(ielem) * y(ikle1(ielem))
617 & + xa23(ielem) * y(ikle2(ielem))
618 & + xa43(ielem) * y(ikle4(ielem)) )
619 w4(ielem) = w4(ielem)
620 & + c * ( + xa14(ielem) * y(ikle1(ielem))
621 & + xa24(ielem) * y(ikle2(ielem))
622 & + xa34(ielem) * y(ikle3(ielem)) )
625 ELSEIF(typext(1:1).NE.
'0')
THEN 627 WRITE(
lu,1001) typext
635 IF(typdia(1:1).EQ.
'Q')
THEN 636 CALL ov (
'X=X+CYZ ', x , y , da , c , npoin )
637 ELSEIF(typdia(1:1).EQ.
'I')
THEN 638 CALL ov (
'X=X+CY ', x , y , z , c , npoin )
639 ELSEIF(typdia(1:1).NE.
'0')
THEN 640 WRITE(
lu,2001) typdia
661 1001
FORMAT(1x,
'MV0404 (BIEF) : EXTRADIAG. TERMS UNKNOWN TYPE : ',a1)
662 2001
FORMAT(1x,
'MV0404 (BIEF) : DIAGONAL : UNKNOWN TYPE : ',a1)
663 3001
FORMAT(1x,
'MV0404 (BIEF) : UNKNOWN OPERATION : ',a8)
subroutine ov(OP, X, Y, Z, C, DIM1)
subroutine mv0404(OP, X, DA, TYPDIA, XA12, XA13, XA14, XA21, XA23, XA24, XA31, XA32, XA34, XA41, XA42, XA43, TYPEXT, Y, C, IKLE1, IKLE2, IKLE3, IKLE4, NPOIN, NELEM, W1, W2, W3, W4)