SURFEX v7.3
General documentation of Surfex
|
00001 ! ######### 00002 SUBROUTINE READ_BINLLV(HPROGRAM,HSUBROUTINE,HFILENAME) 00003 ! ############################################################## 00004 ! 00005 !!**** *READ_BINLLV* reads a binary latlonvalue file and call treatment 00006 !! subroutine 00007 !! 00008 !! PURPOSE 00009 !! ------- 00010 !! 00011 !! AUTHOR 00012 !! ------ 00013 !! 00014 !! V. Masson Meteo-France 00015 !! 00016 !! MODIFICATION 00017 !! ------------ 00018 !! 00019 !! Original 12/09/95 00020 !! 03/2004 externalization (V. Masson) 00021 !! 00022 !---------------------------------------------------------------------------- 00023 ! 00024 !* 0. DECLARATION 00025 ! ----------- 00026 ! 00027 USE MODD_PGD_GRID, ONLY : LLATLONMASK 00028 ! 00029 USE MODI_OPEN_FILE 00030 USE MODI_CLOSE_FILE 00031 USE MODI_PT_BY_PT_TREATMENT 00032 USE MODI_GET_LUOUT 00033 ! 00034 ! 00035 USE YOMHOOK ,ONLY : LHOOK, DR_HOOK 00036 USE PARKIND1 ,ONLY : JPRB 00037 ! 00038 IMPLICIT NONE 00039 ! 00040 !* 0.1 Declaration of arguments 00041 ! ------------------------ 00042 ! 00043 CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! Type of program 00044 CHARACTER(LEN=6), INTENT(IN) :: HSUBROUTINE ! Name of the subroutine to call 00045 CHARACTER(LEN=28), INTENT(IN) :: HFILENAME ! Name of the field file. 00046 ! 00047 ! 00048 !* 0.2 Declaration of local variables 00049 ! ------------------------------ 00050 ! 00051 INTEGER :: IGLB ! logical unit 00052 ! 00053 INTEGER :: JLAT, JLON ! indexes of OLATLONMASK array 00054 REAL :: ZVALUE ! values of a data point 00055 REAL :: ZLAT ! latitude of data point 00056 REAL :: ZLON ! longitude of data point 00057 ! 00058 INTEGER :: ILUOUT ! output listing 00059 REAL(KIND=JPRB) :: ZHOOK_HANDLE 00060 !---------------------------------------------------------------------------- 00061 ! 00062 !* 1. Open the file 00063 ! ------------- 00064 ! 00065 IF (LHOOK) CALL DR_HOOK('READ_BINLLV',0,ZHOOK_HANDLE) 00066 CALL OPEN_FILE(HPROGRAM,IGLB,HFILENAME,'UNFORMATTED',HACTION='READ') 00067 ! 00068 CALL GET_LUOUT(HPROGRAM,ILUOUT) 00069 ! 00070 !---------------------------------------------------------------------------- 00071 DO 00072 !---------------------------------------------------------------------------- 00073 ! 00074 !* 3. Reading of a data point 00075 ! ----------------------- 00076 ! 00077 READ(IGLB,END=99) ZLAT,ZLON,ZVALUE 00078 ! 00079 !---------------------------------------------------------------------------- 00080 ! 00081 !* 4. Test if point is in the domain 00082 ! ------------------------------ 00083 ! 00084 ZLON=ZLON+NINT((180.-ZLON)/360.)*360. 00085 ! 00086 JLAT = 1 + INT( ( ZLAT + 90. ) * 2. ) 00087 JLAT = MIN(JLAT,360) 00088 JLON = 1 + INT( ( ZLON ) * 2. ) 00089 JLON = MIN(JLON,720) 00090 ! 00091 IF (.NOT. LLATLONMASK(JLON,JLAT)) CYCLE 00092 ! 00093 !------------------------------------------------------------------------------- 00094 ! 00095 !* 5. Call to the adequate subroutine (point by point treatment) 00096 ! ---------------------------------------------------------- 00097 ! 00098 CALL PT_BY_PT_TREATMENT(ILUOUT, (/ ZLAT /) , (/ ZLON /) , (/ ZVALUE /) , & 00099 HSUBROUTINE ) 00100 ! 00101 !------------------------------------------------------------------------------- 00102 ENDDO 00103 ! 00104 !---------------------------------------------------------------------------- 00105 ! 00106 !* 8. Closing of the data file 00107 ! ------------------------ 00108 ! 00109 99 CONTINUE 00110 CALL CLOSE_FILE (HPROGRAM,IGLB) 00111 IF (LHOOK) CALL DR_HOOK('READ_BINLLV',1,ZHOOK_HANDLE) 00112 ! 00113 !------------------------------------------------------------------------------- 00114 ! 00115 END SUBROUTINE READ_BINLLV