Ignore:
Timestamp:
May 16, 2013, 11:07:35 AM (12 years ago)
Author:
jleconte
Message:

15/05/2013 == JL

  • correction in radiative scheme to enforce double precision
  • corrects calculation of ISR
Location:
trunk/LMDZ.GENERIC/libf/phystd
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/LMDZ.GENERIC/libf/phystd/callcorrk.F90

    r952 r961  
    113113
    114114      REAL*8 tauaero(L_LEVELS+1,naerkind)
    115       REAL*8 nfluxtopv,nfluxtopi,nfluxtop
     115      REAL*8 nfluxtopv,nfluxtopi,nfluxtop,fluxtopvdn
    116116      real*8 nfluxoutv_nu(L_NSPECTV) ! outgoing band-resolved VI flux at TOA (W/m2)
    117117      real*8 nfluxtopi_nu(L_NSPECTI) ! net band-resolved IR flux at TOA (W/m2)
     
    125125      INTEGER icount
    126126
    127       real fluxtoplanet
    128127      real szangle
    129128      logical global1d
     
    291290
    292291!     how much light we get
    293       fluxtoplanet=0
    294292      do nw=1,L_NSPECTV
    295293         stel(nw)=stellarf(nw)/(dist_star**2)
    296          fluxtoplanet=fluxtoplanet + stel(nw)
    297294      end do
    298295
     
    657654         if(fract(ig) .ge. 1.0e-4) then ! only during daylight!
    658655
    659             fluxtoplanet=0.
    660 
    661656            if((ngrid.eq.1).and.(global1d))then
    662657               do nw=1,L_NSPECTV
    663658                  stel_fract(nw)= stel(nw) * 0.25 / acosz
    664                   fluxtoplanet=fluxtoplanet + stel_fract(nw)
    665659                                ! globally averaged = divide by 4
    666660                                ! but we correct for solar zenith angle
     
    669663               do nw=1,L_NSPECTV
    670664                  stel_fract(nw)= stel(nw) * fract(ig)
    671                   fluxtoplanet=fluxtoplanet + stel_fract(nw)
    672665               end do
    673666            endif
     
    679672            call sfluxv(dtauv,tauv,taucumv,albv,dwnv,wbarv,cosbv,  &
    680673                 acosz,stel_fract,gweight,                         &
    681                  nfluxtopv,nfluxoutv_nu,nfluxgndv_nu,              &
     674                 nfluxtopv,fluxtopvdn,nfluxoutv_nu,nfluxgndv_nu,              &
    682675                 fmnetv,fluxupv,fluxdnv,fzerov,taugsurf)
    683676
     
    709702
    710703!     Flux incident at the top of the atmosphere
    711          fluxtop_dn(ig)=fluxdnv(1)
     704         fluxtop_dn(ig)=fluxtopvdn
    712705
    713706         fluxtop_lw(ig)  = real(nfluxtopi)
  • trunk/LMDZ.GENERIC/libf/phystd/gfluxi.F

    r959 r961  
    156156        EP    = EXP(MIN(LAMDA(L)*DTAUK,TAUMAX)) ! CLIPPED EXPONENTIAL
    157157        EM    = 1.0D0/EP
    158         TERM  = UBARI/(1.-W0(L)*COSBAR(L))
     158        TERM  = UBARI/(1.D0-W0(L)*COSBAR(L))
    159159
    160160C       CP AND CM ARE THE CPLUS AND CMINUS TERMS EVALUATED AT THE
  • trunk/LMDZ.GENERIC/libf/phystd/inifis.F

    r952 r961  
    549549               write(*,*) "cpp=",cpp
    550550           ENDIF
    551          else
    552            mugaz=8.314*1000./pr
     551!         else
     552!           mugaz=8.314*1000./pr
    553553         endif
    554554         call su_gases
  • trunk/LMDZ.GENERIC/libf/phystd/optci.F90

    r918 r961  
    120120     ! if we have continuum opacities, we need dz
    121121     if(kastprof)then
    122         dz(k) = dpr(k)*(1000.0*8.3145/muvar(k))*TMID(K)/(g*PMID(K))
     122        dz(k) = dpr(k)*(1000.0d0*8.3145d0/muvar(k))*TMID(K)/(g*PMID(K))
    123123        U(k)  = (Cmk*mugaz/(muvar(k)))*DPR(k)
    124124     else
     
    149149
    150150! continuum absorption
    151         DCONT = 0.0
     151        DCONT = 0.0d0
    152152
    153153        if(continuum.and.(.not.graybody))then
     
    163163              endif
    164164
    165               dtemp=0.0
     165              dtemp=0.0d0
    166166              if(igas.eq.igas_N2)then
    167167
     
    180180                 do jgas=1,ngasmx
    181181                    p_cross = dble(PMID(k)*scalep*gfrac(jgas)*(1.-QVAR(k)))
    182                     dtempc  = 0.0
     182                    dtempc  = 0.0d0
    183183                    if(jgas.eq.igas_N2)then
    184184                       interm = indi(nw,igas,jgas)
     
    286286  end do
    287287
    288 
     288  DTAUKI(L_LEVELS+1,1:L_NSPECTI,1:L_NGAUSS)=0.d0
    289289  !=======================================================================
    290290  !     Now the full treatment for the layers, where besides the opacity
     
    315315
    316316        atemp = 0.
    317         if(DTAUI(L,NW,NG) .GT. 1.0E-9) then
     317        if(DTAUI(L,NW,NG) .GT. 1.0D-9) then
    318318           do iaer=1,naerkind
    319319              atemp = atemp +                                     &
     
    324324        else
    325325           WBARI(L,nw,ng) = 0.0D0
    326            DTAUI(L,NW,NG) = 1.0E-9
     326           DTAUI(L,NW,NG) = 1.0D-9
    327327        endif
    328328
    329         if(btemp(L,nw) .GT. 0.0) then
     329        if(btemp(L,nw) .GT. 0.0d0) then
    330330           cosbi(L,NW,NG) = atemp/btemp(L,nw)
    331331        else
     
    344344              DTAUI(L,nw,ng) = DTAUKI(K,NW,NG)+DTAUKI(K+1,NW,NG)! + 1.e-50
    345345
    346               if(DTAUI(L,NW,NG) .GT. 1.0E-9) then
     346              if(DTAUI(L,NW,NG) .GT. 1.0D-9) then
    347347
    348348                 WBARI(L,nw,ng) = btemp(L,nw)  / DTAUI(L,NW,NG)
     
    350350              else
    351351                 WBARI(L,nw,ng) = 0.0D0
    352                  DTAUI(L,NW,NG) = 1.0E-9
     352                 DTAUI(L,NW,NG) = 1.0D-9
    353353              endif
    354354
  • trunk/LMDZ.GENERIC/libf/phystd/physiq.F90

    r959 r961  
    14331433         print*,'  ISR            ASR            OLR            GND            DYN [W m^-2]'
    14341434         print*, ISR,ASR,OLR,GND,DYN
     1435
    14351436         if(enertest)then
    14361437            print*,'SW flux/heating difference SW++ - ASR = ',dEtotSW+dEtotsSW-ASR,' W m-2'
  • trunk/LMDZ.GENERIC/libf/phystd/setspi.F90

    r959 r961  
    127127
    128128      do M=1,L_NSPECTI
    129          WNOI(M)  = 0.5*(BWNI(M+1)+BWNI(M))
     129         WNOI(M)  = 0.5D0*(BWNI(M+1)+BWNI(M))
    130130         DWNI(M)  = BWNI(M+1)-BWNI(M)
    131          WAVEI(M) = 1.0E+4/WNOI(M)
    132          BLAMI(M) = 0.01/BWNI(M)         
    133       end do
    134       BLAMI(M) = 0.01/BWNI(M)
     131         WAVEI(M) = 1.0D+4/WNOI(M)
     132         BLAMI(M) = 0.01D0/BWNI(M)         
     133      end do
     134      BLAMI(M) = 0.01D0/BWNI(M)
    135135!     note M=L_NSPECTI+1 after loop due to Fortran bizarreness
    136136
     
    148148         a = 1.0D-2/BWNI(NW+1)
    149149         b = 1.0D-2/BWNI(NW)
    150          bpa = (b+a)/2.0
    151          bma = (b-a)/2.0
     150         bpa = (b+a)/2.0D0
     151         bma = (b-a)/2.0D0
    152152         do nt=NTstar,NTstop
    153153            T   = dble(NT)/NTfac
     
    167167         print*,'setspi: Force F=sigma*eps*T^4 for all values of T!'
    168168         do nt=NTstar,NTstop
    169             plancksum=0.0
     169            plancksum=0.0D0
    170170            T=dble(NT)/NTfac
    171171       
     
    185185      if(planckcheck)then
    186186         ! check energy conservation at lower temperature boundary
    187          plancksum=0.0
     187         plancksum=0.0D0
    188188         nt=NTstar
    189189         do NW=1,L_NSPECTI
     
    195195         
    196196         ! check energy conservation at upper temperature boundary
    197          plancksum=0.0
     197         plancksum=0.0D0
    198198         nt=NTstop
    199199         do NW=1,L_NSPECTI
  • trunk/LMDZ.GENERIC/libf/phystd/sfluxi.F

    r959 r961  
    7070      NTS   = int(TSURF*NTfac)-NTstar+1
    7171      NTT   = int(TTOP *NTfac)-NTstar+1
    72 !      NTS   = TSURF*10.0D0-499
    73 !      NTT   = TTOP *10.0D0-499
    7472
    7573!JL12 corrects the surface planck function so that its integral is equal to sigma Tsurf^4
     
    110108C         OR THE TOP LAYER WILL COOL TO SPACE UNPHYSICALLY
    111109 
    112           TAUTOP = DTAUI(1,NW,NG)*PLEV(2)/(PLEV(4)-PLEV(2))
     110!          TAUTOP = DTAUI(1,NW,NG)*PLEV(2)/(PLEV(4)-PLEV(2))
     111          TAUTOP = TAUCUMI(2,NW,NG)
    113112          BTOP   = (1.0D0-EXP(-TAUTOP/UBARI))*PLTOP
    114113 
     
    161160       NG     = L_NGAUSS
    162161
    163        TAUTOP = DTAUI(1,NW,NG)*PLEV(2)/(PLEV(4)-PLEV(2))
     162!       TAUTOP = DTAUI(1,NW,NG)*PLEV(2)/(PLEV(4)-PLEV(2))
     163       TAUTOP = TAUCUMI(2,NW,NG)
    164164       BTOP   = (1.0D0-EXP(-TAUTOP/UBARI))*PLTOP
    165165
  • trunk/LMDZ.GENERIC/libf/phystd/sfluxv.F

    r366 r961  
    11      SUBROUTINE SFLUXV(DTAUV,TAUV,TAUCUMV,RSFV,DWNV,WBARV,COSBV,
    2      *                  UBAR0,STEL,GWEIGHT,NFLUXTOPV,NFLUXOUTV_nu,
    3      *                  NFLUXGNDV_nu,
     2     *                  UBAR0,STEL,GWEIGHT,NFLUXTOPV,FLUXTOPVDN,
     3     *                  NFLUXOUTV_nu,NFLUXGNDV_nu,
    44     *                  FMNETV,FLUXUPV,FLUXDNV,FZEROV,taugsurf)
    55
     
    1818      real*8 STEL(L_NSPECTV)
    1919      real*8 FLUXUPV(L_NLAYRAD), FLUXDNV(L_NLAYRAD)
    20       real*8 NFLUXTOPV, FLUXUP, FLUXDN
     20      real*8 NFLUXTOPV, FLUXUP, FLUXDN,FLUXTOPVDN
    2121      real*8 NFLUXOUTV_nu(L_NSPECTV)
    2222      real*8 NFLUXGNDV_nu(L_NSPECTV)
     
    3737
    3838      NFLUXTOPV = 0.0
     39      FLUXTOPVDN = 0.0
    3940
    4041      DO NW=1,L_NSPECTV
     
    100101          NFLUXTOPV = NFLUXTOPV+(FLUXUP-FLUXDN)*GWEIGHT(NG)*
    101102     *                          (1.0-FZEROV(NW))
     103          FLUXTOPVDN = FLUXTOPVDN+FLUXDN*GWEIGHT(NG)*
     104     *                          (1.0-FZEROV(NW))
    102105          DO L=1,L_NLAYRAD
    103106            FMNETV(L)=FMNETV(L)+( FMUPV(L)-FMDV(L) )*
     
    156159
    157160        NFLUXTOPV = NFLUXTOPV+(FLUXUP-FLUXDN)*FZERO
     161        FLUXTOPVDN = FLUXTOPVDN+FLUXDN*FZERO
    158162        DO L=1,L_NLAYRAD
    159163          FMNETV(L)=FMNETV(L)+( FMUPV(L)-FMDV(L) )*FZERO
  • trunk/LMDZ.GENERIC/libf/phystd/sugas_corrk.F90

    r879 r961  
    372372
    373373         do nw=1,L_NSPECTI
    374             fzeroi(nw) = 0.
     374            fzeroi(nw) = 0.d0
    375375!            do nt=1,L_NTREF
    376376!               do np=1,L_NPREF
     
    378378!                     do ng = 1,L_NGAUSS
    379379!                        if(gasi8(nt,np,nh,nw,ng).lt.1.0e-25)then
    380 !                           fzeroi(nw)=fzeroi(nw)+1.
     380!                           fzeroi(nw)=fzeroi(nw)+1.d0
    381381!                        endif
    382382!                     end do
     
    388388
    389389         do nw=1,L_NSPECTV
    390             fzerov(nw) = 0.
     390            fzerov(nw) = 0.d0
    391391!            do nt=1,L_NTREF
    392392!               do np=1,L_NPREF
     
    394394!                     do ng = 1,L_NGAUSS
    395395!                        if(gasv8(nt,np,nh,nw,ng).lt.1.0e-25)then
    396 !                           fzerov(nw)=fzerov(nw)+1.
     396!                           fzerov(nw)=fzerov(nw)+1.d0
    397397!                        endif
    398398!                     end do
Note: See TracChangeset for help on using the changeset viewer.