Changeset 1183 for LMDZ4


Ignore:
Timestamp:
Jun 16, 2009, 5:38:46 PM (15 years ago)
Author:
jghattas
Message:
  • Ajoute test de coherence entre les longitudes et latitudes des fichiers de forcage des aerosols et le model.
  • Corection pour la variable mass_solu_aero : changement du nom, commentaire et contenu(il y avait l'aerosol dust en trop)
  • Changement du nom de module car dans INCA le meme nom existe deja : aerosol_mod => aero_mod
Location:
LMDZ4/branches/LMDZ4-dev/libf/phylmd
Files:
10 edited
1 moved

Legend:

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

    r1182 r1183  
    11! $Id$
    22!
    3 MODULE aerosol_mod
     3MODULE aero_mod
    44  ! Declaration des indices pour les aerosols
    55
     
    6161
    6262
    63 END MODULE aerosol_mod
     63END MODULE aero_mod
  • LMDZ4/branches/LMDZ4-dev/libf/phylmd/aeropt_2bands.F90

    r1181 r1183  
    66
    77  USE dimphy
    8   USE aerosol_mod
     8  USE aero_mod
    99
    1010  !    Yves Balkanski le 12 avril 2006
  • LMDZ4/branches/LMDZ4-dev/libf/phylmd/aeropt_5wv.F90

    r1181 r1183  
    88
    99  USE DIMPHY
    10   USE aerosol_mod
     10  USE aero_mod
    1111
    1212  !
  • LMDZ4/branches/LMDZ4-dev/libf/phylmd/newmicro.F

    r1179 r1183  
    66     s                  xflwp, xfiwp, xflwc, xfiwc,
    77     e                  ok_aie,
    8      e                  mass_ins_aero, mass_ins_aero_pi,
     8     e                  mass_solu_aero, mass_solu_aero_pi,
    99     e                  bl95_b0, bl95_b1,
    1010     s                  cldtaupi, re, fl)
     
    2121c
    2222c ok_aie--input-L-apply aerosol indirect effect or not
    23 c mass_ins_aero-----input-R-total mass concentration for all indissoluble aerosols[ug/m^3]
    24 c mass_ins_aero_pi--input-R-dito, pre-industrial value
     23c mass_solu_aero-----input-R-total mass concentration for all soluble aerosols[ug/m^3]
     24c mass_solu_aero_pi--input-R-dito, pre-industrial value
    2525c bl95_b0-input-R-a parameter, may be varied for tests (s-sea, l-land)
    2626c bl95_b1-input-R-a parameter, may be varied for tests (    -"-      )
     
    9393      LOGICAL ok_a1lwpdep       ! a1 LWP dependent?
    9494     
    95       REAL mass_ins_aero(klon, klev)    ! total mass concentration for all indissoluble aerosols [ug m-3]
    96       REAL mass_ins_aero_pi(klon, klev) ! - " - (pre-industrial value)
     95      REAL mass_solu_aero(klon, klev)    ! total mass concentration for all soluble aerosols [ug m-3]
     96      REAL mass_solu_aero_pi(klon, klev) ! - " - (pre-industrial value)
    9797      REAL cdnc(klon, klev)     ! cloud droplet number concentration [m-3]
    9898      REAL re(klon, klev)       ! cloud droplet effective radius [um]
     
    156156                                !             
    157157                  cdnc(i,k) = 10.**(bl95_b0+bl95_b1*
    158      &                 log(MAX(mass_ins_aero(i,k),1.e-4))/log(10.))*1.e6 !-m-3
     158     &               log(MAX(mass_solu_aero(i,k),1.e-4))/log(10.))*1.e6 !-m-3
    159159                                ! Cloud droplet number concentration (CDNC) is restricted
    160160                                ! to be within [20, 1000 cm^3]
     
    164164                                !
    165165                  cdnc_pi(i,k) = 10.**(bl95_b0+bl95_b1*
    166      &                 log(MAX(mass_ins_aero_pi(i,k),1.e-4))/log(10.))*1.e6 !-m-3
     166     &               log(MAX(mass_solu_aero_pi(i,k),1.e-4))/log(10.))*1.e6 !-m-3
    167167                  cdnc_pi(i,k)=MIN(1000.e6,MAX(20.e6,cdnc_pi(i,k)))
    168168               ENDDO
  • LMDZ4/branches/LMDZ4-dev/libf/phylmd/nuage.F

    r1179 r1183  
    55     .                  pch, pcl, pcm, pct, pctlwp,
    66     e                  ok_aie,
    7      e                  mass_ins_aero, mass_ins_aero_pi,
     7     e                  mass_solu_aero, mass_solu_aero_pi,
    88     e                  bl95_b0, bl95_b1,
    99     s                  cldtaupi, re, fl)
     
    1919c pclc----input-R-couverture nuageuse pour le rayonnement (0 a 1)
    2020c ok_aie--input-L-apply aerosol indirect effect or not
    21 c mass_ins_aero-----input-R-total mass concentration for all indissoluble aerosols[ug/m^3]
    22 c mass_ins_aero_pi--input-R-dito, pre-industrial value
     21c mass_solu_aero-----input-R-total mass concentration for all soluble aerosols[ug/m^3]
     22c mass_solu_aero_pi--input-R-dito, pre-industrial value
    2323c bl95_b0-input-R-a parameter, may be varied for tests (s-sea, l-land)
    2424c bl95_b1-input-R-a parameter, may be varied for tests (    -"-      )
     
    7373      LOGICAL ok_aie            ! Apply AIE or not?
    7474     
    75       REAL mass_ins_aero(klon, klev)    ! total mass concentration for all indissoluble aerosols[ug m-3]
    76       REAL mass_ins_aero_pi(klon, klev) ! - " - pre-industrial value
     75      REAL mass_solu_aero(klon, klev)    ! total mass concentration for all soluble aerosols[ug m-3]
     76      REAL mass_solu_aero_pi(klon, klev) ! - " - pre-industrial value
    7777      REAL cdnc(klon, klev)     ! cloud droplet number concentration [m-3]
    7878      REAL re(klon, klev)       ! cloud droplet effective radius [um]
     
    107107            !             
    108108            cdnc(i,k) = 10.**(bl95_b0+bl95_b1*
    109      .           log(MAX(mass_ins_aero(i,k),1.e-4))/log(10.))*1.e6 !-m-3
     109     .           log(MAX(mass_solu_aero(i,k),1.e-4))/log(10.))*1.e6 !-m-3
    110110            ! Cloud droplet number concentration (CDNC) is restricted
    111111            ! to be within [20, 1000 cm^3]
     
    113113            cdnc(i,k)=MIN(1000.e6,MAX(20.e6,cdnc(i,k)))
    114114            cdnc_pi(i,k) = 10.**(bl95_b0+bl95_b1*
    115      .           log(MAX(mass_ins_aero_pi(i,k),1.e-4))/log(10.))*1.e6 !-m-3
     115     .           log(MAX(mass_solu_aero_pi(i,k),1.e-4))/log(10.))*1.e6 !-m-3
    116116            cdnc_pi(i,k)=MIN(1000.e6,MAX(20.e6,cdnc_pi(i,k)))
    117117            !           
  • LMDZ4/branches/LMDZ4-dev/libf/phylmd/phys_local_var_mod.F90

    r1181 r1183  
    44      MODULE phys_local_var_mod
    55
    6         USE aerosol_mod
    76! Variables locales pour effectuer les appels en serie
    87!======================================================================
     
    9493use dimphy
    9594use infotrac, ONLY : nbtr
     95USE aero_mod
     96
    9697IMPLICIT NONE
    9798#include "indicesol.h"
  • LMDZ4/branches/LMDZ4-dev/libf/phylmd/phys_state_var_mod.F90

    r1181 r1183  
    284284SUBROUTINE phys_state_var_init
    285285use dimphy
    286 use aerosol_mod
     286use aero_mod
    287287IMPLICIT NONE
    288288#include "indicesol.h"
  • LMDZ4/branches/LMDZ4-dev/libf/phylmd/physiq.F

    r1181 r1183  
    3333      use netcdf95, only: nf95_close
    3434      use mod_phys_lmdz_mpi_data, only: is_mpi_root
     35      USE aero_mod
    3536
    3637      IMPLICIT none
     
    10661067      CHARACTER*4, DIMENSION(naero_grp) :: rfname
    10671068      REAL, DIMENSION(klon)          :: aerindex     ! POLDER aerosol index
    1068       REAL, DIMENSION(klon,klev)     :: mass_ins_aero! total mass concentration for all indissoluble aerosols[ug/m3]
    1069       REAL, DIMENSION(klon,klev)     :: mass_ins_aero_pi ! - " - (pre-industrial value)
     1069      REAL, DIMENSION(klon,klev)     :: mass_solu_aero    ! total mass concentration for all soluble aerosols[ug/m3]
     1070      REAL, DIMENSION(klon,klev)     :: mass_solu_aero_pi ! - " - (pre-industrial value)
    10701071
    10711072      ! Parameters
     
    26382639     &        debut, new_aod, flag_aerosol, rjourvrai, pdtphys,
    26392640     &        pplay, paprs, t_seri, rhcl,
    2640      &        mass_ins_aero, mass_ins_aero_pi,
     2641     &        mass_solu_aero, mass_solu_aero_pi,
    26412642     &        tau_aero, piz_aero, cg_aero,
    26422643     &        tausum_aero, tau3d_aero)
     
    28212822
    28222823      IF (aerosol_couple) THEN
    2823          mass_ins_aero(:,:)    = ccm(:,:,1)
    2824          mass_ins_aero_pi(:,:) = ccm(:,:,2)
     2824         mass_solu_aero(:,:)    = ccm(:,:,1)
     2825         mass_solu_aero_pi(:,:) = ccm(:,:,2)
    28252826      END IF
    28262827
     
    28312832     .            flwp, fiwp, flwc, fiwc,
    28322833     e            ok_aie,
    2833      e            mass_ins_aero, mass_ins_aero_pi,
     2834     e            mass_solu_aero, mass_solu_aero_pi,
    28342835     e            bl95_b0, bl95_b1,
    28352836     s            cldtaupi, re, fl)
     
    28392840     .            cldh, cldl, cldm, cldt, cldq,
    28402841     e            ok_aie,
    2841      e            mass_ins_aero, mass_ins_aero_pi,
     2842     e            mass_solu_aero, mass_solu_aero_pi,
    28422843     e            bl95_b0, bl95_b1,
    28432844     s            cldtaupi, re, fl)
  • LMDZ4/branches/LMDZ4-dev/libf/phylmd/readaerosol.F90

    r1179 r1183  
    181181    USE mod_grid_phy_lmdz
    182182    USE mod_phys_lmdz_para
     183    USE iophy, ONLY : io_lon, io_lat
    183184
    184185    IMPLICIT NONE
     
    216217    REAL, DIMENSION(klon_glo,12)          :: load_glo1D    ! -"- on physical global grid
    217218    REAL, DIMENSION(iim,jjm+1)            :: vartmp
    218     LOGICAL                               :: new_file
     219    REAL, DIMENSION(iim)                  :: lon_src              ! longitudes in file
     220    REAL, DIMENSION(jjm+1)                :: lat_src, lat_src_inv ! latitudes in file
     221    LOGICAL                               :: new_file             ! true if new file format detected
     222    LOGICAL                               :: invert_lat           ! true if the field has to be inverted for latitudes
    219223
    220224
     
    232236       WRITE(lunout,*) 'reading ', TRIM(fname)
    233237       CALL check_err( nf90_open(TRIM(fname), NF90_NOWRITE, ncid) )
     238
     239! Test for equal longitudes and latitudes in file and model
     240!****************************************************************************************
     241       ! Read and test longitudes
     242       CALL check_err( nf90_inq_varid(ncid, 'lon', varid) )
     243       CALL check_err( nf90_get_var(ncid, varid, lon_src(:)) )
     244       
     245       IF (minval(ABS(lon_src - io_lon)) > 0.001) THEN
     246          WRITE(lunout,*) 'Problem in longitudes read from file : ',TRIM(fname)
     247          WRITE(lunout,*) 'longitudes in file ', TRIM(fname),' : ', lon_src
     248          WRITE(lunout,*) 'longitudes in model :', io_lon
     249         
     250          CALL abort_gcm('get_aero_fromfile', 'longitudes are not the same in file and model',1)
     251       END IF
     252
     253       ! Read and test latitudes
     254       CALL check_err( nf90_inq_varid(ncid, 'lat', varid) )
     255       CALL check_err( nf90_get_var(ncid, varid, lat_src(:)) )
     256
     257       ! Invert source latitudes
     258       DO j = 1, jjm+1
     259          lat_src_inv(j) = lat_src(jjm+1 +1 -j)
     260       END DO
     261
     262       IF (minval(ABS(lat_src - io_lat)) < 0.001) THEN
     263          ! Latitudes are the same
     264          invert_lat=.FALSE.
     265       ELSE IF (minval(ABS(lat_src_inv - io_lat)) < 0.001) THEN
     266          ! Inverted source latitudes correspond to model latitudes
     267          WRITE(lunout,*) 'latitudes will be inverted for file : ',TRIM(fname)
     268          invert_lat=.TRUE.
     269       ELSE
     270          WRITE(lunout,*) 'Problem in latitudes read from file : ',TRIM(fname)
     271          WRITE(lunout,*) 'latitudes in file ', TRIM(fname),' : ', lat_src     
     272          WRITE(lunout,*) 'latitudes in model :', io_lat
     273          CALL abort_gcm('get_aero_fromfile', 'latitudes do not correspond between file and model',1)
     274       END IF
    234275
    235276! 2) Check if old or new file is avalabale.
     
    378419
    379420       IF ((pt_b(1) < pt_b(klev_src)) .OR. .NOT. new_file) THEN
    380           WRITE(lunout,*) 'Vertical axis in file ',TRIM(fname), ' needs to be inversed'
     421          WRITE(lunout,*) 'Vertical axis in file ',TRIM(fname), ' needs to be inverted'
    381422          WRITE(lunout,*) 'before pt_ap = ', pt_ap
    382423          WRITE(lunout,*) 'before pt_b = ', pt_b
     
    413454       END IF
    414455
    415 !     - Also the latitudes have to be inversed
     456!     - Invert latitudes if necessary
    416457       DO imth=1, 12
    417           ! Inverse latitudes
    418           varmth(:,:,:) = varyear(:,:,:,imth) ! use varmth temporarly
    419           DO k=1,klev_src
    420              DO j=1,jjm+1
    421                 DO i=1,iim
    422                    varyear(i,j,k,imth) = varmth(i,jjm+1+1-j,k)
     458          IF (invert_lat) THEN
     459
     460             ! Invert latitudes for the variable
     461             varmth(:,:,:) = varyear(:,:,:,imth) ! use varmth temporarly
     462             DO k=1,klev_src
     463                DO j=1,jjm+1
     464                   DO i=1,iim
     465                      varyear(i,j,k,imth) = varmth(i,jjm+1+1-j,k)
     466                   END DO
    423467                END DO
    424468             END DO
    425           END DO
    426 
    427           ! Inverse latitudes for surface pressure
    428           vartmp(:,:) = psurf_glo2D(:,:,imth)
    429           DO j=1, jjm+1
    430              DO i=1,iim
    431                 psurf_glo2D(i,j,imth)= vartmp(i,jjm+1+1-j)
     469             
     470             ! Invert latitudes for surface pressure
     471             vartmp(:,:) = psurf_glo2D(:,:,imth)
     472             DO j=1, jjm+1
     473                DO i=1,iim
     474                   psurf_glo2D(i,j,imth)= vartmp(i,jjm+1+1-j)
     475                END DO
    432476             END DO
    433           END DO
    434          
    435           ! Inverse latitudes for the load
    436           vartmp(:,:) = load_glo2D(:,:,imth)
    437           DO j=1, jjm+1
    438              DO i=1,iim
    439                 load_glo2D(i,j,imth)= vartmp(i,jjm+1+1-j)
     477             
     478             ! Invert latitudes for the load
     479             vartmp(:,:) = load_glo2D(:,:,imth)
     480             DO j=1, jjm+1
     481                DO i=1,iim
     482                   load_glo2D(i,j,imth)= vartmp(i,jjm+1+1-j)
     483                END DO
    440484             END DO
    441           END DO
    442  
     485          END IF ! invert_lat
     486            
    443487          ! Do zonal mead at poles and distribut at whole first and last latitude
    444488          DO k=1, klev_src
     
    455499          END DO
    456500       END DO ! imth
    457 
     501       
    458502       ALLOCATE(varyear_glo1D(klon_glo, klev_src, 12), stat=ierr)
    459503       IF (ierr /= 0) CALL abort_gcm('get_aero_fromfile', 'pb in allocation 3',1)
  • LMDZ4/branches/LMDZ4-dev/libf/phylmd/readaerosol_interp.F90

    r1181 r1183  
    1616  USE mod_phys_lmdz_para, ONLY : mpi_rank 
    1717  USE readaerosol_mod
    18   USE aerosol_mod, ONLY : naero_spc, name_aero
     18  USE aero_mod, ONLY : naero_spc, name_aero
    1919  USE write_field_phy
    2020
  • LMDZ4/branches/LMDZ4-dev/libf/phylmd/readaerosol_optic.F90

    r1181 r1183  
    33SUBROUTINE readaerosol_optic(debut, new_aod, flag_aerosol, rjourvrai, pdtphys, &
    44     pplay, paprs, t_seri, rhcl, &
    5      mass_ins_aero, mass_ins_aero_pi, &
     5     mass_solu_aero, mass_solu_aero_pi, &
    66     tau_aero, piz_aero, cg_aero, &
    77     tausum_aero, tau3d_aero )
     
    1313 
    1414  USE dimphy
    15   USE aerosol_mod
     15  USE aero_mod
    1616  IMPLICIT NONE
    1717
     
    3030! Output arguments
    3131!****************************************************************************************
    32   REAL, DIMENSION(klon,klev), INTENT(OUT)     :: mass_ins_aero    ! Total mass for all indissoluble aerosols
    33   REAL, DIMENSION(klon,klev), INTENT(OUT)     :: mass_ins_aero_pi !     -"-     preindustrial values
     32  REAL, DIMENSION(klon,klev), INTENT(OUT)     :: mass_solu_aero    ! Total mass for all soluble aerosols
     33  REAL, DIMENSION(klon,klev), INTENT(OUT)     :: mass_solu_aero_pi !     -"-     preindustrial values
    3434  REAL, DIMENSION(klon,klev,naero_grp,nbands), INTENT(OUT) :: tau_aero    ! Aerosol optical thickness
    3535  REAL, DIMENSION(klon,klev,naero_grp,nbands), INTENT(OUT) :: piz_aero    ! Single scattering albedo aerosol
     
    138138
    139139!
    140 ! Calculate the total mass of all indissoluble aersosols
     140! Calculate the total mass of all soluble aersosols
    141141!
    142   mass_ins_aero(:,:)    = sulfate(:,:)    + bcsol(:,:)    + pomsol(:,:)    + &
    143        sscoarse(:,:)   + ssacu(:,:)    + cidust(:,:)
    144   mass_ins_aero_pi(:,:) = sulfate_pi(:,:) + bcsol_pi(:,:) + pomsol_pi(:,:) + &
    145        sscoarse_pi(:,:) + ssacu_pi(:,:) + cidust_pi(:,:)
     142  mass_solu_aero(:,:)    = sulfate(:,:)    + bcsol(:,:)    + pomsol(:,:)    + &
     143       sscoarse(:,:)   + ssacu(:,:)
     144  mass_solu_aero_pi(:,:) = sulfate_pi(:,:) + bcsol_pi(:,:) + pomsol_pi(:,:) + &
     145       sscoarse_pi(:,:) + ssacu_pi(:,:)
    146146
    147147!****************************************************************************************
Note: See TracChangeset for help on using the changeset viewer.