Changeset 4144 for palm/trunk/SOURCE/lagrangian_particle_model_mod.f90
- Timestamp:
- Aug 6, 2019 9:11:47 AM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
palm/trunk/SOURCE/lagrangian_particle_model_mod.f90
r4143 r4144 25 25 ! ----------------- 26 26 ! $Id$ 27 ! relational operators .EQ., .NE., etc. replaced by ==, /=, etc. 28 ! 29 ! 4143 2019-08-05 15:14:53Z schwenkel 27 30 ! Rename variable and change select case to if statement 28 31 ! … … 1387 1390 ! 1388 1391 !-- In case of stretching the actual k index is found iteratively 1389 IF ( dz_stretch_level .NE.-9999999.9_wp .OR. &1390 dz_stretch_level_start(1) .NE.-9999999.9_wp ) THEN1392 IF ( dz_stretch_level /= -9999999.9_wp .OR. & 1393 dz_stretch_level_start(1) /= -9999999.9_wp ) THEN 1391 1394 kp = MINLOC( ABS( tmp_particle%z - zu ), DIM = 1 ) - 1 1392 1395 ELSE … … 1648 1651 ! 1649 1652 !-- Set constants for different aerosol species 1650 IF ( TRIM(aero_species) .EQ.'nacl' ) THEN1653 IF ( TRIM(aero_species) == 'nacl' ) THEN 1651 1654 molecular_weight_of_solute = 0.05844_wp 1652 1655 rho_s = 2165.0_wp 1653 1656 vanthoff = 2.0_wp 1654 ELSEIF ( TRIM(aero_species) .EQ.'c3h4o4' ) THEN1657 ELSEIF ( TRIM(aero_species) == 'c3h4o4' ) THEN 1655 1658 molecular_weight_of_solute = 0.10406_wp 1656 1659 rho_s = 1600.0_wp 1657 1660 vanthoff = 1.37_wp 1658 ELSEIF ( TRIM(aero_species) .EQ.'nh4o3' ) THEN1661 ELSEIF ( TRIM(aero_species) == 'nh4o3' ) THEN 1659 1662 molecular_weight_of_solute = 0.08004_wp 1660 1663 rho_s = 1720.0_wp … … 1668 1671 !-- The following typical aerosol spectra are taken from Jaenicke (1993): 1669 1672 !-- Tropospheric aerosols. Published in Aerosol-Cloud-Climate Interactions. 1670 IF ( TRIM(aero_type) .EQ.'polar' ) THEN1673 IF ( TRIM(aero_type) == 'polar' ) THEN 1671 1674 na = (/ 2.17e1, 1.86e-1, 3.04e-4 /) * 1.0E6_wp 1672 1675 rm = (/ 0.0689, 0.375, 4.29 /) * 1.0E-6_wp 1673 1676 log_sigma = (/ 0.245, 0.300, 0.291 /) 1674 ELSEIF ( TRIM(aero_type) .EQ.'background' ) THEN1677 ELSEIF ( TRIM(aero_type) == 'background' ) THEN 1675 1678 na = (/ 1.29e2, 5.97e1, 6.35e1 /) * 1.0E6_wp 1676 1679 rm = (/ 0.0036, 0.127, 0.259 /) * 1.0E-6_wp 1677 1680 log_sigma = (/ 0.645, 0.253, 0.425 /) 1678 ELSEIF ( TRIM(aero_type) .EQ.'maritime' ) THEN1681 ELSEIF ( TRIM(aero_type) == 'maritime' ) THEN 1679 1682 na = (/ 1.33e2, 6.66e1, 3.06e0 /) * 1.0E6_wp 1680 1683 rm = (/ 0.0039, 0.133, 0.29 /) * 1.0E-6_wp 1681 1684 log_sigma = (/ 0.657, 0.210, 0.396 /) 1682 ELSEIF ( TRIM(aero_type) .EQ.'continental' ) THEN1685 ELSEIF ( TRIM(aero_type) == 'continental' ) THEN 1683 1686 na = (/ 3.20e3, 2.90e3, 3.00e-1 /) * 1.0E6_wp 1684 1687 rm = (/ 0.01, 0.058, 0.9 /) * 1.0E-6_wp 1685 1688 log_sigma = (/ 0.161, 0.217, 0.380 /) 1686 ELSEIF ( TRIM(aero_type) .EQ.'desert' ) THEN1689 ELSEIF ( TRIM(aero_type) == 'desert' ) THEN 1687 1690 na = (/ 7.26e2, 1.14e3, 1.78e-1 /) * 1.0E6_wp 1688 1691 rm = (/ 0.001, 0.0188, 10.8 /) * 1.0E-6_wp 1689 1692 log_sigma = (/ 0.247, 0.770, 0.438 /) 1690 ELSEIF ( TRIM(aero_type) .EQ.'rural' ) THEN1693 ELSEIF ( TRIM(aero_type) == 'rural' ) THEN 1691 1694 na = (/ 6.65e3, 1.47e2, 1.99e3 /) * 1.0E6_wp 1692 1695 rm = (/ 0.00739, 0.0269, 0.0419 /) * 1.0E-6_wp 1693 1696 log_sigma = (/ 0.225, 0.557, 0.266 /) 1694 ELSEIF ( TRIM(aero_type) .EQ.'urban' ) THEN1697 ELSEIF ( TRIM(aero_type) == 'urban' ) THEN 1695 1698 na = (/ 9.93e4, 1.11e3, 3.64e4 /) * 1.0E6_wp 1696 1699 rm = (/ 0.00651, 0.00714, 0.0248 /) * 1.0E-6_wp 1697 1700 log_sigma = (/ 0.245, 0.666, 0.337 /) 1698 ELSEIF ( TRIM(aero_type) .EQ.'user' ) THEN1701 ELSEIF ( TRIM(aero_type) == 'user' ) THEN 1699 1702 CONTINUE 1700 1703 ELSE … … 1739 1742 1740 1743 IF ( particles(n)%weight_factor - FLOOR(particles(n)%weight_factor,KIND=wp) & 1741 .GT.random_function( iran_part ) ) THEN1744 > random_function( iran_part ) ) THEN 1742 1745 particles(n)%weight_factor = FLOOR(particles(n)%weight_factor,KIND=wp) + 1.0_wp 1743 1746 ELSE … … 1746 1749 ! 1747 1750 !-- Unnecessary particles will be deleted 1748 IF ( particles(n)%weight_factor .LE.0.0_wp ) particles(n)%particle_mask = .FALSE.1751 IF ( particles(n)%weight_factor <= 0.0_wp ) particles(n)%particle_mask = .FALSE. 1749 1752 1750 1753 ENDDO … … 5103 5106 !-- Check error of the solution, and reduce dt_ros if necessary. 5104 5107 error = ABS(r_err - r_ros) / r_ros 5105 IF ( error .GT.prec ) THEN5108 IF ( error > prec ) THEN 5106 5109 dt_ros = SQRT( q_decrease * prec / error ) * dt_ros 5107 5110 r_ros = r_ros_ini … … 5404 5407 !-- For collisions, the weighting factor of at least one super-droplet 5405 5408 !-- needs to be larger or equal to one. 5406 IF ( MIN( weight(n), weight(m) ) .LT.1.0_wp ) CYCLE5409 IF ( MIN( weight(n), weight(m) ) < 1.0_wp ) CYCLE 5407 5410 ! 5408 5411 !-- Get mass of individual droplets (aerosols) … … 5429 5432 !-- (Accordingly, p_crit will be 0.0, 1.0, 2.0, ...) 5430 5433 IF ( collection_probability - FLOOR(collection_probability) & 5431 .GT.random_function( iran_part ) ) THEN5434 > random_function( iran_part ) ) THEN 5432 5435 collection_probability = FLOOR(collection_probability) + 1.0_wp 5433 5436 ELSE … … 5435 5438 ENDIF 5436 5439 5437 IF ( collection_probability .GT.0.0_wp ) THEN5440 IF ( collection_probability > 0.0_wp ) THEN 5438 5441 ! 5439 5442 !-- Super-droplet n collects droplets of super-droplet m 5440 IF ( weight(n) .LT.weight(m) ) THEN5443 IF ( weight(n) < weight(m) ) THEN 5441 5444 5442 5445 mass(n) = mass(n) + weight(n) * xm * collection_probability … … 5448 5451 ENDIF 5449 5452 5450 ELSEIF ( weight(m) .LT.weight(n) ) THEN5453 ELSEIF ( weight(m) < weight(n) ) THEN 5451 5454 5452 5455 mass(m) = mass(m) + weight(m) * xn * collection_probability … … 7615 7618 ! 7616 7619 !-- In case of stretching the actual k index must be found 7617 IF ( dz_stretch_level .NE.-9999999.9_wp .OR. &7618 dz_stretch_level_start(1) .NE.-9999999.9_wp ) THEN7620 IF ( dz_stretch_level /= -9999999.9_wp .OR. & 7621 dz_stretch_level_start(1) /= -9999999.9_wp ) THEN 7619 7622 kp = MINLOC( ABS( particle_array(n)%z - zu ), DIM = 1 ) - 1 7620 7623 ELSE
Note: See TracChangeset
for help on using the changeset viewer.