The TELEMAC-MASCARET system  trunk
kmoyen.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE kmoyen
3 ! *****************
4 !
5  &(xkmoy, xk, f, nf, ndire, npoin2, aux1, aux2, aux3)
6 !
7 !***********************************************************************
8 ! TOMAWAC V6P3 20/06/2011
9 !***********************************************************************
10 !
11 !brief COMPUTES THE AVERAGE WAVE NUMBER FOR ALL THE NODES
12 !+ IN THE 2D MESH.
13 !
14 !note THE HIGH-FREQUENCY PART OF THE SPECTRUM IS ONLY CONSIDERED
15 !+ IF THE TAIL FACTOR (TAILF) IS STRICTLY GREATER THAN 1.
16 !
17 !history P. THELLIER; M. BENOIT (EDF/DER/LNH)
18 !+ 04/04/95
19 !+ V1P0
20 !+
21 !
22 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
23 !+ 13/07/2010
24 !+ V6P0
25 !+ Translation of French comments within the FORTRAN sources into
26 !+ English comments
27 !
28 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
29 !+ 21/08/2010
30 !+ V6P0
31 !+ Creation of DOXYGEN tags for automated documentation and
32 !+ cross-referencing of the FORTRAN sources
33 !
34 !history G.MATTAROLO (EDF - LNHE)
35 !+ 20/06/2011
36 !+ V6P1
37 !+ Translation of French names of the variables in argument
38 !
39 !history J-M HERVOUET (EDF R&D, LNHE)
40 !+ 18/01/2013
41 !+ V6P3
42 !+ ARITHMETIC AVERAGE WHEN ENERGY WEIGHTED AVERAGE IS NOT POSSIBLE
43 !
44 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
45 !| AUX1 |<->| WORK TABLE
46 !| AUX2 |<->| WORK TABLE
47 !| AUX3 |<->| WORK TABLE
48 !| DFREQ |-->| FREQUENCY STEPS BETWEEN DISCRETIZED FREQUENCIES
49 !| F |---| VARIANCE DENSITY DIRECTIONAL SPECTRUM
50 !| FREQ |-->| DISCRETIZED FREQUENCIES
51 !| NF |-->| NUMBER OF FREQUENCIES
52 !| NDIRE |-->| NUMBER OF DIRECTIONS
53 !| NPOIN2 |-->| NUMBER OF POINTS IN 2D MESH
54 !| TAILF |-->| SPECTRUM QUEUE FACTOR
55 !| XK |-->| DISCRETIZED WAVE NUMBER
56 !| XKMOY |<--| AVERAGE WAVE NUMBER
57 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
58 !
60 !
62  USE interface_tomawac, ex_kmoyen => kmoyen
63  IMPLICIT NONE
64 !
65 !
66 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
67 !
68  INTEGER, INTENT(IN) :: NF,NDIRE,NPOIN2
69  DOUBLE PRECISION, INTENT(IN) :: F(npoin2,ndire,nf)
70  DOUBLE PRECISION, INTENT(IN) :: XK(npoin2,nf)
71  DOUBLE PRECISION, INTENT(INOUT) :: AUX1(npoin2),AUX2(npoin2)
72  DOUBLE PRECISION, INTENT(INOUT) :: AUX3(npoin2)
73  DOUBLE PRECISION, INTENT(INOUT) :: XKMOY(npoin2)
74 !
75 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
76 !
77  INTEGER IDIRE , JF , IP
78  DOUBLE PRECISION COEFF , SEUIL , CTE1 , CTE2 , AUX4
79 !
80 !-----------------------------------------------------------------------
81 !
82  seuil = 1.d-20
83  coeff = sqrt(gravit)/deupi
84 !
85  DO ip = 1,npoin2
86  aux1(ip) = 0.d0
87  aux2(ip) = 0.d0
88  ENDDO
89 !
90 ! SUMS UP THE CONTRIBUTIONS FOR THE DISCRETISED PART OF THE SPECTRUM
91 !
92  DO jf = 1, nf
93 !
94  aux4=dfreq(jf)
95 !
96  DO ip=1,npoin2
97  aux3(ip) = 0.d0
98  ENDDO
99  DO idire = 1, ndire
100  DO ip=1, npoin2
101  aux3(ip) = aux3(ip) + f(ip,idire,jf)
102  ENDDO
103  ENDDO
104 !
105  DO ip = 1,npoin2
106  aux1(ip)=aux1(ip)+aux3(ip)*aux4
107  aux2(ip)=aux2(ip)+aux3(ip)/sqrt(xk(ip,jf))*aux4
108  ENDDO
109 !
110  ENDDO
111 !
112 ! (OPTIONALLY) TAKES INTO ACCOUNT THE HIGH-FREQUENCY PART
113 !
114  IF(tailf.GT.1.d0) THEN
115  cte1=freq(nf)/(tailf-1.d0)
116  cte2=coeff/tailf
117  DO ip=1,npoin2
118  aux1(ip) = aux1(ip) + aux3(ip)*cte1
119  aux2(ip) = aux2(ip) + aux3(ip)*cte2
120  ENDDO
121  ENDIF
122 !
123 ! COMPUTES THE AVERAGE WAVE NUMBER
124 !
125  DO ip=1,npoin2
126  IF(aux2(ip).LT.seuil) THEN
127 ! ARITHMETIC AVERAGE WHEN ENERGY WEIGHTED
128 ! AVERAGE IS NOT POSSIBLE
129  xkmoy(ip)=xk(ip,1)
130  DO jf=2,nf
131  xkmoy(ip)=xkmoy(ip)+xk(ip,jf)
132  ENDDO
133  xkmoy(ip)=xkmoy(ip)/nf
134  ELSE
135  xkmoy(ip) = (aux1(ip)/aux2(ip))**2
136  ENDIF
137  ENDDO
138 !
139 !-----------------------------------------------------------------------
140 !
141  RETURN
142  END
double precision, dimension(:), pointer freq
double precision, dimension(:), pointer dfreq
subroutine kmoyen(XKMOY, XK, F, NF, NDIRE, NPOIN2, AUX1, AUX2, AUX3)
Definition: kmoyen.f:7