SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/read_pgd_seaflux_parn.F90
Go to the documentation of this file.
00001 !     #########
00002       SUBROUTINE READ_PGD_SEAFLUX_PAR_n(HPROGRAM,KSIZE,HDIR)
00003 !     ################################################
00004 !
00005 !!****  *READ_PGD_SEAFLUX_PAR_n* - reads SEAFLUX sst
00006 !!                        
00007 !!
00008 !!    PURPOSE
00009 !!    -------
00010 !!
00011 !!**  METHOD
00012 !!    ------
00013 !!
00014 !!    EXTERNAL
00015 !!    --------
00016 !!
00017 !!
00018 !!    IMPLICIT ARGUMENTS
00019 !!    ------------------
00020 !!
00021 !!    REFERENCE
00022 !!    ---------
00023 !!
00024 !!
00025 !!    AUTHOR
00026 !!    ------
00027 !!      P. Le Moigne   *Meteo France*   
00028 !!
00029 !!    MODIFICATIONS
00030 !!    -------------
00031 !!      Original    09/2007 
00032 !-------------------------------------------------------------------------------
00033 !
00034 !*       0.    DECLARATIONS
00035 !              ------------
00036 !
00037 USE MODD_SEAFLUX_GRID_n,   ONLY : NDIM
00038 USE MODD_TYPE_DATE_SURF
00039 USE MODD_DATA_SEAFLUX_n,   ONLY : NTIME, XDATA_SST, TDATA_SST
00040 USE MODD_PREP,             ONLY : LINTERP
00041 !
00042 USE MODI_GET_LUOUT
00043 USE MODI_READ_SURF
00044 USE MODI_HOR_INTERPOL
00045 !
00046 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00047 USE PARKIND1  ,ONLY : JPRB
00048 !
00049 IMPLICIT NONE
00050 !
00051 !*       0.1   Declarations of arguments
00052 !              -------------------------
00053 !
00054  CHARACTER(LEN=6),  INTENT(IN)  :: HPROGRAM ! program calling
00055 INTEGER, INTENT(IN) :: KSIZE
00056  CHARACTER(LEN=1),OPTIONAL,INTENT(IN)  :: HDIR       ! type of field :
00057 !                                                   ! 'H' : field with
00058 !                                                   !       horizontal spatial dim.
00059 !                                                   ! '-' : no horizontal dim.
00060 !
00061 !*       0.2   Declarations of local variables
00062 !              -------------------------------
00063 !
00064 REAL, DIMENSION(:,:), ALLOCATABLE :: ZDATA_SST
00065  CHARACTER(LEN=12) :: YRECFM         ! Name of the article to be read
00066  CHARACTER(LEN=100):: YCOMMENT       ! Comment string
00067  CHARACTER(LEN=1)  :: YDIR
00068 INTEGER           :: ILUOUT
00069 INTEGER           :: IRESP          ! IRESP  : return-code if a problem appears
00070 INTEGER           :: JTIME          ! loop index
00071 INTEGER           :: IVERSION, IBUGFIX
00072 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00073 !-------------------------------------------------------------------------------
00074 !
00075 IF (LHOOK) CALL DR_HOOK('READ_PGD_SEAFLUX_PAR_N',0,ZHOOK_HANDLE)
00076 !
00077  CALL GET_LUOUT(HPROGRAM,ILUOUT)
00078 !
00079 YDIR = 'H'
00080 IF (PRESENT(HDIR)) YDIR = HDIR
00081 !
00082 YRECFM='VERSION'
00083  CALL READ_SURF(HPROGRAM,YRECFM,IVERSION,IRESP)
00084 !
00085 YRECFM='BUG'
00086  CALL READ_SURF(HPROGRAM,YRECFM,IBUGFIX,IRESP)
00087 !
00088 IF (IVERSION<4 .OR. IVERSION==4 .AND. IBUGFIX<=4 .OR. &
00089     IVERSION>5 .OR. IVERSION==5 .AND. IBUGFIX>=1) THEN
00090   YRECFM='ND_SEA_TIME'
00091 ELSE
00092   YRECFM='NDATA_SEA_TIME'
00093 ENDIF
00094  CALL READ_SURF(HPROGRAM,YRECFM,NTIME,IRESP,HCOMMENT=YCOMMENT)
00095 !
00096 ALLOCATE(ZDATA_SST (KSIZE,NTIME))
00097 DO JTIME=1,NTIME
00098   !
00099   IF (IVERSION>5 .OR. IVERSION==5 .AND. IBUGFIX>=1) THEN
00100     WRITE(YRECFM,FMT='(A7,I3.3)') 'D_SST_T',JTIME
00101   ELSEIF (IVERSION<4 .OR. IVERSION==4 .AND. IBUGFIX<=4) THEN
00102     WRITE(YRECFM,FMT='(A9,I3.3)') 'DATA_SST_',JTIME
00103   ELSE
00104     WRITE(YRECFM,FMT='(A10,I3.3)') 'DATA_SST_T',JTIME
00105   ENDIF
00106   !
00107   CALL READ_SURF(HPROGRAM,YRECFM,ZDATA_SST(:,JTIME),IRESP,&
00108                 HCOMMENT=YCOMMENT,HDIR=YDIR)
00109   !
00110 END DO
00111 !
00112 ALLOCATE(XDATA_SST(NDIM,NTIME))
00113 IF (NDIM/=KSIZE) THEN
00114   LINTERP(:) = .TRUE.      
00115   DO JTIME=1,NTIME
00116     CALL HOR_INTERPOL(ILUOUT,ZDATA_SST(:,JTIME:JTIME),XDATA_SST(:,JTIME:JTIME))
00117   ENDDO
00118   DEALLOCATE(ZDATA_SST)
00119 ELSE
00120   XDATA_SST(:,:) = ZDATA_SST(:,:)
00121 ENDIF
00122 !
00123 ALLOCATE(TDATA_SST       (NTIME))
00124 !
00125 IF (IVERSION<4 .OR. IVERSION==4 .AND. IBUGFIX<=4) THEN
00126   DO JTIME=1,NTIME
00127     WRITE(YRECFM,FMT='(A7,I3.3)') 'DTA_SST',JTIME
00128     YCOMMENT='(-)'
00129     CALL READ_SURF(HPROGRAM,YRECFM,TDATA_SST,IRESP,HCOMMENT=YCOMMENT)
00130   END DO
00131 ELSE
00132   YRECFM='TDATA_SST'
00133   YCOMMENT='(-)'
00134   CALL READ_SURF(HPROGRAM,YRECFM,TDATA_SST,IRESP,HCOMMENT=YCOMMENT)
00135 ENDIF
00136 !
00137 IF (LHOOK) CALL DR_HOOK('READ_PGD_SEAFLUX_PAR_N',1,ZHOOK_HANDLE)
00138 !-------------------------------------------------------------------------------
00139 END SUBROUTINE READ_PGD_SEAFLUX_PAR_n