SURFEX v7.3
General documentation of Surfex
|
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