The TELEMAC-MASCARET system  trunk
ovbd.f
Go to the documentation of this file.
1 ! ***************
2  SUBROUTINE ovbd
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 ON THE BOUNDARY.
17 !+ Y AND Z ARE VECTORS DEFINED IN THE DOMAIN.
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-Y ' : SUBTRACTS Y FROM X
25 !+ OP = 'X=CY ' : MULTIPLIES Y BY C
26 !+ OP = 'X=X+CY ' : ADDS C.Y TO X
27 !+ OP = 'X=CXY ' : C.X.Y
28 !
29 !history J-M HERVOUET (LNH)
30 !+ 06/12/94
31 !+ V5P1
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  CHARACTER(LEN=8), INTENT(IN) :: OP
65 !
66 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
67 !
68  INTEGER K
69 !
70 !-----------------------------------------------------------------------
71 !
72  IF(op(1:8).EQ.'X=Y '.OR.
73  & op(1:8).EQ.'X=+Y ') THEN
74 !
75  DO k=1,nptfr
76  x(k) = y(nbor(k))
77  ENDDO
78 !
79 !-----------------------------------------------------------------------
80 !
81  ELSEIF(op(1:8).EQ.'X=X+Y ') THEN
82 !
83  DO k=1,nptfr
84  x(k) = x(k) + y(nbor(k))
85  ENDDO
86 !
87 !-----------------------------------------------------------------------
88 !
89  ELSEIF(op(1:8).EQ.'X=Y+Z ') THEN
90 !
91  DO k=1,nptfr
92  x(k) = y(nbor(k)) + z(nbor(k))
93  ENDDO
94 !
95 !-----------------------------------------------------------------------
96 !
97  ELSEIF(op(1:8).EQ.'X=X-Y ') THEN
98 !
99  DO k=1,nptfr
100  x(k) = x(k) - y(nbor(k))
101  ENDDO
102 !
103 !-----------------------------------------------------------------------
104 !
105  ELSEIF(op(1:8).EQ.'X=CY ') THEN
106 !
107  DO k=1,nptfr
108  x(k) = c * y(nbor(k))
109  ENDDO
110 !
111 !-----------------------------------------------------------------------
112 !
113  ELSEIF(op(1:8).EQ.'X=X+CY ') THEN
114 !
115  DO k=1,nptfr
116  x(k) = x(k) + c * y(nbor(k))
117  ENDDO
118 !
119 !-----------------------------------------------------------------------
120 !
121  ELSEIF(op(1:8).EQ.'X=CXY ') THEN
122 !
123  DO k=1,nptfr
124  x(k) = c * x(k) * y(nbor(k))
125  ENDDO
126 !
127 !-----------------------------------------------------------------------
128 !
129  ELSE
130 !
131  WRITE(lu,1001) op
132 1001 FORMAT(1x,'OVBD (BIEF) : UNKNOWN OPERATION: ',a8)
133  CALL plante(1)
134  stop
135 !
136  ENDIF
137 !
138 !-----------------------------------------------------------------------
139 !
140  RETURN
141  END
subroutine ovbd(OP, X, Y, Z, C, NBOR, NPTFR)
Definition: ovbd.f:7