8c0866b26e49504c10bc6f07f171b4f55c1059c9
[MNH-git_open_source-lfs.git] / src / SURFEX / prep_seaflux_extern.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 PREP_SEAFLUX_EXTERN(HPROGRAM,HSURF,HFILE,HFILETYPE,HFILEPGD,HFILEPGDTYPE,KLUOUT,PFIELD)
7 !     #################################################################################
8 !
9 USE MODD_TYPE_DATE_SURF
10 !
11 USE MODI_PREP_GRID_EXTERN
12 USE MODI_READ_SURF
13 USE MODI_OPEN_AUX_IO_SURF
14 USE MODI_CLOSE_AUX_IO_SURF
15 !
16 USE MODD_PREP,       ONLY : CINGRID_TYPE, CINTERP_TYPE
17 !
18 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
19 USE PARKIND1  ,ONLY : JPRB
20 !
21 IMPLICIT NONE
22 !
23 !*      0.1    declarations of arguments
24 !
25  CHARACTER(LEN=6),   INTENT(IN)  :: HPROGRAM  ! program calling surf. schemes
26  CHARACTER(LEN=7),   INTENT(IN)  :: HSURF     ! type of field
27  CHARACTER(LEN=28),  INTENT(IN)  :: HFILE     ! name of file
28  CHARACTER(LEN=6),   INTENT(IN)  :: HFILETYPE ! type of input file
29  CHARACTER(LEN=28),  INTENT(IN)  :: HFILEPGD     ! name of file
30  CHARACTER(LEN=6),   INTENT(IN)  :: HFILEPGDTYPE ! type of input file
31 INTEGER,            INTENT(IN)  :: KLUOUT    ! logical unit of output listing
32 REAL,DIMENSION(:,:), POINTER    :: PFIELD    ! field to interpolate horizontally
33 !
34 !*      0.2    declarations of local variables
35 !
36 !
37  CHARACTER(LEN=12) :: YRECFM         ! Name of the article to be read
38 INTEGER           :: IRESP          ! reading return code
39 !
40 INTEGER           :: INI            ! total 1D dimension
41 REAL(KIND=JPRB) :: ZHOOK_HANDLE
42 !
43 !-------------------------------------------------------------------------------------
44 !
45 !*      1.     Preparation of IO for reading in the file
46 !              -----------------------------------------
47 !
48 !* Note that all points are read, even those without physical meaning.
49 !  These points will not be used during the horizontal interpolation step.
50 !  Their value must be defined as XUNDEF.
51 !
52 IF (LHOOK) CALL DR_HOOK('PREP_SEAFLUX_EXTERN',0,ZHOOK_HANDLE)
53 !
54 !-------------------------------------------------------------------------------------
55 !
56 !*      2.     Reading of grid
57 !              ---------------
58 !
59  CALL OPEN_AUX_IO_SURF(HFILEPGD,HFILEPGDTYPE,'SEA   ')
60  CALL PREP_GRID_EXTERN(HFILEPGDTYPE,KLUOUT,CINGRID_TYPE,CINTERP_TYPE,INI)
61  CALL CLOSE_AUX_IO_SURF(HFILEPGD,HFILEPGDTYPE)
62 !
63 !---------------------------------------------------------------------------------------
64 SELECT CASE(HSURF)
65 !---------------------------------------------------------------------------------------
66 !
67 !*     3.      Orography
68 !              ---------
69 !
70   CASE('ZS     ')
71     ALLOCATE(PFIELD(INI,1))
72     PFIELD(:,:) = 0.
73 !
74 !*      4.  Sea surface temperature
75 !           -----------------------
76 !
77   CASE('SST    ')
78     ALLOCATE(PFIELD(INI,1))
79     YRECFM='SST'
80     CALL OPEN_AUX_IO_SURF(HFILE,HFILETYPE,'SEA   ')
81     CALL READ_SURF(HFILETYPE,YRECFM,PFIELD(:,1),IRESP,HDIR='A')
82     CALL CLOSE_AUX_IO_SURF(HFILE,HFILETYPE)
83 !
84 !---------------------------------------------------------------------------------------
85 END SELECT
86 !-------------------------------------------------------------------------------------
87 !
88 !*      6.     End of IO
89 !              ---------
90 !
91 IF (LHOOK) CALL DR_HOOK('PREP_SEAFLUX_EXTERN',1,ZHOOK_HANDLE)
92 !
93 !---------------------------------------------------------------------------------------
94 !
95 END SUBROUTINE PREP_SEAFLUX_EXTERN