Skip to content

Reduce usage of pow() and log()#92

Open
coco-yeung wants to merge 14 commits into
MIT-LAE:mainfrom
coco-yeung:main
Open

Reduce usage of pow() and log()#92
coco-yeung wants to merge 14 commits into
MIT-LAE:mainfrom
coco-yeung:main

Conversation

@coco-yeung
Copy link
Copy Markdown

@coco-yeung coco-yeung commented Feb 16, 2026

In the current version of the code running the issl_rhi140 example, around 20% of computational time is spent on the pow() function when running on 1 thread: see perf profiling below
image

Changes have been made to the code to reduce the reliance on pow(). The most notable changes were:

  • Aerosol.cpp: implemented a switch case in the Moment functions as the power n is only ever 0, 1, 2, or 3, and saving log() results in the loop to prevent repeated calculations
  • Aerosol.hpp: bypassing pow() as it is only called by LAGRIDPlumeModel.cpp where the power n is 0; it also returns the value before it is multiplied by the logBinRatio since the loop which calls it also calculates it.

Other changes made are to compute pow(x, 2) as x*x or pow(x, 1/3) as cbrt(x) instead, although I believe that made minimal difference as the compiler could already make those optimisations.

This resulted in a decrease in % time spent in the functions pow() and log(): see perf profiling below
image
image

The real time decrease for the different weather conditions are below:

<style> </style>
version default (issl_rhi140) shear * 1.1 rhi 120 temperature - 5 w - 0.1
main (seconds) 967 1028 1671 1157 796
feature (seconds) 710 767 1257 849 587
decrease (%) -26.58 -25.39 -24.75 -26.62 -26.26

The changes are also zero-diff with the current main branch, verified by taking the difference between the ice mass over time and the number of ice particles at each output time.

coco-yeung and others added 5 commits January 22, 2026 10:47
* Adds profiling tags, standardise seed and set num threads to 1 in issl_rhi140 example

Co-authored-by: Coco Yeung <coco.yeung22@imperial.ac.uk>
Add input files for different weather conditions

---------

Co-authored-by: Coco Yeung <coco.yeung22@imperial.ac.uk>
* Add profiling flags

* Replaced pow()

* Aerosol

* Added more optimisations

* Code clean-up

---------

Co-authored-by: Coco Yeung <coco.yeung22@imperial.ac.uk>
Co-authored-by: Coco Yeung <coco.yeung22@imperial.ac.uk>
@lrobion
Copy link
Copy Markdown
Contributor

lrobion commented May 14, 2026

Thanks for the PR! This looks very good. The performance improvements here are really good, I've gotten a 1.47x speedup on Hex c029 vs main.

The proposed changes make sense and reduce a lot of the repeat calculations!

I put a few comments in the review mostly on readibility changes as expanding the powers into multiplications adds a lot of clutter. There are few things I think we'd want to address:

  1. The templating default case for the Moment() function (both for Aerosol and Grid_Aerosol) which does not compute correct moments for N > 3.
  2. I think the change in the output of the Aerosol::binMoment() function where changing the output is not necessary given that it's only called once.
  3. I think we should remove the additional input .yaml you've added as they do not come with their respective weather inputs.
  4. I don't think we want to make any changes to the code in the KPP. This is auto-generated code and it is run once to spin-up the EPM atmosphere, it does not matter for performance, and I think we should not touch it given we are not developing it.

Other minor notes:
We can set up the profiling build a bit better in the CMakeList.txt though I am definitely not an expert on best practices here. I guess this might be a separate problem we deal with later to clean up how we manage compile flags.

You already did a lot of optimization work on the functions in buildKernel.cpp and I think we could take it further (refactor the branches in the loop to me less messy which might bring more performance, simplify another cube root) but this is only used in the coagulation process which is currently disabled. I think this is future work if we do want to enable it again.

Comparison with main

