4 |
|
|
5 |
contains |
contains |
6 |
|
|
7 |
SUBROUTINE fxyhyper(rlatu, yprimu, rlatv, yprimv, rlatu1, yprimu1, rlatu2, & |
SUBROUTINE fxyhyper(rlatu, yprimu, rlatv, rlatu1, yprimu1, rlatu2, yprimu2, & |
8 |
yprimu2, rlonu, xprimu, rlonv, xprimv, rlonm025, xprimm025, rlonp025, & |
rlonu, xprimu, rlonv, xprimv, xprimm025, xprimp025) |
|
xprimp025) |
|
9 |
|
|
10 |
! From dyn3d/fxyhyper.F, version 1.1.1.1, 2004/05/19 12:53:06 |
! From dyn3d/fxyhyper.F, version 1.1.1.1, 2004/05/19 12:53:06 |
11 |
|
|
|
USE dimens_m, ONLY: jjm |
|
12 |
use fxhyp_m, only: fxhyp |
use fxhyp_m, only: fxhyp |
13 |
use fyhyp_m, only: fyhyp |
use fyhyp_m, only: fyhyp |
|
USE paramet_m, ONLY: iip1 |
|
|
use serre, only: clat, grossismy, dzoomy, tauy, clon, grossismx, dzoomx, & |
|
|
taux |
|
14 |
|
|
15 |
! Auteur : P. Le Van d'après les formulations de R. Sadourny |
REAL, intent(out):: rlatu(:), yprimu(:) ! (jjm + 1) |
16 |
|
real, intent(out):: rlatv(:) ! (jjm) |
17 |
! f(x, y) à dérivée tangente hyperbolique |
real, intent(out):: rlatu1(:), yprimu1(:), rlatu2(:), yprimu2(:) ! (jjm) |
18 |
|
REAL, intent(out):: rlonu(:), xprimu(:), rlonv(:), xprimv(:) ! (iim + 1) |
19 |
! Cette procédure calcule les latitudes (routine fyhyp) et |
REAL, intent(out):: xprimm025(:) ! (iim + 1) |
20 |
! longitudes (fxhyp) par des fonctions tangente hyperbolique. |
REAL, intent(out):: xprimp025(:) ! (iim + 1) |
|
|
|
|
! Il y a trois paramètres, en plus des coordonnées du centre du |
|
|
! zoom (clon et clat) : |
|
|
|
|
|
! a) le grossissement du zoom : grossismy (en y) et grossismx (en x) |
|
|
! b) l'extension du zoom : dzoomy (en y) et dzoomx (en x) |
|
|
! c) la raideur de la transition du zoom : taux et tauy |
|
|
|
|
|
! Nota bene : il vaut mieux avoir : grossismx * dzoomx < pi (radians) |
|
|
! et grossismy * dzoomy < pi/2 (radians) |
|
|
|
|
|
REAL rlatu(:), yprimu(:) ! (jjm + 1) |
|
|
real rlatv(:), yprimv(:) ! (jjm) |
|
|
real rlatu1(:), yprimu1(:), rlatu2(:), yprimu2(:) ! (jjm) |
|
|
REAL rlonu(:), xprimu(:), rlonv(:), xprimv(:) ! (iim + 1) |
|
|
REAL rlonm025(:), xprimm025(:), rlonp025(:), xprimp025(:) ! (iim + 1) |
|
|
|
|
|
! Local: |
|
|
|
|
|
double precision dxmin, dxmax, dymin, dymax |
|
|
INTEGER i, j |
|
21 |
|
|
22 |
!---------------------------------------------------------- |
!---------------------------------------------------------- |
23 |
|
|
24 |
CALL fyhyp(clat, grossismy, dzoomy, tauy, rlatu, yprimu, rlatv, yprimv, & |
CALL fyhyp(rlatu, yprimu, rlatv, rlatu2, yprimu2, rlatu1, yprimu1) |
25 |
rlatu2, yprimu2, rlatu1, yprimu1, dymin, dymax) |
CALL fxhyp(xprimm025, rlonv, xprimv, rlonu, xprimu, xprimp025) |
|
CALL fxhyp(clon, grossismx, dzoomx, taux, rlonm025, xprimm025, rlonv, & |
|
|
xprimv, rlonu, xprimu, rlonp025, xprimp025, dxmin, dxmax) |
|
|
|
|
|
DO i = 1, iip1 |
|
|
IF (rlonp025(i).LT.rlonv(i)) THEN |
|
|
print *, ' Attention ! rlonp025 < rlonv', i |
|
|
STOP 1 |
|
|
ENDIF |
|
|
|
|
|
IF (rlonv(i).LT.rlonm025(i)) THEN |
|
|
print *, ' Attention ! rlonm025 > rlonv', i |
|
|
STOP 1 |
|
|
ENDIF |
|
|
|
|
|
IF (rlonp025(i).GT.rlonu(i)) THEN |
|
|
print *, ' Attention ! rlonp025 > rlonu', i |
|
|
STOP 1 |
|
|
ENDIF |
|
|
ENDDO |
|
|
|
|
|
print *, 'Test de coherence ok pour fx' |
|
|
|
|
|
DO j = 1, jjm |
|
|
IF (rlatu1(j).LE.rlatu2(j)) THEN |
|
|
print *, 'Attention ! rlatu1 < rlatu2 ', rlatu1(j), rlatu2(j), j |
|
|
STOP 13 |
|
|
ENDIF |
|
|
|
|
|
IF (rlatu2(j).LE.rlatu(j+1)) THEN |
|
|
print *, 'Attention ! rlatu2 < rlatup1 ', rlatu2(j), rlatu(j+1), j |
|
|
STOP 14 |
|
|
ENDIF |
|
|
|
|
|
IF (rlatu(j).LE.rlatu1(j)) THEN |
|
|
print *, ' Attention ! rlatu < rlatu1 ', rlatu(j), rlatu1(j), j |
|
|
STOP 15 |
|
|
ENDIF |
|
|
|
|
|
IF (rlatv(j).LE.rlatu2(j)) THEN |
|
|
print *, ' Attention ! rlatv < rlatu2 ', rlatv(j), rlatu2(j), j |
|
|
STOP 16 |
|
|
ENDIF |
|
|
|
|
|
IF (rlatv(j).ge.rlatu1(j)) THEN |
|
|
print *, ' Attention ! rlatv > rlatu1 ', rlatv(j), rlatu1(j), j |
|
|
STOP 17 |
|
|
ENDIF |
|
|
|
|
|
IF (rlatv(j).ge.rlatu(j)) THEN |
|
|
print *, ' Attention ! rlatv > rlatu ', rlatv(j), rlatu(j), j |
|
|
STOP 18 |
|
|
ENDIF |
|
|
ENDDO |
|
|
|
|
|
print *, 'Test de coherence ok pour fy' |
|
|
|
|
|
print *, 'Latitudes' |
|
|
print 3, dymin, dymax |
|
|
print *, 'Si cette derniere est trop lache, modifiez les parametres' |
|
|
print *, 'grossism, tau, dzoom pour Y et repasser ! ' |
|
|
|
|
|
print *, ' Longitudes ' |
|
|
print 3, dxmin, dxmax |
|
|
print *, 'Si cette derniere est trop lache, modifiez les parametres' |
|
|
print *, 'grossism, tau, dzoom pour Y et repasser ! ' |
|
|
|
|
|
3 Format(1x, ' Au centre du zoom, la longueur de la maille est', & |
|
|
' d environ ', f0.2, ' degres ', /, & |
|
|
' alors que la maille en dehors de la zone du zoom est ', & |
|
|
"d'environ", f0.2, ' degres ') |
|
26 |
|
|
27 |
END SUBROUTINE fxyhyper |
END SUBROUTINE fxyhyper |
28 |
|
|