! ******************** 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