The TELEMAC-MASCARET system  trunk
radiat.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE radiat
3 ! *****************
4 !
5  & ( fx1 , fy1, xk1 ,fs, cg1,
6  & cgsuc1,dsxxdx, dsxydx, dsxydy, dsyydy)
7 !
8 !***********************************************************************
9 ! TOMAWAC V7P0
10 !***********************************************************************
11 !
12 !brief COMPUTES THE RADIATION STRESSES AND DRIVING FORCES
13 !+ FOR THE GENERATION OF WAVE-INDUCED CURRENTS.
14 !+
15 !+ (SEE NOTES FOR METHODOLOGY)
16 !code
17 !+ THE RESULT OF THIS COMPUTATION IS GIVEN AS :
18 !+ FI = - 1/D D( SIJ )/D( XJ ) UNIT : M/S**2
19 !
20 !note COMPUTATION ACCORDING TO THE "THEORICAL" FORMULATION, WITH
21 !+ COMPUTATION OF THE TERMS IN THE TENSOR OF THE RADIATION
22 !+ STRESSES, AND THEN THEIR GRADIENTS IN SPACE.
23 !
24 !history M. BENOIT (EDF/DER/LNH)
25 !+ 13/12/95
26 !+ V1P0
27 !+
28 !
29 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
30 !+ 13/07/2010
31 !+ V6P0
32 !+ Translation of French comments within the FORTRAN sources into
33 !+ English comments
34 !
35 !history N.DURAND (HRW), S.E.BOURBAN (HRW)
36 !+ 21/08/2010
37 !+ V6P0
38 !+ Creation of DOXYGEN tags for automated documentation and
39 !+ cross-referencing of the FORTRAN sources
40 !
41 !history G.MATTAROLO (EDF - LNHE)
42 !+ 27/06/2011
43 !+ V6P1
44 !+ Translation of French names of the variables in argument
45 !
46 !history J-M HERVOUET (EDF - LNHE)
47 !+ 08/01/2014
48 !+ V7P0
49 !+ CALL PARCOM suppressed by using new argument ASSPAR in VECTOR
50 !
51 !history C. VILLARET (HR-WALLINGFORD)
52 !+ 15/09/2014
53 !+ V7P0
54 !+ Cancellation of radiation stresses below a given depth hmin.
55 !
56 !history T. Fouquet (made by C Raoul)
57 ! 01/02/2018
58 ! V7P3
59 ! Forces calculated in spherical coordinates
60 !
61 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
62 !| CG1 |-->| DISCRETIZED GROUP VELOCITY
63 !| CGSUC1 |<--| WORK TABLE
64 !| DEPTH1 |-->| WATER DEPTH
65 !| DSXXDX |<->| WORK TABLE
66 !| DSXYDX |<->| WORK TABLE
67 !| DSXYDY |<->| WORK TABLE
68 !| DSYYDY |<->| WORK TABLE
69 !| FS |-->| DIRECTIONAL SPECTRUM
70 !| FX |<--| DRIVING FORCE ALONG X
71 !| FY |<--| DRIVING FORCE ALONG Y
72 !| NPOIN2 |-->| NUMBER OF POINTS IN 2D MESH
73 !| SXX |<--| RADIATION STRESS ALONG XX
74 !| SXY |<--| RADIATION STRESS ALONG XY
75 !| SYY |<--| RADIATION STRESS ALONG YY
76 !| XK1 |-->| DISCRETIZED WAVE NUMBER
77 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
78 !
79  USE bief
81 !
82  USE interface_tomawac, ex_radiat => radiat
83  IMPLICIT NONE
84 !
85 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
86 !
87  DOUBLE PRECISION, INTENT(IN) :: FS(npoin2,ndire,nf)
88  DOUBLE PRECISION, INTENT(IN) :: CG1(npoin2,nf),XK1(npoin2,nf)
89  DOUBLE PRECISION, INTENT(INOUT) :: CGSUC1(npoin2,nf)
90  DOUBLE PRECISION, INTENT(INOUT) :: FX1(npoin2),FY1(npoin2)
91  DOUBLE PRECISION, INTENT(INOUT) :: DSXXDX(npoin2),DSXYDX(npoin2)
92  DOUBLE PRECISION, INTENT(INOUT) :: DSXYDY(npoin2),DSYYDY(npoin2)
93 !
94 !+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
95 !
96  INTEGER JP,JF,IP
97  DOUBLE PRECISION COEF,COEF2,COCO,SISI,SICO,OMEGA,DTETAR
98 !
99 ! CV: MINIMUM WATER DEPTH FOR TIDAL FLATS TREATMENT
100 ! NEW KEYWORD IS NEEDED
101 !
102  DOUBLE PRECISION HMIN
103 !
104 !-----------------------------------------------------------------------
105 !
106  hmin=0.1d0
107 !
108  dtetar=deupi/ndire
109 !
110  DO ip=1,npoin2
111  sxx(ip) = 0.d0
112  sxy(ip) = 0.d0
113  syy(ip) = 0.d0
114  ENDDO
115 !
116 ! COMPUTES THE WORKING ARRAY N = CG/C
117 !
118  DO jf = 1,nf
119  omega=deupi*freq(jf)
120  DO ip=1,npoin2
121  cgsuc1(ip,jf)=cg1(ip,jf)*xk1(ip,jf)/omega
122  ENDDO
123  ENDDO
124 !
125 ! COMPUTES THE RADIATION STRESSES INTEGRATED OVER THE SPECTRUM
126 ! SUMS UP THE DISCRETISED PART OF THE SPECTRUM
127 !
128  DO jp=1,ndire
129  coco=costet(jp)**2
130  sisi=sintet(jp)**2
131  sico=sintet(jp)*costet(jp)
132  DO jf=1,nf
133  coef=gravit*dfreq(jf)*dtetar
134  DO ip=1,npoin2
135  coef2=coef*fs(ip,jp,jf)
136  sxx(ip)=sxx(ip)+(cgsuc1(ip,jf)*(1.d0+sisi)-0.5d0)*coef2
137  sxy(ip)=sxy(ip)+(cgsuc1(ip,jf)*sico )*coef2
138  syy(ip)=syy(ip)+(cgsuc1(ip,jf)*(1.d0+coco)-0.5d0)*coef2
139  ENDDO
140  ENDDO
141  ENDDO
142 !
143 ! COMPUTES THE GRADIENTS IN SPACE OF THE RADIATION STRESSES
144 !
145 !
146 ! INVERSE OF INTEGRALS OF TEST FUNCTIONS
147 !
148  CALL vector(st0,'=','MASBAS ',ielm2,1.d0,
149  & st1,st1,st1,st1,st1,st1,mesh,.false.,st1,
150  & asspar=.true.)
151  CALL os('X=1/Y ',x=st0,y=st0)
152 !
153 ! DERIVATIVE IN X
154 !
155  CALL ov('X=Y ',x=t4,y=sxx,dim1=npoin2)
156 
157  CALL vector
158  & (st1,'=','GRADF X',ielm2,1.d0,st4,
159  & st3,st3,st3,st3,st3,mesh,.false.,st3,asspar=.true.)
160 !
161  CALL ov('X=Y ',x=t4,y=sxy,dim1=npoin2)
162  CALL vector
163  & (st2,'=','GRADF X',ielm2,1.d0,st4,
164  & st3,st3,st3,st3,st3,mesh,.false.,st3,asspar=.true.)
165 !
166  CALL ov('X=YZ ',x=dsxxdx, y=t1, z=t0, dim1=npoin2)
167  CALL ov('X=YZ ',x=dsxydx, y=t2, z=t0, dim1=npoin2)
168 !
169 ! DERIVATIVE IN Y
170 !
171  CALL ov('X=Y ',x=t4, y=syy, dim1=npoin2)
172  CALL vector
173  & (st1,'=','GRADF Y',ielm2,1.d0,st4,
174  & st3,st3,st3,st3,st3,mesh,.false.,st3,asspar=.true.)
175 !
176  CALL ov('X=Y ',x=t4, y=sxy, dim1=npoin2)
177  CALL vector
178  & (st2,'=','GRADF Y',ielm2,1.d0,st4,
179  & st3,st3,st3,st3,st3,mesh,.false.,st3,asspar=.true.)
180 !
181  CALL ov('X=YZ ',x=dsyydy, y=t1, z=t0, dim1=npoin2)
182  CALL ov('X=YZ ',x=dsxydy, y=t2, z=t0, dim1=npoin2)
183 !
184 ! COMPUTES THE DRIVING FORCES FOR WAVE-INDUCED CURRENTS
185 
186  IF (.NOT.sphe) THEN
187 ! +-----------------------------+
188 !.............................. ! CARTESIAN COORDINATE SYSTEM !
189 ! +-----------------------------+
190  DO ip=1,npoin2
191  IF(depth(ip).GE.hmin) THEN
192  fx1(ip)= - (dsxxdx(ip)+dsxydy(ip))/depth(ip)
193  fy1(ip)= - (dsxydx(ip)+dsyydy(ip))/depth(ip)
194  ELSE
195  fx1(ip)=0.d0
196  fy1(ip)=0.d0
197  ENDIF
198  ENDDO
199 !
200  ELSE
201 ! +-----------------------------+
202 !.............................. ! SPHERICAL COORDINATE SYSTEM !
203 ! +-----------------------------+
204  DO ip=1,npoin2
205  tra31(ip)=1.0d0/cosf(ip)
206  ENDDO
207  CALL ov('X=CYZ ',x=dsxxdx, y=dsxxdx, z=tra31, c=sr,
208  & dim1=npoin2)
209  CALL ov('X=CYZ ',x=dsxydx, y=dsxydx, z=tra31, c=sr,
210  & dim1=npoin2)
211  CALL ov('X=CY ',x=dsyydy, y=dsyydy, c=sr, dim1=npoin2)
212  CALL ov('X=CY ',x=dsxydy, y=dsxydy, c=sr, dim1=npoin2)
213 
214  DO ip=1,npoin2
215  IF(depth(ip).GE.hmin) THEN
216  fx1(ip)= - (dsxxdx(ip)+dsxydy(ip))*gradeg/depth(ip)
217  fy1(ip)= - (dsxydx(ip)+dsyydy(ip))*gradeg/depth(ip)
218  ELSE
219  fx1(ip)=0.d0
220  fy1(ip)=0.d0
221  ENDIF
222  ENDDO
223  ENDIF
224 
225 
226 !
227 
228 !
229 !-----------------------------------------------------------------------
230 !
231  RETURN
232  END
233 
double precision, dimension(:), pointer sxx
double precision, dimension(:), pointer sintet
subroutine ov(OP, X, Y, Z, C, DIM1)
Definition: ov.f:7
double precision, dimension(:), pointer depth
double precision, dimension(:), pointer freq
double precision, dimension(:), pointer t2
type(bief_obj), target st2
double precision, dimension(:), pointer y
subroutine radiat(FX1, FY1, XK1, FS, CG1, CGSUC1, DSXXDX, DSXYDX, DSXYDY, DSYYDY)
Definition: radiat.f:8
double precision, dimension(:), pointer t4
double precision, dimension(:), pointer dfreq
double precision, dimension(:), pointer tra31
type(bief_obj), target st4
type(bief_obj), target st3
type(bief_obj), target st0
double precision, dimension(:), pointer sxy
type(bief_obj), target st1
subroutine vector(VEC, OP, FORMUL, IELM1, XMUL, F, G, H, U, V, W, MESH, MSK, MASKEL, LEGO, ASSPAR)
Definition: vector.f:7
double precision, dimension(:), pointer costet
double precision, dimension(:), pointer cosf
subroutine os(OP, X, Y, Z, C, IOPT, INFINI, ZERO)
Definition: os.f:7
double precision, dimension(:), pointer t0
double precision, dimension(:), pointer x
double precision, dimension(:), pointer syy
type(bief_mesh), target mesh
double precision, dimension(:), pointer t1
Definition: bief.f:3