SURFEX v8.1
General documentation of Surfex
put_zsn.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 put_zs_n (F, IS, S, U, TOP, W, HPROGRAM,KI,PZS)
7 ! ########################################
8 !
9 !!**** *PUT_ZS_n* - routine to modify surface oropgraphy of each tile using atmospheric
10 ! model orography
11 !!
12 !! PURPOSE
13 !! -------
14 !!
15 !!** METHOD
16 !! ------
17 !!
18 !! EXTERNAL
19 !! --------
20 !!
21 !!
22 !! IMPLICIT ARGUMENTS
23 !! ------------------
24 !!
25 !! REFERENCE
26 !! ---------
27 !!
28 !!
29 !! AUTHOR
30 !! ------
31 !! V. Masson *Meteo France*
32 !!
33 !! MODIFICATIONS
34 !! -------------
35 !! Original 01/2004
36 !! P. Le Moigne 05/2007: write model orography over each tile
37 !-------------------------------------------------------------------------------
38 !
39 !* 0. DECLARATIONS
40 ! ------------
41 !
42 USE modd_flake_n, ONLY : flake_t
43 USE modd_isba_n, ONLY : isba_s_t
44 USE modd_seaflux_n, ONLY : seaflux_t
45 USE modd_surf_atm_n, ONLY : surf_atm_t
47 USE modd_watflux_n, ONLY : watflux_t
48 !
49 USE yomhook ,ONLY : lhook, dr_hook
50 USE parkind1 ,ONLY : jprb
51 !
52 USE modi_put_zs_inland_water_n
53 !
54 USE modi_put_zs_nature_n
55 !
56 USE modi_put_zs_sea_n
57 !
58 USE modi_put_zs_surf_atm_n
59 !
60 USE modi_put_zs_town_n
61 USE modi_get_size_full_n
62 USE modi_get_1d_mask
63 !
64 IMPLICIT NONE
65 !
66 !* 0.1 Declarations of arguments
67 ! -------------------------
68 !
69 !
70 TYPE(flake_t), INTENT(INOUT) :: F
71 TYPE(isba_s_t), INTENT(INOUT) :: IS
72 TYPE(seaflux_t), INTENT(INOUT) :: S
73 TYPE(surf_atm_t), INTENT(INOUT) :: U
74 TYPE(teb_options_t), INTENT(INOUT) :: TOP
75 TYPE(watflux_t), INTENT(INOUT) :: W
76 !
77  CHARACTER(LEN=6), INTENT(IN) :: HPROGRAM
78 INTEGER, INTENT(IN) :: KI ! horizontal dim. of cover
79 REAL, DIMENSION(KI), INTENT(IN) :: PZS ! orography
80 !
81 !
82 !* 0.2 Declarations of local variables
83 ! -------------------------------
84 !
85 REAL(KIND=JPRB) :: ZHOOK_HANDLE
86 !
87 !-------------------------------------------------------------------------------
88 IF (lhook) CALL dr_hook('PUT_ZS_N',0,zhook_handle)
89 !
90 !* 1. Full surface
91 ! ------------
92 !
93  CALL put_zs_surf_atm_n(u, hprogram,ki,pzs)
94 !
95 !* 2. inland water
96 ! ------------
97 !
98 IF (u%NSIZE_WATER > 0 .AND. u%CWATER/='NONE' .AND. u%CWATER/='FLUX') CALL pack_zs(u%NSIZE_WATER,u%NR_WATER,'W')
99 !
100 !* 3. nature
101 ! ------
102 !
103 IF (u%NSIZE_NATURE > 0 .AND. u%CNATURE/='NONE' .AND. u%CNATURE/='FLUX') CALL pack_zs(u%NSIZE_NATURE,u%NR_NATURE,'N')
104 !
105 !* 4. town
106 ! ----
107 !
108 IF (u%NSIZE_TOWN > 0 .AND. u%CTOWN/='NONE' .AND. u%CTOWN/='FLUX') CALL pack_zs(u%NSIZE_TOWN,u%NR_TOWN,'T')
109 !
110 ! 5.sea
111 ! ----
112 !
113 IF (u%NSIZE_SEA > 0 .AND. u%CSEA/='NONE' .AND. u%CSEA/='FLUX') CALL pack_zs(u%NSIZE_SEA,u%NR_SEA,'S')
114 !
115 IF (lhook) CALL dr_hook('PUT_ZS_N',1,zhook_handle)
116 !
117 CONTAINS
118 !=======================================================================================
119 SUBROUTINE pack_zs(KSIZE,KMASK,YTYPE)
120 !
121 INTEGER, INTENT(IN) :: KSIZE
122 INTEGER, POINTER, DIMENSION(:) :: KMASK
123  CHARACTER(LEN=1), INTENT(IN) :: YTYPE
124 !
125 REAL, DIMENSION(KSIZE) :: ZP_ZS
126 INTEGER :: JJ, ISIZE_FULL
127 REAL(KIND=JPRB) :: ZHOOK_HANDLE
128 !
129 ! input arguments:
130 !
131 IF (lhook) CALL dr_hook('PUT_ZS_N:PACK_ZS',0,zhook_handle)
132 !
133 IF (.NOT.ASSOCIATED(kmask)) THEN
134  ALLOCATE(kmask(ksize))
135  IF (ksize>0) THEN
136  CALL get_size_full_n(hprogram,u%NDIM_FULL,u%NSIZE_FULL,isize_full)
137  u%NSIZE_FULL = isize_full
138  IF (ytype=='W') THEN
139  CALL get_1d_mask( ksize, u%NSIZE_FULL, u%XWATER, kmask)
140  ELSEIF (ytype=='N') THEN
141  CALL get_1d_mask( ksize, u%NSIZE_FULL, u%XNATURE, kmask)
142  ELSEIF (ytype=='T') THEN
143  CALL get_1d_mask( ksize, u%NSIZE_FULL, u%XTOWN, kmask)
144  ELSEIF (ytype=='S') THEN
145  CALL get_1d_mask( ksize, u%NSIZE_FULL, u%XSEA, kmask)
146  ENDIF
147  ENDIF
148 ENDIF
149 !
150 DO jj=1,ksize
151  zp_zs(jj) = pzs(kmask(jj))
152 ENDDO
153 !
154 IF (ytype=='W') THEN
155  CALL put_zs_inland_water_n(f, w, hprogram,ksize,zp_zs,u%CWATER)
156 ELSEIF (ytype=='N') THEN
157  CALL put_zs_nature_n(is, hprogram,ksize,zp_zs)
158 ELSEIF (ytype=='T') THEN
159  CALL put_zs_town_n(top, hprogram,ksize,zp_zs)
160 ELSEIF (ytype=='S') THEN
161  CALL put_zs_sea_n(s, hprogram,ksize,zp_zs)
162 ENDIF
163 !
164 IF (lhook) CALL dr_hook('PUT_ZS_N:PACK_ZS',1,zhook_handle)
165 !
166 END SUBROUTINE pack_zs
167 !=======================================================================================
168 !
169 END SUBROUTINE put_zs_n
subroutine put_zs_n(F, IS, S, U, TOP, W, HPROGRAM, KI, PZS)
Definition: put_zsn.F90:7
subroutine put_zs_inland_water_n(F, W, HPROGRAM, KI, PZS, HWATER)
subroutine put_zs_nature_n(S, HPROGRAM, KI, PZS)
subroutine get_size_full_n(HPROGRAM, KDIM_FULL, KSIZE_FULL_IN, KSIZE
subroutine put_zs_sea_n(S, HPROGRAM, KI, PZS)
Definition: put_zs_sean.F90:8
subroutine put_zs_surf_atm_n(U, HPROGRAM, KI, PZS)
integer, parameter jprb
Definition: parkind1.F90:32
subroutine get_1d_mask(KSIZE, KFRAC, PFRAC, KMASK)
Definition: get_1d_mask.F90:6
subroutine put_zs_town_n(TOP, HPROGRAM, KI, PZS)
Definition: put_zs_townn.F90:8
logical lhook
Definition: yomhook.F90:15
subroutine pack_zs(KSIZE, KMASK, YTYPE)
Definition: put_zsn.F90:120