From 81a619b7122e7fa4e346f2765de3914db6614095 Mon Sep 17 00:00:00 2001 From: lrobion Date: Sun, 10 May 2026 18:07:25 -0400 Subject: [PATCH 1/3] Fix race conditions --- Code.v05-00/src/Core/LAGRIDPlumeModel.cpp | 8 ++++---- Code.v05-00/src/Core/Meteorology.cpp | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Code.v05-00/src/Core/LAGRIDPlumeModel.cpp b/Code.v05-00/src/Core/LAGRIDPlumeModel.cpp index 895cb6a27..388a2bdf2 100644 --- a/Code.v05-00/src/Core/LAGRIDPlumeModel.cpp +++ b/Code.v05-00/src/Core/LAGRIDPlumeModel.cpp @@ -187,10 +187,10 @@ SimStatus LAGRIDPlumeModel::runFullModel() { // dp/dz = -rho*g = -(n/V)Mg Vector_3D& pdfRef = iceAerosol_.getPDF(); auto pressureEdges = met_.PressEdges(); - double localND; + // double localND; #pragma omp parallel for for (std::size_t j=0; j Date: Tue, 12 May 2026 09:42:39 -0400 Subject: [PATCH 2/3] Disable parallel reductions --- Code.v05-00/src/AIM/Aerosol.cpp | 60 ++++++++++++++++----------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/Code.v05-00/src/AIM/Aerosol.cpp b/Code.v05-00/src/AIM/Aerosol.cpp index 79523ab33..39ac1b729 100644 --- a/Code.v05-00/src/AIM/Aerosol.cpp +++ b/Code.v05-00/src/AIM/Aerosol.cpp @@ -1128,8 +1128,8 @@ void Aerosol::addAerosolToPDF( const Aerosol &rhs ) { Vector_2D moment(Ny, Vector_1D(Nx, 0.0E+00)); const double FACTOR = 3.0 / double(4.0 * PI); - #pragma omp parallel for default(shared) private(iNx, jNy, iBin) \ - schedule(dynamic, 1) if (!PARALLEL_CASES) + // #pragma omp parallel for default(shared) private(iNx, jNy, iBin) \ + // schedule(dynamic, 1) if (!PARALLEL_CASES) for (iBin = 0; iBin < nBin; iBin++) { for (jNy = 0; jNy < Ny; jNy++) @@ -1189,10 +1189,10 @@ void Aerosol::addAerosolToPDF( const Aerosol &rhs ) { UInt iNx = 0; UInt jNy = 0; - #pragma omp parallel for default(shared) private(iNx, jNy) \ - reduction(+ \ - : totalnumber_sum) \ - schedule(dynamic, 1) if (!PARALLEL_CASES) + // #pragma omp parallel for default(shared) private(iNx, jNy) \ + // reduction(+ \ + // : totalnumber_sum) \ + // schedule(dynamic, 1) if (!PARALLEL_CASES) for (jNy = 0; jNy < Ny; jNy++) { for (iNx = 0; iNx < Nx; iNx++) @@ -1213,8 +1213,8 @@ void Aerosol::addAerosolToPDF( const Aerosol &rhs ) { UInt iNx = 0; UInt iBin = 0; - #pragma omp parallel for default(shared) private(iNx, jNy, iBin) \ - schedule(dynamic, 1) if (!PARALLEL_CASES) + // #pragma omp parallel for default(shared) private(iNx, jNy, iBin) \ + // schedule(dynamic, 1) if (!PARALLEL_CASES) for (iBin = 0; iBin < nBin; iBin++) { for (jNy = 0; jNy < Ny; jNy++) @@ -1312,10 +1312,10 @@ void Aerosol::addAerosolToPDF( const Aerosol &rhs ) { UInt iNx = 0; UInt jNy = 0; - #pragma omp parallel for default(shared) private(iNx, jNy) \ - reduction(+ \ - : totalicemass_sum) \ - schedule(dynamic, 1) if (!PARALLEL_CASES) + // #pragma omp parallel for default(shared) private(iNx, jNy) \ + // reduction(+ \ + // : totalicemass_sum) \ + // schedule(dynamic, 1) if (!PARALLEL_CASES) for (jNy = 0; jNy < Ny; jNy++) { for (iNx = 0; iNx < Nx; iNx++) @@ -1335,8 +1335,8 @@ void Aerosol::addAerosolToPDF( const Aerosol &rhs ) { Vector_2D TVol = TotalVolume(); const double FACTOR = RHO_ICE * 1.0E+06; - #pragma omp parallel for default(shared) private(iNx, jNy) \ - schedule(dynamic, 1) if (!PARALLEL_CASES) + // #pragma omp parallel for default(shared) private(iNx, jNy) \ + // schedule(dynamic, 1) if (!PARALLEL_CASES) for (jNy = 0; jNy < Ny; jNy++) { for (iNx = 0; iNx < Nx; iNx++) @@ -1436,8 +1436,8 @@ void Aerosol::addAerosolToPDF( const Aerosol &rhs ) { Vector_1D PDF(nBin, 0.0E+00); - #pragma omp parallel for default(shared) private(iNx, jNy, iBin) \ - schedule(dynamic, 1) if (!PARALLEL_CASES) + // #pragma omp parallel for default(shared) private(iNx, jNy, iBin) \ + // schedule(dynamic, 1) if (!PARALLEL_CASES) for (iBin = 0; iBin < nBin; iBin++) { for (jNy = 0; jNy < Ny; jNy++) @@ -1466,8 +1466,8 @@ void Aerosol::addAerosolToPDF( const Aerosol &rhs ) { Vector_1D PDF(nBin, 0.0E+00); - #pragma omp parallel for default(shared) private(iNx, jNy, iBin) \ - schedule(dynamic, 1) if (!PARALLEL_CASES) + // #pragma omp parallel for default(shared) private(iNx, jNy, iBin) \ + // schedule(dynamic, 1) if (!PARALLEL_CASES) for (iBin = 0; iBin < nBin; iBin++) { for (jNy = 0; jNy < Ny; jNy++) @@ -1619,10 +1619,10 @@ void Aerosol::addAerosolToPDF( const Aerosol &rhs ) { double moment = 0.0E+00; - #pragma omp parallel for default(shared) private(iBin) \ - reduction(+ \ - : moment) \ - schedule(dynamic, 1) if (!PARALLEL_CASES) + // #pragma omp parallel for default(shared) private(iBin) \ + // reduction(+ \ + // : moment) \ + // schedule(dynamic, 1) if (!PARALLEL_CASES) for (iBin = 0; iBin < nBin; iBin++) { moment += (log(bin_Edges[iBin + 1] / bin_Edges[iBin])) * pow(bin_Centers[iBin], n) * PDF[iBin]; @@ -1640,10 +1640,10 @@ void Aerosol::addAerosolToPDF( const Aerosol &rhs ) { double moment = 0.0E+00; const double FACTOR = 3.0 / double(4.0 * PI); - #pragma omp parallel for default(shared) private(iBin) \ - reduction(+ \ - : moment) \ - schedule(dynamic, 1) if (!PARALLEL_CASES) + // #pragma omp parallel for default(shared) private(iBin) \ + // reduction(+ \ + // : moment) \ + // schedule(dynamic, 1) if (!PARALLEL_CASES) for (iBin = 0; iBin < nBin; iBin++) moment += (log(bin_Edges[iBin + 1] / bin_Edges[iBin])) * pow(FACTOR * bin_VCenters[iBin][jNy][iNx], n / double(3.0)) * pdf[iBin][jNy][iNx]; @@ -1714,8 +1714,8 @@ void Aerosol::addAerosolToPDF( const Aerosol &rhs ) { Vector_1D PDF(nBin, 0.0E+00); - #pragma omp parallel for default(shared) private(iNx, jNy, iBin) \ - schedule(dynamic, 1) if (!PARALLEL_CASES) + // #pragma omp parallel for default(shared) private(iNx, jNy, iBin) \ + // schedule(dynamic, 1) if (!PARALLEL_CASES) for (iBin = 0; iBin < nBin; iBin++) { for (jNy = 0; jNy < Ny; jNy++) @@ -1758,8 +1758,8 @@ void Aerosol::addAerosolToPDF( const Aerosol &rhs ) { UInt jNy = 0; UInt iBin = 0; - #pragma omp parallel for default(shared) private(iNx, jNy, iBin) \ - schedule(dynamic, 1) if (!PARALLEL_CASES) + // #pragma omp parallel for default(shared) private(iNx, jNy, iBin) \ + // schedule(dynamic, 1) if (!PARALLEL_CASES) for (jNy = 0; jNy < Ny; jNy++) { for (iNx = 0; iNx < Nx; iNx++) From 44a44b8adc06aaf3d20d1fcf50413fa4bb45f7fb Mon Sep 17 00:00:00 2001 From: lrobion Date: Thu, 14 May 2026 17:13:52 -0400 Subject: [PATCH 3/3] Cleanup compiler warnings --- Code.v05-00/src/AIM/Aerosol.cpp | 82 ++++++++++++++++++---------- Code.v05-00/src/Core/Meteorology.cpp | 8 ++- 2 files changed, 57 insertions(+), 33 deletions(-) diff --git a/Code.v05-00/src/AIM/Aerosol.cpp b/Code.v05-00/src/AIM/Aerosol.cpp index 39ac1b729..bf4a8ebdf 100644 --- a/Code.v05-00/src/AIM/Aerosol.cpp +++ b/Code.v05-00/src/AIM/Aerosol.cpp @@ -1128,8 +1128,10 @@ void Aerosol::addAerosolToPDF( const Aerosol &rhs ) { Vector_2D moment(Ny, Vector_1D(Nx, 0.0E+00)); const double FACTOR = 3.0 / double(4.0 * PI); - // #pragma omp parallel for default(shared) private(iNx, jNy, iBin) \ - // schedule(dynamic, 1) if (!PARALLEL_CASES) + /* + #pragma omp parallel for default(shared) private(iNx, jNy, iBin) \ + schedule(dynamic, 1) if (!PARALLEL_CASES) + */ for (iBin = 0; iBin < nBin; iBin++) { for (jNy = 0; jNy < Ny; jNy++) @@ -1189,10 +1191,12 @@ void Aerosol::addAerosolToPDF( const Aerosol &rhs ) { UInt iNx = 0; UInt jNy = 0; - // #pragma omp parallel for default(shared) private(iNx, jNy) \ - // reduction(+ \ - // : totalnumber_sum) \ - // schedule(dynamic, 1) if (!PARALLEL_CASES) + /* + #pragma omp parallel for default(shared) private(iNx, jNy) \ + reduction(+ \ + : totalnumber_sum) \ + schedule(dynamic, 1) if (!PARALLEL_CASES) + */ for (jNy = 0; jNy < Ny; jNy++) { for (iNx = 0; iNx < Nx; iNx++) @@ -1213,8 +1217,10 @@ void Aerosol::addAerosolToPDF( const Aerosol &rhs ) { UInt iNx = 0; UInt iBin = 0; - // #pragma omp parallel for default(shared) private(iNx, jNy, iBin) \ - // schedule(dynamic, 1) if (!PARALLEL_CASES) + /* + #pragma omp parallel for default(shared) private(iNx, jNy, iBin) \ + schedule(dynamic, 1) if (!PARALLEL_CASES) + */ for (iBin = 0; iBin < nBin; iBin++) { for (jNy = 0; jNy < Ny; jNy++) @@ -1312,10 +1318,12 @@ void Aerosol::addAerosolToPDF( const Aerosol &rhs ) { UInt iNx = 0; UInt jNy = 0; - // #pragma omp parallel for default(shared) private(iNx, jNy) \ - // reduction(+ \ - // : totalicemass_sum) \ - // schedule(dynamic, 1) if (!PARALLEL_CASES) + /* + #pragma omp parallel for default(shared) private(iNx, jNy) \ + reduction(+ \ + : totalicemass_sum) \ + schedule(dynamic, 1) if (!PARALLEL_CASES) + */ for (jNy = 0; jNy < Ny; jNy++) { for (iNx = 0; iNx < Nx; iNx++) @@ -1335,8 +1343,10 @@ void Aerosol::addAerosolToPDF( const Aerosol &rhs ) { Vector_2D TVol = TotalVolume(); const double FACTOR = RHO_ICE * 1.0E+06; - // #pragma omp parallel for default(shared) private(iNx, jNy) \ - // schedule(dynamic, 1) if (!PARALLEL_CASES) + /* + #pragma omp parallel for default(shared) private(iNx, jNy) \ + schedule(dynamic, 1) if (!PARALLEL_CASES) + */ for (jNy = 0; jNy < Ny; jNy++) { for (iNx = 0; iNx < Nx; iNx++) @@ -1436,8 +1446,10 @@ void Aerosol::addAerosolToPDF( const Aerosol &rhs ) { Vector_1D PDF(nBin, 0.0E+00); - // #pragma omp parallel for default(shared) private(iNx, jNy, iBin) \ - // schedule(dynamic, 1) if (!PARALLEL_CASES) + /* + #pragma omp parallel for default(shared) private(iNx, jNy, iBin) \ + schedule(dynamic, 1) if (!PARALLEL_CASES) + */ for (iBin = 0; iBin < nBin; iBin++) { for (jNy = 0; jNy < Ny; jNy++) @@ -1466,8 +1478,10 @@ void Aerosol::addAerosolToPDF( const Aerosol &rhs ) { Vector_1D PDF(nBin, 0.0E+00); - // #pragma omp parallel for default(shared) private(iNx, jNy, iBin) \ - // schedule(dynamic, 1) if (!PARALLEL_CASES) + /* + #pragma omp parallel for default(shared) private(iNx, jNy, iBin) \ + schedule(dynamic, 1) if (!PARALLEL_CASES) + */ for (iBin = 0; iBin < nBin; iBin++) { for (jNy = 0; jNy < Ny; jNy++) @@ -1619,10 +1633,12 @@ void Aerosol::addAerosolToPDF( const Aerosol &rhs ) { double moment = 0.0E+00; - // #pragma omp parallel for default(shared) private(iBin) \ - // reduction(+ \ - // : moment) \ - // schedule(dynamic, 1) if (!PARALLEL_CASES) + /* + #pragma omp parallel for default(shared) private(iBin) \ + reduction(+ \ + : moment) \ + schedule(dynamic, 1) if (!PARALLEL_CASES) + */ for (iBin = 0; iBin < nBin; iBin++) { moment += (log(bin_Edges[iBin + 1] / bin_Edges[iBin])) * pow(bin_Centers[iBin], n) * PDF[iBin]; @@ -1640,10 +1656,12 @@ void Aerosol::addAerosolToPDF( const Aerosol &rhs ) { double moment = 0.0E+00; const double FACTOR = 3.0 / double(4.0 * PI); - // #pragma omp parallel for default(shared) private(iBin) \ - // reduction(+ \ - // : moment) \ - // schedule(dynamic, 1) if (!PARALLEL_CASES) + /* + #pragma omp parallel for default(shared) private(iBin) \ + reduction(+ \ + : moment) \ + schedule(dynamic, 1) if (!PARALLEL_CASES) + */ for (iBin = 0; iBin < nBin; iBin++) moment += (log(bin_Edges[iBin + 1] / bin_Edges[iBin])) * pow(FACTOR * bin_VCenters[iBin][jNy][iNx], n / double(3.0)) * pdf[iBin][jNy][iNx]; @@ -1714,8 +1732,10 @@ void Aerosol::addAerosolToPDF( const Aerosol &rhs ) { Vector_1D PDF(nBin, 0.0E+00); - // #pragma omp parallel for default(shared) private(iNx, jNy, iBin) \ - // schedule(dynamic, 1) if (!PARALLEL_CASES) + /* + #pragma omp parallel for default(shared) private(iNx, jNy, iBin) \ + schedule(dynamic, 1) if (!PARALLEL_CASES) + */ for (iBin = 0; iBin < nBin; iBin++) { for (jNy = 0; jNy < Ny; jNy++) @@ -1758,8 +1778,10 @@ void Aerosol::addAerosolToPDF( const Aerosol &rhs ) { UInt jNy = 0; UInt iBin = 0; - // #pragma omp parallel for default(shared) private(iNx, jNy, iBin) \ - // schedule(dynamic, 1) if (!PARALLEL_CASES) + /* + #pragma omp parallel for default(shared) private(iNx, jNy, iBin) \ + schedule(dynamic, 1) if (!PARALLEL_CASES) + */ for (jNy = 0; jNy < Ny; jNy++) { for (iNx = 0; iNx < Nx; iNx++) diff --git a/Code.v05-00/src/Core/Meteorology.cpp b/Code.v05-00/src/Core/Meteorology.cpp index a61090172..97cb5f9de 100644 --- a/Code.v05-00/src/Core/Meteorology.cpp +++ b/Code.v05-00/src/Core/Meteorology.cpp @@ -506,9 +506,11 @@ Vector_1D Meteorology::interpMetTimeseriesData(double simTime_h, const Vector_2D } void Meteorology::updateTempPerturb() { - // #pragma omp parallel for\ - // if(!PARALLEL_CASES) \ - // default(shared) + /* + #pragma omp parallel for\ + if(!PARALLEL_CASES) \ + default(shared) + */ for (int j = 0; j < ny_; j++){ for(int i = 0; i < nx_; i++){ double epsilon1 = fRand(-1.0, 1.0);