SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/read_nam_grid_lonlatval.F90
Go to the documentation of this file.
00001 !     ################################################################
00002       SUBROUTINE READ_NAM_GRID_LONLATVAL(HPROGRAM,KGRID_PAR,KL,PGRID_PAR)
00003 !     ################################################################
00004 !
00005 !!****  *READ_NAM_GRID_LONLATVAL* - routine to read in namelist the 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 !!      E. Martin   *Meteo France*      
00027 !!
00028 !!    MODIFICATIONS
00029 !!    -------------
00030 !!      Original    10/2007 
00031 !-------------------------------------------------------------------------------
00032 !
00033 !*       0.    DECLARATIONS
00034 !              ------------
00035 !
00036 USE MODE_POS_SURF
00037 !
00038 USE MODI_OPEN_NAMELIST
00039 USE MODI_CLOSE_NAMELIST
00040 USE MODI_GET_LUOUT
00041 !
00042 USE MODE_GRIDTYPE_LONLATVAL
00043 !
00044 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00045 USE PARKIND1  ,ONLY : JPRB
00046 !
00047 IMPLICIT NONE
00048 !
00049 !*       0.1   Declarations of arguments
00050 !              -------------------------
00051 !
00052  CHARACTER(LEN=6),           INTENT(IN)    :: HPROGRAM   ! calling program
00053 INTEGER,                    INTENT(INOUT) :: KGRID_PAR  ! size of PGRID_PAR
00054 INTEGER,                    INTENT(OUT)   :: KL         ! number of points
00055 REAL, DIMENSION(KGRID_PAR), INTENT(OUT)   :: PGRID_PAR  ! parameters defining this grid
00056 !
00057 !*       0.2   Declarations of local variables
00058 !              -------------------------------
00059 !
00060 INTEGER :: ILUOUT ! output listing logical unit
00061 INTEGER :: ILUNAM ! namelist file  logical unit
00062 
00063 REAL, DIMENSION(:),   ALLOCATABLE :: ZX       ! X conformal coordinate of grid mesh
00064 REAL, DIMENSION(:),   ALLOCATABLE :: ZY       ! Y conformal coordinate of grid mesh
00065 REAL, DIMENSION(:),   ALLOCATABLE :: ZDX      ! X grid mesh size
00066 REAL, DIMENSION(:),   ALLOCATABLE :: ZDY      ! Y grid mesh size
00067 !
00068 !*       0.3   Declarations of namelist
00069 !              ------------------------
00070 !
00071 INTEGER :: NPOINTS  ! number of points
00072 REAL, DIMENSION(100000) :: XX  ! X coordinate of grid mesh center (in meters)
00073 REAL, DIMENSION(100000) :: XY  ! Y coordinate of grid mesh center (in meters)
00074 REAL, DIMENSION(100000) :: XDX ! X mesh size (in meters)
00075 REAL, DIMENSION(100000) :: XDY ! Y mesh size (in meters)
00076 !
00077 REAL, DIMENSION(:), POINTER :: ZGRID_PAR
00078 !
00079 LOGICAL :: GFOUND
00080 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00081 !
00082 NAMELIST/NAM_LONLATVAL/NPOINTS,XX,XY,XDX,XDY
00083 !
00084 !------------------------------------------------------------------------------
00085 !
00086 !*       1.    opening of namelist
00087 ! 
00088 IF (LHOOK) CALL DR_HOOK('READ_NAM_GRID_LONLATVAL',0,ZHOOK_HANDLE)
00089  CALL GET_LUOUT(HPROGRAM,ILUOUT)
00090 !
00091  CALL OPEN_NAMELIST(HPROGRAM,ILUNAM)
00092 !
00093 !---------------------------------------------------------------------------
00094 !
00095 !*       2.    Reading of projection parameters
00096 !              --------------------------------
00097 !
00098  CALL POSNAM(ILUNAM,'NAM_LONLATVAL',GFOUND,ILUOUT)
00099 IF (GFOUND) READ(UNIT=ILUNAM,NML=NAM_LONLATVAL)
00100 !
00101 !---------------------------------------------------------------------------
00102  CALL CLOSE_NAMELIST(HPROGRAM,ILUNAM)
00103 !---------------------------------------------------------------------------
00104 !
00105 !*       3.    Number of points
00106 !              ----------------
00107 !
00108 KL = NPOINTS
00109 !
00110 !---------------------------------------------------------------------------
00111 !
00112 !*       3.    Array of X and Y coordinates
00113 !              ----------------------------
00114 !
00115 !
00116 ALLOCATE(ZX(KL))
00117 ALLOCATE(ZY(KL))
00118 ZX(:) = XX(:KL)
00119 ZY(:) = XY(:KL)
00120 !
00121 !---------------------------------------------------------------------------
00122 !
00123 !*       4.    Array of X and Y increments
00124 !              ---------------------------
00125 !
00126 ALLOCATE(ZDX(KL))
00127 ALLOCATE(ZDY(KL))
00128 ZDX(:) = XDX(:KL)
00129 ZDY(:) = XDY(:KL)
00130 !
00131 !---------------------------------------------------------------------------
00132 !
00133 !*       8.    All this information stored into pointer PGRID_PAR
00134 !              --------------------------------------------------
00135 !
00136  CALL PUT_GRIDTYPE_LONLATVAL(ZGRID_PAR,ZX,ZY,ZDX,ZDY)
00137 !
00138 !---------------------------------------------------------------------------
00139 DEALLOCATE(ZX)
00140 DEALLOCATE(ZY)
00141 DEALLOCATE(ZDX)
00142 DEALLOCATE(ZDY)
00143 !---------------------------------------------------------------------------
00144 !
00145 !* 1st call : initializes dimension
00146 !
00147 IF (KGRID_PAR==0) THEN
00148   KGRID_PAR = SIZE(ZGRID_PAR)
00149 !
00150 ELSE
00151 !
00152 !* 2nd call : initializes grid array
00153 !
00154   PGRID_PAR(:) = 0.
00155   PGRID_PAR(:) = ZGRID_PAR
00156 END IF
00157 !
00158 DEALLOCATE(ZGRID_PAR)
00159 IF (LHOOK) CALL DR_HOOK('READ_NAM_GRID_LONLATVAL',1,ZHOOK_HANDLE)
00160 !
00161 !---------------------------------------------------------------------------
00162 !
00163 END SUBROUTINE READ_NAM_GRID_LONLATVAL