Ignore:
Timestamp:
Aug 3, 2024, 2:56:58 PM (3 months ago)
Author:
abarral
Message:

Put .h into modules

File:
1 moved

Legend:

Unmodified
Added
Removed
  • LMDZ6/branches/Amaury_dev/libf/phylmd/Dust/lmdz_precuremission.f90

    r5159 r5160  
    1 ! Subroutine that calculates the emission of aerosols precursors
    2 SUBROUTINE precuremission(ftsol, u10m_ec, v10m_ec, &
    3         pctsrf, u_seri, v_seri, paprs, pplay, cdragh, &
    4         cdragm, t_seri, q_seri, tsol, fracso2emis, &
    5         frach2sofso2, bateau, zdz, zalt, &
    6         kminbc, kmaxbc, pdtphys, scale_param_bb, &
    7         scale_param_ind, iregion_ind, iregion_bb, &
    8         nbreg_ind, nbreg_bb, &
    9         lmt_so2ff_l, lmt_so2ff_h, lmt_so2nff, &
    10         lmt_so2ba, lmt_so2bb_l, lmt_so2bb_h, &
    11         lmt_so2volc_cont, lmt_altvolc_cont, &
    12         lmt_so2volc_expl, lmt_altvolc_expl, &
    13         lmt_dmsbio, lmt_h2sbio, lmt_dmsconc, &
    14         lmt_dms, id_prec, id_fine, &
    15         flux_sparam_ind, flux_sparam_bb, &
    16         source_tr, flux_tr, tr_seri)
    17 
    18   USE dimphy
    19   USE indice_sol_mod
    20   USE infotrac
    21   ! USE phytracr_spl_mod, ONLY: nbreg_dust, nbreg_ind, nbreg_bb
    22   USE lmdz_yomcst
    23 
    24 USE lmdz_dimensions, ONLY: iim, jjm, llm, ndm
    25   USE lmdz_paramet
    26   IMPLICIT NONE
    27 
    28 
    29   INCLUDE "chem.h"
    30   INCLUDE "chem_spla.h"
    31 
    32 
    33   !============================= INPUT ===================================
    34   INTEGER :: kminbc, kmaxbc
    35   REAL :: ftsol(klon, nbsrf)  ! temperature du sol par type
    36   REAL :: tsol(klon)         ! temperature du sol moyenne
    37   REAL :: t_seri(klon, klev)  ! temperature
    38   REAL :: u_seri(klon, klev)  ! vent
    39   REAL :: v_seri(klon, klev)  ! vent
    40   REAL :: q_seri(klon, klev)  ! vapeur d eau kg/kg
    41   REAL :: u10m_ec(klon), v10m_ec(klon)  ! vent a 10 metres
    42   REAL :: pctsrf(klon, nbsrf)
    43   REAL :: pdtphys  ! pas d'integration pour la physique (seconde)
    44   REAL :: paprs(klon, klev + 1)  ! pression pour chaque inter-couche (en Pa)
    45   REAL :: pplay(klon, klev)  ! pression pour le mileu de chaque couche (en Pa)
    46   REAL :: cdragh(klon), cdragm(klon)
    47   REAL :: fracso2emis        !--fraction so2 emis en so2
    48   REAL :: frach2sofso2       !--fraction h2s from so2
    49   REAL :: zdz(klon, klev)
    50   LOGICAL :: edgar, bateau
    51   INTEGER :: id_prec, id_fine
    52 
    53   !------------------------- Scaling Parameters --------------------------
    54 
    55   INTEGER :: nbreg_ind, nbreg_bb
    56   INTEGER :: iregion_ind(klon)  !Defines regions for SO2, BC & OM
    57   INTEGER :: iregion_bb(klon)  !Defines regions for SO2, BC & OM
    58   REAL :: scale_param_bb(nbreg_bb)  !Scaling parameter for biomas burning
    59   REAL :: scale_param_ind(nbreg_ind) !Scaling parameter for industrial emissions
    60 
    61   !============================= OUTPUT ==================================
    62 
    63   REAL :: source_tr(klon, nbtr)
    64   REAL :: flux_tr(klon, nbtr)
    65   REAL :: tr_seri(klon, klev, nbtr) ! traceur
    66   REAL :: flux_sparam_ind(klon), flux_sparam_bb(klon)
    67   !========================= LOCAL VARIABLES =============================
    68   INTEGER :: i, k, kkk_cont(klon), kkk_expl(klon)
    69   REAL :: zalt(klon, klev), zaltmid(klon, klev)
    70   REAL :: zzdz
    71   !------------------------- SULFUR emissions ----------------------------
    72   REAL :: lmt_so2volc_cont(klon)  ! emissions so2 volcan (continuous)
    73   REAL :: lmt_altvolc_cont(klon)  ! altitude  so2 volcan (continuous)
    74   REAL :: lmt_so2volc_expl(klon)  ! emissions so2 volcan (explosive)
    75   REAL :: lmt_altvolc_expl(klon)  ! altitude  so2 volcan (explosive)
    76   REAL :: lmt_so2ff_l(klon)       ! emissions so2 fossil fuel (low)
    77   REAL :: lmt_so2ff_h(klon)       ! emissions so2 fossil fuel (high)
    78   REAL :: lmt_so2nff(klon)        ! emissions so2 non-fossil fuel
    79   REAL :: lmt_so2bb_l(klon)       ! emissions de so2 biomass burning (low)
    80   REAL :: lmt_so2bb_h(klon)       ! emissions de so2 biomass burning (high)
    81   REAL :: lmt_so2ba(klon)         ! emissions de so2 bateau
    82   REAL :: lmt_dms(klon)           ! emissions de dms
    83   REAL :: lmt_dmsconc(klon)       ! concentration de dms oceanique
    84   REAL :: lmt_dmsbio(klon)        ! emissions de dms bio
    85   REAL :: lmt_h2sbio(klon)        ! emissions de h2s bio
    86 
    87   EXTERNAL condsurfs, liss, nightingale
    88   !=========================================================================
    89   ! Modifications introduced by NHL
    90   ! -Variables to save fluxes were introduced
    91   ! -lmt_so2ba was multiplied by fracso2emis in line 117
    92   ! -scale_param_bb was introduced in line 105
    93   ! The last two modifications were errors existing in the original version
    94   !=========================================================================
    95   !=========================================================================
    96   ! LOW LEVEL EMISSIONS
    97   !=========================================================================
    98 
    99   CALL nightingale(u_seri, v_seri, u10m_ec, v10m_ec, paprs, &
    100           pplay, cdragh, cdragm, t_seri, q_seri, ftsol, &
    101           tsol, pctsrf, lmt_dmsconc, lmt_dms)
    102 
    103   IF (.NOT.bateau) THEN
     1MODULE lmdz_precureemission
     2  IMPLICIT NONE; PRIVATE
     3  PUBLIC precuremission
     4
     5CONTAINS
     6
     7  ! Subroutine that calculates the emission of aerosols precursors
     8  SUBROUTINE precuremission(ftsol, u10m_ec, v10m_ec, &
     9          pctsrf, u_seri, v_seri, paprs, pplay, cdragh, &
     10          cdragm, t_seri, q_seri, tsol, fracso2emis, &
     11          frach2sofso2, bateau, zdz, zalt, &
     12          kminbc, kmaxbc, pdtphys, scale_param_bb, &
     13          scale_param_ind, iregion_ind, iregion_bb, &
     14          nbreg_ind, nbreg_bb, &
     15          lmt_so2ff_l, lmt_so2ff_h, lmt_so2nff, &
     16          lmt_so2ba, lmt_so2bb_l, lmt_so2bb_h, &
     17          lmt_so2volc_cont, lmt_altvolc_cont, &
     18          lmt_so2volc_expl, lmt_altvolc_expl, &
     19          lmt_dmsbio, lmt_h2sbio, lmt_dmsconc, &
     20          lmt_dms, id_prec, id_fine, &
     21          flux_sparam_ind, flux_sparam_bb, &
     22          source_tr, flux_tr, tr_seri)
     23
     24    USE dimphy
     25    USE indice_sol_mod
     26    USE infotrac
     27    USE lmdz_yomcst
     28
     29    USE lmdz_paramet
     30    USE lmdz_chem, ONLY: masse_s
     31    USE lmdz_chem_spla, ONLY: masse_ammsulfate
     32    IMPLICIT NONE
     33
     34    !============================= INPUT ===================================
     35    INTEGER :: kminbc, kmaxbc
     36    REAL :: ftsol(klon, nbsrf)  ! temperature du sol par type
     37    REAL :: tsol(klon)         ! temperature du sol moyenne
     38    REAL :: t_seri(klon, klev)  ! temperature
     39    REAL :: u_seri(klon, klev)  ! vent
     40    REAL :: v_seri(klon, klev)  ! vent
     41    REAL :: q_seri(klon, klev)  ! vapeur d eau kg/kg
     42    REAL :: u10m_ec(klon), v10m_ec(klon)  ! vent a 10 metres
     43    REAL :: pctsrf(klon, nbsrf)
     44    REAL :: pdtphys  ! pas d'integration pour la physique (seconde)
     45    REAL :: paprs(klon, klev + 1)  ! pression pour chaque inter-couche (en Pa)
     46    REAL :: pplay(klon, klev)  ! pression pour le mileu de chaque couche (en Pa)
     47    REAL :: cdragh(klon), cdragm(klon)
     48    REAL :: fracso2emis        !--fraction so2 emis en so2
     49    REAL :: frach2sofso2       !--fraction h2s from so2
     50    REAL :: zdz(klon, klev)
     51    LOGICAL :: edgar, bateau
     52    INTEGER :: id_prec, id_fine
     53
     54    !------------------------- Scaling Parameters --------------------------
     55
     56    INTEGER :: nbreg_ind, nbreg_bb
     57    INTEGER :: iregion_ind(klon)  !Defines regions for SO2, BC & OM
     58    INTEGER :: iregion_bb(klon)  !Defines regions for SO2, BC & OM
     59    REAL :: scale_param_bb(nbreg_bb)  !Scaling parameter for biomas burning
     60    REAL :: scale_param_ind(nbreg_ind) !Scaling parameter for industrial emissions
     61
     62    !============================= OUTPUT ==================================
     63
     64    REAL :: source_tr(klon, nbtr)
     65    REAL :: flux_tr(klon, nbtr)
     66    REAL :: tr_seri(klon, klev, nbtr) ! traceur
     67    REAL :: flux_sparam_ind(klon), flux_sparam_bb(klon)
     68    !========================= LOCAL VARIABLES =============================
     69    INTEGER :: i, k, kkk_cont(klon), kkk_expl(klon)
     70    REAL :: zalt(klon, klev), zaltmid(klon, klev)
     71    REAL :: zzdz
     72    !------------------------- SULFUR emissions ----------------------------
     73    REAL :: lmt_so2volc_cont(klon)  ! emissions so2 volcan (continuous)
     74    REAL :: lmt_altvolc_cont(klon)  ! altitude  so2 volcan (continuous)
     75    REAL :: lmt_so2volc_expl(klon)  ! emissions so2 volcan (explosive)
     76    REAL :: lmt_altvolc_expl(klon)  ! altitude  so2 volcan (explosive)
     77    REAL :: lmt_so2ff_l(klon)       ! emissions so2 fossil fuel (low)
     78    REAL :: lmt_so2ff_h(klon)       ! emissions so2 fossil fuel (high)
     79    REAL :: lmt_so2nff(klon)        ! emissions so2 non-fossil fuel
     80    REAL :: lmt_so2bb_l(klon)       ! emissions de so2 biomass burning (low)
     81    REAL :: lmt_so2bb_h(klon)       ! emissions de so2 biomass burning (high)
     82    REAL :: lmt_so2ba(klon)         ! emissions de so2 bateau
     83    REAL :: lmt_dms(klon)           ! emissions de dms
     84    REAL :: lmt_dmsconc(klon)       ! concentration de dms oceanique
     85    REAL :: lmt_dmsbio(klon)        ! emissions de dms bio
     86    REAL :: lmt_h2sbio(klon)        ! emissions de h2s bio
     87
     88    EXTERNAL condsurfs, liss, nightingale
     89    !=========================================================================
     90    ! Modifications introduced by NHL
     91    ! -Variables to save fluxes were introduced
     92    ! -lmt_so2ba was multiplied by fracso2emis in line 117
     93    ! -scale_param_bb was introduced in line 105
     94    ! The last two modifications were errors existing in the original version
     95    !=========================================================================
     96    !=========================================================================
     97    ! LOW LEVEL EMISSIONS
     98    !=========================================================================
     99
     100    CALL nightingale(u_seri, v_seri, u10m_ec, v10m_ec, paprs, &
     101            pplay, cdragh, cdragm, t_seri, q_seri, ftsol, &
     102            tsol, pctsrf, lmt_dmsconc, lmt_dms)
     103
     104    IF (.NOT.bateau) THEN
     105      DO i = 1, klon
     106        lmt_so2ba(i) = 0.0
     107      ENDDO
     108    ENDIF
     109
    104110    DO i = 1, klon
    105       lmt_so2ba(i) = 0.0
    106     ENDDO
    107   ENDIF
    108 
    109   DO i = 1, klon
    110     IF (iregion_ind(i)>0) THEN
    111       IF(id_prec>0) source_tr(i, id_prec) = source_tr(i, id_prec) &
     111      IF (iregion_ind(i)>0) THEN
     112        IF(id_prec>0) source_tr(i, id_prec) = source_tr(i, id_prec) &
     113                + fracso2emis &
     114                        * scale_param_ind(iregion_ind(i)) * lmt_so2ff_l(i) * 1.e4 &
     115                + scale_param_ind(iregion_ind(i)) * lmt_so2ff_l(i) * 1.e4 &
     116                        * frach2sofso2            ! molec/m2/s
     117
     118        IF(id_fine>0) source_tr(i, id_fine) = &
     119                source_tr(i, id_fine) + (1 - fracso2emis) &
     120                        * scale_param_ind(iregion_ind(i)) * lmt_so2ff_l(i) &
     121                        * 1.e4 * masse_ammsulfate / RNAVO  ! g/m2/s
     122
     123        IF(id_prec>0)   flux_tr(i, id_prec) = flux_tr(i, id_prec) + (&
     124                scale_param_ind(iregion_ind(i)) * (lmt_so2ff_l(i) + &
     125                        lmt_so2ff_h(i)) &
     126                        * frach2sofso2 &
     127                        + scale_param_ind(iregion_ind(i)) * (lmt_so2ff_l(i) + &
     128                        lmt_so2ff_h(i)) &
     129                        * fracso2emis &
     130                ) * 1.e4 / RNAVO * masse_s * 1.e3          ! mgS/m2/s
     131
     132        IF(id_fine>0)  flux_tr(i, id_fine) = &
     133                flux_tr(i, id_fine) + (1 - fracso2emis) &
     134                        * scale_param_ind(iregion_ind(i)) * (lmt_so2ff_l(i) + &
     135                        lmt_so2ff_h(i)) &
     136                        * 1.e4 / RNAVO * masse_ammsulfate * 1.e3    ! mgS/m2/s
     137
     138        flux_sparam_ind(i) = flux_sparam_ind(i) + (1 - fracso2emis) &
     139                * scale_param_ind(iregion_ind(i)) * (lmt_so2ff_l(i) + &
     140                lmt_so2ff_h(i)) &
     141                * 1.e4 / RNAVO * masse_ammsulfate * 1.e3    ! mgS/m2/s
     142      ENDIF
     143      IF (iregion_bb(i)>0) THEN
     144        IF(id_prec>0) source_tr(i, id_prec) = &
     145                source_tr(i, id_prec) + fracso2emis &
     146                        * scale_param_bb(iregion_bb(i)) * lmt_so2bb_l(i) &
     147                        * (1. - pctsrf(i, is_oce)) * 1.e4
     148
     149        IF(id_fine>0)     source_tr(i, id_fine) = &
     150                source_tr(i, id_fine) + (1 - fracso2emis) &
     151                        * scale_param_bb(iregion_bb(i)) * lmt_so2bb_l(i) * &
     152                        (1. - pctsrf(i, is_oce)) * 1.e4 * &
     153                        masse_ammsulfate / RNAVO  ! g/m2/s
     154
     155        IF(id_prec>0)     flux_tr(i, id_prec) = flux_tr(i, id_prec) + &
     156                (scale_param_bb(iregion_bb(i)) * lmt_so2bb_l(i) &
     157                        + scale_param_bb(iregion_bb(i)) * lmt_so2bb_h(i)) &
     158                        * (1. - pctsrf(i, is_oce)) * fracso2emis &
     159                        * 1.e4 / RNAVO * masse_s * 1.e3          ! mgS/m2/s
     160
     161        IF(id_fine>0) flux_tr(i, id_fine) = &
     162                flux_tr(i, id_fine) + (1 - fracso2emis) &
     163                        * (scale_param_bb(iregion_bb(i)) * lmt_so2bb_l(i) &
     164                                + scale_param_bb(iregion_bb(i)) * lmt_so2bb_h(i)) &
     165                        * (1. - pctsrf(i, is_oce)) &
     166                        * 1.e4 / RNAVO * masse_ammsulfate * 1.e3    ! mgS/m2/s
     167
     168        flux_sparam_bb(i) = &
     169                scale_param_bb(iregion_bb(i)) * (lmt_so2bb_l(i) + &
     170                        lmt_so2bb_h(i)) &
     171                        * (1. - pctsrf(i, is_oce)) * fracso2emis &
     172                        * 1.e4 / RNAVO * masse_s * 1.e3          ! mgS/m2/s
     173        flux_sparam_bb(i) = flux_sparam_bb(i) + (1 - fracso2emis) * &
     174                (scale_param_bb(iregion_bb(i)) * lmt_so2bb_l(i) + &
     175                        scale_param_bb(iregion_bb(i)) * lmt_so2bb_h(i)) &
     176                * (1. - pctsrf(i, is_oce)) &
     177                * 1.e4 / RNAVO * masse_ammsulfate * 1.e3    ! mgS/m2/s
     178      ENDIF
     179      IF(id_prec>0)   source_tr(i, id_prec) = source_tr(i, id_prec) &
    112180              + fracso2emis &
    113                       * scale_param_ind(iregion_ind(i)) * lmt_so2ff_l(i) * 1.e4 &
    114               + scale_param_ind(iregion_ind(i)) * lmt_so2ff_l(i) * 1.e4 &
    115                       * frach2sofso2            ! molec/m2/s
    116 
    117       IF(id_fine>0) source_tr(i, id_fine) = &
    118               source_tr(i, id_fine) + (1 - fracso2emis) &
    119                       * scale_param_ind(iregion_ind(i)) * lmt_so2ff_l(i) &
    120                       * 1.e4 * masse_ammsulfate / RNAVO  ! g/m2/s
    121 
    122       IF(id_prec>0)   flux_tr(i, id_prec) = flux_tr(i, id_prec) + (&
    123               scale_param_ind(iregion_ind(i)) * (lmt_so2ff_l(i) + &
    124                       lmt_so2ff_h(i)) &
    125                       * frach2sofso2 &
    126                       + scale_param_ind(iregion_ind(i)) * (lmt_so2ff_l(i) + &
    127                       lmt_so2ff_h(i)) &
    128                       * fracso2emis &
    129               ) * 1.e4 / RNAVO * masse_s * 1.e3          ! mgS/m2/s
    130 
    131       IF(id_fine>0)  flux_tr(i, id_fine) = &
    132               flux_tr(i, id_fine) + (1 - fracso2emis) &
    133                       * scale_param_ind(iregion_ind(i)) * (lmt_so2ff_l(i) + &
    134                       lmt_so2ff_h(i)) &
     181                      * (lmt_so2ba(i) + lmt_so2nff(i)) * 1.e4 &
     182              + (lmt_h2sbio(i) &
     183                      + lmt_dms(i) + lmt_dmsbio(i)) * 1.e4            ! molec/m2/s
     184
     185      IF(id_fine>0)   source_tr(i, id_fine) = source_tr(i, id_fine) &
     186              + (1 - fracso2emis) &
     187                      * (lmt_so2ba(i) + lmt_so2nff(i)) * 1.e4 * &
     188                      masse_ammsulfate / RNAVO  ! g/m2/s
     189
     190      IF(id_prec>0)   flux_tr(i, id_prec) = flux_tr(i, id_prec) &
     191              + (lmt_h2sbio(i) &
     192                      + lmt_so2volc_cont(i) + lmt_so2volc_expl(i) &
     193                      + (lmt_so2ba(i) + lmt_so2nff(i)) * fracso2emis &
     194                      + lmt_dms(i) + lmt_dmsbio(i)) &
     195                      * 1.e4 / RNAVO * masse_s * 1.e3          ! mgS/m2/s
     196
     197      IF(id_fine>0)   flux_tr(i, id_fine) = flux_tr(i, id_fine) &
     198              + (1 - fracso2emis) &
     199                      * (lmt_so2ba(i) + lmt_so2nff(i)) &
    135200                      * 1.e4 / RNAVO * masse_ammsulfate * 1.e3    ! mgS/m2/s
    136201
    137202      flux_sparam_ind(i) = flux_sparam_ind(i) + (1 - fracso2emis) &
    138               * scale_param_ind(iregion_ind(i)) * (lmt_so2ff_l(i) + &
    139               lmt_so2ff_h(i)) &
     203              * lmt_so2nff(i) &
    140204              * 1.e4 / RNAVO * masse_ammsulfate * 1.e3    ! mgS/m2/s
     205
     206    ENDDO
     207
     208    !========================================================================
     209    ! HIGH LEVEL EMISSIONS
     210    !========================================================================
     211    !  Source de SO2 volcaniques
     212    DO i = 1, klon
     213      kkk_cont(i) = 1
     214      kkk_expl(i) = 1
     215    ENDDO
     216    DO k = 1, klev - 1
     217      DO i = 1, klon
     218        zaltmid(i, k) = zalt(i, k) + zdz(i, k) / 2.
     219        IF (zalt(i, k + 1)<lmt_altvolc_cont(i)) kkk_cont(i) = k + 1
     220        IF (zalt(i, k + 1)<lmt_altvolc_expl(i)) kkk_expl(i) = k + 1
     221      ENDDO
     222    ENDDO
     223    IF(id_prec>0) THEN
     224      DO i = 1, klon
     225        tr_seri(i, kkk_cont(i), id_prec) = tr_seri(i, kkk_cont(i), id_prec) + &
     226                lmt_so2volc_cont(i) / zdz(i, kkk_cont(i)) / 100. * pdtphys
     227        tr_seri(i, kkk_expl(i), id_prec) = tr_seri(i, kkk_expl(i), id_prec) + &
     228                lmt_so2volc_expl(i) / zdz(i, kkk_expl(i)) / 100. * pdtphys
     229      ENDDO
    141230    ENDIF
    142     IF (iregion_bb(i)>0) THEN
    143       IF(id_prec>0) source_tr(i, id_prec) = &
    144               source_tr(i, id_prec) + fracso2emis &
    145                       * scale_param_bb(iregion_bb(i)) * lmt_so2bb_l(i) &
    146                       * (1. - pctsrf(i, is_oce)) * 1.e4
    147 
    148       IF(id_fine>0)     source_tr(i, id_fine) = &
    149               source_tr(i, id_fine) + (1 - fracso2emis) &
    150                       * scale_param_bb(iregion_bb(i)) * lmt_so2bb_l(i) * &
    151                       (1. - pctsrf(i, is_oce)) * 1.e4 * &
    152                       masse_ammsulfate / RNAVO  ! g/m2/s
    153 
    154       IF(id_prec>0)     flux_tr(i, id_prec) = flux_tr(i, id_prec) + &
    155               (scale_param_bb(iregion_bb(i)) * lmt_so2bb_l(i) &
    156                       + scale_param_bb(iregion_bb(i)) * lmt_so2bb_h(i)) &
    157                       * (1. - pctsrf(i, is_oce)) * fracso2emis &
    158                       * 1.e4 / RNAVO * masse_s * 1.e3          ! mgS/m2/s
    159 
    160       IF(id_fine>0) flux_tr(i, id_fine) = &
    161               flux_tr(i, id_fine) + (1 - fracso2emis) &
    162                       * (scale_param_bb(iregion_bb(i)) * lmt_so2bb_l(i) &
    163                               + scale_param_bb(iregion_bb(i)) * lmt_so2bb_h(i)) &
    164                       * (1. - pctsrf(i, is_oce)) &
    165                       * 1.e4 / RNAVO * masse_ammsulfate * 1.e3    ! mgS/m2/s
    166 
    167       flux_sparam_bb(i) = &
    168               scale_param_bb(iregion_bb(i)) * (lmt_so2bb_l(i) + &
    169                       lmt_so2bb_h(i)) &
    170                       * (1. - pctsrf(i, is_oce)) * fracso2emis &
    171                       * 1.e4 / RNAVO * masse_s * 1.e3          ! mgS/m2/s
    172       flux_sparam_bb(i) = flux_sparam_bb(i) + (1 - fracso2emis) * &
    173               (scale_param_bb(iregion_bb(i)) * lmt_so2bb_l(i) + &
    174                       scale_param_bb(iregion_bb(i)) * lmt_so2bb_h(i)) &
    175               * (1. - pctsrf(i, is_oce)) &
    176               * 1.e4 / RNAVO * masse_ammsulfate * 1.e3    ! mgS/m2/s
    177     ENDIF
    178     IF(id_prec>0)   source_tr(i, id_prec) = source_tr(i, id_prec) &
    179             + fracso2emis &
    180                     * (lmt_so2ba(i) + lmt_so2nff(i)) * 1.e4 &
    181             + (lmt_h2sbio(i) &
    182                     + lmt_dms(i) + lmt_dmsbio(i)) * 1.e4            ! molec/m2/s
    183 
    184     IF(id_fine>0)   source_tr(i, id_fine) = source_tr(i, id_fine) &
    185             + (1 - fracso2emis) &
    186                     * (lmt_so2ba(i) + lmt_so2nff(i)) * 1.e4 * &
    187                     masse_ammsulfate / RNAVO  ! g/m2/s
    188 
    189     IF(id_prec>0)   flux_tr(i, id_prec) = flux_tr(i, id_prec) &
    190             + (lmt_h2sbio(i) &
    191                     + lmt_so2volc_cont(i) + lmt_so2volc_expl(i) &
    192                     + (lmt_so2ba(i) + lmt_so2nff(i)) * fracso2emis &
    193                     + lmt_dms(i) + lmt_dmsbio(i)) &
    194                     * 1.e4 / RNAVO * masse_s * 1.e3          ! mgS/m2/s
    195 
    196     IF(id_fine>0)   flux_tr(i, id_fine) = flux_tr(i, id_fine) &
    197             + (1 - fracso2emis) &
    198                     * (lmt_so2ba(i) + lmt_so2nff(i)) &
    199                     * 1.e4 / RNAVO * masse_ammsulfate * 1.e3    ! mgS/m2/s
    200 
    201     flux_sparam_ind(i) = flux_sparam_ind(i) + (1 - fracso2emis) &
    202             * lmt_so2nff(i) &
    203             * 1.e4 / RNAVO * masse_ammsulfate * 1.e3    ! mgS/m2/s
    204 
    205   ENDDO
    206 
    207   !========================================================================
    208   ! HIGH LEVEL EMISSIONS
    209   !========================================================================
    210   !  Source de SO2 volcaniques
    211   DO i = 1, klon
    212     kkk_cont(i) = 1
    213     kkk_expl(i) = 1
    214   ENDDO
    215   DO k = 1, klev - 1
     231    !  Sources hautes de SO2
     232
     233
     234    !--only GEIA SO2 emissions has high emissions
     235    !--unit: molec/cm2/s divided by layer height (in cm) multiplied by timestep
     236
     237    k = 2                             !introducing emissions in level 2
    216238    DO i = 1, klon
    217       zaltmid(i, k) = zalt(i, k) + zdz(i, k) / 2.
    218       IF (zalt(i, k + 1)<lmt_altvolc_cont(i)) kkk_cont(i) = k + 1
    219       IF (zalt(i, k + 1)<lmt_altvolc_expl(i)) kkk_expl(i) = k + 1
    220     ENDDO
    221   ENDDO
    222   IF(id_prec>0) THEN
    223     DO i = 1, klon
    224       tr_seri(i, kkk_cont(i), id_prec) = tr_seri(i, kkk_cont(i), id_prec) + &
    225               lmt_so2volc_cont(i) / zdz(i, kkk_cont(i)) / 100. * pdtphys
    226       tr_seri(i, kkk_expl(i), id_prec) = tr_seri(i, kkk_expl(i), id_prec) + &
    227               lmt_so2volc_expl(i) / zdz(i, kkk_expl(i)) / 100. * pdtphys
    228     ENDDO
    229   ENDIF
    230   !  Sources hautes de SO2
    231 
    232 
    233   !--only GEIA SO2 emissions has high emissions
    234   !--unit: molec/cm2/s divided by layer height (in cm) multiplied by timestep
    235 
    236   k = 2                             !introducing emissions in level 2
    237   DO i = 1, klon
    238 
    239     IF (iregion_bb(i)>0) THEN
    240       IF(id_prec>0)   tr_seri(i, k, id_prec) = &
    241               tr_seri(i, k, id_prec) + fracso2emis &
    242                       * scale_param_bb(iregion_bb(i)) * lmt_so2bb_h(i) &
    243                       / zdz(i, k) / 100. * pdtphys
    244 
    245       IF(id_fine>0)     tr_seri(i, k, id_fine) = tr_seri(i, k, id_fine) &
    246               + (1. - fracso2emis) &
    247                       * scale_param_bb(iregion_bb(i)) * lmt_so2bb_h(i) &
    248                       * masse_ammsulfate / RNAVO / zdz(i, k) / 100. * pdtphys   !g/cm3
    249     ENDIF
    250     IF (iregion_ind(i)>0) THEN
    251       IF(id_prec>0)  tr_seri(i, k, id_prec) = &
    252               tr_seri(i, k, id_prec) + (fracso2emis &
    253                       * scale_param_ind(iregion_ind(i)) * lmt_so2ff_h(i) &
    254                       + frach2sofso2 &
    255                               * scale_param_ind(iregion_ind(i)) * lmt_so2ff_h(i)) &
    256                       / zdz(i, k) / 100. * pdtphys
    257 
    258       IF(id_fine>0)    tr_seri(i, k, id_fine) = tr_seri(i, k, id_fine) &
    259               + (1. - fracso2emis) &
    260                       * scale_param_ind(iregion_ind(i)) * lmt_so2ff_h(i) &
    261                       * masse_ammsulfate / RNAVO / zdz(i, k) / 100. * pdtphys   !g/cm3
    262     ENDIF
    263 
    264   ENDDO
    265 
    266 END SUBROUTINE precuremission
     239
     240      IF (iregion_bb(i)>0) THEN
     241        IF(id_prec>0)   tr_seri(i, k, id_prec) = &
     242                tr_seri(i, k, id_prec) + fracso2emis &
     243                        * scale_param_bb(iregion_bb(i)) * lmt_so2bb_h(i) &
     244                        / zdz(i, k) / 100. * pdtphys
     245
     246        IF(id_fine>0)     tr_seri(i, k, id_fine) = tr_seri(i, k, id_fine) &
     247                + (1. - fracso2emis) &
     248                        * scale_param_bb(iregion_bb(i)) * lmt_so2bb_h(i) &
     249                        * masse_ammsulfate / RNAVO / zdz(i, k) / 100. * pdtphys   !g/cm3
     250      ENDIF
     251      IF (iregion_ind(i)>0) THEN
     252        IF(id_prec>0)  tr_seri(i, k, id_prec) = &
     253                tr_seri(i, k, id_prec) + (fracso2emis &
     254                        * scale_param_ind(iregion_ind(i)) * lmt_so2ff_h(i) &
     255                        + frach2sofso2 &
     256                                * scale_param_ind(iregion_ind(i)) * lmt_so2ff_h(i)) &
     257                        / zdz(i, k) / 100. * pdtphys
     258
     259        IF(id_fine>0)    tr_seri(i, k, id_fine) = tr_seri(i, k, id_fine) &
     260                + (1. - fracso2emis) &
     261                        * scale_param_ind(iregion_ind(i)) * lmt_so2ff_h(i) &
     262                        * masse_ammsulfate / RNAVO / zdz(i, k) / 100. * pdtphys   !g/cm3
     263      ENDIF
     264
     265    ENDDO
     266
     267  END SUBROUTINE precuremission
     268END MODULE lmdz_precureemission
Note: See TracChangeset for help on using the changeset viewer.