source: trunk/LMDZ.TITAN/libf/phytitan/interp_vert.F @ 1243

Last change on this file since 1243 was 1056, checked in by slebonnois, 11 years ago

SL: Titan runs ! see DOC/chantiers/commit_importants.log

File size: 2.4 KB
RevLine 
[1056]1c******************************************************
2      SUBROUTINE   interp_vert(varo,varn,lmo,lmn,apo,bpo,
3     &             ap,bp,ps,Nhoriz)
4c
5c interpolation lineaire pour passer
6c a une nouvelle discretisation verticale pour
7c les variables de GCM
8c Francois Forget (01/1995)
9c Modif pour coordonnees hybrides FF (03/2003)
10c modif pour entrees avec ap et bp au lieu de aps et bps (SL,2007)
11c**********************************************************
12
13      IMPLICIT NONE
14
15c   Declarations:
16c ==============
17c
18c  ARGUMENTS
19c  """""""""
20
21       integer lmo ! dimensions ancienne couches (input)
22       integer lmn ! dimensions nouvelle couches (input)
23
24       real apo(lmo+1),bpo(lmo+1)! anciennes coord hybrides interlayer (input)
25       real ap(lmn+1), bp(lmn+1)! nouvelles coord hybrides (interlayer) (input)
26
27       integer Nhoriz ! nombre de point horizontale (input)
28       real ps(nhoriz) !pression de surface (input)
29
30       real varo(Nhoriz,lmo) ! var dans l''ancienne grille (input)
31       real varn(Nhoriz,lmn) ! var dans la nouvelle grille (output)
32
33c Autres variables
34c """"""""""""""""
35       integer n, ln ,lo
36       real coef
37       REAL sigmo(lmo) ! niveau sigma des variables dans les anciennes coord
38       REAL sigmn(lmn) ! niveau sigma des variables dans les nouvelles coord
39
40       real apso(lmo),bpso(lmo)! anciennes coord hybrides midlayer
41       real aps(lmn), bps(lmn)! nouvelles coord hybrides (midlayer)
42
43c run
44c ====
45
46        do ln=1,lmn
47            aps(ln)=(ap(ln)+ap(ln+1))/2.
48            bps(ln)=(bp(ln)+bp(ln+1))/2.
49        end do
50        do lo=1,lmo
51            apso(lo)=(apo(lo)+apo(lo+1))/2.
52            bpso(lo)=(bpo(lo)+bpo(lo+1))/2.
53        end do
54
55      do n=1,Nhoriz
56
57        do ln=1,lmn
58            sigmn(ln)=aps(ln)/ps(n)+bps(ln)
59        end do
60        do lo=1,lmo
61            sigmo(lo)=apso(lo)/ps(n)+bpso(lo)
62        end do
63
64        do ln=1,lmn
65           if (sigmn(ln).ge.sigmo(1))then
66             varn(n,ln) =  varo(n,1) 
67           else if (sigmn(ln).le.sigmo(lmo)) then
68             varn(n,ln) =  varo(n,lmo)
69           else
70              do lo =1,lmo-1
71                if ( (sigmn(ln).le.sigmo(lo)).and.
72     &             (sigmn(ln).gt.sigmo(lo+1)) )then
73                  coef = (sigmn(ln)-sigmo(lo))/(sigmo(lo+1)-sigmo(lo))
74                   varn(n,ln)=varo(n,lo) +coef*(varo(n,lo+1)-varo(n,lo))
75                end if
76              end do           
77           end if
78         end do
79
80      end do
81
82
83      return
84      end
Note: See TracBrowser for help on using the repository browser.