5 &(op, x , da,typdia,xa1,xa2,
6 & typext, y,c,npoin,nelem,nseg1,nseg2,gloseg1,gloseg2,ielm1,ielm2)
86 INTEGER,
INTENT(IN) :: NPOIN
87 INTEGER,
INTENT(IN) :: GLOSEG1(*),GLOSEG2(*)
88 INTEGER,
INTENT(IN) :: NSEG1,NSEG2,NELEM,IELM1,IELM2
90 DOUBLE PRECISION,
INTENT(IN) :: Y(*),DA(*)
91 DOUBLE PRECISION,
INTENT(INOUT) :: X(*)
92 DOUBLE PRECISION,
INTENT(IN) :: XA1(*),XA2(*)
93 DOUBLE PRECISION,
INTENT(IN) :: C
95 CHARACTER(LEN=8),
INTENT(IN) :: OP
96 CHARACTER(LEN=1),
INTENT(IN) :: TYPDIA,TYPEXT
100 INTEGER ISEG,I,MINSEG,MAXSEG
101 DOUBLE PRECISION Z(1)
107 minseg = min(nseg1,nseg2)
108 maxseg = max(nseg1,nseg2)
110 IF(op(1:8).EQ.
'X=AY ')
THEN 114 IF(typdia(1:1).EQ.
'Q')
THEN 115 CALL ov (
'X=YZ ', x , y , da , c , npoin )
116 ELSEIF(typdia(1:1).EQ.
'I')
THEN 117 CALL ov (
'X=Y ', x , y , z , c , npoin )
118 ELSEIF(typdia(1:1).EQ.
'0')
THEN 119 CALL ov (
'X=C ', x , y , da , 0.d0 , npoin )
121 WRITE(
lu,2001) typdia
128 IF(typext(1:1).EQ.
'Q'.OR.typext(1:1).EQ.
'S')
THEN 134 & x(gloseg1(iseg))+xa1(iseg)*y(gloseg2(iseg))
136 & x(gloseg2(iseg))+xa2(iseg)*y(gloseg1(iseg))
141 IF(nseg1.GT.nseg2)
THEN 144 IF(ielm1.EQ.12.OR.ielm2.EQ.12)
THEN 146 DO i = npoin+1,npoin+nelem
150 DO iseg = minseg+1,maxseg
151 x(gloseg2(iseg))=0.d0
154 DO iseg = minseg+1,maxseg
156 & x(gloseg2(iseg))+xa2(iseg)*y(gloseg1(iseg))
158 ELSEIF(nseg2.GT.nseg1)
THEN 159 DO iseg = minseg+1,maxseg
161 & x(gloseg1(iseg))+xa2(iseg)*y(gloseg2(iseg))
165 ELSEIF(typext(1:1).NE.
'0')
THEN 167 WRITE(
lu,1001) typext
175 ELSEIF(op(1:8).EQ.
'X=CAY ')
THEN 179 IF(typdia(1:1).EQ.
'Q')
THEN 180 CALL ov (
'X=CYZ ', x , y , da , c , npoin )
181 ELSEIF(typdia(1:1).EQ.
'I')
THEN 182 CALL ov (
'X=CY ', x , y , z , c , npoin )
183 ELSEIF(typdia(1:1).EQ.
'0')
THEN 184 CALL ov (
'X=C ', x , y , da , 0.d0 , npoin )
186 WRITE(
lu,2001) typdia
193 IF(typext(1:1).EQ.
'Q'.OR.typext(1:1).EQ.
'S')
THEN 197 & x(gloseg1(iseg))+c*xa1(iseg)*y(gloseg2(iseg))
199 & x(gloseg2(iseg))+c*xa2(iseg)*y(gloseg1(iseg))
201 IF(nseg1.GT.nseg2)
THEN 202 IF(ielm1.EQ.12.OR.ielm2.EQ.12)
THEN 204 DO i = npoin+1,npoin+nelem
208 DO iseg = minseg+1,maxseg
209 x(gloseg2(iseg))=0.d0
212 DO iseg = minseg+1,maxseg
214 & x(gloseg2(iseg))+c*xa2(iseg)*y(gloseg1(iseg))
216 ELSEIF(nseg2.GT.nseg1)
THEN 217 DO iseg = minseg+1,maxseg
219 & x(gloseg1(iseg))+c*xa2(iseg)*y(gloseg2(iseg))
223 ELSEIF(typext(1:1).NE.
'0')
THEN 225 WRITE(
lu,1001) typext
233 ELSEIF(op(1:8).EQ.
'X=-AY ')
THEN 237 IF(typdia(1:1).EQ.
'Q')
THEN 238 CALL ov (
'X=-YZ ', x , y , da , c , npoin )
239 ELSEIF(typdia(1:1).EQ.
'I')
THEN 240 CALL ov (
'X=-Y ', x , y , z , c , npoin )
241 ELSEIF(typdia(1:1).EQ.
'0')
THEN 242 CALL ov (
'X=C ', x , y , da , 0.d0 , npoin )
244 WRITE(
lu,2001) typdia
251 IF(typext(1:1).EQ.
'Q'.OR.typext(1:1).EQ.
'S')
THEN 256 & x(gloseg1(iseg))-xa1(iseg)*y(gloseg2(iseg))
258 & x(gloseg2(iseg))-xa2(iseg)*y(gloseg1(iseg))
260 IF(nseg1.GT.nseg2)
THEN 261 IF(ielm1.EQ.12.OR.ielm2.EQ.12)
THEN 263 DO i = npoin+1,npoin+nelem
267 DO iseg = minseg+1,maxseg
268 x(gloseg2(iseg))=0.d0
271 DO iseg = minseg+1,maxseg
273 & x(gloseg2(iseg))-xa2(iseg)*y(gloseg1(iseg))
275 ELSEIF(nseg2.GT.nseg1)
THEN 276 DO iseg = minseg+1,maxseg
278 & x(gloseg1(iseg))-xa2(iseg)*y(gloseg2(iseg))
282 ELSEIF(typext(1:1).NE.
'0')
THEN 284 WRITE(
lu,1001) typext
292 ELSEIF(op(1:8).EQ.
'X=X+AY ')
THEN 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 IF(typext(1:1).EQ.
'Q'.OR.typext(1:1).EQ.
'S')
THEN 312 & x(gloseg1(iseg))+xa1(iseg)*y(gloseg2(iseg))
314 & x(gloseg2(iseg))+xa2(iseg)*y(gloseg1(iseg))
316 IF(nseg1.GT.nseg2)
THEN 317 DO iseg = minseg+1,maxseg
319 & x(gloseg2(iseg))+xa2(iseg)*y(gloseg1(iseg))
321 ELSEIF(nseg2.GT.nseg1)
THEN 322 DO iseg = minseg+1,maxseg
324 & x(gloseg1(iseg))+xa2(iseg)*y(gloseg2(iseg))
328 ELSEIF(typext(1:1).NE.
'0')
THEN 330 WRITE(
lu,1001) typext
338 ELSEIF(op(1:8).EQ.
'X=X-AY ')
THEN 342 IF(typdia(1:1).EQ.
'Q')
THEN 343 CALL ov (
'X=X-YZ ', x , y , da , c , npoin )
344 ELSEIF(typdia(1:1).EQ.
'I')
THEN 345 CALL ov (
'X=X-Y ', x , y , z , c , npoin )
346 ELSEIF(typdia(1:1).NE.
'0')
THEN 347 WRITE(
lu,2001) typdia
354 IF(typext(1:1).EQ.
'Q'.OR.typext(1:1).EQ.
'S')
THEN 358 & x(gloseg1(iseg))-xa1(iseg)*y(gloseg2(iseg))
360 & x(gloseg2(iseg))-xa2(iseg)*y(gloseg1(iseg))
362 IF(nseg1.GT.nseg2)
THEN 363 DO iseg = minseg+1,maxseg
365 & x(gloseg2(iseg))-xa2(iseg)*y(gloseg1(iseg))
367 ELSEIF(nseg2.GT.nseg1)
THEN 368 DO iseg = minseg+1,maxseg
370 & x(gloseg1(iseg))-xa2(iseg)*y(gloseg2(iseg))
374 ELSEIF(typext(1:1).NE.
'0')
THEN 376 WRITE(
lu,1001) typext
384 ELSEIF(op(1:8).EQ.
'X=X+CAY ')
THEN 388 IF(typdia(1:1).EQ.
'Q')
THEN 389 CALL ov (
'X=X+CYZ ', x , y , da , c , npoin )
390 ELSEIF(typdia(1:1).EQ.
'I')
THEN 391 CALL ov (
'X=X+CY ', x , y , z , c , npoin )
392 ELSEIF(typdia(1:1).NE.
'0')
THEN 393 WRITE(
lu,2001) typdia
400 IF(typext(1:1).EQ.
'Q'.OR.typext(1:1).EQ.
'S')
THEN 404 & x(gloseg1(iseg))+c*xa1(iseg)*y(gloseg2(iseg))
406 & x(gloseg2(iseg))+c*xa2(iseg)*y(gloseg1(iseg))
408 IF(nseg1.GT.nseg2)
THEN 409 DO iseg = minseg+1,maxseg
411 & x(gloseg2(iseg))+c*xa2(iseg)*y(gloseg1(iseg))
413 ELSEIF(nseg2.GT.nseg1)
THEN 414 DO iseg = minseg+1,maxseg
416 & x(gloseg1(iseg))+c*xa2(iseg)*y(gloseg2(iseg))
420 ELSEIF(typext(1:1).NE.
'0')
THEN 422 WRITE(
lu,1001) typext
430 ELSEIF(op(1:8).EQ.
'X=TAY ')
THEN 434 IF(typdia(1:1).EQ.
'Q')
THEN 435 CALL ov (
'X=YZ ', x , y , da , c , npoin )
436 ELSEIF(typdia(1:1).EQ.
'I')
THEN 437 CALL ov (
'X=Y ', x , y , z , c , npoin )
438 ELSEIF(typdia(1:1).EQ.
'0')
THEN 439 CALL ov (
'X=C ', x , y , da , 0.d0 , npoin )
441 WRITE(
lu,2001) typdia
448 IF(typext(1:1).EQ.
'Q'.OR.typext(1:1).EQ.
'S')
THEN 452 & x(gloseg1(iseg))+xa2(iseg)*y(gloseg2(iseg))
454 & x(gloseg2(iseg))+xa1(iseg)*y(gloseg1(iseg))
456 IF(nseg1.GT.nseg2)
THEN 457 DO iseg = minseg+1,maxseg
459 & x(gloseg1(iseg))+xa2(iseg)*y(gloseg2(iseg))
461 ELSEIF(nseg2.GT.nseg1)
THEN 462 IF(ielm1.EQ.12.OR.ielm2.EQ.12)
THEN 464 DO i = npoin+1,npoin+nelem
468 DO iseg = minseg+1,maxseg
469 x(gloseg2(iseg))=0.d0
472 DO iseg = minseg+1,maxseg
474 & x(gloseg2(iseg))+xa2(iseg)*y(gloseg1(iseg))
478 ELSEIF(typext(1:1).NE.
'0')
THEN 480 WRITE(
lu,1001) typext
488 ELSEIF(op(1:8).EQ.
'X=-TAY ')
THEN 492 IF(typdia(1:1).EQ.
'Q')
THEN 493 CALL ov (
'X=-YZ ', x , y , da , c , npoin )
494 ELSEIF(typdia(1:1).EQ.
'I')
THEN 495 CALL ov (
'X=-Y ', x , y , z , c , npoin )
496 ELSEIF(typdia(1:1).EQ.
'0')
THEN 497 CALL ov (
'X=C ', x , y , da , 0.d0 , npoin )
499 WRITE(
lu,2001) typdia
506 IF(typext(1:1).EQ.
'Q'.OR.typext(1:1).EQ.
'S')
THEN 510 & x(gloseg1(iseg))-xa2(iseg)*y(gloseg2(iseg))
512 & x(gloseg2(iseg))-xa1(iseg)*y(gloseg1(iseg))
514 IF(nseg1.GT.nseg2)
THEN 515 DO iseg = minseg+1,maxseg
517 & x(gloseg1(iseg))-xa2(iseg)*y(gloseg2(iseg))
519 ELSEIF(nseg2.GT.nseg1)
THEN 520 IF(ielm1.EQ.12.OR.ielm2.EQ.12)
THEN 522 DO i = npoin+1,npoin+nelem
526 DO iseg = minseg+1,maxseg
527 x(gloseg2(iseg))=0.d0
530 DO iseg = minseg+1,maxseg
532 & x(gloseg2(iseg))-xa2(iseg)*y(gloseg1(iseg))
536 ELSEIF(typext(1:1).NE.
'0')
THEN 538 WRITE(
lu,1001) typext
546 ELSEIF(op(1:8).EQ.
'X=X+TAY ')
THEN 550 IF(typdia(1:1).EQ.
'Q')
THEN 551 CALL ov (
'X=X+YZ ', x , y , da , c , npoin )
552 ELSEIF(typdia(1:1).EQ.
'I')
THEN 553 CALL ov (
'X=X+Y ', x , y , z , c , npoin )
554 ELSEIF(typdia(1:1).NE.
'0')
THEN 555 WRITE(
lu,2001) typdia
562 IF(typext(1:1).EQ.
'Q'.OR.typext(1:1).EQ.
'S')
THEN 566 & x(gloseg1(iseg))+xa2(iseg)*y(gloseg2(iseg))
568 & x(gloseg2(iseg))+xa1(iseg)*y(gloseg1(iseg))
570 IF(nseg1.GT.nseg2)
THEN 571 DO iseg = minseg+1,maxseg
573 & x(gloseg1(iseg))+xa2(iseg)*y(gloseg2(iseg))
575 ELSEIF(nseg2.GT.nseg1)
THEN 576 DO iseg = minseg+1,maxseg
578 & x(gloseg2(iseg))+xa2(iseg)*y(gloseg1(iseg))
582 ELSEIF(typext(1:1).NE.
'0')
THEN 584 WRITE(
lu,1001) typext
592 ELSEIF(op(1:8).EQ.
'X=X-TAY ')
THEN 596 IF(typdia(1:1).EQ.
'Q')
THEN 597 CALL ov (
'X=X-YZ ', x , y , da , c , npoin )
598 ELSEIF(typdia(1:1).EQ.
'I')
THEN 599 CALL ov (
'X=X-Y ', x , y , z , c , npoin )
600 ELSEIF(typdia(1:1).NE.
'0')
THEN 601 WRITE(
lu,2001) typdia
608 IF(typext(1:1).EQ.
'Q'.OR.typext(1:1).EQ.
'S')
THEN 612 & x(gloseg1(iseg))-xa2(iseg)*y(gloseg2(iseg))
614 & x(gloseg2(iseg))-xa1(iseg)*y(gloseg1(iseg))
616 IF(nseg1.GT.nseg2)
THEN 617 DO iseg = minseg+1,maxseg
619 & x(gloseg1(iseg))-xa2(iseg)*y(gloseg2(iseg))
621 ELSEIF(nseg2.GT.nseg1)
THEN 622 DO iseg = minseg+1,maxseg
624 & x(gloseg2(iseg))-xa2(iseg)*y(gloseg1(iseg))
628 ELSEIF(typext(1:1).NE.
'0')
THEN 630 WRITE(
lu,1001) typext
638 ELSEIF(op(1:8).EQ.
'X=X+CTAY')
THEN 642 IF(typdia(1:1).EQ.
'Q')
THEN 643 CALL ov (
'X=X+CYZ ', x , y , da , c , npoin )
644 ELSEIF(typdia(1:1).EQ.
'I')
THEN 645 CALL ov (
'X=X+CY ', x , y , z , c , npoin )
646 ELSEIF(typdia(1:1).NE.
'0')
THEN 647 WRITE(
lu,2001) typdia
654 IF(typext(1:1).EQ.
'Q'.OR.typext(1:1).EQ.
'S')
THEN 658 & x(gloseg1(iseg))+c*xa2(iseg)*y(gloseg2(iseg))
660 & x(gloseg2(iseg))+c*xa1(iseg)*y(gloseg1(iseg))
662 IF(nseg1.GT.nseg2)
THEN 663 DO iseg = minseg+1,maxseg
665 & x(gloseg1(iseg))+c*xa2(iseg)*y(gloseg2(iseg))
667 ELSEIF(nseg2.GT.nseg1)
THEN 668 DO iseg = minseg+1,maxseg
670 & x(gloseg2(iseg))+c*xa2(iseg)*y(gloseg1(iseg))
674 ELSEIF(typext(1:1).NE.
'0')
THEN 676 WRITE(
lu,1001) typext
698 1001
FORMAT(1x,
'MVSEG (BIEF) : EXTRADIAG. TERMS UNKNOWN TYPE : ',a1)
699 2001
FORMAT(1x,
'MVSEG (BIEF) : DIAGONAL : UNKNOWN TYPE : ',a1)
700 3001
FORMAT(1x,
'MVSEG (BIEF) : UNKNOWN OPERATION : ',a8)
subroutine ov(OP, X, Y, Z, C, DIM1)
subroutine mvseg(OP, X, DA, TYPDIA, XA1, XA2, TYPEXT, Y, C, NPOIN, NELEM, NSEG1, NSEG2, GLOSEG1, GLOSEG2, IELM1, IELM2)