The TELEMAC-MASCARET system  trunk
limwac.f
Go to the documentation of this file.
1 ! *****************
2  SUBROUTINE limwac
3 ! *****************
4 !
5  &(f , fbor , nptfr , ndire , nf , npoin2,
6  & kent , prive , npriv , imp_file)
7 !
8 !***********************************************************************
9 ! TOMAWAC V7P3 23/02/2017
10 !***********************************************************************
11 !
12 !brief BOUNDARY CONDITIONS.
13 !
14 !warning BY DEFAULT, THE BOUNDARY CONDITIONS SPECIFIED IN THE FILE
15 !+ DYNAM ARE DUPLICATED ON ALL THE DIRECTIONS AND FREQUENCIES
16 !
17 !history F. MARCOS (LNH)
18 !+ 01/02/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 E. GAGNAIRE-RENOU & J.-M. HERVOUET (EDF R&D, LNHE)
40 !+ 12/03/2013
41 !+ V6P3
42 !+ A line IF(LIMSPE.EQ.0...) RETURN removed.
43 !
44 !history A. JOLY (EDF R&D, LNHE)
45 !+ 23/02/2017
46 !+ V7P3
47 !+ SPECTRA READ FROM AN EXTERNAL MESH CAN NOW BE IMPOSED ON THE
48 !+ OPEN BOUNDARIES.
49 !
50 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
51 !| APHILL |-->| BOUNDARY PHILLIPS CONSTANT
52 !| AT |-->| COMPUTATION TIME
53 !| BOUNDARY_COLOUR|-->| COLOUR OF BOUNDARY POINT (DEFAULT: ITS RANK)
54 !| DDC |-->| DATE OF COMPUTATION BEGINNING
55 !| DEPTH |-->| WATER DEPTH
56 !| F |-->| VARIANCE DENSITY DIRECTIONAL SPECTRUM
57 !| FBOR |<->| SPECTRAL VARIANCE DENSITY AT THE BOUNDARIES
58 !| FETCHL |-->| BOUNDARY MEAN FETCH VALUE
59 !| FPICL |-->| BOUNDARY PEAK FREQUENCY
60 !| FPMAXL |-->| BOUNDARY MAXIMUM PEAK FREQUENCY
61 !| FRA |<--| DIRECTIONAL SPREADING FUNCTION VALUES
62 !| FRABL |-->| BOUNDARY ANGULAR DISTRIBUTION FUNCTION
63 !| FREQ |-->| DISCRETIZED FREQUENCIES
64 !| GAMMAL |-->| BOUNDARY PEAK FACTOR
65 !| GRAVIT |-->| GRAVITY ACCELERATION
66 !| HM0L |-->| BOUNDARY SIGNIFICANT WAVE HEIGHT
67 !| IMP_FILE |-->| MESH FILE WITH THE IMPOSED SPECTRA
68 !| KENT |-->| B.C.: A SPECTRUM IS PRESCRIBED AT THE BOUNDARY
69 !| LIFBOR |-->| TYPE OF BOUNDARY CONDITION ON F
70 !| LIMSPE |-->| TYPE OF BOUNDARY DIRECTIONAL SPECTRUM
71 !| LT |-->| NUMBER OF THE TIME STEP CURRENTLY SOLVED
72 !| NBI1 |-->| LOGICAL UNIT NUMBER OF THE USER BINARY FILE
73 !| NBOR |-->| GLOBAL NUMBER OF BOUNDARY POINTS
74 !| NF |-->| NUMBER OF FREQUENCIES
75 !| NFO1 |-->| LOGICAL UNIT NUMBER OF THE USER FORMATTED FILE
76 !| NDIRE |-->| NUMBER OF DIRECTIONS
77 !| NPOIN2 |-->| NUMBER OF POINTS IN 2D MESH
78 !| NPRIV |-->| NUMBER OF PRIVATE ARRAYS
79 !| NPTFR |-->| NUMBER OF BOUNDARY POINTS
80 !| PRIVE |-->| USER WORK TABLE
81 !| SIGMAL |-->| BOUNDARY SPECTRUM VALUE OF SIGMA-A
82 !| SIGMBL |-->| BOUNDARY SPECTRUM VALUE OF SIGMA-B
83 !| SPEC |<--| VARIANCE DENSITY FREQUENCY SPECTRUM
84 !| SPEULI |-->| INDICATES IF B.C. SPECTRUM IS MODIFIED BY USER
85 !| SPRE1L |-->| BOUNDARY DIRECTIONAL SPREAD 1
86 !| SPRE2L |-->| BOUNDARY DIRECTIONAL SPREAD 2
87 !| TETA1L |-->| BOUNDARY MAIN DIRECTION 1
88 !| TETA2L |-->| BOUNDARY MAIN DIRECTION 2
89 !| UV, VV |-->| WIND VELOCITIES AT THE MESH POINTS
90 !| VENSTA |-->| INDICATES IF THE WIND IS STATIONARY
91 !| VENT |-->| INDICATES IF WIND IS TAKEN INTO ACCOUNT
92 !| X |-->| ABSCISSAE OF POINTS IN THE MESH
93 !| XLAMDL |-->| BOUNDARY WEIGHTING FACTOR FOR ANGULAR
94 !| | | DISTRIBUTION FUNCTION
95 !| Y |-->| ORDINATES OF POINTS IN THE MESH
96 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
97 !
98  USE interface_tomawac, ex_limwac => limwac
100  & limspe, fpmaxl, fetchl, sigmal, sigmbl, gammal, fpicl ,
101  & hm0l , aphill, teta1l, spre1l, teta2l, spre2l, xlamdl,
102  & speuli, vent , vensta, depth , spec , fra , frabl ,
103  & at , lt , uv , vv , lifbor, nbor
104 
106  USE bnd_spectra
107  USE bief_def, ONLY : bief_file
108  IMPLICIT NONE
109 !
110 !
111  INTEGER, INTENT(IN) :: NPTFR,NDIRE,NF,NPOIN2,NPRIV
112  INTEGER, INTENT(IN) :: KENT
113  DOUBLE PRECISION, INTENT(IN) :: PRIVE(npoin2,npriv)
114  TYPE(bief_file), INTENT(IN) :: IMP_FILE
115  DOUBLE PRECISION, INTENT(INOUT):: F(npoin2,ndire,nf)
116  DOUBLE PRECISION, INTENT(INOUT):: FBOR(nptfr,ndire,nf)
117 !
118  INTEGER IFF,IDIRE,IPTFR
119 !
120  LOGICAL FLAG
121 !
122 !
123 !***********************************************************************
124 !
125 ! MODIFIES THE TYPE OF BOUNDARY CONDITION (OPTIONAL)
126 !
127 ! CAN BE CODED BY THE USER (SPEULI=.TRUE.)
128 !
129 ! LIFBOR(IPTFR)=KENT OR KSORT
130 !
131  flag=.false.
132  IF (vent .AND. (limspe.EQ.1 .OR. limspe.EQ.2 .OR. limspe.EQ.3
133  & .OR. limspe.EQ.5)) flag=.true.
134 !
135 ! THE FIRST TIME, ALLOCATES MEMORY FOR THE USEFUL ARRAYS
136 ! ---------------------------------------------------------------
137 !
138  IF(lt.LT.1) THEN
139  npb=1
140  IF(flag) THEN
141  ALLOCATE(uv2d(1:nptfr),vv2d(1:nptfr))
142  npb=nptfr
143  ENDIF
144  IF(limspe.EQ.7 .OR. speuli) THEN
145  IF (.NOT.ALLOCATED(prof)) ALLOCATE(prof(1:nptfr))
146  npb=nptfr
147  ENDIF
148  IF(npb.EQ.1) THEN
149  IF (.NOT.ALLOCATED(fb_cte)) ALLOCATE(fb_cte(1:ndire,1:nf))
150  ENDIF
151  ENDIF
152  IF (.NOT.ALLOCATED(uv2d)) ALLOCATE(uv2d(nptfr))
153 ! MEMCHECK DO NOT LIKE FOR DEFERL_BJ78
154  IF (.NOT.ALLOCATED(vv2d)) ALLOCATE(vv2d(nptfr))
155  IF (.NOT.ALLOCATED(prof)) ALLOCATE(prof(nptfr))
156  IF (.NOT.ALLOCATED(fb_cte)) ALLOCATE(fb_cte(1:ndire,1:nf))
157 !
158 ! THE FIRST TIME (AND POSSIBLY SUBSEQUENTLY IF THE WIND IS NOT
159 ! STATIONARY AND IF THE BOUNDARY SPECTRUM DEPENDS ON IT),
160 ! COMPUTES THE BOUNDARY SPECTRUM
161 !
162  IF(lt.LT.1 .OR. (.NOT.vensta.AND.flag) .OR. speuli .OR.
163  & (imp_file%NAME(1:1).NE.' ')) THEN
164  IF(flag) THEN
165  DO iptfr=1,nptfr
166  uv2d(iptfr)=uv(nbor(iptfr))
167  vv2d(iptfr)=vv(nbor(iptfr))
168  ENDDO
169  ENDIF
170  IF(limspe.EQ.7 .OR. speuli) THEN
171  DO iptfr=1,nptfr
172  prof(iptfr)=depth(nbor(iptfr))
173  ENDDO
174  ENDIF
175 !
176 ! WHEN NPB=1 FBOR ONLY FILLED FOR FIRST POINT
177 !
178 ! SPECTRUM ON BOUNDARIES
179 !
180  IF(npb.EQ.nptfr) THEN
181  CALL speini
182  &( fbor ,spec ,fra ,uv2d ,vv2d ,fpmaxl,fetchl,
183  & sigmal,sigmbl,gammal,fpicl ,hm0l ,aphill,teta1l,
184  & spre1l,teta2l,spre2l,xlamdl,npb ,ndire ,nf ,
185  & limspe,prof ,frabl )
186  ELSE
187  CALL speini
188  &( fb_cte,spec ,fra ,uv2d ,vv2d ,fpmaxl,fetchl,
189  & sigmal,sigmbl,gammal,fpicl ,hm0l ,aphill,teta1l,
190  & spre1l,teta2l,spre2l,xlamdl,npb ,ndire ,nf ,
191  & limspe,prof ,frabl )
192  ENDIF
193 !
194 ! IF THERE IS A MESHED FILE WITH THE BOUNDARY SPECTRA
195 ! THEY NEED TO BE IMPOSED
196 !
197  IF(imp_file%NAME(1:1).NE.' ')THEN
198  CALL impose_bnd_spectra(imp_file,lt,at,fbor,nptfr,ndire,nf)
199  ENDIF
200  ENDIF
201 !
202 ! ===========================================================
203 ! TO BE MODIFIED BY USER - RESU CAN BE CHANGED
204 ! ===========================================================
205 !
206  IF(speuli) THEN
207  CALL user_limwac
208  &(f , fbor , nptfr , ndire , nf , npoin2,
209  & kent , prive , npriv , imp_file)
210 !
211 ! ===========================================================
212 ! END OF USER MODIFICATIONS
213 ! ===========================================================
214 !
215  ELSE
216 !
217 ! -----------------------------------------------------------------
218 ! DUPLICATES THE BOUNDARY CONDITION FROM DYNAM ON ALL THE
219 ! DIRECTIONS AND FREQUENCIES, IF LIQUID BOUNDARY
220 ! -----------------------------------------------------------------
221 !
222  IF(flag.OR.limspe.EQ.7.OR.
223  & (imp_file%NAME(1:1).NE.' ')) THEN
224  DO iptfr=1,nptfr
225  IF(lifbor(iptfr).EQ.kent) THEN
226  DO iff=1,nf
227  DO idire=1, ndire
228  f(nbor(iptfr),idire,iff)=fbor(iptfr,idire,iff)
229  ENDDO
230  ENDDO
231  ENDIF
232  ENDDO
233  ELSE
234  DO iptfr=1,nptfr
235  IF(lifbor(iptfr).EQ.kent) THEN
236  DO iff=1,nf
237  DO idire=1, ndire
238  f(nbor(iptfr),idire,iff)=fb_cte(idire,iff)
239  ENDDO
240  ENDDO
241  ENDIF
242  ENDDO
243  ENDIF
244  ENDIF
245 !
246 !-----------------------------------------------------------------------
247 !
248  RETURN
249  END
double precision, dimension(:,:), allocatable fb_cte
subroutine speini(F, SPEC, FRA, UV, VV, FREMAX, FETCH, SIGMAA, SIGMAB, GAMMA, FPIC, HM0, ALPHIL, TETA1, SPRED1, TETA2, SPRED2, XLAMDA, NPOIN2, NDIRE, NF, INISPE, DEPTH, FRABI)
Definition: speini.f:10
double precision, dimension(:), allocatable prof
double precision, dimension(:), allocatable uv2d
subroutine, public impose_bnd_spectra(IMP_FILE, LT, AT, FBOR, NPTFR, NDIRE, NF)
Definition: bnd_spectra.f:79
subroutine user_limwac(F, FBOR, NPTFR, NDIRE, NF, NPOIN2, KENT, PRIVE, NPRIV, IMP_FILE)
Definition: user_limwac.f:7
subroutine limwac(F, FBOR, NPTFR, NDIRE, NF, NPOIN2, KENT, PRIVE, NPRIV, IMP_FILE)
Definition: limwac.f:8
double precision, dimension(:), allocatable vv2d