5 &(op , dm,typdim,xm,typexm, dn,typdin,xn,typexn, d,c,
6 & ikle,nelem,nelmax,ndiag)
105 INTEGER,
INTENT(IN) :: NELEM,NELMAX,NDIAG
106 INTEGER,
INTENT(IN) :: IKLE(nelmax,4)
107 CHARACTER(LEN=8),
INTENT(IN) :: OP
108 DOUBLE PRECISION,
INTENT(IN) :: DN(*),D(*),XN(nelmax,*)
109 DOUBLE PRECISION,
INTENT(INOUT) :: DM(*),XM(nelmax,*)
110 CHARACTER(LEN=1),
INTENT(INOUT) :: TYPDIM,TYPEXM,TYPDIN,TYPEXN
111 DOUBLE PRECISION,
INTENT(IN) :: C
119 IF(op(1:8).EQ.
'M=N ')
THEN 121 IF(typdin(1:1).EQ.
'Q')
THEN 122 CALL ov(
'X=Y ', x=dm, y=dn, dim1=ndiag)
123 ELSEIF(typdin(1:1).EQ.
'I'.OR.typdin(1:1).EQ.
'0')
THEN 126 WRITE(
lu,6) typdin(1:1)
127 6
FORMAT(1x,
'OM1112 (BIEF) : TYPDIN UNKNOWN :',a1)
131 typdim(1:1)=typdin(1:1)
133 IF(typexn(1:1).EQ.
'Q')
THEN 135 CALL ov(
'X=Y ', x=xm(1,i), y=xn(1,i), dim1=nelem)
137 ELSEIF(typexn(1:1).NE.
'0')
THEN 138 WRITE(
lu,11) typexn(1:1)
139 11
FORMAT(1x,
'OM1112 (BIEF) : TYPEXN UNKNOWN :',a1)
144 typexm(1:1)=typexn(1:1)
148 ELSEIF(op(1:8).EQ.
'M=CN ')
THEN 150 CALL ov(
'X=CY ', x=dm, y=dn, c=c, dim1=ndiag)
152 IF(typexn(1:1).EQ.
'Q')
THEN 154 CALL ov(
'X=CY ', x=xm(1,i), y=xn(1,i), c=c, dim1=nelem)
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(1:8).EQ.
'M=CM ')
THEN 169 CALL ov(
'X=CX ', x=dm, c=c, dim1=ndiag)
171 IF(typexm(1:1).EQ.
'Q')
THEN 173 CALL ov(
'X=CX ', x=xm(1,i), c=c, dim1=nelem)
175 ELSEIF(typexm(1:1).NE.
'0')
THEN 176 WRITE(
lu,11) typexm(1:1)
183 ELSEIF(op(1:8).EQ.
'M=M+CN ')
THEN 185 IF(typdin(1:1).EQ.
'I')
THEN 186 CALL ov(
'X=X+C ', x=dm, c=c, dim1=ndiag)
187 ELSEIF(typdin(1:1).NE.
'0')
THEN 188 CALL ov(
'X=X+CY ', x=dm, y=dn, c=c, dim1=ndiag)
191 IF(typexn(1:1).EQ.
'Q')
THEN 192 IF(typexm(1:1).NE.
'Q')
THEN 193 WRITE(
lu,98) typexm(1:1),op(1:8),typexn(1:1)
194 98
FORMAT(1x,
'OM1112 (BIEF) : TYPEXM = ',a1,
' DOES NOT GO ',
195 & /,1x,
'FOR THE OPERATION : ',a8,
' WITH TYPEXN = ',a1)
200 CALL ov(
'X=X+CY ', x=xm(1,i), y=xn(1,i), c=c, dim1=nelem)
202 ELSEIF(typexn(1:1).NE.
'0')
THEN 203 WRITE(
lu,11) typexn(1:1)
210 ELSEIF(op(1:8).EQ.
'M=M+N ')
THEN 212 CALL ov(
'X=X+Y ', x=dm, y=dn, dim1=ndiag)
214 IF(typexn(1:1).EQ.
'Q')
THEN 215 IF(typexm(1:1).NE.
'Q')
THEN 216 WRITE(
lu,98) typexm(1:1),op(1:8),typexn(1:1)
221 CALL ov(
'X=X+Y ', x=xm(1,i), y=xn(1,i), dim1=nelem)
223 ELSEIF(typexn(1:1).NE.
'0')
THEN 224 WRITE(
lu,11) typexn(1:1)
231 ELSEIF(op(1:8).EQ.
'M=MD ')
THEN 235 IF(typdim(1:1).EQ.
'Q')
THEN 236 CALL ov(
'X=XY ', x=dm, y=d, dim1=ndiag)
237 ELSEIF(typdim(1:1).EQ.
'I')
THEN 238 CALL ov(
'X=Y ', x=dm, y=d, dim1=ndiag)
240 ELSEIF(typdim(1:1).NE.
'0')
THEN 241 WRITE(
lu,13) typdim(1:1)
242 13
FORMAT(1x,
'OM1112 (BIEF) : TYPDIM UNKNOWN :',a1)
249 IF(typexm(1:1).EQ.
'Q')
THEN 253 xm(ielem, 1) = xm(ielem, 1) * d(ikle(ielem,2))
254 xm(ielem, 2) = xm(ielem, 2) * d(ikle(ielem,3))
255 xm(ielem, 3) = xm(ielem, 3) * d(ikle(ielem,4))
256 xm(ielem, 4) = xm(ielem, 4) * d(ikle(ielem,1))
257 xm(ielem, 5) = xm(ielem, 5) * d(ikle(ielem,3))
258 xm(ielem, 6) = xm(ielem, 6) * d(ikle(ielem,4))
259 xm(ielem, 7) = xm(ielem, 7) * d(ikle(ielem,1))
260 xm(ielem, 8) = xm(ielem, 8) * d(ikle(ielem,2))
261 xm(ielem, 9) = xm(ielem, 9) * d(ikle(ielem,4))
265 ELSEIF(typexm(1:1).NE.
'0')
THEN 273 ELSEIF(op(1:8).EQ.
'M=DM ')
THEN 277 IF(typdim(1:1).EQ.
'Q')
THEN 278 CALL ov(
'X=XY ', x=dm, y=d, dim1=ndiag)
279 ELSEIF(typdim(1:1).EQ.
'I')
THEN 280 CALL ov(
'X=Y ', x=dm, y=d, dim1=ndiag)
282 ELSEIF(typdim(1:1).NE.
'0')
THEN 283 WRITE(
lu,13) typdim(1:1)
290 IF(typexm(1:1).EQ.
'Q')
THEN 294 xm(ielem, 1) = xm(ielem, 1) * d(ikle(ielem,1))
295 xm(ielem, 2) = xm(ielem, 2) * d(ikle(ielem,1))
296 xm(ielem, 3) = xm(ielem, 3) * d(ikle(ielem,1))
297 xm(ielem, 4) = xm(ielem, 4) * d(ikle(ielem,2))
298 xm(ielem, 5) = xm(ielem, 5) * d(ikle(ielem,2))
299 xm(ielem, 6) = xm(ielem, 6) * d(ikle(ielem,2))
300 xm(ielem, 7) = xm(ielem, 7) * d(ikle(ielem,3))
301 xm(ielem, 8) = xm(ielem, 8) * d(ikle(ielem,3))
302 xm(ielem, 9) = xm(ielem, 9) * d(ikle(ielem,3))
306 ELSEIF(typexm(1:1).NE.
'0')
THEN 308 163
FORMAT(1x,
'OM1112 (BIEF) : TYPEXM NOT AVAILABLE : ',a1)
315 ELSEIF(op(1:8).EQ.
'M=TN ')
THEN 319 IF(typdin(1:1).EQ.
'Q')
THEN 320 CALL ov(
'X=Y ', x=dm, y=dn, dim1=ndiag)
321 ELSEIF(typdin(1:1).EQ.
'I'.OR.typdin(1:1).EQ.
'0')
THEN 324 WRITE(
lu,6) typdin(1:1)
328 typdim(1:1)=typdin(1:1)
332 IF(typexm(1:1).EQ.
'Q')
THEN 336 xm(ielem, 1) = xn(ielem, 3)
337 xm(ielem, 2) = xn(ielem, 5)
338 xm(ielem, 3) = xn(ielem, 7)
339 xm(ielem, 4) = xn(ielem, 1)
340 xm(ielem, 5) = xn(ielem, 6)
341 xm(ielem, 6) = xn(ielem, 8)
342 xm(ielem, 7) = xn(ielem, 2)
343 xm(ielem, 8) = xn(ielem, 4)
344 xm(ielem, 9) = xn(ielem, 9)
348 ELSEIF(typexm(1:1).NE.
'0')
THEN 356 ELSEIF(op(1:8).EQ.
'M=M+D ')
THEN 358 IF(typdim(1:1).EQ.
'Q')
THEN 359 CALL ov(
'X=X+Y ', x=dm, y=d, dim1=ndiag)
361 WRITE(
lu,13) typdim(1:1)
368 ELSEIF(op(1:8).EQ.
'M=0 ')
THEN 370 CALL ov(
'X=C ', x=dm, c=0.d0, dim1=ndiag)
372 IF(typexm(1:1).EQ.
'Q')
THEN 374 CALL ov(
'X=C ', x=xm(1,i), c=0.d0, dim1=nelem)
376 ELSEIF(typexm(1:1).NE.
'0')
THEN 377 WRITE(
lu,711) typexm(1:1)
378 711
FORMAT(1x,
'OM1112 (BIEF) : TYPEXM UNKNOWN :',a1)
388 ELSEIF(op(1:8).EQ.
'M=MSK(M)')
THEN 390 IF(typexm(1:1).EQ.
'Q')
THEN 392 ELSEIF(typexm(1:1).EQ.
'0')
THEN 403 CALL ov(
'X=XY ', x=xm(1,i), y=d, dim1=nelem)
412 41
FORMAT(1x,
'OM1112 (BIEF) : UNKNOWN OPERATION : ',a8)
subroutine ov(OP, X, Y, Z, C, DIM1)
subroutine om1112(OP, DM, TYPDIM, XM, TYPEXM, DN, TYPDIN, XN, TYPEXN, D, C, IKLE, NELEM, NELMAX, NDIAG)