Skip to content

Gen2024 rank errors#11

Merged
brittonsmith merged 17 commits into
brittonsmith:gen2024from
mabruzzo:gen2024-rank-errors
Dec 18, 2024
Merged

Gen2024 rank errors#11
brittonsmith merged 17 commits into
brittonsmith:gen2024from
mabruzzo:gen2024-rank-errors

Conversation

@mabruzzo

Copy link
Copy Markdown

To be reviewed after #10

This simply fixes a few spots with array-rank issues:

  • the h2dustSa and h2dustCa variables were declared as 2D variables in some spots and declared as 1D variables in another spot
  • step_rate_newton_raphson passed isrf_habing as an array to a function that was expecting a scalar
  • cool_multi_time_g declared regra to be a scalar even though it is actually a 1D array

This patch converts nearly all usages of the ``logical`` type to the
newly defined ``MASK_TYPE`` in the Fortran source files throughout
Grackle.
- The ``MASK_TYPE`` type is a custom datatype that just wraps a 32bit
  integer.

  - Because Fortran will not implicitly cast between logicals and
    integers we need to explicitly compare this value against
    ``MASK_TRUE`` and ``MASK_FALSE``.
  - For consistency with C semantics, if-statements that want to see
    if the mask is true always compare ``MASK_TYPE`` value is not equal
    to ``MASK_FALSE``.

- The **only** ``logical`` variable that wasn't changed was the
  ``end_int`` variable that we pass into ``interpolate_3Dz_g``.
  We haven't touched this variable to avoid interfering with existing
  efforts to transcribe that function to C/C++

- This patch is extremely similar in spirit to GH PR
  grackle-project#227. But there a fewer minor distinctions:

  - I am actually more confident in the correctness of this patch (I used
    custom tools to automate the majority of these changes)
  - I converted more variables in this patch (that other PR **only**
    changed the ``itmask`` variable).

I have explicitly confirmed that all tests continue to pass after the
introduction of this PR
The `cool1d_multi_g` subroutine expects an argument `iter`. Previously,
the `cool_multi_time_g` subroutine would pass a value of 1 directly to
this argument.

To simplify the process of transcription, we now store the value inside
of a local variable called `dummy_iter_arg` (if we didn't do this, we
would need to insert logic into our transcription routine to inject
a custom variable to hold the value of 1 and then pass a pointer to that
value into `cool1d_multi_g`).
I made some minor tweaks to where we pass in the pointers to the
i-dimension of grid_dimensions, grid_start, and grid_end. This is a
purely superficial change, but will allow automated transcription to
produce better code.
…(these are used internally by step_rate_newton_raphson)
Previously, it was declared as a scalar.

I was tipped off to this issue by the fact that `cool1d_multi_g`
expected a 1D array. I further confirmed that `solve_rate_cool_g` was
passed the exact same array (by checking arg lists within
`calculate_cooling_time.c` and `solve_chemistry.c`).

@brittonsmith brittonsmith left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

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

Good catches.

@brittonsmith brittonsmith merged commit 001f509 into brittonsmith:gen2024 Dec 18, 2024
@mabruzzo mabruzzo deleted the gen2024-rank-errors branch December 20, 2024 15:27
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.

2 participants