The TELEMAC-MASCARET system  trunk
suspension_dispersion.f
Go to the documentation of this file.
1 ! ******************************************
2  SUBROUTINE suspension_dispersion ! (_IMP_)
3 ! ******************************************
4 !
5  & (tob, xmve,hn, optdif, npoin, xkx, xky,
6  & t1, t2, t3, kx, ky, kz, disp,u2d,v2d,visc_tel,code)
7 !
8 !***********************************************************************
9 ! SISYPHE V6P1 21/07/2011
10 !***********************************************************************
11 !
12 !brief COMPUTES THE DISPERSION PARAMETERS.
13 !
14 !history C. MOULIN (LNH)
15 !+ 13/12/2000
16 !+ V5P1
17 !+
18 !
19 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
20 !+ 13/07/2010
21 !+ V6P0
22 !+ Translation of French comments within the FORTRAN sources into
23 !+ English comments
24 !
25 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
26 !+ 21/08/2010
27 !+ V6P0
28 !+ Creation of DOXYGEN tags for automated documentation and
29 !+ cross-referencing of the FORTRAN sources
30 !
31 !history C.VILLARET (EDF-LNHE), P.TASSI (EDF-LNHE)
32 !+ 19/07/2011
33 !+ V6P1
34 !+ Name of variables
35 !+
36 !
37 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
38 !| CODE |-->| HYDRODYNAMIC CODE IN CASE OF COUPLING
39 !| DISP |-->| VISCOSITY COEFFICIENTS ALONG X,Y AND Z
40 !| | | IF P0 : PER ELEMENT
41 !| | | IF P1 : PER POINT
42 !| HN |-->| WATER DEPTH
43 !| KX |<->| COEFFICIENTS OF THE DISPERSION TENSOR (DIM. NPOIN)
44 !| KY |<->| COEFFICIENTS OF THE DISPERSION TENSOR (DIM. NPOIN)
45 !| KZ |<->| COEFFICIENTS OF THE DISPERSION TENSOR (DIM. NPOIN)
46 !| NPOIN |-->| NUMBER OF POINTS
47 !| OPTDIF |-->| OPTION FOR THE DISPERSION
48 !| T1 |<->| WORK BIEF_OBJ STRUCTURE
49 !| T2 |<->| WORK BIEF_OBJ STRUCTURE
50 !| T3 |<->| WORK BIEF_OBJ STRUCTURE
51 !| TOB |-->| BED SHEAR STRESS (TOTAL FRICTION)
52 !| U2D |-->| MEAN FLOW VELOCITY X-DIRECTION
53 !| V2D |-->| MEAN FLOW VELOCITY Y-DIRECTION
54 !| VISC_TEL |-->| VELOCITY DIFFUSIVITY (TELEMAC)
55 !| XKX |-->| COEFFICIENT USED FOR COMPUTING THE DISPERSION
56 !| | | DEPENDS OF OPTIONS
57 !| XKY |-->| COEFFICIENT USED FOR COMPUTING THE DISPERSION
58 !| | | DEPENDS OF OPTIONS
59 !| XMVE |-->| FLUID DENSITY
60 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
61 !
63  & ex_suspension_dispersion => suspension_dispersion
64  USE bief
66  IMPLICIT NONE
67  ! 2/ GLOBAL VARIABLES
68  ! -------------------
69  type(bief_obj), INTENT(IN) :: tob,hn,visc_tel
70  INTEGER, INTENT(IN) :: OPTDIF, NPOIN
71  DOUBLE PRECISION, INTENT(IN) :: XMVE, XKX, XKY
72  type(bief_obj), INTENT(INOUT) :: t1, t2, t3
73  type(bief_obj), INTENT(INOUT) :: kx, ky, kz, disp
74  type(bief_obj), INTENT(IN) :: u2d,v2d
75  CHARACTER(LEN=24), INTENT(IN) :: CODE
76  ! 3/ LOCAL VARIABLES
77  ! ------------------
78  INTEGER :: K,DIMVISC
79  DOUBLE PRECISION :: UETH, COST, SINT
80 !
81 !======================================================================!
82 !======================================================================!
83 ! PROGRAM !
84 !======================================================================!
85 !======================================================================!
86 !
87  ! ****************************************************** !
88  ! IA - CONSTANT DISPERSION OR DISPERSION(I) = ALPHA(I)*H !
89  ! ****************************************************** !
90  IF (optdif == 2.OR.optdif == 1) THEN
91 !
92  CALL cpstvc(u2d,t1)
93  CALL cpstvc(u2d,t2)
94 !
95  IF(optdif == 2) THEN
96  DO k = 1, npoin
97  ueth = sqrt(tob%R(k)/xmve)
98  t1%R(k) = xkx * ueth * hn%R(k)
99  t2%R(k) = xky * ueth * hn%R(k)
100  ENDDO
101  ELSE
102  CALL os('X=C ', x=t1, c=xkx)
103  CALL os('X=C ', x=t2, c=xky)
104  ENDIF
105 !
106  CALL os('X=N(Y,Z)', x=t3, y=u2d, z=v2d)
107 !
108  DO k=1,npoin
109 !
110  IF(t3%R(k).GE.1.d-6) THEN
111  cost = u2d%R(k)/t3%R(k)
112  sint = v2d%R(k)/t3%R(k)
113  ELSE
114  cost = 0.d0
115  sint = 0.d0
116  ENDIF
117 !
118  kx%R(k) = (t1%R(k) - t2%R(k))*(cost**2) + t2%R(k)
119  ky%R(k) = (t2%R(k) - t1%R(k))*(cost**2) + t1%R(k)
120  kz%R(k) = (t1%R(k) - t2%R(k))*cost*sint
121 !
122  ENDDO
123 !
124 !
125  ! *********************************** !
126  ! IB - DISPERSION GIVEN BY TELEMAC-2D ! (_IMP_)
127  ! *********************************** !
128  ELSEIF(optdif == 3) THEN
129 !
130  IF(code(1:9).EQ.'TELEMAC2D') THEN
131  IF(visc_tel%DIM2.EQ.1) THEN
132  CALL os('X=Y ', x=kx,y=visc_tel)
133  CALL os('X=Y ', x=ky,y=kx)
134  CALL os('X=0 ', x=kz)
135  ELSEIF(visc_tel%DIM2.EQ.3) THEN
136  dimvisc=visc_tel%MAXDIM1
137  DO k=1,npoin
138  kx%R(k)=visc_tel%R(k)
139  ky%R(k)=visc_tel%R(k+ dimvisc)
140  kz%R(k)=visc_tel%R(k+2*dimvisc)
141  ENDDO
142  ELSE
143  WRITE(lu,*) 'SUSPENSION_DISPERSION:'
144  WRITE(lu,*) ' '
145  WRITE(lu,*) 'UNEXPECTED DIMENSION OF VISC_TEL:',
146  & visc_tel%DIM2
147  CALL plante(1)
148  stop
149  ENDIF
150  ELSE
151  WRITE(lu,*) ' '
152  WRITE(lu,*) 'SUSPENSION_DISPERSION:'
153  WRITE(lu,*) ' '
154  WRITE(lu,*) 'OPTION 3: DIFFUSIVITY GIVEN BY TELEMAC'
155  WRITE(lu,*) 'NOT IMPLEMENTED OR IMPOSSIBLE WITH ',code
156  CALL plante(1)
157  stop
158  ENDIF
159 !
160  ! ***************************************** !
161  ! IC - OPTION FOR DISPERSION NOT CODED UP ! (_IMP_)
162  ! ***************************************** !
163  ELSE
164  WRITE(lu,31) optdif
165  CALL plante(1)
166  stop
167  ENDIF
168 !
169  CALL ov_2('X=Y ', disp%R, 1, kx%R, 1, kx%R, 1, 0.d0,
170  & disp%MAXDIM1, disp%DIM1)
171  CALL ov_2('X=Y ', disp%R, 2, ky%R, 1, ky%R, 1, 0.d0,
172  & disp%MAXDIM1, disp%DIM1)
173  CALL ov_2('X=Y ', disp%R, 3, kz%R, 1, kz%R, 1, 0.d0,
174  & disp%MAXDIM1, disp%DIM1)
175  !----------------------------------------------------------------!
176 31 FORMAT('DISPERSION: OPTION FOR THE DISPERSION NOT AVAILABLE:',1i6)
177  !----------------------------------------------------------------!
178 !======================================================================!
179 !======================================================================!
180  RETURN
181  END SUBROUTINE suspension_dispersion
subroutine ov_2(OP, X, DIMX, Y, DIMY, Z, DIMZ, C, DIM1, NPOIN)
Definition: ov_2.f:7
subroutine cpstvc(X, Y)
Definition: cpstvc.f:7
subroutine os(OP, X, Y, Z, C, IOPT, INFINI, ZERO)
Definition: os.f:7
subroutine suspension_dispersion
Definition: bief.f:3