Ignore:
Timestamp:
Mar 4, 2014, 11:32:02 AM (11 years ago)
Author:
sglmd
Message:

Latitude-dependent gravity field added. Option oblate = .true. in callphys.def, and three additional variables needed: J2, Rmean and MassPlanet?.

Location:
trunk/LMDZ.GENERIC/libf/phystd
Files:
9 edited

Legend:

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

    r1161 r1194  
    180180      REAL*8 muvarrad(L_LEVELS)
    181181
    182          
    183182!===============================================================
    184183!     Initialization on first call
     
    227226         call suaer_corrk       ! set up aerosol optical properties
    228227
    229          Cmk= 0.01 * 1.0 / (g * mugaz * 1.672621e-27) ! q_main=1.0 assumed
    230228
    231229         if((igcm_h2o_vap.eq.0) .and. varactive)then
     
    714712
    715713
     714         Cmk= 0.01 * 1.0 / (glat(ig) * mugaz * 1.672621e-27) ! q_main=1.0 assumed
     715         glat_ig=glat(ig)
     716
    716717!-----------------------------------------------------------------------
    717718!     Shortwave
    718719
    719720         if(fract(ig) .ge. 1.0e-4) then ! only during daylight!
    720 !            if(sum(eclipse) .eq. 0.) then
    721 !                   write(*,*) 'but eclipse is still 0 in physiq !'
    722 !               endif
    723721            if((ngrid.eq.1).and.(global1d))then
    724722               do nw=1,L_NSPECTV
     
    801799         DO l=2,L_NLAYRAD
    802800            dtsw(ig,L_NLAYRAD+1-l)=(fmnetv(l)-fmnetv(l-1))  &
    803                 *g/(cpp*scalep*(plevrad(2*l+1)-plevrad(2*l-1)))
     801                *glat(ig)/(cpp*scalep*(plevrad(2*l+1)-plevrad(2*l-1)))
    804802            dtlw(ig,L_NLAYRAD+1-l)=(fmneti(l)-fmneti(l-1))  &
    805                 *g/(cpp*scalep*(plevrad(2*l+1)-plevrad(2*l-1)))
     803                *glat(ig)/(cpp*scalep*(plevrad(2*l+1)-plevrad(2*l-1)))
    806804         END DO     
    807805
    808806!     These are values at top of atmosphere
    809807         dtsw(ig,L_NLAYRAD)=(fmnetv(1)-nfluxtopv)           &
    810              *g/(cpp*scalep*(plevrad(3)-plevrad(1)))
     808             *glat(ig)/(cpp*scalep*(plevrad(3)-plevrad(1)))
    811809         dtlw(ig,L_NLAYRAD)=(fmneti(1)-nfluxtopi)           &
    812              *g/(cpp*scalep*(plevrad(3)-plevrad(1)))
     810             *glat(ig)/(cpp*scalep*(plevrad(3)-plevrad(1)))
    813811
    814812!     ---------------------------------------------------------------
  • trunk/LMDZ.GENERIC/libf/phystd/callkeys.h

    r1175 r1194  
    1212     &   , meanOLR, specOLR                                             &
    1313     &   , kastprof, Tstrat                                             &
    14      &   , nosurf, intheat, flatten                                     &     
     14     &   , nosurf, intheat, flatten, oblate                             &     
    1515     &   , newtonian, tau_relax, testradtimes                           &
    1616     &   , check_cpp_match, force_cpp                                   &
     
    3939     &   , cloudlvl                                                     &
    4040     &   , pceil                                                        &
     41     &   , Rmean, J2, MassPlanet                                        &
    4142     &   , strictboundcorrk                                                                                     
    4243
     
    7475      logical CLFvarying
    7576      logical nosurf
     77      logical oblate
    7678
    7779      integer iddist
     
    108110      real intheat
    109111      real flatten
     112      real Rmean
     113      real J2
     114      real MassPlanet
  • trunk/LMDZ.GENERIC/libf/phystd/inifis.F

    r1175 r1194  
    158158         write(*,*) "rings_shadow = ", rings_shadow
    159159         
    160          write(*,*) "Flattening of the planet (a-b)/a ?"
     160         write(*,*) "Compute latitude-dependent gravity field?"
     161         oblate = .false.
     162         call getin("oblate", oblate)
     163         write(*,*) "oblate = ", oblate
     164
     165         write(*,*) "Flattening of the planet (a-b)/a "
    161166         flatten = 0.0
    162167         call getin("flatten", flatten)
    163168         write(*,*) "flatten = ", flatten
     169         
     170
     171         write(*,*) "Needed if oblate=.true.: J2"
     172         J2 = 0.0
     173         call getin("J2", J2)
     174         write(*,*) "J2 = ", J2
     175         
     176         write(*,*) "Needed if oblate=.true.: Planet mass (*1e24 kg)"
     177         MassPlanet = 0.0
     178         call getin("MassPlanet", MassPlanet)
     179         write(*,*) "MassPlanet = ", MassPlanet         
     180
     181         write(*,*) "Needed if oblate=.true.: Planet mean radius (m)"
     182         Rmean = 0.0
     183         call getin("Rmean", Rmean)
     184         write(*,*) "Rmean = ", Rmean
    164185         
    165186! Test of incompatibility:
  • trunk/LMDZ.GENERIC/libf/phystd/mass_redistribution.F90

    r787 r1194  
    66       USE watercommon_h, Only: Tsat_water,RLVTT
    77       use surfdat_h
     8       use radcommon_h, only: glat
    89       USE comgeomfi_h
    910       USE tracer_h
     
    128129         zdmass_sum(ig,nlayermx+1)=0.
    129130         DO l = nlayermx, 1, -1
    130            zmass(ig,l) = (pplev(ig,l)-pplev(ig,l+1))/g
     131           zmass(ig,l) = (pplev(ig,l)-pplev(ig,l+1))/glat(ig)
    131132           zdmass_sum(ig,l)= zdmass_sum(ig,l+1)+pdmassmr(ig,l)
    132133         END DO
  • trunk/LMDZ.GENERIC/libf/phystd/optci.F90

    r1016 r1194  
    44
    55  use radinc_h
    6   use radcommon_h, only: gasi,tlimit,wrefVAR,Cmk,tgasref,pfgasref,wnoi,scalep,indi
     6  use radcommon_h, only: gasi,tlimit,wrefVAR,Cmk,tgasref,pfgasref,wnoi,scalep,indi,glat_ig
    77  use gases_h
    88  implicit none
     
    123123        U(k)  = Cmk*DPR(k)*mugaz/muvar(k)
    124124     else
    125         dz(k) = dpr(k)*R*TMID(K)/(g*PMID(K))*mugaz/muvar(k)
     125        dz(k) = dpr(k)*R*TMID(K)/(glat_ig*PMID(K))*mugaz/muvar(k)
    126126        U(k)  = Cmk*DPR(k)*mugaz/muvar(k)     ! only Cmk line in optci.F 
    127127            !JL13 the mugaz/muvar factor takes into account water meanmolecular weight if water is present
  • trunk/LMDZ.GENERIC/libf/phystd/optcv.F90

    r1016 r1194  
    44
    55  use radinc_h
    6   use radcommon_h, only: gasv, tlimit, wrefVAR, Cmk, tgasref, pfgasref,wnov,scalep,indv
     6  use radcommon_h, only: gasv, tlimit, wrefVAR, Cmk, tgasref, pfgasref,wnov,scalep,indv,glat_ig
    77  use gases_h
    88
     
    111111        U(k)  = Cmk*DPR(k)*mugaz/muvar(k)
    112112     else
    113         dz(k) = dpr(k)*R*TMID(K)/(g*PMID(K))*mugaz/muvar(k)
     113        dz(k) = dpr(k)*R*TMID(K)/(glat_ig*PMID(K))*mugaz/muvar(k)
    114114        U(k)  = Cmk*DPR(k)*mugaz/muvar(k)     ! only Cmk line in optci.F 
    115115            !JL13 the mugaz/muvar factor takes into account water meanmolecular weight if water is present
  • trunk/LMDZ.GENERIC/libf/phystd/physiq.F90

    r1174 r1194  
    1111      use watercommon_h, only : RLVTT, Psat_water,epsi
    1212      use gases_h
    13       use radcommon_h, only: sigma, eclipse
     13      use radcommon_h, only: sigma, eclipse, glat, grav
    1414      use radii_mod, only: h2o_reffrad, co2_reffrad, h2o_cloudrad
    1515      use aerosol_mod
     
    267267      real ztime_fin
    268268      real zdh(ngrid,nlayermx)
     269      real gmplanet
     270
    269271      integer length
    270272      parameter (length=100)
     
    471473         !! this is defined in radcommon_h
    472474         ALLOCATE(eclipse(ngrid))
     475         ALLOCATE(glat(ngrid))
    473476
    474477!        variables set to 0
     
    648651      end if
    649652
     653
     654
     655!    Compute variations of g with latitude (oblate case)
     656!
     657        if (oblate .eq. .false.) then
     658           glat(:) = g
     659        else if (flatten .eq. 0.0 .or. J2 .eq. 0.0 .or. Rmean .eq. 0.0 .or. MassPlanet .eq. 0.0) then
     660        print*,'I need values for flatten, J2, Rmean and MassPlanet to compute glat (else set oblate=.false.)'
     661        call abort
     662        else
     663
     664        gmplanet = MassPlanet*grav*1e24
     665        do ig=1,ngrid
     666           glat(ig)= gmplanet/(Rmean**2) * (1.D0 + 0.75 *J2 - 2.0*flatten/3. + (2.*flatten - 15./4.* J2) * cos(2. * (pi/2. - lati(ig))))
     667        end do
     668        endif
     669
     670!!      write(*,*) 'lati, glat =',lati(1)*180./pi,glat(1), lati(ngrid/2)*180./pi, glat(ngrid/2)
     671
     672
     673
    650674!     Compute geopotential between layers
    651675!     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    652676
    653       zzlay(1:ngrid,1:nlayermx)=pphi(1:ngrid,1:nlayermx)/g
     677      zzlay(1:ngrid,1:nlayermx)=pphi(1:ngrid,1:nlayermx)
     678      do l=1,nlayermx         
     679      zzlay(1:ngrid,l)= zzlay(1:ngrid,l)/glat(1:ngrid)
     680      enddo
    654681
    655682      zzlev(1:ngrid,1)=0.
     
    672699            zpopsk(ig,l)=(pplay(ig,l)/pplev(ig,1))**rcp
    673700            zh(ig,l)=pt(ig,l)/zpopsk(ig,l)
    674             mass(ig,l)  = (pplev(ig,l) - pplev(ig,l+1))/g
     701            mass(ig,l)  = (pplev(ig,l) - pplev(ig,l+1))/glat(ig)
    675702            massarea(ig,l)=mass(ig,l)*area(ig)
    676703         enddo
    677704      enddo
     705
    678706
    679707!-----------------------------------------------------------------------
  • trunk/LMDZ.GENERIC/libf/phystd/radcommon_h.F90

    r1149 r1194  
    131131
    132132      real*8, parameter :: sigma = 5.67032D-8
     133      real*8, parameter :: grav = 6.672E-11
    133134
    134135      real*8 Cmk
    135136      save Cmk
     137      real*8 glat_ig
     138      save glat_ig
    136139
    137140      ! extinction of incoming sunlight (Saturn's rings, eclipses, etc...)
    138141      REAL, DIMENSION(:), ALLOCATABLE :: eclipse
    139142
     143      !Latitude-dependent gravity
     144      REAL, DIMENSION(:), ALLOCATABLE :: glat
     145
    140146      end module radcommon_h
  • trunk/LMDZ.GENERIC/libf/phystd/turbdiff.F90

    r1016 r1194  
    88
    99      use watercommon_h, only : RLVTT, T_h2O_ice_liq, RCPD, mx_eau_sol,Psat_water
    10       use radcommon_h, only : sigma
     10      use radcommon_h, only : sigma, glat
    1111      USE surfdat_h
    1212      USE comgeomfi_h
     
    165165      DO ilay=1,nlay
    166166         DO ig=1,ngrid
    167             zmass(ig,ilay)=(pplev(ig,ilay)-pplev(ig,ilay+1))/g
     167            zmass(ig,ilay)=(pplev(ig,ilay)-pplev(ig,ilay+1))/glat(ig)
    168168            zExner(ig,ilay)=(pplev(ig,ilay)/pplev(ig,1))**rcp
    169169            zovExner(ig,ilay)=1./ppopsk(ig,ilay)
Note: See TracChangeset for help on using the changeset viewer.