Skip to content

mod_pppm

Lines: 188 | Visibility: private

Electrostatics solver using the Particle-Particle-Particle Mesh method. author: Moritz Gubler.

Dependencies

Uses

module~~mod_pppm~~UsesGraph module~mod_pppm mod_pppm module~mod_abstract_electrostatics mod_abstract_electrostatics module~mod_pppm->module~mod_abstract_electrostatics module~mod_ewald_summation mod_ewald_summation module~mod_pppm->module~mod_ewald_summation module~mod_linalg mod_linalg module~mod_pppm->module~mod_linalg module~mod_neighbor_grid mod_neighbor_grid module~mod_pppm->module~mod_neighbor_grid module~mod_outer_product mod_outer_product module~mod_pppm->module~mod_outer_product module~mod_pair_electrostatics mod_pair_electrostatics module~mod_pppm->module~mod_pair_electrostatics module~mod_precision mod_precision module~mod_pppm->module~mod_precision module~mod_pw mod_pw module~mod_pppm->module~mod_pw module~mod_throw mod_throw module~mod_pppm->module~mod_throw module~mod_abstract_electrostatics->module~mod_precision module~mod_structures mod_structures module~mod_abstract_electrostatics->module~mod_structures module~mod_ewald_summation->module~mod_abstract_electrostatics module~mod_ewald_summation->module~mod_linalg module~mod_ewald_summation->module~mod_neighbor_grid module~mod_ewald_summation->module~mod_outer_product module~mod_ewald_summation->module~mod_pair_electrostatics module~mod_ewald_summation->module~mod_precision module~mod_constants mod_constants module~mod_ewald_summation->module~mod_constants module~mod_neighborlist_helper mod_neighborlist_helper module~mod_ewald_summation->module~mod_neighborlist_helper module~mod_linalg->module~mod_precision module~mod_linalg->module~mod_throw module~cublas_wrapper cublas_wrapper module~mod_linalg->module~cublas_wrapper module~mod_settings mod_settings module~mod_linalg->module~mod_settings module~mod_neighbor_grid->module~mod_precision module~mod_dynamic_int_array mod_dynamic_int_array module~mod_neighbor_grid->module~mod_dynamic_int_array module~mod_mpi mod_mpi module~mod_neighbor_grid->module~mod_mpi module~mod_neighbor_grid->module~mod_neighborlist_helper module~mod_structures_helper mod_structures_helper module~mod_neighbor_grid->module~mod_structures_helper module~mod_outer_product->module~mod_linalg module~mod_outer_product->module~mod_precision module~mod_pair_electrostatics->module~mod_abstract_electrostatics module~mod_pair_electrostatics->module~mod_precision module~mod_pair_electrostatics->module~mod_throw module~mod_pair_electrostatics->module~mod_constants iso_c_binding iso_c_binding module~mod_precision->iso_c_binding iso_fortran_env iso_fortran_env module~mod_precision->iso_fortran_env module~mod_pw->module~mod_abstract_electrostatics module~mod_pw->module~mod_precision module~mod_pw->module~mod_throw module~mod_fft_potential mod_fft_potential module~mod_pw->module~mod_fft_potential module~mod_throw->module~mod_precision module~mod_throw->iso_c_binding module~mod_throw->iso_fortran_env module~mod_io mod_io module~mod_throw->module~mod_io module~mod_throw->module~mod_mpi module~mod_sort mod_sort module~mod_throw->module~mod_sort module~cublas_wrapper->iso_c_binding module~cublas_wrapper->module~mod_settings module~mod_constants->module~mod_precision module~mod_constants->iso_c_binding module~mod_fft_potential->module~mod_linalg module~mod_fft_potential->module~mod_precision module~mod_fft_potential->module~mod_throw module~mod_fft_potential->iso_c_binding module~mod_fft_potential->module~mod_constants module~mod_fft_potential->module~mod_neighborlist_helper module~mod_fft_potential->module~mod_structures_helper module~mod_fft mod_fft module~mod_fft_potential->module~mod_fft module~mod_io->module~mod_precision module~mod_io->iso_fortran_env module~mod_optional_args mod_optional_args module~mod_io->module~mod_optional_args module~mod_mpi->module~mod_precision mpi_f08 mpi_f08 module~mod_mpi->mpi_f08 module~mod_neighborlist_helper->module~mod_linalg module~mod_neighborlist_helper->module~mod_precision module~mod_neighborlist_helper->module~mod_mpi module~mod_settings->module~mod_precision module~mod_settings->module~mod_throw module~mod_settings->module~mod_constants module~mod_settings->module~mod_io module~mod_cpu_vendor mod_cpu_vendor module~mod_settings->module~mod_cpu_vendor module~mod_periodic_table mod_periodic_table module~mod_settings->module~mod_periodic_table module~mod_sort->module~mod_precision module~mod_structures->module~mod_linalg module~mod_structures->module~mod_precision module~mod_structures->module~mod_throw module~mod_structures->module~mod_constants module~mod_structures->module~mod_mpi module~mod_structures->module~mod_structures_helper module~mod_array_helpers mod_array_helpers module~mod_structures->module~mod_array_helpers module~mod_structures->module~mod_periodic_table module~mod_structures_helper->module~mod_linalg module~mod_structures_helper->module~mod_precision module~mod_array_helpers->module~mod_precision module~mod_array_helpers->module~mod_throw module~mod_cpu_vendor->iso_c_binding module~mod_fft->iso_c_binding fftw3 fftw3 module~mod_fft->fftw3 module~mod_periodic_table->module~mod_precision module~mod_periodic_table->module~mod_throw module~mod_periodic_table->module~mod_constants module~mod_periodic_table->module~mod_io module~mod_periodic_table->module~mod_array_helpers

