252 Particles3D Particles;
260#ifdef COOLING_GRACKLE
275 AnalysisModule Analysis;
353 Real *Grav_potential;
366 Real *d_density, *d_momentum_x, *d_momentum_y, *d_momentum_z, *d_Energy, *d_scalar, *d_basic_scalar,
367 *d_dust_density, *d_magnetic_x, *d_magnetic_y, *d_magnetic_z, *d_GasEnergy;
394 void Get_Position(
long i,
long j,
long k, Real *xpos, Real *ypos, Real *zpos)
const;
396 Real Calc_Inverse_Timestep();
409 void set_dt_Gravity();
414 void Execute_Hydro_Integrator(
void);
427 std::function<
void(
Grid3D &)> &chemistry_callback);
453 void Read_Grid_HDF5(hid_t file_id,
struct Parameters P);
456#if defined(PRINT_INITIAL_STATS) && defined(COSMOLOGY)
459 void Print_Grid_Stats(
void);
603 void Spherical_Overdensity_3D();
611 void Adiabatic_Expansion(
struct Parameters P);
622 void Circularly_Polarized_Alfven_Wave(
struct Parameters const P);
630 void Advecting_Field_Loop(
struct Parameters const P);
638 void MHD_Spherical_Blast(
struct Parameters const P);
646 void Orszag_Tang_Vortex();
651 void Set_Boundaries_MPI_BLOCK(
int *flags,
struct Parameters P);
652 void Load_and_Send_MPI_Comm_Buffers(
int dir,
int *flags);
653 void Wait_and_Unload_MPI_Comm_Buffers(
int dir,
int *flags);
654 void Unload_MPI_Comm_Buffers(
int index);
656 int Load_Hydro_DeviceBuffer_X0(Real *buffer);
657 int Load_Hydro_DeviceBuffer_X1(Real *buffer);
658 int Load_Hydro_DeviceBuffer_Y0(Real *buffer);
659 int Load_Hydro_DeviceBuffer_Y1(Real *buffer);
660 int Load_Hydro_DeviceBuffer_Z0(Real *buffer);
661 int Load_Hydro_DeviceBuffer_Z1(Real *buffer);
663 void Unload_Hydro_DeviceBuffer_X0(Real *buffer);
664 void Unload_Hydro_DeviceBuffer_X1(Real *buffer);
665 void Unload_Hydro_DeviceBuffer_Y0(Real *buffer);
666 void Unload_Hydro_DeviceBuffer_Y1(Real *buffer);
667 void Unload_Hydro_DeviceBuffer_Z0(Real *buffer);
668 void Unload_Hydro_DeviceBuffer_Z1(Real *buffer);
678 void Initialize_Gravity(
struct Parameters *P);
679 void Compute_Gravitational_Potential(
struct Parameters *P);
680 void Copy_Hydro_Density_to_Gravity_Function(
int g_start,
int g_end);
681 void Copy_Hydro_Density_to_Gravity();
682 void Extrapolate_Grav_Potential_Function(
int g_start,
int g_end);
683 void Extrapolate_Grav_Potential();
684 void Set_Potential_Boundaries_Periodic(
int direction,
int side,
int *flags);
685 int Load_Gravity_Potential_To_Buffer(
int direction,
int side, Real *buffer,
int buffer_start);
686 void Unload_Gravity_Potential_from_Buffer(
int direction,
int side, Real *buffer,
int buffer_start);
687 void Set_Potential_Boundaries_Isolated(
int direction,
int side,
int *flags);
688 void Compute_Potential_Boundaries_Isolated(
int dir,
struct Parameters *P);
689 void Compute_Potential_Isolated_Boundary(
int direction,
int side,
int bc_potential_type);
691 void Get_Potential_SOR(Real Grav_Constant, Real dens_avrg, Real current_a,
struct Parameters *P);
692 int Load_Poisson_Boundary_To_Buffer(
int direction,
int side, Real *buffer);
693 void Unload_Poisson_Boundary_From_Buffer(
int direction,
int side, Real *buffer_host);
696 void Copy_Hydro_Density_to_Gravity_GPU();
697 void Extrapolate_Grav_Potential_GPU();
698 int Load_Gravity_Potential_To_Buffer_GPU(
int direction,
int side, Real *buffer,
int buffer_start);
699 void Unload_Gravity_Potential_from_Buffer_GPU(
int direction,
int side, Real *buffer,
int buffer_start);
700 void Set_Potential_Boundaries_Isolated_GPU(
int direction,
int side,
int *flags);
701 void Set_Potential_Boundaries_Periodic_GPU(
int direction,
int side,
int *flags);
706#ifdef GRAVITY_ANALYTIC_COMP
707 void Add_Analytic_Potential();
708 void Add_Analytic_Potential(
int g_start,
int g_end);
709 void Setup_Analytic_Potential(
struct Parameters *P);
710 void Setup_Analytic_Galaxy_Potential(
int g_start,
int g_end,
const DiskGalaxy &gal);
712 void Add_Analytic_Potential_GPU();
717 void Initialize_Particles(
struct Parameters *P);
718 void Initialize_Uniform_Particles();
719 void Copy_Particles_Density_function(
int g_start,
int g_end);
720 void Copy_Particles_Density();
721 void Copy_Particles_Density_to_Gravity(
struct Parameters P);
722 void Set_Particles_Density_Boundaries_Periodic(
int direction,
int side);
723 void Transfer_Particles_Boundaries(
struct Parameters P);
724 Real Update_Grid_and_Particles_KDK(
struct Parameters P);
725 void Set_Particles_Boundary(
int dir,
int side);
727 void Set_Particles_Open_Boundary_CPU(
int dir,
int side);
730 int Load_Particles_Density_Boundary_to_Buffer(
int direction,
int side, Real *buffer);
731 void Unload_Particles_Density_Boundary_From_Buffer(
int direction,
int side, Real *buffer);
732 void Load_and_Send_Particles_X0(
int ireq_n_particles,
int ireq_particles_transfer);
733 void Load_and_Send_Particles_X1(
int ireq_n_particles,
int ireq_particles_transfer);
734 void Load_and_Send_Particles_Y0(
int ireq_n_particles,
int ireq_particles_transfer);
735 void Load_and_Send_Particles_Y1(
int ireq_n_particles,
int ireq_particles_transfer);
736 void Load_and_Send_Particles_Z0(
int ireq_n_particles,
int ireq_particles_transfer);
737 void Load_and_Send_Particles_Z1(
int ireq_n_particles,
int ireq_particles_transfer);
738 void Unload_Particles_from_Buffer_X0(
int *flags);
739 void Unload_Particles_from_Buffer_X1(
int *flags);
740 void Unload_Particles_from_Buffer_Y0(
int *flags);
741 void Unload_Particles_from_Buffer_Y1(
int *flags);
742 void Unload_Particles_from_Buffer_Z0(
int *flags);
743 void Unload_Particles_from_Buffer_Z1(
int *flags);
744 void Wait_NTransfer_and_Request_Recv_Particles_Transfer_BLOCK(
int dir,
int *flags);
745 void Load_NTtransfer_and_Request_Receive_Particles_Transfer(
int index,
int *ireq_particles_transfer);
746 void Wait_and_Unload_MPI_Comm_Particles_Buffers_BLOCK(
int dir,
int *flags);
747 void Unload_Particles_From_Buffers_BLOCK(
int index,
int *flags);
748 void Finish_Particles_Transfer();
750 void Transfer_Particles_Density_Boundaries(
struct Parameters P);
751 void Copy_Particles_Density_Buffer_Device_to_Host(
int direction,
int side, Real *buffer_d, Real *buffer_h);
755 void Load_Particles_Data(
struct Parameters P);
764 void Write_Particles_Data_HDF5(hid_t file_id);
765 void Load_Particles_Data_HDF5(hid_t file_id,
int nfile);
767 void Get_Gravity_Field_Particles_function(
int g_start,
int g_end);
768 void Get_Gravity_Field_Particles();
769 void Get_Gravity_CIC_function(part_int_t p_start, part_int_t p_end);
770 void Get_Gravity_CIC();
771 void Advance_Particles_KDK_Step1();
772 void Advance_Particles_KDK_Step2();
773 void Advance_Particles_KDK_Step1_function(part_int_t p_start, part_int_t p_end);
774 void Advance_Particles_KDK_Step2_function(part_int_t p_start, part_int_t p_end);
775 void Get_Particles_Acceleration();
776 void Advance_Particles(
int N_KDK_step);
777 Real Calc_Particles_dt_function(part_int_t p_start, part_int_t p_end);
778 Real Calc_Particles_dt();
780 Real Calc_Particles_dt_GPU();
781 void Advance_Particles_KDK_Step1_GPU();
782 void Advance_Particles_KDK_Step2_GPU();
783 void Set_Particles_Boundary_GPU(
int dir,
int side);
784 void Set_Particles_Density_Boundaries_Periodic_GPU(
int direction,
int side);
785 int Load_Particles_Density_Boundary_to_Buffer_GPU(
int direction,
int side, Real *buffer);
786 void Unload_Particles_Density_Boundary_From_Buffer_GPU(
int direction,
int side, Real *buffer);
789 void Copy_Potential_From_GPU();
790 void Copy_Particles_Density_to_GPU();
791 void Copy_Particles_Density_GPU();
796 void Initialize_Cosmology(
struct Parameters *P);
797 void Change_DM_Frame_System(
bool forward);
798 void Change_GAS_Frame_System(
bool forward);
799 void Change_GAS_Frame_System_GPU(
bool forward);
800 void Change_Cosmological_Frame_System(
bool forward);
801 void Advance_Particles_KDK_Cosmo_Step1_function(part_int_t p_start, part_int_t p_end);
802 void Advance_Particles_KDK_Cosmo_Step2_function(part_int_t p_start, part_int_t p_end);
803 Real Calc_Particles_dt_Cosmo_function(part_int_t p_start, part_int_t p_end);
804 Real Calc_Particles_dt_Cosmo();
806 void Advance_Particles_KDK_Cosmo_Step1_GPU();
807 void Advance_Particles_KDK_Cosmo_Step2_GPU();
811#ifdef COOLING_GRACKLE
812 void Initialize_Grackle(
struct Parameters *P);
813 void Allocate_Memory_Grackle();
814 void Initialize_Fields_Grackle();
815 void Copy_Fields_To_Grackle_function(
int g_start,
int g_end);
816 void Copy_Fields_To_Grackle();
817 void Update_Internal_Energy_function(
int g_start,
int g_end);
818 void Update_Internal_Energy();
819 void Do_Cooling_Step_Grackle();
823 void Initialize_Chemistry(
struct Parameters *P);
824 void Compute_Gas_Temperature(Real *temperature,
bool convert_cosmo_units);
825 void Update_Chemistry();
829 void Initialize_AnalysisModule(
struct Parameters *P);
830 void Compute_and_Output_Analysis(
struct Parameters *P);
832 void Write_Analysis_Header_HDF5(hid_t file_id);
833 void Write_Analysis_Data_HDF5(hid_t file_id);
836 void Compute_Phase_Diagram();
839 #ifdef LYA_STATISTICS
840 void Populate_Lya_Skewers_Local(
int axis);
841 void Compute_Transmitted_Flux_Skewer(
int skewer_id,
int axis);
842 void Compute_Lya_Statistics();
843 void Compute_Flux_Power_Spectrum_Skewer(
int skewer_id,
int axis);
844 void Initialize_Power_Spectrum_Measurements(
int axis);
845 #ifdef OUTPUT_SKEWERS
846 void Output_Skewers_File(
struct Parameters *P);
847 void Write_Skewers_Header_HDF5(hid_t file_id);
848 void Write_Skewers_Data_HDF5(hid_t file_id);