Skip to content
Snippets Groups Projects
user_wind_modif_METEO.f 5.5 KiB
Newer Older
Pierre NOLL's avatar
Pierre NOLL committed
!                   ********************
                    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