SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/pgd_seaflux_par.F90
Go to the documentation of this file.
00001 !     #########
00002       SUBROUTINE PGD_SEAFLUX_PAR(HPROGRAM,OSST_DATA)
00003 !     ##############################################################
00004 !
00005 !!**** *PGD_SEAFLUX_PAR* monitor for averaging and interpolations of sst
00006 !!
00007 !!    PURPOSE
00008 !!    -------
00009 !!
00010 !!    METHOD
00011 !!    ------
00012 !!   
00013 !
00014 !!    EXTERNAL
00015 !!    --------
00016 !!
00017 !!    IMPLICIT ARGUMENTS
00018 !!    ------------------
00019 !!
00020 !!    REFERENCE
00021 !!    ---------
00022 !!
00023 !!    AUTHOR
00024 !!    ------
00025 !!
00026 !!    P. Le Moigne        Meteo-France
00027 !!
00028 !!    MODIFICATION
00029 !!    ------------
00030 !!
00031 !!    Original    09/2007
00032 !!
00033 !!
00034 !----------------------------------------------------------------------------
00035 !
00036 !*    0.     DECLARATION
00037 !            -----------
00038 !
00039 USE MODD_SURF_PAR,       ONLY : XUNDEF, NUNDEF
00040 USE MODD_SEAFLUX_GRID_n, ONLY : NDIM
00041 USE MODD_DATA_SEAFLUX_n, ONLY : XDATA_SST, TDATA_SST
00042 !
00043 USE MODD_PGDWORK,       ONLY : CATYPE
00044 !
00045 USE MODD_TYPE_DATE_SURF
00046 !
00047 USE MODI_GET_LUOUT
00048 USE MODI_OPEN_NAMELIST
00049 USE MODI_CLOSE_NAMELIST
00050 USE MODI_PGD_FIELD
00051 !
00052 USE MODE_POS_SURF
00053 !
00054 !
00055 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00056 USE PARKIND1  ,ONLY : JPRB
00057 !
00058 USE MODI_ABOR1_SFX
00059 !
00060 IMPLICIT NONE
00061 !
00062 !*    0.1    Declaration of arguments
00063 !            ------------------------
00064 !
00065  CHARACTER(LEN=6),    INTENT(IN)    :: HPROGRAM     ! Type of program
00066 LOGICAL         ,    INTENT(OUT)   :: OSST_DATA
00067 !
00068 !
00069 !*    0.2    Declaration of local variables
00070 !            ------------------------------
00071 !
00072 INTEGER               :: ILUOUT    ! output listing logical unit
00073 INTEGER               :: ILUNAM    ! namelist file  logical unit
00074 LOGICAL               :: GFOUND    ! true if namelist is found
00075 !
00076 INTEGER               :: JTIME     ! loop counter on time
00077 !
00078 !*    0.3    Declaration of namelists
00079 !            ------------------------
00080 !
00081 INTEGER            :: NTIME
00082 INTEGER, PARAMETER :: NTIME_MAX    = 365
00083 !
00084 REAL, DIMENSION(NTIME_MAX)     :: XUNIF_SST        ! sea surface temperature
00085 
00086 INTEGER, DIMENSION(NTIME_MAX)  :: NYEAR_SST
00087 INTEGER, DIMENSION(NTIME_MAX)  :: NMONTH_SST
00088 INTEGER, DIMENSION(NTIME_MAX)  :: NDAY_SST
00089 REAL, DIMENSION(NTIME_MAX)     :: XTIME_SST
00090 LOGICAL                        :: LSST_DATA
00091 !
00092 ! name of files containing data
00093 !
00094  CHARACTER(LEN=28), DIMENSION(NTIME_MAX)   :: CFNAM_SST        ! sea surface temperature
00095  CHARACTER(LEN=6),  DIMENSION(NTIME_MAX)   :: CFTYP_SST        ! sea surface temperature
00096 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00097 !
00098 NAMELIST/NAM_DATA_SEAFLUX/NTIME, LSST_DATA, XUNIF_SST, CFNAM_SST, CFTYP_SST, &
00099                             NYEAR_SST, NMONTH_SST, NDAY_SST, XTIME_SST  
00100 !-------------------------------------------------------------------------------
00101 !
00102 !*    1.      Initializations
00103 !             ---------------
00104 !
00105 IF (LHOOK) CALL DR_HOOK('PGD_SEAFLUX_PAR',0,ZHOOK_HANDLE)
00106 NTIME             = 12
00107 XUNIF_SST (:)     = XUNDEF ! sea surface temperature
00108 !
00109 CFNAM_SST (:)     = '                            '
00110 !
00111 CFTYP_SST (:)     = '      '
00112 !
00113 NYEAR_SST  (:)    = NUNDEF
00114 NMONTH_SST (:)    = NUNDEF
00115 NDAY_SST   (:)    = NUNDEF
00116 XTIME_SST  (:)    = XUNDEF
00117 !
00118 LSST_DATA         = .FALSE.
00119 !-------------------------------------------------------------------------------
00120 !
00121 !*    2.      Input file for cover types
00122 !             --------------------------
00123 !
00124  CALL GET_LUOUT(HPROGRAM,ILUOUT)
00125  CALL OPEN_NAMELIST(HPROGRAM,ILUNAM)
00126 !
00127  CALL POSNAM(ILUNAM,'NAM_DATA_SEAFLUX',GFOUND,ILUOUT)
00128 IF (GFOUND) READ(UNIT=ILUNAM,NML=NAM_DATA_SEAFLUX)
00129 !
00130  CALL CLOSE_NAMELIST(HPROGRAM,ILUNAM)
00131 !
00132 OSST_DATA         = LSST_DATA
00133 IF (.NOT. LSST_DATA .AND. LHOOK) CALL DR_HOOK('PGD_SEAFLUX_PAR',1,ZHOOK_HANDLE)
00134 IF (.NOT. LSST_DATA) RETURN
00135 !
00136 IF (NTIME > NTIME_MAX) THEN
00137    WRITE(ILUOUT,*)'NTIME SHOULD NOT EXCEED',NTIME_MAX
00138    CALL ABOR1_SFX('PGD_SEAFLUX_PAR: NTIME TOO BIG')
00139 ENDIF
00140 ALLOCATE(XDATA_SST     (NDIM,NTIME))
00141 ALLOCATE(TDATA_SST     (NTIME))
00142 !
00143 !-------------------------------------------------------------------------------
00144 !
00145 !*    3.      Uniform fields are prescribed
00146 !             -----------------------------
00147 !
00148 CATYPE = 'ARI'
00149 !
00150 DO JTIME=1,NTIME
00151   CALL PGD_FIELD(HPROGRAM,'SST: sea surface temperature','SEA',CFNAM_SST(JTIME),   &
00152                    CFTYP_SST(JTIME),XUNIF_SST(JTIME),XDATA_SST(:,JTIME))  
00153 !                 
00154   TDATA_SST(JTIME)%TDATE%YEAR  = NYEAR_SST(JTIME)
00155   TDATA_SST(JTIME)%TDATE%MONTH = NMONTH_SST(JTIME)
00156   TDATA_SST(JTIME)%TDATE%DAY   = NDAY_SST(JTIME)
00157   TDATA_SST(JTIME)%TIME        = XTIME_SST(JTIME)
00158 !  
00159 END DO
00160 IF (LHOOK) CALL DR_HOOK('PGD_SEAFLUX_PAR',1,ZHOOK_HANDLE)
00161 !
00162 !-------------------------------------------------------------------------------
00163 !
00164 END SUBROUTINE PGD_SEAFLUX_PAR