The TELEMAC-MASCARET system  trunk
osdbif.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE osdbif
3 ! *****************
4 !
5  & ( op , x , y , indic , criter , mesh )
6 !
7 !***********************************************************************
8 ! BIEF V6P1 21/08/2010
9 !***********************************************************************
10 !
11 !brief CONDITIONAL 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 IS A VECTOR DEFINED ON THE BOUNDARY.
18 !+ X, Y AND Z MUST BE STRUCTURES.
19 !+
20 !+ INDIC IS AN ARRAY: NOT A STRUCTURE ||||||||
21 !+
22 !+ |||||||| : THE OPERATION IS ONLY PERFORMED IF THE CONDITION
23 !+ INDIC(K)=CRITER IS MET FOR A BOUNDARY NODE K.
24 !+
25 !+ THE RESULT IS VECTOR X.
26 !+
27 !+ OP = 'X=Y ' : COPIES Y IN X
28 !+ OP = 'X=+Y ' : IDEM
29 !
30 !history J-M HERVOUET (LNHE)
31 !+ 22/08/05
32 !+ V5P6
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 !| CRITER |-->| OPERATION DONE FOR I IF INDIC(I)=CRITER
49 !| INDIC |-->| INTEGER ARRAY WHERE TO LOOK FOR CRITER
50 !| MESH |-->| MESH STRUCTURE
51 !| OP |-->| OPERATION TO BE DONE (SEE ABOVE)
52 !| X |<--| RESULTING VECTOR
53 !| Y |-->| VECTOR USED IN OPERATION OP
54 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
55 !
56  USE bief
57 !
59  IMPLICIT NONE
60 !
61  TYPE(bief_obj) :: X,Y
62  TYPE(bief_mesh) :: MESH
63 !
64  INTEGER K,NPTFR,IELMX,IELMY
65  INTEGER INDIC(*),CRITER
66 !
67  CHARACTER(LEN=8) OP
68 !
69 !-----------------------------------------------------------------------
70 !
71  IF(x%TYPE.NE.2.OR.y%TYPE.NE.2) THEN
72  WRITE(lu,101)
73 101 FORMAT(1x,'OSDBIF (BIEF) : X AND Y ARE NOT VECTORS')
74  CALL plante(1)
75  stop
76  ENDIF
77 !
78  ielmx = x%ELM
79  ielmy = y%ELM
80 !
81 ! JP RENAUD 18/08/2005
82 ! MODIFICATION FOR 3D MESHES: THE DOMAIN VECTOR DIMENSION IS 3
83 ! AND THE BOUNDARY VECTOR DIMENSION IS 2. SO THE POSSIBLE
84 ! COMBINATIONS ARE:
85 ! -2D: DIMESN(IELMX)==2 _AND_ DIMESN(IELMY)==1
86 ! -3D: DIMESN(IELMX)==3 _AND_ DIMESN(IELMY)==2
87 !
88  IF( .NOT. (dimens(ielmx).EQ.3 .AND.dimens(ielmy).EQ.2 )
89  & .AND.
90  & .NOT. (dimens(ielmx).EQ.2 .AND. dimens(ielmy).EQ.1 ) ) THEN
91 !
92  WRITE(lu,103)
93 103 FORMAT(1x,'OSDBIF (BIEF) : X AND Y WRONG DIMENSIONS')
94  CALL plante(1)
95  stop
96  ENDIF
97 !
98 !-----------------------------------------------------------------------
99 !
100  nptfr = y%DIM1
101 !
102 !-----------------------------------------------------------------------
103 !
104  IF(op(1:8).EQ.'X=Y '.OR.
105  & op(1:8).EQ.'X=+Y ') THEN
106 !
107  DO k=1,nptfr
108  IF(indic(k).EQ.criter) x%R(mesh%NBOR%I(k)) = y%R(k)
109  ENDDO
110 !
111 !-----------------------------------------------------------------------
112 !
113  ELSE
114 !
115  WRITE(lu,1001) op
116 1001 FORMAT(1x,'OSDBIF (BIEF) : UNKNOWN OPERATION: ',a8)
117  CALL plante(1)
118  stop
119 !
120  ENDIF
121 !
122 !-----------------------------------------------------------------------
123 !
124  RETURN
125  END
integer function dimens(IELM)
Definition: dimens.f:7
subroutine osdbif(OP, X, Y, INDIC, CRITER, MESH)
Definition: osdbif.f:7
Definition: bief.f:3