34 |
|
|
35 |
! The modes are filtered from modfrst to modemax. |
! The modes are filtered from modfrst to modemax. |
36 |
|
|
|
USE dimens_m, ONLY : iim, jjm |
|
|
use conf_gcm_m, ONLY : fxyhypb, ysinus |
|
|
USE comgeom, ONLY : rlatu, rlatv, xprimu |
|
|
use nr_util, only: pi |
|
|
USE serre, ONLY : alphax |
|
37 |
USE coefils, ONLY : coefilu, coefilu2, coefilv, coefilv2, eignfnu, & |
USE coefils, ONLY : coefilu, coefilu2, coefilv, coefilv2, eignfnu, & |
38 |
eignfnv, modfrstu, modfrstv |
eignfnv, modfrstu, modfrstv |
39 |
|
USE comgeom, ONLY : rlatu, rlatv, xprimu |
40 |
|
USE dimens_m, ONLY : iim, jjm |
41 |
|
use inifgn_m, only: inifgn |
42 |
|
use nr_util, only: pi |
43 |
|
USE serre, ONLY : grossismx |
44 |
|
|
45 |
! Local: |
! Local: |
46 |
REAL dlonu(iim), dlatu(jjm) |
REAL dlatu(jjm) |
47 |
REAL rlamda(2: iim), eignvl(iim) |
REAL rlamda(2: iim), eignvl(iim) |
48 |
|
|
49 |
REAL lamdamax, cof |
REAL lamdamax, cof |
50 |
INTEGER i, j, modemax, imx, k, kf |
INTEGER i, j, modemax, imx, k, kf |
51 |
REAL dymin, dxmin, colat0 |
REAL dymin, colat0 |
52 |
REAL eignft(iim, iim), coff |
REAL eignft(iim, iim), coff |
|
EXTERNAL inifgn |
|
53 |
|
|
54 |
!----------------------------------------------------------- |
!----------------------------------------------------------- |
55 |
|
|
56 |
print *, "Call sequence information: inifilr" |
print *, "Call sequence information: inifilr" |
57 |
|
|
|
DO i = 1, iim |
|
|
dlonu(i) = xprimu(i) |
|
|
END DO |
|
|
|
|
58 |
CALL inifgn(eignvl) |
CALL inifgn(eignvl) |
59 |
|
|
60 |
PRINT *, 'EIGNVL ' |
PRINT *, 'EIGNVL ' |
74 |
dlatu(j) = rlatu(j) - rlatu(j+1) |
dlatu(j) = rlatu(j) - rlatu(j+1) |
75 |
END DO |
END DO |
76 |
|
|
|
dxmin = dlonu(1) |
|
|
DO i = 2, iim |
|
|
dxmin = min(dxmin, dlonu(i)) |
|
|
END DO |
|
77 |
dymin = dlatu(1) |
dymin = dlatu(1) |
78 |
DO j = 2, jjm |
DO j = 2, jjm |
79 |
dymin = min(dymin, dlatu(j)) |
dymin = min(dymin, dlatu(j)) |
80 |
END DO |
END DO |
81 |
|
|
82 |
colat0 = min(0.5, dymin/dxmin) |
colat0 = min(0.5, dymin / minval(xprimu(:iim))) |
|
|
|
|
IF (.NOT. fxyhypb .AND. ysinus) THEN |
|
|
colat0 = 0.6 |
|
|
! À revoir pour ysinus |
|
|
alphax = 0. |
|
|
END IF |
|
83 |
|
|
84 |
PRINT *, 'colat0 = ', colat0 |
PRINT *, 'colat0 = ', colat0 |
|
PRINT *, 'alphax = ', alphax |
|
|
|
|
|
IF (alphax == 1.) THEN |
|
|
PRINT *, 'alphax doit etre < a 1. Corriger ' |
|
|
STOP 1 |
|
|
END IF |
|
85 |
|
|
86 |
lamdamax = iim / (pi * colat0 * (1. - alphax)) |
lamdamax = iim / (pi * colat0 / grossismx) |
87 |
rlamda = lamdamax / sqrt(abs(eignvl(2: iim))) |
rlamda = lamdamax / sqrt(abs(eignvl(2: iim))) |
88 |
|
|
89 |
DO j = 1, jjm |
DO j = 1, jjm |