diff --git a/CMakeLists.txt b/CMakeLists.txt index 03988157a..2b8c33ddf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,9 +7,9 @@ project(PARTMC Fortran C) set(PACKAGE_BUGREPORT "mwest@illinois.edu") set(PACKAGE_NAME "PartMC") -set(PACKAGE_STRING "PartMC 2.7.0") +set(PACKAGE_STRING "PartMC 2.8.0") set(PACKAGE_TARNAME "partmc") -set(PACKAGE_VERSION "2.7.0") +set(PACKAGE_VERSION "2.8.0") ###################################################################### # options diff --git a/ChangeLog.md b/ChangeLog.md index a774a1264..c7ccd1db3 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -1,3 +1,21 @@ +2.8.0 - 2024-02-23 + + * Add `aero_component` for tracking particle source information (Jeff Curtis). + + * Add weight class selection for each aerosol source to multiple sources in a + single weight class (Jeff Curtis). + + * Add option to avoid sampling particles that are a certain number of + standard deviations from the mean using a sampling timescale + (Jeff Curtis). + + * Add preprocessor flag for WRF-PartMC specific variables and code + (`PMC_USE_WRF`) (Jeff Curtis). + + * Fix MPI bug causing CI failure (Sylwester Arabas and Jeff Curtis). + + * Fix particle reweighting when using CAMP (Jeff Curtis). + 2.7.0 - 2023-08-11 * Add support for SUNDIALS 6+ (Alex Hirzel). diff --git a/README.md b/README.md index ac3b8b4c0..1c265e406 100644 --- a/README.md +++ b/README.md @@ -5,16 +5,16 @@ PartMC: Particle-resolved Monte Carlo code for atmospheric aerosol simulation [![Latest version](https://img.shields.io/github/tag/compdyn/partmc.svg?label=version)](https://github.com/compdyn/partmc/blob/master/ChangeLog.md) [![Docker build status](https://img.shields.io/docker/automated/compdyn/partmc.svg)](https://hub.docker.com/r/compdyn/partmc/builds/) [![Github Actions Status](https://github.com/compdyn/partmc/workflows/CI/badge.svg?branch=master)](https://github.com/compdyn/partmc/actions/workflows/main.yml) [![License](https://img.shields.io/github/license/compdyn/partmc.svg)](https://github.com/compdyn/partmc/blob/master/COPYING) [![DOI](https://zenodo.org/badge/24058992.svg)](https://zenodo.org/badge/latestdoi/24058992) -Version 2.7.0 -Released 2023-08-11 +Version 2.8.0 +Released 2024-02-23 **Source:** **Homepage:** -**Cite as:** M. West, N. Riemer, J. Curtis, M. Michelotti, and J. Tian (2023) PartMC, [![version](https://img.shields.io/github/release/compdyn/partmc.svg?label=version)](https://github.com/compdyn/partmc), [![DOI](https://zenodo.org/badge/24058992.svg)](https://zenodo.org/badge/latestdoi/24058992) +**Cite as:** M. West, N. Riemer, J. Curtis, M. Michelotti, and J. Tian (2024) PartMC, [![version](https://img.shields.io/github/release/compdyn/partmc.svg?label=version)](https://github.com/compdyn/partmc), [![DOI](https://zenodo.org/badge/24058992.svg)](https://zenodo.org/badge/latestdoi/24058992) -Copyright (C) 2005-2022 Nicole Riemer and Matthew West +Copyright (C) 2005-2024 Nicole Riemer and Matthew West Portions copyright (C) Andreas Bott, Richard Easter, Jeffrey Curtis, Matthew Michelotti, and Jian Tian Licensed under the GNU General Public License version 2 or (at your @@ -184,12 +184,12 @@ Installation 2. Unpack PartMC: - tar xzvf partmc-2.7.0.tar.gz + tar xzvf partmc-2.8.0.tar.gz 3. Change into the main PartMC directory (where this README file is located): - cd partmc-2.7.0 + cd partmc-2.8.0 4. Make a directory called `build` and change into it: diff --git a/doc/Doxyfile b/doc/Doxyfile index bbb00df11..ac2191a14 100644 --- a/doc/Doxyfile +++ b/doc/Doxyfile @@ -38,7 +38,7 @@ PROJECT_NAME = PartMC # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = 2.7.0 +PROJECT_NUMBER = 2.8.0 # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a diff --git a/doc/Makefile b/doc/Makefile index aed8983c7..f0d211676 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -1,5 +1,5 @@ -VERSION = 2.7.0 +VERSION = 2.8.0 GRAPHVIZ_FILE = partmc_modules.gv GRAPHVIZ_PDF = $(patsubst %.gv,%.pdf,$(GRAPHVIZ_FILE)) diff --git a/src/Makefile.wrf_partmc b/src/Makefile.wrf_partmc index cd28bad5c..2ebff6fdc 100644 --- a/src/Makefile.wrf_partmc +++ b/src/Makefile.wrf_partmc @@ -74,7 +74,8 @@ pmc: $(PMC_MODULES) clean: @ echo 'use the clean script' -# DEPENDENCIES : only dependencies after this line (don't remove the word DEPENDENCIES) +# DEPENDENCIES : only dependencies after this line (don't remove the word \ + DEPENDENCIES) aero_binned.o: bin_grid.o aero_particle.o spec_file.o \ util.o aero_dist.o mpi.o aero_data.o @@ -115,8 +116,8 @@ aero_weight_array.o: util.o constants.o rand.o spec_file.o \ bin_grid.o: constants.o util.o spec_file.o mpi.o netcdf.o -camp_interface.o: aero_data.o aero_state.o aero_particle.o constants.o gas_data.o \ - gas_state.o util.o +camp_interface.o: aero_data.o aero_state.o aero_particle.o constants.o \ + gas_data.o gas_state.o util.o chamber.o: aero_data.o constants.o env_state.o spec_file.o @@ -156,7 +157,8 @@ coagulation.o: bin_grid.o aero_data.o util.o env_state.o \ coagulation_dist.o: bin_grid.o aero_data.o util.o env_state.o \ aero_state.o coagulation.o mpi.o -condense.o: aero_state.o env_state.o aero_data.o util.o aero_particle.o constants.o +condense.o: aero_state.o env_state.o aero_data.o util.o aero_particle.o \ + constants.o constants.o: diff --git a/src/aero_particle.F90 b/src/aero_particle.F90 index 90731f21c..c2f1011c0 100644 --- a/src/aero_particle.F90 +++ b/src/aero_particle.F90 @@ -919,7 +919,8 @@ subroutine aero_particle_coagulate(aero_particle_1, & aero_particle_new%weight_class = 0 n_swbands = size(aero_particle_1%absorb_cross_sect) call ensure_real_array_size(aero_particle_new%absorb_cross_sect, n_swbands) - call ensure_real_array_size(aero_particle_new%scatter_cross_sect, n_swbands) + call ensure_real_array_size(aero_particle_new%scatter_cross_sect, & + n_swbands) call ensure_real_array_size(aero_particle_new%asymmetry, n_swbands) call ensure_complex_array_size(aero_particle_new%refract_shell, n_swbands) call ensure_complex_array_size(aero_particle_new%refract_core, n_swbands) diff --git a/src/bin_grid.F90 b/src/bin_grid.F90 index c358e4c50..740be0f25 100644 --- a/src/bin_grid.F90 +++ b/src/bin_grid.F90 @@ -186,7 +186,8 @@ logical function bin_grid_contains(bin_grid, i_bin, val) call assert_msg(828875607, bin_grid_size(bin_grid) >= 0, "bin_grid not " & // "created.") call assert_msg(454111488, 0 <= i_bin .and. & - i_bin <= bin_grid_size(bin_grid) + 1, "i_bin not a valid bin in bin_grid") + i_bin <= bin_grid_size(bin_grid) + 1, "i_bin not a valid bin in " & + // "bin_grid") bin_grid_contains = .false. diff --git a/src/env_state.F90 b/src/env_state.F90 index 5fe81c42b..ef11f0f58 100644 --- a/src/env_state.F90 +++ b/src/env_state.F90 @@ -550,8 +550,8 @@ subroutine env_state_output_netcdf(env_state, ncid) unit="m", standard_name="bottom_altitude") call pmc_nc_write_real(ncid, env_state%z_max, "top_boundary_altitude", & unit="m", standard_name="top_altitude") - call pmc_nc_write_real(ncid, env_state%inverse_density, "inverse_density", & - unit="m3kg-1", standard_name="inverse_density") + call pmc_nc_write_real(ncid, env_state%inverse_density, & + "inverse_density", unit="m3kg-1", standard_name="inverse_density") call pmc_nc_write_real(ncid, env_state%cell_volume, "cell_volume", & unit="m3", standard_name="cell_volume") call pmc_nc_write_integer(ncid,env_state%cell_ix,"x_index", & diff --git a/src/mosaic.F90 b/src/mosaic.F90 index 341ef55b0..ba014ca7f 100644 --- a/src/mosaic.F90 +++ b/src/mosaic.F90 @@ -525,11 +525,12 @@ end subroutine aerosol_optical ! has specific ordering requirements do i_part = aero_state_n_part(aero_state),1,-1 #ifdef PMC_USE_MOSAIC_MULTI_OPT - aero_state%apa%particle(i_part)%absorb_cross_sect = (ext_cross(i_part,:) & - - scat_cross(i_part,:)) / 1d4 ! (m^2) + aero_state%apa%particle(i_part)%absorb_cross_sect = & + (ext_cross(i_part,:) - scat_cross(i_part,:)) / 1d4 ! (m^2) aero_state%apa%particle(i_part)%scatter_cross_sect = & scat_cross(i_part,:) / 1d4 ! (m^2) - aero_state%apa%particle(i_part)%asymmetry = asym_particle(i_part,:) ! (1) + aero_state%apa%particle(i_part)%asymmetry = & + asym_particle(i_part,:) ! (1) aero_state%apa%particle(i_part)%refract_shell = & cmplx(ri_shell_a(i_part,:), kind=dc) ! (1) aero_state%apa%particle(i_part)%refract_core =& diff --git a/src/output.F90 b/src/output.F90 index ec80f7fea..b102f0275 100644 --- a/src/output.F90 +++ b/src/output.F90 @@ -82,7 +82,7 @@ module pmc_output #endif !> PartMC verson number. - character(len=100), parameter :: PARTMC_VERSION = "2.7.0" + character(len=100), parameter :: PARTMC_VERSION = "2.8.0" !> Type code for undefined or invalid output. integer, parameter :: OUTPUT_TYPE_INVALID = 0 diff --git a/src/rand.F90 b/src/rand.F90 index 78a8ad64a..6e390da22 100644 --- a/src/rand.F90 +++ b/src/rand.F90 @@ -452,7 +452,9 @@ end function pmc_rand_normal_gsl rand_normal = real(harvest, kind=dp) z0 = (rand_normal - mean)/ stddev if (present(prob_threshold)) then - if (1.0d0 - abs(erf(z0/(2.0**.5))) >= prob_threshold) acceptable = .true. + if (1.0d0 - abs(erf(z0/(2.0**.5))) >= prob_threshold) then + acceptable = .true. + end if else acceptable = .true. end if