1 |
guez |
3 |
|
2 |
guez |
81 |
! $Header: /home/cvsroot/LMDZ4/libf/dyn3d/pres2lev.F,v 1.1.1.1 2004/05/19 |
3 |
|
|
! 12:53:07 lmdzadmin Exp $ |
4 |
guez |
3 |
|
5 |
guez |
81 |
! ****************************************************** |
6 |
|
|
SUBROUTINE pres2lev(varo, varn, lmo, lmn, po, pn, ni, nj) |
7 |
guez |
3 |
|
8 |
guez |
81 |
! interpolation lineaire pour passer |
9 |
|
|
! a une nouvelle discretisation verticale pour |
10 |
|
|
! les variables de GCM |
11 |
|
|
! Francois Forget (01/1995) |
12 |
guez |
3 |
|
13 |
guez |
81 |
! MOdif remy roca 12/97 pour passer de pres2sig |
14 |
|
|
! ********************************************************** |
15 |
guez |
3 |
|
16 |
guez |
81 |
IMPLICIT NONE |
17 |
guez |
3 |
|
18 |
guez |
81 |
! Declarations: |
19 |
|
|
! ============== |
20 |
guez |
3 |
|
21 |
guez |
81 |
! ARGUMENTS |
22 |
|
|
! """"""""" |
23 |
guez |
3 |
|
24 |
guez |
81 |
INTEGER lmo ! dimensions ancienne couches (input) |
25 |
|
|
INTEGER lmn ! dimensions nouvelle couches (input) |
26 |
|
|
INTEGER lmomx ! dimensions ancienne couches (input) |
27 |
|
|
INTEGER lmnmx ! dimensions nouvelle couches (input) |
28 |
guez |
3 |
|
29 |
guez |
81 |
PARAMETER (lmomx=10000, lmnmx=10000) |
30 |
guez |
3 |
|
31 |
guez |
81 |
REAL po(lmo) ! niveau de pression en millibars |
32 |
|
|
INTEGER ni, nj |
33 |
|
|
REAL pn(ni, nj, lmn) ! niveau de pression en pascals |
34 |
guez |
3 |
|
35 |
guez |
81 |
INTEGER i, j, nhoriz ! nombre de point horizontale (input) |
36 |
|
|
|
37 |
|
|
REAL varo(ni, nj, lmo) ! var dans l'ancienne grille (input) |
38 |
|
|
REAL varn(ni, nj, lmn) ! var dans la nouvelle grille (output) |
39 |
|
|
|
40 |
|
|
REAL zvaro(lmomx), zpo(lmomx) |
41 |
|
|
|
42 |
|
|
! Autres variables |
43 |
|
|
! """""""""""""""" |
44 |
|
|
INTEGER n, ln, lo |
45 |
|
|
REAL coef |
46 |
|
|
|
47 |
|
|
! run |
48 |
|
|
! ==== |
49 |
|
|
DO i = 1, ni |
50 |
|
|
DO j = 1, nj |
51 |
|
|
! a chaque point de grille correspond un nouveau sigma old |
52 |
|
|
! qui vaut pres(l)/ps(i,j) |
53 |
|
|
DO lo = 1, lmo |
54 |
|
|
zpo(lo) = po(lmo+1-lo) |
55 |
|
|
zvaro(lo) = varo(i, j, lmo+1-lo) |
56 |
|
|
END DO |
57 |
|
|
|
58 |
|
|
DO ln = 1, lmn |
59 |
|
|
IF (pn(i,j,ln)>=zpo(1)) THEN |
60 |
|
|
varn(i, j, ln) = zvaro(1) |
61 |
|
|
ELSE IF (pn(i,j,ln)<=zpo(lmo)) THEN |
62 |
|
|
varn(i, j, ln) = zvaro(lmo) |
63 |
|
|
ELSE |
64 |
|
|
DO lo = 1, lmo - 1 |
65 |
|
|
IF ((pn(i,j,ln)<=zpo(lo)) .AND. (pn(i,j,ln)>zpo(lo+1))) THEN |
66 |
|
|
coef = (pn(i,j,ln)-zpo(lo))/(zpo(lo+1)-zpo(lo)) |
67 |
|
|
varn(i, j, ln) = zvaro(lo) + coef*(zvaro(lo+1)-zvaro(lo)) |
68 |
|
|
! print*,'pn(',ln,')=',pn(i,j,ln),varn(i,j,ln) |
69 |
|
|
END IF |
70 |
|
|
END DO |
71 |
|
|
END IF |
72 |
|
|
END DO |
73 |
|
|
|
74 |
|
|
END DO |
75 |
|
|
END DO |
76 |
|
|
RETURN |
77 |
|
|
END SUBROUTINE pres2lev |