Changeset 1483 for LMDZ4


Ignore:
Timestamp:
Feb 9, 2011, 4:21:55 PM (13 years ago)
Author:
jghattas
Message:
  • Added option aer_type=mix1 and mix2

mix1: as aer_type=scenario for SO4 and aer_type=annuel for the other aerosols.
mix2: as aer_type=scenario for SO4 and aer_type=preind for the other aerosols.
For these 2 options 2 files are read : so4.runxxxx.nc for SO4 and aerosolsxxxx.nc the other aerosols.

  • Bug fix for using old sulfate data(files AR4 from O Boucher) : moved test for number of time steps read from file but not available in old file format.
Location:
LMDZ4/branches/LMDZ4_AR5/libf/phylmd
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • LMDZ4/branches/LMDZ4_AR5/libf/phylmd/readaerosol.F90

    r1321 r1483  
    77CONTAINS
    88
    9 SUBROUTINE readaerosol(name_aero, type, iyr_in, klev_src, pt_ap, pt_b, pt_out, psurf, load)
     9SUBROUTINE readaerosol(name_aero, type, filename, iyr_in, klev_src, pt_ap, pt_b, pt_out, psurf, load)
    1010
    1111!****************************************************************************************
     
    2727  ! Input arguments
    2828  CHARACTER(len=7), INTENT(IN) :: name_aero
    29   CHARACTER(len=*), INTENT(IN) :: type  ! correspond to aer_type in clesphys.h
     29  CHARACTER(len=*), INTENT(IN) :: type            ! actuel, annuel, scenario or preind
     30  CHARACTER(len=8), INTENT(IN) :: filename
    3031  INTEGER, INTENT(IN)          :: iyr_in
    3132
     
    5859     ! get_aero_fromfile returns pt_out allocated and initialized with data for 12 month
    5960     ! pt_out has dimensions (klon, klev_src, 12)
    60      CALL get_aero_fromfile(name_aero, cyear, klev_src, pt_ap, pt_b, p0, pt_out, psurf, load)
     61     CALL get_aero_fromfile(name_aero, cyear, filename, klev_src, pt_ap, pt_b, p0, pt_out, psurf, load)
    6162     
    6263
     
    6768     ! get_aero_fromfile returns pt_out allocated and initialized with data for 12 month
    6869     ! pt_out has dimensions (klon, klev_src, 12)
    69      CALL get_aero_fromfile(name_aero, cyear, klev_src, pt_ap, pt_b, p0, pt_out, psurf, load)
     70     CALL get_aero_fromfile(name_aero, cyear, filename, klev_src, pt_ap, pt_b, p0, pt_out, psurf, load)
    7071     
    7172  ELSE IF (type == 'annuel') THEN
     
    7677     ! get_aero_fromfile returns pt_out allocated and initialized with data for nbr_tsteps month
    7778     ! pt_out has dimensions (klon, klev_src, 12)
    78      CALL get_aero_fromfile(name_aero, cyear, klev_src, pt_ap, pt_b, p0, pt_out, psurf, load)
     79     CALL get_aero_fromfile(name_aero, cyear, filename, klev_src, pt_ap, pt_b, p0, pt_out, psurf, load)
    7980     
    8081  ELSE IF (type == 'scenario') THEN
     
    8687        ! get_aero_fromfile returns pt_out allocated and initialized with data for 12 month
    8788        ! pt_out has dimensions (klon, klev_src, 12)
    88         CALL get_aero_fromfile(name_aero, cyear, klev_src, pt_ap, pt_b, p0, pt_out, psurf, load)
     89        CALL get_aero_fromfile(name_aero, cyear, filename, klev_src, pt_ap, pt_b, p0, pt_out, psurf, load)
    8990       
    9091     ELSE IF (iyr_in .GE. 2100) THEN
     
    9394        ! get_aero_fromfile returns pt_out allocated and initialized with data for 12 month
    9495        ! pt_out has dimensions (klon, klev_src, 12)
    95         CALL get_aero_fromfile(name_aero, cyear, klev_src, pt_ap, pt_b, p0, pt_out, psurf, load)
     96        CALL get_aero_fromfile(name_aero, cyear, filename, klev_src, pt_ap, pt_b, p0, pt_out, psurf, load)
    9697       
    9798     ELSE
     
    113114        ! get_aero_fromfile returns pt_out allocated and initialized with data for 12 month
    114115        ! pt_out has dimensions (klon, klev_src, 12)
    115         CALL get_aero_fromfile(name_aero, cyear, klev_src, pt_ap, pt_b, p0, pt_out, psurf, load)
     116        CALL get_aero_fromfile(name_aero, cyear, filename, klev_src, pt_ap, pt_b, p0, pt_out, psurf, load)
    116117       
    117118        ! If to read two decades:
     
    125126           ! get_aero_fromfile returns pt_2 allocated and initialized with data for 12 month
    126127           ! pt_2 has dimensions (klon, klev_src, 12)
    127            CALL get_aero_fromfile(name_aero, cyear, klev_src2, pt_ap, pt_b, p0, pt_2, psurf2, load2)
     128           CALL get_aero_fromfile(name_aero, cyear, filename, klev_src2, pt_ap, pt_b, p0, pt_2, psurf2, load2)
    128129           ! Test for same number of vertical levels
    129130           IF (klev_src /= klev_src2) THEN
     
    160161
    161162  ELSE
    162      WRITE(lunout,*)'This option is not implemented : aer_type = ', type
     163     WRITE(lunout,*)'This option is not implemented : aer_type = ', type,' name_aero=',name_aero
    163164     CALL abort_gcm('readaerosol','Error : aer_type parameter not accepted',1)
    164165  END IF ! type
     
    168169
    169170
    170   SUBROUTINE get_aero_fromfile(varname, cyr, klev_src, pt_ap, pt_b, p0, pt_year, psurf_out, load_out)
     171  SUBROUTINE get_aero_fromfile(varname, cyr, filename, klev_src, pt_ap, pt_b, p0, pt_year, psurf_out, load_out)
    171172!****************************************************************************************
    172173! Read 12 month aerosol from file and distribute to local process on physical grid.
     
    200201    CHARACTER(len=7), INTENT(IN)          :: varname
    201202    CHARACTER(len=4), INTENT(IN)          :: cyr
     203    CHARACTER(len=8), INTENT(IN)          :: filename
    202204
    203205! Output arguments
     
    213215! Local variables
    214216    CHARACTER(len=30)     :: fname
    215     CHARACTER(len=8)      :: filename='aerosols'
    216217    CHARACTER(len=30)     :: cvar
    217218    INTEGER               :: ncid, dimid, varid
     
    242243! 1) Open file
    243244!****************************************************************************************
    244        fname = filename//cyr//'.nc'
     245       ! Add suffix to filename
     246       fname = trim(filename)//cyr//'.nc'
    245247 
    246        WRITE(lunout,*) 'reading ', TRIM(fname)
     248       WRITE(lunout,*) 'reading variable ',TRIM(varname),' in file ', TRIM(fname)
    247249       CALL check_err( nf90_open(TRIM(fname), NF90_NOWRITE, ncid) )
    248250
     
    283285          CALL abort_gcm('get_aero_fromfile', 'latitudes do not correspond between file and model',1)
    284286       END IF
    285 
    286 ! 1.5) Check number of month in file opened
    287 !
    288 !**************************************************************************************************
    289        ierr = nf90_inq_dimid(ncid, 'TIME',dimid)
    290        CALL check_err( nf90_inquire_dimension(ncid, dimid, len = nbr_tsteps) )
    291 !       IF (nbr_tsteps /= 12 .AND. nbr_tsteps /= 14) THEN
    292        IF (nbr_tsteps /= 12 ) THEN
    293          CALL abort_gcm('get_aero_fromfile', 'not the right number of months in aerosol file read (should be 12 for the moment)',1)
    294        ENDIF
    295287
    296288
     
    335327
    336328       IF (new_file) THEN
     329
     330! **) Check number of month in file opened
     331!**************************************************************************************************
     332          ierr = nf90_inq_dimid(ncid, 'TIME',dimid)
     333          CALL check_err( nf90_inquire_dimension(ncid, dimid, len = nbr_tsteps) )
     334!         IF (nbr_tsteps /= 12 .AND. nbr_tsteps /= 14) THEN
     335          IF (nbr_tsteps /= 12 ) THEN
     336             CALL abort_gcm('get_aero_fromfile', &
     337                  'not the right number of months in aerosol file read (should be 12 for the moment)',1)
     338          ENDIF
    337339
    338340! ++) Read the aerosol concentration month by month and concatenate to total variable varyear
  • LMDZ4/branches/LMDZ4_AR5/libf/phylmd/readaerosol_interp.F90

    r1337 r1483  
    9292  LOGICAL,SAVE       :: debug=.FALSE.! Debugging in this subroutine
    9393!$OMP THREADPRIVATE(vert_interp, debug)
     94  CHARACTER(len=8)      :: type
     95  CHARACTER(len=8)      :: filename
    9496
    9597
     
    173175     ! Reading values corresponding to the closest year taking into count the choice of aer_type.
    174176     ! For aer_type=scenario interpolation between 2 data sets is done in readaerosol.
    175      CALL readaerosol(name_aero(id_aero), aer_type, iyr, klev_src, pt_ap, pt_b, pt_tmp, &
     177     ! If aer_type=mix1, the run type and file name depends on the aerosol.
     178     IF (aer_type=='preind' .OR. aer_type=='actuel' .OR. aer_type=='annuel' .OR. aer_type=='scenario') THEN
     179        ! Standard case
     180        filename='aerosols'
     181        type=aer_type
     182     ELSE IF (aer_type == 'mix1') THEN
     183        ! Special case using a mix of decenal sulfate file and annual aerosols(all aerosols except sulfate)
     184        IF (name_aero(id_aero) == 'SO4') THEN
     185           filename='so4.run '
     186           type='scenario'
     187        ELSE
     188           filename='aerosols'
     189           type='annuel'
     190        END IF
     191     ELSE  IF (aer_type == 'mix2') THEN
     192        ! Special case using a mix of decenal sulfate file and natrual aerosols
     193        IF (name_aero(id_aero) == 'SO4') THEN
     194           filename='so4.run '
     195           type='scenario'
     196        ELSE
     197           filename='aerosols'
     198           type='preind'
     199        END IF
     200     ELSE
     201        CALL abort_gcm('readaerosol_interp', 'this aer_type not supported',1)
     202     END IF
     203
     204     CALL readaerosol(name_aero(id_aero), type, filename, iyr, klev_src, pt_ap, pt_b, pt_tmp, &
    176205          psurf_year(:,:,id_aero), load_year(:,:,id_aero))
    177206     IF (.NOT. ALLOCATED(var_year)) THEN
     
    182211
    183212     ! Reading values corresponding to the preindustrial concentrations.
    184      CALL readaerosol(name_aero(id_aero), 'preind', iyr, pi_klev_src, pt_ap, pt_b, pt_tmp, &
     213     type='preind'
     214     CALL readaerosol(name_aero(id_aero), type, filename, iyr, pi_klev_src, pt_ap, pt_b, pt_tmp, &
    185215          pi_psurf_year(:,:,id_aero), pi_load_year(:,:,id_aero))
    186216
Note: See TracChangeset for help on using the changeset viewer.