LCOV - code coverage report
Current view: top level - src - cp_control_types.F (source / functions) Coverage Total Hit
Test: CP2K Regtests (git:a43c040) Lines: 97.3 % 219 213
Test Date: 2026-02-12 06:45:40 Functions: 46.6 % 58 27

            Line data    Source code
       1              : !--------------------------------------------------------------------------------------------------!
       2              : !   CP2K: A general program to perform molecular dynamics simulations                              !
       3              : !   Copyright 2000-2026 CP2K developers group <https://cp2k.org>                                   !
       4              : !                                                                                                  !
       5              : !   SPDX-License-Identifier: GPL-2.0-or-later                                                      !
       6              : !--------------------------------------------------------------------------------------------------!
       7              : 
       8              : ! **************************************************************************************************
       9              : !> \brief Defines control structures, which contain the parameters and the
      10              : !>      settings for the DFT-based calculations.
      11              : ! **************************************************************************************************
      12              : MODULE cp_control_types
      13              :    USE cp_fm_types,                     ONLY: cp_fm_release,&
      14              :                                               cp_fm_type
      15              :    USE eeq_input,                       ONLY: eeq_solver_type
      16              :    USE input_constants,                 ONLY: do_full_density,&
      17              :                                               rtp_bse_ham_G0W0,&
      18              :                                               rtp_method_tddft,&
      19              :                                               use_mom_ref_coac
      20              :    USE kinds,                           ONLY: default_path_length,&
      21              :                                               default_string_length,&
      22              :                                               dp
      23              :    USE pair_potential_types,            ONLY: pair_potential_p_release,&
      24              :                                               pair_potential_p_type
      25              :    USE qs_cdft_types,                   ONLY: cdft_control_create,&
      26              :                                               cdft_control_release,&
      27              :                                               cdft_control_type
      28              :    USE smeagol_control_types,           ONLY: smeagol_control_create,&
      29              :                                               smeagol_control_release,&
      30              :                                               smeagol_control_type
      31              :    USE xas_control,                     ONLY: xas_control_release,&
      32              :                                               xas_control_type
      33              :    USE xas_tdp_types,                   ONLY: xas_tdp_control_create,&
      34              :                                               xas_tdp_control_release,&
      35              :                                               xas_tdp_control_type
      36              : #include "./base/base_uses.f90"
      37              : 
      38              :    IMPLICIT NONE
      39              : 
      40              :    PRIVATE
      41              : 
      42              : !***************************************************************************************************
      43              : !\brief Control parameters for hairy-probes DFT
      44              : !***************************************************************************************************
      45              :    TYPE hairy_probes_type
      46              :       REAL(KIND=dp)                        :: alpha = 0.0_dp     ! solution probes parameter
      47              :       REAL(KIND=dp)                        :: mu = 0.0_dp        ! chemical potenatial of electrons in reservoir
      48              :       REAL(KIND=dp)                        :: T = 0.0_dp         ! temperature of electrons in reservoir
      49              :       REAL(KIND=dp)                        :: eps_hp = 0.0_dp    ! tolerance for accuracy checks on occupation numbers
      50              :       INTEGER                              :: natoms = 0, &
      51              :                                               last_ao = 0, &
      52              :                                               first_ao = 0
      53              :       INTEGER, DIMENSION(:), POINTER       :: atom_ids => NULL() ! atom ids to which the probes are attached
      54              :    END TYPE hairy_probes_type
      55              : 
      56              : ! **************************************************************************************************
      57              : ! \brief Control parameters for pw grids
      58              : ! **************************************************************************************************
      59              :    TYPE pw_grid_option
      60              :       LOGICAL                              :: spherical = .FALSE.
      61              :       LOGICAL                              :: fullspace = .FALSE.
      62              :       INTEGER, DIMENSION(2)                :: distribution_layout = 0
      63              :       INTEGER                              :: blocked = 0
      64              :    END TYPE pw_grid_option
      65              : 
      66              : ! **************************************************************************************************
      67              : ! \brief parameters for EMD/RTP calculations involving MO projections
      68              : ! **************************************************************************************************
      69              :    TYPE proj_mo_type
      70              :       INTEGER, DIMENSION(:), ALLOCATABLE         :: ref_mo_index
      71              :       INTEGER                                    :: ref_mo_spin = 1
      72              :       INTEGER                                    :: ref_nlumo = 0
      73              :       LOGICAL                                    :: sum_on_all_ref = .FALSE.
      74              :       INTEGER, DIMENSION(:), ALLOCATABLE         :: td_mo_index
      75              :       REAL(dp), DIMENSION(:), ALLOCATABLE        :: td_mo_occ
      76              :       INTEGER                                    :: td_mo_spin = 1
      77              :       LOGICAL                                    :: sum_on_all_td = .FALSE.
      78              :       CHARACTER(LEN=default_path_length)         :: ref_mo_file_name = ""
      79              :       LOGICAL                                    :: propagate_ref = .FALSE.
      80              :       TYPE(cp_fm_type), DIMENSION(:), &
      81              :          ALLOCATABLE                       :: mo_ref
      82              :    END TYPE proj_mo_type
      83              : 
      84              :    TYPE proj_mo_p_type
      85              :       TYPE(proj_mo_type), POINTER                :: proj_mo => NULL()
      86              :    END TYPE proj_mo_p_type
      87              : 
      88              : ! **************************************************************************************************
      89              : ! \brief Control parameters for REAL_TIME_PROPAGATION calculations
      90              : ! **************************************************************************************************
      91              :    TYPE rtp_control_type
      92              :       LOGICAL                              :: converged = .FALSE.
      93              :       REAL(KIND=dp)                        :: eps_ener = 0.0_dp
      94              :       INTEGER                              :: max_iter = 0
      95              :       INTEGER                              :: mat_exp = 0
      96              :       INTEGER                              :: propagator = 0
      97              :       LOGICAL                              :: fixed_ions = .FALSE.
      98              :       INTEGER                              :: rtp_method = rtp_method_tddft
      99              :       INTEGER                              :: rtbse_ham = rtp_bse_ham_G0W0
     100              :       INTEGER                              :: initial_wfn = 0
     101              :       REAL(dp)                             :: eps_exp = 0.0_dp
     102              :       LOGICAL                              :: initial_step = .FALSE.
     103              :       LOGICAL                              :: hfx_redistribute = .FALSE.
     104              :       INTEGER                              :: aspc_order = 0
     105              :       INTEGER                              :: sc_check_start = 0
     106              :       LOGICAL                              :: apply_wfn_mix_init_restart = .FALSE.
     107              :       LOGICAL                              :: apply_delta_pulse = .FALSE.
     108              :       LOGICAL                              :: apply_delta_pulse_mag = .FALSE.
     109              :       LOGICAL                              :: periodic = .FALSE.
     110              :       LOGICAL                              :: linear_scaling = .FALSE.
     111              :       LOGICAL                              :: write_restart = .FALSE.
     112              :       INTEGER                              :: mcweeny_max_iter = 0
     113              :       INTEGER                              :: acc_ref = 0
     114              :       REAL(dp)                             :: mcweeny_eps = 0.0_dp
     115              :       INTEGER, DIMENSION(3)                :: delta_pulse_direction = 0
     116              :       REAL(KIND=dp)                        :: delta_pulse_scale = 0.0_dp
     117              :       LOGICAL                              :: velocity_gauge = .FALSE.
     118              :       REAL(KIND=dp), DIMENSION(3)          :: field = 0.0_dp
     119              :       REAL(KIND=dp), DIMENSION(3)          :: vec_pot = 0.0_dp
     120              :       LOGICAL                              :: nl_gauge_transform = .FALSE.
     121              :       LOGICAL                              :: is_proj_mo = .FALSE.
     122              :       TYPE(proj_mo_p_type), DIMENSION(:), &
     123              :          POINTER                :: proj_mo_list => NULL()
     124              :       ! Switch to turn on moments trace saving
     125              :       LOGICAL                              :: save_local_moments = .FALSE.
     126              :       INTEGER                              :: moment_trace_ref_type = use_mom_ref_coac
     127              :       REAL(dp), DIMENSION(:), POINTER      :: moment_trace_user_ref_point => NULL()
     128              :       REAL(dp)                             :: ft_damping = -1.0_dp
     129              :       REAL(dp)                             :: ft_t0 = 0.0_dp
     130              :       ! Index 1 : number of the element, Index 2 : coordinates
     131              :       ! e.g. if xx and xz elements are to be printed
     132              :       ! print_pol_elements(1,1) = 1
     133              :       ! print_pol_elements(1,2) = 1
     134              :       ! print_pol_elements(2,1) = 1
     135              :       ! print_pol_elements(2,2) = 3
     136              :       INTEGER, DIMENSION(:, :), POINTER    :: print_pol_elements => NULL()
     137              :       LOGICAL                              :: pade_requested = .FALSE.
     138              :       REAL(dp)                             :: pade_e_min = 0.0_dp
     139              :       REAL(dp)                             :: pade_e_step = 0.02_dp
     140              :       REAL(dp)                             :: pade_e_max = 100.0_dp
     141              :       REAL(dp)                             :: pade_fit_e_min = 0.0_dp
     142              :       REAL(dp)                             :: pade_fit_e_max = 300.0_dp
     143              :    END TYPE rtp_control_type
     144              : 
     145              : ! **************************************************************************************************
     146              : ! \brief Control parameters for DFTB calculations
     147              : ! **************************************************************************************************
     148              :    TYPE dftb_control_type
     149              :       LOGICAL                              :: self_consistent = .FALSE.
     150              :       LOGICAL                              :: orthogonal_basis = .FALSE.
     151              :       LOGICAL                              :: dispersion = .FALSE.
     152              :       INTEGER                              :: dispersion_type = 0
     153              :       LOGICAL                              :: dftb3_diagonal = .FALSE.
     154              :       LOGICAL                              :: hb_sr_damp = .FALSE.
     155              :       REAL(KIND=dp)                        :: hb_sr_para = 0.0_dp
     156              :       REAL(KIND=dp)                        :: eps_disp = 0.0_dp
     157              :       REAL(KIND=dp)                        :: epscn = 0.0_dp
     158              :       REAL(KIND=dp)                        :: exp_pre = 0.0_dp
     159              :       REAL(KIND=dp)                        :: scaling = 0.0_dp
     160              :       REAL(KIND=dp)                        :: rcdisp = 0.0_dp
     161              :       REAL(KIND=dp), DIMENSION(3)          :: sd3 = 0.0_dp
     162              :       REAL(KIND=dp), DIMENSION(4)          :: sd3bj = 0.0_dp
     163              :       LOGICAL                              :: do_ewald = .FALSE.
     164              :       CHARACTER(LEN=default_path_length)   :: sk_file_path = ""
     165              :       CHARACTER(LEN=default_path_length)   :: sk_file_list = ""
     166              :       CHARACTER(LEN=default_string_length), &
     167              :          DIMENSION(:, :), POINTER          :: sk_pair_list => NULL()
     168              :       CHARACTER(LEN=default_path_length)   :: uff_force_field = ""
     169              :       CHARACTER(LEN=default_path_length)   :: dispersion_parameter_file = ""
     170              :    END TYPE dftb_control_type
     171              : 
     172              : ! **************************************************************************************************
     173              : ! \brief Control parameters for xTB calculations
     174              : ! **************************************************************************************************
     175              :    TYPE xtb_control_type
     176              :       !
     177              :       INTEGER                              :: gfn_type = 1
     178              :       !
     179              :       LOGICAL                              :: do_ewald = .FALSE.
     180              :       LOGICAL                              :: do_tblite = .FALSE.
     181              :       !
     182              :       INTEGER                              :: sto_ng = 0
     183              :       INTEGER                              :: h_sto_ng = 0
     184              :       INTEGER                              :: tblite_method = 0
     185              :       !
     186              :       INTEGER                              :: vdw_type = -1
     187              :       CHARACTER(LEN=default_path_length)   :: parameter_file_path = ""
     188              :       CHARACTER(LEN=default_path_length)   :: parameter_file_name = ""
     189              :       !
     190              :       CHARACTER(LEN=default_path_length)   :: dispersion_parameter_file = ""
     191              :       REAL(KIND=dp)                        :: epscn = 0.0_dp
     192              :       REAL(KIND=dp)                        :: rcdisp = 0.0_dp
     193              :       REAL(KIND=dp)                        :: s6 = 0.0_dp, s8 = 0.0_dp
     194              :       REAL(KIND=dp)                        :: a1 = 0.0_dp, a2 = 0.0_dp
     195              :       !
     196              :       REAL(KIND=dp)                        :: ks = 0.0_dp, kp = 0.0_dp, kd = 0.0_dp, ksp = 0.0_dp, k2sh = 0.0_dp
     197              :       REAL(KIND=dp)                        :: kg = 0.0_dp, kf = 0.0_dp
     198              :       REAL(KIND=dp)                        :: kcns = 0.0_dp, kcnp = 0.0_dp, kcnd = 0.0_dp
     199              :       REAL(KIND=dp)                        :: ken = 0.0_dp
     200              :       REAL(KIND=dp)                        :: ksen = 0.0_dp, kpen = 0.0_dp, kden = 0.0_dp
     201              :       REAL(KIND=dp)                        :: ben = 0.0_dp
     202              :       REAL(KIND=dp)                        :: kxr = 0.0_dp, kx2 = 0.0_dp
     203              :       REAL(KIND=dp)                        :: enscale = 0.0_dp
     204              :       !
     205              :       LOGICAL                              :: xb_interaction = .FALSE.
     206              :       LOGICAL                              :: do_nonbonded = .FALSE.
     207              :       LOGICAL                              :: coulomb_interaction = .FALSE.
     208              :       LOGICAL                              :: coulomb_lr = .FALSE.
     209              :       LOGICAL                              :: tb3_interaction = .FALSE.
     210              :       LOGICAL                              :: check_atomic_charges = .FALSE.
     211              :       LOGICAL                              :: var_dipole = .FALSE.
     212              :       !
     213              :       REAL(KIND=dp)                        :: xb_radius = 0.0_dp
     214              :       REAL(KIND=dp)                        :: coulomb_sr_cut = 0.0_dp
     215              :       REAL(KIND=dp)                        :: coulomb_sr_eps = 0.0_dp
     216              :       !
     217              :       CHARACTER(LEN=default_string_length), &
     218              :          DIMENSION(:, :), POINTER          :: kab_param => NULL()
     219              :       INTEGER, DIMENSION(:, :), POINTER    :: kab_types => NULL()
     220              :       INTEGER                              :: kab_nval = 0
     221              :       REAL, DIMENSION(:), POINTER          :: kab_vals => NULL()
     222              :       !
     223              :       TYPE(pair_potential_p_type), POINTER :: nonbonded => NULL()
     224              :       REAL(KIND=dp)                        :: eps_pair = 0.0_dp
     225              :       REAL(KIND=dp), DIMENSION(:, :), &
     226              :          POINTER                           :: rcpair => NULL()
     227              :       !
     228              :       ! SRB terms
     229              :       REAL(KIND=dp)                        :: ksrb = 0.0_dp, esrb = 0.0_dp, gscal = 0.0_dp
     230              :       REAL(KIND=dp)                        :: c1srb = 0.0_dp, c2srb = 0.0_dp, shift = 0.0_dp
     231              :       !
     232              :       ! EN shift in EEQ (molecular=1 or crystaline=2)
     233              :       INTEGER                              :: enshift_type = 1
     234              :       TYPE(eeq_solver_type)                :: eeq_sparam ! parameters for EEQ solver
     235              :    END TYPE xtb_control_type
     236              : 
     237              : ! **************************************************************************************************
     238              : ! \brief Control parameters for semi empirical calculations
     239              : ! **************************************************************************************************
     240              :    TYPE semi_empirical_control_type
     241              :       LOGICAL                              :: orthogonal_basis = .FALSE.
     242              :       LOGICAL                              :: analytical_gradients = .FALSE.
     243              :       LOGICAL                              :: force_kdsod_EX = .FALSE.
     244              :       LOGICAL                              :: do_ewald = .FALSE., do_ewald_r3 = .FALSE., do_ewald_gks = .FALSE.
     245              :       INTEGER                              :: integral_screening = 0, periodic_type = 0
     246              :       INTEGER                              :: max_multipole = 0
     247              :       INTEGER                              :: ga_ncells = 0
     248              :       REAL(KIND=dp)                        :: delta = 0.0_dp
     249              :       ! Dispersion pair potential
     250              :       LOGICAL                              :: dispersion = .FALSE.
     251              :       REAL(KIND=dp)                        :: rcdisp = 0.0_dp
     252              :       REAL(KIND=dp)                        :: epscn = 0.0_dp
     253              :       REAL(KIND=dp), DIMENSION(3)          :: sd3 = 0.0_dp
     254              :       CHARACTER(LEN=default_path_length)   :: dispersion_parameter_file = ""
     255              :       ! Parameters controlling the evaluation of the integrals
     256              :       REAL(KIND=dp)                        :: cutoff_lrc = 0.0_dp, taper_lrc = 0.0_dp, range_lrc = 0.0_dp
     257              :       REAL(KIND=dp)                        :: cutoff_cou = 0.0_dp, taper_cou = 0.0_dp, range_cou = 0.0_dp
     258              :       REAL(KIND=dp)                        :: cutoff_exc = 0.0_dp, taper_exc = 0.0_dp, range_exc = 0.0_dp
     259              :       REAL(KIND=dp)                        :: taper_scr = 0.0_dp, range_scr = 0.0_dp
     260              :    END TYPE semi_empirical_control_type
     261              : 
     262              : ! **************************************************************************************************
     263              : ! \brief Control parameters for GAPW method within QUICKSTEP ***
     264              : ! **************************************************************************************************
     265              :    TYPE gapw_control_type
     266              :       INTEGER                              :: basis_1c = 0
     267              :       REAL(KIND=dp)                        :: eps_fit = 0.0_dp, &
     268              :                                               eps_iso = 0.0_dp, &
     269              :                                               eps_Vrho0 = 0.0_dp, &
     270              :                                               eps_svd = 0.0_dp, &
     271              :                                               eps_cpc = 0.0_dp
     272              :       INTEGER                              :: ladd_rho0 = 0, &
     273              :                                               lmax_rho0 = 0, &
     274              :                                               lmax_sphere = 0, &
     275              :                                               quadrature = 0
     276              :       LOGICAL                              :: accurate_xcint = .FALSE.
     277              :       REAL(KIND=dp)                        :: aweights = 0.0_dp
     278              :       REAL(KIND=dp), DIMENSION(:), POINTER  :: aw => NULL()
     279              :       LOGICAL                              :: alpha0_hard_from_input = .FALSE., &
     280              :                                               force_paw = .FALSE., &
     281              :                                               non_paw_atoms = .FALSE., &
     282              :                                               nopaw_as_gpw = .FALSE.
     283              :       REAL(KIND=dp)                        :: alpha0_hard = 0.0_dp
     284              :       REAL(KIND=dp)                        :: max_rad_local = 0.0_dp
     285              :    END TYPE gapw_control_type
     286              : 
     287              : ! **************************************************************************************************
     288              : ! \brief parameters for calculations involving a time dependent electric field
     289              : ! **************************************************************************************************
     290              :    TYPE efield_type
     291              :       REAL(KIND=dp)                        :: actual_time = 0.0_dp
     292              :       REAL(KIND=dp), DIMENSION(:), POINTER :: polarisation => NULL()
     293              :       INTEGER                              :: envelop_id = 0
     294              :       REAL(KIND=dp), DIMENSION(:), POINTER :: envelop_r_vars => NULL()
     295              :       INTEGER, DIMENSION(:), POINTER       :: envelop_i_vars => NULL()
     296              :       REAL(KIND=dp)                        :: strength = 0.0_dp
     297              :       REAL(KIND=dp)                        :: phase_offset = 0.0_dp
     298              :       REAL(KIND=dp)                        :: wavelength = 0.0_dp
     299              :       REAL(KIND=dp), DIMENSION(3)          :: vec_pot_initial = 0.0_dp
     300              :    END TYPE efield_type
     301              : 
     302              :    TYPE efield_p_type
     303              :       TYPE(efield_type), POINTER           :: efield => NULL()
     304              :    END TYPE efield_p_type
     305              : 
     306              : ! **************************************************************************************************
     307              : ! \brief parameters for calculations involving a time dependent electric field
     308              : ! **************************************************************************************************
     309              :    TYPE period_efield_type
     310              :       LOGICAL                              :: displacement_field = .FALSE.
     311              :       REAL(KIND=dp), DIMENSION(3)          :: polarisation = 0.0_dp
     312              :       REAL(KIND=dp), DIMENSION(3)          :: d_filter = 0.0_dp
     313              :       REAL(KIND=dp)                        :: strength = 0.0_dp
     314              :       REAL(KIND=dp), ALLOCATABLE, DIMENSION(:) :: strength_list
     315              :       INTEGER                              :: start_frame = 0
     316              :       INTEGER                              :: end_frame = -1
     317              :    END TYPE period_efield_type
     318              : 
     319              : ! **************************************************************************************************
     320              : ! \brief some parameters useful for mulliken_restraints
     321              : ! **************************************************************************************************
     322              :    TYPE mulliken_restraint_type
     323              :       REAL(KIND=dp)                        :: strength = 0.0_dp
     324              :       REAL(KIND=dp)                        :: TARGET = 0.0_dp
     325              :       INTEGER                              :: natoms = 0
     326              :       INTEGER, POINTER, DIMENSION(:)       :: atoms => NULL()
     327              :    END TYPE mulliken_restraint_type
     328              : 
     329              : ! **************************************************************************************************
     330              : ! \brief some parameters useful for ddapc_restraints
     331              : ! **************************************************************************************************
     332              :    TYPE ddapc_restraint_type
     333              :       INTEGER                              :: ref_count = 0
     334              :       REAL(KIND=dp)                        :: strength = 0.0_dp
     335              :       REAL(KIND=dp)                        :: TARGET = 0.0_dp
     336              :       REAL(KIND=dp)                        :: ddapc_order_p = 0.0_dp
     337              :       INTEGER                              :: functional_form = 0
     338              :       INTEGER                              :: natoms = 0
     339              :       INTEGER, POINTER, DIMENSION(:)       :: atoms => NULL()
     340              :       REAL(KIND=dp), POINTER, DIMENSION(:) :: coeff => NULL()
     341              :       INTEGER                              :: density_type = 0
     342              :    END TYPE ddapc_restraint_type
     343              : 
     344              : ! **************************************************************************************************
     345              : ! \brief some parameters useful for s2_restraints
     346              : ! **************************************************************************************************
     347              :    TYPE s2_restraint_type
     348              :       REAL(KIND=dp)                        :: strength = 0.0_dp
     349              :       REAL(KIND=dp)                        :: TARGET = 0.0_dp
     350              :       REAL(KIND=dp)                        :: s2_order_p = 0.0_dp
     351              :       INTEGER                              :: functional_form = 0
     352              :    END TYPE s2_restraint_type
     353              : 
     354              : ! **************************************************************************************************
     355              : ! \brief some parameters useful for auxiliary density matrix method
     356              : ! **************************************************************************************************
     357              :    TYPE admm_block_type
     358              :       INTEGER, DIMENSION(:), ALLOCATABLE   :: list
     359              :    END TYPE admm_block_type
     360              : 
     361              :    TYPE admm_control_type
     362              :       REAL(KIND=dp)                        :: eps_filter = 0.0_dp
     363              :       INTEGER                              :: admm_type = 0
     364              :       INTEGER                              :: purification_method = 0
     365              :       INTEGER                              :: method = 0
     366              :       LOGICAL                              :: charge_constrain = .FALSE.
     367              :       INTEGER                              :: scaling_model = 0
     368              :       INTEGER                              :: aux_exch_func = 0
     369              :       LOGICAL                              :: aux_exch_func_param = .FALSE.
     370              :       REAL(KIND=dp), DIMENSION(3)          :: aux_x_param = 0.0_dp
     371              :       TYPE(admm_block_type), DIMENSION(:), &
     372              :          ALLOCATABLE                       :: blocks
     373              :    END TYPE admm_control_type
     374              : 
     375              : ! **************************************************************************************************
     376              : ! \brief Parameters for external potential
     377              : ! **************************************************************************************************
     378              :    TYPE expot_control_type
     379              :       LOGICAL                              :: read_from_cube = .FALSE.
     380              :       LOGICAL                              :: maxwell_solver = .FALSE.
     381              :       LOGICAL                              :: static = .FALSE.
     382              :       REAL(KIND=dp)                        :: scaling_factor = 0.0_dp
     383              :    END TYPE expot_control_type
     384              : 
     385              : ! **************************************************************************************************
     386              : ! \brief Parameters useful for Maxwell equation evaluation of external potential
     387              : ! **************************************************************************************************
     388              :    TYPE maxwell_control_type
     389              :       LOGICAL                              :: log_test = .FALSE.
     390              :       INTEGER                              :: int_test = 0
     391              :       REAL(KIND=dp)                        :: real_test = 0.0_dp
     392              :    END TYPE maxwell_control_type
     393              : 
     394              : ! **************************************************************************************************
     395              : ! \brief Control parameters for a QUICKSTEP and KIM-GORDON calculation ***
     396              : !        eps_pgf_orb: Cutoff value for the interaction of the primitive
     397              : !                     Gaussian-type functions (primitive basis functions).
     398              : ! **************************************************************************************************
     399              :    TYPE qs_control_type
     400              :       INTEGER                              :: method_id = 0
     401              :       REAL(KIND=dp)                        :: eps_core_charge = 0.0_dp, &
     402              :                                               eps_kg_orb = 0.0_dp, &
     403              :                                               eps_pgf_orb = 0.0_dp, &
     404              :                                               eps_ppl = 0.0_dp, &
     405              :                                               eps_ppnl = 0.0_dp, &
     406              :                                               eps_rho_gspace = 0.0_dp, &
     407              :                                               eps_rho_rspace = 0.0_dp, &
     408              :                                               eps_filter_matrix = 0.0_dp, &
     409              :                                               eps_gvg_rspace = 0.0_dp, &
     410              :                                               progression_factor = 0.0_dp, &
     411              :                                               relative_cutoff = 0.0_dp
     412              :       LOGICAL                              :: do_almo_scf = .FALSE.
     413              :       LOGICAL                              :: do_ls_scf = .FALSE.
     414              :       LOGICAL                              :: do_kg = .FALSE.
     415              :       LOGICAL                              :: commensurate_mgrids = .FALSE.
     416              :       LOGICAL                              :: realspace_mgrids = .FALSE.
     417              :       LOGICAL                              :: gapw = .FALSE., gapw_xc = .FALSE., gpw = .FALSE., pao = .FALSE.
     418              :       LOGICAL                              :: lrigpw = .FALSE., rigpw = .FALSE.
     419              :       LOGICAL                              :: lri_optbas = .FALSE.
     420              :       LOGICAL                              :: ofgpw = .FALSE.
     421              :       LOGICAL                              :: dftb = .FALSE.
     422              :       LOGICAL                              :: xtb = .FALSE.
     423              :       LOGICAL                              :: semi_empirical = .FALSE.
     424              :       LOGICAL                              :: mulliken_restraint = .FALSE.
     425              :       LOGICAL                              :: ddapc_restraint = .FALSE.
     426              :       LOGICAL                              :: ddapc_restraint_is_spin = .FALSE.
     427              :       LOGICAL                              :: ddapc_explicit_potential = .FALSE.
     428              :       LOGICAL                              :: cdft = .FALSE.
     429              :       LOGICAL                              :: et_coupling_calc = .FALSE.
     430              :       LOGICAL                              :: s2_restraint = .FALSE.
     431              :       INTEGER                              :: do_ppl_method = 0
     432              :       INTEGER                              :: wf_interpolation_method_nr = 0
     433              :       INTEGER                              :: wf_extrapolation_order = 0
     434              :       INTEGER                              :: periodicity = 0
     435              :       REAL(KIND=dp)                        :: pairlist_radius = 0.0_dp
     436              :       REAL(KIND=dp)                        :: cutoff = 0.0_dp
     437              :       REAL(KIND=dp), DIMENSION(:), POINTER :: e_cutoff => NULL()
     438              :       TYPE(mulliken_restraint_type), &
     439              :          POINTER                           :: mulliken_restraint_control => NULL()
     440              :       TYPE(ddapc_restraint_type), &
     441              :          DIMENSION(:), POINTER             :: ddapc_restraint_control => NULL()
     442              :       TYPE(cdft_control_type), POINTER     :: cdft_control => NULL()
     443              :       TYPE(s2_restraint_type), POINTER     :: s2_restraint_control => NULL()
     444              :       TYPE(dftb_control_type), POINTER     :: dftb_control => NULL()
     445              :       TYPE(xtb_control_type), POINTER      :: xtb_control => NULL()
     446              :       TYPE(semi_empirical_control_type), &
     447              :          POINTER                           :: se_control => NULL()
     448              :       TYPE(gapw_control_type), POINTER     :: gapw_control => NULL()
     449              :       TYPE(pw_grid_option)                 :: pw_grid_opt = pw_grid_option()
     450              :       LOGICAL                              :: skip_load_balance_distributed = .FALSE.
     451              :       ! Types of subsystems for embedding
     452              :       LOGICAL                              :: ref_embed_subsys = .FALSE.
     453              :       LOGICAL                              :: cluster_embed_subsys = .FALSE.
     454              :       LOGICAL                              :: high_level_embed_subsys = .FALSE.
     455              :       LOGICAL                              :: dfet_embedded = .FALSE.
     456              :       LOGICAL                              :: dmfet_embedded = .FALSE.
     457              :    END TYPE qs_control_type
     458              : 
     459              : ! **************************************************************************************************
     460              : ! \brief Control parameters for the SCCS models
     461              : ! **************************************************************************************************
     462              :    TYPE sccs_control_type
     463              :       LOGICAL                              :: sccs_activated = .FALSE.
     464              :       INTEGER                              :: derivative_method = 0, &
     465              :                                               max_iter = 0, &
     466              :                                               method_id = 0
     467              :       REAL(KIND=dp)                        :: alpha_solvent = 0.0_dp, &
     468              :                                               beta = 0.0_dp, &
     469              :                                               beta_solvent = 0.0_dp, &
     470              :                                               delta_rho = 0.0_dp, &
     471              :                                               eps_sccs = 0.0_dp, &
     472              :                                               eps_scf = 0.0_dp, &
     473              :                                               epsilon_solvent = 0.0_dp, &
     474              :                                               gamma_solvent = 0.0_dp, &
     475              :                                               mixing = 0.0_dp, &
     476              :                                               rho_zero = 0.0_dp, &
     477              :                                               rho_max = 0.0_dp, &
     478              :                                               rho_min = 0.0_dp
     479              :    END TYPE sccs_control_type
     480              : 
     481              : ! **************************************************************************************************
     482              : ! \brief Control parameters for simplified Tamm Dancoff approximation (sTDA)
     483              : ! \par  ATTRIBUTES
     484              : ! \par  NOTES
     485              : ! **************************************************************************************************
     486              :    TYPE stda_control_type
     487              :       LOGICAL                                :: do_ewald = .FALSE.
     488              :       LOGICAL                                :: do_exchange = .FALSE.
     489              :       REAL(KIND=dp)                          :: hfx_fraction = 0.0_dp
     490              :       REAL(KIND=dp)                          :: eps_td_filter = 0.0_dp
     491              :       REAL(KIND=dp)                          :: mn_alpha = 0.0_dp
     492              :       REAL(KIND=dp)                          :: mn_beta = 0.0_dp
     493              :       REAL(KIND=dp)                          :: coulomb_sr_cut = 0.0_dp
     494              :       REAL(KIND=dp)                          :: coulomb_sr_eps = 0.0_dp
     495              :    END TYPE stda_control_type
     496              : 
     497              : ! **************************************************************************************************
     498              : ! \brief Control parameters for smeared occupation
     499              : ! \par  ATTRIBUTES
     500              : ! \par  NOTES
     501              : ! **************************************************************************************************
     502              :    TYPE smeared_type
     503              :       REAL(KIND=dp), DIMENSION(:), POINTER :: fermia => NULL()
     504              :       REAL(KIND=dp), DIMENSION(:, :), POINTER :: fermib => NULL()
     505              :    END TYPE smeared_type
     506              : 
     507              : ! **************************************************************************************************
     508              : ! \brief Control parameters for a Time-Dependent DFT calculation.
     509              : ! **************************************************************************************************
     510              :    TYPE tddfpt2_control_type
     511              :       !> compute TDDFPT excitation energies and oscillator strengths
     512              :       LOGICAL                              :: enabled = .FALSE.
     513              :       !> number of excited states to converge
     514              :       INTEGER                              :: nstates = 0
     515              :       !> maximal number of iterations to be performed
     516              :       INTEGER                              :: niters = 0
     517              :       !> maximal number of Krylov space vectors
     518              :       INTEGER                              :: nkvs = 0
     519              :       !> number of unoccupied (virtual) molecular orbitals to consider
     520              :       INTEGER                              :: nlumo = 0
     521              :       !> minimal number of MPI processes to be used per excited state
     522              :       INTEGER                              :: nprocs = 0
     523              :       !> type of kernel function/approximation to use
     524              :       INTEGER                              :: kernel = 0
     525              :       !> type of spin excitations to compute
     526              :       INTEGER                              :: spinflip = 0
     527              :       !> for full kernel, do we have HFX/ADMM
     528              :       LOGICAL                              :: do_hfx = .FALSE.
     529              :       LOGICAL                              :: do_admm = .FALSE.
     530              :       !> for full kernel, do we have short-range/long-range HFX and/or Kxc potential
     531              :       LOGICAL                              :: do_hfxsr = .FALSE.
     532              :       LOGICAL                              :: hfxsr_re_int = .TRUE.
     533              :       INTEGER                              :: hfxsr_primbas = 0
     534              :       LOGICAL                              :: do_hfxlr = .FALSE.
     535              :       REAL(KIND=dp)                        :: hfxlr_rcut = 0.0_dp, hfxlr_scale = 0.0_dp
     536              :       LOGICAL                              :: do_exck = .FALSE.
     537              :       !> options used in sTDA calculation (Kernel)
     538              :       TYPE(stda_control_type)              :: stda_control = stda_control_type()
     539              :       !> algorithm to correct orbital energies
     540              :       INTEGER                              :: oe_corr = 0
     541              :       !> eigenvalue shifts
     542              :       REAL(KIND=dp)                        :: ev_shift = 0.0_dp, eos_shift = 0.0_dp
     543              :       !> active orbitals
     544              :       INTEGER, DIMENSION(2)                :: nactive = -1
     545              :       !> target accuracy
     546              :       REAL(kind=dp)                        :: conv = 0.0_dp
     547              :       !> the smallest excitation amplitude to print
     548              :       REAL(kind=dp)                        :: min_excitation_amplitude = 0.0_dp
     549              :       !> threshold which controls when two wave functions considered to be orthogonal:
     550              :       !> maxabs(Ci^T * S * Cj) <= orthogonal_eps
     551              :       REAL(kind=dp)                        :: orthogonal_eps = 0.0_dp
     552              :       !> read guess wave functions from restart file if exists
     553              :       LOGICAL                              :: is_restart = .FALSE.
     554              :       !> compute triplet excited states using spin-unpolarised molecular orbitals
     555              :       LOGICAL                              :: rks_triplets = .FALSE.
     556              :       !> local resolution of identity for Coulomb contribution
     557              :       LOGICAL                              :: do_lrigpw = .FALSE.
     558              :       !> smeared occupation
     559              :       LOGICAL                              :: do_smearing = .FALSE.
     560              :       !> dynamical correlation
     561              :       LOGICAL                              :: do_bse = .FALSE.
     562              :       ! automatic generation of auxiliary basis for LRI-TDDFT
     563              :       INTEGER                              :: auto_basis_p_lri_aux = 1
     564              :       !> use symmetric definition of ADMM Kernel correction
     565              :       LOGICAL                              :: admm_symm = .FALSE.
     566              :       !> Use/Ignore possible ADMM Kernel XC correction
     567              :       LOGICAL                              :: admm_xc_correction = .FALSE.
     568              :       ! Compute exciton descriptors
     569              :       LOGICAL                              :: do_exciton_descriptors = .FALSE.
     570              :       LOGICAL                              :: do_directional_exciton_descriptors = .FALSE.
     571              :       !
     572              :       ! DIPOLE_MOMENTS subsection
     573              :       !
     574              :       ! form of the dipole operator used to compute oscillator strengths
     575              :       INTEGER                              :: dipole_form = 0
     576              :       !> type of the reference point used for calculation of electrostatic dipole moments
     577              :       INTEGER                              :: dipole_reference = 0
     578              :       !> user-defined reference point
     579              :       REAL(kind=dp), DIMENSION(:), POINTER :: dipole_ref_point => NULL()
     580              :       !
     581              :       ! SOC subsection
     582              :       LOGICAL                              :: do_soc = .FALSE.
     583              :       !
     584              :       ! MGRID subsection
     585              :       !
     586              :       !> number of plain-wave grids
     587              :       INTEGER                              :: mgrid_ngrids = 0
     588              :       !> create commensurate grids (progression factor and cutoff values of sub-grids will be ignored)
     589              :       LOGICAL                              :: mgrid_commensurate_mgrids = .FALSE.
     590              :       !> signals that MGRID section has been explicitly given. Other mgrid_* variables
     591              :       !> are not initialised when it is equal to .FALSE. as in this case the default
     592              :       !> set of plain-wave grids will be used
     593              :       LOGICAL                              :: mgrid_is_explicit = .FALSE.
     594              :       !> same as qs_control%realspace_mgrids
     595              :       LOGICAL                              :: mgrid_realspace_mgrids = .FALSE.
     596              :       !> do not perform load balancing
     597              :       LOGICAL                              :: mgrid_skip_load_balance = .FALSE.
     598              :       !> cutoff value at the finest grid level
     599              :       REAL(kind=dp)                        :: mgrid_cutoff = 0.0_dp
     600              :       !> cutoff at the next grid level will be smaller then the cutoff
     601              :       !> at the current grid by this number of times
     602              :       REAL(kind=dp)                        :: mgrid_progression_factor = 0.0_dp
     603              :       !> cutoff that determines to which grid a particular Gaussian function will be mapped
     604              :       REAL(kind=dp)                        :: mgrid_relative_cutoff = 0.0_dp
     605              :       !> manually provided the list of cutoff values for each grid level
     606              :       !> (when it is null(), the cutoff values will be assigned automatically)
     607              :       REAL(kind=dp), DIMENSION(:), POINTER :: mgrid_e_cutoff => NULL()
     608              :       !> Parameter for smeared occupation TDA
     609              :       TYPE(smeared_type), DIMENSION(:), POINTER :: smeared_occup => NULL()
     610              :    END TYPE tddfpt2_control_type
     611              : 
     612              : ! **************************************************************************************************
     613              : !> \brief
     614              : ! **************************************************************************************************
     615              :    TYPE rixs_control_type
     616              : 
     617              :       LOGICAL                              :: enabled = .FALSE.
     618              :       INTEGER                              :: core_states = 0
     619              :       INTEGER                              :: valence_states = 0
     620              : 
     621              :       TYPE(tddfpt2_control_type), POINTER     :: tddfpt2_control => NULL()
     622              :       TYPE(xas_tdp_control_type), POINTER     :: xas_tdp_control => NULL()
     623              : 
     624              :    END TYPE rixs_control_type
     625              : 
     626              : ! **************************************************************************************************
     627              : ! \brief Control parameters for a DFT calculation
     628              : ! \par History
     629              : !      10.2019 added variables related to surface dipole correction [Soumya Ghosh]
     630              : ! **************************************************************************************************
     631              :    TYPE dft_control_type
     632              :       TYPE(admm_control_type), POINTER     :: admm_control => NULL()
     633              :       TYPE(period_efield_type), POINTER    :: period_efield => NULL()
     634              :       TYPE(qs_control_type), POINTER       :: qs_control => NULL()
     635              :       TYPE(rtp_control_type), POINTER      :: rtp_control => NULL()
     636              :       TYPE(sccs_control_type), POINTER     :: sccs_control => NULL()
     637              :       TYPE(tddfpt2_control_type), POINTER  :: tddfpt2_control => NULL()
     638              :       TYPE(rixs_control_type), POINTER     :: rixs_control => NULL()
     639              :       TYPE(xas_control_type), POINTER      :: xas_control => NULL()
     640              :       TYPE(expot_control_type), POINTER    :: expot_control => NULL()
     641              :       TYPE(maxwell_control_type), POINTER  :: maxwell_control => NULL()
     642              :       TYPE(smeagol_control_type), POINTER  :: smeagol_control => NULL()
     643              :       TYPE(efield_p_type), POINTER, &
     644              :          DIMENSION(:)                      :: efield_fields => NULL()
     645              :       TYPE(hairy_probes_type), POINTER, &
     646              :          DIMENSION(:)                      :: probe => NULL()
     647              :       INTEGER                              :: nspins = 0, &
     648              :                                               charge = 0, &
     649              :                                               multiplicity = 0, &
     650              :                                               sic_method_id = 0, &
     651              :                                               plus_u_method_id = 0, &
     652              :                                               dir_surf_dip = 0, &
     653              :                                               nimages = 1
     654              :       INTEGER                              :: sic_list_id = 0
     655              :       INTEGER                              :: auto_basis_ri_aux = 1, &
     656              :                                               auto_basis_aux_fit = 1, &
     657              :                                               auto_basis_lri_aux = 1, &
     658              :                                               auto_basis_p_lri_aux = 1, &
     659              :                                               auto_basis_ri_hxc = 1, &
     660              :                                               auto_basis_ri_xas = 1, &
     661              :                                               auto_basis_ri_hfx = 1
     662              :       REAL(KIND=dp)                        :: relax_multiplicity = 0.0_dp, &
     663              :                                               sic_scaling_a = 0.0_dp, &
     664              :                                               sic_scaling_b = 0.0_dp, &
     665              :                                               pos_dir_surf_dip = 0.0_dp
     666              :       LOGICAL                              :: do_xas_calculation = .FALSE., &
     667              :                                               do_xas_tdp_calculation = .FALSE., &
     668              :                                               drho_by_collocation = .FALSE., &
     669              :                                               use_kinetic_energy_density = .FALSE., &
     670              :                                               restricted = .FALSE., &
     671              :                                               roks = .FALSE., &
     672              :                                               uks = .FALSE., &
     673              :                                               lsd = .FALSE., &
     674              :                                               dft_plus_u = .FALSE., &
     675              :                                               apply_efield = .FALSE., &
     676              :                                               apply_efield_field = .FALSE., &
     677              :                                               apply_vector_potential = .FALSE., &
     678              :                                               apply_period_efield = .FALSE., &
     679              :                                               apply_external_potential = .FALSE., &
     680              :                                               eval_external_potential = .FALSE., &
     681              :                                               do_admm = .FALSE., &
     682              :                                               do_admm_dm = .FALSE., &
     683              :                                               do_admm_mo = .FALSE., &
     684              :                                               smear = .FALSE., &
     685              :                                               low_spin_roks = .FALSE., &
     686              :                                               apply_external_density = .FALSE., &
     687              :                                               read_external_density = .FALSE., &
     688              :                                               apply_external_vxc = .FALSE., &
     689              :                                               read_external_vxc = .FALSE., &
     690              :                                               correct_surf_dip = .FALSE., &
     691              :                                               surf_dip_correct_switch = .FALSE., &
     692              :                                               switch_surf_dip = .FALSE., &
     693              :                                               correct_el_density_dip = .FALSE., &
     694              :                                               do_sccs = .FALSE., &
     695              :                                               apply_embed_pot = .FALSE., &
     696              :                                               apply_dmfet_pot = .FALSE., &
     697              :                                               hairy_probes = .FALSE.
     698              :    END TYPE dft_control_type
     699              : 
     700              :    CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'cp_control_types'
     701              : 
     702              :    ! Public data types
     703              : 
     704              :    PUBLIC :: dft_control_type, &
     705              :              qs_control_type, &
     706              :              gapw_control_type, &
     707              :              tddfpt2_control_type, &
     708              :              rixs_control_type, &
     709              :              proj_mo_type, &
     710              :              efield_type, &
     711              :              mulliken_restraint_type, &
     712              :              ddapc_restraint_type, &
     713              :              dftb_control_type, &
     714              :              xtb_control_type, &
     715              :              semi_empirical_control_type, &
     716              :              s2_restraint_type, &
     717              :              admm_control_type, &
     718              :              maxwell_control_type, &
     719              :              expot_control_type, &
     720              :              rtp_control_type, &
     721              :              sccs_control_type, &
     722              :              stda_control_type, &
     723              :              smeared_type, &
     724              :              hairy_probes_type
     725              : 
     726              :    ! Public subroutines
     727              : 
     728              :    PUBLIC :: dft_control_release, &
     729              :              dft_control_create, &
     730              :              admm_control_create, &
     731              :              admm_control_release, &
     732              :              maxwell_control_create, &
     733              :              expot_control_create, &
     734              :              ddapc_control_create, &
     735              :              rixs_control_create, &
     736              :              rixs_control_release
     737              : 
     738              : CONTAINS
     739              : 
     740              : ! **************************************************************************************************
     741              : !> \brief create  the mulliken_restraint_type
     742              : !> \param mulliken_restraint_control ...
     743              : !> \par History
     744              : !>      02.2005 created [Joost VandeVondele]
     745              : ! **************************************************************************************************
     746         7670 :    SUBROUTINE mulliken_control_create(mulliken_restraint_control)
     747              :       TYPE(mulliken_restraint_type), INTENT(OUT)         :: mulliken_restraint_control
     748              : 
     749         7670 :       mulliken_restraint_control%strength = 0.1_dp
     750         7670 :       mulliken_restraint_control%target = 1.0_dp
     751              :       mulliken_restraint_control%natoms = 0
     752              :       NULLIFY (mulliken_restraint_control%atoms)
     753         7670 :    END SUBROUTINE mulliken_control_create
     754              : 
     755              : ! **************************************************************************************************
     756              : !> \brief release the mulliken_restraint_type
     757              : !> \param mulliken_restraint_control ...
     758              : !> \par History
     759              : !>      02.2005 created [Joost VandeVondele]
     760              : ! **************************************************************************************************
     761         7670 :    SUBROUTINE mulliken_control_release(mulliken_restraint_control)
     762              :       TYPE(mulliken_restraint_type), INTENT(INOUT)       :: mulliken_restraint_control
     763              : 
     764         7670 :       IF (ASSOCIATED(mulliken_restraint_control%atoms)) &
     765            2 :          DEALLOCATE (mulliken_restraint_control%atoms)
     766         7670 :       mulliken_restraint_control%strength = 0.0_dp
     767         7670 :       mulliken_restraint_control%target = 0.0_dp
     768         7670 :       mulliken_restraint_control%natoms = 0
     769         7670 :    END SUBROUTINE mulliken_control_release
     770              : 
     771              : ! **************************************************************************************************
     772              : !> \brief create the ddapc_restraint_type
     773              : !> \param ddapc_restraint_control ...
     774              : !> \par History
     775              : !>      02.2006 created [Joost VandeVondele]
     776              : ! **************************************************************************************************
     777           18 :    SUBROUTINE ddapc_control_create(ddapc_restraint_control)
     778              :       TYPE(ddapc_restraint_type), INTENT(OUT)            :: ddapc_restraint_control
     779              : 
     780              :       ddapc_restraint_control%density_type = do_full_density
     781           18 :       ddapc_restraint_control%strength = 0.1_dp
     782              :       ddapc_restraint_control%ddapc_order_p = 0.0_dp
     783           18 :       ddapc_restraint_control%functional_form = -1
     784           18 :       ddapc_restraint_control%target = 1.0_dp
     785              :       ddapc_restraint_control%natoms = 0
     786              :       NULLIFY (ddapc_restraint_control%atoms)
     787              :       NULLIFY (ddapc_restraint_control%coeff)
     788              : 
     789           18 :    END SUBROUTINE ddapc_control_create
     790              : 
     791              : ! **************************************************************************************************
     792              : !> \brief release the ddapc_restraint_type
     793              : !> \param ddapc_restraint_control ...
     794              : !> \par History
     795              : !>      02.2006 created [Joost VandeVondele]
     796              : ! **************************************************************************************************
     797           18 :    SUBROUTINE ddapc_control_release(ddapc_restraint_control)
     798              :       TYPE(ddapc_restraint_type), INTENT(INOUT)          :: ddapc_restraint_control
     799              : 
     800           18 :       IF (ASSOCIATED(ddapc_restraint_control%atoms)) &
     801           18 :          DEALLOCATE (ddapc_restraint_control%atoms)
     802           18 :       IF (ASSOCIATED(ddapc_restraint_control%coeff)) &
     803           18 :          DEALLOCATE (ddapc_restraint_control%coeff)
     804           18 :       ddapc_restraint_control%strength = 0.0_dp
     805           18 :       ddapc_restraint_control%target = 0.0_dp
     806           18 :       ddapc_restraint_control%natoms = 0
     807           18 :    END SUBROUTINE ddapc_control_release
     808              : 
     809              : ! **************************************************************************************************
     810              : !> \brief create the s2_restraint_type
     811              : !> \param s2_restraint_control ...
     812              : !> \par History
     813              : !>      03.2006 created [Joost VandeVondele]
     814              : ! **************************************************************************************************
     815         7670 :    SUBROUTINE s2_control_create(s2_restraint_control)
     816              :       TYPE(s2_restraint_type), INTENT(OUT)               :: s2_restraint_control
     817              : 
     818         7670 :       s2_restraint_control%strength = 0.1_dp
     819              :       s2_restraint_control%s2_order_p = 0.0_dp
     820         7670 :       s2_restraint_control%functional_form = -1
     821         7670 :       s2_restraint_control%target = 1.0_dp
     822         7670 :    END SUBROUTINE s2_control_create
     823              : 
     824              : ! **************************************************************************************************
     825              : !> \brief release the s2_restraint_type
     826              : !> \param s2_restraint_control ...
     827              : !> \par History
     828              : !>      03.2006 created [Joost VandeVondele]
     829              : ! **************************************************************************************************
     830         7670 :    SUBROUTINE s2_control_release(s2_restraint_control)
     831              :       TYPE(s2_restraint_type), INTENT(INOUT)             :: s2_restraint_control
     832              : 
     833         7670 :       s2_restraint_control%strength = 0.0_dp
     834         7670 :       s2_restraint_control%target = 0.0_dp
     835         7670 :    END SUBROUTINE s2_control_release
     836              : 
     837              : ! **************************************************************************************************
     838              : !> \brief allocates and perform a very basic initialization
     839              : !> \param dft_control the object to create
     840              : !> \par History
     841              : !>      02.2003 created [fawzi]
     842              : !> \author fawzi
     843              : ! **************************************************************************************************
     844         7670 :    SUBROUTINE dft_control_create(dft_control)
     845              :       TYPE(dft_control_type), INTENT(OUT)                :: dft_control
     846              : 
     847              :       NULLIFY (dft_control%xas_control)
     848              :       NULLIFY (dft_control%qs_control)
     849              :       NULLIFY (dft_control%tddfpt2_control)
     850              :       NULLIFY (dft_control%rixs_control)
     851              :       NULLIFY (dft_control%efield_fields)
     852              :       NULLIFY (dft_control%period_efield)
     853              :       NULLIFY (dft_control%admm_control)
     854              :       NULLIFY (dft_control%expot_control)
     855              :       NULLIFY (dft_control%maxwell_control)
     856              :       NULLIFY (dft_control%smeagol_control)
     857              :       NULLIFY (dft_control%rtp_control)
     858              :       NULLIFY (dft_control%sccs_control)
     859              :       NULLIFY (dft_control%probe)
     860              :       dft_control%do_sccs = .FALSE.
     861              :       dft_control%apply_embed_pot = .FALSE.
     862              :       dft_control%apply_dmfet_pot = .FALSE.
     863              :       dft_control%hairy_probes = .FALSE.
     864         7670 :       CALL qs_control_create(dft_control%qs_control)
     865         7670 :       CALL tddfpt2_control_create(dft_control%tddfpt2_control)
     866         7670 :       CALL rixs_control_create(dft_control%rixs_control)
     867         7670 :       CALL smeagol_control_create(dft_control%smeagol_control)
     868         7670 :    END SUBROUTINE dft_control_create
     869              : 
     870              : ! **************************************************************************************************
     871              : !> \brief ...
     872              : !> \param dft_control ...
     873              : !> \par History
     874              : !>      02.2003 created [fawzi]
     875              : !> \author fawzi
     876              : ! **************************************************************************************************
     877         7670 :    SUBROUTINE dft_control_release(dft_control)
     878              :       TYPE(dft_control_type), INTENT(INOUT)              :: dft_control
     879              : 
     880              :       INTEGER                                            :: i
     881              : 
     882         7670 :       CALL qs_control_release(dft_control%qs_control)
     883         7670 :       CALL tddfpt2_control_release(dft_control%tddfpt2_control)
     884         7670 :       CALL rixs_control_release(dft_control%rixs_control) ! maybe check first if allocated
     885         7670 :       IF (ASSOCIATED(dft_control%xas_control)) THEN
     886           42 :          CALL xas_control_release(dft_control%xas_control)
     887           42 :          DEALLOCATE (dft_control%xas_control)
     888              :       END IF
     889         7670 :       CALL admm_control_release(dft_control%admm_control)
     890         7670 :       CALL expot_control_release(dft_control%expot_control)
     891         7670 :       CALL maxwell_control_release(dft_control%maxwell_control)
     892         7670 :       CALL smeagol_control_release(dft_control%smeagol_control)
     893         7670 :       CALL efield_fields_release(dft_control%efield_fields)
     894         7670 :       IF (ASSOCIATED(dft_control%probe)) THEN
     895           12 :          DO i = 1, SIZE(dft_control%probe)
     896           12 :             DEALLOCATE (dft_control%probe(i)%atom_ids)
     897              :          END DO
     898            4 :          DEALLOCATE (dft_control%probe)
     899              :       END IF
     900         7670 :       IF (ASSOCIATED(dft_control%sccs_control)) DEALLOCATE (dft_control%sccs_control)
     901         7670 :       IF (ASSOCIATED(dft_control%period_efield)) THEN
     902           76 :          DEALLOCATE (dft_control%period_efield)
     903              :       END IF
     904         7670 :       IF (ASSOCIATED(dft_control%rtp_control)) THEN
     905          248 :          CALL proj_mo_list_release(dft_control%rtp_control%proj_mo_list)
     906          248 :          DEALLOCATE (dft_control%rtp_control)
     907              :       END IF
     908              : 
     909         7670 :    END SUBROUTINE dft_control_release
     910              : 
     911              : ! **************************************************************************************************
     912              : !> \brief ...
     913              : !> \param qs_control ...
     914              : ! **************************************************************************************************
     915         7670 :    SUBROUTINE qs_control_create(qs_control)
     916              :       TYPE(qs_control_type), POINTER                     :: qs_control
     917              : 
     918         7670 :       CPASSERT(.NOT. ASSOCIATED(qs_control))
     919        30680 :       ALLOCATE (qs_control)
     920              : 
     921              :       NULLIFY (qs_control%e_cutoff)
     922              :       NULLIFY (qs_control%gapw_control)
     923              :       NULLIFY (qs_control%mulliken_restraint_control)
     924              :       NULLIFY (qs_control%ddapc_restraint_control)
     925              :       NULLIFY (qs_control%s2_restraint_control)
     926              :       NULLIFY (qs_control%se_control)
     927              :       NULLIFY (qs_control%dftb_control)
     928              :       NULLIFY (qs_control%xtb_control)
     929              :       NULLIFY (qs_control%cdft_control)
     930              :       NULLIFY (qs_control%ddapc_restraint_control)
     931              : 
     932         7670 :       ALLOCATE (qs_control%mulliken_restraint_control)
     933         7670 :       CALL mulliken_control_create(qs_control%mulliken_restraint_control)
     934         7670 :       ALLOCATE (qs_control%s2_restraint_control)
     935         7670 :       CALL s2_control_create(qs_control%s2_restraint_control)
     936         7670 :       ALLOCATE (qs_control%gapw_control)
     937         7670 :       CALL se_control_create(qs_control%se_control)
     938         7670 :       CALL dftb_control_create(qs_control%dftb_control)
     939         7670 :       CALL xtb_control_create(qs_control%xtb_control)
     940        23010 :       ALLOCATE (qs_control%cdft_control)
     941         7670 :       CALL cdft_control_create(qs_control%cdft_control)
     942         7670 :    END SUBROUTINE qs_control_create
     943              : 
     944              : ! **************************************************************************************************
     945              : !> \brief ...
     946              : !> \param qs_control ...
     947              : ! **************************************************************************************************
     948         7670 :    SUBROUTINE qs_control_release(qs_control)
     949              :       TYPE(qs_control_type), POINTER                     :: qs_control
     950              : 
     951              :       INTEGER                                            :: i
     952              : 
     953         7670 :       IF (ASSOCIATED(qs_control)) THEN
     954         7670 :          CALL mulliken_control_release(qs_control%mulliken_restraint_control)
     955         7670 :          DEALLOCATE (qs_control%mulliken_restraint_control)
     956         7670 :          CALL s2_control_release(qs_control%s2_restraint_control)
     957         7670 :          DEALLOCATE (qs_control%s2_restraint_control)
     958         7670 :          CALL se_control_release(qs_control%se_control)
     959         7670 :          CALL dftb_control_release(qs_control%dftb_control)
     960         7670 :          CALL xtb_control_release(qs_control%xtb_control)
     961         7670 :          IF (ASSOCIATED(qs_control%cdft_control)) THEN
     962         7670 :             CALL cdft_control_release(qs_control%cdft_control)
     963         7670 :             DEALLOCATE (qs_control%cdft_control)
     964              :          END IF
     965              : 
     966         7670 :          IF (ASSOCIATED(qs_control%e_cutoff)) THEN
     967         7670 :             DEALLOCATE (qs_control%e_cutoff)
     968              :          END IF
     969         7670 :          IF (ASSOCIATED(qs_control%gapw_control)) THEN
     970         7670 :             IF (ASSOCIATED(qs_control%gapw_control%aw)) THEN
     971          152 :                DEALLOCATE (qs_control%gapw_control%aw)
     972              :             END IF
     973         7670 :             DEALLOCATE (qs_control%gapw_control)
     974              :          END IF
     975         7670 :          IF (ASSOCIATED(qs_control%ddapc_restraint_control)) THEN
     976           32 :             DO i = 1, SIZE(qs_control%ddapc_restraint_control)
     977           32 :                CALL ddapc_control_release(qs_control%ddapc_restraint_control(i))
     978              :             END DO
     979           14 :             DEALLOCATE (qs_control%ddapc_restraint_control)
     980              :          END IF
     981         7670 :          DEALLOCATE (qs_control)
     982              :       END IF
     983         7670 :    END SUBROUTINE qs_control_release
     984              : 
     985              : ! **************************************************************************************************
     986              : !> \brief allocate control options for Time-Dependent Density Functional Theory calculation
     987              : !> \param tddfpt_control an object to create
     988              : !> \par History
     989              : !>    * 05.2016 created [Sergey Chulkov]
     990              : ! **************************************************************************************************
     991        30708 :    SUBROUTINE tddfpt2_control_create(tddfpt_control)
     992              :       TYPE(tddfpt2_control_type), POINTER                :: tddfpt_control
     993              : 
     994              :       CHARACTER(len=*), PARAMETER :: routineN = 'tddfpt2_control_create'
     995              : 
     996              :       INTEGER                                            :: handle
     997              : 
     998        15354 :       CPASSERT(.NOT. ASSOCIATED(tddfpt_control))
     999        15354 :       CALL timeset(routineN, handle)
    1000              : 
    1001        61416 :       ALLOCATE (tddfpt_control)
    1002              :       tddfpt_control%do_soc = .FALSE.
    1003              : 
    1004        15354 :       CALL timestop(handle)
    1005        15354 :    END SUBROUTINE tddfpt2_control_create
    1006              : 
    1007              : ! **************************************************************************************************
    1008              : !> \brief release memory allocated for TDDFT control options
    1009              : !> \param tddfpt_control an object to release
    1010              : !> \par History
    1011              : !>    * 05.2016 created [Sergey Chulkov]
    1012              : ! **************************************************************************************************
    1013        15354 :    SUBROUTINE tddfpt2_control_release(tddfpt_control)
    1014              :       TYPE(tddfpt2_control_type), POINTER                :: tddfpt_control
    1015              : 
    1016              :       CHARACTER(len=*), PARAMETER :: routineN = 'tddfpt2_control_release'
    1017              : 
    1018              :       INTEGER                                            :: handle
    1019              : 
    1020        15354 :       CALL timeset(routineN, handle)
    1021              : 
    1022        15354 :       IF (ASSOCIATED(tddfpt_control)) THEN
    1023        15354 :          DEALLOCATE (tddfpt_control)
    1024              :       END IF
    1025              : 
    1026        15354 :       CALL timestop(handle)
    1027        15354 :    END SUBROUTINE tddfpt2_control_release
    1028              : 
    1029              : ! **************************************************************************************************
    1030              : !> \brief Creates and initializes the rixs_control_type
    1031              : !> \param rixs_control the type to initialize
    1032              : ! **************************************************************************************************
    1033         7684 :    SUBROUTINE rixs_control_create(rixs_control)
    1034              :       TYPE(rixs_control_type), POINTER                   :: rixs_control
    1035              : 
    1036         7684 :       CPASSERT(.NOT. ASSOCIATED(rixs_control))
    1037         7684 :       ALLOCATE (rixs_control)
    1038              : 
    1039              :       NULLIFY (rixs_control%tddfpt2_control)
    1040         7684 :       CALL tddfpt2_control_create(rixs_control%tddfpt2_control)
    1041         7684 :       NULLIFY (rixs_control%xas_tdp_control)
    1042         7684 :       CALL xas_tdp_control_create(rixs_control%xas_tdp_control)
    1043              : 
    1044         7684 :    END SUBROUTINE rixs_control_create
    1045              : 
    1046              : ! **************************************************************************************************
    1047              : !> \brief Releases the rixs_control_type
    1048              : !> \param rixs_control ...
    1049              : ! **************************************************************************************************
    1050         7684 :    SUBROUTINE rixs_control_release(rixs_control)
    1051              :       TYPE(rixs_control_type), POINTER                   :: rixs_control
    1052              : 
    1053         7684 :       IF (ASSOCIATED(rixs_control)) THEN
    1054         7684 :          CALL tddfpt2_control_release(rixs_control%tddfpt2_control)
    1055         7684 :          CALL xas_tdp_control_release(rixs_control%xas_tdp_control)
    1056              : 
    1057         7684 :          DEALLOCATE (rixs_control)
    1058              :       END IF
    1059              : 
    1060         7684 :    END SUBROUTINE rixs_control_release
    1061              : 
    1062              : ! **************************************************************************************************
    1063              : !> \brief ...
    1064              : !> \param proj_mo_list ...
    1065              : ! **************************************************************************************************
    1066          248 :    SUBROUTINE proj_mo_list_release(proj_mo_list)
    1067              :       TYPE(proj_mo_p_type), DIMENSION(:), POINTER        :: proj_mo_list
    1068              : 
    1069              :       INTEGER                                            :: i, mo_ref_nbr
    1070              : 
    1071          248 :       IF (ASSOCIATED(proj_mo_list)) THEN
    1072           56 :          DO i = 1, SIZE(proj_mo_list)
    1073           56 :             IF (ASSOCIATED(proj_mo_list(i)%proj_mo)) THEN
    1074           52 :                IF (ALLOCATED(proj_mo_list(i)%proj_mo%ref_mo_index)) &
    1075           52 :                   DEALLOCATE (proj_mo_list(i)%proj_mo%ref_mo_index)
    1076           52 :                IF (ALLOCATED(proj_mo_list(i)%proj_mo%mo_ref)) THEN
    1077          204 :                   DO mo_ref_nbr = 1, SIZE(proj_mo_list(i)%proj_mo%mo_ref)
    1078          204 :                      CALL cp_fm_release(proj_mo_list(i)%proj_mo%mo_ref(mo_ref_nbr))
    1079              :                   END DO
    1080           52 :                   DEALLOCATE (proj_mo_list(i)%proj_mo%mo_ref)
    1081              :                END IF
    1082           52 :                IF (ALLOCATED(proj_mo_list(i)%proj_mo%td_mo_index)) &
    1083           52 :                   DEALLOCATE (proj_mo_list(i)%proj_mo%td_mo_index)
    1084           52 :                IF (ALLOCATED(proj_mo_list(i)%proj_mo%td_mo_occ)) &
    1085           52 :                   DEALLOCATE (proj_mo_list(i)%proj_mo%td_mo_occ)
    1086           52 :                DEALLOCATE (proj_mo_list(i)%proj_mo)
    1087              :             END IF
    1088              :          END DO
    1089            4 :          DEALLOCATE (proj_mo_list)
    1090              :       END IF
    1091          248 :    END SUBROUTINE proj_mo_list_release
    1092              : 
    1093              : ! **************************************************************************************************
    1094              : !> \brief ...
    1095              : !> \param efield_fields ...
    1096              : ! **************************************************************************************************
    1097         7670 :    SUBROUTINE efield_fields_release(efield_fields)
    1098              :       TYPE(efield_p_type), DIMENSION(:), POINTER         :: efield_fields
    1099              : 
    1100              :       INTEGER                                            :: i
    1101              : 
    1102         7670 :       IF (ASSOCIATED(efield_fields)) THEN
    1103          608 :          DO i = 1, SIZE(efield_fields)
    1104          608 :             IF (ASSOCIATED(efield_fields(i)%efield)) THEN
    1105          304 :                IF (ASSOCIATED(efield_fields(i)%efield%envelop_r_vars)) THEN
    1106            8 :                   DEALLOCATE (efield_fields(i)%efield%envelop_r_vars)
    1107              :                END IF
    1108          304 :                IF (ASSOCIATED(efield_fields(i)%efield%envelop_i_vars)) THEN
    1109          296 :                   DEALLOCATE (efield_fields(i)%efield%envelop_i_vars)
    1110              :                END IF
    1111          304 :                IF (ASSOCIATED(efield_fields(i)%efield%polarisation)) &
    1112          304 :                   DEALLOCATE (efield_fields(i)%efield%polarisation)
    1113          304 :                DEALLOCATE (efield_fields(i)%efield)
    1114              :             END IF
    1115              :          END DO
    1116          304 :          DEALLOCATE (efield_fields)
    1117              :       END IF
    1118         7670 :    END SUBROUTINE efield_fields_release
    1119              : 
    1120              : ! **************************************************************************************************
    1121              : !> \brief ...
    1122              : !> \param dftb_control ...
    1123              : ! **************************************************************************************************
    1124         7670 :    SUBROUTINE dftb_control_create(dftb_control)
    1125              :       TYPE(dftb_control_type), POINTER                   :: dftb_control
    1126              : 
    1127         7670 :       CPASSERT(.NOT. ASSOCIATED(dftb_control))
    1128        76700 :       ALLOCATE (dftb_control)
    1129              : 
    1130              :       NULLIFY (dftb_control%sk_pair_list)
    1131         7670 :    END SUBROUTINE dftb_control_create
    1132              : 
    1133              : ! **************************************************************************************************
    1134              : !> \brief ...
    1135              : !> \param dftb_control ...
    1136              : ! **************************************************************************************************
    1137         7670 :    SUBROUTINE dftb_control_release(dftb_control)
    1138              :       TYPE(dftb_control_type), POINTER                   :: dftb_control
    1139              : 
    1140         7670 :       IF (ASSOCIATED(dftb_control)) THEN
    1141         7670 :          IF (ASSOCIATED(dftb_control%sk_pair_list)) THEN
    1142          222 :             DEALLOCATE (dftb_control%sk_pair_list)
    1143              :          END IF
    1144         7670 :          DEALLOCATE (dftb_control)
    1145              :       END IF
    1146         7670 :    END SUBROUTINE dftb_control_release
    1147              : 
    1148              : ! **************************************************************************************************
    1149              : !> \brief ...
    1150              : !> \param xtb_control ...
    1151              : ! **************************************************************************************************
    1152         7670 :    SUBROUTINE xtb_control_create(xtb_control)
    1153              :       TYPE(xtb_control_type), POINTER                    :: xtb_control
    1154              : 
    1155         7670 :       CPASSERT(.NOT. ASSOCIATED(xtb_control))
    1156         7670 :       ALLOCATE (xtb_control)
    1157              : 
    1158              :       NULLIFY (xtb_control%kab_param)
    1159              :       NULLIFY (xtb_control%kab_vals)
    1160              :       NULLIFY (xtb_control%kab_types)
    1161              :       NULLIFY (xtb_control%nonbonded)
    1162              :       NULLIFY (xtb_control%rcpair)
    1163              : 
    1164         7670 :    END SUBROUTINE xtb_control_create
    1165              : 
    1166              : ! **************************************************************************************************
    1167              : !> \brief ...
    1168              : !> \param xtb_control ...
    1169              : ! **************************************************************************************************
    1170         7670 :    SUBROUTINE xtb_control_release(xtb_control)
    1171              :       TYPE(xtb_control_type), POINTER                    :: xtb_control
    1172              : 
    1173         7670 :       IF (ASSOCIATED(xtb_control)) THEN
    1174         7670 :          IF (ASSOCIATED(xtb_control%kab_param)) THEN
    1175            2 :             DEALLOCATE (xtb_control%kab_param)
    1176              :          END IF
    1177         7670 :          IF (ASSOCIATED(xtb_control%kab_vals)) THEN
    1178            2 :             DEALLOCATE (xtb_control%kab_vals)
    1179              :          END IF
    1180         7670 :          IF (ASSOCIATED(xtb_control%kab_types)) THEN
    1181            2 :             DEALLOCATE (xtb_control%kab_types)
    1182              :          END IF
    1183         7670 :          IF (ASSOCIATED(xtb_control%rcpair)) THEN
    1184          944 :             DEALLOCATE (xtb_control%rcpair)
    1185              :          END IF
    1186         7670 :          IF (ASSOCIATED(xtb_control%nonbonded)) THEN
    1187            6 :             CALL pair_potential_p_release(xtb_control%nonbonded)
    1188              :          END IF
    1189         7670 :          DEALLOCATE (xtb_control)
    1190              :       END IF
    1191         7670 :    END SUBROUTINE xtb_control_release
    1192              : 
    1193              : ! **************************************************************************************************
    1194              : !> \brief ...
    1195              : !> \param se_control ...
    1196              : ! **************************************************************************************************
    1197         7670 :    SUBROUTINE se_control_create(se_control)
    1198              :       TYPE(semi_empirical_control_type), POINTER         :: se_control
    1199              : 
    1200         7670 :       CPASSERT(.NOT. ASSOCIATED(se_control))
    1201        38350 :       ALLOCATE (se_control)
    1202         7670 :    END SUBROUTINE se_control_create
    1203              : 
    1204              : ! **************************************************************************************************
    1205              : !> \brief ...
    1206              : !> \param se_control ...
    1207              : ! **************************************************************************************************
    1208         7670 :    SUBROUTINE se_control_release(se_control)
    1209              :       TYPE(semi_empirical_control_type), POINTER         :: se_control
    1210              : 
    1211         7670 :       IF (ASSOCIATED(se_control)) THEN
    1212         7670 :          DEALLOCATE (se_control)
    1213              :       END IF
    1214         7670 :    END SUBROUTINE se_control_release
    1215              : 
    1216              : ! **************************************************************************************************
    1217              : !> \brief ...
    1218              : !> \param admm_control ...
    1219              : ! **************************************************************************************************
    1220          500 :    SUBROUTINE admm_control_create(admm_control)
    1221              :       TYPE(admm_control_type), POINTER                   :: admm_control
    1222              : 
    1223          500 :       CPASSERT(.NOT. ASSOCIATED(admm_control))
    1224         2500 :       ALLOCATE (admm_control)
    1225              : 
    1226          500 :    END SUBROUTINE admm_control_create
    1227              : 
    1228              : ! **************************************************************************************************
    1229              : !> \brief ...
    1230              : !> \param admm_control ...
    1231              : ! **************************************************************************************************
    1232         7674 :    SUBROUTINE admm_control_release(admm_control)
    1233              :       TYPE(admm_control_type), POINTER                   :: admm_control
    1234              : 
    1235         7674 :       IF (ASSOCIATED(admm_control)) THEN
    1236          540 :          DEALLOCATE (admm_control)
    1237              :       END IF
    1238         7674 :    END SUBROUTINE admm_control_release
    1239              : 
    1240              : ! **************************************************************************************************
    1241              : !> \brief ...
    1242              : !> \param expot_control ...
    1243              : ! **************************************************************************************************
    1244           16 :    SUBROUTINE expot_control_create(expot_control)
    1245              :       TYPE(expot_control_type), POINTER                  :: expot_control
    1246              : 
    1247           16 :       CPASSERT(.NOT. ASSOCIATED(expot_control))
    1248           16 :       ALLOCATE (expot_control)
    1249              :       expot_control%read_from_cube = .FALSE.
    1250              :       expot_control%maxwell_solver = .FALSE.
    1251           16 :       expot_control%static = .TRUE.
    1252           16 :       expot_control%scaling_factor = 1.0_dp
    1253              : 
    1254           16 :    END SUBROUTINE expot_control_create
    1255              : 
    1256              : ! **************************************************************************************************
    1257              : !> \brief ...
    1258              : !> \param expot_control ...
    1259              : ! **************************************************************************************************
    1260         7670 :    SUBROUTINE expot_control_release(expot_control)
    1261              :       TYPE(expot_control_type), POINTER                  :: expot_control
    1262              : 
    1263         7670 :       IF (ASSOCIATED(expot_control)) THEN
    1264           16 :          DEALLOCATE (expot_control)
    1265              :       END IF
    1266              : 
    1267         7670 :    END SUBROUTINE expot_control_release
    1268              : 
    1269              : ! **************************************************************************************************
    1270              : !> \brief ...
    1271              : !> \param maxwell_control ...
    1272              : ! **************************************************************************************************
    1273            0 :    SUBROUTINE maxwell_control_create(maxwell_control)
    1274              :       TYPE(maxwell_control_type), POINTER                :: maxwell_control
    1275              : 
    1276            0 :       CPASSERT(.NOT. ASSOCIATED(maxwell_control))
    1277            0 :       ALLOCATE (maxwell_control)
    1278              : 
    1279            0 :    END SUBROUTINE maxwell_control_create
    1280              : 
    1281              : ! **************************************************************************************************
    1282              : !> \brief ...
    1283              : !> \param maxwell_control ...
    1284              : ! **************************************************************************************************
    1285         7670 :    SUBROUTINE maxwell_control_release(maxwell_control)
    1286              :       TYPE(maxwell_control_type), POINTER                :: maxwell_control
    1287              : 
    1288         7670 :       IF (ASSOCIATED(maxwell_control)) THEN
    1289            0 :          DEALLOCATE (maxwell_control)
    1290              :       END IF
    1291              : 
    1292         7670 :    END SUBROUTINE maxwell_control_release
    1293              : 
    1294            0 : END MODULE cp_control_types
        

Generated by: LCOV version 2.0-1