SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/read_latlon.F90
Go to the documentation of this file.
00001 !     #########
00002       SUBROUTINE READ_LATLON(HPROGRAM,HSCHEME,HSUBROUTINE,HFILENAME)
00003 !     #########################################################
00004 !
00005 !!**** *READ_LATLON* reads a latlon file and call treatment subroutine
00006 !!
00007 !!    PURPOSE
00008 !!    -------
00009 !!
00010 !!    METHOD
00011 !!    ------
00012 !!   
00013 !!    EXTERNAL
00014 !!    --------
00015 !!
00016 !!    IMPLICIT ARGUMENTS
00017 !!    ------------------
00018 !!
00019 !!    REFERENCE
00020 !!    ---------
00021 !!
00022 !!    AUTHOR
00023 !!    ------
00024 !!
00025 !!    V. Masson        Meteo-France
00026 !!
00027 !!    MODIFICATION
00028 !!    ------------
00029 !!
00030 !!    Original    11/09/95
00031 !!
00032 !----------------------------------------------------------------------------
00033 !
00034 !*    0.     DECLARATION
00035 !            -----------
00036 !
00037 USE MODD_PGD_GRID,   ONLY : XMESHLENGTH
00038 !
00039 USE MODI_GET_LUOUT
00040 USE MODI_OPEN_NAMELIST
00041 USE MODI_CLOSE_NAMELIST
00042 USE MODI_OPEN_FILE
00043 USE MODI_CLOSE_FILE
00044 USE MODI_READHEAD
00045 USE MODI_INI_SSOWORK
00046 USE MODI_PT_BY_PT_TREATMENT
00047 !
00048 !
00049 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00050 USE PARKIND1  ,ONLY : JPRB
00051 !
00052 USE MODI_ABOR1_SFX
00053 !
00054 IMPLICIT NONE
00055 !
00056 !*    0.1    Declaration of arguments
00057 !            ------------------------
00058 !
00059  CHARACTER(LEN=6),  INTENT(IN) :: HPROGRAM      ! Type of program
00060  CHARACTER(LEN=6),  INTENT(IN) :: HSCHEME       ! Scheme treated
00061  CHARACTER(LEN=6),  INTENT(IN) :: HSUBROUTINE   ! Name of the subroutine to call
00062  CHARACTER(LEN=28), INTENT(IN) :: HFILENAME     ! Name of the field file.
00063 !
00064 !*    0.2    Declaration of local variables read in the data file head
00065 !            ---------------------------------------------------------
00066 !
00067 REAL    :: ZGLBLATMIN                 ! minimum latitude of data box in the file
00068 REAL    :: ZGLBLONMIN                 ! minimum longitude of data box in the file
00069 REAL    :: ZGLBLATMAX                 ! maximum latitude of data box in the file
00070 REAL    :: ZGLBLONMAX                 ! maximum longitude of data box in the file
00071 INTEGER :: INBLINE                    ! number of latitude rows (number of lines
00072 INTEGER :: INBCOL                     ! number of longitude rows (number of columns)
00073 REAL    :: ZNODATA                    ! value below which data are not considered
00074 !
00075 !*    0.3    Declaration of local variables
00076 !            ------------------------------
00077 !
00078 INTEGER :: IFILE                      ! logical units
00079 INTEGER :: ILUOUT                     ! output listing logical unit
00080 INTEGER :: IERR                       ! return codes
00081 !
00082 INTEGER :: JLOOP                      ! loop index
00083  CHARACTER(LEN=100):: YSTRING          ! string
00084 !
00085 REAL    :: ZDLAT                      ! latitude mesh in the data file
00086 REAL    :: ZDLON                      ! longitude mesh in the data file
00087 INTEGER :: JLINE                      ! index of line
00088 INTEGER :: JCOL                       ! index of column
00089 !
00090 REAL, DIMENSION(:), ALLOCATABLE :: ZVALUE ! value of a record of data points
00091 REAL, DIMENSION(:), POINTER     :: ZLAT   ! latitude of data points
00092 REAL, DIMENSION(:), POINTER     :: ZLON   ! longitude of data points
00093 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00094 !
00095 !
00096 !----------------------------------------------------------------------------
00097 !
00098 IF (LHOOK) CALL DR_HOOK('READ_LATLON',0,ZHOOK_HANDLE)
00099  CALL GET_LUOUT(HPROGRAM,ILUOUT)
00100 !
00101 !*    1.     Openning of header
00102 !            ------------------
00103 !
00104  CALL OPEN_NAMELIST(HPROGRAM,IFILE,HFILENAME)
00105 !
00106 !----------------------------------------------------------------------------
00107 !
00108 !*    2.     Reading of the global field
00109 !            ---------------------------
00110 !
00111 !*    2.1    Head of data file
00112 !            -----------------
00113 !
00114  CALL READHEAD(IFILE,ZGLBLATMIN,ZGLBLATMAX,ZGLBLONMIN,ZGLBLONMAX, &
00115                 INBLINE,INBCOL,ZNODATA,ZDLAT,ZDLON,ZLAT,ZLON,IERR)  
00116 IF (IERR/=0) THEN
00117   CALL ABOR1_SFX('READ_LATLON: PROBLEM IN FILE HEADER')
00118 END IF
00119 !
00120 !*    2.2    Closing of header
00121 !            -----------------
00122 !
00123  CALL CLOSE_NAMELIST(HPROGRAM,IFILE)
00124 !
00125 !----------------------------------------------------------------------------
00126 !
00127 !*    3.     Adapt subgrid mesh to input file resolution
00128 !            -------------------------------------------
00129 !
00130 IF (HSUBROUTINE=='A_OROG') CALL INI_SSOWORK(XMESHLENGTH,ZDLAT,ZDLON)
00131 !
00132 !----------------------------------------------------------------------------
00133 !
00134 !*    4.     Openning of file
00135 !            ----------------
00136 !
00137  CALL OPEN_FILE(HPROGRAM,IFILE,HFILENAME,'FORMATTED',HACTION='READ')
00138 DO JLOOP=1,8
00139   READ(IFILE,FMT='(A100)') YSTRING
00140 END DO
00141 !
00142 !----------------------------------------------------------------------------
00143 !
00144 !*    5.     Allocation of array containing the data
00145 !            ---------------------------------------
00146 !
00147 ALLOCATE(ZVALUE(INBCOL))
00148 !
00149 !----------------------------------------------------------------------------
00150 !
00151 !*    6.     Loop on lines
00152 !            -------------
00153 !
00154 DO JLINE=1,INBLINE
00155 !
00156 !----------------------------------------------------------------------------
00157 !
00158 !*    7.     Reading in the file
00159 !            -------------------
00160 !
00161   READ(IFILE,FMT=*) ZVALUE(:)
00162 !
00163 !
00164 !----------------------------------------------------------------------------
00165 !
00166 !*    8.     Loop on columns
00167 !            ---------------
00168 !
00169   DO JCOL=1,INBCOL
00170 
00171 !-------------------------------------------------------------------------------
00172 !
00173 !*    9.     value not valid
00174 !            ---------------
00175 !
00176     IF (ABS(ZVALUE(JCOL)-ZNODATA)<=1.E-10) CYCLE
00177 !
00178 !-------------------------------------------------------------------------------
00179 !
00180 !*   10.     Call to the adequate subroutine (point by point treatment)
00181 !            ----------------------------------------------------------
00182 !
00183     CALL PT_BY_PT_TREATMENT(ILUOUT,ZLAT(JLINE:JLINE),ZLON(JCOL:JCOL),ZVALUE(JCOL:JCOL),&
00184                               HSUBROUTINE                                              )  
00185 !
00186 !-------------------------------------------------------------------------------
00187   END DO
00188 !-------------------------------------------------------------------------------
00189 END DO
00190 !-------------------------------------------------------------------------------
00191 !
00192 !*   11.     deallocations
00193 !            -------------
00194 !
00195 DEALLOCATE(ZLAT)
00196 DEALLOCATE(ZLON)
00197 DEALLOCATE(ZVALUE)
00198 !
00199 !-------------------------------------------------------------------------------
00200 !
00201 !*   12.     closes the file
00202 !            ---------------
00203 !
00204  CALL CLOSE_FILE(HPROGRAM,IFILE)
00205 IF (LHOOK) CALL DR_HOOK('READ_LATLON',1,ZHOOK_HANDLE)
00206 !
00207 !-------------------------------------------------------------------------------
00208 !
00209 END SUBROUTINE READ_LATLON