The TELEMAC-MASCARET system  trunk
mw0303.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE mw0303
3 ! *****************
4 !
5  &(op, x , da,typdia,xas,typext, y,c,
6  & iklem1,dimikm,limvoi,mxptvs,npmax,npoin,trav)
7 !
8 !***********************************************************************
9 ! BIEF V6P3 21/08/2010
10 !***********************************************************************
11 !
12 !brief FRONTAL MATRIX VECTOR PRODUCT FOR P1 TRIANGLES.
13 !code
14 !+ OP IS A STRING OF 8 CHARACTERS, WHICH INDICATES THE OPERATION TO BE
15 !+ PERFORMED ON VECTORS X,Y AND MATRIX M.
16 !+
17 !+ THE RESULT IS VECTOR X.
18 !+
19 !+ THESE OPERATIONS ARE DIFFERENT DEPENDING ON THE DIAGONAL TYPE
20 !+ AND THE TYPE OF EXTRADIAGONAL TERMS.
21 !+
22 !+ IMPLEMENTED OPERATIONS:
23 !+
24 !+ OP = 'X=AY ' : X = AY
25 !+ OP = 'X=-AY ' : X = -AY
26 !+ OP = 'X=X+AY ' : X = X + AY
27 !+ OP = 'X=X-AY ' : X = X - AY
28 !+ OP = 'X=X+CAY ' : X = X + C AY
29 !+ OP = 'X=TAY ' : X = TA Y (TRANSPOSE OF A)
30 !+ OP = 'X=-TAY ' : X = - TA Y (- TRANSPOSE OF A)
31 !+ OP = 'X=X+TAY ' : X = X + TA Y
32 !+ OP = 'X=X-TAY ' : X = X - TA Y
33 !+ OP = 'X=X+CTAY' : X = X + C TA Y
34 !
35 !history J-M HERVOUET (LNH) ; F LEPEINTRE (LNH)
36 !+ 05/02/91
37 !+ V5P1
38 !+
39 !
40 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
41 !+ 13/07/2010
42 !+ V6P0
43 !+ Translation of French comments within the FORTRAN sources into
44 !+ English comments
45 !
46 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
47 !+ 21/08/2010
48 !+ V6P0
49 !+ Creation of DOXYGEN tags for automated documentation and
50 !+ cross-referencing of the FORTRAN sources
51 !
52 !history J-M HERVOUET (EDF R&D, LNHE)
53 !+ 11/03/2013
54 !+ V6P3
55 !+ Dimension of LIMVOI now set to 11.
56 !
57 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
58 !| C |-->| A GIVEN CONSTANT
59 !| DA |-->| MATRIX DIAGONAL
60 !| DIMIKM |-->| FIRST DIMENSION OF IKLEM1
61 !| IKLEM1 |-->| DATA STRUCTURE FOR MATRIX-VECTOR PRODUCT
62 !| | | GIVES THE ADRESSES OF OFF-DIAGONAL TERMS
63 !| | | IN XAS AND NEIGHBOUR POINTS IN Y.
64 !| | | IKLEM1(*,*,1) : NON SYMMETRIC MATRIX
65 !| | | IKLEM1(*,*,2) : SYMMETRIC MATRIX
66 !| | | FIRST DIMENSION: NPMAX
67 !| | | 2ND DIM.: 1 : DIRECT PRODUCT, ADDRESS IN XAS
68 !| | | 2 : DIRECT PRODUCT, ADDRESS IN Y
69 !| | | 3 : TRANSPOSED PRODUCT, ADDRESS IN XAS
70 !| | | 4 : TRANSPOSED PRODUCT, ADDRESS IN Y
71 !| LIMVOI |-->|
72 !| MXPTVS |-->| MAXIMUM NUMBER OF NEIGHBOURS OF A POINT
73 !| NPMAX |-->| MAXIMUM NUMBER OF POINTS.
74 !| NPOIN |-->| NUMBER OF POINTS
75 !| OP |-->| OPERATION TO BE DONE (SEE ABOVE)
76 !| TRAV |-->| WORK ARRAY
77 !| TYPDIA |-->| TYPE OF DIAGONAL:
78 !| | | TYPDIA = 'Q' : ANY VALUE
79 !| | | TYPDIA = 'I' : IDENTITY
80 !| | | TYPDIA = '0' : ZERO
81 !| TYPEXT |-->| TYPE OF OFF-DIAGONAL TERMS
82 !| | | TYPEXT = 'Q' : ANY VALUE
83 !| | | TYPEXT = 'S' : SYMMETRIC
84 !| | | TYPEXT = '0' : ZERO
85 !| X |<->| RESULT IN ASSEMBLED FORM
86 !| XAS |-->| OFF-DIAGONAL TERMS OF MATRIX
87 !| Y |-->| VECTOR USED IN THE OPERATION
88 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
89 !
90  USE bief, ex_mw0303 => mw0303
91 !
93  IMPLICIT NONE
94 !
95 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
96 !
97  INTEGER, INTENT(IN) :: DIMIKM,MXPTVS,NPMAX,NPOIN
98 ! 11: SEE ALMESH
99 ! AND OPTASS
100  INTEGER, INTENT(IN) :: IKLEM1(dimikm,4,2),LIMVOI(11,2)
101 !
102  DOUBLE PRECISION, INTENT(INOUT) :: X(*),TRAV(*)
103  DOUBLE PRECISION, INTENT(IN) :: DA(*),Y(*)
104  DOUBLE PRECISION, INTENT(IN) :: XAS(*),C
105 !
106  CHARACTER(LEN=8), INTENT(IN) :: OP
107  CHARACTER(LEN=1), INTENT(IN) :: TYPDIA,TYPEXT
108 !
109 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
110 !
111  INTEGER I
112  DOUBLE PRECISION Z(1)
113 !
114 !-----------------------------------------------------------------------
115 !
116 ! TREATMENT SPECIFIC TO THE TRANSPOSITION:
117 !
118  i = 1
119  IF(op(3:3).EQ.'T'.OR.op(4:4).EQ.'T'.OR.
120  & op(5:5).EQ.'T'.OR.op(6:6).EQ.'T') i = 3
121 !
122 !-----------------------------------------------------------------------
123 !
124 ! MATRIX VECTOR PRODUCT, SIMPLE FUNCTION OF THE SHAPE OF THE MATRIX:
125 !
126  IF(typext(1:1).EQ.'S'.OR.typext(1:1).EQ.'Q') THEN
127 !
128  IF(typext(1:1).EQ.'Q') THEN
129  CALL opass('X=WY ',trav,xas,iklem1(1,i,1),
130  & y,iklem1(1,i+1,1),limvoi,mxptvs,npmax)
131  ELSEIF(typext(1:1).EQ.'S') THEN
132  CALL opass('X=WY ',trav,xas,iklem1(1,i,2),
133  & y,iklem1(1,i+1,2),limvoi,mxptvs,npmax)
134  ENDIF
135 !
136  IF(typdia(1:1).EQ.'Q') THEN
137  CALL ov ('X=X+YZ ', trav , y , da , c , npoin )
138  ELSEIF(typdia(1:1).EQ.'I') THEN
139  CALL ov ('X=X+Y ', trav , y , z , c , npoin )
140  ELSEIF(typdia(1:1).NE.'0') THEN
141  WRITE(lu,2001) typdia
142  CALL plante(1)
143  stop
144  ENDIF
145 !
146  ELSEIF(typext(1:1).EQ.'0') THEN
147 !
148  IF(typdia(1:1).EQ.'Q') THEN
149  CALL ov ('X=YZ ', trav , y , da , c , npoin )
150  ELSEIF(typdia(1:1).EQ.'I') THEN
151  CALL ov ('X=Y ', trav , y , z , c , npoin )
152  ELSEIF(typdia(1:1).EQ.'0') THEN
153  CALL ov ('X=C ', trav , y , z , 0.d0 , npoin )
154  ELSE
155  WRITE(lu,2001) typdia
156  CALL plante(1)
157  stop
158  ENDIF
159 !
160  ELSE
161 !
162  WRITE(lu,1001) typext
163  CALL plante(1)
164  stop
165 !
166  ENDIF
167 !
168 !-----------------------------------------------------------------------
169 !
170 ! IMPLEMENTED OPERATIONS:
171 !
172  IF(op(1:8).EQ.'X=AY '.OR.op(1:8).EQ.'X=TAY ') THEN
173  CALL ov ('X=Y ', x , trav , z , c , npoin )
174  ELSEIF(op(1:8).EQ.'X=-AY '.OR.op(1:8).EQ.'X=-TAY ') THEN
175  CALL ov ('X=-Y ', x , trav , z , c , npoin )
176  ELSEIF(op(1:8).EQ.'X=X+AY '.OR.op(1:8).EQ.'X=X+TAY ') THEN
177  CALL ov ('X=X+Y ', x , trav , z , c , npoin )
178  ELSEIF(op(1:8).EQ.'X=X-AY '.OR.op(1:8).EQ.'X=X-TAY ') THEN
179  CALL ov ('X=X-Y ', x , trav , z , c , npoin )
180  ELSEIF(op(1:8).EQ.'X=X+CAY '.OR.op(1:8).EQ.'X=X+CTAY') THEN
181  CALL ov ('X=X+CY ', x , trav , z , c , npoin )
182  ELSEIF(op(1:8).EQ.'X=CAY ') THEN
183  CALL ov ('X=CY ', x , trav , z , c , npoin )
184  ELSE
185  WRITE(lu,3001) op
186  CALL plante(1)
187  stop
188  ENDIF
189 !
190 !-----------------------------------------------------------------------
191 !
192  RETURN
193 !
194 1001 FORMAT(1x,'MW0303 (BIEF) : EXTRADIAG. TERMS UNKNOWN TYPE : ',a1)
195 2001 FORMAT(1x,'MW0303 (BIEF) : DIAGONAL : UNKNOWN TYPE : ',a1)
196 3001 FORMAT(1x,'MW0303 (BIEF) : UNKNOWN OPERATION : ',a8)
197 !
198 !-----------------------------------------------------------------------
199 !
200  END
subroutine ov(OP, X, Y, Z, C, DIM1)
Definition: ov.f:7
subroutine mw0303(OP, X, DA, TYPDIA, XAS, TYPEXT, Y, C, IKLEM1, DIMIKM, LIMVOI, MXPTVS, NPMAX, NPOIN, TRAV)
Definition: mw0303.f:8
subroutine opass(OP, X, W, IW, Y, IY, LIMVOI, MXPTVS, NPMAX)
Definition: opass.f:7
Definition: bief.f:3