The TELEMAC-MASCARET system  trunk
osdb.f
Go to the documentation of this file.
1 ! ***************
2  SUBROUTINE osdb
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 IN THE DOMAIN.
17 !+ Y AND Z ARE VECTORS DEFINED ON THE BOUNDARY.
18 !+ X, Y AND Z MUST BE STRUCTURES.
19 !+ Y SHOULD NOT BE A DUMMY STRUCTURE.
20 !+ Z NOT YET IMPLEMENTED.
21 !+
22 !+ THE RESULT IS VECTOR X.
23 !+
24 !+ OP = 'X=Y ' : COPIES Y IN X
25 !+ OP = 'X=+Y ' : IDEM
26 !+ OP = 'X=X+Y ' : ADDS Y TO X
27 !+ OP = 'X=X-Y ' : SUBTRACTS Y FROM X
28 !+ OP = 'X=CY ' : MULTIPLIES Y BY C
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_osdb => osdb
57 !
59  IMPLICIT NONE
60 !
61 !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
62 !
63  DOUBLE PRECISION, INTENT(IN) :: C
64  CHARACTER(LEN=8), INTENT(IN) :: OP
65  TYPE(bief_obj), INTENT(INOUT) :: X
66  TYPE(bief_obj), INTENT(IN) :: Y,Z
67  TYPE(bief_mesh), INTENT(IN) :: MESH
68 !
69 !+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
70 !
71  INTEGER NPTFR,IELMX,IELMY
72 !
73 !-----------------------------------------------------------------------
74 !
75  IF(x%TYPE.NE.2.OR.y%TYPE.NE.2) THEN
76  WRITE(lu,101)
77 101 FORMAT(1x,'OSDB (BIEF) : X AND Y ARE NOT VECTORS')
78  CALL plante(1)
79  stop
80  ENDIF
81 !
82  ielmx = x%ELM
83  ielmy = y%ELM
84 !
85  IF((dimens(ielmx).NE.2.OR.dimens(ielmy).NE.1).AND.
86  & (dimens(ielmx).NE.3.OR.dimens(ielmy).NE.2)) THEN
87  WRITE(lu,103)
88 103 FORMAT(1x,'OSDB (BIEF) : X AND Y HAVE WRONG DIMENSIONS')
89  CALL plante(1)
90  stop
91  ENDIF
92 !
93 !-----------------------------------------------------------------------
94 !
95  nptfr = y%DIM1
96 !
97 ! 3D MESH
98 !
99  IF(ielmx.EQ.11.OR.ielmx.EQ.21.OR.ielmx.EQ.31.OR.ielmx.EQ.61.OR.
100  & ielmx.EQ.12.OR.ielmx.EQ.41.OR.ielmx.EQ.51.OR.ielmx.EQ.81) THEN
101 ! ARRAY NBOR
102  CALL ovdb( op , x%R , y%R , z%R , c , mesh%NBOR%I , nptfr )
103  ELSEIF(ielmx.EQ.10.OR.ielmx.EQ.20.OR.
104  & ielmx.EQ.40.OR.ielmx.EQ.50.OR.ielmx.EQ.80) THEN
105 ! ARRAY NELBOR
106  CALL ovdb( op , x%R , y%R , z%R , c , mesh%NELBOR%I , nptfr )
107  ELSE
108  WRITE(lu,105)
109 105 FORMAT(1x,'OSDB (BIEF) : DISCRETIZATIONS NOT IMPLEMENTED')
110  CALL plante(1)
111  stop
112  ENDIF
113 !
114 !-----------------------------------------------------------------------
115 !
116  RETURN
117  END
integer function dimens(IELM)
Definition: dimens.f:7
subroutine osdb(OP, X, Y, Z, C, MESH)
Definition: osdb.f:7
subroutine ovdb(OP, X, Y, Z, C, NBOR, NPTFR)
Definition: ovdb.f:7
Definition: bief.f:3