1! 2! Copyright (C) 2001-2009 Quantum ESPRESSO group 3! This file is distributed under the terms of the 4! GNU General Public License. See the file `License' 5! in the root directory of the present distribution, 6! or http://www.gnu.org/copyleft/gpl.txt . 7! 8! 9MODULE qes_init_module 10 ! 11 ! Auto-generated code: don't edit or at least don't commit changes 12 ! 13 ! Quantum Espresso XSD namespace: http://www.quantum-espresso.org/ns/qes/qes-1.0 14 ! 15 USE kinds, only: DP 16 USE qes_types_module 17 ! 18 IMPLICIT NONE 19 ! 20 PRIVATE 21 ! 22 PUBLIC :: qes_init 23 ! 24 INTERFACE qes_init 25 ! 26 MODULE PROCEDURE qes_init_espresso 27 MODULE PROCEDURE qes_init_general_info 28 MODULE PROCEDURE qes_init_parallel_info 29 MODULE PROCEDURE qes_init_input 30 MODULE PROCEDURE qes_init_step 31 MODULE PROCEDURE qes_init_output 32 MODULE PROCEDURE qes_init_timing 33 MODULE PROCEDURE qes_init_clock 34 MODULE PROCEDURE qes_init_control_variables 35 MODULE PROCEDURE qes_init_xml_format 36 MODULE PROCEDURE qes_init_creator 37 MODULE PROCEDURE qes_init_created 38 MODULE PROCEDURE qes_init_atomic_species 39 MODULE PROCEDURE qes_init_species 40 MODULE PROCEDURE qes_init_atomic_structure 41 MODULE PROCEDURE qes_init_atomic_positions 42 MODULE PROCEDURE qes_init_atom 43 MODULE PROCEDURE qes_init_wyckoff_positions 44 MODULE PROCEDURE qes_init_cell 45 MODULE PROCEDURE qes_init_dft 46 MODULE PROCEDURE qes_init_hybrid 47 MODULE PROCEDURE qes_init_qpoint_grid 48 MODULE PROCEDURE qes_init_dftU 49 MODULE PROCEDURE qes_init_HubbardCommon 50 MODULE PROCEDURE qes_init_HubbardJ 51 MODULE PROCEDURE qes_init_starting_ns 52 MODULE PROCEDURE qes_init_Hubbard_ns 53 MODULE PROCEDURE qes_init_HubbardBack 54 MODULE PROCEDURE qes_init_backL 55 MODULE PROCEDURE qes_init_vdW 56 MODULE PROCEDURE qes_init_spin 57 MODULE PROCEDURE qes_init_bands 58 MODULE PROCEDURE qes_init_smearing 59 MODULE PROCEDURE qes_init_occupations 60 MODULE PROCEDURE qes_init_basis 61 MODULE PROCEDURE qes_init_basis_set 62 MODULE PROCEDURE qes_init_basisSetItem 63 MODULE PROCEDURE qes_init_reciprocal_lattice 64 MODULE PROCEDURE qes_init_electron_control 65 MODULE PROCEDURE qes_init_k_points_IBZ 66 MODULE PROCEDURE qes_init_monkhorst_pack 67 MODULE PROCEDURE qes_init_k_point 68 MODULE PROCEDURE qes_init_ion_control 69 MODULE PROCEDURE qes_init_bfgs 70 MODULE PROCEDURE qes_init_md 71 MODULE PROCEDURE qes_init_cell_control 72 MODULE PROCEDURE qes_init_symmetry_flags 73 MODULE PROCEDURE qes_init_boundary_conditions 74 MODULE PROCEDURE qes_init_esm 75 MODULE PROCEDURE qes_init_ekin_functional 76 MODULE PROCEDURE qes_init_spin_constraints 77 MODULE PROCEDURE qes_init_electric_field 78 MODULE PROCEDURE qes_init_gate_settings 79 MODULE PROCEDURE qes_init_atomic_constraints 80 MODULE PROCEDURE qes_init_atomic_constraint 81 MODULE PROCEDURE qes_init_inputOccupations 82 MODULE PROCEDURE qes_init_outputElectricField 83 MODULE PROCEDURE qes_init_BerryPhaseOutput 84 MODULE PROCEDURE qes_init_dipoleOutput 85 MODULE PROCEDURE qes_init_finiteFieldOut 86 MODULE PROCEDURE qes_init_polarization 87 MODULE PROCEDURE qes_init_ionicPolarization 88 MODULE PROCEDURE qes_init_electronicPolarization 89 MODULE PROCEDURE qes_init_phase 90 MODULE PROCEDURE qes_init_gateInfo 91 MODULE PROCEDURE qes_init_convergence_info 92 MODULE PROCEDURE qes_init_scf_conv 93 MODULE PROCEDURE qes_init_opt_conv 94 MODULE PROCEDURE qes_init_algorithmic_info 95 MODULE PROCEDURE qes_init_symmetries 96 MODULE PROCEDURE qes_init_symmetry 97 MODULE PROCEDURE qes_init_equivalent_atoms 98 MODULE PROCEDURE qes_init_info 99 MODULE PROCEDURE qes_init_outputPBC 100 MODULE PROCEDURE qes_init_magnetization 101 MODULE PROCEDURE qes_init_total_energy 102 MODULE PROCEDURE qes_init_band_structure 103 MODULE PROCEDURE qes_init_ks_energies 104 MODULE PROCEDURE qes_init_closed 105 MODULE PROCEDURE qes_init_vector 106 MODULE PROCEDURE qes_init_integerVector 107 MODULE PROCEDURE qes_init_matrix_1, qes_init_matrix_2, qes_init_matrix_3 108 MODULE PROCEDURE qes_init_integerMatrix_1, qes_init_integerMatrix_2, qes_init_integerMatrix_3 109 MODULE PROCEDURE qes_init_scalarQuantity 110 ! 111 END INTERFACE qes_init 112 ! 113 CONTAINS 114 ! 115 ! 116 SUBROUTINE qes_init_espresso(obj, tagname, input, Units, general_info, parallel_info, step,& 117 output, status, cputime, timing_info, closed) 118 ! 119 IMPLICIT NONE 120 ! 121 TYPE(espresso_type), INTENT(OUT) :: obj 122 CHARACTER(LEN=*), INTENT(IN) :: tagname 123 CHARACTER(LEN=*), OPTIONAL, INTENT(IN) :: Units 124 TYPE(general_info_type),OPTIONAL,INTENT(IN) :: general_info 125 TYPE(parallel_info_type),OPTIONAL,INTENT(IN) :: parallel_info 126 TYPE(input_type),INTENT(IN) :: input 127 TYPE(step_type),OPTIONAL,DIMENSION(:),INTENT(IN) :: step 128 TYPE(output_type),OPTIONAL,INTENT(IN) :: output 129 INTEGER,OPTIONAL,INTENT(IN) :: status 130 INTEGER,OPTIONAL,INTENT(IN) :: cputime 131 TYPE(timing_type),OPTIONAL,INTENT(IN) :: timing_info 132 TYPE(closed_type),OPTIONAL,INTENT(IN) :: closed 133 ! 134 obj%tagname = TRIM(tagname) 135 obj%lwrite = .TRUE. 136 obj%lread = .TRUE. 137 IF (PRESENT(Units)) THEN 138 obj%Units_ispresent = .TRUE. 139 obj%Units = Units 140 ELSE 141 obj%Units_ispresent = .FALSE. 142 END IF 143 ! 144 IF ( PRESENT(general_info)) THEN 145 obj%general_info_ispresent = .TRUE. 146 obj%general_info = general_info 147 ELSE 148 obj%general_info_ispresent = .FALSE. 149 END IF 150 IF ( PRESENT(parallel_info)) THEN 151 obj%parallel_info_ispresent = .TRUE. 152 obj%parallel_info = parallel_info 153 ELSE 154 obj%parallel_info_ispresent = .FALSE. 155 END IF 156 obj%input = input 157 IF ( PRESENT(step)) THEN 158 obj%step_ispresent = .TRUE. 159 ALLOCATE(obj%step(SIZE(step))) 160 obj%ndim_step = SIZE(step) 161 obj%step = step 162 ELSE 163 obj%step_ispresent = .FALSE. 164 END IF 165 IF ( PRESENT(output)) THEN 166 obj%output_ispresent = .TRUE. 167 obj%output = output 168 ELSE 169 obj%output_ispresent = .FALSE. 170 END IF 171 IF ( PRESENT(status)) THEN 172 obj%status_ispresent = .TRUE. 173 obj%status = status 174 ELSE 175 obj%status_ispresent = .FALSE. 176 END IF 177 IF ( PRESENT(cputime)) THEN 178 obj%cputime_ispresent = .TRUE. 179 obj%cputime = cputime 180 ELSE 181 obj%cputime_ispresent = .FALSE. 182 END IF 183 IF ( PRESENT(timing_info)) THEN 184 obj%timing_info_ispresent = .TRUE. 185 obj%timing_info = timing_info 186 ELSE 187 obj%timing_info_ispresent = .FALSE. 188 END IF 189 IF ( PRESENT(closed)) THEN 190 obj%closed_ispresent = .TRUE. 191 obj%closed = closed 192 ELSE 193 obj%closed_ispresent = .FALSE. 194 END IF 195 ! 196 END SUBROUTINE qes_init_espresso 197 ! 198 ! 199 SUBROUTINE qes_init_general_info(obj, tagname, xml_format, creator, created, job) 200 ! 201 IMPLICIT NONE 202 ! 203 TYPE(general_info_type), INTENT(OUT) :: obj 204 CHARACTER(LEN=*), INTENT(IN) :: tagname 205 TYPE(xml_format_type),INTENT(IN) :: xml_format 206 TYPE(creator_type),INTENT(IN) :: creator 207 TYPE(created_type),INTENT(IN) :: created 208 CHARACTER(LEN=*),INTENT(IN) :: job 209 ! 210 obj%tagname = TRIM(tagname) 211 obj%lwrite = .TRUE. 212 obj%lread = .TRUE. 213 ! 214 obj%xml_format = xml_format 215 obj%creator = creator 216 obj%created = created 217 obj%job = job 218 ! 219 END SUBROUTINE qes_init_general_info 220 ! 221 ! 222 SUBROUTINE qes_init_parallel_info(obj, tagname, nprocs, nthreads, ntasks, nbgrp, npool, ndiag) 223 ! 224 IMPLICIT NONE 225 ! 226 TYPE(parallel_info_type), INTENT(OUT) :: obj 227 CHARACTER(LEN=*), INTENT(IN) :: tagname 228 INTEGER,INTENT(IN) :: nprocs 229 INTEGER,INTENT(IN) :: nthreads 230 INTEGER,INTENT(IN) :: ntasks 231 INTEGER,INTENT(IN) :: nbgrp 232 INTEGER,INTENT(IN) :: npool 233 INTEGER,INTENT(IN) :: ndiag 234 ! 235 obj%tagname = TRIM(tagname) 236 obj%lwrite = .TRUE. 237 obj%lread = .TRUE. 238 ! 239 obj%nprocs = nprocs 240 obj%nthreads = nthreads 241 obj%ntasks = ntasks 242 obj%nbgrp = nbgrp 243 obj%npool = npool 244 obj%ndiag = ndiag 245 ! 246 END SUBROUTINE qes_init_parallel_info 247 ! 248 ! 249 SUBROUTINE qes_init_input(obj, tagname, control_variables, atomic_species, atomic_structure,& 250 dft, spin, bands, basis, electron_control, k_points_IBZ, ion_control,& 251 cell_control, symmetry_flags, boundary_conditions, ekin_functional,& 252 external_atomic_forces, free_positions, starting_atomic_velocities,& 253 electric_field, atomic_constraints, spin_constraints) 254 ! 255 IMPLICIT NONE 256 ! 257 TYPE(input_type), INTENT(OUT) :: obj 258 CHARACTER(LEN=*), INTENT(IN) :: tagname 259 TYPE(control_variables_type),INTENT(IN) :: control_variables 260 TYPE(atomic_species_type),INTENT(IN) :: atomic_species 261 TYPE(atomic_structure_type),INTENT(IN) :: atomic_structure 262 TYPE(dft_type),INTENT(IN) :: dft 263 TYPE(spin_type),INTENT(IN) :: spin 264 TYPE(bands_type),INTENT(IN) :: bands 265 TYPE(basis_type),INTENT(IN) :: basis 266 TYPE(electron_control_type),INTENT(IN) :: electron_control 267 TYPE(k_points_IBZ_type),INTENT(IN) :: k_points_IBZ 268 TYPE(ion_control_type),INTENT(IN) :: ion_control 269 TYPE(cell_control_type),INTENT(IN) :: cell_control 270 TYPE(symmetry_flags_type),OPTIONAL,INTENT(IN) :: symmetry_flags 271 TYPE(boundary_conditions_type),OPTIONAL,INTENT(IN) :: boundary_conditions 272 TYPE(ekin_functional_type),OPTIONAL,INTENT(IN) :: ekin_functional 273 TYPE(matrix_type),OPTIONAL,INTENT(IN) :: external_atomic_forces 274 TYPE(integerMatrix_type),OPTIONAL,INTENT(IN) :: free_positions 275 TYPE(matrix_type),OPTIONAL,INTENT(IN) :: starting_atomic_velocities 276 TYPE(electric_field_type),OPTIONAL,INTENT(IN) :: electric_field 277 TYPE(atomic_constraints_type),OPTIONAL,INTENT(IN) :: atomic_constraints 278 TYPE(spin_constraints_type),OPTIONAL,INTENT(IN) :: spin_constraints 279 ! 280 obj%tagname = TRIM(tagname) 281 obj%lwrite = .TRUE. 282 obj%lread = .TRUE. 283 ! 284 obj%control_variables = control_variables 285 obj%atomic_species = atomic_species 286 obj%atomic_structure = atomic_structure 287 obj%dft = dft 288 obj%spin = spin 289 obj%bands = bands 290 obj%basis = basis 291 obj%electron_control = electron_control 292 obj%k_points_IBZ = k_points_IBZ 293 obj%ion_control = ion_control 294 obj%cell_control = cell_control 295 IF ( PRESENT(symmetry_flags)) THEN 296 obj%symmetry_flags_ispresent = .TRUE. 297 obj%symmetry_flags = symmetry_flags 298 ELSE 299 obj%symmetry_flags_ispresent = .FALSE. 300 END IF 301 IF ( PRESENT(boundary_conditions)) THEN 302 obj%boundary_conditions_ispresent = .TRUE. 303 obj%boundary_conditions = boundary_conditions 304 ELSE 305 obj%boundary_conditions_ispresent = .FALSE. 306 END IF 307 IF ( PRESENT(ekin_functional)) THEN 308 obj%ekin_functional_ispresent = .TRUE. 309 obj%ekin_functional = ekin_functional 310 ELSE 311 obj%ekin_functional_ispresent = .FALSE. 312 END IF 313 IF ( PRESENT(external_atomic_forces)) THEN 314 obj%external_atomic_forces_ispresent = .TRUE. 315 obj%external_atomic_forces = external_atomic_forces 316 ELSE 317 obj%external_atomic_forces_ispresent = .FALSE. 318 END IF 319 IF ( PRESENT(free_positions)) THEN 320 obj%free_positions_ispresent = .TRUE. 321 obj%free_positions = free_positions 322 ELSE 323 obj%free_positions_ispresent = .FALSE. 324 END IF 325 IF ( PRESENT(starting_atomic_velocities)) THEN 326 obj%starting_atomic_velocities_ispresent = .TRUE. 327 obj%starting_atomic_velocities = starting_atomic_velocities 328 ELSE 329 obj%starting_atomic_velocities_ispresent = .FALSE. 330 END IF 331 IF ( PRESENT(electric_field)) THEN 332 obj%electric_field_ispresent = .TRUE. 333 obj%electric_field = electric_field 334 ELSE 335 obj%electric_field_ispresent = .FALSE. 336 END IF 337 IF ( PRESENT(atomic_constraints)) THEN 338 obj%atomic_constraints_ispresent = .TRUE. 339 obj%atomic_constraints = atomic_constraints 340 ELSE 341 obj%atomic_constraints_ispresent = .FALSE. 342 END IF 343 IF ( PRESENT(spin_constraints)) THEN 344 obj%spin_constraints_ispresent = .TRUE. 345 obj%spin_constraints = spin_constraints 346 ELSE 347 obj%spin_constraints_ispresent = .FALSE. 348 END IF 349 ! 350 END SUBROUTINE qes_init_input 351 ! 352 ! 353 SUBROUTINE qes_init_step(obj, tagname, n_step, scf_conv, atomic_structure, total_energy, forces,& 354 stress, FCP_force, FCP_tot_charge) 355 ! 356 IMPLICIT NONE 357 ! 358 TYPE(step_type), INTENT(OUT) :: obj 359 CHARACTER(LEN=*), INTENT(IN) :: tagname 360 INTEGER, INTENT(IN) :: n_step 361 TYPE(scf_conv_type),INTENT(IN) :: scf_conv 362 TYPE(atomic_structure_type),INTENT(IN) :: atomic_structure 363 TYPE(total_energy_type),INTENT(IN) :: total_energy 364 TYPE(matrix_type),INTENT(IN) :: forces 365 TYPE(matrix_type),OPTIONAL,INTENT(IN) :: stress 366 REAL(DP),OPTIONAL,INTENT(IN) :: FCP_force 367 REAL(DP),OPTIONAL,INTENT(IN) :: FCP_tot_charge 368 ! 369 obj%tagname = TRIM(tagname) 370 obj%lwrite = .TRUE. 371 obj%lread = .TRUE. 372 obj%n_step = n_step 373 ! 374 obj%scf_conv = scf_conv 375 obj%atomic_structure = atomic_structure 376 obj%total_energy = total_energy 377 obj%forces = forces 378 IF ( PRESENT(stress)) THEN 379 obj%stress_ispresent = .TRUE. 380 obj%stress = stress 381 ELSE 382 obj%stress_ispresent = .FALSE. 383 END IF 384 IF ( PRESENT(FCP_force)) THEN 385 obj%FCP_force_ispresent = .TRUE. 386 obj%FCP_force = FCP_force 387 ELSE 388 obj%FCP_force_ispresent = .FALSE. 389 END IF 390 IF ( PRESENT(FCP_tot_charge)) THEN 391 obj%FCP_tot_charge_ispresent = .TRUE. 392 obj%FCP_tot_charge = FCP_tot_charge 393 ELSE 394 obj%FCP_tot_charge_ispresent = .FALSE. 395 END IF 396 ! 397 END SUBROUTINE qes_init_step 398 ! 399 ! 400 SUBROUTINE qes_init_output(obj, tagname, algorithmic_info, atomic_species, atomic_structure,& 401 basis_set, dft, magnetization, total_energy, band_structure, convergence_info,& 402 symmetries, boundary_conditions, forces, stress, electric_field,& 403 FCP_force, FCP_tot_charge) 404 ! 405 IMPLICIT NONE 406 ! 407 TYPE(output_type), INTENT(OUT) :: obj 408 CHARACTER(LEN=*), INTENT(IN) :: tagname 409 TYPE(convergence_info_type),OPTIONAL,INTENT(IN) :: convergence_info 410 TYPE(algorithmic_info_type),INTENT(IN) :: algorithmic_info 411 TYPE(atomic_species_type),INTENT(IN) :: atomic_species 412 TYPE(atomic_structure_type),INTENT(IN) :: atomic_structure 413 TYPE(symmetries_type),OPTIONAL,INTENT(IN) :: symmetries 414 TYPE(basis_set_type),INTENT(IN) :: basis_set 415 TYPE(dft_type),INTENT(IN) :: dft 416 TYPE(outputPBC_type),OPTIONAL,INTENT(IN) :: boundary_conditions 417 TYPE(magnetization_type),INTENT(IN) :: magnetization 418 TYPE(total_energy_type),INTENT(IN) :: total_energy 419 TYPE(band_structure_type),INTENT(IN) :: band_structure 420 TYPE(matrix_type),OPTIONAL,INTENT(IN) :: forces 421 TYPE(matrix_type),OPTIONAL,INTENT(IN) :: stress 422 TYPE(outputElectricField_type),OPTIONAL,INTENT(IN) :: electric_field 423 REAL(DP),OPTIONAL,INTENT(IN) :: FCP_force 424 REAL(DP),OPTIONAL,INTENT(IN) :: FCP_tot_charge 425 ! 426 obj%tagname = TRIM(tagname) 427 obj%lwrite = .TRUE. 428 obj%lread = .TRUE. 429 ! 430 IF ( PRESENT(convergence_info)) THEN 431 obj%convergence_info_ispresent = .TRUE. 432 obj%convergence_info = convergence_info 433 ELSE 434 obj%convergence_info_ispresent = .FALSE. 435 END IF 436 obj%algorithmic_info = algorithmic_info 437 obj%atomic_species = atomic_species 438 obj%atomic_structure = atomic_structure 439 IF ( PRESENT(symmetries)) THEN 440 obj%symmetries_ispresent = .TRUE. 441 obj%symmetries = symmetries 442 ELSE 443 obj%symmetries_ispresent = .FALSE. 444 END IF 445 obj%basis_set = basis_set 446 obj%dft = dft 447 IF ( PRESENT(boundary_conditions)) THEN 448 obj%boundary_conditions_ispresent = .TRUE. 449 obj%boundary_conditions = boundary_conditions 450 ELSE 451 obj%boundary_conditions_ispresent = .FALSE. 452 END IF 453 obj%magnetization = magnetization 454 obj%total_energy = total_energy 455 obj%band_structure = band_structure 456 IF ( PRESENT(forces)) THEN 457 obj%forces_ispresent = .TRUE. 458 obj%forces = forces 459 ELSE 460 obj%forces_ispresent = .FALSE. 461 END IF 462 IF ( PRESENT(stress)) THEN 463 obj%stress_ispresent = .TRUE. 464 obj%stress = stress 465 ELSE 466 obj%stress_ispresent = .FALSE. 467 END IF 468 IF ( PRESENT(electric_field)) THEN 469 obj%electric_field_ispresent = .TRUE. 470 obj%electric_field = electric_field 471 ELSE 472 obj%electric_field_ispresent = .FALSE. 473 END IF 474 IF ( PRESENT(FCP_force)) THEN 475 obj%FCP_force_ispresent = .TRUE. 476 obj%FCP_force = FCP_force 477 ELSE 478 obj%FCP_force_ispresent = .FALSE. 479 END IF 480 IF ( PRESENT(FCP_tot_charge)) THEN 481 obj%FCP_tot_charge_ispresent = .TRUE. 482 obj%FCP_tot_charge = FCP_tot_charge 483 ELSE 484 obj%FCP_tot_charge_ispresent = .FALSE. 485 END IF 486 ! 487 END SUBROUTINE qes_init_output 488 ! 489 ! 490 SUBROUTINE qes_init_timing(obj, tagname, total, partial) 491 ! 492 IMPLICIT NONE 493 ! 494 TYPE(timing_type), INTENT(OUT) :: obj 495 CHARACTER(LEN=*), INTENT(IN) :: tagname 496 TYPE(clock_type),INTENT(IN) :: total 497 TYPE(clock_type),OPTIONAL,DIMENSION(:),INTENT(IN) :: partial 498 ! 499 obj%tagname = TRIM(tagname) 500 obj%lwrite = .TRUE. 501 obj%lread = .TRUE. 502 ! 503 obj%total = total 504 IF ( PRESENT(partial)) THEN 505 obj%partial_ispresent = .TRUE. 506 ALLOCATE(obj%partial(SIZE(partial))) 507 obj%ndim_partial = SIZE(partial) 508 obj%partial = partial 509 ELSE 510 obj%partial_ispresent = .FALSE. 511 END IF 512 ! 513 END SUBROUTINE qes_init_timing 514 ! 515 ! 516 SUBROUTINE qes_init_clock(obj, tagname, label, cpu, wall, calls) 517 ! 518 IMPLICIT NONE 519 ! 520 TYPE(clock_type), INTENT(OUT) :: obj 521 CHARACTER(LEN=*), INTENT(IN) :: tagname 522 CHARACTER(LEN=*), INTENT(IN) :: label 523 INTEGER, OPTIONAL, INTENT(IN) :: calls 524 REAL(DP),INTENT(IN) :: cpu 525 REAL(DP),INTENT(IN) :: wall 526 ! 527 obj%tagname = TRIM(tagname) 528 obj%lwrite = .TRUE. 529 obj%lread = .TRUE. 530 obj%label = label 531 IF (PRESENT(calls)) THEN 532 obj%calls_ispresent = .TRUE. 533 obj%calls = calls 534 ELSE 535 obj%calls_ispresent = .FALSE. 536 END IF 537 ! 538 obj%cpu = cpu 539 obj%wall = wall 540 ! 541 END SUBROUTINE qes_init_clock 542 ! 543 ! 544 SUBROUTINE qes_init_control_variables(obj, tagname, title, calculation, restart_mode, prefix,& 545 pseudo_dir, outdir, stress, forces, wf_collect, disk_io,& 546 max_seconds, etot_conv_thr, forc_conv_thr, press_conv_thr,& 547 verbosity, print_every, nstep) 548 ! 549 IMPLICIT NONE 550 ! 551 TYPE(control_variables_type), INTENT(OUT) :: obj 552 CHARACTER(LEN=*), INTENT(IN) :: tagname 553 CHARACTER(LEN=*),INTENT(IN) :: title 554 CHARACTER(LEN=*),INTENT(IN) :: calculation 555 CHARACTER(LEN=*),INTENT(IN) :: restart_mode 556 CHARACTER(LEN=*),INTENT(IN) :: prefix 557 CHARACTER(LEN=*),INTENT(IN) :: pseudo_dir 558 CHARACTER(LEN=*),INTENT(IN) :: outdir 559 LOGICAL,INTENT(IN) :: stress 560 LOGICAL,INTENT(IN) :: forces 561 LOGICAL,INTENT(IN) :: wf_collect 562 CHARACTER(LEN=*),INTENT(IN) :: disk_io 563 INTEGER,INTENT(IN) :: max_seconds 564 INTEGER,OPTIONAL,INTENT(IN) :: nstep 565 REAL(DP),INTENT(IN) :: etot_conv_thr 566 REAL(DP),INTENT(IN) :: forc_conv_thr 567 REAL(DP),INTENT(IN) :: press_conv_thr 568 CHARACTER(LEN=*),INTENT(IN) :: verbosity 569 INTEGER,INTENT(IN) :: print_every 570 ! 571 obj%tagname = TRIM(tagname) 572 obj%lwrite = .TRUE. 573 obj%lread = .TRUE. 574 ! 575 obj%title = title 576 obj%calculation = calculation 577 obj%restart_mode = restart_mode 578 obj%prefix = prefix 579 obj%pseudo_dir = pseudo_dir 580 obj%outdir = outdir 581 obj%stress = stress 582 obj%forces = forces 583 obj%wf_collect = wf_collect 584 obj%disk_io = disk_io 585 obj%max_seconds = max_seconds 586 IF ( PRESENT(nstep)) THEN 587 obj%nstep_ispresent = .TRUE. 588 obj%nstep = nstep 589 ELSE 590 obj%nstep_ispresent = .FALSE. 591 END IF 592 obj%etot_conv_thr = etot_conv_thr 593 obj%forc_conv_thr = forc_conv_thr 594 obj%press_conv_thr = press_conv_thr 595 obj%verbosity = verbosity 596 obj%print_every = print_every 597 ! 598 END SUBROUTINE qes_init_control_variables 599 ! 600 ! 601 SUBROUTINE qes_init_xml_format(obj, tagname, NAME, VERSION, xml_format) 602 ! 603 IMPLICIT NONE 604 ! 605 TYPE(xml_format_type), INTENT(OUT) :: obj 606 CHARACTER(LEN=*), INTENT(IN) :: tagname 607 CHARACTER(LEN=*), INTENT(IN) :: NAME 608 CHARACTER(LEN=*), INTENT(IN) :: VERSION 609 CHARACTER(LEN=*), INTENT(IN) :: xml_format 610 ! 611 obj%tagname = TRIM(tagname) 612 obj%lwrite = .TRUE. 613 obj%lread = .TRUE. 614 obj%NAME = NAME 615 obj%VERSION = VERSION 616 ! 617 obj%xml_format = xml_format 618 ! 619 END SUBROUTINE qes_init_xml_format 620 ! 621 ! 622 SUBROUTINE qes_init_creator(obj, tagname, NAME, VERSION, creator) 623 ! 624 IMPLICIT NONE 625 ! 626 TYPE(creator_type), INTENT(OUT) :: obj 627 CHARACTER(LEN=*), INTENT(IN) :: tagname 628 CHARACTER(LEN=*), INTENT(IN) :: NAME 629 CHARACTER(LEN=*), INTENT(IN) :: VERSION 630 CHARACTER(LEN=*), INTENT(IN) :: creator 631 ! 632 obj%tagname = TRIM(tagname) 633 obj%lwrite = .TRUE. 634 obj%lread = .TRUE. 635 obj%NAME = NAME 636 obj%VERSION = VERSION 637 ! 638 obj%creator = creator 639 ! 640 END SUBROUTINE qes_init_creator 641 ! 642 ! 643 SUBROUTINE qes_init_created(obj, tagname, DATE, TIME, created) 644 ! 645 IMPLICIT NONE 646 ! 647 TYPE(created_type), INTENT(OUT) :: obj 648 CHARACTER(LEN=*), INTENT(IN) :: tagname 649 CHARACTER(LEN=*), INTENT(IN) :: DATE 650 CHARACTER(LEN=*), INTENT(IN) :: TIME 651 CHARACTER(LEN=*), INTENT(IN) :: created 652 ! 653 obj%tagname = TRIM(tagname) 654 obj%lwrite = .TRUE. 655 obj%lread = .TRUE. 656 obj%DATE = DATE 657 obj%TIME = TIME 658 ! 659 obj%created = created 660 ! 661 END SUBROUTINE qes_init_created 662 ! 663 ! 664 SUBROUTINE qes_init_atomic_species(obj, tagname, ntyp, species, pseudo_dir) 665 ! 666 IMPLICIT NONE 667 ! 668 TYPE(atomic_species_type), INTENT(OUT) :: obj 669 CHARACTER(LEN=*), INTENT(IN) :: tagname 670 INTEGER, INTENT(IN) :: ntyp 671 CHARACTER(LEN=*), OPTIONAL, INTENT(IN) :: pseudo_dir 672 TYPE(species_type),DIMENSION(:),INTENT(IN) :: species 673 ! 674 obj%tagname = TRIM(tagname) 675 obj%lwrite = .TRUE. 676 obj%lread = .TRUE. 677 obj%ntyp = ntyp 678 IF (PRESENT(pseudo_dir)) THEN 679 obj%pseudo_dir_ispresent = .TRUE. 680 obj%pseudo_dir = pseudo_dir 681 ELSE 682 obj%pseudo_dir_ispresent = .FALSE. 683 END IF 684 ! 685 ALLOCATE( obj%species(SIZE(species))) 686 obj%ndim_species = SIZE(species) 687 obj%species = species 688 ! 689 END SUBROUTINE qes_init_atomic_species 690 ! 691 ! 692 SUBROUTINE qes_init_species(obj, tagname, name, pseudo_file, mass, starting_magnetization, spin_teta, spin_phi) 693 ! 694 IMPLICIT NONE 695 ! 696 TYPE(species_type), INTENT(OUT) :: obj 697 CHARACTER(LEN=*), INTENT(IN) :: tagname 698 CHARACTER(LEN=*), INTENT(IN) :: name 699 REAL(DP),OPTIONAL,INTENT(IN) :: mass 700 CHARACTER(LEN=*),INTENT(IN) :: pseudo_file 701 REAL(DP),OPTIONAL,INTENT(IN) :: starting_magnetization 702 REAL(DP),OPTIONAL,INTENT(IN) :: spin_teta 703 REAL(DP),OPTIONAL,INTENT(IN) :: spin_phi 704 ! 705 obj%tagname = TRIM(tagname) 706 obj%lwrite = .TRUE. 707 obj%lread = .TRUE. 708 obj%name = name 709 ! 710 IF ( PRESENT(mass)) THEN 711 obj%mass_ispresent = .TRUE. 712 obj%mass = mass 713 ELSE 714 obj%mass_ispresent = .FALSE. 715 END IF 716 obj%pseudo_file = pseudo_file 717 IF ( PRESENT(starting_magnetization)) THEN 718 obj%starting_magnetization_ispresent = .TRUE. 719 obj%starting_magnetization = starting_magnetization 720 ELSE 721 obj%starting_magnetization_ispresent = .FALSE. 722 END IF 723 IF ( PRESENT(spin_teta)) THEN 724 obj%spin_teta_ispresent = .TRUE. 725 obj%spin_teta = spin_teta 726 ELSE 727 obj%spin_teta_ispresent = .FALSE. 728 END IF 729 IF ( PRESENT(spin_phi)) THEN 730 obj%spin_phi_ispresent = .TRUE. 731 obj%spin_phi = spin_phi 732 ELSE 733 obj%spin_phi_ispresent = .FALSE. 734 END IF 735 ! 736 END SUBROUTINE qes_init_species 737 ! 738 ! 739 SUBROUTINE qes_init_atomic_structure(obj, tagname, nat, cell, alat, bravais_index, alternative_axes,& 740 atomic_positions, wyckoff_positions, crystal_positions) 741 ! 742 IMPLICIT NONE 743 ! 744 TYPE(atomic_structure_type), INTENT(OUT) :: obj 745 CHARACTER(LEN=*), INTENT(IN) :: tagname 746 INTEGER, INTENT(IN) :: nat 747 REAL(DP), OPTIONAL, INTENT(IN) :: alat 748 INTEGER, OPTIONAL, INTENT(IN) :: bravais_index 749 CHARACTER(LEN=*), OPTIONAL, INTENT(IN) :: alternative_axes 750 TYPE(atomic_positions_type),OPTIONAL,INTENT(IN) :: atomic_positions 751 TYPE(wyckoff_positions_type),OPTIONAL,INTENT(IN) :: wyckoff_positions 752 TYPE(atomic_positions_type),OPTIONAL,INTENT(IN) :: crystal_positions 753 TYPE(cell_type),INTENT(IN) :: cell 754 ! 755 obj%tagname = TRIM(tagname) 756 obj%lwrite = .TRUE. 757 obj%lread = .TRUE. 758 obj%nat = nat 759 IF (PRESENT(alat)) THEN 760 obj%alat_ispresent = .TRUE. 761 obj%alat = alat 762 ELSE 763 obj%alat_ispresent = .FALSE. 764 END IF 765 IF (PRESENT(bravais_index)) THEN 766 obj%bravais_index_ispresent = .TRUE. 767 obj%bravais_index = bravais_index 768 ELSE 769 obj%bravais_index_ispresent = .FALSE. 770 END IF 771 IF (PRESENT(alternative_axes)) THEN 772 obj%alternative_axes_ispresent = .TRUE. 773 obj%alternative_axes = alternative_axes 774 ELSE 775 obj%alternative_axes_ispresent = .FALSE. 776 END IF 777 ! 778 IF ( PRESENT(atomic_positions)) THEN 779 obj%atomic_positions_ispresent = .TRUE. 780 obj%atomic_positions = atomic_positions 781 ELSE 782 obj%atomic_positions_ispresent = .FALSE. 783 END IF 784 IF ( PRESENT(wyckoff_positions)) THEN 785 obj%wyckoff_positions_ispresent = .TRUE. 786 obj%wyckoff_positions = wyckoff_positions 787 ELSE 788 obj%wyckoff_positions_ispresent = .FALSE. 789 END IF 790 IF ( PRESENT(crystal_positions)) THEN 791 obj%crystal_positions_ispresent = .TRUE. 792 obj%crystal_positions = crystal_positions 793 ELSE 794 obj%crystal_positions_ispresent = .FALSE. 795 END IF 796 obj%cell = cell 797 ! 798 END SUBROUTINE qes_init_atomic_structure 799 ! 800 ! 801 SUBROUTINE qes_init_atomic_positions(obj, tagname, atom) 802 ! 803 IMPLICIT NONE 804 ! 805 TYPE(atomic_positions_type), INTENT(OUT) :: obj 806 CHARACTER(LEN=*), INTENT(IN) :: tagname 807 TYPE(atom_type),DIMENSION(:),INTENT(IN) :: atom 808 ! 809 obj%tagname = TRIM(tagname) 810 obj%lwrite = .TRUE. 811 obj%lread = .TRUE. 812 ! 813 ALLOCATE( obj%atom(SIZE(atom))) 814 obj%ndim_atom = SIZE(atom) 815 obj%atom = atom 816 ! 817 END SUBROUTINE qes_init_atomic_positions 818 ! 819 ! 820 SUBROUTINE qes_init_atom(obj, tagname, name, atom, position, index) 821 ! 822 IMPLICIT NONE 823 ! 824 TYPE(atom_type), INTENT(OUT) :: obj 825 CHARACTER(LEN=*), INTENT(IN) :: tagname 826 CHARACTER(LEN=*), INTENT(IN) :: name 827 CHARACTER(LEN=*), OPTIONAL, INTENT(IN) :: position 828 INTEGER, OPTIONAL, INTENT(IN) :: index 829 REAL(DP), DIMENSION(3), INTENT(IN) :: atom 830 ! 831 obj%tagname = TRIM(tagname) 832 obj%lwrite = .TRUE. 833 obj%lread = .TRUE. 834 obj%name = name 835 IF (PRESENT(position)) THEN 836 obj%position_ispresent = .TRUE. 837 obj%position = position 838 ELSE 839 obj%position_ispresent = .FALSE. 840 END IF 841 IF (PRESENT(index)) THEN 842 obj%index_ispresent = .TRUE. 843 obj%index = index 844 ELSE 845 obj%index_ispresent = .FALSE. 846 END IF 847 ! 848 obj%atom = atom 849 ! 850 END SUBROUTINE qes_init_atom 851 ! 852 ! 853 SUBROUTINE qes_init_wyckoff_positions(obj, tagname, space_group, atom, more_options) 854 ! 855 IMPLICIT NONE 856 ! 857 TYPE(wyckoff_positions_type), INTENT(OUT) :: obj 858 CHARACTER(LEN=*), INTENT(IN) :: tagname 859 INTEGER, INTENT(IN) :: space_group 860 CHARACTER(LEN=*), OPTIONAL, INTENT(IN) :: more_options 861 TYPE(atom_type),DIMENSION(:),INTENT(IN) :: atom 862 ! 863 obj%tagname = TRIM(tagname) 864 obj%lwrite = .TRUE. 865 obj%lread = .TRUE. 866 obj%space_group = space_group 867 IF (PRESENT(more_options)) THEN 868 obj%more_options_ispresent = .TRUE. 869 obj%more_options = more_options 870 ELSE 871 obj%more_options_ispresent = .FALSE. 872 END IF 873 ! 874 ALLOCATE( obj%atom(SIZE(atom))) 875 obj%ndim_atom = SIZE(atom) 876 obj%atom = atom 877 ! 878 END SUBROUTINE qes_init_wyckoff_positions 879 ! 880 ! 881 SUBROUTINE qes_init_cell(obj, tagname, a1, a2, a3) 882 ! 883 IMPLICIT NONE 884 ! 885 TYPE(cell_type), INTENT(OUT) :: obj 886 CHARACTER(LEN=*), INTENT(IN) :: tagname 887 REAL(DP), DIMENSION(3),INTENT(IN) :: a1 888 REAL(DP), DIMENSION(3),INTENT(IN) :: a2 889 REAL(DP), DIMENSION(3),INTENT(IN) :: a3 890 ! 891 obj%tagname = TRIM(tagname) 892 obj%lwrite = .TRUE. 893 obj%lread = .TRUE. 894 ! 895 obj%a1 = a1 896 obj%a2 = a2 897 obj%a3 = a3 898 ! 899 END SUBROUTINE qes_init_cell 900 ! 901 ! 902 SUBROUTINE qes_init_dft(obj, tagname, functional, hybrid, dftU, vdW) 903 ! 904 IMPLICIT NONE 905 ! 906 TYPE(dft_type), INTENT(OUT) :: obj 907 CHARACTER(LEN=*), INTENT(IN) :: tagname 908 CHARACTER(LEN=*),INTENT(IN) :: functional 909 TYPE(hybrid_type),OPTIONAL,INTENT(IN) :: hybrid 910 TYPE(dftU_type),OPTIONAL,INTENT(IN) :: dftU 911 TYPE(vdW_type),OPTIONAL,INTENT(IN) :: vdW 912 ! 913 obj%tagname = TRIM(tagname) 914 obj%lwrite = .TRUE. 915 obj%lread = .TRUE. 916 ! 917 obj%functional = functional 918 IF ( PRESENT(hybrid)) THEN 919 obj%hybrid_ispresent = .TRUE. 920 obj%hybrid = hybrid 921 ELSE 922 obj%hybrid_ispresent = .FALSE. 923 END IF 924 IF ( PRESENT(dftU)) THEN 925 obj%dftU_ispresent = .TRUE. 926 obj%dftU = dftU 927 ELSE 928 obj%dftU_ispresent = .FALSE. 929 END IF 930 IF ( PRESENT(vdW)) THEN 931 obj%vdW_ispresent = .TRUE. 932 obj%vdW = vdW 933 ELSE 934 obj%vdW_ispresent = .FALSE. 935 END IF 936 ! 937 END SUBROUTINE qes_init_dft 938 ! 939 ! 940 SUBROUTINE qes_init_hybrid(obj, tagname, qpoint_grid, ecutfock, exx_fraction, screening_parameter,& 941 exxdiv_treatment, x_gamma_extrapolation, ecutvcut, localization_threshold & 942 ) 943 ! 944 IMPLICIT NONE 945 ! 946 TYPE(hybrid_type), INTENT(OUT) :: obj 947 CHARACTER(LEN=*), INTENT(IN) :: tagname 948 TYPE(qpoint_grid_type),OPTIONAL,INTENT(IN) :: qpoint_grid 949 REAL(DP),OPTIONAL,INTENT(IN) :: ecutfock 950 REAL(DP),OPTIONAL,INTENT(IN) :: exx_fraction 951 REAL(DP),OPTIONAL,INTENT(IN) :: screening_parameter 952 CHARACTER(LEN=*),OPTIONAL,INTENT(IN) :: exxdiv_treatment 953 LOGICAL,OPTIONAL,INTENT(IN) :: x_gamma_extrapolation 954 REAL(DP),OPTIONAL,INTENT(IN) :: ecutvcut 955 REAL(DP),OPTIONAL,INTENT(IN) :: localization_threshold 956 ! 957 obj%tagname = TRIM(tagname) 958 obj%lwrite = .TRUE. 959 obj%lread = .TRUE. 960 ! 961 IF ( PRESENT(qpoint_grid)) THEN 962 obj%qpoint_grid_ispresent = .TRUE. 963 obj%qpoint_grid = qpoint_grid 964 ELSE 965 obj%qpoint_grid_ispresent = .FALSE. 966 END IF 967 IF ( PRESENT(ecutfock)) THEN 968 obj%ecutfock_ispresent = .TRUE. 969 obj%ecutfock = ecutfock 970 ELSE 971 obj%ecutfock_ispresent = .FALSE. 972 END IF 973 IF ( PRESENT(exx_fraction)) THEN 974 obj%exx_fraction_ispresent = .TRUE. 975 obj%exx_fraction = exx_fraction 976 ELSE 977 obj%exx_fraction_ispresent = .FALSE. 978 END IF 979 IF ( PRESENT(screening_parameter)) THEN 980 obj%screening_parameter_ispresent = .TRUE. 981 obj%screening_parameter = screening_parameter 982 ELSE 983 obj%screening_parameter_ispresent = .FALSE. 984 END IF 985 IF ( PRESENT(exxdiv_treatment)) THEN 986 obj%exxdiv_treatment_ispresent = .TRUE. 987 obj%exxdiv_treatment = exxdiv_treatment 988 ELSE 989 obj%exxdiv_treatment_ispresent = .FALSE. 990 END IF 991 IF ( PRESENT(x_gamma_extrapolation)) THEN 992 obj%x_gamma_extrapolation_ispresent = .TRUE. 993 obj%x_gamma_extrapolation = x_gamma_extrapolation 994 ELSE 995 obj%x_gamma_extrapolation_ispresent = .FALSE. 996 END IF 997 IF ( PRESENT(ecutvcut)) THEN 998 obj%ecutvcut_ispresent = .TRUE. 999 obj%ecutvcut = ecutvcut 1000 ELSE 1001 obj%ecutvcut_ispresent = .FALSE. 1002 END IF 1003 IF ( PRESENT(localization_threshold)) THEN 1004 obj%localization_threshold_ispresent = .TRUE. 1005 obj%localization_threshold = localization_threshold 1006 ELSE 1007 obj%localization_threshold_ispresent = .FALSE. 1008 END IF 1009 ! 1010 END SUBROUTINE qes_init_hybrid 1011 ! 1012 ! 1013 SUBROUTINE qes_init_qpoint_grid(obj, tagname, nqx1, nqx2, nqx3, qpoint_grid) 1014 ! 1015 IMPLICIT NONE 1016 ! 1017 TYPE(qpoint_grid_type), INTENT(OUT) :: obj 1018 CHARACTER(LEN=*), INTENT(IN) :: tagname 1019 INTEGER, INTENT(IN) :: nqx1 1020 INTEGER, INTENT(IN) :: nqx2 1021 INTEGER, INTENT(IN) :: nqx3 1022 CHARACTER(LEN=*), INTENT(IN) :: qpoint_grid 1023 ! 1024 obj%tagname = TRIM(tagname) 1025 obj%lwrite = .TRUE. 1026 obj%lread = .TRUE. 1027 obj%nqx1 = nqx1 1028 obj%nqx2 = nqx2 1029 obj%nqx3 = nqx3 1030 ! 1031 obj%qpoint_grid = qpoint_grid 1032 ! 1033 END SUBROUTINE qes_init_qpoint_grid 1034 ! 1035 ! 1036 SUBROUTINE qes_init_dftU(obj, tagname, lda_plus_u_kind, Hubbard_U, Hubbard_J0, Hubbard_alpha,& 1037 Hubbard_beta, Hubbard_J, starting_ns, Hubbard_ns, U_projection_type,& 1038 Hubbard_back, Hubbard_U_back, Hubbard_alpha_back, Hubbard_ns_nc) 1039 ! 1040 IMPLICIT NONE 1041 ! 1042 TYPE(dftU_type), INTENT(OUT) :: obj 1043 CHARACTER(LEN=*), INTENT(IN) :: tagname 1044 INTEGER,OPTIONAL,INTENT(IN) :: lda_plus_u_kind 1045 TYPE(HubbardCommon_type),OPTIONAL,DIMENSION(:),INTENT(IN) :: Hubbard_U 1046 TYPE(HubbardCommon_type),OPTIONAL,DIMENSION(:),INTENT(IN) :: Hubbard_J0 1047 TYPE(HubbardCommon_type),OPTIONAL,DIMENSION(:),INTENT(IN) :: Hubbard_alpha 1048 TYPE(HubbardCommon_type),OPTIONAL,DIMENSION(:),INTENT(IN) :: Hubbard_beta 1049 TYPE(HubbardJ_type),OPTIONAL,DIMENSION(:),INTENT(IN) :: Hubbard_J 1050 TYPE(starting_ns_type),OPTIONAL,DIMENSION(:),INTENT(IN) :: starting_ns 1051 TYPE(Hubbard_ns_type),OPTIONAL,DIMENSION(:),INTENT(IN) :: Hubbard_ns 1052 CHARACTER(LEN=*),OPTIONAL,INTENT(IN) :: U_projection_type 1053 TYPE(HubbardBack_type),OPTIONAL,DIMENSION(:),INTENT(IN) :: Hubbard_back 1054 TYPE(HubbardCommon_type),OPTIONAL,DIMENSION(:),INTENT(IN) :: Hubbard_U_back 1055 TYPE(HubbardCommon_type),OPTIONAL,DIMENSION(:),INTENT(IN) :: Hubbard_alpha_back 1056 TYPE(Hubbard_ns_type),OPTIONAL,DIMENSION(:),INTENT(IN) :: Hubbard_ns_nc 1057 ! 1058 obj%tagname = TRIM(tagname) 1059 obj%lwrite = .TRUE. 1060 obj%lread = .TRUE. 1061 ! 1062 IF ( PRESENT(lda_plus_u_kind)) THEN 1063 obj%lda_plus_u_kind_ispresent = .TRUE. 1064 obj%lda_plus_u_kind = lda_plus_u_kind 1065 ELSE 1066 obj%lda_plus_u_kind_ispresent = .FALSE. 1067 END IF 1068 IF ( PRESENT(Hubbard_U)) THEN 1069 obj%Hubbard_U_ispresent = .TRUE. 1070 ALLOCATE(obj%Hubbard_U(SIZE(Hubbard_U))) 1071 obj%ndim_Hubbard_U = SIZE(Hubbard_U) 1072 obj%Hubbard_U = Hubbard_U 1073 ELSE 1074 obj%Hubbard_U_ispresent = .FALSE. 1075 END IF 1076 IF ( PRESENT(Hubbard_J0)) THEN 1077 obj%Hubbard_J0_ispresent = .TRUE. 1078 ALLOCATE(obj%Hubbard_J0(SIZE(Hubbard_J0))) 1079 obj%ndim_Hubbard_J0 = SIZE(Hubbard_J0) 1080 obj%Hubbard_J0 = Hubbard_J0 1081 ELSE 1082 obj%Hubbard_J0_ispresent = .FALSE. 1083 END IF 1084 IF ( PRESENT(Hubbard_alpha)) THEN 1085 obj%Hubbard_alpha_ispresent = .TRUE. 1086 ALLOCATE(obj%Hubbard_alpha(SIZE(Hubbard_alpha))) 1087 obj%ndim_Hubbard_alpha = SIZE(Hubbard_alpha) 1088 obj%Hubbard_alpha = Hubbard_alpha 1089 ELSE 1090 obj%Hubbard_alpha_ispresent = .FALSE. 1091 END IF 1092 IF ( PRESENT(Hubbard_beta)) THEN 1093 obj%Hubbard_beta_ispresent = .TRUE. 1094 ALLOCATE(obj%Hubbard_beta(SIZE(Hubbard_beta))) 1095 obj%ndim_Hubbard_beta = SIZE(Hubbard_beta) 1096 obj%Hubbard_beta = Hubbard_beta 1097 ELSE 1098 obj%Hubbard_beta_ispresent = .FALSE. 1099 END IF 1100 IF ( PRESENT(Hubbard_J)) THEN 1101 obj%Hubbard_J_ispresent = .TRUE. 1102 ALLOCATE(obj%Hubbard_J(SIZE(Hubbard_J))) 1103 obj%ndim_Hubbard_J = SIZE(Hubbard_J) 1104 obj%Hubbard_J = Hubbard_J 1105 ELSE 1106 obj%Hubbard_J_ispresent = .FALSE. 1107 END IF 1108 IF ( PRESENT(starting_ns)) THEN 1109 obj%starting_ns_ispresent = .TRUE. 1110 ALLOCATE(obj%starting_ns(SIZE(starting_ns))) 1111 obj%ndim_starting_ns = SIZE(starting_ns) 1112 obj%starting_ns = starting_ns 1113 ELSE 1114 obj%starting_ns_ispresent = .FALSE. 1115 END IF 1116 IF ( PRESENT(Hubbard_ns)) THEN 1117 obj%Hubbard_ns_ispresent = .TRUE. 1118 ALLOCATE(obj%Hubbard_ns(SIZE(Hubbard_ns))) 1119 obj%ndim_Hubbard_ns = SIZE(Hubbard_ns) 1120 obj%Hubbard_ns = Hubbard_ns 1121 ELSE 1122 obj%Hubbard_ns_ispresent = .FALSE. 1123 END IF 1124 IF ( PRESENT(U_projection_type)) THEN 1125 obj%U_projection_type_ispresent = .TRUE. 1126 obj%U_projection_type = U_projection_type 1127 ELSE 1128 obj%U_projection_type_ispresent = .FALSE. 1129 END IF 1130 IF ( PRESENT(Hubbard_back)) THEN 1131 obj%Hubbard_back_ispresent = .TRUE. 1132 ALLOCATE(obj%Hubbard_back(SIZE(Hubbard_back))) 1133 obj%ndim_Hubbard_back = SIZE(Hubbard_back) 1134 obj%Hubbard_back = Hubbard_back 1135 ELSE 1136 obj%Hubbard_back_ispresent = .FALSE. 1137 END IF 1138 IF ( PRESENT(Hubbard_U_back)) THEN 1139 obj%Hubbard_U_back_ispresent = .TRUE. 1140 ALLOCATE(obj%Hubbard_U_back(SIZE(Hubbard_U_back))) 1141 obj%ndim_Hubbard_U_back = SIZE(Hubbard_U_back) 1142 obj%Hubbard_U_back = Hubbard_U_back 1143 ELSE 1144 obj%Hubbard_U_back_ispresent = .FALSE. 1145 END IF 1146 IF ( PRESENT(Hubbard_alpha_back)) THEN 1147 obj%Hubbard_alpha_back_ispresent = .TRUE. 1148 ALLOCATE(obj%Hubbard_alpha_back(SIZE(Hubbard_alpha_back))) 1149 obj%ndim_Hubbard_alpha_back = SIZE(Hubbard_alpha_back) 1150 obj%Hubbard_alpha_back = Hubbard_alpha_back 1151 ELSE 1152 obj%Hubbard_alpha_back_ispresent = .FALSE. 1153 END IF 1154 IF ( PRESENT(Hubbard_ns_nc)) THEN 1155 obj%Hubbard_ns_nc_ispresent = .TRUE. 1156 ALLOCATE(obj%Hubbard_ns_nc(SIZE(Hubbard_ns_nc))) 1157 obj%ndim_Hubbard_ns_nc = SIZE(Hubbard_ns_nc) 1158 obj%Hubbard_ns_nc = Hubbard_ns_nc 1159 ELSE 1160 obj%Hubbard_ns_nc_ispresent = .FALSE. 1161 END IF 1162 ! 1163 END SUBROUTINE qes_init_dftU 1164 ! 1165 ! 1166 SUBROUTINE qes_init_HubbardCommon(obj, tagname, specie, HubbardCommon, label) 1167 ! 1168 IMPLICIT NONE 1169 ! 1170 TYPE(HubbardCommon_type), INTENT(OUT) :: obj 1171 CHARACTER(LEN=*), INTENT(IN) :: tagname 1172 CHARACTER(LEN=*), INTENT(IN) :: specie 1173 CHARACTER(LEN=*), OPTIONAL, INTENT(IN) :: label 1174 REAL(DP), INTENT(IN) :: HubbardCommon 1175 ! 1176 obj%tagname = TRIM(tagname) 1177 obj%lwrite = .TRUE. 1178 obj%lread = .TRUE. 1179 obj%specie = specie 1180 IF (PRESENT(label)) THEN 1181 obj%label_ispresent = .TRUE. 1182 obj%label = label 1183 ELSE 1184 obj%label_ispresent = .FALSE. 1185 END IF 1186 ! 1187 obj%HubbardCommon = HubbardCommon 1188 ! 1189 END SUBROUTINE qes_init_HubbardCommon 1190 ! 1191 ! 1192 SUBROUTINE qes_init_HubbardJ(obj, tagname, specie, label, HubbardJ) 1193 ! 1194 IMPLICIT NONE 1195 ! 1196 TYPE(HubbardJ_type), INTENT(OUT) :: obj 1197 CHARACTER(LEN=*), INTENT(IN) :: tagname 1198 CHARACTER(LEN=*), INTENT(IN) :: specie 1199 CHARACTER(LEN=*), INTENT(IN) :: label 1200 REAL(DP), DIMENSION(3), INTENT(IN) :: HubbardJ 1201 ! 1202 obj%tagname = TRIM(tagname) 1203 obj%lwrite = .TRUE. 1204 obj%lread = .TRUE. 1205 obj%specie = specie 1206 obj%label = label 1207 ! 1208 obj%HubbardJ = HubbardJ 1209 ! 1210 END SUBROUTINE qes_init_HubbardJ 1211 ! 1212 ! 1213 SUBROUTINE qes_init_starting_ns(obj, tagname, specie, label, spin, starting_ns) 1214 ! 1215 IMPLICIT NONE 1216 ! 1217 TYPE(starting_ns_type), INTENT(OUT) :: obj 1218 CHARACTER(LEN=*), INTENT(IN) :: tagname 1219 REAL(DP), DIMENSION(:), INTENT(IN) :: starting_ns 1220 CHARACTER(LEN=*), INTENT(IN) :: specie 1221 CHARACTER(LEN=*), INTENT(IN) :: label 1222 INTEGER, INTENT(IN) :: spin 1223 ! 1224 obj%tagname = TRIM(tagname) 1225 obj%lwrite = .TRUE. 1226 obj%lread = .TRUE. 1227 ! 1228 obj%specie = specie 1229 obj%label = label 1230 obj%spin = spin 1231 obj%size = size(starting_ns) 1232 ALLOCATE(obj%starting_ns(obj%size)) 1233 obj%starting_ns = starting_ns 1234 ! 1235 END SUBROUTINE qes_init_starting_ns 1236 ! 1237 ! 1238 SUBROUTINE qes_init_Hubbard_ns(obj, tagname, specie, label, spin, index, order, Hubbard_ns) 1239 ! 1240 IMPLICIT NONE 1241 ! 1242 TYPE(Hubbard_ns_type), INTENT(OUT) :: obj 1243 CHARACTER(LEN=*), INTENT(IN) :: tagname 1244 CHARACTER(LEN=*), INTENT(IN) :: specie 1245 CHARACTER(LEN=*), INTENT(IN) :: label 1246 INTEGER, INTENT(IN) :: spin 1247 INTEGER, INTENT(IN) :: index 1248 REAL(DP), DIMENSION(:,:), INTENT(IN) :: Hubbard_ns 1249 CHARACTER(LEN=*),INTENT(IN) :: order 1250 INTEGER :: length, i 1251 ! 1252 obj%tagname = TRIM(tagname) 1253 obj%lwrite = .TRUE. 1254 obj%lread = .TRUE. 1255 obj%specie = specie 1256 obj%label = label 1257 obj%spin = spin 1258 obj%index = index 1259 ! 1260 1261 1262 1263 obj%order = order 1264 1265 length = 1 1266 obj%rank = SIZE(shape(Hubbard_ns)) 1267 ALLOCATE ( obj%dims(obj%rank)) 1268 obj%dims = shape(Hubbard_ns) 1269 DO i = 1, obj%rank 1270 length = length * obj%dims(i) 1271 END DO 1272 ALLOCATE(obj%Hubbard_ns(length)) 1273 obj%Hubbard_ns(1:length) = reshape(Hubbard_ns, [length]) 1274 ! 1275 END SUBROUTINE qes_init_Hubbard_ns 1276 ! 1277 ! 1278 SUBROUTINE qes_init_HubbardBack(obj, tagname, species, background, l_number) 1279 ! 1280 IMPLICIT NONE 1281 ! 1282 TYPE(HubbardBack_type), INTENT(OUT) :: obj 1283 CHARACTER(LEN=*), INTENT(IN) :: tagname 1284 CHARACTER(LEN=*), INTENT(IN) :: species 1285 CHARACTER(LEN=*),INTENT(IN) :: background 1286 TYPE(backL_type),DIMENSION(:),INTENT(IN) :: l_number 1287 ! 1288 obj%tagname = TRIM(tagname) 1289 obj%lwrite = .TRUE. 1290 obj%lread = .TRUE. 1291 obj%species = species 1292 ! 1293 obj%background = background 1294 ALLOCATE( obj%l_number(SIZE(l_number))) 1295 obj%ndim_l_number = SIZE(l_number) 1296 obj%l_number = l_number 1297 ! 1298 END SUBROUTINE qes_init_HubbardBack 1299 ! 1300 ! 1301 SUBROUTINE qes_init_backL(obj, tagname, l_index, backL) 1302 ! 1303 IMPLICIT NONE 1304 ! 1305 TYPE(backL_type), INTENT(OUT) :: obj 1306 CHARACTER(LEN=*), INTENT(IN) :: tagname 1307 INTEGER, INTENT(IN) :: l_index 1308 INTEGER, INTENT(IN) :: backL 1309 ! 1310 obj%tagname = TRIM(tagname) 1311 obj%lwrite = .TRUE. 1312 obj%lread = .TRUE. 1313 obj%l_index = l_index 1314 ! 1315 obj%backL = backL 1316 ! 1317 END SUBROUTINE qes_init_backL 1318 ! 1319 ! 1320 SUBROUTINE qes_init_vdW(obj, tagname, vdw_corr, dftd3_version, dftd3_threebody, non_local_term,& 1321 functional, total_energy_term, london_s6, ts_vdw_econv_thr, ts_vdw_isolated,& 1322 london_rcut, xdm_a1, xdm_a2, london_c6) 1323 ! 1324 IMPLICIT NONE 1325 ! 1326 TYPE(vdW_type), INTENT(OUT) :: obj 1327 CHARACTER(LEN=*), INTENT(IN) :: tagname 1328 CHARACTER(LEN=*),OPTIONAL,INTENT(IN) :: vdw_corr 1329 INTEGER,OPTIONAL,INTENT(IN) :: dftd3_version 1330 LOGICAL,OPTIONAL,INTENT(IN) :: dftd3_threebody 1331 CHARACTER(LEN=*),OPTIONAL,INTENT(IN) :: non_local_term 1332 CHARACTER(LEN=*),OPTIONAL,INTENT(IN) :: functional 1333 REAL(DP),OPTIONAL,INTENT(IN) :: total_energy_term 1334 REAL(DP),OPTIONAL,INTENT(IN) :: london_s6 1335 REAL(DP),OPTIONAL,INTENT(IN) :: ts_vdw_econv_thr 1336 LOGICAL,OPTIONAL,INTENT(IN) :: ts_vdw_isolated 1337 REAL(DP),OPTIONAL,INTENT(IN) :: london_rcut 1338 REAL(DP),OPTIONAL,INTENT(IN) :: xdm_a1 1339 REAL(DP),OPTIONAL,INTENT(IN) :: xdm_a2 1340 TYPE(HubbardCommon_type),OPTIONAL,DIMENSION(:),INTENT(IN) :: london_c6 1341 ! 1342 obj%tagname = TRIM(tagname) 1343 obj%lwrite = .TRUE. 1344 obj%lread = .TRUE. 1345 ! 1346 IF ( PRESENT(vdw_corr)) THEN 1347 obj%vdw_corr_ispresent = .TRUE. 1348 obj%vdw_corr = vdw_corr 1349 ELSE 1350 obj%vdw_corr_ispresent = .FALSE. 1351 END IF 1352 IF ( PRESENT(dftd3_version)) THEN 1353 obj%dftd3_version_ispresent = .TRUE. 1354 obj%dftd3_version = dftd3_version 1355 ELSE 1356 obj%dftd3_version_ispresent = .FALSE. 1357 END IF 1358 IF ( PRESENT(dftd3_threebody)) THEN 1359 obj%dftd3_threebody_ispresent = .TRUE. 1360 obj%dftd3_threebody = dftd3_threebody 1361 ELSE 1362 obj%dftd3_threebody_ispresent = .FALSE. 1363 END IF 1364 IF ( PRESENT(non_local_term)) THEN 1365 obj%non_local_term_ispresent = .TRUE. 1366 obj%non_local_term = non_local_term 1367 ELSE 1368 obj%non_local_term_ispresent = .FALSE. 1369 END IF 1370 IF ( PRESENT(functional)) THEN 1371 obj%functional_ispresent = .TRUE. 1372 obj%functional = functional 1373 ELSE 1374 obj%functional_ispresent = .FALSE. 1375 END IF 1376 IF ( PRESENT(total_energy_term)) THEN 1377 obj%total_energy_term_ispresent = .TRUE. 1378 obj%total_energy_term = total_energy_term 1379 ELSE 1380 obj%total_energy_term_ispresent = .FALSE. 1381 END IF 1382 IF ( PRESENT(london_s6)) THEN 1383 obj%london_s6_ispresent = .TRUE. 1384 obj%london_s6 = london_s6 1385 ELSE 1386 obj%london_s6_ispresent = .FALSE. 1387 END IF 1388 IF ( PRESENT(ts_vdw_econv_thr)) THEN 1389 obj%ts_vdw_econv_thr_ispresent = .TRUE. 1390 obj%ts_vdw_econv_thr = ts_vdw_econv_thr 1391 ELSE 1392 obj%ts_vdw_econv_thr_ispresent = .FALSE. 1393 END IF 1394 IF ( PRESENT(ts_vdw_isolated)) THEN 1395 obj%ts_vdw_isolated_ispresent = .TRUE. 1396 obj%ts_vdw_isolated = ts_vdw_isolated 1397 ELSE 1398 obj%ts_vdw_isolated_ispresent = .FALSE. 1399 END IF 1400 IF ( PRESENT(london_rcut)) THEN 1401 obj%london_rcut_ispresent = .TRUE. 1402 obj%london_rcut = london_rcut 1403 ELSE 1404 obj%london_rcut_ispresent = .FALSE. 1405 END IF 1406 IF ( PRESENT(xdm_a1)) THEN 1407 obj%xdm_a1_ispresent = .TRUE. 1408 obj%xdm_a1 = xdm_a1 1409 ELSE 1410 obj%xdm_a1_ispresent = .FALSE. 1411 END IF 1412 IF ( PRESENT(xdm_a2)) THEN 1413 obj%xdm_a2_ispresent = .TRUE. 1414 obj%xdm_a2 = xdm_a2 1415 ELSE 1416 obj%xdm_a2_ispresent = .FALSE. 1417 END IF 1418 IF ( PRESENT(london_c6)) THEN 1419 obj%london_c6_ispresent = .TRUE. 1420 ALLOCATE(obj%london_c6(SIZE(london_c6))) 1421 obj%ndim_london_c6 = SIZE(london_c6) 1422 obj%london_c6 = london_c6 1423 ELSE 1424 obj%london_c6_ispresent = .FALSE. 1425 END IF 1426 ! 1427 END SUBROUTINE qes_init_vdW 1428 ! 1429 ! 1430 SUBROUTINE qes_init_spin(obj, tagname, lsda, noncolin, spinorbit) 1431 ! 1432 IMPLICIT NONE 1433 ! 1434 TYPE(spin_type), INTENT(OUT) :: obj 1435 CHARACTER(LEN=*), INTENT(IN) :: tagname 1436 LOGICAL,INTENT(IN) :: lsda 1437 LOGICAL,INTENT(IN) :: noncolin 1438 LOGICAL,INTENT(IN) :: spinorbit 1439 ! 1440 obj%tagname = TRIM(tagname) 1441 obj%lwrite = .TRUE. 1442 obj%lread = .TRUE. 1443 ! 1444 obj%lsda = lsda 1445 obj%noncolin = noncolin 1446 obj%spinorbit = spinorbit 1447 ! 1448 END SUBROUTINE qes_init_spin 1449 ! 1450 ! 1451 SUBROUTINE qes_init_bands(obj, tagname, occupations, nbnd, smearing, tot_charge, tot_magnetization, inputOccupations) 1452 ! 1453 IMPLICIT NONE 1454 ! 1455 TYPE(bands_type), INTENT(OUT) :: obj 1456 CHARACTER(LEN=*), INTENT(IN) :: tagname 1457 INTEGER,OPTIONAL,INTENT(IN) :: nbnd 1458 TYPE(smearing_type),OPTIONAL,INTENT(IN) :: smearing 1459 REAL(DP),OPTIONAL,INTENT(IN) :: tot_charge 1460 REAL(DP),OPTIONAL,INTENT(IN) :: tot_magnetization 1461 TYPE(occupations_type),INTENT(IN) :: occupations 1462 TYPE(inputOccupations_type),OPTIONAL,DIMENSION(:),INTENT(IN) :: inputOccupations 1463 ! 1464 obj%tagname = TRIM(tagname) 1465 obj%lwrite = .TRUE. 1466 obj%lread = .TRUE. 1467 ! 1468 IF ( PRESENT(nbnd)) THEN 1469 obj%nbnd_ispresent = .TRUE. 1470 obj%nbnd = nbnd 1471 ELSE 1472 obj%nbnd_ispresent = .FALSE. 1473 END IF 1474 IF ( PRESENT(smearing)) THEN 1475 obj%smearing_ispresent = .TRUE. 1476 obj%smearing = smearing 1477 ELSE 1478 obj%smearing_ispresent = .FALSE. 1479 END IF 1480 IF ( PRESENT(tot_charge)) THEN 1481 obj%tot_charge_ispresent = .TRUE. 1482 obj%tot_charge = tot_charge 1483 ELSE 1484 obj%tot_charge_ispresent = .FALSE. 1485 END IF 1486 IF ( PRESENT(tot_magnetization)) THEN 1487 obj%tot_magnetization_ispresent = .TRUE. 1488 obj%tot_magnetization = tot_magnetization 1489 ELSE 1490 obj%tot_magnetization_ispresent = .FALSE. 1491 END IF 1492 obj%occupations = occupations 1493 IF ( PRESENT(inputOccupations)) THEN 1494 obj%inputOccupations_ispresent = .TRUE. 1495 ALLOCATE(obj%inputOccupations(SIZE(inputOccupations))) 1496 obj%ndim_inputOccupations = SIZE(inputOccupations) 1497 obj%inputOccupations = inputOccupations 1498 ELSE 1499 obj%inputOccupations_ispresent = .FALSE. 1500 END IF 1501 ! 1502 END SUBROUTINE qes_init_bands 1503 ! 1504 ! 1505 SUBROUTINE qes_init_smearing(obj, tagname, degauss, smearing) 1506 ! 1507 IMPLICIT NONE 1508 ! 1509 TYPE(smearing_type), INTENT(OUT) :: obj 1510 CHARACTER(LEN=*), INTENT(IN) :: tagname 1511 REAL(DP), INTENT(IN) :: degauss 1512 CHARACTER(LEN=*), INTENT(IN) :: smearing 1513 ! 1514 obj%tagname = TRIM(tagname) 1515 obj%lwrite = .TRUE. 1516 obj%lread = .TRUE. 1517 obj%degauss = degauss 1518 ! 1519 obj%smearing = smearing 1520 ! 1521 END SUBROUTINE qes_init_smearing 1522 ! 1523 ! 1524 SUBROUTINE qes_init_occupations(obj, tagname, occupations, spin) 1525 ! 1526 IMPLICIT NONE 1527 ! 1528 TYPE(occupations_type), INTENT(OUT) :: obj 1529 CHARACTER(LEN=*), INTENT(IN) :: tagname 1530 INTEGER, OPTIONAL, INTENT(IN) :: spin 1531 CHARACTER(LEN=*), INTENT(IN) :: occupations 1532 ! 1533 obj%tagname = TRIM(tagname) 1534 obj%lwrite = .TRUE. 1535 obj%lread = .TRUE. 1536 IF (PRESENT(spin)) THEN 1537 obj%spin_ispresent = .TRUE. 1538 obj%spin = spin 1539 ELSE 1540 obj%spin_ispresent = .FALSE. 1541 END IF 1542 ! 1543 obj%occupations = occupations 1544 ! 1545 END SUBROUTINE qes_init_occupations 1546 ! 1547 ! 1548 SUBROUTINE qes_init_basis(obj, tagname, ecutwfc, gamma_only, ecutrho, fft_grid, fft_smooth, fft_box) 1549 ! 1550 IMPLICIT NONE 1551 ! 1552 TYPE(basis_type), INTENT(OUT) :: obj 1553 CHARACTER(LEN=*), INTENT(IN) :: tagname 1554 LOGICAL,OPTIONAL,INTENT(IN) :: gamma_only 1555 REAL(DP),INTENT(IN) :: ecutwfc 1556 REAL(DP),OPTIONAL,INTENT(IN) :: ecutrho 1557 TYPE(basisSetItem_type),OPTIONAL,INTENT(IN) :: fft_grid 1558 TYPE(basisSetItem_type),OPTIONAL,INTENT(IN) :: fft_smooth 1559 TYPE(basisSetItem_type),OPTIONAL,INTENT(IN) :: fft_box 1560 ! 1561 obj%tagname = TRIM(tagname) 1562 obj%lwrite = .TRUE. 1563 obj%lread = .TRUE. 1564 ! 1565 IF ( PRESENT(gamma_only)) THEN 1566 obj%gamma_only_ispresent = .TRUE. 1567 obj%gamma_only = gamma_only 1568 ELSE 1569 obj%gamma_only_ispresent = .FALSE. 1570 END IF 1571 obj%ecutwfc = ecutwfc 1572 IF ( PRESENT(ecutrho)) THEN 1573 obj%ecutrho_ispresent = .TRUE. 1574 obj%ecutrho = ecutrho 1575 ELSE 1576 obj%ecutrho_ispresent = .FALSE. 1577 END IF 1578 IF ( PRESENT(fft_grid)) THEN 1579 obj%fft_grid_ispresent = .TRUE. 1580 obj%fft_grid = fft_grid 1581 ELSE 1582 obj%fft_grid_ispresent = .FALSE. 1583 END IF 1584 IF ( PRESENT(fft_smooth)) THEN 1585 obj%fft_smooth_ispresent = .TRUE. 1586 obj%fft_smooth = fft_smooth 1587 ELSE 1588 obj%fft_smooth_ispresent = .FALSE. 1589 END IF 1590 IF ( PRESENT(fft_box)) THEN 1591 obj%fft_box_ispresent = .TRUE. 1592 obj%fft_box = fft_box 1593 ELSE 1594 obj%fft_box_ispresent = .FALSE. 1595 END IF 1596 ! 1597 END SUBROUTINE qes_init_basis 1598 ! 1599 ! 1600 SUBROUTINE qes_init_basis_set(obj, tagname, ecutwfc, fft_grid, ngm, npwx, reciprocal_lattice,& 1601 gamma_only, ecutrho, fft_smooth, fft_box, ngms) 1602 ! 1603 IMPLICIT NONE 1604 ! 1605 TYPE(basis_set_type), INTENT(OUT) :: obj 1606 CHARACTER(LEN=*), INTENT(IN) :: tagname 1607 LOGICAL,OPTIONAL,INTENT(IN) :: gamma_only 1608 REAL(DP),INTENT(IN) :: ecutwfc 1609 REAL(DP),OPTIONAL,INTENT(IN) :: ecutrho 1610 TYPE(basisSetItem_type),INTENT(IN) :: fft_grid 1611 TYPE(basisSetItem_type),OPTIONAL,INTENT(IN) :: fft_smooth 1612 TYPE(basisSetItem_type),OPTIONAL,INTENT(IN) :: fft_box 1613 INTEGER,INTENT(IN) :: ngm 1614 INTEGER,OPTIONAL,INTENT(IN) :: ngms 1615 INTEGER,INTENT(IN) :: npwx 1616 TYPE(reciprocal_lattice_type),INTENT(IN) :: reciprocal_lattice 1617 ! 1618 obj%tagname = TRIM(tagname) 1619 obj%lwrite = .TRUE. 1620 obj%lread = .TRUE. 1621 ! 1622 IF ( PRESENT(gamma_only)) THEN 1623 obj%gamma_only_ispresent = .TRUE. 1624 obj%gamma_only = gamma_only 1625 ELSE 1626 obj%gamma_only_ispresent = .FALSE. 1627 END IF 1628 obj%ecutwfc = ecutwfc 1629 IF ( PRESENT(ecutrho)) THEN 1630 obj%ecutrho_ispresent = .TRUE. 1631 obj%ecutrho = ecutrho 1632 ELSE 1633 obj%ecutrho_ispresent = .FALSE. 1634 END IF 1635 obj%fft_grid = fft_grid 1636 IF ( PRESENT(fft_smooth)) THEN 1637 obj%fft_smooth_ispresent = .TRUE. 1638 obj%fft_smooth = fft_smooth 1639 ELSE 1640 obj%fft_smooth_ispresent = .FALSE. 1641 END IF 1642 IF ( PRESENT(fft_box)) THEN 1643 obj%fft_box_ispresent = .TRUE. 1644 obj%fft_box = fft_box 1645 ELSE 1646 obj%fft_box_ispresent = .FALSE. 1647 END IF 1648 obj%ngm = ngm 1649 IF ( PRESENT(ngms)) THEN 1650 obj%ngms_ispresent = .TRUE. 1651 obj%ngms = ngms 1652 ELSE 1653 obj%ngms_ispresent = .FALSE. 1654 END IF 1655 obj%npwx = npwx 1656 obj%reciprocal_lattice = reciprocal_lattice 1657 ! 1658 END SUBROUTINE qes_init_basis_set 1659 ! 1660 ! 1661 SUBROUTINE qes_init_basisSetItem(obj, tagname, nr1, nr2, nr3, basisSetItem) 1662 ! 1663 IMPLICIT NONE 1664 ! 1665 TYPE(basisSetItem_type), INTENT(OUT) :: obj 1666 CHARACTER(LEN=*), INTENT(IN) :: tagname 1667 INTEGER, INTENT(IN) :: nr1 1668 INTEGER, INTENT(IN) :: nr2 1669 INTEGER, INTENT(IN) :: nr3 1670 CHARACTER(LEN=*), INTENT(IN) :: basisSetItem 1671 ! 1672 obj%tagname = TRIM(tagname) 1673 obj%lwrite = .TRUE. 1674 obj%lread = .TRUE. 1675 obj%nr1 = nr1 1676 obj%nr2 = nr2 1677 obj%nr3 = nr3 1678 ! 1679 obj%basisSetItem = basisSetItem 1680 ! 1681 END SUBROUTINE qes_init_basisSetItem 1682 ! 1683 ! 1684 SUBROUTINE qes_init_reciprocal_lattice(obj, tagname, b1, b2, b3) 1685 ! 1686 IMPLICIT NONE 1687 ! 1688 TYPE(reciprocal_lattice_type), INTENT(OUT) :: obj 1689 CHARACTER(LEN=*), INTENT(IN) :: tagname 1690 REAL(DP), DIMENSION(3),INTENT(IN) :: b1 1691 REAL(DP), DIMENSION(3),INTENT(IN) :: b2 1692 REAL(DP), DIMENSION(3),INTENT(IN) :: b3 1693 ! 1694 obj%tagname = TRIM(tagname) 1695 obj%lwrite = .TRUE. 1696 obj%lread = .TRUE. 1697 ! 1698 obj%b1 = b1 1699 obj%b2 = b2 1700 obj%b3 = b3 1701 ! 1702 END SUBROUTINE qes_init_reciprocal_lattice 1703 ! 1704 ! 1705 SUBROUTINE qes_init_electron_control(obj, tagname, diagonalization, mixing_mode, mixing_beta,& 1706 conv_thr, mixing_ndim, max_nstep, tq_smoothing, tbeta_smoothing,& 1707 diago_thr_init, diago_full_acc, real_space_q, real_space_beta,& 1708 diago_cg_maxiter, diago_ppcg_maxiter, diago_david_ndim) 1709 ! 1710 IMPLICIT NONE 1711 ! 1712 TYPE(electron_control_type), INTENT(OUT) :: obj 1713 CHARACTER(LEN=*), INTENT(IN) :: tagname 1714 CHARACTER(LEN=*),INTENT(IN) :: diagonalization 1715 CHARACTER(LEN=*),INTENT(IN) :: mixing_mode 1716 REAL(DP),INTENT(IN) :: mixing_beta 1717 REAL(DP),INTENT(IN) :: conv_thr 1718 INTEGER,INTENT(IN) :: mixing_ndim 1719 INTEGER,INTENT(IN) :: max_nstep 1720 LOGICAL,OPTIONAL,INTENT(IN) :: real_space_q 1721 LOGICAL,OPTIONAL,INTENT(IN) :: real_space_beta 1722 LOGICAL,INTENT(IN) :: tq_smoothing 1723 LOGICAL,INTENT(IN) :: tbeta_smoothing 1724 REAL(DP),INTENT(IN) :: diago_thr_init 1725 LOGICAL,INTENT(IN) :: diago_full_acc 1726 INTEGER,OPTIONAL,INTENT(IN) :: diago_cg_maxiter 1727 INTEGER,OPTIONAL,INTENT(IN) :: diago_ppcg_maxiter 1728 INTEGER,OPTIONAL,INTENT(IN) :: diago_david_ndim 1729 ! 1730 obj%tagname = TRIM(tagname) 1731 obj%lwrite = .TRUE. 1732 obj%lread = .TRUE. 1733 ! 1734 obj%diagonalization = diagonalization 1735 obj%mixing_mode = mixing_mode 1736 obj%mixing_beta = mixing_beta 1737 obj%conv_thr = conv_thr 1738 obj%mixing_ndim = mixing_ndim 1739 obj%max_nstep = max_nstep 1740 IF ( PRESENT(real_space_q)) THEN 1741 obj%real_space_q_ispresent = .TRUE. 1742 obj%real_space_q = real_space_q 1743 ELSE 1744 obj%real_space_q_ispresent = .FALSE. 1745 END IF 1746 IF ( PRESENT(real_space_beta)) THEN 1747 obj%real_space_beta_ispresent = .TRUE. 1748 obj%real_space_beta = real_space_beta 1749 ELSE 1750 obj%real_space_beta_ispresent = .FALSE. 1751 END IF 1752 obj%tq_smoothing = tq_smoothing 1753 obj%tbeta_smoothing = tbeta_smoothing 1754 obj%diago_thr_init = diago_thr_init 1755 obj%diago_full_acc = diago_full_acc 1756 IF ( PRESENT(diago_cg_maxiter)) THEN 1757 obj%diago_cg_maxiter_ispresent = .TRUE. 1758 obj%diago_cg_maxiter = diago_cg_maxiter 1759 ELSE 1760 obj%diago_cg_maxiter_ispresent = .FALSE. 1761 END IF 1762 IF ( PRESENT(diago_ppcg_maxiter)) THEN 1763 obj%diago_ppcg_maxiter_ispresent = .TRUE. 1764 obj%diago_ppcg_maxiter = diago_ppcg_maxiter 1765 ELSE 1766 obj%diago_ppcg_maxiter_ispresent = .FALSE. 1767 END IF 1768 IF ( PRESENT(diago_david_ndim)) THEN 1769 obj%diago_david_ndim_ispresent = .TRUE. 1770 obj%diago_david_ndim = diago_david_ndim 1771 ELSE 1772 obj%diago_david_ndim_ispresent = .FALSE. 1773 END IF 1774 ! 1775 END SUBROUTINE qes_init_electron_control 1776 ! 1777 ! 1778 SUBROUTINE qes_init_k_points_IBZ(obj, tagname, monkhorst_pack, nk, k_point) 1779 ! 1780 IMPLICIT NONE 1781 ! 1782 TYPE(k_points_IBZ_type), INTENT(OUT) :: obj 1783 CHARACTER(LEN=*), INTENT(IN) :: tagname 1784 TYPE(monkhorst_pack_type),OPTIONAL,INTENT(IN) :: monkhorst_pack 1785 INTEGER,OPTIONAL,INTENT(IN) :: nk 1786 TYPE(k_point_type),OPTIONAL,DIMENSION(:),INTENT(IN) :: k_point 1787 ! 1788 obj%tagname = TRIM(tagname) 1789 obj%lwrite = .TRUE. 1790 obj%lread = .TRUE. 1791 ! 1792 IF ( PRESENT(monkhorst_pack)) THEN 1793 obj%monkhorst_pack_ispresent = .TRUE. 1794 obj%monkhorst_pack = monkhorst_pack 1795 ELSE 1796 obj%monkhorst_pack_ispresent = .FALSE. 1797 END IF 1798 IF ( PRESENT(nk)) THEN 1799 obj%nk_ispresent = .TRUE. 1800 obj%nk = nk 1801 ELSE 1802 obj%nk_ispresent = .FALSE. 1803 END IF 1804 IF ( PRESENT(k_point)) THEN 1805 obj%k_point_ispresent = .TRUE. 1806 ALLOCATE(obj%k_point(SIZE(k_point))) 1807 obj%ndim_k_point = SIZE(k_point) 1808 obj%k_point = k_point 1809 ELSE 1810 obj%k_point_ispresent = .FALSE. 1811 END IF 1812 ! 1813 END SUBROUTINE qes_init_k_points_IBZ 1814 ! 1815 ! 1816 SUBROUTINE qes_init_monkhorst_pack(obj, tagname, nk1, nk2, nk3, k1, k2, k3, monkhorst_pack) 1817 ! 1818 IMPLICIT NONE 1819 ! 1820 TYPE(monkhorst_pack_type), INTENT(OUT) :: obj 1821 CHARACTER(LEN=*), INTENT(IN) :: tagname 1822 INTEGER, INTENT(IN) :: nk1 1823 INTEGER, INTENT(IN) :: nk2 1824 INTEGER, INTENT(IN) :: nk3 1825 INTEGER, INTENT(IN) :: k1 1826 INTEGER, INTENT(IN) :: k2 1827 INTEGER, INTENT(IN) :: k3 1828 CHARACTER(LEN=*), INTENT(IN) :: monkhorst_pack 1829 ! 1830 obj%tagname = TRIM(tagname) 1831 obj%lwrite = .TRUE. 1832 obj%lread = .TRUE. 1833 obj%nk1 = nk1 1834 obj%nk2 = nk2 1835 obj%nk3 = nk3 1836 obj%k1 = k1 1837 obj%k2 = k2 1838 obj%k3 = k3 1839 ! 1840 obj%monkhorst_pack = monkhorst_pack 1841 ! 1842 END SUBROUTINE qes_init_monkhorst_pack 1843 ! 1844 ! 1845 SUBROUTINE qes_init_k_point(obj, tagname, k_point, weight, label) 1846 ! 1847 IMPLICIT NONE 1848 ! 1849 TYPE(k_point_type), INTENT(OUT) :: obj 1850 CHARACTER(LEN=*), INTENT(IN) :: tagname 1851 REAL(DP), OPTIONAL, INTENT(IN) :: weight 1852 CHARACTER(LEN=*), OPTIONAL, INTENT(IN) :: label 1853 REAL(DP), DIMENSION(3), INTENT(IN) :: k_point 1854 ! 1855 obj%tagname = TRIM(tagname) 1856 obj%lwrite = .TRUE. 1857 obj%lread = .TRUE. 1858 IF (PRESENT(weight)) THEN 1859 obj%weight_ispresent = .TRUE. 1860 obj%weight = weight 1861 ELSE 1862 obj%weight_ispresent = .FALSE. 1863 END IF 1864 IF (PRESENT(label)) THEN 1865 obj%label_ispresent = .TRUE. 1866 obj%label = label 1867 ELSE 1868 obj%label_ispresent = .FALSE. 1869 END IF 1870 ! 1871 obj%k_point = k_point 1872 ! 1873 END SUBROUTINE qes_init_k_point 1874 ! 1875 ! 1876 SUBROUTINE qes_init_ion_control(obj, tagname, ion_dynamics, upscale, remove_rigid_rot, refold_pos,& 1877 bfgs, md) 1878 ! 1879 IMPLICIT NONE 1880 ! 1881 TYPE(ion_control_type), INTENT(OUT) :: obj 1882 CHARACTER(LEN=*), INTENT(IN) :: tagname 1883 CHARACTER(LEN=*),INTENT(IN) :: ion_dynamics 1884 REAL(DP),OPTIONAL,INTENT(IN) :: upscale 1885 LOGICAL,OPTIONAL,INTENT(IN) :: remove_rigid_rot 1886 LOGICAL,OPTIONAL,INTENT(IN) :: refold_pos 1887 TYPE(bfgs_type),OPTIONAL,INTENT(IN) :: bfgs 1888 TYPE(md_type),OPTIONAL,INTENT(IN) :: md 1889 ! 1890 obj%tagname = TRIM(tagname) 1891 obj%lwrite = .TRUE. 1892 obj%lread = .TRUE. 1893 ! 1894 obj%ion_dynamics = ion_dynamics 1895 IF ( PRESENT(upscale)) THEN 1896 obj%upscale_ispresent = .TRUE. 1897 obj%upscale = upscale 1898 ELSE 1899 obj%upscale_ispresent = .FALSE. 1900 END IF 1901 IF ( PRESENT(remove_rigid_rot)) THEN 1902 obj%remove_rigid_rot_ispresent = .TRUE. 1903 obj%remove_rigid_rot = remove_rigid_rot 1904 ELSE 1905 obj%remove_rigid_rot_ispresent = .FALSE. 1906 END IF 1907 IF ( PRESENT(refold_pos)) THEN 1908 obj%refold_pos_ispresent = .TRUE. 1909 obj%refold_pos = refold_pos 1910 ELSE 1911 obj%refold_pos_ispresent = .FALSE. 1912 END IF 1913 IF ( PRESENT(bfgs)) THEN 1914 obj%bfgs_ispresent = .TRUE. 1915 obj%bfgs = bfgs 1916 ELSE 1917 obj%bfgs_ispresent = .FALSE. 1918 END IF 1919 IF ( PRESENT(md)) THEN 1920 obj%md_ispresent = .TRUE. 1921 obj%md = md 1922 ELSE 1923 obj%md_ispresent = .FALSE. 1924 END IF 1925 ! 1926 END SUBROUTINE qes_init_ion_control 1927 ! 1928 ! 1929 SUBROUTINE qes_init_bfgs(obj, tagname, ndim, trust_radius_min, trust_radius_max, trust_radius_init,& 1930 w1, w2) 1931 ! 1932 IMPLICIT NONE 1933 ! 1934 TYPE(bfgs_type), INTENT(OUT) :: obj 1935 CHARACTER(LEN=*), INTENT(IN) :: tagname 1936 INTEGER,INTENT(IN) :: ndim 1937 REAL(DP),INTENT(IN) :: trust_radius_min 1938 REAL(DP),INTENT(IN) :: trust_radius_max 1939 REAL(DP),INTENT(IN) :: trust_radius_init 1940 REAL(DP),INTENT(IN) :: w1 1941 REAL(DP),INTENT(IN) :: w2 1942 ! 1943 obj%tagname = TRIM(tagname) 1944 obj%lwrite = .TRUE. 1945 obj%lread = .TRUE. 1946 ! 1947 obj%ndim = ndim 1948 obj%trust_radius_min = trust_radius_min 1949 obj%trust_radius_max = trust_radius_max 1950 obj%trust_radius_init = trust_radius_init 1951 obj%w1 = w1 1952 obj%w2 = w2 1953 ! 1954 END SUBROUTINE qes_init_bfgs 1955 ! 1956 ! 1957 SUBROUTINE qes_init_md(obj, tagname, pot_extrapolation, wfc_extrapolation, ion_temperature,& 1958 timestep, tempw, tolp, deltaT, nraise) 1959 ! 1960 IMPLICIT NONE 1961 ! 1962 TYPE(md_type), INTENT(OUT) :: obj 1963 CHARACTER(LEN=*), INTENT(IN) :: tagname 1964 CHARACTER(LEN=*),INTENT(IN) :: pot_extrapolation 1965 CHARACTER(LEN=*),INTENT(IN) :: wfc_extrapolation 1966 CHARACTER(LEN=*),INTENT(IN) :: ion_temperature 1967 REAL(DP),INTENT(IN) :: timestep 1968 REAL(DP),INTENT(IN) :: tempw 1969 REAL(DP),INTENT(IN) :: tolp 1970 REAL(DP),INTENT(IN) :: deltaT 1971 INTEGER,INTENT(IN) :: nraise 1972 ! 1973 obj%tagname = TRIM(tagname) 1974 obj%lwrite = .TRUE. 1975 obj%lread = .TRUE. 1976 ! 1977 obj%pot_extrapolation = pot_extrapolation 1978 obj%wfc_extrapolation = wfc_extrapolation 1979 obj%ion_temperature = ion_temperature 1980 obj%timestep = timestep 1981 obj%tempw = tempw 1982 obj%tolp = tolp 1983 obj%deltaT = deltaT 1984 obj%nraise = nraise 1985 ! 1986 END SUBROUTINE qes_init_md 1987 ! 1988 ! 1989 SUBROUTINE qes_init_cell_control(obj, tagname, cell_dynamics, pressure, wmass, cell_factor,& 1990 fix_volume, fix_area, isotropic, free_cell) 1991 ! 1992 IMPLICIT NONE 1993 ! 1994 TYPE(cell_control_type), INTENT(OUT) :: obj 1995 CHARACTER(LEN=*), INTENT(IN) :: tagname 1996 CHARACTER(LEN=*),INTENT(IN) :: cell_dynamics 1997 REAL(DP),INTENT(IN) :: pressure 1998 REAL(DP),OPTIONAL,INTENT(IN) :: wmass 1999 REAL(DP),OPTIONAL,INTENT(IN) :: cell_factor 2000 LOGICAL,OPTIONAL,INTENT(IN) :: fix_volume 2001 LOGICAL,OPTIONAL,INTENT(IN) :: fix_area 2002 LOGICAL,OPTIONAL,INTENT(IN) :: isotropic 2003 TYPE(integerMatrix_type),OPTIONAL,INTENT(IN) :: free_cell 2004 ! 2005 obj%tagname = TRIM(tagname) 2006 obj%lwrite = .TRUE. 2007 obj%lread = .TRUE. 2008 ! 2009 obj%cell_dynamics = cell_dynamics 2010 obj%pressure = pressure 2011 IF ( PRESENT(wmass)) THEN 2012 obj%wmass_ispresent = .TRUE. 2013 obj%wmass = wmass 2014 ELSE 2015 obj%wmass_ispresent = .FALSE. 2016 END IF 2017 IF ( PRESENT(cell_factor)) THEN 2018 obj%cell_factor_ispresent = .TRUE. 2019 obj%cell_factor = cell_factor 2020 ELSE 2021 obj%cell_factor_ispresent = .FALSE. 2022 END IF 2023 IF ( PRESENT(fix_volume)) THEN 2024 obj%fix_volume_ispresent = .TRUE. 2025 obj%fix_volume = fix_volume 2026 ELSE 2027 obj%fix_volume_ispresent = .FALSE. 2028 END IF 2029 IF ( PRESENT(fix_area)) THEN 2030 obj%fix_area_ispresent = .TRUE. 2031 obj%fix_area = fix_area 2032 ELSE 2033 obj%fix_area_ispresent = .FALSE. 2034 END IF 2035 IF ( PRESENT(isotropic)) THEN 2036 obj%isotropic_ispresent = .TRUE. 2037 obj%isotropic = isotropic 2038 ELSE 2039 obj%isotropic_ispresent = .FALSE. 2040 END IF 2041 IF ( PRESENT(free_cell)) THEN 2042 obj%free_cell_ispresent = .TRUE. 2043 obj%free_cell = free_cell 2044 ELSE 2045 obj%free_cell_ispresent = .FALSE. 2046 END IF 2047 ! 2048 END SUBROUTINE qes_init_cell_control 2049 ! 2050 ! 2051 SUBROUTINE qes_init_symmetry_flags(obj, tagname, nosym, nosym_evc, noinv, no_t_rev, force_symmorphic, use_all_frac) 2052 ! 2053 IMPLICIT NONE 2054 ! 2055 TYPE(symmetry_flags_type), INTENT(OUT) :: obj 2056 CHARACTER(LEN=*), INTENT(IN) :: tagname 2057 LOGICAL,INTENT(IN) :: nosym 2058 LOGICAL,INTENT(IN) :: nosym_evc 2059 LOGICAL,INTENT(IN) :: noinv 2060 LOGICAL,INTENT(IN) :: no_t_rev 2061 LOGICAL,INTENT(IN) :: force_symmorphic 2062 LOGICAL,INTENT(IN) :: use_all_frac 2063 ! 2064 obj%tagname = TRIM(tagname) 2065 obj%lwrite = .TRUE. 2066 obj%lread = .TRUE. 2067 ! 2068 obj%nosym = nosym 2069 obj%nosym_evc = nosym_evc 2070 obj%noinv = noinv 2071 obj%no_t_rev = no_t_rev 2072 obj%force_symmorphic = force_symmorphic 2073 obj%use_all_frac = use_all_frac 2074 ! 2075 END SUBROUTINE qes_init_symmetry_flags 2076 ! 2077 ! 2078 SUBROUTINE qes_init_boundary_conditions(obj, tagname, assume_isolated, esm, fcp_opt, fcp_mu) 2079 ! 2080 IMPLICIT NONE 2081 ! 2082 TYPE(boundary_conditions_type), INTENT(OUT) :: obj 2083 CHARACTER(LEN=*), INTENT(IN) :: tagname 2084 CHARACTER(LEN=*),INTENT(IN) :: assume_isolated 2085 TYPE(esm_type),OPTIONAL,INTENT(IN) :: esm 2086 LOGICAL,OPTIONAL,INTENT(IN) :: fcp_opt 2087 REAL(DP),OPTIONAL,INTENT(IN) :: fcp_mu 2088 ! 2089 obj%tagname = TRIM(tagname) 2090 obj%lwrite = .TRUE. 2091 obj%lread = .TRUE. 2092 ! 2093 obj%assume_isolated = assume_isolated 2094 IF ( PRESENT(esm)) THEN 2095 obj%esm_ispresent = .TRUE. 2096 obj%esm = esm 2097 ELSE 2098 obj%esm_ispresent = .FALSE. 2099 END IF 2100 IF ( PRESENT(fcp_opt)) THEN 2101 obj%fcp_opt_ispresent = .TRUE. 2102 obj%fcp_opt = fcp_opt 2103 ELSE 2104 obj%fcp_opt_ispresent = .FALSE. 2105 END IF 2106 IF ( PRESENT(fcp_mu)) THEN 2107 obj%fcp_mu_ispresent = .TRUE. 2108 obj%fcp_mu = fcp_mu 2109 ELSE 2110 obj%fcp_mu_ispresent = .FALSE. 2111 END IF 2112 ! 2113 END SUBROUTINE qes_init_boundary_conditions 2114 ! 2115 ! 2116 SUBROUTINE qes_init_esm(obj, tagname, bc, nfit, w, efield) 2117 ! 2118 IMPLICIT NONE 2119 ! 2120 TYPE(esm_type), INTENT(OUT) :: obj 2121 CHARACTER(LEN=*), INTENT(IN) :: tagname 2122 CHARACTER(LEN=*),INTENT(IN) :: bc 2123 INTEGER,INTENT(IN) :: nfit 2124 REAL(DP),INTENT(IN) :: w 2125 REAL(DP),INTENT(IN) :: efield 2126 ! 2127 obj%tagname = TRIM(tagname) 2128 obj%lwrite = .TRUE. 2129 obj%lread = .TRUE. 2130 ! 2131 obj%bc = bc 2132 obj%nfit = nfit 2133 obj%w = w 2134 obj%efield = efield 2135 ! 2136 END SUBROUTINE qes_init_esm 2137 ! 2138 ! 2139 SUBROUTINE qes_init_ekin_functional(obj, tagname, ecfixed, qcutz, q2sigma) 2140 ! 2141 IMPLICIT NONE 2142 ! 2143 TYPE(ekin_functional_type), INTENT(OUT) :: obj 2144 CHARACTER(LEN=*), INTENT(IN) :: tagname 2145 REAL(DP),INTENT(IN) :: ecfixed 2146 REAL(DP),INTENT(IN) :: qcutz 2147 REAL(DP),INTENT(IN) :: q2sigma 2148 ! 2149 obj%tagname = TRIM(tagname) 2150 obj%lwrite = .TRUE. 2151 obj%lread = .TRUE. 2152 ! 2153 obj%ecfixed = ecfixed 2154 obj%qcutz = qcutz 2155 obj%q2sigma = q2sigma 2156 ! 2157 END SUBROUTINE qes_init_ekin_functional 2158 ! 2159 ! 2160 SUBROUTINE qes_init_spin_constraints(obj, tagname, spin_constraints, lagrange_multiplier, target_magnetization) 2161 ! 2162 IMPLICIT NONE 2163 ! 2164 TYPE(spin_constraints_type), INTENT(OUT) :: obj 2165 CHARACTER(LEN=*), INTENT(IN) :: tagname 2166 CHARACTER(LEN=*),INTENT(IN) :: spin_constraints 2167 REAL(DP),INTENT(IN) :: lagrange_multiplier 2168 REAL(DP), DIMENSION(3),OPTIONAL,INTENT(IN) :: target_magnetization 2169 ! 2170 obj%tagname = TRIM(tagname) 2171 obj%lwrite = .TRUE. 2172 obj%lread = .TRUE. 2173 ! 2174 obj%spin_constraints = spin_constraints 2175 obj%lagrange_multiplier = lagrange_multiplier 2176 IF ( PRESENT(target_magnetization)) THEN 2177 obj%target_magnetization_ispresent = .TRUE. 2178 obj%target_magnetization = target_magnetization 2179 ELSE 2180 obj%target_magnetization_ispresent = .FALSE. 2181 END IF 2182 ! 2183 END SUBROUTINE qes_init_spin_constraints 2184 ! 2185 ! 2186 SUBROUTINE qes_init_electric_field(obj, tagname, electric_potential, dipole_correction, gate_settings,& 2187 electric_field_direction, potential_max_position, potential_decrease_width,& 2188 electric_field_amplitude, electric_field_vector, nk_per_string, n_berry_cycles & 2189 ) 2190 ! 2191 IMPLICIT NONE 2192 ! 2193 TYPE(electric_field_type), INTENT(OUT) :: obj 2194 CHARACTER(LEN=*), INTENT(IN) :: tagname 2195 CHARACTER(LEN=*),INTENT(IN) :: electric_potential 2196 LOGICAL,OPTIONAL,INTENT(IN) :: dipole_correction 2197 TYPE(gate_settings_type),OPTIONAL,INTENT(IN) :: gate_settings 2198 INTEGER,OPTIONAL,INTENT(IN) :: electric_field_direction 2199 REAL(DP),OPTIONAL,INTENT(IN) :: potential_max_position 2200 REAL(DP),OPTIONAL,INTENT(IN) :: potential_decrease_width 2201 REAL(DP),OPTIONAL,INTENT(IN) :: electric_field_amplitude 2202 REAL(DP), DIMENSION(3),OPTIONAL,INTENT(IN) :: electric_field_vector 2203 INTEGER,OPTIONAL,INTENT(IN) :: nk_per_string 2204 INTEGER,OPTIONAL,INTENT(IN) :: n_berry_cycles 2205 ! 2206 obj%tagname = TRIM(tagname) 2207 obj%lwrite = .TRUE. 2208 obj%lread = .TRUE. 2209 ! 2210 obj%electric_potential = electric_potential 2211 IF ( PRESENT(dipole_correction)) THEN 2212 obj%dipole_correction_ispresent = .TRUE. 2213 obj%dipole_correction = dipole_correction 2214 ELSE 2215 obj%dipole_correction_ispresent = .FALSE. 2216 END IF 2217 IF ( PRESENT(gate_settings)) THEN 2218 obj%gate_settings_ispresent = .TRUE. 2219 obj%gate_settings = gate_settings 2220 ELSE 2221 obj%gate_settings_ispresent = .FALSE. 2222 END IF 2223 IF ( PRESENT(electric_field_direction)) THEN 2224 obj%electric_field_direction_ispresent = .TRUE. 2225 obj%electric_field_direction = electric_field_direction 2226 ELSE 2227 obj%electric_field_direction_ispresent = .FALSE. 2228 END IF 2229 IF ( PRESENT(potential_max_position)) THEN 2230 obj%potential_max_position_ispresent = .TRUE. 2231 obj%potential_max_position = potential_max_position 2232 ELSE 2233 obj%potential_max_position_ispresent = .FALSE. 2234 END IF 2235 IF ( PRESENT(potential_decrease_width)) THEN 2236 obj%potential_decrease_width_ispresent = .TRUE. 2237 obj%potential_decrease_width = potential_decrease_width 2238 ELSE 2239 obj%potential_decrease_width_ispresent = .FALSE. 2240 END IF 2241 IF ( PRESENT(electric_field_amplitude)) THEN 2242 obj%electric_field_amplitude_ispresent = .TRUE. 2243 obj%electric_field_amplitude = electric_field_amplitude 2244 ELSE 2245 obj%electric_field_amplitude_ispresent = .FALSE. 2246 END IF 2247 IF ( PRESENT(electric_field_vector)) THEN 2248 obj%electric_field_vector_ispresent = .TRUE. 2249 obj%electric_field_vector = electric_field_vector 2250 ELSE 2251 obj%electric_field_vector_ispresent = .FALSE. 2252 END IF 2253 IF ( PRESENT(nk_per_string)) THEN 2254 obj%nk_per_string_ispresent = .TRUE. 2255 obj%nk_per_string = nk_per_string 2256 ELSE 2257 obj%nk_per_string_ispresent = .FALSE. 2258 END IF 2259 IF ( PRESENT(n_berry_cycles)) THEN 2260 obj%n_berry_cycles_ispresent = .TRUE. 2261 obj%n_berry_cycles = n_berry_cycles 2262 ELSE 2263 obj%n_berry_cycles_ispresent = .FALSE. 2264 END IF 2265 ! 2266 END SUBROUTINE qes_init_electric_field 2267 ! 2268 ! 2269 SUBROUTINE qes_init_gate_settings(obj, tagname, use_gate, zgate, relaxz, block, block_1, block_2, block_height) 2270 ! 2271 IMPLICIT NONE 2272 ! 2273 TYPE(gate_settings_type), INTENT(OUT) :: obj 2274 CHARACTER(LEN=*), INTENT(IN) :: tagname 2275 LOGICAL,INTENT(IN) :: use_gate 2276 REAL(DP),OPTIONAL,INTENT(IN) :: zgate 2277 LOGICAL,OPTIONAL,INTENT(IN) :: relaxz 2278 LOGICAL,OPTIONAL,INTENT(IN) :: block 2279 REAL(DP),OPTIONAL,INTENT(IN) :: block_1 2280 REAL(DP),OPTIONAL,INTENT(IN) :: block_2 2281 REAL(DP),OPTIONAL,INTENT(IN) :: block_height 2282 ! 2283 obj%tagname = TRIM(tagname) 2284 obj%lwrite = .TRUE. 2285 obj%lread = .TRUE. 2286 ! 2287 obj%use_gate = use_gate 2288 IF ( PRESENT(zgate)) THEN 2289 obj%zgate_ispresent = .TRUE. 2290 obj%zgate = zgate 2291 ELSE 2292 obj%zgate_ispresent = .FALSE. 2293 END IF 2294 IF ( PRESENT(relaxz)) THEN 2295 obj%relaxz_ispresent = .TRUE. 2296 obj%relaxz = relaxz 2297 ELSE 2298 obj%relaxz_ispresent = .FALSE. 2299 END IF 2300 IF ( PRESENT(block)) THEN 2301 obj%block_ispresent = .TRUE. 2302 obj%block = block 2303 ELSE 2304 obj%block_ispresent = .FALSE. 2305 END IF 2306 IF ( PRESENT(block_1)) THEN 2307 obj%block_1_ispresent = .TRUE. 2308 obj%block_1 = block_1 2309 ELSE 2310 obj%block_1_ispresent = .FALSE. 2311 END IF 2312 IF ( PRESENT(block_2)) THEN 2313 obj%block_2_ispresent = .TRUE. 2314 obj%block_2 = block_2 2315 ELSE 2316 obj%block_2_ispresent = .FALSE. 2317 END IF 2318 IF ( PRESENT(block_height)) THEN 2319 obj%block_height_ispresent = .TRUE. 2320 obj%block_height = block_height 2321 ELSE 2322 obj%block_height_ispresent = .FALSE. 2323 END IF 2324 ! 2325 END SUBROUTINE qes_init_gate_settings 2326 ! 2327 ! 2328 SUBROUTINE qes_init_atomic_constraints(obj, tagname, num_of_constraints, tolerance, atomic_constraint) 2329 ! 2330 IMPLICIT NONE 2331 ! 2332 TYPE(atomic_constraints_type), INTENT(OUT) :: obj 2333 CHARACTER(LEN=*), INTENT(IN) :: tagname 2334 INTEGER,INTENT(IN) :: num_of_constraints 2335 REAL(DP),INTENT(IN) :: tolerance 2336 TYPE(atomic_constraint_type),DIMENSION(:),INTENT(IN) :: atomic_constraint 2337 ! 2338 obj%tagname = TRIM(tagname) 2339 obj%lwrite = .TRUE. 2340 obj%lread = .TRUE. 2341 ! 2342 obj%num_of_constraints = num_of_constraints 2343 obj%tolerance = tolerance 2344 ALLOCATE( obj%atomic_constraint(SIZE(atomic_constraint))) 2345 obj%ndim_atomic_constraint = SIZE(atomic_constraint) 2346 obj%atomic_constraint = atomic_constraint 2347 ! 2348 END SUBROUTINE qes_init_atomic_constraints 2349 ! 2350 ! 2351 SUBROUTINE qes_init_atomic_constraint(obj, tagname, constr_parms, constr_type, constr_target) 2352 ! 2353 IMPLICIT NONE 2354 ! 2355 TYPE(atomic_constraint_type), INTENT(OUT) :: obj 2356 CHARACTER(LEN=*), INTENT(IN) :: tagname 2357 REAL(DP), DIMENSION(4),INTENT(IN) :: constr_parms 2358 CHARACTER(LEN=*),INTENT(IN) :: constr_type 2359 REAL(DP),INTENT(IN) :: constr_target 2360 ! 2361 obj%tagname = TRIM(tagname) 2362 obj%lwrite = .TRUE. 2363 obj%lread = .TRUE. 2364 ! 2365 obj%constr_parms = constr_parms 2366 obj%constr_type = constr_type 2367 obj%constr_target = constr_target 2368 ! 2369 END SUBROUTINE qes_init_atomic_constraint 2370 ! 2371 ! 2372 SUBROUTINE qes_init_inputOccupations(obj, tagname, ispin, spin_factor, inputOccupations) 2373 ! 2374 IMPLICIT NONE 2375 ! 2376 TYPE(inputOccupations_type), INTENT(OUT) :: obj 2377 CHARACTER(LEN=*), INTENT(IN) :: tagname 2378 REAL(DP), DIMENSION(:), INTENT(IN) :: inputOccupations 2379 INTEGER, INTENT(IN) :: ispin 2380 REAL(DP), INTENT(IN) :: spin_factor 2381 ! 2382 obj%tagname = TRIM(tagname) 2383 obj%lwrite = .TRUE. 2384 obj%lread = .TRUE. 2385 ! 2386 obj%ispin = ispin 2387 obj%spin_factor = spin_factor 2388 obj%size = size(inputOccupations) 2389 ALLOCATE(obj%inputOccupations(obj%size)) 2390 obj%inputOccupations = inputOccupations 2391 ! 2392 END SUBROUTINE qes_init_inputOccupations 2393 ! 2394 ! 2395 SUBROUTINE qes_init_outputElectricField(obj, tagname, BerryPhase, finiteElectricFieldInfo, dipoleInfo, gateInfo) 2396 ! 2397 IMPLICIT NONE 2398 ! 2399 TYPE(outputElectricField_type), INTENT(OUT) :: obj 2400 CHARACTER(LEN=*), INTENT(IN) :: tagname 2401 TYPE(BerryPhaseOutput_type),OPTIONAL,INTENT(IN) :: BerryPhase 2402 TYPE(finiteFieldOut_type),OPTIONAL,INTENT(IN) :: finiteElectricFieldInfo 2403 TYPE(dipoleOutput_type),OPTIONAL,INTENT(IN) :: dipoleInfo 2404 TYPE(gateInfo_type),OPTIONAL,INTENT(IN) :: gateInfo 2405 ! 2406 obj%tagname = TRIM(tagname) 2407 obj%lwrite = .TRUE. 2408 obj%lread = .TRUE. 2409 ! 2410 IF ( PRESENT(BerryPhase)) THEN 2411 obj%BerryPhase_ispresent = .TRUE. 2412 obj%BerryPhase = BerryPhase 2413 ELSE 2414 obj%BerryPhase_ispresent = .FALSE. 2415 END IF 2416 IF ( PRESENT(finiteElectricFieldInfo)) THEN 2417 obj%finiteElectricFieldInfo_ispresent = .TRUE. 2418 obj%finiteElectricFieldInfo = finiteElectricFieldInfo 2419 ELSE 2420 obj%finiteElectricFieldInfo_ispresent = .FALSE. 2421 END IF 2422 IF ( PRESENT(dipoleInfo)) THEN 2423 obj%dipoleInfo_ispresent = .TRUE. 2424 obj%dipoleInfo = dipoleInfo 2425 ELSE 2426 obj%dipoleInfo_ispresent = .FALSE. 2427 END IF 2428 IF ( PRESENT(gateInfo)) THEN 2429 obj%gateInfo_ispresent = .TRUE. 2430 obj%gateInfo = gateInfo 2431 ELSE 2432 obj%gateInfo_ispresent = .FALSE. 2433 END IF 2434 ! 2435 END SUBROUTINE qes_init_outputElectricField 2436 ! 2437 ! 2438 SUBROUTINE qes_init_BerryPhaseOutput(obj, tagname, totalPolarization, totalPhase, ionicPolarization, electronicPolarization) 2439 ! 2440 IMPLICIT NONE 2441 ! 2442 TYPE(BerryPhaseOutput_type), INTENT(OUT) :: obj 2443 CHARACTER(LEN=*), INTENT(IN) :: tagname 2444 TYPE(polarization_type),INTENT(IN) :: totalPolarization 2445 TYPE(phase_type),INTENT(IN) :: totalPhase 2446 TYPE(ionicPolarization_type),DIMENSION(:),INTENT(IN) :: ionicPolarization 2447 TYPE(electronicPolarization_type),DIMENSION(:),INTENT(IN) :: electronicPolarization 2448 ! 2449 obj%tagname = TRIM(tagname) 2450 obj%lwrite = .TRUE. 2451 obj%lread = .TRUE. 2452 ! 2453 obj%totalPolarization = totalPolarization 2454 obj%totalPhase = totalPhase 2455 ALLOCATE( obj%ionicPolarization(SIZE(ionicPolarization))) 2456 obj%ndim_ionicPolarization = SIZE(ionicPolarization) 2457 obj%ionicPolarization = ionicPolarization 2458 ALLOCATE( obj%electronicPolarization(SIZE(electronicPolarization))) 2459 obj%ndim_electronicPolarization = SIZE(electronicPolarization) 2460 obj%electronicPolarization = electronicPolarization 2461 ! 2462 END SUBROUTINE qes_init_BerryPhaseOutput 2463 ! 2464 ! 2465 SUBROUTINE qes_init_dipoleOutput(obj, tagname, idir, dipole, ion_dipole, elec_dipole, dipoleField,& 2466 potentialAmp, totalLength) 2467 ! 2468 IMPLICIT NONE 2469 ! 2470 TYPE(dipoleOutput_type), INTENT(OUT) :: obj 2471 CHARACTER(LEN=*), INTENT(IN) :: tagname 2472 INTEGER,INTENT(IN) :: idir 2473 TYPE(scalarQuantity_type),INTENT(IN) :: dipole 2474 TYPE(scalarQuantity_type),INTENT(IN) :: ion_dipole 2475 TYPE(scalarQuantity_type),INTENT(IN) :: elec_dipole 2476 TYPE(scalarQuantity_type),INTENT(IN) :: dipoleField 2477 TYPE(scalarQuantity_type),INTENT(IN) :: potentialAmp 2478 TYPE(scalarQuantity_type),INTENT(IN) :: totalLength 2479 ! 2480 obj%tagname = TRIM(tagname) 2481 obj%lwrite = .TRUE. 2482 obj%lread = .TRUE. 2483 ! 2484 obj%idir = idir 2485 obj%dipole = dipole 2486 obj%ion_dipole = ion_dipole 2487 obj%elec_dipole = elec_dipole 2488 obj%dipoleField = dipoleField 2489 obj%potentialAmp = potentialAmp 2490 obj%totalLength = totalLength 2491 ! 2492 END SUBROUTINE qes_init_dipoleOutput 2493 ! 2494 ! 2495 SUBROUTINE qes_init_finiteFieldOut(obj, tagname, electronicDipole, ionicDipole) 2496 ! 2497 IMPLICIT NONE 2498 ! 2499 TYPE(finiteFieldOut_type), INTENT(OUT) :: obj 2500 CHARACTER(LEN=*), INTENT(IN) :: tagname 2501 REAL(DP), DIMENSION(3),INTENT(IN) :: electronicDipole 2502 REAL(DP), DIMENSION(3),INTENT(IN) :: ionicDipole 2503 ! 2504 obj%tagname = TRIM(tagname) 2505 obj%lwrite = .TRUE. 2506 obj%lread = .TRUE. 2507 ! 2508 obj%electronicDipole = electronicDipole 2509 obj%ionicDipole = ionicDipole 2510 ! 2511 END SUBROUTINE qes_init_finiteFieldOut 2512 ! 2513 ! 2514 SUBROUTINE qes_init_polarization(obj, tagname, polarization, modulus, direction) 2515 ! 2516 IMPLICIT NONE 2517 ! 2518 TYPE(polarization_type), INTENT(OUT) :: obj 2519 CHARACTER(LEN=*), INTENT(IN) :: tagname 2520 TYPE(scalarQuantity_type),INTENT(IN) :: polarization 2521 REAL(DP),INTENT(IN) :: modulus 2522 REAL(DP), DIMENSION(3),INTENT(IN) :: direction 2523 ! 2524 obj%tagname = TRIM(tagname) 2525 obj%lwrite = .TRUE. 2526 obj%lread = .TRUE. 2527 ! 2528 obj%polarization = polarization 2529 obj%modulus = modulus 2530 obj%direction = direction 2531 ! 2532 END SUBROUTINE qes_init_polarization 2533 ! 2534 ! 2535 SUBROUTINE qes_init_ionicPolarization(obj, tagname, ion, charge, phase) 2536 ! 2537 IMPLICIT NONE 2538 ! 2539 TYPE(ionicPolarization_type), INTENT(OUT) :: obj 2540 CHARACTER(LEN=*), INTENT(IN) :: tagname 2541 TYPE(atom_type),INTENT(IN) :: ion 2542 REAL(DP),INTENT(IN) :: charge 2543 TYPE(phase_type),INTENT(IN) :: phase 2544 ! 2545 obj%tagname = TRIM(tagname) 2546 obj%lwrite = .TRUE. 2547 obj%lread = .TRUE. 2548 ! 2549 obj%ion = ion 2550 obj%charge = charge 2551 obj%phase = phase 2552 ! 2553 END SUBROUTINE qes_init_ionicPolarization 2554 ! 2555 ! 2556 SUBROUTINE qes_init_electronicPolarization(obj, tagname, firstKeyPoint, phase, spin) 2557 ! 2558 IMPLICIT NONE 2559 ! 2560 TYPE(electronicPolarization_type), INTENT(OUT) :: obj 2561 CHARACTER(LEN=*), INTENT(IN) :: tagname 2562 TYPE(k_point_type),INTENT(IN) :: firstKeyPoint 2563 INTEGER,OPTIONAL,INTENT(IN) :: spin 2564 TYPE(phase_type),INTENT(IN) :: phase 2565 ! 2566 obj%tagname = TRIM(tagname) 2567 obj%lwrite = .TRUE. 2568 obj%lread = .TRUE. 2569 ! 2570 obj%firstKeyPoint = firstKeyPoint 2571 IF ( PRESENT(spin)) THEN 2572 obj%spin_ispresent = .TRUE. 2573 obj%spin = spin 2574 ELSE 2575 obj%spin_ispresent = .FALSE. 2576 END IF 2577 obj%phase = phase 2578 ! 2579 END SUBROUTINE qes_init_electronicPolarization 2580 ! 2581 ! 2582 SUBROUTINE qes_init_phase(obj, tagname, phase, ionic, electronic, modulus) 2583 ! 2584 IMPLICIT NONE 2585 ! 2586 TYPE(phase_type), INTENT(OUT) :: obj 2587 CHARACTER(LEN=*), INTENT(IN) :: tagname 2588 REAL(DP), OPTIONAL, INTENT(IN) :: ionic 2589 REAL(DP), OPTIONAL, INTENT(IN) :: electronic 2590 CHARACTER(LEN=*), OPTIONAL, INTENT(IN) :: modulus 2591 REAL(DP), INTENT(IN) :: phase 2592 ! 2593 obj%tagname = TRIM(tagname) 2594 obj%lwrite = .TRUE. 2595 obj%lread = .TRUE. 2596 IF (PRESENT(ionic)) THEN 2597 obj%ionic_ispresent = .TRUE. 2598 obj%ionic = ionic 2599 ELSE 2600 obj%ionic_ispresent = .FALSE. 2601 END IF 2602 IF (PRESENT(electronic)) THEN 2603 obj%electronic_ispresent = .TRUE. 2604 obj%electronic = electronic 2605 ELSE 2606 obj%electronic_ispresent = .FALSE. 2607 END IF 2608 IF (PRESENT(modulus)) THEN 2609 obj%modulus_ispresent = .TRUE. 2610 obj%modulus = modulus 2611 ELSE 2612 obj%modulus_ispresent = .FALSE. 2613 END IF 2614 ! 2615 obj%phase = phase 2616 ! 2617 END SUBROUTINE qes_init_phase 2618 ! 2619 ! 2620 SUBROUTINE qes_init_gateInfo(obj, tagname, pot_prefactor, gate_zpos, gate_gate_term, gatefieldEnergy) 2621 ! 2622 IMPLICIT NONE 2623 ! 2624 TYPE(gateInfo_type), INTENT(OUT) :: obj 2625 CHARACTER(LEN=*), INTENT(IN) :: tagname 2626 REAL(DP),INTENT(IN) :: pot_prefactor 2627 REAL(DP),INTENT(IN) :: gate_zpos 2628 REAL(DP),INTENT(IN) :: gate_gate_term 2629 REAL(DP),INTENT(IN) :: gatefieldEnergy 2630 ! 2631 obj%tagname = TRIM(tagname) 2632 obj%lwrite = .TRUE. 2633 obj%lread = .TRUE. 2634 ! 2635 obj%pot_prefactor = pot_prefactor 2636 obj%gate_zpos = gate_zpos 2637 obj%gate_gate_term = gate_gate_term 2638 obj%gatefieldEnergy = gatefieldEnergy 2639 ! 2640 END SUBROUTINE qes_init_gateInfo 2641 ! 2642 ! 2643 SUBROUTINE qes_init_convergence_info(obj, tagname, scf_conv, opt_conv) 2644 ! 2645 IMPLICIT NONE 2646 ! 2647 TYPE(convergence_info_type), INTENT(OUT) :: obj 2648 CHARACTER(LEN=*), INTENT(IN) :: tagname 2649 TYPE(scf_conv_type),INTENT(IN) :: scf_conv 2650 TYPE(opt_conv_type),OPTIONAL,INTENT(IN) :: opt_conv 2651 ! 2652 obj%tagname = TRIM(tagname) 2653 obj%lwrite = .TRUE. 2654 obj%lread = .TRUE. 2655 ! 2656 obj%scf_conv = scf_conv 2657 IF ( PRESENT(opt_conv)) THEN 2658 obj%opt_conv_ispresent = .TRUE. 2659 obj%opt_conv = opt_conv 2660 ELSE 2661 obj%opt_conv_ispresent = .FALSE. 2662 END IF 2663 ! 2664 END SUBROUTINE qes_init_convergence_info 2665 ! 2666 ! 2667 SUBROUTINE qes_init_scf_conv(obj, tagname, convergence_achieved, n_scf_steps, scf_error) 2668 ! 2669 IMPLICIT NONE 2670 ! 2671 TYPE(scf_conv_type), INTENT(OUT) :: obj 2672 CHARACTER(LEN=*), INTENT(IN) :: tagname 2673 LOGICAL,INTENT(IN) :: convergence_achieved 2674 INTEGER,INTENT(IN) :: n_scf_steps 2675 REAL(DP),INTENT(IN) :: scf_error 2676 ! 2677 obj%tagname = TRIM(tagname) 2678 obj%lwrite = .TRUE. 2679 obj%lread = .TRUE. 2680 ! 2681 obj%convergence_achieved = convergence_achieved 2682 obj%n_scf_steps = n_scf_steps 2683 obj%scf_error = scf_error 2684 ! 2685 END SUBROUTINE qes_init_scf_conv 2686 ! 2687 ! 2688 SUBROUTINE qes_init_opt_conv(obj, tagname, convergence_achieved, n_opt_steps, grad_norm) 2689 ! 2690 IMPLICIT NONE 2691 ! 2692 TYPE(opt_conv_type), INTENT(OUT) :: obj 2693 CHARACTER(LEN=*), INTENT(IN) :: tagname 2694 LOGICAL,INTENT(IN) :: convergence_achieved 2695 INTEGER,INTENT(IN) :: n_opt_steps 2696 REAL(DP),INTENT(IN) :: grad_norm 2697 ! 2698 obj%tagname = TRIM(tagname) 2699 obj%lwrite = .TRUE. 2700 obj%lread = .TRUE. 2701 ! 2702 obj%convergence_achieved = convergence_achieved 2703 obj%n_opt_steps = n_opt_steps 2704 obj%grad_norm = grad_norm 2705 ! 2706 END SUBROUTINE qes_init_opt_conv 2707 ! 2708 ! 2709 SUBROUTINE qes_init_algorithmic_info(obj, tagname, real_space_q, uspp, paw, real_space_beta) 2710 ! 2711 IMPLICIT NONE 2712 ! 2713 TYPE(algorithmic_info_type), INTENT(OUT) :: obj 2714 CHARACTER(LEN=*), INTENT(IN) :: tagname 2715 LOGICAL,INTENT(IN) :: real_space_q 2716 LOGICAL,OPTIONAL,INTENT(IN) :: real_space_beta 2717 LOGICAL,INTENT(IN) :: uspp 2718 LOGICAL,INTENT(IN) :: paw 2719 ! 2720 obj%tagname = TRIM(tagname) 2721 obj%lwrite = .TRUE. 2722 obj%lread = .TRUE. 2723 ! 2724 obj%real_space_q = real_space_q 2725 IF ( PRESENT(real_space_beta)) THEN 2726 obj%real_space_beta_ispresent = .TRUE. 2727 obj%real_space_beta = real_space_beta 2728 ELSE 2729 obj%real_space_beta_ispresent = .FALSE. 2730 END IF 2731 obj%uspp = uspp 2732 obj%paw = paw 2733 ! 2734 END SUBROUTINE qes_init_algorithmic_info 2735 ! 2736 ! 2737 SUBROUTINE qes_init_symmetries(obj, tagname, nsym, nrot, space_group, symmetry) 2738 ! 2739 IMPLICIT NONE 2740 ! 2741 TYPE(symmetries_type), INTENT(OUT) :: obj 2742 CHARACTER(LEN=*), INTENT(IN) :: tagname 2743 INTEGER,INTENT(IN) :: nsym 2744 INTEGER,INTENT(IN) :: nrot 2745 INTEGER,INTENT(IN) :: space_group 2746 TYPE(symmetry_type),DIMENSION(:),INTENT(IN) :: symmetry 2747 ! 2748 obj%tagname = TRIM(tagname) 2749 obj%lwrite = .TRUE. 2750 obj%lread = .TRUE. 2751 ! 2752 obj%nsym = nsym 2753 obj%nrot = nrot 2754 obj%space_group = space_group 2755 ALLOCATE( obj%symmetry(SIZE(symmetry))) 2756 obj%ndim_symmetry = SIZE(symmetry) 2757 obj%symmetry = symmetry 2758 ! 2759 END SUBROUTINE qes_init_symmetries 2760 ! 2761 ! 2762 SUBROUTINE qes_init_symmetry(obj, tagname, info, rotation, fractional_translation, equivalent_atoms) 2763 ! 2764 IMPLICIT NONE 2765 ! 2766 TYPE(symmetry_type), INTENT(OUT) :: obj 2767 CHARACTER(LEN=*), INTENT(IN) :: tagname 2768 TYPE(info_type),INTENT(IN) :: info 2769 TYPE(matrix_type),INTENT(IN) :: rotation 2770 REAL(DP), DIMENSION(3),OPTIONAL,INTENT(IN) :: fractional_translation 2771 TYPE(equivalent_atoms_type),OPTIONAL,INTENT(IN) :: equivalent_atoms 2772 ! 2773 obj%tagname = TRIM(tagname) 2774 obj%lwrite = .TRUE. 2775 obj%lread = .TRUE. 2776 ! 2777 obj%info = info 2778 obj%rotation = rotation 2779 IF ( PRESENT(fractional_translation)) THEN 2780 obj%fractional_translation_ispresent = .TRUE. 2781 obj%fractional_translation = fractional_translation 2782 ELSE 2783 obj%fractional_translation_ispresent = .FALSE. 2784 END IF 2785 IF ( PRESENT(equivalent_atoms)) THEN 2786 obj%equivalent_atoms_ispresent = .TRUE. 2787 obj%equivalent_atoms = equivalent_atoms 2788 ELSE 2789 obj%equivalent_atoms_ispresent = .FALSE. 2790 END IF 2791 ! 2792 END SUBROUTINE qes_init_symmetry 2793 ! 2794 ! 2795 SUBROUTINE qes_init_equivalent_atoms(obj, tagname, nat, equivalent_atoms) 2796 ! 2797 IMPLICIT NONE 2798 ! 2799 TYPE(equivalent_atoms_type), INTENT(OUT) :: obj 2800 CHARACTER(LEN=*), INTENT(IN) :: tagname 2801 INTEGER, DIMENSION(:), INTENT(IN) :: equivalent_atoms 2802 INTEGER, INTENT(IN) :: nat 2803 ! 2804 obj%tagname = TRIM(tagname) 2805 obj%lwrite = .TRUE. 2806 obj%lread = .TRUE. 2807 ! 2808 obj%nat = nat 2809 obj%size = size(equivalent_atoms) 2810 ALLOCATE(obj%equivalent_atoms(obj%size)) 2811 obj%equivalent_atoms = equivalent_atoms 2812 ! 2813 END SUBROUTINE qes_init_equivalent_atoms 2814 ! 2815 ! 2816 SUBROUTINE qes_init_info(obj, tagname, info, name, class, time_reversal) 2817 ! 2818 IMPLICIT NONE 2819 ! 2820 TYPE(info_type), INTENT(OUT) :: obj 2821 CHARACTER(LEN=*), INTENT(IN) :: tagname 2822 CHARACTER(LEN=*), OPTIONAL, INTENT(IN) :: name 2823 CHARACTER(LEN=*), OPTIONAL, INTENT(IN) :: class 2824 LOGICAL, OPTIONAL, INTENT(IN) :: time_reversal 2825 CHARACTER(LEN=*), INTENT(IN) :: info 2826 ! 2827 obj%tagname = TRIM(tagname) 2828 obj%lwrite = .TRUE. 2829 obj%lread = .TRUE. 2830 IF (PRESENT(name)) THEN 2831 obj%name_ispresent = .TRUE. 2832 obj%name = name 2833 ELSE 2834 obj%name_ispresent = .FALSE. 2835 END IF 2836 IF (PRESENT(class)) THEN 2837 obj%class_ispresent = .TRUE. 2838 obj%class = class 2839 ELSE 2840 obj%class_ispresent = .FALSE. 2841 END IF 2842 IF (PRESENT(time_reversal)) THEN 2843 obj%time_reversal_ispresent = .TRUE. 2844 obj%time_reversal = time_reversal 2845 ELSE 2846 obj%time_reversal_ispresent = .FALSE. 2847 END IF 2848 ! 2849 obj%info = info 2850 ! 2851 END SUBROUTINE qes_init_info 2852 ! 2853 ! 2854 SUBROUTINE qes_init_outputPBC(obj, tagname, assume_isolated) 2855 ! 2856 IMPLICIT NONE 2857 ! 2858 TYPE(outputPBC_type), INTENT(OUT) :: obj 2859 CHARACTER(LEN=*), INTENT(IN) :: tagname 2860 CHARACTER(LEN=*),INTENT(IN) :: assume_isolated 2861 ! 2862 obj%tagname = TRIM(tagname) 2863 obj%lwrite = .TRUE. 2864 obj%lread = .TRUE. 2865 ! 2866 obj%assume_isolated = assume_isolated 2867 ! 2868 END SUBROUTINE qes_init_outputPBC 2869 ! 2870 ! 2871 SUBROUTINE qes_init_magnetization(obj, tagname, lsda, noncolin, spinorbit, total, absolute, do_magnetization) 2872 ! 2873 IMPLICIT NONE 2874 ! 2875 TYPE(magnetization_type), INTENT(OUT) :: obj 2876 CHARACTER(LEN=*), INTENT(IN) :: tagname 2877 LOGICAL,INTENT(IN) :: lsda 2878 LOGICAL,INTENT(IN) :: noncolin 2879 LOGICAL,INTENT(IN) :: spinorbit 2880 REAL(DP),INTENT(IN) :: total 2881 REAL(DP),INTENT(IN) :: absolute 2882 LOGICAL,OPTIONAL,INTENT(IN) :: do_magnetization 2883 ! 2884 obj%tagname = TRIM(tagname) 2885 obj%lwrite = .TRUE. 2886 obj%lread = .TRUE. 2887 ! 2888 obj%lsda = lsda 2889 obj%noncolin = noncolin 2890 obj%spinorbit = spinorbit 2891 obj%total = total 2892 obj%absolute = absolute 2893 IF ( PRESENT(do_magnetization)) THEN 2894 obj%do_magnetization_ispresent = .TRUE. 2895 obj%do_magnetization = do_magnetization 2896 ELSE 2897 obj%do_magnetization_ispresent = .FALSE. 2898 END IF 2899 ! 2900 END SUBROUTINE qes_init_magnetization 2901 ! 2902 ! 2903 SUBROUTINE qes_init_total_energy(obj, tagname, etot, eband, ehart, vtxc, etxc, ewald, demet,& 2904 efieldcorr, potentiostat_contr, gatefield_contr, vdW_term) 2905 ! 2906 IMPLICIT NONE 2907 ! 2908 TYPE(total_energy_type), INTENT(OUT) :: obj 2909 CHARACTER(LEN=*), INTENT(IN) :: tagname 2910 REAL(DP),INTENT(IN) :: etot 2911 REAL(DP),OPTIONAL,INTENT(IN) :: eband 2912 REAL(DP),OPTIONAL,INTENT(IN) :: ehart 2913 REAL(DP),OPTIONAL,INTENT(IN) :: vtxc 2914 REAL(DP),OPTIONAL,INTENT(IN) :: etxc 2915 REAL(DP),OPTIONAL,INTENT(IN) :: ewald 2916 REAL(DP),OPTIONAL,INTENT(IN) :: demet 2917 REAL(DP),OPTIONAL,INTENT(IN) :: efieldcorr 2918 REAL(DP),OPTIONAL,INTENT(IN) :: potentiostat_contr 2919 REAL(DP),OPTIONAL,INTENT(IN) :: gatefield_contr 2920 REAL(DP),OPTIONAL,INTENT(IN) :: vdW_term 2921 ! 2922 obj%tagname = TRIM(tagname) 2923 obj%lwrite = .TRUE. 2924 obj%lread = .TRUE. 2925 ! 2926 obj%etot = etot 2927 IF ( PRESENT(eband)) THEN 2928 obj%eband_ispresent = .TRUE. 2929 obj%eband = eband 2930 ELSE 2931 obj%eband_ispresent = .FALSE. 2932 END IF 2933 IF ( PRESENT(ehart)) THEN 2934 obj%ehart_ispresent = .TRUE. 2935 obj%ehart = ehart 2936 ELSE 2937 obj%ehart_ispresent = .FALSE. 2938 END IF 2939 IF ( PRESENT(vtxc)) THEN 2940 obj%vtxc_ispresent = .TRUE. 2941 obj%vtxc = vtxc 2942 ELSE 2943 obj%vtxc_ispresent = .FALSE. 2944 END IF 2945 IF ( PRESENT(etxc)) THEN 2946 obj%etxc_ispresent = .TRUE. 2947 obj%etxc = etxc 2948 ELSE 2949 obj%etxc_ispresent = .FALSE. 2950 END IF 2951 IF ( PRESENT(ewald)) THEN 2952 obj%ewald_ispresent = .TRUE. 2953 obj%ewald = ewald 2954 ELSE 2955 obj%ewald_ispresent = .FALSE. 2956 END IF 2957 IF ( PRESENT(demet)) THEN 2958 obj%demet_ispresent = .TRUE. 2959 obj%demet = demet 2960 ELSE 2961 obj%demet_ispresent = .FALSE. 2962 END IF 2963 IF ( PRESENT(efieldcorr)) THEN 2964 obj%efieldcorr_ispresent = .TRUE. 2965 obj%efieldcorr = efieldcorr 2966 ELSE 2967 obj%efieldcorr_ispresent = .FALSE. 2968 END IF 2969 IF ( PRESENT(potentiostat_contr)) THEN 2970 obj%potentiostat_contr_ispresent = .TRUE. 2971 obj%potentiostat_contr = potentiostat_contr 2972 ELSE 2973 obj%potentiostat_contr_ispresent = .FALSE. 2974 END IF 2975 IF ( PRESENT(gatefield_contr)) THEN 2976 obj%gatefield_contr_ispresent = .TRUE. 2977 obj%gatefield_contr = gatefield_contr 2978 ELSE 2979 obj%gatefield_contr_ispresent = .FALSE. 2980 END IF 2981 IF ( PRESENT(vdW_term)) THEN 2982 obj%vdW_term_ispresent = .TRUE. 2983 obj%vdW_term = vdW_term 2984 ELSE 2985 obj%vdW_term_ispresent = .FALSE. 2986 END IF 2987 ! 2988 END SUBROUTINE qes_init_total_energy 2989 ! 2990 ! 2991 SUBROUTINE qes_init_band_structure(obj, tagname, lsda, noncolin, spinorbit, nelec, wf_collected,& 2992 starting_k_points, nks, occupations_kind, ks_energies, nbnd,& 2993 nbnd_up, nbnd_dw, num_of_atomic_wfc, fermi_energy, highestOccupiedLevel,& 2994 lowestUnoccupiedLevel, two_fermi_energies, smearing) 2995 ! 2996 IMPLICIT NONE 2997 ! 2998 TYPE(band_structure_type), INTENT(OUT) :: obj 2999 CHARACTER(LEN=*), INTENT(IN) :: tagname 3000 LOGICAL,INTENT(IN) :: lsda 3001 LOGICAL,INTENT(IN) :: noncolin 3002 LOGICAL,INTENT(IN) :: spinorbit 3003 INTEGER,OPTIONAL,INTENT(IN) :: nbnd 3004 INTEGER,OPTIONAL,INTENT(IN) :: nbnd_up 3005 INTEGER,OPTIONAL,INTENT(IN) :: nbnd_dw 3006 REAL(DP),INTENT(IN) :: nelec 3007 INTEGER,OPTIONAL,INTENT(IN) :: num_of_atomic_wfc 3008 LOGICAL,INTENT(IN) :: wf_collected 3009 REAL(DP),OPTIONAL,INTENT(IN) :: fermi_energy 3010 REAL(DP),OPTIONAL,INTENT(IN) :: highestOccupiedLevel 3011 REAL(DP),OPTIONAL,INTENT(IN) :: lowestUnoccupiedLevel 3012 REAL(DP), DIMENSION(2),OPTIONAL,INTENT(IN) :: two_fermi_energies 3013 TYPE(k_points_IBZ_type),INTENT(IN) :: starting_k_points 3014 INTEGER,INTENT(IN) :: nks 3015 TYPE(occupations_type),INTENT(IN) :: occupations_kind 3016 TYPE(smearing_type),OPTIONAL,INTENT(IN) :: smearing 3017 TYPE(ks_energies_type),DIMENSION(:),INTENT(IN) :: ks_energies 3018 ! 3019 obj%tagname = TRIM(tagname) 3020 obj%lwrite = .TRUE. 3021 obj%lread = .TRUE. 3022 ! 3023 obj%lsda = lsda 3024 obj%noncolin = noncolin 3025 obj%spinorbit = spinorbit 3026 IF ( PRESENT(nbnd)) THEN 3027 obj%nbnd_ispresent = .TRUE. 3028 obj%nbnd = nbnd 3029 ELSE 3030 obj%nbnd_ispresent = .FALSE. 3031 END IF 3032 IF ( PRESENT(nbnd_up)) THEN 3033 obj%nbnd_up_ispresent = .TRUE. 3034 obj%nbnd_up = nbnd_up 3035 ELSE 3036 obj%nbnd_up_ispresent = .FALSE. 3037 END IF 3038 IF ( PRESENT(nbnd_dw)) THEN 3039 obj%nbnd_dw_ispresent = .TRUE. 3040 obj%nbnd_dw = nbnd_dw 3041 ELSE 3042 obj%nbnd_dw_ispresent = .FALSE. 3043 END IF 3044 obj%nelec = nelec 3045 IF ( PRESENT(num_of_atomic_wfc)) THEN 3046 obj%num_of_atomic_wfc_ispresent = .TRUE. 3047 obj%num_of_atomic_wfc = num_of_atomic_wfc 3048 ELSE 3049 obj%num_of_atomic_wfc_ispresent = .FALSE. 3050 END IF 3051 obj%wf_collected = wf_collected 3052 IF ( PRESENT(fermi_energy)) THEN 3053 obj%fermi_energy_ispresent = .TRUE. 3054 obj%fermi_energy = fermi_energy 3055 ELSE 3056 obj%fermi_energy_ispresent = .FALSE. 3057 END IF 3058 IF ( PRESENT(highestOccupiedLevel)) THEN 3059 obj%highestOccupiedLevel_ispresent = .TRUE. 3060 obj%highestOccupiedLevel = highestOccupiedLevel 3061 ELSE 3062 obj%highestOccupiedLevel_ispresent = .FALSE. 3063 END IF 3064 IF ( PRESENT(lowestUnoccupiedLevel)) THEN 3065 obj%lowestUnoccupiedLevel_ispresent = .TRUE. 3066 obj%lowestUnoccupiedLevel = lowestUnoccupiedLevel 3067 ELSE 3068 obj%lowestUnoccupiedLevel_ispresent = .FALSE. 3069 END IF 3070 IF ( PRESENT(two_fermi_energies)) THEN 3071 obj%two_fermi_energies_ispresent = .TRUE. 3072 obj%two_fermi_energies = two_fermi_energies 3073 ELSE 3074 obj%two_fermi_energies_ispresent = .FALSE. 3075 END IF 3076 obj%starting_k_points = starting_k_points 3077 obj%nks = nks 3078 obj%occupations_kind = occupations_kind 3079 IF ( PRESENT(smearing)) THEN 3080 obj%smearing_ispresent = .TRUE. 3081 obj%smearing = smearing 3082 ELSE 3083 obj%smearing_ispresent = .FALSE. 3084 END IF 3085 ALLOCATE( obj%ks_energies(SIZE(ks_energies))) 3086 obj%ndim_ks_energies = SIZE(ks_energies) 3087 obj%ks_energies = ks_energies 3088 ! 3089 END SUBROUTINE qes_init_band_structure 3090 ! 3091 ! 3092 SUBROUTINE qes_init_ks_energies(obj, tagname, k_point, npw, eigenvalues, occupations) 3093 ! 3094 IMPLICIT NONE 3095 ! 3096 TYPE(ks_energies_type), INTENT(OUT) :: obj 3097 CHARACTER(LEN=*), INTENT(IN) :: tagname 3098 TYPE(k_point_type),INTENT(IN) :: k_point 3099 INTEGER,INTENT(IN) :: npw 3100 TYPE(vector_type),INTENT(IN) :: eigenvalues 3101 TYPE(vector_type),INTENT(IN) :: occupations 3102 ! 3103 obj%tagname = TRIM(tagname) 3104 obj%lwrite = .TRUE. 3105 obj%lread = .TRUE. 3106 ! 3107 obj%k_point = k_point 3108 obj%npw = npw 3109 obj%eigenvalues = eigenvalues 3110 obj%occupations = occupations 3111 ! 3112 END SUBROUTINE qes_init_ks_energies 3113 ! 3114 ! 3115 SUBROUTINE qes_init_closed(obj, tagname, DATE, TIME, closed) 3116 ! 3117 IMPLICIT NONE 3118 ! 3119 TYPE(closed_type), INTENT(OUT) :: obj 3120 CHARACTER(LEN=*), INTENT(IN) :: tagname 3121 CHARACTER(LEN=*), INTENT(IN) :: DATE 3122 CHARACTER(LEN=*), INTENT(IN) :: TIME 3123 CHARACTER(LEN=*), INTENT(IN) :: closed 3124 ! 3125 obj%tagname = TRIM(tagname) 3126 obj%lwrite = .TRUE. 3127 obj%lread = .TRUE. 3128 obj%DATE = DATE 3129 obj%TIME = TIME 3130 ! 3131 obj%closed = closed 3132 ! 3133 END SUBROUTINE qes_init_closed 3134 ! 3135 ! 3136 SUBROUTINE qes_init_vector(obj, tagname, vector) 3137 ! 3138 IMPLICIT NONE 3139 ! 3140 TYPE(vector_type), INTENT(OUT) :: obj 3141 CHARACTER(LEN=*), INTENT(IN) :: tagname 3142 REAL(DP), DIMENSION(:), INTENT(IN) :: vector 3143 ! 3144 obj%tagname = TRIM(tagname) 3145 obj%lwrite = .TRUE. 3146 obj%lread = .TRUE. 3147 ! 3148 obj%size = size(vector) 3149 ALLOCATE(obj%vector(obj%size)) 3150 obj%vector = vector 3151 ! 3152 END SUBROUTINE qes_init_vector 3153 ! 3154 ! 3155 SUBROUTINE qes_init_integerVector(obj, tagname, integerVector) 3156 ! 3157 IMPLICIT NONE 3158 ! 3159 TYPE(integerVector_type), INTENT(OUT) :: obj 3160 CHARACTER(LEN=*), INTENT(IN) :: tagname 3161 INTEGER, DIMENSION(:), INTENT(IN) :: integerVector 3162 ! 3163 obj%tagname = TRIM(tagname) 3164 obj%lwrite = .TRUE. 3165 obj%lread = .TRUE. 3166 ! 3167 obj%size = size(integerVector) 3168 ALLOCATE(obj%integerVector(obj%size)) 3169 obj%integerVector = integerVector 3170 ! 3171 END SUBROUTINE qes_init_integerVector 3172 ! 3173 3174 ! 3175 SUBROUTINE qes_init_matrix_1(obj, tagname, dims, mat, order) 3176 ! 3177 IMPLICIT NONE 3178 ! 3179 TYPE(matrix_type), INTENT(OUT) :: obj 3180 CHARACTER(LEN=*), INTENT(IN) :: tagname 3181 INTEGER,DIMENSION(:),INTENT(IN) :: dims 3182 REAL(DP), INTENT(IN) :: mat(:) 3183 CHARACTER(LEN=*),OPTIONAL :: order 3184 INTEGER :: rank, length, i 3185 ! 3186 obj%tagname = TRIM(tagname) 3187 obj%lwrite = .TRUE. 3188 obj%lread = .TRUE. 3189 length = 1 3190 rank = SIZE(dims) 3191 DO i = 1, rank 3192 length = length * dims(i) 3193 END DO 3194 obj%rank = rank 3195 ALLOCATE(obj%matrix(length), obj%dims(rank) ) 3196 obj%matrix(1:length) = mat(1:length) 3197 obj%dims = dims 3198 IF (PRESENT(order)) THEN 3199 obj%order = TRIM(order) 3200 ELSE 3201 obj%order = 'F' 3202 END IF 3203 ! 3204 END SUBROUTINE qes_init_matrix_1 3205 ! 3206 ! 3207 SUBROUTINE qes_init_matrix_2(obj, tagname, dims, mat, order) 3208 ! 3209 IMPLICIT NONE 3210 ! 3211 TYPE(matrix_type), INTENT(OUT) :: obj 3212 CHARACTER(LEN=*), INTENT(IN) :: tagname 3213 INTEGER,DIMENSION(:),INTENT(IN) :: dims 3214 REAL(DP), INTENT(IN) :: mat(:,:) 3215 CHARACTER(LEN=*),OPTIONAL :: order 3216 INTEGER :: rank, length, i 3217 ! 3218 obj%tagname = TRIM(tagname) 3219 obj%lwrite = .TRUE. 3220 obj%lread = .TRUE. 3221 length = 1 3222 rank = SIZE(dims) 3223 DO i = 1, rank 3224 length = length * dims(i) 3225 END DO 3226 obj%rank = rank 3227 ALLOCATE(obj%matrix(length), obj%dims(rank) ) 3228 obj%matrix(1:length) = reshape(mat, [length]) 3229 obj%dims = dims 3230 IF (PRESENT(order)) THEN 3231 obj%order = TRIM(order) 3232 ELSE 3233 obj%order = 'F' 3234 END IF 3235 ! 3236 END SUBROUTINE qes_init_matrix_2 3237 ! 3238 ! 3239 SUBROUTINE qes_init_matrix_3(obj, tagname, dims, mat, order) 3240 ! 3241 IMPLICIT NONE 3242 ! 3243 TYPE(matrix_type), INTENT(OUT) :: obj 3244 CHARACTER(LEN=*), INTENT(IN) :: tagname 3245 INTEGER,DIMENSION(:),INTENT(IN) :: dims 3246 REAL(DP), INTENT(IN) :: mat(:,:,:) 3247 CHARACTER(LEN=*),OPTIONAL :: order 3248 INTEGER :: rank, length, i 3249 ! 3250 obj%tagname = TRIM(tagname) 3251 obj%lwrite = .TRUE. 3252 obj%lread = .TRUE. 3253 length = 1 3254 rank = SIZE(dims) 3255 DO i = 1, rank 3256 length = length * dims(i) 3257 END DO 3258 obj%rank = rank 3259 ALLOCATE(obj%matrix(length), obj%dims(rank) ) 3260 obj%matrix(1:length) = reshape(mat, [length]) 3261 obj%dims = dims 3262 IF (PRESENT(order)) THEN 3263 obj%order = TRIM(order) 3264 ELSE 3265 obj%order = 'F' 3266 END IF 3267 ! 3268 END SUBROUTINE qes_init_matrix_3 3269 ! 3270 3271 ! 3272 SUBROUTINE qes_init_integerMatrix_1(obj, tagname, dims, mat, order) 3273 ! 3274 IMPLICIT NONE 3275 ! 3276 TYPE(integerMatrix_type), INTENT(OUT) :: obj 3277 CHARACTER(LEN=*), INTENT(IN) :: tagname 3278 INTEGER,DIMENSION(:),INTENT(IN) :: dims 3279 INTEGER, INTENT(IN) :: mat(:) 3280 CHARACTER(LEN=*),OPTIONAL :: order 3281 INTEGER :: rank, length, i 3282 ! 3283 obj%tagname = TRIM(tagname) 3284 obj%lwrite = .TRUE. 3285 obj%lread = .TRUE. 3286 length = 1 3287 rank = SIZE(dims) 3288 DO i = 1, rank 3289 length = length * dims(i) 3290 END DO 3291 obj%rank = rank 3292 ALLOCATE(obj%integerMatrix(length), obj%dims(rank) ) 3293 obj%integerMatrix(1:length) = mat(1:length) 3294 obj%dims = dims 3295 IF (PRESENT(order)) THEN 3296 obj%order = TRIM(order) 3297 ELSE 3298 obj%order = 'F' 3299 END IF 3300 ! 3301 END SUBROUTINE qes_init_integerMatrix_1 3302 ! 3303 ! 3304 SUBROUTINE qes_init_integerMatrix_2(obj, tagname, dims, mat, order) 3305 ! 3306 IMPLICIT NONE 3307 ! 3308 TYPE(integerMatrix_type), INTENT(OUT) :: obj 3309 CHARACTER(LEN=*), INTENT(IN) :: tagname 3310 INTEGER,DIMENSION(:),INTENT(IN) :: dims 3311 INTEGER, INTENT(IN) :: mat(:,:) 3312 CHARACTER(LEN=*),OPTIONAL :: order 3313 INTEGER :: rank, length, i 3314 ! 3315 obj%tagname = TRIM(tagname) 3316 obj%lwrite = .TRUE. 3317 obj%lread = .TRUE. 3318 length = 1 3319 rank = SIZE(dims) 3320 DO i = 1, rank 3321 length = length * dims(i) 3322 END DO 3323 obj%rank = rank 3324 ALLOCATE(obj%integerMatrix(length), obj%dims(rank) ) 3325 obj%integerMatrix(1:length) = reshape(mat, [length]) 3326 obj%dims = dims 3327 IF (PRESENT(order)) THEN 3328 obj%order = TRIM(order) 3329 ELSE 3330 obj%order = 'F' 3331 END IF 3332 ! 3333 END SUBROUTINE qes_init_integerMatrix_2 3334 ! 3335 ! 3336 SUBROUTINE qes_init_integerMatrix_3(obj, tagname, dims, mat, order) 3337 ! 3338 IMPLICIT NONE 3339 ! 3340 TYPE(integerMatrix_type), INTENT(OUT) :: obj 3341 CHARACTER(LEN=*), INTENT(IN) :: tagname 3342 INTEGER,DIMENSION(:),INTENT(IN) :: dims 3343 INTEGER, INTENT(IN) :: mat(:,:,:) 3344 CHARACTER(LEN=*),OPTIONAL :: order 3345 INTEGER :: rank, length, i 3346 ! 3347 obj%tagname = TRIM(tagname) 3348 obj%lwrite = .TRUE. 3349 obj%lread = .TRUE. 3350 length = 1 3351 rank = SIZE(dims) 3352 DO i = 1, rank 3353 length = length * dims(i) 3354 END DO 3355 obj%rank = rank 3356 ALLOCATE(obj%integerMatrix(length), obj%dims(rank) ) 3357 obj%integerMatrix(1:length) = reshape(mat, [length]) 3358 obj%dims = dims 3359 IF (PRESENT(order)) THEN 3360 obj%order = TRIM(order) 3361 ELSE 3362 obj%order = 'F' 3363 END IF 3364 ! 3365 END SUBROUTINE qes_init_integerMatrix_3 3366 ! 3367 ! 3368 SUBROUTINE qes_init_scalarQuantity(obj, tagname, Units, scalarQuantity) 3369 ! 3370 IMPLICIT NONE 3371 ! 3372 TYPE(scalarQuantity_type), INTENT(OUT) :: obj 3373 CHARACTER(LEN=*), INTENT(IN) :: tagname 3374 CHARACTER(LEN=*), INTENT(IN) :: Units 3375 REAL(DP), INTENT(IN) :: scalarQuantity 3376 ! 3377 obj%tagname = TRIM(tagname) 3378 obj%lwrite = .TRUE. 3379 obj%lread = .TRUE. 3380 obj%Units = Units 3381 ! 3382 obj%scalarQuantity = scalarQuantity 3383 ! 3384 END SUBROUTINE qes_init_scalarQuantity 3385 ! 3386 ! 3387END MODULE qes_init_module