From f61d43215c99c2bc720bb0f28321e8ab85d61761 Mon Sep 17 00:00:00 2001 From: Bruce Perry Date: Wed, 25 Feb 2026 10:33:14 -0700 Subject: [PATCH 1/7] in CI, regen all mechanisms and check if there are diffs --- .github/workflows/ci.yml | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d33cd0fb9..7249b3504 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -74,10 +74,17 @@ jobs: run: poetry run flake8 . - name: Run tests run: poetry run pytest - - name: Convert air mechanism - run: poetry run convert -f ${{github.workspace}}/Mechanisms/air/mechanism.yaml - - name: Convert LiDryer mechanism - run: poetry run convert -f ${{github.workspace}}/Mechanisms/LiDryer/mechanism.yaml + - name: Convert regular mechanisms + run: | + poetry run convert -l ${{github.workspace}}/Mechanisms/list_mech + # Fail if there are diffs to the commited mechanisms + git diff --exit-code + - name: Convert QSS mechanisms + run: | + poetry run qssa -lq ${{github.workspace}}/Mechanisms/list_qss_mech + poetry run convert -lq ${{github.workspace}}/Mechanisms/list_qss_mech + # Fail if there are diffs to the commited mechanisms + git diff --exit-code Transport-EOS-Reactions: needs: Formatting From 2863689e2213ec82b37c898bf08c6f29d49d3fd0 Mon Sep 17 00:00:00 2001 From: Bruce Perry Date: Wed, 25 Feb 2026 10:47:38 -0700 Subject: [PATCH 2/7] clean up some stuff from Copilot --- .github/workflows/ci.yml | 8 ++++---- .gitignore | 1 + 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7249b3504..5b5ab34db 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -77,14 +77,14 @@ jobs: - name: Convert regular mechanisms run: | poetry run convert -l ${{github.workspace}}/Mechanisms/list_mech - # Fail if there are diffs to the commited mechanisms - git diff --exit-code + # Fail if there are diffs to the committed mechanisms + git status --porcelain - name: Convert QSS mechanisms run: | poetry run qssa -lq ${{github.workspace}}/Mechanisms/list_qss_mech poetry run convert -lq ${{github.workspace}}/Mechanisms/list_qss_mech - # Fail if there are diffs to the commited mechanisms - git diff --exit-code + # Fail if there are diffs to the committed mechanisms + git status --porcelain Transport-EOS-Reactions: needs: Formatting diff --git a/.gitignore b/.gitignore index cf0efc1df..5309ed948 100644 --- a/.gitignore +++ b/.gitignore @@ -21,6 +21,7 @@ dodecane_wang.cpp_opt3 drm19.cpp_OK callgrind.out* .ccls-cache +poetry.lock # AMReX build directories d/ From a72d09fe2550a75b8543c8b9896efc20df4850f2 Mon Sep 17 00:00:00 2001 From: Bruce Perry Date: Wed, 25 Feb 2026 10:59:10 -0700 Subject: [PATCH 3/7] only run on python 3.11, also detect untracked git changes --- .github/workflows/ci.yml | 33 ++++++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5b5ab34db..d81955759 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -76,15 +76,34 @@ jobs: run: poetry run pytest - name: Convert regular mechanisms run: | - poetry run convert -l ${{github.workspace}}/Mechanisms/list_mech - # Fail if there are diffs to the committed mechanisms - git status --porcelain + if [ "${{matrix.python_version}}" == '3.11' ]; then + poetry run convert -l ${{github.workspace}}/Mechanisms/list_mech + # Fail if there are diffs to the committed mechanisms + git diff --exit-code + # Also fail if there are any uncommitted or untracked changes + if [ -n "$(git status --porcelain=v1)" ]; then + echo "Uncommitted changes (including untracked files) detected after mechanism conversion:" + git status + exit 1 + fi + else + poetry run convert -f ${{github.workspace}}/Mechanisms/air/mechanism.yaml + poetry run convert -f ${{github.workspace}}/Mechanisms/LiDryer/mechanism.yaml + fi - name: Convert QSS mechanisms run: | - poetry run qssa -lq ${{github.workspace}}/Mechanisms/list_qss_mech - poetry run convert -lq ${{github.workspace}}/Mechanisms/list_qss_mech - # Fail if there are diffs to the committed mechanisms - git status --porcelain + if [ "${{matrix.python_version}}" == '3.11' ]; then + poetry run qssa -lq ${{github.workspace}}/Mechanisms/list_qss_mech + poetry run convert -lq ${{github.workspace}}/Mechanisms/list_qss_mech + # Fail if there are diffs to the committed mechanisms + git diff --exit-code + # Also fail if there are any uncommitted or untracked changes + if [ -n "$(git status --porcelain=v1)" ]; then + echo "Uncommitted changes (including untracked files) detected after mechanism conversion:" + git status + exit 1 + fi + fi Transport-EOS-Reactions: needs: Formatting From ab6ed7f0f7eee256f813c184db8964d585d0cf88 Mon Sep 17 00:00:00 2001 From: Bruce Perry Date: Wed, 25 Feb 2026 11:03:55 -0700 Subject: [PATCH 4/7] fix python version check --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d81955759..2d1801090 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -76,7 +76,7 @@ jobs: run: poetry run pytest - name: Convert regular mechanisms run: | - if [ "${{matrix.python_version}}" == '3.11' ]; then + if [ "${{matrix.python-version}}" == '3.11' ]; then poetry run convert -l ${{github.workspace}}/Mechanisms/list_mech # Fail if there are diffs to the committed mechanisms git diff --exit-code @@ -92,7 +92,7 @@ jobs: fi - name: Convert QSS mechanisms run: | - if [ "${{matrix.python_version}}" == '3.11' ]; then + if [ "${{matrix.python-version}}" == '3.11' ]; then poetry run qssa -lq ${{github.workspace}}/Mechanisms/list_qss_mech poetry run convert -lq ${{github.workspace}}/Mechanisms/list_qss_mech # Fail if there are diffs to the committed mechanisms From a1b81dedd161a60f56dcdcb907262fa0ade8e4e3 Mon Sep 17 00:00:00 2001 From: Bruce Perry Date: Wed, 25 Feb 2026 11:08:48 -0700 Subject: [PATCH 5/7] run full tests on python 3.10 not 3.11 --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2d1801090..df1af254f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -76,7 +76,7 @@ jobs: run: poetry run pytest - name: Convert regular mechanisms run: | - if [ "${{matrix.python-version}}" == '3.11' ]; then + if [ "${{matrix.python-version}}" == '3.10' ]; then poetry run convert -l ${{github.workspace}}/Mechanisms/list_mech # Fail if there are diffs to the committed mechanisms git diff --exit-code @@ -92,7 +92,7 @@ jobs: fi - name: Convert QSS mechanisms run: | - if [ "${{matrix.python-version}}" == '3.11' ]; then + if [ "${{matrix.python-version}}" == '3.10' ]; then poetry run qssa -lq ${{github.workspace}}/Mechanisms/list_qss_mech poetry run convert -lq ${{github.workspace}}/Mechanisms/list_qss_mech # Fail if there are diffs to the committed mechanisms From c064c8360625a73373177530fafaf75a03bc53df Mon Sep 17 00:00:00 2001 From: Bruce Perry Date: Wed, 25 Feb 2026 11:13:58 -0700 Subject: [PATCH 6/7] add mechs that previously had missed diffs --- Mechanisms/C3MechLite/1_000atm/mechanism.H | 299 ++++++++++++++++++- Mechanisms/C3MechLite/1_000atm/mechanism.cpp | 293 ------------------ Mechanisms/POLIMI2020/1_000atm/mechanism.H | 206 +++++++++++-- Mechanisms/POLIMI2020/1_000atm/mechanism.cpp | 154 ---------- 4 files changed, 472 insertions(+), 480 deletions(-) diff --git a/Mechanisms/C3MechLite/1_000atm/mechanism.H b/Mechanisms/C3MechLite/1_000atm/mechanism.H index 14ac21537..73761be90 100644 --- a/Mechanisms/C3MechLite/1_000atm/mechanism.H +++ b/Mechanisms/C3MechLite/1_000atm/mechanism.H @@ -95,11 +95,7 @@ #define NUM_FIT 4 // ALWAYS on CPU stuff -- can have different def depending on if we are CPU or -// GPU based. Defined in mechanism.cpp -void atomicWeight(amrex::Real* awt); -// MISC -void CKAWT(amrex::Real* awt); -void CKNCF(int* ncf); +// GPU based. Defined in mechanism.cpp MISC void CKSYME_STR(amrex::Vector& ename); void CKSYMS_STR(amrex::Vector& kname); void GET_RMAP(int* _rmap); @@ -137,6 +133,299 @@ CKINDX(int& mm, int& kk, int& ii, int& nfit) nfit = -1; // Why do you need this anyway ? } +// save atomic weights into array +AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void +atomicWeight(amrex::Real* awt) +{ + awt[0] = 12.011000; // C + awt[1] = 1.008000; // H + awt[2] = 14.007000; // N + awt[3] = 15.999000; // O + awt[4] = 39.950000; // Ar + awt[5] = 4.002602; // He +} + +// get atomic weight for all elements +AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void +CKAWT(amrex::Real* awt) +{ + atomicWeight(awt); +} + +// Returns the elemental composition +// of the speciesi (mdim is num of elements) +AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void +CKNCF(int* ncf) +{ + int kd = 6; + // Zero ncf + for (int id = 0; id < kd * 61; ++id) { + ncf[id] = 0; + } + + // HE + ncf[0 * kd + 5] = 1; // He + + // H2 + ncf[1 * kd + 1] = 2; // H + + // H + ncf[2 * kd + 1] = 1; // H + + // O + ncf[3 * kd + 3] = 1; // O + + // OH + ncf[4 * kd + 1] = 1; // H + ncf[4 * kd + 3] = 1; // O + + // H2O + ncf[5 * kd + 1] = 2; // H + ncf[5 * kd + 3] = 1; // O + + // O2 + ncf[6 * kd + 3] = 2; // O + + // N2 + ncf[7 * kd + 2] = 2; // N + + // AR + ncf[8 * kd + 4] = 1; // Ar + + // H2O2 + ncf[9 * kd + 1] = 2; // H + ncf[9 * kd + 3] = 2; // O + + // HO2 + ncf[10 * kd + 1] = 1; // H + ncf[10 * kd + 3] = 2; // O + + // NH3 + ncf[11 * kd + 1] = 3; // H + ncf[11 * kd + 2] = 1; // N + + // NH2 + ncf[12 * kd + 1] = 2; // H + ncf[12 * kd + 2] = 1; // N + + // NO2 + ncf[13 * kd + 2] = 1; // N + ncf[13 * kd + 3] = 2; // O + + // HONO + ncf[14 * kd + 1] = 1; // H + ncf[14 * kd + 2] = 1; // N + ncf[14 * kd + 3] = 2; // O + + // NH + ncf[15 * kd + 1] = 1; // H + ncf[15 * kd + 2] = 1; // N + + // N + ncf[16 * kd + 2] = 1; // N + + // HNO + ncf[17 * kd + 1] = 1; // H + ncf[17 * kd + 2] = 1; // N + ncf[17 * kd + 3] = 1; // O + + // NO + ncf[18 * kd + 2] = 1; // N + ncf[18 * kd + 3] = 1; // O + + // H2NO + ncf[19 * kd + 1] = 2; // H + ncf[19 * kd + 2] = 1; // N + ncf[19 * kd + 3] = 1; // O + + // NNH + ncf[20 * kd + 1] = 1; // H + ncf[20 * kd + 2] = 2; // N + + // N2O + ncf[21 * kd + 2] = 2; // N + ncf[21 * kd + 3] = 1; // O + + // N2H2 + ncf[22 * kd + 1] = 2; // H + ncf[22 * kd + 2] = 2; // N + + // N2H3 + ncf[23 * kd + 1] = 3; // H + ncf[23 * kd + 2] = 2; // N + + // N2H4 + ncf[24 * kd + 1] = 4; // H + ncf[24 * kd + 2] = 2; // N + + // CO2 + ncf[25 * kd + 0] = 1; // C + ncf[25 * kd + 3] = 2; // O + + // CO + ncf[26 * kd + 0] = 1; // C + ncf[26 * kd + 3] = 1; // O + + // CH4 + ncf[27 * kd + 0] = 1; // C + ncf[27 * kd + 1] = 4; // H + + // CH3 + ncf[28 * kd + 0] = 1; // C + ncf[28 * kd + 1] = 3; // H + + // CH3O2 + ncf[29 * kd + 0] = 1; // C + ncf[29 * kd + 1] = 3; // H + ncf[29 * kd + 3] = 2; // O + + // CH3O2H + ncf[30 * kd + 0] = 1; // C + ncf[30 * kd + 1] = 4; // H + ncf[30 * kd + 3] = 2; // O + + // CH2 + ncf[31 * kd + 0] = 1; // C + ncf[31 * kd + 1] = 2; // H + + // HCO + ncf[32 * kd + 0] = 1; // C + ncf[32 * kd + 1] = 1; // H + ncf[32 * kd + 3] = 1; // O + + // CH2O + ncf[33 * kd + 0] = 1; // C + ncf[33 * kd + 1] = 2; // H + ncf[33 * kd + 3] = 1; // O + + // C2H4 + ncf[34 * kd + 0] = 2; // C + ncf[34 * kd + 1] = 4; // H + + // CH3O + ncf[35 * kd + 0] = 1; // C + ncf[35 * kd + 1] = 3; // H + ncf[35 * kd + 3] = 1; // O + + // CH2O2H + ncf[36 * kd + 0] = 1; // C + ncf[36 * kd + 1] = 3; // H + ncf[36 * kd + 3] = 2; // O + + // CH3OH + ncf[37 * kd + 0] = 1; // C + ncf[37 * kd + 1] = 4; // H + ncf[37 * kd + 3] = 1; // O + + // C2H5 + ncf[38 * kd + 0] = 2; // C + ncf[38 * kd + 1] = 5; // H + + // C2H6 + ncf[39 * kd + 0] = 2; // C + ncf[39 * kd + 1] = 6; // H + + // C2H3 + ncf[40 * kd + 0] = 2; // C + ncf[40 * kd + 1] = 3; // H + + // CH2CHO + ncf[41 * kd + 0] = 2; // C + ncf[41 * kd + 1] = 3; // H + ncf[41 * kd + 3] = 1; // O + + // CH2CO + ncf[42 * kd + 0] = 2; // C + ncf[42 * kd + 1] = 2; // H + ncf[42 * kd + 3] = 1; // O + + // C2H2 + ncf[43 * kd + 0] = 2; // C + ncf[43 * kd + 1] = 2; // H + + // CH2OH + ncf[44 * kd + 0] = 1; // C + ncf[44 * kd + 1] = 3; // H + ncf[44 * kd + 3] = 1; // O + + // C2H5O2 + ncf[45 * kd + 0] = 2; // C + ncf[45 * kd + 1] = 5; // H + ncf[45 * kd + 3] = 2; // O + + // C2H5O2H + ncf[46 * kd + 0] = 2; // C + ncf[46 * kd + 1] = 6; // H + ncf[46 * kd + 3] = 2; // O + + // C2H5O + ncf[47 * kd + 0] = 2; // C + ncf[47 * kd + 1] = 5; // H + ncf[47 * kd + 3] = 1; // O + + // CH3CHO + ncf[48 * kd + 0] = 2; // C + ncf[48 * kd + 1] = 4; // H + ncf[48 * kd + 3] = 1; // O + + // HCCO + ncf[49 * kd + 0] = 2; // C + ncf[49 * kd + 1] = 1; // H + ncf[49 * kd + 3] = 1; // O + + // C3H8 + ncf[50 * kd + 0] = 3; // C + ncf[50 * kd + 1] = 8; // H + + // NC3H7 + ncf[51 * kd + 0] = 3; // C + ncf[51 * kd + 1] = 7; // H + + // H2CN + ncf[52 * kd + 0] = 1; // C + ncf[52 * kd + 1] = 2; // H + ncf[52 * kd + 2] = 1; // N + + // CH3NO2 + ncf[53 * kd + 0] = 1; // C + ncf[53 * kd + 1] = 3; // H + ncf[53 * kd + 2] = 1; // N + ncf[53 * kd + 3] = 2; // O + + // NC3H7O2 + ncf[54 * kd + 0] = 3; // C + ncf[54 * kd + 1] = 7; // H + ncf[54 * kd + 3] = 2; // O + + // IC3H7 + ncf[55 * kd + 0] = 3; // C + ncf[55 * kd + 1] = 7; // H + + // C3H6 + ncf[56 * kd + 0] = 3; // C + ncf[56 * kd + 1] = 6; // H + + // C3H6OOH1-3 + ncf[57 * kd + 0] = 3; // C + ncf[57 * kd + 1] = 7; // H + ncf[57 * kd + 3] = 2; // O + + // C3H6OOH1-3O2 + ncf[58 * kd + 0] = 3; // C + ncf[58 * kd + 1] = 7; // H + ncf[58 * kd + 3] = 4; // O + + // OCHCH2CH2O + ncf[59 * kd + 0] = 3; // C + ncf[59 * kd + 1] = 5; // H + ncf[59 * kd + 3] = 2; // O + + // C3KET13 + ncf[60 * kd + 0] = 3; // C + ncf[60 * kd + 1] = 6; // H + ncf[60 * kd + 3] = 3; // O +} + // inverse molecular weights #ifdef AMREX_USE_GPU AMREX_GPU_CONSTANT const amrex::Real global_imw[61] = { diff --git a/Mechanisms/C3MechLite/1_000atm/mechanism.cpp b/Mechanisms/C3MechLite/1_000atm/mechanism.cpp index 4d536014d..131344437 100644 --- a/Mechanisms/C3MechLite/1_000atm/mechanism.cpp +++ b/Mechanisms/C3MechLite/1_000atm/mechanism.cpp @@ -463,299 +463,6 @@ progressRateFR( comp_qfqr(q_f, q_r, sc, sc_qss, T, invT, logT); } -// save atomic weights into array -void -atomicWeight(amrex::Real* awt) -{ - awt[0] = 12.011000; // C - awt[1] = 1.008000; // H - awt[2] = 14.007000; // N - awt[3] = 15.999000; // O - awt[4] = 39.950000; // Ar - awt[5] = 4.002602; // He -} - -// get atomic weight for all elements -void -CKAWT(amrex::Real* awt) -{ - atomicWeight(awt); -} - -// Returns the elemental composition -// of the speciesi (mdim is num of elements) -void -CKNCF(int* ncf) -{ - int kd = 6; - // Zero ncf - for (int id = 0; id < kd * 61; ++id) { - ncf[id] = 0; - } - - // HE - ncf[0 * kd + 5] = 1; // He - - // H2 - ncf[1 * kd + 1] = 2; // H - - // H - ncf[2 * kd + 1] = 1; // H - - // O - ncf[3 * kd + 3] = 1; // O - - // OH - ncf[4 * kd + 1] = 1; // H - ncf[4 * kd + 3] = 1; // O - - // H2O - ncf[5 * kd + 1] = 2; // H - ncf[5 * kd + 3] = 1; // O - - // O2 - ncf[6 * kd + 3] = 2; // O - - // N2 - ncf[7 * kd + 2] = 2; // N - - // AR - ncf[8 * kd + 4] = 1; // Ar - - // H2O2 - ncf[9 * kd + 1] = 2; // H - ncf[9 * kd + 3] = 2; // O - - // HO2 - ncf[10 * kd + 1] = 1; // H - ncf[10 * kd + 3] = 2; // O - - // NH3 - ncf[11 * kd + 1] = 3; // H - ncf[11 * kd + 2] = 1; // N - - // NH2 - ncf[12 * kd + 1] = 2; // H - ncf[12 * kd + 2] = 1; // N - - // NO2 - ncf[13 * kd + 2] = 1; // N - ncf[13 * kd + 3] = 2; // O - - // HONO - ncf[14 * kd + 1] = 1; // H - ncf[14 * kd + 2] = 1; // N - ncf[14 * kd + 3] = 2; // O - - // NH - ncf[15 * kd + 1] = 1; // H - ncf[15 * kd + 2] = 1; // N - - // N - ncf[16 * kd + 2] = 1; // N - - // HNO - ncf[17 * kd + 1] = 1; // H - ncf[17 * kd + 2] = 1; // N - ncf[17 * kd + 3] = 1; // O - - // NO - ncf[18 * kd + 2] = 1; // N - ncf[18 * kd + 3] = 1; // O - - // H2NO - ncf[19 * kd + 1] = 2; // H - ncf[19 * kd + 2] = 1; // N - ncf[19 * kd + 3] = 1; // O - - // NNH - ncf[20 * kd + 1] = 1; // H - ncf[20 * kd + 2] = 2; // N - - // N2O - ncf[21 * kd + 2] = 2; // N - ncf[21 * kd + 3] = 1; // O - - // N2H2 - ncf[22 * kd + 1] = 2; // H - ncf[22 * kd + 2] = 2; // N - - // N2H3 - ncf[23 * kd + 1] = 3; // H - ncf[23 * kd + 2] = 2; // N - - // N2H4 - ncf[24 * kd + 1] = 4; // H - ncf[24 * kd + 2] = 2; // N - - // CO2 - ncf[25 * kd + 0] = 1; // C - ncf[25 * kd + 3] = 2; // O - - // CO - ncf[26 * kd + 0] = 1; // C - ncf[26 * kd + 3] = 1; // O - - // CH4 - ncf[27 * kd + 0] = 1; // C - ncf[27 * kd + 1] = 4; // H - - // CH3 - ncf[28 * kd + 0] = 1; // C - ncf[28 * kd + 1] = 3; // H - - // CH3O2 - ncf[29 * kd + 0] = 1; // C - ncf[29 * kd + 1] = 3; // H - ncf[29 * kd + 3] = 2; // O - - // CH3O2H - ncf[30 * kd + 0] = 1; // C - ncf[30 * kd + 1] = 4; // H - ncf[30 * kd + 3] = 2; // O - - // CH2 - ncf[31 * kd + 0] = 1; // C - ncf[31 * kd + 1] = 2; // H - - // HCO - ncf[32 * kd + 0] = 1; // C - ncf[32 * kd + 1] = 1; // H - ncf[32 * kd + 3] = 1; // O - - // CH2O - ncf[33 * kd + 0] = 1; // C - ncf[33 * kd + 1] = 2; // H - ncf[33 * kd + 3] = 1; // O - - // C2H4 - ncf[34 * kd + 0] = 2; // C - ncf[34 * kd + 1] = 4; // H - - // CH3O - ncf[35 * kd + 0] = 1; // C - ncf[35 * kd + 1] = 3; // H - ncf[35 * kd + 3] = 1; // O - - // CH2O2H - ncf[36 * kd + 0] = 1; // C - ncf[36 * kd + 1] = 3; // H - ncf[36 * kd + 3] = 2; // O - - // CH3OH - ncf[37 * kd + 0] = 1; // C - ncf[37 * kd + 1] = 4; // H - ncf[37 * kd + 3] = 1; // O - - // C2H5 - ncf[38 * kd + 0] = 2; // C - ncf[38 * kd + 1] = 5; // H - - // C2H6 - ncf[39 * kd + 0] = 2; // C - ncf[39 * kd + 1] = 6; // H - - // C2H3 - ncf[40 * kd + 0] = 2; // C - ncf[40 * kd + 1] = 3; // H - - // CH2CHO - ncf[41 * kd + 0] = 2; // C - ncf[41 * kd + 1] = 3; // H - ncf[41 * kd + 3] = 1; // O - - // CH2CO - ncf[42 * kd + 0] = 2; // C - ncf[42 * kd + 1] = 2; // H - ncf[42 * kd + 3] = 1; // O - - // C2H2 - ncf[43 * kd + 0] = 2; // C - ncf[43 * kd + 1] = 2; // H - - // CH2OH - ncf[44 * kd + 0] = 1; // C - ncf[44 * kd + 1] = 3; // H - ncf[44 * kd + 3] = 1; // O - - // C2H5O2 - ncf[45 * kd + 0] = 2; // C - ncf[45 * kd + 1] = 5; // H - ncf[45 * kd + 3] = 2; // O - - // C2H5O2H - ncf[46 * kd + 0] = 2; // C - ncf[46 * kd + 1] = 6; // H - ncf[46 * kd + 3] = 2; // O - - // C2H5O - ncf[47 * kd + 0] = 2; // C - ncf[47 * kd + 1] = 5; // H - ncf[47 * kd + 3] = 1; // O - - // CH3CHO - ncf[48 * kd + 0] = 2; // C - ncf[48 * kd + 1] = 4; // H - ncf[48 * kd + 3] = 1; // O - - // HCCO - ncf[49 * kd + 0] = 2; // C - ncf[49 * kd + 1] = 1; // H - ncf[49 * kd + 3] = 1; // O - - // C3H8 - ncf[50 * kd + 0] = 3; // C - ncf[50 * kd + 1] = 8; // H - - // NC3H7 - ncf[51 * kd + 0] = 3; // C - ncf[51 * kd + 1] = 7; // H - - // H2CN - ncf[52 * kd + 0] = 1; // C - ncf[52 * kd + 1] = 2; // H - ncf[52 * kd + 2] = 1; // N - - // CH3NO2 - ncf[53 * kd + 0] = 1; // C - ncf[53 * kd + 1] = 3; // H - ncf[53 * kd + 2] = 1; // N - ncf[53 * kd + 3] = 2; // O - - // NC3H7O2 - ncf[54 * kd + 0] = 3; // C - ncf[54 * kd + 1] = 7; // H - ncf[54 * kd + 3] = 2; // O - - // IC3H7 - ncf[55 * kd + 0] = 3; // C - ncf[55 * kd + 1] = 7; // H - - // C3H6 - ncf[56 * kd + 0] = 3; // C - ncf[56 * kd + 1] = 6; // H - - // C3H6OOH1-3 - ncf[57 * kd + 0] = 3; // C - ncf[57 * kd + 1] = 7; // H - ncf[57 * kd + 3] = 2; // O - - // C3H6OOH1-3O2 - ncf[58 * kd + 0] = 3; // C - ncf[58 * kd + 1] = 7; // H - ncf[58 * kd + 3] = 4; // O - - // OCHCH2CH2O - ncf[59 * kd + 0] = 3; // C - ncf[59 * kd + 1] = 5; // H - ncf[59 * kd + 3] = 2; // O - - // C3KET13 - ncf[60 * kd + 0] = 3; // C - ncf[60 * kd + 1] = 6; // H - ncf[60 * kd + 3] = 3; // O -} - // Returns the vector of strings of element names void CKSYME_STR(amrex::Vector& ename) diff --git a/Mechanisms/POLIMI2020/1_000atm/mechanism.H b/Mechanisms/POLIMI2020/1_000atm/mechanism.H index 43f0ecfec..a371ca70e 100644 --- a/Mechanisms/POLIMI2020/1_000atm/mechanism.H +++ b/Mechanisms/POLIMI2020/1_000atm/mechanism.H @@ -65,11 +65,7 @@ #define NUM_FIT 4 // ALWAYS on CPU stuff -- can have different def depending on if we are CPU or -// GPU based. Defined in mechanism.cpp -void atomicWeight(amrex::Real* awt); -// MISC -void CKAWT(amrex::Real* awt); -void CKNCF(int* ncf); +// GPU based. Defined in mechanism.cpp MISC void CKSYME_STR(amrex::Vector& ename); void CKSYMS_STR(amrex::Vector& kname); void GET_RMAP(int* _rmap); @@ -107,6 +103,160 @@ CKINDX(int& mm, int& kk, int& ii, int& nfit) nfit = -1; // Why do you need this anyway ? } +// save atomic weights into array +AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void +atomicWeight(amrex::Real* awt) +{ + awt[0] = 12.011000; // C + awt[1] = 1.008000; // H + awt[2] = 14.007000; // N + awt[3] = 15.999000; // O + awt[4] = 39.950000; // Ar + awt[5] = 4.002602; // He +} + +// get atomic weight for all elements +AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void +CKAWT(amrex::Real* awt) +{ + atomicWeight(awt); +} + +// Returns the elemental composition +// of the speciesi (mdim is num of elements) +AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void +CKNCF(int* ncf) +{ + int kd = 6; + // Zero ncf + for (int id = 0; id < kd * 31; ++id) { + ncf[id] = 0; + } + + // AR + ncf[0 * kd + 4] = 1; // Ar + + // N2 + ncf[1 * kd + 2] = 2; // N + + // HE + ncf[2 * kd + 5] = 1; // He + + // H2 + ncf[3 * kd + 1] = 2; // H + + // H + ncf[4 * kd + 1] = 1; // H + + // O2 + ncf[5 * kd + 3] = 2; // O + + // O + ncf[6 * kd + 3] = 1; // O + + // H2O + ncf[7 * kd + 1] = 2; // H + ncf[7 * kd + 3] = 1; // O + + // OH + ncf[8 * kd + 1] = 1; // H + ncf[8 * kd + 3] = 1; // O + + // H2O2 + ncf[9 * kd + 1] = 2; // H + ncf[9 * kd + 3] = 2; // O + + // HO2 + ncf[10 * kd + 1] = 1; // H + ncf[10 * kd + 3] = 2; // O + + // NO + ncf[11 * kd + 2] = 1; // N + ncf[11 * kd + 3] = 1; // O + + // N2O + ncf[12 * kd + 2] = 2; // N + ncf[12 * kd + 3] = 1; // O + + // NO2 + ncf[13 * kd + 2] = 1; // N + ncf[13 * kd + 3] = 2; // O + + // HNO + ncf[14 * kd + 1] = 1; // H + ncf[14 * kd + 2] = 1; // N + ncf[14 * kd + 3] = 1; // O + + // HNO2 + ncf[15 * kd + 1] = 1; // H + ncf[15 * kd + 2] = 1; // N + ncf[15 * kd + 3] = 2; // O + + // HONO + ncf[16 * kd + 1] = 1; // H + ncf[16 * kd + 2] = 1; // N + ncf[16 * kd + 3] = 2; // O + + // HONO2 + ncf[17 * kd + 1] = 1; // H + ncf[17 * kd + 2] = 1; // N + ncf[17 * kd + 3] = 3; // O + + // N2H2 + ncf[18 * kd + 1] = 2; // H + ncf[18 * kd + 2] = 2; // N + + // H2NN + ncf[19 * kd + 1] = 2; // H + ncf[19 * kd + 2] = 2; // N + + // NH2OH + ncf[20 * kd + 1] = 3; // H + ncf[20 * kd + 2] = 1; // N + ncf[20 * kd + 3] = 1; // O + + // HNOH + ncf[21 * kd + 1] = 2; // H + ncf[21 * kd + 2] = 1; // N + ncf[21 * kd + 3] = 1; // O + + // NH3 + ncf[22 * kd + 1] = 3; // H + ncf[22 * kd + 2] = 1; // N + + // N2H4 + ncf[23 * kd + 1] = 4; // H + ncf[23 * kd + 2] = 2; // N + + // N + ncf[24 * kd + 2] = 1; // N + + // NO3 + ncf[25 * kd + 2] = 1; // N + ncf[25 * kd + 3] = 3; // O + + // NH + ncf[26 * kd + 1] = 1; // H + ncf[26 * kd + 2] = 1; // N + + // NNH + ncf[27 * kd + 1] = 1; // H + ncf[27 * kd + 2] = 2; // N + + // NH2 + ncf[28 * kd + 1] = 2; // H + ncf[28 * kd + 2] = 1; // N + + // H2NO + ncf[29 * kd + 1] = 2; // H + ncf[29 * kd + 2] = 1; // N + ncf[29 * kd + 3] = 1; // O + + // N2H3 + ncf[30 * kd + 1] = 3; // H + ncf[30 * kd + 2] = 2; // N +} + // inverse molecular weights #ifdef AMREX_USE_GPU AMREX_GPU_CONSTANT const amrex::Real global_imw[31] = { @@ -356,8 +506,8 @@ AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void cv_R(amrex::Real* species, const amrex::Real T) { const amrex::Real T2 = T * T; - const amrex::Real T3 = T * T * T; - const amrex::Real T4 = T * T * T * T; + const amrex::Real T3 = T * T2; + const amrex::Real T4 = T * T3; // species with midpoint at T=1000 kelvin if (T < 1000) { @@ -560,8 +710,8 @@ AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void cp_R(amrex::Real* species, const amrex::Real T) { const amrex::Real T2 = T * T; - const amrex::Real T3 = T * T * T; - const amrex::Real T4 = T * T * T * T; + const amrex::Real T3 = T * T2; + const amrex::Real T4 = T * T3; // species with midpoint at T=1000 kelvin if (T < 1000) { @@ -764,8 +914,8 @@ AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void gibbs(amrex::Real* species, const amrex::Real T) { const amrex::Real T2 = T * T; - const amrex::Real T3 = T * T * T; - const amrex::Real T4 = T * T * T * T; + const amrex::Real T3 = T * T2; + const amrex::Real T4 = T * T3; const amrex::Real invT = 1.0 / T; const amrex::Real logT = log(T); @@ -1093,8 +1243,8 @@ AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void helmholtz(amrex::Real* species, const amrex::Real T) { const amrex::Real T2 = T * T; - const amrex::Real T3 = T * T * T; - const amrex::Real T4 = T * T * T * T; + const amrex::Real T3 = T * T2; + const amrex::Real T4 = T * T3; const amrex::Real invT = 1.0 / T; const amrex::Real logT = log(T); @@ -1422,8 +1572,8 @@ AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void speciesInternalEnergy(amrex::Real* species, const amrex::Real T) { const amrex::Real T2 = T * T; - const amrex::Real T3 = T * T * T; - const amrex::Real T4 = T * T * T * T; + const amrex::Real T3 = T * T2; + const amrex::Real T4 = T * T3; const amrex::Real invT = 1.0 / T; // species with midpoint at T=1000 kelvin @@ -1688,8 +1838,8 @@ AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void speciesEnthalpy(amrex::Real* species, const amrex::Real T) { const amrex::Real T2 = T * T; - const amrex::Real T3 = T * T * T; - const amrex::Real T4 = T * T * T * T; + const amrex::Real T3 = T * T2; + const amrex::Real T4 = T * T3; const amrex::Real invT = 1.0 / T; // species with midpoint at T=1000 kelvin @@ -1954,8 +2104,8 @@ AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void speciesEntropy(amrex::Real* species, const amrex::Real T) { const amrex::Real T2 = T * T; - const amrex::Real T3 = T * T * T; - const amrex::Real T4 = T * T * T * T; + const amrex::Real T3 = T * T2; + const amrex::Real T4 = T * T3; const amrex::Real logT = log(T); // species with midpoint at T=1000 kelvin @@ -2220,7 +2370,7 @@ AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE void dcvpRdT(amrex::Real* species, const amrex::Real T) { const amrex::Real T2 = T * T; - const amrex::Real T3 = T * T * T; + const amrex::Real T3 = T * T2; // species with midpoint at T=1000 kelvin if (T < 1000) { @@ -2442,8 +2592,8 @@ CKCPBS(const amrex::Real T, const amrex::Real y[], amrex::Real& cpbs) // compute Cp/R at the given temperature const amrex::Real T2 = T * T; - const amrex::Real T3 = T * T * T; - const amrex::Real T4 = T * T * T * T; + const amrex::Real T3 = T * T2; + const amrex::Real T4 = T * T3; // species with midpoint at T=1000 kelvin if (T < 1000) { @@ -2788,8 +2938,8 @@ CKCVBS(const amrex::Real T, const amrex::Real y[], amrex::Real& cvbs) amrex::Real result = 0.0; // compute Cv/R at the given temperature const amrex::Real T2 = T * T; - const amrex::Real T3 = T * T * T; - const amrex::Real T4 = T * T * T * T; + const amrex::Real T3 = T * T2; + const amrex::Real T4 = T * T3; // species with midpoint at T=1000 kelvin if (T < 1000) { @@ -3134,8 +3284,8 @@ CKHBMS(const amrex::Real T, const amrex::Real y[], amrex::Real& hbms) { amrex::Real result = 0.0; const amrex::Real T2 = T * T; - const amrex::Real T3 = T * T * T; - const amrex::Real T4 = T * T * T * T; + const amrex::Real T3 = T * T2; + const amrex::Real T4 = T * T3; const amrex::Real invT = 1.0 / T; // species with midpoint at T=1000 kelvin @@ -3545,8 +3695,8 @@ CKUBMS(const amrex::Real T, const amrex::Real y[], amrex::Real& ubms) { amrex::Real result = 0.0; const amrex::Real T2 = T * T; - const amrex::Real T3 = T * T * T; - const amrex::Real T4 = T * T * T * T; + const amrex::Real T3 = T * T2; + const amrex::Real T4 = T * T3; const amrex::Real invT = 1.0 / T; // species with midpoint at T=1000 kelvin diff --git a/Mechanisms/POLIMI2020/1_000atm/mechanism.cpp b/Mechanisms/POLIMI2020/1_000atm/mechanism.cpp index f70019bd1..309dd5724 100644 --- a/Mechanisms/POLIMI2020/1_000atm/mechanism.cpp +++ b/Mechanisms/POLIMI2020/1_000atm/mechanism.cpp @@ -204,160 +204,6 @@ progressRateFR( comp_qfqr(q_f, q_r, sc, sc_qss, T, invT, logT); } -// save atomic weights into array -void -atomicWeight(amrex::Real* awt) -{ - awt[0] = 12.011000; // C - awt[1] = 1.008000; // H - awt[2] = 14.007000; // N - awt[3] = 15.999000; // O - awt[4] = 39.950000; // Ar - awt[5] = 4.002602; // He -} - -// get atomic weight for all elements -void -CKAWT(amrex::Real* awt) -{ - atomicWeight(awt); -} - -// Returns the elemental composition -// of the speciesi (mdim is num of elements) -void -CKNCF(int* ncf) -{ - int kd = 6; - // Zero ncf - for (int id = 0; id < kd * 31; ++id) { - ncf[id] = 0; - } - - // AR - ncf[0 * kd + 4] = 1; // Ar - - // N2 - ncf[1 * kd + 2] = 2; // N - - // HE - ncf[2 * kd + 5] = 1; // He - - // H2 - ncf[3 * kd + 1] = 2; // H - - // H - ncf[4 * kd + 1] = 1; // H - - // O2 - ncf[5 * kd + 3] = 2; // O - - // O - ncf[6 * kd + 3] = 1; // O - - // H2O - ncf[7 * kd + 1] = 2; // H - ncf[7 * kd + 3] = 1; // O - - // OH - ncf[8 * kd + 1] = 1; // H - ncf[8 * kd + 3] = 1; // O - - // H2O2 - ncf[9 * kd + 1] = 2; // H - ncf[9 * kd + 3] = 2; // O - - // HO2 - ncf[10 * kd + 1] = 1; // H - ncf[10 * kd + 3] = 2; // O - - // NO - ncf[11 * kd + 2] = 1; // N - ncf[11 * kd + 3] = 1; // O - - // N2O - ncf[12 * kd + 2] = 2; // N - ncf[12 * kd + 3] = 1; // O - - // NO2 - ncf[13 * kd + 2] = 1; // N - ncf[13 * kd + 3] = 2; // O - - // HNO - ncf[14 * kd + 1] = 1; // H - ncf[14 * kd + 2] = 1; // N - ncf[14 * kd + 3] = 1; // O - - // HNO2 - ncf[15 * kd + 1] = 1; // H - ncf[15 * kd + 2] = 1; // N - ncf[15 * kd + 3] = 2; // O - - // HONO - ncf[16 * kd + 1] = 1; // H - ncf[16 * kd + 2] = 1; // N - ncf[16 * kd + 3] = 2; // O - - // HONO2 - ncf[17 * kd + 1] = 1; // H - ncf[17 * kd + 2] = 1; // N - ncf[17 * kd + 3] = 3; // O - - // N2H2 - ncf[18 * kd + 1] = 2; // H - ncf[18 * kd + 2] = 2; // N - - // H2NN - ncf[19 * kd + 1] = 2; // H - ncf[19 * kd + 2] = 2; // N - - // NH2OH - ncf[20 * kd + 1] = 3; // H - ncf[20 * kd + 2] = 1; // N - ncf[20 * kd + 3] = 1; // O - - // HNOH - ncf[21 * kd + 1] = 2; // H - ncf[21 * kd + 2] = 1; // N - ncf[21 * kd + 3] = 1; // O - - // NH3 - ncf[22 * kd + 1] = 3; // H - ncf[22 * kd + 2] = 1; // N - - // N2H4 - ncf[23 * kd + 1] = 4; // H - ncf[23 * kd + 2] = 2; // N - - // N - ncf[24 * kd + 2] = 1; // N - - // NO3 - ncf[25 * kd + 2] = 1; // N - ncf[25 * kd + 3] = 3; // O - - // NH - ncf[26 * kd + 1] = 1; // H - ncf[26 * kd + 2] = 1; // N - - // NNH - ncf[27 * kd + 1] = 1; // H - ncf[27 * kd + 2] = 2; // N - - // NH2 - ncf[28 * kd + 1] = 2; // H - ncf[28 * kd + 2] = 1; // N - - // H2NO - ncf[29 * kd + 1] = 2; // H - ncf[29 * kd + 2] = 1; // N - ncf[29 * kd + 3] = 1; // O - - // N2H3 - ncf[30 * kd + 1] = 3; // H - ncf[30 * kd + 2] = 2; // N -} - // Returns the vector of strings of element names void CKSYME_STR(amrex::Vector& ename) From bcc7412f9a0ec862a365762113010ff88e655c3c Mon Sep 17 00:00:00 2001 From: Bruce Perry Date: Wed, 25 Feb 2026 11:31:10 -0700 Subject: [PATCH 7/7] allow continue on error for ceptr tests sensitive to numeric precision --- .github/workflows/ci.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index df1af254f..580993f1e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -75,6 +75,7 @@ jobs: - name: Run tests run: poetry run pytest - name: Convert regular mechanisms + continue-on-error: true run: | if [ "${{matrix.python-version}}" == '3.10' ]; then poetry run convert -l ${{github.workspace}}/Mechanisms/list_mech @@ -91,6 +92,7 @@ jobs: poetry run convert -f ${{github.workspace}}/Mechanisms/LiDryer/mechanism.yaml fi - name: Convert QSS mechanisms + continue-on-error: true run: | if [ "${{matrix.python-version}}" == '3.10' ]; then poetry run qssa -lq ${{github.workspace}}/Mechanisms/list_qss_mech