Skip to content

Commit

Permalink
add contiguous attribute for arrays passed to c functions
Browse files Browse the repository at this point in the history
  • Loading branch information
mattldawson committed Nov 6, 2024
1 parent 3f1718e commit af7ce33
Show file tree
Hide file tree
Showing 6 changed files with 67 additions and 67 deletions.
20 changes: 10 additions & 10 deletions fortran/micm.F90
Original file line number Diff line number Diff line change
Expand Up @@ -252,16 +252,16 @@ subroutine solve_arrays(this, time_step, temperature, pressure, air_density, &
use iso_c_binding, only: c_loc
use iso_fortran_env, only: real64
use musica_util, only: string_t, string_t_c, error_t_c, error_t
class(micm_t), intent(in) :: this
real(real64), intent(in) :: time_step
real(real64), target, intent(in) :: temperature(:)
real(real64), target, intent(in) :: pressure(:)
real(real64), target, intent(in) :: air_density(:)
real(real64), target, intent(inout) :: concentrations(:,:)
real(real64), target, intent(in) :: user_defined_reaction_rates(:,:)
type(string_t), intent(out) :: solver_state
type(solver_stats_t), intent(out) :: solver_stats
type(error_t), intent(out) :: error
class(micm_t), intent(in) :: this
real(real64), intent(in) :: time_step
real(real64), target, contiguous, intent(in) :: temperature(:)
real(real64), target, contiguous, intent(in) :: pressure(:)
real(real64), target, contiguous, intent(in) :: air_density(:)
real(real64), target, contiguous, intent(inout) :: concentrations(:,:)
real(real64), target, contiguous, intent(in) :: user_defined_reaction_rates(:,:)
type(string_t), intent(out) :: solver_state
type(solver_stats_t), intent(out) :: solver_stats
type(error_t), intent(out) :: error

type(string_t_c) :: solver_state_c
type(solver_stats_t_c) :: solver_stats_c
Expand Down
24 changes: 12 additions & 12 deletions fortran/tuvx/grid.F90
Original file line number Diff line number Diff line change
Expand Up @@ -175,9 +175,9 @@ subroutine set_edges(this, edges, error)
use musica_util, only: error_t, error_t_c, dk => musica_dk

! Arguments
class(grid_t), intent(inout) :: this
real(dk), target, dimension(:), intent(in) :: edges
type(error_t), intent(inout) :: error
class(grid_t), intent(inout) :: this
real(dk), target, contiguous, intent(in) :: edges(:)
type(error_t), intent(inout) :: error

! Local variables
type(error_t_c) :: error_c
Expand All @@ -197,9 +197,9 @@ subroutine get_edges(this, edges, error)
use musica_util, only: error_t, error_t_c, dk => musica_dk

! Arguments
class(grid_t), intent(inout) :: this
real(dk), target, dimension(:), intent(inout) :: edges
type(error_t), intent(inout) :: error
class(grid_t), intent(inout) :: this
real(dk), target, contiguous, intent(inout) :: edges(:)
type(error_t), intent(inout) :: error

! Local variables
type(error_t_c) :: error_c
Expand All @@ -219,9 +219,9 @@ subroutine set_midpoints(this, midpoints, error)
use musica_util, only: error_t, error_t_c, dk => musica_dk

! Arguments
class(grid_t), intent(inout) :: this
real(dk), target, dimension(:), intent(in) :: midpoints
type(error_t), intent(inout) :: error
class(grid_t), intent(inout) :: this
real(dk), target, contiguous, intent(in) :: midpoints(:)
type(error_t), intent(inout) :: error

! Local variables
type(error_t_c) :: error_c
Expand All @@ -241,9 +241,9 @@ subroutine get_midpoints(this, midpoints, error)
use musica_util, only: error_t, error_t_c, dk => musica_dk

! Arguments
class(grid_t), intent(inout) :: this
real(dk), target, dimension(:), intent(inout) :: midpoints
type(error_t), intent(inout) :: error
class(grid_t), intent(inout) :: this
real(dk), target, contiguous, intent(inout) :: midpoints(:)
type(error_t), intent(inout) :: error

! Local variables
type(error_t_c) :: error_c
Expand Down
36 changes: 18 additions & 18 deletions fortran/tuvx/profile.F90
Original file line number Diff line number Diff line change
Expand Up @@ -205,9 +205,9 @@ subroutine set_edge_values(this, edge_values, error)
use musica_util, only: error_t, error_t_c, dk => musica_dk

! Arguments
class(profile_t), intent(inout) :: this
real(dk), target, dimension(:), intent(in) :: edge_values
type(error_t), intent(inout) :: error
class(profile_t), intent(inout) :: this
real(dk), target, contiguous, intent(in) :: edge_values(:)
type(error_t), intent(inout) :: error

! Local variables
type(error_t_c) :: error_c
Expand All @@ -228,9 +228,9 @@ subroutine get_edge_values(this, edge_values, error)
use musica_util, only: error_t, error_t_c, dk => musica_dk

! Arguments
class(profile_t), intent(inout) :: this
real(dk), target, dimension(:), intent(inout) :: edge_values
type(error_t), intent(inout) :: error
class(profile_t), intent(inout) :: this
real(dk), target, contiguous, intent(inout) :: edge_values(:)
type(error_t), intent(inout) :: error

! Local variables
type(error_t_c) :: error_c
Expand All @@ -251,9 +251,9 @@ subroutine set_midpoint_values(this, midpoint_values, error)
use musica_util, only: error_t, error_t_c, dk => musica_dk

! Arguments
class(profile_t), intent(inout) :: this
real(dk), target, dimension(:), intent(in) :: midpoint_values
type(error_t), intent(inout) :: error
class(profile_t), intent(inout) :: this
real(dk), target, contiguous, intent(in) :: midpoint_values(:)
type(error_t), intent(inout) :: error

! Local variables
type(error_t_c) :: error_c
Expand All @@ -274,9 +274,9 @@ subroutine get_midpoint_values(this, midpoint_values, error)
use musica_util, only: error_t, error_t_c, dk => musica_dk

! Arguments
class(profile_t), intent(inout) :: this
real(dk), target, dimension(:), intent(inout) :: midpoint_values
type(error_t), intent(inout) :: error
class(profile_t), intent(inout) :: this
real(dk), target, contiguous, intent(inout) :: midpoint_values(:)
type(error_t), intent(inout) :: error

! Local variables
type(error_t_c) :: error_c
Expand All @@ -297,9 +297,9 @@ subroutine set_layer_densities(this, layer_densities, error)
use musica_util, only: error_t, error_t_c, dk => musica_dk

! Arguments
class(profile_t), intent(inout) :: this
real(dk), target, dimension(:), intent(in) :: layer_densities
type(error_t), intent(inout) :: error
class(profile_t), intent(inout) :: this
real(dk), target, contiguous, intent(in) :: layer_densities(:)
type(error_t), intent(inout) :: error

! Local variables
type(error_t_c) :: error_c
Expand All @@ -320,9 +320,9 @@ subroutine get_layer_densities(this, layer_densities, error)
use musica_util, only: error_t, error_t_c, dk => musica_dk

! Arguments
class(profile_t), intent(inout) :: this
real(dk), target, dimension(:), intent(inout) :: layer_densities
type(error_t), intent(inout) :: error
class(profile_t), intent(inout) :: this
real(dk), target, contiguous, intent(inout) :: layer_densities(:)
type(error_t), intent(inout) :: error

! Local variables
type(error_t_c) :: error_c
Expand Down
36 changes: 18 additions & 18 deletions fortran/tuvx/radiator.F90
Original file line number Diff line number Diff line change
Expand Up @@ -182,9 +182,9 @@ subroutine set_optical_depths(this, optical_depths, error)
use musica_util, only: error_t, error_t_c, dk => musica_dk

! Arguments
class(radiator_t), intent(inout) :: this
real(dk), target, dimension(:,:), intent(in) :: optical_depths
type(error_t), intent(inout) :: error
class(radiator_t), intent(inout) :: this
real(dk), target, contiguous, intent(in) :: optical_depths(:,:)
type(error_t), intent(inout) :: error

! Local variables
type(error_t_c) :: error_c
Expand All @@ -207,9 +207,9 @@ subroutine get_optical_depths(this, optical_depths, error)
use musica_util, only: error_t, error_t_c, dk => musica_dk

! Arguments
class(radiator_t), intent(inout) :: this
real(dk), target, dimension(:,:), intent(in) :: optical_depths
type(error_t), intent(inout) :: error
class(radiator_t), intent(inout) :: this
real(dk), target, contiguous, intent(in) :: optical_depths(:,:)
type(error_t), intent(inout) :: error

! Local variables
type(error_t_c) :: error_c
Expand All @@ -233,9 +233,9 @@ subroutine set_single_scattering_albedos(this, single_scattering_albedos, &
use musica_util, only: error_t, error_t_c, dk => musica_dk

! Arguments
class(radiator_t), intent(inout) :: this
real(dk), target, dimension(:,:), intent(in) :: single_scattering_albedos
type(error_t), intent(inout) :: error
class(radiator_t), intent(inout) :: this
real(dk), target, contiguous, intent(in) :: single_scattering_albedos(:,:)
type(error_t), intent(inout) :: error

! Local variables
type(error_t_c) :: error_c
Expand All @@ -260,9 +260,9 @@ subroutine get_single_scattering_albedos(this, single_scattering_albedos, &
use musica_util, only: error_t, error_t_c, dk => musica_dk

! Arguments
class(radiator_t), intent(inout) :: this
real(dk), target, dimension(:,:), intent(in) :: single_scattering_albedos
type(error_t), intent(inout) :: error
class(radiator_t), intent(inout) :: this
real(dk), target, contiguous, intent(in) :: single_scattering_albedos(:,:)
type(error_t), intent(inout) :: error

! Local variables
type(error_t_c) :: error_c
Expand All @@ -286,9 +286,9 @@ subroutine set_asymmetry_factors(this, asymmetry_factors, error)
use musica_util, only: error_t, error_t_c, dk => musica_dk

! Arguments
class(radiator_t), intent(inout) :: this
real(dk), target, dimension(:,:,:), intent(in) :: asymmetry_factors
type(error_t), intent(inout) :: error
class(radiator_t), intent(inout) :: this
real(dk), target, contiguous, intent(in) :: asymmetry_factors(:,:,:)
type(error_t), intent(inout) :: error

! Local variables
type(error_t_c) :: error_c
Expand All @@ -313,9 +313,9 @@ subroutine get_asymmetry_factors(this, asymmetry_factors, error)
use musica_util, only: error_t, error_t_c, dk => musica_dk

! Arguments
class(radiator_t), intent(inout) :: this
real(dk), target, dimension(:,:,:), intent(in) :: asymmetry_factors
type(error_t), intent(inout) :: error
class(radiator_t), intent(inout) :: this
real(dk), target, contiguous, intent(in) :: asymmetry_factors(:,:,:)
type(error_t), intent(inout) :: error

! Local variables
type(error_t_c) :: error_c
Expand Down
12 changes: 6 additions & 6 deletions fortran/tuvx/tuvx.F90
Original file line number Diff line number Diff line change
Expand Up @@ -285,12 +285,12 @@ subroutine run(this, solar_zenith_angle, earth_sun_distance, &
use musica_util, only: error_t, error_t_c, dk => musica_dk

! Arguments
class(tuvx_t), intent(inout) :: this
real(kind=dk), intent(in) :: solar_zenith_angle ! radians
real(kind=dk), intent(in) :: earth_sun_distance ! AU
real(kind=dk), target, intent(inout) :: photolysis_rate_constants(:,:) ! s-1 (layer, reaction)
real(kind=dk), target, intent(inout) :: heating_rates(:,:) ! K s-1 (layer, reaction)
type(error_t), intent(inout) :: error
class(tuvx_t), intent(inout) :: this
real(kind=dk), intent(in) :: solar_zenith_angle ! radians
real(kind=dk), intent(in) :: earth_sun_distance ! AU
real(kind=dk), target, contiguous, intent(inout) :: photolysis_rate_constants(:,:) ! s-1 (layer, reaction)
real(kind=dk), target, contiguous, intent(inout) :: heating_rates(:,:) ! K s-1 (layer, reaction)
type(error_t), intent(inout) :: error

! Local variables
type(error_t_c) :: error_c
Expand Down
6 changes: 3 additions & 3 deletions fortran/util.F90
Original file line number Diff line number Diff line change
Expand Up @@ -747,9 +747,9 @@ subroutine copy_data( this, source, target )

use iso_c_binding, only: c_loc

class(index_mappings_t), intent(inout) :: this
real(kind=musica_dk), target, intent(in) :: source(:)
real(kind=musica_dk), target, intent(in) :: target(:)
class(index_mappings_t), intent(inout) :: this
real(kind=musica_dk), target, contiguous, intent(in) :: source(:)
real(kind=musica_dk), target, contiguous, intent(in) :: target(:)

call copy_data_c( this%mappings_c_, c_loc( source ), c_loc( target ) )

Expand Down

0 comments on commit af7ce33

Please sign in to comment.