SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/grid_modif.F90
Go to the documentation of this file.
00001 !     #########
00002       SUBROUTINE GRID_MODIF(KLUOUT,KLUNAM,HGRID,KGRID_PAR,PGRID_PAR,KL)
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 !!    J.Escobar    09/02/05 bug init IGRID_PAR
00033 !----------------------------------------------------------------------------
00034 !
00035 !*    0.     DECLARATION
00036 !            -----------
00037 !
00038 !
00039 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00040 USE PARKIND1  ,ONLY : JPRB
00041 !
00042 USE MODI_GRID_MODIF_CARTESIAN
00043 !
00044 USE MODI_GRID_MODIF_CONF_PROJ
00045 !
00046 IMPLICIT NONE
00047 !
00048 !*    0.1    Declaration of dummy arguments
00049 !            ------------------------------
00050 !
00051 INTEGER,           INTENT(IN)   :: KLUOUT     ! output listing logical unit
00052 INTEGER,           INTENT(IN)   :: KLUNAM     ! namelist file logical unit
00053  CHARACTER(LEN=10), INTENT(IN)   :: HGRID      ! type of horizontal grid
00054 INTEGER,           INTENT(INOUT):: KGRID_PAR  ! size of PGRID_PAR
00055 REAL, DIMENSION(:), POINTER     :: PGRID_PAR  ! parameters defining this grid
00056 INTEGER,           INTENT(INOUT):: KL         ! number of points
00057 !
00058 !
00059 !*    0.2    Declaration of local variables
00060 !            ------------------------------
00061 !
00062 INTEGER                         :: IGRID_PAR ! modified grid vector size
00063 INTEGER                         :: IL        ! number of points in modified grid
00064 REAL, DIMENSION(:), ALLOCATABLE :: ZGRID_PAR ! modified grid vector
00065 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00066 !------------------------------------------------------------------------------
00067 !
00068 IF (LHOOK) CALL DR_HOOK('GRID_MODIF',0,ZHOOK_HANDLE)
00069 IGRID_PAR = 0
00070 ALLOCATE(ZGRID_PAR(0))
00071  CALL GRID_MODIFICATION(KLUOUT,KLUNAM,HGRID,KGRID_PAR,KL,PGRID_PAR,IGRID_PAR,IL,.FALSE.,ZGRID_PAR)
00072 DEALLOCATE(ZGRID_PAR)
00073 !
00074 ALLOCATE(ZGRID_PAR(IGRID_PAR))
00075  CALL GRID_MODIFICATION(KLUOUT,KLUNAM,HGRID,KGRID_PAR,KL,PGRID_PAR,IGRID_PAR,IL,.TRUE.,ZGRID_PAR)
00076 !
00077 DEALLOCATE(PGRID_PAR)
00078 !
00079 KGRID_PAR = IGRID_PAR
00080 KL        = IL
00081 ALLOCATE(PGRID_PAR(KGRID_PAR))
00082 PGRID_PAR = ZGRID_PAR
00083 !
00084 DEALLOCATE(ZGRID_PAR)
00085 !-------------------------------------------------------------------------------
00086 !-------------------------------------------------------------------------------
00087 !-------------------------------------------------------------------------------
00088 IF (LHOOK) CALL DR_HOOK('GRID_MODIF',1,ZHOOK_HANDLE)
00089 CONTAINS
00090 !-------------------------------------------------------------------------------
00091 !-------------------------------------------------------------------------------
00092 !-------------------------------------------------------------------------------
00093 !     ##########################################################
00094       SUBROUTINE GRID_MODIFICATION(KLUOUT,KLUNAM,HGRID,KGRID_PAR,KL,PGRID_PAR, &
00095                                      KGRID_PAR2,KL2,OMODIF,PGRID_PAR2            )  
00096 !     ##########################################################
00097 !!
00098 !!    PURPOSE
00099 !!    -------
00100 !!   Modification of grid parameters
00101 !!
00102 !!    METHOD
00103 !!    ------
00104 !!   
00105 !!    EXTERNAL
00106 !!    --------
00107 !!
00108 !!
00109 !!    IMPLICIT ARGUMENTS
00110 !!    ------------------
00111 !!
00112 !!
00113 !!    REFERENCE
00114 !!    ---------
00115 !!
00116 !!    AUTHOR
00117 !!    ------
00118 !!
00119 !!    V. Masson                   Meteo-France
00120 !!
00121 !!    MODIFICATION
00122 !!    ------------
00123 !!
00124 !!    Original     01/2004
00125 !----------------------------------------------------------------------------
00126 !
00127 !*    0.     DECLARATION
00128 !            -----------
00129 !
00130 IMPLICIT NONE
00131 !
00132 !*    0.1    Declaration of dummy arguments
00133 !            ------------------------------
00134 !
00135 INTEGER,                      INTENT(IN)    :: KLUOUT     ! output listing logical unit
00136 INTEGER,                      INTENT(IN)    :: KLUNAM     ! namelist file logical unit
00137  CHARACTER(LEN=10),            INTENT(IN)    :: HGRID      ! type of horizontal grid
00138 INTEGER,                      INTENT(IN)    :: KL         ! number of points
00139 INTEGER,                      INTENT(IN)    :: KGRID_PAR  ! size of PGRID_PAR
00140 REAL, DIMENSION(:),           INTENT(IN)    :: PGRID_PAR  ! parameters defining the grid
00141 INTEGER,                      INTENT(INOUT) :: KL2        ! number of points in modified grid
00142 INTEGER,                      INTENT(INOUT) :: KGRID_PAR2 ! size of PGRID_PAR2
00143 LOGICAL,                      INTENT(IN)    :: OMODIF     ! flag to modify the grid
00144 REAL, DIMENSION(:), OPTIONAL, INTENT(OUT)   :: PGRID_PAR2 ! parameters defining the modified grid
00145 !
00146 !
00147 !*    0.2    Declaration of local variables
00148 !            ------------------------------
00149 !
00150 INTEGER                         :: IGRID_PAR2
00151 REAL, DIMENSION(:), ALLOCATABLE :: ZGRID_PAR2
00152 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00153 !
00154 !------------------------------------------------------------------------------
00155 !
00156 IF (LHOOK) CALL DR_HOOK('GRID_MODIFICATION',0,ZHOOK_HANDLE)
00157 IF (OMODIF) THEN
00158   IGRID_PAR2 = KGRID_PAR2
00159 ELSE
00160   IGRID_PAR2 = 0
00161 END IF
00162 !
00163 ALLOCATE(ZGRID_PAR2(IGRID_PAR2))
00164 !
00165 SELECT CASE (HGRID)
00166   CASE("NONE      ","LONLAT REG","GAUSS     ")
00167     DEALLOCATE(ZGRID_PAR2)
00168     IF (LHOOK) CALL DR_HOOK('GRID_MODIFICATION',1,ZHOOK_HANDLE)
00169     RETURN
00170 
00171   CASE ("CONF PROJ ")
00172     CALL GRID_MODIF_CONF_PROJ(KLUOUT,KLUNAM,KGRID_PAR,KL,PGRID_PAR, &
00173                                        KGRID_PAR2,KL2,OMODIF,ZGRID_PAR2      )  
00174 
00175   CASE ("CARTESIAN ")
00176     CALL GRID_MODIF_CARTESIAN(KLUOUT,KLUNAM,KGRID_PAR,KL,PGRID_PAR, &
00177                                        KGRID_PAR2,KL2,OMODIF,ZGRID_PAR2      )  
00178 
00179 END SELECT
00180 !
00181 IF (OMODIF) PGRID_PAR2 = ZGRID_PAR2
00182 !
00183 DEALLOCATE(ZGRID_PAR2)
00184 IF (LHOOK) CALL DR_HOOK('GRID_MODIFICATION',1,ZHOOK_HANDLE)
00185 !
00186 END SUBROUTINE GRID_MODIFICATION
00187 !
00188 !-------------------------------------------------------------------------------
00189 !-------------------------------------------------------------------------------
00190 !-------------------------------------------------------------------------------
00191 !
00192 END SUBROUTINE GRID_MODIF