Ignore:
Timestamp:
Jul 28, 2009, 10:05:59 AM (15 years ago)
Author:
jghattas
Message:

Bug-fix dans le calcul de aerosol charge(load) dans la colonne pour
l'interpolation des aerosols.

Location:
LMDZ4/branches/LMDZ4-dev/libf/phylmd
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • LMDZ4/branches/LMDZ4-dev/libf/phylmd/readaerosol_interp.F90

    r1183 r1216  
    11! $Id$
    22!
    3 SUBROUTINE readaerosol_interp(id_aero, r_day, first, pplay, paprs, mass_out, pi_mass_out)
     3SUBROUTINE readaerosol_interp(id_aero, r_day, first, pplay, paprs, t_seri, mass_out, pi_mass_out)
    44!
    55! This routine will return the mass concentration at actual day(mass_out) and
     
    3636  REAL, DIMENSION(klon,klev), INTENT(IN) :: pplay  ! pression at model mid-layers
    3737  REAL, DIMENSION(klon,klev+1),INTENT(IN):: paprs  ! pression between model layers
     38  REAL, DIMENSION(klon,klev), INTENT(IN) :: t_seri ! air temperature
    3839!     
    3940! Output:     
     
    5152!$OMP THREADPRIVATE(klev_src)
    5253
     54  REAL                              :: zrho      ! Air density [kg/m3]
     55  REAL                              :: volm      ! Volyme de melange [kg/kg]
    5356  REAL, DIMENSION(klon)             :: psurf_day, pi_psurf_day
    5457  REAL, DIMENSION(klon)             :: load_src, pi_load_src  ! Mass load at source grid
     
    149152   
    150153     IF (debug) THEN
     154        CALL writefield_phy('var_year_jan',var_year(:,:,1,id_aero),klev_src)
     155        CALL writefield_phy('var_year_dec',var_year(:,:,12,id_aero),klev_src)
    151156        CALL writefield_phy('psurf_src',psurf_year(:,:,id_aero),1)
    152157        CALL writefield_phy('pi_psurf_src',pi_psurf_year(:,:,id_aero),1)
     
    300305        DO k= 1, klev
    301306           DO i = 1, klon
    302               load_tgt(i) = load_tgt(i) + 1/RG * var_day(i,k,id_aero)*delp(i,k)
     307              zrho = pplay(i,k)/t_seri(i,k)/RD       ! [kg/m3]
     308              volm = var_day(i,k,id_aero)*1.E-9/zrho ! [kg/kg]
     309              load_tgt(i) = load_tgt(i) + 1/RG * volm *delp(i,k)
    303310           END DO
    304311        END DO
     
    315322           DO k= 1, klev
    316323              DO i = 1, klon
    317                  load_tgt_test(i) = load_tgt_test(i) + 1/RG * var_day(i,k,id_aero)*delp(i,k)
     324                 zrho = pplay(i,k)/t_seri(i,k)/RD       ! [kg/m3]
     325                 volm = var_day(i,k,id_aero)*1.E-9/zrho ! [kg/kg]
     326                 load_tgt_test(i) = load_tgt_test(i) + 1/RG * volm*delp(i,k)
    318327              END DO
    319328           END DO
     
    353362        DO k = 1, klev
    354363           DO i = 1, klon
    355               load_tgt(i) = load_tgt(i) + 1/RG * pi_var_day(i,k,id_aero)*delp(i,k)
     364              zrho = pplay(i,k)/t_seri(i,k)/RD          ! [kg/m3]
     365              volm = pi_var_day(i,k,id_aero)*1.E-9/zrho ! [kg/kg]
     366              load_tgt(i) = load_tgt(i) + 1/RG * volm * delp(i,k)
    356367           END DO
    357368        END DO
     
    367378           DO k = 1, klev
    368379              DO i = 1, klon
    369                  load_tgt_test(i) = load_tgt_test(i) + 1/RG * pi_var_day(i,k,id_aero)*delp(i,k)
     380                 zrho = pplay(i,k)/t_seri(i,k)/RD          ! [kg/m3]
     381                 volm = pi_var_day(i,k,id_aero)*1.E-9/zrho ! [kg/kg]
     382                 load_tgt_test(i) = load_tgt_test(i) + 1/RG * volm * delp(i,k)
    370383              END DO
    371384           END DO
  • LMDZ4/branches/LMDZ4-dev/libf/phylmd/readaerosol_optic.F90

    r1183 r1216  
    7373       flag_aerosol .EQ. 6 ) THEN
    7474
    75      CALL readaerosol_interp(5, rjourvrai, debut, pplay, paprs, sulfate, sulfate_pi)
     75     CALL readaerosol_interp(5, rjourvrai, debut, pplay, paprs, t_seri, sulfate, sulfate_pi)
    7676  ELSE
    7777     sulfate(:,:) = 0. ; sulfate_pi(:,:) = 0.
     
    8383
    8484     ! Get bc aerosol distribution
    85      CALL readaerosol_interp(3, rjourvrai, debut, pplay, paprs, bcsol, bcsol_pi )
    86      CALL readaerosol_interp(7, rjourvrai, debut, pplay, paprs, bcins, bcins_pi )
     85     CALL readaerosol_interp(3, rjourvrai, debut, pplay, paprs, t_seri, bcsol, bcsol_pi )
     86     CALL readaerosol_interp(7, rjourvrai, debut, pplay, paprs, t_seri, bcins, bcins_pi )
    8787  ELSE
    8888     bcsol(:,:) = 0. ; bcsol_pi(:,:) = 0.
     
    9595       flag_aerosol .EQ. 6 ) THEN
    9696
    97      CALL readaerosol_interp(4, rjourvrai, debut, pplay, paprs, pomsol, pomsol_pi)
    98      CALL readaerosol_interp(8, rjourvrai, debut, pplay, paprs, pomins, pomins_pi)
     97     CALL readaerosol_interp(4, rjourvrai, debut, pplay, paprs, t_seri, pomsol, pomsol_pi)
     98     CALL readaerosol_interp(8, rjourvrai, debut, pplay, paprs, t_seri, pomins, pomins_pi)
    9999  ELSE
    100100     pomsol(:,:) = 0. ; pomsol_pi(:,:) = 0.
     
    107107      flag_aerosol .EQ. 6 ) THEN
    108108
    109       CALL readaerosol_interp(1 ,rjourvrai, debut, pplay, paprs, sscoarse,sscoarse_pi)
    110       CALL readaerosol_interp(2 ,rjourvrai, debut, pplay, paprs, ssacu, ssacu_pi)
     109      CALL readaerosol_interp(1 ,rjourvrai, debut, pplay, paprs, t_seri, sscoarse,sscoarse_pi)
     110      CALL readaerosol_interp(2 ,rjourvrai, debut, pplay, paprs, t_seri, ssacu, ssacu_pi)
    111111
    112112  ELSE
     
    119119      flag_aerosol .EQ. 6 ) THEN
    120120
    121       CALL readaerosol_interp(6 , rjourvrai, debut, pplay, paprs, cidust, cidust_pi)
     121      CALL readaerosol_interp(6 , rjourvrai, debut, pplay, paprs, t_seri, cidust, cidust_pi)
    122122
    123123  ELSE
Note: See TracChangeset for help on using the changeset viewer.