The TELEMAC-MASCARET system  trunk
ovdb.f
Go to the documentation of this file.
1 ! ***************
2  SUBROUTINE ovdb
3 ! ***************
4 !
5  & ( op , x , y , z , c , nbor , nptfr )
6 !
7 !***********************************************************************
8 ! BIEF V6P1 21/08/2010
9 !***********************************************************************
10 !
11 !brief OPERATIONS ON VECTORS.
12 !code
13 !+ OP IS A STRING OF 8 CHARACTERS, WHICH INDICATES THE OPERATION TO BE
14 !+ PERFORMED ON VECTORS X,Y AND Z AND CONSTANT C.
15 !+
16 !+ HERE X IS A VECTOR DEFINED IN THE DOMAIN.
17 !+ Y AND Z ARE VECTORS DEFINED ON THE BOUNDARY.
18 !+
19 !+ THE RESULT IS VECTOR X.
20 !+
21 !+ OP = 'X=Y ' : COPIES Y IN X
22 !+ OP = 'X=+Y ' : IDEM
23 !+ OP = 'X=X+Y ' : ADDS Y TO X
24 !+ OP = 'X=X+CY ' : ADDS C.Y TO X
25 !+ OP = 'X=X-Y ' : SUBTRACTS Y FROM X
26 !+ OP = 'X=CY ' : MULTIPLIES Y BY C
27 !+ OP = 'X=XY ' : MULTIPLIES Y BY X
28 !
29 !history J-M HERVOUET (LNH)
30 !+ 06/01/04
31 !+ V5P4
32 !+
33 !
34 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
35 !+ 13/07/2010
36 !+ V6P0
37 !+ Translation of French comments within the FORTRAN sources into
38 !+ English comments
39 !
40 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
41 !+ 21/08/2010
42 !+ V6P0
43 !+ Creation of DOXYGEN tags for automated documentation and
44 !+ cross-referencing of the FORTRAN sources
45 !
46 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
47 !| C |-->| A GIVEN CONSTANT
48 !| NBOR |-->| GLOBAL NUMBER OF BOUNDARY POINTS
49 !| NPTFR |-->| NUMBER OF BOUNDARY POINTS
50 !| OP |-->| STRING INDICATING THE OPERATION TO BE DONE
51 !| X |<--| RESULT (A BIEF_OBJ STRUCTURE)
52 !| Y |-->| TO BE USED IN THE OPERATION
53 !| Z |-->| TO BE USED IN THE OPERATION
54 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
55 !
57  IMPLICIT NONE
58 !
59 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
60 !
61  INTEGER, INTENT(IN) :: NPTFR,NBOR(*)
62  DOUBLE PRECISION, INTENT(INOUT) :: X(*)
63  DOUBLE PRECISION, INTENT(IN) :: Y(*),Z(*),C
64 !
65  CHARACTER(LEN=8), INTENT(IN) :: OP
66 !
67 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
68 !
69  INTEGER K
70 !
71 !-----------------------------------------------------------------------
72 !
73  IF(op(1:8).EQ.'X=Y '.OR.
74  & op(1:8).EQ.'X=+Y ') THEN
75 !
76  DO k=1,nptfr
77  x(nbor(k)) = y(k)
78  ENDDO
79 !
80 !-----------------------------------------------------------------------
81 !
82  ELSEIF(op(1:8).EQ.'X=X+Y ') THEN
83 !
84  DO k=1,nptfr
85  x(nbor(k)) = x(nbor(k)) + y(k)
86  ENDDO
87 !
88 !-----------------------------------------------------------------------
89 !
90  ELSEIF(op(1:8).EQ.'X=Y+Z ') THEN
91 !
92  DO k=1,nptfr
93  x(nbor(k)) = y(k) + z(k)
94  ENDDO
95 !
96 !-----------------------------------------------------------------------
97 !
98  ELSEIF(op(1:8).EQ.'X=X+CY ') THEN
99 !
100  DO k=1,nptfr
101  x(nbor(k)) = x(nbor(k)) + c * y(k)
102  ENDDO
103 !
104 !-----------------------------------------------------------------------
105 !
106  ELSEIF(op(1:8).EQ.'X=X-Y ') THEN
107 !
108  DO k=1,nptfr
109  x(nbor(k)) = x(nbor(k)) - y(k)
110  ENDDO
111 !
112 !-----------------------------------------------------------------------
113 !
114  ELSEIF(op(1:8).EQ.'X=X-YZ ') THEN
115 !
116  DO k=1,nptfr
117  x(nbor(k)) = x(nbor(k)) - y(k)*z(k)
118  ENDDO
119 !
120 !-----------------------------------------------------------------------
121 !
122  ELSEIF(op(1:8).EQ.'X=XY ') THEN
123 !
124  DO k=1,nptfr
125  x(nbor(k)) = x(nbor(k)) * y(k)
126  ENDDO
127 !
128 !-----------------------------------------------------------------------
129 !
130  ELSEIF(op(1:8).EQ.'X=CY ') THEN
131 !
132  DO k=1,nptfr
133  x(nbor(k)) = c * y(k)
134  ENDDO
135 !
136 !-----------------------------------------------------------------------
137 !
138  ELSE
139 !
140  WRITE(lu,1001) op
141 1001 FORMAT(1x,'OVDB (BIEF) : UNKNOWN OPERATION: ',a8)
142  CALL plante(1)
143  stop
144 !
145  ENDIF
146 !
147 !-----------------------------------------------------------------------
148 !
149  RETURN
150  END
subroutine ovdb(OP, X, Y, Z, C, NBOR, NPTFR)
Definition: ovdb.f:7