/[lmdze]/trunk/dyn3d/fxyhyper.f
ViewVC logotype

Contents of /trunk/dyn3d/fxyhyper.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 112 - (show annotations)
Thu Sep 18 13:36:51 2014 UTC (9 years, 8 months ago) by guez
File size: 3904 byte(s)
Removed 8 first arguments of fxyhyper, use variables of module serre
instead.

Moved reading of variables of module serre from procedure conf_gcm to
new procedure read_serre.

In guide, added conditions to avoid useless calls to tau2alpha and
writefield. Bugfix: offline corresponds to alpha = 1. Open only one
NetCDF file to read number of vertical levels.

In tau2alpha, added conditions to avoid useless computations of dxdyu
and dxdyv. gamma is not needed for a regular grid.

1 module fxyhyper_m
2
3 IMPLICIT NONE
4
5 contains
6
7 SUBROUTINE fxyhyper(rlatu, yprimu, rlatv, yprimv, rlatu1, yprimu1, rlatu2, &
8 yprimu2, rlonu, xprimu, rlonv, xprimv, rlonm025, xprimm025, rlonp025, &
9 xprimp025)
10
11 ! From dyn3d/fxyhyper.F, version 1.1.1.1, 2004/05/19 12:53:06
12
13 USE dimens_m, ONLY: jjm
14 use fxhyp_m, only: fxhyp
15 use fyhyp_m, only: fyhyp
16 USE paramet_m, ONLY: iip1
17 use serre, only: clat, grossismy, dzoomy, tauy, clon, grossismx, dzoomx, &
18 taux
19
20 ! Auteur : P. Le Van d'après les formulations de R. Sadourny
21
22 ! f(x, y) à dérivée tangente hyperbolique
23
24 ! Cette procédure calcule les latitudes (routine fyhyp) et
25 ! longitudes (fxhyp) par des fonctions à tangente hyperbolique.
26
27 ! Il y a trois paramètres, en plus des coordonnées du centre du
28 ! zoom (clon et clat) :
29
30 ! a) le grossissement du zoom : grossismy (en y) et grossismx (en x)
31 ! b) l' extension du zoom : dzoomy (en y) et dzoomx (en x)
32 ! c) la raideur de la transition du zoom : taux et tauy
33
34 ! Nota bene : il vaut mieux avoir : grossismx * dzoomx < pi (radians)
35 ! et grossismy * dzoomy < pi/2 (radians)
36
37 REAL rlatu(:), yprimu(:) ! (jjm + 1)
38 real rlatv(:), yprimv(:) ! (jjm)
39 real rlatu1(:), yprimu1(:), rlatu2(:), yprimu2(:) ! (jjm)
40 REAL rlonu(:), xprimu(:), rlonv(:), xprimv(:) ! (iim + 1)
41 REAL rlonm025(:), xprimm025(:), rlonp025(:), xprimp025(:) ! (iim + 1)
42
43 ! Local:
44
45 double precision dxmin, dxmax, dymin, dymax
46 INTEGER i, j
47
48 !----------------------------------------------------------
49
50 CALL fyhyp(clat, grossismy, dzoomy, tauy, rlatu, yprimu, rlatv, yprimv, &
51 rlatu2, yprimu2, rlatu1, yprimu1, dymin, dymax)
52 CALL fxhyp(clon, grossismx, dzoomx, taux, rlonm025, xprimm025, rlonv, &
53 xprimv, rlonu, xprimu, rlonp025, xprimp025, dxmin, dxmax)
54
55 DO i = 1, iip1
56 IF(rlonp025(i).LT.rlonv(i)) THEN
57 print *, ' Attention ! rlonp025 < rlonv', i
58 STOP 1
59 ENDIF
60
61 IF(rlonv(i).LT.rlonm025(i)) THEN
62 print *, ' Attention ! rlonm025 > rlonv', i
63 STOP 1
64 ENDIF
65
66 IF(rlonp025(i).GT.rlonu(i)) THEN
67 print *, ' Attention ! rlonp025 > rlonu', i
68 STOP 1
69 ENDIF
70 ENDDO
71
72 print *, 'Test de coherence ok pour fx'
73
74 DO j = 1, jjm
75 IF(rlatu1(j).LE.rlatu2(j)) THEN
76 print *, 'Attention ! rlatu1 < rlatu2 ', rlatu1(j), rlatu2(j), j
77 STOP 13
78 ENDIF
79
80 IF(rlatu2(j).LE.rlatu(j+1)) THEN
81 print *, 'Attention ! rlatu2 < rlatup1 ', rlatu2(j), rlatu(j+1), j
82 STOP 14
83 ENDIF
84
85 IF(rlatu(j).LE.rlatu1(j)) THEN
86 print *, ' Attention ! rlatu < rlatu1 ', rlatu(j), rlatu1(j), j
87 STOP 15
88 ENDIF
89
90 IF(rlatv(j).LE.rlatu2(j)) THEN
91 print *, ' Attention ! rlatv < rlatu2 ', rlatv(j), rlatu2(j), j
92 STOP 16
93 ENDIF
94
95 IF(rlatv(j).ge.rlatu1(j)) THEN
96 print *, ' Attention ! rlatv > rlatu1 ', rlatv(j), rlatu1(j), j
97 STOP 17
98 ENDIF
99
100 IF(rlatv(j).ge.rlatu(j)) THEN
101 print *, ' Attention ! rlatv > rlatu ', rlatv(j), rlatu(j), j
102 STOP 18
103 ENDIF
104 ENDDO
105
106 print *, 'Test de coherence ok pour fy'
107
108 print *, 'Latitudes'
109 print 3, dymin, dymax
110 print *, 'Si cette derniere est trop lache, modifiez les parametres'
111 print *, 'grossism, tau, dzoom pour Y et repasser ! '
112
113 print *, ' Longitudes '
114 print 3, dxmin, dxmax
115 print *, 'Si cette derniere est trop lache, modifiez les parametres'
116 print *, 'grossism, tau, dzoom pour Y et repasser ! '
117
118 3 Format(1x, ' Au centre du zoom, la longueur de la maille est', &
119 ' d environ ', f0.2, ' degres ', /, &
120 ' alors que la maille en dehors de la zone du zoom est ', &
121 "d'environ", f0.2, ' degres ')
122
123 END SUBROUTINE fxyhyper
124
125 end module fxyhyper_m

  ViewVC Help
Powered by ViewVC 1.1.21