SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/read_nam_grid_cartesian.F90
Go to the documentation of this file.
00001 !     ################################################################
00002       SUBROUTINE READ_NAM_GRID_CARTESIAN(HPROGRAM,KGRID_PAR,KL,PGRID_PAR)
00003 !     ################################################################
00004 !
00005 !!****  *READ_NAM_GRID_CARTESIAN* - 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 !!      V. Masson   *Meteo France*      
00027 !!
00028 !!    MODIFICATIONS
00029 !!    -------------
00030 !!      Original    01/2004 
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_CARTESIAN
00043 !
00044 !
00045 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00046 USE PARKIND1  ,ONLY : JPRB
00047 !
00048 IMPLICIT NONE
00049 !
00050 !*       0.1   Declarations of arguments
00051 !              -------------------------
00052 !
00053  CHARACTER(LEN=6),           INTENT(IN)    :: HPROGRAM   ! calling program
00054 INTEGER,                    INTENT(INOUT) :: KGRID_PAR  ! size of PGRID_PAR
00055 INTEGER,                    INTENT(OUT)   :: KL         ! number of points
00056 REAL, DIMENSION(KGRID_PAR), INTENT(OUT)   :: PGRID_PAR  ! parameters defining this grid
00057 !
00058 !*       0.2   Declarations of local variables
00059 !              -------------------------------
00060 !
00061 INTEGER :: ILUOUT ! output listing logical unit
00062 INTEGER :: ILUNAM ! namelist file  logical unit
00063 INTEGER :: JI, JJ ! loop counters
00064 INTEGER :: JL     ! loop counter
00065 
00066 REAL, DIMENSION(:),   ALLOCATABLE :: ZX       ! X conformal coordinate of grid mesh
00067 REAL, DIMENSION(:),   ALLOCATABLE :: ZY       ! Y conformal coordinate of grid mesh
00068 REAL, DIMENSION(:),   ALLOCATABLE :: ZDX      ! X grid mesh size
00069 REAL, DIMENSION(:),   ALLOCATABLE :: ZDY      ! Y grid mesh size
00070 !
00071 !*       0.3   Declarations of namelist
00072 !              ------------------------
00073 !
00074 REAL    :: XLAT0    ! reference latitude
00075 REAL    :: XLON0    ! reference longitude
00076 INTEGER :: NIMAX    ! number of points in I direction
00077 INTEGER :: NJMAX    ! number of points in J direction
00078 REAL    :: XDX      ! increment in X direction (in meters)
00079 REAL    :: XDY      ! increment in Y direction (in meters)
00080 !
00081 REAL, DIMENSION(:), POINTER :: ZGRID_PAR
00082 !
00083 LOGICAL :: GFOUND
00084 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00085 !
00086 NAMELIST/NAM_CARTESIAN/XLAT0, XLON0, NIMAX, NJMAX, XDX, XDY
00087 !
00088 !------------------------------------------------------------------------------
00089 !
00090 !*       1.    opening of namelist
00091 ! 
00092 IF (LHOOK) CALL DR_HOOK('READ_NAM_GRID_CARTESIAN',0,ZHOOK_HANDLE)
00093  CALL GET_LUOUT(HPROGRAM,ILUOUT)
00094 !
00095  CALL OPEN_NAMELIST(HPROGRAM,ILUNAM)
00096 !
00097 !---------------------------------------------------------------------------
00098 !
00099 !*       2.    Reading of projection parameters
00100 !              --------------------------------
00101 !
00102  CALL POSNAM(ILUNAM,'NAM_CARTESIAN',GFOUND,ILUOUT)
00103 IF (GFOUND) READ(UNIT=ILUNAM,NML=NAM_CARTESIAN)
00104 !
00105 !---------------------------------------------------------------------------
00106  CALL CLOSE_NAMELIST(HPROGRAM,ILUNAM)
00107 !---------------------------------------------------------------------------
00108 !
00109 !*       3.    Number of points
00110 !              ----------------
00111 !
00112 KL = NIMAX * NJMAX
00113 !
00114 !---------------------------------------------------------------------------
00115 !
00116 !*       3.    Array of X and Y coordinates
00117 !              ----------------------------
00118 !
00119 !
00120 ALLOCATE(ZX(KL))
00121 ALLOCATE(ZY(KL))
00122 DO JJ=1,NJMAX
00123   DO JI=1,NIMAX
00124     JL = JI + (JJ-1) * NIMAX
00125     ZX(JL) = FLOAT(JI) * XDX
00126     ZY(JL) = FLOAT(JJ) * XDY
00127   END DO
00128 END DO
00129 !
00130 !---------------------------------------------------------------------------
00131 !
00132 !*       4.    Array of X and Y increments
00133 !              ---------------------------
00134 !
00135 ALLOCATE(ZDX(KL))
00136 ALLOCATE(ZDY(KL))
00137 ZDX(:) = XDX
00138 ZDY(:) = XDY
00139 !
00140 !---------------------------------------------------------------------------
00141 !
00142 !*       8.    All this information stored into pointer PGRID_PAR
00143 !              --------------------------------------------------
00144 !
00145  CALL PUT_GRIDTYPE_CARTESIAN(ZGRID_PAR,XLAT0,XLON0,               &
00146                               NIMAX,NJMAX,                         &
00147                               ZX,ZY,ZDX,ZDY                        )  
00148 !
00149 !---------------------------------------------------------------------------
00150 DEALLOCATE(ZX)
00151 DEALLOCATE(ZY)
00152 DEALLOCATE(ZDX)
00153 DEALLOCATE(ZDY)
00154 !---------------------------------------------------------------------------
00155 !
00156 !* 1st call : initializes dimension
00157 !
00158 IF (KGRID_PAR==0) THEN
00159   KGRID_PAR = SIZE(ZGRID_PAR)
00160 !
00161 ELSE
00162 !
00163 !* 2nd call : initializes grid array
00164 !
00165   PGRID_PAR(:) = 0.
00166   PGRID_PAR(:) = ZGRID_PAR
00167 END IF
00168 !
00169 DEALLOCATE(ZGRID_PAR)
00170 IF (LHOOK) CALL DR_HOOK('READ_NAM_GRID_CARTESIAN',1,ZHOOK_HANDLE)
00171 !
00172 !---------------------------------------------------------------------------
00173 !
00174 END SUBROUTINE READ_NAM_GRID_CARTESIAN