SURFEX v7.3
General documentation of Surfex
 All Classes Files Functions Variables Typedefs
/home/dasprezs/EXPORT_v7_3/src/SURFEX/split_grid_conf_proj.F90
Go to the documentation of this file.
00001 !     ###########################################################
00002       SUBROUTINE SPLIT_GRID_CONF_PROJ(HPROGRAM,KDIM_FULL,KSIZE_FULL,KGRID_PAR,PGRID_PAR)
00003 !     ###########################################################
00004 !!
00005 !!    PURPOSE
00006 !!    -------
00007 !!   This program splits a PGD grid on several processors (according to host program)
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     08/11
00032 !----------------------------------------------------------------------------
00033 !
00034 !*    0.     DECLARATION
00035 !            -----------
00036 !
00037 USE MODE_GRIDTYPE_CONF_PROJ
00038 USE MODE_SPLIT_GRID_PARAMETER
00039 !
00040 !
00041 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
00042 USE PARKIND1  ,ONLY : JPRB
00043 !
00044 !
00045 IMPLICIT NONE
00046 !
00047 !*    0.1    Declaration of dummy arguments
00048 !            ------------------------------
00049 !
00050  CHARACTER(LEN=6),   INTENT(IN)    :: HPROGRAM  ! host program 
00051 INTEGER,            INTENT(IN)    :: KDIM_FULL ! total number of points
00052 INTEGER,            INTENT(OUT)   :: KSIZE_FULL! number of points on this processor
00053 INTEGER,            INTENT(INOUT) :: KGRID_PAR ! size of PGRID_PAR pointer
00054 REAL, DIMENSION(:), POINTER       :: PGRID_PAR ! parameters defining this grid
00055 !
00056 !
00057 !*    0.2    Declaration of local variables
00058 !            ------------------------------
00059 !
00060 REAL(KIND=JPRB) :: ZHOOK_HANDLE
00061 !
00062 !* original grid
00063 REAL                            :: ZLAT0, ZLON0, ZRPK, ZBETA, ZLATOR, ZLONOR
00064 INTEGER                         :: IIMAX, IJMAX
00065 REAL, DIMENSION(KDIM_FULL)      :: ZX, ZY, ZDX, ZDY
00066 !
00067 !* splitted grid on processor
00068 INTEGER                         :: IIMAX_SPLIT, IJMAX_SPLIT
00069 REAL, DIMENSION(:), ALLOCATABLE :: ZX_SPLIT, ZY_SPLIT, ZDX_SPLIT, ZDY_SPLIT
00070 !
00071 !------------------------------------------------------------------------------
00072 IF (LHOOK) CALL DR_HOOK('SPLIT_GRID_CONF_PROJ',0,ZHOOK_HANDLE)
00073 !
00074 !*    1.      Gets Parameters of the Grid
00075 !
00076  CALL GET_GRIDTYPE_CONF_PROJ(PGRID_PAR,ZLAT0,ZLON0,ZRPK,ZBETA,&
00077                             ZLATOR,ZLONOR,IIMAX,IJMAX,       &
00078                             ZX,ZY,ZDX,ZDY                    )
00079 !
00080 !
00081 !*    2.      Splits the (pertinent) parameters of the grid
00082 !
00083  CALL SPLIT_GRID_PARAMETERN0(HPROGRAM,'CONF PROJ ','IMAX  ',IIMAX,IIMAX_SPLIT)
00084  CALL SPLIT_GRID_PARAMETERN0(HPROGRAM,'CONF PROJ ','JMAX  ',IJMAX,IJMAX_SPLIT)
00085 !
00086 KSIZE_FULL = IIMAX_SPLIT * IJMAX_SPLIT
00087 !
00088 ALLOCATE(ZX_SPLIT (KSIZE_FULL))
00089 ALLOCATE(ZY_SPLIT (KSIZE_FULL))
00090 ALLOCATE(ZDX_SPLIT(KSIZE_FULL))
00091 ALLOCATE(ZDY_SPLIT(KSIZE_FULL))
00092  CALL SPLIT_GRID_PARAMETERX1(HPROGRAM,'CONF PROJ ','XX    ',KDIM_FULL,KSIZE_FULL,ZX,ZX_SPLIT)
00093  CALL SPLIT_GRID_PARAMETERX1(HPROGRAM,'CONF PROJ ','YY    ',KDIM_FULL,KSIZE_FULL,ZY,ZY_SPLIT)
00094  CALL SPLIT_GRID_PARAMETERX1(HPROGRAM,'CONF PROJ ','DX    ',KDIM_FULL,KSIZE_FULL,ZDX,ZDX_SPLIT)
00095  CALL SPLIT_GRID_PARAMETERX1(HPROGRAM,'CONF PROJ ','DY    ',KDIM_FULL,KSIZE_FULL,ZDY,ZDY_SPLIT)
00096 !
00097 !
00098 !*    3.      Stores Parameters of the Grid in grid pointer
00099 !
00100 NULLIFY(PGRID_PAR)
00101  CALL PUT_GRIDTYPE_CONF_PROJ(PGRID_PAR,ZLAT0,ZLON0,ZRPK,ZBETA,       &
00102                             ZLATOR,ZLONOR,IIMAX_SPLIT,IJMAX_SPLIT,  &
00103                             ZX_SPLIT,ZY_SPLIT,ZDX_SPLIT,ZDY_SPLIT   )
00104                             !
00105 !
00106 KGRID_PAR = SIZE(PGRID_PAR)
00107 !
00108 DEALLOCATE(ZX_SPLIT )
00109 DEALLOCATE(ZY_SPLIT )
00110 DEALLOCATE(ZDX_SPLIT)
00111 DEALLOCATE(ZDY_SPLIT)
00112 !
00113 IF (LHOOK) CALL DR_HOOK('SPLIT_GRID_CONF_PROJ',1,ZHOOK_HANDLE)
00114 !_______________________________________________________________________________
00115 !
00116 END SUBROUTINE SPLIT_GRID_CONF_PROJ