5 &(op, x , da,typdia,xa12,xa13,xa21,xa23,xa31,xa32,
6 & typext, y,c,ikle1,ikle2,ikle3,npoin,nelem,w1,w2,w3
95 INTEGER,
INTENT(IN) :: NELEM,NPOIN
96 INTEGER,
INTENT(IN) :: IKLE1(*),IKLE2(*),IKLE3(*)
98 DOUBLE PRECISION,
INTENT(INOUT) :: W1(*),W2(*),W3(*)
99 DOUBLE PRECISION,
INTENT(IN) :: Y(*),DA(*)
100 DOUBLE PRECISION,
INTENT(INOUT) :: X(*)
101 DOUBLE PRECISION,
INTENT(IN) :: XA12(*),XA13(*),XA23(*)
102 DOUBLE PRECISION,
INTENT(IN) :: XA21(*),XA31(*),XA32(*)
103 DOUBLE PRECISION,
INTENT(IN) ::C
105 CHARACTER(LEN=8),
INTENT(IN) :: OP
106 CHARACTER(LEN=1),
INTENT(IN) :: TYPDIA,TYPEXT
107 DOUBLE PRECISION,
OPTIONAL,
INTENT(INOUT) :: X_ERR(*)
108 DOUBLE PRECISION,
OPTIONAL,
INTENT(IN) :: Y_ERR(*),DA_ERR(*)
113 DOUBLE PRECISION Z(1)
117 IF(op(1:8).EQ.
'X=AY ')
THEN 121 IF(typext(1:1).EQ.
'Q'.OR.typext(1:1).EQ.
'S')
THEN 124 w1(ielem) = xa12(ielem) * y(ikle2(ielem))
125 & + xa13(ielem) * y(ikle3(ielem))
126 w2(ielem) = xa23(ielem) * y(ikle3(ielem))
127 & + xa21(ielem) * y(ikle1(ielem))
128 w3(ielem) = xa31(ielem) * y(ikle1(ielem))
129 & + xa32(ielem) * y(ikle2(ielem))
132 ELSEIF(typext(1:1).EQ.
'0')
THEN 134 CALL ov(
'X=C ', x=w1, c=0.d0, dim1=nelem)
135 CALL ov(
'X=C ', x=w2, c=0.d0, dim1=nelem)
136 CALL ov(
'X=C ', x=w3, c=0.d0, dim1=nelem)
140 WRITE(
lu,1001) typext
148 IF(typdia(1:1).EQ.
'Q')
THEN 150 CALL ov(
'X=YZ ', x=x, y=y, z=da, dim1=npoin)
151 ELSEIF (
modass .EQ. 3)
THEN 152 CALL ov_comp (
'X=YZ ', x , y , da , c , npoin,
153 & x_err, y_err , da_err)
155 ELSEIF(typdia(1:1).EQ.
'I')
THEN 156 CALL ov(
'X=Y ', x=x, y=y, dim1=npoin)
157 ELSEIF(typdia(1:1).EQ.
'0')
THEN 158 CALL ov(
'X=C ', x=x, c=0.d0, dim1=npoin)
160 WRITE(
lu,2001) typdia
167 ELSEIF(op(1:8).EQ.
'X=CAY ')
THEN 171 IF(typext(1:1).EQ.
'Q'.OR.typext(1:1).EQ.
'S')
THEN 174 w1(ielem) = c * ( xa12(ielem) * y(ikle2(ielem))
175 & + xa13(ielem) * y(ikle3(ielem)) )
176 w2(ielem) = c * ( xa23(ielem) * y(ikle3(ielem))
177 & + xa21(ielem) * y(ikle1(ielem)) )
178 w3(ielem) = c * ( xa31(ielem) * y(ikle1(ielem))
179 & + xa32(ielem) * y(ikle2(ielem)) )
182 ELSEIF(typext(1:1).EQ.
'0')
THEN 184 CALL ov(
'X=C ', x=w1, c=0.d0, dim1=nelem)
185 CALL ov(
'X=C ', x=w2, c=0.d0, dim1=nelem)
186 CALL ov(
'X=C ', x=w3, c=0.d0, dim1=nelem)
190 WRITE(
lu,1001) typext
198 IF(typdia(1:1).EQ.
'Q')
THEN 200 CALL ov(
'X=CYZ ', x=x, y=y, z=da, c=c, dim1=npoin)
201 ELSEIF (
modass .EQ. 3)
THEN 202 CALL ov_comp (
'X=CYZ ', x , y , da , c , npoin,
203 & x_err, y_err , da_err)
205 ELSEIF(typdia(1:1).EQ.
'I')
THEN 206 CALL ov(
'X=CY ', x=x, y=y, c=c, dim1=npoin)
207 ELSEIF(typdia(1:1).EQ.
'0')
THEN 208 CALL ov(
'X=C ', x=x, c=0.d0, dim1=npoin)
210 WRITE(
lu,2001) typdia
217 ELSEIF(op(1:8).EQ.
'X=-AY ')
THEN 221 IF(typext(1:1).EQ.
'Q'.OR.typext(1:1).EQ.
'S')
THEN 224 w1(ielem) = - xa12(ielem) * y(ikle2(ielem))
225 & - xa13(ielem) * y(ikle3(ielem))
226 w2(ielem) = - xa23(ielem) * y(ikle3(ielem))
227 & - xa21(ielem) * y(ikle1(ielem))
228 w3(ielem) = - xa31(ielem) * y(ikle1(ielem))
229 & - xa32(ielem) * y(ikle2(ielem))
232 ELSEIF(typext(1:1).EQ.
'0')
THEN 234 CALL ov(
'X=C ', x=w1, c=0.d0, dim1=nelem)
235 CALL ov(
'X=C ', x=w2, c=0.d0, dim1=nelem)
236 CALL ov(
'X=C ', x=w3, c=0.d0, dim1=nelem)
240 WRITE(
lu,1001) typext
248 IF(typdia(1:1).EQ.
'Q')
THEN 250 CALL ov(
'X=-YZ ', x=x, y=y, z=da, dim1=npoin)
251 ELSEIF (
modass .EQ. 3)
THEN 252 CALL ov_comp (
'X=-YZ ', x , y , da , c , npoin,
253 & x_err, y_err , da_err)
255 ELSEIF(typdia(1:1).EQ.
'I')
THEN 256 CALL ov(
'X=-Y ', x=x, y=y, dim1=npoin)
257 ELSEIF(typdia(1:1).EQ.
'0')
THEN 258 CALL ov(
'X=C ', x=x, c=0.d0, dim1=npoin)
260 WRITE(
lu,2001) typdia
267 ELSEIF(op(1:8).EQ.
'X=X+AY ')
THEN 271 IF(typext(1:1).EQ.
'Q'.OR.typext(1:1).EQ.
'S')
THEN 274 w1(ielem) = w1(ielem) + xa12(ielem) * y(ikle2(ielem))
275 & + xa13(ielem) * y(ikle3(ielem))
276 w2(ielem) = w2(ielem) + xa23(ielem) * y(ikle3(ielem))
277 & + xa21(ielem) * y(ikle1(ielem))
278 w3(ielem) = w3(ielem) + xa31(ielem) * y(ikle1(ielem))
279 & + xa32(ielem) * y(ikle2(ielem))
282 ELSEIF(typext(1:1).NE.
'0')
THEN 284 WRITE(
lu,1001) typext
292 IF(typdia(1:1).EQ.
'Q')
THEN 294 CALL ov(
'X=X+YZ ', x=x, y=y, z=da, dim1=npoin)
295 ELSEIF (
modass .EQ. 3)
THEN 296 CALL ov_comp (
'X=X+YZ ', x , y , da , c , npoin,
297 & x_err, y_err , da_err)
299 ELSEIF(typdia(1:1).EQ.
'I')
THEN 300 CALL ov(
'X=X+Y ', x=x, y=y, dim1=npoin)
301 ELSEIF(typdia(1:1).NE.
'0')
THEN 302 WRITE(
lu,2001) typdia
309 ELSEIF(op(1:8).EQ.
'X=X-AY ')
THEN 313 IF(typext(1:1).EQ.
'Q'.OR.typext(1:1).EQ.
'S')
THEN 316 w1(ielem) = w1(ielem) - xa12(ielem) * y(ikle2(ielem))
317 & - xa13(ielem) * y(ikle3(ielem))
318 w2(ielem) = w2(ielem) - xa23(ielem) * y(ikle3(ielem))
319 & - xa21(ielem) * y(ikle1(ielem))
320 w3(ielem) = w3(ielem) - xa31(ielem) * y(ikle1(ielem))
321 & - xa32(ielem) * y(ikle2(ielem))
324 ELSEIF(typext(1:1).NE.
'0')
THEN 326 WRITE(
lu,1001) typext
334 IF(typdia(1:1).EQ.
'Q')
THEN 336 CALL ov(
'X=X-YZ ', x=x, y=y, z=da, dim1=npoin)
337 ELSEIF (
modass .EQ. 3)
THEN 338 CALL ov_comp (
'X=X-YZ ', x , y , da , c , npoin,
339 & x_err, y_err , da_err)
341 ELSEIF(typdia(1:1).EQ.
'I')
THEN 342 CALL ov(
'X=X-Y ', x=x, y=y, dim1=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) + c * (xa12(ielem) * y(ikle2(ielem))
359 & +xa13(ielem) * y(ikle3(ielem)))
360 w2(ielem)=w2(ielem) + c * (xa23(ielem) * y(ikle3(ielem))
361 & +xa21(ielem) * y(ikle1(ielem)))
362 w3(ielem)=w3(ielem) + c * (xa31(ielem) * y(ikle1(ielem))
363 & +xa32(ielem) * y(ikle2(ielem)))
366 ELSEIF(typext(1:1).NE.
'0')
THEN 368 WRITE(
lu,1001) typext
376 IF(typdia(1:1).EQ.
'Q')
THEN 378 CALL ov(
'X=X+CYZ ', x=x, y=y, z=da, c=c, dim1=npoin)
379 ELSEIF (
modass .EQ. 3)
THEN 380 CALL ov_comp (
'X=X+CYZ ', x , y , da , c , npoin,
381 & x_err, y_err , da_err)
383 ELSEIF(typdia(1:1).EQ.
'I')
THEN 384 CALL ov(
'X=X+CY ', x=x, y=y, c=c, dim1=npoin)
385 ELSEIF(typdia(1:1).NE.
'0')
THEN 386 WRITE(
lu,2001) typdia
393 ELSEIF(op(1:8).EQ.
'X=TAY ')
THEN 397 IF(typext(1:1).EQ.
'Q'.OR.typext(1:1).EQ.
'S')
THEN 400 w1(ielem) = + xa21(ielem) * y(ikle2(ielem))
401 & + xa31(ielem) * y(ikle3(ielem))
402 w2(ielem) = + xa12(ielem) * y(ikle1(ielem))
403 & + xa32(ielem) * y(ikle3(ielem))
404 w3(ielem) = + xa13(ielem) * y(ikle1(ielem))
405 & + xa23(ielem) * y(ikle2(ielem))
408 ELSEIF(typext(1:1).EQ.
'0')
THEN 410 CALL ov(
'X=C ', x=w1, c=0.d0, dim1=nelem)
411 CALL ov(
'X=C ', x=w2, c=0.d0, dim1=nelem)
412 CALL ov(
'X=C ', x=w3, c=0.d0, dim1=nelem)
416 WRITE(
lu,1001) typext
424 IF(typdia(1:1).EQ.
'Q')
THEN 426 CALL ov(
'X=YZ ', x=x, y=y, z=da, dim1=npoin)
427 ELSEIF (
modass .EQ. 3)
THEN 428 CALL ov_comp (
'X=YZ ', x , y , da , c , npoin,
429 & x_err, y_err , da_err)
431 ELSEIF(typdia(1:1).EQ.
'I')
THEN 432 CALL ov(
'X=Y ', x=x, y=y, dim1=npoin)
433 ELSEIF(typdia(1:1).EQ.
'0')
THEN 434 CALL ov(
'X=C ', x=x, c=0.d0, dim1=npoin)
436 WRITE(
lu,2001) typdia
443 ELSEIF(op(1:8).EQ.
'X=-TAY ')
THEN 447 IF(typext(1:1).EQ.
'Q'.OR.typext(1:1).EQ.
'S')
THEN 450 w1(ielem) = - xa21(ielem) * y(ikle2(ielem))
451 & - xa31(ielem) * y(ikle3(ielem))
452 w2(ielem) = - xa12(ielem) * y(ikle1(ielem))
453 & - xa32(ielem) * y(ikle3(ielem))
454 w3(ielem) = - xa13(ielem) * y(ikle1(ielem))
455 & - xa23(ielem) * y(ikle2(ielem))
458 ELSEIF(typext(1:1).EQ.
'0')
THEN 460 CALL ov(
'X=C ', x=w1, c=0.d0, dim1=nelem)
461 CALL ov(
'X=C ', x=w2, c=0.d0, dim1=nelem)
462 CALL ov(
'X=C ', x=w3, c=0.d0, dim1=nelem)
466 WRITE(
lu,1001) typext
474 IF(typdia(1:1).EQ.
'Q')
THEN 476 CALL ov(
'X=-YZ ', x=x, y=y, z=da, dim1=npoin)
477 ELSEIF (
modass .EQ. 3)
THEN 478 CALL ov_comp (
'X=-YZ ', x , y , da , c , npoin,
479 & x_err, y_err , da_err)
481 ELSEIF(typdia(1:1).EQ.
'I')
THEN 482 CALL ov(
'X=-Y ', x=x, y=y, dim1=npoin)
483 ELSEIF(typdia(1:1).EQ.
'0')
THEN 484 CALL ov(
'X=C ', x=x, c=0.d0, dim1=npoin)
486 WRITE(
lu,2001) typdia
493 ELSEIF(op(1:8).EQ.
'X=X+TAY ')
THEN 497 IF(typext(1:1).EQ.
'Q'.OR.typext(1:1).EQ.
'S')
THEN 500 w1(ielem) = w1(ielem) + xa21(ielem) * y(ikle2(ielem))
501 & + xa31(ielem) * y(ikle3(ielem))
502 w2(ielem) = w2(ielem) + xa12(ielem) * y(ikle1(ielem))
503 & + xa32(ielem) * y(ikle3(ielem))
504 w3(ielem) = w3(ielem) + xa13(ielem) * y(ikle1(ielem))
505 & + xa23(ielem) * y(ikle2(ielem))
508 ELSEIF(typext(1:1).NE.
'0')
THEN 510 WRITE(
lu,1001) typext
518 IF(typdia(1:1).EQ.
'Q')
THEN 520 CALL ov(
'X=X+YZ ', x=x, y=y, z=da, dim1=npoin)
521 ELSEIF (
modass .EQ. 3)
THEN 522 CALL ov_comp (
'X=X+YZ ', x , y , da , c , npoin,
523 & x_err, y_err , da_err)
525 ELSEIF(typdia(1:1).EQ.
'I')
THEN 526 CALL ov (
'X=X+Y ', x=x, y=y, dim1=npoin)
527 ELSEIF(typdia(1:1).NE.
'0')
THEN 528 WRITE(
lu,2001) typdia
535 ELSEIF(op(1:8).EQ.
'X=X-TAY ')
THEN 539 IF(typext(1:1).EQ.
'Q'.OR.typext(1:1).EQ.
'S')
THEN 542 w1(ielem) = w1(ielem) - xa21(ielem) * y(ikle2(ielem))
543 & - xa31(ielem) * y(ikle3(ielem))
544 w2(ielem) = w2(ielem) - xa12(ielem) * y(ikle1(ielem))
545 & - xa32(ielem) * y(ikle3(ielem))
546 w3(ielem) = w3(ielem) - xa13(ielem) * y(ikle1(ielem))
547 & - xa23(ielem) * y(ikle2(ielem))
550 ELSEIF(typext(1:1).NE.
'0')
THEN 552 WRITE(
lu,1001) typext
560 IF(typdia(1:1).EQ.
'Q')
THEN 562 CALL ov(
'X=X-YZ ', x=x, y=y, z=da, dim1=npoin)
563 ELSEIF (
modass .EQ. 3)
THEN 564 CALL ov_comp (
'X=X-YZ ', x , y , da , c , npoin,
565 & x_err, y_err , da_err)
567 ELSEIF(typdia(1:1).EQ.
'I')
THEN 568 CALL ov(
'X=X-Y ', x=x, y=y, dim1=npoin)
569 ELSEIF(typdia(1:1).NE.
'0')
THEN 570 WRITE(
lu,2001) typdia
577 ELSEIF(op(1:8).EQ.
'X=X+CTAY')
THEN 581 IF(typext(1:1).EQ.
'Q'.OR.typext(1:1).EQ.
'S')
THEN 584 w1(ielem) = w1(ielem) + c*(xa21(ielem) * y(ikle2(ielem))
585 & +xa31(ielem) * y(ikle3(ielem)))
586 w2(ielem) = w2(ielem) + c*(xa12(ielem) * y(ikle1(ielem))
587 & +xa32(ielem) * y(ikle3(ielem)))
588 w3(ielem) = w3(ielem) + c*(xa13(ielem) * y(ikle1(ielem))
589 & +xa23(ielem) * y(ikle2(ielem)))
592 ELSEIF(typext(1:1).NE.
'0')
THEN 594 WRITE(
lu,1001) typext
602 IF(typdia(1:1).EQ.
'Q')
THEN 604 CALL ov(
'X=X+CYZ ', x=x, y=y, z=da, c=c, dim1=npoin)
605 ELSEIF (
modass .EQ. 3)
THEN 606 CALL ov_comp (
'X=X+CYZ ', x , y , da , c , npoin,
607 & x_err, y_err , da_err)
609 ELSEIF(typdia(1:1).EQ.
'I')
THEN 610 CALL ov(
'X=X+CY ', x=x, y=y, z=z, c=c, dim1=npoin)
611 ELSEIF(typdia(1:1).NE.
'0')
THEN 612 WRITE(
lu,2001) typdia
633 1001
FORMAT(1x,
'MV0303 (BIEF) : EXTRADIAG. TERMS UNKNOWN TYPE : ',a1)
634 2001
FORMAT(1x,
'MV0303 (BIEF) : DIAGONAL : UNKNOWN TYPE : ',a1)
635 3001
FORMAT(1x,
'MV0303 (BIEF) : UNKNOWN OPERATION : ',a8)
subroutine ov_comp(OP, X, Y, Z, C, NPOIN, X_ERR, Y_ERR, Z_ERR)
subroutine ov(OP, X, Y, Z, C, DIM1)
subroutine mv0303(OP, X, DA, TYPDIA, XA12, XA13, XA21, XA23, XA31, XA32, TYPEXT, Y, C, IKLE1, IKLE2, IKLE3, NPOIN, NELEM, W1, W2, W3, X_ERR, Y_ERR, DA_ERR)