Used By

module~~mod_pppm~~UsedByGraph module~mod_pppm mod_pppm module~mod_initialize mod_initialize module~mod_initialize->module~mod_pppm 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

  • ETA_BEST : real(DP)

Derived Types Summary

Name Description
PppmCalculator

Procedures Summary

Name Type Description
initialize_pppm Subroutine
evaluate_intern_to_implement Subroutine
calc_real_space_party Subroutine @todo: There is still room for performance improvements in this routine. @todo Use the same...
calc_real_space_pair Subroutine
free_fftw Subroutine

Derived Types Details

type PppmCalculator

Components

Type-Bound Procedures

Name Attributes Binding
initialize_abstract_electrostatics_calculator_private public ⇒ initialize_abstract_electrostatics_calculator_private
numerical_forces public ⇒ numerical_forces_electrostatic
numerical_stress public ⇒ numerical_stress_electrostatic
evaluate public ⇒ evaluate
evaluate_structure public ⇒ evaluate_structure
update_sigma public ⇒ update_sigma
initialize public ⇒ initialize_pppm
evaluate_intern_to_implement public ⇒ evaluate_intern_to_implement
calc_real_space_party private ⇒ calc_real_space_party
calc_real_space_pair private ⇒ calc_real_space_pair
free_fftw_intern public ⇒ free_fftw

Inherits

type~~pppmcalculator~~InheritsGraph type~pppmcalculator PppmCalculator type~abstractelectrostaticscalculator AbstractElectrostaticsCalculator type~pppmcalculator->type~abstractelectrostaticscalculator type~pwcalculator PwCalculator type~pppmcalculator->type~pwcalculator pw_calc type~pwcalculator->type~abstractelectrostaticscalculator type~pwpotcalculator PWPotCalculator type~pwcalculator->type~pwpotcalculator pwpot_calc, lagrange_calculator c_ptr c_ptr type~pwpotcalculator->c_ptr prho, prhofft, ppot, ps1, ps2, ps3, ps4, ps5, ps6, ppotfft, psf1, psf2, psf3, psf4, psf5, psf6, pweight

Procedure Details

subroutine initialize_pppm

subroutine initialize_pppm( &
    self, &
    num_atoms, &
    atomic_sigmas, &
    electrostatics_precision, &
    lattice &
)

Arguments

  • self : class(PppmCalculator) [out]
  • num_atoms : integer [in]
  • atomic_sigmas : real(DP) (dim: (num_atoms)) [in]
  • electrostatics_precision : real(DP) [in]
  • lattice : real(DP) (dim: (3,3)) [in]

subroutine evaluate_intern_to_implement

