SURFEX  V8_0
Surfex V8_0 release
 All Classes Files Functions Variables
ocean_mercatorvergrid.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 ! #########
7 ! ######################################################################
8 !
9 !!**** *OCEAN_MERCATORVERGRID*
10 !!
11 !! PURPOSE
12 !! -------
13 !
14 ! Define the vertical ocean grid
15 !
16 !
17 !!** METHOD
18 !! ------
19 !
20 !
21 !
22 !
23 !! EXTERNAL
24 !! --------
25 !!
26 !!
27 !! IMPLICIT ARGUMENTS
28 !! ------------------
29 !!
30 !! MODD_OCEAN_CST
31 !!
32 !!
33 !! REFERENCE
34 !! ---------
35 !!
36 !!
37 !! AUTHOR
38 !! ------
39 !!
40 !! C. Lebeaupin Brossier * Meteo-France *
41 !!
42 !! MODIFICATIONS
43 !! -------------
44 !! Original 01/2008
45 ! D.BARBARY 11/2014 : HPROGRAM,OUNIF in Calling OCEAN_MERCATORVERGRID
46 ! Reading oceanic level and depth
47 !-------------------------------------------------------------------------------
48 !
49 !* 0. DECLARATIONS
50 ! ------------
51 !
52 USE modd_surf_par, ONLY : xundef
54 !
55 USE yomhook ,ONLY : lhook, dr_hook
56 USE parkind1 ,ONLY : jprb
57 !
58 IMPLICIT NONE
59 !
60 !* 0.2 declarations of local variables
61 !
62 !
63 REAL :: zup,zdown
64 INTEGER :: jloop
65 !
66 REAL(KIND=JPRB) :: zhook_handle
67 !
68 !-------------------------------------------------------------------------------
69 ! 1. Allocations
70 ! -----------
71 IF (lhook) CALL dr_hook('OCEAN_MERCATORVERGRID',0,zhook_handle)
72 
73 ! 1. Principal grid
74 ! --------------
75 !
76 !-------------------------------------------------------------------------------
77 ! 2. Ocean Secondary Grids
78 ! ---------------------
79 !
80 !$OMP SINGLE
81 !
82 ALLOCATE(xk1(nockmin:nockmax))
83 ALLOCATE(xk2(nockmin:nockmax))
84 ALLOCATE(xk3(nockmin:nockmax))
85 ALLOCATE(xk4(nockmin:nockmax))
86 !
87 ALLOCATE(xz2(nockmin:nockmax))
88 ALLOCATE(xdz1(nockmin:nockmax))
89 ALLOCATE(xdz2(nockmin:nockmax))
90 !
91 ALLOCATE(xray(nockmin:nockmax))
92 !
93 DO jloop = nockmin,nockmax-1
94  xz2(jloop) = (xzhoc(jloop+1) + xzhoc(jloop))/2.
95  xdz1(jloop) = xzhoc(jloop) - xzhoc(jloop+1)
96 ENDDO
97 xz2(nockmax) = xzhoc(nockmax) + ((xzhoc(nockmax)-xzhoc(nockmax-1))/2.) !dernier niveau+delta/2
98 xdz1(nockmax) = xdz1(nockmax-1)
99 !
100 !
101 xdz2(nockmin) = - xz2(nockmin)
102 DO jloop = nockmin+1,nockmax
103  xdz2(jloop) = xz2(jloop-1) - xz2(jloop)
104 ENDDO
105 !!
106 !! 3. Grid Parameters
107 !! ---------------
108 !
109 xk1(nockmin) = 0.
110 DO jloop = nockmin+1,nockmax
111  xk1(jloop) = -1. / (xdz2(jloop)*xdz1(jloop-1))
112 ENDDO
113 !
114 zup=1.
115 DO jloop = nockmin,nockmax
116  xk4(jloop) = 1. / ( xdz1(jloop) * xdz1(jloop) )
117  zdown = rayo(xz2(jloop))
118  xray(jloop) = zup - zdown
119  zup = zdown
120 ENDDO
121 !
122 DO jloop = nockmin,nockmax-1
123  xk2(jloop) = -1. / (xdz2(jloop)*xdz1(jloop))
124  xk3(jloop) = -1. / (xdz1(jloop)*xdz2(jloop+1))
125 ENDDO
126 !
127 xk2(nockmax) = xk2(nockmax-1)
128 xk3(nockmax) = 0.
129 !
130 !$OMP END SINGLE
131 !
132 !-------------------------------------------------------------------------------
133 IF (lhook) CALL dr_hook('OCEAN_MERCATORVERGRID',1,zhook_handle)
134  CONTAINS
135 !rayo
136 !-------------------------------------------------------------------------------
137 !
138 !-------------------------------------------------------------------------------
139 !! #########################################
140  FUNCTION rayo(Z) RESULT(RR)
141 ! #########################################
142 !
143 !
144 !!**** *RAYOFCTX*
145 !!
146 !! PURPOSE
147 !! -------
148 !compute solar penetration coefficient
149 !
150 !!** METHOD
151 !! ------
152 !
153 !! EXTERNAL
154 !! --------
155 !!
156 !! IMPLICIT ARGUMENTS
157 !! ------------------
158 !!
159 !! REFERENCE
160 !! ---------
161 !! Paulson and Simpson 1977
162 !!
163 !! AUTHOR
164 !! ------
165 !! C. Lebeaupin *Meteo-France* (adapted from S. Belamari's code)
166 !!
167 !! MODIFICATIONS
168 !! -------------
169 !! Original 27/02/2006
170 !!
171 !-------------------------------------------------------------------------------
172 !
173 !* 0. DECLARATIONS
174 !
175 USE modd_ocean_csts,ONLY : xr,xd1,xd2
176 !
177 !* 0.1 declarations of arguments
178 !
179 REAL :: rr,z
180 REAL(KIND=JPRB) :: zhook_handle
181 
182 !
183 !-------------------------------------------------------------------------------
184 !
185 !* 1. COMPUTE RAYO
186 ! ------------
187 !
188 IF (lhook) CALL dr_hook('RAYO',0,zhook_handle)
189 rr = xr*exp(z/xd1) + (1-xr)*exp(z/xd2)
190 IF (lhook) CALL dr_hook('RAYO',1,zhook_handle)
191 !
192 END FUNCTION rayo
193 !
194 !-------------------------------------------------------------------------------
195 END SUBROUTINE ocean_mercatorvergrid
real function rayo(Z)
subroutine ocean_mercatorvergrid