SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/LIB/TRIP/read_nam_grid_trip.F90
Go to the documentation of this file.
00001 !     #########
00002 SUBROUTINE READ_NAM_GRID_TRIP(HPROGRAM)
00003 !######################################
00004 !
00005 !!****  *READ_NAM_GRID_TRIP* - routine to read in namelist the TRIP horizontal grid
00006 !!
00007 !!    PURPOSE
00008 !!    -------
00009 !!
00010 !!**  METHOD
00011 !!    ------
00012 !!
00013 !!    EXTERNAL
00014 !!    --------
00015 !!
00016 !!
00017 !!    IMPLICIT ARGUMENTS
00018 !!    ------------------
00019 !!
00020 !!    REFERENCE
00021 !!    ---------
00022 !!
00023 !!
00024 !!    AUTHOR
00025 !!    ------
00026 !!      B. Decharme   *Meteo France*    
00027 !!
00028 !!    MODIFICATIONS
00029 !!    -------------
00030 !!      Original    05/2008 
00031 !-------------------------------------------------------------------------------
00032 !
00033 !*       0.    DECLARATIONS
00034 !              ------------
00035 !
00036 USE MODE_POS_SURF
00037 USE MODD_TRIP_GRID_n, ONLY : XGRID_TRIP
00038 !
00039 USE MODI_OPEN_NAMELIST
00040 USE MODI_CLOSE_NAMELIST
00041 USE MODI_GET_LUOUT
00042 !
00043 USE MODE_GRID_TRIP
00044 !
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   ! calling program
00055 !
00056 !*       0.2   Declarations of local variables
00057 !              -------------------------------
00058 !
00059 INTEGER :: ILUOUT ! output listing logical unit
00060 INTEGER :: ILUNAM ! namelist file  logical unit
00061 INTEGER :: I
00062 LOGICAL :: GFOUND
00063 REAL    :: ZWORK
00064 !
00065 !
00066 !*       0.3   Declarations of namelist
00067 !              ------------------------
00068 !
00069 REAL    :: TLONMIN  ! minimum longitude (degrees)
00070 REAL    :: TLONMAX  ! maximum longitude (degrees)
00071 REAL    :: TLATMIN  ! minimum latitude  (degrees)
00072 REAL    :: TLATMAX  ! maximum latitude  (degrees)
00073 REAL    :: TRES     ! 1° or 0.5° resolution
00074 !
00075 REAL, DIMENSION(:), ALLOCATABLE ::  ZLON
00076 REAL, DIMENSION(:), ALLOCATABLE ::  ZLAT
00077 !
00078 INTEGER :: ILON,ILAT
00079 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00080 !
00081 NAMELIST/NAM_GRID_TRIP/TLONMIN, TLONMAX, TLATMIN, TLATMAX, TRES
00082 !
00083 !------------------------------------------------------------------------------
00084 !
00085 !*       1.    opening of namelist
00086 ! 
00087 IF (LHOOK) CALL DR_HOOK('READ_NAM_GRID_TRIP',0,ZHOOK_HANDLE)
00088  CALL GET_LUOUT(HPROGRAM,ILUOUT)
00089 !
00090  CALL OPEN_NAMELIST(HPROGRAM,ILUNAM)
00091 !
00092 !---------------------------------------------------------------------------
00093 !
00094 !*       2.    Reading of projection parameters
00095 !              --------------------------------
00096 !
00097  CALL POSNAM(ILUNAM,'NAM_GRID_TRIP',GFOUND,ILUOUT)
00098 IF (GFOUND) READ(UNIT=ILUNAM,NML=NAM_GRID_TRIP)
00099 !
00100  CALL CLOSE_NAMELIST(HPROGRAM,ILUNAM)
00101 !
00102 IF(TRES/=0.5.AND.TRES/=1.0.AND.TRES/=0.1)THEN
00103   WRITE(ILUOUT,*)'Error : The resolution of the TRIP grid must be 1° or 0.5°'
00104   WRITE(ILUOUT,*)'        or 0.1° over France                               '
00105   WRITE(ILUOUT,*)'        In NAM_GRID_TRIP, TRES should be 0.1 or 0.5 or 1. '
00106   STOP
00107 ENDIF
00108 !
00109 !---------------------------------------------------------------------------
00110 !
00111 !*       3.    Number of lattitude and longitude
00112 !
00113 ILON = INT((TLONMAX-TLONMIN)/TRES)
00114 ILAT = INT((TLATMAX-TLATMIN)/TRES)
00115 !
00116 !---------------------------------------------------------------------------
00117 !
00118 !*       4.    lattitude and longitude values
00119 !
00120 ALLOCATE(ZLON(ILON))
00121 ALLOCATE(ZLAT(ILAT))
00122 !
00123 ZWORK = TLONMIN-(TRES/2.)
00124 DO I=1,ILON
00125    ZWORK   = ZWORK + TRES
00126    ZLON(I) = ZWORK
00127 ENDDO
00128 !
00129 ZWORK =TLATMIN-(TRES/2.)
00130 DO I=1,ILAT
00131    ZWORK   = ZWORK + TRES
00132    ZLAT(I) = ZWORK
00133 ENDDO
00134 !
00135 !---------------------------------------------------------------------------
00136 !
00137 !*       5.    All this information stored into PGRID_TRIP
00138 !              -------------------------------------------
00139 !
00140 ALLOCATE(XGRID_TRIP(7+ILON+ILAT))
00141 XGRID_TRIP(:) = 0.0
00142 !
00143  CALL PUT_GRID_TRIP(XGRID_TRIP,TLONMIN,TLONMAX,TLATMIN,TLATMAX,TRES,ILON,ILAT,ZLON,ZLAT)
00144 !
00145 DEALLOCATE(ZLON)
00146 DEALLOCATE(ZLAT)
00147 IF (LHOOK) CALL DR_HOOK('READ_NAM_GRID_TRIP',1,ZHOOK_HANDLE)
00148 !
00149 !---------------------------------------------------------------------------
00150 !
00151 END SUBROUTINE READ_NAM_GRID_TRIP