6 & xa12,xa13,xa21,xa23,xa31,xa32,xa41,xa42,xa43,
8 & ikle1,ikle2,ikle3,ikle4,
9 & npoin,nelem,w1,w2,w3,w4)
96 INTEGER,
INTENT(IN) :: NELEM,NPOIN
98 INTEGER,
INTENT(IN) :: IKLE1(*),IKLE2(*),IKLE3(*),IKLE4(*)
100 DOUBLE PRECISION,
INTENT(INOUT) :: W1(*),W2(*),W3(*),W4(*)
101 DOUBLE PRECISION,
INTENT(IN) :: Y(*),DA(*)
102 DOUBLE PRECISION,
INTENT(INOUT) :: X(*)
103 DOUBLE PRECISION,
INTENT(IN) :: XA12(*),XA13(*),XA21(*)
104 DOUBLE PRECISION,
INTENT(IN) :: XA23(*),XA31(*),XA32(*)
105 DOUBLE PRECISION,
INTENT(IN) :: XA41(*),XA42(*),XA43(*)
106 DOUBLE PRECISION,
INTENT(IN) :: C
108 CHARACTER(LEN=8),
INTENT(IN) :: OP
109 CHARACTER(LEN=1),
INTENT(IN) :: TYPDIA,TYPEXT
114 DOUBLE PRECISION Z(1)
118 IF(op(1:8).EQ.
'X=AY ')
THEN 122 IF(typdia(1:1).EQ.
'Q')
THEN 123 CALL ov (
'X=YZ ', x , y , da , c , npoin )
124 ELSEIF(typdia(1:1).EQ.
'I')
THEN 125 CALL ov (
'X=Y ', x , y , z , c , npoin )
126 ELSEIF(typdia(1:1).EQ.
'0')
THEN 127 CALL ov (
'X=C ', x , y , z , 0.d0 , npoin )
129 WRITE(
lu,2001) typdia
135 IF(typext(1:1).EQ.
'Q')
THEN 138 w1(ielem) = xa12(ielem) * y(ikle2(ielem))
139 & + xa13(ielem) * y(ikle3(ielem))
140 w2(ielem) = xa21(ielem) * y(ikle1(ielem))
141 & + xa23(ielem) * y(ikle3(ielem))
142 w3(ielem) = xa31(ielem) * y(ikle1(ielem))
143 & + xa32(ielem) * y(ikle2(ielem))
144 w4(ielem) = xa41(ielem) * y(ikle1(ielem))
145 & + xa42(ielem) * y(ikle2(ielem))
146 & + xa43(ielem) * y(ikle3(ielem))
150 ELSEIF(typext(1:1).EQ.
'0')
THEN 152 CALL ov (
'X=C ', w1 , y , z , 0.d0 , nelem )
153 CALL ov (
'X=C ', w2 , y , z , 0.d0 , nelem )
154 CALL ov (
'X=C ', w3 , y , z , 0.d0 , nelem )
155 CALL ov (
'X=C ', w4 , y , z , 0.d0 , nelem )
156 CALL ov (
'X=C ', x(npoin+1) , y , z , 0.d0 , nelem )
160 WRITE(
lu,1001) typext
168 ELSEIF(op(1:8).EQ.
'X=-AY ')
THEN 172 IF(typdia(1:1).EQ.
'Q')
THEN 173 CALL ov (
'X=-YZ ', x , y , da , c , npoin )
174 ELSEIF(typdia(1:1).EQ.
'I')
THEN 175 CALL ov (
'X=-Y ', x , y , z , c , npoin )
176 ELSEIF(typdia(1:1).EQ.
'0')
THEN 177 CALL ov (
'X=C ', x , y , z , 0.d0 , npoin )
179 WRITE(
lu,2001) typdia
186 IF(typext(1:1).EQ.
'Q')
THEN 189 w1(ielem) = - xa12(ielem) * y(ikle2(ielem))
190 & - xa13(ielem) * y(ikle3(ielem))
191 w2(ielem) = - xa21(ielem) * y(ikle1(ielem))
192 & - xa23(ielem) * y(ikle3(ielem))
193 w3(ielem) = - xa31(ielem) * y(ikle1(ielem))
194 & - xa32(ielem) * y(ikle2(ielem))
195 w4(ielem) = - xa41(ielem) * y(ikle1(ielem))
196 & - xa42(ielem) * y(ikle2(ielem))
197 & - xa43(ielem) * y(ikle3(ielem))
201 ELSEIF(typext(1:1).EQ.
'0')
THEN 203 CALL ov (
'X=C ', w1 , y , z , 0.d0 , nelem )
204 CALL ov (
'X=C ', w2 , y , z , 0.d0 , nelem )
205 CALL ov (
'X=C ', w3 , y , z , 0.d0 , nelem )
206 CALL ov (
'X=C ', w4 , y , z , 0.d0 , nelem )
207 CALL ov (
'X=C ', x(npoin+1) , y , z , 0.d0 , nelem )
211 WRITE(
lu,1001) typext
219 ELSEIF(op(1:8).EQ.
'X=X+AY ')
THEN 223 IF(typext(1:1).EQ.
'Q')
THEN 226 w1(ielem) = w1(ielem) + xa12(ielem) * y(ikle2(ielem))
227 & + xa13(ielem) * y(ikle3(ielem))
228 w2(ielem) = w2(ielem) + xa21(ielem) * y(ikle1(ielem))
229 & + xa23(ielem) * y(ikle3(ielem))
230 w3(ielem) = w3(ielem) + xa31(ielem) * y(ikle1(ielem))
231 & + xa32(ielem) * y(ikle2(ielem))
232 w4(ielem) = w4(ielem) + xa41(ielem) * y(ikle1(ielem))
233 & + xa42(ielem) * y(ikle2(ielem))
234 & + xa43(ielem) * y(ikle3(ielem))
237 ELSEIF(typext(1:1).NE.
'0')
THEN 239 WRITE(
lu,1001) typext
247 IF(typdia(1:1).EQ.
'Q')
THEN 248 CALL ov (
'X=X+YZ ', x , y , da , c , npoin )
249 ELSEIF(typdia(1:1).EQ.
'I')
THEN 250 CALL ov (
'X=X+Y ', x , y , z , c , npoin )
251 ELSEIF(typdia(1:1).NE.
'0')
THEN 252 WRITE(
lu,2001) typdia
259 ELSEIF(op(1:8).EQ.
'X=X-AY ')
THEN 263 IF(typext(1:1).EQ.
'Q')
THEN 266 w1(ielem) = w1(ielem) - xa12(ielem) * y(ikle2(ielem))
267 & - xa13(ielem) * y(ikle3(ielem))
268 w2(ielem) = w2(ielem) - xa21(ielem) * y(ikle1(ielem))
269 & - xa23(ielem) * y(ikle3(ielem))
270 w3(ielem) = w3(ielem) - xa31(ielem) * y(ikle1(ielem))
271 & - xa32(ielem) * y(ikle2(ielem))
272 w4(ielem) = w4(ielem) - xa41(ielem) * y(ikle1(ielem))
273 & - xa42(ielem) * y(ikle2(ielem))
274 & - xa43(ielem) * y(ikle3(ielem))
277 ELSEIF(typext(1:1).NE.
'0')
THEN 279 WRITE(
lu,1001) typext
287 IF(typdia(1:1).EQ.
'Q')
THEN 288 CALL ov (
'X=X-YZ ', x , y , da , c , npoin )
289 ELSEIF(typdia(1:1).EQ.
'I')
THEN 290 CALL ov (
'X=X-Y ', x , y , z , c , npoin )
291 ELSEIF(typdia(1:1).NE.
'0')
THEN 292 WRITE(
lu,2001) typdia
299 ELSEIF(op(1:8).EQ.
'X=X+CAY ')
THEN 303 IF(typext(1:1).EQ.
'Q')
THEN 306 w1(ielem) = w1(ielem)
307 & + c * ( xa12(ielem) * y(ikle2(ielem))
308 & + xa13(ielem) * y(ikle3(ielem)) )
309 w2(ielem) = w2(ielem)
310 & + c * ( xa21(ielem) * y(ikle1(ielem))
311 & + xa23(ielem) * y(ikle3(ielem)) )
312 w3(ielem) = w3(ielem)
313 & + c * ( xa31(ielem) * y(ikle1(ielem))
314 & + xa32(ielem) * y(ikle2(ielem)) )
315 w4(ielem) = w4(ielem)
316 & + c * ( xa41(ielem) * y(ikle1(ielem))
317 & + xa42(ielem) * y(ikle2(ielem))
318 & + xa43(ielem) * y(ikle3(ielem)) )
321 ELSEIF(typext(1:1).NE.
'0')
THEN 323 WRITE(
lu,1001) typext
331 IF(typdia(1:1).EQ.
'Q')
THEN 332 CALL ov (
'X=X+CYZ ', x , y , da , c , npoin )
333 ELSEIF(typdia(1:1).EQ.
'I')
THEN 334 CALL ov (
'X=X+CY ', x , y , z , c , npoin )
335 ELSEIF(typdia(1:1).NE.
'0')
THEN 336 WRITE(
lu,2001) typdia
343 ELSEIF(op(1:8).EQ.
'X=TAY ')
THEN 347 IF(typdia(1:1).EQ.
'Q')
THEN 348 CALL ov (
'X=YZ ', x , y , da , c , npoin )
349 ELSEIF(typdia(1:1).EQ.
'I')
THEN 350 CALL ov (
'X=Y ', x , y , z , c , npoin )
351 ELSEIF(typdia(1:1).EQ.
'0')
THEN 352 CALL ov (
'X=C ', x , y , da , 0.d0 , npoin )
354 WRITE(
lu,2001) typdia
361 IF(typext(1:1).EQ.
'Q')
THEN 364 w1(ielem) = + xa21(ielem) * y(ikle2(ielem))
365 & + xa31(ielem) * y(ikle3(ielem))
366 & + xa41(ielem) * y(ikle4(ielem))
367 w2(ielem) = + xa12(ielem) * y(ikle1(ielem))
368 & + xa32(ielem) * y(ikle3(ielem))
369 & + xa42(ielem) * y(ikle4(ielem))
370 w3(ielem) = + xa13(ielem) * y(ikle1(ielem))
371 & + xa23(ielem) * y(ikle2(ielem))
372 & + xa43(ielem) * y(ikle4(ielem))
375 ELSEIF(typext(1:1).EQ.
'0')
THEN 377 CALL ov (
'X=C ', w1 , y , z , 0.d0 , nelem )
378 CALL ov (
'X=C ', w2 , y , z , 0.d0 , nelem )
379 CALL ov (
'X=C ', w3 , y , z , 0.d0 , nelem )
383 WRITE(
lu,1001) typext
391 ELSEIF(op(1:8).EQ.
'X=-TAY ')
THEN 395 IF(typext(1:1).EQ.
'Q')
THEN 398 w1(ielem) = - xa21(ielem) * y(ikle2(ielem))
399 & - xa31(ielem) * y(ikle3(ielem))
400 & - xa41(ielem) * y(ikle4(ielem))
401 w2(ielem) = - xa12(ielem) * y(ikle1(ielem))
402 & - xa32(ielem) * y(ikle3(ielem))
403 & - xa42(ielem) * y(ikle4(ielem))
404 w3(ielem) = - xa13(ielem) * y(ikle1(ielem))
405 & - xa23(ielem) * y(ikle2(ielem))
406 & - xa43(ielem) * y(ikle4(ielem))
409 ELSEIF(typext(1:1).EQ.
'0')
THEN 411 CALL ov (
'X=C ', w1 , y , z , 0.d0 , nelem )
412 CALL ov (
'X=C ', w2 , y , z , 0.d0 , nelem )
413 CALL ov (
'X=C ', w3 , y , z , 0.d0 , nelem )
417 WRITE(
lu,1001) typext
425 IF(typdia(1:1).EQ.
'Q')
THEN 426 CALL ov (
'X=-YZ ', x , y , da , c , npoin )
427 ELSEIF(typdia(1:1).EQ.
'I')
THEN 428 CALL ov (
'X=-Y ', x , y , z , c , npoin )
429 ELSEIF(typdia(1:1).EQ.
'0')
THEN 430 CALL ov (
'X=C ', x , y , da , 0.d0 , npoin )
432 WRITE(
lu,2001) typdia
439 ELSEIF(op(1:8).EQ.
'X=X+TAY ')
THEN 443 IF(typext(1:1).EQ.
'Q')
THEN 446 w1(ielem) = w1(ielem) + xa21(ielem) * y(ikle2(ielem))
447 & + xa31(ielem) * y(ikle3(ielem))
448 & + xa41(ielem) * y(ikle4(ielem))
449 w2(ielem) = w2(ielem) + xa12(ielem) * y(ikle1(ielem))
450 & + xa32(ielem) * y(ikle3(ielem))
451 & + xa42(ielem) * y(ikle4(ielem))
452 w3(ielem) = w3(ielem) + xa13(ielem) * y(ikle1(ielem))
453 & + xa23(ielem) * y(ikle2(ielem))
454 & + xa43(ielem) * y(ikle4(ielem))
457 ELSEIF(typext(1:1).NE.
'0')
THEN 459 WRITE(
lu,1001) typext
467 IF(typdia(1:1).EQ.
'Q')
THEN 468 CALL ov (
'X=X+YZ ', x , y , da , c , npoin )
469 ELSEIF(typdia(1:1).EQ.
'I')
THEN 470 CALL ov (
'X=X+Y ', x , y , z , c , npoin )
471 ELSEIF(typdia(1:1).NE.
'0')
THEN 472 WRITE(
lu,2001) typdia
479 ELSEIF(op(1:8).EQ.
'X=X-TAY ')
THEN 483 IF(typext(1:1).EQ.
'Q')
THEN 486 w1(ielem) = w1(ielem) - xa21(ielem) * y(ikle2(ielem))
487 & - xa31(ielem) * y(ikle3(ielem))
488 & - xa41(ielem) * y(ikle4(ielem))
489 w2(ielem) = w2(ielem) - xa12(ielem) * y(ikle1(ielem))
490 & - xa32(ielem) * y(ikle3(ielem))
491 & - xa42(ielem) * y(ikle4(ielem))
492 w3(ielem) = w3(ielem) - xa13(ielem) * y(ikle1(ielem))
493 & - xa23(ielem) * y(ikle2(ielem))
494 & - xa43(ielem) * y(ikle4(ielem))
497 ELSEIF(typext(1:1).NE.
'0')
THEN 499 WRITE(
lu,1001) typext
507 IF(typdia(1:1).EQ.
'Q')
THEN 508 CALL ov (
'X=X-YZ ', x , y , da , c , npoin )
509 ELSEIF(typdia(1:1).EQ.
'I')
THEN 510 CALL ov (
'X=X-Y ', x , y , z , c , npoin )
511 ELSEIF(typdia(1:1).NE.
'0')
THEN 512 WRITE(
lu,2001) typdia
519 ELSEIF(op(1:8).EQ.
'X=X+CTAY')
THEN 523 IF(typext(1:1).EQ.
'Q')
THEN 526 w1(ielem) = w1(ielem)
527 & + c * ( + xa21(ielem) * y(ikle2(ielem))
528 & + xa31(ielem) * y(ikle3(ielem))
529 & + xa41(ielem) * y(ikle4(ielem)) )
530 w2(ielem) = w2(ielem)
531 & + c * ( + xa12(ielem) * y(ikle1(ielem))
532 & + xa32(ielem) * y(ikle3(ielem))
533 & + xa42(ielem) * y(ikle4(ielem)) )
534 w3(ielem) = w3(ielem)
535 & + c * ( + xa13(ielem) * y(ikle1(ielem))
536 & + xa23(ielem) * y(ikle2(ielem))
537 & + xa43(ielem) * y(ikle4(ielem)) )
540 ELSEIF(typext(1:1).NE.
'0')
THEN 542 WRITE(
lu,1001) typext
550 IF(typdia(1:1).EQ.
'Q')
THEN 551 CALL ov (
'X=X+CYZ ', x , y , da , c , npoin )
552 ELSEIF(typdia(1:1).EQ.
'I')
THEN 553 CALL ov (
'X=X+CY ', x , y , z , c , npoin )
554 ELSEIF(typdia(1:1).NE.
'0')
THEN 555 WRITE(
lu,2001) typdia
576 1001
FORMAT(1x,
'MV0403 (BIEF) : EXTRADIAG. TERMS UNKNOWN TYPE : ',a1)
577 2001
FORMAT(1x,
'MV0403 (BIEF) : DIAGONAL : UNKNOWN TYPE : ',a1)
578 3001
FORMAT(1x,
'MV0403 (BIEF) : UNKNOWN OPERATION : ',a8)
subroutine ov(OP, X, Y, Z, C, DIM1)
subroutine mv0403(OP, X, DA, TYPDIA, XA12, XA13, XA21, XA23, XA31, XA32, XA41, XA42, XA43, TYPEXT, Y, C, IKLE1, IKLE2, IKLE3, IKLE4, NPOIN, NELEM, W1, W2, W3, W4)