#include <gp/cuda-gpuinfo.h>

__host__ cudaError_t cuda_setup(GPU_Info *gpu_info);

__host__ void cuda_array_addrs_set
(float4 *h_pos, float3 *h_vel, float4 *h_ori, float3 *h_om);

__host__ void time_step_launch(int grid_size, int block_size);

 __host__ void time_step_intersect_launch
(int grid_size, int block_size, int version, int dynamic_sm_amt);

__host__ void time_step_update_pos_launch
(int grid_size, int block_size);

struct Timing_Data {
  clock_t inter_time;
  int inter_count;
};

struct Helix_Info {
  bool opt_gravity;
  bool opt_tryout1;
  bool opt_tryout2;
  bool opt_end_fixed;
  int opt_use_shared;
  float opt_spring_constant;

  float delta_t;
  float delta_t_mass_inv;
  float delta_t_ma_axis;
  float delta_t_ma_perp_axis;

  int phys_helix_segments;
  float wire_radius;
  float helix_seg_hlength;
  float helix_seg_mass_inv;
  pVect gravity_accel;
  pQuat helix_rn_trans;
};