5 &(op , dm,typdim,xm,typexm, dn,typdin,xn,typexn, d,c,
6 & ikle,nelem,nelmax,ndiag)
103 INTEGER,
INTENT(IN) :: NELEM,NELMAX,NDIAG
104 INTEGER,
INTENT(IN) :: IKLE(nelmax,4)
105 CHARACTER(LEN=8),
INTENT(IN) :: OP
106 DOUBLE PRECISION,
INTENT(IN) :: DN(*),D(*),XN(nelmax,*)
107 DOUBLE PRECISION,
INTENT(INOUT) :: DM(*),XM(nelmax,*)
108 CHARACTER(LEN=1),
INTENT(INOUT) :: TYPDIM,TYPEXM,TYPDIN,TYPEXN
109 DOUBLE PRECISION,
INTENT(IN) :: C
117 IF(op(1:8).EQ.
'M=N ')
THEN 119 IF(typdin(1:1).EQ.
'Q')
THEN 120 CALL ov(
'X=Y ', x=dm, y=dn, dim1=ndiag)
121 ELSEIF(typdin(1:1).EQ.
'I'.OR.typdin(1:1).EQ.
'0')
THEN 124 WRITE(
lu,6) typdin(1:1)
125 6
FORMAT(1x,
'OM1211 (BIEF) : TYPDIN UNKNOWN :',a1)
129 typdim(1:1)=typdin(1:1)
131 IF(typexn(1:1).EQ.
'Q')
THEN 133 CALL ov(
'X=Y ', x=xm(1,i), y=xn(1,i), dim1=nelem)
135 ELSEIF(typexn(1:1).NE.
'0')
THEN 136 WRITE(
lu,11) typexn(1:1)
137 11
FORMAT(1x,
'OM1211 (BIEF) : TYPEXN UNKNOWN :',a1)
142 typexm(1:1)=typexn(1:1)
146 ELSEIF(op(1:8).EQ.
'M=CN ')
THEN 148 CALL ov(
'X=CY ', x=dm, y=dn, c=c, dim1=ndiag)
150 IF(typexn(1:1).EQ.
'Q')
THEN 152 CALL ov(
'X=CY ', x=xm(1,i), y=xn(1,i), c=c, dim1=nelem)
154 ELSEIF(typexn(1:1).NE.
'0')
THEN 155 WRITE(
lu,11) typexn(1:1)
160 typdim(1:1)=typdin(1:1)
161 typexm(1:1)=typexn(1:1)
165 ELSEIF(op(1:8).EQ.
'M=CM ')
THEN 167 CALL ov(
'X=CX ', x=dm, c=c, dim1=ndiag)
169 IF(typexm(1:1).EQ.
'Q')
THEN 171 CALL ov(
'X=CX ', x=xm(1,i), c=c, dim1=nelem)
173 ELSEIF(typexm(1:1).NE.
'0')
THEN 174 WRITE(
lu,11) typexm(1:1)
181 ELSEIF(op(1:8).EQ.
'M=M+CN ')
THEN 183 IF(typdin(1:1).EQ.
'I')
THEN 184 CALL ov(
'X=X+C ', x=dm, c=c, dim1=ndiag)
185 ELSEIF(typdin(1:1).NE.
'0')
THEN 186 CALL ov(
'X=X+CY ', x=dm, y=dn, c=c, dim1=ndiag)
189 IF(typexn(1:1).EQ.
'Q')
THEN 190 IF(typexm(1:1).NE.
'Q')
THEN 191 WRITE(
lu,98) typexm(1:1),op(1:8),typexn(1:1)
192 98
FORMAT(1x,
'OM1211 (BIEF) : TYPEXM = ',a1,
' DOES NOT GO ',
193 & /,1x,
'FOR THE OPERATION : ',a8,
' WITH TYPEXN = ',a1)
198 CALL ov(
'X=X+CY ', x=xm(1,i), y=xn(1,i), c=c, dim1=nelem)
200 ELSEIF(typexn(1:1).NE.
'0')
THEN 201 WRITE(
lu,11) typexn(1:1)
208 ELSEIF(op(1:8).EQ.
'M=M+N ')
THEN 210 CALL ov(
'X=X+Y ', x=dm, y=dn, dim1=ndiag)
212 IF(typexn(1:1).EQ.
'Q')
THEN 213 IF(typexm(1:1).NE.
'Q')
THEN 214 WRITE(
lu,98) typexm(1:1),op(1:8),typexn(1:1)
219 CALL ov(
'X=X+Y ', x=xm(1,i), y=xn(1,i), dim1=nelem)
221 ELSEIF(typexn(1:1).NE.
'0')
THEN 222 WRITE(
lu,11) typexn(1:1)
229 ELSEIF(op(1:8).EQ.
'M=MD ')
THEN 234 IF(typdim(1:1).EQ.
'Q')
THEN 235 CALL ov(
'X=XY ', x=dm, y=d, dim1=ndiag)
236 ELSEIF(typdim(1:1).EQ.
'I')
THEN 237 CALL ov(
'X=Y ', x=dm, y=d, dim1=ndiag)
239 ELSEIF(typdim(1:1).NE.
'0')
THEN 240 WRITE(
lu,13) typdim(1:1)
241 13
FORMAT(1x,
'OM1211 (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,1))
256 xm(ielem, 4) = xm(ielem, 4) * d(ikle(ielem,3))
257 xm(ielem, 5) = xm(ielem, 5) * d(ikle(ielem,1))
258 xm(ielem, 6) = xm(ielem, 6) * d(ikle(ielem,2))
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,3))
265 ELSEIF(typexm(1:1).NE.
'0')
THEN 273 ELSEIF(op(1:8).EQ.
'M=TN ')
THEN 277 IF(typdin(1:1).EQ.
'Q')
THEN 278 CALL ov(
'X=Y ', x=dm, y=dn, dim1=ndiag)
279 ELSEIF(typdin(1:1).EQ.
'I'.OR.typdin(1:1).EQ.
'0')
THEN 282 WRITE(
lu,6) typdin(1:1)
286 typdim(1:1)=typdin(1:1)
290 IF(typexm(1:1).EQ.
'Q')
THEN 294 xm(ielem, 1) = xn(ielem, 4)
295 xm(ielem, 2) = xn(ielem, 7)
296 xm(ielem, 3) = xn(ielem, 1)
297 xm(ielem, 4) = xn(ielem, 8)
298 xm(ielem, 5) = xn(ielem, 2)
299 xm(ielem, 6) = xn(ielem, 5)
300 xm(ielem, 7) = xn(ielem, 3)
301 xm(ielem, 8) = xn(ielem, 6)
302 xm(ielem, 9) = xn(ielem, 9)
306 ELSEIF(typexm(1:1).NE.
'0')
THEN 314 ELSEIF(op(1:8).EQ.
'M=DM ')
THEN 318 IF(typdim(1:1).EQ.
'Q')
THEN 319 CALL ov(
'X=XY ', x=dm, y=d, dim1=ndiag)
320 ELSEIF(typdim(1:1).EQ.
'I')
THEN 321 CALL ov(
'X=Y ', x=dm, y=d, dim1=ndiag)
323 ELSEIF(typdim(1:1).NE.
'0')
THEN 324 WRITE(
lu,13) typdim(1:1)
331 IF(typexm(1:1).EQ.
'Q')
THEN 335 xm(ielem, 1) = xm(ielem, 1) * d(ikle(ielem,1))
336 xm(ielem, 2) = xm(ielem, 2) * d(ikle(ielem,1))
337 xm(ielem, 3) = xm(ielem, 3) * d(ikle(ielem,2))
338 xm(ielem, 4) = xm(ielem, 4) * d(ikle(ielem,2))
339 xm(ielem, 5) = xm(ielem, 5) * d(ikle(ielem,3))
340 xm(ielem, 6) = xm(ielem, 6) * d(ikle(ielem,3))
341 xm(ielem, 7) = xm(ielem, 7) * d(ikle(ielem,4))
342 xm(ielem, 8) = xm(ielem, 8) * d(ikle(ielem,4))
343 xm(ielem, 9) = xm(ielem, 9) * d(ikle(ielem,4))
347 ELSEIF(typexm(1:1).NE.
'0')
THEN 349 163
FORMAT(1x,
'OM1211 (BIEF) : TYPEXM NOT AVAILABLE : ',a1)
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,
'OM1211 (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,
'OM1211 (BIEF) : UNKNOWN OPERATION : ',a8)
subroutine ov(OP, X, Y, Z, C, DIM1)
subroutine om1211(OP, DM, TYPDIM, XM, TYPEXM, DN, TYPDIN, XN, TYPEXN, D, C, IKLE, NELEM, NELMAX, NDIAG)