Ignore:
Timestamp:
May 15, 2013, 5:39:25 PM (12 years ago)
Author:
jleconte
Message:

15/05/2013 == JL

  • correction in radiative scheme to enforce double precision
Location:
trunk/LMDZ.GENERIC/libf/phystd
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/LMDZ.GENERIC/libf/phystd/blackl.F

    r253 r959  
    44
    55      ! physical constants
    6       sigma=5.6693d-08
     6      sigma=5.67032D-8
    77      pi=datan(1.d0)*4.d0
    88      c0=2.9979d+08
  • trunk/LMDZ.GENERIC/libf/phystd/gfluxi.F

    r804 r959  
    7575!           endif
    7676! Prevent this with an if statement:
    77         if (W0(L).eq.1.) then
    78            W0(L) = 0.99999
     77        if (W0(L).eq.1.D0) then
     78           W0(L) = 0.99999D0
    7979        endif
    8080!----------------------------------------------------
    8181
    82         ALPHA(L) = SQRT( (1.0-W0(L))/(1.0-W0(L)*COSBAR(L)) )
    83         LAMDA(L) = ALPHA(L)*(1.0-W0(L)*COSBAR(L))/UBARI
    84 
    85         !NT2   = TLEV(2*L+2)*10.0D0-499
    86         !NT    = TLEV(2*L)*10.0D0-499
     82        ALPHA(L) = SQRT( (1.0D0-W0(L))/(1.0D0-W0(L)*COSBAR(L)) )
     83        LAMDA(L) = ALPHA(L)*(1.0D0-W0(L)*COSBAR(L))/UBARI
     84
    8785        NT    = int(TLEV(2*L)*NTfac)   - NTstar+1
    8886        NT2   = int(TLEV(2*L+2)*NTfac) - NTstar+1
     
    9795
    9896      if (W0(L).eq.1.) then
    99           W0(L) = 0.99999
     97          W0(L) = 0.99999D0
    10098      end if
    10199
    102       ALPHA(L) = SQRT( (1.0-W0(L))/(1.0-W0(L)*COSBAR(L)) )
    103       LAMDA(L) = ALPHA(L)*(1.0-W0(L)*COSBAR(L))/UBARI
    104 
    105       !NT    = TLEV(2*L+1)*10.0D0-499
    106       !NT2   = TLEV(2*L)*10.0D0-499
     100      ALPHA(L) = SQRT( (1.0D0-W0(L))/(1.0D0-W0(L)*COSBAR(L)) )
     101      LAMDA(L) = ALPHA(L)*(1.0D0-W0(L)*COSBAR(L))/UBARI
     102
    107103      NT    = int(TLEV(2*L+1)*NTfac) - NTstar+1
    108104      NT2   = int(TLEV(2*L)*NTfac)   - NTstar+1
     
    111107
    112108      DO L=1,L_NLAYRAD
    113         GAMA(L) = (1.0-ALPHA(L))/(1.0+ALPHA(L))
    114         TERM    = UBARI/(1.0-W0(L)*COSBAR(L))
     109        GAMA(L) = (1.0D0-ALPHA(L))/(1.0D0+ALPHA(L))
     110        TERM    = UBARI/(1.0D0-W0(L)*COSBAR(L))
    115111
    116112C       CP AND CM ARE THE CPLUS AND CMINUS TERMS EVALUATED AT THE
     
    137133
    138134        EP    = EXP( MIN((LAMDA(L)*DTAU(L)),TAUMAX))
    139         EM    = 1.0/EP
     135        EM    = 1.0D0/EP
    140136        E1(L) = EP+GAMA(L)*EM
    141137        E2(L) = EP-GAMA(L)*EM
     
    159155        DTAUK = TAUCUM(2*L+1)-TAUCUM(2*L)
    160156        EP    = EXP(MIN(LAMDA(L)*DTAUK,TAUMAX)) ! CLIPPED EXPONENTIAL
    161         EM    = 1.0/EP
     157        EM    = 1.0D0/EP
    162158        TERM  = UBARI/(1.-W0(L)*COSBAR(L))
    163159
     
    181177
    182178      EP   = EXP(MIN((LAMDA(L)*DTAU(L)),TAUMAX)) ! CLIPPED EXPONENTIAL
    183       EM   = 1.0/EP
    184       TERM = UBARI/(1.-W0(L)*COSBAR(L))
     179      EM   = 1.0D0/EP
     180      TERM = UBARI/(1.D0-W0(L)*COSBAR(L))
    185181
    186182C     CP AND CM ARE THE CPLUS AND CMINUS TERMS EVALUATED AT THE
     
    199195C     FLUX AT THE PTOP LEVEL
    200196
    201       EP   = 1.0
    202       EM   = 1.0
    203       TERM = UBARI/(1.0-W0(1)*COSBAR(1))
     197      EP   = 1.0D0
     198      EM   = 1.0D0
     199      TERM = UBARI/(1.0D0-W0(1)*COSBAR(1))
    204200
    205201C     CP AND CM ARE THE CPLUS AND CMINUS TERMS EVALUATED AT THE
  • trunk/LMDZ.GENERIC/libf/phystd/physiq.F90

    r955 r959  
    326326      real mass(ngrid,nlayermx),massarea(ngrid,nlayermx)
    327327      real dEtot, dEtots, AtmToSurf_TurbFlux
    328       real dEtotSW, dEtotsSW, dEtotLW, dEtotsLW
     328      real,save :: dEtotSW, dEtotsSW, dEtotLW, dEtotsLW
    329329      real dEzRadsw(ngrid,nlayermx),dEzRadlw(ngrid,nlayermx),dEzdiff(ngrid,nlayermx)
    330330      real dEdiffs(ngrid),dEdiff(ngrid)
     
    816816            dEtotSW  = cpp*SUM(massarea(:,:)*zdtsw(:,:))/totarea
    817817            dEtotLW  = cpp*SUM(massarea(:,:)*zdtlw(:,:))/totarea
    818             dEtotsSW = SUM(fluxsurf_sw(:)*(1.-albedo(:))*area(:))/totarea
     818            dEtotsSW = SUM(fluxsurf_sw(:)*(1.-albedo(:))*area(:))/totarea !JL13 carefull, albedo can have changed since the last time we called corrk
    819819            dEtotsLW = SUM((fluxsurf_lw(:)*emis(:)-zplanck(:))*area(:))/totarea
    820820            dEzRadsw(:,:)=cpp*mass(:,:)*zdtsw(:,:)
     
    11891189           ! find qtot
    11901190           if(watertest)then
    1191               iq=3
     1191              iq=igcm_h2o_ice
    11921192              dWtot = SUM(massarea(:,:)*pq(:,:,iq))*ptimestep/totarea
    11931193              dWtots = SUM(massarea(:,:)*pdq(:,:,iq))*ptimestep/totarea
     
    12031203           ! find qtot
    12041204           if(watertest)then
    1205               iq=3
     1205              iq=igcm_h2o_ice
    12061206              dWtot = SUM(massarea(:,:)*pq(:,:,iq))*ptimestep/totarea
    12071207              dWtots = SUM(massarea(:,:)*pdq(:,:,iq))*ptimestep/totarea
     
    13971397           print*,Ts1,Ts2,Ts3,TsS
    13981398         endif
    1399       endif
     1399      else
     1400         if (cursor == 1) then
     1401           print*,'  ave[Tsurf]     min[Tsurf]     max[Tsurf]'
     1402           print*,Ts1,Ts2,Ts3
     1403         endif         
     1404      end if
    14001405
    14011406!     ---------------------------------------------------------
     
    14261431         endif
    14271432
     1433         print*,'  ISR            ASR            OLR            GND            DYN [W m^-2]'
     1434         print*, ISR,ASR,OLR,GND,DYN
    14281435         if(enertest)then
    1429             print*,'  ISR            ASR            OLR            GND            DYN [W m^-2]'
    1430             print*, ISR,ASR,OLR,GND,DYN
    14311436            print*,'SW flux/heating difference SW++ - ASR = ',dEtotSW+dEtotsSW-ASR,' W m-2'
    14321437            print*,'LW flux/heating difference LW++ - OLR = ',dEtotLW+dEtotsLW+OLR,' W m-2'
     
    17651770          do ig=1,ngrid
    17661771             if(tau_col(ig).gt.1.e3)then
    1767                 print*,'WARNING: tau_col=',tau_col(ig)
    1768                 print*,'at ig=',ig,'in PHYSIQ'
     1772!                print*,'WARNING: tau_col=',tau_col(ig)
     1773!                print*,'at ig=',ig,'in PHYSIQ'
    17691774             endif
    17701775          end do
  • trunk/LMDZ.GENERIC/libf/phystd/radcommon_h.F90

    r878 r959  
    128128      real*8, parameter :: SCALEP = 1.00D+2
    129129
    130       real*8, parameter :: sigma = 5.67032e-8
     130      real*8, parameter :: sigma = 5.67032D-8
    131131
    132132      real*8 Cmk
  • trunk/LMDZ.GENERIC/libf/phystd/setspi.F90

    r789 r959  
    6868      mm=0
    6969
    70       forceEC=.false.
     70      forceEC=.true.
    7171      planckcheck=.true.
    7272
  • trunk/LMDZ.GENERIC/libf/phystd/sfluxi.F

    r600 r959  
    4343C     ZERO THE NET FLUXES
    4444   
    45       NFLUXTOPI = 0.0
     45      NFLUXTOPI = 0.0D0
    4646
    4747      DO NW=1,L_NSPECTI
    48         NFLUXTOPI_nu(NW) = 0.0
     48        NFLUXTOPI_nu(NW) = 0.0D0
    4949        DO L=1,L_NLAYRAD
    50            FLUXUPI_nu(L,NW) = 0.0
    51 
    52               fup_tmp(nw)=0.0
    53               fdn_tmp(nw)=0.0
     50           FLUXUPI_nu(L,NW) = 0.0D0
     51
     52              fup_tmp(nw)=0.0D0
     53              fdn_tmp(nw)=0.0D0
    5454
    5555        END DO
     
    5757
    5858      DO L=1,L_NLAYRAD
    59         FMNETI(L)  = 0.0
    60         FLUXUPI(L) = 0.0
    61         FLUXDNI(L) = 0.0
     59        FMNETI(L)  = 0.0D0
     60        FLUXUPI(L) = 0.0D0
     61        FLUXDNI(L) = 0.0D0
    6262      END DO
    6363 
     
    102102         
    103103          if(TAUGSURF(NW,NG).lt. TLIMIT) then
    104             fzero = fzero + (1.0-FZEROI(NW))*GWEIGHT(NG)
     104            fzero = fzero + (1.0D0-FZEROI(NW))*GWEIGHT(NG)
    105105            goto 30
    106106          end if
     
    111111 
    112112          TAUTOP = DTAUI(1,NW,NG)*PLEV(2)/(PLEV(4)-PLEV(2))
    113           BTOP   = (1.0-EXP(-TAUTOP/UBARI))*PLTOP
     113          BTOP   = (1.0D0-EXP(-TAUTOP/UBARI))*PLTOP
    114114 
    115115C         WE CAN NOW SOLVE FOR THE COEFFICIENTS OF THE TWO STREAM
     
    127127
    128128          NFLUXTOPI = NFLUXTOPI+FTOPUP*DWNI(NW)*GWEIGHT(NG)*
    129      *                           (1.0-FZEROI(NW))
     129     *                           (1.0D0-FZEROI(NW))
    130130
    131131c         and same thing by spectral band... (RDW)
    132132          NFLUXTOPI_nu(NW) = NFLUXTOPI_nu(NW)
    133      *      +FTOPUP*DWNI(NW)*GWEIGHT(NG)*(1.0-FZEROI(NW))
     133     *      +FTOPUP*DWNI(NW)*GWEIGHT(NG)*(1.0D0-FZEROI(NW))
    134134
    135135
     
    139139
    140140            FMNETI(L)  = FMNETI(L)+(FMUPI(L)-FMDI(L))*DWNI(NW)*
    141      *                              GWEIGHT(NG)*(1.0-FZEROI(NW))
     141     *                              GWEIGHT(NG)*(1.0D0-FZEROI(NW))
    142142            FLUXUPI(L) = FLUXUPI(L) + FMUPI(L)*DWNI(NW)*GWEIGHT(NG)*
    143      *                                (1.0-FZEROI(NW))
     143     *                                (1.0D0-FZEROI(NW))
    144144            FLUXDNI(L) = FLUXDNI(L) + FMDI(L)*DWNI(NW)*GWEIGHT(NG)*
    145      *                                (1.0-FZEROI(NW))
     145     *                                (1.0D0-FZEROI(NW))
    146146
    147147c         and same thing by spectral band... (RW)
    148148            FLUXUPI_nu(L,NW) = FLUXUPI_nu(L,NW) +
    149      *                FMUPI(L)*DWNI(NW)*GWEIGHT(NG)*(1.0-FZEROI(NW))
     149     *                FMUPI(L)*DWNI(NW)*GWEIGHT(NG)*(1.0D0-FZEROI(NW))
    150150
    151151          END DO
     
    162162
    163163       TAUTOP = DTAUI(1,NW,NG)*PLEV(2)/(PLEV(4)-PLEV(2))
    164        BTOP   = (1.0-EXP(-TAUTOP/UBARI))*PLTOP
     164       BTOP   = (1.0D0-EXP(-TAUTOP/UBARI))*PLTOP
    165165
    166166C      WE CAN NOW SOLVE FOR THE COEFFICIENTS OF THE TWO STREAM
Note: See TracChangeset for help on using the changeset viewer.