5 &(op, x , da,typdia,xa,typext, y,c,ikle1,ikle2,ikle3,ikle4,
6 & npoin,nelem,w1,w2,w3,w4,dim1xa)
89 INTEGER,
INTENT(IN) :: NELEM,NPOIN,DIM1XA
91 INTEGER,
INTENT(IN) :: IKLE1(*),IKLE2(*),IKLE3(*),IKLE4(*)
93 DOUBLE PRECISION,
INTENT(INOUT) :: W1(*),W2(*),W3(*),W4(*)
94 DOUBLE PRECISION,
INTENT(IN) :: Y(*),DA(*)
95 DOUBLE PRECISION,
INTENT(INOUT) :: X(*)
96 DOUBLE PRECISION,
INTENT(IN) :: XA(dim1xa,*)
97 DOUBLE PRECISION,
INTENT(IN) :: C
99 CHARACTER(LEN=8),
INTENT(IN) :: OP
100 CHARACTER(LEN=1),
INTENT(IN) :: TYPDIA,TYPEXT
105 DOUBLE PRECISION Z(1)
109 IF(op(1:8).EQ.
'X=AY ')
THEN 113 IF(typext(1:1).EQ.
'Q'.OR.typext(1:1).EQ.
'S')
THEN 116 w1(ielem) = xa(1,ielem) * y(ikle2(ielem))
117 & + xa(2,ielem) * y(ikle3(ielem))
118 & + xa(3,ielem) * y(ikle4(ielem))
119 w2(ielem) = xa(7,ielem) * y(ikle1(ielem))
120 & + xa(4,ielem) * y(ikle3(ielem))
121 & + xa(5,ielem) * y(ikle4(ielem))
122 w3(ielem) = xa(8,ielem) * y(ikle1(ielem))
123 & + xa(10,ielem) * y(ikle2(ielem))
124 & + xa(6,ielem) * y(ikle4(ielem))
125 w4(ielem) = xa(9,ielem) * y(ikle1(ielem))
126 & + xa(11,ielem) * y(ikle2(ielem))
127 & + xa(12,ielem) * y(ikle3(ielem))
130 ELSEIF(typext(1:1).EQ.
'0')
THEN 132 CALL ov (
'X=C ', w1 , y , z , 0.d0 , nelem )
133 CALL ov (
'X=C ', w2 , y , z , 0.d0 , nelem )
134 CALL ov (
'X=C ', w3 , y , z , 0.d0 , nelem )
135 CALL ov (
'X=C ', w4 , y , z , 0.d0 , nelem )
139 WRITE(
lu,1001) typext
147 IF(typdia(1:1).EQ.
'Q')
THEN 148 CALL ov (
'X=YZ ', x , y , da , c , npoin )
149 ELSEIF(typdia(1:1).EQ.
'I')
THEN 150 CALL ov (
'X=Y ', x , y , z , c , npoin )
151 ELSEIF(typdia(1:1).EQ.
'0')
THEN 152 CALL ov (
'X=C ', x , y , z , 0.d0 , npoin )
154 WRITE(
lu,2001) typdia
161 ELSEIF(op(1:8).EQ.
'X=CAY ')
THEN 165 IF(typext(1:1).EQ.
'Q'.OR.typext(1:1).EQ.
'S')
THEN 168 w1(ielem) = c * ( xa(1,ielem) * y(ikle2(ielem))
169 & + xa(2,ielem) * y(ikle3(ielem))
170 & + xa(3,ielem) * y(ikle4(ielem)) )
171 w2(ielem) = c * ( xa(7,ielem) * y(ikle1(ielem))
172 & + xa(4,ielem) * y(ikle3(ielem))
173 & + xa(5,ielem) * y(ikle4(ielem)) )
174 w3(ielem) = c * ( xa(8,ielem) * y(ikle1(ielem))
175 & + xa(10,ielem) * y(ikle2(ielem))
176 & + xa(6,ielem) * y(ikle4(ielem)) )
177 w4(ielem) = c * ( xa(9,ielem) * y(ikle1(ielem))
178 & + xa(11,ielem) * y(ikle2(ielem))
179 & + xa(12,ielem) * y(ikle3(ielem)) )
182 ELSEIF(typext(1:1).EQ.
'0')
THEN 184 CALL ov (
'X=C ', w1 , y , z , 0.d0 , nelem )
185 CALL ov (
'X=C ', w2 , y , z , 0.d0 , nelem )
186 CALL ov (
'X=C ', w3 , y , z , 0.d0 , nelem )
187 CALL ov (
'X=C ', w4 , y , z , 0.d0 , nelem )
191 WRITE(
lu,1001) typext
199 IF(typdia(1:1).EQ.
'Q')
THEN 200 CALL ov (
'X=CYZ ', x , y , da , c , npoin )
201 ELSEIF(typdia(1:1).EQ.
'I')
THEN 202 CALL ov (
'X=CY ', x , y , z , c , npoin )
203 ELSEIF(typdia(1:1).EQ.
'0')
THEN 204 CALL ov (
'X=C ', x , y , z , 0.d0 , npoin )
206 WRITE(
lu,2001) typdia
213 ELSEIF(op(1:8).EQ.
'X=-AY ')
THEN 217 IF(typext(1:1).EQ.
'Q'.OR.typext(1:1).NE.
'S')
THEN 220 w1(ielem) = - xa(1,ielem) * y(ikle2(ielem))
221 & - xa(2,ielem) * y(ikle3(ielem))
222 & - xa(3,ielem) * y(ikle4(ielem))
223 w2(ielem) = - xa(7,ielem) * y(ikle1(ielem))
224 & - xa(4,ielem) * y(ikle3(ielem))
225 & - xa(5,ielem) * y(ikle4(ielem))
226 w3(ielem) = - xa(8,ielem) * y(ikle1(ielem))
227 & - xa(10,ielem) * y(ikle2(ielem))
228 & - xa(6,ielem) * y(ikle4(ielem))
229 w4(ielem) = - xa(9,ielem) * y(ikle1(ielem))
230 & - xa(11,ielem) * y(ikle2(ielem))
231 & - xa(12,ielem) * y(ikle3(ielem))
234 ELSEIF(typext(1:1).EQ.
'0')
THEN 236 CALL ov (
'X=C ', w1 , y , z , 0.d0 , nelem )
237 CALL ov (
'X=C ', w2 , y , z , 0.d0 , nelem )
238 CALL ov (
'X=C ', w3 , y , z , 0.d0 , nelem )
239 CALL ov (
'X=C ', w4 , y , z , 0.d0 , nelem )
243 WRITE(
lu,1001) typext
251 IF(typdia(1:1).EQ.
'Q')
THEN 252 CALL ov (
'X=-YZ ', x , y , da , c , npoin )
253 ELSEIF(typdia(1:1).EQ.
'I')
THEN 254 CALL ov (
'X=-Y ', x , y , z , c , npoin )
255 ELSEIF(typdia(1:1).EQ.
'0')
THEN 256 CALL ov (
'X=C ', x , y , z , 0.d0 , npoin )
258 WRITE(
lu,2001) typdia
265 ELSEIF(op(1:8).EQ.
'X=X+AY ')
THEN 269 IF(typext(1:1).EQ.
'Q'.OR.typext(1:1).EQ.
'S')
THEN 272 w1(ielem) = w1(ielem) + xa(1,ielem) * y(ikle2(ielem))
273 & + xa(2,ielem) * y(ikle3(ielem))
274 & + xa(3,ielem) * y(ikle4(ielem))
275 w2(ielem) = w2(ielem) + xa(7,ielem) * y(ikle1(ielem))
276 & + xa(4,ielem) * y(ikle3(ielem))
277 & + xa(5,ielem) * y(ikle4(ielem))
278 w3(ielem) = w3(ielem) + xa(8,ielem) * y(ikle1(ielem))
279 & + xa(10,ielem) * y(ikle2(ielem))
280 & + xa(6,ielem) * y(ikle4(ielem))
281 w4(ielem) = w4(ielem) + xa(9,ielem) * y(ikle1(ielem))
282 & + xa(11,ielem) * y(ikle2(ielem))
283 & + xa(12,ielem) * y(ikle3(ielem))
286 ELSEIF(typext(1:1).NE.
'0')
THEN 288 WRITE(
lu,1001) typext
296 IF(typdia(1:1).EQ.
'Q')
THEN 297 CALL ov (
'X=X+YZ ', x , y , da , c , npoin )
298 ELSEIF(typdia(1:1).EQ.
'I')
THEN 299 CALL ov (
'X=X+Y ', x , y , z , c , npoin )
300 ELSEIF(typdia(1:1).NE.
'0')
THEN 301 WRITE(
lu,2001) typdia
308 ELSEIF(op(1:8).EQ.
'X=X-AY ')
THEN 312 IF(typext(1:1).EQ.
'Q'.OR.typext(1:1).EQ.
'S')
THEN 315 w1(ielem) = w1(ielem) - xa(1,ielem) * y(ikle2(ielem))
316 & - xa(2,ielem) * y(ikle3(ielem))
317 & - xa(3,ielem) * y(ikle4(ielem))
318 w2(ielem) = w2(ielem) - xa(7,ielem) * y(ikle1(ielem))
319 & - xa(4,ielem) * y(ikle3(ielem))
320 & - xa(5,ielem) * y(ikle4(ielem))
321 w3(ielem) = w3(ielem) - xa(8,ielem) * y(ikle1(ielem))
322 & - xa(10,ielem) * y(ikle2(ielem))
323 & - xa(6,ielem) * y(ikle4(ielem))
324 w4(ielem) = w4(ielem) - xa(9,ielem) * y(ikle1(ielem))
325 & - xa(11,ielem) * y(ikle2(ielem))
326 & - xa(12,ielem) * y(ikle3(ielem))
329 ELSEIF(typext(1:1).NE.
'0')
THEN 331 WRITE(
lu,1001) typext
339 IF(typdia(1:1).EQ.
'Q')
THEN 340 CALL ov (
'X=X-YZ ', x , y , da , c , npoin )
341 ELSEIF(typdia(1:1).EQ.
'I')
THEN 342 CALL ov (
'X=X-Y ', x , y , z , c , npoin )
343 ELSEIF(typdia(1:1).NE.
'0')
THEN 344 WRITE(
lu,2001) typdia
351 ELSEIF(op(1:8).EQ.
'X=X+CAY ')
THEN 355 IF(typext(1:1).EQ.
'Q'.OR.typext(1:1).EQ.
'S')
THEN 358 w1(ielem) = w1(ielem)
359 & + c * ( xa(1,ielem) * y(ikle2(ielem))
360 & + xa(2,ielem) * y(ikle3(ielem))
361 & + xa(3,ielem) * y(ikle4(ielem)) )
362 w2(ielem) = w2(ielem)
363 & + c * ( xa(7,ielem) * y(ikle1(ielem))
364 & + xa(4,ielem) * y(ikle3(ielem))
365 & + xa(5,ielem) * y(ikle4(ielem)) )
366 w3(ielem) = w3(ielem)
367 & + c * ( xa(8,ielem) * y(ikle1(ielem))
368 & + xa(10,ielem) * y(ikle2(ielem))
369 & + xa(6,ielem) * y(ikle4(ielem)) )
370 w4(ielem) = w4(ielem)
371 & + c * ( xa(9,ielem) * y(ikle1(ielem))
372 & + xa(11,ielem) * y(ikle2(ielem))
373 & + xa(12,ielem) * y(ikle3(ielem)) )
376 ELSEIF(typext(1:1).NE.
'0')
THEN 378 WRITE(
lu,1001) typext
386 IF(typdia(1:1).EQ.
'Q')
THEN 387 CALL ov (
'X=X+CYZ ', x , y , da , c , npoin )
388 ELSEIF(typdia(1:1).EQ.
'I')
THEN 389 CALL ov (
'X=X+CY ', x , y , z , c , npoin )
390 ELSEIF(typdia(1:1).NE.
'0')
THEN 391 WRITE(
lu,2001) typdia
398 ELSEIF(op(1:8).EQ.
'X=TAY ')
THEN 402 IF(typext(1:1).EQ.
'Q'.OR.typext(1:1).EQ.
'S')
THEN 405 w1(ielem) = + xa(7,ielem) * y(ikle2(ielem))
406 & + xa(8,ielem) * y(ikle3(ielem))
407 & + xa(9,ielem) * y(ikle4(ielem))
408 w2(ielem) = + xa(1,ielem) * y(ikle1(ielem))
409 & + xa(10,ielem) * y(ikle3(ielem))
410 & + xa(11,ielem) * y(ikle4(ielem))
411 w3(ielem) = + xa(2,ielem) * y(ikle1(ielem))
412 & + xa(4,ielem) * y(ikle2(ielem))
413 & + xa(12,ielem) * y(ikle4(ielem))
414 w4(ielem) = + xa(3,ielem) * y(ikle1(ielem))
415 & + xa(5,ielem) * y(ikle2(ielem))
416 & + xa(6,ielem) * y(ikle3(ielem))
419 ELSEIF(typext(1:1).EQ.
'0')
THEN 421 CALL ov (
'X=C ', w1 , y , z , 0.d0 , nelem )
422 CALL ov (
'X=C ', w2 , y , z , 0.d0 , nelem )
423 CALL ov (
'X=C ', w3 , y , z , 0.d0 , nelem )
424 CALL ov (
'X=C ', w4 , y , z , 0.d0 , nelem )
428 WRITE(
lu,1001) typext
436 IF(typdia(1:1).EQ.
'Q')
THEN 437 CALL ov (
'X=YZ ', x , y , da , c , npoin )
438 ELSEIF(typdia(1:1).EQ.
'I')
THEN 439 CALL ov (
'X=Y ', x , y , z , c , npoin )
440 ELSEIF(typdia(1:1).EQ.
'0')
THEN 441 CALL ov (
'X=C ', x , y , da , 0.d0 , npoin )
443 WRITE(
lu,2001) typdia
450 ELSEIF(op(1:8).EQ.
'X=-TAY ')
THEN 454 IF(typext(1:1).EQ.
'Q'.OR.typext(1:1).EQ.
'S')
THEN 457 w1(ielem) = - xa(7,ielem) * y(ikle2(ielem))
458 & - xa(8,ielem) * y(ikle3(ielem))
459 & - xa(9,ielem) * y(ikle4(ielem))
460 w2(ielem) = - xa(1,ielem) * y(ikle1(ielem))
461 & - xa(10,ielem) * y(ikle3(ielem))
462 & - xa(11,ielem) * y(ikle4(ielem))
463 w3(ielem) = - xa(2,ielem) * y(ikle1(ielem))
464 & - xa(4,ielem) * y(ikle2(ielem))
465 & - xa(12,ielem) * y(ikle4(ielem))
466 w4(ielem) = - xa(3,ielem) * y(ikle1(ielem))
467 & - xa(5,ielem) * y(ikle2(ielem))
468 & - xa(6,ielem) * y(ikle3(ielem))
471 ELSEIF(typext(1:1).EQ.
'0')
THEN 473 CALL ov (
'X=C ', w1 , y , z , 0.d0 , nelem )
474 CALL ov (
'X=C ', w2 , y , z , 0.d0 , nelem )
475 CALL ov (
'X=C ', w3 , y , z , 0.d0 , nelem )
476 CALL ov (
'X=C ', w4 , y , z , 0.d0 , nelem )
480 WRITE(
lu,1001) typext
488 IF(typdia(1:1).EQ.
'Q')
THEN 489 CALL ov (
'X=-YZ ', x , y , da , c , npoin )
490 ELSEIF(typdia(1:1).EQ.
'I')
THEN 491 CALL ov (
'X=-Y ', x , y , z , c , npoin )
492 ELSEIF(typdia(1:1).EQ.
'0')
THEN 493 CALL ov (
'X=C ', x , y , da , 0.d0 , npoin )
495 WRITE(
lu,2001) typdia
502 ELSEIF(op(1:8).EQ.
'X=X+TAY ')
THEN 506 IF(typext(1:1).EQ.
'Q'.OR.typext(1:1).EQ.
'S')
THEN 509 w1(ielem) = w1(ielem) + xa(7,ielem) * y(ikle2(ielem))
510 & + xa(8,ielem) * y(ikle3(ielem))
511 & + xa(9,ielem) * y(ikle4(ielem))
512 w2(ielem) = w2(ielem) + xa(1,ielem) * y(ikle1(ielem))
513 & + xa(10,ielem) * y(ikle3(ielem))
514 & + xa(11,ielem) * y(ikle4(ielem))
515 w3(ielem) = w3(ielem) + xa(2,ielem) * y(ikle1(ielem))
516 & + xa(4,ielem) * y(ikle2(ielem))
517 & + xa(12,ielem) * y(ikle4(ielem))
518 w4(ielem) = w4(ielem) + xa(3,ielem) * y(ikle1(ielem))
519 & + xa(5,ielem) * y(ikle2(ielem))
520 & + xa(6,ielem) * y(ikle3(ielem))
523 ELSEIF(typext(1:1).NE.
'0')
THEN 525 WRITE(
lu,1001) typext
533 IF(typdia(1:1).EQ.
'Q')
THEN 534 CALL ov (
'X=X+YZ ', x , y , da , c , npoin )
535 ELSEIF(typdia(1:1).EQ.
'I')
THEN 536 CALL ov (
'X=X+Y ', x , y , z , c , npoin )
537 ELSEIF(typdia(1:1).NE.
'0')
THEN 538 WRITE(
lu,2001) typdia
545 ELSEIF(op(1:8).EQ.
'X=X-TAY ')
THEN 549 IF(typext(1:1).EQ.
'Q'.OR.typext(1:1).EQ.
'S')
THEN 552 w1(ielem) = w1(ielem) - xa(7,ielem) * y(ikle2(ielem))
553 & - xa(8,ielem) * y(ikle3(ielem))
554 & - xa(9,ielem) * y(ikle4(ielem))
555 w2(ielem) = w2(ielem) - xa(1,ielem) * y(ikle1(ielem))
556 & - xa(10,ielem) * y(ikle3(ielem))
557 & - xa(11,ielem) * y(ikle4(ielem))
558 w3(ielem) = w3(ielem) - xa(2,ielem) * y(ikle1(ielem))
559 & - xa(4,ielem) * y(ikle2(ielem))
560 & - xa(12,ielem) * y(ikle4(ielem))
561 w4(ielem) = w4(ielem) - xa(3,ielem) * y(ikle1(ielem))
562 & - xa(5,ielem) * y(ikle2(ielem))
563 & - xa(6,ielem) * y(ikle3(ielem))
566 ELSEIF(typext(1:1).NE.
'0')
THEN 568 WRITE(
lu,1001) typext
576 IF(typdia(1:1).EQ.
'Q')
THEN 577 CALL ov (
'X=X-YZ ', x , y , da , c , npoin )
578 ELSEIF(typdia(1:1).EQ.
'I')
THEN 579 CALL ov (
'X=X-Y ', x , y , z , c , npoin )
580 ELSEIF(typdia(1:1).NE.
'0')
THEN 581 WRITE(
lu,2001) typdia
588 ELSEIF(op(1:8).EQ.
'X=X+CTAY')
THEN 592 IF(typext(1:1).EQ.
'Q'.OR.typext(1:1).EQ.
'S')
THEN 595 w1(ielem) = w1(ielem)
596 & + c * ( + xa(7,ielem) * y(ikle2(ielem))
597 & + xa(8,ielem) * y(ikle3(ielem))
598 & + xa(9,ielem) * y(ikle4(ielem)) )
599 w2(ielem) = w2(ielem)
600 & + c * ( + xa(1,ielem) * y(ikle1(ielem))
601 & + xa(10,ielem) * y(ikle3(ielem))
602 & + xa(11,ielem) * y(ikle4(ielem)) )
603 w3(ielem) = w3(ielem)
604 & + c * ( + xa(2,ielem) * y(ikle1(ielem))
605 & + xa(4,ielem) * y(ikle2(ielem))
606 & + xa(12,ielem) * y(ikle4(ielem)) )
607 w4(ielem) = w4(ielem)
608 & + c * ( + xa(3,ielem) * y(ikle1(ielem))
609 & + xa(5,ielem) * y(ikle2(ielem))
610 & + xa(6,ielem) * y(ikle3(ielem)) )
613 ELSEIF(typext(1:1).NE.
'0')
THEN 615 WRITE(
lu,1001) typext
623 IF(typdia(1:1).EQ.
'Q')
THEN 624 CALL ov (
'X=X+CYZ ', x , y , da , c , npoin )
625 ELSEIF(typdia(1:1).EQ.
'I')
THEN 626 CALL ov (
'X=X+CY ', x , y , z , c , npoin )
627 ELSEIF(typdia(1:1).NE.
'0')
THEN 628 WRITE(
lu,2001) typdia
649 1001
FORMAT(1x,
'MV0404_2 (BIEF) : EXTRADIAG. TERMS UNKNOWN TYPE: ',a1)
650 2001
FORMAT(1x,
'MV0404_2 (BIEF) : DIAGONAL : UNKNOWN TYPE : ',a1)
651 3001
FORMAT(1x,
'MV0404_2 (BIEF) : UNKNOWN OPERATION : ',a8)
subroutine ov(OP, X, Y, Z, C, DIM1)
subroutine mv0404_2(OP, X, DA, TYPDIA, XA, TYPEXT, Y, C, IKLE1, IKLE2, IKLE3, IKLE4, NPOIN, NELEM, W1, W2, W3, W4, DIM1XA)