Ignore:
Timestamp:
Jul 23, 2024, 5:57:06 PM (2 months ago)
Author:
abarral
Message:

Replace 1DUTILS.h by module lmdz_1dutils.f90
Replace 1DConv.h by module lmdz_old_1dconv.f90 (it's only used by old_* files)
Convert *.F in DUST to *.f90

File:
1 moved

Legend:

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

    r5103 r5104  
    1 c This SUBROUTINE calculates the emissions of SEA SALT and DUST, part of
    2 C which goes to tracer 2 and other part to tracer 3.
    3       SUBROUTINE coarsemission(pctsrf,pdtphys,
    4      .                         t_seri,pmflxr,pmflxs,prfl,psfl,
    5      .                         xlat,xlon,debutphy,
    6      .                         zu10m,zv10m,wstar,ale_bl,ale_wake,
    7      .                         scale_param_ssacc,scale_param_sscoa,
    8      .                         scale_param_dustacc,scale_param_dustcoa,
    9      .                         scale_param_dustsco,
    10      .                         nbreg_dust,
    11      .                         iregion_dust,dust_ec,
    12      .                  param_wstarBLperregion,param_wstarWAKEperregion,
    13      .                  nbreg_wstardust,
    14      .                  iregion_wstardust,
    15      .                         lmt_sea_salt,qmin,qmax,
    16      .                             flux_sparam_ddfine,flux_sparam_ddcoa,
    17      .                             flux_sparam_ddsco,
    18      .                             flux_sparam_ssfine,flux_sparam_sscoa,
    19      .                          id_prec,id_fine,id_coss,id_codu,id_scdu,
    20      .                          ok_chimeredust,
    21      .                                                source_tr,flux_tr)
    22 !     .                         wth,cly,zprecipinsoil,lmt_sea_salt,
    23 
    24 !      CALL dustemission( debutphy, xlat, xlon, pctsrf,
    25 !     .               zu10m     zv10m,wstar,ale_bl,ale_wake)
    26 
    27       USE dimphy
    28       USE indice_sol_mod
    29       USE infotrac
    30       USE dustemission_mod,  ONLY: dustemission
    31 !      USE phytracr_spl_mod, ONLY: nbreg_dust, nbreg_ind, nbreg_bb
    32       IMPLICIT NONE
    33 
    34       INCLUDE "dimensions.h"
    35       INCLUDE "chem.h"
    36       INCLUDE "chem_spla.h"
    37       INCLUDE "YOMCST.h"
    38       INCLUDE "paramet.h"
    39      
    40 c============================== INPUT ==================================
    41       INTEGER nbjour
    42       LOGICAL ok_chimeredust
    43       REAL pdtphys  ! pas d'integration pour la physique (seconde)
    44       REAL t_seri(klon,klev)  ! temperature
    45       REAL pctsrf(klon,nbsrf)
    46       REAL pmflxr(klon,klev+1), pmflxs(klon,klev+1)   !--convection
    47 !      REAL pmflxr(klon,klev), pmflxs(klon,klev)   !--convection
    48       REAL prfl(klon,klev+1),   psfl(klon,klev+1)     !--large-scale
    49 !      REAL prfl(klon,klev),   psfl(klon,klev)     !--large-scale
    50       LOGICAL debutphy, lafinphy
    51       REAL, intent(in) ::  xlat(klon)    ! latitudes pour chaque point
    52       REAL, intent(in) ::  xlon(klon)    ! longitudes pour chaque point
    53       REAL,DIMENSION(klon),INTENT(IN)    :: zu10m
    54       REAL,DIMENSION(klon),INTENT(IN)    :: zv10m
    55       REAL,DIMENSION(klon),INTENT(IN)    :: wstar,Ale_bl,ale_wake
    56 
    57 c
    58 c------------------------- Scaling Parameters --------------------------
    59 c
    60       INTEGER iregion_dust(klon) !Defines  dust regions
    61       REAL scale_param_ssacc  !Scaling parameter for Fine Sea Salt
    62       REAL scale_param_sscoa  !Scaling parameter for Coarse Sea Salt
    63       REAL scale_param_dustacc(nbreg_dust)  !Scaling parameter for Fine Dust
    64       REAL scale_param_dustcoa(nbreg_dust)  !Scaling parameter for Coarse Dust
    65       REAL scale_param_dustsco(nbreg_dust)  !Scaling parameter for SCoarse Dust
    66 !JE20141124<<
    67       INTEGER iregion_wstardust(klon) !Defines dust regions in terms of wstar
    68       REAL param_wstarBLperregion(nbreg_wstardust)  !
    69       REAL param_wstarWAKEperregion(nbreg_wstardust)  !
    70       REAL param_wstarBL(klon)  !parameter for surface wind correction..
    71       REAL param_wstarWAKE(klon)  !parameter for surface wind correction..
    72       INTEGER  nbreg_wstardust
    73 !JE20141124>>
    74       INTEGER  nbreg_dust
    75       INTEGER, INTENT(IN) :: id_prec,id_fine,id_coss,id_codu,id_scdu
    76 c============================== OUTPUT =================================
    77       REAL source_tr(klon,nbtr)
    78       REAL flux_tr(klon,nbtr)
    79       REAL flux_sparam_ddfine(klon), flux_sparam_ddcoa(klon)
    80       REAL flux_sparam_ddsco(klon)
    81       REAL flux_sparam_ssfine(klon), flux_sparam_sscoa(klon)
    82 c=========================== LOCAL VARIABLES ===========================           
    83       INTEGER i, j
    84       REAL pct_ocean(klon)
    85 !      REAL zprecipinsoil(klon)
    86 !      REAL cly(klon), wth(klon)
    87       REAL clyfac, avgdryrate, drying
    88            
    89 c---------------------------- SEA SALT emissions ------------------------
    90       REAL lmt_sea_salt(klon,ss_bins) !Sea salt 0.03-8.0 um                         
    91 c
    92 c--------vent 10 m CEPMMT
    93 c
    94       REAL dust_ec(klon)
    95 
    96       real tmp_var2(klon,nbtr) ! auxiliary variable to replace source
    97       REAL qmin, qmax
    98 !----------------------DUST Sahara ---------------
    99       REAL, DIMENSION(klon) :: dustsourceacc,dustsourcecoa,dustsourcesco
    100       INTEGER, DIMENSION(klon) :: maskd
    101 C*********************** DUST EMMISSIONS *******************************
    102 c
    103      
    104 !     avgdryrate=300./365.*pdtphys/86400.
    105 c
    106 !     DO i=1, klon
    107 c
    108 !       IF (cly(i).LT.9990..AND.wth(i).LT.9990.) THEN
    109 !        zprecipinsoil(i)=zprecipinsoil(i) +
    110 !    .        (pmflxr(i,1)+pmflxs(i,1)+prfl(i,1)+psfl(i,1))*pdtphys
    111 c
    112 !        clyfac=MIN(16., cly(i)*0.4+8.) ![mm] max amount of water hold in top soil
    113 !        drying=avgdryrate*exp(0.03905491*
    114 !    .                    exp(0.17446*(t_seri(i,1)-273.15))) ! [mm]
    115 !        zprecipinsoil(i)=min(max(0.,zprecipinsoil(i)-drying),clyfac) ! [mm]
    116 c         
    117 !       ENDIF
    118 c
    119 !     ENDDO
    120 c               
    121 c ==================== CALCULATING DUST EMISSIONS ======================
    122 c
    123 !      IF (lminmax) THEN
    124       DO j=1,nbtr
    125       DO i=1,klon
    126          tmp_var2(i,j)=source_tr(i,j)
    127       ENDDO
    128       ENDDO
    129       CALL minmaxsource(tmp_var2,qmin,qmax,'src: before DD emiss')
    130 !      print *,'Source = ',SUM(source_tr),MINVAL(source_tr),
    131 !     .                                     MAXVAL(source_tr)
    132 !      ENDIF
    133 
    134 c
    135       IF (.NOT. ok_chimeredust)  THEN 
    136       DO i=1, klon
    137 !!     IF (cly(i).GE.9990..OR.wth(i).GE.9990..OR.
    138 !!    .    t_seri(i,1).LE.273.15.OR.zprecipinsoil(i).GT.1.e-8) THEN
    139 !!          dust_ec(i)=0.0
    140 !!     ENDIF
    141 !c Corresponds to dust_emission.EQ.3       
    142 !!!!!!!****************AQUIIIIIIIIIIIIIIIIIIIIIIIIIIII
    143 !! Original line (4 tracers)
    144 !JE<<  old 4 tracer(nhl scheme)        source_tr(i,id_fine)=scale_param_dustacc(iregion_dust(i))*
    145 !     .                  dust_ec(i)*1.e3*0.093   ! g/m2/s
    146 !         source_tr(i,id_codu)=scale_param_dustcoa(iregion_dust(i))*
    147 !     .                  dust_ec(i)*1.e3*0.905   ! g/m2/s   bin 0.5-10um
    148 !! Original line (4 tracers)
    149 !         flux_tr(i,id_fine)=scale_param_dustacc(iregion_dust(i))*
    150 !     .                  dust_ec(i)*1.e3*0.093*1.e3  !mg/m2/s
    151 !         flux_tr(i,id_codu)=scale_param_dustcoa(iregion_dust(i))*
    152 !     .                  dust_ec(i)*1.e3*0.905*1.e3  !mg/m2/s bin 0.5-10um
    153 !         flux_sparam_ddfine(i)=scale_param_dustacc(iregion_dust(i)) *
    154 !     .                            dust_ec(i)*1.e3*0.093*1.e3
    155 !         flux_sparam_ddcoa(i)=scale_param_dustcoa(iregion_dust(i)) *
    156 !     .                            dust_ec(i)*1.e3*0.905*1.e3
    157       IF(id_fine>0)     source_tr(i,id_fine)=
    158      . scale_param_dustacc(iregion_dust(i))*
    159      .                  dust_ec(i)*1.e3*0.093   ! g/m2/s
    160       IF(id_codu>0)   source_tr(i,id_codu)=
    161      . scale_param_dustcoa(iregion_dust(i))*
    162      .                  dust_ec(i)*1.e3*0.905   ! g/m2/s   bin 0.5-10um
    163       IF(id_scdu>0)  source_tr(i,id_scdu)=0.   ! no supercoarse
    164 ! Original line (4 tracers)
    165        IF(id_fine>0)   flux_tr(i,id_fine)=
    166      .  scale_param_dustacc(iregion_dust(i))*
    167      .                  dust_ec(i)*1.e3*0.093*1.e3  !mg/m2/s
    168        IF(id_codu>0)  flux_tr(i,id_codu)=
    169      . scale_param_dustcoa(iregion_dust(i))*
    170      .                  dust_ec(i)*1.e3*0.905*1.e3  !mg/m2/s bin 0.5-10um
    171        IF(id_scdu>0) flux_tr(i,id_scdu)=0.
    172 
    173          flux_sparam_ddfine(i)=scale_param_dustacc(iregion_dust(i)) *
    174      .                            dust_ec(i)*1.e3*0.093*1.e3
    175          flux_sparam_ddcoa(i)=scale_param_dustcoa(iregion_dust(i)) *
    176      .                            dust_ec(i)*1.e3*0.905*1.e3
    177          flux_sparam_ddsco(i)=0.
    178       ENDDO
    179       ENDIF
    180 !*****************NEW CHIMERE DUST EMISSION Sahara*****
    181 ! je  20140522
    182       IF(ok_chimeredust) THEN
    183       print *,'MIX- NEW SAHARA DUST SOURCE SCHEME...'
    184 
    185       DO i=1,klon
    186       param_wstarBL(i)  =param_wstarBLperregion(iregion_wstardust(i))
    187       param_wstarWAKE(i)=param_wstarWAKEperregion(iregion_wstardust(i))
    188       ENDDO
    189 
    190 
    191       CALL dustemission( debutphy, xlat, xlon, pctsrf,
    192      .                  zu10m,zv10m,wstar,ale_bl,ale_wake,
    193      .                  param_wstarBL, param_wstarWAKE,
    194      .                  dustsourceacc,dustsourcecoa,
    195      .                  dustsourcesco,maskd)
    196      
    197       DO i=1,klon   
    198          if (maskd(i)>0) then
    199       IF(id_fine>0)    source_tr(i,id_fine)=
    200      . scale_param_dustacc(iregion_dust(i))*
    201      .                  dustsourceacc(i)*1.e3   ! g/m2/s  bin 0.03-0.5
    202       IF(id_codu>0)    source_tr(i,id_codu)=
    203      . scale_param_dustcoa(iregion_dust(i))*
    204      .                  dustsourcecoa(i)*1.e3   ! g/m2/s   bin 0.5-3um
    205       IF(id_scdu>0)   source_tr(i,id_scdu)=
    206      . scale_param_dustsco(iregion_dust(i))*
    207      .                  dustsourcesco(i)*1.e3   ! g/m2/s   bin 3-15um
    208 ! Original line (4 tracers)
    209        IF(id_fine>0)  flux_tr(i,id_fine)=
    210      .  scale_param_dustacc(iregion_dust(i))*
    211      .                  dustsourceacc(i)*1.e3*1.e3  !mg/m2/s
    212        IF(id_codu>0)  flux_tr(i,id_codu)=
    213      . scale_param_dustcoa(iregion_dust(i))*
    214      .                  dustsourcecoa(i)*1.e3*1.e3  !mg/m2/s bin 0.5-3um
    215        IF(id_scdu>0)  flux_tr(i,id_scdu)=
    216      . scale_param_dustsco(iregion_dust(i))*
    217      .                  dustsourcesco(i)*1.e3*1.e3  !mg/m2/s bin 3-15um
    218          flux_sparam_ddfine(i)=scale_param_dustacc(iregion_dust(i)) *
    219      .                            dustsourceacc(i)*1.e3*1.e3
    220          flux_sparam_ddcoa(i)=scale_param_dustcoa(iregion_dust(i)) *
    221      .                            dustsourcecoa(i)*1.e3*1.e3
    222          flux_sparam_ddsco(i)=scale_param_dustsco(iregion_dust(i)) *
    223      .                            dustsourcesco(i)*1.e3*1.e3
    224          else
    225         IF(id_fine>0) source_tr(i,id_fine)=
    226      .  scale_param_dustacc(iregion_dust(i))*
    227      .                  dust_ec(i)*1.e3*0.114   ! g/m2/s
    228         IF(id_codu>0) source_tr(i,id_codu)=
    229      .  scale_param_dustcoa(iregion_dust(i))*
    230      .                  dust_ec(i)*1.e3*0.108   ! g/m2/s   bin 0.5-3um
    231         IF(id_scdu>0) source_tr(i,id_scdu)=
    232      .  scale_param_dustsco(iregion_dust(i))*
    233      .                  dust_ec(i)*1.e3*0.778   ! g/m2/s   bin 3-15um
    234 ! Original line (4 tracers)
    235         IF(id_fine>0) flux_tr(i,id_fine)=
    236      . scale_param_dustacc(iregion_dust(i))*
    237      .                  dust_ec(i)*1.e3*0.114*1.e3  !mg/m2/s
    238         IF(id_codu>0) flux_tr(i,id_codu)=
    239      . scale_param_dustcoa(iregion_dust(i))*
    240      .                  dust_ec(i)*1.e3*0.108*1.e3  !mg/m2/s bin 0.5-3um
    241         IF(id_scdu>0) flux_tr(i,id_scdu)=
    242      . scale_param_dustsco(iregion_dust(i))*
    243      .                  dust_ec(i)*1.e3*0.778*1.e3  !mg/m2/s bin 0.5-3um
    244 
    245          flux_sparam_ddfine(i)=scale_param_dustacc(iregion_dust(i)) *
    246      .                            dust_ec(i)*1.e3*0.114*1.e3
    247          flux_sparam_ddcoa(i)=scale_param_dustcoa(iregion_dust(i)) *
    248      .                            dust_ec(i)*1.e3*0.108*1.e3
    249          flux_sparam_ddsco(i)=scale_param_dustsco(iregion_dust(i)) *
    250      .                            dust_ec(i)*1.e3*0.778*1.e3
    251 
    252          endif
    253       ENDDO
    254 
    255 
    256 
    257 
    258 
    259       ENDIF
    260 !*****************************************************                                   
    261 C******************* SEA SALT EMMISSIONS *******************************
    262       DO i=1,klon
    263          pct_ocean(i)=pctsrf(i,is_oce)
    264       ENDDO
    265 c
    266 !      IF (lminmax) THEN
    267       DO j=1,nbtr
    268       DO i=1,klon
    269          tmp_var2(i,j)=source_tr(i,j)
    270       ENDDO
    271       ENDDO
    272       CALL minmaxsource(tmp_var2,qmin,qmax,'src: before SS emiss')
    273       IF(id_coss>0) then
    274       print *,'Source = ',SUM(source_tr(:,id_coss)),
    275      .     MINVAL(source_tr(:,id_coss)), MAXVAL(source_tr(:,id_coss))
    276       ENDIF
    277 
    278       DO i=1,klon
    279 ! Original line (4 tracers)
    280          IF(id_fine>0) source_tr(i,id_fine)=
    281      . source_tr(i,id_fine)+scale_param_ssacc*
    282      .                                 lmt_sea_salt(i,1)*1.e4       !g/m2/s
    283 
    284 ! Original line (4 tracers)
    285        IF(id_fine>0)  flux_tr(i,id_fine)=
    286      . flux_tr(i,id_fine)+scale_param_ssacc
    287      .                            *lmt_sea_salt(i,1)*1.e4*1.e3      !mg/m2/s
    288 
    289       IF(id_coss>0)  source_tr(i,id_coss)=
    290      . scale_param_sscoa*lmt_sea_salt(i,2)*1.e4    !g/m2/s
    291       IF(id_coss>0)  flux_tr(i,id_coss)=
    292      . scale_param_sscoa*lmt_sea_salt(i,2)*1.e4*1.e3 !mg/m2/s
    293 c
    294          flux_sparam_ssfine(i)=scale_param_ssacc *
    295      .                                  lmt_sea_salt(i,1)*1.e4*1.e3
    296          flux_sparam_sscoa(i)=scale_param_sscoa *
    297      .                                  lmt_sea_salt(i,2)*1.e4*1.e3
    298       ENDDO
    299 !      IF (lminmax) THEN
    300       DO j=1,nbtr
    301       DO i=1,klon
    302          tmp_var2(i,j)=source_tr(i,j)
    303       ENDDO
    304       ENDDO
    305       CALL minmaxsource(tmp_var2,qmin,qmax,'src: after SS emiss')
    306       IF(id_coss>0) then
    307       print *,'Source = ',SUM(source_tr(:,id_coss)),
    308      .  MINVAL(source_tr(:,id_coss)), MAXVAL(source_tr(:,id_coss))
    309       ENDIF
    310 c     
    311 
    312       END
     1! This SUBROUTINE calculates the emissions of SEA SALT and DUST, part of
     2! which goes to tracer 2 and other part to tracer 3.
     3SUBROUTINE coarsemission(pctsrf, pdtphys, &
     4        t_seri, pmflxr, pmflxs, prfl, psfl, &
     5        xlat, xlon, debutphy, &
     6        zu10m, zv10m, wstar, ale_bl, ale_wake, &
     7        scale_param_ssacc, scale_param_sscoa, &
     8        scale_param_dustacc, scale_param_dustcoa, &
     9        scale_param_dustsco, &
     10        nbreg_dust, &
     11        iregion_dust, dust_ec, &
     12        param_wstarBLperregion, param_wstarWAKEperregion, &
     13        nbreg_wstardust, &
     14        iregion_wstardust, &
     15        lmt_sea_salt, qmin, qmax, &
     16        flux_sparam_ddfine, flux_sparam_ddcoa, &
     17        flux_sparam_ddsco, &
     18        flux_sparam_ssfine, flux_sparam_sscoa, &
     19        id_prec, id_fine, id_coss, id_codu, id_scdu, &
     20        ok_chimeredust, &
     21        source_tr, flux_tr)
     22  ! .                         wth,cly,zprecipinsoil,lmt_sea_salt,
     23
     24  !  CALL dustemission( debutphy, xlat, xlon, pctsrf,
     25  ! .               zu10m     zv10m,wstar,ale_bl,ale_wake)
     26
     27  USE dimphy
     28  USE indice_sol_mod
     29  USE infotrac
     30  USE dustemission_mod, ONLY: dustemission
     31  ! USE phytracr_spl_mod, ONLY: nbreg_dust, nbreg_ind, nbreg_bb
     32  IMPLICIT NONE
     33
     34  INCLUDE "dimensions.h"
     35  INCLUDE "chem.h"
     36  INCLUDE "chem_spla.h"
     37  INCLUDE "YOMCST.h"
     38  INCLUDE "paramet.h"
     39
     40  !============================== INPUT ==================================
     41  INTEGER :: nbjour
     42  LOGICAL :: ok_chimeredust
     43  REAL :: pdtphys  ! pas d'integration pour la physique (seconde)
     44  REAL :: t_seri(klon, klev)  ! temperature
     45  REAL :: pctsrf(klon, nbsrf)
     46  REAL :: pmflxr(klon, klev + 1), pmflxs(klon, klev + 1)   !--convection
     47  ! REAL pmflxr(klon,klev), pmflxs(klon,klev)   !--convection
     48  REAL :: prfl(klon, klev + 1), psfl(klon, klev + 1)     !--large-scale
     49  ! REAL prfl(klon,klev),   psfl(klon,klev)     !--large-scale
     50  LOGICAL :: debutphy, lafinphy
     51  REAL, intent(in) :: xlat(klon)    ! latitudes pour chaque point
     52  REAL, intent(in) :: xlon(klon)    ! longitudes pour chaque point
     53  REAL, DIMENSION(klon), INTENT(IN) :: zu10m
     54  REAL, DIMENSION(klon), INTENT(IN) :: zv10m
     55  REAL, DIMENSION(klon), INTENT(IN) :: wstar, Ale_bl, ale_wake
     56
     57  !
     58  !------------------------- Scaling Parameters --------------------------
     59  !
     60  INTEGER :: iregion_dust(klon) !Defines  dust regions
     61  REAL :: scale_param_ssacc  !Scaling parameter for Fine Sea Salt
     62  REAL :: scale_param_sscoa  !Scaling parameter for Coarse Sea Salt
     63  REAL :: scale_param_dustacc(nbreg_dust)  !Scaling parameter for Fine Dust
     64  REAL :: scale_param_dustcoa(nbreg_dust)  !Scaling parameter for Coarse Dust
     65  REAL :: scale_param_dustsco(nbreg_dust)  !Scaling parameter for SCoarse Dust
     66  !JE20141124<<
     67  INTEGER :: iregion_wstardust(klon) !Defines dust regions in terms of wstar
     68  REAL :: param_wstarBLperregion(nbreg_wstardust)  !
     69  REAL :: param_wstarWAKEperregion(nbreg_wstardust)  !
     70  REAL :: param_wstarBL(klon)  !parameter for surface wind correction..
     71  REAL :: param_wstarWAKE(klon)  !parameter for surface wind correction..
     72  INTEGER :: nbreg_wstardust
     73  !JE20141124>>
     74  INTEGER :: nbreg_dust
     75  INTEGER, INTENT(IN) :: id_prec, id_fine, id_coss, id_codu, id_scdu
     76  !============================== OUTPUT =================================
     77  REAL :: source_tr(klon, nbtr)
     78  REAL :: flux_tr(klon, nbtr)
     79  REAL :: flux_sparam_ddfine(klon), flux_sparam_ddcoa(klon)
     80  REAL :: flux_sparam_ddsco(klon)
     81  REAL :: flux_sparam_ssfine(klon), flux_sparam_sscoa(klon)
     82  !=========================== LOCAL VARIABLES ===========================
     83  INTEGER :: i, j
     84  REAL :: pct_ocean(klon)
     85  ! REAL zprecipinsoil(klon)
     86  ! REAL cly(klon), wth(klon)
     87  REAL :: clyfac, avgdryrate, drying
     88
     89  !---------------------------- SEA SALT emissions ------------------------
     90  REAL :: lmt_sea_salt(klon, ss_bins) !Sea salt 0.03-8.0 um
     91  !
     92  !--------vent 10 m CEPMMT
     93  !
     94  REAL :: dust_ec(klon)
     95
     96  real :: tmp_var2(klon, nbtr) ! auxiliary variable to replace source
     97  REAL :: qmin, qmax
     98  !----------------------DUST Sahara ---------------
     99  REAL, DIMENSION(klon) :: dustsourceacc, dustsourcecoa, dustsourcesco
     100  INTEGER, DIMENSION(klon) :: maskd
     101  !*********************** DUST EMMISSIONS *******************************
     102  !
     103
     104  ! avgdryrate=300./365.*pdtphys/86400.
     105  !
     106  ! DO i=1, klon
     107  !
     108  !   IF (cly(i).LT.9990..AND.wth(i).LT.9990.) THEN
     109  !    zprecipinsoil(i)=zprecipinsoil(i) +
     110  !    .        (pmflxr(i,1)+pmflxs(i,1)+prfl(i,1)+psfl(i,1))*pdtphys
     111  !
     112  !    clyfac=MIN(16., cly(i)*0.4+8.) ![mm] max amount of water hold in top soil
     113  !    drying=avgdryrate*exp(0.03905491*
     114  !    .                    exp(0.17446*(t_seri(i,1)-273.15))) ! [mm]
     115  !    zprecipinsoil(i)=min(max(0.,zprecipinsoil(i)-drying),clyfac) ! [mm]
     116  !
     117  !   ENDIF
     118  !
     119  ! ENDDO
     120  !
     121  ! ==================== CALCULATING DUST EMISSIONS ======================
     122  !
     123  !  IF (lminmax) THEN
     124  DO j = 1, nbtr
     125    DO i = 1, klon
     126      tmp_var2(i, j) = source_tr(i, j)
     127    ENDDO
     128  ENDDO
     129  CALL minmaxsource(tmp_var2, qmin, qmax, 'src: before DD emiss')
     130  ! print *,'Source = ',SUM(source_tr),MINVAL(source_tr),
     131  ! .                                     MAXVAL(source_tr)
     132  !  ENDIF
     133
     134  !
     135  IF (.NOT. ok_chimeredust)  THEN
     136    DO i = 1, klon
     137      !!     IF (cly(i).GE.9990..OR.wth(i).GE.9990..OR.
     138      !!    .    t_seri(i,1).LE.273.15.OR.zprecipinsoil(i).GT.1.e-8) THEN
     139      !!          dust_ec(i)=0.0
     140      !!     ENDIF
     141      !c Corresponds to dust_emission.EQ.3
     142      !!!!!!!****************AQUIIIIIIIIIIIIIIIIIIIIIIIIIIII
     143      !! Original line (4 tracers)
     144      !JE<<  old 4 tracer(nhl scheme)        source_tr(i,id_fine)=scale_param_dustacc(iregion_dust(i))*
     145      ! .                  dust_ec(i)*1.e3*0.093   ! g/m2/s
     146      !     source_tr(i,id_codu)=scale_param_dustcoa(iregion_dust(i))*
     147      ! .                  dust_ec(i)*1.e3*0.905   ! g/m2/s   bin 0.5-10um
     148      !! Original line (4 tracers)
     149      !     flux_tr(i,id_fine)=scale_param_dustacc(iregion_dust(i))*
     150      ! .                  dust_ec(i)*1.e3*0.093*1.e3  !mg/m2/s
     151      !     flux_tr(i,id_codu)=scale_param_dustcoa(iregion_dust(i))*
     152      ! .                  dust_ec(i)*1.e3*0.905*1.e3  !mg/m2/s bin 0.5-10um
     153      !     flux_sparam_ddfine(i)=scale_param_dustacc(iregion_dust(i)) *
     154      ! .                            dust_ec(i)*1.e3*0.093*1.e3
     155      !     flux_sparam_ddcoa(i)=scale_param_dustcoa(iregion_dust(i)) *
     156      ! .                            dust_ec(i)*1.e3*0.905*1.e3
     157      IF(id_fine>0)     source_tr(i, id_fine) = &
     158              scale_param_dustacc(iregion_dust(i)) * &
     159                      dust_ec(i) * 1.e3 * 0.093   ! g/m2/s
     160      IF(id_codu>0)   source_tr(i, id_codu) = &
     161              scale_param_dustcoa(iregion_dust(i)) * &
     162                      dust_ec(i) * 1.e3 * 0.905   ! g/m2/s   bin 0.5-10um
     163      IF(id_scdu>0)  source_tr(i, id_scdu) = 0.   ! no supercoarse
     164      ! Original line (4 tracers)
     165      IF(id_fine>0)   flux_tr(i, id_fine) = &
     166              scale_param_dustacc(iregion_dust(i)) * &
     167                      dust_ec(i) * 1.e3 * 0.093 * 1.e3  !mg/m2/s
     168      IF(id_codu>0)  flux_tr(i, id_codu) = &
     169              scale_param_dustcoa(iregion_dust(i)) * &
     170                      dust_ec(i) * 1.e3 * 0.905 * 1.e3  !mg/m2/s bin 0.5-10um
     171      IF(id_scdu>0) flux_tr(i, id_scdu) = 0.
     172
     173      flux_sparam_ddfine(i) = scale_param_dustacc(iregion_dust(i)) * &
     174              dust_ec(i) * 1.e3 * 0.093 * 1.e3
     175      flux_sparam_ddcoa(i) = scale_param_dustcoa(iregion_dust(i)) * &
     176              dust_ec(i) * 1.e3 * 0.905 * 1.e3
     177      flux_sparam_ddsco(i) = 0.
     178    ENDDO
     179  ENDIF
     180  !*****************NEW CHIMERE DUST EMISSION Sahara*****
     181  ! je  20140522
     182  IF(ok_chimeredust) THEN
     183    print *, 'MIX- NEW SAHARA DUST SOURCE SCHEME...'
     184
     185    DO i = 1, klon
     186      param_wstarBL(i) = param_wstarBLperregion(iregion_wstardust(i))
     187      param_wstarWAKE(i) = param_wstarWAKEperregion(iregion_wstardust(i))
     188    ENDDO
     189
     190    CALL dustemission(debutphy, xlat, xlon, pctsrf, &
     191            zu10m, zv10m, wstar, ale_bl, ale_wake, &
     192            param_wstarBL, param_wstarWAKE, &
     193            dustsourceacc, dustsourcecoa, &
     194            dustsourcesco, maskd)
     195
     196    DO i = 1, klon
     197      if (maskd(i)>0) then
     198        IF(id_fine>0)    source_tr(i, id_fine) = &
     199                scale_param_dustacc(iregion_dust(i)) * &
     200                        dustsourceacc(i) * 1.e3   ! g/m2/s  bin 0.03-0.5
     201        IF(id_codu>0)    source_tr(i, id_codu) = &
     202                scale_param_dustcoa(iregion_dust(i)) * &
     203                        dustsourcecoa(i) * 1.e3   ! g/m2/s   bin 0.5-3um
     204        IF(id_scdu>0)   source_tr(i, id_scdu) = &
     205                scale_param_dustsco(iregion_dust(i)) * &
     206                        dustsourcesco(i) * 1.e3   ! g/m2/s   bin 3-15um
     207        ! Original line (4 tracers)
     208        IF(id_fine>0)  flux_tr(i, id_fine) = &
     209                scale_param_dustacc(iregion_dust(i)) * &
     210                        dustsourceacc(i) * 1.e3 * 1.e3  !mg/m2/s
     211        IF(id_codu>0)  flux_tr(i, id_codu) = &
     212                scale_param_dustcoa(iregion_dust(i)) * &
     213                        dustsourcecoa(i) * 1.e3 * 1.e3  !mg/m2/s bin 0.5-3um
     214        IF(id_scdu>0)  flux_tr(i, id_scdu) = &
     215                scale_param_dustsco(iregion_dust(i)) * &
     216                        dustsourcesco(i) * 1.e3 * 1.e3  !mg/m2/s bin 3-15um
     217        flux_sparam_ddfine(i) = scale_param_dustacc(iregion_dust(i)) * &
     218                dustsourceacc(i) * 1.e3 * 1.e3
     219        flux_sparam_ddcoa(i) = scale_param_dustcoa(iregion_dust(i)) * &
     220                dustsourcecoa(i) * 1.e3 * 1.e3
     221        flux_sparam_ddsco(i) = scale_param_dustsco(iregion_dust(i)) * &
     222                dustsourcesco(i) * 1.e3 * 1.e3
     223      else
     224        IF(id_fine>0) source_tr(i, id_fine) = &
     225                scale_param_dustacc(iregion_dust(i)) * &
     226                        dust_ec(i) * 1.e3 * 0.114   ! g/m2/s
     227        IF(id_codu>0) source_tr(i, id_codu) = &
     228                scale_param_dustcoa(iregion_dust(i)) * &
     229                        dust_ec(i) * 1.e3 * 0.108   ! g/m2/s   bin 0.5-3um
     230        IF(id_scdu>0) source_tr(i, id_scdu) = &
     231                scale_param_dustsco(iregion_dust(i)) * &
     232                        dust_ec(i) * 1.e3 * 0.778   ! g/m2/s   bin 3-15um
     233        ! Original line (4 tracers)
     234        IF(id_fine>0) flux_tr(i, id_fine) = &
     235                scale_param_dustacc(iregion_dust(i)) * &
     236                        dust_ec(i) * 1.e3 * 0.114 * 1.e3  !mg/m2/s
     237        IF(id_codu>0) flux_tr(i, id_codu) = &
     238                scale_param_dustcoa(iregion_dust(i)) * &
     239                        dust_ec(i) * 1.e3 * 0.108 * 1.e3  !mg/m2/s bin 0.5-3um
     240        IF(id_scdu>0) flux_tr(i, id_scdu) = &
     241                scale_param_dustsco(iregion_dust(i)) * &
     242                        dust_ec(i) * 1.e3 * 0.778 * 1.e3  !mg/m2/s bin 0.5-3um
     243
     244        flux_sparam_ddfine(i) = scale_param_dustacc(iregion_dust(i)) * &
     245                dust_ec(i) * 1.e3 * 0.114 * 1.e3
     246        flux_sparam_ddcoa(i) = scale_param_dustcoa(iregion_dust(i)) * &
     247                dust_ec(i) * 1.e3 * 0.108 * 1.e3
     248        flux_sparam_ddsco(i) = scale_param_dustsco(iregion_dust(i)) * &
     249                dust_ec(i) * 1.e3 * 0.778 * 1.e3
     250
     251      endif
     252    ENDDO
     253
     254  ENDIF
     255  !*****************************************************
     256  !******************* SEA SALT EMMISSIONS *******************************
     257  DO i = 1, klon
     258    pct_ocean(i) = pctsrf(i, is_oce)
     259  ENDDO
     260  !
     261  !  IF (lminmax) THEN
     262  DO j = 1, nbtr
     263    DO i = 1, klon
     264      tmp_var2(i, j) = source_tr(i, j)
     265    ENDDO
     266  ENDDO
     267  CALL minmaxsource(tmp_var2, qmin, qmax, 'src: before SS emiss')
     268  IF(id_coss>0) then
     269    print *, 'Source = ', SUM(source_tr(:, id_coss)), &
     270            MINVAL(source_tr(:, id_coss)), MAXVAL(source_tr(:, id_coss))
     271  ENDIF
     272
     273  DO i = 1, klon
     274    ! Original line (4 tracers)
     275    IF(id_fine>0) source_tr(i, id_fine) = &
     276            source_tr(i, id_fine) + scale_param_ssacc * &
     277                    lmt_sea_salt(i, 1) * 1.e4       !g/m2/s
     278
     279    ! Original line (4 tracers)
     280    IF(id_fine>0)  flux_tr(i, id_fine) = &
     281            flux_tr(i, id_fine) + scale_param_ssacc &
     282                    * lmt_sea_salt(i, 1) * 1.e4 * 1.e3      !mg/m2/s
     283
     284    IF(id_coss>0)  source_tr(i, id_coss) = &
     285            scale_param_sscoa * lmt_sea_salt(i, 2) * 1.e4    !g/m2/s
     286    IF(id_coss>0)  flux_tr(i, id_coss) = &
     287            scale_param_sscoa * lmt_sea_salt(i, 2) * 1.e4 * 1.e3 !mg/m2/s
     288    !
     289    flux_sparam_ssfine(i) = scale_param_ssacc * &
     290            lmt_sea_salt(i, 1) * 1.e4 * 1.e3
     291    flux_sparam_sscoa(i) = scale_param_sscoa * &
     292            lmt_sea_salt(i, 2) * 1.e4 * 1.e3
     293  ENDDO
     294  ! IF (lminmax) THEN
     295  DO j = 1, nbtr
     296    DO i = 1, klon
     297      tmp_var2(i, j) = source_tr(i, j)
     298    ENDDO
     299  ENDDO
     300  CALL minmaxsource(tmp_var2, qmin, qmax, 'src: after SS emiss')
     301  IF(id_coss>0) then
     302    print *, 'Source = ', SUM(source_tr(:, id_coss)), &
     303            MINVAL(source_tr(:, id_coss)), MAXVAL(source_tr(:, id_coss))
     304  ENDIF
     305  !
     306
     307END SUBROUTINE coarsemission
Note: See TracChangeset for help on using the changeset viewer.