quantum-espresso/Modules/qes_init_module.f90

3388 lines
101 KiB
Fortran

!
! Copyright (C) 2001-2009 Quantum ESPRESSO group
! This file is distributed under the terms of the
! GNU General Public License. See the file `License'
! in the root directory of the present distribution,
! or http://www.gnu.org/copyleft/gpl.txt .
!
!
MODULE qes_init_module
!
! Auto-generated code: don't edit or at least don't commit changes
!
! Quantum Espresso XSD namespace: http://www.quantum-espresso.org/ns/qes/qes-1.0
!
USE kinds, only: DP
USE qes_types_module
!
IMPLICIT NONE
!
PRIVATE
!
PUBLIC :: qes_init
!
INTERFACE qes_init
!
MODULE PROCEDURE qes_init_espresso
MODULE PROCEDURE qes_init_general_info
MODULE PROCEDURE qes_init_parallel_info
MODULE PROCEDURE qes_init_input
MODULE PROCEDURE qes_init_step
MODULE PROCEDURE qes_init_output
MODULE PROCEDURE qes_init_timing
MODULE PROCEDURE qes_init_clock
MODULE PROCEDURE qes_init_control_variables
MODULE PROCEDURE qes_init_xml_format
MODULE PROCEDURE qes_init_creator
MODULE PROCEDURE qes_init_created
MODULE PROCEDURE qes_init_atomic_species
MODULE PROCEDURE qes_init_species
MODULE PROCEDURE qes_init_atomic_structure
MODULE PROCEDURE qes_init_atomic_positions
MODULE PROCEDURE qes_init_atom
MODULE PROCEDURE qes_init_wyckoff_positions
MODULE PROCEDURE qes_init_cell
MODULE PROCEDURE qes_init_dft
MODULE PROCEDURE qes_init_hybrid
MODULE PROCEDURE qes_init_qpoint_grid
MODULE PROCEDURE qes_init_dftU
MODULE PROCEDURE qes_init_HubbardCommon
MODULE PROCEDURE qes_init_HubbardJ
MODULE PROCEDURE qes_init_starting_ns
MODULE PROCEDURE qes_init_Hubbard_ns
MODULE PROCEDURE qes_init_HubbardBack
MODULE PROCEDURE qes_init_backL
MODULE PROCEDURE qes_init_vdW
MODULE PROCEDURE qes_init_spin
MODULE PROCEDURE qes_init_bands
MODULE PROCEDURE qes_init_smearing
MODULE PROCEDURE qes_init_occupations
MODULE PROCEDURE qes_init_basis
MODULE PROCEDURE qes_init_basis_set
MODULE PROCEDURE qes_init_basisSetItem
MODULE PROCEDURE qes_init_reciprocal_lattice
MODULE PROCEDURE qes_init_electron_control
MODULE PROCEDURE qes_init_k_points_IBZ
MODULE PROCEDURE qes_init_monkhorst_pack
MODULE PROCEDURE qes_init_k_point
MODULE PROCEDURE qes_init_ion_control
MODULE PROCEDURE qes_init_bfgs
MODULE PROCEDURE qes_init_md
MODULE PROCEDURE qes_init_cell_control
MODULE PROCEDURE qes_init_symmetry_flags
MODULE PROCEDURE qes_init_boundary_conditions
MODULE PROCEDURE qes_init_esm
MODULE PROCEDURE qes_init_ekin_functional
MODULE PROCEDURE qes_init_spin_constraints
MODULE PROCEDURE qes_init_electric_field
MODULE PROCEDURE qes_init_gate_settings
MODULE PROCEDURE qes_init_atomic_constraints
MODULE PROCEDURE qes_init_atomic_constraint
MODULE PROCEDURE qes_init_inputOccupations
MODULE PROCEDURE qes_init_outputElectricField
MODULE PROCEDURE qes_init_BerryPhaseOutput
MODULE PROCEDURE qes_init_dipoleOutput
MODULE PROCEDURE qes_init_finiteFieldOut
MODULE PROCEDURE qes_init_polarization
MODULE PROCEDURE qes_init_ionicPolarization
MODULE PROCEDURE qes_init_electronicPolarization
MODULE PROCEDURE qes_init_phase
MODULE PROCEDURE qes_init_gateInfo
MODULE PROCEDURE qes_init_convergence_info
MODULE PROCEDURE qes_init_scf_conv
MODULE PROCEDURE qes_init_opt_conv
MODULE PROCEDURE qes_init_algorithmic_info
MODULE PROCEDURE qes_init_symmetries
MODULE PROCEDURE qes_init_symmetry
MODULE PROCEDURE qes_init_equivalent_atoms
MODULE PROCEDURE qes_init_info
MODULE PROCEDURE qes_init_outputPBC
MODULE PROCEDURE qes_init_magnetization
MODULE PROCEDURE qes_init_total_energy
MODULE PROCEDURE qes_init_band_structure
MODULE PROCEDURE qes_init_ks_energies
MODULE PROCEDURE qes_init_closed
MODULE PROCEDURE qes_init_vector
MODULE PROCEDURE qes_init_integerVector
MODULE PROCEDURE qes_init_matrix_1, qes_init_matrix_2, qes_init_matrix_3
MODULE PROCEDURE qes_init_integerMatrix_1, qes_init_integerMatrix_2, qes_init_integerMatrix_3
MODULE PROCEDURE qes_init_scalarQuantity
!
END INTERFACE qes_init
!
CONTAINS
!
!
SUBROUTINE qes_init_espresso(obj, tagname, input, Units, general_info, parallel_info, step,&
output, status, cputime, timing_info, closed)
!
IMPLICIT NONE
!
TYPE(espresso_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
CHARACTER(LEN=*), OPTIONAL, INTENT(IN) :: Units
TYPE(general_info_type),OPTIONAL,INTENT(IN) :: general_info
TYPE(parallel_info_type),OPTIONAL,INTENT(IN) :: parallel_info
TYPE(input_type),INTENT(IN) :: input
TYPE(step_type),OPTIONAL,DIMENSION(:),INTENT(IN) :: step
TYPE(output_type),OPTIONAL,INTENT(IN) :: output
INTEGER,OPTIONAL,INTENT(IN) :: status
INTEGER,OPTIONAL,INTENT(IN) :: cputime
TYPE(timing_type),OPTIONAL,INTENT(IN) :: timing_info
TYPE(closed_type),OPTIONAL,INTENT(IN) :: closed
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
IF (PRESENT(Units)) THEN
obj%Units_ispresent = .TRUE.
obj%Units = Units
ELSE
obj%Units_ispresent = .FALSE.
END IF
!
IF ( PRESENT(general_info)) THEN
obj%general_info_ispresent = .TRUE.
obj%general_info = general_info
ELSE
obj%general_info_ispresent = .FALSE.
END IF
IF ( PRESENT(parallel_info)) THEN
obj%parallel_info_ispresent = .TRUE.
obj%parallel_info = parallel_info
ELSE
obj%parallel_info_ispresent = .FALSE.
END IF
obj%input = input
IF ( PRESENT(step)) THEN
obj%step_ispresent = .TRUE.
ALLOCATE(obj%step(SIZE(step)))
obj%ndim_step = SIZE(step)
obj%step = step
ELSE
obj%step_ispresent = .FALSE.
END IF
IF ( PRESENT(output)) THEN
obj%output_ispresent = .TRUE.
obj%output = output
ELSE
obj%output_ispresent = .FALSE.
END IF
IF ( PRESENT(status)) THEN
obj%status_ispresent = .TRUE.
obj%status = status
ELSE
obj%status_ispresent = .FALSE.
END IF
IF ( PRESENT(cputime)) THEN
obj%cputime_ispresent = .TRUE.
obj%cputime = cputime
ELSE
obj%cputime_ispresent = .FALSE.
END IF
IF ( PRESENT(timing_info)) THEN
obj%timing_info_ispresent = .TRUE.
obj%timing_info = timing_info
ELSE
obj%timing_info_ispresent = .FALSE.
END IF
IF ( PRESENT(closed)) THEN
obj%closed_ispresent = .TRUE.
obj%closed = closed
ELSE
obj%closed_ispresent = .FALSE.
END IF
!
END SUBROUTINE qes_init_espresso
!
!
SUBROUTINE qes_init_general_info(obj, tagname, xml_format, creator, created, job)
!
IMPLICIT NONE
!
TYPE(general_info_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
TYPE(xml_format_type),INTENT(IN) :: xml_format
TYPE(creator_type),INTENT(IN) :: creator
TYPE(created_type),INTENT(IN) :: created
CHARACTER(LEN=*),INTENT(IN) :: job
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
!
obj%xml_format = xml_format
obj%creator = creator
obj%created = created
obj%job = job
!
END SUBROUTINE qes_init_general_info
!
!
SUBROUTINE qes_init_parallel_info(obj, tagname, nprocs, nthreads, ntasks, nbgrp, npool, ndiag)
!
IMPLICIT NONE
!
TYPE(parallel_info_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
INTEGER,INTENT(IN) :: nprocs
INTEGER,INTENT(IN) :: nthreads
INTEGER,INTENT(IN) :: ntasks
INTEGER,INTENT(IN) :: nbgrp
INTEGER,INTENT(IN) :: npool
INTEGER,INTENT(IN) :: ndiag
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
!
obj%nprocs = nprocs
obj%nthreads = nthreads
obj%ntasks = ntasks
obj%nbgrp = nbgrp
obj%npool = npool
obj%ndiag = ndiag
!
END SUBROUTINE qes_init_parallel_info
!
!
SUBROUTINE qes_init_input(obj, tagname, control_variables, atomic_species, atomic_structure,&
dft, spin, bands, basis, electron_control, k_points_IBZ, ion_control,&
cell_control, symmetry_flags, boundary_conditions, ekin_functional,&
external_atomic_forces, free_positions, starting_atomic_velocities,&
electric_field, atomic_constraints, spin_constraints)
!
IMPLICIT NONE
!
TYPE(input_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
TYPE(control_variables_type),INTENT(IN) :: control_variables
TYPE(atomic_species_type),INTENT(IN) :: atomic_species
TYPE(atomic_structure_type),INTENT(IN) :: atomic_structure
TYPE(dft_type),INTENT(IN) :: dft
TYPE(spin_type),INTENT(IN) :: spin
TYPE(bands_type),INTENT(IN) :: bands
TYPE(basis_type),INTENT(IN) :: basis
TYPE(electron_control_type),INTENT(IN) :: electron_control
TYPE(k_points_IBZ_type),INTENT(IN) :: k_points_IBZ
TYPE(ion_control_type),INTENT(IN) :: ion_control
TYPE(cell_control_type),INTENT(IN) :: cell_control
TYPE(symmetry_flags_type),OPTIONAL,INTENT(IN) :: symmetry_flags
TYPE(boundary_conditions_type),OPTIONAL,INTENT(IN) :: boundary_conditions
TYPE(ekin_functional_type),OPTIONAL,INTENT(IN) :: ekin_functional
TYPE(matrix_type),OPTIONAL,INTENT(IN) :: external_atomic_forces
TYPE(integerMatrix_type),OPTIONAL,INTENT(IN) :: free_positions
TYPE(matrix_type),OPTIONAL,INTENT(IN) :: starting_atomic_velocities
TYPE(electric_field_type),OPTIONAL,INTENT(IN) :: electric_field
TYPE(atomic_constraints_type),OPTIONAL,INTENT(IN) :: atomic_constraints
TYPE(spin_constraints_type),OPTIONAL,INTENT(IN) :: spin_constraints
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
!
obj%control_variables = control_variables
obj%atomic_species = atomic_species
obj%atomic_structure = atomic_structure
obj%dft = dft
obj%spin = spin
obj%bands = bands
obj%basis = basis
obj%electron_control = electron_control
obj%k_points_IBZ = k_points_IBZ
obj%ion_control = ion_control
obj%cell_control = cell_control
IF ( PRESENT(symmetry_flags)) THEN
obj%symmetry_flags_ispresent = .TRUE.
obj%symmetry_flags = symmetry_flags
ELSE
obj%symmetry_flags_ispresent = .FALSE.
END IF
IF ( PRESENT(boundary_conditions)) THEN
obj%boundary_conditions_ispresent = .TRUE.
obj%boundary_conditions = boundary_conditions
ELSE
obj%boundary_conditions_ispresent = .FALSE.
END IF
IF ( PRESENT(ekin_functional)) THEN
obj%ekin_functional_ispresent = .TRUE.
obj%ekin_functional = ekin_functional
ELSE
obj%ekin_functional_ispresent = .FALSE.
END IF
IF ( PRESENT(external_atomic_forces)) THEN
obj%external_atomic_forces_ispresent = .TRUE.
obj%external_atomic_forces = external_atomic_forces
ELSE
obj%external_atomic_forces_ispresent = .FALSE.
END IF
IF ( PRESENT(free_positions)) THEN
obj%free_positions_ispresent = .TRUE.
obj%free_positions = free_positions
ELSE
obj%free_positions_ispresent = .FALSE.
END IF
IF ( PRESENT(starting_atomic_velocities)) THEN
obj%starting_atomic_velocities_ispresent = .TRUE.
obj%starting_atomic_velocities = starting_atomic_velocities
ELSE
obj%starting_atomic_velocities_ispresent = .FALSE.
END IF
IF ( PRESENT(electric_field)) THEN
obj%electric_field_ispresent = .TRUE.
obj%electric_field = electric_field
ELSE
obj%electric_field_ispresent = .FALSE.
END IF
IF ( PRESENT(atomic_constraints)) THEN
obj%atomic_constraints_ispresent = .TRUE.
obj%atomic_constraints = atomic_constraints
ELSE
obj%atomic_constraints_ispresent = .FALSE.
END IF
IF ( PRESENT(spin_constraints)) THEN
obj%spin_constraints_ispresent = .TRUE.
obj%spin_constraints = spin_constraints
ELSE
obj%spin_constraints_ispresent = .FALSE.
END IF
!
END SUBROUTINE qes_init_input
!
!
SUBROUTINE qes_init_step(obj, tagname, n_step, scf_conv, atomic_structure, total_energy, forces,&
stress, FCP_force, FCP_tot_charge)
!
IMPLICIT NONE
!
TYPE(step_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
INTEGER, INTENT(IN) :: n_step
TYPE(scf_conv_type),INTENT(IN) :: scf_conv
TYPE(atomic_structure_type),INTENT(IN) :: atomic_structure
TYPE(total_energy_type),INTENT(IN) :: total_energy
TYPE(matrix_type),INTENT(IN) :: forces
TYPE(matrix_type),OPTIONAL,INTENT(IN) :: stress
REAL(DP),OPTIONAL,INTENT(IN) :: FCP_force
REAL(DP),OPTIONAL,INTENT(IN) :: FCP_tot_charge
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
obj%n_step = n_step
!
obj%scf_conv = scf_conv
obj%atomic_structure = atomic_structure
obj%total_energy = total_energy
obj%forces = forces
IF ( PRESENT(stress)) THEN
obj%stress_ispresent = .TRUE.
obj%stress = stress
ELSE
obj%stress_ispresent = .FALSE.
END IF
IF ( PRESENT(FCP_force)) THEN
obj%FCP_force_ispresent = .TRUE.
obj%FCP_force = FCP_force
ELSE
obj%FCP_force_ispresent = .FALSE.
END IF
IF ( PRESENT(FCP_tot_charge)) THEN
obj%FCP_tot_charge_ispresent = .TRUE.
obj%FCP_tot_charge = FCP_tot_charge
ELSE
obj%FCP_tot_charge_ispresent = .FALSE.
END IF
!
END SUBROUTINE qes_init_step
!
!
SUBROUTINE qes_init_output(obj, tagname, algorithmic_info, atomic_species, atomic_structure,&
basis_set, dft, magnetization, total_energy, band_structure, convergence_info,&
symmetries, boundary_conditions, forces, stress, electric_field,&
FCP_force, FCP_tot_charge)
!
IMPLICIT NONE
!
TYPE(output_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
TYPE(convergence_info_type),OPTIONAL,INTENT(IN) :: convergence_info
TYPE(algorithmic_info_type),INTENT(IN) :: algorithmic_info
TYPE(atomic_species_type),INTENT(IN) :: atomic_species
TYPE(atomic_structure_type),INTENT(IN) :: atomic_structure
TYPE(symmetries_type),OPTIONAL,INTENT(IN) :: symmetries
TYPE(basis_set_type),INTENT(IN) :: basis_set
TYPE(dft_type),INTENT(IN) :: dft
TYPE(outputPBC_type),OPTIONAL,INTENT(IN) :: boundary_conditions
TYPE(magnetization_type),INTENT(IN) :: magnetization
TYPE(total_energy_type),INTENT(IN) :: total_energy
TYPE(band_structure_type),INTENT(IN) :: band_structure
TYPE(matrix_type),OPTIONAL,INTENT(IN) :: forces
TYPE(matrix_type),OPTIONAL,INTENT(IN) :: stress
TYPE(outputElectricField_type),OPTIONAL,INTENT(IN) :: electric_field
REAL(DP),OPTIONAL,INTENT(IN) :: FCP_force
REAL(DP),OPTIONAL,INTENT(IN) :: FCP_tot_charge
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
!
IF ( PRESENT(convergence_info)) THEN
obj%convergence_info_ispresent = .TRUE.
obj%convergence_info = convergence_info
ELSE
obj%convergence_info_ispresent = .FALSE.
END IF
obj%algorithmic_info = algorithmic_info
obj%atomic_species = atomic_species
obj%atomic_structure = atomic_structure
IF ( PRESENT(symmetries)) THEN
obj%symmetries_ispresent = .TRUE.
obj%symmetries = symmetries
ELSE
obj%symmetries_ispresent = .FALSE.
END IF
obj%basis_set = basis_set
obj%dft = dft
IF ( PRESENT(boundary_conditions)) THEN
obj%boundary_conditions_ispresent = .TRUE.
obj%boundary_conditions = boundary_conditions
ELSE
obj%boundary_conditions_ispresent = .FALSE.
END IF
obj%magnetization = magnetization
obj%total_energy = total_energy
obj%band_structure = band_structure
IF ( PRESENT(forces)) THEN
obj%forces_ispresent = .TRUE.
obj%forces = forces
ELSE
obj%forces_ispresent = .FALSE.
END IF
IF ( PRESENT(stress)) THEN
obj%stress_ispresent = .TRUE.
obj%stress = stress
ELSE
obj%stress_ispresent = .FALSE.
END IF
IF ( PRESENT(electric_field)) THEN
obj%electric_field_ispresent = .TRUE.
obj%electric_field = electric_field
ELSE
obj%electric_field_ispresent = .FALSE.
END IF
IF ( PRESENT(FCP_force)) THEN
obj%FCP_force_ispresent = .TRUE.
obj%FCP_force = FCP_force
ELSE
obj%FCP_force_ispresent = .FALSE.
END IF
IF ( PRESENT(FCP_tot_charge)) THEN
obj%FCP_tot_charge_ispresent = .TRUE.
obj%FCP_tot_charge = FCP_tot_charge
ELSE
obj%FCP_tot_charge_ispresent = .FALSE.
END IF
!
END SUBROUTINE qes_init_output
!
!
SUBROUTINE qes_init_timing(obj, tagname, total, partial)
!
IMPLICIT NONE
!
TYPE(timing_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
TYPE(clock_type),INTENT(IN) :: total
TYPE(clock_type),OPTIONAL,DIMENSION(:),INTENT(IN) :: partial
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
!
obj%total = total
IF ( PRESENT(partial)) THEN
obj%partial_ispresent = .TRUE.
ALLOCATE(obj%partial(SIZE(partial)))
obj%ndim_partial = SIZE(partial)
obj%partial = partial
ELSE
obj%partial_ispresent = .FALSE.
END IF
!
END SUBROUTINE qes_init_timing
!
!
SUBROUTINE qes_init_clock(obj, tagname, label, cpu, wall, calls)
!
IMPLICIT NONE
!
TYPE(clock_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
CHARACTER(LEN=*), INTENT(IN) :: label
INTEGER, OPTIONAL, INTENT(IN) :: calls
REAL(DP),INTENT(IN) :: cpu
REAL(DP),INTENT(IN) :: wall
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
obj%label = label
IF (PRESENT(calls)) THEN
obj%calls_ispresent = .TRUE.
obj%calls = calls
ELSE
obj%calls_ispresent = .FALSE.
END IF
!
obj%cpu = cpu
obj%wall = wall
!
END SUBROUTINE qes_init_clock
!
!
SUBROUTINE qes_init_control_variables(obj, tagname, title, calculation, restart_mode, prefix,&
pseudo_dir, outdir, stress, forces, wf_collect, disk_io,&
max_seconds, etot_conv_thr, forc_conv_thr, press_conv_thr,&
verbosity, print_every, nstep)
!
IMPLICIT NONE
!
TYPE(control_variables_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
CHARACTER(LEN=*),INTENT(IN) :: title
CHARACTER(LEN=*),INTENT(IN) :: calculation
CHARACTER(LEN=*),INTENT(IN) :: restart_mode
CHARACTER(LEN=*),INTENT(IN) :: prefix
CHARACTER(LEN=*),INTENT(IN) :: pseudo_dir
CHARACTER(LEN=*),INTENT(IN) :: outdir
LOGICAL,INTENT(IN) :: stress
LOGICAL,INTENT(IN) :: forces
LOGICAL,INTENT(IN) :: wf_collect
CHARACTER(LEN=*),INTENT(IN) :: disk_io
INTEGER,INTENT(IN) :: max_seconds
INTEGER,OPTIONAL,INTENT(IN) :: nstep
REAL(DP),INTENT(IN) :: etot_conv_thr
REAL(DP),INTENT(IN) :: forc_conv_thr
REAL(DP),INTENT(IN) :: press_conv_thr
CHARACTER(LEN=*),INTENT(IN) :: verbosity
INTEGER,INTENT(IN) :: print_every
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
!
obj%title = title
obj%calculation = calculation
obj%restart_mode = restart_mode
obj%prefix = prefix
obj%pseudo_dir = pseudo_dir
obj%outdir = outdir
obj%stress = stress
obj%forces = forces
obj%wf_collect = wf_collect
obj%disk_io = disk_io
obj%max_seconds = max_seconds
IF ( PRESENT(nstep)) THEN
obj%nstep_ispresent = .TRUE.
obj%nstep = nstep
ELSE
obj%nstep_ispresent = .FALSE.
END IF
obj%etot_conv_thr = etot_conv_thr
obj%forc_conv_thr = forc_conv_thr
obj%press_conv_thr = press_conv_thr
obj%verbosity = verbosity
obj%print_every = print_every
!
END SUBROUTINE qes_init_control_variables
!
!
SUBROUTINE qes_init_xml_format(obj, tagname, NAME, VERSION, xml_format)
!
IMPLICIT NONE
!
TYPE(xml_format_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
CHARACTER(LEN=*), INTENT(IN) :: NAME
CHARACTER(LEN=*), INTENT(IN) :: VERSION
CHARACTER(LEN=*), INTENT(IN) :: xml_format
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
obj%NAME = NAME
obj%VERSION = VERSION
!
obj%xml_format = xml_format
!
END SUBROUTINE qes_init_xml_format
!
!
SUBROUTINE qes_init_creator(obj, tagname, NAME, VERSION, creator)
!
IMPLICIT NONE
!
TYPE(creator_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
CHARACTER(LEN=*), INTENT(IN) :: NAME
CHARACTER(LEN=*), INTENT(IN) :: VERSION
CHARACTER(LEN=*), INTENT(IN) :: creator
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
obj%NAME = NAME
obj%VERSION = VERSION
!
obj%creator = creator
!
END SUBROUTINE qes_init_creator
!
!
SUBROUTINE qes_init_created(obj, tagname, DATE, TIME, created)
!
IMPLICIT NONE
!
TYPE(created_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
CHARACTER(LEN=*), INTENT(IN) :: DATE
CHARACTER(LEN=*), INTENT(IN) :: TIME
CHARACTER(LEN=*), INTENT(IN) :: created
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
obj%DATE = DATE
obj%TIME = TIME
!
obj%created = created
!
END SUBROUTINE qes_init_created
!
!
SUBROUTINE qes_init_atomic_species(obj, tagname, ntyp, species, pseudo_dir)
!
IMPLICIT NONE
!
TYPE(atomic_species_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
INTEGER, INTENT(IN) :: ntyp
CHARACTER(LEN=*), OPTIONAL, INTENT(IN) :: pseudo_dir
TYPE(species_type),DIMENSION(:),INTENT(IN) :: species
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
obj%ntyp = ntyp
IF (PRESENT(pseudo_dir)) THEN
obj%pseudo_dir_ispresent = .TRUE.
obj%pseudo_dir = pseudo_dir
ELSE
obj%pseudo_dir_ispresent = .FALSE.
END IF
!
ALLOCATE( obj%species(SIZE(species)))
obj%ndim_species = SIZE(species)
obj%species = species
!
END SUBROUTINE qes_init_atomic_species
!
!
SUBROUTINE qes_init_species(obj, tagname, name, pseudo_file, mass, starting_magnetization, spin_teta, spin_phi)
!
IMPLICIT NONE
!
TYPE(species_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
CHARACTER(LEN=*), INTENT(IN) :: name
REAL(DP),OPTIONAL,INTENT(IN) :: mass
CHARACTER(LEN=*),INTENT(IN) :: pseudo_file
REAL(DP),OPTIONAL,INTENT(IN) :: starting_magnetization
REAL(DP),OPTIONAL,INTENT(IN) :: spin_teta
REAL(DP),OPTIONAL,INTENT(IN) :: spin_phi
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
obj%name = name
!
IF ( PRESENT(mass)) THEN
obj%mass_ispresent = .TRUE.
obj%mass = mass
ELSE
obj%mass_ispresent = .FALSE.
END IF
obj%pseudo_file = pseudo_file
IF ( PRESENT(starting_magnetization)) THEN
obj%starting_magnetization_ispresent = .TRUE.
obj%starting_magnetization = starting_magnetization
ELSE
obj%starting_magnetization_ispresent = .FALSE.
END IF
IF ( PRESENT(spin_teta)) THEN
obj%spin_teta_ispresent = .TRUE.
obj%spin_teta = spin_teta
ELSE
obj%spin_teta_ispresent = .FALSE.
END IF
IF ( PRESENT(spin_phi)) THEN
obj%spin_phi_ispresent = .TRUE.
obj%spin_phi = spin_phi
ELSE
obj%spin_phi_ispresent = .FALSE.
END IF
!
END SUBROUTINE qes_init_species
!
!
SUBROUTINE qes_init_atomic_structure(obj, tagname, nat, cell, alat, bravais_index, alternative_axes,&
atomic_positions, wyckoff_positions, crystal_positions)
!
IMPLICIT NONE
!
TYPE(atomic_structure_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
INTEGER, INTENT(IN) :: nat
REAL(DP), OPTIONAL, INTENT(IN) :: alat
INTEGER, OPTIONAL, INTENT(IN) :: bravais_index
CHARACTER(LEN=*), OPTIONAL, INTENT(IN) :: alternative_axes
TYPE(atomic_positions_type),OPTIONAL,INTENT(IN) :: atomic_positions
TYPE(wyckoff_positions_type),OPTIONAL,INTENT(IN) :: wyckoff_positions
TYPE(atomic_positions_type),OPTIONAL,INTENT(IN) :: crystal_positions
TYPE(cell_type),INTENT(IN) :: cell
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
obj%nat = nat
IF (PRESENT(alat)) THEN
obj%alat_ispresent = .TRUE.
obj%alat = alat
ELSE
obj%alat_ispresent = .FALSE.
END IF
IF (PRESENT(bravais_index)) THEN
obj%bravais_index_ispresent = .TRUE.
obj%bravais_index = bravais_index
ELSE
obj%bravais_index_ispresent = .FALSE.
END IF
IF (PRESENT(alternative_axes)) THEN
obj%alternative_axes_ispresent = .TRUE.
obj%alternative_axes = alternative_axes
ELSE
obj%alternative_axes_ispresent = .FALSE.
END IF
!
IF ( PRESENT(atomic_positions)) THEN
obj%atomic_positions_ispresent = .TRUE.
obj%atomic_positions = atomic_positions
ELSE
obj%atomic_positions_ispresent = .FALSE.
END IF
IF ( PRESENT(wyckoff_positions)) THEN
obj%wyckoff_positions_ispresent = .TRUE.
obj%wyckoff_positions = wyckoff_positions
ELSE
obj%wyckoff_positions_ispresent = .FALSE.
END IF
IF ( PRESENT(crystal_positions)) THEN
obj%crystal_positions_ispresent = .TRUE.
obj%crystal_positions = crystal_positions
ELSE
obj%crystal_positions_ispresent = .FALSE.
END IF
obj%cell = cell
!
END SUBROUTINE qes_init_atomic_structure
!
!
SUBROUTINE qes_init_atomic_positions(obj, tagname, atom)
!
IMPLICIT NONE
!
TYPE(atomic_positions_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
TYPE(atom_type),DIMENSION(:),INTENT(IN) :: atom
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
!
ALLOCATE( obj%atom(SIZE(atom)))
obj%ndim_atom = SIZE(atom)
obj%atom = atom
!
END SUBROUTINE qes_init_atomic_positions
!
!
SUBROUTINE qes_init_atom(obj, tagname, name, atom, position, index)
!
IMPLICIT NONE
!
TYPE(atom_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
CHARACTER(LEN=*), INTENT(IN) :: name
CHARACTER(LEN=*), OPTIONAL, INTENT(IN) :: position
INTEGER, OPTIONAL, INTENT(IN) :: index
REAL(DP), DIMENSION(3), INTENT(IN) :: atom
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
obj%name = name
IF (PRESENT(position)) THEN
obj%position_ispresent = .TRUE.
obj%position = position
ELSE
obj%position_ispresent = .FALSE.
END IF
IF (PRESENT(index)) THEN
obj%index_ispresent = .TRUE.
obj%index = index
ELSE
obj%index_ispresent = .FALSE.
END IF
!
obj%atom = atom
!
END SUBROUTINE qes_init_atom
!
!
SUBROUTINE qes_init_wyckoff_positions(obj, tagname, space_group, atom, more_options)
!
IMPLICIT NONE
!
TYPE(wyckoff_positions_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
INTEGER, INTENT(IN) :: space_group
CHARACTER(LEN=*), OPTIONAL, INTENT(IN) :: more_options
TYPE(atom_type),DIMENSION(:),INTENT(IN) :: atom
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
obj%space_group = space_group
IF (PRESENT(more_options)) THEN
obj%more_options_ispresent = .TRUE.
obj%more_options = more_options
ELSE
obj%more_options_ispresent = .FALSE.
END IF
!
ALLOCATE( obj%atom(SIZE(atom)))
obj%ndim_atom = SIZE(atom)
obj%atom = atom
!
END SUBROUTINE qes_init_wyckoff_positions
!
!
SUBROUTINE qes_init_cell(obj, tagname, a1, a2, a3)
!
IMPLICIT NONE
!
TYPE(cell_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
REAL(DP), DIMENSION(3),INTENT(IN) :: a1
REAL(DP), DIMENSION(3),INTENT(IN) :: a2
REAL(DP), DIMENSION(3),INTENT(IN) :: a3
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
!
obj%a1 = a1
obj%a2 = a2
obj%a3 = a3
!
END SUBROUTINE qes_init_cell
!
!
SUBROUTINE qes_init_dft(obj, tagname, functional, hybrid, dftU, vdW)
!
IMPLICIT NONE
!
TYPE(dft_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
CHARACTER(LEN=*),INTENT(IN) :: functional
TYPE(hybrid_type),OPTIONAL,INTENT(IN) :: hybrid
TYPE(dftU_type),OPTIONAL,INTENT(IN) :: dftU
TYPE(vdW_type),OPTIONAL,INTENT(IN) :: vdW
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
!
obj%functional = functional
IF ( PRESENT(hybrid)) THEN
obj%hybrid_ispresent = .TRUE.
obj%hybrid = hybrid
ELSE
obj%hybrid_ispresent = .FALSE.
END IF
IF ( PRESENT(dftU)) THEN
obj%dftU_ispresent = .TRUE.
obj%dftU = dftU
ELSE
obj%dftU_ispresent = .FALSE.
END IF
IF ( PRESENT(vdW)) THEN
obj%vdW_ispresent = .TRUE.
obj%vdW = vdW
ELSE
obj%vdW_ispresent = .FALSE.
END IF
!
END SUBROUTINE qes_init_dft
!
!
SUBROUTINE qes_init_hybrid(obj, tagname, qpoint_grid, ecutfock, exx_fraction, screening_parameter,&
exxdiv_treatment, x_gamma_extrapolation, ecutvcut, localization_threshold &
)
!
IMPLICIT NONE
!
TYPE(hybrid_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
TYPE(qpoint_grid_type),OPTIONAL,INTENT(IN) :: qpoint_grid
REAL(DP),OPTIONAL,INTENT(IN) :: ecutfock
REAL(DP),OPTIONAL,INTENT(IN) :: exx_fraction
REAL(DP),OPTIONAL,INTENT(IN) :: screening_parameter
CHARACTER(LEN=*),OPTIONAL,INTENT(IN) :: exxdiv_treatment
LOGICAL,OPTIONAL,INTENT(IN) :: x_gamma_extrapolation
REAL(DP),OPTIONAL,INTENT(IN) :: ecutvcut
REAL(DP),OPTIONAL,INTENT(IN) :: localization_threshold
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
!
IF ( PRESENT(qpoint_grid)) THEN
obj%qpoint_grid_ispresent = .TRUE.
obj%qpoint_grid = qpoint_grid
ELSE
obj%qpoint_grid_ispresent = .FALSE.
END IF
IF ( PRESENT(ecutfock)) THEN
obj%ecutfock_ispresent = .TRUE.
obj%ecutfock = ecutfock
ELSE
obj%ecutfock_ispresent = .FALSE.
END IF
IF ( PRESENT(exx_fraction)) THEN
obj%exx_fraction_ispresent = .TRUE.
obj%exx_fraction = exx_fraction
ELSE
obj%exx_fraction_ispresent = .FALSE.
END IF
IF ( PRESENT(screening_parameter)) THEN
obj%screening_parameter_ispresent = .TRUE.
obj%screening_parameter = screening_parameter
ELSE
obj%screening_parameter_ispresent = .FALSE.
END IF
IF ( PRESENT(exxdiv_treatment)) THEN
obj%exxdiv_treatment_ispresent = .TRUE.
obj%exxdiv_treatment = exxdiv_treatment
ELSE
obj%exxdiv_treatment_ispresent = .FALSE.
END IF
IF ( PRESENT(x_gamma_extrapolation)) THEN
obj%x_gamma_extrapolation_ispresent = .TRUE.
obj%x_gamma_extrapolation = x_gamma_extrapolation
ELSE
obj%x_gamma_extrapolation_ispresent = .FALSE.
END IF
IF ( PRESENT(ecutvcut)) THEN
obj%ecutvcut_ispresent = .TRUE.
obj%ecutvcut = ecutvcut
ELSE
obj%ecutvcut_ispresent = .FALSE.
END IF
IF ( PRESENT(localization_threshold)) THEN
obj%localization_threshold_ispresent = .TRUE.
obj%localization_threshold = localization_threshold
ELSE
obj%localization_threshold_ispresent = .FALSE.
END IF
!
END SUBROUTINE qes_init_hybrid
!
!
SUBROUTINE qes_init_qpoint_grid(obj, tagname, nqx1, nqx2, nqx3, qpoint_grid)
!
IMPLICIT NONE
!
TYPE(qpoint_grid_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
INTEGER, INTENT(IN) :: nqx1
INTEGER, INTENT(IN) :: nqx2
INTEGER, INTENT(IN) :: nqx3
CHARACTER(LEN=*), INTENT(IN) :: qpoint_grid
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
obj%nqx1 = nqx1
obj%nqx2 = nqx2
obj%nqx3 = nqx3
!
obj%qpoint_grid = qpoint_grid
!
END SUBROUTINE qes_init_qpoint_grid
!
!
SUBROUTINE qes_init_dftU(obj, tagname, lda_plus_u_kind, Hubbard_U, Hubbard_J0, Hubbard_alpha,&
Hubbard_beta, Hubbard_J, starting_ns, Hubbard_ns, U_projection_type,&
Hubbard_back, Hubbard_U_back, Hubbard_alpha_back, Hubbard_ns_nc)
!
IMPLICIT NONE
!
TYPE(dftU_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
INTEGER,OPTIONAL,INTENT(IN) :: lda_plus_u_kind
TYPE(HubbardCommon_type),OPTIONAL,DIMENSION(:),INTENT(IN) :: Hubbard_U
TYPE(HubbardCommon_type),OPTIONAL,DIMENSION(:),INTENT(IN) :: Hubbard_J0
TYPE(HubbardCommon_type),OPTIONAL,DIMENSION(:),INTENT(IN) :: Hubbard_alpha
TYPE(HubbardCommon_type),OPTIONAL,DIMENSION(:),INTENT(IN) :: Hubbard_beta
TYPE(HubbardJ_type),OPTIONAL,DIMENSION(:),INTENT(IN) :: Hubbard_J
TYPE(starting_ns_type),OPTIONAL,DIMENSION(:),INTENT(IN) :: starting_ns
TYPE(Hubbard_ns_type),OPTIONAL,DIMENSION(:),INTENT(IN) :: Hubbard_ns
CHARACTER(LEN=*),OPTIONAL,INTENT(IN) :: U_projection_type
TYPE(HubbardBack_type),OPTIONAL,DIMENSION(:),INTENT(IN) :: Hubbard_back
TYPE(HubbardCommon_type),OPTIONAL,DIMENSION(:),INTENT(IN) :: Hubbard_U_back
TYPE(HubbardCommon_type),OPTIONAL,DIMENSION(:),INTENT(IN) :: Hubbard_alpha_back
TYPE(Hubbard_ns_type),OPTIONAL,DIMENSION(:),INTENT(IN) :: Hubbard_ns_nc
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
!
IF ( PRESENT(lda_plus_u_kind)) THEN
obj%lda_plus_u_kind_ispresent = .TRUE.
obj%lda_plus_u_kind = lda_plus_u_kind
ELSE
obj%lda_plus_u_kind_ispresent = .FALSE.
END IF
IF ( PRESENT(Hubbard_U)) THEN
obj%Hubbard_U_ispresent = .TRUE.
ALLOCATE(obj%Hubbard_U(SIZE(Hubbard_U)))
obj%ndim_Hubbard_U = SIZE(Hubbard_U)
obj%Hubbard_U = Hubbard_U
ELSE
obj%Hubbard_U_ispresent = .FALSE.
END IF
IF ( PRESENT(Hubbard_J0)) THEN
obj%Hubbard_J0_ispresent = .TRUE.
ALLOCATE(obj%Hubbard_J0(SIZE(Hubbard_J0)))
obj%ndim_Hubbard_J0 = SIZE(Hubbard_J0)
obj%Hubbard_J0 = Hubbard_J0
ELSE
obj%Hubbard_J0_ispresent = .FALSE.
END IF
IF ( PRESENT(Hubbard_alpha)) THEN
obj%Hubbard_alpha_ispresent = .TRUE.
ALLOCATE(obj%Hubbard_alpha(SIZE(Hubbard_alpha)))
obj%ndim_Hubbard_alpha = SIZE(Hubbard_alpha)
obj%Hubbard_alpha = Hubbard_alpha
ELSE
obj%Hubbard_alpha_ispresent = .FALSE.
END IF
IF ( PRESENT(Hubbard_beta)) THEN
obj%Hubbard_beta_ispresent = .TRUE.
ALLOCATE(obj%Hubbard_beta(SIZE(Hubbard_beta)))
obj%ndim_Hubbard_beta = SIZE(Hubbard_beta)
obj%Hubbard_beta = Hubbard_beta
ELSE
obj%Hubbard_beta_ispresent = .FALSE.
END IF
IF ( PRESENT(Hubbard_J)) THEN
obj%Hubbard_J_ispresent = .TRUE.
ALLOCATE(obj%Hubbard_J(SIZE(Hubbard_J)))
obj%ndim_Hubbard_J = SIZE(Hubbard_J)
obj%Hubbard_J = Hubbard_J
ELSE
obj%Hubbard_J_ispresent = .FALSE.
END IF
IF ( PRESENT(starting_ns)) THEN
obj%starting_ns_ispresent = .TRUE.
ALLOCATE(obj%starting_ns(SIZE(starting_ns)))
obj%ndim_starting_ns = SIZE(starting_ns)
obj%starting_ns = starting_ns
ELSE
obj%starting_ns_ispresent = .FALSE.
END IF
IF ( PRESENT(Hubbard_ns)) THEN
obj%Hubbard_ns_ispresent = .TRUE.
ALLOCATE(obj%Hubbard_ns(SIZE(Hubbard_ns)))
obj%ndim_Hubbard_ns = SIZE(Hubbard_ns)
obj%Hubbard_ns = Hubbard_ns
ELSE
obj%Hubbard_ns_ispresent = .FALSE.
END IF
IF ( PRESENT(U_projection_type)) THEN
obj%U_projection_type_ispresent = .TRUE.
obj%U_projection_type = U_projection_type
ELSE
obj%U_projection_type_ispresent = .FALSE.
END IF
IF ( PRESENT(Hubbard_back)) THEN
obj%Hubbard_back_ispresent = .TRUE.
ALLOCATE(obj%Hubbard_back(SIZE(Hubbard_back)))
obj%ndim_Hubbard_back = SIZE(Hubbard_back)
obj%Hubbard_back = Hubbard_back
ELSE
obj%Hubbard_back_ispresent = .FALSE.
END IF
IF ( PRESENT(Hubbard_U_back)) THEN
obj%Hubbard_U_back_ispresent = .TRUE.
ALLOCATE(obj%Hubbard_U_back(SIZE(Hubbard_U_back)))
obj%ndim_Hubbard_U_back = SIZE(Hubbard_U_back)
obj%Hubbard_U_back = Hubbard_U_back
ELSE
obj%Hubbard_U_back_ispresent = .FALSE.
END IF
IF ( PRESENT(Hubbard_alpha_back)) THEN
obj%Hubbard_alpha_back_ispresent = .TRUE.
ALLOCATE(obj%Hubbard_alpha_back(SIZE(Hubbard_alpha_back)))
obj%ndim_Hubbard_alpha_back = SIZE(Hubbard_alpha_back)
obj%Hubbard_alpha_back = Hubbard_alpha_back
ELSE
obj%Hubbard_alpha_back_ispresent = .FALSE.
END IF
IF ( PRESENT(Hubbard_ns_nc)) THEN
obj%Hubbard_ns_nc_ispresent = .TRUE.
ALLOCATE(obj%Hubbard_ns_nc(SIZE(Hubbard_ns_nc)))
obj%ndim_Hubbard_ns_nc = SIZE(Hubbard_ns_nc)
obj%Hubbard_ns_nc = Hubbard_ns_nc
ELSE
obj%Hubbard_ns_nc_ispresent = .FALSE.
END IF
!
END SUBROUTINE qes_init_dftU
!
!
SUBROUTINE qes_init_HubbardCommon(obj, tagname, specie, HubbardCommon, label)
!
IMPLICIT NONE
!
TYPE(HubbardCommon_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
CHARACTER(LEN=*), INTENT(IN) :: specie
CHARACTER(LEN=*), OPTIONAL, INTENT(IN) :: label
REAL(DP), INTENT(IN) :: HubbardCommon
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
obj%specie = specie
IF (PRESENT(label)) THEN
obj%label_ispresent = .TRUE.
obj%label = label
ELSE
obj%label_ispresent = .FALSE.
END IF
!
obj%HubbardCommon = HubbardCommon
!
END SUBROUTINE qes_init_HubbardCommon
!
!
SUBROUTINE qes_init_HubbardJ(obj, tagname, specie, label, HubbardJ)
!
IMPLICIT NONE
!
TYPE(HubbardJ_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
CHARACTER(LEN=*), INTENT(IN) :: specie
CHARACTER(LEN=*), INTENT(IN) :: label
REAL(DP), DIMENSION(3), INTENT(IN) :: HubbardJ
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
obj%specie = specie
obj%label = label
!
obj%HubbardJ = HubbardJ
!
END SUBROUTINE qes_init_HubbardJ
!
!
SUBROUTINE qes_init_starting_ns(obj, tagname, specie, label, spin, starting_ns)
!
IMPLICIT NONE
!
TYPE(starting_ns_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
REAL(DP), DIMENSION(:), INTENT(IN) :: starting_ns
CHARACTER(LEN=*), INTENT(IN) :: specie
CHARACTER(LEN=*), INTENT(IN) :: label
INTEGER, INTENT(IN) :: spin
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
!
obj%specie = specie
obj%label = label
obj%spin = spin
obj%size = size(starting_ns)
ALLOCATE(obj%starting_ns(obj%size))
obj%starting_ns = starting_ns
!
END SUBROUTINE qes_init_starting_ns
!
!
SUBROUTINE qes_init_Hubbard_ns(obj, tagname, specie, label, spin, index, order, Hubbard_ns)
!
IMPLICIT NONE
!
TYPE(Hubbard_ns_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
CHARACTER(LEN=*), INTENT(IN) :: specie
CHARACTER(LEN=*), INTENT(IN) :: label
INTEGER, INTENT(IN) :: spin
INTEGER, INTENT(IN) :: index
REAL(DP), DIMENSION(:,:), INTENT(IN) :: Hubbard_ns
CHARACTER(LEN=*),INTENT(IN) :: order
INTEGER :: length, i
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
obj%specie = specie
obj%label = label
obj%spin = spin
obj%index = index
!
obj%order = order
length = 1
obj%rank = SIZE(shape(Hubbard_ns))
ALLOCATE ( obj%dims(obj%rank))
obj%dims = shape(Hubbard_ns)
DO i = 1, obj%rank
length = length * obj%dims(i)
END DO
ALLOCATE(obj%Hubbard_ns(length))
obj%Hubbard_ns(1:length) = reshape(Hubbard_ns, [length])
!
END SUBROUTINE qes_init_Hubbard_ns
!
!
SUBROUTINE qes_init_HubbardBack(obj, tagname, species, background, l_number)
!
IMPLICIT NONE
!
TYPE(HubbardBack_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
CHARACTER(LEN=*), INTENT(IN) :: species
CHARACTER(LEN=*),INTENT(IN) :: background
TYPE(backL_type),DIMENSION(:),INTENT(IN) :: l_number
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
obj%species = species
!
obj%background = background
ALLOCATE( obj%l_number(SIZE(l_number)))
obj%ndim_l_number = SIZE(l_number)
obj%l_number = l_number
!
END SUBROUTINE qes_init_HubbardBack
!
!
SUBROUTINE qes_init_backL(obj, tagname, l_index, backL)
!
IMPLICIT NONE
!
TYPE(backL_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
INTEGER, INTENT(IN) :: l_index
INTEGER, INTENT(IN) :: backL
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
obj%l_index = l_index
!
obj%backL = backL
!
END SUBROUTINE qes_init_backL
!
!
SUBROUTINE qes_init_vdW(obj, tagname, vdw_corr, dftd3_version, dftd3_threebody, non_local_term,&
functional, total_energy_term, london_s6, ts_vdw_econv_thr, ts_vdw_isolated,&
london_rcut, xdm_a1, xdm_a2, london_c6)
!
IMPLICIT NONE
!
TYPE(vdW_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
CHARACTER(LEN=*),OPTIONAL,INTENT(IN) :: vdw_corr
INTEGER,OPTIONAL,INTENT(IN) :: dftd3_version
LOGICAL,OPTIONAL,INTENT(IN) :: dftd3_threebody
CHARACTER(LEN=*),OPTIONAL,INTENT(IN) :: non_local_term
CHARACTER(LEN=*),OPTIONAL,INTENT(IN) :: functional
REAL(DP),OPTIONAL,INTENT(IN) :: total_energy_term
REAL(DP),OPTIONAL,INTENT(IN) :: london_s6
REAL(DP),OPTIONAL,INTENT(IN) :: ts_vdw_econv_thr
LOGICAL,OPTIONAL,INTENT(IN) :: ts_vdw_isolated
REAL(DP),OPTIONAL,INTENT(IN) :: london_rcut
REAL(DP),OPTIONAL,INTENT(IN) :: xdm_a1
REAL(DP),OPTIONAL,INTENT(IN) :: xdm_a2
TYPE(HubbardCommon_type),OPTIONAL,DIMENSION(:),INTENT(IN) :: london_c6
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
!
IF ( PRESENT(vdw_corr)) THEN
obj%vdw_corr_ispresent = .TRUE.
obj%vdw_corr = vdw_corr
ELSE
obj%vdw_corr_ispresent = .FALSE.
END IF
IF ( PRESENT(dftd3_version)) THEN
obj%dftd3_version_ispresent = .TRUE.
obj%dftd3_version = dftd3_version
ELSE
obj%dftd3_version_ispresent = .FALSE.
END IF
IF ( PRESENT(dftd3_threebody)) THEN
obj%dftd3_threebody_ispresent = .TRUE.
obj%dftd3_threebody = dftd3_threebody
ELSE
obj%dftd3_threebody_ispresent = .FALSE.
END IF
IF ( PRESENT(non_local_term)) THEN
obj%non_local_term_ispresent = .TRUE.
obj%non_local_term = non_local_term
ELSE
obj%non_local_term_ispresent = .FALSE.
END IF
IF ( PRESENT(functional)) THEN
obj%functional_ispresent = .TRUE.
obj%functional = functional
ELSE
obj%functional_ispresent = .FALSE.
END IF
IF ( PRESENT(total_energy_term)) THEN
obj%total_energy_term_ispresent = .TRUE.
obj%total_energy_term = total_energy_term
ELSE
obj%total_energy_term_ispresent = .FALSE.
END IF
IF ( PRESENT(london_s6)) THEN
obj%london_s6_ispresent = .TRUE.
obj%london_s6 = london_s6
ELSE
obj%london_s6_ispresent = .FALSE.
END IF
IF ( PRESENT(ts_vdw_econv_thr)) THEN
obj%ts_vdw_econv_thr_ispresent = .TRUE.
obj%ts_vdw_econv_thr = ts_vdw_econv_thr
ELSE
obj%ts_vdw_econv_thr_ispresent = .FALSE.
END IF
IF ( PRESENT(ts_vdw_isolated)) THEN
obj%ts_vdw_isolated_ispresent = .TRUE.
obj%ts_vdw_isolated = ts_vdw_isolated
ELSE
obj%ts_vdw_isolated_ispresent = .FALSE.
END IF
IF ( PRESENT(london_rcut)) THEN
obj%london_rcut_ispresent = .TRUE.
obj%london_rcut = london_rcut
ELSE
obj%london_rcut_ispresent = .FALSE.
END IF
IF ( PRESENT(xdm_a1)) THEN
obj%xdm_a1_ispresent = .TRUE.
obj%xdm_a1 = xdm_a1
ELSE
obj%xdm_a1_ispresent = .FALSE.
END IF
IF ( PRESENT(xdm_a2)) THEN
obj%xdm_a2_ispresent = .TRUE.
obj%xdm_a2 = xdm_a2
ELSE
obj%xdm_a2_ispresent = .FALSE.
END IF
IF ( PRESENT(london_c6)) THEN
obj%london_c6_ispresent = .TRUE.
ALLOCATE(obj%london_c6(SIZE(london_c6)))
obj%ndim_london_c6 = SIZE(london_c6)
obj%london_c6 = london_c6
ELSE
obj%london_c6_ispresent = .FALSE.
END IF
!
END SUBROUTINE qes_init_vdW
!
!
SUBROUTINE qes_init_spin(obj, tagname, lsda, noncolin, spinorbit)
!
IMPLICIT NONE
!
TYPE(spin_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
LOGICAL,INTENT(IN) :: lsda
LOGICAL,INTENT(IN) :: noncolin
LOGICAL,INTENT(IN) :: spinorbit
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
!
obj%lsda = lsda
obj%noncolin = noncolin
obj%spinorbit = spinorbit
!
END SUBROUTINE qes_init_spin
!
!
SUBROUTINE qes_init_bands(obj, tagname, occupations, nbnd, smearing, tot_charge, tot_magnetization, inputOccupations)
!
IMPLICIT NONE
!
TYPE(bands_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
INTEGER,OPTIONAL,INTENT(IN) :: nbnd
TYPE(smearing_type),OPTIONAL,INTENT(IN) :: smearing
REAL(DP),OPTIONAL,INTENT(IN) :: tot_charge
REAL(DP),OPTIONAL,INTENT(IN) :: tot_magnetization
TYPE(occupations_type),INTENT(IN) :: occupations
TYPE(inputOccupations_type),OPTIONAL,DIMENSION(:),INTENT(IN) :: inputOccupations
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
!
IF ( PRESENT(nbnd)) THEN
obj%nbnd_ispresent = .TRUE.
obj%nbnd = nbnd
ELSE
obj%nbnd_ispresent = .FALSE.
END IF
IF ( PRESENT(smearing)) THEN
obj%smearing_ispresent = .TRUE.
obj%smearing = smearing
ELSE
obj%smearing_ispresent = .FALSE.
END IF
IF ( PRESENT(tot_charge)) THEN
obj%tot_charge_ispresent = .TRUE.
obj%tot_charge = tot_charge
ELSE
obj%tot_charge_ispresent = .FALSE.
END IF
IF ( PRESENT(tot_magnetization)) THEN
obj%tot_magnetization_ispresent = .TRUE.
obj%tot_magnetization = tot_magnetization
ELSE
obj%tot_magnetization_ispresent = .FALSE.
END IF
obj%occupations = occupations
IF ( PRESENT(inputOccupations)) THEN
obj%inputOccupations_ispresent = .TRUE.
ALLOCATE(obj%inputOccupations(SIZE(inputOccupations)))
obj%ndim_inputOccupations = SIZE(inputOccupations)
obj%inputOccupations = inputOccupations
ELSE
obj%inputOccupations_ispresent = .FALSE.
END IF
!
END SUBROUTINE qes_init_bands
!
!
SUBROUTINE qes_init_smearing(obj, tagname, degauss, smearing)
!
IMPLICIT NONE
!
TYPE(smearing_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
REAL(DP), INTENT(IN) :: degauss
CHARACTER(LEN=*), INTENT(IN) :: smearing
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
obj%degauss = degauss
!
obj%smearing = smearing
!
END SUBROUTINE qes_init_smearing
!
!
SUBROUTINE qes_init_occupations(obj, tagname, occupations, spin)
!
IMPLICIT NONE
!
TYPE(occupations_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
INTEGER, OPTIONAL, INTENT(IN) :: spin
CHARACTER(LEN=*), INTENT(IN) :: occupations
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
IF (PRESENT(spin)) THEN
obj%spin_ispresent = .TRUE.
obj%spin = spin
ELSE
obj%spin_ispresent = .FALSE.
END IF
!
obj%occupations = occupations
!
END SUBROUTINE qes_init_occupations
!
!
SUBROUTINE qes_init_basis(obj, tagname, ecutwfc, gamma_only, ecutrho, fft_grid, fft_smooth, fft_box)
!
IMPLICIT NONE
!
TYPE(basis_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
LOGICAL,OPTIONAL,INTENT(IN) :: gamma_only
REAL(DP),INTENT(IN) :: ecutwfc
REAL(DP),OPTIONAL,INTENT(IN) :: ecutrho
TYPE(basisSetItem_type),OPTIONAL,INTENT(IN) :: fft_grid
TYPE(basisSetItem_type),OPTIONAL,INTENT(IN) :: fft_smooth
TYPE(basisSetItem_type),OPTIONAL,INTENT(IN) :: fft_box
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
!
IF ( PRESENT(gamma_only)) THEN
obj%gamma_only_ispresent = .TRUE.
obj%gamma_only = gamma_only
ELSE
obj%gamma_only_ispresent = .FALSE.
END IF
obj%ecutwfc = ecutwfc
IF ( PRESENT(ecutrho)) THEN
obj%ecutrho_ispresent = .TRUE.
obj%ecutrho = ecutrho
ELSE
obj%ecutrho_ispresent = .FALSE.
END IF
IF ( PRESENT(fft_grid)) THEN
obj%fft_grid_ispresent = .TRUE.
obj%fft_grid = fft_grid
ELSE
obj%fft_grid_ispresent = .FALSE.
END IF
IF ( PRESENT(fft_smooth)) THEN
obj%fft_smooth_ispresent = .TRUE.
obj%fft_smooth = fft_smooth
ELSE
obj%fft_smooth_ispresent = .FALSE.
END IF
IF ( PRESENT(fft_box)) THEN
obj%fft_box_ispresent = .TRUE.
obj%fft_box = fft_box
ELSE
obj%fft_box_ispresent = .FALSE.
END IF
!
END SUBROUTINE qes_init_basis
!
!
SUBROUTINE qes_init_basis_set(obj, tagname, ecutwfc, fft_grid, ngm, npwx, reciprocal_lattice,&
gamma_only, ecutrho, fft_smooth, fft_box, ngms)
!
IMPLICIT NONE
!
TYPE(basis_set_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
LOGICAL,OPTIONAL,INTENT(IN) :: gamma_only
REAL(DP),INTENT(IN) :: ecutwfc
REAL(DP),OPTIONAL,INTENT(IN) :: ecutrho
TYPE(basisSetItem_type),INTENT(IN) :: fft_grid
TYPE(basisSetItem_type),OPTIONAL,INTENT(IN) :: fft_smooth
TYPE(basisSetItem_type),OPTIONAL,INTENT(IN) :: fft_box
INTEGER,INTENT(IN) :: ngm
INTEGER,OPTIONAL,INTENT(IN) :: ngms
INTEGER,INTENT(IN) :: npwx
TYPE(reciprocal_lattice_type),INTENT(IN) :: reciprocal_lattice
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
!
IF ( PRESENT(gamma_only)) THEN
obj%gamma_only_ispresent = .TRUE.
obj%gamma_only = gamma_only
ELSE
obj%gamma_only_ispresent = .FALSE.
END IF
obj%ecutwfc = ecutwfc
IF ( PRESENT(ecutrho)) THEN
obj%ecutrho_ispresent = .TRUE.
obj%ecutrho = ecutrho
ELSE
obj%ecutrho_ispresent = .FALSE.
END IF
obj%fft_grid = fft_grid
IF ( PRESENT(fft_smooth)) THEN
obj%fft_smooth_ispresent = .TRUE.
obj%fft_smooth = fft_smooth
ELSE
obj%fft_smooth_ispresent = .FALSE.
END IF
IF ( PRESENT(fft_box)) THEN
obj%fft_box_ispresent = .TRUE.
obj%fft_box = fft_box
ELSE
obj%fft_box_ispresent = .FALSE.
END IF
obj%ngm = ngm
IF ( PRESENT(ngms)) THEN
obj%ngms_ispresent = .TRUE.
obj%ngms = ngms
ELSE
obj%ngms_ispresent = .FALSE.
END IF
obj%npwx = npwx
obj%reciprocal_lattice = reciprocal_lattice
!
END SUBROUTINE qes_init_basis_set
!
!
SUBROUTINE qes_init_basisSetItem(obj, tagname, nr1, nr2, nr3, basisSetItem)
!
IMPLICIT NONE
!
TYPE(basisSetItem_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
INTEGER, INTENT(IN) :: nr1
INTEGER, INTENT(IN) :: nr2
INTEGER, INTENT(IN) :: nr3
CHARACTER(LEN=*), INTENT(IN) :: basisSetItem
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
obj%nr1 = nr1
obj%nr2 = nr2
obj%nr3 = nr3
!
obj%basisSetItem = basisSetItem
!
END SUBROUTINE qes_init_basisSetItem
!
!
SUBROUTINE qes_init_reciprocal_lattice(obj, tagname, b1, b2, b3)
!
IMPLICIT NONE
!
TYPE(reciprocal_lattice_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
REAL(DP), DIMENSION(3),INTENT(IN) :: b1
REAL(DP), DIMENSION(3),INTENT(IN) :: b2
REAL(DP), DIMENSION(3),INTENT(IN) :: b3
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
!
obj%b1 = b1
obj%b2 = b2
obj%b3 = b3
!
END SUBROUTINE qes_init_reciprocal_lattice
!
!
SUBROUTINE qes_init_electron_control(obj, tagname, diagonalization, mixing_mode, mixing_beta,&
conv_thr, mixing_ndim, max_nstep, tq_smoothing, tbeta_smoothing,&
diago_thr_init, diago_full_acc, real_space_q, real_space_beta,&
diago_cg_maxiter, diago_ppcg_maxiter, diago_david_ndim)
!
IMPLICIT NONE
!
TYPE(electron_control_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
CHARACTER(LEN=*),INTENT(IN) :: diagonalization
CHARACTER(LEN=*),INTENT(IN) :: mixing_mode
REAL(DP),INTENT(IN) :: mixing_beta
REAL(DP),INTENT(IN) :: conv_thr
INTEGER,INTENT(IN) :: mixing_ndim
INTEGER,INTENT(IN) :: max_nstep
LOGICAL,OPTIONAL,INTENT(IN) :: real_space_q
LOGICAL,OPTIONAL,INTENT(IN) :: real_space_beta
LOGICAL,INTENT(IN) :: tq_smoothing
LOGICAL,INTENT(IN) :: tbeta_smoothing
REAL(DP),INTENT(IN) :: diago_thr_init
LOGICAL,INTENT(IN) :: diago_full_acc
INTEGER,OPTIONAL,INTENT(IN) :: diago_cg_maxiter
INTEGER,OPTIONAL,INTENT(IN) :: diago_ppcg_maxiter
INTEGER,OPTIONAL,INTENT(IN) :: diago_david_ndim
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
!
obj%diagonalization = diagonalization
obj%mixing_mode = mixing_mode
obj%mixing_beta = mixing_beta
obj%conv_thr = conv_thr
obj%mixing_ndim = mixing_ndim
obj%max_nstep = max_nstep
IF ( PRESENT(real_space_q)) THEN
obj%real_space_q_ispresent = .TRUE.
obj%real_space_q = real_space_q
ELSE
obj%real_space_q_ispresent = .FALSE.
END IF
IF ( PRESENT(real_space_beta)) THEN
obj%real_space_beta_ispresent = .TRUE.
obj%real_space_beta = real_space_beta
ELSE
obj%real_space_beta_ispresent = .FALSE.
END IF
obj%tq_smoothing = tq_smoothing
obj%tbeta_smoothing = tbeta_smoothing
obj%diago_thr_init = diago_thr_init
obj%diago_full_acc = diago_full_acc
IF ( PRESENT(diago_cg_maxiter)) THEN
obj%diago_cg_maxiter_ispresent = .TRUE.
obj%diago_cg_maxiter = diago_cg_maxiter
ELSE
obj%diago_cg_maxiter_ispresent = .FALSE.
END IF
IF ( PRESENT(diago_ppcg_maxiter)) THEN
obj%diago_ppcg_maxiter_ispresent = .TRUE.
obj%diago_ppcg_maxiter = diago_ppcg_maxiter
ELSE
obj%diago_ppcg_maxiter_ispresent = .FALSE.
END IF
IF ( PRESENT(diago_david_ndim)) THEN
obj%diago_david_ndim_ispresent = .TRUE.
obj%diago_david_ndim = diago_david_ndim
ELSE
obj%diago_david_ndim_ispresent = .FALSE.
END IF
!
END SUBROUTINE qes_init_electron_control
!
!
SUBROUTINE qes_init_k_points_IBZ(obj, tagname, monkhorst_pack, nk, k_point)
!
IMPLICIT NONE
!
TYPE(k_points_IBZ_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
TYPE(monkhorst_pack_type),OPTIONAL,INTENT(IN) :: monkhorst_pack
INTEGER,OPTIONAL,INTENT(IN) :: nk
TYPE(k_point_type),OPTIONAL,DIMENSION(:),INTENT(IN) :: k_point
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
!
IF ( PRESENT(monkhorst_pack)) THEN
obj%monkhorst_pack_ispresent = .TRUE.
obj%monkhorst_pack = monkhorst_pack
ELSE
obj%monkhorst_pack_ispresent = .FALSE.
END IF
IF ( PRESENT(nk)) THEN
obj%nk_ispresent = .TRUE.
obj%nk = nk
ELSE
obj%nk_ispresent = .FALSE.
END IF
IF ( PRESENT(k_point)) THEN
obj%k_point_ispresent = .TRUE.
ALLOCATE(obj%k_point(SIZE(k_point)))
obj%ndim_k_point = SIZE(k_point)
obj%k_point = k_point
ELSE
obj%k_point_ispresent = .FALSE.
END IF
!
END SUBROUTINE qes_init_k_points_IBZ
!
!
SUBROUTINE qes_init_monkhorst_pack(obj, tagname, nk1, nk2, nk3, k1, k2, k3, monkhorst_pack)
!
IMPLICIT NONE
!
TYPE(monkhorst_pack_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
INTEGER, INTENT(IN) :: nk1
INTEGER, INTENT(IN) :: nk2
INTEGER, INTENT(IN) :: nk3
INTEGER, INTENT(IN) :: k1
INTEGER, INTENT(IN) :: k2
INTEGER, INTENT(IN) :: k3
CHARACTER(LEN=*), INTENT(IN) :: monkhorst_pack
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
obj%nk1 = nk1
obj%nk2 = nk2
obj%nk3 = nk3
obj%k1 = k1
obj%k2 = k2
obj%k3 = k3
!
obj%monkhorst_pack = monkhorst_pack
!
END SUBROUTINE qes_init_monkhorst_pack
!
!
SUBROUTINE qes_init_k_point(obj, tagname, k_point, weight, label)
!
IMPLICIT NONE
!
TYPE(k_point_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
REAL(DP), OPTIONAL, INTENT(IN) :: weight
CHARACTER(LEN=*), OPTIONAL, INTENT(IN) :: label
REAL(DP), DIMENSION(3), INTENT(IN) :: k_point
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
IF (PRESENT(weight)) THEN
obj%weight_ispresent = .TRUE.
obj%weight = weight
ELSE
obj%weight_ispresent = .FALSE.
END IF
IF (PRESENT(label)) THEN
obj%label_ispresent = .TRUE.
obj%label = label
ELSE
obj%label_ispresent = .FALSE.
END IF
!
obj%k_point = k_point
!
END SUBROUTINE qes_init_k_point
!
!
SUBROUTINE qes_init_ion_control(obj, tagname, ion_dynamics, upscale, remove_rigid_rot, refold_pos,&
bfgs, md)
!
IMPLICIT NONE
!
TYPE(ion_control_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
CHARACTER(LEN=*),INTENT(IN) :: ion_dynamics
REAL(DP),OPTIONAL,INTENT(IN) :: upscale
LOGICAL,OPTIONAL,INTENT(IN) :: remove_rigid_rot
LOGICAL,OPTIONAL,INTENT(IN) :: refold_pos
TYPE(bfgs_type),OPTIONAL,INTENT(IN) :: bfgs
TYPE(md_type),OPTIONAL,INTENT(IN) :: md
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
!
obj%ion_dynamics = ion_dynamics
IF ( PRESENT(upscale)) THEN
obj%upscale_ispresent = .TRUE.
obj%upscale = upscale
ELSE
obj%upscale_ispresent = .FALSE.
END IF
IF ( PRESENT(remove_rigid_rot)) THEN
obj%remove_rigid_rot_ispresent = .TRUE.
obj%remove_rigid_rot = remove_rigid_rot
ELSE
obj%remove_rigid_rot_ispresent = .FALSE.
END IF
IF ( PRESENT(refold_pos)) THEN
obj%refold_pos_ispresent = .TRUE.
obj%refold_pos = refold_pos
ELSE
obj%refold_pos_ispresent = .FALSE.
END IF
IF ( PRESENT(bfgs)) THEN
obj%bfgs_ispresent = .TRUE.
obj%bfgs = bfgs
ELSE
obj%bfgs_ispresent = .FALSE.
END IF
IF ( PRESENT(md)) THEN
obj%md_ispresent = .TRUE.
obj%md = md
ELSE
obj%md_ispresent = .FALSE.
END IF
!
END SUBROUTINE qes_init_ion_control
!
!
SUBROUTINE qes_init_bfgs(obj, tagname, ndim, trust_radius_min, trust_radius_max, trust_radius_init,&
w1, w2)
!
IMPLICIT NONE
!
TYPE(bfgs_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
INTEGER,INTENT(IN) :: ndim
REAL(DP),INTENT(IN) :: trust_radius_min
REAL(DP),INTENT(IN) :: trust_radius_max
REAL(DP),INTENT(IN) :: trust_radius_init
REAL(DP),INTENT(IN) :: w1
REAL(DP),INTENT(IN) :: w2
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
!
obj%ndim = ndim
obj%trust_radius_min = trust_radius_min
obj%trust_radius_max = trust_radius_max
obj%trust_radius_init = trust_radius_init
obj%w1 = w1
obj%w2 = w2
!
END SUBROUTINE qes_init_bfgs
!
!
SUBROUTINE qes_init_md(obj, tagname, pot_extrapolation, wfc_extrapolation, ion_temperature,&
timestep, tempw, tolp, deltaT, nraise)
!
IMPLICIT NONE
!
TYPE(md_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
CHARACTER(LEN=*),INTENT(IN) :: pot_extrapolation
CHARACTER(LEN=*),INTENT(IN) :: wfc_extrapolation
CHARACTER(LEN=*),INTENT(IN) :: ion_temperature
REAL(DP),INTENT(IN) :: timestep
REAL(DP),INTENT(IN) :: tempw
REAL(DP),INTENT(IN) :: tolp
REAL(DP),INTENT(IN) :: deltaT
INTEGER,INTENT(IN) :: nraise
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
!
obj%pot_extrapolation = pot_extrapolation
obj%wfc_extrapolation = wfc_extrapolation
obj%ion_temperature = ion_temperature
obj%timestep = timestep
obj%tempw = tempw
obj%tolp = tolp
obj%deltaT = deltaT
obj%nraise = nraise
!
END SUBROUTINE qes_init_md
!
!
SUBROUTINE qes_init_cell_control(obj, tagname, cell_dynamics, pressure, wmass, cell_factor,&
fix_volume, fix_area, isotropic, free_cell)
!
IMPLICIT NONE
!
TYPE(cell_control_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
CHARACTER(LEN=*),INTENT(IN) :: cell_dynamics
REAL(DP),INTENT(IN) :: pressure
REAL(DP),OPTIONAL,INTENT(IN) :: wmass
REAL(DP),OPTIONAL,INTENT(IN) :: cell_factor
LOGICAL,OPTIONAL,INTENT(IN) :: fix_volume
LOGICAL,OPTIONAL,INTENT(IN) :: fix_area
LOGICAL,OPTIONAL,INTENT(IN) :: isotropic
TYPE(integerMatrix_type),OPTIONAL,INTENT(IN) :: free_cell
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
!
obj%cell_dynamics = cell_dynamics
obj%pressure = pressure
IF ( PRESENT(wmass)) THEN
obj%wmass_ispresent = .TRUE.
obj%wmass = wmass
ELSE
obj%wmass_ispresent = .FALSE.
END IF
IF ( PRESENT(cell_factor)) THEN
obj%cell_factor_ispresent = .TRUE.
obj%cell_factor = cell_factor
ELSE
obj%cell_factor_ispresent = .FALSE.
END IF
IF ( PRESENT(fix_volume)) THEN
obj%fix_volume_ispresent = .TRUE.
obj%fix_volume = fix_volume
ELSE
obj%fix_volume_ispresent = .FALSE.
END IF
IF ( PRESENT(fix_area)) THEN
obj%fix_area_ispresent = .TRUE.
obj%fix_area = fix_area
ELSE
obj%fix_area_ispresent = .FALSE.
END IF
IF ( PRESENT(isotropic)) THEN
obj%isotropic_ispresent = .TRUE.
obj%isotropic = isotropic
ELSE
obj%isotropic_ispresent = .FALSE.
END IF
IF ( PRESENT(free_cell)) THEN
obj%free_cell_ispresent = .TRUE.
obj%free_cell = free_cell
ELSE
obj%free_cell_ispresent = .FALSE.
END IF
!
END SUBROUTINE qes_init_cell_control
!
!
SUBROUTINE qes_init_symmetry_flags(obj, tagname, nosym, nosym_evc, noinv, no_t_rev, force_symmorphic, use_all_frac)
!
IMPLICIT NONE
!
TYPE(symmetry_flags_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
LOGICAL,INTENT(IN) :: nosym
LOGICAL,INTENT(IN) :: nosym_evc
LOGICAL,INTENT(IN) :: noinv
LOGICAL,INTENT(IN) :: no_t_rev
LOGICAL,INTENT(IN) :: force_symmorphic
LOGICAL,INTENT(IN) :: use_all_frac
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
!
obj%nosym = nosym
obj%nosym_evc = nosym_evc
obj%noinv = noinv
obj%no_t_rev = no_t_rev
obj%force_symmorphic = force_symmorphic
obj%use_all_frac = use_all_frac
!
END SUBROUTINE qes_init_symmetry_flags
!
!
SUBROUTINE qes_init_boundary_conditions(obj, tagname, assume_isolated, esm, fcp, fcp_mu)
!
IMPLICIT NONE
!
TYPE(boundary_conditions_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
CHARACTER(LEN=*),INTENT(IN) :: assume_isolated
TYPE(esm_type),OPTIONAL,INTENT(IN) :: esm
LOGICAL,OPTIONAL,INTENT(IN) :: fcp
REAL(DP),OPTIONAL,INTENT(IN) :: fcp_mu
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
!
obj%assume_isolated = assume_isolated
IF ( PRESENT(esm)) THEN
obj%esm_ispresent = .TRUE.
obj%esm = esm
ELSE
obj%esm_ispresent = .FALSE.
END IF
IF ( PRESENT(fcp)) THEN
obj%fcp_ispresent = .TRUE.
obj%fcp = fcp
ELSE
obj%fcp_ispresent = .FALSE.
END IF
IF ( PRESENT(fcp_mu)) THEN
obj%fcp_mu_ispresent = .TRUE.
obj%fcp_mu = fcp_mu
ELSE
obj%fcp_mu_ispresent = .FALSE.
END IF
!
END SUBROUTINE qes_init_boundary_conditions
!
!
SUBROUTINE qes_init_esm(obj, tagname, bc, nfit, w, efield)
!
IMPLICIT NONE
!
TYPE(esm_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
CHARACTER(LEN=*),INTENT(IN) :: bc
INTEGER,INTENT(IN) :: nfit
REAL(DP),INTENT(IN) :: w
REAL(DP),INTENT(IN) :: efield
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
!
obj%bc = bc
obj%nfit = nfit
obj%w = w
obj%efield = efield
!
END SUBROUTINE qes_init_esm
!
!
SUBROUTINE qes_init_ekin_functional(obj, tagname, ecfixed, qcutz, q2sigma)
!
IMPLICIT NONE
!
TYPE(ekin_functional_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
REAL(DP),INTENT(IN) :: ecfixed
REAL(DP),INTENT(IN) :: qcutz
REAL(DP),INTENT(IN) :: q2sigma
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
!
obj%ecfixed = ecfixed
obj%qcutz = qcutz
obj%q2sigma = q2sigma
!
END SUBROUTINE qes_init_ekin_functional
!
!
SUBROUTINE qes_init_spin_constraints(obj, tagname, spin_constraints, lagrange_multiplier, target_magnetization)
!
IMPLICIT NONE
!
TYPE(spin_constraints_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
CHARACTER(LEN=*),INTENT(IN) :: spin_constraints
REAL(DP),INTENT(IN) :: lagrange_multiplier
REAL(DP), DIMENSION(3),OPTIONAL,INTENT(IN) :: target_magnetization
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
!
obj%spin_constraints = spin_constraints
obj%lagrange_multiplier = lagrange_multiplier
IF ( PRESENT(target_magnetization)) THEN
obj%target_magnetization_ispresent = .TRUE.
obj%target_magnetization = target_magnetization
ELSE
obj%target_magnetization_ispresent = .FALSE.
END IF
!
END SUBROUTINE qes_init_spin_constraints
!
!
SUBROUTINE qes_init_electric_field(obj, tagname, electric_potential, dipole_correction, gate_settings,&
electric_field_direction, potential_max_position, potential_decrease_width,&
electric_field_amplitude, electric_field_vector, nk_per_string, n_berry_cycles &
)
!
IMPLICIT NONE
!
TYPE(electric_field_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
CHARACTER(LEN=*),INTENT(IN) :: electric_potential
LOGICAL,OPTIONAL,INTENT(IN) :: dipole_correction
TYPE(gate_settings_type),OPTIONAL,INTENT(IN) :: gate_settings
INTEGER,OPTIONAL,INTENT(IN) :: electric_field_direction
REAL(DP),OPTIONAL,INTENT(IN) :: potential_max_position
REAL(DP),OPTIONAL,INTENT(IN) :: potential_decrease_width
REAL(DP),OPTIONAL,INTENT(IN) :: electric_field_amplitude
REAL(DP), DIMENSION(3),OPTIONAL,INTENT(IN) :: electric_field_vector
INTEGER,OPTIONAL,INTENT(IN) :: nk_per_string
INTEGER,OPTIONAL,INTENT(IN) :: n_berry_cycles
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
!
obj%electric_potential = electric_potential
IF ( PRESENT(dipole_correction)) THEN
obj%dipole_correction_ispresent = .TRUE.
obj%dipole_correction = dipole_correction
ELSE
obj%dipole_correction_ispresent = .FALSE.
END IF
IF ( PRESENT(gate_settings)) THEN
obj%gate_settings_ispresent = .TRUE.
obj%gate_settings = gate_settings
ELSE
obj%gate_settings_ispresent = .FALSE.
END IF
IF ( PRESENT(electric_field_direction)) THEN
obj%electric_field_direction_ispresent = .TRUE.
obj%electric_field_direction = electric_field_direction
ELSE
obj%electric_field_direction_ispresent = .FALSE.
END IF
IF ( PRESENT(potential_max_position)) THEN
obj%potential_max_position_ispresent = .TRUE.
obj%potential_max_position = potential_max_position
ELSE
obj%potential_max_position_ispresent = .FALSE.
END IF
IF ( PRESENT(potential_decrease_width)) THEN
obj%potential_decrease_width_ispresent = .TRUE.
obj%potential_decrease_width = potential_decrease_width
ELSE
obj%potential_decrease_width_ispresent = .FALSE.
END IF
IF ( PRESENT(electric_field_amplitude)) THEN
obj%electric_field_amplitude_ispresent = .TRUE.
obj%electric_field_amplitude = electric_field_amplitude
ELSE
obj%electric_field_amplitude_ispresent = .FALSE.
END IF
IF ( PRESENT(electric_field_vector)) THEN
obj%electric_field_vector_ispresent = .TRUE.
obj%electric_field_vector = electric_field_vector
ELSE
obj%electric_field_vector_ispresent = .FALSE.
END IF
IF ( PRESENT(nk_per_string)) THEN
obj%nk_per_string_ispresent = .TRUE.
obj%nk_per_string = nk_per_string
ELSE
obj%nk_per_string_ispresent = .FALSE.
END IF
IF ( PRESENT(n_berry_cycles)) THEN
obj%n_berry_cycles_ispresent = .TRUE.
obj%n_berry_cycles = n_berry_cycles
ELSE
obj%n_berry_cycles_ispresent = .FALSE.
END IF
!
END SUBROUTINE qes_init_electric_field
!
!
SUBROUTINE qes_init_gate_settings(obj, tagname, use_gate, zgate, relaxz, block, block_1, block_2, block_height)
!
IMPLICIT NONE
!
TYPE(gate_settings_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
LOGICAL,INTENT(IN) :: use_gate
REAL(DP),OPTIONAL,INTENT(IN) :: zgate
LOGICAL,OPTIONAL,INTENT(IN) :: relaxz
LOGICAL,OPTIONAL,INTENT(IN) :: block
REAL(DP),OPTIONAL,INTENT(IN) :: block_1
REAL(DP),OPTIONAL,INTENT(IN) :: block_2
REAL(DP),OPTIONAL,INTENT(IN) :: block_height
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
!
obj%use_gate = use_gate
IF ( PRESENT(zgate)) THEN
obj%zgate_ispresent = .TRUE.
obj%zgate = zgate
ELSE
obj%zgate_ispresent = .FALSE.
END IF
IF ( PRESENT(relaxz)) THEN
obj%relaxz_ispresent = .TRUE.
obj%relaxz = relaxz
ELSE
obj%relaxz_ispresent = .FALSE.
END IF
IF ( PRESENT(block)) THEN
obj%block_ispresent = .TRUE.
obj%block = block
ELSE
obj%block_ispresent = .FALSE.
END IF
IF ( PRESENT(block_1)) THEN
obj%block_1_ispresent = .TRUE.
obj%block_1 = block_1
ELSE
obj%block_1_ispresent = .FALSE.
END IF
IF ( PRESENT(block_2)) THEN
obj%block_2_ispresent = .TRUE.
obj%block_2 = block_2
ELSE
obj%block_2_ispresent = .FALSE.
END IF
IF ( PRESENT(block_height)) THEN
obj%block_height_ispresent = .TRUE.
obj%block_height = block_height
ELSE
obj%block_height_ispresent = .FALSE.
END IF
!
END SUBROUTINE qes_init_gate_settings
!
!
SUBROUTINE qes_init_atomic_constraints(obj, tagname, num_of_constraints, tolerance, atomic_constraint)
!
IMPLICIT NONE
!
TYPE(atomic_constraints_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
INTEGER,INTENT(IN) :: num_of_constraints
REAL(DP),INTENT(IN) :: tolerance
TYPE(atomic_constraint_type),DIMENSION(:),INTENT(IN) :: atomic_constraint
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
!
obj%num_of_constraints = num_of_constraints
obj%tolerance = tolerance
ALLOCATE( obj%atomic_constraint(SIZE(atomic_constraint)))
obj%ndim_atomic_constraint = SIZE(atomic_constraint)
obj%atomic_constraint = atomic_constraint
!
END SUBROUTINE qes_init_atomic_constraints
!
!
SUBROUTINE qes_init_atomic_constraint(obj, tagname, constr_parms, constr_type, constr_target)
!
IMPLICIT NONE
!
TYPE(atomic_constraint_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
REAL(DP), DIMENSION(4),INTENT(IN) :: constr_parms
CHARACTER(LEN=*),INTENT(IN) :: constr_type
REAL(DP),INTENT(IN) :: constr_target
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
!
obj%constr_parms = constr_parms
obj%constr_type = constr_type
obj%constr_target = constr_target
!
END SUBROUTINE qes_init_atomic_constraint
!
!
SUBROUTINE qes_init_inputOccupations(obj, tagname, ispin, spin_factor, inputOccupations)
!
IMPLICIT NONE
!
TYPE(inputOccupations_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
REAL(DP), DIMENSION(:), INTENT(IN) :: inputOccupations
INTEGER, INTENT(IN) :: ispin
REAL(DP), INTENT(IN) :: spin_factor
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
!
obj%ispin = ispin
obj%spin_factor = spin_factor
obj%size = size(inputOccupations)
ALLOCATE(obj%inputOccupations(obj%size))
obj%inputOccupations = inputOccupations
!
END SUBROUTINE qes_init_inputOccupations
!
!
SUBROUTINE qes_init_outputElectricField(obj, tagname, BerryPhase, finiteElectricFieldInfo, dipoleInfo, gateInfo)
!
IMPLICIT NONE
!
TYPE(outputElectricField_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
TYPE(BerryPhaseOutput_type),OPTIONAL,INTENT(IN) :: BerryPhase
TYPE(finiteFieldOut_type),OPTIONAL,INTENT(IN) :: finiteElectricFieldInfo
TYPE(dipoleOutput_type),OPTIONAL,INTENT(IN) :: dipoleInfo
TYPE(gateInfo_type),OPTIONAL,INTENT(IN) :: gateInfo
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
!
IF ( PRESENT(BerryPhase)) THEN
obj%BerryPhase_ispresent = .TRUE.
obj%BerryPhase = BerryPhase
ELSE
obj%BerryPhase_ispresent = .FALSE.
END IF
IF ( PRESENT(finiteElectricFieldInfo)) THEN
obj%finiteElectricFieldInfo_ispresent = .TRUE.
obj%finiteElectricFieldInfo = finiteElectricFieldInfo
ELSE
obj%finiteElectricFieldInfo_ispresent = .FALSE.
END IF
IF ( PRESENT(dipoleInfo)) THEN
obj%dipoleInfo_ispresent = .TRUE.
obj%dipoleInfo = dipoleInfo
ELSE
obj%dipoleInfo_ispresent = .FALSE.
END IF
IF ( PRESENT(gateInfo)) THEN
obj%gateInfo_ispresent = .TRUE.
obj%gateInfo = gateInfo
ELSE
obj%gateInfo_ispresent = .FALSE.
END IF
!
END SUBROUTINE qes_init_outputElectricField
!
!
SUBROUTINE qes_init_BerryPhaseOutput(obj, tagname, totalPolarization, totalPhase, ionicPolarization, electronicPolarization)
!
IMPLICIT NONE
!
TYPE(BerryPhaseOutput_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
TYPE(polarization_type),INTENT(IN) :: totalPolarization
TYPE(phase_type),INTENT(IN) :: totalPhase
TYPE(ionicPolarization_type),DIMENSION(:),INTENT(IN) :: ionicPolarization
TYPE(electronicPolarization_type),DIMENSION(:),INTENT(IN) :: electronicPolarization
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
!
obj%totalPolarization = totalPolarization
obj%totalPhase = totalPhase
ALLOCATE( obj%ionicPolarization(SIZE(ionicPolarization)))
obj%ndim_ionicPolarization = SIZE(ionicPolarization)
obj%ionicPolarization = ionicPolarization
ALLOCATE( obj%electronicPolarization(SIZE(electronicPolarization)))
obj%ndim_electronicPolarization = SIZE(electronicPolarization)
obj%electronicPolarization = electronicPolarization
!
END SUBROUTINE qes_init_BerryPhaseOutput
!
!
SUBROUTINE qes_init_dipoleOutput(obj, tagname, idir, dipole, ion_dipole, elec_dipole, dipoleField,&
potentialAmp, totalLength)
!
IMPLICIT NONE
!
TYPE(dipoleOutput_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
INTEGER,INTENT(IN) :: idir
TYPE(scalarQuantity_type),INTENT(IN) :: dipole
TYPE(scalarQuantity_type),INTENT(IN) :: ion_dipole
TYPE(scalarQuantity_type),INTENT(IN) :: elec_dipole
TYPE(scalarQuantity_type),INTENT(IN) :: dipoleField
TYPE(scalarQuantity_type),INTENT(IN) :: potentialAmp
TYPE(scalarQuantity_type),INTENT(IN) :: totalLength
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
!
obj%idir = idir
obj%dipole = dipole
obj%ion_dipole = ion_dipole
obj%elec_dipole = elec_dipole
obj%dipoleField = dipoleField
obj%potentialAmp = potentialAmp
obj%totalLength = totalLength
!
END SUBROUTINE qes_init_dipoleOutput
!
!
SUBROUTINE qes_init_finiteFieldOut(obj, tagname, electronicDipole, ionicDipole)
!
IMPLICIT NONE
!
TYPE(finiteFieldOut_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
REAL(DP), DIMENSION(3),INTENT(IN) :: electronicDipole
REAL(DP), DIMENSION(3),INTENT(IN) :: ionicDipole
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
!
obj%electronicDipole = electronicDipole
obj%ionicDipole = ionicDipole
!
END SUBROUTINE qes_init_finiteFieldOut
!
!
SUBROUTINE qes_init_polarization(obj, tagname, polarization, modulus, direction)
!
IMPLICIT NONE
!
TYPE(polarization_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
TYPE(scalarQuantity_type),INTENT(IN) :: polarization
REAL(DP),INTENT(IN) :: modulus
REAL(DP), DIMENSION(3),INTENT(IN) :: direction
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
!
obj%polarization = polarization
obj%modulus = modulus
obj%direction = direction
!
END SUBROUTINE qes_init_polarization
!
!
SUBROUTINE qes_init_ionicPolarization(obj, tagname, ion, charge, phase)
!
IMPLICIT NONE
!
TYPE(ionicPolarization_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
TYPE(atom_type),INTENT(IN) :: ion
REAL(DP),INTENT(IN) :: charge
TYPE(phase_type),INTENT(IN) :: phase
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
!
obj%ion = ion
obj%charge = charge
obj%phase = phase
!
END SUBROUTINE qes_init_ionicPolarization
!
!
SUBROUTINE qes_init_electronicPolarization(obj, tagname, firstKeyPoint, phase, spin)
!
IMPLICIT NONE
!
TYPE(electronicPolarization_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
TYPE(k_point_type),INTENT(IN) :: firstKeyPoint
INTEGER,OPTIONAL,INTENT(IN) :: spin
TYPE(phase_type),INTENT(IN) :: phase
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
!
obj%firstKeyPoint = firstKeyPoint
IF ( PRESENT(spin)) THEN
obj%spin_ispresent = .TRUE.
obj%spin = spin
ELSE
obj%spin_ispresent = .FALSE.
END IF
obj%phase = phase
!
END SUBROUTINE qes_init_electronicPolarization
!
!
SUBROUTINE qes_init_phase(obj, tagname, phase, ionic, electronic, modulus)
!
IMPLICIT NONE
!
TYPE(phase_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
REAL(DP), OPTIONAL, INTENT(IN) :: ionic
REAL(DP), OPTIONAL, INTENT(IN) :: electronic
CHARACTER(LEN=*), OPTIONAL, INTENT(IN) :: modulus
REAL(DP), INTENT(IN) :: phase
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
IF (PRESENT(ionic)) THEN
obj%ionic_ispresent = .TRUE.
obj%ionic = ionic
ELSE
obj%ionic_ispresent = .FALSE.
END IF
IF (PRESENT(electronic)) THEN
obj%electronic_ispresent = .TRUE.
obj%electronic = electronic
ELSE
obj%electronic_ispresent = .FALSE.
END IF
IF (PRESENT(modulus)) THEN
obj%modulus_ispresent = .TRUE.
obj%modulus = modulus
ELSE
obj%modulus_ispresent = .FALSE.
END IF
!
obj%phase = phase
!
END SUBROUTINE qes_init_phase
!
!
SUBROUTINE qes_init_gateInfo(obj, tagname, pot_prefactor, gate_zpos, gate_gate_term, gatefieldEnergy)
!
IMPLICIT NONE
!
TYPE(gateInfo_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
REAL(DP),INTENT(IN) :: pot_prefactor
REAL(DP),INTENT(IN) :: gate_zpos
REAL(DP),INTENT(IN) :: gate_gate_term
REAL(DP),INTENT(IN) :: gatefieldEnergy
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
!
obj%pot_prefactor = pot_prefactor
obj%gate_zpos = gate_zpos
obj%gate_gate_term = gate_gate_term
obj%gatefieldEnergy = gatefieldEnergy
!
END SUBROUTINE qes_init_gateInfo
!
!
SUBROUTINE qes_init_convergence_info(obj, tagname, scf_conv, opt_conv)
!
IMPLICIT NONE
!
TYPE(convergence_info_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
TYPE(scf_conv_type),INTENT(IN) :: scf_conv
TYPE(opt_conv_type),OPTIONAL,INTENT(IN) :: opt_conv
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
!
obj%scf_conv = scf_conv
IF ( PRESENT(opt_conv)) THEN
obj%opt_conv_ispresent = .TRUE.
obj%opt_conv = opt_conv
ELSE
obj%opt_conv_ispresent = .FALSE.
END IF
!
END SUBROUTINE qes_init_convergence_info
!
!
SUBROUTINE qes_init_scf_conv(obj, tagname, convergence_achieved, n_scf_steps, scf_error)
!
IMPLICIT NONE
!
TYPE(scf_conv_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
LOGICAL,INTENT(IN) :: convergence_achieved
INTEGER,INTENT(IN) :: n_scf_steps
REAL(DP),INTENT(IN) :: scf_error
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
!
obj%convergence_achieved = convergence_achieved
obj%n_scf_steps = n_scf_steps
obj%scf_error = scf_error
!
END SUBROUTINE qes_init_scf_conv
!
!
SUBROUTINE qes_init_opt_conv(obj, tagname, convergence_achieved, n_opt_steps, grad_norm)
!
IMPLICIT NONE
!
TYPE(opt_conv_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
LOGICAL,INTENT(IN) :: convergence_achieved
INTEGER,INTENT(IN) :: n_opt_steps
REAL(DP),INTENT(IN) :: grad_norm
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
!
obj%convergence_achieved = convergence_achieved
obj%n_opt_steps = n_opt_steps
obj%grad_norm = grad_norm
!
END SUBROUTINE qes_init_opt_conv
!
!
SUBROUTINE qes_init_algorithmic_info(obj, tagname, real_space_q, uspp, paw, real_space_beta)
!
IMPLICIT NONE
!
TYPE(algorithmic_info_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
LOGICAL,INTENT(IN) :: real_space_q
LOGICAL,OPTIONAL,INTENT(IN) :: real_space_beta
LOGICAL,INTENT(IN) :: uspp
LOGICAL,INTENT(IN) :: paw
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
!
obj%real_space_q = real_space_q
IF ( PRESENT(real_space_beta)) THEN
obj%real_space_beta_ispresent = .TRUE.
obj%real_space_beta = real_space_beta
ELSE
obj%real_space_beta_ispresent = .FALSE.
END IF
obj%uspp = uspp
obj%paw = paw
!
END SUBROUTINE qes_init_algorithmic_info
!
!
SUBROUTINE qes_init_symmetries(obj, tagname, nsym, nrot, space_group, symmetry)
!
IMPLICIT NONE
!
TYPE(symmetries_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
INTEGER,INTENT(IN) :: nsym
INTEGER,INTENT(IN) :: nrot
INTEGER,INTENT(IN) :: space_group
TYPE(symmetry_type),DIMENSION(:),INTENT(IN) :: symmetry
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
!
obj%nsym = nsym
obj%nrot = nrot
obj%space_group = space_group
ALLOCATE( obj%symmetry(SIZE(symmetry)))
obj%ndim_symmetry = SIZE(symmetry)
obj%symmetry = symmetry
!
END SUBROUTINE qes_init_symmetries
!
!
SUBROUTINE qes_init_symmetry(obj, tagname, info, rotation, fractional_translation, equivalent_atoms)
!
IMPLICIT NONE
!
TYPE(symmetry_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
TYPE(info_type),INTENT(IN) :: info
TYPE(matrix_type),INTENT(IN) :: rotation
REAL(DP), DIMENSION(3),OPTIONAL,INTENT(IN) :: fractional_translation
TYPE(equivalent_atoms_type),OPTIONAL,INTENT(IN) :: equivalent_atoms
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
!
obj%info = info
obj%rotation = rotation
IF ( PRESENT(fractional_translation)) THEN
obj%fractional_translation_ispresent = .TRUE.
obj%fractional_translation = fractional_translation
ELSE
obj%fractional_translation_ispresent = .FALSE.
END IF
IF ( PRESENT(equivalent_atoms)) THEN
obj%equivalent_atoms_ispresent = .TRUE.
obj%equivalent_atoms = equivalent_atoms
ELSE
obj%equivalent_atoms_ispresent = .FALSE.
END IF
!
END SUBROUTINE qes_init_symmetry
!
!
SUBROUTINE qes_init_equivalent_atoms(obj, tagname, nat, equivalent_atoms)
!
IMPLICIT NONE
!
TYPE(equivalent_atoms_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
INTEGER, DIMENSION(:), INTENT(IN) :: equivalent_atoms
INTEGER, INTENT(IN) :: nat
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
!
obj%nat = nat
obj%size = size(equivalent_atoms)
ALLOCATE(obj%equivalent_atoms(obj%size))
obj%equivalent_atoms = equivalent_atoms
!
END SUBROUTINE qes_init_equivalent_atoms
!
!
SUBROUTINE qes_init_info(obj, tagname, info, name, class, time_reversal)
!
IMPLICIT NONE
!
TYPE(info_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
CHARACTER(LEN=*), OPTIONAL, INTENT(IN) :: name
CHARACTER(LEN=*), OPTIONAL, INTENT(IN) :: class
LOGICAL, OPTIONAL, INTENT(IN) :: time_reversal
CHARACTER(LEN=*), INTENT(IN) :: info
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
IF (PRESENT(name)) THEN
obj%name_ispresent = .TRUE.
obj%name = name
ELSE
obj%name_ispresent = .FALSE.
END IF
IF (PRESENT(class)) THEN
obj%class_ispresent = .TRUE.
obj%class = class
ELSE
obj%class_ispresent = .FALSE.
END IF
IF (PRESENT(time_reversal)) THEN
obj%time_reversal_ispresent = .TRUE.
obj%time_reversal = time_reversal
ELSE
obj%time_reversal_ispresent = .FALSE.
END IF
!
obj%info = info
!
END SUBROUTINE qes_init_info
!
!
SUBROUTINE qes_init_outputPBC(obj, tagname, assume_isolated)
!
IMPLICIT NONE
!
TYPE(outputPBC_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
CHARACTER(LEN=*),INTENT(IN) :: assume_isolated
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
!
obj%assume_isolated = assume_isolated
!
END SUBROUTINE qes_init_outputPBC
!
!
SUBROUTINE qes_init_magnetization(obj, tagname, lsda, noncolin, spinorbit, total, absolute, do_magnetization)
!
IMPLICIT NONE
!
TYPE(magnetization_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
LOGICAL,INTENT(IN) :: lsda
LOGICAL,INTENT(IN) :: noncolin
LOGICAL,INTENT(IN) :: spinorbit
REAL(DP),INTENT(IN) :: total
REAL(DP),INTENT(IN) :: absolute
LOGICAL,OPTIONAL,INTENT(IN) :: do_magnetization
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
!
obj%lsda = lsda
obj%noncolin = noncolin
obj%spinorbit = spinorbit
obj%total = total
obj%absolute = absolute
IF ( PRESENT(do_magnetization)) THEN
obj%do_magnetization_ispresent = .TRUE.
obj%do_magnetization = do_magnetization
ELSE
obj%do_magnetization_ispresent = .FALSE.
END IF
!
END SUBROUTINE qes_init_magnetization
!
!
SUBROUTINE qes_init_total_energy(obj, tagname, etot, eband, ehart, vtxc, etxc, ewald, demet,&
efieldcorr, potentiostat_contr, gatefield_contr, vdW_term)
!
IMPLICIT NONE
!
TYPE(total_energy_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
REAL(DP),INTENT(IN) :: etot
REAL(DP),OPTIONAL,INTENT(IN) :: eband
REAL(DP),OPTIONAL,INTENT(IN) :: ehart
REAL(DP),OPTIONAL,INTENT(IN) :: vtxc
REAL(DP),OPTIONAL,INTENT(IN) :: etxc
REAL(DP),OPTIONAL,INTENT(IN) :: ewald
REAL(DP),OPTIONAL,INTENT(IN) :: demet
REAL(DP),OPTIONAL,INTENT(IN) :: efieldcorr
REAL(DP),OPTIONAL,INTENT(IN) :: potentiostat_contr
REAL(DP),OPTIONAL,INTENT(IN) :: gatefield_contr
REAL(DP),OPTIONAL,INTENT(IN) :: vdW_term
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
!
obj%etot = etot
IF ( PRESENT(eband)) THEN
obj%eband_ispresent = .TRUE.
obj%eband = eband
ELSE
obj%eband_ispresent = .FALSE.
END IF
IF ( PRESENT(ehart)) THEN
obj%ehart_ispresent = .TRUE.
obj%ehart = ehart
ELSE
obj%ehart_ispresent = .FALSE.
END IF
IF ( PRESENT(vtxc)) THEN
obj%vtxc_ispresent = .TRUE.
obj%vtxc = vtxc
ELSE
obj%vtxc_ispresent = .FALSE.
END IF
IF ( PRESENT(etxc)) THEN
obj%etxc_ispresent = .TRUE.
obj%etxc = etxc
ELSE
obj%etxc_ispresent = .FALSE.
END IF
IF ( PRESENT(ewald)) THEN
obj%ewald_ispresent = .TRUE.
obj%ewald = ewald
ELSE
obj%ewald_ispresent = .FALSE.
END IF
IF ( PRESENT(demet)) THEN
obj%demet_ispresent = .TRUE.
obj%demet = demet
ELSE
obj%demet_ispresent = .FALSE.
END IF
IF ( PRESENT(efieldcorr)) THEN
obj%efieldcorr_ispresent = .TRUE.
obj%efieldcorr = efieldcorr
ELSE
obj%efieldcorr_ispresent = .FALSE.
END IF
IF ( PRESENT(potentiostat_contr)) THEN
obj%potentiostat_contr_ispresent = .TRUE.
obj%potentiostat_contr = potentiostat_contr
ELSE
obj%potentiostat_contr_ispresent = .FALSE.
END IF
IF ( PRESENT(gatefield_contr)) THEN
obj%gatefield_contr_ispresent = .TRUE.
obj%gatefield_contr = gatefield_contr
ELSE
obj%gatefield_contr_ispresent = .FALSE.
END IF
IF ( PRESENT(vdW_term)) THEN
obj%vdW_term_ispresent = .TRUE.
obj%vdW_term = vdW_term
ELSE
obj%vdW_term_ispresent = .FALSE.
END IF
!
END SUBROUTINE qes_init_total_energy
!
!
SUBROUTINE qes_init_band_structure(obj, tagname, lsda, noncolin, spinorbit, nelec, wf_collected,&
starting_k_points, nks, occupations_kind, ks_energies, nbnd,&
nbnd_up, nbnd_dw, num_of_atomic_wfc, fermi_energy, highestOccupiedLevel,&
lowestUnoccupiedLevel, two_fermi_energies, smearing)
!
IMPLICIT NONE
!
TYPE(band_structure_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
LOGICAL,INTENT(IN) :: lsda
LOGICAL,INTENT(IN) :: noncolin
LOGICAL,INTENT(IN) :: spinorbit
INTEGER,OPTIONAL,INTENT(IN) :: nbnd
INTEGER,OPTIONAL,INTENT(IN) :: nbnd_up
INTEGER,OPTIONAL,INTENT(IN) :: nbnd_dw
REAL(DP),INTENT(IN) :: nelec
INTEGER,OPTIONAL,INTENT(IN) :: num_of_atomic_wfc
LOGICAL,INTENT(IN) :: wf_collected
REAL(DP),OPTIONAL,INTENT(IN) :: fermi_energy
REAL(DP),OPTIONAL,INTENT(IN) :: highestOccupiedLevel
REAL(DP),OPTIONAL,INTENT(IN) :: lowestUnoccupiedLevel
REAL(DP), DIMENSION(2),OPTIONAL,INTENT(IN) :: two_fermi_energies
TYPE(k_points_IBZ_type),INTENT(IN) :: starting_k_points
INTEGER,INTENT(IN) :: nks
TYPE(occupations_type),INTENT(IN) :: occupations_kind
TYPE(smearing_type),OPTIONAL,INTENT(IN) :: smearing
TYPE(ks_energies_type),DIMENSION(:),INTENT(IN) :: ks_energies
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
!
obj%lsda = lsda
obj%noncolin = noncolin
obj%spinorbit = spinorbit
IF ( PRESENT(nbnd)) THEN
obj%nbnd_ispresent = .TRUE.
obj%nbnd = nbnd
ELSE
obj%nbnd_ispresent = .FALSE.
END IF
IF ( PRESENT(nbnd_up)) THEN
obj%nbnd_up_ispresent = .TRUE.
obj%nbnd_up = nbnd_up
ELSE
obj%nbnd_up_ispresent = .FALSE.
END IF
IF ( PRESENT(nbnd_dw)) THEN
obj%nbnd_dw_ispresent = .TRUE.
obj%nbnd_dw = nbnd_dw
ELSE
obj%nbnd_dw_ispresent = .FALSE.
END IF
obj%nelec = nelec
IF ( PRESENT(num_of_atomic_wfc)) THEN
obj%num_of_atomic_wfc_ispresent = .TRUE.
obj%num_of_atomic_wfc = num_of_atomic_wfc
ELSE
obj%num_of_atomic_wfc_ispresent = .FALSE.
END IF
obj%wf_collected = wf_collected
IF ( PRESENT(fermi_energy)) THEN
obj%fermi_energy_ispresent = .TRUE.
obj%fermi_energy = fermi_energy
ELSE
obj%fermi_energy_ispresent = .FALSE.
END IF
IF ( PRESENT(highestOccupiedLevel)) THEN
obj%highestOccupiedLevel_ispresent = .TRUE.
obj%highestOccupiedLevel = highestOccupiedLevel
ELSE
obj%highestOccupiedLevel_ispresent = .FALSE.
END IF
IF ( PRESENT(lowestUnoccupiedLevel)) THEN
obj%lowestUnoccupiedLevel_ispresent = .TRUE.
obj%lowestUnoccupiedLevel = lowestUnoccupiedLevel
ELSE
obj%lowestUnoccupiedLevel_ispresent = .FALSE.
END IF
IF ( PRESENT(two_fermi_energies)) THEN
obj%two_fermi_energies_ispresent = .TRUE.
obj%two_fermi_energies = two_fermi_energies
ELSE
obj%two_fermi_energies_ispresent = .FALSE.
END IF
obj%starting_k_points = starting_k_points
obj%nks = nks
obj%occupations_kind = occupations_kind
IF ( PRESENT(smearing)) THEN
obj%smearing_ispresent = .TRUE.
obj%smearing = smearing
ELSE
obj%smearing_ispresent = .FALSE.
END IF
ALLOCATE( obj%ks_energies(SIZE(ks_energies)))
obj%ndim_ks_energies = SIZE(ks_energies)
obj%ks_energies = ks_energies
!
END SUBROUTINE qes_init_band_structure
!
!
SUBROUTINE qes_init_ks_energies(obj, tagname, k_point, npw, eigenvalues, occupations)
!
IMPLICIT NONE
!
TYPE(ks_energies_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
TYPE(k_point_type),INTENT(IN) :: k_point
INTEGER,INTENT(IN) :: npw
TYPE(vector_type),INTENT(IN) :: eigenvalues
TYPE(vector_type),INTENT(IN) :: occupations
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
!
obj%k_point = k_point
obj%npw = npw
obj%eigenvalues = eigenvalues
obj%occupations = occupations
!
END SUBROUTINE qes_init_ks_energies
!
!
SUBROUTINE qes_init_closed(obj, tagname, DATE, TIME, closed)
!
IMPLICIT NONE
!
TYPE(closed_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
CHARACTER(LEN=*), INTENT(IN) :: DATE
CHARACTER(LEN=*), INTENT(IN) :: TIME
CHARACTER(LEN=*), INTENT(IN) :: closed
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
obj%DATE = DATE
obj%TIME = TIME
!
obj%closed = closed
!
END SUBROUTINE qes_init_closed
!
!
SUBROUTINE qes_init_vector(obj, tagname, vector)
!
IMPLICIT NONE
!
TYPE(vector_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
REAL(DP), DIMENSION(:), INTENT(IN) :: vector
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
!
obj%size = size(vector)
ALLOCATE(obj%vector(obj%size))
obj%vector = vector
!
END SUBROUTINE qes_init_vector
!
!
SUBROUTINE qes_init_integerVector(obj, tagname, integerVector)
!
IMPLICIT NONE
!
TYPE(integerVector_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
INTEGER, DIMENSION(:), INTENT(IN) :: integerVector
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
!
obj%size = size(integerVector)
ALLOCATE(obj%integerVector(obj%size))
obj%integerVector = integerVector
!
END SUBROUTINE qes_init_integerVector
!
!
SUBROUTINE qes_init_matrix_1(obj, tagname, dims, mat, order)
!
IMPLICIT NONE
!
TYPE(matrix_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
INTEGER,DIMENSION(:),INTENT(IN) :: dims
REAL(DP), INTENT(IN) :: mat(:)
CHARACTER(LEN=*),OPTIONAL :: order
INTEGER :: rank, length, i
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
length = 1
rank = SIZE(dims)
DO i = 1, rank
length = length * dims(i)
END DO
obj%rank = rank
ALLOCATE(obj%matrix(length), obj%dims(rank) )
obj%matrix(1:length) = mat(1:length)
obj%dims = dims
IF (PRESENT(order)) THEN
obj%order = TRIM(order)
ELSE
obj%order = 'F'
END IF
!
END SUBROUTINE qes_init_matrix_1
!
!
SUBROUTINE qes_init_matrix_2(obj, tagname, dims, mat, order)
!
IMPLICIT NONE
!
TYPE(matrix_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
INTEGER,DIMENSION(:),INTENT(IN) :: dims
REAL(DP), INTENT(IN) :: mat(:,:)
CHARACTER(LEN=*),OPTIONAL :: order
INTEGER :: rank, length, i
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
length = 1
rank = SIZE(dims)
DO i = 1, rank
length = length * dims(i)
END DO
obj%rank = rank
ALLOCATE(obj%matrix(length), obj%dims(rank) )
obj%matrix(1:length) = reshape(mat, [length])
obj%dims = dims
IF (PRESENT(order)) THEN
obj%order = TRIM(order)
ELSE
obj%order = 'F'
END IF
!
END SUBROUTINE qes_init_matrix_2
!
!
SUBROUTINE qes_init_matrix_3(obj, tagname, dims, mat, order)
!
IMPLICIT NONE
!
TYPE(matrix_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
INTEGER,DIMENSION(:),INTENT(IN) :: dims
REAL(DP), INTENT(IN) :: mat(:,:,:)
CHARACTER(LEN=*),OPTIONAL :: order
INTEGER :: rank, length, i
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
length = 1
rank = SIZE(dims)
DO i = 1, rank
length = length * dims(i)
END DO
obj%rank = rank
ALLOCATE(obj%matrix(length), obj%dims(rank) )
obj%matrix(1:length) = reshape(mat, [length])
obj%dims = dims
IF (PRESENT(order)) THEN
obj%order = TRIM(order)
ELSE
obj%order = 'F'
END IF
!
END SUBROUTINE qes_init_matrix_3
!
!
SUBROUTINE qes_init_integerMatrix_1(obj, tagname, dims, mat, order)
!
IMPLICIT NONE
!
TYPE(integerMatrix_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
INTEGER,DIMENSION(:),INTENT(IN) :: dims
INTEGER, INTENT(IN) :: mat(:)
CHARACTER(LEN=*),OPTIONAL :: order
INTEGER :: rank, length, i
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
length = 1
rank = SIZE(dims)
DO i = 1, rank
length = length * dims(i)
END DO
obj%rank = rank
ALLOCATE(obj%integerMatrix(length), obj%dims(rank) )
obj%integerMatrix(1:length) = mat(1:length)
obj%dims = dims
IF (PRESENT(order)) THEN
obj%order = TRIM(order)
ELSE
obj%order = 'F'
END IF
!
END SUBROUTINE qes_init_integerMatrix_1
!
!
SUBROUTINE qes_init_integerMatrix_2(obj, tagname, dims, mat, order)
!
IMPLICIT NONE
!
TYPE(integerMatrix_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
INTEGER,DIMENSION(:),INTENT(IN) :: dims
INTEGER, INTENT(IN) :: mat(:,:)
CHARACTER(LEN=*),OPTIONAL :: order
INTEGER :: rank, length, i
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
length = 1
rank = SIZE(dims)
DO i = 1, rank
length = length * dims(i)
END DO
obj%rank = rank
ALLOCATE(obj%integerMatrix(length), obj%dims(rank) )
obj%integerMatrix(1:length) = reshape(mat, [length])
obj%dims = dims
IF (PRESENT(order)) THEN
obj%order = TRIM(order)
ELSE
obj%order = 'F'
END IF
!
END SUBROUTINE qes_init_integerMatrix_2
!
!
SUBROUTINE qes_init_integerMatrix_3(obj, tagname, dims, mat, order)
!
IMPLICIT NONE
!
TYPE(integerMatrix_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
INTEGER,DIMENSION(:),INTENT(IN) :: dims
INTEGER, INTENT(IN) :: mat(:,:,:)
CHARACTER(LEN=*),OPTIONAL :: order
INTEGER :: rank, length, i
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
length = 1
rank = SIZE(dims)
DO i = 1, rank
length = length * dims(i)
END DO
obj%rank = rank
ALLOCATE(obj%integerMatrix(length), obj%dims(rank) )
obj%integerMatrix(1:length) = reshape(mat, [length])
obj%dims = dims
IF (PRESENT(order)) THEN
obj%order = TRIM(order)
ELSE
obj%order = 'F'
END IF
!
END SUBROUTINE qes_init_integerMatrix_3
!
!
SUBROUTINE qes_init_scalarQuantity(obj, tagname, Units, scalarQuantity)
!
IMPLICIT NONE
!
TYPE(scalarQuantity_type), INTENT(OUT) :: obj
CHARACTER(LEN=*), INTENT(IN) :: tagname
CHARACTER(LEN=*), INTENT(IN) :: Units
REAL(DP), INTENT(IN) :: scalarQuantity
!
obj%tagname = TRIM(tagname)
obj%lwrite = .TRUE.
obj%lread = .TRUE.
obj%Units = Units
!
obj%scalarQuantity = scalarQuantity
!
END SUBROUTINE qes_init_scalarQuantity
!
!
END MODULE qes_init_module