source: trunk/libf/phyvenus/load_psi.F @ 101

Last change on this file since 101 was 101, checked in by slebonnois, 14 years ago

SL: modifications pour arriver a compiler le gcm VENUS !
Ca marche !
A noter: modifs de makelmdz

File size: 4.2 KB
Line 
1      SUBROUTINE load_psi(
2     S              psurf, ztop, ksive,
3     S              temp, psimap, deltapsimap)
4     
5      use dimphy
6      IMPLICIT none
7
8#include "dimensions.h"
9#include "YOMCST.h"
10#include "comcstVE.h"
11C
12C     ------------------------------------------------------------------
13C
14C     PURPOSE.
15C     --------
16C
17c     This routine loads the longwave matrix of factors Ksi
18c     (interpolated for a given column)
19c     to build the Net Exchange Rates matrix Psi.
20c     Psi(i,j,nu) = Ksi(i,j,nu) * ( B(i,nu)-B(j,nu) )
21c     
22c     The Ksi matrixes have been computed by Vincent Eymet
23C
24c     The NER matrix is then integrated in frequency.
25c
26C     AUTHOR.
27C     -------
28C        Sebastien Lebonnois
29C
30C     MODIFICATIONS.
31C     --------------
32C        version multimatrice (topographie, sommet nuages): 20/12/2006
33C     ------------------------------------------------------------------
34C
35C* ARGUMENTS:
36C
37c inputs
38      real   psurf(klon)           ! Surface pressure
39      real   ztop(klon)            ! Altitude of the top of cloud deck (km)
40      real   ksive(0:kflev+1,0:kflev+1,nnuve,nbmat)  ! ksi matrixes in Vincent's file
41      real   temp(klon,0:kflev+1)  ! Temperature in layer (K)
42c outputs
43      real   psimap(0:kflev+1,0:kflev+1,klon)
44      real   deltapsimap(0:kflev+1,0:kflev+1,klon)
45
46c local variables
47      integer i,j,ig,band,nlve
48      integer mat,m,mat0
49      character*100 file
50      real   bplck(0:kflev+1,nnuve)    ! Planck luminances in table layers
51      real   y(0:kflev,nnuve)          ! intermediaire Planck
52      real   zdblay(0:kflev+1,nnuve)   ! gradient en temperature de planck
53      real   ksi
54      real   factp,factz
55
56      nlve = kflev  ! (doit correspondre, pour bplck, y et zdblay)
57
58c -----------------------
59c Main loop on grid point
60c -----------------------
61      do ig=1,klon
62
63c Planck function
64c ---------------
65
66       do band=1,nnuve
67         do j=0,nlve
68c B(T,l) = al/(exp(bl/T)-1)
69           y(j,band) = exp(bl(band)/temp(ig,j))-1.
70           bplck(j,band) = al(band)/(y(j,band))
71           zdblay(j,band) = al(band)*bl(band)*exp(bl(band)/temp(ig,j))/
72     .                 ((temp(ig,j)*temp(ig,j))*(y(j,band)*y(j,band)))
73         enddo
74         bplck(nlve+1,band) = 0.0
75         zdblay(nlve+1,band)= 0.0
76       enddo
77
78c interpolating ksi
79c  and
80c computing psi and deltapsi
81c ---------------------------
82
83c init
84       do j=0,nlve+1
85        do i=0,nlve+1
86         psimap(i,j,ig) = 0.0  ! positif quand nrj de i->j
87         deltapsimap(i,j,ig) = 0.0
88        enddo
89       enddo
90
91c finding the right matrixes
92       mat0 = 0
93       do mat=1,nbmat-nbztopve
94         if (  (psurfve(mat).ge.psurf(ig))
95     .    .and.(psurfve(mat+nbztopve).lt.psurf(ig))
96     .    .and.(ztopve(mat).lt.ztop(ig))
97     .    .and.(ztopve(mat+1).ge.ztop(ig)) ) then
98              mat0  = mat
99c             print*,'ig=',ig,'  mat0=',mat
100              factp = (psurf(ig)            -psurfve(mat))
101     .               /(psurfve(mat+nbztopve)-psurfve(mat))
102              factz = (ztop(ig)     -ztopve(mat))
103     .               /(ztopve(mat+1)-ztopve(mat))
104         endif
105       enddo
106       if (mat0.eq.0) then
107         write(*,*) 'This is subroutine load_psi'
108         print*,'Probleme pour interpolation au point ig=',ig
109         print*,'psurf = ',psurf(ig),' ztop = ',ztop(ig)
110         stop
111       endif
112
113c------------------
114c !!TEST!! Matrice unique fixee: psurf = 90 bar, ztop = 70
115c      mat0 = 24
116c      print*,'MATRICE UNIQUE: ',mat0,' / ps=',psurfve(mat0),
117c    .                                ' / ztop=',ztopve(mat0)
118c------------------
119
120c interpolation of ksi and computation of psi,deltapsi
121       do band=1,nnuve
122        do j=0,nlve+1
123         do i=0,nlve+1
124          ksi = ksive(i,j,band,mat0)*(1-factz)*(1-factp)
125     .         +ksive(i,j,band,mat0+1)*factz  *(1-factp)
126     .         +ksive(i,j,band,mat0+nbztopve)*(1-factz)*factp
127     .         +ksive(i,j,band,mat0+nbztopve+1)*factz  *factp
128         psimap(i,j,ig) = psimap(i,j,ig) +
129     .          ksi*(bplck(i,band)-bplck(j,band))
130         deltapsimap(i,j,ig) = deltapsimap(i,j,ig) +
131     .          ksi*zdblay(i,band)
132         enddo
133        enddo
134       enddo
135
136      enddo !ig
137c -----------------------
138c End loop on grid point
139c -----------------------
140
141c     print*,"LOAD_PSI OK"
142
143      return
144      end
145
Note: See TracBrowser for help on using the repository browser.