Comparing it to outputs on main I am getting slightly different results for a 4h run with the default ISSL 140 example (1 CPU, seeded to 0), which I think are attributable to the changes in logs and powers (a lot of operations went from log(a/b) to log(a) - log(b) with the cached bin edges, and I don't think those are equivalent in floating points operations).

The maximum relative differences for any variable at any point in the grid is are of the order of 1e-4 to 1e-8 which I think is acceptable. There are a couple of relative differences at 1e-1 but those correspond to absolute differences of at most 1e-8 so I am not worried about those.

Here's the full output of the diff if you are interested
Found 26 files in APCEMM_out_main/
Found 26 files in APCEMM_out_coco/
Tolerance: rtol=1e-09, atol=1e-12

================================================================================
Comparing: epm-output.nc vs epm-output.nc
================================================================================
✓ Files are IDENTICAL (within tolerance)

================================================================================
Comparing: ts_aerosol_case0_0000.nc vs ts_aerosol_case0_0000.nc
================================================================================
✗ Files have DIFFERENCES:

  Variables with value differences:
    - H2O:
        Max absolute difference: 2.952790e+09
        Max relative difference: 1.617048e-06
        Different elements: 66/36000
    - RHi:
        Max absolute difference: 2.264977e-06
        Max relative difference: 1.602100e-06
        Different elements: 66/36000

================================================================================
Comparing: ts_aerosol_case0_0010.nc vs ts_aerosol_case0_0010.nc
================================================================================
✗ Files have DIFFERENCES:

  Variables with value differences:
    - Effective radius:
        Max absolute difference: 3.838068e-10
        Max relative difference: 2.550327e-05
        Different elements: 197/5775
    - Extinction:
        Max absolute difference: 1.287553e-07
        Max relative difference: 1.817091e-01
        Different elements: 549/5775
    - H2O:
        Max absolute difference: 2.684355e+08
        Max relative difference: 1.188044e-07
        Different elements: 114/5775
    - Horizontal optical depth:
        Max absolute difference: 1.037121e-05
        Max relative difference: 9.926828e-06
        Different elements: 47/105
    - IWC:
        Max absolute difference: 1.112312e-09
        Max relative difference: 1.817090e-01
        Different elements: 350/5775
    - Ice Mass:
        Max absolute difference: 1.907349e-06
        Max relative difference: 6.733374e-07
        Different elements: 1/1
    - Ice aerosol particle number:
        Max absolute difference: 3.215973e-09
        Max relative difference: 1.817094e-01
        Different elements: 188/5775
    - RHi:
        Max absolute difference: 2.384186e-07
        Max relative difference: 1.703668e-07
        Different elements: 95/5775
    - Vertical optical depth:
        Max absolute difference: 3.397465e-06
        Max relative difference: 1.814924e-01
        Different elements: 18/55
    - intOD:
        Max absolute difference: 2.441406e-04
        Max relative difference: 4.903956e-07
        Different elements: 1/1

================================================================================
Comparing: ts_aerosol_case0_0020.nc vs ts_aerosol_case0_0020.nc
================================================================================
✗ Files have DIFFERENCES:

  Variables with value differences:
    - Effective radius:
        Max absolute difference: 9.640644e-11
        Max relative difference: 5.017399e-06
        Different elements: 308/7854
    - Extinction:
        Max absolute difference: 1.443550e-08
        Max relative difference: 1.117979e-05
        Different elements: 604/7854
    - H2O:
        Max absolute difference: 2.684355e+08
        Max relative difference: 1.176750e-07
        Different elements: 28/7854
    - Horizontal optical depth:
        Max absolute difference: 1.788139e-06
        Max relative difference: 1.135835e-06
        Different elements: 27/119
    - IWC:
        Max absolute difference: 1.600711e-10
        Max relative difference: 1.611201e-05
        Different elements: 389/7854
    - Ice aerosol particle number:
        Max absolute difference: 9.313226e-10
        Max relative difference: 9.396635e-06
        Different elements: 254/7854
    - Overall size distribution:
        Max absolute difference: 2.048000e+03
        Max relative difference: 9.936842e-08
        Different elements: 1/38
    - RHi:
        Max absolute difference: 1.192093e-07
        Max relative difference: 1.168431e-07
        Different elements: 39/7854
    - Vertical optical depth:
        Max absolute difference: 1.788139e-07
        Max relative difference: 5.629901e-06
        Different elements: 25/66

================================================================================
Comparing: ts_aerosol_case0_0030.nc vs ts_aerosol_case0_0030.nc
================================================================================
✗ Files have DIFFERENCES:

  Variables with value differences:
    - Effective radius:
        Max absolute difference: 3.092282e-11
        Max relative difference: 1.305837e-06
        Different elements: 307/12325
    - Extinction:
        Max absolute difference: 4.190952e-09
        Max relative difference: 5.529642e-06
        Different elements: 549/12325
    - H2O:
        Max absolute difference: 2.684355e+08
        Max relative difference: 1.182322e-07
        Different elements: 17/12325
    - Horizontal optical depth:
        Max absolute difference: 3.576279e-07
        Max relative difference: 2.483074e-07
        Different elements: 18/145
    - IWC:
        Max absolute difference: 4.911271e-11
        Max relative difference: 6.875752e-06
        Different elements: 317/12325
    - Ice aerosol particle number:
        Max absolute difference: 3.725290e-09
        Max relative difference: 1.837122e-06
        Different elements: 380/12325
    - RHi:
        Max absolute difference: 1.192093e-07
        Max relative difference: 1.152163e-07
        Different elements: 24/12325
    - Vertical optical depth:
        Max absolute difference: 5.960464e-08
        Max relative difference: 9.826725e-07
        Different elements: 23/85

================================================================================
Comparing: ts_aerosol_case0_0040.nc vs ts_aerosol_case0_0040.nc
================================================================================
✗ Files have DIFFERENCES:

  Variables with value differences:
    - Effective radius:
        Max absolute difference: 3.274181e-11
        Max relative difference: 1.486156e-06
        Different elements: 173/19344
    - Extinction:
        Max absolute difference: 1.513399e-09
        Max relative difference: 2.829098e-06
        Different elements: 610/19344
    - H2O:
        Max absolute difference: 2.684355e+08
        Max relative difference: 1.191440e-07
        Different elements: 18/19344
    - Horizontal optical depth:
        Max absolute difference: 2.384186e-07
        Max relative difference: 1.134835e-07
        Different elements: 17/186
    - IWC:
        Max absolute difference: 1.455192e-11
        Max relative difference: 4.239666e-06
        Different elements: 224/19344
    - Ice aerosol particle number:
        Max absolute difference: 1.862645e-09
        Max relative difference: 7.404106e-07
        Different elements: 621/19344
    - RHi:
        Max absolute difference: 1.192093e-07
        Max relative difference: 9.434874e-08
        Different elements: 19/19344
    - Vertical optical depth:
        Max absolute difference: 5.960464e-08
        Max relative difference: 3.528591e-07
        Different elements: 16/104
    - intOD:
        Max absolute difference: 1.220703e-04
        Max relative difference: 8.501975e-08
        Different elements: 1/1

================================================================================
Comparing: ts_aerosol_case0_0050.nc vs ts_aerosol_case0_0050.nc
================================================================================
✗ Files have DIFFERENCES:

  Variables with value differences:
    - Effective radius:
        Max absolute difference: 1.091394e-11
        Max relative difference: 5.254954e-07
        Different elements: 218/28728
    - Extinction:
        Max absolute difference: 5.238689e-10
        Max relative difference: 6.376039e-07
        Different elements: 647/28728
    - H2O:
        Max absolute difference: 5.368709e+08
        Max relative difference: 1.186260e-07
        Different elements: 36/28728
    - Horizontal optical depth:
        Max absolute difference: 2.384186e-07
        Max relative difference: 1.116731e-07
        Different elements: 13/228
    - IWC:
        Max absolute difference: 5.456968e-12
        Max relative difference: 1.140448e-06
        Different elements: 169/28728
    - Ice aerosol particle number:
        Max absolute difference: 1.862645e-09
        Max relative difference: 3.610177e-07
        Different elements: 858/28728
    - RHi:
        Max absolute difference: 1.192093e-07
        Max relative difference: 1.111489e-07
        Different elements: 29/28728
    - Vertical optical depth:
        Max absolute difference: 5.960464e-08
        Max relative difference: 1.177987e-07
        Different elements: 20/126

================================================================================
Comparing: ts_aerosol_case0_0100.nc vs ts_aerosol_case0_0100.nc
================================================================================
✗ Files have DIFFERENCES:

  Variables with value differences:
    - Effective radius:
        Max absolute difference: 7.275958e-12
        Max relative difference: 1.988145e-07
        Different elements: 230/42704
    - Extinction:
        Max absolute difference: 4.656613e-10
        Max relative difference: 3.474515e-07
        Different elements: 560/42704
    - H2O:
        Max absolute difference: 2.684355e+08
        Max relative difference: 1.164378e-07
        Different elements: 26/42704
    - Horizontal optical depth:
        Max absolute difference: 2.384186e-07
        Max relative difference: 1.077577e-07
        Different elements: 16/272
    - IWC:
        Max absolute difference: 3.637979e-12
        Max relative difference: 4.889976e-07
        Different elements: 111/42704
    - Ice aerosol particle number:
        Max absolute difference: 9.313226e-10
        Max relative difference: 2.719659e-07
        Different elements: 727/42704
    - RHi:
        Max absolute difference: 1.192093e-07
        Max relative difference: 1.138601e-07
        Different elements: 34/42704
    - Vertical optical depth:
        Max absolute difference: 5.960464e-08
        Max relative difference: 1.145376e-07
        Different elements: 19/157

================================================================================
Comparing: ts_aerosol_case0_0110.nc vs ts_aerosol_case0_0110.nc
================================================================================
✗ Files have DIFFERENCES:

  Variables with value differences:
    - Effective radius:
        Max absolute difference: 1.091394e-11
        Max relative difference: 3.499731e-07
        Different elements: 209/58280
    - Extinction:
        Max absolute difference: 2.910383e-10
        Max relative difference: 3.240246e-07
        Different elements: 421/58280
    - H2O:
        Max absolute difference: 2.684355e+08
        Max relative difference: 1.152170e-07
        Different elements: 39/58280
    - Horizontal optical depth:
        Max absolute difference: 2.384186e-07
        Max relative difference: 1.101241e-07
        Different elements: 19/310
    - IWC:
        Max absolute difference: 8.185452e-12
        Max relative difference: 7.156948e-07
        Different elements: 62/58280
    - Ice aerosol particle number:
        Max absolute difference: 9.313226e-10
        Max relative difference: 2.382792e-07
        Different elements: 448/58280
    - Overall size distribution:
        Max absolute difference: 4.882812e-04
        Max relative difference: 6.228838e-08
        Different elements: 1/38
    - RHi:
        Max absolute difference: 1.192093e-07
        Max relative difference: 1.161805e-07
        Different elements: 41/58280
    - Vertical optical depth:
        Max absolute difference: 2.980232e-08
        Max relative difference: 1.093802e-07
        Different elements: 11/188

================================================================================
Comparing: ts_aerosol_case0_0120.nc vs ts_aerosol_case0_0120.nc
================================================================================
✗ Files have DIFFERENCES:

  Variables with value differences:
    - Effective radius:
        Max absolute difference: 3.637979e-12
        Max relative difference: 1.188870e-07
        Different elements: 198/71775
    - Extinction:
        Max absolute difference: 2.328306e-10
        Max relative difference: 2.122411e-07
        Different elements: 322/71775
    - H2O:
        Max absolute difference: 5.368709e+08
        Max relative difference: 1.180655e-07
        Different elements: 45/71775
    - Horizontal optical depth:
        Max absolute difference: 2.384186e-07
        Max relative difference: 9.551491e-08
        Different elements: 17/319
    - IWC:
        Max absolute difference: 2.728484e-12
        Max relative difference: 2.927031e-07
        Different elements: 30/71775
    - Ice aerosol particle number:
        Max absolute difference: 9.313226e-10
        Max relative difference: 1.896971e-07
        Different elements: 146/71775
    - Overall size distribution:
        Max absolute difference: 1.907349e-06
        Max relative difference: 8.014134e-08
        Different elements: 1/38
    - RHi:
        Max absolute difference: 1.192093e-07
        Max relative difference: 1.153853e-07
        Different elements: 35/71775
    - Vertical optical depth:
        Max absolute difference: 5.960464e-08
        Max relative difference: 1.183210e-07
        Different elements: 14/225

================================================================================
Comparing: ts_aerosol_case0_0130.nc vs ts_aerosol_case0_0130.nc
================================================================================
✗ Files have DIFFERENCES:

  Variables with value differences:
    - Effective radius:
        Max absolute difference: 7.275958e-12
        Max relative difference: 1.160198e-07
        Different elements: 173/81280
    - Extinction:
        Max absolute difference: 2.328306e-10
        Max relative difference: 2.406832e-07
        Different elements: 316/81280
    - H2O:
        Max absolute difference: 5.368709e+08
        Max relative difference: 1.160669e-07
        Different elements: 37/81280
    - Horizontal optical depth:
        Max absolute difference: 2.384186e-07
        Max relative difference: 1.123784e-07
        Different elements: 10/320
    - IWC:
        Max absolute difference: 1.818989e-12
        Max relative difference: 2.966635e-07
        Different elements: 18/81280
    - Ice aerosol particle number:
        Max absolute difference: 4.656613e-10
        Max relative difference: 1.191519e-07
        Different elements: 43/81280
    - RHi:
        Max absolute difference: 1.192093e-07
        Max relative difference: 1.147874e-07
        Different elements: 27/81280
    - Vertical optical depth:
        Max absolute difference: 2.980232e-08
        Max relative difference: 1.132516e-07
        Different elements: 4/254

================================================================================
Comparing: ts_aerosol_case0_0140.nc vs ts_aerosol_case0_0140.nc
================================================================================
✗ Files have DIFFERENCES:

  Variables with value differences:
    - Effective radius:
        Max absolute difference: 3.637979e-12
        Max relative difference: 1.155845e-07
        Different elements: 150/90277
    - Extinction:
        Max absolute difference: 2.328306e-10
        Max relative difference: 2.376815e-07
        Different elements: 282/90277
    - H2O:
        Max absolute difference: 2.684355e+08
        Max relative difference: 1.174466e-07
        Different elements: 27/90277
    - Horizontal optical depth:
        Max absolute difference: 2.384186e-07
        Max relative difference: 1.146297e-07
        Different elements: 8/319
    - IWC:
        Max absolute difference: 1.818989e-12
        Max relative difference: 3.240956e-07
        Different elements: 13/90277
    - Ice aerosol particle number:
        Max absolute difference: 5.820766e-11
        Max relative difference: 1.191786e-07
        Different elements: 7/90277
    - RHi:
        Max absolute difference: 1.192093e-07
        Max relative difference: 1.105125e-07
        Different elements: 16/90277
    - Vertical optical depth:
        Max absolute difference: 2.980232e-08
        Max relative difference: 1.081020e-07
        Different elements: 6/283

================================================================================
Comparing: ts_aerosol_case0_0150.nc vs ts_aerosol_case0_0150.nc
================================================================================
✗ Files have DIFFERENCES:

  Variables with value differences:
    - Effective radius:
        Max absolute difference: 3.637979e-12
        Max relative difference: 1.178793e-07
        Different elements: 145/95477
    - Extinction:
        Max absolute difference: 1.164153e-10
        Max relative difference: 2.297482e-07
        Different elements: 296/95477
    - H2O:
        Max absolute difference: 2.684355e+08
        Max relative difference: 1.189795e-07
        Different elements: 18/95477
    - Horizontal optical depth:
        Max absolute difference: 2.384186e-07
        Max relative difference: 9.047435e-08
        Different elements: 3/307
    - IWC:
        Max absolute difference: 1.364242e-12
        Max relative difference: 2.962029e-07
        Different elements: 2/95477
    - Ice aerosol particle number:
        Max absolute difference: 1.818989e-12
        Max relative difference: 1.191225e-07
        Different elements: 2/95477
    - RHi:
        Max absolute difference: 1.192093e-07
        Max relative difference: 1.170045e-07
        Different elements: 14/95477
    - Vertical optical depth:
        Max absolute difference: 2.980232e-08
        Max relative difference: 1.020455e-07
        Different elements: 2/311

================================================================================
Comparing: ts_aerosol_case0_0200.nc vs ts_aerosol_case0_0200.nc
================================================================================
✗ Files have DIFFERENCES:

  Variables with value differences:
    - Effective radius:
        Max absolute difference: 3.637979e-12
        Max relative difference: 1.185924e-07
        Different elements: 138/96432
    - Extinction:
        Max absolute difference: 1.164153e-10
        Max relative difference: 2.311522e-07
        Different elements: 292/96432
    - H2O:
        Max absolute difference: 2.684355e+08
        Max relative difference: 1.175205e-07
        Different elements: 15/96432
    - Horizontal optical depth:
        Max absolute difference: 2.384186e-07
        Max relative difference: 9.549082e-08
        Different elements: 7/294
    - RHi:
        Max absolute difference: 1.192093e-07
        Max relative difference: 1.163544e-07
        Different elements: 8/96432
    - Vertical optical depth:
        Max absolute difference: 2.980232e-08
        Max relative difference: 8.661791e-08
        Different elements: 9/328

================================================================================
Comparing: ts_aerosol_case0_0210.nc vs ts_aerosol_case0_0210.nc
================================================================================
✗ Files have DIFFERENCES:

  Variables with value differences:
    - Effective radius:
        Max absolute difference: 7.275958e-12
        Max relative difference: 1.146509e-07
        Different elements: 128/97918
    - Extinction:
        Max absolute difference: 1.164153e-10
        Max relative difference: 1.950378e-07
        Different elements: 312/97918
    - H2O:
        Max absolute difference: 2.684355e+08
        Max relative difference: 1.083378e-07
        Different elements: 7/97918
    - Horizontal optical depth:
        Max absolute difference: 2.384186e-07
        Max relative difference: 1.123342e-07
        Different elements: 6/283
    - RHi:
        Max absolute difference: 1.192093e-07
        Max relative difference: 1.184272e-07
        Different elements: 8/97918
    - Vertical optical depth:
        Max absolute difference: 2.980232e-08
        Max relative difference: 9.062727e-08
        Different elements: 3/346

================================================================================
Comparing: ts_aerosol_case0_0220.nc vs ts_aerosol_case0_0220.nc
================================================================================
✗ Files have DIFFERENCES:

  Variables with value differences:
    - Effective radius:
        Max absolute difference: 3.637979e-12
        Max relative difference: 1.087428e-07
        Different elements: 134/96016
    - Extinction:
        Max absolute difference: 5.820766e-11
        Max relative difference: 2.105603e-07
        Different elements: 284/96016
    - H2O:
        Max absolute difference: 2.684355e+08
        Max relative difference: 1.153855e-07
        Different elements: 12/96016
    - Horizontal optical depth:
        Max absolute difference: 2.384186e-07
        Max relative difference: 1.118661e-07
        Different elements: 8/272
    - RHi:
        Max absolute difference: 1.192093e-07
        Max relative difference: 1.160034e-07
        Different elements: 6/96016
    - Vertical optical depth:
        Max absolute difference: 2.980232e-08
        Max relative difference: 1.064265e-07
        Different elements: 3/353

================================================================================
Comparing: ts_aerosol_case0_0230.nc vs ts_aerosol_case0_0230.nc
================================================================================
✗ Files have DIFFERENCES:

  Variables with value differences:
    - Effective radius:
        Max absolute difference: 7.275958e-12
        Max relative difference: 1.162146e-07
        Different elements: 136/92133
    - Extinction:
        Max absolute difference: 5.820766e-11
        Max relative difference: 1.873426e-07
        Different elements: 261/92133
    - H2O:
        Max absolute difference: 2.684355e+08
        Max relative difference: 9.884540e-08
        Different elements: 8/92133
    - Horizontal optical depth:
        Max absolute difference: 2.384186e-07
        Max relative difference: 1.019382e-07
        Different elements: 4/261
    - RHi:
        Max absolute difference: 1.192093e-07
        Max relative difference: 1.177496e-07
        Different elements: 5/92133
    - Vertical optical depth:
        Max absolute difference: 2.980232e-08
        Max relative difference: 1.017570e-07
        Different elements: 5/353

================================================================================
Comparing: ts_aerosol_case0_0240.nc vs ts_aerosol_case0_0240.nc
================================================================================
✗ Files have DIFFERENCES:

  Variables with value differences:
    - Effective radius:
        Max absolute difference: 3.637979e-12
        Max relative difference: 1.150772e-07
        Different elements: 131/87801
    - Extinction:
        Max absolute difference: 5.820766e-11
        Max relative difference: 1.755835e-07
        Different elements: 274/87801
    - H2O:
        Max absolute difference: 1.342177e+08
        Max relative difference: 6.948881e-08
        Different elements: 5/87801
    - Horizontal optical depth:
        Max absolute difference: 2.384186e-07
        Max relative difference: 1.000260e-07
        Different elements: 3/259
    - RHi:
        Max absolute difference: 1.192093e-07
        Max relative difference: 1.056263e-07
        Different elements: 2/87801
    - Vertical optical depth:
        Max absolute difference: 7.450581e-09
        Max relative difference: 6.909109e-08
        Different elements: 2/339

================================================================================
Comparing: ts_aerosol_case0_0250.nc vs ts_aerosol_case0_0250.nc
================================================================================
✗ Files have DIFFERENCES:

  Variables with value differences:
    - Effective radius:
        Max absolute difference: 1.818989e-12
        Max relative difference: 1.130015e-07
        Different elements: 121/89088
    - Extinction:
        Max absolute difference: 5.820766e-11
        Max relative difference: 1.420478e-07
        Different elements: 219/89088
    - H2O:
        Max absolute difference: 2.684355e+08
        Max relative difference: 1.130248e-07
        Different elements: 3/89088
    - Horizontal optical depth:
        Max absolute difference: 2.384186e-07
        Max relative difference: 1.183984e-07
        Different elements: 6/256
    - RHi:
        Max absolute difference: 1.192093e-07
        Max relative difference: 1.139599e-07
        Different elements: 6/89088
    - Vertical optical depth:
        Max absolute difference: 2.980232e-08
        Max relative difference: 1.117372e-07
        Different elements: 4/348

================================================================================
Comparing: ts_aerosol_case0_0300.nc vs ts_aerosol_case0_0300.nc
================================================================================
✗ Files have DIFFERENCES:

  Variables with value differences:
    - Effective radius:
        Max absolute difference: 3.637979e-12
        Max relative difference: 1.137216e-07
        Different elements: 98/90678
    - Extinction:
        Max absolute difference: 5.820766e-11
        Max relative difference: 1.189678e-07
        Different elements: 213/90678
    - H2O:
        Max absolute difference: 2.684355e+08
        Max relative difference: 1.144083e-07
        Different elements: 6/90678
    - Horizontal optical depth:
        Max absolute difference: 2.980232e-08
        Max relative difference: 7.996959e-08
        Different elements: 1/254
    - RHi:
        Max absolute difference: 1.192093e-07
        Max relative difference: 1.171043e-07
        Different elements: 8/90678
    - Vertical optical depth:
        Max absolute difference: 2.980232e-08
        Max relative difference: 1.168303e-07
        Different elements: 4/357

================================================================================
Comparing: ts_aerosol_case0_0310.nc vs ts_aerosol_case0_0310.nc
================================================================================
✗ Files have DIFFERENCES:

  Variables with value differences:
    - Effective radius:
        Max absolute difference: 7.275958e-12
        Max relative difference: 1.134941e-07
        Different elements: 91/91980
    - Extinction:
        Max absolute difference: 5.820766e-11
        Max relative difference: 1.182379e-07
        Different elements: 214/91980
    - H2O:
        Max absolute difference: 1.342177e+08
        Max relative difference: 6.292657e-08
        Different elements: 1/91980
    - Horizontal optical depth:
        Max absolute difference: 1.192093e-07
        Max relative difference: 6.441006e-08
        Different elements: 2/252
    - RHi:
        Max absolute difference: 1.192093e-07
        Max relative difference: 1.162690e-07
        Different elements: 2/91980
    - Vertical optical depth:
        Max absolute difference: 1.490116e-08
        Max relative difference: 7.010747e-08
        Different elements: 3/365

================================================================================
Comparing: ts_aerosol_case0_0320.nc vs ts_aerosol_case0_0320.nc
================================================================================
✗ Files have DIFFERENCES:

  Variables with value differences:
    - Effective radius:
        Max absolute difference: 1.818989e-12
        Max relative difference: 1.125493e-07
        Different elements: 82/92750
    - Extinction:
        Max absolute difference: 2.910383e-11
        Max relative difference: 1.181600e-07
        Different elements: 203/92750
    - H2O:
        Max absolute difference: 1.342177e+08
        Max relative difference: 7.002062e-08
        Different elements: 1/92750
    - Horizontal optical depth:
        Max absolute difference: 1.192093e-07
        Max relative difference: 7.200721e-08
        Different elements: 2/250
    - RHi:
        Max absolute difference: 1.192093e-07
        Max relative difference: 1.176559e-07
        Different elements: 1/92750
    - Vertical optical depth:
        Max absolute difference: 1.490116e-08
        Max relative difference: 6.839534e-08
        Different elements: 3/371

================================================================================
Comparing: ts_aerosol_case0_0330.nc vs ts_aerosol_case0_0330.nc
================================================================================
✗ Files have DIFFERENCES:

  Variables with value differences:
    - Effective radius:
        Max absolute difference: 3.637979e-12
        Max relative difference: 1.136519e-07
        Different elements: 81/93248
    - Extinction:
        Max absolute difference: 2.910383e-11
        Max relative difference: 1.177997e-07
        Different elements: 171/93248
    - H2O:
        Max absolute difference: 2.684355e+08
        Max relative difference: 1.167664e-07
        Different elements: 5/93248
    - Horizontal optical depth:
        Max absolute difference: 1.192093e-07
        Max relative difference: 6.717813e-08
        Different elements: 1/248

================================================================================
Comparing: ts_aerosol_case0_0340.nc vs ts_aerosol_case0_0340.nc
================================================================================
✗ Files have DIFFERENCES:

  Variables with value differences:
    - Effective radius:
        Max absolute difference: 3.637979e-12
        Max relative difference: 1.179734e-07
        Different elements: 86/93972
    - Extinction:
        Max absolute difference: 2.910383e-11
        Max relative difference: 1.172220e-07
        Different elements: 147/93972
    - H2O:
        Max absolute difference: 1.342177e+08
        Max relative difference: 6.146420e-08
        Different elements: 2/93972
    - Horizontal optical depth:
        Max absolute difference: 1.192093e-07
        Max relative difference: 8.501767e-08
        Different elements: 2/246
    - Ice aerosol particle number:
        Max absolute difference: 5.820766e-11
        Max relative difference: 9.474117e-08
        Different elements: 1/93972
    - RHi:
        Max absolute difference: 1.192093e-07
        Max relative difference: 1.151199e-07
        Different elements: 5/93972
    - Vertical optical depth:
        Max absolute difference: 1.490116e-08
        Max relative difference: 7.934653e-08
        Different elements: 3/382

================================================================================
Comparing: ts_aerosol_case0_0350.nc vs ts_aerosol_case0_0350.nc
================================================================================
✗ Files have DIFFERENCES:

  Variables with value differences:
    - Effective radius:
        Max absolute difference: 3.637979e-12
        Max relative difference: 1.156140e-07
        Different elements: 74/94672
    - Extinction:
        Max absolute difference: 2.910383e-11
        Max relative difference: 1.188611e-07
        Different elements: 152/94672
    - H2O:
        Max absolute difference: 1.342177e+08
        Max relative difference: 7.208183e-08
        Different elements: 6/94672
    - RHi:
        Max absolute difference: 1.192093e-07
        Max relative difference: 1.183744e-07
        Different elements: 3/94672
    - Vertical optical depth:
        Max absolute difference: 1.490116e-08
        Max relative difference: 7.912384e-08
        Different elements: 1/388

================================================================================
Comparing: ts_aerosol_case0_0400.nc vs ts_aerosol_case0_0400.nc
================================================================================
✗ Files have DIFFERENCES:

  Variables with value differences:
    - Effective radius:
        Max absolute difference: 1.818989e-12
        Max relative difference: 1.161435e-07
        Different elements: 76/95348
    - Extinction:
        Max absolute difference: 2.910383e-11
        Max relative difference: 1.191810e-07
        Different elements: 141/95348
    - H2O:
        Max absolute difference: 1.342177e+08
        Max relative difference: 6.914741e-08
        Different elements: 3/95348
    - Horizontal optical depth:
        Max absolute difference: 1.192093e-07
        Max relative difference: 1.039791e-07
        Different elements: 3/242
    - RHi:
        Max absolute difference: 1.192093e-07
        Max relative difference: 1.159161e-07
        Different elements: 3/95348
    - Vertical optical depth:
        Max absolute difference: 1.490116e-08
        Max relative difference: 9.471436e-08
        Different elements: 1/394

================================================================================
FINAL SUMMARY
================================================================================
Compared 26 file pairs
✗ DIFFERENCES FOUND

I am happy to discuss any of this more, and thanks again! I'd be curious to have @sdeastham 's opinion on the divergence from main, other than that once you've addressed this changes this looks good to me.

Comment thread Code.v05-00/CMakeLists.txt Outdated
Comment thread Code.v05-00/src/Util/PhysFunction.cpp Outdated
Comment thread Code.v05-00/src/EPM/Models/Original/Integrate.cpp Outdated
Comment thread Code.v05-00/src/Core/LiquidAer.cpp
Comment thread Code.v05-00/src/Core/LAGRIDPlumeModel.cpp Outdated
Comment thread Code.v05-00/include/AIM/Aerosol.hpp
inline const Vector_1D& getBinVCenters() const { return bin_VCenters; };
inline const Vector_1D& getBinEdges() const { return bin_Edges; };
inline const Vector_1D& getBinSizes() const { return bin_Sizes; };
inline const Vector_1D& getLogBinEdges() const { return log_Bin_Edges; };
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Saving the log bins edges is great!

Comment thread Code.v05-00/src/AIM/Aerosol.cpp Outdated
Comment thread Code.v05-00/src/AIM/Aerosol.cpp Outdated
Comment thread Code.v05-00/src/AIM/Aerosol.cpp Outdated
case 1: return Moment<1>();
case 2: return Moment<2>();
case 3: return Moment<3>();
default: return Moment<4>();
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The templating is a good idea! I do think we need to handle the default case better, right now any input > 3 returns the 4th moment which is definitely wrong. I don't think we use moments larger than 3 anyway so to keep the template we could either throw (I don't if that works with templating) or revert back to the default implementation.
But I think this is a silent error that'd be very confusing.

This applies to all other implementations of the template scheme

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Made changes to return the correct moment for n > 3

Copy link
Copy Markdown
Contributor

@lrobion lrobion left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for making all the changes, and thanks for updating the PR with the latest main!

I added two small comments based on your changes, and could you please remove the following example input files:

  • examples/issl_rhi140/default.yaml
  • examples/issl_rhi140/rhi.yaml
  • examples/issl_rhi140/shear.yaml
  • examples/issl_rhi140/temperature.yaml
  • examples/issl_rhi140/w.yaml

Comment thread Code.v05-00/src/KPP/KPP_HetRates.cpp Outdated
Comment thread Code.v05-00/CMakeLists.txt Outdated
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants