Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
! ********************
SUBROUTINE USER_WIND
! ********************
!
&(NVEN,FMTVEN)
!
!***********************************************************************
! TOMAWAC
!***********************************************************************
! (v8p2r1)
! Modifié pour intégrer la lecture du vent type VENUTI avec un fichier
! atmosphérique T ??? WS WD (la 2ème colonne peut être PATM, TAIR...).
!
! L'interpolation linéaire ne commence qu'à partir du premier TV2 lu.
! Donc il faut que le premier TV2 lu soit assez bas (ex: = un pas de temps).
! Ceci s'explique par la condition TROUVE(1) et TROUVE(2) dans NOUDON.f
! qui vaut F avant le premier TV2 lu. Or, elle doit valoir T pour effectuer
! l'interpolation linéaire.
!
! Ex (sans la 2ème colonne ici):
! # ...
! ...
! ...
! 0. 0. 0.
! 5. 0. 0.
! 3600. 10. 10.
! etc.
!
! Et non directement:
! # ...
! ...
! ...
! 0. 0. 0.
! 3600. 10. 10.
! etc.
!
!***********************************************************************
!
!brief READS THE WINDS FROM A USED-DEFINED FILE FORMAT.
!
!note DURING THE FIRST PASS THE USER MUST IDENTIFY THE TIMES TV1 AND TV2
!+ WHICH SURROUND THE FIRST TIME STEP. NEXT, USING THE ARRAYS
!+ XRELV,YRELV,UR,VR OR DIRECTLY FROM THE WIND FILE, THE USER
!+ MAY HAVE TO INTERPOLATE THE WINDS READ FROM THE FILE INTO THE
!+ ARRAYS U1,V1 U2,V2.
!+
!+ INTERPOLATION SUBROUTINE FASP :
!+
!+ CALL FASP(X,Y,U1,NPOIN,XRELV,YRELV,UR,NP,NBOR,MESH%KP1BOR%I,NPTFR,0.D0)
!+
!+ CALL FASP(X,Y,V1,NPOIN,XRELV,YRELV,VR,NP,NBOR,MESH%KP1BOR%I,NPTFR,0.D0)
!+
!+ THE CODE WILL INTERPOLATE THE WIND AUTOMATICALLY BETWEEN THESE
!+ 2 TIME STEPS.
!+
!+ THE OTHER PASSES OCCUR WHEN A NEW RECORD IS REQUIRED (AT>TV2).
!+ IN THIS CASE TV2,U2,V2 ONLY ARE TO BE COMPUTED.
!
!
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!| AT |-->| COMPUTATION TIME
!| FMTVEN |-->| WIND FILE FORMAT
!| DDC |-->| DATE OF COMPUTATION BEGINNING
!| NBOR |-->| GLOBAL NUMBER OF BOUNDARY POINTS
!| NPTFR |-->| NUMBER OF BOUNDARY POINTS
!| NVEN |-->| LOGICAL UNIT NUMBER OF THE WIND DATA FILE
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!
USE DECLARATIONS_SPECIAL
USE DECLARATIONS_TOMAWAC, ONLY : NPOIN2, X, Y, DDC, AT,
& TV1,TV2,UV1,UV2,VV1,VV2, NBOR, NPTFR
USE INTERFACE_TOMAWAC, EX_USER_WIND => USER_WIND
USE BIEF
IMPLICIT NONE
!
!
!+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
!
INTEGER, INTENT(IN) :: NVEN
CHARACTER(LEN=8), INTENT(IN) :: FMTVEN
!
!*** Modif EPO *********************************************************
! ne pas oublier le SAVE ici pour FUAIR et FVAIR!
!
DOUBLE PRECISION,SAVE :: FUAIR1,FVAIR1
DOUBLE PRECISION,SAVE :: FUAIR2,FVAIR2
DOUBLE PRECISION :: TOTO
DOUBLE PRECISION :: FWS1,FDD1,FWS2,FDD2
DOUBLE PRECISION,PARAMETER :: PI=3.14159D0
!
!-----------------------------------------------------------------------
!
IF (AT.EQ.0) THEN
!
! JUMPING 3 LINES OF COMMENTS
write(LU,*) 'Premier pas de temps'
READ(NVEN,*,ERR=100,END=200)
READ(NVEN,*,ERR=100,END=200)
READ(NVEN,*,ERR=100,END=200)
!
! READING THE FIRST TWO LINES OF DATA
READ(NVEN,*,ERR=100,END=200) TV1,TOTO,FWS1,FDD1
write(LU,*) TV1,TOTO,FWS1,FDD1
FUAIR1=FWS1*DCOS((270.D0-FDD1)*PI/180.D0)
FVAIR1=FWS1*DSIN((270.D0-FDD1)*PI/180.D0)
!FUAIR1=FWS1
!FVAIR1=FDD1
!write(LU,*) 'FUAIR1=',FUAIR1,'FVAIR1=',FVAIR1
!write(LU,*) SIZE(UV1),SIZE(VV1),SIZE(UV2),SIZE(VV2)
CALL OV('X=C ',UV1,Y,Y,FUAIR1,NPOIN2)
CALL OV('X=C ',VV1,Y,Y,FVAIR1,NPOIN2)
!write(LU,*) AT,'TV1:',TV1,U1(100),FUAIR1,V1(100),FVAIR1
READ(NVEN,*,ERR=100,END=200) TV2,TOTO,FWS2,FDD2
FUAIR2=FWS2*DCOS((270.D0-FDD2)*PI/180.D0)
FVAIR2=FWS2*DSIN((270.D0-FDD2)*PI/180.D0)
!FUAIR2=FWS2
!FVAIR2=FDD2
!CALL OV('X=C ',UV2,Y,Y,FUAIR2,NPOIN2)
!CALL OV('X=C ',VV2,Y,Y,FVAIR2,NPOIN2)
!write(LU,*) 'stop'
!write(LU,*) AT,'TV2:',TV2,UV2(100),FUAIR2,VV2(100),FVAIR2
!write(LU,*) AT,'TV1:',TV1,UV1(100),FUAIR1,VV1(100),FVAIR1
ELSE
TV1=TV2
FUAIR1=FUAIR2
FVAIR1=FVAIR2
!write(LU,*) SIZE(UV1),SIZE(VV1),SIZE(UV2),SIZE(VV2)
CALL OV('X=C ',UV1,Y,Y,FUAIR1,NPOIN2)
CALL OV('X=C ',VV1,Y,Y,FVAIR1,NPOIN2)
READ(NVEN,*,ERR=100,END=200) TV2,TOTO,FWS2,FDD2
FUAIR2=FWS2*DCOS((270.D0-FDD2)*PI/180.D0)
FVAIR2=FWS2*DSIN((270.D0-FDD2)*PI/180.D0)
!FUAIR2=FWS2
!FVAIR2=FDD2
CALL OV('X=C ',UV2,Y,Y,FUAIR2,NPOIN2)
CALL OV('X=C ',VV2,Y,Y,FVAIR2,NPOIN2)
ENDIF
!
write(LU,*) '(VENUTI) AT=',AT,'TV1:',TV1,UV1(100),VV1(100)
write(LU,*) '(VENUTI) AT=',AT,'TV2:',TV2,UV2(100),VV2(100)
!
!*** Fin modif EPO *****************************************************
!
!write(LU,*) 'entree EPO'
return
!
100 CONTINUE
WRITE(LU,*) ' '
WRITE(LU,*) 'VENUTI'
IF(LNG.EQ.1) WRITE(LU,*) 'ERREUR DANS LE FICHIER DE VENT'
IF(LNG.EQ.2) WRITE(LU,*) 'ERROR IN THE WIND FILE'
CALL PLANTE(1)
STOP
200 CONTINUE
WRITE(LU,*) ' '
WRITE(LU,*) 'VENUTI'
IF(LNG.EQ.1) WRITE(LU,*) 'FIN PREMATUREE DU FICHIER DE VENT'
IF(LNG.EQ.2) WRITE(LU,*) 'WIND FILE TOO SHORT'
CALL PLANTE(1)
STOP
END