1 | c****************************************************** |
---|
2 | SUBROUTINE interp_vert(varo,varn,lmo,lmn,apso,bpso, |
---|
3 | & aps,bps,ps,Nhoriz) |
---|
4 | c |
---|
5 | c interpolation lineaire pour passer |
---|
6 | c a une nouvelle discretisation verticale pour |
---|
7 | c les variables de GCM |
---|
8 | c Francois Forget (01/1995) |
---|
9 | c Modif pour coordonnees hybrides FF (03/2003) |
---|
10 | c********************************************************** |
---|
11 | |
---|
12 | IMPLICIT NONE |
---|
13 | |
---|
14 | c Declarations: |
---|
15 | c ============== |
---|
16 | c |
---|
17 | c ARGUMENTS |
---|
18 | c """"""""" |
---|
19 | |
---|
20 | integer lmo ! dimensions ancienne couches (input) |
---|
21 | integer lmn ! dimensions nouvelle couches (input) |
---|
22 | |
---|
23 | real apso(lmo),bpso(lmo)! anciennes coord hybrides midlayer (input) |
---|
24 | real aps(lmn), bps(lmn)! nouvelles coord hybrides (midlayer) (input) |
---|
25 | |
---|
26 | integer Nhoriz ! nombre de point horizontale (input) |
---|
27 | real ps(nhoriz) !pression de surface (input) |
---|
28 | |
---|
29 | real varo(Nhoriz,lmo) ! var dans l''ancienne grille (input) |
---|
30 | real varn(Nhoriz,lmn) ! var dans la nouvelle grille (output) |
---|
31 | |
---|
32 | c Autres variables |
---|
33 | c """""""""""""""" |
---|
34 | integer n, ln ,lo |
---|
35 | real coef |
---|
36 | REAL sigmo(lmo) ! niveau sigma des variables dans les anciennes coord |
---|
37 | REAL sigmn(lmn) ! niveau sigma des variables dans les nouvelles coord |
---|
38 | |
---|
39 | c run |
---|
40 | c ==== |
---|
41 | |
---|
42 | do n=1,Nhoriz |
---|
43 | do ln=1,lmn |
---|
44 | sigmn(ln)=aps(ln)/ps(n)+bps(ln) |
---|
45 | end do |
---|
46 | do lo=1,lmo |
---|
47 | sigmo(lo)=apso(lo)/ps(n)+bpso(lo) |
---|
48 | end do |
---|
49 | |
---|
50 | do ln=1,lmn |
---|
51 | if (sigmn(ln).ge.sigmo(1))then |
---|
52 | varn(n,ln) = varo(n,1) |
---|
53 | else if (sigmn(ln).le.sigmo(lmo)) then |
---|
54 | varn(n,ln) = varo(n,lmo) |
---|
55 | else |
---|
56 | do lo =1,lmo-1 |
---|
57 | if ( (sigmn(ln).le.sigmo(lo)).and. |
---|
58 | & (sigmn(ln).gt.sigmo(lo+1)) )then |
---|
59 | coef = (sigmn(ln)-sigmo(lo))/(sigmo(lo+1)-sigmo(lo)) |
---|
60 | varn(n,ln)=varo(n,lo) +coef*(varo(n,lo+1)-varo(n,lo)) |
---|
61 | end if |
---|
62 | end do |
---|
63 | end if |
---|
64 | end do |
---|
65 | |
---|
66 | end do |
---|
67 | |
---|
68 | |
---|
69 | return |
---|
70 | end |
---|