[1056] | 1 | c****************************************************** |
---|
| 2 | SUBROUTINE interp_vert(varo,varn,lmo,lmn,apo,bpo, |
---|
| 3 | & ap,bp,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 modif pour entrees avec ap et bp au lieu de aps et bps (SL,2007) |
---|
| 11 | c********************************************************** |
---|
| 12 | |
---|
| 13 | IMPLICIT NONE |
---|
| 14 | |
---|
| 15 | c Declarations: |
---|
| 16 | c ============== |
---|
| 17 | c |
---|
| 18 | c ARGUMENTS |
---|
| 19 | c """"""""" |
---|
| 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 | |
---|
| 33 | c Autres variables |
---|
| 34 | c """""""""""""""" |
---|
| 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 | |
---|
| 43 | c run |
---|
| 44 | c ==== |
---|
| 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 |
---|