Changeset 3366 for LMDZ6/trunk


Ignore:
Timestamp:
Jul 8, 2018, 10:35:26 AM (6 years ago)
Author:
oboucher
Message:

Introducing CO2 emissions from biomass burning
and a bit of formatting the code

File:
1 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/trunk/libf/phylmd/tracco2i_mod.F90

    r3361 r3366  
    8282!--co2bb is zero for now
    8383    CALL co2_emissions(debutphy,co2ff,co2bb)
     84    PRINT *,'co2 emissions i'
    8485
    8586!--preparing the net anthropogenic flux at the surface for mixing layer
    8687!--unit kg CO2 / m2 / s
    87     DO i=1, klon
    88       source(i,id_CO2)=co2ff(i)+co2bb(i)
    89     ENDDO
     88    source(:,id_CO2)=co2ff(:)+co2bb(:)
    9089
    9190!--computing global mean CO2 for radiation
     
    111110    USE geometry_mod, ONLY : cell_area
    112111    USE mod_grid_phy_lmdz
    113     USE mod_phys_lmdz_mpi_data, ONLY : is_mpi_root
     112    USE mod_phys_lmdz_mpi_data, ONLY: is_mpi_root
    114113    USE mod_phys_lmdz_para, ONLY: gather, scatter
    115114    USE phys_cal_mod
     
    126125
    127126! For NetCDF:
    128     integer ncid_in  ! IDs for input files
    129     integer varid, ncerr
     127    INTEGER ncid_in  ! IDs for input files
     128    INTEGER varid, ncerr
    130129
    131130    INTEGER :: n_glo, n_month
    132131    REAL, POINTER:: vector(:), time(:)
    133     REAL,ALLOCATABLE       :: flx_co2_glo(:,:) !  fossil-fuel CO2
    134     REAL,ALLOCATABLE, SAVE :: flx_co2(:,:)     !  fossil-fuel CO2
    135 !$OMP THREADPRIVATE(flx_co2)
    136 
    137   IF (debutphy) THEN
    138 
    139   ALLOCATE(flx_co2(klon,12))
     132    REAL,ALLOCATABLE       :: flx_co2ff_glo(:,:) !  fossil-fuel CO2
     133    REAL,ALLOCATABLE, SAVE :: flx_co2ff(:,:)     !  fossil-fuel CO2
     134    REAL,ALLOCATABLE       :: flx_co2bb_glo(:,:) !  biomass-burning CO2
     135    REAL,ALLOCATABLE, SAVE :: flx_co2bb(:,:)     !  biomass-burning CO2
     136!$OMP THREADPRIVATE(flx_co2ff, flx_co2bb)
     137
     138    LOGICAL, PARAMETER :: readco2ff=.TRUE., readco2bb=.FALSE. !!may be controlled via the .def later on
     139
     140    IF (debutphy) THEN
     141
     142    ALLOCATE(flx_co2ff(klon,12))
     143    ALLOCATE(flx_co2bb(klon,12))
    140144
    141145!$OMP MASTER
    142   IF (is_mpi_root) THEN
    143     ! ... Open the file
    144     CALL nf95_open("sflx_lmdz_co2.nc", nf90_nowrite, ncid_in)
    145 
    146     CALL nf95_inq_varid(ncid_in, "vector", varid)
    147     CALL nf95_gw_var(ncid_in, varid, vector)
    148     n_glo = size(vector)
    149     IF (n_glo.NE.klon_glo) THEN
    150        print *,'Le nombre de points n est pas egal a klon_glo'
    151        STOP
    152     ENDIF
    153 
    154     CALL nf95_inq_varid(ncid_in, "time", varid)
    155     CALL nf95_gw_var(ncid_in, varid, time)
    156     n_month = size(time)
    157     IF (n_month.NE.12) THEN
    158        print *,'Le nombre de month n est pas egal a 12'
    159        STOP
    160     ENDIF
    161 
    162     IF (.NOT.ALLOCATED(flx_co2_glo)) ALLOCATE(flx_co2_glo(n_glo,n_month))
    163 
    164 !--reading flx_co2
    165     CALL nf95_inq_varid(ncid_in, "flx_co2", varid)
    166     ncerr = nf90_get_var(ncid_in, varid, flx_co2_glo)
    167 
    168     CALL nf95_close(ncid_in)
    169   ENDIF
     146    IF (is_mpi_root) THEN
     147   
     148      IF (.NOT.ALLOCATED(flx_co2ff_glo)) ALLOCATE(flx_co2ff_glo(n_glo,n_month))
     149      IF (.NOT.ALLOCATED(flx_co2bb_glo)) ALLOCATE(flx_co2bb_glo(n_glo,n_month))
     150
     151!--reading CO2 fossil fuel emissions
     152      IF (readco2ff) THEN
     153
     154        ! ... Open the COZff file
     155        CALL nf95_open("sflx_lmdz_co2_ff.nc", nf90_nowrite, ncid_in)
     156
     157        CALL nf95_inq_varid(ncid_in, "vector", varid)
     158        CALL nf95_gw_var(ncid_in, varid, vector)
     159        n_glo = size(vector)
     160        IF (n_glo.NE.klon_glo) THEN
     161           PRINT *,'sflx_lmdz_co2_ff: le nombre de points n est pas egal a klon_glo'
     162           STOP
     163        ENDIF
     164
     165        CALL nf95_inq_varid(ncid_in, "time", varid)
     166        CALL nf95_gw_var(ncid_in, varid, time)
     167        n_month = size(time)
     168        IF (n_month.NE.12) THEN
     169           PRINT *,'sflx_lmdz_co2_ff: le nombre de month n est pas egal a 12'
     170           STOP
     171        ENDIF
     172
     173!--reading flx_co2 for fossil fuel
     174        CALL nf95_inq_varid(ncid_in, "flx_co2", varid)
     175        ncerr = nf90_get_var(ncid_in, varid, flx_co2ff_glo)
     176
     177        CALL nf95_close(ncid_in)
     178   
     179      ELSE  !--co2ff not to be read
     180        flx_co2ff_glo(:,:)=0.0
     181      ENDIF
     182
     183!--reading CO2 biomass burning emissions
     184      IF (readco2bb) THEN
     185
     186      ! ... Open the CO2bb file
     187      CALL nf95_open("sflx_lmdz_co2_bb.nc", nf90_nowrite, ncid_in)
     188
     189      CALL nf95_inq_varid(ncid_in, "vector", varid)
     190      CALL nf95_gw_var(ncid_in, varid, vector)
     191      n_glo = size(vector)
     192      IF (n_glo.NE.klon_glo) THEN
     193         PRINT *,'sflx_lmdz_co2_bb: le nombre de points n est pas egal a klon_glo'
     194         STOP
     195      ENDIF
     196
     197      CALL nf95_inq_varid(ncid_in, "time", varid)
     198      CALL nf95_gw_var(ncid_in, varid, time)
     199      n_month = size(time)
     200      IF (n_month.NE.12) THEN
     201         PRINT *,'sflx_lmdz_co2_bb: le nombre de month n est pas egal a 12'
     202         STOP
     203      ENDIF
     204
     205!--reading flx_co2 for biomass burning
     206      CALL nf95_inq_varid(ncid_in, "flx_co2", varid)
     207      ncerr = nf90_get_var(ncid_in, varid, flx_co2bb_glo)
     208
     209      CALL nf95_close(ncid_in)
     210   
     211      ELSE  !--co2bb not to be read
     212        flx_co2bb_glo(:,:)=0.0
     213      ENDIF
     214
     215    ENDIF
    170216!$OMP END MASTER
    171217
    172218!--scatter on all proc
    173   CALL scatter(flx_co2_glo,flx_co2)
     219    CALL scatter(flx_co2ff_glo,flx_co2ff)
     220    CALL scatter(flx_co2bb_glo,flx_co2bb)
    174221
    175222!$OMP MASTER
    176   IF (is_mpi_root) THEN
    177      DEALLOCATE(flx_co2_glo)
    178   ENDIF
     223    IF (is_mpi_root) THEN
     224       DEALLOCATE(flx_co2ff_glo)
     225       DEALLOCATE(flx_co2bb_glo)
     226    ENDIF
    179227!$OMP END MASTER
    180228
     
    183231!---select the correct month
    184232  IF (mth_cur.LT.1.OR.mth_cur.GT.12) THEN
    185     print *,'probleme avec le mois dans co2_ini =', mth_cur
     233    PRINT *,'probleme avec le mois dans co2_ini =', mth_cur
    186234  ENDIF
    187   co2ff(:) = flx_co2(:,mth_cur)
    188   co2bb(:) = 0.0
     235  co2ff(:) = flx_co2ff(:,mth_cur)
     236  co2bb(:) = flx_co2bb(:,mth_cur)
    189237
    190238  END SUBROUTINE co2_emissions
Note: See TracChangeset for help on using the changeset viewer.