source: trunk/LMDZ.VENUS/libf/phyvenus/load_ksi.F @ 1704

Last change on this file since 1704 was 1675, checked in by slebonnois, 8 years ago

SL: update of xml file for xios output + a few modifications for run with uppr atmosphere

File size: 4.3 KB
Line 
1      SUBROUTINE load_ksi(ksive)
2     
3      use dimphy
4      IMPLICIT none
5
6#include "YOMCST.h"
7#include "comcstVE.h"
8C
9C     ------------------------------------------------------------------
10C
11C     PURPOSE.
12C     --------
13C
14c     This routine loads the longwave matrix of factors Ksi
15c     
16c     The Ksi matrixes have been computed by Vincent Eymet
17C
18C     AUTHOR.
19C     -------
20C        Sebastien Lebonnois
21C
22C     MODIFICATIONS.
23C     --------------
24C       
25c   New ksi matrix: possibility of different cloud model fct of lat   05/2014
26C     ------------------------------------------------------------------
27C
28C* ARGUMENTS:
29C
30c inputs
31      real   psurf(klon)           ! Surface pressure
32c outputs
33      real   ksive(0:klev+1,0:klev+1,nnuve,nbmat)  ! ksi matrixes in Vincent's file
34
35c local variables
36      integer i,j,isza,ips,band,pve,sve,nlve
37      integer lat,Nb,m,mat
38      character*9 tmp1
39      character*100 file
40      CHARACTER*2 str2
41      real   lambda(nnuve)            ! wavelenght in table (mu->m, middle of interval)
42      real   lambdamin(nnuve),lambdamax(nnuve) ! in microns
43      real   dlambda                  ! in microns
44
45      nlve = klev
46
47cc      GG modif below
48c----------------------------------
49c   Initialisation of values to 0
50c     (for all vertical levels)
51c----------------------------------
52
53      ksive(0:klev+1,0:klev+1,nnuve,nbmat) = 0.0
54
55c ------------------------
56c Loading the ksi file
57c ------------------------
58
59      file = "ksi_global.txt"
60      open(10,file=file)
61     
62      read(10,*)
63      read(10,*) nlatve
64      read(10,*)
65
66      write(*,*) 'This is subroutine load_ksi'
67      write(*,*) 'Nb of lat bands:',nlatve
68     
69      do lat=1,nlatve
70        read(10,*) !line for lat range
71        read(10,*) indexve(lat)
72        read(10,*) nbpsve(lat)
73        read(10,*)
74        read(10,*) nbszave(lat)
75        read(10,*)
76       
77        do isza=1,nbszave(lat)
78          do ips=1,nbpsve(lat)
79         
80        read(10,*) (tmp1,j=1,3),mat    !line for matrix number
81        read(10,*) (tmp1,j=1,2),pve
82        psurfve(ips,lat) = pve*1.e5    ! pve in bar, psurfve in Pa
83        read(10,*) (tmp1,j=1,3),sve
84        szave(isza,lat) = cos(sve*RPI/180.) ! conversion in mu0
85        read(10,*)
86        read(10,*) m,Nb
87cc      GG modif below 
88        if (nlve.le.78.and.m.ne.nlve) then
89         write(*,*) 'This is subroutine load_ksi'
90         print*,'Dimension problem between ksi.txt and nlve'
91         print*,'N levels = ',m,nlve
92         stop
93        endif
94        if (Nb.ne.nnuve) then
95         write(*,*) 'This is subroutine load_ksi'
96         print*,'Dimension problem between ksi.txt and nnuve'
97         print*,'N freq = ',Nb,nnuve
98         stop
99        endif
100c     Now reading ksi matrix index "mat"
101        write(str2,'(i2.2)') m+2
102        do band=1,Nb
103         read(10,*) lambdamin(band),lambdamax(band)
104         do i=0,m+1
105            read(10,'('//str2//'e17.9)') (ksive(i,j,band,mat),j=0,m+1) ! no unit
106         enddo                  ! i
107        enddo                     ! band
108c       print*,"Matrice ",mat," lue"
109c       print*,"   psurf=",psurfve(ips,lat)," bars"
110        if (mat+1.gt.nbmat) then
111         write(*,*) 'This is subroutine load_ksi'
112         print*,'Dimension problem between ksi.txt and nbmat'
113         print*,'(max number of matrixes)'
114         print*,'nbmat (in comcstVE.h) should be raised'
115         stop
116        endif
117
118          enddo    ! ips
119        enddo      ! isza
120      enddo        ! lat
121     
122      write(*,*) 'Total nb of matrixes:',mat
123     
124      close(10)
125
126c central wavelength and wavelength width
127      do band=1,nnuve
128         lambda(band)=(lambdamin(band)+lambdamax(band))/2.*1.e-6   ! in m
129         dlambda     =(lambdamax(band)-lambdamin(band))            ! in microns
130c        print*,band,lambdamin(band),dlambda,lambdamax(band)
131
132c sign convention for ksi,
133c and taking into account the wavelength width (in microns):
134         do mat=1,nbmat
135         do i=0,nlve+1
136           do j=0,nlve+1
137              ksive(i,j,band,mat) = +ksive(i,j,band,mat)*dlambda    ! in µm
138           enddo
139         enddo
140         enddo
141c computing coeff al and bl for Planck luminance
142         al(band) = 2.*RHPLA*RCLUM*RCLUM/(lambda(band))**5.
143c in W/m²/m
144c We need W/m²/µm :
145     .                * 1.e-6
146         bl(band) = RHPLA*RCLUM/(RKBOL*lambda(band))
147      enddo
148     
149      print*,"LOAD_KSI OK"
150
151      return
152      end
153
Note: See TracBrowser for help on using the repository browser.