The TELEMAC-MASCARET system  trunk
stwc1.f
Go to the documentation of this file.
1 ! ********************************
2  DOUBLE PRECISION FUNCTION stwc1
3 ! ********************************
4 !
5  &(f,dir,spec,i)
6 !
7 !***********************************************************************
8 ! ARTEMIS V8P1
9 !***********************************************************************
10 !
11 !brief COMPUTES THE ENERGY DENSITY BASED ON A TOMAWAC SPECTRUM.
12 !
13 !history C. PEYRARD (LNHE)
14 !+ 07/2014
15 !+ V7P0
16 !+ Interpolation of TOMAWAC spectrum for required F and DIR
17 !
18 !history N. DURAND (HRW)
19 !+ Feb 2017
20 !+ V7P2
21 !+ bug fix last line (STWC= )
22 !
23 !history N.DURAND (HRW)
24 !+ August 2017
25 !+ V7P3
26 !+ STWC updated to reflect use of new spectrum structure and for
27 !+ CHAINTWC.EQ.1
28 !
29 !history N.DURAND (HRW)
30 !+ January 2019
31 !+ V8P0
32 !+ Added USE BIEF_DEF since TYPE SPECTRUM is now defined in BIEF_DEF
33 !
34 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
35 !| F |-->| FREQUENCY FOR WHICH ENERGY DENSITY IS CALCULATED (Hz)
36 !| DIR |-->| DIRECTION FOR WHICH ENERGY DENSITY IS CALCULATED (°)
37 !| SPEC |-->| SPECTRUM STRUCTURE
38 !| I |-->| NUMBER OF THE SPECTRAL POINT
39 !~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
40 !
41  USE bief_def, ONLY: spectrum
44  IMPLICIT NONE
45 !
46 !-----------------------------------------------------------------------
47 !
48  TYPE(spectrum) , INTENT(IN) :: SPEC
49  DOUBLE PRECISION :: F,DIR
50  INTEGER :: I
51 !
52  DOUBLE PRECISION :: F1,F2,D1,D2,EPS,TET
53  DOUBLE PRECISION :: SPF1D1,SPF2D1,SPF1D2,SPF2D2
54  DOUBLE PRECISION :: SPF1D,SPF2D
55 !
56  INTEGER :: IFF,INDF,IFF1,IDD,INDD,IDD1
57 !
58  INTRINSIC :: exp
59 !
60 !-----------------------------------------------------------------------
61 ! TOMAWAC SPECTRUM IS GIVEN AT DISCRETE FREQUENCIES AND DIRECTIONS
62 ! THAT ARE COARSER THAN REQUIRED TO GIVE A SMOOTH ESTIMATE OF ENERGY
63 ! IN SPECTRUM
64 ! => REQUIRES INTERPOLATION (WITHIN RANGE) AS FOLLOWS
65 !
66 ! known at frequencies (f1<f2) and directions (d1<d2)
67 ! INTERPOLATION :
68 ! Sp(f,d) = Sp(f1,d) + (f-f1)*(Sp(f2,d)-Sp(f1,d))/(f2-f1)
69 ! with
70 ! Sp(f1,d)= Sp(f1,d1) + (d-d1)*(Sp(f1,d2)-Sp(f1,d1))/(d2-d1)
71 ! Sp(f2,d)= Sp(f2,d1) + (d-d1)*(Sp(f2,d2)-Sp(f2,d1))/(d2-d1)
72 !
73 !-----------------------------------------------------------------------
74 !
75 ! FINDS CLOSEST F1 AND F2
76 !
77  eps=1e-5
78  indf=0
79  f1=0.d0
80  f2=0.d0
81  DO iff=1,nf-1
82  IF((spec%FRE(iff)-eps.LE.f).AND.(spec%FRE(iff+1)+eps.GE.f))THEN
83  f1=spec%FRE(iff)
84  f2=spec%FRE(iff+1)
85  iff1=iff
86  indf=1
87  ENDIF
88  ENDDO
89 !
90 ! FINDS CLOSEST D1 AND D2
91 !
92 ! LOCAL VARIABLE TET TO HAVE THE DIRECTION THAT MAY BE CHANGED
93  tet = dir
94  IF (tet+eps.LE.spec%DIR(1)) tet=tet+360.d0
95  indd=0
96  d1=0.d0
97  d2=0.d0
98  DO idd=1,ndir
99  IF ((spec%DIR(idd).LE.tet).AND.(spec%DIR(idd+1).GE.tet)) THEN
100  d1=spec%DIR(idd)
101  d2=spec%DIR(idd+1)
102  idd1=idd
103  indd=1
104  ENDIF
105  ENDDO
106 !
107 ! ----------------------------------------------------------------------
108 !
109 ! COMPUTES ENERGY DENSITY AT REQUIRED F AND DIR
110 !
111  IF ((indd*indf).EQ.0) THEN
112  stwc1 = 0.d0
113  WRITE(lu,*) '--------------------WARNING----------------------'
114  WRITE(lu,*) 'SUBROUTINE STWC1: YOU ASK FOR A PERIOD/DIRECTION '
115  WRITE(lu,*) 'OUTSIDE THE RANGE OF THE TOMAWAC SPECTRUM '
116  IF(indf.EQ.0) THEN
117  WRITE(lu,*) 'F = ',f
118  WRITE(lu,*) 'FMIN, FMAX =' ,spec%FRE(1),spec%FRE(nf)
119  ENDIF
120  IF(indd.EQ.0) WRITE(lu,*) 'DIR = ',tet
121 !
122  CALL plante(1)
123  stop
124 !
125  ELSE
126 !
127 ! Sp(f1,d1), Sp(f2,d1), Sp(f1,d2), Sp(f2,d2)
128 !
129  spf1d1=spec%ADR(i)%SOUTER(iff1 ,idd1 )
130  spf2d1=spec%ADR(i)%SOUTER(iff1+1,idd1 )
131  spf1d2=spec%ADR(i)%SOUTER(iff1 ,idd1+1)
132  spf2d2=spec%ADR(i)%SOUTER(iff1+1,idd1+1)
133 !
134 ! Sp(f1,d), Sp(f2,d)
135 !
136  spf1d= spf1d1 + (tet-d1)*(spf1d2-spf1d1)/(d2-d1)
137  spf2d= spf2d1 + (tet-d1)*(spf2d2-spf2d1)/(d2-d1)
138 !
139 ! Sp(f,d) = Sp(f1,d) + (f-f1)*(Sp(f2,d)-Sp(f1,d))/(f2-f1)
140 !
141  stwc1 = spf1d + (f-f1)*(spf2d-spf1d)/(f2-f1)
142 !
143  ENDIF
144 !-----------------------------------------------------------------------
145 !
146  RETURN
147  END
double precision function stwc1(F, DIR, SPEC, I)
Definition: stwc1.f:7