SURFEX v8.1
General documentation of Surfex
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 ! #########
6  SUBROUTINE ocean_mercatorvergrid
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 !! C. Lebeaupin Brossier, G. Faure 09/2016 : indice loop NOCKMIN+1 for XRAY
48 !-------------------------------------------------------------------------------
49 !
50 !* 0. DECLARATIONS
51 ! ------------
52 !
53 USE modd_surf_par, ONLY : xundef
55 !
56 USE yomhook ,ONLY : lhook, dr_hook
57 USE parkind1 ,ONLY : jprb
58 !
59 IMPLICIT NONE
60 !
61 !* 0.2 declarations of local variables
62 !
63 !
64 REAL :: ZUP,ZDOWN
65 INTEGER :: JLOOP
66 !
67 REAL(KIND=JPRB) :: ZHOOK_HANDLE
68 !
69 !-------------------------------------------------------------------------------
70 ! 1. Allocations
71 ! -----------
72 IF (lhook) CALL dr_hook('OCEAN_MERCATORVERGRID',0,zhook_handle)
73 
74 ! 1. Principal grid
75 ! --------------
76 !
77 !-------------------------------------------------------------------------------
78 ! 2. Ocean Secondary Grids
79 ! ---------------------
80 !
81 ALLOCATE(xk1(nockmin:nockmax))
82 ALLOCATE(xk2(nockmin:nockmax))
83 ALLOCATE(xk3(nockmin:nockmax))
84 ALLOCATE(xk4(nockmin:nockmax))
85 !
86 ALLOCATE(xz2(nockmin:nockmax))
87 ALLOCATE(xdz1(nockmin:nockmax))
88 ALLOCATE(xdz2(nockmin:nockmax))
89 !
90 ALLOCATE(xray(nockmin:nockmax))
91 !
92 DO jloop = nockmin,nockmax-1
93  xz2(jloop) = (xzhoc(jloop+1) + xzhoc(jloop))/2.
94  xdz1(jloop) = xzhoc(jloop) - xzhoc(jloop+1)
95 ENDDO
96 xz2(nockmax) = xzhoc(nockmax) + ((xzhoc(nockmax)-xzhoc(nockmax-1))/2.) !dernier niveau+delta/2
98 !
99 !
100 xdz2(nockmin) = - xz2(nockmin)
101 DO jloop = nockmin+1,nockmax
102  xdz2(jloop) = xz2(jloop-1) - xz2(jloop)
103 ENDDO
104 !!
105 !! 3. Grid Parameters
106 !! ---------------
107 !
108 xk1(nockmin) = 0.
109 xk4(nockmin) = 1. / ( xdz1(nockmin) * xdz1(nockmin) )
110 DO jloop = nockmin+1,nockmax
111  xk1(jloop) = -1. / (xdz2(jloop)*xdz1(jloop-1))
112  xk4(jloop) = 1. / (xdz1(jloop)*xdz1(jloop))
113 ENDDO
114 !
115 zup=1.
116 DO jloop = nockmin+1,nockmax
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 !-------------------------------------------------------------------------------
131 IF (lhook) CALL dr_hook('OCEAN_MERCATORVERGRID',1,zhook_handle)
132 CONTAINS
133 !rayo
134 !-------------------------------------------------------------------------------
135 !
136 !-------------------------------------------------------------------------------
137 !! #########################################
138  FUNCTION rayo(Z) RESULT(RR)
139 ! #########################################
140 !
141 !
142 !!**** *RAYOFCTX*
143 !!
144 !! PURPOSE
145 !! -------
146 !compute solar penetration coefficient
147 !
148 !!** METHOD
149 !! ------
150 !
151 !! EXTERNAL
152 !! --------
153 !!
154 !! IMPLICIT ARGUMENTS
155 !! ------------------
156 !!
157 !! REFERENCE
158 !! ---------
159 !! Paulson and Simpson 1977
160 !!
161 !! AUTHOR
162 !! ------
163 !! C. Lebeaupin *Meteo-France* (adapted from S. Belamari's code)
164 !!
165 !! MODIFICATIONS
166 !! -------------
167 !! Original 27/02/2006
168 !!
169 !-------------------------------------------------------------------------------
170 !
171 !* 0. DECLARATIONS
172 !
173 USE modd_ocean_csts,ONLY : xr,xd1,xd2
174 !
175 !* 0.1 declarations of arguments
176 !
177 REAL :: RR,Z
178 REAL(KIND=JPRB) :: ZHOOK_HANDLE
179 
180 !
181 !-------------------------------------------------------------------------------
182 !
183 !* 1. COMPUTE RAYO
184 ! ------------
185 !
186 IF (lhook) CALL dr_hook('RAYO',0,zhook_handle)
187 rr = xr*exp(z/xd1) + (1-xr)*exp(z/xd2)
188 IF (lhook) CALL dr_hook('RAYO',1,zhook_handle)
189 !
190 END FUNCTION rayo
191 !
192 !-------------------------------------------------------------------------------
193 END SUBROUTINE ocean_mercatorvergrid
real, dimension(:), pointer xk4
real, dimension(:), pointer xzhoc
real function rayo(Z)
real, parameter xundef
integer, parameter jprb
Definition: parkind1.F90:32
real, dimension(:), pointer xk1
real, dimension(:), pointer xdz2
logical lhook
Definition: yomhook.F90:15
integer, save nockmax
real, dimension(:), pointer xk3
real, dimension(:), pointer xk2
real, dimension(:), pointer xz2
subroutine ocean_mercatorvergrid
real, dimension(:), pointer xdz1
integer, save nockmin
real, dimension(:), pointer xray