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