SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/read_grid.F90
Go to the documentation of this file.
00001 !     #########
00002       SUBROUTINE READ_GRID(HPROGRAM,HGRID,PGRID_PAR,PLAT,PLON,PMESH_SIZE,KRESP,PDIR)
00003 !     #########################################
00004 !
00005 !!****  *READ_GRID* - routine to initialise the horizontal grid of a scheme
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 !!      V. Masson   *Meteo France*      
00027 !!
00028 !!    MODIFICATIONS
00029 !!    -------------
00030 !!      Original    01/2003 
00031 !-------------------------------------------------------------------------------
00032 !
00033 !*       0.    DECLARATIONS
00034 !              ------------
00035 !
00036 USE MODI_GET_LUOUT
00037 USE MODI_READ_SURF
00038 USE MODI_LATLON_GRID
00039 USE MODI_READ_GRIDTYPE
00040 !
00041 !
00042 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00043 USE PARKIND1  ,ONLY : JPRB
00044 !
00045 IMPLICIT NONE
00046 !
00047 !*       0.1   Declarations of arguments
00048 !              -------------------------
00049 !
00050  CHARACTER(LEN=6),   INTENT(IN)  :: HPROGRAM   ! calling program
00051  CHARACTER(LEN=10),  INTENT(OUT) :: HGRID      ! type of horizontal grid
00052 REAL, DIMENSION(:), POINTER     :: PGRID_PAR  ! parameters defining this grid
00053 REAL, DIMENSION(:), INTENT(OUT) :: PLAT       ! latitude  (degrees)
00054 REAL, DIMENSION(:), INTENT(OUT) :: PLON       ! longitude (degrees)
00055 REAL, DIMENSION(:), INTENT(OUT) :: PMESH_SIZE ! horizontal mesh size (m2)
00056 INTEGER,            INTENT(OUT) :: KRESP      ! error return code
00057 REAL, DIMENSION(:), INTENT(OUT), OPTIONAL :: PDIR ! heading of main axis of grid compared to North (degrees)
00058 !
00059 !*       0.2   Declarations of local variables
00060 !              -------------------------------
00061 !
00062 INTEGER :: IGRID_PAR
00063 INTEGER :: ILUOUT
00064 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00065 !---------------------------------------------------------------------------
00066 !
00067 !*       1.    Reading of type of grid
00068 !              -----------------------
00069 !
00070 IF (LHOOK) CALL DR_HOOK('READ_GRID',0,ZHOOK_HANDLE)
00071  CALL READ_SURF(HPROGRAM,'GRID_TYPE',HGRID,KRESP)
00072 !
00073 !---------------------------------------------------------------------------
00074 !
00075 !*       2.    Reading parameters of the grid
00076 !              ------------------------------
00077 !
00078  CALL READ_GRIDTYPE(HPROGRAM,HGRID,IGRID_PAR,SIZE(PLAT),.FALSE.)
00079 !
00080 ALLOCATE(PGRID_PAR(IGRID_PAR))
00081  CALL READ_GRIDTYPE(HPROGRAM,HGRID,IGRID_PAR,SIZE(PLAT),.TRUE.,PGRID_PAR,KRESP)
00082 !
00083 !---------------------------------------------------------------------------
00084 !
00085 !*       3.    Latitude, longitude, mesh size
00086 !              ------------------------------
00087 !
00088  CALL GET_LUOUT(HPROGRAM,ILUOUT)
00089 !
00090 SELECT CASE (HGRID)
00091   CASE("NONE      ")
00092     IF (PRESENT(PDIR)) PDIR(:) = 0.
00093     !
00094     CALL READ_SURF(HPROGRAM,'LON',      PLON,KRESP)
00095     IF (KRESP/=0 .AND. LHOOK) CALL DR_HOOK('READ_GRID',1,ZHOOK_HANDLE)
00096     IF (KRESP/=0) RETURN
00097     CALL READ_SURF(HPROGRAM,'LAT',      PLAT,KRESP)
00098     IF (KRESP/=0 .AND. LHOOK) CALL DR_HOOK('READ_GRID',1,ZHOOK_HANDLE)
00099     IF (KRESP/=0) RETURN
00100     CALL READ_SURF(HPROGRAM,'MESH_SIZE',PMESH_SIZE,KRESP)
00101     IF (KRESP/=0 .AND. LHOOK) CALL DR_HOOK('READ_GRID',1,ZHOOK_HANDLE)
00102     IF (KRESP/=0) RETURN
00103 
00104   CASE DEFAULT
00105     IF (PRESENT(PDIR)) THEN
00106       CALL LATLON_GRID(HGRID,SIZE(PGRID_PAR),SIZE(PLAT),ILUOUT,PGRID_PAR,PLAT,PLON,PMESH_SIZE,PDIR)
00107     ELSE
00108       CALL LATLON_GRID(HGRID,SIZE(PGRID_PAR),SIZE(PLAT),ILUOUT,PGRID_PAR,PLAT,PLON,PMESH_SIZE)
00109     END IF
00110 
00111 END SELECT
00112 IF (LHOOK) CALL DR_HOOK('READ_GRID',1,ZHOOK_HANDLE)
00113 !
00114 !---------------------------------------------------------------------------
00115 !
00116 END SUBROUTINE READ_GRID