SURFEX v7.3
General documentation of Surfex
|
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