SURFEX v8.1
General documentation of Surfex
split_grid.F90
Go to the documentation of this file.
1 !SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
2 !SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
3 !SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
4 !SFX_LIC for details. version 1.
5 ! ###########################################################
6  SUBROUTINE split_grid(UG, U, HPROGRAM,KGRID_PAR,PGRID_PAR,KHALO)
7 ! ###########################################################
8 !!
9 !! PURPOSE
10 !! -------
11 !! This program splits a PGD grid on several processors (according to host program)
12 !!
13 !! METHOD
14 !! ------
15 !!
16 !! EXTERNAL
17 !! --------
18 !!
19 !!
20 !! IMPLICIT ARGUMENTS
21 !! ------------------
22 !!
23 !!
24 !! REFERENCE
25 !! ---------
26 !!
27 !! AUTHOR
28 !! ------
29 !!
30 !! V. Masson Meteo-France
31 !!
32 !! MODIFICATION
33 !! ------------
34 !!
35 !! Original 08/11
36 !! Modification 01/03/2015 pass KGRID_PAR,PGRID_PAR,KHALO as arguments (M.Moge)
37 !----------------------------------------------------------------------------
38 !
39 !* 0. DECLARATION
40 ! -----------
41 !
42 !
43 !
45 USE modd_surf_atm_n, ONLY : surf_atm_t
46 !
47 USE modi_split_grid_conf_proj
48 USE modi_split_grid_cartesian
49 USE modi_get_size_full_n
50 !
51 USE yomhook ,ONLY : lhook, dr_hook
52 USE parkind1 ,ONLY : jprb
53 !
54 !
55 IMPLICIT NONE
56 !
57 !* 0.1 Declaration of dummy arguments
58 ! ------------------------------
59 !
60 !
61 TYPE(surf_atm_grid_t), INTENT(INOUT) :: UG
62 TYPE(surf_atm_t), INTENT(INOUT) :: U
63 !
64  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM ! program calling
65 !
66 INTEGER, OPTIONAL, INTENT(INOUT) :: KGRID_PAR ! size of PGRID_PAR pointer
67 REAL, DIMENSION(:), OPTIONAL, POINTER, INTENT(INOUT) :: PGRID_PAR ! parameters defining this grid
68 INTEGER, INTENT(IN), OPTIONAL :: KHALO ! size of the Halo
69 !
70 !* 0.2 Declaration of local variables
71 ! ------------------------------
72 !
73  CHARACTER(LEN=100) :: YCOMMENT
74 INTEGER :: IRESP, ISIZE_FULL ! error return code
75 INTEGER :: IHALO
76 REAL(KIND=JPRB) :: ZHOOK_HANDLE
77 !------------------------------------------------------------------------------
78 IF (lhook) CALL dr_hook('SPLIT_GRID',0,zhook_handle)
79 !
80 #ifdef MNH_PARALLEL
81 IF (PRESENT(khalo)) THEN
82  ihalo = khalo
83 ELSE
84  ihalo = 0
85 ENDIF
86 #else
87 ihalo = 0
88 #endif
89 !
90 SELECT CASE(ug%G%CGRID)
91 
92  CASE('CONF PROJ ')
93  IF (PRESENT(kgrid_par).AND.PRESENT(pgrid_par)) THEN
94  CALL split_grid_conf_proj(hprogram,u%NDIM_FULL,u%NSIZE_FULL,kgrid_par,pgrid_par,ihalo)
95  ELSE
96  CALL split_grid_conf_proj(hprogram,u%NDIM_FULL,u%NSIZE_FULL,ug%G%NGRID_PAR,ug%G%XGRID_PAR)
97  ENDIF
98 
99  CASE('CARTESIAN ')
100  IF (PRESENT(kgrid_par).AND.PRESENT(pgrid_par)) THEN
101  CALL split_grid_cartesian(hprogram,u%NDIM_FULL,u%NSIZE_FULL,kgrid_par,pgrid_par,ihalo)
102  ELSE
103  CALL split_grid_cartesian(hprogram,u%NDIM_FULL,u%NSIZE_FULL,ug%G%NGRID_PAR,ug%G%XGRID_PAR)
104  ENDIF
105 
106  CASE DEFAULT
107  CALL get_size_full_n(hprogram,u%NDIM_FULL,u%NSIZE_FULL,isize_full)
108  u%NSIZE_FULL = isize_full
109 
110 END SELECT
111 !
112 
113 IF (lhook) CALL dr_hook('SPLIT_GRID',1,zhook_handle)
114 !_______________________________________________________________________________
115 !
116 END SUBROUTINE split_grid
subroutine split_grid_cartesian(HPROGRAM, KDIM_FULL, KSIZE_FULL, KGRI
subroutine split_grid_conf_proj(HPROGRAM, KDIM_FULL, KSIZE_FULL, KGRI
subroutine get_size_full_n(HPROGRAM, KDIM_FULL, KSIZE_FULL_IN, KSIZE
subroutine split_grid(UG, U, HPROGRAM, KGRID_PAR, PGRID_PAR, KHALO)
Definition: split_grid.F90:7
integer, parameter jprb
Definition: parkind1.F90:32
logical lhook
Definition: yomhook.F90:15