SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/pgd_grid.F90
Go to the documentation of this file.
00001 !     #########
00002       SUBROUTINE PGD_GRID(HPROGRAM,HFILE,HFILETYPE,OGRID,HGRID,KGRID_PAR,PGRID_PAR)
00003 !     ##########################################################
00004 !!
00005 !!    PURPOSE
00006 !!    -------
00007 !!   Reads in namelist the grid type and parameters.
00008 !!
00009 !!    METHOD
00010 !!    ------
00011 !!   
00012 !!    EXTERNAL
00013 !!    --------
00014 !!
00015 !!
00016 !!    IMPLICIT ARGUMENTS
00017 !!    ------------------
00018 !!
00019 !!
00020 !!    REFERENCE
00021 !!    ---------
00022 !!
00023 !!    AUTHOR
00024 !!    ------
00025 !!
00026 !!    V. Masson                   Meteo-France
00027 !!
00028 !!    MODIFICATION
00029 !!    ------------
00030 !!
00031 !!    Original     01/2004
00032 !!    E. Martin    10/2007 IGN grid
00033 !----------------------------------------------------------------------------
00034 !
00035 !*    0.     DECLARATION
00036 !            -----------
00037 !
00038 USE MODD_SURFEX_MPI,     ONLY : NSIZE, NINDEX
00039 USE MODD_SURFEX_OMP,     ONLY : NINDX2, NWORK, XWORK, XWORK2
00040 !
00041 USE MODD_PGD_GRID,       ONLY : NL, XGRID_PAR, NGRID_PAR, XMESHLENGTH
00042 USE MODN_PGD_GRID
00043 USE MODD_SURF_ATM_GRID_n, ONLY : XLAT, XLON, XMESH_SIZE, XJPDIR
00044 USE MODD_SURF_ATM_n,     ONLY : NDIM_FULL
00045 USE MODD_CSTS,           ONLY : XPI, XRADIUS
00046 !
00047 USE MODI_DEFAULT_GRID
00048 USE MODI_GRID_FROM_FILE
00049 USE MODI_OPEN_NAMELIST
00050 USE MODI_TEST_NAM_VAR_SURF
00051 USE MODI_CLOSE_NAMELIST
00052 USE MODI_GET_LUOUT
00053 USE MODI_READ_NAM_GRIDTYPE
00054 USE MODI_LATLON_GRID
00055 !
00056 USE MODE_POS_SURF
00057 !
00058 !
00059 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00060 USE PARKIND1  ,ONLY : JPRB
00061 !
00062 USE MODI_ABOR1_SFX
00063 !
00064 IMPLICIT NONE
00065 !
00066 !*    0.1    Declaration of dummy arguments
00067 !            ------------------------------
00068 !
00069  CHARACTER(LEN=6),  INTENT(IN)   :: HPROGRAM   ! program calling the surface
00070  CHARACTER(LEN=28), INTENT(IN)   :: HFILE      ! atmospheric file name
00071  CHARACTER(LEN=6),  INTENT(IN)   :: HFILETYPE  ! atmospheric file type
00072 LOGICAL,           INTENT(IN)   :: OGRID      ! .true. if grid is imposed by atm. model
00073  CHARACTER(LEN=10), INTENT(OUT)  :: HGRID      ! grid type
00074 INTEGER,           INTENT(OUT)  :: KGRID_PAR  ! size of PGRID_PAR
00075 REAL, DIMENSION(:), POINTER     :: PGRID_PAR  ! parameters defining this grid
00076 !
00077 !
00078 !*    0.2    Declaration of local variables
00079 !            ------------------------------
00080 !
00081 INTEGER           :: ILUOUT ! output listing logical unit
00082 INTEGER           :: ILUNAM ! namelist file  logical unit
00083 LOGICAL           :: GFOUND ! Flag true if namelist is present
00084 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00085 !
00086 !*    0.3    Declaration of namelists
00087 !            ------------------------
00088 !
00089 !------------------------------------------------------------------------------
00090 !
00091 !*    1.      Defaults
00092 !             --------
00093 !
00094 IF (LHOOK) CALL DR_HOOK('PGD_GRID',0,ZHOOK_HANDLE)
00095  CALL DEFAULT_GRID(HPROGRAM,CGRID)
00096 !
00097 YINIFILE  = '                         '
00098 YFILETYPE = '      '
00099 !
00100 IF (OGRID) THEN
00101   YINIFILE  = HFILE
00102   YFILETYPE = HFILETYPE
00103 END IF
00104 !
00105  CALL GET_LUOUT(HPROGRAM,ILUOUT)
00106 !------------------------------------------------------------------------------
00107 !
00108 !*    2.      Open namelist
00109 !             -------------
00110 !
00111 IF (.NOT. OGRID) THEN
00112   CALL OPEN_NAMELIST(HPROGRAM,ILUNAM)
00113 !
00114 !------------------------------------------------------------------------------
00115 !
00116 !*    3.      Read grid type
00117 !             --------------
00118 !
00119   CALL POSNAM(ILUNAM,'NAM_PGD_GRID',GFOUND,ILUOUT)
00120   IF (GFOUND) READ(UNIT=ILUNAM,NML=NAM_PGD_GRID)
00121 !
00122 !------------------------------------------------------------------------------
00123 !
00124 !*    5.      Close namelist
00125 !             --------------
00126 !
00127   CALL CLOSE_NAMELIST(HPROGRAM,ILUNAM)
00128 !
00129 END IF
00130 !-------------------------------------------------------------------------------
00131 !
00132 !*       4.    check of grid and input file types
00133 !              ----------------------------------
00134 ! 
00135  CALL TEST_NAM_VAR_SURF(ILUOUT,'CGRID',CGRID,'CONF PROJ ','NONE      ','LONLAT REG','CARTESIAN ','GAUSS     ',&
00136           'IGN       ','LONLATVAL ')  
00137  CALL TEST_NAM_VAR_SURF(ILUOUT,'YFILETYPE',YFILETYPE,'      ','MESONH','LFI   ','ASCII ')
00138 !
00139 !
00140 !------------------------------------------------------------------------------
00141 !
00142 !*    5.      Initializes grid characteristics
00143 !             --------------------------------
00144 !
00145 !*    5.1     From another file
00146 !             -----------------
00147 !
00148 IF (LEN_TRIM(YFILETYPE)>0 .AND. LEN_TRIM(YINIFILE)>0 ) THEN
00149   IF (YFILETYPE=='MESONH' .OR. YFILETYPE=='LFI   ' .OR. YFILETYPE=='ASCII ') THEN
00150     CALL GRID_FROM_FILE(HPROGRAM,YINIFILE,YFILETYPE,OGRID,CGRID,NGRID_PAR,XGRID_PAR,NL)
00151   ELSE
00152     CALL ABOR1_SFX('PGD_GRID: FILE TYPE NOT SUPPORTED '//HFILETYPE//' FOR FILE '//HFILE)
00153   END IF
00154 !
00155 ELSE
00156 !
00157 !*    5.2     Grid not initialized
00158 !             --------------------
00159 !
00160   IF (CGRID=='NONE      ' .OR. CGRID=='          ') THEN
00161     CALL ABOR1_SFX('PGD_GRID: GRID TYPE NOT INITIALIZED, CGRID='//CGRID)
00162 
00163 !
00164 !*    5.3     Grid initialized
00165 !             ----------------
00166 !
00167   ELSE
00168 !
00169     CALL READ_NAM_GRIDTYPE(HPROGRAM,CGRID,NGRID_PAR,XGRID_PAR,NL)
00170 !
00171   END IF
00172 
00173 END IF
00174 !
00175 HGRID     = CGRID
00176 NDIM_FULL = NL
00177 NSIZE     = NDIM_FULL
00178 IF (.NOT.ALLOCATED(NINDEX)) THEN
00179   ALLOCATE(NINDEX(NDIM_FULL))
00180   NINDEX(:) = 0
00181 ENDIF
00182 NINDX2    = NDIM_FULL
00183 ALLOCATE(NWORK(NDIM_FULL))
00184 ALLOCATE(XWORK(NDIM_FULL))
00185 ALLOCATE(XWORK2(NDIM_FULL,10))
00186 !
00187 KGRID_PAR = NGRID_PAR
00188 ALLOCATE(PGRID_PAR(KGRID_PAR))
00189 PGRID_PAR = XGRID_PAR
00190 !
00191 !------------------------------------------------------------------------------
00192 !
00193 !*    6.      Latitude and longitude
00194 !             ----------------------
00195 !
00196 ALLOCATE(XLAT       (NL))
00197 ALLOCATE(XLON       (NL))
00198 ALLOCATE(XMESH_SIZE (NL))
00199 ALLOCATE(XJPDIR     (NL))
00200  CALL LATLON_GRID(CGRID,NGRID_PAR,NL,ILUOUT,XGRID_PAR,XLAT,XLON,XMESH_SIZE,XJPDIR)
00201 !
00202 !------------------------------------------------------------------------------
00203 !
00204 !*    7.      Average grid length (in degrees)
00205 !             --------------------------------
00206 !
00207 !* in meters
00208 XMESHLENGTH = SUM ( SQRT(XMESH_SIZE) ) / NL
00209 !
00210 !* in degrees (of latitude)
00211 XMESHLENGTH = XMESHLENGTH *180. / XPI / XRADIUS
00212 IF (LHOOK) CALL DR_HOOK('PGD_GRID',1,ZHOOK_HANDLE)
00213 !
00214 !-------------------------------------------------------------------------------
00215 !
00216 END SUBROUTINE PGD_GRID