Changeset 4671 for palm/trunk/SOURCE/chem_emissions_mod.f90
- Timestamp:
- Sep 9, 2020 8:27:58 PM (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
palm/trunk/SOURCE/chem_emissions_mod.f90
r4559 r4671 21 21 ! Current revisions: 22 22 ! ------------------ 23 ! 24 ! 23 ! 24 ! 25 25 ! Former revisions: 26 26 ! ----------------- 27 27 ! $Id$ 28 ! Implementation of downward facing USM and LSM surfaces 29 ! 30 ! 4559 2020-06-11 08:51:48Z raasch 28 31 ! file re-formatted to follow the PALM coding standard 29 32 ! … … 1486 1489 !-- horizontal urban walls that are at k == 0 (building is lower than the first grid point). Hence, 1487 1490 !-- in order to have only emissions at streets, set the surfaces emissions to zero at urban walls. 1488 IF ( surf_usm_h %ns >=1 ) surf_usm_h%cssws = 0.0_wp1491 IF ( surf_usm_h(0)%ns >=1 ) surf_usm_h(0)%cssws = 0.0_wp 1489 1492 1490 1493 ! 1491 1494 !-- Treat land-surfaces. 1492 DO m = 1, surf_lsm_h %ns1493 1494 i = surf_lsm_h %i(m)1495 j = surf_lsm_h %j(m)1496 k = surf_lsm_h %k(m)1495 DO m = 1, surf_lsm_h(0)%ns 1496 1497 i = surf_lsm_h(0)%i(m) 1498 j = surf_lsm_h(0)%j(m) 1499 k = surf_lsm_h(0)%k(m) 1497 1500 1498 1501 ! 1499 1502 !-- Set everything to zero then reassign according to street type 1500 surf_lsm_h %cssws(:,m) = 0.0_wp1503 surf_lsm_h(0)%cssws(:,m) = 0.0_wp 1501 1504 1502 1505 IF ( street_type_f%var(j,i) >= main_street_id .AND. & … … 1515 1518 ! 1516 1519 !-- kg/(m^2*s) * kg/m^3 1517 surf_lsm_h %cssws(match_spec_model(ispec),m) =&1520 surf_lsm_h(0)%cssws(match_spec_model(ispec),m) = & 1518 1521 emiss_factor_main(match_spec_input(ispec)) * & 1519 1522 emis_distribution(1,j,i,ispec) * & ! kg/(m^2*s) … … 1527 1530 ! 1528 1531 !-- ppm/s *m *kg/m^3 1529 surf_lsm_h %cssws(match_spec_model(ispec),m) =&1532 surf_lsm_h(0)%cssws(match_spec_model(ispec),m) = & 1530 1533 emiss_factor_main( match_spec_input(ispec) ) * & 1531 1534 emis_distribution(1,j,i,ispec) * & ! micromoles/(m^2*s) … … 1553 1556 ! 1554 1557 !-- kg/(m^2*s) * kg/m^3 1555 surf_lsm_h %cssws(match_spec_model(ispec),m) =&1558 surf_lsm_h(0)%cssws(match_spec_model(ispec),m) = & 1556 1559 emiss_factor_side( match_spec_input(ispec) ) * & 1557 1560 emis_distribution(1,j,i,ispec) * & ! kg/(m^2*s) … … 1564 1567 ! 1565 1568 !-- ppm/s *m *kg/m^3 1566 surf_lsm_h %cssws(match_spec_model(ispec),m) =&1569 surf_lsm_h(0)%cssws(match_spec_model(ispec),m) = & 1567 1570 emiss_factor_side( match_spec_input(ispec) ) * & 1568 1571 emis_distribution(1,j,i,ispec) * & ! micromoles/(m^2*s) … … 1579 1582 ! ELSE 1580 1583 ! 1581 ! surf_lsm_h %cssws(:,m) = 0.0_wp1584 ! surf_lsm_h(0)%cssws(:,m) = 0.0_wp 1582 1585 1583 1586 ENDIF ! street type … … 1649 1652 ! 1650 1653 !-- LSM surfaces 1651 DO m = 1, surf_lsm_h %ns1652 1653 i = surf_lsm_h %i(m)1654 j = surf_lsm_h %j(m)1655 k = surf_lsm_h %k(m)1654 DO m = 1, surf_lsm_h(0)%ns 1655 1656 i = surf_lsm_h(0)%i(m) 1657 j = surf_lsm_h(0)%j(m) 1658 k = surf_lsm_h(0)%k(m) 1656 1659 1657 1660 IF ( emis_distribution(1,j,i,ispec) > 0.0_wp ) THEN … … 1663 1666 TRIM( spc_names( match_spec_model(ispec) ) ) == "PM10" ) THEN 1664 1667 1665 surf_lsm_h %cssws(match_spec_model(ispec),m) = & ! kg/m2/s * kg/m31666 emis_distribution(1,j,i,ispec) * & ! kg/m2/s1667 rho_air(k) ! kg/m^31668 surf_lsm_h(0)%cssws(match_spec_model(ispec),m) = & ! kg/m2/s * kg/m3 1669 emis_distribution(1,j,i,ispec) * & ! kg/m2/s 1670 rho_air(k) ! kg/m^3 1668 1671 1669 1672 ELSE … … 1674 1677 emt_att%species_name(match_spec_input(ispec)) == "VOC" ) THEN 1675 1678 1676 surf_lsm_h %cssws(match_spec_model(ispec),m) = & ! ppm/s * m * kg/m31677 emis_distribution(1,j,i,ispec) * & ! mole/m2/s1678 conv_to_ratio(k,j,i) * & ! m^3/mole1679 ratio2ppm * & ! ppm1680 rho_air(k) ! kg/m^31679 surf_lsm_h(0)%cssws(match_spec_model(ispec),m) = & ! ppm/s * m * kg/m3 1680 emis_distribution(1,j,i,ispec) * & ! mole/m2/s 1681 conv_to_ratio(k,j,i) * & ! m^3/mole 1682 ratio2ppm * & ! ppm 1683 rho_air(k) ! kg/m^3 1681 1684 1682 1685 ! … … 1684 1687 ELSE 1685 1688 1686 surf_lsm_h %cssws(match_spec_model(ispec),m) = & ! ppm/s * m * kg/m31687 emis_distribution(1,j,i,ispec) * & ! kg/m2/s1688 ( 1.0_wp / emt_att%xm(ispec) ) * & ! mole/kg1689 conv_to_ratio(k,j,i) * & ! m^3/mole1690 ratio2ppm * & ! ppm1691 rho_air(k) ! kg/m^31689 surf_lsm_h(0)%cssws(match_spec_model(ispec),m) = & ! ppm/s * m * kg/m3 1690 emis_distribution(1,j,i,ispec) * & ! kg/m2/s 1691 ( 1.0_wp / emt_att%xm(ispec) ) * & ! mole/kg 1692 conv_to_ratio(k,j,i) * & ! m^3/mole 1693 ratio2ppm * & ! ppm 1694 rho_air(k) ! kg/m^3 1692 1695 1693 1696 ENDIF ! VOC … … 1703 1706 ! 1704 1707 !-- USM surfaces 1705 DO m = 1, surf_usm_h %ns1706 1707 i = surf_usm_h %i(m)1708 j = surf_usm_h %j(m)1709 k = surf_usm_h %k(m)1708 DO m = 1, surf_usm_h(0)%ns 1709 1710 i = surf_usm_h(0)%i(m) 1711 j = surf_usm_h(0)%j(m) 1712 k = surf_usm_h(0)%k(m) 1710 1713 1711 1714 IF ( emis_distribution(1,j,i,ispec) > 0.0_wp ) THEN … … 1717 1720 TRIM( spc_names( match_spec_model(ispec) ) ) == "PM10" ) THEN 1718 1721 1719 surf_usm_h %cssws(match_spec_model(ispec),m) = & ! kg/m2/s * kg/m31720 emis_distribution(1,j,i,ispec) * & ! kg/m2/s1721 rho_air(k) ! kg/m^31722 surf_usm_h(0)%cssws(match_spec_model(ispec),m) = & ! kg/m2/s * kg/m3 1723 emis_distribution(1,j,i,ispec) * & ! kg/m2/s 1724 rho_air(k) ! kg/m^3 1722 1725 1723 1726 ELSE … … 1728 1731 emt_att%species_name(match_spec_input(ispec)) == "VOC" ) THEN 1729 1732 1730 surf_usm_h %cssws(match_spec_model(ispec),m) = & ! ppm/s * m * kg/m31731 emis_distribution(1,j,i,ispec) * & ! m2/s1732 conv_to_ratio(k,j,i) * & ! m^3/mole1733 ratio2ppm * & ! ppm1734 rho_air(k) ! kg/m^31733 surf_usm_h(0)%cssws(match_spec_model(ispec),m) = & ! ppm/s * m * kg/m3 1734 emis_distribution(1,j,i,ispec) * & ! m2/s 1735 conv_to_ratio(k,j,i) * & ! m^3/mole 1736 ratio2ppm * & ! ppm 1737 rho_air(k) ! kg/m^3 1735 1738 1736 1739 ! … … 1738 1741 ELSE 1739 1742 1740 surf_usm_h %cssws(match_spec_model(ispec),m) = & ! ppm/s * m * kg/m31741 emis_distribution(1,j,i,ispec) * & ! kg/m2/s1742 ( 1.0_wp / emt_att%xm(ispec) ) * & ! mole/kg1743 conv_to_ratio(k,j,i) * & ! m^3/mole1744 ratio2ppm * & ! ppm1745 rho_air(k) ! kg/m^31743 surf_usm_h(0)%cssws(match_spec_model(ispec),m) = & ! ppm/s * m * kg/m3 1744 emis_distribution(1,j,i,ispec) * & ! kg/m2/s 1745 ( 1.0_wp / emt_att%xm(ispec) ) * & ! mole/kg 1746 conv_to_ratio(k,j,i) * & ! m^3/mole 1747 ratio2ppm * & ! ppm 1748 rho_air(k) ! kg/m^3 1746 1749 1747 1750 … … 2030 2033 cssws_def_h = 0.0_wp 2031 2034 2032 ALLOCATE( cssws_lsm_h(n_matched_vars,surf_lsm_h %ns) )2035 ALLOCATE( cssws_lsm_h(n_matched_vars,surf_lsm_h(0)%ns) ) 2033 2036 cssws_lsm_h = 0.0_wp 2034 2037 2035 ALLOCATE( cssws_usm_h(n_matched_vars,surf_usm_h %ns) )2038 ALLOCATE( cssws_usm_h(n_matched_vars,surf_usm_h(0)%ns) ) 2036 2039 cssws_usm_h = 0.0_wp 2037 2040 … … 2043 2046 2044 2047 2045 CALL assign_surface_flux ( cssws_lsm_h, surf_lsm_h %ns,&2046 surf_lsm_h %j, surf_lsm_h%i,&2048 CALL assign_surface_flux ( cssws_lsm_h, surf_lsm_h(0)%ns, & 2049 surf_lsm_h(0)%j, surf_lsm_h(0)%i, & 2047 2050 emis_distrib, mass2mole ) 2048 2051 2049 2052 2050 CALL assign_surface_flux ( cssws_usm_h, surf_usm_h %ns,&2051 surf_usm_h %j, surf_usm_h%i,&2053 CALL assign_surface_flux ( cssws_usm_h, surf_usm_h(0)%ns, & 2054 surf_usm_h(0)%j, surf_usm_h(0)%i, & 2052 2055 emis_distrib, mass2mole ) 2053 2056 … … 2058 2061 ENDDO 2059 2062 2060 DO m = 1, surf_lsm_h %ns2061 surf_lsm_h %cssws(k,m)= cssws_lsm_h(k,m)2063 DO m = 1, surf_lsm_h(0)%ns 2064 surf_lsm_h(0)%cssws(k,m) = cssws_lsm_h(k,m) 2062 2065 ENDDO 2063 2066 2064 DO m = 1, surf_usm_h %ns2065 surf_usm_h %cssws(k,m) = cssws_usm_h(k,m)2067 DO m = 1, surf_usm_h(0)%ns 2068 surf_usm_h(0)%cssws(k,m) = cssws_usm_h(k,m) 2066 2069 ENDDO 2067 2070
Note: See TracChangeset
for help on using the changeset viewer.