5 &(op ,dm,typdim,xm,typexm,dn,typdin,xn,typexn,d,c,
6 & ikle,nelem,nelmax,ndiag)
97 INTEGER,
INTENT(IN) :: NELEM,NELMAX,NDIAG
98 INTEGER,
INTENT(IN) :: IKLE(nelmax,2)
100 DOUBLE PRECISION,
INTENT(IN) :: DN(*),D(*)
101 DOUBLE PRECISION,
INTENT(INOUT) :: DM(*)
102 DOUBLE PRECISION,
INTENT(INOUT) :: XM(nelmax,*)
103 DOUBLE PRECISION,
INTENT(IN) :: XN(nelmax,*)
105 DOUBLE PRECISION,
INTENT(IN) :: C
107 CHARACTER(LEN=8),
INTENT(IN) :: OP
108 CHARACTER(LEN=1),
INTENT(INOUT) :: TYPDIM,TYPEXM,TYPDIN,TYPEXN
116 IF(op(3:8).EQ.
'N ')
THEN 118 IF(typdin(1:1).EQ.
'Q')
THEN 119 CALL ov(
'X=Y ', x=dm, y=dn, dim1=ndiag)
120 ELSEIF(typdin(1:1).EQ.
'I'.OR.typdin(1:1).EQ.
'0')
THEN 123 WRITE(
lu,6) typdin(1:1)
124 6
FORMAT(1x,
'OM0101 (BIEF) : TYPDIN UNKNOWN :',a1)
128 typdim(1:1)=typdin(1:1)
130 IF(typexn(1:1).EQ.
'S')
THEN 131 CALL ov(
'X=Y ', x=xm(1,1), y=xn(1,1), dim1=nelem)
132 ELSEIF(typexn(1:1).EQ.
'Q')
THEN 133 CALL ov(
'X=Y ', x=xm(1,1), y=xn(1,1), dim1=nelem)
134 CALL ov(
'X=Y ', x=xm(1,2), y=xn(1,2), dim1=nelem)
135 ELSEIF(typexn(1:1).NE.
'0')
THEN 136 WRITE(
lu,11) typexn(1:1)
137 11
FORMAT(1x,
'OM0101 (BIEF) : TYPEXN UNKNOWN :',a1)
141 typexm(1:1)=typexn(1:1)
145 ELSEIF(op(3:8).EQ.
'CN ')
THEN 147 CALL ov(
'X=CY ', x=dm, y=dn, c=c, dim1=ndiag)
149 IF(typexn(1:1).EQ.
'S')
THEN 150 CALL ov(
'X=CY ', x=xm(1,1), y=xn(1,1), dim1=nelem)
151 ELSEIF(typexn(1:1).EQ.
'Q')
THEN 152 CALL ov(
'X=CY ', x=xm(1,1), y=xn(1,1), dim1=nelem)
153 CALL ov(
'X=CY ', x=xm(1,2), y=xn(1,2), 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(3:8).EQ.
'M+CN ')
THEN 167 IF(typdin(1:1).EQ.
'I')
THEN 168 CALL ov(
'X=X+C ', x=dm, c=c, dim1=ndiag)
169 ELSEIF(typdin(1:1).NE.
'0')
THEN 170 CALL ov(
'X=X+CY ', x=dm, y=dn, c=c, dim1=ndiag)
173 IF(typexn(1:1).EQ.
'S')
THEN 174 CALL ov(
'X=X+CY ', x=xm(1,1), y=xn(1,1), c=c, dim1=nelem)
175 IF(typexm(1:1).EQ.
'Q')
THEN 176 CALL ov(
'X=X+CY ', x=xm(1,2), y=xn(1,1), c=c, dim1=nelem)
178 ELSEIF(typexn(1:1).EQ.
'Q')
THEN 179 IF(typexm(1:1).NE.
'Q')
THEN 180 WRITE(
lu,98) typexm(1:1),op(1:8),typexn(1:1)
181 98
FORMAT(1x,
'OM0101 (BIEF) : TYPEXM = ',a1,
' DOES NOT GO',
182 & /,1x,
'FOR THE OPERATION : ',a8,
' WITH TYPEXN = ',a1)
186 CALL ov(
'X=X+CY ', x=xm(1,1), y=xn(1,1), c=c, dim1=nelem)
187 CALL ov(
'X=X+CY ', x=xm(1,2), y=xn(1,2), c=c, dim1=nelem)
188 ELSEIF(typexn(1:1).NE.
'0')
THEN 189 WRITE(
lu,11) typexn(1:1)
196 ELSEIF(op(3:8).EQ.
'M+N '.OR.
197 & (op(3:8).EQ.
'M+TN ').AND.typexn(1:1).NE.
'Q')
THEN 199 CALL ov(
'X=X+Y ', x=dm, y=dn, dim1=ndiag)
201 IF(typexn(1:1).EQ.
'S')
THEN 202 CALL ov(
'X=X+Y ', x=xm(1,1), y=xn(1,1), dim1=nelem)
203 IF(typexm(1:1).EQ.
'Q')
THEN 204 CALL ov(
'X=X+Y ', x=xm(1,2), y=xn(1,1), dim1=nelem)
206 ELSEIF(typexn(1:1).EQ.
'Q')
THEN 207 IF(typexm(1:1).NE.
'Q')
THEN 208 WRITE(
lu,98) typexm(1:1),op(1:8),typexn(1:1)
212 CALL ov(
'X=X+Y ', x=xm(1,1), y=xn(1,1), dim1=nelem)
213 CALL ov(
'X=X+Y ', x=xm(1,2), y=xn(1,2), dim1=nelem)
214 ELSEIF(typexn(1:1).NE.
'0')
THEN 215 WRITE(
lu,11) typexn(1:1)
222 ELSEIF(op(3:8).EQ.
'TN ')
THEN 224 CALL ov(
'X=Y ', x=dm, y=dn, dim1=ndiag)
226 IF(typexn(1:1).EQ.
'S')
THEN 227 CALL ov(
'X=Y ', x=xm(1,1), y=xn(1,1), dim1=nelem)
228 ELSEIF(typexn(1:1).EQ.
'Q')
THEN 229 CALL ov(
'X=Y ', x=xm(1,1), y=xn(1,2), dim1=nelem)
230 CALL ov(
'X=Y ', x=xm(1,2), y=xn(1,1), dim1=nelem)
231 ELSEIF(typexn(1:1).NE.
'0')
THEN 232 WRITE(
lu,11) typexn(1:1)
236 typdim(1:1)=typdin(1:1)
237 typexm(1:1)=typexn(1:1)
241 ELSEIF(op(3:8).EQ.
'M+TN ')
THEN 245 CALL ov(
'X=X+Y ', x=dm, y=dn, dim1=ndiag)
247 IF(typexm(1:1).EQ.
'Q')
THEN 248 CALL ov(
'X=X+Y ', x=xm(1,1), y=xn(1,2), dim1=nelem)
249 CALL ov(
'X=X+Y ', x=xm(1,2), y=xn(1,1), dim1=nelem)
250 ELSEIF(typexn(1:1).NE.
'0')
THEN 251 WRITE(
lu,11) typexn(1:1)
255 typdim(1:1)=typdin(1:1)
256 typexm(1:1)=typexn(1:1)
260 ELSEIF(op(3:8).EQ.
'MD ')
THEN 264 IF(typdim(1:1).EQ.
'Q')
THEN 265 CALL ov(
'X=XY ', x=dm, y=d, dim1=ndiag)
266 ELSEIF(typdim(1:1).EQ.
'I')
THEN 267 CALL ov(
'X=Y ', x=dm, y=d, dim1=ndiag)
269 ELSEIF(typdim(1:1).NE.
'0')
THEN 270 WRITE(
lu,13) typdim(1:1)
277 IF(typexm(1:1).EQ.
'Q')
THEN 281 xm(ielem, 1) = xm(ielem, 1) * d(ikle(ielem,2))
282 xm(ielem, 2) = xm(ielem, 2) * d(ikle(ielem,1))
286 ELSEIF(typexm(1:1).EQ.
'S')
THEN 289 &
'OM0101 (BIEF) : M=MD NOT AVAILABLE IF M SYMMETRIC')
292 ELSEIF(typexm(1:1).NE.
'0')
THEN 293 WRITE(
lu,173) typexm(1:1)
294 173
FORMAT(1x,
'OM0101 (BIEF) : TYPEXM NOT AVAILABLE : ',a1)
301 ELSEIF(op(3:8).EQ.
'DM ')
THEN 305 IF(typdim(1:1).EQ.
'Q')
THEN 306 CALL ov(
'X=XY ', x=dm, y=d, dim1=ndiag)
307 ELSEIF(typdim(1:1).EQ.
'I')
THEN 308 CALL ov(
'X=Y ', x=dm, y=d, dim1=ndiag)
310 ELSEIF(typdim(1:1).NE.
'0')
THEN 311 WRITE(
lu,13) typdim(1:1)
318 IF(typexm(1:1).EQ.
'Q')
THEN 322 xm(ielem, 1) = xm(ielem, 1) * d(ikle(ielem,1))
323 xm(ielem, 2) = xm(ielem, 2) * d(ikle(ielem,2))
327 ELSEIF(typexm(1:1).EQ.
'S')
THEN 330 &
'OM0101 (BIEF) : M=MD NOT AVAILABLE IF M SYMMETRIC')
333 ELSEIF(typexm(1:1).NE.
'0')
THEN 334 WRITE(
lu,173) typexm(1:1)
341 ELSEIF(op(3:8).EQ.
'DMD ')
THEN 345 IF(typdim(1:1).EQ.
'Q')
THEN 346 CALL ov(
'X=XY ', x=dm, y=d, dim1=ndiag)
347 CALL ov(
'X=XY ', x=dm, y=d, dim1=ndiag)
348 ELSEIF(typdim(1:1).EQ.
'I')
THEN 349 CALL ov(
'X=YZ ', x=dm, y=d, z=d, dim1=ndiag)
351 ELSEIF(typdim(1:1).NE.
'0')
THEN 352 WRITE(
lu,13) typdim(1:1)
353 13
FORMAT(1x,
'OM0101 (BIEF) : TYPDIM UNKNOWN :',a1)
360 IF(typexm(1:1).EQ.
'S')
THEN 363 xm(ielem,1)=xm(ielem,1)* d(ikle(ielem,2)) * d(ikle(ielem,1))
366 ELSEIF(typexm(1:1).EQ.
'Q')
THEN 369 xm(ielem,1)=xm(ielem,1)* d(ikle(ielem,2)) * d(ikle(ielem,1))
370 xm(ielem,2)=xm(ielem,2)* d(ikle(ielem,1)) * d(ikle(ielem,2))
373 ELSEIF(typexm(1:1).NE.
'0')
THEN 374 WRITE(
lu,21) typexm(1:1)
375 21
FORMAT(1x,
'OM0101 (BIEF) : TYPEXM UNKNOWN :',a1)
382 ELSEIF(op(3:8).EQ.
'X(M) ')
THEN 384 IF(typexm(1:1).EQ.
'S')
THEN 385 CALL ov(
'X=Y ', x=xm(1,2), y=xm(1,1), dim1=nelem)
386 ELSEIF(typexm(1:1).NE.
'0')
THEN 387 WRITE(
lu,811) typexm(1:1)
388 811
FORMAT(1x,
'OM0101 (BIEF) : MATRIX ALREADY NON SYMMETRICAL: ',
397 ELSEIF(op(3:8).EQ.
'MSK(M)')
THEN 399 IF(typexm(1:1).EQ.
'S')
THEN 401 ELSEIF(typexm(1:1).EQ.
'Q')
THEN 403 ELSEIF(typexm(1:1).EQ.
'0')
THEN 408 WRITE(
lu,173) typexm(1:1)
415 CALL ov(
'X=XY ', x=xm(1,i), y=d, dim1=nelem)
424 41
FORMAT(1x,
'OM0101 (BIEF) : UNKNOWN OPERATION : ',a8)
subroutine ov(OP, X, Y, Z, C, DIM1)
subroutine om0101(OP, DM, TYPDIM, XM, TYPEXM, DN, TYPDIN, XN, TYPEXN, D, C, IKLE, NELEM, NELMAX, NDIAG)