Skip to content

mod_fft

Lines: 69 | Visibility: public

Interface the fftw3 library for 3d arrays. author: Moritz Gubler Here are some fft routines. They can be made thread safe adding a critical block around the fft plan creation.

Dependencies

Uses

module~~mod_fft~~UsesGraph module~mod_fft mod_fft fftw3 fftw3 module~mod_fft->fftw3 iso_c_binding iso_c_binding module~mod_fft->iso_c_binding

Used By

module~~mod_fft~~UsedByGraph module~mod_fft mod_fft module~mod_fft_potential mod_fft_potential module~mod_fft_potential->module~mod_fft proc~close mod_fft_potential::PWPotCalculator%close proc~close->module~mod_fft proc~initialize_pot_calculator mod_fft_potential::PWPotCalculator%initialize_pot_calculator proc~initialize_pot_calculator->module~mod_fft module~mod_pw mod_pw module~mod_pw->module~mod_fft_potential module~mod_initialize mod_initialize module~mod_initialize->module~mod_pw module~mod_pppm mod_pppm module~mod_initialize->module~mod_pppm module~mod_pppm->module~mod_pw module~mod_predict_mode mod_predict_mode module~mod_predict_mode->module~mod_initialize module~mod_write_outfiles mod_write_outfiles module~mod_predict_mode->module~mod_write_outfiles module~mod_runner_interface_bindings mod_runner_interface_bindings module~mod_runner_interface_bindings->module~mod_initialize module~mod_train_energy_multiple_structures mod_train_energy_multiple_structures module~mod_train_energy_multiple_structures->module~mod_initialize module~mod_train_forces_multiple_structures mod_train_forces_multiple_structures module~mod_train_forces_multiple_structures->module~mod_initialize module~mod_train_forces_multiple_structures->module~mod_train_energy_multiple_structures module~mod_train_loop_4g_charges mod_train_loop_4g_charges module~mod_train_loop_4g_charges->module~mod_initialize module~mod_cost_calculator mod_cost_calculator module~mod_train_loop_4g_charges->module~mod_cost_calculator module~mod_output_files_and_cost_4g_charges mod_output_files_and_cost_4g_charges module~mod_train_loop_4g_charges->module~mod_output_files_and_cost_4g_charges module~mod_train_loop_atomic_property mod_train_loop_atomic_property module~mod_train_loop_atomic_property->module~mod_initialize module~mod_train_loop_atomic_property->module~mod_cost_calculator module~mod_output_files_and_cost mod_output_files_and_cost module~mod_train_loop_atomic_property->module~mod_output_files_and_cost module~mod_train_loop_short_range mod_train_loop_short_range module~mod_train_loop_short_range->module~mod_initialize module~mod_train_loop_short_range->module~mod_train_energy_multiple_structures module~mod_train_loop_short_range->module~mod_train_forces_multiple_structures module~mod_train_loop_short_range->module~mod_cost_calculator module~mod_train_loop_short_range->module~mod_output_files_and_cost module~mod_output_files_and_cost_4g_short_range mod_output_files_and_cost_4g_short_range module~mod_train_loop_short_range->module~mod_output_files_and_cost_4g_short_range module~mod_train_mode mod_train_mode module~mod_train_mode->module~mod_initialize module~mod_train_mode->module~mod_train_loop_4g_charges module~mod_train_mode->module~mod_train_loop_atomic_property module~mod_train_mode->module~mod_train_loop_short_range module~mod_write_outfiles_training mod_write_outfiles_training module~mod_train_mode->module~mod_write_outfiles_training module~mod_write_outfiles->module~mod_initialize program~runner RuNNer program~runner->module~mod_initialize program~runner->module~mod_predict_mode program~runner->module~mod_train_mode module~mod_lammps_interface mod_lammps_interface module~mod_lammps_interface->module~mod_runner_interface_bindings module~mod_write_outfiles_training->module~mod_write_outfiles module~mod_cost_calculator->module~mod_write_outfiles_training module~mod_output_files_and_cost->module~mod_cost_calculator module~mod_output_files_and_cost_4g_charges->module~mod_cost_calculator module~mod_output_files_and_cost_4g_short_range->module~mod_cost_calculator

Module Variables

  • PI : real(c_double)

Procedures Summary