subroutine evaluate_intern_to_implement( &
    self, &
    pos, &
    lat, &
    charges, &
    lagrange_charges, &
    calc_energy, &
    calc_forces, &
    calc_stress, &
    calc_de_dq, &
    calc_a_matrix, &
    calc_lambda_times_da_dpos_times_q, &
    calc_lambda_times_da_dstress_times_q &
)

Arguments

  • self : class(PppmCalculator) [inout]
  • pos : real(DP) (dim: (3,self%num_atoms)) [in]
  • lat : real(DP) (dim: (3,3)) [in]
  • charges : real(DP) (dim: (self%num_atoms)) [in]
  • lagrange_charges : real(DP) (dim: (self%num_atoms)) [in]
  • calc_energy : logical [in]
  • calc_forces : logical [in]
  • calc_stress : logical [in]
  • calc_de_dq : logical [in]
  • calc_a_matrix : logical [in]
  • calc_lambda_times_da_dpos_times_q : logical [in]
  • calc_lambda_times_da_dstress_times_q : logical [in]

subroutine calc_real_space_party

subroutine calc_real_space_party( &
    self, &
    pos, &
    lat, &
    charges, &
    lagrange_charges, &
    calc_forces, &
    calc_stress, &
    calc_lambda_times_da_dpos_times_q, &
    calc_lambda_times_da_dstress_times_q &
)

@todo: There is still room for performance improvements in this routine. @todo Use the same setting or take it from the input file

todo why here but not in other calculators? @todo why here but not in other calculators?

Arguments

  • self : class(PppmCalculator) [inout]
  • pos : real(DP) (dim: (3,self%num_atoms)) [in]
  • lat : real(DP) (dim: (3,3)) [in]
  • charges : real(DP) (dim: (self%num_atoms)) [in]
  • lagrange_charges : real(DP) (dim: (self%num_atoms)) [in]
  • calc_forces : logical [in]
  • calc_stress : logical [in]
  • calc_lambda_times_da_dpos_times_q : logical [in]– If true, the quantity lambda * dA/dxyz * q is computed. It adds it to what is already in self%lambda_da_dpos_q.
  • calc_lambda_times_da_dstress_times_q : logical [in]– If true, the quantity lambda * dA/dstress * q is computed. It adds it to what is already in self%lambda_da_dstress_q.

Called By

proc~~calc_real_space_party~~CalledByGraph proc~calc_real_space_party mod_pppm::PppmCalculator%calc_real_space_party proc~evaluate_intern_to_implement mod_pppm::PppmCalculator%evaluate_intern_to_implement proc~evaluate_intern_to_implement->proc~calc_real_space_party

subroutine calc_real_space_pair

subroutine calc_real_space_pair( &
    self, &
    iat, &
    jat, &
    d, &
    r, &
    lat, &
    qi, &
    lqi, &
    charges, &
    lagrange_charges, &
    calc_grad, &
    calc_forces, &
    calc_stress, &
    calc_lambda_times_da_dpos_times_q, &
    calc_lambda_times_da_dstress_times_q &
)

Arguments

  • self : class(PppmCalculator) [inout]
  • iat : integer [in]
  • jat : integer [in]
  • d : real(DP) (dim: (3)) [in]
  • r : real(DP) [in]
  • lat : real(DP) (dim: (3,3)) [in]
  • qi : real(DP) [in]
  • lqi : real(DP) [in]
  • charges : real(DP) (dim: (self%num_atoms)) [in]
  • lagrange_charges : real(DP) (dim: (self%num_atoms)) [in]
  • calc_grad : logical [in]
  • calc_forces : logical [in]
  • calc_stress : logical [in]
  • calc_lambda_times_da_dpos_times_q : logical [in]
  • calc_lambda_times_da_dstress_times_q : logical [in]

Called By

proc~~calc_real_space_pair~~CalledByGraph proc~calc_real_space_pair mod_pppm::PppmCalculator%calc_real_space_pair proc~calc_real_space_party mod_pppm::PppmCalculator%calc_real_space_party proc~calc_real_space_party->proc~calc_real_space_pair proc~evaluate_intern_to_implement mod_pppm::PppmCalculator%evaluate_intern_to_implement proc~evaluate_intern_to_implement->proc~calc_real_space_party

subroutine free_fftw

subroutine free_fftw( &
    self &
)

Arguments