The TELEMAC-MASCARET system  trunk
fsprd2.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE fsprd2
3 ! *****************
4 !
5  &( fra , ndire , spred1, teta1 , spred2, teta2 , xlamda)
6 !
7 !***********************************************************************
8 ! TOMAWAC V6P1 15/06/2011
9 !***********************************************************************
10 !
11 !brief COMPUTES THE BIMODAL DIRECTIONAL SPREADING FUNCTION
12 !+ FOR A RANGE OF DIRECTIONS.
13 !code
14 !+ EXP -0.5((T-T0)/S)**2 WHERE T IN (T0-PI/2;T0+PI/2)
15 !
16 !history M. BENOIT
17 !+ 10/01/96
18 !+ V1P0
19 !+ CREATED
20 !
21 !history M. BENOIT
22 !+ 07/11/96
23 !+ V1P2
24 !+ MODIFIED
25 !
26 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
27 !+ 13/07/2010
28 !+ V6P0
29 !+ Translation of French comments within the FORTRAN sources into
30 !+ English comments
31 !
32 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
33 !+ 21/08/2010
34 !+ V6P0
35 !+ Creation of DOXYGEN tags for automated documentation and
36 !+ cross-referencing of the FORTRAN sources
37 !
38 !history G.MATTAROLO (EDF - LNHE)
39 !+ 15/06/2011
40 !+ V6P1
41 !+ Translation of French names of the variables in argument
42 !
43 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
44 !| DEUPI |-->| 2.PI
45 !| FRA |<--| DIRECTIONAL SPREADING FUNCTION VALUES
46 !| NDIRE |-->| NUMBER OF DIRECTIONS
47 !| SPRED1 |-->| DIRECTIONAL SPREAD 1
48 !| SPRED2 |-->| DIRECTIONAL SPREAD 1
49 !| TETA1 |-->| MAIN DIRECTION 1
50 !| TETA2 |-->| MAIN DIRECTION 2
51 !| XLAMDA |-->| WEIGHTING FACTOR FOR FRA
52 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
53 !
54  USE declarations_tomawac, ONLY : pi,deupi, teta
55 !
56  USE interface_tomawac, ex_fsprd2 => fsprd2
57  IMPLICIT NONE
58 !
59 !.....VARIABLES IN ARGUMENT
60 ! """"""""""""""""""""
61  INTEGER,INTENT(IN) :: NDIRE
62  DOUBLE PRECISION,INTENT(IN) :: SPRED1, TETA1 , SPRED2, TETA2
63  DOUBLE PRECISION,INTENT(IN) :: XLAMDA
64  DOUBLE PRECISION,INTENT(INOUT) :: FRA(ndire)
65 !
66 !.....LOCAL VARIABLES
67 ! """""""""""""""""
68  INTEGER JP
69  DOUBLE PRECISION DELT1 , DELT2 , FTH , FRA1 , FRA2 , ARGUM
70  DOUBLE PRECISION C1 , C2
71 !
72  IF (spred1.GT.1.d-4) THEN
73  delt1 = 1.d0/(spred1*sqrt(deupi))
74  c1 = -0.5/(spred1*spred1)
75  ELSE
76  delt1 = 0.d0
77  c1 = 0.d0
78  ENDIF
79  IF (spred2.GT.1.d-4) THEN
80  delt2 = 1.d0/(spred2*sqrt(deupi))
81  c2 = -0.5/(spred2*spred2)
82  ELSE
83  delt2 = 0.d0
84  c2 = 0.d0
85  ENDIF
86 !
87  DO jp=1, ndire
88  fth = teta(jp)
89 !
90  argum = fth-teta1
91  DO WHILE(argum.LT.-pi)
92  argum=argum+deupi
93  ENDDO
94  DO WHILE(argum.GT.pi)
95  argum=argum-deupi
96  ENDDO
97  fra1=delt1*exp(max(-10.d0,c1*argum*argum))
98 !
99  argum = fth-teta2
100  DO WHILE(argum.LT.-pi)
101  argum=argum+deupi
102  ENDDO
103  DO WHILE(argum.GT.pi)
104  argum=argum-deupi
105  ENDDO
106  fra2=delt2*exp(max(-10.d0,c2*argum*argum))
107 !
108  fra(jp)=xlamda*fra1+(1.d0-xlamda)*fra2
109  IF (fra(jp).LT.1.d-10) fra(jp)=0.d0
110  ENDDO ! JP
111 !
112  RETURN
113  END
double precision, dimension(:), pointer teta
subroutine fsprd2(FRA, NDIRE, SPRED1, TETA1, SPRED2, TETA2, XLAMDA)
Definition: fsprd2.f:7