SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
soiltemp_arp_par.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 soiltemp_arp_par (I, &
7  hprogram,otemp_arp,ktemplayer_arp)
8 ! ##############################################################
9 !
10 !!**** *SOILTEMP_ARP_PAR* Impose special pseudo depth for "force-restore"
11 !! multilayer deep temperature
12 !!
13 !! PURPOSE
14 !! -------
15 !!
16 !! METHOD
17 !! ------
18 !!
19 !
20 !! EXTERNAL
21 !! --------
22 !!
23 !! IMPLICIT ARGUMENTS
24 !! ------------------
25 !!
26 !! REFERENCE
27 !! ---------
28 !!
29 !! AUTHOR
30 !! ------
31 !!
32 !! B. Decharme Meteo-France
33 !!
34 !! MODIFICATION
35 !! ------------
36 !!
37 !! Original 03/2009
38 !!
39 !!
40 !----------------------------------------------------------------------------
41 !
42 !* 0. DECLARATION
43 ! -----------
44 !
45 !
46 USE modd_isba_n, ONLY : isba_t
47 !
48 USE modd_surf_par, ONLY : xundef
49 USE modd_read_namelist, ONLY : lnam_read
50 !
51 !
53 !
54 USE modi_get_luout
55 USE modi_open_namelist
56 USE modi_close_namelist
57 !
58 USE mode_pos_surf
59 !
60 !
61 USE yomhook ,ONLY : lhook, dr_hook
62 USE parkind1 ,ONLY : jprb
63 !
64 USE modi_abor1_sfx
65 !
66 IMPLICIT NONE
67 !
68 !* 0.1 Declaration of arguments
69 ! ------------------------
70 !
71 !
72 TYPE(isba_t), INTENT(INOUT) :: i
73 !
74  CHARACTER(LEN=6), INTENT(IN) :: hprogram ! Type of program
75 LOGICAL, INTENT(OUT) :: otemp_arp
76 INTEGER, INTENT(OUT) :: ktemplayer_arp
77 !
78 !* 0.2 Declaration of local variables
79 ! ------------------------------
80 !
81 INTEGER :: iluout ! output listing logical unit
82 INTEGER :: ilunam ! namelist file logical unit
83 LOGICAL :: gfound ! true if namelist is found
84 REAL(KIND=JPRB) :: zhook_handle
85 !
86 !* 0.3 Declaration of namelists
87 ! ------------------------
88 !
89 !
90 !-------------------------------------------------------------------------------
91 !
92 !* 1. Initializations
93 ! ---------------
94 !
95 
96 IF (lhook) CALL dr_hook('SOILTEMP_ARP_PAR',0,zhook_handle)
97 !
98  CALL get_luout(hprogram,iluout)
99 !
100 IF (lnam_read) THEN
101 
102  sodelx(:) = xundef
103  ltemp_arp = .false.
104  ntemplayer_arp = 4
105  !
106  !-------------------------------------------------------------------------------
107  !
108  !* 2. Input value for SODELX variable
109  ! -------------------------------
110  !
111  CALL open_namelist(hprogram,ilunam)
112  !
113  CALL posnam(ilunam,'NAM_SOILTEMP_ARP',gfound,iluout)
114  IF (gfound) READ(unit=ilunam,nml=nam_soiltemp_arp)
115  !
116  CALL close_namelist(hprogram,ilunam)
117 !
118 ENDIF
119 !
120 !-------------------------------------------------------------------------------
121 !
122 !* 3. Consistency
123 ! -----------
124 !
125 IF(ltemp_arp.AND.i%CISBA=='DIF')THEN
126  ltemp_arp=.false.
127  WRITE(iluout,*)'LTEMP_ARP put at False because you use the ISBA-DF scheme'
128 ENDIF
129 !
130 IF(ltemp_arp)THEN
131  IF(ntemplayer_arp>nmax_layer)THEN
132  WRITE(iluout,*)'NTEMPLAYER_ARP is too big (>10), NTEMPLAYER_ARP= ',ntemplayer_arp
133  CALL abor1_sfx('NTEMPLAYER_ARP is too big (>10)')
134  ELSEIF(ntemplayer_arp<4)THEN
135  WRITE(iluout,*)'NTEMPLAYER_ARP must be at least equal to 4, NTEMPLAYER_ARP= ',ntemplayer_arp
136  CALL abor1_sfx('NTEMPLAYER_ARP must be at least equal to 4')
137  ENDIF
138  IF(count(sodelx(1:ntemplayer_arp)/=xundef)>0.AND. &
139  count(sodelx(1:ntemplayer_arp)/=xundef)/=ntemplayer_arp)THEN
140  WRITE(iluout,*)'Number of SODELX imposed values =',count(sodelx(1:ntemplayer_arp)/=xundef),&
141  ' /= NTEMPLAYER_ARP= ',ntemplayer_arp
142  CALL abor1_sfx('SODELX imposed values /= NTEMPLAYER_ARP')
143  ENDIF
144 ENDIF
145 !
146 !-------------------------------------------------------------------------------
147 !
148 !* 4. Initialization
149 ! -------------------------------
150 !
151 IF(ltemp_arp)THEN
152 !
153  ALLOCATE(i%XSODELX(ntemplayer_arp))
154 !
155  IF(all(sodelx(:)==xundef))THEN
156 !
157  i%XSODELX(1)=0.5
158  i%XSODELX(2)=1.5
159  i%XSODELX(3)=4.5
160  i%XSODELX(4)=13.5
161  WRITE(iluout,*)'SODELX default values : ',i%XSODELX(:)
162 !
163  ELSE
164 !
165  i%XSODELX(:)=sodelx(1:ntemplayer_arp)
166  WRITE(iluout,*)'SODELX imposed to : ',i%XSODELX(:)
167 !
168  ENDIF
169 !
170 ELSE
171 !
172  ALLOCATE(i%XSODELX(0))
173 !
174 ENDIF
175 !
176 otemp_arp =ltemp_arp
177 ktemplayer_arp=ntemplayer_arp
178 IF (lhook) CALL dr_hook('SOILTEMP_ARP_PAR',1,zhook_handle)
179 !
180 !-------------------------------------------------------------------------------
181 !
182 END SUBROUTINE soiltemp_arp_par
subroutine soiltemp_arp_par(I, HPROGRAM, OTEMP_ARP, KTEMPLAYER_ARP)
subroutine abor1_sfx(YTEXT)
Definition: abor1_sfx.F90:6
subroutine close_namelist(HPROGRAM, KLUNAM)
subroutine posnam(KULNAM, HDNAML, OFOUND, KLUOUT)
subroutine get_luout(HPROGRAM, KLUOUT)
Definition: get_luout.F90:6
subroutine open_namelist(HPROGRAM, KLUNAM, HFILE)