The TELEMAC-MASCARET system  trunk
transf.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE transf
3 ! *****************
4 !
5  &( fa , fr , xk , knew , newf , newf1 , taux1 , taux2 ,
6  & npoin2, ndire , nf )
7 !
8 !***********************************************************************
9 ! TOMAWAC V6P1 28/06/2011
10 !***********************************************************************
11 !
12 !brief CONVERTS A SPECTRUM SPECIFIED IN RELATIVE
13 !+ FREQUENCY FR(-,-,-) INTO A SPECTRUM IN ABSOLUTE
14 !+ FREQUENCY FA(-,-,-).
15 !
16 !history M. BENOIT (LNHE)
17 !+ 12/01//2006
18 !+ V5P6
19 !+
20 !
21 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
22 !+ 13/07/2010
23 !+ V6P0
24 !+ Translation of French comments within the FORTRAN sources into
25 !+ English comments
26 !
27 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
28 !+ 21/08/2010
29 !+ V6P0
30 !+ Creation of DOXYGEN tags for automated documentation and
31 !+ cross-referencing of the FORTRAN sources
32 !
33 !history G.MATTAROLO (EDF - LNHE)
34 !+ 28/06/2011
35 !+ V6P1
36 !+ Translation of French names of the variables in argument
37 !
38 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
39 !| COSTET |-->| COSINE OF TETA ANGLE
40 !| DFREQ |-->| FREQUENCY STEPS BETWEEN DISCRETIZED FREQUENCIES
41 !| FA |<--| DIRECTIONAL SPECTRUM IN ABSOLUTE FREQUENCIES
42 !| FR |-->| DIRECTIONAL SPECTRUM IN RELATIVE FREQUENCIES
43 !| FREQ |-->| DISCRETIZED FREQUENCIES
44 !| GRADEB |-->| N.OF FIRST ITERATION FOR GRAPHICS PRINTOUTS
45 !| GRAPRD |-->| PERIOD FOR GRAPHIC PRINTOUTS
46 !| KNEW |<->| WORK TABLE
47 !| LT |-->| NUMBER OF THE TIME STEP CURRENTLY SOLVED
48 !| NEWF |<->| WORK TABLE
49 !| NEWF1 |<->| WORK TABLE
50 !| NF |-->| NUMBER OF FREQUENCIES
51 !| NDIRE |-->| NUMBER OF DIRECTIONS
52 !| NPOIN2 |-->| NUMBER OF POINTS IN 2D MESH
53 !| RAISF |-->| RAISON FREQUENTIELLE
54 !| SINTET |-->| SINE OF TETA ANGLE
55 !| TAUX1 |<->| WORK TABLE
56 !| TAUX2 |<->| WORK TABLE
57 !| UC |-->| CURRENT VELOCITY ALONG X AT THE MESH POINTS
58 !| VC |-->| CURRENT VELOCITY ALONG Y AT THE MESH POINTS
59 !| XK |-->| DISCRETIZED WAVE NUMBER
60 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
61 !
63  & usdpi, uc, vc, raisf
64  USE bief, ONLY: ov
65 !
66  USE interface_tomawac, ex_transf => transf
67  IMPLICIT NONE
68 !
69 !.....VARIABLES IN ARGUMENT
70 ! """"""""""""""""""""
71  INTEGER, INTENT(IN) :: NPOIN2, NDIRE, NF
72  INTEGER, INTENT(INOUT) :: KNEW(npoin2),NEWF(npoin2), NEWF1(npoin2)
73  DOUBLE PRECISION, INTENT(IN) :: FR(npoin2,ndire,nf)
74  DOUBLE PRECISION, INTENT(IN) :: XK(npoin2,nf)
75  DOUBLE PRECISION, INTENT(INOUT) :: TAUX1(npoin2),TAUX2(npoin2)
76  DOUBLE PRECISION, INTENT(INOUT) :: FA(npoin2,ndire,nf)
77 !
78 !.....LOCAL VARIABLES
79 ! """""""""""""""""
80  INTEGER IP , JP , JF , NEWM , NEWM1 , KH
81  DOUBLE PRECISION F0 , UK , AUXI , Z
82  DOUBLE PRECISION FNEW , UNSLRF
83 !
84 !-----------------------------------------------------------------------
85 ! CHANGES ONLY THE END DATES
86 !-----------------------------------------------------------------------
87 !!
88 !-----------------------------------------------------------------------
89 !
90  f0=freq(1)
91  unslrf=1.d0/log(raisf)
92 !
93  CALL ov('X=C ', x=fa, c=0.d0, dim1=npoin2*ndire*nf)
94 !
95  DO jf=1,nf
96  DO jp=1,ndire
97  DO ip=1,npoin2
98 ! ---------------------------------------------------------
99 ! COMPUTES THE DIFFERENCE BETWEEN ABSOLUTE AND RELATIVE FREQUENCIES
100 ! -> ->
101 ! Z = FREQ_ABS - FREQ_REL = (K .U)/(2.PI)
102 ! THE SPECTRUM IS PROJECTED ONTO THE ABSOLUTE FREQUENCIES
103 ! ONLY IF THE RELATIVE VARIATION Z/FREQ_REL IS SIGNIFICANT
104 ! ---------------------------------------------------------
105  uk=sintet(jp)*uc(ip)+costet(jp)*vc(ip)
106 !
107  z=uk*xk(ip,jf)*usdpi
108 !
109  IF(abs(z)/freq(jf).LT.1.d-3) THEN
110  knew(ip)=jp
111  newf(ip)=jf
112  newf1(ip)=-1
113  taux1(ip)=fr(ip,jp,jf)
114  taux2(ip)=0.d0
115  ELSE
116 !
117 ! -------------------------------------------------------
118 ! COMPUTES FNEW AND KNEW
119 ! -------------------------------------------------------
120 !
121  fnew = freq(jf)+z
122  IF(fnew.GT.0.d0) THEN
123  knew(ip)=jp
124  ELSE
125  knew(ip)=1+mod(jp+ndire/2-1,ndire)
126  fnew=0.d0
127  ENDIF
128 !
129 ! -------------------------------------------------------
130 ! COMPUTES NEWF: INDEX OF THE DISCRETISED FREQUENCY
131 ! IMMEDIATELY LOWER THAN FNEW
132 ! -------------------------------------------------------
133 !
134  IF(fnew.LT.f0/raisf) THEN
135  newf(ip)=-1
136  ELSE
137  newf(ip)=int(1.d0+log(fnew/f0)*unslrf)
138  ENDIF
139 !
140 ! -------------------------------------------------------
141 ! COMPUTES THE COEFFICIENTS AND INDICES FOR THE PROJECTION
142 ! -------------------------------------------------------
143 !
144  IF((newf(ip).LT.nf).AND.(newf(ip).GE.1)) THEN
145  newf1(ip)=newf(ip)+1
146  auxi=fr(ip,jp,jf)*dfreq(jf)
147  & /(freq(newf1(ip))-freq(newf(ip)))
148  taux1(ip)=auxi*(freq(newf1(ip))-fnew)/dfreq(newf(ip))
149  taux2(ip)=auxi*(fnew-freq(newf(ip)))/dfreq(newf1(ip))
150  ELSEIF (newf(ip).EQ.0) THEN
151  auxi=fr(ip,jp,jf)*dfreq(jf)/(f0*(1.d0-1.d0/raisf))
152  taux2(ip)=auxi*(fnew-f0/raisf)/dfreq(1)
153  newf(ip)=-1
154  newf1(ip)= 1
155  ELSEIF (newf(ip).EQ.nf) THEN
156  auxi=fr(ip,jp,jf)*dfreq(jf)/(freq(nf)*(raisf-1.d0))
157  taux1(ip)=auxi*(freq(nf)*raisf-fnew)/dfreq(nf)
158  newf1(ip)=-1
159  ELSE
160  newf(ip)=-1
161  newf1(ip)=-1
162  ENDIF
163 !
164  ENDIF
165 !
166  ENDDO
167 !
168 !
169 ! -------------------------------------------------------
170 ! PROJECTS THE SPECTRUM
171 ! -------------------------------------------------------
172 !
173  DO ip=1,npoin2
174  newm =newf(ip)
175  newm1=newf1(ip)
176  kh=knew(ip)
177  IF(newm .NE.-1) fa(ip,kh,newm )=fa(ip,kh,newm )+taux1(ip)
178  IF(newm1.NE.-1) fa(ip,kh,newm1)=fa(ip,kh,newm1)+taux2(ip)
179  ENDDO
180 !
181  ENDDO
182 !
183  ENDDO
184 !
185  RETURN
186  END
double precision, dimension(:), pointer sintet
subroutine ov(OP, X, Y, Z, C, DIM1)
Definition: ov.f:7
double precision, dimension(:), pointer freq
double precision, dimension(:), pointer dfreq
subroutine transf(FA, FR, XK, KNEW, NEWF, NEWF1, TAUX1, TAUX2, NPOIN2, NDIRE, NF)
Definition: transf.f:8
double precision, dimension(:), pointer costet
Definition: bief.f:3