7 SUBROUTINE fxhyp(xprimm025, rlonv, xprimv, rlonu, xprimu, xprimp025)
25 include
"dimensions.h"
31 REAL,
intent(out):: xprimm025(:), rlonv(:), xprimv(:)
32 real,
intent(out):: rlonu(:), xprimu(:), xprimp025(:)
35 real rlonm025(
iim + 1), rlonp025(
iim + 1)
38 REAL(K8) xtild(0:2 *
nmax)
39 REAL(K8) fhyp(
nmax:2 *
nmax), ffdx, beta, Xprimt(0:2 *
nmax)
40 REAL(K8) Xf(0:2 *
nmax), xxpr(2 *
nmax)
47 print *,
"Call sequence information: fxhyp"
49 test_iim:
if (
iim==1)
then
52 rlonv(2)=rlonv(1)+
twopi
53 rlonu(2)=rlonu(1)+
twopi
63 xprimm025(:
iim) = step
64 xprimp025(:
iim) = step
69 rlonm025(:
iim) = rlonv(:
iim) - 0.25 * step
70 rlonp025(:
iim) = rlonv(:
iim) + 0.25 * step
71 rlonu(:
iim) = rlonv(:
iim) + 0.5 * step
78 fa =
taux * (dzoom / 2. - xtild(i))
79 fb = xtild(i) * (
pi_d - xtild(i))
81 IF (200. * fb < - fa)
THEN
83 ELSE IF (200. * fb < fa)
THEN
86 IF (abs(fa) < 1e-13 .AND. abs(fb) < 1e-13)
THEN
87 IF (200. * fb + fa < 1e-10)
THEN
89 ELSE IF (200. * fb - fa < 1e-10)
THEN
93 fhyp(i) = tanh(fa / fb)
97 IF (xtild(i) == 0.) fhyp(i) = 1.
98 IF (xtild(i) ==
pi_d) fhyp(i) = -1.
106 xmoy = 0.5 * (xtild(i-1) + xtild(i))
107 fa =
taux * (dzoom / 2. - xmoy)
108 fb = xmoy * (
pi_d - xmoy)
110 IF (200. * fb < - fa)
THEN
112 ELSE IF (200. * fb < fa)
THEN
115 IF (abs(fa) < 1e-13 .AND. abs(fb) < 1e-13)
THEN
116 IF (200. * fb + fa < 1e-10)
THEN
118 ELSE IF (200. * fb - fa < 1e-10)
THEN
126 IF (xmoy == 0.) fxm = 1.
127 IF (xmoy ==
pi_d) fxm = -1.
129 ffdx = ffdx + fxm * (xtild(i) - xtild(i-1))
132 print *,
"ffdx = ", ffdx
134 print *,
"beta = ", beta
137 print *,
'Bad choice of grossismx, taux, dzoomx.'
138 print *,
'Decrease dzoomx or grossismx.'
149 xmoy = 0.5 * (xtild(i-1) + xtild(i))
150 fa =
taux * (dzoom / 2. - xmoy)
151 fb = xmoy * (
pi_d - xmoy)
153 IF (200. * fb < - fa)
THEN
155 ELSE IF (200. * fb < fa)
THEN
161 IF (xmoy == 0.) fxm = 1.
162 IF (xmoy ==
pi_d) fxm = -1.
163 xxpr(i) = beta + (
grossismx - beta) * fxm
171 xf(i) = xf(i-1) + xxpr(i) * (xtild(i) - xtild(i-1))
177 xprimm025(:
iim), xuv = - 0.25_k8)
183 xprimp025(:
iim), xuv = 0.25_k8)
184 end if test_grossismx
188 IF (minval(rlonm025(:
iim)) < -
pi - 0.1 &
189 .or. maxval(rlonm025(:
iim)) >
pi + 0.1)
THEN
193 do while (rlonm025(is2) < -
pi .and. is2 <
iim)
197 if (rlonm025(is2) < -
pi)
then
198 print *,
'Rlonm025 plus petit que - pi !'
204 do while (rlonm025(is2) >
pi .and. is2 > 1)
208 if (rlonm025(is2) >
pi)
then
209 print *,
'Rlonm025 plus grand que pi !'
220 forall (i = 1:
iim) d_rlonv(i) = rlonv(i + 1) - rlonv(i)
221 print *,
"Minimum longitude step:", minval(d_rlonv) * 180. /
pi, &
223 print *,
"Maximum longitude step:", maxval(d_rlonv) * 180. /
pi, &
228 IF (rlonp025(i) < rlonv(i))
THEN
229 print *,
'rlonp025(', i,
') = ', rlonp025(i)
230 print *,
"< rlonv(", i,
") = ", rlonv(i)
234 IF (rlonv(i) < rlonm025(i))
THEN
235 print *,
'rlonv(', i,
') = ', rlonv(i)
236 print *,
"< rlonm025(", i,
") = ", rlonm025(i)
240 IF (rlonp025(i) > rlonu(i))
THEN
241 print *,
'rlonp025(', i,
') = ', rlonp025(i)
242 print *,
"> rlonu(", i,
") = ", rlonu(i)
!$Header!c!c!c include serre h!c REAL && grossismx
subroutine fxhyp(xprimm025, rlonv, xprimv, rlonu, xprimu, xprimp025)
!$Header!c!c!c include serre h!c REAL clon
real(k8), parameter twopi_d
!$Id mode_top_bound COMMON comconstr && pi
subroutine invert_zoom_x(xf, xtild, Xprimt, xlon, xprimm, xuv)
!$Header!c!c!c include serre h!c REAL dzoomx
!$Header!c!c!c include serre h!c REAL taux
c c zjulian c cym CALL iim cym klev iim
subroutine principal_cshift(is2, xlon, xprimm)