Juan 24/05/2017: add MPPDB_CHECK on SURFEX routine for reprod check with MNH_PARALLEL key
[MNH-git_open_source-lfs.git] / src / SURFEX / pgd_seaflux.F90
1 !SURFEX_LIC Copyright 1994-2014 Meteo-France 
2 !SURFEX_LIC This is part of the SURFEX software governed by the CeCILL-C  licence
3 !SURFEX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
4 !SURFEX_LIC for details. version 1.
5 !     #########
6       SUBROUTINE PGD_SEAFLUX(HPROGRAM)
7 !     ##############################################################
8 !
9 !!**** *PGD_SEAFLUX* monitor for averaging and interpolations of SEAFLUX physiographic fields
10 !!
11 !!    PURPOSE
12 !!    -------
13 !!
14 !!    METHOD
15 !!    ------
16 !!   
17 !
18 !!    EXTERNAL
19 !!    --------
20 !!
21 !!    IMPLICIT ARGUMENTS
22 !!    ------------------
23 !!
24 !!    REFERENCE
25 !!    ---------
26 !!
27 !!    AUTHOR
28 !!    ------
29 !!
30 !!    V. Masson        Meteo-France
31 !!
32 !!    MODIFICATION
33 !!    ------------
34 !!
35 !!    Original    03/2004
36 !!    Lebeaupin-B C. 01/2008 : include bathymetry
37 !!    M.Moge      02/2015 check with MPPDB
38 !!
39 !----------------------------------------------------------------------------
40 !
41 !*    0.     DECLARATION
42 !            -----------
43 !
44 USE MODD_PGD_GRID,       ONLY : NL
45 USE MODD_DATA_COVER_PAR,  ONLY : JPCOVER
46 USE MODD_SEAFLUX_n,       ONLY : XCOVER, LCOVER, XZS
47 USE MODD_SEAFLUX_GRID_n,  ONLY : CGRID, XGRID_PAR, XLAT, XLON, XMESH_SIZE, NDIM
48 USE MODD_DATA_SEAFLUX_n,  ONLY : LSST_DATA
49 !
50 USE MODI_READ_NAM_PGD_SEABATHY
51 USE MODI_PGD_BATHYFIELD
52 !
53 USE MODI_GET_SURF_SIZE_n
54 USE MODI_PACK_PGD
55 USE MODI_PACK_PGD_SEAFLUX
56 USE MODI_PGD_SEAFLUX_PAR
57 !
58 !
59 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
60 USE PARKIND1  ,ONLY : JPRB
61 !
62 #ifdef MNH_PARALLEL
63 USE MODE_MPPDB
64 USE MODI_GET_LUOUT
65 !
66 #endif
67 IMPLICIT NONE
68 !
69 !*    0.1    Declaration of arguments
70 !            ------------------------
71 !
72  CHARACTER(LEN=6),    INTENT(IN)    :: HPROGRAM     ! Type of program
73 !
74 !
75 !*    0.2    Declaration of local variables
76 !            ------------------------------
77 !
78 REAL, DIMENSION(NL)               :: ZSEABATHY ! bathymetry on all surface points
79 #ifdef MNH_PARALLEL
80 INTEGER :: ILUOUT
81 #endif
82 !
83 !*    0.3    Declaration of namelists
84 !            ------------------------
85 !
86  CHARACTER(LEN=28)        :: YSEABATHY         ! file name for bathymetrie
87  CHARACTER(LEN=6)         :: YSEABATHYFILETYPE ! bathymetry data file type
88  CHARACTER(LEN=28)        :: YNCVARNAME        ! variable to read in netcdf
89                                               ! file
90 REAL                     :: XUNIF_SEABATHY    ! uniform value of bathymetry
91 REAL(KIND=JPRB) :: ZHOOK_HANDLE
92 !
93 !
94 !-------------------------------------------------------------------------------
95 !
96 !*    1.      Initializations of defaults
97 !             ---------------------------
98 !
99 !-------------------------------------------------------------------------------
100 !
101 !*    2.      Reading of namelist
102 !             -------------------
103 !
104 IF (LHOOK) CALL DR_HOOK('PGD_SEAFLUX',0,ZHOOK_HANDLE)
105 #ifdef MNH_PARALLEL
106  CALL GET_LUOUT(HPROGRAM,ILUOUT)
107 #endif
108  CALL READ_NAM_PGD_SEABATHY(HPROGRAM,YSEABATHY,YSEABATHYFILETYPE,YNCVARNAME,&
109        XUNIF_SEABATHY)  
110 !
111 !-------------------------------------------------------------------------------
112 !
113 !*    3.      Coherence of options
114 !             --------------------
115 !
116 !-------------------------------------------------------------------------------
117 !
118 !*    4.      Bathymetry
119 !             ----------
120 !
121  CALL PGD_BATHYFIELD(HPROGRAM,'bathymetry','SEA',YSEABATHY,YSEABATHYFILETYPE,&
122        YNCVARNAME,XUNIF_SEABATHY,ZSEABATHY(:))  
123 !-------------------------------------------------------------------------------
124 !
125 !*    5.      Number of points and packing
126 !             ----------------------------
127 !
128  CALL GET_SURF_SIZE_n('SEA   ',NDIM)
129 !
130 ALLOCATE(LCOVER     (JPCOVER))
131 ALLOCATE(XCOVER     (NDIM,JPCOVER))
132 ALLOCATE(XZS        (NDIM))
133 ALLOCATE(XLAT       (NDIM))
134 ALLOCATE(XLON       (NDIM))
135 ALLOCATE(XMESH_SIZE (NDIM))
136 !
137  CALL PACK_PGD(HPROGRAM, 'SEA   ',                    &
138                 CGRID,  XGRID_PAR,                     &
139                 LCOVER, XCOVER, XZS,                   &
140                 XLAT, XLON, XMESH_SIZE                 )  
141 #ifdef MNH_PARALLEL
142  CALL MPPDB_CHECK_SURFEX2D(XLAT,"PGD_SEAFLUX after PACK_PGD:XLAT",PRECISION,ILUOUT,'SEA')
143  CALL MPPDB_CHECK_SURFEX2D(XLON,"PGD_SEAFLUX after PACK_PGD:XLON",PRECISION,ILUOUT,'SEA')
144  CALL MPPDB_CHECK_SURFEX2D(XMESH_SIZE,"PGD_SEAFLUX after PACK_PGD:XMESH_SIZE",PRECISION,ILUOUT,'SEA')
145 #endif
146 !
147  CALL PACK_PGD_SEAFLUX(HPROGRAM, ZSEABATHY)
148 !
149  CALL PGD_SEAFLUX_PAR(HPROGRAM,LSST_DATA)
150 IF (LHOOK) CALL DR_HOOK('PGD_SEAFLUX',1,ZHOOK_HANDLE)
151 !-------------------------------------------------------------------------------
152 !
153 END SUBROUTINE PGD_SEAFLUX