Changeset 1955 for LMDZ5/trunk/libf


Ignore:
Timestamp:
Jan 31, 2014, 9:17:49 AM (11 years ago)
Author:
fhourdin
Message:

Options for idealized ozone (read_climoz=0) :
Imposing ozone be constant in case were solarlong0> -999
(defaut value is -999.999 when seasonal cycle is compiuted) and
to be symetric with respect to equator when read_climoz=-1
FH

Location:
LMDZ5/trunk/libf/phylmd
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • LMDZ5/trunk/libf/phylmd/ozonecm_m.F90

    r1907 r1955  
    66contains
    77
    8   function ozonecm(rlat, paprs, rjour)
     8  function ozonecm(rlat, paprs,read_climoz, rjour)
    99
    1010    ! The ozone climatology is based on an analytic formula which fits the
     
    2727    REAL, INTENT (IN) :: paprs(:, :) ! (klon,klev+1)
    2828    REAL, INTENT (IN) :: rjour
     29    INTEGER, INTENT (IN) :: read_climoz
    2930
    3031    REAL ozonecm(klon,klev)
     
    4546    REAL, parameter:: an = 360., zo3q3 = 4E-8
    4647    REAL, parameter:: dobson_unit = 2.1415E-5 ! in kg m-2
    47     REAL gms, zslat, zsint, zcost, z, ppm, qpm, a
     48    REAL gms, zslat,zslat2, zsint, zcost, z, ppm, qpm, a
    4849    REAL asec, bsec, aprim, zo3a3
    4950
     
    5758       DO i = 1, klon
    5859          zslat = sin(pi / 180. * rlat(i))
     60          zslat2=zslat*zslat
     61          IF (read_climoz==-1) zslat=0. ! Imposing hemispheric symetry
    5962          zsint = sin(2 * pi * (rjour + 15.) / an)
    6063          zcost = cos(2 * pi * (rjour + 15.) / an)
    6164          z = 0.0531 + zsint * (-0.001595+0.009443*zslat) &
    6265               + zcost * (-0.001344-0.00346*zslat) &
    63                + zslat**2 * (.056222 + zslat**2 &
     66               + zslat2 * (.056222 + zslat2 &
    6467               * (-.037609+.012248*zsint+.00521*zcost+.008890*zslat))
    6568          zo3a3 = zo3q3/ps/2.
    6669          z = z - zo3q3*ps
    6770          gms = z
    68           ppm = 800. - (500.*zslat+150.*zcost)*zslat
    69           qpm = 1.74E-5 - (7.5E-6*zslat+1.7E-6*zcost)*zslat
    70           bsec = 2650. + 5000.*zslat**2
     71          ppm = 800. - 500.*zslat2 - 150.*zcost*zslat
     72          qpm = 1.74E-5 - 7.5E-6*zslat2 - 1.7E-6*zcost*zslat
     73          bsec = 2650. + 5000.*zslat2
    7174          a = 4.0*(bsec)**(3./2.)*(ppm)**(3./2.)*(1.0+(bsec/ps)**(3./2.))
    7275          a = a/(bsec**(3./2.)+ppm**(3./2.))**2
     
    8891    ozonecm = max(ozonecm, 1e-12)
    8992
     93    print*,'ozonecm Version2'
     94
    9095  END function ozonecm
    9196
  • LMDZ5/trunk/libf/phylmd/physiq.F90

    r1950 r1955  
    870870  integer iostat
    871871
     872  REAL zzz
     873
    872874  !======================================================================
    873875  ! Gestion calendrier : mise a jour du module phys_cal_mod
     
    16041606        co3i = ro3i
    16051607     end if
    1606   elseif (MOD(itap-1,lmt_pas) == 0) THEN
     1608  ELSEIF (MOD(itap-1,lmt_pas) == 0) THEN
    16071609     !        Once per day, update ozone from Royer:
    1608      wo(:, :, 1) = ozonecm(rlat, paprs, rjour=real(days_elapsed+1))
     1610
     1611     IF (solarlong0<-999.) then
     1612     ! Generic case with evolvoing season
     1613        zzz=real(days_elapsed+1)
     1614     ELSE IF (abs(solarlong0-1000.)<1.e-4) then
     1615     ! Particular case with annual mean insolation
     1616        zzz=real(90) ! could be revisited
     1617        IF (read_climoz/=-1) THEN
     1618           abort_message ='read_climoz=-1 is recommended when solarlong0=1000.'
     1619           CALL abort_gcm (modname,abort_message,1)
     1620        ENDIF
     1621     ELSE
     1622     ! Case where the season is imposed with solarlong0
     1623        zzz=real(90) ! could be revisited
     1624     ENDIF
     1625     wo(:,:,1)=ozonecm(rlat, paprs,read_climoz,rjour=zzz)
    16091626  ENDIF
    16101627  !
Note: See TracChangeset for help on using the changeset viewer.