46 #include "./base/base_uses.f90"
51 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'qs_subsys_methods'
70 SUBROUTINE qs_subsys_create(subsys, para_env, root_section, force_env_section, subsys_section, &
71 use_motion_section, cp_subsys, cell, cell_ref, elkind)
72 TYPE(qs_subsys_type),
INTENT(OUT) :: subsys
73 TYPE(mp_para_env_type),
POINTER :: para_env
74 TYPE(section_vals_type),
OPTIONAL,
POINTER :: root_section
75 TYPE(section_vals_type),
POINTER :: force_env_section, subsys_section
76 LOGICAL,
INTENT(IN) :: use_motion_section
77 TYPE(cp_subsys_type),
OPTIONAL,
POINTER :: cp_subsys
78 TYPE(cell_type),
OPTIONAL,
POINTER :: cell, cell_ref
79 LOGICAL,
INTENT(IN),
OPTIONAL :: elkind
81 LOGICAL :: use_ref_cell
82 TYPE(atomic_kind_type),
DIMENSION(:),
POINTER :: atomic_kind_set
83 TYPE(cell_type),
POINTER :: my_cell, my_cell_ref
84 TYPE(cp_subsys_type),
POINTER :: my_cp_subsys
85 TYPE(qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
86 TYPE(section_vals_type),
POINTER :: cell_section, kind_section
88 NULLIFY (atomic_kind_set, qs_kind_set, cell_section, kind_section, my_cell, my_cell_ref, my_cp_subsys)
91 IF (
PRESENT(cp_subsys))
THEN
92 my_cp_subsys => cp_subsys
93 ELSE IF (
PRESENT(root_section))
THEN
95 force_env_section=force_env_section, &
96 subsys_section=subsys_section, &
97 use_motion_section=use_motion_section, &
100 cpabort(
"qs_subsys_create: cp_subsys or root_section needed")
105 use_ref_cell = .false.
106 IF (
PRESENT(cell))
THEN
108 IF (
PRESENT(cell_ref))
THEN
109 my_cell_ref => cell_ref
110 use_ref_cell = .true.
113 CALL cell_clone(my_cell, my_cell_ref, tag=
"CELL_REF")
117 CALL read_cell(my_cell, my_cell_ref, use_ref_cell=use_ref_cell, &
118 cell_section=cell_section, para_env=para_env)
125 CALL cp_subsys_get(my_cp_subsys, atomic_kind_set=atomic_kind_set)
128 para_env, force_env_section)
130 CALL num_ao_el_per_molecule(my_cp_subsys%molecule_kinds%els, &
134 cp_subsys=my_cp_subsys, &
135 cell_ref=my_cell_ref, &
136 use_ref_cell=use_ref_cell, &
137 qs_kind_set=qs_kind_set)
140 IF (.NOT.
PRESENT(cell_ref))
CALL cell_release(my_cell_ref)
155 SUBROUTINE num_ao_el_per_molecule(molecule_kind_set, qs_kind_set)
157 TYPE(molecule_kind_type),
DIMENSION(:),
POINTER :: molecule_kind_set
158 TYPE(qs_kind_type),
DIMENSION(:),
POINTER :: qs_kind_set
160 INTEGER :: arbitrary_spin, iatom, ikind, imol, &
161 n_ao, natom, nmol_kind, nsgf, nspins, &
163 INTEGER,
DIMENSION(0:lmat, 10) :: ne_core, ne_elem, ne_explicit
164 INTEGER,
DIMENSION(2) :: n_occ_alpha_and_beta
165 REAL(kind=
dp) :: charge_molecule, zeff, zeff_correction
166 REAL(kind=
dp),
DIMENSION(0:lmat, 10, 2) :: edelta
167 TYPE(all_potential_type),
POINTER :: all_potential
168 TYPE(atomic_kind_type),
POINTER :: atomic_kind
169 TYPE(gth_potential_type),
POINTER :: gth_potential
170 TYPE(gto_basis_set_type),
POINTER :: orb_basis_set
171 TYPE(molecule_kind_type),
POINTER :: molecule_kind
172 TYPE(sgp_potential_type),
POINTER :: sgp_potential
174 IF (
ASSOCIATED(molecule_kind_set))
THEN
177 nmol_kind =
SIZE(molecule_kind_set, 1)
182 DO imol = 1, nmol_kind
184 molecule_kind => molecule_kind_set(imol)
189 n_occ_alpha_and_beta(1:nspins) = 0
194 atomic_kind => molecule_kind%atom_list(iatom)%atomic_kind
197 basis_set=orb_basis_set, &
198 all_potential=all_potential, &
199 gth_potential=gth_potential, &
200 sgp_potential=sgp_potential)
206 qs_kind=qs_kind_set(ikind), &
220 n_occ_alpha_and_beta(arbitrary_spin) = &
221 n_occ_alpha_and_beta(arbitrary_spin) + sum(ne_explicit) + &
222 sum(nint(2*edelta(:, :, arbitrary_spin)))
227 IF (
ASSOCIATED(all_potential))
THEN
228 CALL get_potential(potential=all_potential, zeff=zeff, &
229 zeff_correction=zeff_correction)
230 ELSE IF (
ASSOCIATED(gth_potential))
THEN
231 CALL get_potential(potential=gth_potential, zeff=zeff, &
232 zeff_correction=zeff_correction)
233 ELSE IF (
ASSOCIATED(sgp_potential))
THEN
234 CALL get_potential(potential=sgp_potential, zeff=zeff, &
235 zeff_correction=zeff_correction)
238 zeff_correction = 0.0_dp
240 z_molecule = z_molecule + nint(zeff - zeff_correction)
246 IF (
ASSOCIATED(orb_basis_set))
THEN
257 charge_molecule = real(z_molecule - n_occ_alpha_and_beta(arbitrary_spin),
dp)
259 nelectron=n_occ_alpha_and_beta(arbitrary_spin), &
260 charge=charge_molecule, &
266 END SUBROUTINE num_ao_el_per_molecule
Define the atom type and its sub types.
integer, parameter, public lmat
Define the atomic kind types and their sub types.
subroutine, public get_atomic_kind(atomic_kind, fist_potential, element_symbol, name, mass, kind_number, natom, atom_list, rcov, rvdw, z, qeff, apol, cpol, mm_radius, shell, shell_active, damping)
Get attributes of an atomic kind.
subroutine, public get_gto_basis_set(gto_basis_set, name, aliases, norm_type, kind_radius, ncgf, nset, nsgf, cgf_symbol, sgf_symbol, norm_cgf, set_radius, lmax, lmin, lx, ly, lz, m, ncgf_set, npgf, nsgf_set, nshell, cphi, pgf_radius, sphi, scon, zet, first_cgf, first_sgf, l, last_cgf, last_sgf, n, gcc, maxco, maxl, maxpgf, maxsgf_set, maxshell, maxso, nco_sum, npgf_sum, nshell_sum, maxder, short_kind_radius)
...
Handles all functions related to the CELL.
recursive subroutine, public read_cell(cell, cell_ref, use_ref_cell, cell_section, check_for_ref, para_env)
...
subroutine, public write_cell(cell, subsys_section, tag)
Write the cell parameters to the output unit.
subroutine, public cell_create(cell, hmat, periodic, tag)
allocates and initializes a cell
Handles all functions related to the CELL.
subroutine, public cell_release(cell)
releases the given cell (see doc/ReferenceCounting.html)
subroutine, public cell_clone(cell_in, cell_out, tag)
Clone cell variable.
Initialize a small environment for a particular calculation.
subroutine, public cp_subsys_create(subsys, para_env, root_section, force_env_section, subsys_section, use_motion_section, qmmm, qmmm_env, exclusions, elkind)
Creates allocates and fills subsys from given input.
types that represent a subsys, i.e. a part of the system
subroutine, public cp_subsys_release(subsys)
releases a subsys (see doc/ReferenceCounting.html)
subroutine, public cp_subsys_set(subsys, atomic_kinds, particles, local_particles, molecules, molecule_kinds, local_molecules, para_env, colvar_p, shell_particles, core_particles, gci, multipoles, results, cell)
sets various propreties of the subsys
subroutine, public cp_subsys_get(subsys, ref_count, atomic_kinds, atomic_kind_set, particles, particle_set, local_particles, molecules, molecule_set, molecule_kinds, molecule_kind_set, local_molecules, para_env, colvar_p, shell_particles, core_particles, gci, multipoles, natom, nparticle, ncore, nshell, nkind, atprop, virial, results, cell)
returns information about various attributes of the given subsys
Definition of the atomic potential types.
Defines the basic variable types.
integer, parameter, public dp
Interface to the message passing library MPI.
Define the molecule kind structure types and the corresponding functionality.
subroutine, public get_molecule_kind(molecule_kind, atom_list, bond_list, bend_list, ub_list, impr_list, opbend_list, colv_list, fixd_list, g3x3_list, g4x6_list, vsite_list, torsion_list, shell_list, name, mass, charge, kind_number, natom, nbend, nbond, nub, nimpr, nopbend, nconstraint, nconstraint_fixd, nfixd, ncolv, ng3x3, ng4x6, nvsite, nfixd_restraint, ng3x3_restraint, ng4x6_restraint, nvsite_restraint, nrestraints, nmolecule, nsgf, nshell, ntorsion, molecule_list, nelectron, nelectron_alpha, nelectron_beta, bond_kind_set, bend_kind_set, ub_kind_set, impr_kind_set, opbend_kind_set, torsion_kind_set, molname_generated)
Get informations about a molecule kind.
subroutine, public set_molecule_kind(molecule_kind, name, mass, charge, kind_number, molecule_list, atom_list, nbond, bond_list, nbend, bend_list, nub, ub_list, nimpr, impr_list, nopbend, opbend_list, ntorsion, torsion_list, fixd_list, ncolv, colv_list, ng3x3, g3x3_list, ng4x6, nfixd, g4x6_list, nvsite, vsite_list, ng3x3_restraint, ng4x6_restraint, nfixd_restraint, nshell, shell_list, nvsite_restraint, bond_kind_set, bend_kind_set, ub_kind_set, torsion_kind_set, impr_kind_set, opbend_kind_set, nelectron, nsgf, molname_generated)
Set the components of a molecule kind.
Define the quickstep kind type and their sub types.
subroutine, public get_qs_kind(qs_kind, basis_set, basis_type, ncgf, nsgf, all_potential, tnadd_potential, gth_potential, sgp_potential, upf_potential, se_parameter, dftb_parameter, xtb_parameter, dftb3_param, zeff, elec_conf, mao, lmax_dftb, alpha_core_charge, ccore_charge, core_charge, core_charge_radius, paw_proj_set, paw_atom, hard_radius, hard0_radius, max_rad_local, covalent_radius, vdw_radius, gpw_r3d_rs_type_forced, harmonics, max_iso_not0, max_s_harm, grid_atom, ngrid_ang, ngrid_rad, lmax_rho0, dft_plus_u_atom, l_of_dft_plus_u, n_of_dft_plus_u, u_minus_j, U_of_dft_plus_u, J_of_dft_plus_u, alpha_of_dft_plus_u, beta_of_dft_plus_u, J0_of_dft_plus_u, occupation_of_dft_plus_u, dispersion, bs_occupation, magnetization, no_optimize, addel, laddel, naddel, orbitals, max_scf, eps_scf, smear, u_ramping, u_minus_j_target, eps_u_ramping, init_u_ramping_each_scf, reltmat, ghost, floating, name, element_symbol, pao_basis_size, pao_potentials, pao_descriptors, nelec)
Get attributes of an atomic kind.
subroutine, public init_atom_electronic_state(atomic_kind, qs_kind, ncalc, ncore, nelem, edelta)
...
subroutine, public create_qs_kind_set(qs_kind_set, atomic_kind_set, kind_section, para_env, force_env_section)
Read an atomic kind set data set from the input file.
Routines that work on qs_subsys_type.
subroutine, public qs_subsys_create(subsys, para_env, root_section, force_env_section, subsys_section, use_motion_section, cp_subsys, cell, cell_ref, elkind)
Creates a qs_subsys. Optionally an existsing cp_subsys is used.
types that represent a quickstep subsys
subroutine, public qs_subsys_set(subsys, cp_subsys, local_particles, local_molecules, cell, cell_ref, use_ref_cell, energy, force, qs_kind_set, nelectron_total, nelectron_spin)
...