Name Type Description
fft_allocate_3d_real Subroutine allocates byte alligned memory that can be used in fftw3
fft_allocate_3d_complex Subroutine allocates byte alligned memory that can be used in fftw3
fft_free_memory Subroutine deallocates
fft_3d Subroutine does a 3d complex to complex fft. Not thread safe
fft_3d_real_2_complex Subroutine does a 3d real to complex fft. Not thread safe
inv_fft_3d_complex_2_real Subroutine does a 3d complex to real fft. Not thread safe
inv_fft_3d Subroutine does a 3d complex to complex backward fft. Not thread safe

Procedure Details

subroutine fft_allocate_3d_real

subroutine fft_allocate_3d_real( &
    p, &
    arr, &
    n1, &
    n2, &
    n3 &
)

allocates byte alligned memory that can be used in fftw3

Arguments

  • p : type(c_ptr)
  • arr : real(c_double) (dim: (:,:,:))
  • n1 : integer [in]
  • n2 : integer [in]
  • n3 : integer [in]

Called By

proc~~fft_allocate_3d_real~~CalledByGraph proc~fft_allocate_3d_real mod_fft::fft_allocate_3d_real proc~initialize_pot_calculator mod_fft_potential::PWPotCalculator%initialize_pot_calculator proc~initialize_pot_calculator->proc~fft_allocate_3d_real proc~calc_lambda_q_derivatives mod_pw::PwCalculator%calc_lambda_q_derivatives proc~calc_lambda_q_derivatives->proc~initialize_pot_calculator proc~initialize_pw_electrostatics_calculator mod_pw::PwCalculator%initialize_pw_electrostatics_calculator proc~initialize_pw_electrostatics_calculator->proc~initialize_pot_calculator proc~evaluate_pw_electrostatics_calculator mod_pw::PwCalculator%evaluate_pw_electrostatics_calculator proc~evaluate_pw_electrostatics_calculator->proc~calc_lambda_q_derivatives proc~initialize_pppm mod_pppm::PppmCalculator%initialize_pppm proc~initialize_pppm->proc~initialize_pw_electrostatics_calculator

subroutine fft_allocate_3d_complex

subroutine fft_allocate_3d_complex( &
    p, &
    arr, &
    n1, &
    n2, &
    n3 &
)

allocates byte alligned memory that can be used in fftw3

Arguments

  • p : type(c_ptr)
  • arr : complex(c_double_complex) (dim: (:,:,:))
  • n1 : integer [in]
  • n2 : integer [in]
  • n3 : integer [in]

Called By

proc~~fft_allocate_3d_complex~~CalledByGraph proc~fft_allocate_3d_complex mod_fft::fft_allocate_3d_complex proc~initialize_pot_calculator mod_fft_potential::PWPotCalculator%initialize_pot_calculator proc~initialize_pot_calculator->proc~fft_allocate_3d_complex proc~calc_lambda_q_derivatives mod_pw::PwCalculator%calc_lambda_q_derivatives proc~calc_lambda_q_derivatives->proc~initialize_pot_calculator proc~initialize_pw_electrostatics_calculator mod_pw::PwCalculator%initialize_pw_electrostatics_calculator proc~initialize_pw_electrostatics_calculator->proc~initialize_pot_calculator proc~evaluate_pw_electrostatics_calculator mod_pw::PwCalculator%evaluate_pw_electrostatics_calculator proc~evaluate_pw_electrostatics_calculator->proc~calc_lambda_q_derivatives proc~initialize_pppm mod_pppm::PppmCalculator%initialize_pppm proc~initialize_pppm->proc~initialize_pw_electrostatics_calculator

subroutine fft_free_memory

subroutine fft_free_memory( &
    p &
)

deallocates

Arguments

  • p : type(c_ptr)

Called By

proc~~fft_free_memory~~CalledByGraph proc~fft_free_memory mod_fft::fft_free_memory proc~close mod_fft_potential::PWPotCalculator%close proc~close->proc~fft_free_memory

subroutine fft_3d

subroutine fft_3d( &
    in, &
    out, &
    nx, &
    ny, &
    nz, &
    n_threads &
)

does a 3d complex to complex fft. Not thread safe

