5 &(op , dm,typdim,xm,typexm, dn,typdin,xn,typexn, d,c,
6 & ndiag,nseg1,nseg2,gloseg,sizglo)
96 INTEGER,
INTENT(IN) :: NDIAG,NSEG1,NSEG2,SIZGLO
97 INTEGER,
INTENT(IN) :: GLOSEG(sizglo,2)
98 CHARACTER(LEN=8),
INTENT(IN) :: OP
99 DOUBLE PRECISION,
INTENT(IN) :: DN(*),D(*)
100 DOUBLE PRECISION,
INTENT(INOUT) :: XM(*)
101 DOUBLE PRECISION,
INTENT(IN) :: XN(*)
102 CHARACTER(LEN=1),
INTENT(INOUT) :: TYPDIM,TYPEXM,TYPDIN,TYPEXN
103 DOUBLE PRECISION,
INTENT(INOUT) :: DM(*)
104 DOUBLE PRECISION,
INTENT(IN) :: C
118 dimx=min(nseg1,nseg2)
120 IF(op(3:8).EQ.
'N ')
THEN 122 IF(typdin(1:1).EQ.
'Q')
THEN 123 CALL ov(
'X=Y ', x=dm, y=dn, dim1=ndiag)
124 ELSEIF(typdin(1:1).EQ.
'I'.OR.typdin(1:1).EQ.
'0')
THEN 127 WRITE(
lu,6) typdin(1:1)
128 6
FORMAT(1x,
'OMSEG (BIEF) : TYPDIN UNKNOWN :',a1)
132 typdim(1:1)=typdin(1:1)
134 IF(typexn(1:1).EQ.
'S')
THEN 135 CALL ov(
'X=Y ', x=xm, y=xn, dim1=nseg1)
136 ELSEIF(typexn(1:1).EQ.
'Q')
THEN 137 CALL ov(
'X=Y ', x=xm, y=xn, dim1=nseg1+nseg2)
138 ELSEIF(typexn(1:1).NE.
'0')
THEN 139 WRITE(
lu,11) typexn(1:1)
140 11
FORMAT(1x,
'OMSEG (BIEF) : TYPEXN UNKNOWN :',a1)
144 typexm(1:1)=typexn(1:1)
148 ELSEIF(op(3:8).EQ.
'CN ')
THEN 150 CALL ov(
'X=CY ', x=dm, y=dn, c=c, dim1=ndiag)
152 IF(typexn(1:1).EQ.
'S')
THEN 153 CALL ov(
'X=CY ', x=xm, y=xn, c=c, dim1=nseg1)
154 ELSEIF(typexn(1:1).EQ.
'Q')
THEN 155 CALL ov(
'X=CY ', x=xm, y=xn, c=c, dim1=nseg1+nseg2)
156 ELSEIF(typexn(1:1).NE.
'0')
THEN 157 WRITE(
lu,11) typexn(1:1)
162 typdim(1:1)=typdin(1:1)
163 typexm(1:1)=typexn(1:1)
167 ELSEIF(op(3:8).EQ.
'CM ')
THEN 169 CALL ov(
'X=CX ', x=dm, c=c, dim1=ndiag)
171 IF(typexm(1:1).EQ.
'S')
THEN 172 CALL ov(
'X=CX ', x=xm, c=c, dim1=nseg1)
173 ELSEIF(typexm(1:1).EQ.
'Q')
THEN 174 CALL ov(
'X=CX ', x=xm, c=c, dim1=nseg1+nseg2)
175 ELSEIF(typexm(1:1).NE.
'0')
THEN 176 WRITE(
lu,11) typexm(1:1)
183 ELSEIF(op(3:8).EQ.
'M+CN ' .OR.
184 & (op(3:8).EQ.
'M+CTN ').AND.typexn(1:1).NE.
'Q')
THEN 186 IF(typdin(1:1).EQ.
'I')
THEN 187 CALL ov(
'X=X+C ', x=dm, c=c, dim1=ndiag)
188 ELSEIF(typdin(1:1).NE.
'0')
THEN 189 CALL ov(
'X=X+CY ', x=dm, y=dn, c=c, dim1=ndiag)
192 IF(typexn(1:1).EQ.
'S')
THEN 193 CALL ov(
'X=X+CY ', x=xm, y=xn, c=c, dim1=nseg1)
194 IF(typexm(1:1).EQ.
'Q')
THEN 195 CALL ov(
'X=X+CY ', x=xm(dimx+1:dimx+nseg1), y=xn, c=c,
198 ELSEIF(typexn(1:1).EQ.
'Q')
THEN 199 IF(typexm(1:1).NE.
'Q')
THEN 200 WRITE(
lu,98) typexm(1:1),op(1:8),typexn(1:1)
201 98
FORMAT(1x,
'OMSEG (BIEF) : TYPEXM = ',a1,
' DOES NOT GO',
202 & /,1x,
'FOR THE OPERATION : ',a8,
' WITH TYPEXN = ',a1)
206 CALL ov(
'X=X+CY ', x=xm, y=xn, c=c, dim1=nseg1+nseg2)
207 ELSEIF(typexn(1:1).NE.
'0')
THEN 208 WRITE(
lu,11) typexn(1:1)
215 ELSEIF(op(3:8).EQ.
'M+CTN ')
THEN 219 CALL ov(
'X=X+CY ', x=dm, y=dn, c=c, dim1=ndiag)
221 IF(nseg1.NE.nseg2)
THEN 222 WRITE(
lu,*)
'M+CTN : RECTANGULAR MATRIX 227 IF(typexn(1:1).EQ.
'Q')
THEN 228 IF(typexm(1:1).NE.
'Q')
THEN 229 WRITE(
lu,98) typexm(1:1),op(1:8),typexn(1:1)
233 CALL ov(
'X=X+CY ', x=xm, y=xn(dimx+1:dimx+nseg1), c=c,
235 CALL ov(
'X=X+CY ', x=xm(dimx+1:dimx+nseg1), y=xn, c=c,
238 WRITE(
lu,11) typexn(1:1)
245 ELSEIF(op(3:8).EQ.
'TN ')
THEN 247 CALL ov(
'X=Y ', x=dm, y=dn, dim1=ndiag)
249 IF(typexn(1:1).EQ.
'S')
THEN 250 CALL ov(
'X=Y ', x=xm, y=xn, dim1=nseg1)
251 ELSEIF(typexn(1:1).EQ.
'Q')
THEN 252 IF(typexm(1:1).NE.
'S'.AND.nseg1.NE.nseg2)
THEN 253 WRITE(
lu,*)
'TN : RECTANGULAR MATRIX 258 CALL ov(
'X=Y ', x=xm, y=xn(dimx+1:dimx+nseg1), dim1=nseg1)
259 CALL ov(
'X=Y ', x=xm(dimx+1:dimx+nseg1), y=xn, dim1=nseg1)
260 ELSEIF(typexn(1:1).NE.
'0')
THEN 261 WRITE(
lu,11) typexn(1:1)
265 typdim(1:1)=typdin(1:1)
266 typexm(1:1)=typexn(1:1)
270 ELSEIF(op(3:8).EQ.
'M+N '.OR.
271 & (op(3:8).EQ.
'M+TN ').AND.typexn(1:1).NE.
'Q')
THEN 273 CALL ov(
'X=X+Y ', x=dm, y=dn, dim1=ndiag)
275 IF(typexn(1:1).EQ.
'S')
THEN 276 CALL ov(
'X=X+Y ', x=xm, y=xn, dim1=nseg1)
277 IF(typexm(1:1).EQ.
'Q')
THEN 278 CALL ov(
'X=X+Y ', x=xm(dimx+1:dimx+nseg1), y=xn, dim1=nseg1)
280 ELSEIF(typexn(1:1).EQ.
'Q')
THEN 281 IF(typexm(1:1).NE.
'Q')
THEN 282 WRITE(
lu,98) typexm(1:1),op(1:8),typexn(1:1)
286 CALL ov(
'X=X+Y ', x=xm, y=xn, dim1=nseg1+nseg2)
287 ELSEIF(typexn(1:1).NE.
'0')
THEN 288 WRITE(
lu,11) typexn(1:1)
295 ELSEIF(op(3:8).EQ.
'M+TN ')
THEN 299 CALL ov(
'X=X+Y ', x=dm, y=dn, dim1=ndiag)
301 IF(nseg1.NE.nseg2)
THEN 302 WRITE(
lu,*)
'M+TN : RECTANGULAR MATRIX 307 IF(typexm(1:1).EQ.
'Q')
THEN 308 CALL ov(
'X=X+Y ', x=xm, y=xn(dimx+1:dimx+nseg1), dim1=nseg1)
309 CALL ov(
'X=X+Y ', x=xm(dimx+1:dimx+nseg1), y=xn, dim1=nseg1)
310 ELSEIF(typexn(1:1).NE.
'0')
THEN 311 WRITE(
lu,11) typexn(1:1)
315 typdim(1:1)=typdin(1:1)
316 typexm(1:1)=typexn(1:1)
320 ELSEIF(op(3:8).EQ.
'MD ')
THEN 324 IF(typdim(1:1).EQ.
'Q')
THEN 325 CALL ov(
'X=XY ', x=dm, y=d, dim1=ndiag)
326 ELSEIF(typdim(1:1).EQ.
'I')
THEN 327 CALL ov(
'X=Y ', x=dm, y=d, dim1=ndiag)
329 ELSEIF(typdim(1:1).NE.
'0')
THEN 330 WRITE(
lu,13) typdim(1:1)
337 IF(typexm(1:1).EQ.
'Q')
THEN 339 DO iseg = 1 , min(nseg1,nseg2)
340 xm(iseg) = xm(iseg) * d(gloseg(iseg,2))
341 xm(iseg+dimx) = xm(iseg+dimx) * d(gloseg(iseg,1))
343 IF(nseg1.GT.nseg2)
THEN 344 DO iseg = min(nseg1,nseg2)+1,max(nseg1,nseg2)
345 xm(iseg+dimx)=xm(iseg+dimx)*d(gloseg(iseg,1))
347 ELSEIF(nseg2.GT.nseg1)
THEN 348 DO iseg = min(nseg1,nseg2)+1,max(nseg1,nseg2)
349 xm(iseg+dimx)=xm(iseg+dimx)*d(gloseg(iseg,2))
353 ELSEIF(typexm(1:1).EQ.
'S')
THEN 355 171
FORMAT(1x,
'OMSEG (BIEF) : M=MD , M MUST BE NON-SYMMETRIC')
358 ELSEIF(typexm(1:1).NE.
'0')
THEN 359 173
FORMAT(1x,
'OMSEG (BIEF) : TYPEXM NOT AVAILABLE : ',a1)
366 ELSEIF(op(3:8).EQ.
'DM ')
THEN 370 IF(typdim(1:1).EQ.
'Q')
THEN 371 CALL ov(
'X=XY ', x=dm, y=d, dim1=ndiag)
372 ELSEIF(typdim(1:1).EQ.
'I')
THEN 373 CALL ov(
'X=Y ', x=dm, y=d, dim1=ndiag)
375 ELSEIF(typdim(1:1).NE.
'0')
THEN 376 WRITE(
lu,13) typdim(1:1)
383 IF(typexm(1:1).EQ.
'Q')
THEN 385 DO iseg = 1 , min(nseg1,nseg2)
386 xm(iseg) = xm(iseg) * d(gloseg(iseg,1))
387 xm(iseg+dimx) = xm(iseg+dimx) * d(gloseg(iseg,2))
389 IF(nseg1.GT.nseg2)
THEN 390 DO iseg = min(nseg1,nseg2)+1,max(nseg1,nseg2)
391 xm(iseg+dimx)=xm(iseg+dimx)*d(gloseg(iseg,2))
393 ELSEIF(nseg2.GT.nseg1)
THEN 394 DO iseg = min(nseg1,nseg2)+1,max(nseg1,nseg2)
395 xm(iseg+dimx)=xm(iseg+dimx)*d(gloseg(iseg,1))
399 ELSEIF(typexm(1:1).EQ.
'S')
THEN 401 181
FORMAT(1x,
'OMSEG (BIEF) : M=MD IS NOT SYMMETRIC')
404 ELSEIF(typexm(1:1).NE.
'0')
THEN 405 WRITE(
lu,173) typexm(1:1)
412 ELSEIF(op(3:8).EQ.
'M-DN ')
THEN 416 IF(typdim(1:1).EQ.
'Q')
THEN 417 CALL ov(
'X=X-YZ ', x=dm, y=dn, z=d, dim1=ndiag)
418 ELSEIF(typdim(1:1).NE.
'0')
THEN 419 WRITE(
lu,13) typdim(1:1)
426 IF(typexm(1:1).EQ.
'Q')
THEN 427 IF(typexn(1:1).EQ.
'Q')
THEN 429 xm(iseg )=xm(iseg )-xn(iseg )*d(gloseg(iseg,1))
430 xm(iseg+dimx)=xm(iseg+dimx)-xn(iseg+dimx)*d(gloseg(iseg,2))
432 ELSEIF(typexn(1:1).EQ.
'S')
THEN 434 xm(iseg ) = xm(iseg ) - xn(iseg) * d(gloseg(iseg,1))
435 xm(iseg+dimx) = xm(iseg+dimx) - xn(iseg) * d(gloseg(iseg,2))
437 ELSEIF(typexn(1:1).NE.
'0')
THEN 438 WRITE(
lu,11) typexn(1:1)
443 WRITE(
lu,173) typexm(1:1)
450 ELSEIF(op(3:8).EQ.
'M-ND ')
THEN 454 IF(typdim(1:1).EQ.
'Q')
THEN 455 CALL ov(
'X=X-YZ ', x=dm, y=dn, z=d, dim1=ndiag)
456 ELSEIF(typdim(1:1).NE.
'0')
THEN 457 WRITE(
lu,13) typdim(1:1)
464 IF(typexm(1:1).EQ.
'Q')
THEN 465 IF(typexn(1:1).EQ.
'Q')
THEN 467 xm(iseg )=xm(iseg )-xn(iseg )*d(gloseg(iseg,2))
468 xm(iseg+dimx)=xm(iseg+dimx)-xn(iseg+dimx)*d(gloseg(iseg,1))
470 ELSEIF(typexn(1:1).EQ.
'S')
THEN 472 xm(iseg ) = xm(iseg ) - xn(iseg) * d(gloseg(iseg,2))
473 xm(iseg+dimx) = xm(iseg+dimx) - xn(iseg) * d(gloseg(iseg,1))
475 ELSEIF(typexn(1:1).NE.
'0')
THEN 476 WRITE(
lu,11) typexn(1:1)
481 WRITE(
lu,173) typexm(1:1)
488 ELSEIF(op(3:8).EQ.
'DMD ')
THEN 492 IF(typdim(1:1).EQ.
'Q')
THEN 493 CALL ov(
'X=XY ', x=dm, y=d, dim1=ndiag)
494 CALL ov(
'X=XY ', x=dm, y=d, dim1=ndiag)
495 ELSEIF(typdim(1:1).EQ.
'I')
THEN 496 CALL ov(
'X=YZ ', x=dm, y=d, z=d, dim1=ndiag)
498 ELSEIF(typdim(1:1).NE.
'0')
THEN 499 WRITE(
lu,13) typdim(1:1)
500 13
FORMAT(1x,
'OMSEG (BIEF) : TYPDIM UNKNOWN :',a1)
507 IF(typexm(1:1).EQ.
'S')
THEN 510 xm(iseg)=xm(iseg)*d(gloseg(iseg,1))*d(gloseg(iseg,2))
513 ELSEIF(typexm(1:1).EQ.
'Q')
THEN 517 & *d(gloseg(iseg,1))*d(gloseg(iseg,2))
518 xm(iseg+dimx)=xm(iseg+dimx)
519 & *d(gloseg(iseg,1))*d(gloseg(iseg,2))
522 ELSEIF(typexm(1:1).NE.
'0')
THEN 523 WRITE(
lu,21) typexm(1:1)
524 21
FORMAT(1x,
'OMSEG (BIEF) : TYPEXM UNKNOWN :',a1)
531 ELSEIF(op(3:8).EQ.
'M+D ')
THEN 533 CALL ov(
'X=X+Y ', x=dm, y=d, dim1=ndiag)
539 ELSEIF(op(3:8).EQ.
'0 ')
THEN 541 CALL ov(
'X=C ', x=dm, c=0.d0, dim1=ndiag)
543 IF(typexm(1:1).EQ.
'S')
THEN 544 CALL ov(
'X=C ', x=xm, c=0.d0, dim1=nseg1)
545 ELSEIF(typexm(1:1).EQ.
'Q')
THEN 546 CALL ov(
'X=C ', x=xm, c=0.d0, dim1=nseg1+nseg2)
547 ELSEIF(typexm(1:1).NE.
'0')
THEN 548 WRITE(
lu,711) typexm(1:1)
549 711
FORMAT(1x,
'OMSEG (BIEF) : TYPEXM UNKNOWN :',a1)
559 ELSEIF(op(3:8).EQ.
'X(M) ')
THEN 561 IF(typexm(1:1).EQ.
'S')
THEN 562 CALL ov(
'X=Y ',x=xm(dimx+1:dimx+nseg1),
563 & y=xm( 1: nseg1), dim1=nseg1)
564 ELSEIF(typexm(1:1).NE.
'0')
THEN 565 WRITE(
lu,811) typexm(1:1)
566 811
FORMAT(1x,
'OMSEG (BIEF): MATRIX ALREADY NON SYMMETRICAL: ',a1)
600 41
FORMAT(1x,
'OMSEG (BIEF) : UNKNOWN OPERATION : ',a8)
subroutine omseg(OP, DM, TYPDIM, XM, TYPEXM, DN, TYPDIN, XN, TYPEXN, D, C, NDIAG, NSEG1, NSEG2, GLOSEG, SIZGLO)
subroutine ov(OP, X, Y, Z, C, DIM1)