The TELEMAC-MASCARET system  trunk
opass.f
Go to the documentation of this file.
1 ! ****************
2  SUBROUTINE opass
3 ! ****************
4 !
5  &(op,x,w,iw,y,iy,limvoi,mxptvs,npmax)
6 !
7 !***********************************************************************
8 ! BIEF V6P3 21/08/2010
9 !***********************************************************************
10 !
11 !brief FRONTAL MATRIX-VECTOR PRODUCT FOR ELEMENT 11-11.
12 !+
13 !+ OMITS THE DIAGONAL TERMS HERE.
14 !
15 !history J-M HERVOUET (LNH) ; F LEPEINTRE (LNH)
16 !+ 05/02/91
17 !+ V5P1
18 !+
19 !
20 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
21 !+ 13/07/2010
22 !+ V6P0
23 !+ Translation of French comments within the FORTRAN sources into
24 !+ English comments
25 !
26 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
27 !+ 21/08/2010
28 !+ V6P0
29 !+ Creation of DOXYGEN tags for automated documentation and
30 !+ cross-referencing of the FORTRAN sources
31 !
32 !history J-M HERVOUET (EDF R&D, LNHE)
33 !+ 11/03/2013
34 !+ V6P3
35 !+ Dimension of LIMVOI now set to 11.
36 !
37 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
38 !| IW |-->| ADDRESSES IN W
39 !| IY |-->| ADDRESSES IN Y
40 !| LIMVOI |-->| LIMVOI(N,1): LOWER RANK OF POINTS WITH N NEIGHBOURS
41 !| | | LIMVOI(N,2): UPPER RANK OF POINTS WITH N NEIGHBOURS
42 !| MXPTVS |-->| MAXIMUM NUMBER OF NEIGHBOURS OF A POINT
43 !| NPMAX |-->| MAXIMUM NUMBER OF POINTS
44 !| OP |-->| OPERATION TO BE DONE (SEE ABOVE)
45 !| W |-->| OFF-DIAGONAL TERMS OF MATRIX
46 !| X |<->| FINAL ASSEMBLED VECTOR
47 !| Y |-->| X=AY WHERE OFF-DIAGONAL TERMS OF A ARE HERE W
48 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
49 !
51  IMPLICIT NONE
52 !
53 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
54 !
55  INTEGER, INTENT(IN) :: NPMAX,MXPTVS
56  INTEGER, INTENT(IN) :: IW(npmax,*),IY(npmax,*)
57 ! 11: SEE ALMESH
58  INTEGER, INTENT(IN) :: LIMVOI(11,2)
59  DOUBLE PRECISION, INTENT(INOUT) :: X(*)
60  DOUBLE PRECISION, INTENT(IN) :: W(*),Y(*)
61  CHARACTER(LEN=8), INTENT(IN) :: OP
62 !
63 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
64 !
65  INTEGER I
66 !
67 !-----------------------------------------------------------------------
68 !
69  IF(mxptvs.GT.11) THEN
70  WRITE(lu,778)
71 778 FORMAT(1x,'OPASS (BIEF): IMPLEMENTED UP TO 11 NEIGHBOURS ONLY',/,
72  & 1x,'CHOOSE STORAGE OF MATRICES : 1')
73  CALL plante(1)
74  stop
75  ENDIF
76 !
77 !-----------------------------------------------------------------------
78 !
79  IF(op(1:8).EQ.'X=WY ') THEN
80 !
81  IF(limvoi(1,1).GT.0) THEN
82 ! THIS CASE IS NOT POSSIBLE IN THEORY
83  DO i = limvoi(1,1) , limvoi(1,2)
84  x(i) = w(iw(i,1))*y(iy(i,1))
85  ENDDO
86  ENDIF
87 !
88  IF(limvoi(2,1).GT.0) THEN
89 ! THIS CASE ONLY EXISTS IF THERE ARE OVERSTRESSED TRIANGLES
90  DO i = limvoi(2,1) , limvoi(2,2)
91  x(i) = w(iw(i,1))*y(iy(i,1)) + w(iw(i,2))*y(iy(i,2))
92  ENDDO
93  ENDIF
94 !
95  IF(mxptvs.GE.3.AND.limvoi(3,1).GT.0) THEN
96  DO i = limvoi(3,1) , limvoi(3,2)
97  x(i) = w(iw(i,1))*y(iy(i,1)) + w(iw(i,2))*y(iy(i,2))
98  & + w(iw(i,3))*y(iy(i,3))
99  ENDDO
100  ENDIF
101 !
102  IF(mxptvs.GE.4.AND.limvoi(4,1).GT.0) THEN
103  DO i = limvoi(4,1) , limvoi(4,2)
104  x(i) = w(iw(i,1))*y(iy(i,1)) + w(iw(i,2))*y(iy(i,2))
105  & + w(iw(i,3))*y(iy(i,3)) + w(iw(i,4))*y(iy(i,4))
106  ENDDO
107  ENDIF
108 !
109  IF(mxptvs.GE.5.AND.limvoi(5,1).GT.0) THEN
110  DO i = limvoi(5,1) , limvoi(5,2)
111  x(i) = w(iw(i,1))*y(iy(i,1)) + w(iw(i,2))*y(iy(i,2))
112  & + w(iw(i,3))*y(iy(i,3)) + w(iw(i,4))*y(iy(i,4))
113  & + w(iw(i,5))*y(iy(i,5))
114  ENDDO
115  ENDIF
116 !
117  IF(mxptvs.GE.6.AND.limvoi(6,1).GT.0) THEN
118  DO i = limvoi(6,1) , limvoi(6,2)
119  x(i) = w(iw(i,1))*y(iy(i,1)) + w(iw(i,2))*y(iy(i,2))
120  & + w(iw(i,3))*y(iy(i,3)) + w(iw(i,4))*y(iy(i,4))
121  & + w(iw(i,5))*y(iy(i,5)) + w(iw(i,6))*y(iy(i,6))
122  ENDDO
123  ENDIF
124 !
125  IF(mxptvs.GE.7.AND.limvoi(7,1).GT.0) THEN
126  DO i = limvoi(7,1) , limvoi(7,2)
127  x(i) = w(iw(i,1))*y(iy(i,1)) + w(iw(i,2))*y(iy(i,2))
128  & + w(iw(i,3))*y(iy(i,3)) + w(iw(i,4))*y(iy(i,4))
129  & + w(iw(i,5))*y(iy(i,5)) + w(iw(i,6))*y(iy(i,6))
130  & + w(iw(i,7))*y(iy(i,7))
131  ENDDO
132  ENDIF
133 !
134  IF(mxptvs.GE.8.AND.limvoi(8,1).GT.0) THEN
135  DO i = limvoi(8,1) , limvoi(8,2)
136  x(i) = w(iw(i,1))*y(iy(i,1)) + w(iw(i,2))*y(iy(i,2))
137  & + w(iw(i,3))*y(iy(i,3)) + w(iw(i,4))*y(iy(i,4))
138  & + w(iw(i,5))*y(iy(i,5)) + w(iw(i,6))*y(iy(i,6))
139  & + w(iw(i,7))*y(iy(i,7)) + w(iw(i,8))*y(iy(i,8))
140  ENDDO
141  ENDIF
142 !
143  IF(mxptvs.GE.9.AND.limvoi(9,1).GT.0) THEN
144  DO i = limvoi(9,1) , limvoi(9,2)
145  x(i) = w(iw(i,1))*y(iy(i,1)) + w(iw(i,2))*y(iy(i,2))
146  & + w(iw(i,3))*y(iy(i,3)) + w(iw(i,4))*y(iy(i,4))
147  & + w(iw(i,5))*y(iy(i,5)) + w(iw(i,6))*y(iy(i,6))
148  & + w(iw(i,7))*y(iy(i,7)) + w(iw(i,8))*y(iy(i,8))
149  & + w(iw(i,9))*y(iy(i,9))
150  ENDDO
151  ENDIF
152 !
153  IF(mxptvs.GE.10.AND.limvoi(10,1).GT.0) THEN
154  DO i = limvoi(10,1) , limvoi(10,2)
155  x(i) = w(iw(i,1))*y(iy(i,1)) + w(iw(i,2))*y(iy(i,2))
156  & + w(iw(i,3))*y(iy(i,3)) + w(iw(i,4))*y(iy(i,4))
157  & + w(iw(i,5))*y(iy(i,5)) + w(iw(i,6))*y(iy(i,6))
158  & + w(iw(i,7))*y(iy(i,7)) + w(iw(i,8))*y(iy(i,8))
159  & + w(iw(i,9))*y(iy(i,9)) + w(iw(i,10))*y(iy(i,10))
160  ENDDO
161  ENDIF
162 !
163  IF(mxptvs.GE.11.AND.limvoi(11,1).GT.0) THEN
164  DO i = limvoi(11,1) , limvoi(11,2)
165  x(i) = w(iw(i,1))*y(iy(i,1)) + w(iw(i,2))*y(iy(i,2))
166  & + w(iw(i,3))*y(iy(i,3)) + w(iw(i,4))*y(iy(i,4))
167  & + w(iw(i,5))*y(iy(i,5)) + w(iw(i,6))*y(iy(i,6))
168  & + w(iw(i,7))*y(iy(i,7)) + w(iw(i,8))*y(iy(i,8))
169  & + w(iw(i,9))*y(iy(i,9)) + w(iw(i,10))*y(iy(i,10))
170  & + w(iw(i,11))*y(iy(i,11))
171  ENDDO
172  ENDIF
173 !
174  ELSE
175 !
176  WRITE(lu,3001) op
177 3001 FORMAT(1x,'OPASS (BIEF) : UNKNOWN OPERATION : ',a8)
178  CALL plante(1)
179  stop
180 !
181  ENDIF
182 !
183 !-----------------------------------------------------------------------
184 !
185  RETURN
186  END
subroutine opass(OP, X, W, IW, Y, IY, LIMVOI, MXPTVS, NPMAX)
Definition: opass.f:7