Changeset 652 for LMDZ4


Ignore:
Timestamp:
Jun 6, 2005, 3:16:33 PM (20 years ago)
Author:
Laurent Fairhead
Message:

Correction du bug sur l'ozone (unite, calcul). On peut retrouver le
bug, qui est présent dans les simulations IPCC 2005, en positionnant
le flag bug_ozone à true dans physiq.def.
MPL/LF

Location:
LMDZ4/trunk
Files:
2 deleted
7 edited

Legend:

Unmodified
Added
Removed
  • LMDZ4/trunk/libf/phylmd/YOMCST.h

    r524 r652  
    1414      REAL RSIGMA
    1515! A1.4 Thermodynamic gas phase
    16       REAL R,RMD,RMV,RD,RV,RCPD,RCPV,RCVD,RCVV
     16      REAL R,RMD,RMO3,RMV,RD,RV,RCPD,RCPV,RCVD,RCVV
    1717      REAL RKAPPA,RETV
    1818! A1.5,6 Thermodynamic liquid,solid phases
     
    2727      COMMON/YOMCST/RPI   ,RCLUM ,RHPLA ,RKBOL ,RNAVO
    2828     S      ,RDAY  ,REA   ,REPSM ,RSIYEA,RSIDAY,ROMEGA
    29      s      ,R_ecc, R_peri, R_incl
     29     S      ,R_ecc, R_peri, R_incl
    3030     S      ,RA    ,RG    ,R1SA
    3131     S      ,RSIGMA
    32      S      ,R     ,RMD   ,RMV   ,RD    ,RV    ,RCPD
     32     S      ,R     ,RMD   ,RMO3  ,RMV   ,RD    ,RV    ,RCPD
    3333     S      ,RCPV  ,RCVD  ,RCVV  ,RKAPPA,RETV
    3434     S      ,RCW   ,RCS
  • LMDZ4/trunk/libf/phylmd/clesphys.h

    r644 r652  
    66       LOGICAL cycle_diurne,soil_model,new_oliq,ok_orodr,ok_orolf
    77       LOGICAL ok_limitvrai
     8       LOGICAL bug_ozone
    89       INTEGER nbapp_rad, iflag_con
    910       REAL co2_ppm, solaire
     
    2930
    3031       COMMON/clesphys/cycle_diurne, soil_model, new_oliq,
    31      ,     ok_orodr, ok_orolf, ok_limitvrai, nbapp_rad, iflag_con
    32      ,     , co2_ppm, solaire, RCO2, RCH4, RN2O, RCFC11, RCFC12
    33      ,     , CH4_ppb, N2O_ppb, CFC11_ppt, CFC12_ppt
    34      ,     , top_height, overlap, cdmmax, cdhmax, ksta, ksta_ter
    35      ,     , ok_kzmin, lev_histhf, lev_histday, lev_histmth
    36      ,     , type_run, ok_isccp, ok_regdyn
    37      ,     , lonmin_ins, lonmax_ins, latmin_ins, latmax_ins
    38      ,     , ecrit_ins, ecrit_hf, ecrit_hf2mth, ecrit_day
    39      ,     , ecrit_mth, ecrit_tra, ecrit_reg
     32     S     ok_orodr, ok_orolf, ok_limitvrai, nbapp_rad, iflag_con
     33     S     , co2_ppm, solaire, RCO2, RCH4, RN2O, RCFC11, RCFC12
     34     S     , CH4_ppb, N2O_ppb, CFC11_ppt, CFC12_ppt
     35     S     , top_height, overlap, cdmmax, cdhmax, ksta, ksta_ter
     36     S     , ok_kzmin, lev_histhf, lev_histday, lev_histmth
     37     S     , type_run, ok_isccp, ok_regdyn
     38     S     , lonmin_ins, lonmax_ins, latmin_ins, latmax_ins
     39     S     , ecrit_ins, ecrit_hf, ecrit_hf2mth, ecrit_day
     40     S     , ecrit_mth, ecrit_tra, ecrit_reg, bug_ozone
  • LMDZ4/trunk/libf/phylmd/conf_phys.F90

    r644 r652  
    704704  call getin('ecrit_reg',ecrit_reg)
    705705!
     706!
     707!
     708!Config Key  = bug_ozone
     709!Config Desc = Pour retrouver le bug de l'ozone (IPCC), mettre a true
     710!Config Def  = false
     711!Config Help =
     712!
     713  bug_ozone = .false.
     714  call getin('bug_ozone',bug_ozone)
    706715
    707716
     
    765774  write(numout,*)' ecrit_ ins, hf, hf2mth, day, mth, reg, tra',&
    766775 & ecrit_ins, ecrit_hf, ecrit_hf2mth, ecrit_day, ecrit_mth, ecrit_reg, ecrit_tra
     776  write(numout,*)' bug_ozone = ', bug_ozone
    767777  return
    768778
  • LMDZ4/trunk/libf/phylmd/ozonecm.F

    r641 r652  
    2121#include "dimensions.h"
    2222#include "dimphy.h"
     23#include "clesphys.h"
     24#include "YOMCST.h"
    2325      REAL rlat(klon), paprs(klon,klev+1)
    24       REAL o3(klon,klev)
     26      REAL o3(klon,klev)   ! ozone concentration in kg/kg
    2527      REAL tozon, rjour, pi, pl
    2628      INTEGER i, k
     
    7779      ENDDO
    7880      DO k = 1, klev
    79       DO i = 1, klon
    80          o3(i,k) = field(i,k) - field(i,k+1)
    81       ENDDO
     81        DO i = 1, klon
     82          o3(i,k) = field(i,k) - field(i,k+1)
     83          IF (.not. bug_ozone) then
     84c         convert o3 into kg/kg         
     85            o3(i,k)=MAX(o3(i,k),1.0e-12)*RG/46.6968
     86     .               /(paprs(i,k)-paprs(i,k+1))
     87          ENDIF
     88        ENDDO
    8289      ENDDO
    8390c
  • LMDZ4/trunk/libf/phylmd/radlwsw.F

    r644 r652  
    3232c t--------input-R- temperature (K)
    3333c q--------input-R- vapeur d'eau (en kg/kg)
    34 c wo-------input-R- contenu en ozone (en cm.atm)
     34c wo-------input-R- contenu en ozone (en kg/kg) correction MPL 100505
    3535c cldfra---input-R- fraction nuageuse (entre 0 et 1)
    3636c cldtaupd---input-R- epaisseur optique des nuages dans le visible (present-day value)
     
    238238c wo:    cm.atm (epaisseur en cm dans la situation standard)
    239239c POZON: kg/kg
    240          POZON(i,k) = MAX(wo(iof+i,k),1.0e-12)*RG/46.6968
     240         IF (bug_ozone) then
     241           POZON(i,k) = MAX(wo(iof+i,k),1.0e-12)*RG/46.6968
    241242     .               /(paprs(iof+i,k)-paprs(iof+i,k+1))
    242243     .               *(paprs(iof+i,1)/101325.0)
     244         ELSE
     245c le calcul qui suit est maintenant fait dans ozonecm (MPL)
     246           POZON(i,k) = wo(i,k)
     247         ENDIF
    243248         PCLDLD(i,k) = cldfra(iof+i,k)*cldemi(iof+i,k)
    244249         PCLDLU(i,k) = cldfra(iof+i,k)*cldemi(iof+i,k)
     
    550555      DO JL = 1, KDLON
    551556         ZCLDSW0(JL,JK) = 0.0
    552          ZOZ(JL,JK) = POZON(JL,JK)*46.6968/RG
     557         IF (bug_ozone) then
     558           ZOZ(JL,JK) = POZON(JL,JK)*46.6968/RG
    553559     .               *PDP(JL,JK)*(101325.0/PPSOL(JL))
     560         ELSE
     561c        Correction MPL 100505
     562           ZOZ(JL,JK) = POZON(JL,JK)*RMD/RMO3*46.6968/RG*PDP(JL,JK)
     563         ENDIF           
    554564      ENDDO
    555565      ENDDO
     
    28842894      DO k = 1, KFLEV  ! convertir ozone de kg/kg en pa/pa
    28852895      DO i = 1, KDLON
    2886          ZOZ(i,k) = POZON(i,k)*PDP(i,k) * 28.9644/47.9942
     2896c convertir ozone de kg/kg en pa (modif MPL 100505)
     2897         ZOZ(i,k) = POZON(i,k)*PDP(i,k) * RMD/RMO3
     2898c        print *,'LW: ZOZ*10**6=',ZOZ(i,k)*1000000.
    28872899      ENDDO
    28882900      ENDDO
  • LMDZ4/trunk/libf/phylmd/suphec.F

    r524 r652  
    116116      R=RNAVO*RKBOL
    117117      RMD=28.9644
     118      RMO3=47.9942
    118119      RMV=18.0153
    119120      RD=1000.*R/RMD
     
    128129      WRITE(UNIT=6,FMT='('' Perfect gas  = '',e13.7)') R
    129130      WRITE(UNIT=6,FMT='('' Dry air mass = '',e13.7)') RMD
     131      WRITE(UNIT=6,FMT='('' Ozone   mass = '',e13.7)') RMO3
    130132      WRITE(UNIT=6,FMT='('' Vapour  mass = '',e13.7)') RMV
    131133      WRITE(UNIT=6,FMT='('' Dry air cst. = '',e13.7)') RD
  • LMDZ4/trunk/makegcm

    r647 r652  
    3030###### VERSION LMDZ.4
    3131# set LMDGCM=$HOME/LMDZ.4
    32 set LMDGCM="`pwd`"
    33 setenv LIBOGCM $LMDGCM/libo
     32#set LMDGCM="`pwd`"
     33#setenv LIBOGCM $LMDGCM/libo
    3434#
    3535
     
    738738if ( ! -f $libf/dyn3d/control.inc  || `diff $libf/dyn3d/control.tmp $libf/dyn3d/control.inc | wc -w` ) then
    739739      \mv $libf/dyn3d/control.tmp $libf/dyn3d/control.inc
     740endif
     741awk 'BEGIN {} { sub ("^c","\!") ; if ($0 ~ /^     S/) {if (NR > 1) print p0," &"; sub ("     S","     \\&")} else { if (NR > 1) print p0  } p0=$0 } END { print p0}' $libf/phylmd/YOMCST.h >! $libf/phylmd/YOMCST.tmp
     742if ( ! -f $libf/phylmd/YOMCST.inc  || `diff $libf/phylmd/YOMCST.tmp $libf/phylmd/YOMCST.inc | wc -w` ) then
     743      \mv $libf/phylmd/YOMCST.tmp $libf/phylmd/YOMCST.inc
     744endif
     745awk 'BEGIN {} { sub ("^c","\!") ; if ($0 ~ /^     S/) {if (NR > 1) print p0," &"; sub ("     S","     \\&")} else { if (NR > 1) print p0  } p0=$0 } END { print p0}' $libf/phylmd/clesphys.h >! $libf/phylmd/clesphys.tmp
     746if ( ! -f $libf/phylmd/clesphys.inc  || `diff $libf/phylmd/clesphys.tmp $libf/phylmd/clesphys.inc | wc -w` ) then
     747      \mv $libf/phylmd/clesphys.tmp $libf/phylmd/clesphys.inc
    740748endif
    741749#sed -e 's/^c/\!/' $libf/dyn3dpar/paramet.h >! $libf/dyn3dpar/paramet90.h
Note: See TracChangeset for help on using the changeset viewer.