Arguments

  • in : complex(c_double_complex) (dim: (nx,ny,nz)) [inout]
  • out : complex(c_double_complex) (dim: (nx,ny,nz)) [out]
  • nx : integer [in]
  • ny : integer [in]
  • nz : integer [in]
  • n_threads : integer [in]

subroutine fft_3d_real_2_complex

subroutine fft_3d_real_2_complex( &
    in, &
    out, &
    nx, &
    ny, &
    nz, &
    n_threads &
)

does a 3d real to complex fft. Not thread safe

Arguments

  • in : real(c_double) (dim: (nx,ny,nz)) [inout]
  • out : complex(c_double_complex) (dim: (nx/2+1,ny,nz)) [out]
  • nx : integer [in]
  • ny : integer [in]
  • nz : integer [in]
  • n_threads : integer [in]

Called By

proc~~fft_3d_real_2_complex~~CalledByGraph proc~fft_3d_real_2_complex mod_fft::fft_3d_real_2_complex proc~calc_potential mod_fft_potential::PWPotCalculator%calc_potential proc~calc_potential->proc~fft_3d_real_2_complex proc~transform_rho_strain mod_fft_potential::PWPotCalculator%transform_rho_strain proc~transform_rho_strain->proc~fft_3d_real_2_complex proc~calc_lambda_q_derivatives mod_pw::PwCalculator%calc_lambda_q_derivatives proc~calc_lambda_q_derivatives->proc~calc_potential proc~calc_lambda_q_derivatives->proc~transform_rho_strain proc~calc_potential_and_get_energy_and_forces mod_fft_potential::PWPotCalculator%calc_potential_and_get_energy_and_forces proc~calc_potential_and_get_energy_and_forces->proc~calc_potential proc~calc_pw_stress mod_fft_potential::PWPotCalculator%calc_pw_stress proc~calc_potential_and_get_energy_and_forces->proc~calc_pw_stress proc~calc_pw_stress->proc~transform_rho_strain proc~evaluate_pw_electrostatics_calculator mod_pw::PwCalculator%evaluate_pw_electrostatics_calculator proc~evaluate_pw_electrostatics_calculator->proc~calc_potential proc~evaluate_pw_electrostatics_calculator->proc~calc_lambda_q_derivatives proc~evaluate_pw_electrostatics_calculator->proc~calc_pw_stress

subroutine inv_fft_3d_complex_2_real

subroutine inv_fft_3d_complex_2_real( &
    in, &
    out, &
    nx, &
    ny, &
    nz, &
    n_threads &
)

does a 3d complex to real fft. Not thread safe

Arguments

  • in : complex(c_double_complex) (dim: (nx/2+1,ny,nz)) [inout]
  • out : real(c_double) (dim: (nx,ny,nz)) [out]
  • nx : integer [in]
  • ny : integer [in]
  • nz : integer [in]
  • n_threads : integer [in]

Called By

proc~~inv_fft_3d_complex_2_real~~CalledByGraph proc~inv_fft_3d_complex_2_real mod_fft::inv_fft_3d_complex_2_real proc~calc_potential mod_fft_potential::PWPotCalculator%calc_potential proc~calc_potential->proc~inv_fft_3d_complex_2_real proc~calc_lambda_q_derivatives mod_pw::PwCalculator%calc_lambda_q_derivatives proc~calc_lambda_q_derivatives->proc~calc_potential proc~calc_potential_and_get_energy_and_forces mod_fft_potential::PWPotCalculator%calc_potential_and_get_energy_and_forces proc~calc_potential_and_get_energy_and_forces->proc~calc_potential proc~evaluate_pw_electrostatics_calculator mod_pw::PwCalculator%evaluate_pw_electrostatics_calculator proc~evaluate_pw_electrostatics_calculator->proc~calc_potential proc~evaluate_pw_electrostatics_calculator->proc~calc_lambda_q_derivatives

subroutine inv_fft_3d

subroutine inv_fft_3d( &
    in, &
    out, &
    nx, &
    ny, &
    nz, &
    n_threads &
)

does a 3d complex to complex backward fft. Not thread safe

Arguments

  • in : complex(c_double_complex) (dim: (nx,ny,nz)) [inout]
  • out : complex(c_double_complex) (dim: (nx,ny,nz)) [out]
  • nx : integer [in]
  • ny : integer [in]
  • nz : integer [in]
  • n_threads : integer [in]