The TELEMAC-MASCARET system  trunk
osbd.f
Go to the documentation of this file.
1 ! ***************
2  SUBROUTINE osbd
3 ! ***************
4 !
5  & ( op , x , y , z , c , mesh )
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 !+ X, Y AND Z MUST BE STRUCTURES.
19 !+
20 !+ THE RESULT IS VECTOR X.
21 !+
22 !+ OP = 'X=Y ' : COPIES Y IN X
23 !+ OP = 'X=+Y ' : IDEM
24 !+ OP = 'X=X+Y ' : ADDS Y TO X
25 !+ OP = 'X=X-Y ' : SUBTRACTS Y FROM X
26 !+ OP = 'X=CY ' : MULTIPLIES Y BY C
27 !+ OP = 'X=X+CY ' : ADDS C.Y TO X
28 !+ OP = 'X=CXY ' : C.X.Y
29 !
30 !history J-M HERVOUET (LNH)
31 !+ 06/12/94
32 !+ V5P5
33 !+
34 !
35 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
36 !+ 13/07/2010
37 !+ V6P0
38 !+ Translation of French comments within the FORTRAN sources into
39 !+ English comments
40 !
41 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
42 !+ 21/08/2010
43 !+ V6P0
44 !+ Creation of DOXYGEN tags for automated documentation and
45 !+ cross-referencing of the FORTRAN sources
46 !
47 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
48 !| C |-->| A GIVEN CONSTANT USED IN OPERATION OP
49 !| MESH |-->| MESH STRUCTURE
50 !| OP |-->| OPERATION TO BE DONE (SEE ABOVE)
51 !| X |<--| RESULTING VECTOR
52 !| Y |-->| VECTOR USED IN OPERATION OP
53 !| Z |-->| VECTOR USED IN OPERATION OP
54 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
55 !
56  USE bief, ex_osbd => osbd
57 !
59  IMPLICIT NONE
60 !
61 !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
62 !
63  DOUBLE PRECISION, INTENT(IN) :: C
64 !
65  CHARACTER(LEN=8), INTENT(IN) :: OP
66 !
67  TYPE(bief_obj), INTENT(INOUT) :: X
68  TYPE(bief_obj), INTENT(IN) :: Y,Z
69  TYPE(bief_mesh), INTENT(IN) :: MESH
70 !
71 !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
72 !
73  INTEGER NPTFR,IELMX,IELMY
74 !
75 !-----------------------------------------------------------------------
76 !
77  IF(x%TYPE.NE.2.OR.y%TYPE.NE.2) THEN
78  WRITE(lu,101)
79 101 FORMAT(1x,'OSBD (BIEF) : X AND Y ARE NOT VECTORS')
80  CALL plante(1)
81  stop
82  ENDIF
83 !
84  ielmx = x%ELM
85  ielmy = y%ELM
86 !
87  IF((dimens(ielmx).NE.1.OR.dimens(ielmy).NE.2).AND.
88  & (dimens(ielmx).NE.2.OR.dimens(ielmy).NE.3)) THEN
89  WRITE(lu,103)
90 103 FORMAT(1x,'OSBD (BIEF) : X AND Y HAVE WRONG DIMENSIONS')
91  CALL plante(1)
92  stop
93  ENDIF
94 !
95 !-----------------------------------------------------------------------
96 !
97  nptfr = x%DIM1
98 !
99  IF( ielmy.EQ.11.OR.
100  & ielmy.EQ.61.OR.
101  & ielmy.EQ.21.OR.
102  & ielmy.EQ.71.OR.
103  & ielmy.EQ.12.OR.
104  & ielmy.EQ.31.OR.
105  & ielmy.EQ.41.OR.
106  & ielmy.EQ.51 ) THEN
107 ! ARRAY NBOR
108  CALL ovbd( op , x%R , y%R , z%R , c , mesh%NBOR%I , nptfr )
109 !
110  ELSE
111  WRITE(lu,105)
112 105 FORMAT(1x,'OSBD (BIEF) : DISCRETIZATIONS NOT IMPLEMENTED')
113  CALL plante(1)
114  stop
115  ENDIF
116 !
117 !-----------------------------------------------------------------------
118 !
119  RETURN
120  END
integer function dimens(IELM)
Definition: dimens.f:7
subroutine osbd(OP, X, Y, Z, C, MESH)
Definition: osbd.f:7
subroutine ovbd(OP, X, Y, Z, C, NBOR, NPTFR)
Definition: ovbd.f:7
Definition: bief.f:3