Ignore:
Timestamp:
Jun 26, 2014, 12:25:31 PM (10 years ago)
Author:
slebonnois
Message:

SL: many bug corrections in phyvenus, some cleaning, and a new ksi matrix format for Venus IR

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/LMDZ.VENUS/libf/phyvenus/load_ksi.F

    r892 r1301  
    2323C     MODIFICATIONS.
    2424C     --------------
    25 C        version multimatrice (topographie, sommet nuages): 20/12/2006
     25C       
     26c   New ksi matrix: possibility of different cloud model fct of lat   05/2014
    2627C     ------------------------------------------------------------------
    2728C
     
    3031c inputs
    3132      real   psurf(klon)           ! Surface pressure
    32       real   ztop(klon)            ! Altitude of the top of cloud deck (km)
    3333c outputs
    3434      real   ksive(0:klev+1,0:klev+1,nnuve,nbmat)  ! ksi matrixes in Vincent's file
    3535
    3636c local variables
    37       integer i,j,ig,band,pve,nlve
    38       integer mat,Nb,m,Nmat,nl_init,mat0
    39       parameter(nl_init=8)
     37      integer i,j,isza,ips,band,pve,sve,nlve
     38      integer lat,Nb,m,mat
    4039      character*9 tmp1
    4140      character*100 file
     41      CHARACTER*2 str2
    4242      real   lambda(nnuve)            ! wavelenght in table (mu->m, middle of interval)
    4343      real   lambdamin(nnuve),lambdamax(nnuve) ! in microns
    44       real   dlambda                  ! cm-1
     44      real   dlambda                  ! in microns
    4545
    4646      nlve = klev
     
    5353      open(10,file=file)
    5454     
    55       do i=1,nl_init-1
    56          read(10,*)
    57       enddo
    58       read(10,*) (tmp1,i=1,4),Nmat
     55      read(10,*)
     56      read(10,*) nlatve
     57      read(10,*)
    5958
    60       if (nbmat.ne.Nmat) then
    61          write(*,*) 'This is subroutine load_ksi'
    62          print*,'Probleme de dimension entre ksi.txt et le param nbmat'
    63          print*,'Nb matrices = ',nbmat,Nmat
    64          stop
    65       endif
    66 
    67       do mat=1,nbmat
     59      write(*,*) 'This is subroutine load_ksi'
     60      write(*,*) 'Nb of lat bands:',nlatve
     61     
     62      do lat=1,nlatve
     63        read(10,*) !line for lat range
     64        read(10,*) indexve(lat)
     65        read(10,*) nbpsve(lat)
    6866        read(10,*)
    69         read(10,*)
     67        read(10,*) nbszave(lat)
     68        read(10,*)
     69       
     70        do isza=1,nbszave(lat)
     71          do ips=1,nbpsve(lat)
     72         
     73        read(10,*) (tmp1,j=1,3),mat    !line for matrix number
    7074        read(10,*) (tmp1,j=1,2),pve
    71         psurfve(mat) = pve*1.e5  ! pve en bar, psurfve en Pa
    72         read(10,*) (tmp1,j=1,7),ztopve(mat)
    73         ztopve(mat) = ztopve(mat)*1.e-3 ! passage en km
     75        psurfve(ips,lat) = pve*1.e5    ! pve in bar, psurfve in Pa
     76        read(10,*) (tmp1,j=1,3),sve
     77        szave(isza,lat) = cos(sve*RPI/180.) ! conversion in mu0
    7478        read(10,*)
    7579        read(10,*) m,Nb
    7680        if (m.ne.nlve) then
    7781         write(*,*) 'This is subroutine load_ksi'
    78          print*,'Probleme de dimension entre ksi.txt et le param nlve'
     82         print*,'Dimension problem between ksi.txt and nlve'
    7983         print*,'N levels = ',m,nlve
    8084         stop
     
    8286        if (Nb.ne.nnuve) then
    8387         write(*,*) 'This is subroutine load_ksi'
    84          print*,'Probleme de dimension entre ksi.txt et le param nnuve'
     88         print*,'Dimension problem between ksi.txt and nnuve'
    8589         print*,'N freq = ',Nb,nnuve
    8690         stop
    8791        endif
    8892c     Now reading ksi matrix index "mat"
     93        write(str2,'(i2.2)') m+2
    8994        do band=1,Nb
    9095         read(10,*) lambdamin(band),lambdamax(band)
    9196         do i=0,m+1
    92             read(10,'(100e17.9)') (ksive(i,j,band,mat),j=0,m+1) ! sr/µm/cm¯¹
     97            read(10,'('//str2//'e17.9)') (ksive(i,j,band,mat),j=0,m+1) ! no unit
    9398         enddo                  ! i
    9499        enddo                     ! band
    95100c       print*,"Matrice ",mat," lue"
    96 c       print*,"   psurf=",psurfve(mat)," bars, Ztop=",ztopve(mat)," km"
    97       enddo  ! mat
     101c       print*,"   psurf=",psurfve(ips,lat)," bars"
     102        if (mat+1.gt.nbmat) then
     103         write(*,*) 'This is subroutine load_ksi'
     104         print*,'Dimension problem between ksi.txt and nbmat'
     105         print*,'(max number of matrixes)'
     106         print*,'nbmat (in comcstVE.h) should be raised'
     107         stop
     108        endif
     109
     110          enddo    ! ips
     111        enddo      ! isza
     112      enddo        ! lat
     113     
     114      write(*,*) 'Total nb of matrixes:',mat
    98115     
    99116      close(10)
    100117
    101 c longueur d'onde centrale et largeur de chaque bande
     118c central wavelength and wavelength width
    102119      do band=1,nnuve
    103          lambda(band)=(lambdamin(band)+lambdamax(band))/2.*1.e-6   ! en m
    104          dlambda     =(1./lambdamin(band)-1./lambdamax(band))*1.e4 ! en cm-1
     120         lambda(band)=(lambdamin(band)+lambdamax(band))/2.*1.e-6   ! in m
     121         dlambda     =(lambdamax(band)-lambdamin(band))            ! in microns
    105122c        print*,band,lambdamin(band),dlambda,lambdamax(band)
    106123
    107 c changement de convention (signe) pour ksi,
    108 c et prise en compte de la largeur de bande (en cm-1):
     124c sign convention for ksi,
     125c and taking into account the wavelength width (in microns):
    109126         do mat=1,nbmat
    110127         do i=0,nlve+1
    111128           do j=0,nlve+1
    112               ksive(i,j,band,mat) = -ksive(i,j,band,mat)*dlambda
     129              ksive(i,j,band,mat) = +ksive(i,j,band,mat)*dlambda    ! in µm
    113130           enddo
    114131         enddo
    115132         enddo
    116 c calcul des coeff al et bl pour luminance Planck
     133c computing coeff al and bl for Planck luminance
    117134         al(band) = 2.*RHPLA*RCLUM*RCLUM/(lambda(band))**5.
    118 c cette luminance doit etre en W/m²/sr/µm pour correspondre au calcul
    119 c des ksi. Ici, elle est en W/m²/sr/m donc il faut mettre un facteur 1.e-6
     135c in W/m²/m
     136c We need W/m²/µm :
    120137     .                * 1.e-6
    121138         bl(band) = RHPLA*RCLUM/(RKBOL*lambda(band))
Note: See TracChangeset for help on using the changeset viewer.