5 &( op , x , a , y , c , mesh , lego )
98 CHARACTER(LEN=8) ,
INTENT(IN) :: OP
99 TYPE(bief_obj) ,
INTENT(INOUT) :: X
100 TYPE(bief_obj) ,
INTENT(IN) :: A,Y
101 DOUBLE PRECISION,
INTENT(IN) :: C
102 TYPE(bief_mesh) ,
INTENT(INOUT) :: MESH
103 LOGICAL ,
INTENT(IN),
OPTIONAL :: LEGO
107 INTEGER IELM1,IELM2,IELMX,IELMY,NELEM,NELMAX,SIZXA
108 INTEGER NPT,NPT1,NPT2,NPOIN,NPMAX,DIMIKM,NPTFR
110 INTEGER,
DIMENSION(:),
POINTER :: IKLE
116 IF(
PRESENT(lego))
THEN 124 IF(y%TYPE.NE.2.OR.a%TYPE.NE.3)
THEN 125 WRITE(
lu,60) x%NAME,x%TYPE
126 WRITE(
lu,61) y%NAME,y%TYPE
127 WRITE(
lu,62) a%NAME,a%TYPE
138 IF(op(3:3).EQ.
'T'.OR.op(4:4).EQ.
'T'.OR.op(5:5).EQ.
'T'.OR.
139 & op(6:6).EQ.
'T') trans = .true.
164 IF(.NOT.trans.AND.ielm2.NE.ielmy)
THEN 165 WRITE(
lu,60) x%NAME,x%TYPE
166 WRITE(
lu,61) y%NAME,y%TYPE
167 WRITE(
lu,62) a%NAME,a%TYPE
168 WRITE(
lu,64) ielm1,ielm2,ielmy
169 60
FORMAT(1x,
'MATVEC (BIEF) : NAME OF X : ',a6,
' TYPE : ',1i6)
170 61
FORMAT(1x,
' NAME OF Y : ',a6,
' TYPE : ',1i6)
171 62
FORMAT(1x,
' NAME OF A : ',a6,
' TYPE : ',1i6)
172 63
FORMAT(1x,
' NOT IMPLEMENTED')
173 64
FORMAT(1x,
'A AND Y INCOMPATIBLE : ',1i6,2x,1i6,
' AND ',1i6)
177 IF(trans.AND.ielm1.NE.ielmy)
THEN 178 WRITE(
lu,60) x%NAME,x%TYPE
179 WRITE(
lu,61) y%NAME,y%TYPE
180 WRITE(
lu,62) a%NAME,a%TYPE
181 WRITE(
lu,164) ielm1,ielm2,ielmy
182 164
FORMAT(1x,
'A AND Y INCOMPATIBLE : ',1i6,2x,1i6,
' AND ',1i6,/,
183 & 1x,
'BECAUSE THE TRANSPOSED OF A IS USED')
187 IF(.NOT.trans.AND.ielm1.NE.ielmx)
THEN 188 WRITE(
lu,60) x%NAME,x%TYPE
189 WRITE(
lu,61) y%NAME,y%TYPE
190 WRITE(
lu,62) a%NAME,a%TYPE
191 WRITE(
lu,65) ielm1,ielmx
192 65
FORMAT(1x,
'A AND X INCOMPATIBLE : ',1i6,2x,1i6,
' AND ',1i6)
196 IF(trans.AND.ielm2.NE.ielmx)
THEN 197 WRITE(
lu,60) x%NAME,x%TYPE
198 WRITE(
lu,61) y%NAME,y%TYPE
199 WRITE(
lu,62) a%NAME,a%TYPE
200 WRITE(
lu,165) ielm1,ielmx
201 165
FORMAT(1x,
'A AND X INCOMPATIBLE: ',1i6,2x,1i6,
' AND ',/,1x,
202 & 1x,
'BECAUSE THE TRANSPOSED OF A IS USED')
207 IF(
dimens(ielm1).EQ.mesh%DIM1)
THEN 216 ELSEIF(a%STO.EQ.3)
THEN 219 WRITE(
lu,*)
'UNKNOWN STORAGE IN MATVEC : ',a%STO
238 dimikm=mesh%IKLEM1%DIM1
247 501
FORMAT(1x,
'MATVEC (BIEF) : A CALL WITH LEGO = .FALSE.',/,
248 & 1x,
' MUST BE FOLLOWED BY A CALL WITH',/,
249 & 1x,
' OP=''X=X+....''')
253 ELSEIF(
w_is_full.OR.(x%NAME.NE.y%NAME.AND.a%STO.EQ.3))
THEN 255 IF (modass .EQ.1)
THEN 256 CALL matvct( op,x%R,a%D%R,a%TYPDIA,a%X%R,a%TYPEXT,y%R,
257 & c,ikle,npt,nelem,nelmax,mesh%W%R,
258 & lego2,ielm1,ielm2,ielmx,mesh%LV,a%STO,a%PRO,
259 & mesh%IKLEM1%I,dimikm,mesh%LIMVOI%I,mesh%MXPTVS,
261 & mesh%GLOSEG%I,mesh%GLOSEG%MAXDIM1,sizxa,
263 ELSEIF (modass .EQ.3)
THEN 264 CALL matvct( op,x%R,a%D%R,a%TYPDIA,a%X%R,a%TYPEXT,y%R,
265 & c,ikle,npt,nelem,nelmax,mesh%W%R,
266 & lego2,ielm1,ielm2,ielmx,mesh%LV,a%STO,a%PRO,
267 & mesh%IKLEM1%I,dimikm,mesh%LIMVOI%I,mesh%MXPTVS,
269 & mesh%GLOSEG%I,mesh%GLOSEG%MAXDIM1,sizxa,
271 & x_err=x%E, y_err=y%E , da_err=a%D%E)
278 CALL matvct(
'X=TAY ',mesh%T%R,a%D%R,a%TYPDIA,a%X%R,
279 & a%TYPEXT,y%R,c,ikle,npt,nelem,nelmax,mesh%W%R,
280 & lego2,ielm1,ielm2,ielmx,mesh%LV,a%STO,a%PRO,
281 & mesh%IKLEM1%I,dimikm,mesh%LIMVOI%I,mesh%MXPTVS,
283 & mesh%GLOSEG%I,mesh%GLOSEG%MAXDIM1,sizxa,
286 IF(op(3:8).EQ.
'TAY ')
THEN 287 CALL os(
'X=Y ', x=x, y=mesh%T)
288 ELSEIF(op(3:8).EQ.
'-TAY ')
THEN 289 CALL os(
'X=-Y ', x=x, y=mesh%T)
290 ELSEIF(op(3:8).EQ.
'X+TAY ')
THEN 291 CALL os(
'X=X+Y ', x=x, y=mesh%T)
292 ELSEIF(op(3:8).EQ.
'X-TAY ')
THEN 293 CALL os(
'X=X-Y ', x=x, y=mesh%T)
294 ELSEIF(op(3:8).EQ.
'X+CTAY')
THEN 295 CALL os(
'X=X+CY ', x=x, y=mesh%T, c=c)
298 3001
FORMAT(1x,
'MATVEC (BIEF) : UNKNOWN OPERATION : ',a8)
305 IF (modass .EQ.1)
THEN 306 CALL matvct(
'X=AY ',mesh%T%R,a%D%R,a%TYPDIA,a%X%R,
307 & a%TYPEXT,y%R,c,ikle,npt,nelem,nelmax,mesh%W%R,
308 & lego2,ielm1,ielm2,ielmx,mesh%LV,a%STO,a%PRO,
309 & mesh%IKLEM1%I,dimikm,mesh%LIMVOI%I,mesh%MXPTVS,
311 & mesh%GLOSEG%I,mesh%GLOSEG%MAXDIM1,sizxa,
313 ELSEIF (modass .EQ.3)
THEN 315 CALL matvct(
'X=AY ',mesh%T%R,a%D%R,a%TYPDIA,a%X%R,
316 & a%TYPEXT,y%R,c,ikle,npt,nelem,nelmax,mesh%W%R,
317 & lego2,ielm1,ielm2,ielmx,mesh%LV,a%STO,a%PRO,
318 & mesh%IKLEM1%I,dimikm,mesh%LIMVOI%I,mesh%MXPTVS,
320 & mesh%GLOSEG%I,mesh%GLOSEG%MAXDIM1,sizxa,
322 & x_err=mesh%T%E, y_err=y%E , da_err=a%D%E)
325 IF(op(3:8).EQ.
'AY ')
THEN 326 CALL os(
'X=Y ', x=x, y=mesh%T)
327 ELSEIF(op(3:8).EQ.
'X+AY ')
THEN 328 CALL os(
'X=X+Y ', x=x, y=mesh%T)
329 ELSEIF(op(3:8).EQ.
'-AY ')
THEN 330 CALL os(
'X=-Y ', x=x, y=mesh%T)
331 ELSEIF(op(3:8).EQ.
'X-AY ')
THEN 332 CALL os(
'X=X-Y ', x=x, y=mesh%T)
333 ELSEIF(op(3:8).EQ.
'X+CAY ')
THEN 334 CALL os(
'X=X+CY ', x=x, y=mesh%T, c=c)
335 ELSEIF(op(3:8).EQ.
'CAY ')
THEN 336 CALL os(
'X=CY ', x=x, y=mesh%T, c=c)
subroutine matvct(OP, X, DA, TYPDIA, XA, TYPEXT, Y, C, IKLE, NPT, NELEM, NELMAX, W, LEGO, IELM1, IELM2, IELMX, LV, S, P, IKLEM1, DIMIKM, LIMVOI, MXPTVS, NPMAX, NPOIN, GLOSEG, SIZGLO, SIZXA, NDP, MESH, STOX, X_ERR, Y_ERR, DA_ERR)
integer function dimens(IELM)
integer function bief_nbpts(IELM, MESH)
integer function bief_nbpel(IELM, MESH)
subroutine os(OP, X, Y, Z, C, IOPT, INFINI, ZERO)
subroutine matvec(OP, X, A, Y, C, MESH, LEGO)