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_read_module 10 ! 11 ! Auto-generated code: don't edit this file 12 ! 13 ! Quantum Espresso XSD namespace: http://www.quantum-espresso.org/ns/qes/qes-1.0 14 ! 15 USE FoX_dom 16 USE qes_types_module 17 ! 18 IMPLICIT NONE 19 ! 20 PUBLIC qes_read 21 ! 22 INTERFACE qes_read 23 MODULE PROCEDURE qes_read_espresso 24 MODULE PROCEDURE qes_read_general_info 25 MODULE PROCEDURE qes_read_parallel_info 26 MODULE PROCEDURE qes_read_input 27 MODULE PROCEDURE qes_read_step 28 MODULE PROCEDURE qes_read_output 29 MODULE PROCEDURE qes_read_timing 30 MODULE PROCEDURE qes_read_clock 31 MODULE PROCEDURE qes_read_control_variables 32 MODULE PROCEDURE qes_read_xml_format 33 MODULE PROCEDURE qes_read_creator 34 MODULE PROCEDURE qes_read_created 35 MODULE PROCEDURE qes_read_atomic_species 36 MODULE PROCEDURE qes_read_species 37 MODULE PROCEDURE qes_read_atomic_structure 38 MODULE PROCEDURE qes_read_atomic_positions 39 MODULE PROCEDURE qes_read_atom 40 MODULE PROCEDURE qes_read_wyckoff_positions 41 MODULE PROCEDURE qes_read_cell 42 MODULE PROCEDURE qes_read_dft 43 MODULE PROCEDURE qes_read_hybrid 44 MODULE PROCEDURE qes_read_qpoint_grid 45 MODULE PROCEDURE qes_read_dftU 46 MODULE PROCEDURE qes_read_HubbardCommon 47 MODULE PROCEDURE qes_read_HubbardJ 48 MODULE PROCEDURE qes_read_starting_ns 49 MODULE PROCEDURE qes_read_Hubbard_ns 50 MODULE PROCEDURE qes_read_HubbardBack 51 MODULE PROCEDURE qes_read_backL 52 MODULE PROCEDURE qes_read_vdW 53 MODULE PROCEDURE qes_read_spin 54 MODULE PROCEDURE qes_read_bands 55 MODULE PROCEDURE qes_read_smearing 56 MODULE PROCEDURE qes_read_occupations 57 MODULE PROCEDURE qes_read_basis 58 MODULE PROCEDURE qes_read_basis_set 59 MODULE PROCEDURE qes_read_basisSetItem 60 MODULE PROCEDURE qes_read_reciprocal_lattice 61 MODULE PROCEDURE qes_read_electron_control 62 MODULE PROCEDURE qes_read_k_points_IBZ 63 MODULE PROCEDURE qes_read_monkhorst_pack 64 MODULE PROCEDURE qes_read_k_point 65 MODULE PROCEDURE qes_read_ion_control 66 MODULE PROCEDURE qes_read_bfgs 67 MODULE PROCEDURE qes_read_md 68 MODULE PROCEDURE qes_read_cell_control 69 MODULE PROCEDURE qes_read_symmetry_flags 70 MODULE PROCEDURE qes_read_boundary_conditions 71 MODULE PROCEDURE qes_read_esm 72 MODULE PROCEDURE qes_read_ekin_functional 73 MODULE PROCEDURE qes_read_spin_constraints 74 MODULE PROCEDURE qes_read_electric_field 75 MODULE PROCEDURE qes_read_gate_settings 76 MODULE PROCEDURE qes_read_atomic_constraints 77 MODULE PROCEDURE qes_read_atomic_constraint 78 MODULE PROCEDURE qes_read_inputOccupations 79 MODULE PROCEDURE qes_read_outputElectricField 80 MODULE PROCEDURE qes_read_BerryPhaseOutput 81 MODULE PROCEDURE qes_read_dipoleOutput 82 MODULE PROCEDURE qes_read_finiteFieldOut 83 MODULE PROCEDURE qes_read_polarization 84 MODULE PROCEDURE qes_read_ionicPolarization 85 MODULE PROCEDURE qes_read_electronicPolarization 86 MODULE PROCEDURE qes_read_phase 87 MODULE PROCEDURE qes_read_gateInfo 88 MODULE PROCEDURE qes_read_convergence_info 89 MODULE PROCEDURE qes_read_scf_conv 90 MODULE PROCEDURE qes_read_opt_conv 91 MODULE PROCEDURE qes_read_algorithmic_info 92 MODULE PROCEDURE qes_read_symmetries 93 MODULE PROCEDURE qes_read_symmetry 94 MODULE PROCEDURE qes_read_equivalent_atoms 95 MODULE PROCEDURE qes_read_info 96 MODULE PROCEDURE qes_read_outputPBC 97 MODULE PROCEDURE qes_read_magnetization 98 MODULE PROCEDURE qes_read_total_energy 99 MODULE PROCEDURE qes_read_band_structure 100 MODULE PROCEDURE qes_read_ks_energies 101 MODULE PROCEDURE qes_read_closed 102 MODULE PROCEDURE qes_read_vector 103 MODULE PROCEDURE qes_read_integerVector 104 MODULE PROCEDURE qes_read_matrix 105 MODULE PROCEDURE qes_read_integerMatrix 106 MODULE PROCEDURE qes_read_scalarQuantity 107 END INTERFACE qes_read 108 ! 109 CONTAINS 110 ! 111 ! 112 SUBROUTINE qes_read_espresso(xml_node, obj, ierr ) 113 ! 114 IMPLICIT NONE 115 ! 116 TYPE(Node), INTENT(IN), POINTER :: xml_node 117 TYPE(espresso_type), INTENT(OUT) :: obj 118 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 119 ! 120 TYPE(Node), POINTER :: tmp_node 121 TYPE(NodeList), POINTER :: tmp_node_list 122 INTEGER :: tmp_node_list_size, index, iostat_ 123 ! 124 obj%tagname = getTagName(xml_node) 125 ! 126 127 IF (hasAttribute(xml_node, "Units")) THEN 128 CALL extractDataAttribute(xml_node, "Units", obj%Units) 129 obj%Units_ispresent = .TRUE. 130 ELSE 131 obj%Units_ispresent = .FALSE. 132 END IF 133 ! 134 135 136 137 ! 138 tmp_node_list => getElementsByTagname(xml_node, "general_info") 139 tmp_node_list_size = getLength(tmp_node_list) 140 ! 141 IF (tmp_node_list_size > 1) THEN 142 IF (PRESENT(ierr) ) THEN 143 CALL infomsg("qes_read:espressoType","general_info: too many occurrences") 144 ierr = ierr + 1 145 ELSE 146 CALL errore("qes_read:espressoType","general_info: too many occurrences",10) 147 END IF 148 END IF 149 ! 150 IF (tmp_node_list_size>0) THEN 151 obj%general_info_ispresent = .TRUE. 152 tmp_node => item(tmp_node_list, 0) 153 CALL qes_read_general_info(tmp_node, obj%general_info, ierr ) 154 ELSE 155 obj%general_info_ispresent = .FALSE. 156 END IF 157 ! 158 tmp_node_list => getElementsByTagname(xml_node, "parallel_info") 159 tmp_node_list_size = getLength(tmp_node_list) 160 ! 161 IF (tmp_node_list_size > 1) THEN 162 IF (PRESENT(ierr) ) THEN 163 CALL infomsg("qes_read:espressoType","parallel_info: too many occurrences") 164 ierr = ierr + 1 165 ELSE 166 CALL errore("qes_read:espressoType","parallel_info: too many occurrences",10) 167 END IF 168 END IF 169 ! 170 IF (tmp_node_list_size>0) THEN 171 obj%parallel_info_ispresent = .TRUE. 172 tmp_node => item(tmp_node_list, 0) 173 CALL qes_read_parallel_info(tmp_node, obj%parallel_info, ierr ) 174 ELSE 175 obj%parallel_info_ispresent = .FALSE. 176 END IF 177 ! 178 tmp_node_list => getElementsByTagname(xml_node, "input") 179 tmp_node_list_size = getLength(tmp_node_list) 180 ! 181 IF (tmp_node_list_size /= 1) THEN 182 IF (PRESENT(ierr) ) THEN 183 CALL infomsg("qes_read:espressoType","input: wrong number of occurrences") 184 ierr = ierr + 1 185 ELSE 186 CALL errore("qes_read:espressoType","input: wrong number of occurrences",10) 187 END IF 188 END IF 189 ! 190 tmp_node => item(tmp_node_list, 0) 191 IF (ASSOCIATED(tmp_node))& 192 CALL qes_read_input(tmp_node, obj%input, ierr ) 193 ! 194 tmp_node_list => getElementsByTagname(xml_node, "step") 195 tmp_node_list_size = getLength(tmp_node_list) 196 ! 197 ! 198 IF (tmp_node_list_size>0) THEN 199 obj%step_ispresent = .TRUE. 200 ELSE 201 obj%step_ispresent = .FALSE. 202 END IF 203 obj%ndim_step = tmp_node_list_size 204 ALLOCATE(obj%step(tmp_node_list_size)) 205 DO index=1,tmp_node_list_size 206 tmp_node => item( tmp_node_list, index-1 ) 207 CALL qes_read_step(tmp_node, obj%step(index), ierr ) 208 END DO 209 ! 210 tmp_node_list => getElementsByTagname(xml_node, "output") 211 tmp_node_list_size = getLength(tmp_node_list) 212 ! 213 IF (tmp_node_list_size > 1) THEN 214 IF (PRESENT(ierr) ) THEN 215 CALL infomsg("qes_read:espressoType","output: too many occurrences") 216 ierr = ierr + 1 217 ELSE 218 CALL errore("qes_read:espressoType","output: too many occurrences",10) 219 END IF 220 END IF 221 ! 222 IF (tmp_node_list_size>0) THEN 223 obj%output_ispresent = .TRUE. 224 tmp_node => item(tmp_node_list, 0) 225 CALL qes_read_output(tmp_node, obj%output, ierr ) 226 ELSE 227 obj%output_ispresent = .FALSE. 228 END IF 229 ! 230 tmp_node_list => getElementsByTagname(xml_node, "status") 231 tmp_node_list_size = getLength(tmp_node_list) 232 ! 233 IF (tmp_node_list_size > 1) THEN 234 IF (PRESENT(ierr) ) THEN 235 CALL infomsg("qes_read:espressoType","status: too many occurrences") 236 ierr = ierr + 1 237 ELSE 238 CALL errore("qes_read:espressoType","status: too many occurrences",10) 239 END IF 240 END IF 241 ! 242 IF (tmp_node_list_size>0) THEN 243 obj%status_ispresent = .TRUE. 244 tmp_node => item(tmp_node_list, 0) 245 CALL extractDataContent(tmp_node, obj%status , IOSTAT = iostat_) 246 IF ( iostat_ /= 0 ) THEN 247 IF ( PRESENT (ierr ) ) THEN 248 CALL infomsg("qes_read:espressoType","error reading status") 249 ierr = ierr + 1 250 ELSE 251 CALL errore ("qes_read:espressoType","error reading status",10) 252 END IF 253 END IF 254 ELSE 255 obj%status_ispresent = .FALSE. 256 END IF 257 ! 258 tmp_node_list => getElementsByTagname(xml_node, "cputime") 259 tmp_node_list_size = getLength(tmp_node_list) 260 ! 261 IF (tmp_node_list_size > 1) THEN 262 IF (PRESENT(ierr) ) THEN 263 CALL infomsg("qes_read:espressoType","cputime: too many occurrences") 264 ierr = ierr + 1 265 ELSE 266 CALL errore("qes_read:espressoType","cputime: too many occurrences",10) 267 END IF 268 END IF 269 ! 270 IF (tmp_node_list_size>0) THEN 271 obj%cputime_ispresent = .TRUE. 272 tmp_node => item(tmp_node_list, 0) 273 CALL extractDataContent(tmp_node, obj%cputime , IOSTAT = iostat_) 274 IF ( iostat_ /= 0 ) THEN 275 IF ( PRESENT (ierr ) ) THEN 276 CALL infomsg("qes_read:espressoType","error reading cputime") 277 ierr = ierr + 1 278 ELSE 279 CALL errore ("qes_read:espressoType","error reading cputime",10) 280 END IF 281 END IF 282 ELSE 283 obj%cputime_ispresent = .FALSE. 284 END IF 285 ! 286 tmp_node_list => getElementsByTagname(xml_node, "timing_info") 287 tmp_node_list_size = getLength(tmp_node_list) 288 ! 289 IF (tmp_node_list_size > 1) THEN 290 IF (PRESENT(ierr) ) THEN 291 CALL infomsg("qes_read:espressoType","timing_info: too many occurrences") 292 ierr = ierr + 1 293 ELSE 294 CALL errore("qes_read:espressoType","timing_info: too many occurrences",10) 295 END IF 296 END IF 297 ! 298 IF (tmp_node_list_size>0) THEN 299 obj%timing_info_ispresent = .TRUE. 300 tmp_node => item(tmp_node_list, 0) 301 CALL qes_read_timing(tmp_node, obj%timing_info, ierr ) 302 ELSE 303 obj%timing_info_ispresent = .FALSE. 304 END IF 305 ! 306 tmp_node_list => getElementsByTagname(xml_node, "closed") 307 tmp_node_list_size = getLength(tmp_node_list) 308 ! 309 IF (tmp_node_list_size > 1) THEN 310 IF (PRESENT(ierr) ) THEN 311 CALL infomsg("qes_read:espressoType","closed: too many occurrences") 312 ierr = ierr + 1 313 ELSE 314 CALL errore("qes_read:espressoType","closed: too many occurrences",10) 315 END IF 316 END IF 317 ! 318 IF (tmp_node_list_size>0) THEN 319 obj%closed_ispresent = .TRUE. 320 tmp_node => item(tmp_node_list, 0) 321 CALL qes_read_closed(tmp_node, obj%closed, ierr ) 322 ELSE 323 obj%closed_ispresent = .FALSE. 324 END IF 325 ! 326 ! 327 obj%lwrite = .TRUE. 328 ! 329 END SUBROUTINE qes_read_espresso 330 ! 331 ! 332 SUBROUTINE qes_read_general_info(xml_node, obj, ierr ) 333 ! 334 IMPLICIT NONE 335 ! 336 TYPE(Node), INTENT(IN), POINTER :: xml_node 337 TYPE(general_info_type), INTENT(OUT) :: obj 338 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 339 ! 340 TYPE(Node), POINTER :: tmp_node 341 TYPE(NodeList), POINTER :: tmp_node_list 342 INTEGER :: tmp_node_list_size, index, iostat_ 343 ! 344 obj%tagname = getTagName(xml_node) 345 ! 346 347 348 349 350 ! 351 tmp_node_list => getElementsByTagname(xml_node, "xml_format") 352 tmp_node_list_size = getLength(tmp_node_list) 353 ! 354 IF (tmp_node_list_size /= 1) THEN 355 IF (PRESENT(ierr) ) THEN 356 CALL infomsg("qes_read:general_infoType","xml_format: wrong number of occurrences") 357 ierr = ierr + 1 358 ELSE 359 CALL errore("qes_read:general_infoType","xml_format: wrong number of occurrences",10) 360 END IF 361 END IF 362 ! 363 tmp_node => item(tmp_node_list, 0) 364 IF (ASSOCIATED(tmp_node))& 365 CALL qes_read_xml_format(tmp_node, obj%xml_format, ierr ) 366 ! 367 tmp_node_list => getElementsByTagname(xml_node, "creator") 368 tmp_node_list_size = getLength(tmp_node_list) 369 ! 370 IF (tmp_node_list_size /= 1) THEN 371 IF (PRESENT(ierr) ) THEN 372 CALL infomsg("qes_read:general_infoType","creator: wrong number of occurrences") 373 ierr = ierr + 1 374 ELSE 375 CALL errore("qes_read:general_infoType","creator: wrong number of occurrences",10) 376 END IF 377 END IF 378 ! 379 tmp_node => item(tmp_node_list, 0) 380 IF (ASSOCIATED(tmp_node))& 381 CALL qes_read_creator(tmp_node, obj%creator, ierr ) 382 ! 383 tmp_node_list => getElementsByTagname(xml_node, "created") 384 tmp_node_list_size = getLength(tmp_node_list) 385 ! 386 IF (tmp_node_list_size /= 1) THEN 387 IF (PRESENT(ierr) ) THEN 388 CALL infomsg("qes_read:general_infoType","created: wrong number of occurrences") 389 ierr = ierr + 1 390 ELSE 391 CALL errore("qes_read:general_infoType","created: wrong number of occurrences",10) 392 END IF 393 END IF 394 ! 395 tmp_node => item(tmp_node_list, 0) 396 IF (ASSOCIATED(tmp_node))& 397 CALL qes_read_created(tmp_node, obj%created, ierr ) 398 ! 399 tmp_node_list => getElementsByTagname(xml_node, "job") 400 tmp_node_list_size = getLength(tmp_node_list) 401 ! 402 IF (tmp_node_list_size /= 1) THEN 403 IF (PRESENT(ierr) ) THEN 404 CALL infomsg("qes_read:general_infoType","job: wrong number of occurrences") 405 ierr = ierr + 1 406 ELSE 407 CALL errore("qes_read:general_infoType","job: wrong number of occurrences",10) 408 END IF 409 END IF 410 ! 411 tmp_node => item(tmp_node_list, 0) 412 IF (ASSOCIATED(tmp_node))& 413 CALL extractDataContent(tmp_node, obj%job, IOSTAT = iostat_ ) 414 IF ( iostat_ /= 0 ) THEN 415 IF ( PRESENT (ierr ) ) THEN 416 CALL infomsg("qes_read:general_infoType","error reading job") 417 ierr = ierr + 1 418 ELSE 419 CALL errore ("qes_read:general_infoType","error reading job",10) 420 END IF 421 END IF 422 ! 423 ! 424 obj%lwrite = .TRUE. 425 ! 426 END SUBROUTINE qes_read_general_info 427 ! 428 ! 429 SUBROUTINE qes_read_parallel_info(xml_node, obj, ierr ) 430 ! 431 IMPLICIT NONE 432 ! 433 TYPE(Node), INTENT(IN), POINTER :: xml_node 434 TYPE(parallel_info_type), INTENT(OUT) :: obj 435 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 436 ! 437 TYPE(Node), POINTER :: tmp_node 438 TYPE(NodeList), POINTER :: tmp_node_list 439 INTEGER :: tmp_node_list_size, index, iostat_ 440 ! 441 obj%tagname = getTagName(xml_node) 442 ! 443 444 445 446 447 ! 448 tmp_node_list => getElementsByTagname(xml_node, "nprocs") 449 tmp_node_list_size = getLength(tmp_node_list) 450 ! 451 IF (tmp_node_list_size /= 1) THEN 452 IF (PRESENT(ierr) ) THEN 453 CALL infomsg("qes_read:parallel_infoType","nprocs: wrong number of occurrences") 454 ierr = ierr + 1 455 ELSE 456 CALL errore("qes_read:parallel_infoType","nprocs: wrong number of occurrences",10) 457 END IF 458 END IF 459 ! 460 tmp_node => item(tmp_node_list, 0) 461 IF (ASSOCIATED(tmp_node))& 462 CALL extractDataContent(tmp_node, obj%nprocs, IOSTAT = iostat_ ) 463 IF ( iostat_ /= 0 ) THEN 464 IF ( PRESENT (ierr ) ) THEN 465 CALL infomsg("qes_read:parallel_infoType","error reading nprocs") 466 ierr = ierr + 1 467 ELSE 468 CALL errore ("qes_read:parallel_infoType","error reading nprocs",10) 469 END IF 470 END IF 471 ! 472 tmp_node_list => getElementsByTagname(xml_node, "nthreads") 473 tmp_node_list_size = getLength(tmp_node_list) 474 ! 475 IF (tmp_node_list_size /= 1) THEN 476 IF (PRESENT(ierr) ) THEN 477 CALL infomsg("qes_read:parallel_infoType","nthreads: wrong number of occurrences") 478 ierr = ierr + 1 479 ELSE 480 CALL errore("qes_read:parallel_infoType","nthreads: wrong number of occurrences",10) 481 END IF 482 END IF 483 ! 484 tmp_node => item(tmp_node_list, 0) 485 IF (ASSOCIATED(tmp_node))& 486 CALL extractDataContent(tmp_node, obj%nthreads, IOSTAT = iostat_ ) 487 IF ( iostat_ /= 0 ) THEN 488 IF ( PRESENT (ierr ) ) THEN 489 CALL infomsg("qes_read:parallel_infoType","error reading nthreads") 490 ierr = ierr + 1 491 ELSE 492 CALL errore ("qes_read:parallel_infoType","error reading nthreads",10) 493 END IF 494 END IF 495 ! 496 tmp_node_list => getElementsByTagname(xml_node, "ntasks") 497 tmp_node_list_size = getLength(tmp_node_list) 498 ! 499 IF (tmp_node_list_size /= 1) THEN 500 IF (PRESENT(ierr) ) THEN 501 CALL infomsg("qes_read:parallel_infoType","ntasks: wrong number of occurrences") 502 ierr = ierr + 1 503 ELSE 504 CALL errore("qes_read:parallel_infoType","ntasks: wrong number of occurrences",10) 505 END IF 506 END IF 507 ! 508 tmp_node => item(tmp_node_list, 0) 509 IF (ASSOCIATED(tmp_node))& 510 CALL extractDataContent(tmp_node, obj%ntasks, IOSTAT = iostat_ ) 511 IF ( iostat_ /= 0 ) THEN 512 IF ( PRESENT (ierr ) ) THEN 513 CALL infomsg("qes_read:parallel_infoType","error reading ntasks") 514 ierr = ierr + 1 515 ELSE 516 CALL errore ("qes_read:parallel_infoType","error reading ntasks",10) 517 END IF 518 END IF 519 ! 520 tmp_node_list => getElementsByTagname(xml_node, "nbgrp") 521 tmp_node_list_size = getLength(tmp_node_list) 522 ! 523 IF (tmp_node_list_size /= 1) THEN 524 IF (PRESENT(ierr) ) THEN 525 CALL infomsg("qes_read:parallel_infoType","nbgrp: wrong number of occurrences") 526 ierr = ierr + 1 527 ELSE 528 CALL errore("qes_read:parallel_infoType","nbgrp: wrong number of occurrences",10) 529 END IF 530 END IF 531 ! 532 tmp_node => item(tmp_node_list, 0) 533 IF (ASSOCIATED(tmp_node))& 534 CALL extractDataContent(tmp_node, obj%nbgrp, IOSTAT = iostat_ ) 535 IF ( iostat_ /= 0 ) THEN 536 IF ( PRESENT (ierr ) ) THEN 537 CALL infomsg("qes_read:parallel_infoType","error reading nbgrp") 538 ierr = ierr + 1 539 ELSE 540 CALL errore ("qes_read:parallel_infoType","error reading nbgrp",10) 541 END IF 542 END IF 543 ! 544 tmp_node_list => getElementsByTagname(xml_node, "npool") 545 tmp_node_list_size = getLength(tmp_node_list) 546 ! 547 IF (tmp_node_list_size /= 1) THEN 548 IF (PRESENT(ierr) ) THEN 549 CALL infomsg("qes_read:parallel_infoType","npool: wrong number of occurrences") 550 ierr = ierr + 1 551 ELSE 552 CALL errore("qes_read:parallel_infoType","npool: wrong number of occurrences",10) 553 END IF 554 END IF 555 ! 556 tmp_node => item(tmp_node_list, 0) 557 IF (ASSOCIATED(tmp_node))& 558 CALL extractDataContent(tmp_node, obj%npool, IOSTAT = iostat_ ) 559 IF ( iostat_ /= 0 ) THEN 560 IF ( PRESENT (ierr ) ) THEN 561 CALL infomsg("qes_read:parallel_infoType","error reading npool") 562 ierr = ierr + 1 563 ELSE 564 CALL errore ("qes_read:parallel_infoType","error reading npool",10) 565 END IF 566 END IF 567 ! 568 tmp_node_list => getElementsByTagname(xml_node, "ndiag") 569 tmp_node_list_size = getLength(tmp_node_list) 570 ! 571 IF (tmp_node_list_size /= 1) THEN 572 IF (PRESENT(ierr) ) THEN 573 CALL infomsg("qes_read:parallel_infoType","ndiag: wrong number of occurrences") 574 ierr = ierr + 1 575 ELSE 576 CALL errore("qes_read:parallel_infoType","ndiag: wrong number of occurrences",10) 577 END IF 578 END IF 579 ! 580 tmp_node => item(tmp_node_list, 0) 581 IF (ASSOCIATED(tmp_node))& 582 CALL extractDataContent(tmp_node, obj%ndiag, IOSTAT = iostat_ ) 583 IF ( iostat_ /= 0 ) THEN 584 IF ( PRESENT (ierr ) ) THEN 585 CALL infomsg("qes_read:parallel_infoType","error reading ndiag") 586 ierr = ierr + 1 587 ELSE 588 CALL errore ("qes_read:parallel_infoType","error reading ndiag",10) 589 END IF 590 END IF 591 ! 592 ! 593 obj%lwrite = .TRUE. 594 ! 595 END SUBROUTINE qes_read_parallel_info 596 ! 597 ! 598 SUBROUTINE qes_read_input(xml_node, obj, ierr ) 599 ! 600 IMPLICIT NONE 601 ! 602 TYPE(Node), INTENT(IN), POINTER :: xml_node 603 TYPE(input_type), INTENT(OUT) :: obj 604 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 605 ! 606 TYPE(Node), POINTER :: tmp_node 607 TYPE(NodeList), POINTER :: tmp_node_list 608 INTEGER :: tmp_node_list_size, index, iostat_ 609 ! 610 obj%tagname = getTagName(xml_node) 611 ! 612 613 614 615 616 ! 617 tmp_node_list => getElementsByTagname(xml_node, "control_variables") 618 tmp_node_list_size = getLength(tmp_node_list) 619 ! 620 IF (tmp_node_list_size /= 1) THEN 621 IF (PRESENT(ierr) ) THEN 622 CALL infomsg("qes_read:inputType","control_variables: wrong number of occurrences") 623 ierr = ierr + 1 624 ELSE 625 CALL errore("qes_read:inputType","control_variables: wrong number of occurrences",10) 626 END IF 627 END IF 628 ! 629 tmp_node => item(tmp_node_list, 0) 630 IF (ASSOCIATED(tmp_node))& 631 CALL qes_read_control_variables(tmp_node, obj%control_variables, ierr ) 632 ! 633 tmp_node_list => getElementsByTagname(xml_node, "atomic_species") 634 tmp_node_list_size = getLength(tmp_node_list) 635 ! 636 IF (tmp_node_list_size /= 1) THEN 637 IF (PRESENT(ierr) ) THEN 638 CALL infomsg("qes_read:inputType","atomic_species: wrong number of occurrences") 639 ierr = ierr + 1 640 ELSE 641 CALL errore("qes_read:inputType","atomic_species: wrong number of occurrences",10) 642 END IF 643 END IF 644 ! 645 tmp_node => item(tmp_node_list, 0) 646 IF (ASSOCIATED(tmp_node))& 647 CALL qes_read_atomic_species(tmp_node, obj%atomic_species, ierr ) 648 ! 649 tmp_node_list => getElementsByTagname(xml_node, "atomic_structure") 650 tmp_node_list_size = getLength(tmp_node_list) 651 ! 652 IF (tmp_node_list_size /= 1) THEN 653 IF (PRESENT(ierr) ) THEN 654 CALL infomsg("qes_read:inputType","atomic_structure: wrong number of occurrences") 655 ierr = ierr + 1 656 ELSE 657 CALL errore("qes_read:inputType","atomic_structure: wrong number of occurrences",10) 658 END IF 659 END IF 660 ! 661 tmp_node => item(tmp_node_list, 0) 662 IF (ASSOCIATED(tmp_node))& 663 CALL qes_read_atomic_structure(tmp_node, obj%atomic_structure, ierr ) 664 ! 665 tmp_node_list => getElementsByTagname(xml_node, "dft") 666 tmp_node_list_size = getLength(tmp_node_list) 667 ! 668 IF (tmp_node_list_size /= 1) THEN 669 IF (PRESENT(ierr) ) THEN 670 CALL infomsg("qes_read:inputType","dft: wrong number of occurrences") 671 ierr = ierr + 1 672 ELSE 673 CALL errore("qes_read:inputType","dft: wrong number of occurrences",10) 674 END IF 675 END IF 676 ! 677 tmp_node => item(tmp_node_list, 0) 678 IF (ASSOCIATED(tmp_node))& 679 CALL qes_read_dft(tmp_node, obj%dft, ierr ) 680 ! 681 tmp_node_list => getElementsByTagname(xml_node, "spin") 682 tmp_node_list_size = getLength(tmp_node_list) 683 ! 684 IF (tmp_node_list_size /= 1) THEN 685 IF (PRESENT(ierr) ) THEN 686 CALL infomsg("qes_read:inputType","spin: wrong number of occurrences") 687 ierr = ierr + 1 688 ELSE 689 CALL errore("qes_read:inputType","spin: wrong number of occurrences",10) 690 END IF 691 END IF 692 ! 693 tmp_node => item(tmp_node_list, 0) 694 IF (ASSOCIATED(tmp_node))& 695 CALL qes_read_spin(tmp_node, obj%spin, ierr ) 696 ! 697 tmp_node_list => getElementsByTagname(xml_node, "bands") 698 tmp_node_list_size = getLength(tmp_node_list) 699 ! 700 IF (tmp_node_list_size /= 1) THEN 701 IF (PRESENT(ierr) ) THEN 702 CALL infomsg("qes_read:inputType","bands: wrong number of occurrences") 703 ierr = ierr + 1 704 ELSE 705 CALL errore("qes_read:inputType","bands: wrong number of occurrences",10) 706 END IF 707 END IF 708 ! 709 tmp_node => item(tmp_node_list, 0) 710 IF (ASSOCIATED(tmp_node))& 711 CALL qes_read_bands(tmp_node, obj%bands, ierr ) 712 ! 713 tmp_node_list => getElementsByTagname(xml_node, "basis") 714 tmp_node_list_size = getLength(tmp_node_list) 715 ! 716 IF (tmp_node_list_size /= 1) THEN 717 IF (PRESENT(ierr) ) THEN 718 CALL infomsg("qes_read:inputType","basis: wrong number of occurrences") 719 ierr = ierr + 1 720 ELSE 721 CALL errore("qes_read:inputType","basis: wrong number of occurrences",10) 722 END IF 723 END IF 724 ! 725 tmp_node => item(tmp_node_list, 0) 726 IF (ASSOCIATED(tmp_node))& 727 CALL qes_read_basis(tmp_node, obj%basis, ierr ) 728 ! 729 tmp_node_list => getElementsByTagname(xml_node, "electron_control") 730 tmp_node_list_size = getLength(tmp_node_list) 731 ! 732 IF (tmp_node_list_size /= 1) THEN 733 IF (PRESENT(ierr) ) THEN 734 CALL infomsg("qes_read:inputType","electron_control: wrong number of occurrences") 735 ierr = ierr + 1 736 ELSE 737 CALL errore("qes_read:inputType","electron_control: wrong number of occurrences",10) 738 END IF 739 END IF 740 ! 741 tmp_node => item(tmp_node_list, 0) 742 IF (ASSOCIATED(tmp_node))& 743 CALL qes_read_electron_control(tmp_node, obj%electron_control, ierr ) 744 ! 745 tmp_node_list => getElementsByTagname(xml_node, "k_points_IBZ") 746 tmp_node_list_size = getLength(tmp_node_list) 747 ! 748 IF (tmp_node_list_size /= 1) THEN 749 IF (PRESENT(ierr) ) THEN 750 CALL infomsg("qes_read:inputType","k_points_IBZ: wrong number of occurrences") 751 ierr = ierr + 1 752 ELSE 753 CALL errore("qes_read:inputType","k_points_IBZ: wrong number of occurrences",10) 754 END IF 755 END IF 756 ! 757 tmp_node => item(tmp_node_list, 0) 758 IF (ASSOCIATED(tmp_node))& 759 CALL qes_read_k_points_IBZ(tmp_node, obj%k_points_IBZ, ierr ) 760 ! 761 tmp_node_list => getElementsByTagname(xml_node, "ion_control") 762 tmp_node_list_size = getLength(tmp_node_list) 763 ! 764 IF (tmp_node_list_size /= 1) THEN 765 IF (PRESENT(ierr) ) THEN 766 CALL infomsg("qes_read:inputType","ion_control: wrong number of occurrences") 767 ierr = ierr + 1 768 ELSE 769 CALL errore("qes_read:inputType","ion_control: wrong number of occurrences",10) 770 END IF 771 END IF 772 ! 773 tmp_node => item(tmp_node_list, 0) 774 IF (ASSOCIATED(tmp_node))& 775 CALL qes_read_ion_control(tmp_node, obj%ion_control, ierr ) 776 ! 777 tmp_node_list => getElementsByTagname(xml_node, "cell_control") 778 tmp_node_list_size = getLength(tmp_node_list) 779 ! 780 IF (tmp_node_list_size /= 1) THEN 781 IF (PRESENT(ierr) ) THEN 782 CALL infomsg("qes_read:inputType","cell_control: wrong number of occurrences") 783 ierr = ierr + 1 784 ELSE 785 CALL errore("qes_read:inputType","cell_control: wrong number of occurrences",10) 786 END IF 787 END IF 788 ! 789 tmp_node => item(tmp_node_list, 0) 790 IF (ASSOCIATED(tmp_node))& 791 CALL qes_read_cell_control(tmp_node, obj%cell_control, ierr ) 792 ! 793 tmp_node_list => getElementsByTagname(xml_node, "symmetry_flags") 794 tmp_node_list_size = getLength(tmp_node_list) 795 ! 796 IF (tmp_node_list_size > 1) THEN 797 IF (PRESENT(ierr) ) THEN 798 CALL infomsg("qes_read:inputType","symmetry_flags: too many occurrences") 799 ierr = ierr + 1 800 ELSE 801 CALL errore("qes_read:inputType","symmetry_flags: too many occurrences",10) 802 END IF 803 END IF 804 ! 805 IF (tmp_node_list_size>0) THEN 806 obj%symmetry_flags_ispresent = .TRUE. 807 tmp_node => item(tmp_node_list, 0) 808 CALL qes_read_symmetry_flags(tmp_node, obj%symmetry_flags, ierr ) 809 ELSE 810 obj%symmetry_flags_ispresent = .FALSE. 811 END IF 812 ! 813 tmp_node_list => getElementsByTagname(xml_node, "boundary_conditions") 814 tmp_node_list_size = getLength(tmp_node_list) 815 ! 816 IF (tmp_node_list_size > 1) THEN 817 IF (PRESENT(ierr) ) THEN 818 CALL infomsg("qes_read:inputType","boundary_conditions: too many occurrences") 819 ierr = ierr + 1 820 ELSE 821 CALL errore("qes_read:inputType","boundary_conditions: too many occurrences",10) 822 END IF 823 END IF 824 ! 825 IF (tmp_node_list_size>0) THEN 826 obj%boundary_conditions_ispresent = .TRUE. 827 tmp_node => item(tmp_node_list, 0) 828 CALL qes_read_boundary_conditions(tmp_node, obj%boundary_conditions, ierr ) 829 ELSE 830 obj%boundary_conditions_ispresent = .FALSE. 831 END IF 832 ! 833 tmp_node_list => getElementsByTagname(xml_node, "ekin_functional") 834 tmp_node_list_size = getLength(tmp_node_list) 835 ! 836 IF (tmp_node_list_size > 1) THEN 837 IF (PRESENT(ierr) ) THEN 838 CALL infomsg("qes_read:inputType","ekin_functional: too many occurrences") 839 ierr = ierr + 1 840 ELSE 841 CALL errore("qes_read:inputType","ekin_functional: too many occurrences",10) 842 END IF 843 END IF 844 ! 845 IF (tmp_node_list_size>0) THEN 846 obj%ekin_functional_ispresent = .TRUE. 847 tmp_node => item(tmp_node_list, 0) 848 CALL qes_read_ekin_functional(tmp_node, obj%ekin_functional, ierr ) 849 ELSE 850 obj%ekin_functional_ispresent = .FALSE. 851 END IF 852 ! 853 tmp_node_list => getElementsByTagname(xml_node, "external_atomic_forces") 854 tmp_node_list_size = getLength(tmp_node_list) 855 ! 856 IF (tmp_node_list_size > 1) THEN 857 IF (PRESENT(ierr) ) THEN 858 CALL infomsg("qes_read:inputType","external_atomic_forces: too many occurrences") 859 ierr = ierr + 1 860 ELSE 861 CALL errore("qes_read:inputType","external_atomic_forces: too many occurrences",10) 862 END IF 863 END IF 864 ! 865 IF (tmp_node_list_size>0) THEN 866 obj%external_atomic_forces_ispresent = .TRUE. 867 tmp_node => item(tmp_node_list, 0) 868 CALL qes_read_matrix(tmp_node, obj%external_atomic_forces, ierr ) 869 ELSE 870 obj%external_atomic_forces_ispresent = .FALSE. 871 END IF 872 ! 873 tmp_node_list => getElementsByTagname(xml_node, "free_positions") 874 tmp_node_list_size = getLength(tmp_node_list) 875 ! 876 IF (tmp_node_list_size > 1) THEN 877 IF (PRESENT(ierr) ) THEN 878 CALL infomsg("qes_read:inputType","free_positions: too many occurrences") 879 ierr = ierr + 1 880 ELSE 881 CALL errore("qes_read:inputType","free_positions: too many occurrences",10) 882 END IF 883 END IF 884 ! 885 IF (tmp_node_list_size>0) THEN 886 obj%free_positions_ispresent = .TRUE. 887 tmp_node => item(tmp_node_list, 0) 888 CALL qes_read_integerMatrix(tmp_node, obj%free_positions, ierr ) 889 ELSE 890 obj%free_positions_ispresent = .FALSE. 891 END IF 892 ! 893 tmp_node_list => getElementsByTagname(xml_node, "starting_atomic_velocities") 894 tmp_node_list_size = getLength(tmp_node_list) 895 ! 896 IF (tmp_node_list_size > 1) THEN 897 IF (PRESENT(ierr) ) THEN 898 CALL infomsg("qes_read:inputType","starting_atomic_velocities: too many occurrences") 899 ierr = ierr + 1 900 ELSE 901 CALL errore("qes_read:inputType","starting_atomic_velocities: too many occurrences",10) 902 END IF 903 END IF 904 ! 905 IF (tmp_node_list_size>0) THEN 906 obj%starting_atomic_velocities_ispresent = .TRUE. 907 tmp_node => item(tmp_node_list, 0) 908 CALL qes_read_matrix(tmp_node, obj%starting_atomic_velocities, ierr ) 909 ELSE 910 obj%starting_atomic_velocities_ispresent = .FALSE. 911 END IF 912 ! 913 tmp_node_list => getElementsByTagname(xml_node, "electric_field") 914 tmp_node_list_size = getLength(tmp_node_list) 915 ! 916 IF (tmp_node_list_size > 1) THEN 917 IF (PRESENT(ierr) ) THEN 918 CALL infomsg("qes_read:inputType","electric_field: too many occurrences") 919 ierr = ierr + 1 920 ELSE 921 CALL errore("qes_read:inputType","electric_field: too many occurrences",10) 922 END IF 923 END IF 924 ! 925 IF (tmp_node_list_size>0) THEN 926 obj%electric_field_ispresent = .TRUE. 927 tmp_node => item(tmp_node_list, 0) 928 CALL qes_read_electric_field(tmp_node, obj%electric_field, ierr ) 929 ELSE 930 obj%electric_field_ispresent = .FALSE. 931 END IF 932 ! 933 tmp_node_list => getElementsByTagname(xml_node, "atomic_constraints") 934 tmp_node_list_size = getLength(tmp_node_list) 935 ! 936 IF (tmp_node_list_size > 1) THEN 937 IF (PRESENT(ierr) ) THEN 938 CALL infomsg("qes_read:inputType","atomic_constraints: too many occurrences") 939 ierr = ierr + 1 940 ELSE 941 CALL errore("qes_read:inputType","atomic_constraints: too many occurrences",10) 942 END IF 943 END IF 944 ! 945 IF (tmp_node_list_size>0) THEN 946 obj%atomic_constraints_ispresent = .TRUE. 947 tmp_node => item(tmp_node_list, 0) 948 CALL qes_read_atomic_constraints(tmp_node, obj%atomic_constraints, ierr ) 949 ELSE 950 obj%atomic_constraints_ispresent = .FALSE. 951 END IF 952 ! 953 tmp_node_list => getElementsByTagname(xml_node, "spin_constraints") 954 tmp_node_list_size = getLength(tmp_node_list) 955 ! 956 IF (tmp_node_list_size > 1) THEN 957 IF (PRESENT(ierr) ) THEN 958 CALL infomsg("qes_read:inputType","spin_constraints: too many occurrences") 959 ierr = ierr + 1 960 ELSE 961 CALL errore("qes_read:inputType","spin_constraints: too many occurrences",10) 962 END IF 963 END IF 964 ! 965 IF (tmp_node_list_size>0) THEN 966 obj%spin_constraints_ispresent = .TRUE. 967 tmp_node => item(tmp_node_list, 0) 968 CALL qes_read_spin_constraints(tmp_node, obj%spin_constraints, ierr ) 969 ELSE 970 obj%spin_constraints_ispresent = .FALSE. 971 END IF 972 ! 973 ! 974 obj%lwrite = .TRUE. 975 ! 976 END SUBROUTINE qes_read_input 977 ! 978 ! 979 SUBROUTINE qes_read_step(xml_node, obj, ierr ) 980 ! 981 IMPLICIT NONE 982 ! 983 TYPE(Node), INTENT(IN), POINTER :: xml_node 984 TYPE(step_type), INTENT(OUT) :: obj 985 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 986 ! 987 TYPE(Node), POINTER :: tmp_node 988 TYPE(NodeList), POINTER :: tmp_node_list 989 INTEGER :: tmp_node_list_size, index, iostat_ 990 ! 991 obj%tagname = getTagName(xml_node) 992 ! 993 994 IF (hasAttribute(xml_node, "n_step")) THEN 995 CALL extractDataAttribute(xml_node, "n_step", obj%n_step) 996 ELSE 997 IF ( PRESENT(ierr) ) THEN 998 CALL infomsg ( "qes_read: stepType",& 999 "required attribute n_step not found" ) 1000 ierr = ierr + 1 1001 ELSE 1002 CALL errore ("qes_read: stepType",& 1003 "required attribute n_step not found", 10 ) 1004 END IF 1005 END IF 1006 ! 1007 1008 1009 1010 ! 1011 tmp_node_list => getElementsByTagname(xml_node, "scf_conv") 1012 tmp_node_list_size = getLength(tmp_node_list) 1013 ! 1014 IF (tmp_node_list_size /= 1) THEN 1015 IF (PRESENT(ierr) ) THEN 1016 CALL infomsg("qes_read:stepType","scf_conv: wrong number of occurrences") 1017 ierr = ierr + 1 1018 ELSE 1019 CALL errore("qes_read:stepType","scf_conv: wrong number of occurrences",10) 1020 END IF 1021 END IF 1022 ! 1023 tmp_node => item(tmp_node_list, 0) 1024 IF (ASSOCIATED(tmp_node))& 1025 CALL qes_read_scf_conv(tmp_node, obj%scf_conv, ierr ) 1026 ! 1027 tmp_node_list => getElementsByTagname(xml_node, "atomic_structure") 1028 tmp_node_list_size = getLength(tmp_node_list) 1029 ! 1030 IF (tmp_node_list_size /= 1) THEN 1031 IF (PRESENT(ierr) ) THEN 1032 CALL infomsg("qes_read:stepType","atomic_structure: wrong number of occurrences") 1033 ierr = ierr + 1 1034 ELSE 1035 CALL errore("qes_read:stepType","atomic_structure: wrong number of occurrences",10) 1036 END IF 1037 END IF 1038 ! 1039 tmp_node => item(tmp_node_list, 0) 1040 IF (ASSOCIATED(tmp_node))& 1041 CALL qes_read_atomic_structure(tmp_node, obj%atomic_structure, ierr ) 1042 ! 1043 tmp_node_list => getElementsByTagname(xml_node, "total_energy") 1044 tmp_node_list_size = getLength(tmp_node_list) 1045 ! 1046 IF (tmp_node_list_size /= 1) THEN 1047 IF (PRESENT(ierr) ) THEN 1048 CALL infomsg("qes_read:stepType","total_energy: wrong number of occurrences") 1049 ierr = ierr + 1 1050 ELSE 1051 CALL errore("qes_read:stepType","total_energy: wrong number of occurrences",10) 1052 END IF 1053 END IF 1054 ! 1055 tmp_node => item(tmp_node_list, 0) 1056 IF (ASSOCIATED(tmp_node))& 1057 CALL qes_read_total_energy(tmp_node, obj%total_energy, ierr ) 1058 ! 1059 tmp_node_list => getElementsByTagname(xml_node, "forces") 1060 tmp_node_list_size = getLength(tmp_node_list) 1061 ! 1062 IF (tmp_node_list_size /= 1) THEN 1063 IF (PRESENT(ierr) ) THEN 1064 CALL infomsg("qes_read:stepType","forces: wrong number of occurrences") 1065 ierr = ierr + 1 1066 ELSE 1067 CALL errore("qes_read:stepType","forces: wrong number of occurrences",10) 1068 END IF 1069 END IF 1070 ! 1071 tmp_node => item(tmp_node_list, 0) 1072 IF (ASSOCIATED(tmp_node))& 1073 CALL qes_read_matrix(tmp_node, obj%forces, ierr ) 1074 ! 1075 tmp_node_list => getElementsByTagname(xml_node, "stress") 1076 tmp_node_list_size = getLength(tmp_node_list) 1077 ! 1078 IF (tmp_node_list_size > 1) THEN 1079 IF (PRESENT(ierr) ) THEN 1080 CALL infomsg("qes_read:stepType","stress: too many occurrences") 1081 ierr = ierr + 1 1082 ELSE 1083 CALL errore("qes_read:stepType","stress: too many occurrences",10) 1084 END IF 1085 END IF 1086 ! 1087 IF (tmp_node_list_size>0) THEN 1088 obj%stress_ispresent = .TRUE. 1089 tmp_node => item(tmp_node_list, 0) 1090 CALL qes_read_matrix(tmp_node, obj%stress, ierr ) 1091 ELSE 1092 obj%stress_ispresent = .FALSE. 1093 END IF 1094 ! 1095 tmp_node_list => getElementsByTagname(xml_node, "FCP_force") 1096 tmp_node_list_size = getLength(tmp_node_list) 1097 ! 1098 IF (tmp_node_list_size > 1) THEN 1099 IF (PRESENT(ierr) ) THEN 1100 CALL infomsg("qes_read:stepType","FCP_force: too many occurrences") 1101 ierr = ierr + 1 1102 ELSE 1103 CALL errore("qes_read:stepType","FCP_force: too many occurrences",10) 1104 END IF 1105 END IF 1106 ! 1107 IF (tmp_node_list_size>0) THEN 1108 obj%FCP_force_ispresent = .TRUE. 1109 tmp_node => item(tmp_node_list, 0) 1110 CALL extractDataContent(tmp_node, obj%FCP_force , IOSTAT = iostat_) 1111 IF ( iostat_ /= 0 ) THEN 1112 IF ( PRESENT (ierr ) ) THEN 1113 CALL infomsg("qes_read:stepType","error reading FCP_force") 1114 ierr = ierr + 1 1115 ELSE 1116 CALL errore ("qes_read:stepType","error reading FCP_force",10) 1117 END IF 1118 END IF 1119 ELSE 1120 obj%FCP_force_ispresent = .FALSE. 1121 END IF 1122 ! 1123 tmp_node_list => getElementsByTagname(xml_node, "FCP_tot_charge") 1124 tmp_node_list_size = getLength(tmp_node_list) 1125 ! 1126 IF (tmp_node_list_size > 1) THEN 1127 IF (PRESENT(ierr) ) THEN 1128 CALL infomsg("qes_read:stepType","FCP_tot_charge: too many occurrences") 1129 ierr = ierr + 1 1130 ELSE 1131 CALL errore("qes_read:stepType","FCP_tot_charge: too many occurrences",10) 1132 END IF 1133 END IF 1134 ! 1135 IF (tmp_node_list_size>0) THEN 1136 obj%FCP_tot_charge_ispresent = .TRUE. 1137 tmp_node => item(tmp_node_list, 0) 1138 CALL extractDataContent(tmp_node, obj%FCP_tot_charge , IOSTAT = iostat_) 1139 IF ( iostat_ /= 0 ) THEN 1140 IF ( PRESENT (ierr ) ) THEN 1141 CALL infomsg("qes_read:stepType","error reading FCP_tot_charge") 1142 ierr = ierr + 1 1143 ELSE 1144 CALL errore ("qes_read:stepType","error reading FCP_tot_charge",10) 1145 END IF 1146 END IF 1147 ELSE 1148 obj%FCP_tot_charge_ispresent = .FALSE. 1149 END IF 1150 ! 1151 ! 1152 obj%lwrite = .TRUE. 1153 ! 1154 END SUBROUTINE qes_read_step 1155 ! 1156 ! 1157 SUBROUTINE qes_read_output(xml_node, obj, ierr ) 1158 ! 1159 IMPLICIT NONE 1160 ! 1161 TYPE(Node), INTENT(IN), POINTER :: xml_node 1162 TYPE(output_type), INTENT(OUT) :: obj 1163 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 1164 ! 1165 TYPE(Node), POINTER :: tmp_node 1166 TYPE(NodeList), POINTER :: tmp_node_list 1167 INTEGER :: tmp_node_list_size, index, iostat_ 1168 ! 1169 obj%tagname = getTagName(xml_node) 1170 ! 1171 1172 1173 1174 1175 ! 1176 tmp_node_list => getElementsByTagname(xml_node, "convergence_info") 1177 tmp_node_list_size = getLength(tmp_node_list) 1178 ! 1179 IF (tmp_node_list_size > 1) THEN 1180 IF (PRESENT(ierr) ) THEN 1181 CALL infomsg("qes_read:outputType","convergence_info: too many occurrences") 1182 ierr = ierr + 1 1183 ELSE 1184 CALL errore("qes_read:outputType","convergence_info: too many occurrences",10) 1185 END IF 1186 END IF 1187 ! 1188 IF (tmp_node_list_size>0) THEN 1189 obj%convergence_info_ispresent = .TRUE. 1190 tmp_node => item(tmp_node_list, 0) 1191 CALL qes_read_convergence_info(tmp_node, obj%convergence_info, ierr ) 1192 ELSE 1193 obj%convergence_info_ispresent = .FALSE. 1194 END IF 1195 ! 1196 tmp_node_list => getElementsByTagname(xml_node, "algorithmic_info") 1197 tmp_node_list_size = getLength(tmp_node_list) 1198 ! 1199 IF (tmp_node_list_size /= 1) THEN 1200 IF (PRESENT(ierr) ) THEN 1201 CALL infomsg("qes_read:outputType","algorithmic_info: wrong number of occurrences") 1202 ierr = ierr + 1 1203 ELSE 1204 CALL errore("qes_read:outputType","algorithmic_info: wrong number of occurrences",10) 1205 END IF 1206 END IF 1207 ! 1208 tmp_node => item(tmp_node_list, 0) 1209 IF (ASSOCIATED(tmp_node))& 1210 CALL qes_read_algorithmic_info(tmp_node, obj%algorithmic_info, ierr ) 1211 ! 1212 tmp_node_list => getElementsByTagname(xml_node, "atomic_species") 1213 tmp_node_list_size = getLength(tmp_node_list) 1214 ! 1215 IF (tmp_node_list_size /= 1) THEN 1216 IF (PRESENT(ierr) ) THEN 1217 CALL infomsg("qes_read:outputType","atomic_species: wrong number of occurrences") 1218 ierr = ierr + 1 1219 ELSE 1220 CALL errore("qes_read:outputType","atomic_species: wrong number of occurrences",10) 1221 END IF 1222 END IF 1223 ! 1224 tmp_node => item(tmp_node_list, 0) 1225 IF (ASSOCIATED(tmp_node))& 1226 CALL qes_read_atomic_species(tmp_node, obj%atomic_species, ierr ) 1227 ! 1228 tmp_node_list => getElementsByTagname(xml_node, "atomic_structure") 1229 tmp_node_list_size = getLength(tmp_node_list) 1230 ! 1231 IF (tmp_node_list_size /= 1) THEN 1232 IF (PRESENT(ierr) ) THEN 1233 CALL infomsg("qes_read:outputType","atomic_structure: wrong number of occurrences") 1234 ierr = ierr + 1 1235 ELSE 1236 CALL errore("qes_read:outputType","atomic_structure: wrong number of occurrences",10) 1237 END IF 1238 END IF 1239 ! 1240 tmp_node => item(tmp_node_list, 0) 1241 IF (ASSOCIATED(tmp_node))& 1242 CALL qes_read_atomic_structure(tmp_node, obj%atomic_structure, ierr ) 1243 ! 1244 tmp_node_list => getElementsByTagname(xml_node, "symmetries") 1245 tmp_node_list_size = getLength(tmp_node_list) 1246 ! 1247 IF (tmp_node_list_size > 1) THEN 1248 IF (PRESENT(ierr) ) THEN 1249 CALL infomsg("qes_read:outputType","symmetries: too many occurrences") 1250 ierr = ierr + 1 1251 ELSE 1252 CALL errore("qes_read:outputType","symmetries: too many occurrences",10) 1253 END IF 1254 END IF 1255 ! 1256 IF (tmp_node_list_size>0) THEN 1257 obj%symmetries_ispresent = .TRUE. 1258 tmp_node => item(tmp_node_list, 0) 1259 CALL qes_read_symmetries(tmp_node, obj%symmetries, ierr ) 1260 ELSE 1261 obj%symmetries_ispresent = .FALSE. 1262 END IF 1263 ! 1264 tmp_node_list => getElementsByTagname(xml_node, "basis_set") 1265 tmp_node_list_size = getLength(tmp_node_list) 1266 ! 1267 IF (tmp_node_list_size /= 1) THEN 1268 IF (PRESENT(ierr) ) THEN 1269 CALL infomsg("qes_read:outputType","basis_set: wrong number of occurrences") 1270 ierr = ierr + 1 1271 ELSE 1272 CALL errore("qes_read:outputType","basis_set: wrong number of occurrences",10) 1273 END IF 1274 END IF 1275 ! 1276 tmp_node => item(tmp_node_list, 0) 1277 IF (ASSOCIATED(tmp_node))& 1278 CALL qes_read_basis_set(tmp_node, obj%basis_set, ierr ) 1279 ! 1280 tmp_node_list => getElementsByTagname(xml_node, "dft") 1281 tmp_node_list_size = getLength(tmp_node_list) 1282 ! 1283 IF (tmp_node_list_size /= 1) THEN 1284 IF (PRESENT(ierr) ) THEN 1285 CALL infomsg("qes_read:outputType","dft: wrong number of occurrences") 1286 ierr = ierr + 1 1287 ELSE 1288 CALL errore("qes_read:outputType","dft: wrong number of occurrences",10) 1289 END IF 1290 END IF 1291 ! 1292 tmp_node => item(tmp_node_list, 0) 1293 IF (ASSOCIATED(tmp_node))& 1294 CALL qes_read_dft(tmp_node, obj%dft, ierr ) 1295 ! 1296 tmp_node_list => getElementsByTagname(xml_node, "boundary_conditions") 1297 tmp_node_list_size = getLength(tmp_node_list) 1298 ! 1299 IF (tmp_node_list_size > 1) THEN 1300 IF (PRESENT(ierr) ) THEN 1301 CALL infomsg("qes_read:outputType","boundary_conditions: too many occurrences") 1302 ierr = ierr + 1 1303 ELSE 1304 CALL errore("qes_read:outputType","boundary_conditions: too many occurrences",10) 1305 END IF 1306 END IF 1307 ! 1308 IF (tmp_node_list_size>0) THEN 1309 obj%boundary_conditions_ispresent = .TRUE. 1310 tmp_node => item(tmp_node_list, 0) 1311 CALL qes_read_outputPBC(tmp_node, obj%boundary_conditions, ierr ) 1312 ELSE 1313 obj%boundary_conditions_ispresent = .FALSE. 1314 END IF 1315 ! 1316 tmp_node_list => getElementsByTagname(xml_node, "magnetization") 1317 tmp_node_list_size = getLength(tmp_node_list) 1318 ! 1319 IF (tmp_node_list_size /= 1) THEN 1320 IF (PRESENT(ierr) ) THEN 1321 CALL infomsg("qes_read:outputType","magnetization: wrong number of occurrences") 1322 ierr = ierr + 1 1323 ELSE 1324 CALL errore("qes_read:outputType","magnetization: wrong number of occurrences",10) 1325 END IF 1326 END IF 1327 ! 1328 tmp_node => item(tmp_node_list, 0) 1329 IF (ASSOCIATED(tmp_node))& 1330 CALL qes_read_magnetization(tmp_node, obj%magnetization, ierr ) 1331 ! 1332 tmp_node_list => getElementsByTagname(xml_node, "total_energy") 1333 tmp_node_list_size = getLength(tmp_node_list) 1334 ! 1335 IF (tmp_node_list_size /= 1) THEN 1336 IF (PRESENT(ierr) ) THEN 1337 CALL infomsg("qes_read:outputType","total_energy: wrong number of occurrences") 1338 ierr = ierr + 1 1339 ELSE 1340 CALL errore("qes_read:outputType","total_energy: wrong number of occurrences",10) 1341 END IF 1342 END IF 1343 ! 1344 tmp_node => item(tmp_node_list, 0) 1345 IF (ASSOCIATED(tmp_node))& 1346 CALL qes_read_total_energy(tmp_node, obj%total_energy, ierr ) 1347 ! 1348 tmp_node_list => getElementsByTagname(xml_node, "band_structure") 1349 tmp_node_list_size = getLength(tmp_node_list) 1350 ! 1351 IF (tmp_node_list_size /= 1) THEN 1352 IF (PRESENT(ierr) ) THEN 1353 CALL infomsg("qes_read:outputType","band_structure: wrong number of occurrences") 1354 ierr = ierr + 1 1355 ELSE 1356 CALL errore("qes_read:outputType","band_structure: wrong number of occurrences",10) 1357 END IF 1358 END IF 1359 ! 1360 tmp_node => item(tmp_node_list, 0) 1361 IF (ASSOCIATED(tmp_node))& 1362 CALL qes_read_band_structure(tmp_node, obj%band_structure, ierr ) 1363 ! 1364 tmp_node_list => getElementsByTagname(xml_node, "forces") 1365 tmp_node_list_size = getLength(tmp_node_list) 1366 ! 1367 IF (tmp_node_list_size > 1) THEN 1368 IF (PRESENT(ierr) ) THEN 1369 CALL infomsg("qes_read:outputType","forces: too many occurrences") 1370 ierr = ierr + 1 1371 ELSE 1372 CALL errore("qes_read:outputType","forces: too many occurrences",10) 1373 END IF 1374 END IF 1375 ! 1376 IF (tmp_node_list_size>0) THEN 1377 obj%forces_ispresent = .TRUE. 1378 tmp_node => item(tmp_node_list, 0) 1379 CALL qes_read_matrix(tmp_node, obj%forces, ierr ) 1380 ELSE 1381 obj%forces_ispresent = .FALSE. 1382 END IF 1383 ! 1384 tmp_node_list => getElementsByTagname(xml_node, "stress") 1385 tmp_node_list_size = getLength(tmp_node_list) 1386 ! 1387 IF (tmp_node_list_size > 1) THEN 1388 IF (PRESENT(ierr) ) THEN 1389 CALL infomsg("qes_read:outputType","stress: too many occurrences") 1390 ierr = ierr + 1 1391 ELSE 1392 CALL errore("qes_read:outputType","stress: too many occurrences",10) 1393 END IF 1394 END IF 1395 ! 1396 IF (tmp_node_list_size>0) THEN 1397 obj%stress_ispresent = .TRUE. 1398 tmp_node => item(tmp_node_list, 0) 1399 CALL qes_read_matrix(tmp_node, obj%stress, ierr ) 1400 ELSE 1401 obj%stress_ispresent = .FALSE. 1402 END IF 1403 ! 1404 tmp_node_list => getElementsByTagname(xml_node, "electric_field") 1405 tmp_node_list_size = getLength(tmp_node_list) 1406 ! 1407 IF (tmp_node_list_size > 1) THEN 1408 IF (PRESENT(ierr) ) THEN 1409 CALL infomsg("qes_read:outputType","electric_field: too many occurrences") 1410 ierr = ierr + 1 1411 ELSE 1412 CALL errore("qes_read:outputType","electric_field: too many occurrences",10) 1413 END IF 1414 END IF 1415 ! 1416 IF (tmp_node_list_size>0) THEN 1417 obj%electric_field_ispresent = .TRUE. 1418 tmp_node => item(tmp_node_list, 0) 1419 CALL qes_read_outputElectricField(tmp_node, obj%electric_field, ierr ) 1420 ELSE 1421 obj%electric_field_ispresent = .FALSE. 1422 END IF 1423 ! 1424 tmp_node_list => getElementsByTagname(xml_node, "FCP_force") 1425 tmp_node_list_size = getLength(tmp_node_list) 1426 ! 1427 IF (tmp_node_list_size > 1) THEN 1428 IF (PRESENT(ierr) ) THEN 1429 CALL infomsg("qes_read:outputType","FCP_force: too many occurrences") 1430 ierr = ierr + 1 1431 ELSE 1432 CALL errore("qes_read:outputType","FCP_force: too many occurrences",10) 1433 END IF 1434 END IF 1435 ! 1436 IF (tmp_node_list_size>0) THEN 1437 obj%FCP_force_ispresent = .TRUE. 1438 tmp_node => item(tmp_node_list, 0) 1439 CALL extractDataContent(tmp_node, obj%FCP_force , IOSTAT = iostat_) 1440 IF ( iostat_ /= 0 ) THEN 1441 IF ( PRESENT (ierr ) ) THEN 1442 CALL infomsg("qes_read:outputType","error reading FCP_force") 1443 ierr = ierr + 1 1444 ELSE 1445 CALL errore ("qes_read:outputType","error reading FCP_force",10) 1446 END IF 1447 END IF 1448 ELSE 1449 obj%FCP_force_ispresent = .FALSE. 1450 END IF 1451 ! 1452 tmp_node_list => getElementsByTagname(xml_node, "FCP_tot_charge") 1453 tmp_node_list_size = getLength(tmp_node_list) 1454 ! 1455 IF (tmp_node_list_size > 1) THEN 1456 IF (PRESENT(ierr) ) THEN 1457 CALL infomsg("qes_read:outputType","FCP_tot_charge: too many occurrences") 1458 ierr = ierr + 1 1459 ELSE 1460 CALL errore("qes_read:outputType","FCP_tot_charge: too many occurrences",10) 1461 END IF 1462 END IF 1463 ! 1464 IF (tmp_node_list_size>0) THEN 1465 obj%FCP_tot_charge_ispresent = .TRUE. 1466 tmp_node => item(tmp_node_list, 0) 1467 CALL extractDataContent(tmp_node, obj%FCP_tot_charge , IOSTAT = iostat_) 1468 IF ( iostat_ /= 0 ) THEN 1469 IF ( PRESENT (ierr ) ) THEN 1470 CALL infomsg("qes_read:outputType","error reading FCP_tot_charge") 1471 ierr = ierr + 1 1472 ELSE 1473 CALL errore ("qes_read:outputType","error reading FCP_tot_charge",10) 1474 END IF 1475 END IF 1476 ELSE 1477 obj%FCP_tot_charge_ispresent = .FALSE. 1478 END IF 1479 ! 1480 ! 1481 obj%lwrite = .TRUE. 1482 ! 1483 END SUBROUTINE qes_read_output 1484 ! 1485 ! 1486 SUBROUTINE qes_read_timing(xml_node, obj, ierr ) 1487 ! 1488 IMPLICIT NONE 1489 ! 1490 TYPE(Node), INTENT(IN), POINTER :: xml_node 1491 TYPE(timing_type), INTENT(OUT) :: obj 1492 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 1493 ! 1494 TYPE(Node), POINTER :: tmp_node 1495 TYPE(NodeList), POINTER :: tmp_node_list 1496 INTEGER :: tmp_node_list_size, index, iostat_ 1497 ! 1498 obj%tagname = getTagName(xml_node) 1499 ! 1500 1501 1502 1503 1504 ! 1505 tmp_node_list => getElementsByTagname(xml_node, "total") 1506 tmp_node_list_size = getLength(tmp_node_list) 1507 ! 1508 IF (tmp_node_list_size /= 1) THEN 1509 IF (PRESENT(ierr) ) THEN 1510 CALL infomsg("qes_read:timingType","total: wrong number of occurrences") 1511 ierr = ierr + 1 1512 ELSE 1513 CALL errore("qes_read:timingType","total: wrong number of occurrences",10) 1514 END IF 1515 END IF 1516 ! 1517 tmp_node => item(tmp_node_list, 0) 1518 IF (ASSOCIATED(tmp_node))& 1519 CALL qes_read_clock(tmp_node, obj%total, ierr ) 1520 ! 1521 tmp_node_list => getElementsByTagname(xml_node, "partial") 1522 tmp_node_list_size = getLength(tmp_node_list) 1523 ! 1524 ! 1525 IF (tmp_node_list_size>0) THEN 1526 obj%partial_ispresent = .TRUE. 1527 ELSE 1528 obj%partial_ispresent = .FALSE. 1529 END IF 1530 obj%ndim_partial = tmp_node_list_size 1531 ALLOCATE(obj%partial(tmp_node_list_size)) 1532 DO index=1,tmp_node_list_size 1533 tmp_node => item( tmp_node_list, index-1 ) 1534 CALL qes_read_clock(tmp_node, obj%partial(index), ierr ) 1535 END DO 1536 ! 1537 ! 1538 obj%lwrite = .TRUE. 1539 ! 1540 END SUBROUTINE qes_read_timing 1541 ! 1542 ! 1543 SUBROUTINE qes_read_clock(xml_node, obj, ierr ) 1544 ! 1545 IMPLICIT NONE 1546 ! 1547 TYPE(Node), INTENT(IN), POINTER :: xml_node 1548 TYPE(clock_type), INTENT(OUT) :: obj 1549 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 1550 ! 1551 TYPE(Node), POINTER :: tmp_node 1552 TYPE(NodeList), POINTER :: tmp_node_list 1553 INTEGER :: tmp_node_list_size, index, iostat_ 1554 ! 1555 obj%tagname = getTagName(xml_node) 1556 ! 1557 1558 IF (hasAttribute(xml_node, "label")) THEN 1559 CALL extractDataAttribute(xml_node, "label", obj%label) 1560 ELSE 1561 IF ( PRESENT(ierr) ) THEN 1562 CALL infomsg ( "qes_read: clockType",& 1563 "required attribute label not found" ) 1564 ierr = ierr + 1 1565 ELSE 1566 CALL errore ("qes_read: clockType",& 1567 "required attribute label not found", 10 ) 1568 END IF 1569 END IF 1570 ! 1571 IF (hasAttribute(xml_node, "calls")) THEN 1572 CALL extractDataAttribute(xml_node, "calls", obj%calls) 1573 obj%calls_ispresent = .TRUE. 1574 ELSE 1575 obj%calls_ispresent = .FALSE. 1576 END IF 1577 ! 1578 1579 1580 1581 ! 1582 tmp_node_list => getElementsByTagname(xml_node, "cpu") 1583 tmp_node_list_size = getLength(tmp_node_list) 1584 ! 1585 IF (tmp_node_list_size /= 1) THEN 1586 IF (PRESENT(ierr) ) THEN 1587 CALL infomsg("qes_read:clockType","cpu: wrong number of occurrences") 1588 ierr = ierr + 1 1589 ELSE 1590 CALL errore("qes_read:clockType","cpu: wrong number of occurrences",10) 1591 END IF 1592 END IF 1593 ! 1594 tmp_node => item(tmp_node_list, 0) 1595 IF (ASSOCIATED(tmp_node))& 1596 CALL extractDataContent(tmp_node, obj%cpu, IOSTAT = iostat_ ) 1597 IF ( iostat_ /= 0 ) THEN 1598 IF ( PRESENT (ierr ) ) THEN 1599 CALL infomsg("qes_read:clockType","error reading cpu") 1600 ierr = ierr + 1 1601 ELSE 1602 CALL errore ("qes_read:clockType","error reading cpu",10) 1603 END IF 1604 END IF 1605 ! 1606 tmp_node_list => getElementsByTagname(xml_node, "wall") 1607 tmp_node_list_size = getLength(tmp_node_list) 1608 ! 1609 IF (tmp_node_list_size /= 1) THEN 1610 IF (PRESENT(ierr) ) THEN 1611 CALL infomsg("qes_read:clockType","wall: wrong number of occurrences") 1612 ierr = ierr + 1 1613 ELSE 1614 CALL errore("qes_read:clockType","wall: wrong number of occurrences",10) 1615 END IF 1616 END IF 1617 ! 1618 tmp_node => item(tmp_node_list, 0) 1619 IF (ASSOCIATED(tmp_node))& 1620 CALL extractDataContent(tmp_node, obj%wall, IOSTAT = iostat_ ) 1621 IF ( iostat_ /= 0 ) THEN 1622 IF ( PRESENT (ierr ) ) THEN 1623 CALL infomsg("qes_read:clockType","error reading wall") 1624 ierr = ierr + 1 1625 ELSE 1626 CALL errore ("qes_read:clockType","error reading wall",10) 1627 END IF 1628 END IF 1629 ! 1630 ! 1631 obj%lwrite = .TRUE. 1632 ! 1633 END SUBROUTINE qes_read_clock 1634 ! 1635 ! 1636 SUBROUTINE qes_read_control_variables(xml_node, obj, ierr ) 1637 ! 1638 IMPLICIT NONE 1639 ! 1640 TYPE(Node), INTENT(IN), POINTER :: xml_node 1641 TYPE(control_variables_type), INTENT(OUT) :: obj 1642 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 1643 ! 1644 TYPE(Node), POINTER :: tmp_node 1645 TYPE(NodeList), POINTER :: tmp_node_list 1646 INTEGER :: tmp_node_list_size, index, iostat_ 1647 ! 1648 obj%tagname = getTagName(xml_node) 1649 ! 1650 1651 1652 1653 1654 ! 1655 tmp_node_list => getElementsByTagname(xml_node, "title") 1656 tmp_node_list_size = getLength(tmp_node_list) 1657 ! 1658 IF (tmp_node_list_size /= 1) THEN 1659 IF (PRESENT(ierr) ) THEN 1660 CALL infomsg("qes_read:control_variablesType","title: wrong number of occurrences") 1661 ierr = ierr + 1 1662 ELSE 1663 CALL errore("qes_read:control_variablesType","title: wrong number of occurrences",10) 1664 END IF 1665 END IF 1666 ! 1667 tmp_node => item(tmp_node_list, 0) 1668 IF (ASSOCIATED(tmp_node))& 1669 CALL extractDataContent(tmp_node, obj%title, IOSTAT = iostat_ ) 1670 IF ( iostat_ /= 0 ) THEN 1671 IF ( PRESENT (ierr ) ) THEN 1672 CALL infomsg("qes_read:control_variablesType","error reading title") 1673 ierr = ierr + 1 1674 ELSE 1675 CALL errore ("qes_read:control_variablesType","error reading title",10) 1676 END IF 1677 END IF 1678 ! 1679 tmp_node_list => getElementsByTagname(xml_node, "calculation") 1680 tmp_node_list_size = getLength(tmp_node_list) 1681 ! 1682 IF (tmp_node_list_size /= 1) THEN 1683 IF (PRESENT(ierr) ) THEN 1684 CALL infomsg("qes_read:control_variablesType","calculation: wrong number of occurrences") 1685 ierr = ierr + 1 1686 ELSE 1687 CALL errore("qes_read:control_variablesType","calculation: wrong number of occurrences",10) 1688 END IF 1689 END IF 1690 ! 1691 tmp_node => item(tmp_node_list, 0) 1692 IF (ASSOCIATED(tmp_node))& 1693 CALL extractDataContent(tmp_node, obj%calculation, IOSTAT = iostat_ ) 1694 IF ( iostat_ /= 0 ) THEN 1695 IF ( PRESENT (ierr ) ) THEN 1696 CALL infomsg("qes_read:control_variablesType","error reading calculation") 1697 ierr = ierr + 1 1698 ELSE 1699 CALL errore ("qes_read:control_variablesType","error reading calculation",10) 1700 END IF 1701 END IF 1702 ! 1703 tmp_node_list => getElementsByTagname(xml_node, "restart_mode") 1704 tmp_node_list_size = getLength(tmp_node_list) 1705 ! 1706 IF (tmp_node_list_size /= 1) THEN 1707 IF (PRESENT(ierr) ) THEN 1708 CALL infomsg("qes_read:control_variablesType","restart_mode: wrong number of occurrences") 1709 ierr = ierr + 1 1710 ELSE 1711 CALL errore("qes_read:control_variablesType","restart_mode: wrong number of occurrences",10) 1712 END IF 1713 END IF 1714 ! 1715 tmp_node => item(tmp_node_list, 0) 1716 IF (ASSOCIATED(tmp_node))& 1717 CALL extractDataContent(tmp_node, obj%restart_mode, IOSTAT = iostat_ ) 1718 IF ( iostat_ /= 0 ) THEN 1719 IF ( PRESENT (ierr ) ) THEN 1720 CALL infomsg("qes_read:control_variablesType","error reading restart_mode") 1721 ierr = ierr + 1 1722 ELSE 1723 CALL errore ("qes_read:control_variablesType","error reading restart_mode",10) 1724 END IF 1725 END IF 1726 ! 1727 tmp_node_list => getElementsByTagname(xml_node, "prefix") 1728 tmp_node_list_size = getLength(tmp_node_list) 1729 ! 1730 IF (tmp_node_list_size /= 1) THEN 1731 IF (PRESENT(ierr) ) THEN 1732 CALL infomsg("qes_read:control_variablesType","prefix: wrong number of occurrences") 1733 ierr = ierr + 1 1734 ELSE 1735 CALL errore("qes_read:control_variablesType","prefix: wrong number of occurrences",10) 1736 END IF 1737 END IF 1738 ! 1739 tmp_node => item(tmp_node_list, 0) 1740 IF (ASSOCIATED(tmp_node))& 1741 CALL extractDataContent(tmp_node, obj%prefix, IOSTAT = iostat_ ) 1742 IF ( iostat_ /= 0 ) THEN 1743 IF ( PRESENT (ierr ) ) THEN 1744 CALL infomsg("qes_read:control_variablesType","error reading prefix") 1745 ierr = ierr + 1 1746 ELSE 1747 CALL errore ("qes_read:control_variablesType","error reading prefix",10) 1748 END IF 1749 END IF 1750 ! 1751 tmp_node_list => getElementsByTagname(xml_node, "pseudo_dir") 1752 tmp_node_list_size = getLength(tmp_node_list) 1753 ! 1754 IF (tmp_node_list_size /= 1) THEN 1755 IF (PRESENT(ierr) ) THEN 1756 CALL infomsg("qes_read:control_variablesType","pseudo_dir: wrong number of occurrences") 1757 ierr = ierr + 1 1758 ELSE 1759 CALL errore("qes_read:control_variablesType","pseudo_dir: wrong number of occurrences",10) 1760 END IF 1761 END IF 1762 ! 1763 tmp_node => item(tmp_node_list, 0) 1764 IF (ASSOCIATED(tmp_node))& 1765 CALL extractDataContent(tmp_node, obj%pseudo_dir, IOSTAT = iostat_ ) 1766 IF ( iostat_ /= 0 ) THEN 1767 IF ( PRESENT (ierr ) ) THEN 1768 CALL infomsg("qes_read:control_variablesType","error reading pseudo_dir") 1769 ierr = ierr + 1 1770 ELSE 1771 CALL errore ("qes_read:control_variablesType","error reading pseudo_dir",10) 1772 END IF 1773 END IF 1774 ! 1775 tmp_node_list => getElementsByTagname(xml_node, "outdir") 1776 tmp_node_list_size = getLength(tmp_node_list) 1777 ! 1778 IF (tmp_node_list_size /= 1) THEN 1779 IF (PRESENT(ierr) ) THEN 1780 CALL infomsg("qes_read:control_variablesType","outdir: wrong number of occurrences") 1781 ierr = ierr + 1 1782 ELSE 1783 CALL errore("qes_read:control_variablesType","outdir: wrong number of occurrences",10) 1784 END IF 1785 END IF 1786 ! 1787 tmp_node => item(tmp_node_list, 0) 1788 IF (ASSOCIATED(tmp_node))& 1789 CALL extractDataContent(tmp_node, obj%outdir, IOSTAT = iostat_ ) 1790 IF ( iostat_ /= 0 ) THEN 1791 IF ( PRESENT (ierr ) ) THEN 1792 CALL infomsg("qes_read:control_variablesType","error reading outdir") 1793 ierr = ierr + 1 1794 ELSE 1795 CALL errore ("qes_read:control_variablesType","error reading outdir",10) 1796 END IF 1797 END IF 1798 ! 1799 tmp_node_list => getElementsByTagname(xml_node, "stress") 1800 tmp_node_list_size = getLength(tmp_node_list) 1801 ! 1802 IF (tmp_node_list_size /= 1) THEN 1803 IF (PRESENT(ierr) ) THEN 1804 CALL infomsg("qes_read:control_variablesType","stress: wrong number of occurrences") 1805 ierr = ierr + 1 1806 ELSE 1807 CALL errore("qes_read:control_variablesType","stress: wrong number of occurrences",10) 1808 END IF 1809 END IF 1810 ! 1811 tmp_node => item(tmp_node_list, 0) 1812 IF (ASSOCIATED(tmp_node))& 1813 CALL extractDataContent(tmp_node, obj%stress, IOSTAT = iostat_ ) 1814 IF ( iostat_ /= 0 ) THEN 1815 IF ( PRESENT (ierr ) ) THEN 1816 CALL infomsg("qes_read:control_variablesType","error reading stress") 1817 ierr = ierr + 1 1818 ELSE 1819 CALL errore ("qes_read:control_variablesType","error reading stress",10) 1820 END IF 1821 END IF 1822 ! 1823 tmp_node_list => getElementsByTagname(xml_node, "forces") 1824 tmp_node_list_size = getLength(tmp_node_list) 1825 ! 1826 IF (tmp_node_list_size /= 1) THEN 1827 IF (PRESENT(ierr) ) THEN 1828 CALL infomsg("qes_read:control_variablesType","forces: wrong number of occurrences") 1829 ierr = ierr + 1 1830 ELSE 1831 CALL errore("qes_read:control_variablesType","forces: wrong number of occurrences",10) 1832 END IF 1833 END IF 1834 ! 1835 tmp_node => item(tmp_node_list, 0) 1836 IF (ASSOCIATED(tmp_node))& 1837 CALL extractDataContent(tmp_node, obj%forces, IOSTAT = iostat_ ) 1838 IF ( iostat_ /= 0 ) THEN 1839 IF ( PRESENT (ierr ) ) THEN 1840 CALL infomsg("qes_read:control_variablesType","error reading forces") 1841 ierr = ierr + 1 1842 ELSE 1843 CALL errore ("qes_read:control_variablesType","error reading forces",10) 1844 END IF 1845 END IF 1846 ! 1847 tmp_node_list => getElementsByTagname(xml_node, "wf_collect") 1848 tmp_node_list_size = getLength(tmp_node_list) 1849 ! 1850 IF (tmp_node_list_size /= 1) THEN 1851 IF (PRESENT(ierr) ) THEN 1852 CALL infomsg("qes_read:control_variablesType","wf_collect: wrong number of occurrences") 1853 ierr = ierr + 1 1854 ELSE 1855 CALL errore("qes_read:control_variablesType","wf_collect: wrong number of occurrences",10) 1856 END IF 1857 END IF 1858 ! 1859 tmp_node => item(tmp_node_list, 0) 1860 IF (ASSOCIATED(tmp_node))& 1861 CALL extractDataContent(tmp_node, obj%wf_collect, IOSTAT = iostat_ ) 1862 IF ( iostat_ /= 0 ) THEN 1863 IF ( PRESENT (ierr ) ) THEN 1864 CALL infomsg("qes_read:control_variablesType","error reading wf_collect") 1865 ierr = ierr + 1 1866 ELSE 1867 CALL errore ("qes_read:control_variablesType","error reading wf_collect",10) 1868 END IF 1869 END IF 1870 ! 1871 tmp_node_list => getElementsByTagname(xml_node, "disk_io") 1872 tmp_node_list_size = getLength(tmp_node_list) 1873 ! 1874 IF (tmp_node_list_size /= 1) THEN 1875 IF (PRESENT(ierr) ) THEN 1876 CALL infomsg("qes_read:control_variablesType","disk_io: wrong number of occurrences") 1877 ierr = ierr + 1 1878 ELSE 1879 CALL errore("qes_read:control_variablesType","disk_io: wrong number of occurrences",10) 1880 END IF 1881 END IF 1882 ! 1883 tmp_node => item(tmp_node_list, 0) 1884 IF (ASSOCIATED(tmp_node))& 1885 CALL extractDataContent(tmp_node, obj%disk_io, IOSTAT = iostat_ ) 1886 IF ( iostat_ /= 0 ) THEN 1887 IF ( PRESENT (ierr ) ) THEN 1888 CALL infomsg("qes_read:control_variablesType","error reading disk_io") 1889 ierr = ierr + 1 1890 ELSE 1891 CALL errore ("qes_read:control_variablesType","error reading disk_io",10) 1892 END IF 1893 END IF 1894 ! 1895 tmp_node_list => getElementsByTagname(xml_node, "max_seconds") 1896 tmp_node_list_size = getLength(tmp_node_list) 1897 ! 1898 IF (tmp_node_list_size /= 1) THEN 1899 IF (PRESENT(ierr) ) THEN 1900 CALL infomsg("qes_read:control_variablesType","max_seconds: wrong number of occurrences") 1901 ierr = ierr + 1 1902 ELSE 1903 CALL errore("qes_read:control_variablesType","max_seconds: wrong number of occurrences",10) 1904 END IF 1905 END IF 1906 ! 1907 tmp_node => item(tmp_node_list, 0) 1908 IF (ASSOCIATED(tmp_node))& 1909 CALL extractDataContent(tmp_node, obj%max_seconds, IOSTAT = iostat_ ) 1910 IF ( iostat_ /= 0 ) THEN 1911 IF ( PRESENT (ierr ) ) THEN 1912 CALL infomsg("qes_read:control_variablesType","error reading max_seconds") 1913 ierr = ierr + 1 1914 ELSE 1915 CALL errore ("qes_read:control_variablesType","error reading max_seconds",10) 1916 END IF 1917 END IF 1918 ! 1919 tmp_node_list => getElementsByTagname(xml_node, "nstep") 1920 tmp_node_list_size = getLength(tmp_node_list) 1921 ! 1922 IF (tmp_node_list_size > 1) THEN 1923 IF (PRESENT(ierr) ) THEN 1924 CALL infomsg("qes_read:control_variablesType","nstep: too many occurrences") 1925 ierr = ierr + 1 1926 ELSE 1927 CALL errore("qes_read:control_variablesType","nstep: too many occurrences",10) 1928 END IF 1929 END IF 1930 ! 1931 IF (tmp_node_list_size>0) THEN 1932 obj%nstep_ispresent = .TRUE. 1933 tmp_node => item(tmp_node_list, 0) 1934 CALL extractDataContent(tmp_node, obj%nstep , IOSTAT = iostat_) 1935 IF ( iostat_ /= 0 ) THEN 1936 IF ( PRESENT (ierr ) ) THEN 1937 CALL infomsg("qes_read:control_variablesType","error reading nstep") 1938 ierr = ierr + 1 1939 ELSE 1940 CALL errore ("qes_read:control_variablesType","error reading nstep",10) 1941 END IF 1942 END IF 1943 ELSE 1944 obj%nstep_ispresent = .FALSE. 1945 END IF 1946 ! 1947 tmp_node_list => getElementsByTagname(xml_node, "etot_conv_thr") 1948 tmp_node_list_size = getLength(tmp_node_list) 1949 ! 1950 IF (tmp_node_list_size /= 1) THEN 1951 IF (PRESENT(ierr) ) THEN 1952 CALL infomsg("qes_read:control_variablesType","etot_conv_thr: wrong number of occurrences") 1953 ierr = ierr + 1 1954 ELSE 1955 CALL errore("qes_read:control_variablesType","etot_conv_thr: wrong number of occurrences",10) 1956 END IF 1957 END IF 1958 ! 1959 tmp_node => item(tmp_node_list, 0) 1960 IF (ASSOCIATED(tmp_node))& 1961 CALL extractDataContent(tmp_node, obj%etot_conv_thr, IOSTAT = iostat_ ) 1962 IF ( iostat_ /= 0 ) THEN 1963 IF ( PRESENT (ierr ) ) THEN 1964 CALL infomsg("qes_read:control_variablesType","error reading etot_conv_thr") 1965 ierr = ierr + 1 1966 ELSE 1967 CALL errore ("qes_read:control_variablesType","error reading etot_conv_thr",10) 1968 END IF 1969 END IF 1970 ! 1971 tmp_node_list => getElementsByTagname(xml_node, "forc_conv_thr") 1972 tmp_node_list_size = getLength(tmp_node_list) 1973 ! 1974 IF (tmp_node_list_size /= 1) THEN 1975 IF (PRESENT(ierr) ) THEN 1976 CALL infomsg("qes_read:control_variablesType","forc_conv_thr: wrong number of occurrences") 1977 ierr = ierr + 1 1978 ELSE 1979 CALL errore("qes_read:control_variablesType","forc_conv_thr: wrong number of occurrences",10) 1980 END IF 1981 END IF 1982 ! 1983 tmp_node => item(tmp_node_list, 0) 1984 IF (ASSOCIATED(tmp_node))& 1985 CALL extractDataContent(tmp_node, obj%forc_conv_thr, IOSTAT = iostat_ ) 1986 IF ( iostat_ /= 0 ) THEN 1987 IF ( PRESENT (ierr ) ) THEN 1988 CALL infomsg("qes_read:control_variablesType","error reading forc_conv_thr") 1989 ierr = ierr + 1 1990 ELSE 1991 CALL errore ("qes_read:control_variablesType","error reading forc_conv_thr",10) 1992 END IF 1993 END IF 1994 ! 1995 tmp_node_list => getElementsByTagname(xml_node, "press_conv_thr") 1996 tmp_node_list_size = getLength(tmp_node_list) 1997 ! 1998 IF (tmp_node_list_size /= 1) THEN 1999 IF (PRESENT(ierr) ) THEN 2000 CALL infomsg("qes_read:control_variablesType","press_conv_thr: wrong number of occurrences") 2001 ierr = ierr + 1 2002 ELSE 2003 CALL errore("qes_read:control_variablesType","press_conv_thr: wrong number of occurrences",10) 2004 END IF 2005 END IF 2006 ! 2007 tmp_node => item(tmp_node_list, 0) 2008 IF (ASSOCIATED(tmp_node))& 2009 CALL extractDataContent(tmp_node, obj%press_conv_thr, IOSTAT = iostat_ ) 2010 IF ( iostat_ /= 0 ) THEN 2011 IF ( PRESENT (ierr ) ) THEN 2012 CALL infomsg("qes_read:control_variablesType","error reading press_conv_thr") 2013 ierr = ierr + 1 2014 ELSE 2015 CALL errore ("qes_read:control_variablesType","error reading press_conv_thr",10) 2016 END IF 2017 END IF 2018 ! 2019 tmp_node_list => getElementsByTagname(xml_node, "verbosity") 2020 tmp_node_list_size = getLength(tmp_node_list) 2021 ! 2022 IF (tmp_node_list_size /= 1) THEN 2023 IF (PRESENT(ierr) ) THEN 2024 CALL infomsg("qes_read:control_variablesType","verbosity: wrong number of occurrences") 2025 ierr = ierr + 1 2026 ELSE 2027 CALL errore("qes_read:control_variablesType","verbosity: wrong number of occurrences",10) 2028 END IF 2029 END IF 2030 ! 2031 tmp_node => item(tmp_node_list, 0) 2032 IF (ASSOCIATED(tmp_node))& 2033 CALL extractDataContent(tmp_node, obj%verbosity, IOSTAT = iostat_ ) 2034 IF ( iostat_ /= 0 ) THEN 2035 IF ( PRESENT (ierr ) ) THEN 2036 CALL infomsg("qes_read:control_variablesType","error reading verbosity") 2037 ierr = ierr + 1 2038 ELSE 2039 CALL errore ("qes_read:control_variablesType","error reading verbosity",10) 2040 END IF 2041 END IF 2042 ! 2043 tmp_node_list => getElementsByTagname(xml_node, "print_every") 2044 tmp_node_list_size = getLength(tmp_node_list) 2045 ! 2046 IF (tmp_node_list_size /= 1) THEN 2047 IF (PRESENT(ierr) ) THEN 2048 CALL infomsg("qes_read:control_variablesType","print_every: wrong number of occurrences") 2049 ierr = ierr + 1 2050 ELSE 2051 CALL errore("qes_read:control_variablesType","print_every: wrong number of occurrences",10) 2052 END IF 2053 END IF 2054 ! 2055 tmp_node => item(tmp_node_list, 0) 2056 IF (ASSOCIATED(tmp_node))& 2057 CALL extractDataContent(tmp_node, obj%print_every, IOSTAT = iostat_ ) 2058 IF ( iostat_ /= 0 ) THEN 2059 IF ( PRESENT (ierr ) ) THEN 2060 CALL infomsg("qes_read:control_variablesType","error reading print_every") 2061 ierr = ierr + 1 2062 ELSE 2063 CALL errore ("qes_read:control_variablesType","error reading print_every",10) 2064 END IF 2065 END IF 2066 ! 2067 ! 2068 obj%lwrite = .TRUE. 2069 ! 2070 END SUBROUTINE qes_read_control_variables 2071 ! 2072 ! 2073 SUBROUTINE qes_read_xml_format(xml_node, obj, ierr ) 2074 ! 2075 IMPLICIT NONE 2076 ! 2077 TYPE(Node), INTENT(IN), POINTER :: xml_node 2078 TYPE(xml_format_type), INTENT(OUT) :: obj 2079 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 2080 ! 2081 TYPE(Node), POINTER :: tmp_node 2082 TYPE(NodeList), POINTER :: tmp_node_list 2083 INTEGER :: tmp_node_list_size, index, iostat_ 2084 ! 2085 obj%tagname = getTagName(xml_node) 2086 ! 2087 2088 IF (hasAttribute(xml_node, "NAME")) THEN 2089 CALL extractDataAttribute(xml_node, "NAME", obj%NAME) 2090 ELSE 2091 IF ( PRESENT(ierr) ) THEN 2092 CALL infomsg ( "qes_read: xml_formatType",& 2093 "required attribute NAME not found" ) 2094 ierr = ierr + 1 2095 ELSE 2096 CALL errore ("qes_read: xml_formatType",& 2097 "required attribute NAME not found", 10 ) 2098 END IF 2099 END IF 2100 ! 2101 IF (hasAttribute(xml_node, "VERSION")) THEN 2102 CALL extractDataAttribute(xml_node, "VERSION", obj%VERSION) 2103 ELSE 2104 IF ( PRESENT(ierr) ) THEN 2105 CALL infomsg ( "qes_read: xml_formatType",& 2106 "required attribute VERSION not found" ) 2107 ierr = ierr + 1 2108 ELSE 2109 CALL errore ("qes_read: xml_formatType",& 2110 "required attribute VERSION not found", 10 ) 2111 END IF 2112 END IF 2113 ! 2114 2115 2116 2117 ! 2118 ! 2119 CALL extractDataContent(xml_node, obj%xml_format ) 2120 ! 2121 obj%lwrite = .TRUE. 2122 ! 2123 END SUBROUTINE qes_read_xml_format 2124 ! 2125 ! 2126 SUBROUTINE qes_read_creator(xml_node, obj, ierr ) 2127 ! 2128 IMPLICIT NONE 2129 ! 2130 TYPE(Node), INTENT(IN), POINTER :: xml_node 2131 TYPE(creator_type), INTENT(OUT) :: obj 2132 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 2133 ! 2134 TYPE(Node), POINTER :: tmp_node 2135 TYPE(NodeList), POINTER :: tmp_node_list 2136 INTEGER :: tmp_node_list_size, index, iostat_ 2137 ! 2138 obj%tagname = getTagName(xml_node) 2139 ! 2140 2141 IF (hasAttribute(xml_node, "NAME")) THEN 2142 CALL extractDataAttribute(xml_node, "NAME", obj%NAME) 2143 ELSE 2144 IF ( PRESENT(ierr) ) THEN 2145 CALL infomsg ( "qes_read: creatorType",& 2146 "required attribute NAME not found" ) 2147 ierr = ierr + 1 2148 ELSE 2149 CALL errore ("qes_read: creatorType",& 2150 "required attribute NAME not found", 10 ) 2151 END IF 2152 END IF 2153 ! 2154 IF (hasAttribute(xml_node, "VERSION")) THEN 2155 CALL extractDataAttribute(xml_node, "VERSION", obj%VERSION) 2156 ELSE 2157 IF ( PRESENT(ierr) ) THEN 2158 CALL infomsg ( "qes_read: creatorType",& 2159 "required attribute VERSION not found" ) 2160 ierr = ierr + 1 2161 ELSE 2162 CALL errore ("qes_read: creatorType",& 2163 "required attribute VERSION not found", 10 ) 2164 END IF 2165 END IF 2166 ! 2167 2168 2169 2170 ! 2171 ! 2172 CALL extractDataContent(xml_node, obj%creator ) 2173 ! 2174 obj%lwrite = .TRUE. 2175 ! 2176 END SUBROUTINE qes_read_creator 2177 ! 2178 ! 2179 SUBROUTINE qes_read_created(xml_node, obj, ierr ) 2180 ! 2181 IMPLICIT NONE 2182 ! 2183 TYPE(Node), INTENT(IN), POINTER :: xml_node 2184 TYPE(created_type), INTENT(OUT) :: obj 2185 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 2186 ! 2187 TYPE(Node), POINTER :: tmp_node 2188 TYPE(NodeList), POINTER :: tmp_node_list 2189 INTEGER :: tmp_node_list_size, index, iostat_ 2190 ! 2191 obj%tagname = getTagName(xml_node) 2192 ! 2193 2194 IF (hasAttribute(xml_node, "DATE")) THEN 2195 CALL extractDataAttribute(xml_node, "DATE", obj%DATE) 2196 ELSE 2197 IF ( PRESENT(ierr) ) THEN 2198 CALL infomsg ( "qes_read: createdType",& 2199 "required attribute DATE not found" ) 2200 ierr = ierr + 1 2201 ELSE 2202 CALL errore ("qes_read: createdType",& 2203 "required attribute DATE not found", 10 ) 2204 END IF 2205 END IF 2206 ! 2207 IF (hasAttribute(xml_node, "TIME")) THEN 2208 CALL extractDataAttribute(xml_node, "TIME", obj%TIME) 2209 ELSE 2210 IF ( PRESENT(ierr) ) THEN 2211 CALL infomsg ( "qes_read: createdType",& 2212 "required attribute TIME not found" ) 2213 ierr = ierr + 1 2214 ELSE 2215 CALL errore ("qes_read: createdType",& 2216 "required attribute TIME not found", 10 ) 2217 END IF 2218 END IF 2219 ! 2220 2221 2222 2223 ! 2224 ! 2225 CALL extractDataContent(xml_node, obj%created ) 2226 ! 2227 obj%lwrite = .TRUE. 2228 ! 2229 END SUBROUTINE qes_read_created 2230 ! 2231 ! 2232 SUBROUTINE qes_read_atomic_species(xml_node, obj, ierr ) 2233 ! 2234 IMPLICIT NONE 2235 ! 2236 TYPE(Node), INTENT(IN), POINTER :: xml_node 2237 TYPE(atomic_species_type), INTENT(OUT) :: obj 2238 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 2239 ! 2240 TYPE(Node), POINTER :: tmp_node 2241 TYPE(NodeList), POINTER :: tmp_node_list 2242 INTEGER :: tmp_node_list_size, index, iostat_ 2243 ! 2244 obj%tagname = getTagName(xml_node) 2245 ! 2246 2247 IF (hasAttribute(xml_node, "ntyp")) THEN 2248 CALL extractDataAttribute(xml_node, "ntyp", obj%ntyp) 2249 ELSE 2250 IF ( PRESENT(ierr) ) THEN 2251 CALL infomsg ( "qes_read: atomic_speciesType",& 2252 "required attribute ntyp not found" ) 2253 ierr = ierr + 1 2254 ELSE 2255 CALL errore ("qes_read: atomic_speciesType",& 2256 "required attribute ntyp not found", 10 ) 2257 END IF 2258 END IF 2259 ! 2260 IF (hasAttribute(xml_node, "pseudo_dir")) THEN 2261 CALL extractDataAttribute(xml_node, "pseudo_dir", obj%pseudo_dir) 2262 obj%pseudo_dir_ispresent = .TRUE. 2263 ELSE 2264 obj%pseudo_dir_ispresent = .FALSE. 2265 END IF 2266 ! 2267 2268 2269 2270 ! 2271 tmp_node_list => getElementsByTagname(xml_node, "species") 2272 tmp_node_list_size = getLength(tmp_node_list) 2273 ! 2274 IF (tmp_node_list_size < 1) THEN 2275 IF (PRESENT(ierr) ) THEN 2276 CALL infomsg("qes_read:atomic_speciesType","species: not enough elements") 2277 ierr = ierr + 1 2278 ELSE 2279 CALL errore("qes_read:atomic_speciesType","species: not enough elements",10) 2280 END IF 2281 END IF 2282 ! 2283 obj%ndim_species = tmp_node_list_size 2284 ALLOCATE(obj%species(tmp_node_list_size)) 2285 DO index=1,tmp_node_list_size 2286 tmp_node => item( tmp_node_list, index-1 ) 2287 CALL qes_read_species(tmp_node, obj%species(index), ierr ) 2288 END DO 2289 ! 2290 ! 2291 obj%lwrite = .TRUE. 2292 ! 2293 END SUBROUTINE qes_read_atomic_species 2294 ! 2295 ! 2296 SUBROUTINE qes_read_species(xml_node, obj, ierr ) 2297 ! 2298 IMPLICIT NONE 2299 ! 2300 TYPE(Node), INTENT(IN), POINTER :: xml_node 2301 TYPE(species_type), INTENT(OUT) :: obj 2302 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 2303 ! 2304 TYPE(Node), POINTER :: tmp_node 2305 TYPE(NodeList), POINTER :: tmp_node_list 2306 INTEGER :: tmp_node_list_size, index, iostat_ 2307 ! 2308 obj%tagname = getTagName(xml_node) 2309 ! 2310 2311 IF (hasAttribute(xml_node, "name")) THEN 2312 CALL extractDataAttribute(xml_node, "name", obj%name) 2313 ELSE 2314 IF ( PRESENT(ierr) ) THEN 2315 CALL infomsg ( "qes_read: speciesType",& 2316 "required attribute name not found" ) 2317 ierr = ierr + 1 2318 ELSE 2319 CALL errore ("qes_read: speciesType",& 2320 "required attribute name not found", 10 ) 2321 END IF 2322 END IF 2323 ! 2324 2325 2326 2327 ! 2328 tmp_node_list => getElementsByTagname(xml_node, "mass") 2329 tmp_node_list_size = getLength(tmp_node_list) 2330 ! 2331 IF (tmp_node_list_size > 1) THEN 2332 IF (PRESENT(ierr) ) THEN 2333 CALL infomsg("qes_read:speciesType","mass: too many occurrences") 2334 ierr = ierr + 1 2335 ELSE 2336 CALL errore("qes_read:speciesType","mass: too many occurrences",10) 2337 END IF 2338 END IF 2339 ! 2340 IF (tmp_node_list_size>0) THEN 2341 obj%mass_ispresent = .TRUE. 2342 tmp_node => item(tmp_node_list, 0) 2343 CALL extractDataContent(tmp_node, obj%mass , IOSTAT = iostat_) 2344 IF ( iostat_ /= 0 ) THEN 2345 IF ( PRESENT (ierr ) ) THEN 2346 CALL infomsg("qes_read:speciesType","error reading mass") 2347 ierr = ierr + 1 2348 ELSE 2349 CALL errore ("qes_read:speciesType","error reading mass",10) 2350 END IF 2351 END IF 2352 ELSE 2353 obj%mass_ispresent = .FALSE. 2354 END IF 2355 ! 2356 tmp_node_list => getElementsByTagname(xml_node, "pseudo_file") 2357 tmp_node_list_size = getLength(tmp_node_list) 2358 ! 2359 IF (tmp_node_list_size /= 1) THEN 2360 IF (PRESENT(ierr) ) THEN 2361 CALL infomsg("qes_read:speciesType","pseudo_file: wrong number of occurrences") 2362 ierr = ierr + 1 2363 ELSE 2364 CALL errore("qes_read:speciesType","pseudo_file: wrong number of occurrences",10) 2365 END IF 2366 END IF 2367 ! 2368 tmp_node => item(tmp_node_list, 0) 2369 IF (ASSOCIATED(tmp_node))& 2370 CALL extractDataContent(tmp_node, obj%pseudo_file, IOSTAT = iostat_ ) 2371 IF ( iostat_ /= 0 ) THEN 2372 IF ( PRESENT (ierr ) ) THEN 2373 CALL infomsg("qes_read:speciesType","error reading pseudo_file") 2374 ierr = ierr + 1 2375 ELSE 2376 CALL errore ("qes_read:speciesType","error reading pseudo_file",10) 2377 END IF 2378 END IF 2379 ! 2380 tmp_node_list => getElementsByTagname(xml_node, "starting_magnetization") 2381 tmp_node_list_size = getLength(tmp_node_list) 2382 ! 2383 IF (tmp_node_list_size > 1) THEN 2384 IF (PRESENT(ierr) ) THEN 2385 CALL infomsg("qes_read:speciesType","starting_magnetization: too many occurrences") 2386 ierr = ierr + 1 2387 ELSE 2388 CALL errore("qes_read:speciesType","starting_magnetization: too many occurrences",10) 2389 END IF 2390 END IF 2391 ! 2392 IF (tmp_node_list_size>0) THEN 2393 obj%starting_magnetization_ispresent = .TRUE. 2394 tmp_node => item(tmp_node_list, 0) 2395 CALL extractDataContent(tmp_node, obj%starting_magnetization , IOSTAT = iostat_) 2396 IF ( iostat_ /= 0 ) THEN 2397 IF ( PRESENT (ierr ) ) THEN 2398 CALL infomsg("qes_read:speciesType","error reading starting_magnetization") 2399 ierr = ierr + 1 2400 ELSE 2401 CALL errore ("qes_read:speciesType","error reading starting_magnetization",10) 2402 END IF 2403 END IF 2404 ELSE 2405 obj%starting_magnetization_ispresent = .FALSE. 2406 END IF 2407 ! 2408 tmp_node_list => getElementsByTagname(xml_node, "spin_teta") 2409 tmp_node_list_size = getLength(tmp_node_list) 2410 ! 2411 IF (tmp_node_list_size > 1) THEN 2412 IF (PRESENT(ierr) ) THEN 2413 CALL infomsg("qes_read:speciesType","spin_teta: too many occurrences") 2414 ierr = ierr + 1 2415 ELSE 2416 CALL errore("qes_read:speciesType","spin_teta: too many occurrences",10) 2417 END IF 2418 END IF 2419 ! 2420 IF (tmp_node_list_size>0) THEN 2421 obj%spin_teta_ispresent = .TRUE. 2422 tmp_node => item(tmp_node_list, 0) 2423 CALL extractDataContent(tmp_node, obj%spin_teta , IOSTAT = iostat_) 2424 IF ( iostat_ /= 0 ) THEN 2425 IF ( PRESENT (ierr ) ) THEN 2426 CALL infomsg("qes_read:speciesType","error reading spin_teta") 2427 ierr = ierr + 1 2428 ELSE 2429 CALL errore ("qes_read:speciesType","error reading spin_teta",10) 2430 END IF 2431 END IF 2432 ELSE 2433 obj%spin_teta_ispresent = .FALSE. 2434 END IF 2435 ! 2436 tmp_node_list => getElementsByTagname(xml_node, "spin_phi") 2437 tmp_node_list_size = getLength(tmp_node_list) 2438 ! 2439 IF (tmp_node_list_size > 1) THEN 2440 IF (PRESENT(ierr) ) THEN 2441 CALL infomsg("qes_read:speciesType","spin_phi: too many occurrences") 2442 ierr = ierr + 1 2443 ELSE 2444 CALL errore("qes_read:speciesType","spin_phi: too many occurrences",10) 2445 END IF 2446 END IF 2447 ! 2448 IF (tmp_node_list_size>0) THEN 2449 obj%spin_phi_ispresent = .TRUE. 2450 tmp_node => item(tmp_node_list, 0) 2451 CALL extractDataContent(tmp_node, obj%spin_phi , IOSTAT = iostat_) 2452 IF ( iostat_ /= 0 ) THEN 2453 IF ( PRESENT (ierr ) ) THEN 2454 CALL infomsg("qes_read:speciesType","error reading spin_phi") 2455 ierr = ierr + 1 2456 ELSE 2457 CALL errore ("qes_read:speciesType","error reading spin_phi",10) 2458 END IF 2459 END IF 2460 ELSE 2461 obj%spin_phi_ispresent = .FALSE. 2462 END IF 2463 ! 2464 ! 2465 obj%lwrite = .TRUE. 2466 ! 2467 END SUBROUTINE qes_read_species 2468 ! 2469 ! 2470 SUBROUTINE qes_read_atomic_structure(xml_node, obj, ierr ) 2471 ! 2472 IMPLICIT NONE 2473 ! 2474 TYPE(Node), INTENT(IN), POINTER :: xml_node 2475 TYPE(atomic_structure_type), INTENT(OUT) :: obj 2476 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 2477 ! 2478 TYPE(Node), POINTER :: tmp_node 2479 TYPE(NodeList), POINTER :: tmp_node_list 2480 INTEGER :: tmp_node_list_size, index, iostat_ 2481 ! 2482 obj%tagname = getTagName(xml_node) 2483 ! 2484 2485 IF (hasAttribute(xml_node, "nat")) THEN 2486 CALL extractDataAttribute(xml_node, "nat", obj%nat) 2487 ELSE 2488 IF ( PRESENT(ierr) ) THEN 2489 CALL infomsg ( "qes_read: atomic_structureType",& 2490 "required attribute nat not found" ) 2491 ierr = ierr + 1 2492 ELSE 2493 CALL errore ("qes_read: atomic_structureType",& 2494 "required attribute nat not found", 10 ) 2495 END IF 2496 END IF 2497 ! 2498 IF (hasAttribute(xml_node, "alat")) THEN 2499 CALL extractDataAttribute(xml_node, "alat", obj%alat) 2500 obj%alat_ispresent = .TRUE. 2501 ELSE 2502 obj%alat_ispresent = .FALSE. 2503 END IF 2504 ! 2505 IF (hasAttribute(xml_node, "bravais_index")) THEN 2506 CALL extractDataAttribute(xml_node, "bravais_index", obj%bravais_index) 2507 obj%bravais_index_ispresent = .TRUE. 2508 ELSE 2509 obj%bravais_index_ispresent = .FALSE. 2510 END IF 2511 ! 2512 IF (hasAttribute(xml_node, "alternative_axes")) THEN 2513 CALL extractDataAttribute(xml_node, "alternative_axes", obj%alternative_axes) 2514 obj%alternative_axes_ispresent = .TRUE. 2515 ELSE 2516 obj%alternative_axes_ispresent = .FALSE. 2517 END IF 2518 ! 2519 2520 2521 2522 ! 2523 tmp_node_list => getElementsByTagname(xml_node, "atomic_positions") 2524 tmp_node_list_size = getLength(tmp_node_list) 2525 ! 2526 IF (tmp_node_list_size > 1) THEN 2527 IF (PRESENT(ierr) ) THEN 2528 CALL infomsg("qes_read:atomic_structureType","atomic_positions: too many occurrences") 2529 ierr = ierr + 1 2530 ELSE 2531 CALL errore("qes_read:atomic_structureType","atomic_positions: too many occurrences",10) 2532 END IF 2533 END IF 2534 ! 2535 IF (tmp_node_list_size>0) THEN 2536 obj%atomic_positions_ispresent = .TRUE. 2537 tmp_node => item(tmp_node_list, 0) 2538 CALL qes_read_atomic_positions(tmp_node, obj%atomic_positions, ierr ) 2539 ELSE 2540 obj%atomic_positions_ispresent = .FALSE. 2541 END IF 2542 ! 2543 tmp_node_list => getElementsByTagname(xml_node, "wyckoff_positions") 2544 tmp_node_list_size = getLength(tmp_node_list) 2545 ! 2546 IF (tmp_node_list_size > 1) THEN 2547 IF (PRESENT(ierr) ) THEN 2548 CALL infomsg("qes_read:atomic_structureType","wyckoff_positions: too many occurrences") 2549 ierr = ierr + 1 2550 ELSE 2551 CALL errore("qes_read:atomic_structureType","wyckoff_positions: too many occurrences",10) 2552 END IF 2553 END IF 2554 ! 2555 IF (tmp_node_list_size>0) THEN 2556 obj%wyckoff_positions_ispresent = .TRUE. 2557 tmp_node => item(tmp_node_list, 0) 2558 CALL qes_read_wyckoff_positions(tmp_node, obj%wyckoff_positions, ierr ) 2559 ELSE 2560 obj%wyckoff_positions_ispresent = .FALSE. 2561 END IF 2562 ! 2563 tmp_node_list => getElementsByTagname(xml_node, "crystal_positions") 2564 tmp_node_list_size = getLength(tmp_node_list) 2565 ! 2566 IF (tmp_node_list_size > 1) THEN 2567 IF (PRESENT(ierr) ) THEN 2568 CALL infomsg("qes_read:atomic_structureType","crystal_positions: too many occurrences") 2569 ierr = ierr + 1 2570 ELSE 2571 CALL errore("qes_read:atomic_structureType","crystal_positions: too many occurrences",10) 2572 END IF 2573 END IF 2574 ! 2575 IF (tmp_node_list_size>0) THEN 2576 obj%crystal_positions_ispresent = .TRUE. 2577 tmp_node => item(tmp_node_list, 0) 2578 CALL qes_read_atomic_positions(tmp_node, obj%crystal_positions, ierr ) 2579 ELSE 2580 obj%crystal_positions_ispresent = .FALSE. 2581 END IF 2582 ! 2583 tmp_node_list => getElementsByTagname(xml_node, "cell") 2584 tmp_node_list_size = getLength(tmp_node_list) 2585 ! 2586 IF (tmp_node_list_size /= 1) THEN 2587 IF (PRESENT(ierr) ) THEN 2588 CALL infomsg("qes_read:atomic_structureType","cell: wrong number of occurrences") 2589 ierr = ierr + 1 2590 ELSE 2591 CALL errore("qes_read:atomic_structureType","cell: wrong number of occurrences",10) 2592 END IF 2593 END IF 2594 ! 2595 tmp_node => item(tmp_node_list, 0) 2596 IF (ASSOCIATED(tmp_node))& 2597 CALL qes_read_cell(tmp_node, obj%cell, ierr ) 2598 ! 2599 ! 2600 obj%lwrite = .TRUE. 2601 ! 2602 END SUBROUTINE qes_read_atomic_structure 2603 ! 2604 ! 2605 SUBROUTINE qes_read_atomic_positions(xml_node, obj, ierr ) 2606 ! 2607 IMPLICIT NONE 2608 ! 2609 TYPE(Node), INTENT(IN), POINTER :: xml_node 2610 TYPE(atomic_positions_type), INTENT(OUT) :: obj 2611 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 2612 ! 2613 TYPE(Node), POINTER :: tmp_node 2614 TYPE(NodeList), POINTER :: tmp_node_list 2615 INTEGER :: tmp_node_list_size, index, iostat_ 2616 ! 2617 obj%tagname = getTagName(xml_node) 2618 ! 2619 2620 2621 2622 2623 ! 2624 tmp_node_list => getElementsByTagname(xml_node, "atom") 2625 tmp_node_list_size = getLength(tmp_node_list) 2626 ! 2627 IF (tmp_node_list_size < 1) THEN 2628 IF (PRESENT(ierr) ) THEN 2629 CALL infomsg("qes_read:atomic_positionsType","atom: not enough elements") 2630 ierr = ierr + 1 2631 ELSE 2632 CALL errore("qes_read:atomic_positionsType","atom: not enough elements",10) 2633 END IF 2634 END IF 2635 ! 2636 obj%ndim_atom = tmp_node_list_size 2637 ALLOCATE(obj%atom(tmp_node_list_size)) 2638 DO index=1,tmp_node_list_size 2639 tmp_node => item( tmp_node_list, index-1 ) 2640 CALL qes_read_atom(tmp_node, obj%atom(index), ierr ) 2641 END DO 2642 ! 2643 ! 2644 obj%lwrite = .TRUE. 2645 ! 2646 END SUBROUTINE qes_read_atomic_positions 2647 ! 2648 ! 2649 SUBROUTINE qes_read_atom(xml_node, obj, ierr ) 2650 ! 2651 IMPLICIT NONE 2652 ! 2653 TYPE(Node), INTENT(IN), POINTER :: xml_node 2654 TYPE(atom_type), INTENT(OUT) :: obj 2655 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 2656 ! 2657 TYPE(Node), POINTER :: tmp_node 2658 TYPE(NodeList), POINTER :: tmp_node_list 2659 INTEGER :: tmp_node_list_size, index, iostat_ 2660 ! 2661 obj%tagname = getTagName(xml_node) 2662 ! 2663 2664 IF (hasAttribute(xml_node, "name")) THEN 2665 CALL extractDataAttribute(xml_node, "name", obj%name) 2666 ELSE 2667 IF ( PRESENT(ierr) ) THEN 2668 CALL infomsg ( "qes_read: atomType",& 2669 "required attribute name not found" ) 2670 ierr = ierr + 1 2671 ELSE 2672 CALL errore ("qes_read: atomType",& 2673 "required attribute name not found", 10 ) 2674 END IF 2675 END IF 2676 ! 2677 IF (hasAttribute(xml_node, "position")) THEN 2678 CALL extractDataAttribute(xml_node, "position", obj%position) 2679 obj%position_ispresent = .TRUE. 2680 ELSE 2681 obj%position_ispresent = .FALSE. 2682 END IF 2683 ! 2684 IF (hasAttribute(xml_node, "index")) THEN 2685 CALL extractDataAttribute(xml_node, "index", obj%index) 2686 obj%index_ispresent = .TRUE. 2687 ELSE 2688 obj%index_ispresent = .FALSE. 2689 END IF 2690 ! 2691 2692 2693 2694 ! 2695 ! 2696 CALL extractDataContent(xml_node, obj%atom ) 2697 ! 2698 obj%lwrite = .TRUE. 2699 ! 2700 END SUBROUTINE qes_read_atom 2701 ! 2702 ! 2703 SUBROUTINE qes_read_wyckoff_positions(xml_node, obj, ierr ) 2704 ! 2705 IMPLICIT NONE 2706 ! 2707 TYPE(Node), INTENT(IN), POINTER :: xml_node 2708 TYPE(wyckoff_positions_type), INTENT(OUT) :: obj 2709 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 2710 ! 2711 TYPE(Node), POINTER :: tmp_node 2712 TYPE(NodeList), POINTER :: tmp_node_list 2713 INTEGER :: tmp_node_list_size, index, iostat_ 2714 ! 2715 obj%tagname = getTagName(xml_node) 2716 ! 2717 2718 IF (hasAttribute(xml_node, "space_group")) THEN 2719 CALL extractDataAttribute(xml_node, "space_group", obj%space_group) 2720 ELSE 2721 IF ( PRESENT(ierr) ) THEN 2722 CALL infomsg ( "qes_read: wyckoff_positionsType",& 2723 "required attribute space_group not found" ) 2724 ierr = ierr + 1 2725 ELSE 2726 CALL errore ("qes_read: wyckoff_positionsType",& 2727 "required attribute space_group not found", 10 ) 2728 END IF 2729 END IF 2730 ! 2731 IF (hasAttribute(xml_node, "more_options")) THEN 2732 CALL extractDataAttribute(xml_node, "more_options", obj%more_options) 2733 obj%more_options_ispresent = .TRUE. 2734 ELSE 2735 obj%more_options_ispresent = .FALSE. 2736 END IF 2737 ! 2738 2739 2740 2741 ! 2742 tmp_node_list => getElementsByTagname(xml_node, "atom") 2743 tmp_node_list_size = getLength(tmp_node_list) 2744 ! 2745 IF (tmp_node_list_size < 1) THEN 2746 IF (PRESENT(ierr) ) THEN 2747 CALL infomsg("qes_read:wyckoff_positionsType","atom: not enough elements") 2748 ierr = ierr + 1 2749 ELSE 2750 CALL errore("qes_read:wyckoff_positionsType","atom: not enough elements",10) 2751 END IF 2752 END IF 2753 ! 2754 obj%ndim_atom = tmp_node_list_size 2755 ALLOCATE(obj%atom(tmp_node_list_size)) 2756 DO index=1,tmp_node_list_size 2757 tmp_node => item( tmp_node_list, index-1 ) 2758 CALL qes_read_atom(tmp_node, obj%atom(index), ierr ) 2759 END DO 2760 ! 2761 ! 2762 obj%lwrite = .TRUE. 2763 ! 2764 END SUBROUTINE qes_read_wyckoff_positions 2765 ! 2766 ! 2767 SUBROUTINE qes_read_cell(xml_node, obj, ierr ) 2768 ! 2769 IMPLICIT NONE 2770 ! 2771 TYPE(Node), INTENT(IN), POINTER :: xml_node 2772 TYPE(cell_type), INTENT(OUT) :: obj 2773 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 2774 ! 2775 TYPE(Node), POINTER :: tmp_node 2776 TYPE(NodeList), POINTER :: tmp_node_list 2777 INTEGER :: tmp_node_list_size, index, iostat_ 2778 ! 2779 obj%tagname = getTagName(xml_node) 2780 ! 2781 2782 2783 2784 2785 ! 2786 tmp_node_list => getElementsByTagname(xml_node, "a1") 2787 tmp_node_list_size = getLength(tmp_node_list) 2788 ! 2789 IF (tmp_node_list_size /= 1) THEN 2790 IF (PRESENT(ierr) ) THEN 2791 CALL infomsg("qes_read:cellType","a1: wrong number of occurrences") 2792 ierr = ierr + 1 2793 ELSE 2794 CALL errore("qes_read:cellType","a1: wrong number of occurrences",10) 2795 END IF 2796 END IF 2797 ! 2798 tmp_node => item(tmp_node_list, 0) 2799 IF (ASSOCIATED(tmp_node))& 2800 CALL extractDataContent(tmp_node, obj%a1, IOSTAT = iostat_ ) 2801 IF ( iostat_ /= 0 ) THEN 2802 IF ( PRESENT (ierr ) ) THEN 2803 CALL infomsg("qes_read:cellType","error reading a1") 2804 ierr = ierr + 1 2805 ELSE 2806 CALL errore ("qes_read:cellType","error reading a1",10) 2807 END IF 2808 END IF 2809 ! 2810 tmp_node_list => getElementsByTagname(xml_node, "a2") 2811 tmp_node_list_size = getLength(tmp_node_list) 2812 ! 2813 IF (tmp_node_list_size /= 1) THEN 2814 IF (PRESENT(ierr) ) THEN 2815 CALL infomsg("qes_read:cellType","a2: wrong number of occurrences") 2816 ierr = ierr + 1 2817 ELSE 2818 CALL errore("qes_read:cellType","a2: wrong number of occurrences",10) 2819 END IF 2820 END IF 2821 ! 2822 tmp_node => item(tmp_node_list, 0) 2823 IF (ASSOCIATED(tmp_node))& 2824 CALL extractDataContent(tmp_node, obj%a2, IOSTAT = iostat_ ) 2825 IF ( iostat_ /= 0 ) THEN 2826 IF ( PRESENT (ierr ) ) THEN 2827 CALL infomsg("qes_read:cellType","error reading a2") 2828 ierr = ierr + 1 2829 ELSE 2830 CALL errore ("qes_read:cellType","error reading a2",10) 2831 END IF 2832 END IF 2833 ! 2834 tmp_node_list => getElementsByTagname(xml_node, "a3") 2835 tmp_node_list_size = getLength(tmp_node_list) 2836 ! 2837 IF (tmp_node_list_size /= 1) THEN 2838 IF (PRESENT(ierr) ) THEN 2839 CALL infomsg("qes_read:cellType","a3: wrong number of occurrences") 2840 ierr = ierr + 1 2841 ELSE 2842 CALL errore("qes_read:cellType","a3: wrong number of occurrences",10) 2843 END IF 2844 END IF 2845 ! 2846 tmp_node => item(tmp_node_list, 0) 2847 IF (ASSOCIATED(tmp_node))& 2848 CALL extractDataContent(tmp_node, obj%a3, IOSTAT = iostat_ ) 2849 IF ( iostat_ /= 0 ) THEN 2850 IF ( PRESENT (ierr ) ) THEN 2851 CALL infomsg("qes_read:cellType","error reading a3") 2852 ierr = ierr + 1 2853 ELSE 2854 CALL errore ("qes_read:cellType","error reading a3",10) 2855 END IF 2856 END IF 2857 ! 2858 ! 2859 obj%lwrite = .TRUE. 2860 ! 2861 END SUBROUTINE qes_read_cell 2862 ! 2863 ! 2864 SUBROUTINE qes_read_dft(xml_node, obj, ierr ) 2865 ! 2866 IMPLICIT NONE 2867 ! 2868 TYPE(Node), INTENT(IN), POINTER :: xml_node 2869 TYPE(dft_type), INTENT(OUT) :: obj 2870 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 2871 ! 2872 TYPE(Node), POINTER :: tmp_node 2873 TYPE(NodeList), POINTER :: tmp_node_list 2874 INTEGER :: tmp_node_list_size, index, iostat_ 2875 ! 2876 obj%tagname = getTagName(xml_node) 2877 ! 2878 2879 2880 2881 2882 ! 2883 tmp_node_list => getElementsByTagname(xml_node, "functional") 2884 tmp_node_list_size = getLength(tmp_node_list) 2885 ! 2886 IF (tmp_node_list_size /= 1) THEN 2887 IF (PRESENT(ierr) ) THEN 2888 CALL infomsg("qes_read:dftType","functional: wrong number of occurrences") 2889 ierr = ierr + 1 2890 ELSE 2891 CALL errore("qes_read:dftType","functional: wrong number of occurrences",10) 2892 END IF 2893 END IF 2894 ! 2895 tmp_node => item(tmp_node_list, 0) 2896 IF (ASSOCIATED(tmp_node))& 2897 CALL extractDataContent(tmp_node, obj%functional, IOSTAT = iostat_ ) 2898 IF ( iostat_ /= 0 ) THEN 2899 IF ( PRESENT (ierr ) ) THEN 2900 CALL infomsg("qes_read:dftType","error reading functional") 2901 ierr = ierr + 1 2902 ELSE 2903 CALL errore ("qes_read:dftType","error reading functional",10) 2904 END IF 2905 END IF 2906 ! 2907 tmp_node_list => getElementsByTagname(xml_node, "hybrid") 2908 tmp_node_list_size = getLength(tmp_node_list) 2909 ! 2910 IF (tmp_node_list_size > 1) THEN 2911 IF (PRESENT(ierr) ) THEN 2912 CALL infomsg("qes_read:dftType","hybrid: too many occurrences") 2913 ierr = ierr + 1 2914 ELSE 2915 CALL errore("qes_read:dftType","hybrid: too many occurrences",10) 2916 END IF 2917 END IF 2918 ! 2919 IF (tmp_node_list_size>0) THEN 2920 obj%hybrid_ispresent = .TRUE. 2921 tmp_node => item(tmp_node_list, 0) 2922 CALL qes_read_hybrid(tmp_node, obj%hybrid, ierr ) 2923 ELSE 2924 obj%hybrid_ispresent = .FALSE. 2925 END IF 2926 ! 2927 tmp_node_list => getElementsByTagname(xml_node, "dftU") 2928 tmp_node_list_size = getLength(tmp_node_list) 2929 ! 2930 IF (tmp_node_list_size > 1) THEN 2931 IF (PRESENT(ierr) ) THEN 2932 CALL infomsg("qes_read:dftType","dftU: too many occurrences") 2933 ierr = ierr + 1 2934 ELSE 2935 CALL errore("qes_read:dftType","dftU: too many occurrences",10) 2936 END IF 2937 END IF 2938 ! 2939 IF (tmp_node_list_size>0) THEN 2940 obj%dftU_ispresent = .TRUE. 2941 tmp_node => item(tmp_node_list, 0) 2942 CALL qes_read_dftU(tmp_node, obj%dftU, ierr ) 2943 ELSE 2944 obj%dftU_ispresent = .FALSE. 2945 END IF 2946 ! 2947 tmp_node_list => getElementsByTagname(xml_node, "vdW") 2948 tmp_node_list_size = getLength(tmp_node_list) 2949 ! 2950 IF (tmp_node_list_size > 1) THEN 2951 IF (PRESENT(ierr) ) THEN 2952 CALL infomsg("qes_read:dftType","vdW: too many occurrences") 2953 ierr = ierr + 1 2954 ELSE 2955 CALL errore("qes_read:dftType","vdW: too many occurrences",10) 2956 END IF 2957 END IF 2958 ! 2959 IF (tmp_node_list_size>0) THEN 2960 obj%vdW_ispresent = .TRUE. 2961 tmp_node => item(tmp_node_list, 0) 2962 CALL qes_read_vdW(tmp_node, obj%vdW, ierr ) 2963 ELSE 2964 obj%vdW_ispresent = .FALSE. 2965 END IF 2966 ! 2967 ! 2968 obj%lwrite = .TRUE. 2969 ! 2970 END SUBROUTINE qes_read_dft 2971 ! 2972 ! 2973 SUBROUTINE qes_read_hybrid(xml_node, obj, ierr ) 2974 ! 2975 IMPLICIT NONE 2976 ! 2977 TYPE(Node), INTENT(IN), POINTER :: xml_node 2978 TYPE(hybrid_type), INTENT(OUT) :: obj 2979 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 2980 ! 2981 TYPE(Node), POINTER :: tmp_node 2982 TYPE(NodeList), POINTER :: tmp_node_list 2983 INTEGER :: tmp_node_list_size, index, iostat_ 2984 ! 2985 obj%tagname = getTagName(xml_node) 2986 ! 2987 2988 2989 2990 2991 ! 2992 tmp_node_list => getElementsByTagname(xml_node, "qpoint_grid") 2993 tmp_node_list_size = getLength(tmp_node_list) 2994 ! 2995 IF (tmp_node_list_size > 1) THEN 2996 IF (PRESENT(ierr) ) THEN 2997 CALL infomsg("qes_read:hybridType","qpoint_grid: too many occurrences") 2998 ierr = ierr + 1 2999 ELSE 3000 CALL errore("qes_read:hybridType","qpoint_grid: too many occurrences",10) 3001 END IF 3002 END IF 3003 ! 3004 IF (tmp_node_list_size>0) THEN 3005 obj%qpoint_grid_ispresent = .TRUE. 3006 tmp_node => item(tmp_node_list, 0) 3007 CALL qes_read_qpoint_grid(tmp_node, obj%qpoint_grid, ierr ) 3008 ELSE 3009 obj%qpoint_grid_ispresent = .FALSE. 3010 END IF 3011 ! 3012 tmp_node_list => getElementsByTagname(xml_node, "ecutfock") 3013 tmp_node_list_size = getLength(tmp_node_list) 3014 ! 3015 IF (tmp_node_list_size > 1) THEN 3016 IF (PRESENT(ierr) ) THEN 3017 CALL infomsg("qes_read:hybridType","ecutfock: too many occurrences") 3018 ierr = ierr + 1 3019 ELSE 3020 CALL errore("qes_read:hybridType","ecutfock: too many occurrences",10) 3021 END IF 3022 END IF 3023 ! 3024 IF (tmp_node_list_size>0) THEN 3025 obj%ecutfock_ispresent = .TRUE. 3026 tmp_node => item(tmp_node_list, 0) 3027 CALL extractDataContent(tmp_node, obj%ecutfock , IOSTAT = iostat_) 3028 IF ( iostat_ /= 0 ) THEN 3029 IF ( PRESENT (ierr ) ) THEN 3030 CALL infomsg("qes_read:hybridType","error reading ecutfock") 3031 ierr = ierr + 1 3032 ELSE 3033 CALL errore ("qes_read:hybridType","error reading ecutfock",10) 3034 END IF 3035 END IF 3036 ELSE 3037 obj%ecutfock_ispresent = .FALSE. 3038 END IF 3039 ! 3040 tmp_node_list => getElementsByTagname(xml_node, "exx_fraction") 3041 tmp_node_list_size = getLength(tmp_node_list) 3042 ! 3043 IF (tmp_node_list_size > 1) THEN 3044 IF (PRESENT(ierr) ) THEN 3045 CALL infomsg("qes_read:hybridType","exx_fraction: too many occurrences") 3046 ierr = ierr + 1 3047 ELSE 3048 CALL errore("qes_read:hybridType","exx_fraction: too many occurrences",10) 3049 END IF 3050 END IF 3051 ! 3052 IF (tmp_node_list_size>0) THEN 3053 obj%exx_fraction_ispresent = .TRUE. 3054 tmp_node => item(tmp_node_list, 0) 3055 CALL extractDataContent(tmp_node, obj%exx_fraction , IOSTAT = iostat_) 3056 IF ( iostat_ /= 0 ) THEN 3057 IF ( PRESENT (ierr ) ) THEN 3058 CALL infomsg("qes_read:hybridType","error reading exx_fraction") 3059 ierr = ierr + 1 3060 ELSE 3061 CALL errore ("qes_read:hybridType","error reading exx_fraction",10) 3062 END IF 3063 END IF 3064 ELSE 3065 obj%exx_fraction_ispresent = .FALSE. 3066 END IF 3067 ! 3068 tmp_node_list => getElementsByTagname(xml_node, "screening_parameter") 3069 tmp_node_list_size = getLength(tmp_node_list) 3070 ! 3071 IF (tmp_node_list_size > 1) THEN 3072 IF (PRESENT(ierr) ) THEN 3073 CALL infomsg("qes_read:hybridType","screening_parameter: too many occurrences") 3074 ierr = ierr + 1 3075 ELSE 3076 CALL errore("qes_read:hybridType","screening_parameter: too many occurrences",10) 3077 END IF 3078 END IF 3079 ! 3080 IF (tmp_node_list_size>0) THEN 3081 obj%screening_parameter_ispresent = .TRUE. 3082 tmp_node => item(tmp_node_list, 0) 3083 CALL extractDataContent(tmp_node, obj%screening_parameter , IOSTAT = iostat_) 3084 IF ( iostat_ /= 0 ) THEN 3085 IF ( PRESENT (ierr ) ) THEN 3086 CALL infomsg("qes_read:hybridType","error reading screening_parameter") 3087 ierr = ierr + 1 3088 ELSE 3089 CALL errore ("qes_read:hybridType","error reading screening_parameter",10) 3090 END IF 3091 END IF 3092 ELSE 3093 obj%screening_parameter_ispresent = .FALSE. 3094 END IF 3095 ! 3096 tmp_node_list => getElementsByTagname(xml_node, "exxdiv_treatment") 3097 tmp_node_list_size = getLength(tmp_node_list) 3098 ! 3099 IF (tmp_node_list_size > 1) THEN 3100 IF (PRESENT(ierr) ) THEN 3101 CALL infomsg("qes_read:hybridType","exxdiv_treatment: too many occurrences") 3102 ierr = ierr + 1 3103 ELSE 3104 CALL errore("qes_read:hybridType","exxdiv_treatment: too many occurrences",10) 3105 END IF 3106 END IF 3107 ! 3108 IF (tmp_node_list_size>0) THEN 3109 obj%exxdiv_treatment_ispresent = .TRUE. 3110 tmp_node => item(tmp_node_list, 0) 3111 CALL extractDataContent(tmp_node, obj%exxdiv_treatment , IOSTAT = iostat_) 3112 IF ( iostat_ /= 0 ) THEN 3113 IF ( PRESENT (ierr ) ) THEN 3114 CALL infomsg("qes_read:hybridType","error reading exxdiv_treatment") 3115 ierr = ierr + 1 3116 ELSE 3117 CALL errore ("qes_read:hybridType","error reading exxdiv_treatment",10) 3118 END IF 3119 END IF 3120 ELSE 3121 obj%exxdiv_treatment_ispresent = .FALSE. 3122 END IF 3123 ! 3124 tmp_node_list => getElementsByTagname(xml_node, "x_gamma_extrapolation") 3125 tmp_node_list_size = getLength(tmp_node_list) 3126 ! 3127 IF (tmp_node_list_size > 1) THEN 3128 IF (PRESENT(ierr) ) THEN 3129 CALL infomsg("qes_read:hybridType","x_gamma_extrapolation: too many occurrences") 3130 ierr = ierr + 1 3131 ELSE 3132 CALL errore("qes_read:hybridType","x_gamma_extrapolation: too many occurrences",10) 3133 END IF 3134 END IF 3135 ! 3136 IF (tmp_node_list_size>0) THEN 3137 obj%x_gamma_extrapolation_ispresent = .TRUE. 3138 tmp_node => item(tmp_node_list, 0) 3139 CALL extractDataContent(tmp_node, obj%x_gamma_extrapolation , IOSTAT = iostat_) 3140 IF ( iostat_ /= 0 ) THEN 3141 IF ( PRESENT (ierr ) ) THEN 3142 CALL infomsg("qes_read:hybridType","error reading x_gamma_extrapolation") 3143 ierr = ierr + 1 3144 ELSE 3145 CALL errore ("qes_read:hybridType","error reading x_gamma_extrapolation",10) 3146 END IF 3147 END IF 3148 ELSE 3149 obj%x_gamma_extrapolation_ispresent = .FALSE. 3150 END IF 3151 ! 3152 tmp_node_list => getElementsByTagname(xml_node, "ecutvcut") 3153 tmp_node_list_size = getLength(tmp_node_list) 3154 ! 3155 IF (tmp_node_list_size > 1) THEN 3156 IF (PRESENT(ierr) ) THEN 3157 CALL infomsg("qes_read:hybridType","ecutvcut: too many occurrences") 3158 ierr = ierr + 1 3159 ELSE 3160 CALL errore("qes_read:hybridType","ecutvcut: too many occurrences",10) 3161 END IF 3162 END IF 3163 ! 3164 IF (tmp_node_list_size>0) THEN 3165 obj%ecutvcut_ispresent = .TRUE. 3166 tmp_node => item(tmp_node_list, 0) 3167 CALL extractDataContent(tmp_node, obj%ecutvcut , IOSTAT = iostat_) 3168 IF ( iostat_ /= 0 ) THEN 3169 IF ( PRESENT (ierr ) ) THEN 3170 CALL infomsg("qes_read:hybridType","error reading ecutvcut") 3171 ierr = ierr + 1 3172 ELSE 3173 CALL errore ("qes_read:hybridType","error reading ecutvcut",10) 3174 END IF 3175 END IF 3176 ELSE 3177 obj%ecutvcut_ispresent = .FALSE. 3178 END IF 3179 ! 3180 tmp_node_list => getElementsByTagname(xml_node, "localization_threshold") 3181 tmp_node_list_size = getLength(tmp_node_list) 3182 ! 3183 IF (tmp_node_list_size > 1) THEN 3184 IF (PRESENT(ierr) ) THEN 3185 CALL infomsg("qes_read:hybridType","localization_threshold: too many occurrences") 3186 ierr = ierr + 1 3187 ELSE 3188 CALL errore("qes_read:hybridType","localization_threshold: too many occurrences",10) 3189 END IF 3190 END IF 3191 ! 3192 IF (tmp_node_list_size>0) THEN 3193 obj%localization_threshold_ispresent = .TRUE. 3194 tmp_node => item(tmp_node_list, 0) 3195 CALL extractDataContent(tmp_node, obj%localization_threshold , IOSTAT = iostat_) 3196 IF ( iostat_ /= 0 ) THEN 3197 IF ( PRESENT (ierr ) ) THEN 3198 CALL infomsg("qes_read:hybridType","error reading localization_threshold") 3199 ierr = ierr + 1 3200 ELSE 3201 CALL errore ("qes_read:hybridType","error reading localization_threshold",10) 3202 END IF 3203 END IF 3204 ELSE 3205 obj%localization_threshold_ispresent = .FALSE. 3206 END IF 3207 ! 3208 ! 3209 obj%lwrite = .TRUE. 3210 ! 3211 END SUBROUTINE qes_read_hybrid 3212 ! 3213 ! 3214 SUBROUTINE qes_read_qpoint_grid(xml_node, obj, ierr ) 3215 ! 3216 IMPLICIT NONE 3217 ! 3218 TYPE(Node), INTENT(IN), POINTER :: xml_node 3219 TYPE(qpoint_grid_type), INTENT(OUT) :: obj 3220 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 3221 ! 3222 TYPE(Node), POINTER :: tmp_node 3223 TYPE(NodeList), POINTER :: tmp_node_list 3224 INTEGER :: tmp_node_list_size, index, iostat_ 3225 ! 3226 obj%tagname = getTagName(xml_node) 3227 ! 3228 3229 IF (hasAttribute(xml_node, "nqx1")) THEN 3230 CALL extractDataAttribute(xml_node, "nqx1", obj%nqx1) 3231 ELSE 3232 IF ( PRESENT(ierr) ) THEN 3233 CALL infomsg ( "qes_read: qpoint_gridType",& 3234 "required attribute nqx1 not found" ) 3235 ierr = ierr + 1 3236 ELSE 3237 CALL errore ("qes_read: qpoint_gridType",& 3238 "required attribute nqx1 not found", 10 ) 3239 END IF 3240 END IF 3241 ! 3242 IF (hasAttribute(xml_node, "nqx2")) THEN 3243 CALL extractDataAttribute(xml_node, "nqx2", obj%nqx2) 3244 ELSE 3245 IF ( PRESENT(ierr) ) THEN 3246 CALL infomsg ( "qes_read: qpoint_gridType",& 3247 "required attribute nqx2 not found" ) 3248 ierr = ierr + 1 3249 ELSE 3250 CALL errore ("qes_read: qpoint_gridType",& 3251 "required attribute nqx2 not found", 10 ) 3252 END IF 3253 END IF 3254 ! 3255 IF (hasAttribute(xml_node, "nqx3")) THEN 3256 CALL extractDataAttribute(xml_node, "nqx3", obj%nqx3) 3257 ELSE 3258 IF ( PRESENT(ierr) ) THEN 3259 CALL infomsg ( "qes_read: qpoint_gridType",& 3260 "required attribute nqx3 not found" ) 3261 ierr = ierr + 1 3262 ELSE 3263 CALL errore ("qes_read: qpoint_gridType",& 3264 "required attribute nqx3 not found", 10 ) 3265 END IF 3266 END IF 3267 ! 3268 3269 3270 3271 ! 3272 ! 3273 CALL extractDataContent(xml_node, obj%qpoint_grid ) 3274 ! 3275 obj%lwrite = .TRUE. 3276 ! 3277 END SUBROUTINE qes_read_qpoint_grid 3278 ! 3279 ! 3280 SUBROUTINE qes_read_dftU(xml_node, obj, ierr ) 3281 ! 3282 IMPLICIT NONE 3283 ! 3284 TYPE(Node), INTENT(IN), POINTER :: xml_node 3285 TYPE(dftU_type), INTENT(OUT) :: obj 3286 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 3287 ! 3288 TYPE(Node), POINTER :: tmp_node 3289 TYPE(NodeList), POINTER :: tmp_node_list 3290 INTEGER :: tmp_node_list_size, index, iostat_ 3291 ! 3292 obj%tagname = getTagName(xml_node) 3293 ! 3294 3295 3296 3297 3298 ! 3299 tmp_node_list => getElementsByTagname(xml_node, "lda_plus_u_kind") 3300 tmp_node_list_size = getLength(tmp_node_list) 3301 ! 3302 IF (tmp_node_list_size > 1) THEN 3303 IF (PRESENT(ierr) ) THEN 3304 CALL infomsg("qes_read:dftUType","lda_plus_u_kind: too many occurrences") 3305 ierr = ierr + 1 3306 ELSE 3307 CALL errore("qes_read:dftUType","lda_plus_u_kind: too many occurrences",10) 3308 END IF 3309 END IF 3310 ! 3311 IF (tmp_node_list_size>0) THEN 3312 obj%lda_plus_u_kind_ispresent = .TRUE. 3313 tmp_node => item(tmp_node_list, 0) 3314 CALL extractDataContent(tmp_node, obj%lda_plus_u_kind , IOSTAT = iostat_) 3315 IF ( iostat_ /= 0 ) THEN 3316 IF ( PRESENT (ierr ) ) THEN 3317 CALL infomsg("qes_read:dftUType","error reading lda_plus_u_kind") 3318 ierr = ierr + 1 3319 ELSE 3320 CALL errore ("qes_read:dftUType","error reading lda_plus_u_kind",10) 3321 END IF 3322 END IF 3323 ELSE 3324 obj%lda_plus_u_kind_ispresent = .FALSE. 3325 END IF 3326 ! 3327 tmp_node_list => getElementsByTagname(xml_node, "Hubbard_U") 3328 tmp_node_list_size = getLength(tmp_node_list) 3329 ! 3330 ! 3331 IF (tmp_node_list_size>0) THEN 3332 obj%Hubbard_U_ispresent = .TRUE. 3333 ELSE 3334 obj%Hubbard_U_ispresent = .FALSE. 3335 END IF 3336 obj%ndim_Hubbard_U = tmp_node_list_size 3337 ALLOCATE(obj%Hubbard_U(tmp_node_list_size)) 3338 DO index=1,tmp_node_list_size 3339 tmp_node => item( tmp_node_list, index-1 ) 3340 CALL qes_read_HubbardCommon(tmp_node, obj%Hubbard_U(index), ierr ) 3341 END DO 3342 ! 3343 tmp_node_list => getElementsByTagname(xml_node, "Hubbard_J0") 3344 tmp_node_list_size = getLength(tmp_node_list) 3345 ! 3346 ! 3347 IF (tmp_node_list_size>0) THEN 3348 obj%Hubbard_J0_ispresent = .TRUE. 3349 ELSE 3350 obj%Hubbard_J0_ispresent = .FALSE. 3351 END IF 3352 obj%ndim_Hubbard_J0 = tmp_node_list_size 3353 ALLOCATE(obj%Hubbard_J0(tmp_node_list_size)) 3354 DO index=1,tmp_node_list_size 3355 tmp_node => item( tmp_node_list, index-1 ) 3356 CALL qes_read_HubbardCommon(tmp_node, obj%Hubbard_J0(index), ierr ) 3357 END DO 3358 ! 3359 tmp_node_list => getElementsByTagname(xml_node, "Hubbard_alpha") 3360 tmp_node_list_size = getLength(tmp_node_list) 3361 ! 3362 ! 3363 IF (tmp_node_list_size>0) THEN 3364 obj%Hubbard_alpha_ispresent = .TRUE. 3365 ELSE 3366 obj%Hubbard_alpha_ispresent = .FALSE. 3367 END IF 3368 obj%ndim_Hubbard_alpha = tmp_node_list_size 3369 ALLOCATE(obj%Hubbard_alpha(tmp_node_list_size)) 3370 DO index=1,tmp_node_list_size 3371 tmp_node => item( tmp_node_list, index-1 ) 3372 CALL qes_read_HubbardCommon(tmp_node, obj%Hubbard_alpha(index), ierr ) 3373 END DO 3374 ! 3375 tmp_node_list => getElementsByTagname(xml_node, "Hubbard_beta") 3376 tmp_node_list_size = getLength(tmp_node_list) 3377 ! 3378 ! 3379 IF (tmp_node_list_size>0) THEN 3380 obj%Hubbard_beta_ispresent = .TRUE. 3381 ELSE 3382 obj%Hubbard_beta_ispresent = .FALSE. 3383 END IF 3384 obj%ndim_Hubbard_beta = tmp_node_list_size 3385 ALLOCATE(obj%Hubbard_beta(tmp_node_list_size)) 3386 DO index=1,tmp_node_list_size 3387 tmp_node => item( tmp_node_list, index-1 ) 3388 CALL qes_read_HubbardCommon(tmp_node, obj%Hubbard_beta(index), ierr ) 3389 END DO 3390 ! 3391 tmp_node_list => getElementsByTagname(xml_node, "Hubbard_J") 3392 tmp_node_list_size = getLength(tmp_node_list) 3393 ! 3394 ! 3395 IF (tmp_node_list_size>0) THEN 3396 obj%Hubbard_J_ispresent = .TRUE. 3397 ELSE 3398 obj%Hubbard_J_ispresent = .FALSE. 3399 END IF 3400 obj%ndim_Hubbard_J = tmp_node_list_size 3401 ALLOCATE(obj%Hubbard_J(tmp_node_list_size)) 3402 DO index=1,tmp_node_list_size 3403 tmp_node => item( tmp_node_list, index-1 ) 3404 CALL qes_read_HubbardJ(tmp_node, obj%Hubbard_J(index), ierr ) 3405 END DO 3406 ! 3407 tmp_node_list => getElementsByTagname(xml_node, "starting_ns") 3408 tmp_node_list_size = getLength(tmp_node_list) 3409 ! 3410 ! 3411 IF (tmp_node_list_size>0) THEN 3412 obj%starting_ns_ispresent = .TRUE. 3413 ELSE 3414 obj%starting_ns_ispresent = .FALSE. 3415 END IF 3416 obj%ndim_starting_ns = tmp_node_list_size 3417 ALLOCATE(obj%starting_ns(tmp_node_list_size)) 3418 DO index=1,tmp_node_list_size 3419 tmp_node => item( tmp_node_list, index-1 ) 3420 CALL qes_read_starting_ns(tmp_node, obj%starting_ns(index), ierr ) 3421 END DO 3422 ! 3423 tmp_node_list => getElementsByTagname(xml_node, "Hubbard_ns") 3424 tmp_node_list_size = getLength(tmp_node_list) 3425 ! 3426 ! 3427 IF (tmp_node_list_size>0) THEN 3428 obj%Hubbard_ns_ispresent = .TRUE. 3429 ELSE 3430 obj%Hubbard_ns_ispresent = .FALSE. 3431 END IF 3432 obj%ndim_Hubbard_ns = tmp_node_list_size 3433 ALLOCATE(obj%Hubbard_ns(tmp_node_list_size)) 3434 DO index=1,tmp_node_list_size 3435 tmp_node => item( tmp_node_list, index-1 ) 3436 CALL qes_read_Hubbard_ns(tmp_node, obj%Hubbard_ns(index), ierr ) 3437 END DO 3438 ! 3439 tmp_node_list => getElementsByTagname(xml_node, "U_projection_type") 3440 tmp_node_list_size = getLength(tmp_node_list) 3441 ! 3442 IF (tmp_node_list_size > 1) THEN 3443 IF (PRESENT(ierr) ) THEN 3444 CALL infomsg("qes_read:dftUType","U_projection_type: too many occurrences") 3445 ierr = ierr + 1 3446 ELSE 3447 CALL errore("qes_read:dftUType","U_projection_type: too many occurrences",10) 3448 END IF 3449 END IF 3450 ! 3451 IF (tmp_node_list_size>0) THEN 3452 obj%U_projection_type_ispresent = .TRUE. 3453 tmp_node => item(tmp_node_list, 0) 3454 CALL extractDataContent(tmp_node, obj%U_projection_type , IOSTAT = iostat_) 3455 IF ( iostat_ /= 0 ) THEN 3456 IF ( PRESENT (ierr ) ) THEN 3457 CALL infomsg("qes_read:dftUType","error reading U_projection_type") 3458 ierr = ierr + 1 3459 ELSE 3460 CALL errore ("qes_read:dftUType","error reading U_projection_type",10) 3461 END IF 3462 END IF 3463 ELSE 3464 obj%U_projection_type_ispresent = .FALSE. 3465 END IF 3466 ! 3467 tmp_node_list => getElementsByTagname(xml_node, "Hubbard_back") 3468 tmp_node_list_size = getLength(tmp_node_list) 3469 ! 3470 ! 3471 IF (tmp_node_list_size>0) THEN 3472 obj%Hubbard_back_ispresent = .TRUE. 3473 ELSE 3474 obj%Hubbard_back_ispresent = .FALSE. 3475 END IF 3476 obj%ndim_Hubbard_back = tmp_node_list_size 3477 ALLOCATE(obj%Hubbard_back(tmp_node_list_size)) 3478 DO index=1,tmp_node_list_size 3479 tmp_node => item( tmp_node_list, index-1 ) 3480 CALL qes_read_HubbardBack(tmp_node, obj%Hubbard_back(index), ierr ) 3481 END DO 3482 ! 3483 tmp_node_list => getElementsByTagname(xml_node, "Hubbard_U_back") 3484 tmp_node_list_size = getLength(tmp_node_list) 3485 ! 3486 ! 3487 IF (tmp_node_list_size>0) THEN 3488 obj%Hubbard_U_back_ispresent = .TRUE. 3489 ELSE 3490 obj%Hubbard_U_back_ispresent = .FALSE. 3491 END IF 3492 obj%ndim_Hubbard_U_back = tmp_node_list_size 3493 ALLOCATE(obj%Hubbard_U_back(tmp_node_list_size)) 3494 DO index=1,tmp_node_list_size 3495 tmp_node => item( tmp_node_list, index-1 ) 3496 CALL qes_read_HubbardCommon(tmp_node, obj%Hubbard_U_back(index), ierr ) 3497 END DO 3498 ! 3499 tmp_node_list => getElementsByTagname(xml_node, "Hubbard_alpha_back") 3500 tmp_node_list_size = getLength(tmp_node_list) 3501 ! 3502 ! 3503 IF (tmp_node_list_size>0) THEN 3504 obj%Hubbard_alpha_back_ispresent = .TRUE. 3505 ELSE 3506 obj%Hubbard_alpha_back_ispresent = .FALSE. 3507 END IF 3508 obj%ndim_Hubbard_alpha_back = tmp_node_list_size 3509 ALLOCATE(obj%Hubbard_alpha_back(tmp_node_list_size)) 3510 DO index=1,tmp_node_list_size 3511 tmp_node => item( tmp_node_list, index-1 ) 3512 CALL qes_read_HubbardCommon(tmp_node, obj%Hubbard_alpha_back(index), ierr ) 3513 END DO 3514 ! 3515 tmp_node_list => getElementsByTagname(xml_node, "Hubbard_ns_nc") 3516 tmp_node_list_size = getLength(tmp_node_list) 3517 ! 3518 ! 3519 IF (tmp_node_list_size>0) THEN 3520 obj%Hubbard_ns_nc_ispresent = .TRUE. 3521 ELSE 3522 obj%Hubbard_ns_nc_ispresent = .FALSE. 3523 END IF 3524 obj%ndim_Hubbard_ns_nc = tmp_node_list_size 3525 ALLOCATE(obj%Hubbard_ns_nc(tmp_node_list_size)) 3526 DO index=1,tmp_node_list_size 3527 tmp_node => item( tmp_node_list, index-1 ) 3528 CALL qes_read_Hubbard_ns(tmp_node, obj%Hubbard_ns_nc(index), ierr ) 3529 END DO 3530 ! 3531 ! 3532 obj%lwrite = .TRUE. 3533 ! 3534 END SUBROUTINE qes_read_dftU 3535 ! 3536 ! 3537 SUBROUTINE qes_read_HubbardCommon(xml_node, obj, ierr ) 3538 ! 3539 IMPLICIT NONE 3540 ! 3541 TYPE(Node), INTENT(IN), POINTER :: xml_node 3542 TYPE(HubbardCommon_type), INTENT(OUT) :: obj 3543 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 3544 ! 3545 TYPE(Node), POINTER :: tmp_node 3546 TYPE(NodeList), POINTER :: tmp_node_list 3547 INTEGER :: tmp_node_list_size, index, iostat_ 3548 ! 3549 obj%tagname = getTagName(xml_node) 3550 ! 3551 3552 IF (hasAttribute(xml_node, "specie")) THEN 3553 CALL extractDataAttribute(xml_node, "specie", obj%specie) 3554 ELSE 3555 IF ( PRESENT(ierr) ) THEN 3556 CALL infomsg ( "qes_read: HubbardCommonType",& 3557 "required attribute specie not found" ) 3558 ierr = ierr + 1 3559 ELSE 3560 CALL errore ("qes_read: HubbardCommonType",& 3561 "required attribute specie not found", 10 ) 3562 END IF 3563 END IF 3564 ! 3565 IF (hasAttribute(xml_node, "label")) THEN 3566 CALL extractDataAttribute(xml_node, "label", obj%label) 3567 obj%label_ispresent = .TRUE. 3568 ELSE 3569 obj%label_ispresent = .FALSE. 3570 END IF 3571 ! 3572 3573 3574 3575 ! 3576 ! 3577 CALL extractDataContent(xml_node, obj%HubbardCommon ) 3578 ! 3579 obj%lwrite = .TRUE. 3580 ! 3581 END SUBROUTINE qes_read_HubbardCommon 3582 ! 3583 ! 3584 SUBROUTINE qes_read_HubbardJ(xml_node, obj, ierr ) 3585 ! 3586 IMPLICIT NONE 3587 ! 3588 TYPE(Node), INTENT(IN), POINTER :: xml_node 3589 TYPE(HubbardJ_type), INTENT(OUT) :: obj 3590 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 3591 ! 3592 TYPE(Node), POINTER :: tmp_node 3593 TYPE(NodeList), POINTER :: tmp_node_list 3594 INTEGER :: tmp_node_list_size, index, iostat_ 3595 ! 3596 obj%tagname = getTagName(xml_node) 3597 ! 3598 3599 IF (hasAttribute(xml_node, "specie")) THEN 3600 CALL extractDataAttribute(xml_node, "specie", obj%specie) 3601 ELSE 3602 IF ( PRESENT(ierr) ) THEN 3603 CALL infomsg ( "qes_read: HubbardJType",& 3604 "required attribute specie not found" ) 3605 ierr = ierr + 1 3606 ELSE 3607 CALL errore ("qes_read: HubbardJType",& 3608 "required attribute specie not found", 10 ) 3609 END IF 3610 END IF 3611 ! 3612 IF (hasAttribute(xml_node, "label")) THEN 3613 CALL extractDataAttribute(xml_node, "label", obj%label) 3614 ELSE 3615 IF ( PRESENT(ierr) ) THEN 3616 CALL infomsg ( "qes_read: HubbardJType",& 3617 "required attribute label not found" ) 3618 ierr = ierr + 1 3619 ELSE 3620 CALL errore ("qes_read: HubbardJType",& 3621 "required attribute label not found", 10 ) 3622 END IF 3623 END IF 3624 ! 3625 3626 3627 3628 ! 3629 ! 3630 CALL extractDataContent(xml_node, obj%HubbardJ ) 3631 ! 3632 obj%lwrite = .TRUE. 3633 ! 3634 END SUBROUTINE qes_read_HubbardJ 3635 ! 3636 ! 3637 SUBROUTINE qes_read_starting_ns(xml_node, obj, ierr ) 3638 ! 3639 IMPLICIT NONE 3640 ! 3641 TYPE(Node), INTENT(IN), POINTER :: xml_node 3642 TYPE(starting_ns_type), INTENT(OUT) :: obj 3643 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 3644 ! 3645 TYPE(Node), POINTER :: tmp_node 3646 TYPE(NodeList), POINTER :: tmp_node_list 3647 INTEGER :: tmp_node_list_size, index, iostat_ 3648 ! 3649 obj%tagname = getTagName(xml_node) 3650 ! 3651 3652 IF (hasAttribute(xml_node, "specie")) THEN 3653 CALL extractDataAttribute(xml_node, "specie", obj%specie) 3654 ELSE 3655 IF ( PRESENT(ierr) ) THEN 3656 CALL infomsg ( "qes_read: starting_nsType",& 3657 "required attribute specie not found" ) 3658 ierr = ierr + 1 3659 ELSE 3660 CALL errore ("qes_read: starting_nsType",& 3661 "required attribute specie not found", 10 ) 3662 END IF 3663 END IF 3664 ! 3665 IF (hasAttribute(xml_node, "label")) THEN 3666 CALL extractDataAttribute(xml_node, "label", obj%label) 3667 ELSE 3668 IF ( PRESENT(ierr) ) THEN 3669 CALL infomsg ( "qes_read: starting_nsType",& 3670 "required attribute label not found" ) 3671 ierr = ierr + 1 3672 ELSE 3673 CALL errore ("qes_read: starting_nsType",& 3674 "required attribute label not found", 10 ) 3675 END IF 3676 END IF 3677 ! 3678 IF (hasAttribute(xml_node, "spin")) THEN 3679 CALL extractDataAttribute(xml_node, "spin", obj%spin) 3680 ELSE 3681 IF ( PRESENT(ierr) ) THEN 3682 CALL infomsg ( "qes_read: starting_nsType",& 3683 "required attribute spin not found" ) 3684 ierr = ierr + 1 3685 ELSE 3686 CALL errore ("qes_read: starting_nsType",& 3687 "required attribute spin not found", 10 ) 3688 END IF 3689 END IF 3690 ! 3691 3692 IF (hasAttribute(xml_node, "size")) THEN 3693 CALL extractDataAttribute(xml_node, "size", obj%size) 3694 ELSE 3695 CALL errore ("qes_read: starting_nsType", & 3696 "mandatory size attribute not found in "//TRIM(obj%tagname), 12) 3697 END IF 3698 ! 3699 3700 ! 3701 ! 3702 ALLOCATE (obj%starting_ns(obj%size)) 3703 CALL extractDataContent(xml_node, obj%starting_ns ) 3704 ! 3705 obj%lwrite = .TRUE. 3706 ! 3707 END SUBROUTINE qes_read_starting_ns 3708 ! 3709 ! 3710 SUBROUTINE qes_read_Hubbard_ns(xml_node, obj, ierr ) 3711 ! 3712 IMPLICIT NONE 3713 ! 3714 TYPE(Node), INTENT(IN), POINTER :: xml_node 3715 TYPE(Hubbard_ns_type), INTENT(OUT) :: obj 3716 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 3717 ! 3718 TYPE(Node), POINTER :: tmp_node 3719 TYPE(NodeList), POINTER :: tmp_node_list 3720 INTEGER :: tmp_node_list_size, index, iostat_ 3721 INTEGER :: i, length 3722 ! 3723 obj%tagname = getTagName(xml_node) 3724 ! 3725 3726 IF (hasAttribute(xml_node, "specie")) THEN 3727 CALL extractDataAttribute(xml_node, "specie", obj%specie) 3728 ELSE 3729 IF ( PRESENT(ierr) ) THEN 3730 CALL infomsg ( "qes_read: Hubbard_nsType",& 3731 "required attribute specie not found" ) 3732 ierr = ierr + 1 3733 ELSE 3734 CALL errore ("qes_read: Hubbard_nsType",& 3735 "required attribute specie not found", 10 ) 3736 END IF 3737 END IF 3738 ! 3739 IF (hasAttribute(xml_node, "label")) THEN 3740 CALL extractDataAttribute(xml_node, "label", obj%label) 3741 ELSE 3742 IF ( PRESENT(ierr) ) THEN 3743 CALL infomsg ( "qes_read: Hubbard_nsType",& 3744 "required attribute label not found" ) 3745 ierr = ierr + 1 3746 ELSE 3747 CALL errore ("qes_read: Hubbard_nsType",& 3748 "required attribute label not found", 10 ) 3749 END IF 3750 END IF 3751 ! 3752 IF (hasAttribute(xml_node, "spin")) THEN 3753 CALL extractDataAttribute(xml_node, "spin", obj%spin) 3754 ELSE 3755 IF ( PRESENT(ierr) ) THEN 3756 CALL infomsg ( "qes_read: Hubbard_nsType",& 3757 "required attribute spin not found" ) 3758 ierr = ierr + 1 3759 ELSE 3760 CALL errore ("qes_read: Hubbard_nsType",& 3761 "required attribute spin not found", 10 ) 3762 END IF 3763 END IF 3764 ! 3765 IF (hasAttribute(xml_node, "index")) THEN 3766 CALL extractDataAttribute(xml_node, "index", obj%index) 3767 ELSE 3768 IF ( PRESENT(ierr) ) THEN 3769 CALL infomsg ( "qes_read: Hubbard_nsType",& 3770 "required attribute index not found" ) 3771 ierr = ierr + 1 3772 ELSE 3773 CALL errore ("qes_read: Hubbard_nsType",& 3774 "required attribute index not found", 10 ) 3775 END IF 3776 END IF 3777 ! 3778 3779 IF (hasAttribute(xml_node, "rank")) THEN 3780 CALL extractDataAttribute(xml_node, "rank", obj%rank) 3781 ELSE 3782 CALL errore ("qes_read: Hubbard_nsType",& 3783 "required attribute rank not found, can't read further, stopping", 10 ) 3784 END IF 3785 ALLOCATE (obj%dims(obj%rank)) 3786 IF (hasAttribute(xml_node, "dims")) THEN 3787 CALL extractDataAttribute(xml_node, "dims", obj%dims) 3788 ELSE 3789 CALL errore ("qes_read: Hubbard_nsType",& 3790 "required attribute dims not found, can't read further, stopping", 10 ) 3791 END IF 3792 IF (hasAttribute(xml_node,"order")) THEN 3793 CALL extractDataAttribute(xml_node, "order", obj%order) 3794 ELSE 3795 obj%order = "F" 3796 END IF 3797 ! 3798 3799 ! 3800 ! 3801 length = 1 3802 DO i =1, obj%rank 3803 length = length * obj%dims(i) 3804 END DO 3805 ALLOCATE (obj%Hubbard_ns(length) ) 3806 CALL extractDataContent(xml_node, obj%Hubbard_ns ) 3807 ! 3808 obj%lwrite = .TRUE. 3809 ! 3810 END SUBROUTINE qes_read_Hubbard_ns 3811 ! 3812 ! 3813 SUBROUTINE qes_read_HubbardBack(xml_node, obj, ierr ) 3814 ! 3815 IMPLICIT NONE 3816 ! 3817 TYPE(Node), INTENT(IN), POINTER :: xml_node 3818 TYPE(HubbardBack_type), INTENT(OUT) :: obj 3819 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 3820 ! 3821 TYPE(Node), POINTER :: tmp_node 3822 TYPE(NodeList), POINTER :: tmp_node_list 3823 INTEGER :: tmp_node_list_size, index, iostat_ 3824 ! 3825 obj%tagname = getTagName(xml_node) 3826 ! 3827 3828 IF (hasAttribute(xml_node, "species")) THEN 3829 CALL extractDataAttribute(xml_node, "species", obj%species) 3830 ELSE 3831 IF ( PRESENT(ierr) ) THEN 3832 CALL infomsg ( "qes_read: HubbardBackType",& 3833 "required attribute species not found" ) 3834 ierr = ierr + 1 3835 ELSE 3836 CALL errore ("qes_read: HubbardBackType",& 3837 "required attribute species not found", 10 ) 3838 END IF 3839 END IF 3840 ! 3841 3842 3843 3844 ! 3845 tmp_node_list => getElementsByTagname(xml_node, "background") 3846 tmp_node_list_size = getLength(tmp_node_list) 3847 ! 3848 IF (tmp_node_list_size /= 1) THEN 3849 IF (PRESENT(ierr) ) THEN 3850 CALL infomsg("qes_read:HubbardBackType","background: wrong number of occurrences") 3851 ierr = ierr + 1 3852 ELSE 3853 CALL errore("qes_read:HubbardBackType","background: wrong number of occurrences",10) 3854 END IF 3855 END IF 3856 ! 3857 tmp_node => item(tmp_node_list, 0) 3858 IF (ASSOCIATED(tmp_node))& 3859 CALL extractDataContent(tmp_node, obj%background, IOSTAT = iostat_ ) 3860 IF ( iostat_ /= 0 ) THEN 3861 IF ( PRESENT (ierr ) ) THEN 3862 CALL infomsg("qes_read:HubbardBackType","error reading background") 3863 ierr = ierr + 1 3864 ELSE 3865 CALL errore ("qes_read:HubbardBackType","error reading background",10) 3866 END IF 3867 END IF 3868 ! 3869 tmp_node_list => getElementsByTagname(xml_node, "l_number") 3870 tmp_node_list_size = getLength(tmp_node_list) 3871 ! 3872 IF (tmp_node_list_size < 1) THEN 3873 IF (PRESENT(ierr) ) THEN 3874 CALL infomsg("qes_read:HubbardBackType","l_number: not enough elements") 3875 ierr = ierr + 1 3876 ELSE 3877 CALL errore("qes_read:HubbardBackType","l_number: not enough elements",10) 3878 END IF 3879 END IF 3880 ! 3881 obj%ndim_l_number = tmp_node_list_size 3882 ALLOCATE(obj%l_number(tmp_node_list_size)) 3883 DO index=1,tmp_node_list_size 3884 tmp_node => item( tmp_node_list, index-1 ) 3885 CALL qes_read_backL(tmp_node, obj%l_number(index), ierr ) 3886 END DO 3887 ! 3888 ! 3889 obj%lwrite = .TRUE. 3890 ! 3891 END SUBROUTINE qes_read_HubbardBack 3892 ! 3893 ! 3894 SUBROUTINE qes_read_backL(xml_node, obj, ierr ) 3895 ! 3896 IMPLICIT NONE 3897 ! 3898 TYPE(Node), INTENT(IN), POINTER :: xml_node 3899 TYPE(backL_type), INTENT(OUT) :: obj 3900 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 3901 ! 3902 TYPE(Node), POINTER :: tmp_node 3903 TYPE(NodeList), POINTER :: tmp_node_list 3904 INTEGER :: tmp_node_list_size, index, iostat_ 3905 ! 3906 obj%tagname = getTagName(xml_node) 3907 ! 3908 3909 IF (hasAttribute(xml_node, "l_index")) THEN 3910 CALL extractDataAttribute(xml_node, "l_index", obj%l_index) 3911 ELSE 3912 IF ( PRESENT(ierr) ) THEN 3913 CALL infomsg ( "qes_read: backLType",& 3914 "required attribute l_index not found" ) 3915 ierr = ierr + 1 3916 ELSE 3917 CALL errore ("qes_read: backLType",& 3918 "required attribute l_index not found", 10 ) 3919 END IF 3920 END IF 3921 ! 3922 3923 3924 3925 ! 3926 ! 3927 CALL extractDataContent(xml_node, obj%backL ) 3928 ! 3929 obj%lwrite = .TRUE. 3930 ! 3931 END SUBROUTINE qes_read_backL 3932 ! 3933 ! 3934 SUBROUTINE qes_read_vdW(xml_node, obj, ierr ) 3935 ! 3936 IMPLICIT NONE 3937 ! 3938 TYPE(Node), INTENT(IN), POINTER :: xml_node 3939 TYPE(vdW_type), INTENT(OUT) :: obj 3940 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 3941 ! 3942 TYPE(Node), POINTER :: tmp_node 3943 TYPE(NodeList), POINTER :: tmp_node_list 3944 INTEGER :: tmp_node_list_size, index, iostat_ 3945 ! 3946 obj%tagname = getTagName(xml_node) 3947 ! 3948 3949 3950 3951 3952 ! 3953 tmp_node_list => getElementsByTagname(xml_node, "vdw_corr") 3954 tmp_node_list_size = getLength(tmp_node_list) 3955 ! 3956 IF (tmp_node_list_size > 1) THEN 3957 IF (PRESENT(ierr) ) THEN 3958 CALL infomsg("qes_read:vdWType","vdw_corr: too many occurrences") 3959 ierr = ierr + 1 3960 ELSE 3961 CALL errore("qes_read:vdWType","vdw_corr: too many occurrences",10) 3962 END IF 3963 END IF 3964 ! 3965 IF (tmp_node_list_size>0) THEN 3966 obj%vdw_corr_ispresent = .TRUE. 3967 tmp_node => item(tmp_node_list, 0) 3968 CALL extractDataContent(tmp_node, obj%vdw_corr , IOSTAT = iostat_) 3969 IF ( iostat_ /= 0 ) THEN 3970 IF ( PRESENT (ierr ) ) THEN 3971 CALL infomsg("qes_read:vdWType","error reading vdw_corr") 3972 ierr = ierr + 1 3973 ELSE 3974 CALL errore ("qes_read:vdWType","error reading vdw_corr",10) 3975 END IF 3976 END IF 3977 ELSE 3978 obj%vdw_corr_ispresent = .FALSE. 3979 END IF 3980 ! 3981 tmp_node_list => getElementsByTagname(xml_node, "dftd3_version") 3982 tmp_node_list_size = getLength(tmp_node_list) 3983 ! 3984 IF (tmp_node_list_size > 1) THEN 3985 IF (PRESENT(ierr) ) THEN 3986 CALL infomsg("qes_read:vdWType","dftd3_version: too many occurrences") 3987 ierr = ierr + 1 3988 ELSE 3989 CALL errore("qes_read:vdWType","dftd3_version: too many occurrences",10) 3990 END IF 3991 END IF 3992 ! 3993 IF (tmp_node_list_size>0) THEN 3994 obj%dftd3_version_ispresent = .TRUE. 3995 tmp_node => item(tmp_node_list, 0) 3996 CALL extractDataContent(tmp_node, obj%dftd3_version , IOSTAT = iostat_) 3997 IF ( iostat_ /= 0 ) THEN 3998 IF ( PRESENT (ierr ) ) THEN 3999 CALL infomsg("qes_read:vdWType","error reading dftd3_version") 4000 ierr = ierr + 1 4001 ELSE 4002 CALL errore ("qes_read:vdWType","error reading dftd3_version",10) 4003 END IF 4004 END IF 4005 ELSE 4006 obj%dftd3_version_ispresent = .FALSE. 4007 END IF 4008 ! 4009 tmp_node_list => getElementsByTagname(xml_node, "dftd3_threebody") 4010 tmp_node_list_size = getLength(tmp_node_list) 4011 ! 4012 IF (tmp_node_list_size > 1) THEN 4013 IF (PRESENT(ierr) ) THEN 4014 CALL infomsg("qes_read:vdWType","dftd3_threebody: too many occurrences") 4015 ierr = ierr + 1 4016 ELSE 4017 CALL errore("qes_read:vdWType","dftd3_threebody: too many occurrences",10) 4018 END IF 4019 END IF 4020 ! 4021 IF (tmp_node_list_size>0) THEN 4022 obj%dftd3_threebody_ispresent = .TRUE. 4023 tmp_node => item(tmp_node_list, 0) 4024 CALL extractDataContent(tmp_node, obj%dftd3_threebody , IOSTAT = iostat_) 4025 IF ( iostat_ /= 0 ) THEN 4026 IF ( PRESENT (ierr ) ) THEN 4027 CALL infomsg("qes_read:vdWType","error reading dftd3_threebody") 4028 ierr = ierr + 1 4029 ELSE 4030 CALL errore ("qes_read:vdWType","error reading dftd3_threebody",10) 4031 END IF 4032 END IF 4033 ELSE 4034 obj%dftd3_threebody_ispresent = .FALSE. 4035 END IF 4036 ! 4037 tmp_node_list => getElementsByTagname(xml_node, "non_local_term") 4038 tmp_node_list_size = getLength(tmp_node_list) 4039 ! 4040 IF (tmp_node_list_size > 1) THEN 4041 IF (PRESENT(ierr) ) THEN 4042 CALL infomsg("qes_read:vdWType","non_local_term: too many occurrences") 4043 ierr = ierr + 1 4044 ELSE 4045 CALL errore("qes_read:vdWType","non_local_term: too many occurrences",10) 4046 END IF 4047 END IF 4048 ! 4049 IF (tmp_node_list_size>0) THEN 4050 obj%non_local_term_ispresent = .TRUE. 4051 tmp_node => item(tmp_node_list, 0) 4052 CALL extractDataContent(tmp_node, obj%non_local_term , IOSTAT = iostat_) 4053 IF ( iostat_ /= 0 ) THEN 4054 IF ( PRESENT (ierr ) ) THEN 4055 CALL infomsg("qes_read:vdWType","error reading non_local_term") 4056 ierr = ierr + 1 4057 ELSE 4058 CALL errore ("qes_read:vdWType","error reading non_local_term",10) 4059 END IF 4060 END IF 4061 ELSE 4062 obj%non_local_term_ispresent = .FALSE. 4063 END IF 4064 ! 4065 tmp_node_list => getElementsByTagname(xml_node, "functional") 4066 tmp_node_list_size = getLength(tmp_node_list) 4067 ! 4068 IF (tmp_node_list_size > 1) THEN 4069 IF (PRESENT(ierr) ) THEN 4070 CALL infomsg("qes_read:vdWType","functional: too many occurrences") 4071 ierr = ierr + 1 4072 ELSE 4073 CALL errore("qes_read:vdWType","functional: too many occurrences",10) 4074 END IF 4075 END IF 4076 ! 4077 IF (tmp_node_list_size>0) THEN 4078 obj%functional_ispresent = .TRUE. 4079 tmp_node => item(tmp_node_list, 0) 4080 CALL extractDataContent(tmp_node, obj%functional , IOSTAT = iostat_) 4081 IF ( iostat_ /= 0 ) THEN 4082 IF ( PRESENT (ierr ) ) THEN 4083 CALL infomsg("qes_read:vdWType","error reading functional") 4084 ierr = ierr + 1 4085 ELSE 4086 CALL errore ("qes_read:vdWType","error reading functional",10) 4087 END IF 4088 END IF 4089 ELSE 4090 obj%functional_ispresent = .FALSE. 4091 END IF 4092 ! 4093 tmp_node_list => getElementsByTagname(xml_node, "total_energy_term") 4094 tmp_node_list_size = getLength(tmp_node_list) 4095 ! 4096 IF (tmp_node_list_size > 1) THEN 4097 IF (PRESENT(ierr) ) THEN 4098 CALL infomsg("qes_read:vdWType","total_energy_term: too many occurrences") 4099 ierr = ierr + 1 4100 ELSE 4101 CALL errore("qes_read:vdWType","total_energy_term: too many occurrences",10) 4102 END IF 4103 END IF 4104 ! 4105 IF (tmp_node_list_size>0) THEN 4106 obj%total_energy_term_ispresent = .TRUE. 4107 tmp_node => item(tmp_node_list, 0) 4108 CALL extractDataContent(tmp_node, obj%total_energy_term , IOSTAT = iostat_) 4109 IF ( iostat_ /= 0 ) THEN 4110 IF ( PRESENT (ierr ) ) THEN 4111 CALL infomsg("qes_read:vdWType","error reading total_energy_term") 4112 ierr = ierr + 1 4113 ELSE 4114 CALL errore ("qes_read:vdWType","error reading total_energy_term",10) 4115 END IF 4116 END IF 4117 ELSE 4118 obj%total_energy_term_ispresent = .FALSE. 4119 END IF 4120 ! 4121 tmp_node_list => getElementsByTagname(xml_node, "london_s6") 4122 tmp_node_list_size = getLength(tmp_node_list) 4123 ! 4124 IF (tmp_node_list_size > 1) THEN 4125 IF (PRESENT(ierr) ) THEN 4126 CALL infomsg("qes_read:vdWType","london_s6: too many occurrences") 4127 ierr = ierr + 1 4128 ELSE 4129 CALL errore("qes_read:vdWType","london_s6: too many occurrences",10) 4130 END IF 4131 END IF 4132 ! 4133 IF (tmp_node_list_size>0) THEN 4134 obj%london_s6_ispresent = .TRUE. 4135 tmp_node => item(tmp_node_list, 0) 4136 CALL extractDataContent(tmp_node, obj%london_s6 , IOSTAT = iostat_) 4137 IF ( iostat_ /= 0 ) THEN 4138 IF ( PRESENT (ierr ) ) THEN 4139 CALL infomsg("qes_read:vdWType","error reading london_s6") 4140 ierr = ierr + 1 4141 ELSE 4142 CALL errore ("qes_read:vdWType","error reading london_s6",10) 4143 END IF 4144 END IF 4145 ELSE 4146 obj%london_s6_ispresent = .FALSE. 4147 END IF 4148 ! 4149 tmp_node_list => getElementsByTagname(xml_node, "ts_vdw_econv_thr") 4150 tmp_node_list_size = getLength(tmp_node_list) 4151 ! 4152 IF (tmp_node_list_size > 1) THEN 4153 IF (PRESENT(ierr) ) THEN 4154 CALL infomsg("qes_read:vdWType","ts_vdw_econv_thr: too many occurrences") 4155 ierr = ierr + 1 4156 ELSE 4157 CALL errore("qes_read:vdWType","ts_vdw_econv_thr: too many occurrences",10) 4158 END IF 4159 END IF 4160 ! 4161 IF (tmp_node_list_size>0) THEN 4162 obj%ts_vdw_econv_thr_ispresent = .TRUE. 4163 tmp_node => item(tmp_node_list, 0) 4164 CALL extractDataContent(tmp_node, obj%ts_vdw_econv_thr , IOSTAT = iostat_) 4165 IF ( iostat_ /= 0 ) THEN 4166 IF ( PRESENT (ierr ) ) THEN 4167 CALL infomsg("qes_read:vdWType","error reading ts_vdw_econv_thr") 4168 ierr = ierr + 1 4169 ELSE 4170 CALL errore ("qes_read:vdWType","error reading ts_vdw_econv_thr",10) 4171 END IF 4172 END IF 4173 ELSE 4174 obj%ts_vdw_econv_thr_ispresent = .FALSE. 4175 END IF 4176 ! 4177 tmp_node_list => getElementsByTagname(xml_node, "ts_vdw_isolated") 4178 tmp_node_list_size = getLength(tmp_node_list) 4179 ! 4180 IF (tmp_node_list_size > 1) THEN 4181 IF (PRESENT(ierr) ) THEN 4182 CALL infomsg("qes_read:vdWType","ts_vdw_isolated: too many occurrences") 4183 ierr = ierr + 1 4184 ELSE 4185 CALL errore("qes_read:vdWType","ts_vdw_isolated: too many occurrences",10) 4186 END IF 4187 END IF 4188 ! 4189 IF (tmp_node_list_size>0) THEN 4190 obj%ts_vdw_isolated_ispresent = .TRUE. 4191 tmp_node => item(tmp_node_list, 0) 4192 CALL extractDataContent(tmp_node, obj%ts_vdw_isolated , IOSTAT = iostat_) 4193 IF ( iostat_ /= 0 ) THEN 4194 IF ( PRESENT (ierr ) ) THEN 4195 CALL infomsg("qes_read:vdWType","error reading ts_vdw_isolated") 4196 ierr = ierr + 1 4197 ELSE 4198 CALL errore ("qes_read:vdWType","error reading ts_vdw_isolated",10) 4199 END IF 4200 END IF 4201 ELSE 4202 obj%ts_vdw_isolated_ispresent = .FALSE. 4203 END IF 4204 ! 4205 tmp_node_list => getElementsByTagname(xml_node, "london_rcut") 4206 tmp_node_list_size = getLength(tmp_node_list) 4207 ! 4208 IF (tmp_node_list_size > 1) THEN 4209 IF (PRESENT(ierr) ) THEN 4210 CALL infomsg("qes_read:vdWType","london_rcut: too many occurrences") 4211 ierr = ierr + 1 4212 ELSE 4213 CALL errore("qes_read:vdWType","london_rcut: too many occurrences",10) 4214 END IF 4215 END IF 4216 ! 4217 IF (tmp_node_list_size>0) THEN 4218 obj%london_rcut_ispresent = .TRUE. 4219 tmp_node => item(tmp_node_list, 0) 4220 CALL extractDataContent(tmp_node, obj%london_rcut , IOSTAT = iostat_) 4221 IF ( iostat_ /= 0 ) THEN 4222 IF ( PRESENT (ierr ) ) THEN 4223 CALL infomsg("qes_read:vdWType","error reading london_rcut") 4224 ierr = ierr + 1 4225 ELSE 4226 CALL errore ("qes_read:vdWType","error reading london_rcut",10) 4227 END IF 4228 END IF 4229 ELSE 4230 obj%london_rcut_ispresent = .FALSE. 4231 END IF 4232 ! 4233 tmp_node_list => getElementsByTagname(xml_node, "xdm_a1") 4234 tmp_node_list_size = getLength(tmp_node_list) 4235 ! 4236 IF (tmp_node_list_size > 1) THEN 4237 IF (PRESENT(ierr) ) THEN 4238 CALL infomsg("qes_read:vdWType","xdm_a1: too many occurrences") 4239 ierr = ierr + 1 4240 ELSE 4241 CALL errore("qes_read:vdWType","xdm_a1: too many occurrences",10) 4242 END IF 4243 END IF 4244 ! 4245 IF (tmp_node_list_size>0) THEN 4246 obj%xdm_a1_ispresent = .TRUE. 4247 tmp_node => item(tmp_node_list, 0) 4248 CALL extractDataContent(tmp_node, obj%xdm_a1 , IOSTAT = iostat_) 4249 IF ( iostat_ /= 0 ) THEN 4250 IF ( PRESENT (ierr ) ) THEN 4251 CALL infomsg("qes_read:vdWType","error reading xdm_a1") 4252 ierr = ierr + 1 4253 ELSE 4254 CALL errore ("qes_read:vdWType","error reading xdm_a1",10) 4255 END IF 4256 END IF 4257 ELSE 4258 obj%xdm_a1_ispresent = .FALSE. 4259 END IF 4260 ! 4261 tmp_node_list => getElementsByTagname(xml_node, "xdm_a2") 4262 tmp_node_list_size = getLength(tmp_node_list) 4263 ! 4264 IF (tmp_node_list_size > 1) THEN 4265 IF (PRESENT(ierr) ) THEN 4266 CALL infomsg("qes_read:vdWType","xdm_a2: too many occurrences") 4267 ierr = ierr + 1 4268 ELSE 4269 CALL errore("qes_read:vdWType","xdm_a2: too many occurrences",10) 4270 END IF 4271 END IF 4272 ! 4273 IF (tmp_node_list_size>0) THEN 4274 obj%xdm_a2_ispresent = .TRUE. 4275 tmp_node => item(tmp_node_list, 0) 4276 CALL extractDataContent(tmp_node, obj%xdm_a2 , IOSTAT = iostat_) 4277 IF ( iostat_ /= 0 ) THEN 4278 IF ( PRESENT (ierr ) ) THEN 4279 CALL infomsg("qes_read:vdWType","error reading xdm_a2") 4280 ierr = ierr + 1 4281 ELSE 4282 CALL errore ("qes_read:vdWType","error reading xdm_a2",10) 4283 END IF 4284 END IF 4285 ELSE 4286 obj%xdm_a2_ispresent = .FALSE. 4287 END IF 4288 ! 4289 tmp_node_list => getElementsByTagname(xml_node, "london_c6") 4290 tmp_node_list_size = getLength(tmp_node_list) 4291 ! 4292 ! 4293 IF (tmp_node_list_size>0) THEN 4294 obj%london_c6_ispresent = .TRUE. 4295 ELSE 4296 obj%london_c6_ispresent = .FALSE. 4297 END IF 4298 obj%ndim_london_c6 = tmp_node_list_size 4299 ALLOCATE(obj%london_c6(tmp_node_list_size)) 4300 DO index=1,tmp_node_list_size 4301 tmp_node => item( tmp_node_list, index-1 ) 4302 CALL qes_read_HubbardCommon(tmp_node, obj%london_c6(index), ierr ) 4303 END DO 4304 ! 4305 ! 4306 obj%lwrite = .TRUE. 4307 ! 4308 END SUBROUTINE qes_read_vdW 4309 ! 4310 ! 4311 SUBROUTINE qes_read_spin(xml_node, obj, ierr ) 4312 ! 4313 IMPLICIT NONE 4314 ! 4315 TYPE(Node), INTENT(IN), POINTER :: xml_node 4316 TYPE(spin_type), INTENT(OUT) :: obj 4317 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 4318 ! 4319 TYPE(Node), POINTER :: tmp_node 4320 TYPE(NodeList), POINTER :: tmp_node_list 4321 INTEGER :: tmp_node_list_size, index, iostat_ 4322 ! 4323 obj%tagname = getTagName(xml_node) 4324 ! 4325 4326 4327 4328 4329 ! 4330 tmp_node_list => getElementsByTagname(xml_node, "lsda") 4331 tmp_node_list_size = getLength(tmp_node_list) 4332 ! 4333 IF (tmp_node_list_size /= 1) THEN 4334 IF (PRESENT(ierr) ) THEN 4335 CALL infomsg("qes_read:spinType","lsda: wrong number of occurrences") 4336 ierr = ierr + 1 4337 ELSE 4338 CALL errore("qes_read:spinType","lsda: wrong number of occurrences",10) 4339 END IF 4340 END IF 4341 ! 4342 tmp_node => item(tmp_node_list, 0) 4343 IF (ASSOCIATED(tmp_node))& 4344 CALL extractDataContent(tmp_node, obj%lsda, IOSTAT = iostat_ ) 4345 IF ( iostat_ /= 0 ) THEN 4346 IF ( PRESENT (ierr ) ) THEN 4347 CALL infomsg("qes_read:spinType","error reading lsda") 4348 ierr = ierr + 1 4349 ELSE 4350 CALL errore ("qes_read:spinType","error reading lsda",10) 4351 END IF 4352 END IF 4353 ! 4354 tmp_node_list => getElementsByTagname(xml_node, "noncolin") 4355 tmp_node_list_size = getLength(tmp_node_list) 4356 ! 4357 IF (tmp_node_list_size /= 1) THEN 4358 IF (PRESENT(ierr) ) THEN 4359 CALL infomsg("qes_read:spinType","noncolin: wrong number of occurrences") 4360 ierr = ierr + 1 4361 ELSE 4362 CALL errore("qes_read:spinType","noncolin: wrong number of occurrences",10) 4363 END IF 4364 END IF 4365 ! 4366 tmp_node => item(tmp_node_list, 0) 4367 IF (ASSOCIATED(tmp_node))& 4368 CALL extractDataContent(tmp_node, obj%noncolin, IOSTAT = iostat_ ) 4369 IF ( iostat_ /= 0 ) THEN 4370 IF ( PRESENT (ierr ) ) THEN 4371 CALL infomsg("qes_read:spinType","error reading noncolin") 4372 ierr = ierr + 1 4373 ELSE 4374 CALL errore ("qes_read:spinType","error reading noncolin",10) 4375 END IF 4376 END IF 4377 ! 4378 tmp_node_list => getElementsByTagname(xml_node, "spinorbit") 4379 tmp_node_list_size = getLength(tmp_node_list) 4380 ! 4381 IF (tmp_node_list_size /= 1) THEN 4382 IF (PRESENT(ierr) ) THEN 4383 CALL infomsg("qes_read:spinType","spinorbit: wrong number of occurrences") 4384 ierr = ierr + 1 4385 ELSE 4386 CALL errore("qes_read:spinType","spinorbit: wrong number of occurrences",10) 4387 END IF 4388 END IF 4389 ! 4390 tmp_node => item(tmp_node_list, 0) 4391 IF (ASSOCIATED(tmp_node))& 4392 CALL extractDataContent(tmp_node, obj%spinorbit, IOSTAT = iostat_ ) 4393 IF ( iostat_ /= 0 ) THEN 4394 IF ( PRESENT (ierr ) ) THEN 4395 CALL infomsg("qes_read:spinType","error reading spinorbit") 4396 ierr = ierr + 1 4397 ELSE 4398 CALL errore ("qes_read:spinType","error reading spinorbit",10) 4399 END IF 4400 END IF 4401 ! 4402 ! 4403 obj%lwrite = .TRUE. 4404 ! 4405 END SUBROUTINE qes_read_spin 4406 ! 4407 ! 4408 SUBROUTINE qes_read_bands(xml_node, obj, ierr ) 4409 ! 4410 IMPLICIT NONE 4411 ! 4412 TYPE(Node), INTENT(IN), POINTER :: xml_node 4413 TYPE(bands_type), INTENT(OUT) :: obj 4414 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 4415 ! 4416 TYPE(Node), POINTER :: tmp_node 4417 TYPE(NodeList), POINTER :: tmp_node_list 4418 INTEGER :: tmp_node_list_size, index, iostat_ 4419 ! 4420 obj%tagname = getTagName(xml_node) 4421 ! 4422 4423 4424 4425 4426 ! 4427 tmp_node_list => getElementsByTagname(xml_node, "nbnd") 4428 tmp_node_list_size = getLength(tmp_node_list) 4429 ! 4430 IF (tmp_node_list_size > 1) THEN 4431 IF (PRESENT(ierr) ) THEN 4432 CALL infomsg("qes_read:bandsType","nbnd: too many occurrences") 4433 ierr = ierr + 1 4434 ELSE 4435 CALL errore("qes_read:bandsType","nbnd: too many occurrences",10) 4436 END IF 4437 END IF 4438 ! 4439 IF (tmp_node_list_size>0) THEN 4440 obj%nbnd_ispresent = .TRUE. 4441 tmp_node => item(tmp_node_list, 0) 4442 CALL extractDataContent(tmp_node, obj%nbnd , IOSTAT = iostat_) 4443 IF ( iostat_ /= 0 ) THEN 4444 IF ( PRESENT (ierr ) ) THEN 4445 CALL infomsg("qes_read:bandsType","error reading nbnd") 4446 ierr = ierr + 1 4447 ELSE 4448 CALL errore ("qes_read:bandsType","error reading nbnd",10) 4449 END IF 4450 END IF 4451 ELSE 4452 obj%nbnd_ispresent = .FALSE. 4453 END IF 4454 ! 4455 tmp_node_list => getElementsByTagname(xml_node, "smearing") 4456 tmp_node_list_size = getLength(tmp_node_list) 4457 ! 4458 IF (tmp_node_list_size > 1) THEN 4459 IF (PRESENT(ierr) ) THEN 4460 CALL infomsg("qes_read:bandsType","smearing: too many occurrences") 4461 ierr = ierr + 1 4462 ELSE 4463 CALL errore("qes_read:bandsType","smearing: too many occurrences",10) 4464 END IF 4465 END IF 4466 ! 4467 IF (tmp_node_list_size>0) THEN 4468 obj%smearing_ispresent = .TRUE. 4469 tmp_node => item(tmp_node_list, 0) 4470 CALL qes_read_smearing(tmp_node, obj%smearing, ierr ) 4471 ELSE 4472 obj%smearing_ispresent = .FALSE. 4473 END IF 4474 ! 4475 tmp_node_list => getElementsByTagname(xml_node, "tot_charge") 4476 tmp_node_list_size = getLength(tmp_node_list) 4477 ! 4478 IF (tmp_node_list_size > 1) THEN 4479 IF (PRESENT(ierr) ) THEN 4480 CALL infomsg("qes_read:bandsType","tot_charge: too many occurrences") 4481 ierr = ierr + 1 4482 ELSE 4483 CALL errore("qes_read:bandsType","tot_charge: too many occurrences",10) 4484 END IF 4485 END IF 4486 ! 4487 IF (tmp_node_list_size>0) THEN 4488 obj%tot_charge_ispresent = .TRUE. 4489 tmp_node => item(tmp_node_list, 0) 4490 CALL extractDataContent(tmp_node, obj%tot_charge , IOSTAT = iostat_) 4491 IF ( iostat_ /= 0 ) THEN 4492 IF ( PRESENT (ierr ) ) THEN 4493 CALL infomsg("qes_read:bandsType","error reading tot_charge") 4494 ierr = ierr + 1 4495 ELSE 4496 CALL errore ("qes_read:bandsType","error reading tot_charge",10) 4497 END IF 4498 END IF 4499 ELSE 4500 obj%tot_charge_ispresent = .FALSE. 4501 END IF 4502 ! 4503 tmp_node_list => getElementsByTagname(xml_node, "tot_magnetization") 4504 tmp_node_list_size = getLength(tmp_node_list) 4505 ! 4506 IF (tmp_node_list_size > 1) THEN 4507 IF (PRESENT(ierr) ) THEN 4508 CALL infomsg("qes_read:bandsType","tot_magnetization: too many occurrences") 4509 ierr = ierr + 1 4510 ELSE 4511 CALL errore("qes_read:bandsType","tot_magnetization: too many occurrences",10) 4512 END IF 4513 END IF 4514 ! 4515 IF (tmp_node_list_size>0) THEN 4516 obj%tot_magnetization_ispresent = .TRUE. 4517 tmp_node => item(tmp_node_list, 0) 4518 CALL extractDataContent(tmp_node, obj%tot_magnetization , IOSTAT = iostat_) 4519 IF ( iostat_ /= 0 ) THEN 4520 IF ( PRESENT (ierr ) ) THEN 4521 CALL infomsg("qes_read:bandsType","error reading tot_magnetization") 4522 ierr = ierr + 1 4523 ELSE 4524 CALL errore ("qes_read:bandsType","error reading tot_magnetization",10) 4525 END IF 4526 END IF 4527 ELSE 4528 obj%tot_magnetization_ispresent = .FALSE. 4529 END IF 4530 ! 4531 tmp_node_list => getElementsByTagname(xml_node, "occupations") 4532 tmp_node_list_size = getLength(tmp_node_list) 4533 ! 4534 IF (tmp_node_list_size /= 1) THEN 4535 IF (PRESENT(ierr) ) THEN 4536 CALL infomsg("qes_read:bandsType","occupations: wrong number of occurrences") 4537 ierr = ierr + 1 4538 ELSE 4539 CALL errore("qes_read:bandsType","occupations: wrong number of occurrences",10) 4540 END IF 4541 END IF 4542 ! 4543 tmp_node => item(tmp_node_list, 0) 4544 IF (ASSOCIATED(tmp_node))& 4545 CALL qes_read_occupations(tmp_node, obj%occupations, ierr ) 4546 ! 4547 tmp_node_list => getElementsByTagname(xml_node, "inputOccupations") 4548 tmp_node_list_size = getLength(tmp_node_list) 4549 ! 4550 IF (tmp_node_list_size > 2) THEN 4551 IF (PRESENT(ierr) ) THEN 4552 CALL infomsg("qes_read:bandsType","inputOccupations: too many occurrences") 4553 ierr = ierr + 1 4554 ELSE 4555 CALL errore("qes_read:bandsType","inputOccupations: too many occurrences",10) 4556 END IF 4557 END IF 4558 ! 4559 IF (tmp_node_list_size>0) THEN 4560 obj%inputOccupations_ispresent = .TRUE. 4561 ELSE 4562 obj%inputOccupations_ispresent = .FALSE. 4563 END IF 4564 obj%ndim_inputOccupations = tmp_node_list_size 4565 ALLOCATE(obj%inputOccupations(tmp_node_list_size)) 4566 DO index=1,tmp_node_list_size 4567 tmp_node => item( tmp_node_list, index-1 ) 4568 CALL qes_read_inputOccupations(tmp_node, obj%inputOccupations(index), ierr ) 4569 END DO 4570 ! 4571 ! 4572 obj%lwrite = .TRUE. 4573 ! 4574 END SUBROUTINE qes_read_bands 4575 ! 4576 ! 4577 SUBROUTINE qes_read_smearing(xml_node, obj, ierr ) 4578 ! 4579 IMPLICIT NONE 4580 ! 4581 TYPE(Node), INTENT(IN), POINTER :: xml_node 4582 TYPE(smearing_type), INTENT(OUT) :: obj 4583 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 4584 ! 4585 TYPE(Node), POINTER :: tmp_node 4586 TYPE(NodeList), POINTER :: tmp_node_list 4587 INTEGER :: tmp_node_list_size, index, iostat_ 4588 ! 4589 obj%tagname = getTagName(xml_node) 4590 ! 4591 4592 IF (hasAttribute(xml_node, "degauss")) THEN 4593 CALL extractDataAttribute(xml_node, "degauss", obj%degauss) 4594 ELSE 4595 IF ( PRESENT(ierr) ) THEN 4596 CALL infomsg ( "qes_read: smearingType",& 4597 "required attribute degauss not found" ) 4598 ierr = ierr + 1 4599 ELSE 4600 CALL errore ("qes_read: smearingType",& 4601 "required attribute degauss not found", 10 ) 4602 END IF 4603 END IF 4604 ! 4605 4606 4607 4608 ! 4609 ! 4610 CALL extractDataContent(xml_node, obj%smearing ) 4611 ! 4612 obj%lwrite = .TRUE. 4613 ! 4614 END SUBROUTINE qes_read_smearing 4615 ! 4616 ! 4617 SUBROUTINE qes_read_occupations(xml_node, obj, ierr ) 4618 ! 4619 IMPLICIT NONE 4620 ! 4621 TYPE(Node), INTENT(IN), POINTER :: xml_node 4622 TYPE(occupations_type), INTENT(OUT) :: obj 4623 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 4624 ! 4625 TYPE(Node), POINTER :: tmp_node 4626 TYPE(NodeList), POINTER :: tmp_node_list 4627 INTEGER :: tmp_node_list_size, index, iostat_ 4628 ! 4629 obj%tagname = getTagName(xml_node) 4630 ! 4631 4632 IF (hasAttribute(xml_node, "spin")) THEN 4633 CALL extractDataAttribute(xml_node, "spin", obj%spin) 4634 obj%spin_ispresent = .TRUE. 4635 ELSE 4636 obj%spin_ispresent = .FALSE. 4637 END IF 4638 ! 4639 4640 4641 4642 ! 4643 ! 4644 CALL extractDataContent(xml_node, obj%occupations ) 4645 ! 4646 obj%lwrite = .TRUE. 4647 ! 4648 END SUBROUTINE qes_read_occupations 4649 ! 4650 ! 4651 SUBROUTINE qes_read_basis(xml_node, obj, ierr ) 4652 ! 4653 IMPLICIT NONE 4654 ! 4655 TYPE(Node), INTENT(IN), POINTER :: xml_node 4656 TYPE(basis_type), INTENT(OUT) :: obj 4657 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 4658 ! 4659 TYPE(Node), POINTER :: tmp_node 4660 TYPE(NodeList), POINTER :: tmp_node_list 4661 INTEGER :: tmp_node_list_size, index, iostat_ 4662 ! 4663 obj%tagname = getTagName(xml_node) 4664 ! 4665 4666 4667 4668 4669 ! 4670 tmp_node_list => getElementsByTagname(xml_node, "gamma_only") 4671 tmp_node_list_size = getLength(tmp_node_list) 4672 ! 4673 IF (tmp_node_list_size > 1) THEN 4674 IF (PRESENT(ierr) ) THEN 4675 CALL infomsg("qes_read:basisType","gamma_only: too many occurrences") 4676 ierr = ierr + 1 4677 ELSE 4678 CALL errore("qes_read:basisType","gamma_only: too many occurrences",10) 4679 END IF 4680 END IF 4681 ! 4682 IF (tmp_node_list_size>0) THEN 4683 obj%gamma_only_ispresent = .TRUE. 4684 tmp_node => item(tmp_node_list, 0) 4685 CALL extractDataContent(tmp_node, obj%gamma_only , IOSTAT = iostat_) 4686 IF ( iostat_ /= 0 ) THEN 4687 IF ( PRESENT (ierr ) ) THEN 4688 CALL infomsg("qes_read:basisType","error reading gamma_only") 4689 ierr = ierr + 1 4690 ELSE 4691 CALL errore ("qes_read:basisType","error reading gamma_only",10) 4692 END IF 4693 END IF 4694 ELSE 4695 obj%gamma_only_ispresent = .FALSE. 4696 END IF 4697 ! 4698 tmp_node_list => getElementsByTagname(xml_node, "ecutwfc") 4699 tmp_node_list_size = getLength(tmp_node_list) 4700 ! 4701 IF (tmp_node_list_size /= 1) THEN 4702 IF (PRESENT(ierr) ) THEN 4703 CALL infomsg("qes_read:basisType","ecutwfc: wrong number of occurrences") 4704 ierr = ierr + 1 4705 ELSE 4706 CALL errore("qes_read:basisType","ecutwfc: wrong number of occurrences",10) 4707 END IF 4708 END IF 4709 ! 4710 tmp_node => item(tmp_node_list, 0) 4711 IF (ASSOCIATED(tmp_node))& 4712 CALL extractDataContent(tmp_node, obj%ecutwfc, IOSTAT = iostat_ ) 4713 IF ( iostat_ /= 0 ) THEN 4714 IF ( PRESENT (ierr ) ) THEN 4715 CALL infomsg("qes_read:basisType","error reading ecutwfc") 4716 ierr = ierr + 1 4717 ELSE 4718 CALL errore ("qes_read:basisType","error reading ecutwfc",10) 4719 END IF 4720 END IF 4721 ! 4722 tmp_node_list => getElementsByTagname(xml_node, "ecutrho") 4723 tmp_node_list_size = getLength(tmp_node_list) 4724 ! 4725 IF (tmp_node_list_size > 1) THEN 4726 IF (PRESENT(ierr) ) THEN 4727 CALL infomsg("qes_read:basisType","ecutrho: too many occurrences") 4728 ierr = ierr + 1 4729 ELSE 4730 CALL errore("qes_read:basisType","ecutrho: too many occurrences",10) 4731 END IF 4732 END IF 4733 ! 4734 IF (tmp_node_list_size>0) THEN 4735 obj%ecutrho_ispresent = .TRUE. 4736 tmp_node => item(tmp_node_list, 0) 4737 CALL extractDataContent(tmp_node, obj%ecutrho , IOSTAT = iostat_) 4738 IF ( iostat_ /= 0 ) THEN 4739 IF ( PRESENT (ierr ) ) THEN 4740 CALL infomsg("qes_read:basisType","error reading ecutrho") 4741 ierr = ierr + 1 4742 ELSE 4743 CALL errore ("qes_read:basisType","error reading ecutrho",10) 4744 END IF 4745 END IF 4746 ELSE 4747 obj%ecutrho_ispresent = .FALSE. 4748 END IF 4749 ! 4750 tmp_node_list => getElementsByTagname(xml_node, "fft_grid") 4751 tmp_node_list_size = getLength(tmp_node_list) 4752 ! 4753 IF (tmp_node_list_size > 1) THEN 4754 IF (PRESENT(ierr) ) THEN 4755 CALL infomsg("qes_read:basisType","fft_grid: too many occurrences") 4756 ierr = ierr + 1 4757 ELSE 4758 CALL errore("qes_read:basisType","fft_grid: too many occurrences",10) 4759 END IF 4760 END IF 4761 ! 4762 IF (tmp_node_list_size>0) THEN 4763 obj%fft_grid_ispresent = .TRUE. 4764 tmp_node => item(tmp_node_list, 0) 4765 CALL qes_read_basisSetItem(tmp_node, obj%fft_grid, ierr ) 4766 ELSE 4767 obj%fft_grid_ispresent = .FALSE. 4768 END IF 4769 ! 4770 tmp_node_list => getElementsByTagname(xml_node, "fft_smooth") 4771 tmp_node_list_size = getLength(tmp_node_list) 4772 ! 4773 IF (tmp_node_list_size > 1) THEN 4774 IF (PRESENT(ierr) ) THEN 4775 CALL infomsg("qes_read:basisType","fft_smooth: too many occurrences") 4776 ierr = ierr + 1 4777 ELSE 4778 CALL errore("qes_read:basisType","fft_smooth: too many occurrences",10) 4779 END IF 4780 END IF 4781 ! 4782 IF (tmp_node_list_size>0) THEN 4783 obj%fft_smooth_ispresent = .TRUE. 4784 tmp_node => item(tmp_node_list, 0) 4785 CALL qes_read_basisSetItem(tmp_node, obj%fft_smooth, ierr ) 4786 ELSE 4787 obj%fft_smooth_ispresent = .FALSE. 4788 END IF 4789 ! 4790 tmp_node_list => getElementsByTagname(xml_node, "fft_box") 4791 tmp_node_list_size = getLength(tmp_node_list) 4792 ! 4793 IF (tmp_node_list_size > 1) THEN 4794 IF (PRESENT(ierr) ) THEN 4795 CALL infomsg("qes_read:basisType","fft_box: too many occurrences") 4796 ierr = ierr + 1 4797 ELSE 4798 CALL errore("qes_read:basisType","fft_box: too many occurrences",10) 4799 END IF 4800 END IF 4801 ! 4802 IF (tmp_node_list_size>0) THEN 4803 obj%fft_box_ispresent = .TRUE. 4804 tmp_node => item(tmp_node_list, 0) 4805 CALL qes_read_basisSetItem(tmp_node, obj%fft_box, ierr ) 4806 ELSE 4807 obj%fft_box_ispresent = .FALSE. 4808 END IF 4809 ! 4810 ! 4811 obj%lwrite = .TRUE. 4812 ! 4813 END SUBROUTINE qes_read_basis 4814 ! 4815 ! 4816 SUBROUTINE qes_read_basis_set(xml_node, obj, ierr ) 4817 ! 4818 IMPLICIT NONE 4819 ! 4820 TYPE(Node), INTENT(IN), POINTER :: xml_node 4821 TYPE(basis_set_type), INTENT(OUT) :: obj 4822 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 4823 ! 4824 TYPE(Node), POINTER :: tmp_node 4825 TYPE(NodeList), POINTER :: tmp_node_list 4826 INTEGER :: tmp_node_list_size, index, iostat_ 4827 ! 4828 obj%tagname = getTagName(xml_node) 4829 ! 4830 4831 4832 4833 4834 ! 4835 tmp_node_list => getElementsByTagname(xml_node, "gamma_only") 4836 tmp_node_list_size = getLength(tmp_node_list) 4837 ! 4838 IF (tmp_node_list_size > 1) THEN 4839 IF (PRESENT(ierr) ) THEN 4840 CALL infomsg("qes_read:basis_setType","gamma_only: too many occurrences") 4841 ierr = ierr + 1 4842 ELSE 4843 CALL errore("qes_read:basis_setType","gamma_only: too many occurrences",10) 4844 END IF 4845 END IF 4846 ! 4847 IF (tmp_node_list_size>0) THEN 4848 obj%gamma_only_ispresent = .TRUE. 4849 tmp_node => item(tmp_node_list, 0) 4850 CALL extractDataContent(tmp_node, obj%gamma_only , IOSTAT = iostat_) 4851 IF ( iostat_ /= 0 ) THEN 4852 IF ( PRESENT (ierr ) ) THEN 4853 CALL infomsg("qes_read:basis_setType","error reading gamma_only") 4854 ierr = ierr + 1 4855 ELSE 4856 CALL errore ("qes_read:basis_setType","error reading gamma_only",10) 4857 END IF 4858 END IF 4859 ELSE 4860 obj%gamma_only_ispresent = .FALSE. 4861 END IF 4862 ! 4863 tmp_node_list => getElementsByTagname(xml_node, "ecutwfc") 4864 tmp_node_list_size = getLength(tmp_node_list) 4865 ! 4866 IF (tmp_node_list_size /= 1) THEN 4867 IF (PRESENT(ierr) ) THEN 4868 CALL infomsg("qes_read:basis_setType","ecutwfc: wrong number of occurrences") 4869 ierr = ierr + 1 4870 ELSE 4871 CALL errore("qes_read:basis_setType","ecutwfc: wrong number of occurrences",10) 4872 END IF 4873 END IF 4874 ! 4875 tmp_node => item(tmp_node_list, 0) 4876 IF (ASSOCIATED(tmp_node))& 4877 CALL extractDataContent(tmp_node, obj%ecutwfc, IOSTAT = iostat_ ) 4878 IF ( iostat_ /= 0 ) THEN 4879 IF ( PRESENT (ierr ) ) THEN 4880 CALL infomsg("qes_read:basis_setType","error reading ecutwfc") 4881 ierr = ierr + 1 4882 ELSE 4883 CALL errore ("qes_read:basis_setType","error reading ecutwfc",10) 4884 END IF 4885 END IF 4886 ! 4887 tmp_node_list => getElementsByTagname(xml_node, "ecutrho") 4888 tmp_node_list_size = getLength(tmp_node_list) 4889 ! 4890 IF (tmp_node_list_size > 1) THEN 4891 IF (PRESENT(ierr) ) THEN 4892 CALL infomsg("qes_read:basis_setType","ecutrho: too many occurrences") 4893 ierr = ierr + 1 4894 ELSE 4895 CALL errore("qes_read:basis_setType","ecutrho: too many occurrences",10) 4896 END IF 4897 END IF 4898 ! 4899 IF (tmp_node_list_size>0) THEN 4900 obj%ecutrho_ispresent = .TRUE. 4901 tmp_node => item(tmp_node_list, 0) 4902 CALL extractDataContent(tmp_node, obj%ecutrho , IOSTAT = iostat_) 4903 IF ( iostat_ /= 0 ) THEN 4904 IF ( PRESENT (ierr ) ) THEN 4905 CALL infomsg("qes_read:basis_setType","error reading ecutrho") 4906 ierr = ierr + 1 4907 ELSE 4908 CALL errore ("qes_read:basis_setType","error reading ecutrho",10) 4909 END IF 4910 END IF 4911 ELSE 4912 obj%ecutrho_ispresent = .FALSE. 4913 END IF 4914 ! 4915 tmp_node_list => getElementsByTagname(xml_node, "fft_grid") 4916 tmp_node_list_size = getLength(tmp_node_list) 4917 ! 4918 IF (tmp_node_list_size /= 1) THEN 4919 IF (PRESENT(ierr) ) THEN 4920 CALL infomsg("qes_read:basis_setType","fft_grid: wrong number of occurrences") 4921 ierr = ierr + 1 4922 ELSE 4923 CALL errore("qes_read:basis_setType","fft_grid: wrong number of occurrences",10) 4924 END IF 4925 END IF 4926 ! 4927 tmp_node => item(tmp_node_list, 0) 4928 IF (ASSOCIATED(tmp_node))& 4929 CALL qes_read_basisSetItem(tmp_node, obj%fft_grid, ierr ) 4930 ! 4931 tmp_node_list => getElementsByTagname(xml_node, "fft_smooth") 4932 tmp_node_list_size = getLength(tmp_node_list) 4933 ! 4934 IF (tmp_node_list_size > 1) THEN 4935 IF (PRESENT(ierr) ) THEN 4936 CALL infomsg("qes_read:basis_setType","fft_smooth: too many occurrences") 4937 ierr = ierr + 1 4938 ELSE 4939 CALL errore("qes_read:basis_setType","fft_smooth: too many occurrences",10) 4940 END IF 4941 END IF 4942 ! 4943 IF (tmp_node_list_size>0) THEN 4944 obj%fft_smooth_ispresent = .TRUE. 4945 tmp_node => item(tmp_node_list, 0) 4946 CALL qes_read_basisSetItem(tmp_node, obj%fft_smooth, ierr ) 4947 ELSE 4948 obj%fft_smooth_ispresent = .FALSE. 4949 END IF 4950 ! 4951 tmp_node_list => getElementsByTagname(xml_node, "fft_box") 4952 tmp_node_list_size = getLength(tmp_node_list) 4953 ! 4954 IF (tmp_node_list_size > 1) THEN 4955 IF (PRESENT(ierr) ) THEN 4956 CALL infomsg("qes_read:basis_setType","fft_box: too many occurrences") 4957 ierr = ierr + 1 4958 ELSE 4959 CALL errore("qes_read:basis_setType","fft_box: too many occurrences",10) 4960 END IF 4961 END IF 4962 ! 4963 IF (tmp_node_list_size>0) THEN 4964 obj%fft_box_ispresent = .TRUE. 4965 tmp_node => item(tmp_node_list, 0) 4966 CALL qes_read_basisSetItem(tmp_node, obj%fft_box, ierr ) 4967 ELSE 4968 obj%fft_box_ispresent = .FALSE. 4969 END IF 4970 ! 4971 tmp_node_list => getElementsByTagname(xml_node, "ngm") 4972 tmp_node_list_size = getLength(tmp_node_list) 4973 ! 4974 IF (tmp_node_list_size /= 1) THEN 4975 IF (PRESENT(ierr) ) THEN 4976 CALL infomsg("qes_read:basis_setType","ngm: wrong number of occurrences") 4977 ierr = ierr + 1 4978 ELSE 4979 CALL errore("qes_read:basis_setType","ngm: wrong number of occurrences",10) 4980 END IF 4981 END IF 4982 ! 4983 tmp_node => item(tmp_node_list, 0) 4984 IF (ASSOCIATED(tmp_node))& 4985 CALL extractDataContent(tmp_node, obj%ngm, IOSTAT = iostat_ ) 4986 IF ( iostat_ /= 0 ) THEN 4987 IF ( PRESENT (ierr ) ) THEN 4988 CALL infomsg("qes_read:basis_setType","error reading ngm") 4989 ierr = ierr + 1 4990 ELSE 4991 CALL errore ("qes_read:basis_setType","error reading ngm",10) 4992 END IF 4993 END IF 4994 ! 4995 tmp_node_list => getElementsByTagname(xml_node, "ngms") 4996 tmp_node_list_size = getLength(tmp_node_list) 4997 ! 4998 IF (tmp_node_list_size > 1) THEN 4999 IF (PRESENT(ierr) ) THEN 5000 CALL infomsg("qes_read:basis_setType","ngms: too many occurrences") 5001 ierr = ierr + 1 5002 ELSE 5003 CALL errore("qes_read:basis_setType","ngms: too many occurrences",10) 5004 END IF 5005 END IF 5006 ! 5007 IF (tmp_node_list_size>0) THEN 5008 obj%ngms_ispresent = .TRUE. 5009 tmp_node => item(tmp_node_list, 0) 5010 CALL extractDataContent(tmp_node, obj%ngms , IOSTAT = iostat_) 5011 IF ( iostat_ /= 0 ) THEN 5012 IF ( PRESENT (ierr ) ) THEN 5013 CALL infomsg("qes_read:basis_setType","error reading ngms") 5014 ierr = ierr + 1 5015 ELSE 5016 CALL errore ("qes_read:basis_setType","error reading ngms",10) 5017 END IF 5018 END IF 5019 ELSE 5020 obj%ngms_ispresent = .FALSE. 5021 END IF 5022 ! 5023 tmp_node_list => getElementsByTagname(xml_node, "npwx") 5024 tmp_node_list_size = getLength(tmp_node_list) 5025 ! 5026 IF (tmp_node_list_size /= 1) THEN 5027 IF (PRESENT(ierr) ) THEN 5028 CALL infomsg("qes_read:basis_setType","npwx: wrong number of occurrences") 5029 ierr = ierr + 1 5030 ELSE 5031 CALL errore("qes_read:basis_setType","npwx: wrong number of occurrences",10) 5032 END IF 5033 END IF 5034 ! 5035 tmp_node => item(tmp_node_list, 0) 5036 IF (ASSOCIATED(tmp_node))& 5037 CALL extractDataContent(tmp_node, obj%npwx, IOSTAT = iostat_ ) 5038 IF ( iostat_ /= 0 ) THEN 5039 IF ( PRESENT (ierr ) ) THEN 5040 CALL infomsg("qes_read:basis_setType","error reading npwx") 5041 ierr = ierr + 1 5042 ELSE 5043 CALL errore ("qes_read:basis_setType","error reading npwx",10) 5044 END IF 5045 END IF 5046 ! 5047 tmp_node_list => getElementsByTagname(xml_node, "reciprocal_lattice") 5048 tmp_node_list_size = getLength(tmp_node_list) 5049 ! 5050 IF (tmp_node_list_size /= 1) THEN 5051 IF (PRESENT(ierr) ) THEN 5052 CALL infomsg("qes_read:basis_setType","reciprocal_lattice: wrong number of occurrences") 5053 ierr = ierr + 1 5054 ELSE 5055 CALL errore("qes_read:basis_setType","reciprocal_lattice: wrong number of occurrences",10) 5056 END IF 5057 END IF 5058 ! 5059 tmp_node => item(tmp_node_list, 0) 5060 IF (ASSOCIATED(tmp_node))& 5061 CALL qes_read_reciprocal_lattice(tmp_node, obj%reciprocal_lattice, ierr ) 5062 ! 5063 ! 5064 obj%lwrite = .TRUE. 5065 ! 5066 END SUBROUTINE qes_read_basis_set 5067 ! 5068 ! 5069 SUBROUTINE qes_read_basisSetItem(xml_node, obj, ierr ) 5070 ! 5071 IMPLICIT NONE 5072 ! 5073 TYPE(Node), INTENT(IN), POINTER :: xml_node 5074 TYPE(basisSetItem_type), INTENT(OUT) :: obj 5075 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 5076 ! 5077 TYPE(Node), POINTER :: tmp_node 5078 TYPE(NodeList), POINTER :: tmp_node_list 5079 INTEGER :: tmp_node_list_size, index, iostat_ 5080 ! 5081 obj%tagname = getTagName(xml_node) 5082 ! 5083 5084 IF (hasAttribute(xml_node, "nr1")) THEN 5085 CALL extractDataAttribute(xml_node, "nr1", obj%nr1) 5086 ELSE 5087 IF ( PRESENT(ierr) ) THEN 5088 CALL infomsg ( "qes_read: basisSetItemType",& 5089 "required attribute nr1 not found" ) 5090 ierr = ierr + 1 5091 ELSE 5092 CALL errore ("qes_read: basisSetItemType",& 5093 "required attribute nr1 not found", 10 ) 5094 END IF 5095 END IF 5096 ! 5097 IF (hasAttribute(xml_node, "nr2")) THEN 5098 CALL extractDataAttribute(xml_node, "nr2", obj%nr2) 5099 ELSE 5100 IF ( PRESENT(ierr) ) THEN 5101 CALL infomsg ( "qes_read: basisSetItemType",& 5102 "required attribute nr2 not found" ) 5103 ierr = ierr + 1 5104 ELSE 5105 CALL errore ("qes_read: basisSetItemType",& 5106 "required attribute nr2 not found", 10 ) 5107 END IF 5108 END IF 5109 ! 5110 IF (hasAttribute(xml_node, "nr3")) THEN 5111 CALL extractDataAttribute(xml_node, "nr3", obj%nr3) 5112 ELSE 5113 IF ( PRESENT(ierr) ) THEN 5114 CALL infomsg ( "qes_read: basisSetItemType",& 5115 "required attribute nr3 not found" ) 5116 ierr = ierr + 1 5117 ELSE 5118 CALL errore ("qes_read: basisSetItemType",& 5119 "required attribute nr3 not found", 10 ) 5120 END IF 5121 END IF 5122 ! 5123 5124 5125 5126 ! 5127 ! 5128 CALL extractDataContent(xml_node, obj%basisSetItem ) 5129 ! 5130 obj%lwrite = .TRUE. 5131 ! 5132 END SUBROUTINE qes_read_basisSetItem 5133 ! 5134 ! 5135 SUBROUTINE qes_read_reciprocal_lattice(xml_node, obj, ierr ) 5136 ! 5137 IMPLICIT NONE 5138 ! 5139 TYPE(Node), INTENT(IN), POINTER :: xml_node 5140 TYPE(reciprocal_lattice_type), INTENT(OUT) :: obj 5141 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 5142 ! 5143 TYPE(Node), POINTER :: tmp_node 5144 TYPE(NodeList), POINTER :: tmp_node_list 5145 INTEGER :: tmp_node_list_size, index, iostat_ 5146 ! 5147 obj%tagname = getTagName(xml_node) 5148 ! 5149 5150 5151 5152 5153 ! 5154 tmp_node_list => getElementsByTagname(xml_node, "b1") 5155 tmp_node_list_size = getLength(tmp_node_list) 5156 ! 5157 IF (tmp_node_list_size /= 1) THEN 5158 IF (PRESENT(ierr) ) THEN 5159 CALL infomsg("qes_read:reciprocal_latticeType","b1: wrong number of occurrences") 5160 ierr = ierr + 1 5161 ELSE 5162 CALL errore("qes_read:reciprocal_latticeType","b1: wrong number of occurrences",10) 5163 END IF 5164 END IF 5165 ! 5166 tmp_node => item(tmp_node_list, 0) 5167 IF (ASSOCIATED(tmp_node))& 5168 CALL extractDataContent(tmp_node, obj%b1, IOSTAT = iostat_ ) 5169 IF ( iostat_ /= 0 ) THEN 5170 IF ( PRESENT (ierr ) ) THEN 5171 CALL infomsg("qes_read:reciprocal_latticeType","error reading b1") 5172 ierr = ierr + 1 5173 ELSE 5174 CALL errore ("qes_read:reciprocal_latticeType","error reading b1",10) 5175 END IF 5176 END IF 5177 ! 5178 tmp_node_list => getElementsByTagname(xml_node, "b2") 5179 tmp_node_list_size = getLength(tmp_node_list) 5180 ! 5181 IF (tmp_node_list_size /= 1) THEN 5182 IF (PRESENT(ierr) ) THEN 5183 CALL infomsg("qes_read:reciprocal_latticeType","b2: wrong number of occurrences") 5184 ierr = ierr + 1 5185 ELSE 5186 CALL errore("qes_read:reciprocal_latticeType","b2: wrong number of occurrences",10) 5187 END IF 5188 END IF 5189 ! 5190 tmp_node => item(tmp_node_list, 0) 5191 IF (ASSOCIATED(tmp_node))& 5192 CALL extractDataContent(tmp_node, obj%b2, IOSTAT = iostat_ ) 5193 IF ( iostat_ /= 0 ) THEN 5194 IF ( PRESENT (ierr ) ) THEN 5195 CALL infomsg("qes_read:reciprocal_latticeType","error reading b2") 5196 ierr = ierr + 1 5197 ELSE 5198 CALL errore ("qes_read:reciprocal_latticeType","error reading b2",10) 5199 END IF 5200 END IF 5201 ! 5202 tmp_node_list => getElementsByTagname(xml_node, "b3") 5203 tmp_node_list_size = getLength(tmp_node_list) 5204 ! 5205 IF (tmp_node_list_size /= 1) THEN 5206 IF (PRESENT(ierr) ) THEN 5207 CALL infomsg("qes_read:reciprocal_latticeType","b3: wrong number of occurrences") 5208 ierr = ierr + 1 5209 ELSE 5210 CALL errore("qes_read:reciprocal_latticeType","b3: wrong number of occurrences",10) 5211 END IF 5212 END IF 5213 ! 5214 tmp_node => item(tmp_node_list, 0) 5215 IF (ASSOCIATED(tmp_node))& 5216 CALL extractDataContent(tmp_node, obj%b3, IOSTAT = iostat_ ) 5217 IF ( iostat_ /= 0 ) THEN 5218 IF ( PRESENT (ierr ) ) THEN 5219 CALL infomsg("qes_read:reciprocal_latticeType","error reading b3") 5220 ierr = ierr + 1 5221 ELSE 5222 CALL errore ("qes_read:reciprocal_latticeType","error reading b3",10) 5223 END IF 5224 END IF 5225 ! 5226 ! 5227 obj%lwrite = .TRUE. 5228 ! 5229 END SUBROUTINE qes_read_reciprocal_lattice 5230 ! 5231 ! 5232 SUBROUTINE qes_read_electron_control(xml_node, obj, ierr ) 5233 ! 5234 IMPLICIT NONE 5235 ! 5236 TYPE(Node), INTENT(IN), POINTER :: xml_node 5237 TYPE(electron_control_type), INTENT(OUT) :: obj 5238 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 5239 ! 5240 TYPE(Node), POINTER :: tmp_node 5241 TYPE(NodeList), POINTER :: tmp_node_list 5242 INTEGER :: tmp_node_list_size, index, iostat_ 5243 ! 5244 obj%tagname = getTagName(xml_node) 5245 ! 5246 5247 5248 5249 5250 ! 5251 tmp_node_list => getElementsByTagname(xml_node, "diagonalization") 5252 tmp_node_list_size = getLength(tmp_node_list) 5253 ! 5254 IF (tmp_node_list_size /= 1) THEN 5255 IF (PRESENT(ierr) ) THEN 5256 CALL infomsg("qes_read:electron_controlType","diagonalization: wrong number of occurrences") 5257 ierr = ierr + 1 5258 ELSE 5259 CALL errore("qes_read:electron_controlType","diagonalization: wrong number of occurrences",10) 5260 END IF 5261 END IF 5262 ! 5263 tmp_node => item(tmp_node_list, 0) 5264 IF (ASSOCIATED(tmp_node))& 5265 CALL extractDataContent(tmp_node, obj%diagonalization, IOSTAT = iostat_ ) 5266 IF ( iostat_ /= 0 ) THEN 5267 IF ( PRESENT (ierr ) ) THEN 5268 CALL infomsg("qes_read:electron_controlType","error reading diagonalization") 5269 ierr = ierr + 1 5270 ELSE 5271 CALL errore ("qes_read:electron_controlType","error reading diagonalization",10) 5272 END IF 5273 END IF 5274 ! 5275 tmp_node_list => getElementsByTagname(xml_node, "mixing_mode") 5276 tmp_node_list_size = getLength(tmp_node_list) 5277 ! 5278 IF (tmp_node_list_size /= 1) THEN 5279 IF (PRESENT(ierr) ) THEN 5280 CALL infomsg("qes_read:electron_controlType","mixing_mode: wrong number of occurrences") 5281 ierr = ierr + 1 5282 ELSE 5283 CALL errore("qes_read:electron_controlType","mixing_mode: wrong number of occurrences",10) 5284 END IF 5285 END IF 5286 ! 5287 tmp_node => item(tmp_node_list, 0) 5288 IF (ASSOCIATED(tmp_node))& 5289 CALL extractDataContent(tmp_node, obj%mixing_mode, IOSTAT = iostat_ ) 5290 IF ( iostat_ /= 0 ) THEN 5291 IF ( PRESENT (ierr ) ) THEN 5292 CALL infomsg("qes_read:electron_controlType","error reading mixing_mode") 5293 ierr = ierr + 1 5294 ELSE 5295 CALL errore ("qes_read:electron_controlType","error reading mixing_mode",10) 5296 END IF 5297 END IF 5298 ! 5299 tmp_node_list => getElementsByTagname(xml_node, "mixing_beta") 5300 tmp_node_list_size = getLength(tmp_node_list) 5301 ! 5302 IF (tmp_node_list_size /= 1) THEN 5303 IF (PRESENT(ierr) ) THEN 5304 CALL infomsg("qes_read:electron_controlType","mixing_beta: wrong number of occurrences") 5305 ierr = ierr + 1 5306 ELSE 5307 CALL errore("qes_read:electron_controlType","mixing_beta: wrong number of occurrences",10) 5308 END IF 5309 END IF 5310 ! 5311 tmp_node => item(tmp_node_list, 0) 5312 IF (ASSOCIATED(tmp_node))& 5313 CALL extractDataContent(tmp_node, obj%mixing_beta, IOSTAT = iostat_ ) 5314 IF ( iostat_ /= 0 ) THEN 5315 IF ( PRESENT (ierr ) ) THEN 5316 CALL infomsg("qes_read:electron_controlType","error reading mixing_beta") 5317 ierr = ierr + 1 5318 ELSE 5319 CALL errore ("qes_read:electron_controlType","error reading mixing_beta",10) 5320 END IF 5321 END IF 5322 ! 5323 tmp_node_list => getElementsByTagname(xml_node, "conv_thr") 5324 tmp_node_list_size = getLength(tmp_node_list) 5325 ! 5326 IF (tmp_node_list_size /= 1) THEN 5327 IF (PRESENT(ierr) ) THEN 5328 CALL infomsg("qes_read:electron_controlType","conv_thr: wrong number of occurrences") 5329 ierr = ierr + 1 5330 ELSE 5331 CALL errore("qes_read:electron_controlType","conv_thr: wrong number of occurrences",10) 5332 END IF 5333 END IF 5334 ! 5335 tmp_node => item(tmp_node_list, 0) 5336 IF (ASSOCIATED(tmp_node))& 5337 CALL extractDataContent(tmp_node, obj%conv_thr, IOSTAT = iostat_ ) 5338 IF ( iostat_ /= 0 ) THEN 5339 IF ( PRESENT (ierr ) ) THEN 5340 CALL infomsg("qes_read:electron_controlType","error reading conv_thr") 5341 ierr = ierr + 1 5342 ELSE 5343 CALL errore ("qes_read:electron_controlType","error reading conv_thr",10) 5344 END IF 5345 END IF 5346 ! 5347 tmp_node_list => getElementsByTagname(xml_node, "mixing_ndim") 5348 tmp_node_list_size = getLength(tmp_node_list) 5349 ! 5350 IF (tmp_node_list_size /= 1) THEN 5351 IF (PRESENT(ierr) ) THEN 5352 CALL infomsg("qes_read:electron_controlType","mixing_ndim: wrong number of occurrences") 5353 ierr = ierr + 1 5354 ELSE 5355 CALL errore("qes_read:electron_controlType","mixing_ndim: wrong number of occurrences",10) 5356 END IF 5357 END IF 5358 ! 5359 tmp_node => item(tmp_node_list, 0) 5360 IF (ASSOCIATED(tmp_node))& 5361 CALL extractDataContent(tmp_node, obj%mixing_ndim, IOSTAT = iostat_ ) 5362 IF ( iostat_ /= 0 ) THEN 5363 IF ( PRESENT (ierr ) ) THEN 5364 CALL infomsg("qes_read:electron_controlType","error reading mixing_ndim") 5365 ierr = ierr + 1 5366 ELSE 5367 CALL errore ("qes_read:electron_controlType","error reading mixing_ndim",10) 5368 END IF 5369 END IF 5370 ! 5371 tmp_node_list => getElementsByTagname(xml_node, "max_nstep") 5372 tmp_node_list_size = getLength(tmp_node_list) 5373 ! 5374 IF (tmp_node_list_size /= 1) THEN 5375 IF (PRESENT(ierr) ) THEN 5376 CALL infomsg("qes_read:electron_controlType","max_nstep: wrong number of occurrences") 5377 ierr = ierr + 1 5378 ELSE 5379 CALL errore("qes_read:electron_controlType","max_nstep: wrong number of occurrences",10) 5380 END IF 5381 END IF 5382 ! 5383 tmp_node => item(tmp_node_list, 0) 5384 IF (ASSOCIATED(tmp_node))& 5385 CALL extractDataContent(tmp_node, obj%max_nstep, IOSTAT = iostat_ ) 5386 IF ( iostat_ /= 0 ) THEN 5387 IF ( PRESENT (ierr ) ) THEN 5388 CALL infomsg("qes_read:electron_controlType","error reading max_nstep") 5389 ierr = ierr + 1 5390 ELSE 5391 CALL errore ("qes_read:electron_controlType","error reading max_nstep",10) 5392 END IF 5393 END IF 5394 ! 5395 tmp_node_list => getElementsByTagname(xml_node, "real_space_q") 5396 tmp_node_list_size = getLength(tmp_node_list) 5397 ! 5398 IF (tmp_node_list_size > 1) THEN 5399 IF (PRESENT(ierr) ) THEN 5400 CALL infomsg("qes_read:electron_controlType","real_space_q: too many occurrences") 5401 ierr = ierr + 1 5402 ELSE 5403 CALL errore("qes_read:electron_controlType","real_space_q: too many occurrences",10) 5404 END IF 5405 END IF 5406 ! 5407 IF (tmp_node_list_size>0) THEN 5408 obj%real_space_q_ispresent = .TRUE. 5409 tmp_node => item(tmp_node_list, 0) 5410 CALL extractDataContent(tmp_node, obj%real_space_q , IOSTAT = iostat_) 5411 IF ( iostat_ /= 0 ) THEN 5412 IF ( PRESENT (ierr ) ) THEN 5413 CALL infomsg("qes_read:electron_controlType","error reading real_space_q") 5414 ierr = ierr + 1 5415 ELSE 5416 CALL errore ("qes_read:electron_controlType","error reading real_space_q",10) 5417 END IF 5418 END IF 5419 ELSE 5420 obj%real_space_q_ispresent = .FALSE. 5421 END IF 5422 ! 5423 tmp_node_list => getElementsByTagname(xml_node, "real_space_beta") 5424 tmp_node_list_size = getLength(tmp_node_list) 5425 ! 5426 IF (tmp_node_list_size > 1) THEN 5427 IF (PRESENT(ierr) ) THEN 5428 CALL infomsg("qes_read:electron_controlType","real_space_beta: too many occurrences") 5429 ierr = ierr + 1 5430 ELSE 5431 CALL errore("qes_read:electron_controlType","real_space_beta: too many occurrences",10) 5432 END IF 5433 END IF 5434 ! 5435 IF (tmp_node_list_size>0) THEN 5436 obj%real_space_beta_ispresent = .TRUE. 5437 tmp_node => item(tmp_node_list, 0) 5438 CALL extractDataContent(tmp_node, obj%real_space_beta , IOSTAT = iostat_) 5439 IF ( iostat_ /= 0 ) THEN 5440 IF ( PRESENT (ierr ) ) THEN 5441 CALL infomsg("qes_read:electron_controlType","error reading real_space_beta") 5442 ierr = ierr + 1 5443 ELSE 5444 CALL errore ("qes_read:electron_controlType","error reading real_space_beta",10) 5445 END IF 5446 END IF 5447 ELSE 5448 obj%real_space_beta_ispresent = .FALSE. 5449 END IF 5450 ! 5451 tmp_node_list => getElementsByTagname(xml_node, "tq_smoothing") 5452 tmp_node_list_size = getLength(tmp_node_list) 5453 ! 5454 IF (tmp_node_list_size /= 1) THEN 5455 IF (PRESENT(ierr) ) THEN 5456 CALL infomsg("qes_read:electron_controlType","tq_smoothing: wrong number of occurrences") 5457 ierr = ierr + 1 5458 ELSE 5459 CALL errore("qes_read:electron_controlType","tq_smoothing: wrong number of occurrences",10) 5460 END IF 5461 END IF 5462 ! 5463 tmp_node => item(tmp_node_list, 0) 5464 IF (ASSOCIATED(tmp_node))& 5465 CALL extractDataContent(tmp_node, obj%tq_smoothing, IOSTAT = iostat_ ) 5466 IF ( iostat_ /= 0 ) THEN 5467 IF ( PRESENT (ierr ) ) THEN 5468 CALL infomsg("qes_read:electron_controlType","error reading tq_smoothing") 5469 ierr = ierr + 1 5470 ELSE 5471 CALL errore ("qes_read:electron_controlType","error reading tq_smoothing",10) 5472 END IF 5473 END IF 5474 ! 5475 tmp_node_list => getElementsByTagname(xml_node, "tbeta_smoothing") 5476 tmp_node_list_size = getLength(tmp_node_list) 5477 ! 5478 IF (tmp_node_list_size /= 1) THEN 5479 IF (PRESENT(ierr) ) THEN 5480 CALL infomsg("qes_read:electron_controlType","tbeta_smoothing: wrong number of occurrences") 5481 ierr = ierr + 1 5482 ELSE 5483 CALL errore("qes_read:electron_controlType","tbeta_smoothing: wrong number of occurrences",10) 5484 END IF 5485 END IF 5486 ! 5487 tmp_node => item(tmp_node_list, 0) 5488 IF (ASSOCIATED(tmp_node))& 5489 CALL extractDataContent(tmp_node, obj%tbeta_smoothing, IOSTAT = iostat_ ) 5490 IF ( iostat_ /= 0 ) THEN 5491 IF ( PRESENT (ierr ) ) THEN 5492 CALL infomsg("qes_read:electron_controlType","error reading tbeta_smoothing") 5493 ierr = ierr + 1 5494 ELSE 5495 CALL errore ("qes_read:electron_controlType","error reading tbeta_smoothing",10) 5496 END IF 5497 END IF 5498 ! 5499 tmp_node_list => getElementsByTagname(xml_node, "diago_thr_init") 5500 tmp_node_list_size = getLength(tmp_node_list) 5501 ! 5502 IF (tmp_node_list_size /= 1) THEN 5503 IF (PRESENT(ierr) ) THEN 5504 CALL infomsg("qes_read:electron_controlType","diago_thr_init: wrong number of occurrences") 5505 ierr = ierr + 1 5506 ELSE 5507 CALL errore("qes_read:electron_controlType","diago_thr_init: wrong number of occurrences",10) 5508 END IF 5509 END IF 5510 ! 5511 tmp_node => item(tmp_node_list, 0) 5512 IF (ASSOCIATED(tmp_node))& 5513 CALL extractDataContent(tmp_node, obj%diago_thr_init, IOSTAT = iostat_ ) 5514 IF ( iostat_ /= 0 ) THEN 5515 IF ( PRESENT (ierr ) ) THEN 5516 CALL infomsg("qes_read:electron_controlType","error reading diago_thr_init") 5517 ierr = ierr + 1 5518 ELSE 5519 CALL errore ("qes_read:electron_controlType","error reading diago_thr_init",10) 5520 END IF 5521 END IF 5522 ! 5523 tmp_node_list => getElementsByTagname(xml_node, "diago_full_acc") 5524 tmp_node_list_size = getLength(tmp_node_list) 5525 ! 5526 IF (tmp_node_list_size /= 1) THEN 5527 IF (PRESENT(ierr) ) THEN 5528 CALL infomsg("qes_read:electron_controlType","diago_full_acc: wrong number of occurrences") 5529 ierr = ierr + 1 5530 ELSE 5531 CALL errore("qes_read:electron_controlType","diago_full_acc: wrong number of occurrences",10) 5532 END IF 5533 END IF 5534 ! 5535 tmp_node => item(tmp_node_list, 0) 5536 IF (ASSOCIATED(tmp_node))& 5537 CALL extractDataContent(tmp_node, obj%diago_full_acc, IOSTAT = iostat_ ) 5538 IF ( iostat_ /= 0 ) THEN 5539 IF ( PRESENT (ierr ) ) THEN 5540 CALL infomsg("qes_read:electron_controlType","error reading diago_full_acc") 5541 ierr = ierr + 1 5542 ELSE 5543 CALL errore ("qes_read:electron_controlType","error reading diago_full_acc",10) 5544 END IF 5545 END IF 5546 ! 5547 tmp_node_list => getElementsByTagname(xml_node, "diago_cg_maxiter") 5548 tmp_node_list_size = getLength(tmp_node_list) 5549 ! 5550 IF (tmp_node_list_size > 1) THEN 5551 IF (PRESENT(ierr) ) THEN 5552 CALL infomsg("qes_read:electron_controlType","diago_cg_maxiter: too many occurrences") 5553 ierr = ierr + 1 5554 ELSE 5555 CALL errore("qes_read:electron_controlType","diago_cg_maxiter: too many occurrences",10) 5556 END IF 5557 END IF 5558 ! 5559 IF (tmp_node_list_size>0) THEN 5560 obj%diago_cg_maxiter_ispresent = .TRUE. 5561 tmp_node => item(tmp_node_list, 0) 5562 CALL extractDataContent(tmp_node, obj%diago_cg_maxiter , IOSTAT = iostat_) 5563 IF ( iostat_ /= 0 ) THEN 5564 IF ( PRESENT (ierr ) ) THEN 5565 CALL infomsg("qes_read:electron_controlType","error reading diago_cg_maxiter") 5566 ierr = ierr + 1 5567 ELSE 5568 CALL errore ("qes_read:electron_controlType","error reading diago_cg_maxiter",10) 5569 END IF 5570 END IF 5571 ELSE 5572 obj%diago_cg_maxiter_ispresent = .FALSE. 5573 END IF 5574 ! 5575 tmp_node_list => getElementsByTagname(xml_node, "diago_ppcg_maxiter") 5576 tmp_node_list_size = getLength(tmp_node_list) 5577 ! 5578 IF (tmp_node_list_size > 1) THEN 5579 IF (PRESENT(ierr) ) THEN 5580 CALL infomsg("qes_read:electron_controlType","diago_ppcg_maxiter: too many occurrences") 5581 ierr = ierr + 1 5582 ELSE 5583 CALL errore("qes_read:electron_controlType","diago_ppcg_maxiter: too many occurrences",10) 5584 END IF 5585 END IF 5586 ! 5587 IF (tmp_node_list_size>0) THEN 5588 obj%diago_ppcg_maxiter_ispresent = .TRUE. 5589 tmp_node => item(tmp_node_list, 0) 5590 CALL extractDataContent(tmp_node, obj%diago_ppcg_maxiter , IOSTAT = iostat_) 5591 IF ( iostat_ /= 0 ) THEN 5592 IF ( PRESENT (ierr ) ) THEN 5593 CALL infomsg("qes_read:electron_controlType","error reading diago_ppcg_maxiter") 5594 ierr = ierr + 1 5595 ELSE 5596 CALL errore ("qes_read:electron_controlType","error reading diago_ppcg_maxiter",10) 5597 END IF 5598 END IF 5599 ELSE 5600 obj%diago_ppcg_maxiter_ispresent = .FALSE. 5601 END IF 5602 ! 5603 tmp_node_list => getElementsByTagname(xml_node, "diago_david_ndim") 5604 tmp_node_list_size = getLength(tmp_node_list) 5605 ! 5606 IF (tmp_node_list_size > 1) THEN 5607 IF (PRESENT(ierr) ) THEN 5608 CALL infomsg("qes_read:electron_controlType","diago_david_ndim: too many occurrences") 5609 ierr = ierr + 1 5610 ELSE 5611 CALL errore("qes_read:electron_controlType","diago_david_ndim: too many occurrences",10) 5612 END IF 5613 END IF 5614 ! 5615 IF (tmp_node_list_size>0) THEN 5616 obj%diago_david_ndim_ispresent = .TRUE. 5617 tmp_node => item(tmp_node_list, 0) 5618 CALL extractDataContent(tmp_node, obj%diago_david_ndim , IOSTAT = iostat_) 5619 IF ( iostat_ /= 0 ) THEN 5620 IF ( PRESENT (ierr ) ) THEN 5621 CALL infomsg("qes_read:electron_controlType","error reading diago_david_ndim") 5622 ierr = ierr + 1 5623 ELSE 5624 CALL errore ("qes_read:electron_controlType","error reading diago_david_ndim",10) 5625 END IF 5626 END IF 5627 ELSE 5628 obj%diago_david_ndim_ispresent = .FALSE. 5629 END IF 5630 ! 5631 ! 5632 obj%lwrite = .TRUE. 5633 ! 5634 END SUBROUTINE qes_read_electron_control 5635 ! 5636 ! 5637 SUBROUTINE qes_read_k_points_IBZ(xml_node, obj, ierr ) 5638 ! 5639 IMPLICIT NONE 5640 ! 5641 TYPE(Node), INTENT(IN), POINTER :: xml_node 5642 TYPE(k_points_IBZ_type), INTENT(OUT) :: obj 5643 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 5644 ! 5645 TYPE(Node), POINTER :: tmp_node 5646 TYPE(NodeList), POINTER :: tmp_node_list 5647 INTEGER :: tmp_node_list_size, index, iostat_ 5648 ! 5649 obj%tagname = getTagName(xml_node) 5650 ! 5651 5652 5653 5654 5655 ! 5656 tmp_node_list => getElementsByTagname(xml_node, "monkhorst_pack") 5657 tmp_node_list_size = getLength(tmp_node_list) 5658 ! 5659 IF (tmp_node_list_size > 1) THEN 5660 IF (PRESENT(ierr) ) THEN 5661 CALL infomsg("qes_read:k_points_IBZType","monkhorst_pack: too many occurrences") 5662 ierr = ierr + 1 5663 ELSE 5664 CALL errore("qes_read:k_points_IBZType","monkhorst_pack: too many occurrences",10) 5665 END IF 5666 END IF 5667 ! 5668 IF (tmp_node_list_size>0) THEN 5669 obj%monkhorst_pack_ispresent = .TRUE. 5670 tmp_node => item(tmp_node_list, 0) 5671 CALL qes_read_monkhorst_pack(tmp_node, obj%monkhorst_pack, ierr ) 5672 ELSE 5673 obj%monkhorst_pack_ispresent = .FALSE. 5674 END IF 5675 ! 5676 tmp_node_list => getElementsByTagname(xml_node, "nk") 5677 tmp_node_list_size = getLength(tmp_node_list) 5678 ! 5679 IF (tmp_node_list_size > 1) THEN 5680 IF (PRESENT(ierr) ) THEN 5681 CALL infomsg("qes_read:k_points_IBZType","nk: too many occurrences") 5682 ierr = ierr + 1 5683 ELSE 5684 CALL errore("qes_read:k_points_IBZType","nk: too many occurrences",10) 5685 END IF 5686 END IF 5687 ! 5688 IF (tmp_node_list_size>0) THEN 5689 obj%nk_ispresent = .TRUE. 5690 tmp_node => item(tmp_node_list, 0) 5691 CALL extractDataContent(tmp_node, obj%nk , IOSTAT = iostat_) 5692 IF ( iostat_ /= 0 ) THEN 5693 IF ( PRESENT (ierr ) ) THEN 5694 CALL infomsg("qes_read:k_points_IBZType","error reading nk") 5695 ierr = ierr + 1 5696 ELSE 5697 CALL errore ("qes_read:k_points_IBZType","error reading nk",10) 5698 END IF 5699 END IF 5700 ELSE 5701 obj%nk_ispresent = .FALSE. 5702 END IF 5703 ! 5704 tmp_node_list => getElementsByTagname(xml_node, "k_point") 5705 tmp_node_list_size = getLength(tmp_node_list) 5706 ! 5707 ! 5708 IF (tmp_node_list_size>0) THEN 5709 obj%k_point_ispresent = .TRUE. 5710 ELSE 5711 obj%k_point_ispresent = .FALSE. 5712 END IF 5713 obj%ndim_k_point = tmp_node_list_size 5714 ALLOCATE(obj%k_point(tmp_node_list_size)) 5715 DO index=1,tmp_node_list_size 5716 tmp_node => item( tmp_node_list, index-1 ) 5717 CALL qes_read_k_point(tmp_node, obj%k_point(index), ierr ) 5718 END DO 5719 ! 5720 ! 5721 obj%lwrite = .TRUE. 5722 ! 5723 END SUBROUTINE qes_read_k_points_IBZ 5724 ! 5725 ! 5726 SUBROUTINE qes_read_monkhorst_pack(xml_node, obj, ierr ) 5727 ! 5728 IMPLICIT NONE 5729 ! 5730 TYPE(Node), INTENT(IN), POINTER :: xml_node 5731 TYPE(monkhorst_pack_type), INTENT(OUT) :: obj 5732 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 5733 ! 5734 TYPE(Node), POINTER :: tmp_node 5735 TYPE(NodeList), POINTER :: tmp_node_list 5736 INTEGER :: tmp_node_list_size, index, iostat_ 5737 ! 5738 obj%tagname = getTagName(xml_node) 5739 ! 5740 5741 IF (hasAttribute(xml_node, "nk1")) THEN 5742 CALL extractDataAttribute(xml_node, "nk1", obj%nk1) 5743 ELSE 5744 IF ( PRESENT(ierr) ) THEN 5745 CALL infomsg ( "qes_read: monkhorst_packType",& 5746 "required attribute nk1 not found" ) 5747 ierr = ierr + 1 5748 ELSE 5749 CALL errore ("qes_read: monkhorst_packType",& 5750 "required attribute nk1 not found", 10 ) 5751 END IF 5752 END IF 5753 ! 5754 IF (hasAttribute(xml_node, "nk2")) THEN 5755 CALL extractDataAttribute(xml_node, "nk2", obj%nk2) 5756 ELSE 5757 IF ( PRESENT(ierr) ) THEN 5758 CALL infomsg ( "qes_read: monkhorst_packType",& 5759 "required attribute nk2 not found" ) 5760 ierr = ierr + 1 5761 ELSE 5762 CALL errore ("qes_read: monkhorst_packType",& 5763 "required attribute nk2 not found", 10 ) 5764 END IF 5765 END IF 5766 ! 5767 IF (hasAttribute(xml_node, "nk3")) THEN 5768 CALL extractDataAttribute(xml_node, "nk3", obj%nk3) 5769 ELSE 5770 IF ( PRESENT(ierr) ) THEN 5771 CALL infomsg ( "qes_read: monkhorst_packType",& 5772 "required attribute nk3 not found" ) 5773 ierr = ierr + 1 5774 ELSE 5775 CALL errore ("qes_read: monkhorst_packType",& 5776 "required attribute nk3 not found", 10 ) 5777 END IF 5778 END IF 5779 ! 5780 IF (hasAttribute(xml_node, "k1")) THEN 5781 CALL extractDataAttribute(xml_node, "k1", obj%k1) 5782 ELSE 5783 IF ( PRESENT(ierr) ) THEN 5784 CALL infomsg ( "qes_read: monkhorst_packType",& 5785 "required attribute k1 not found" ) 5786 ierr = ierr + 1 5787 ELSE 5788 CALL errore ("qes_read: monkhorst_packType",& 5789 "required attribute k1 not found", 10 ) 5790 END IF 5791 END IF 5792 ! 5793 IF (hasAttribute(xml_node, "k2")) THEN 5794 CALL extractDataAttribute(xml_node, "k2", obj%k2) 5795 ELSE 5796 IF ( PRESENT(ierr) ) THEN 5797 CALL infomsg ( "qes_read: monkhorst_packType",& 5798 "required attribute k2 not found" ) 5799 ierr = ierr + 1 5800 ELSE 5801 CALL errore ("qes_read: monkhorst_packType",& 5802 "required attribute k2 not found", 10 ) 5803 END IF 5804 END IF 5805 ! 5806 IF (hasAttribute(xml_node, "k3")) THEN 5807 CALL extractDataAttribute(xml_node, "k3", obj%k3) 5808 ELSE 5809 IF ( PRESENT(ierr) ) THEN 5810 CALL infomsg ( "qes_read: monkhorst_packType",& 5811 "required attribute k3 not found" ) 5812 ierr = ierr + 1 5813 ELSE 5814 CALL errore ("qes_read: monkhorst_packType",& 5815 "required attribute k3 not found", 10 ) 5816 END IF 5817 END IF 5818 ! 5819 5820 5821 5822 ! 5823 ! 5824 CALL extractDataContent(xml_node, obj%monkhorst_pack ) 5825 ! 5826 obj%lwrite = .TRUE. 5827 ! 5828 END SUBROUTINE qes_read_monkhorst_pack 5829 ! 5830 ! 5831 SUBROUTINE qes_read_k_point(xml_node, obj, ierr ) 5832 ! 5833 IMPLICIT NONE 5834 ! 5835 TYPE(Node), INTENT(IN), POINTER :: xml_node 5836 TYPE(k_point_type), INTENT(OUT) :: obj 5837 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 5838 ! 5839 TYPE(Node), POINTER :: tmp_node 5840 TYPE(NodeList), POINTER :: tmp_node_list 5841 INTEGER :: tmp_node_list_size, index, iostat_ 5842 ! 5843 obj%tagname = getTagName(xml_node) 5844 ! 5845 5846 IF (hasAttribute(xml_node, "weight")) THEN 5847 CALL extractDataAttribute(xml_node, "weight", obj%weight) 5848 obj%weight_ispresent = .TRUE. 5849 ELSE 5850 obj%weight_ispresent = .FALSE. 5851 END IF 5852 ! 5853 IF (hasAttribute(xml_node, "label")) THEN 5854 CALL extractDataAttribute(xml_node, "label", obj%label) 5855 obj%label_ispresent = .TRUE. 5856 ELSE 5857 obj%label_ispresent = .FALSE. 5858 END IF 5859 ! 5860 5861 5862 5863 ! 5864 ! 5865 CALL extractDataContent(xml_node, obj%k_point ) 5866 ! 5867 obj%lwrite = .TRUE. 5868 ! 5869 END SUBROUTINE qes_read_k_point 5870 ! 5871 ! 5872 SUBROUTINE qes_read_ion_control(xml_node, obj, ierr ) 5873 ! 5874 IMPLICIT NONE 5875 ! 5876 TYPE(Node), INTENT(IN), POINTER :: xml_node 5877 TYPE(ion_control_type), INTENT(OUT) :: obj 5878 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 5879 ! 5880 TYPE(Node), POINTER :: tmp_node 5881 TYPE(NodeList), POINTER :: tmp_node_list 5882 INTEGER :: tmp_node_list_size, index, iostat_ 5883 ! 5884 obj%tagname = getTagName(xml_node) 5885 ! 5886 5887 5888 5889 5890 ! 5891 tmp_node_list => getElementsByTagname(xml_node, "ion_dynamics") 5892 tmp_node_list_size = getLength(tmp_node_list) 5893 ! 5894 IF (tmp_node_list_size /= 1) THEN 5895 IF (PRESENT(ierr) ) THEN 5896 CALL infomsg("qes_read:ion_controlType","ion_dynamics: wrong number of occurrences") 5897 ierr = ierr + 1 5898 ELSE 5899 CALL errore("qes_read:ion_controlType","ion_dynamics: wrong number of occurrences",10) 5900 END IF 5901 END IF 5902 ! 5903 tmp_node => item(tmp_node_list, 0) 5904 IF (ASSOCIATED(tmp_node))& 5905 CALL extractDataContent(tmp_node, obj%ion_dynamics, IOSTAT = iostat_ ) 5906 IF ( iostat_ /= 0 ) THEN 5907 IF ( PRESENT (ierr ) ) THEN 5908 CALL infomsg("qes_read:ion_controlType","error reading ion_dynamics") 5909 ierr = ierr + 1 5910 ELSE 5911 CALL errore ("qes_read:ion_controlType","error reading ion_dynamics",10) 5912 END IF 5913 END IF 5914 ! 5915 tmp_node_list => getElementsByTagname(xml_node, "upscale") 5916 tmp_node_list_size = getLength(tmp_node_list) 5917 ! 5918 IF (tmp_node_list_size > 1) THEN 5919 IF (PRESENT(ierr) ) THEN 5920 CALL infomsg("qes_read:ion_controlType","upscale: too many occurrences") 5921 ierr = ierr + 1 5922 ELSE 5923 CALL errore("qes_read:ion_controlType","upscale: too many occurrences",10) 5924 END IF 5925 END IF 5926 ! 5927 IF (tmp_node_list_size>0) THEN 5928 obj%upscale_ispresent = .TRUE. 5929 tmp_node => item(tmp_node_list, 0) 5930 CALL extractDataContent(tmp_node, obj%upscale , IOSTAT = iostat_) 5931 IF ( iostat_ /= 0 ) THEN 5932 IF ( PRESENT (ierr ) ) THEN 5933 CALL infomsg("qes_read:ion_controlType","error reading upscale") 5934 ierr = ierr + 1 5935 ELSE 5936 CALL errore ("qes_read:ion_controlType","error reading upscale",10) 5937 END IF 5938 END IF 5939 ELSE 5940 obj%upscale_ispresent = .FALSE. 5941 END IF 5942 ! 5943 tmp_node_list => getElementsByTagname(xml_node, "remove_rigid_rot") 5944 tmp_node_list_size = getLength(tmp_node_list) 5945 ! 5946 IF (tmp_node_list_size > 1) THEN 5947 IF (PRESENT(ierr) ) THEN 5948 CALL infomsg("qes_read:ion_controlType","remove_rigid_rot: too many occurrences") 5949 ierr = ierr + 1 5950 ELSE 5951 CALL errore("qes_read:ion_controlType","remove_rigid_rot: too many occurrences",10) 5952 END IF 5953 END IF 5954 ! 5955 IF (tmp_node_list_size>0) THEN 5956 obj%remove_rigid_rot_ispresent = .TRUE. 5957 tmp_node => item(tmp_node_list, 0) 5958 CALL extractDataContent(tmp_node, obj%remove_rigid_rot , IOSTAT = iostat_) 5959 IF ( iostat_ /= 0 ) THEN 5960 IF ( PRESENT (ierr ) ) THEN 5961 CALL infomsg("qes_read:ion_controlType","error reading remove_rigid_rot") 5962 ierr = ierr + 1 5963 ELSE 5964 CALL errore ("qes_read:ion_controlType","error reading remove_rigid_rot",10) 5965 END IF 5966 END IF 5967 ELSE 5968 obj%remove_rigid_rot_ispresent = .FALSE. 5969 END IF 5970 ! 5971 tmp_node_list => getElementsByTagname(xml_node, "refold_pos") 5972 tmp_node_list_size = getLength(tmp_node_list) 5973 ! 5974 IF (tmp_node_list_size > 1) THEN 5975 IF (PRESENT(ierr) ) THEN 5976 CALL infomsg("qes_read:ion_controlType","refold_pos: too many occurrences") 5977 ierr = ierr + 1 5978 ELSE 5979 CALL errore("qes_read:ion_controlType","refold_pos: too many occurrences",10) 5980 END IF 5981 END IF 5982 ! 5983 IF (tmp_node_list_size>0) THEN 5984 obj%refold_pos_ispresent = .TRUE. 5985 tmp_node => item(tmp_node_list, 0) 5986 CALL extractDataContent(tmp_node, obj%refold_pos , IOSTAT = iostat_) 5987 IF ( iostat_ /= 0 ) THEN 5988 IF ( PRESENT (ierr ) ) THEN 5989 CALL infomsg("qes_read:ion_controlType","error reading refold_pos") 5990 ierr = ierr + 1 5991 ELSE 5992 CALL errore ("qes_read:ion_controlType","error reading refold_pos",10) 5993 END IF 5994 END IF 5995 ELSE 5996 obj%refold_pos_ispresent = .FALSE. 5997 END IF 5998 ! 5999 tmp_node_list => getElementsByTagname(xml_node, "bfgs") 6000 tmp_node_list_size = getLength(tmp_node_list) 6001 ! 6002 IF (tmp_node_list_size > 1) THEN 6003 IF (PRESENT(ierr) ) THEN 6004 CALL infomsg("qes_read:ion_controlType","bfgs: too many occurrences") 6005 ierr = ierr + 1 6006 ELSE 6007 CALL errore("qes_read:ion_controlType","bfgs: too many occurrences",10) 6008 END IF 6009 END IF 6010 ! 6011 IF (tmp_node_list_size>0) THEN 6012 obj%bfgs_ispresent = .TRUE. 6013 tmp_node => item(tmp_node_list, 0) 6014 CALL qes_read_bfgs(tmp_node, obj%bfgs, ierr ) 6015 ELSE 6016 obj%bfgs_ispresent = .FALSE. 6017 END IF 6018 ! 6019 tmp_node_list => getElementsByTagname(xml_node, "md") 6020 tmp_node_list_size = getLength(tmp_node_list) 6021 ! 6022 IF (tmp_node_list_size > 1) THEN 6023 IF (PRESENT(ierr) ) THEN 6024 CALL infomsg("qes_read:ion_controlType","md: too many occurrences") 6025 ierr = ierr + 1 6026 ELSE 6027 CALL errore("qes_read:ion_controlType","md: too many occurrences",10) 6028 END IF 6029 END IF 6030 ! 6031 IF (tmp_node_list_size>0) THEN 6032 obj%md_ispresent = .TRUE. 6033 tmp_node => item(tmp_node_list, 0) 6034 CALL qes_read_md(tmp_node, obj%md, ierr ) 6035 ELSE 6036 obj%md_ispresent = .FALSE. 6037 END IF 6038 ! 6039 ! 6040 obj%lwrite = .TRUE. 6041 ! 6042 END SUBROUTINE qes_read_ion_control 6043 ! 6044 ! 6045 SUBROUTINE qes_read_bfgs(xml_node, obj, ierr ) 6046 ! 6047 IMPLICIT NONE 6048 ! 6049 TYPE(Node), INTENT(IN), POINTER :: xml_node 6050 TYPE(bfgs_type), INTENT(OUT) :: obj 6051 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 6052 ! 6053 TYPE(Node), POINTER :: tmp_node 6054 TYPE(NodeList), POINTER :: tmp_node_list 6055 INTEGER :: tmp_node_list_size, index, iostat_ 6056 ! 6057 obj%tagname = getTagName(xml_node) 6058 ! 6059 6060 6061 6062 6063 ! 6064 tmp_node_list => getElementsByTagname(xml_node, "ndim") 6065 tmp_node_list_size = getLength(tmp_node_list) 6066 ! 6067 IF (tmp_node_list_size /= 1) THEN 6068 IF (PRESENT(ierr) ) THEN 6069 CALL infomsg("qes_read:bfgsType","ndim: wrong number of occurrences") 6070 ierr = ierr + 1 6071 ELSE 6072 CALL errore("qes_read:bfgsType","ndim: wrong number of occurrences",10) 6073 END IF 6074 END IF 6075 ! 6076 tmp_node => item(tmp_node_list, 0) 6077 IF (ASSOCIATED(tmp_node))& 6078 CALL extractDataContent(tmp_node, obj%ndim, IOSTAT = iostat_ ) 6079 IF ( iostat_ /= 0 ) THEN 6080 IF ( PRESENT (ierr ) ) THEN 6081 CALL infomsg("qes_read:bfgsType","error reading ndim") 6082 ierr = ierr + 1 6083 ELSE 6084 CALL errore ("qes_read:bfgsType","error reading ndim",10) 6085 END IF 6086 END IF 6087 ! 6088 tmp_node_list => getElementsByTagname(xml_node, "trust_radius_min") 6089 tmp_node_list_size = getLength(tmp_node_list) 6090 ! 6091 IF (tmp_node_list_size /= 1) THEN 6092 IF (PRESENT(ierr) ) THEN 6093 CALL infomsg("qes_read:bfgsType","trust_radius_min: wrong number of occurrences") 6094 ierr = ierr + 1 6095 ELSE 6096 CALL errore("qes_read:bfgsType","trust_radius_min: wrong number of occurrences",10) 6097 END IF 6098 END IF 6099 ! 6100 tmp_node => item(tmp_node_list, 0) 6101 IF (ASSOCIATED(tmp_node))& 6102 CALL extractDataContent(tmp_node, obj%trust_radius_min, IOSTAT = iostat_ ) 6103 IF ( iostat_ /= 0 ) THEN 6104 IF ( PRESENT (ierr ) ) THEN 6105 CALL infomsg("qes_read:bfgsType","error reading trust_radius_min") 6106 ierr = ierr + 1 6107 ELSE 6108 CALL errore ("qes_read:bfgsType","error reading trust_radius_min",10) 6109 END IF 6110 END IF 6111 ! 6112 tmp_node_list => getElementsByTagname(xml_node, "trust_radius_max") 6113 tmp_node_list_size = getLength(tmp_node_list) 6114 ! 6115 IF (tmp_node_list_size /= 1) THEN 6116 IF (PRESENT(ierr) ) THEN 6117 CALL infomsg("qes_read:bfgsType","trust_radius_max: wrong number of occurrences") 6118 ierr = ierr + 1 6119 ELSE 6120 CALL errore("qes_read:bfgsType","trust_radius_max: wrong number of occurrences",10) 6121 END IF 6122 END IF 6123 ! 6124 tmp_node => item(tmp_node_list, 0) 6125 IF (ASSOCIATED(tmp_node))& 6126 CALL extractDataContent(tmp_node, obj%trust_radius_max, IOSTAT = iostat_ ) 6127 IF ( iostat_ /= 0 ) THEN 6128 IF ( PRESENT (ierr ) ) THEN 6129 CALL infomsg("qes_read:bfgsType","error reading trust_radius_max") 6130 ierr = ierr + 1 6131 ELSE 6132 CALL errore ("qes_read:bfgsType","error reading trust_radius_max",10) 6133 END IF 6134 END IF 6135 ! 6136 tmp_node_list => getElementsByTagname(xml_node, "trust_radius_init") 6137 tmp_node_list_size = getLength(tmp_node_list) 6138 ! 6139 IF (tmp_node_list_size /= 1) THEN 6140 IF (PRESENT(ierr) ) THEN 6141 CALL infomsg("qes_read:bfgsType","trust_radius_init: wrong number of occurrences") 6142 ierr = ierr + 1 6143 ELSE 6144 CALL errore("qes_read:bfgsType","trust_radius_init: wrong number of occurrences",10) 6145 END IF 6146 END IF 6147 ! 6148 tmp_node => item(tmp_node_list, 0) 6149 IF (ASSOCIATED(tmp_node))& 6150 CALL extractDataContent(tmp_node, obj%trust_radius_init, IOSTAT = iostat_ ) 6151 IF ( iostat_ /= 0 ) THEN 6152 IF ( PRESENT (ierr ) ) THEN 6153 CALL infomsg("qes_read:bfgsType","error reading trust_radius_init") 6154 ierr = ierr + 1 6155 ELSE 6156 CALL errore ("qes_read:bfgsType","error reading trust_radius_init",10) 6157 END IF 6158 END IF 6159 ! 6160 tmp_node_list => getElementsByTagname(xml_node, "w1") 6161 tmp_node_list_size = getLength(tmp_node_list) 6162 ! 6163 IF (tmp_node_list_size /= 1) THEN 6164 IF (PRESENT(ierr) ) THEN 6165 CALL infomsg("qes_read:bfgsType","w1: wrong number of occurrences") 6166 ierr = ierr + 1 6167 ELSE 6168 CALL errore("qes_read:bfgsType","w1: wrong number of occurrences",10) 6169 END IF 6170 END IF 6171 ! 6172 tmp_node => item(tmp_node_list, 0) 6173 IF (ASSOCIATED(tmp_node))& 6174 CALL extractDataContent(tmp_node, obj%w1, IOSTAT = iostat_ ) 6175 IF ( iostat_ /= 0 ) THEN 6176 IF ( PRESENT (ierr ) ) THEN 6177 CALL infomsg("qes_read:bfgsType","error reading w1") 6178 ierr = ierr + 1 6179 ELSE 6180 CALL errore ("qes_read:bfgsType","error reading w1",10) 6181 END IF 6182 END IF 6183 ! 6184 tmp_node_list => getElementsByTagname(xml_node, "w2") 6185 tmp_node_list_size = getLength(tmp_node_list) 6186 ! 6187 IF (tmp_node_list_size /= 1) THEN 6188 IF (PRESENT(ierr) ) THEN 6189 CALL infomsg("qes_read:bfgsType","w2: wrong number of occurrences") 6190 ierr = ierr + 1 6191 ELSE 6192 CALL errore("qes_read:bfgsType","w2: wrong number of occurrences",10) 6193 END IF 6194 END IF 6195 ! 6196 tmp_node => item(tmp_node_list, 0) 6197 IF (ASSOCIATED(tmp_node))& 6198 CALL extractDataContent(tmp_node, obj%w2, IOSTAT = iostat_ ) 6199 IF ( iostat_ /= 0 ) THEN 6200 IF ( PRESENT (ierr ) ) THEN 6201 CALL infomsg("qes_read:bfgsType","error reading w2") 6202 ierr = ierr + 1 6203 ELSE 6204 CALL errore ("qes_read:bfgsType","error reading w2",10) 6205 END IF 6206 END IF 6207 ! 6208 ! 6209 obj%lwrite = .TRUE. 6210 ! 6211 END SUBROUTINE qes_read_bfgs 6212 ! 6213 ! 6214 SUBROUTINE qes_read_md(xml_node, obj, ierr ) 6215 ! 6216 IMPLICIT NONE 6217 ! 6218 TYPE(Node), INTENT(IN), POINTER :: xml_node 6219 TYPE(md_type), INTENT(OUT) :: obj 6220 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 6221 ! 6222 TYPE(Node), POINTER :: tmp_node 6223 TYPE(NodeList), POINTER :: tmp_node_list 6224 INTEGER :: tmp_node_list_size, index, iostat_ 6225 ! 6226 obj%tagname = getTagName(xml_node) 6227 ! 6228 6229 6230 6231 6232 ! 6233 tmp_node_list => getElementsByTagname(xml_node, "pot_extrapolation") 6234 tmp_node_list_size = getLength(tmp_node_list) 6235 ! 6236 IF (tmp_node_list_size /= 1) THEN 6237 IF (PRESENT(ierr) ) THEN 6238 CALL infomsg("qes_read:mdType","pot_extrapolation: wrong number of occurrences") 6239 ierr = ierr + 1 6240 ELSE 6241 CALL errore("qes_read:mdType","pot_extrapolation: wrong number of occurrences",10) 6242 END IF 6243 END IF 6244 ! 6245 tmp_node => item(tmp_node_list, 0) 6246 IF (ASSOCIATED(tmp_node))& 6247 CALL extractDataContent(tmp_node, obj%pot_extrapolation, IOSTAT = iostat_ ) 6248 IF ( iostat_ /= 0 ) THEN 6249 IF ( PRESENT (ierr ) ) THEN 6250 CALL infomsg("qes_read:mdType","error reading pot_extrapolation") 6251 ierr = ierr + 1 6252 ELSE 6253 CALL errore ("qes_read:mdType","error reading pot_extrapolation",10) 6254 END IF 6255 END IF 6256 ! 6257 tmp_node_list => getElementsByTagname(xml_node, "wfc_extrapolation") 6258 tmp_node_list_size = getLength(tmp_node_list) 6259 ! 6260 IF (tmp_node_list_size /= 1) THEN 6261 IF (PRESENT(ierr) ) THEN 6262 CALL infomsg("qes_read:mdType","wfc_extrapolation: wrong number of occurrences") 6263 ierr = ierr + 1 6264 ELSE 6265 CALL errore("qes_read:mdType","wfc_extrapolation: wrong number of occurrences",10) 6266 END IF 6267 END IF 6268 ! 6269 tmp_node => item(tmp_node_list, 0) 6270 IF (ASSOCIATED(tmp_node))& 6271 CALL extractDataContent(tmp_node, obj%wfc_extrapolation, IOSTAT = iostat_ ) 6272 IF ( iostat_ /= 0 ) THEN 6273 IF ( PRESENT (ierr ) ) THEN 6274 CALL infomsg("qes_read:mdType","error reading wfc_extrapolation") 6275 ierr = ierr + 1 6276 ELSE 6277 CALL errore ("qes_read:mdType","error reading wfc_extrapolation",10) 6278 END IF 6279 END IF 6280 ! 6281 tmp_node_list => getElementsByTagname(xml_node, "ion_temperature") 6282 tmp_node_list_size = getLength(tmp_node_list) 6283 ! 6284 IF (tmp_node_list_size /= 1) THEN 6285 IF (PRESENT(ierr) ) THEN 6286 CALL infomsg("qes_read:mdType","ion_temperature: wrong number of occurrences") 6287 ierr = ierr + 1 6288 ELSE 6289 CALL errore("qes_read:mdType","ion_temperature: wrong number of occurrences",10) 6290 END IF 6291 END IF 6292 ! 6293 tmp_node => item(tmp_node_list, 0) 6294 IF (ASSOCIATED(tmp_node))& 6295 CALL extractDataContent(tmp_node, obj%ion_temperature, IOSTAT = iostat_ ) 6296 IF ( iostat_ /= 0 ) THEN 6297 IF ( PRESENT (ierr ) ) THEN 6298 CALL infomsg("qes_read:mdType","error reading ion_temperature") 6299 ierr = ierr + 1 6300 ELSE 6301 CALL errore ("qes_read:mdType","error reading ion_temperature",10) 6302 END IF 6303 END IF 6304 ! 6305 tmp_node_list => getElementsByTagname(xml_node, "timestep") 6306 tmp_node_list_size = getLength(tmp_node_list) 6307 ! 6308 IF (tmp_node_list_size /= 1) THEN 6309 IF (PRESENT(ierr) ) THEN 6310 CALL infomsg("qes_read:mdType","timestep: wrong number of occurrences") 6311 ierr = ierr + 1 6312 ELSE 6313 CALL errore("qes_read:mdType","timestep: wrong number of occurrences",10) 6314 END IF 6315 END IF 6316 ! 6317 tmp_node => item(tmp_node_list, 0) 6318 IF (ASSOCIATED(tmp_node))& 6319 CALL extractDataContent(tmp_node, obj%timestep, IOSTAT = iostat_ ) 6320 IF ( iostat_ /= 0 ) THEN 6321 IF ( PRESENT (ierr ) ) THEN 6322 CALL infomsg("qes_read:mdType","error reading timestep") 6323 ierr = ierr + 1 6324 ELSE 6325 CALL errore ("qes_read:mdType","error reading timestep",10) 6326 END IF 6327 END IF 6328 ! 6329 tmp_node_list => getElementsByTagname(xml_node, "tempw") 6330 tmp_node_list_size = getLength(tmp_node_list) 6331 ! 6332 IF (tmp_node_list_size /= 1) THEN 6333 IF (PRESENT(ierr) ) THEN 6334 CALL infomsg("qes_read:mdType","tempw: wrong number of occurrences") 6335 ierr = ierr + 1 6336 ELSE 6337 CALL errore("qes_read:mdType","tempw: wrong number of occurrences",10) 6338 END IF 6339 END IF 6340 ! 6341 tmp_node => item(tmp_node_list, 0) 6342 IF (ASSOCIATED(tmp_node))& 6343 CALL extractDataContent(tmp_node, obj%tempw, IOSTAT = iostat_ ) 6344 IF ( iostat_ /= 0 ) THEN 6345 IF ( PRESENT (ierr ) ) THEN 6346 CALL infomsg("qes_read:mdType","error reading tempw") 6347 ierr = ierr + 1 6348 ELSE 6349 CALL errore ("qes_read:mdType","error reading tempw",10) 6350 END IF 6351 END IF 6352 ! 6353 tmp_node_list => getElementsByTagname(xml_node, "tolp") 6354 tmp_node_list_size = getLength(tmp_node_list) 6355 ! 6356 IF (tmp_node_list_size /= 1) THEN 6357 IF (PRESENT(ierr) ) THEN 6358 CALL infomsg("qes_read:mdType","tolp: wrong number of occurrences") 6359 ierr = ierr + 1 6360 ELSE 6361 CALL errore("qes_read:mdType","tolp: wrong number of occurrences",10) 6362 END IF 6363 END IF 6364 ! 6365 tmp_node => item(tmp_node_list, 0) 6366 IF (ASSOCIATED(tmp_node))& 6367 CALL extractDataContent(tmp_node, obj%tolp, IOSTAT = iostat_ ) 6368 IF ( iostat_ /= 0 ) THEN 6369 IF ( PRESENT (ierr ) ) THEN 6370 CALL infomsg("qes_read:mdType","error reading tolp") 6371 ierr = ierr + 1 6372 ELSE 6373 CALL errore ("qes_read:mdType","error reading tolp",10) 6374 END IF 6375 END IF 6376 ! 6377 tmp_node_list => getElementsByTagname(xml_node, "deltaT") 6378 tmp_node_list_size = getLength(tmp_node_list) 6379 ! 6380 IF (tmp_node_list_size /= 1) THEN 6381 IF (PRESENT(ierr) ) THEN 6382 CALL infomsg("qes_read:mdType","deltaT: wrong number of occurrences") 6383 ierr = ierr + 1 6384 ELSE 6385 CALL errore("qes_read:mdType","deltaT: wrong number of occurrences",10) 6386 END IF 6387 END IF 6388 ! 6389 tmp_node => item(tmp_node_list, 0) 6390 IF (ASSOCIATED(tmp_node))& 6391 CALL extractDataContent(tmp_node, obj%deltaT, IOSTAT = iostat_ ) 6392 IF ( iostat_ /= 0 ) THEN 6393 IF ( PRESENT (ierr ) ) THEN 6394 CALL infomsg("qes_read:mdType","error reading deltaT") 6395 ierr = ierr + 1 6396 ELSE 6397 CALL errore ("qes_read:mdType","error reading deltaT",10) 6398 END IF 6399 END IF 6400 ! 6401 tmp_node_list => getElementsByTagname(xml_node, "nraise") 6402 tmp_node_list_size = getLength(tmp_node_list) 6403 ! 6404 IF (tmp_node_list_size /= 1) THEN 6405 IF (PRESENT(ierr) ) THEN 6406 CALL infomsg("qes_read:mdType","nraise: wrong number of occurrences") 6407 ierr = ierr + 1 6408 ELSE 6409 CALL errore("qes_read:mdType","nraise: wrong number of occurrences",10) 6410 END IF 6411 END IF 6412 ! 6413 tmp_node => item(tmp_node_list, 0) 6414 IF (ASSOCIATED(tmp_node))& 6415 CALL extractDataContent(tmp_node, obj%nraise, IOSTAT = iostat_ ) 6416 IF ( iostat_ /= 0 ) THEN 6417 IF ( PRESENT (ierr ) ) THEN 6418 CALL infomsg("qes_read:mdType","error reading nraise") 6419 ierr = ierr + 1 6420 ELSE 6421 CALL errore ("qes_read:mdType","error reading nraise",10) 6422 END IF 6423 END IF 6424 ! 6425 ! 6426 obj%lwrite = .TRUE. 6427 ! 6428 END SUBROUTINE qes_read_md 6429 ! 6430 ! 6431 SUBROUTINE qes_read_cell_control(xml_node, obj, ierr ) 6432 ! 6433 IMPLICIT NONE 6434 ! 6435 TYPE(Node), INTENT(IN), POINTER :: xml_node 6436 TYPE(cell_control_type), INTENT(OUT) :: obj 6437 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 6438 ! 6439 TYPE(Node), POINTER :: tmp_node 6440 TYPE(NodeList), POINTER :: tmp_node_list 6441 INTEGER :: tmp_node_list_size, index, iostat_ 6442 ! 6443 obj%tagname = getTagName(xml_node) 6444 ! 6445 6446 6447 6448 6449 ! 6450 tmp_node_list => getElementsByTagname(xml_node, "cell_dynamics") 6451 tmp_node_list_size = getLength(tmp_node_list) 6452 ! 6453 IF (tmp_node_list_size /= 1) THEN 6454 IF (PRESENT(ierr) ) THEN 6455 CALL infomsg("qes_read:cell_controlType","cell_dynamics: wrong number of occurrences") 6456 ierr = ierr + 1 6457 ELSE 6458 CALL errore("qes_read:cell_controlType","cell_dynamics: wrong number of occurrences",10) 6459 END IF 6460 END IF 6461 ! 6462 tmp_node => item(tmp_node_list, 0) 6463 IF (ASSOCIATED(tmp_node))& 6464 CALL extractDataContent(tmp_node, obj%cell_dynamics, IOSTAT = iostat_ ) 6465 IF ( iostat_ /= 0 ) THEN 6466 IF ( PRESENT (ierr ) ) THEN 6467 CALL infomsg("qes_read:cell_controlType","error reading cell_dynamics") 6468 ierr = ierr + 1 6469 ELSE 6470 CALL errore ("qes_read:cell_controlType","error reading cell_dynamics",10) 6471 END IF 6472 END IF 6473 ! 6474 tmp_node_list => getElementsByTagname(xml_node, "pressure") 6475 tmp_node_list_size = getLength(tmp_node_list) 6476 ! 6477 IF (tmp_node_list_size /= 1) THEN 6478 IF (PRESENT(ierr) ) THEN 6479 CALL infomsg("qes_read:cell_controlType","pressure: wrong number of occurrences") 6480 ierr = ierr + 1 6481 ELSE 6482 CALL errore("qes_read:cell_controlType","pressure: wrong number of occurrences",10) 6483 END IF 6484 END IF 6485 ! 6486 tmp_node => item(tmp_node_list, 0) 6487 IF (ASSOCIATED(tmp_node))& 6488 CALL extractDataContent(tmp_node, obj%pressure, IOSTAT = iostat_ ) 6489 IF ( iostat_ /= 0 ) THEN 6490 IF ( PRESENT (ierr ) ) THEN 6491 CALL infomsg("qes_read:cell_controlType","error reading pressure") 6492 ierr = ierr + 1 6493 ELSE 6494 CALL errore ("qes_read:cell_controlType","error reading pressure",10) 6495 END IF 6496 END IF 6497 ! 6498 tmp_node_list => getElementsByTagname(xml_node, "wmass") 6499 tmp_node_list_size = getLength(tmp_node_list) 6500 ! 6501 IF (tmp_node_list_size > 1) THEN 6502 IF (PRESENT(ierr) ) THEN 6503 CALL infomsg("qes_read:cell_controlType","wmass: too many occurrences") 6504 ierr = ierr + 1 6505 ELSE 6506 CALL errore("qes_read:cell_controlType","wmass: too many occurrences",10) 6507 END IF 6508 END IF 6509 ! 6510 IF (tmp_node_list_size>0) THEN 6511 obj%wmass_ispresent = .TRUE. 6512 tmp_node => item(tmp_node_list, 0) 6513 CALL extractDataContent(tmp_node, obj%wmass , IOSTAT = iostat_) 6514 IF ( iostat_ /= 0 ) THEN 6515 IF ( PRESENT (ierr ) ) THEN 6516 CALL infomsg("qes_read:cell_controlType","error reading wmass") 6517 ierr = ierr + 1 6518 ELSE 6519 CALL errore ("qes_read:cell_controlType","error reading wmass",10) 6520 END IF 6521 END IF 6522 ELSE 6523 obj%wmass_ispresent = .FALSE. 6524 END IF 6525 ! 6526 tmp_node_list => getElementsByTagname(xml_node, "cell_factor") 6527 tmp_node_list_size = getLength(tmp_node_list) 6528 ! 6529 IF (tmp_node_list_size > 1) THEN 6530 IF (PRESENT(ierr) ) THEN 6531 CALL infomsg("qes_read:cell_controlType","cell_factor: too many occurrences") 6532 ierr = ierr + 1 6533 ELSE 6534 CALL errore("qes_read:cell_controlType","cell_factor: too many occurrences",10) 6535 END IF 6536 END IF 6537 ! 6538 IF (tmp_node_list_size>0) THEN 6539 obj%cell_factor_ispresent = .TRUE. 6540 tmp_node => item(tmp_node_list, 0) 6541 CALL extractDataContent(tmp_node, obj%cell_factor , IOSTAT = iostat_) 6542 IF ( iostat_ /= 0 ) THEN 6543 IF ( PRESENT (ierr ) ) THEN 6544 CALL infomsg("qes_read:cell_controlType","error reading cell_factor") 6545 ierr = ierr + 1 6546 ELSE 6547 CALL errore ("qes_read:cell_controlType","error reading cell_factor",10) 6548 END IF 6549 END IF 6550 ELSE 6551 obj%cell_factor_ispresent = .FALSE. 6552 END IF 6553 ! 6554 tmp_node_list => getElementsByTagname(xml_node, "fix_volume") 6555 tmp_node_list_size = getLength(tmp_node_list) 6556 ! 6557 IF (tmp_node_list_size > 1) THEN 6558 IF (PRESENT(ierr) ) THEN 6559 CALL infomsg("qes_read:cell_controlType","fix_volume: too many occurrences") 6560 ierr = ierr + 1 6561 ELSE 6562 CALL errore("qes_read:cell_controlType","fix_volume: too many occurrences",10) 6563 END IF 6564 END IF 6565 ! 6566 IF (tmp_node_list_size>0) THEN 6567 obj%fix_volume_ispresent = .TRUE. 6568 tmp_node => item(tmp_node_list, 0) 6569 CALL extractDataContent(tmp_node, obj%fix_volume , IOSTAT = iostat_) 6570 IF ( iostat_ /= 0 ) THEN 6571 IF ( PRESENT (ierr ) ) THEN 6572 CALL infomsg("qes_read:cell_controlType","error reading fix_volume") 6573 ierr = ierr + 1 6574 ELSE 6575 CALL errore ("qes_read:cell_controlType","error reading fix_volume",10) 6576 END IF 6577 END IF 6578 ELSE 6579 obj%fix_volume_ispresent = .FALSE. 6580 END IF 6581 ! 6582 tmp_node_list => getElementsByTagname(xml_node, "fix_area") 6583 tmp_node_list_size = getLength(tmp_node_list) 6584 ! 6585 IF (tmp_node_list_size > 1) THEN 6586 IF (PRESENT(ierr) ) THEN 6587 CALL infomsg("qes_read:cell_controlType","fix_area: too many occurrences") 6588 ierr = ierr + 1 6589 ELSE 6590 CALL errore("qes_read:cell_controlType","fix_area: too many occurrences",10) 6591 END IF 6592 END IF 6593 ! 6594 IF (tmp_node_list_size>0) THEN 6595 obj%fix_area_ispresent = .TRUE. 6596 tmp_node => item(tmp_node_list, 0) 6597 CALL extractDataContent(tmp_node, obj%fix_area , IOSTAT = iostat_) 6598 IF ( iostat_ /= 0 ) THEN 6599 IF ( PRESENT (ierr ) ) THEN 6600 CALL infomsg("qes_read:cell_controlType","error reading fix_area") 6601 ierr = ierr + 1 6602 ELSE 6603 CALL errore ("qes_read:cell_controlType","error reading fix_area",10) 6604 END IF 6605 END IF 6606 ELSE 6607 obj%fix_area_ispresent = .FALSE. 6608 END IF 6609 ! 6610 tmp_node_list => getElementsByTagname(xml_node, "isotropic") 6611 tmp_node_list_size = getLength(tmp_node_list) 6612 ! 6613 IF (tmp_node_list_size > 1) THEN 6614 IF (PRESENT(ierr) ) THEN 6615 CALL infomsg("qes_read:cell_controlType","isotropic: too many occurrences") 6616 ierr = ierr + 1 6617 ELSE 6618 CALL errore("qes_read:cell_controlType","isotropic: too many occurrences",10) 6619 END IF 6620 END IF 6621 ! 6622 IF (tmp_node_list_size>0) THEN 6623 obj%isotropic_ispresent = .TRUE. 6624 tmp_node => item(tmp_node_list, 0) 6625 CALL extractDataContent(tmp_node, obj%isotropic , IOSTAT = iostat_) 6626 IF ( iostat_ /= 0 ) THEN 6627 IF ( PRESENT (ierr ) ) THEN 6628 CALL infomsg("qes_read:cell_controlType","error reading isotropic") 6629 ierr = ierr + 1 6630 ELSE 6631 CALL errore ("qes_read:cell_controlType","error reading isotropic",10) 6632 END IF 6633 END IF 6634 ELSE 6635 obj%isotropic_ispresent = .FALSE. 6636 END IF 6637 ! 6638 tmp_node_list => getElementsByTagname(xml_node, "free_cell") 6639 tmp_node_list_size = getLength(tmp_node_list) 6640 ! 6641 IF (tmp_node_list_size > 1) THEN 6642 IF (PRESENT(ierr) ) THEN 6643 CALL infomsg("qes_read:cell_controlType","free_cell: too many occurrences") 6644 ierr = ierr + 1 6645 ELSE 6646 CALL errore("qes_read:cell_controlType","free_cell: too many occurrences",10) 6647 END IF 6648 END IF 6649 ! 6650 IF (tmp_node_list_size>0) THEN 6651 obj%free_cell_ispresent = .TRUE. 6652 tmp_node => item(tmp_node_list, 0) 6653 CALL qes_read_integerMatrix(tmp_node, obj%free_cell, ierr ) 6654 ELSE 6655 obj%free_cell_ispresent = .FALSE. 6656 END IF 6657 ! 6658 ! 6659 obj%lwrite = .TRUE. 6660 ! 6661 END SUBROUTINE qes_read_cell_control 6662 ! 6663 ! 6664 SUBROUTINE qes_read_symmetry_flags(xml_node, obj, ierr ) 6665 ! 6666 IMPLICIT NONE 6667 ! 6668 TYPE(Node), INTENT(IN), POINTER :: xml_node 6669 TYPE(symmetry_flags_type), INTENT(OUT) :: obj 6670 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 6671 ! 6672 TYPE(Node), POINTER :: tmp_node 6673 TYPE(NodeList), POINTER :: tmp_node_list 6674 INTEGER :: tmp_node_list_size, index, iostat_ 6675 ! 6676 obj%tagname = getTagName(xml_node) 6677 ! 6678 6679 6680 6681 6682 ! 6683 tmp_node_list => getElementsByTagname(xml_node, "nosym") 6684 tmp_node_list_size = getLength(tmp_node_list) 6685 ! 6686 IF (tmp_node_list_size /= 1) THEN 6687 IF (PRESENT(ierr) ) THEN 6688 CALL infomsg("qes_read:symmetry_flagsType","nosym: wrong number of occurrences") 6689 ierr = ierr + 1 6690 ELSE 6691 CALL errore("qes_read:symmetry_flagsType","nosym: wrong number of occurrences",10) 6692 END IF 6693 END IF 6694 ! 6695 tmp_node => item(tmp_node_list, 0) 6696 IF (ASSOCIATED(tmp_node))& 6697 CALL extractDataContent(tmp_node, obj%nosym, IOSTAT = iostat_ ) 6698 IF ( iostat_ /= 0 ) THEN 6699 IF ( PRESENT (ierr ) ) THEN 6700 CALL infomsg("qes_read:symmetry_flagsType","error reading nosym") 6701 ierr = ierr + 1 6702 ELSE 6703 CALL errore ("qes_read:symmetry_flagsType","error reading nosym",10) 6704 END IF 6705 END IF 6706 ! 6707 tmp_node_list => getElementsByTagname(xml_node, "nosym_evc") 6708 tmp_node_list_size = getLength(tmp_node_list) 6709 ! 6710 IF (tmp_node_list_size /= 1) THEN 6711 IF (PRESENT(ierr) ) THEN 6712 CALL infomsg("qes_read:symmetry_flagsType","nosym_evc: wrong number of occurrences") 6713 ierr = ierr + 1 6714 ELSE 6715 CALL errore("qes_read:symmetry_flagsType","nosym_evc: wrong number of occurrences",10) 6716 END IF 6717 END IF 6718 ! 6719 tmp_node => item(tmp_node_list, 0) 6720 IF (ASSOCIATED(tmp_node))& 6721 CALL extractDataContent(tmp_node, obj%nosym_evc, IOSTAT = iostat_ ) 6722 IF ( iostat_ /= 0 ) THEN 6723 IF ( PRESENT (ierr ) ) THEN 6724 CALL infomsg("qes_read:symmetry_flagsType","error reading nosym_evc") 6725 ierr = ierr + 1 6726 ELSE 6727 CALL errore ("qes_read:symmetry_flagsType","error reading nosym_evc",10) 6728 END IF 6729 END IF 6730 ! 6731 tmp_node_list => getElementsByTagname(xml_node, "noinv") 6732 tmp_node_list_size = getLength(tmp_node_list) 6733 ! 6734 IF (tmp_node_list_size /= 1) THEN 6735 IF (PRESENT(ierr) ) THEN 6736 CALL infomsg("qes_read:symmetry_flagsType","noinv: wrong number of occurrences") 6737 ierr = ierr + 1 6738 ELSE 6739 CALL errore("qes_read:symmetry_flagsType","noinv: wrong number of occurrences",10) 6740 END IF 6741 END IF 6742 ! 6743 tmp_node => item(tmp_node_list, 0) 6744 IF (ASSOCIATED(tmp_node))& 6745 CALL extractDataContent(tmp_node, obj%noinv, IOSTAT = iostat_ ) 6746 IF ( iostat_ /= 0 ) THEN 6747 IF ( PRESENT (ierr ) ) THEN 6748 CALL infomsg("qes_read:symmetry_flagsType","error reading noinv") 6749 ierr = ierr + 1 6750 ELSE 6751 CALL errore ("qes_read:symmetry_flagsType","error reading noinv",10) 6752 END IF 6753 END IF 6754 ! 6755 tmp_node_list => getElementsByTagname(xml_node, "no_t_rev") 6756 tmp_node_list_size = getLength(tmp_node_list) 6757 ! 6758 IF (tmp_node_list_size /= 1) THEN 6759 IF (PRESENT(ierr) ) THEN 6760 CALL infomsg("qes_read:symmetry_flagsType","no_t_rev: wrong number of occurrences") 6761 ierr = ierr + 1 6762 ELSE 6763 CALL errore("qes_read:symmetry_flagsType","no_t_rev: wrong number of occurrences",10) 6764 END IF 6765 END IF 6766 ! 6767 tmp_node => item(tmp_node_list, 0) 6768 IF (ASSOCIATED(tmp_node))& 6769 CALL extractDataContent(tmp_node, obj%no_t_rev, IOSTAT = iostat_ ) 6770 IF ( iostat_ /= 0 ) THEN 6771 IF ( PRESENT (ierr ) ) THEN 6772 CALL infomsg("qes_read:symmetry_flagsType","error reading no_t_rev") 6773 ierr = ierr + 1 6774 ELSE 6775 CALL errore ("qes_read:symmetry_flagsType","error reading no_t_rev",10) 6776 END IF 6777 END IF 6778 ! 6779 tmp_node_list => getElementsByTagname(xml_node, "force_symmorphic") 6780 tmp_node_list_size = getLength(tmp_node_list) 6781 ! 6782 IF (tmp_node_list_size /= 1) THEN 6783 IF (PRESENT(ierr) ) THEN 6784 CALL infomsg("qes_read:symmetry_flagsType","force_symmorphic: wrong number of occurrences") 6785 ierr = ierr + 1 6786 ELSE 6787 CALL errore("qes_read:symmetry_flagsType","force_symmorphic: wrong number of occurrences",10) 6788 END IF 6789 END IF 6790 ! 6791 tmp_node => item(tmp_node_list, 0) 6792 IF (ASSOCIATED(tmp_node))& 6793 CALL extractDataContent(tmp_node, obj%force_symmorphic, IOSTAT = iostat_ ) 6794 IF ( iostat_ /= 0 ) THEN 6795 IF ( PRESENT (ierr ) ) THEN 6796 CALL infomsg("qes_read:symmetry_flagsType","error reading force_symmorphic") 6797 ierr = ierr + 1 6798 ELSE 6799 CALL errore ("qes_read:symmetry_flagsType","error reading force_symmorphic",10) 6800 END IF 6801 END IF 6802 ! 6803 tmp_node_list => getElementsByTagname(xml_node, "use_all_frac") 6804 tmp_node_list_size = getLength(tmp_node_list) 6805 ! 6806 IF (tmp_node_list_size /= 1) THEN 6807 IF (PRESENT(ierr) ) THEN 6808 CALL infomsg("qes_read:symmetry_flagsType","use_all_frac: wrong number of occurrences") 6809 ierr = ierr + 1 6810 ELSE 6811 CALL errore("qes_read:symmetry_flagsType","use_all_frac: wrong number of occurrences",10) 6812 END IF 6813 END IF 6814 ! 6815 tmp_node => item(tmp_node_list, 0) 6816 IF (ASSOCIATED(tmp_node))& 6817 CALL extractDataContent(tmp_node, obj%use_all_frac, IOSTAT = iostat_ ) 6818 IF ( iostat_ /= 0 ) THEN 6819 IF ( PRESENT (ierr ) ) THEN 6820 CALL infomsg("qes_read:symmetry_flagsType","error reading use_all_frac") 6821 ierr = ierr + 1 6822 ELSE 6823 CALL errore ("qes_read:symmetry_flagsType","error reading use_all_frac",10) 6824 END IF 6825 END IF 6826 ! 6827 ! 6828 obj%lwrite = .TRUE. 6829 ! 6830 END SUBROUTINE qes_read_symmetry_flags 6831 ! 6832 ! 6833 SUBROUTINE qes_read_boundary_conditions(xml_node, obj, ierr ) 6834 ! 6835 IMPLICIT NONE 6836 ! 6837 TYPE(Node), INTENT(IN), POINTER :: xml_node 6838 TYPE(boundary_conditions_type), INTENT(OUT) :: obj 6839 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 6840 ! 6841 TYPE(Node), POINTER :: tmp_node 6842 TYPE(NodeList), POINTER :: tmp_node_list 6843 INTEGER :: tmp_node_list_size, index, iostat_ 6844 ! 6845 obj%tagname = getTagName(xml_node) 6846 ! 6847 6848 6849 6850 6851 ! 6852 tmp_node_list => getElementsByTagname(xml_node, "assume_isolated") 6853 tmp_node_list_size = getLength(tmp_node_list) 6854 ! 6855 IF (tmp_node_list_size /= 1) THEN 6856 IF (PRESENT(ierr) ) THEN 6857 CALL infomsg("qes_read:boundary_conditionsType","assume_isolated: wrong number of occurrences") 6858 ierr = ierr + 1 6859 ELSE 6860 CALL errore("qes_read:boundary_conditionsType","assume_isolated: wrong number of occurrences",10) 6861 END IF 6862 END IF 6863 ! 6864 tmp_node => item(tmp_node_list, 0) 6865 IF (ASSOCIATED(tmp_node))& 6866 CALL extractDataContent(tmp_node, obj%assume_isolated, IOSTAT = iostat_ ) 6867 IF ( iostat_ /= 0 ) THEN 6868 IF ( PRESENT (ierr ) ) THEN 6869 CALL infomsg("qes_read:boundary_conditionsType","error reading assume_isolated") 6870 ierr = ierr + 1 6871 ELSE 6872 CALL errore ("qes_read:boundary_conditionsType","error reading assume_isolated",10) 6873 END IF 6874 END IF 6875 ! 6876 tmp_node_list => getElementsByTagname(xml_node, "esm") 6877 tmp_node_list_size = getLength(tmp_node_list) 6878 ! 6879 IF (tmp_node_list_size > 1) THEN 6880 IF (PRESENT(ierr) ) THEN 6881 CALL infomsg("qes_read:boundary_conditionsType","esm: too many occurrences") 6882 ierr = ierr + 1 6883 ELSE 6884 CALL errore("qes_read:boundary_conditionsType","esm: too many occurrences",10) 6885 END IF 6886 END IF 6887 ! 6888 IF (tmp_node_list_size>0) THEN 6889 obj%esm_ispresent = .TRUE. 6890 tmp_node => item(tmp_node_list, 0) 6891 CALL qes_read_esm(tmp_node, obj%esm, ierr ) 6892 ELSE 6893 obj%esm_ispresent = .FALSE. 6894 END IF 6895 ! 6896 tmp_node_list => getElementsByTagname(xml_node, "fcp_opt") 6897 tmp_node_list_size = getLength(tmp_node_list) 6898 ! 6899 IF (tmp_node_list_size > 1) THEN 6900 IF (PRESENT(ierr) ) THEN 6901 CALL infomsg("qes_read:boundary_conditionsType","fcp_opt: too many occurrences") 6902 ierr = ierr + 1 6903 ELSE 6904 CALL errore("qes_read:boundary_conditionsType","fcp_opt: too many occurrences",10) 6905 END IF 6906 END IF 6907 ! 6908 IF (tmp_node_list_size>0) THEN 6909 obj%fcp_opt_ispresent = .TRUE. 6910 tmp_node => item(tmp_node_list, 0) 6911 CALL extractDataContent(tmp_node, obj%fcp_opt , IOSTAT = iostat_) 6912 IF ( iostat_ /= 0 ) THEN 6913 IF ( PRESENT (ierr ) ) THEN 6914 CALL infomsg("qes_read:boundary_conditionsType","error reading fcp_opt") 6915 ierr = ierr + 1 6916 ELSE 6917 CALL errore ("qes_read:boundary_conditionsType","error reading fcp_opt",10) 6918 END IF 6919 END IF 6920 ELSE 6921 obj%fcp_opt_ispresent = .FALSE. 6922 END IF 6923 ! 6924 tmp_node_list => getElementsByTagname(xml_node, "fcp_mu") 6925 tmp_node_list_size = getLength(tmp_node_list) 6926 ! 6927 IF (tmp_node_list_size > 1) THEN 6928 IF (PRESENT(ierr) ) THEN 6929 CALL infomsg("qes_read:boundary_conditionsType","fcp_mu: too many occurrences") 6930 ierr = ierr + 1 6931 ELSE 6932 CALL errore("qes_read:boundary_conditionsType","fcp_mu: too many occurrences",10) 6933 END IF 6934 END IF 6935 ! 6936 IF (tmp_node_list_size>0) THEN 6937 obj%fcp_mu_ispresent = .TRUE. 6938 tmp_node => item(tmp_node_list, 0) 6939 CALL extractDataContent(tmp_node, obj%fcp_mu , IOSTAT = iostat_) 6940 IF ( iostat_ /= 0 ) THEN 6941 IF ( PRESENT (ierr ) ) THEN 6942 CALL infomsg("qes_read:boundary_conditionsType","error reading fcp_mu") 6943 ierr = ierr + 1 6944 ELSE 6945 CALL errore ("qes_read:boundary_conditionsType","error reading fcp_mu",10) 6946 END IF 6947 END IF 6948 ELSE 6949 obj%fcp_mu_ispresent = .FALSE. 6950 END IF 6951 ! 6952 ! 6953 obj%lwrite = .TRUE. 6954 ! 6955 END SUBROUTINE qes_read_boundary_conditions 6956 ! 6957 ! 6958 SUBROUTINE qes_read_esm(xml_node, obj, ierr ) 6959 ! 6960 IMPLICIT NONE 6961 ! 6962 TYPE(Node), INTENT(IN), POINTER :: xml_node 6963 TYPE(esm_type), INTENT(OUT) :: obj 6964 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 6965 ! 6966 TYPE(Node), POINTER :: tmp_node 6967 TYPE(NodeList), POINTER :: tmp_node_list 6968 INTEGER :: tmp_node_list_size, index, iostat_ 6969 ! 6970 obj%tagname = getTagName(xml_node) 6971 ! 6972 6973 6974 6975 6976 ! 6977 tmp_node_list => getElementsByTagname(xml_node, "bc") 6978 tmp_node_list_size = getLength(tmp_node_list) 6979 ! 6980 IF (tmp_node_list_size /= 1) THEN 6981 IF (PRESENT(ierr) ) THEN 6982 CALL infomsg("qes_read:esmType","bc: wrong number of occurrences") 6983 ierr = ierr + 1 6984 ELSE 6985 CALL errore("qes_read:esmType","bc: wrong number of occurrences",10) 6986 END IF 6987 END IF 6988 ! 6989 tmp_node => item(tmp_node_list, 0) 6990 IF (ASSOCIATED(tmp_node))& 6991 CALL extractDataContent(tmp_node, obj%bc, IOSTAT = iostat_ ) 6992 IF ( iostat_ /= 0 ) THEN 6993 IF ( PRESENT (ierr ) ) THEN 6994 CALL infomsg("qes_read:esmType","error reading bc") 6995 ierr = ierr + 1 6996 ELSE 6997 CALL errore ("qes_read:esmType","error reading bc",10) 6998 END IF 6999 END IF 7000 ! 7001 tmp_node_list => getElementsByTagname(xml_node, "nfit") 7002 tmp_node_list_size = getLength(tmp_node_list) 7003 ! 7004 IF (tmp_node_list_size /= 1) THEN 7005 IF (PRESENT(ierr) ) THEN 7006 CALL infomsg("qes_read:esmType","nfit: wrong number of occurrences") 7007 ierr = ierr + 1 7008 ELSE 7009 CALL errore("qes_read:esmType","nfit: wrong number of occurrences",10) 7010 END IF 7011 END IF 7012 ! 7013 tmp_node => item(tmp_node_list, 0) 7014 IF (ASSOCIATED(tmp_node))& 7015 CALL extractDataContent(tmp_node, obj%nfit, IOSTAT = iostat_ ) 7016 IF ( iostat_ /= 0 ) THEN 7017 IF ( PRESENT (ierr ) ) THEN 7018 CALL infomsg("qes_read:esmType","error reading nfit") 7019 ierr = ierr + 1 7020 ELSE 7021 CALL errore ("qes_read:esmType","error reading nfit",10) 7022 END IF 7023 END IF 7024 ! 7025 tmp_node_list => getElementsByTagname(xml_node, "w") 7026 tmp_node_list_size = getLength(tmp_node_list) 7027 ! 7028 IF (tmp_node_list_size /= 1) THEN 7029 IF (PRESENT(ierr) ) THEN 7030 CALL infomsg("qes_read:esmType","w: wrong number of occurrences") 7031 ierr = ierr + 1 7032 ELSE 7033 CALL errore("qes_read:esmType","w: wrong number of occurrences",10) 7034 END IF 7035 END IF 7036 ! 7037 tmp_node => item(tmp_node_list, 0) 7038 IF (ASSOCIATED(tmp_node))& 7039 CALL extractDataContent(tmp_node, obj%w, IOSTAT = iostat_ ) 7040 IF ( iostat_ /= 0 ) THEN 7041 IF ( PRESENT (ierr ) ) THEN 7042 CALL infomsg("qes_read:esmType","error reading w") 7043 ierr = ierr + 1 7044 ELSE 7045 CALL errore ("qes_read:esmType","error reading w",10) 7046 END IF 7047 END IF 7048 ! 7049 tmp_node_list => getElementsByTagname(xml_node, "efield") 7050 tmp_node_list_size = getLength(tmp_node_list) 7051 ! 7052 IF (tmp_node_list_size /= 1) THEN 7053 IF (PRESENT(ierr) ) THEN 7054 CALL infomsg("qes_read:esmType","efield: wrong number of occurrences") 7055 ierr = ierr + 1 7056 ELSE 7057 CALL errore("qes_read:esmType","efield: wrong number of occurrences",10) 7058 END IF 7059 END IF 7060 ! 7061 tmp_node => item(tmp_node_list, 0) 7062 IF (ASSOCIATED(tmp_node))& 7063 CALL extractDataContent(tmp_node, obj%efield, IOSTAT = iostat_ ) 7064 IF ( iostat_ /= 0 ) THEN 7065 IF ( PRESENT (ierr ) ) THEN 7066 CALL infomsg("qes_read:esmType","error reading efield") 7067 ierr = ierr + 1 7068 ELSE 7069 CALL errore ("qes_read:esmType","error reading efield",10) 7070 END IF 7071 END IF 7072 ! 7073 ! 7074 obj%lwrite = .TRUE. 7075 ! 7076 END SUBROUTINE qes_read_esm 7077 ! 7078 ! 7079 SUBROUTINE qes_read_ekin_functional(xml_node, obj, ierr ) 7080 ! 7081 IMPLICIT NONE 7082 ! 7083 TYPE(Node), INTENT(IN), POINTER :: xml_node 7084 TYPE(ekin_functional_type), INTENT(OUT) :: obj 7085 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 7086 ! 7087 TYPE(Node), POINTER :: tmp_node 7088 TYPE(NodeList), POINTER :: tmp_node_list 7089 INTEGER :: tmp_node_list_size, index, iostat_ 7090 ! 7091 obj%tagname = getTagName(xml_node) 7092 ! 7093 7094 7095 7096 7097 ! 7098 tmp_node_list => getElementsByTagname(xml_node, "ecfixed") 7099 tmp_node_list_size = getLength(tmp_node_list) 7100 ! 7101 IF (tmp_node_list_size /= 1) THEN 7102 IF (PRESENT(ierr) ) THEN 7103 CALL infomsg("qes_read:ekin_functionalType","ecfixed: wrong number of occurrences") 7104 ierr = ierr + 1 7105 ELSE 7106 CALL errore("qes_read:ekin_functionalType","ecfixed: wrong number of occurrences",10) 7107 END IF 7108 END IF 7109 ! 7110 tmp_node => item(tmp_node_list, 0) 7111 IF (ASSOCIATED(tmp_node))& 7112 CALL extractDataContent(tmp_node, obj%ecfixed, IOSTAT = iostat_ ) 7113 IF ( iostat_ /= 0 ) THEN 7114 IF ( PRESENT (ierr ) ) THEN 7115 CALL infomsg("qes_read:ekin_functionalType","error reading ecfixed") 7116 ierr = ierr + 1 7117 ELSE 7118 CALL errore ("qes_read:ekin_functionalType","error reading ecfixed",10) 7119 END IF 7120 END IF 7121 ! 7122 tmp_node_list => getElementsByTagname(xml_node, "qcutz") 7123 tmp_node_list_size = getLength(tmp_node_list) 7124 ! 7125 IF (tmp_node_list_size /= 1) THEN 7126 IF (PRESENT(ierr) ) THEN 7127 CALL infomsg("qes_read:ekin_functionalType","qcutz: wrong number of occurrences") 7128 ierr = ierr + 1 7129 ELSE 7130 CALL errore("qes_read:ekin_functionalType","qcutz: wrong number of occurrences",10) 7131 END IF 7132 END IF 7133 ! 7134 tmp_node => item(tmp_node_list, 0) 7135 IF (ASSOCIATED(tmp_node))& 7136 CALL extractDataContent(tmp_node, obj%qcutz, IOSTAT = iostat_ ) 7137 IF ( iostat_ /= 0 ) THEN 7138 IF ( PRESENT (ierr ) ) THEN 7139 CALL infomsg("qes_read:ekin_functionalType","error reading qcutz") 7140 ierr = ierr + 1 7141 ELSE 7142 CALL errore ("qes_read:ekin_functionalType","error reading qcutz",10) 7143 END IF 7144 END IF 7145 ! 7146 tmp_node_list => getElementsByTagname(xml_node, "q2sigma") 7147 tmp_node_list_size = getLength(tmp_node_list) 7148 ! 7149 IF (tmp_node_list_size /= 1) THEN 7150 IF (PRESENT(ierr) ) THEN 7151 CALL infomsg("qes_read:ekin_functionalType","q2sigma: wrong number of occurrences") 7152 ierr = ierr + 1 7153 ELSE 7154 CALL errore("qes_read:ekin_functionalType","q2sigma: wrong number of occurrences",10) 7155 END IF 7156 END IF 7157 ! 7158 tmp_node => item(tmp_node_list, 0) 7159 IF (ASSOCIATED(tmp_node))& 7160 CALL extractDataContent(tmp_node, obj%q2sigma, IOSTAT = iostat_ ) 7161 IF ( iostat_ /= 0 ) THEN 7162 IF ( PRESENT (ierr ) ) THEN 7163 CALL infomsg("qes_read:ekin_functionalType","error reading q2sigma") 7164 ierr = ierr + 1 7165 ELSE 7166 CALL errore ("qes_read:ekin_functionalType","error reading q2sigma",10) 7167 END IF 7168 END IF 7169 ! 7170 ! 7171 obj%lwrite = .TRUE. 7172 ! 7173 END SUBROUTINE qes_read_ekin_functional 7174 ! 7175 ! 7176 SUBROUTINE qes_read_spin_constraints(xml_node, obj, ierr ) 7177 ! 7178 IMPLICIT NONE 7179 ! 7180 TYPE(Node), INTENT(IN), POINTER :: xml_node 7181 TYPE(spin_constraints_type), INTENT(OUT) :: obj 7182 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 7183 ! 7184 TYPE(Node), POINTER :: tmp_node 7185 TYPE(NodeList), POINTER :: tmp_node_list 7186 INTEGER :: tmp_node_list_size, index, iostat_ 7187 ! 7188 obj%tagname = getTagName(xml_node) 7189 ! 7190 7191 7192 7193 7194 ! 7195 tmp_node_list => getElementsByTagname(xml_node, "spin_constraints") 7196 tmp_node_list_size = getLength(tmp_node_list) 7197 ! 7198 IF (tmp_node_list_size /= 1) THEN 7199 IF (PRESENT(ierr) ) THEN 7200 CALL infomsg("qes_read:spin_constraintsType","spin_constraints: wrong number of occurrences") 7201 ierr = ierr + 1 7202 ELSE 7203 CALL errore("qes_read:spin_constraintsType","spin_constraints: wrong number of occurrences",10) 7204 END IF 7205 END IF 7206 ! 7207 tmp_node => item(tmp_node_list, 0) 7208 IF (ASSOCIATED(tmp_node))& 7209 CALL extractDataContent(tmp_node, obj%spin_constraints, IOSTAT = iostat_ ) 7210 IF ( iostat_ /= 0 ) THEN 7211 IF ( PRESENT (ierr ) ) THEN 7212 CALL infomsg("qes_read:spin_constraintsType","error reading spin_constraints") 7213 ierr = ierr + 1 7214 ELSE 7215 CALL errore ("qes_read:spin_constraintsType","error reading spin_constraints",10) 7216 END IF 7217 END IF 7218 ! 7219 tmp_node_list => getElementsByTagname(xml_node, "lagrange_multiplier") 7220 tmp_node_list_size = getLength(tmp_node_list) 7221 ! 7222 IF (tmp_node_list_size /= 1) THEN 7223 IF (PRESENT(ierr) ) THEN 7224 CALL infomsg("qes_read:spin_constraintsType","lagrange_multiplier: wrong number of occurrences") 7225 ierr = ierr + 1 7226 ELSE 7227 CALL errore("qes_read:spin_constraintsType","lagrange_multiplier: wrong number of occurrences",10) 7228 END IF 7229 END IF 7230 ! 7231 tmp_node => item(tmp_node_list, 0) 7232 IF (ASSOCIATED(tmp_node))& 7233 CALL extractDataContent(tmp_node, obj%lagrange_multiplier, IOSTAT = iostat_ ) 7234 IF ( iostat_ /= 0 ) THEN 7235 IF ( PRESENT (ierr ) ) THEN 7236 CALL infomsg("qes_read:spin_constraintsType","error reading lagrange_multiplier") 7237 ierr = ierr + 1 7238 ELSE 7239 CALL errore ("qes_read:spin_constraintsType","error reading lagrange_multiplier",10) 7240 END IF 7241 END IF 7242 ! 7243 tmp_node_list => getElementsByTagname(xml_node, "target_magnetization") 7244 tmp_node_list_size = getLength(tmp_node_list) 7245 ! 7246 IF (tmp_node_list_size > 1) THEN 7247 IF (PRESENT(ierr) ) THEN 7248 CALL infomsg("qes_read:spin_constraintsType","target_magnetization: too many occurrences") 7249 ierr = ierr + 1 7250 ELSE 7251 CALL errore("qes_read:spin_constraintsType","target_magnetization: too many occurrences",10) 7252 END IF 7253 END IF 7254 ! 7255 IF (tmp_node_list_size>0) THEN 7256 obj%target_magnetization_ispresent = .TRUE. 7257 tmp_node => item(tmp_node_list, 0) 7258 CALL extractDataContent(tmp_node, obj%target_magnetization , IOSTAT = iostat_) 7259 IF ( iostat_ /= 0 ) THEN 7260 IF ( PRESENT (ierr ) ) THEN 7261 CALL infomsg("qes_read:spin_constraintsType","error reading target_magnetization") 7262 ierr = ierr + 1 7263 ELSE 7264 CALL errore ("qes_read:spin_constraintsType","error reading target_magnetization",10) 7265 END IF 7266 END IF 7267 ELSE 7268 obj%target_magnetization_ispresent = .FALSE. 7269 END IF 7270 ! 7271 ! 7272 obj%lwrite = .TRUE. 7273 ! 7274 END SUBROUTINE qes_read_spin_constraints 7275 ! 7276 ! 7277 SUBROUTINE qes_read_electric_field(xml_node, obj, ierr ) 7278 ! 7279 IMPLICIT NONE 7280 ! 7281 TYPE(Node), INTENT(IN), POINTER :: xml_node 7282 TYPE(electric_field_type), INTENT(OUT) :: obj 7283 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 7284 ! 7285 TYPE(Node), POINTER :: tmp_node 7286 TYPE(NodeList), POINTER :: tmp_node_list 7287 INTEGER :: tmp_node_list_size, index, iostat_ 7288 ! 7289 obj%tagname = getTagName(xml_node) 7290 ! 7291 7292 7293 7294 7295 ! 7296 tmp_node_list => getElementsByTagname(xml_node, "electric_potential") 7297 tmp_node_list_size = getLength(tmp_node_list) 7298 ! 7299 IF (tmp_node_list_size /= 1) THEN 7300 IF (PRESENT(ierr) ) THEN 7301 CALL infomsg("qes_read:electric_fieldType","electric_potential: wrong number of occurrences") 7302 ierr = ierr + 1 7303 ELSE 7304 CALL errore("qes_read:electric_fieldType","electric_potential: wrong number of occurrences",10) 7305 END IF 7306 END IF 7307 ! 7308 tmp_node => item(tmp_node_list, 0) 7309 IF (ASSOCIATED(tmp_node))& 7310 CALL extractDataContent(tmp_node, obj%electric_potential, IOSTAT = iostat_ ) 7311 IF ( iostat_ /= 0 ) THEN 7312 IF ( PRESENT (ierr ) ) THEN 7313 CALL infomsg("qes_read:electric_fieldType","error reading electric_potential") 7314 ierr = ierr + 1 7315 ELSE 7316 CALL errore ("qes_read:electric_fieldType","error reading electric_potential",10) 7317 END IF 7318 END IF 7319 ! 7320 tmp_node_list => getElementsByTagname(xml_node, "dipole_correction") 7321 tmp_node_list_size = getLength(tmp_node_list) 7322 ! 7323 IF (tmp_node_list_size > 1) THEN 7324 IF (PRESENT(ierr) ) THEN 7325 CALL infomsg("qes_read:electric_fieldType","dipole_correction: too many occurrences") 7326 ierr = ierr + 1 7327 ELSE 7328 CALL errore("qes_read:electric_fieldType","dipole_correction: too many occurrences",10) 7329 END IF 7330 END IF 7331 ! 7332 IF (tmp_node_list_size>0) THEN 7333 obj%dipole_correction_ispresent = .TRUE. 7334 tmp_node => item(tmp_node_list, 0) 7335 CALL extractDataContent(tmp_node, obj%dipole_correction , IOSTAT = iostat_) 7336 IF ( iostat_ /= 0 ) THEN 7337 IF ( PRESENT (ierr ) ) THEN 7338 CALL infomsg("qes_read:electric_fieldType","error reading dipole_correction") 7339 ierr = ierr + 1 7340 ELSE 7341 CALL errore ("qes_read:electric_fieldType","error reading dipole_correction",10) 7342 END IF 7343 END IF 7344 ELSE 7345 obj%dipole_correction_ispresent = .FALSE. 7346 END IF 7347 ! 7348 tmp_node_list => getElementsByTagname(xml_node, "gate_settings") 7349 tmp_node_list_size = getLength(tmp_node_list) 7350 ! 7351 IF (tmp_node_list_size > 1) THEN 7352 IF (PRESENT(ierr) ) THEN 7353 CALL infomsg("qes_read:electric_fieldType","gate_settings: too many occurrences") 7354 ierr = ierr + 1 7355 ELSE 7356 CALL errore("qes_read:electric_fieldType","gate_settings: too many occurrences",10) 7357 END IF 7358 END IF 7359 ! 7360 IF (tmp_node_list_size>0) THEN 7361 obj%gate_settings_ispresent = .TRUE. 7362 tmp_node => item(tmp_node_list, 0) 7363 CALL qes_read_gate_settings(tmp_node, obj%gate_settings, ierr ) 7364 ELSE 7365 obj%gate_settings_ispresent = .FALSE. 7366 END IF 7367 ! 7368 tmp_node_list => getElementsByTagname(xml_node, "electric_field_direction") 7369 tmp_node_list_size = getLength(tmp_node_list) 7370 ! 7371 IF (tmp_node_list_size > 1) THEN 7372 IF (PRESENT(ierr) ) THEN 7373 CALL infomsg("qes_read:electric_fieldType","electric_field_direction: too many occurrences") 7374 ierr = ierr + 1 7375 ELSE 7376 CALL errore("qes_read:electric_fieldType","electric_field_direction: too many occurrences",10) 7377 END IF 7378 END IF 7379 ! 7380 IF (tmp_node_list_size>0) THEN 7381 obj%electric_field_direction_ispresent = .TRUE. 7382 tmp_node => item(tmp_node_list, 0) 7383 CALL extractDataContent(tmp_node, obj%electric_field_direction , IOSTAT = iostat_) 7384 IF ( iostat_ /= 0 ) THEN 7385 IF ( PRESENT (ierr ) ) THEN 7386 CALL infomsg("qes_read:electric_fieldType","error reading electric_field_direction") 7387 ierr = ierr + 1 7388 ELSE 7389 CALL errore ("qes_read:electric_fieldType","error reading electric_field_direction",10) 7390 END IF 7391 END IF 7392 ELSE 7393 obj%electric_field_direction_ispresent = .FALSE. 7394 END IF 7395 ! 7396 tmp_node_list => getElementsByTagname(xml_node, "potential_max_position") 7397 tmp_node_list_size = getLength(tmp_node_list) 7398 ! 7399 IF (tmp_node_list_size > 1) THEN 7400 IF (PRESENT(ierr) ) THEN 7401 CALL infomsg("qes_read:electric_fieldType","potential_max_position: too many occurrences") 7402 ierr = ierr + 1 7403 ELSE 7404 CALL errore("qes_read:electric_fieldType","potential_max_position: too many occurrences",10) 7405 END IF 7406 END IF 7407 ! 7408 IF (tmp_node_list_size>0) THEN 7409 obj%potential_max_position_ispresent = .TRUE. 7410 tmp_node => item(tmp_node_list, 0) 7411 CALL extractDataContent(tmp_node, obj%potential_max_position , IOSTAT = iostat_) 7412 IF ( iostat_ /= 0 ) THEN 7413 IF ( PRESENT (ierr ) ) THEN 7414 CALL infomsg("qes_read:electric_fieldType","error reading potential_max_position") 7415 ierr = ierr + 1 7416 ELSE 7417 CALL errore ("qes_read:electric_fieldType","error reading potential_max_position",10) 7418 END IF 7419 END IF 7420 ELSE 7421 obj%potential_max_position_ispresent = .FALSE. 7422 END IF 7423 ! 7424 tmp_node_list => getElementsByTagname(xml_node, "potential_decrease_width") 7425 tmp_node_list_size = getLength(tmp_node_list) 7426 ! 7427 IF (tmp_node_list_size > 1) THEN 7428 IF (PRESENT(ierr) ) THEN 7429 CALL infomsg("qes_read:electric_fieldType","potential_decrease_width: too many occurrences") 7430 ierr = ierr + 1 7431 ELSE 7432 CALL errore("qes_read:electric_fieldType","potential_decrease_width: too many occurrences",10) 7433 END IF 7434 END IF 7435 ! 7436 IF (tmp_node_list_size>0) THEN 7437 obj%potential_decrease_width_ispresent = .TRUE. 7438 tmp_node => item(tmp_node_list, 0) 7439 CALL extractDataContent(tmp_node, obj%potential_decrease_width , IOSTAT = iostat_) 7440 IF ( iostat_ /= 0 ) THEN 7441 IF ( PRESENT (ierr ) ) THEN 7442 CALL infomsg("qes_read:electric_fieldType","error reading potential_decrease_width") 7443 ierr = ierr + 1 7444 ELSE 7445 CALL errore ("qes_read:electric_fieldType","error reading potential_decrease_width",10) 7446 END IF 7447 END IF 7448 ELSE 7449 obj%potential_decrease_width_ispresent = .FALSE. 7450 END IF 7451 ! 7452 tmp_node_list => getElementsByTagname(xml_node, "electric_field_amplitude") 7453 tmp_node_list_size = getLength(tmp_node_list) 7454 ! 7455 IF (tmp_node_list_size > 1) THEN 7456 IF (PRESENT(ierr) ) THEN 7457 CALL infomsg("qes_read:electric_fieldType","electric_field_amplitude: too many occurrences") 7458 ierr = ierr + 1 7459 ELSE 7460 CALL errore("qes_read:electric_fieldType","electric_field_amplitude: too many occurrences",10) 7461 END IF 7462 END IF 7463 ! 7464 IF (tmp_node_list_size>0) THEN 7465 obj%electric_field_amplitude_ispresent = .TRUE. 7466 tmp_node => item(tmp_node_list, 0) 7467 CALL extractDataContent(tmp_node, obj%electric_field_amplitude , IOSTAT = iostat_) 7468 IF ( iostat_ /= 0 ) THEN 7469 IF ( PRESENT (ierr ) ) THEN 7470 CALL infomsg("qes_read:electric_fieldType","error reading electric_field_amplitude") 7471 ierr = ierr + 1 7472 ELSE 7473 CALL errore ("qes_read:electric_fieldType","error reading electric_field_amplitude",10) 7474 END IF 7475 END IF 7476 ELSE 7477 obj%electric_field_amplitude_ispresent = .FALSE. 7478 END IF 7479 ! 7480 tmp_node_list => getElementsByTagname(xml_node, "electric_field_vector") 7481 tmp_node_list_size = getLength(tmp_node_list) 7482 ! 7483 IF (tmp_node_list_size > 1) THEN 7484 IF (PRESENT(ierr) ) THEN 7485 CALL infomsg("qes_read:electric_fieldType","electric_field_vector: too many occurrences") 7486 ierr = ierr + 1 7487 ELSE 7488 CALL errore("qes_read:electric_fieldType","electric_field_vector: too many occurrences",10) 7489 END IF 7490 END IF 7491 ! 7492 IF (tmp_node_list_size>0) THEN 7493 obj%electric_field_vector_ispresent = .TRUE. 7494 tmp_node => item(tmp_node_list, 0) 7495 CALL extractDataContent(tmp_node, obj%electric_field_vector , IOSTAT = iostat_) 7496 IF ( iostat_ /= 0 ) THEN 7497 IF ( PRESENT (ierr ) ) THEN 7498 CALL infomsg("qes_read:electric_fieldType","error reading electric_field_vector") 7499 ierr = ierr + 1 7500 ELSE 7501 CALL errore ("qes_read:electric_fieldType","error reading electric_field_vector",10) 7502 END IF 7503 END IF 7504 ELSE 7505 obj%electric_field_vector_ispresent = .FALSE. 7506 END IF 7507 ! 7508 tmp_node_list => getElementsByTagname(xml_node, "nk_per_string") 7509 tmp_node_list_size = getLength(tmp_node_list) 7510 ! 7511 IF (tmp_node_list_size > 1) THEN 7512 IF (PRESENT(ierr) ) THEN 7513 CALL infomsg("qes_read:electric_fieldType","nk_per_string: too many occurrences") 7514 ierr = ierr + 1 7515 ELSE 7516 CALL errore("qes_read:electric_fieldType","nk_per_string: too many occurrences",10) 7517 END IF 7518 END IF 7519 ! 7520 IF (tmp_node_list_size>0) THEN 7521 obj%nk_per_string_ispresent = .TRUE. 7522 tmp_node => item(tmp_node_list, 0) 7523 CALL extractDataContent(tmp_node, obj%nk_per_string , IOSTAT = iostat_) 7524 IF ( iostat_ /= 0 ) THEN 7525 IF ( PRESENT (ierr ) ) THEN 7526 CALL infomsg("qes_read:electric_fieldType","error reading nk_per_string") 7527 ierr = ierr + 1 7528 ELSE 7529 CALL errore ("qes_read:electric_fieldType","error reading nk_per_string",10) 7530 END IF 7531 END IF 7532 ELSE 7533 obj%nk_per_string_ispresent = .FALSE. 7534 END IF 7535 ! 7536 tmp_node_list => getElementsByTagname(xml_node, "n_berry_cycles") 7537 tmp_node_list_size = getLength(tmp_node_list) 7538 ! 7539 IF (tmp_node_list_size > 1) THEN 7540 IF (PRESENT(ierr) ) THEN 7541 CALL infomsg("qes_read:electric_fieldType","n_berry_cycles: too many occurrences") 7542 ierr = ierr + 1 7543 ELSE 7544 CALL errore("qes_read:electric_fieldType","n_berry_cycles: too many occurrences",10) 7545 END IF 7546 END IF 7547 ! 7548 IF (tmp_node_list_size>0) THEN 7549 obj%n_berry_cycles_ispresent = .TRUE. 7550 tmp_node => item(tmp_node_list, 0) 7551 CALL extractDataContent(tmp_node, obj%n_berry_cycles , IOSTAT = iostat_) 7552 IF ( iostat_ /= 0 ) THEN 7553 IF ( PRESENT (ierr ) ) THEN 7554 CALL infomsg("qes_read:electric_fieldType","error reading n_berry_cycles") 7555 ierr = ierr + 1 7556 ELSE 7557 CALL errore ("qes_read:electric_fieldType","error reading n_berry_cycles",10) 7558 END IF 7559 END IF 7560 ELSE 7561 obj%n_berry_cycles_ispresent = .FALSE. 7562 END IF 7563 ! 7564 ! 7565 obj%lwrite = .TRUE. 7566 ! 7567 END SUBROUTINE qes_read_electric_field 7568 ! 7569 ! 7570 SUBROUTINE qes_read_gate_settings(xml_node, obj, ierr ) 7571 ! 7572 IMPLICIT NONE 7573 ! 7574 TYPE(Node), INTENT(IN), POINTER :: xml_node 7575 TYPE(gate_settings_type), INTENT(OUT) :: obj 7576 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 7577 ! 7578 TYPE(Node), POINTER :: tmp_node 7579 TYPE(NodeList), POINTER :: tmp_node_list 7580 INTEGER :: tmp_node_list_size, index, iostat_ 7581 ! 7582 obj%tagname = getTagName(xml_node) 7583 ! 7584 7585 7586 7587 7588 ! 7589 tmp_node_list => getElementsByTagname(xml_node, "use_gate") 7590 tmp_node_list_size = getLength(tmp_node_list) 7591 ! 7592 IF (tmp_node_list_size /= 1) THEN 7593 IF (PRESENT(ierr) ) THEN 7594 CALL infomsg("qes_read:gate_settingsType","use_gate: wrong number of occurrences") 7595 ierr = ierr + 1 7596 ELSE 7597 CALL errore("qes_read:gate_settingsType","use_gate: wrong number of occurrences",10) 7598 END IF 7599 END IF 7600 ! 7601 tmp_node => item(tmp_node_list, 0) 7602 IF (ASSOCIATED(tmp_node))& 7603 CALL extractDataContent(tmp_node, obj%use_gate, IOSTAT = iostat_ ) 7604 IF ( iostat_ /= 0 ) THEN 7605 IF ( PRESENT (ierr ) ) THEN 7606 CALL infomsg("qes_read:gate_settingsType","error reading use_gate") 7607 ierr = ierr + 1 7608 ELSE 7609 CALL errore ("qes_read:gate_settingsType","error reading use_gate",10) 7610 END IF 7611 END IF 7612 ! 7613 tmp_node_list => getElementsByTagname(xml_node, "zgate") 7614 tmp_node_list_size = getLength(tmp_node_list) 7615 ! 7616 IF (tmp_node_list_size > 1) THEN 7617 IF (PRESENT(ierr) ) THEN 7618 CALL infomsg("qes_read:gate_settingsType","zgate: too many occurrences") 7619 ierr = ierr + 1 7620 ELSE 7621 CALL errore("qes_read:gate_settingsType","zgate: too many occurrences",10) 7622 END IF 7623 END IF 7624 ! 7625 IF (tmp_node_list_size>0) THEN 7626 obj%zgate_ispresent = .TRUE. 7627 tmp_node => item(tmp_node_list, 0) 7628 CALL extractDataContent(tmp_node, obj%zgate , IOSTAT = iostat_) 7629 IF ( iostat_ /= 0 ) THEN 7630 IF ( PRESENT (ierr ) ) THEN 7631 CALL infomsg("qes_read:gate_settingsType","error reading zgate") 7632 ierr = ierr + 1 7633 ELSE 7634 CALL errore ("qes_read:gate_settingsType","error reading zgate",10) 7635 END IF 7636 END IF 7637 ELSE 7638 obj%zgate_ispresent = .FALSE. 7639 END IF 7640 ! 7641 tmp_node_list => getElementsByTagname(xml_node, "relaxz") 7642 tmp_node_list_size = getLength(tmp_node_list) 7643 ! 7644 IF (tmp_node_list_size > 1) THEN 7645 IF (PRESENT(ierr) ) THEN 7646 CALL infomsg("qes_read:gate_settingsType","relaxz: too many occurrences") 7647 ierr = ierr + 1 7648 ELSE 7649 CALL errore("qes_read:gate_settingsType","relaxz: too many occurrences",10) 7650 END IF 7651 END IF 7652 ! 7653 IF (tmp_node_list_size>0) THEN 7654 obj%relaxz_ispresent = .TRUE. 7655 tmp_node => item(tmp_node_list, 0) 7656 CALL extractDataContent(tmp_node, obj%relaxz , IOSTAT = iostat_) 7657 IF ( iostat_ /= 0 ) THEN 7658 IF ( PRESENT (ierr ) ) THEN 7659 CALL infomsg("qes_read:gate_settingsType","error reading relaxz") 7660 ierr = ierr + 1 7661 ELSE 7662 CALL errore ("qes_read:gate_settingsType","error reading relaxz",10) 7663 END IF 7664 END IF 7665 ELSE 7666 obj%relaxz_ispresent = .FALSE. 7667 END IF 7668 ! 7669 tmp_node_list => getElementsByTagname(xml_node, "block") 7670 tmp_node_list_size = getLength(tmp_node_list) 7671 ! 7672 IF (tmp_node_list_size > 1) THEN 7673 IF (PRESENT(ierr) ) THEN 7674 CALL infomsg("qes_read:gate_settingsType","block: too many occurrences") 7675 ierr = ierr + 1 7676 ELSE 7677 CALL errore("qes_read:gate_settingsType","block: too many occurrences",10) 7678 END IF 7679 END IF 7680 ! 7681 IF (tmp_node_list_size>0) THEN 7682 obj%block_ispresent = .TRUE. 7683 tmp_node => item(tmp_node_list, 0) 7684 CALL extractDataContent(tmp_node, obj%block , IOSTAT = iostat_) 7685 IF ( iostat_ /= 0 ) THEN 7686 IF ( PRESENT (ierr ) ) THEN 7687 CALL infomsg("qes_read:gate_settingsType","error reading block") 7688 ierr = ierr + 1 7689 ELSE 7690 CALL errore ("qes_read:gate_settingsType","error reading block",10) 7691 END IF 7692 END IF 7693 ELSE 7694 obj%block_ispresent = .FALSE. 7695 END IF 7696 ! 7697 tmp_node_list => getElementsByTagname(xml_node, "block_1") 7698 tmp_node_list_size = getLength(tmp_node_list) 7699 ! 7700 IF (tmp_node_list_size > 1) THEN 7701 IF (PRESENT(ierr) ) THEN 7702 CALL infomsg("qes_read:gate_settingsType","block_1: too many occurrences") 7703 ierr = ierr + 1 7704 ELSE 7705 CALL errore("qes_read:gate_settingsType","block_1: too many occurrences",10) 7706 END IF 7707 END IF 7708 ! 7709 IF (tmp_node_list_size>0) THEN 7710 obj%block_1_ispresent = .TRUE. 7711 tmp_node => item(tmp_node_list, 0) 7712 CALL extractDataContent(tmp_node, obj%block_1 , IOSTAT = iostat_) 7713 IF ( iostat_ /= 0 ) THEN 7714 IF ( PRESENT (ierr ) ) THEN 7715 CALL infomsg("qes_read:gate_settingsType","error reading block_1") 7716 ierr = ierr + 1 7717 ELSE 7718 CALL errore ("qes_read:gate_settingsType","error reading block_1",10) 7719 END IF 7720 END IF 7721 ELSE 7722 obj%block_1_ispresent = .FALSE. 7723 END IF 7724 ! 7725 tmp_node_list => getElementsByTagname(xml_node, "block_2") 7726 tmp_node_list_size = getLength(tmp_node_list) 7727 ! 7728 IF (tmp_node_list_size > 1) THEN 7729 IF (PRESENT(ierr) ) THEN 7730 CALL infomsg("qes_read:gate_settingsType","block_2: too many occurrences") 7731 ierr = ierr + 1 7732 ELSE 7733 CALL errore("qes_read:gate_settingsType","block_2: too many occurrences",10) 7734 END IF 7735 END IF 7736 ! 7737 IF (tmp_node_list_size>0) THEN 7738 obj%block_2_ispresent = .TRUE. 7739 tmp_node => item(tmp_node_list, 0) 7740 CALL extractDataContent(tmp_node, obj%block_2 , IOSTAT = iostat_) 7741 IF ( iostat_ /= 0 ) THEN 7742 IF ( PRESENT (ierr ) ) THEN 7743 CALL infomsg("qes_read:gate_settingsType","error reading block_2") 7744 ierr = ierr + 1 7745 ELSE 7746 CALL errore ("qes_read:gate_settingsType","error reading block_2",10) 7747 END IF 7748 END IF 7749 ELSE 7750 obj%block_2_ispresent = .FALSE. 7751 END IF 7752 ! 7753 tmp_node_list => getElementsByTagname(xml_node, "block_height") 7754 tmp_node_list_size = getLength(tmp_node_list) 7755 ! 7756 IF (tmp_node_list_size > 1) THEN 7757 IF (PRESENT(ierr) ) THEN 7758 CALL infomsg("qes_read:gate_settingsType","block_height: too many occurrences") 7759 ierr = ierr + 1 7760 ELSE 7761 CALL errore("qes_read:gate_settingsType","block_height: too many occurrences",10) 7762 END IF 7763 END IF 7764 ! 7765 IF (tmp_node_list_size>0) THEN 7766 obj%block_height_ispresent = .TRUE. 7767 tmp_node => item(tmp_node_list, 0) 7768 CALL extractDataContent(tmp_node, obj%block_height , IOSTAT = iostat_) 7769 IF ( iostat_ /= 0 ) THEN 7770 IF ( PRESENT (ierr ) ) THEN 7771 CALL infomsg("qes_read:gate_settingsType","error reading block_height") 7772 ierr = ierr + 1 7773 ELSE 7774 CALL errore ("qes_read:gate_settingsType","error reading block_height",10) 7775 END IF 7776 END IF 7777 ELSE 7778 obj%block_height_ispresent = .FALSE. 7779 END IF 7780 ! 7781 ! 7782 obj%lwrite = .TRUE. 7783 ! 7784 END SUBROUTINE qes_read_gate_settings 7785 ! 7786 ! 7787 SUBROUTINE qes_read_atomic_constraints(xml_node, obj, ierr ) 7788 ! 7789 IMPLICIT NONE 7790 ! 7791 TYPE(Node), INTENT(IN), POINTER :: xml_node 7792 TYPE(atomic_constraints_type), INTENT(OUT) :: obj 7793 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 7794 ! 7795 TYPE(Node), POINTER :: tmp_node 7796 TYPE(NodeList), POINTER :: tmp_node_list 7797 INTEGER :: tmp_node_list_size, index, iostat_ 7798 ! 7799 obj%tagname = getTagName(xml_node) 7800 ! 7801 7802 7803 7804 7805 ! 7806 tmp_node_list => getElementsByTagname(xml_node, "num_of_constraints") 7807 tmp_node_list_size = getLength(tmp_node_list) 7808 ! 7809 IF (tmp_node_list_size /= 1) THEN 7810 IF (PRESENT(ierr) ) THEN 7811 CALL infomsg("qes_read:atomic_constraintsType","num_of_constraints: wrong number of occurrences") 7812 ierr = ierr + 1 7813 ELSE 7814 CALL errore("qes_read:atomic_constraintsType","num_of_constraints: wrong number of occurrences",10) 7815 END IF 7816 END IF 7817 ! 7818 tmp_node => item(tmp_node_list, 0) 7819 IF (ASSOCIATED(tmp_node))& 7820 CALL extractDataContent(tmp_node, obj%num_of_constraints, IOSTAT = iostat_ ) 7821 IF ( iostat_ /= 0 ) THEN 7822 IF ( PRESENT (ierr ) ) THEN 7823 CALL infomsg("qes_read:atomic_constraintsType","error reading num_of_constraints") 7824 ierr = ierr + 1 7825 ELSE 7826 CALL errore ("qes_read:atomic_constraintsType","error reading num_of_constraints",10) 7827 END IF 7828 END IF 7829 ! 7830 tmp_node_list => getElementsByTagname(xml_node, "tolerance") 7831 tmp_node_list_size = getLength(tmp_node_list) 7832 ! 7833 IF (tmp_node_list_size /= 1) THEN 7834 IF (PRESENT(ierr) ) THEN 7835 CALL infomsg("qes_read:atomic_constraintsType","tolerance: wrong number of occurrences") 7836 ierr = ierr + 1 7837 ELSE 7838 CALL errore("qes_read:atomic_constraintsType","tolerance: wrong number of occurrences",10) 7839 END IF 7840 END IF 7841 ! 7842 tmp_node => item(tmp_node_list, 0) 7843 IF (ASSOCIATED(tmp_node))& 7844 CALL extractDataContent(tmp_node, obj%tolerance, IOSTAT = iostat_ ) 7845 IF ( iostat_ /= 0 ) THEN 7846 IF ( PRESENT (ierr ) ) THEN 7847 CALL infomsg("qes_read:atomic_constraintsType","error reading tolerance") 7848 ierr = ierr + 1 7849 ELSE 7850 CALL errore ("qes_read:atomic_constraintsType","error reading tolerance",10) 7851 END IF 7852 END IF 7853 ! 7854 tmp_node_list => getElementsByTagname(xml_node, "atomic_constraint") 7855 tmp_node_list_size = getLength(tmp_node_list) 7856 ! 7857 IF (tmp_node_list_size < 1) THEN 7858 IF (PRESENT(ierr) ) THEN 7859 CALL infomsg("qes_read:atomic_constraintsType","atomic_constraint: not enough elements") 7860 ierr = ierr + 1 7861 ELSE 7862 CALL errore("qes_read:atomic_constraintsType","atomic_constraint: not enough elements",10) 7863 END IF 7864 END IF 7865 ! 7866 obj%ndim_atomic_constraint = tmp_node_list_size 7867 ALLOCATE(obj%atomic_constraint(tmp_node_list_size)) 7868 DO index=1,tmp_node_list_size 7869 tmp_node => item( tmp_node_list, index-1 ) 7870 CALL qes_read_atomic_constraint(tmp_node, obj%atomic_constraint(index), ierr ) 7871 END DO 7872 ! 7873 ! 7874 obj%lwrite = .TRUE. 7875 ! 7876 END SUBROUTINE qes_read_atomic_constraints 7877 ! 7878 ! 7879 SUBROUTINE qes_read_atomic_constraint(xml_node, obj, ierr ) 7880 ! 7881 IMPLICIT NONE 7882 ! 7883 TYPE(Node), INTENT(IN), POINTER :: xml_node 7884 TYPE(atomic_constraint_type), INTENT(OUT) :: obj 7885 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 7886 ! 7887 TYPE(Node), POINTER :: tmp_node 7888 TYPE(NodeList), POINTER :: tmp_node_list 7889 INTEGER :: tmp_node_list_size, index, iostat_ 7890 ! 7891 obj%tagname = getTagName(xml_node) 7892 ! 7893 7894 7895 7896 7897 ! 7898 tmp_node_list => getElementsByTagname(xml_node, "constr_parms") 7899 tmp_node_list_size = getLength(tmp_node_list) 7900 ! 7901 IF (tmp_node_list_size /= 1) THEN 7902 IF (PRESENT(ierr) ) THEN 7903 CALL infomsg("qes_read:atomic_constraintType","constr_parms: wrong number of occurrences") 7904 ierr = ierr + 1 7905 ELSE 7906 CALL errore("qes_read:atomic_constraintType","constr_parms: wrong number of occurrences",10) 7907 END IF 7908 END IF 7909 ! 7910 tmp_node => item(tmp_node_list, 0) 7911 IF (ASSOCIATED(tmp_node))& 7912 CALL extractDataContent(tmp_node, obj%constr_parms, IOSTAT = iostat_ ) 7913 IF ( iostat_ /= 0 ) THEN 7914 IF ( PRESENT (ierr ) ) THEN 7915 CALL infomsg("qes_read:atomic_constraintType","error reading constr_parms") 7916 ierr = ierr + 1 7917 ELSE 7918 CALL errore ("qes_read:atomic_constraintType","error reading constr_parms",10) 7919 END IF 7920 END IF 7921 ! 7922 tmp_node_list => getElementsByTagname(xml_node, "constr_type") 7923 tmp_node_list_size = getLength(tmp_node_list) 7924 ! 7925 IF (tmp_node_list_size /= 1) THEN 7926 IF (PRESENT(ierr) ) THEN 7927 CALL infomsg("qes_read:atomic_constraintType","constr_type: wrong number of occurrences") 7928 ierr = ierr + 1 7929 ELSE 7930 CALL errore("qes_read:atomic_constraintType","constr_type: wrong number of occurrences",10) 7931 END IF 7932 END IF 7933 ! 7934 tmp_node => item(tmp_node_list, 0) 7935 IF (ASSOCIATED(tmp_node))& 7936 CALL extractDataContent(tmp_node, obj%constr_type, IOSTAT = iostat_ ) 7937 IF ( iostat_ /= 0 ) THEN 7938 IF ( PRESENT (ierr ) ) THEN 7939 CALL infomsg("qes_read:atomic_constraintType","error reading constr_type") 7940 ierr = ierr + 1 7941 ELSE 7942 CALL errore ("qes_read:atomic_constraintType","error reading constr_type",10) 7943 END IF 7944 END IF 7945 ! 7946 tmp_node_list => getElementsByTagname(xml_node, "constr_target") 7947 tmp_node_list_size = getLength(tmp_node_list) 7948 ! 7949 IF (tmp_node_list_size /= 1) THEN 7950 IF (PRESENT(ierr) ) THEN 7951 CALL infomsg("qes_read:atomic_constraintType","constr_target: wrong number of occurrences") 7952 ierr = ierr + 1 7953 ELSE 7954 CALL errore("qes_read:atomic_constraintType","constr_target: wrong number of occurrences",10) 7955 END IF 7956 END IF 7957 ! 7958 tmp_node => item(tmp_node_list, 0) 7959 IF (ASSOCIATED(tmp_node))& 7960 CALL extractDataContent(tmp_node, obj%constr_target, IOSTAT = iostat_ ) 7961 IF ( iostat_ /= 0 ) THEN 7962 IF ( PRESENT (ierr ) ) THEN 7963 CALL infomsg("qes_read:atomic_constraintType","error reading constr_target") 7964 ierr = ierr + 1 7965 ELSE 7966 CALL errore ("qes_read:atomic_constraintType","error reading constr_target",10) 7967 END IF 7968 END IF 7969 ! 7970 ! 7971 obj%lwrite = .TRUE. 7972 ! 7973 END SUBROUTINE qes_read_atomic_constraint 7974 ! 7975 ! 7976 SUBROUTINE qes_read_inputOccupations(xml_node, obj, ierr ) 7977 ! 7978 IMPLICIT NONE 7979 ! 7980 TYPE(Node), INTENT(IN), POINTER :: xml_node 7981 TYPE(inputOccupations_type), INTENT(OUT) :: obj 7982 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 7983 ! 7984 TYPE(Node), POINTER :: tmp_node 7985 TYPE(NodeList), POINTER :: tmp_node_list 7986 INTEGER :: tmp_node_list_size, index, iostat_ 7987 ! 7988 obj%tagname = getTagName(xml_node) 7989 ! 7990 7991 IF (hasAttribute(xml_node, "ispin")) THEN 7992 CALL extractDataAttribute(xml_node, "ispin", obj%ispin) 7993 ELSE 7994 IF ( PRESENT(ierr) ) THEN 7995 CALL infomsg ( "qes_read: inputOccupationsType",& 7996 "required attribute ispin not found" ) 7997 ierr = ierr + 1 7998 ELSE 7999 CALL errore ("qes_read: inputOccupationsType",& 8000 "required attribute ispin not found", 10 ) 8001 END IF 8002 END IF 8003 ! 8004 IF (hasAttribute(xml_node, "spin_factor")) THEN 8005 CALL extractDataAttribute(xml_node, "spin_factor", obj%spin_factor) 8006 ELSE 8007 IF ( PRESENT(ierr) ) THEN 8008 CALL infomsg ( "qes_read: inputOccupationsType",& 8009 "required attribute spin_factor not found" ) 8010 ierr = ierr + 1 8011 ELSE 8012 CALL errore ("qes_read: inputOccupationsType",& 8013 "required attribute spin_factor not found", 10 ) 8014 END IF 8015 END IF 8016 ! 8017 8018 IF (hasAttribute(xml_node, "size")) THEN 8019 CALL extractDataAttribute(xml_node, "size", obj%size) 8020 ELSE 8021 CALL errore ("qes_read: inputOccupationsType", & 8022 "mandatory size attribute not found in "//TRIM(obj%tagname), 12) 8023 END IF 8024 ! 8025 8026 ! 8027 ! 8028 ALLOCATE (obj%inputOccupations(obj%size)) 8029 CALL extractDataContent(xml_node, obj%inputOccupations ) 8030 ! 8031 obj%lwrite = .TRUE. 8032 ! 8033 END SUBROUTINE qes_read_inputOccupations 8034 ! 8035 ! 8036 SUBROUTINE qes_read_outputElectricField(xml_node, obj, ierr ) 8037 ! 8038 IMPLICIT NONE 8039 ! 8040 TYPE(Node), INTENT(IN), POINTER :: xml_node 8041 TYPE(outputElectricField_type), INTENT(OUT) :: obj 8042 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 8043 ! 8044 TYPE(Node), POINTER :: tmp_node 8045 TYPE(NodeList), POINTER :: tmp_node_list 8046 INTEGER :: tmp_node_list_size, index, iostat_ 8047 ! 8048 obj%tagname = getTagName(xml_node) 8049 ! 8050 8051 8052 8053 8054 ! 8055 tmp_node_list => getElementsByTagname(xml_node, "BerryPhase") 8056 tmp_node_list_size = getLength(tmp_node_list) 8057 ! 8058 IF (tmp_node_list_size > 1) THEN 8059 IF (PRESENT(ierr) ) THEN 8060 CALL infomsg("qes_read:outputElectricFieldType","BerryPhase: too many occurrences") 8061 ierr = ierr + 1 8062 ELSE 8063 CALL errore("qes_read:outputElectricFieldType","BerryPhase: too many occurrences",10) 8064 END IF 8065 END IF 8066 ! 8067 IF (tmp_node_list_size>0) THEN 8068 obj%BerryPhase_ispresent = .TRUE. 8069 tmp_node => item(tmp_node_list, 0) 8070 CALL qes_read_BerryPhaseOutput(tmp_node, obj%BerryPhase, ierr ) 8071 ELSE 8072 obj%BerryPhase_ispresent = .FALSE. 8073 END IF 8074 ! 8075 tmp_node_list => getElementsByTagname(xml_node, "finiteElectricFieldInfo") 8076 tmp_node_list_size = getLength(tmp_node_list) 8077 ! 8078 IF (tmp_node_list_size > 1) THEN 8079 IF (PRESENT(ierr) ) THEN 8080 CALL infomsg("qes_read:outputElectricFieldType","finiteElectricFieldInfo: too many occurrences") 8081 ierr = ierr + 1 8082 ELSE 8083 CALL errore("qes_read:outputElectricFieldType","finiteElectricFieldInfo: too many occurrences",10) 8084 END IF 8085 END IF 8086 ! 8087 IF (tmp_node_list_size>0) THEN 8088 obj%finiteElectricFieldInfo_ispresent = .TRUE. 8089 tmp_node => item(tmp_node_list, 0) 8090 CALL qes_read_finiteFieldOut(tmp_node, obj%finiteElectricFieldInfo, ierr ) 8091 ELSE 8092 obj%finiteElectricFieldInfo_ispresent = .FALSE. 8093 END IF 8094 ! 8095 tmp_node_list => getElementsByTagname(xml_node, "dipoleInfo") 8096 tmp_node_list_size = getLength(tmp_node_list) 8097 ! 8098 IF (tmp_node_list_size > 1) THEN 8099 IF (PRESENT(ierr) ) THEN 8100 CALL infomsg("qes_read:outputElectricFieldType","dipoleInfo: too many occurrences") 8101 ierr = ierr + 1 8102 ELSE 8103 CALL errore("qes_read:outputElectricFieldType","dipoleInfo: too many occurrences",10) 8104 END IF 8105 END IF 8106 ! 8107 IF (tmp_node_list_size>0) THEN 8108 obj%dipoleInfo_ispresent = .TRUE. 8109 tmp_node => item(tmp_node_list, 0) 8110 CALL qes_read_dipoleOutput(tmp_node, obj%dipoleInfo, ierr ) 8111 ELSE 8112 obj%dipoleInfo_ispresent = .FALSE. 8113 END IF 8114 ! 8115 tmp_node_list => getElementsByTagname(xml_node, "gateInfo") 8116 tmp_node_list_size = getLength(tmp_node_list) 8117 ! 8118 IF (tmp_node_list_size > 1) THEN 8119 IF (PRESENT(ierr) ) THEN 8120 CALL infomsg("qes_read:outputElectricFieldType","gateInfo: too many occurrences") 8121 ierr = ierr + 1 8122 ELSE 8123 CALL errore("qes_read:outputElectricFieldType","gateInfo: too many occurrences",10) 8124 END IF 8125 END IF 8126 ! 8127 IF (tmp_node_list_size>0) THEN 8128 obj%gateInfo_ispresent = .TRUE. 8129 tmp_node => item(tmp_node_list, 0) 8130 CALL qes_read_gateInfo(tmp_node, obj%gateInfo, ierr ) 8131 ELSE 8132 obj%gateInfo_ispresent = .FALSE. 8133 END IF 8134 ! 8135 ! 8136 obj%lwrite = .TRUE. 8137 ! 8138 END SUBROUTINE qes_read_outputElectricField 8139 ! 8140 ! 8141 SUBROUTINE qes_read_BerryPhaseOutput(xml_node, obj, ierr ) 8142 ! 8143 IMPLICIT NONE 8144 ! 8145 TYPE(Node), INTENT(IN), POINTER :: xml_node 8146 TYPE(BerryPhaseOutput_type), INTENT(OUT) :: obj 8147 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 8148 ! 8149 TYPE(Node), POINTER :: tmp_node 8150 TYPE(NodeList), POINTER :: tmp_node_list 8151 INTEGER :: tmp_node_list_size, index, iostat_ 8152 ! 8153 obj%tagname = getTagName(xml_node) 8154 ! 8155 8156 8157 8158 8159 ! 8160 tmp_node_list => getElementsByTagname(xml_node, "totalPolarization") 8161 tmp_node_list_size = getLength(tmp_node_list) 8162 ! 8163 IF (tmp_node_list_size /= 1) THEN 8164 IF (PRESENT(ierr) ) THEN 8165 CALL infomsg("qes_read:BerryPhaseOutputType","totalPolarization: wrong number of occurrences") 8166 ierr = ierr + 1 8167 ELSE 8168 CALL errore("qes_read:BerryPhaseOutputType","totalPolarization: wrong number of occurrences",10) 8169 END IF 8170 END IF 8171 ! 8172 tmp_node => item(tmp_node_list, 0) 8173 IF (ASSOCIATED(tmp_node))& 8174 CALL qes_read_polarization(tmp_node, obj%totalPolarization, ierr ) 8175 ! 8176 tmp_node_list => getElementsByTagname(xml_node, "totalPhase") 8177 tmp_node_list_size = getLength(tmp_node_list) 8178 ! 8179 IF (tmp_node_list_size /= 1) THEN 8180 IF (PRESENT(ierr) ) THEN 8181 CALL infomsg("qes_read:BerryPhaseOutputType","totalPhase: wrong number of occurrences") 8182 ierr = ierr + 1 8183 ELSE 8184 CALL errore("qes_read:BerryPhaseOutputType","totalPhase: wrong number of occurrences",10) 8185 END IF 8186 END IF 8187 ! 8188 tmp_node => item(tmp_node_list, 0) 8189 IF (ASSOCIATED(tmp_node))& 8190 CALL qes_read_phase(tmp_node, obj%totalPhase, ierr ) 8191 ! 8192 tmp_node_list => getElementsByTagname(xml_node, "ionicPolarization") 8193 tmp_node_list_size = getLength(tmp_node_list) 8194 ! 8195 IF (tmp_node_list_size < 1) THEN 8196 IF (PRESENT(ierr) ) THEN 8197 CALL infomsg("qes_read:BerryPhaseOutputType","ionicPolarization: not enough elements") 8198 ierr = ierr + 1 8199 ELSE 8200 CALL errore("qes_read:BerryPhaseOutputType","ionicPolarization: not enough elements",10) 8201 END IF 8202 END IF 8203 ! 8204 obj%ndim_ionicPolarization = tmp_node_list_size 8205 ALLOCATE(obj%ionicPolarization(tmp_node_list_size)) 8206 DO index=1,tmp_node_list_size 8207 tmp_node => item( tmp_node_list, index-1 ) 8208 CALL qes_read_ionicPolarization(tmp_node, obj%ionicPolarization(index), ierr ) 8209 END DO 8210 ! 8211 tmp_node_list => getElementsByTagname(xml_node, "electronicPolarization") 8212 tmp_node_list_size = getLength(tmp_node_list) 8213 ! 8214 IF (tmp_node_list_size < 1) THEN 8215 IF (PRESENT(ierr) ) THEN 8216 CALL infomsg("qes_read:BerryPhaseOutputType","electronicPolarization: not enough elements") 8217 ierr = ierr + 1 8218 ELSE 8219 CALL errore("qes_read:BerryPhaseOutputType","electronicPolarization: not enough elements",10) 8220 END IF 8221 END IF 8222 ! 8223 obj%ndim_electronicPolarization = tmp_node_list_size 8224 ALLOCATE(obj%electronicPolarization(tmp_node_list_size)) 8225 DO index=1,tmp_node_list_size 8226 tmp_node => item( tmp_node_list, index-1 ) 8227 CALL qes_read_electronicPolarization(tmp_node, obj%electronicPolarization(index), ierr ) 8228 END DO 8229 ! 8230 ! 8231 obj%lwrite = .TRUE. 8232 ! 8233 END SUBROUTINE qes_read_BerryPhaseOutput 8234 ! 8235 ! 8236 SUBROUTINE qes_read_dipoleOutput(xml_node, obj, ierr ) 8237 ! 8238 IMPLICIT NONE 8239 ! 8240 TYPE(Node), INTENT(IN), POINTER :: xml_node 8241 TYPE(dipoleOutput_type), INTENT(OUT) :: obj 8242 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 8243 ! 8244 TYPE(Node), POINTER :: tmp_node 8245 TYPE(NodeList), POINTER :: tmp_node_list 8246 INTEGER :: tmp_node_list_size, index, iostat_ 8247 ! 8248 obj%tagname = getTagName(xml_node) 8249 ! 8250 8251 8252 8253 8254 ! 8255 tmp_node_list => getElementsByTagname(xml_node, "idir") 8256 tmp_node_list_size = getLength(tmp_node_list) 8257 ! 8258 IF (tmp_node_list_size /= 1) THEN 8259 IF (PRESENT(ierr) ) THEN 8260 CALL infomsg("qes_read:dipoleOutputType","idir: wrong number of occurrences") 8261 ierr = ierr + 1 8262 ELSE 8263 CALL errore("qes_read:dipoleOutputType","idir: wrong number of occurrences",10) 8264 END IF 8265 END IF 8266 ! 8267 tmp_node => item(tmp_node_list, 0) 8268 IF (ASSOCIATED(tmp_node))& 8269 CALL extractDataContent(tmp_node, obj%idir, IOSTAT = iostat_ ) 8270 IF ( iostat_ /= 0 ) THEN 8271 IF ( PRESENT (ierr ) ) THEN 8272 CALL infomsg("qes_read:dipoleOutputType","error reading idir") 8273 ierr = ierr + 1 8274 ELSE 8275 CALL errore ("qes_read:dipoleOutputType","error reading idir",10) 8276 END IF 8277 END IF 8278 ! 8279 tmp_node_list => getElementsByTagname(xml_node, "dipole") 8280 tmp_node_list_size = getLength(tmp_node_list) 8281 ! 8282 IF (tmp_node_list_size /= 1) THEN 8283 IF (PRESENT(ierr) ) THEN 8284 CALL infomsg("qes_read:dipoleOutputType","dipole: wrong number of occurrences") 8285 ierr = ierr + 1 8286 ELSE 8287 CALL errore("qes_read:dipoleOutputType","dipole: wrong number of occurrences",10) 8288 END IF 8289 END IF 8290 ! 8291 tmp_node => item(tmp_node_list, 0) 8292 IF (ASSOCIATED(tmp_node))& 8293 CALL qes_read_scalarQuantity(tmp_node, obj%dipole, ierr ) 8294 ! 8295 tmp_node_list => getElementsByTagname(xml_node, "ion_dipole") 8296 tmp_node_list_size = getLength(tmp_node_list) 8297 ! 8298 IF (tmp_node_list_size /= 1) THEN 8299 IF (PRESENT(ierr) ) THEN 8300 CALL infomsg("qes_read:dipoleOutputType","ion_dipole: wrong number of occurrences") 8301 ierr = ierr + 1 8302 ELSE 8303 CALL errore("qes_read:dipoleOutputType","ion_dipole: wrong number of occurrences",10) 8304 END IF 8305 END IF 8306 ! 8307 tmp_node => item(tmp_node_list, 0) 8308 IF (ASSOCIATED(tmp_node))& 8309 CALL qes_read_scalarQuantity(tmp_node, obj%ion_dipole, ierr ) 8310 ! 8311 tmp_node_list => getElementsByTagname(xml_node, "elec_dipole") 8312 tmp_node_list_size = getLength(tmp_node_list) 8313 ! 8314 IF (tmp_node_list_size /= 1) THEN 8315 IF (PRESENT(ierr) ) THEN 8316 CALL infomsg("qes_read:dipoleOutputType","elec_dipole: wrong number of occurrences") 8317 ierr = ierr + 1 8318 ELSE 8319 CALL errore("qes_read:dipoleOutputType","elec_dipole: wrong number of occurrences",10) 8320 END IF 8321 END IF 8322 ! 8323 tmp_node => item(tmp_node_list, 0) 8324 IF (ASSOCIATED(tmp_node))& 8325 CALL qes_read_scalarQuantity(tmp_node, obj%elec_dipole, ierr ) 8326 ! 8327 tmp_node_list => getElementsByTagname(xml_node, "dipoleField") 8328 tmp_node_list_size = getLength(tmp_node_list) 8329 ! 8330 IF (tmp_node_list_size /= 1) THEN 8331 IF (PRESENT(ierr) ) THEN 8332 CALL infomsg("qes_read:dipoleOutputType","dipoleField: wrong number of occurrences") 8333 ierr = ierr + 1 8334 ELSE 8335 CALL errore("qes_read:dipoleOutputType","dipoleField: wrong number of occurrences",10) 8336 END IF 8337 END IF 8338 ! 8339 tmp_node => item(tmp_node_list, 0) 8340 IF (ASSOCIATED(tmp_node))& 8341 CALL qes_read_scalarQuantity(tmp_node, obj%dipoleField, ierr ) 8342 ! 8343 tmp_node_list => getElementsByTagname(xml_node, "potentialAmp") 8344 tmp_node_list_size = getLength(tmp_node_list) 8345 ! 8346 IF (tmp_node_list_size /= 1) THEN 8347 IF (PRESENT(ierr) ) THEN 8348 CALL infomsg("qes_read:dipoleOutputType","potentialAmp: wrong number of occurrences") 8349 ierr = ierr + 1 8350 ELSE 8351 CALL errore("qes_read:dipoleOutputType","potentialAmp: wrong number of occurrences",10) 8352 END IF 8353 END IF 8354 ! 8355 tmp_node => item(tmp_node_list, 0) 8356 IF (ASSOCIATED(tmp_node))& 8357 CALL qes_read_scalarQuantity(tmp_node, obj%potentialAmp, ierr ) 8358 ! 8359 tmp_node_list => getElementsByTagname(xml_node, "totalLength") 8360 tmp_node_list_size = getLength(tmp_node_list) 8361 ! 8362 IF (tmp_node_list_size /= 1) THEN 8363 IF (PRESENT(ierr) ) THEN 8364 CALL infomsg("qes_read:dipoleOutputType","totalLength: wrong number of occurrences") 8365 ierr = ierr + 1 8366 ELSE 8367 CALL errore("qes_read:dipoleOutputType","totalLength: wrong number of occurrences",10) 8368 END IF 8369 END IF 8370 ! 8371 tmp_node => item(tmp_node_list, 0) 8372 IF (ASSOCIATED(tmp_node))& 8373 CALL qes_read_scalarQuantity(tmp_node, obj%totalLength, ierr ) 8374 ! 8375 ! 8376 obj%lwrite = .TRUE. 8377 ! 8378 END SUBROUTINE qes_read_dipoleOutput 8379 ! 8380 ! 8381 SUBROUTINE qes_read_finiteFieldOut(xml_node, obj, ierr ) 8382 ! 8383 IMPLICIT NONE 8384 ! 8385 TYPE(Node), INTENT(IN), POINTER :: xml_node 8386 TYPE(finiteFieldOut_type), INTENT(OUT) :: obj 8387 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 8388 ! 8389 TYPE(Node), POINTER :: tmp_node 8390 TYPE(NodeList), POINTER :: tmp_node_list 8391 INTEGER :: tmp_node_list_size, index, iostat_ 8392 ! 8393 obj%tagname = getTagName(xml_node) 8394 ! 8395 8396 8397 8398 8399 ! 8400 tmp_node_list => getElementsByTagname(xml_node, "electronicDipole") 8401 tmp_node_list_size = getLength(tmp_node_list) 8402 ! 8403 IF (tmp_node_list_size /= 1) THEN 8404 IF (PRESENT(ierr) ) THEN 8405 CALL infomsg("qes_read:finiteFieldOutType","electronicDipole: wrong number of occurrences") 8406 ierr = ierr + 1 8407 ELSE 8408 CALL errore("qes_read:finiteFieldOutType","electronicDipole: wrong number of occurrences",10) 8409 END IF 8410 END IF 8411 ! 8412 tmp_node => item(tmp_node_list, 0) 8413 IF (ASSOCIATED(tmp_node))& 8414 CALL extractDataContent(tmp_node, obj%electronicDipole, IOSTAT = iostat_ ) 8415 IF ( iostat_ /= 0 ) THEN 8416 IF ( PRESENT (ierr ) ) THEN 8417 CALL infomsg("qes_read:finiteFieldOutType","error reading electronicDipole") 8418 ierr = ierr + 1 8419 ELSE 8420 CALL errore ("qes_read:finiteFieldOutType","error reading electronicDipole",10) 8421 END IF 8422 END IF 8423 ! 8424 tmp_node_list => getElementsByTagname(xml_node, "ionicDipole") 8425 tmp_node_list_size = getLength(tmp_node_list) 8426 ! 8427 IF (tmp_node_list_size /= 1) THEN 8428 IF (PRESENT(ierr) ) THEN 8429 CALL infomsg("qes_read:finiteFieldOutType","ionicDipole: wrong number of occurrences") 8430 ierr = ierr + 1 8431 ELSE 8432 CALL errore("qes_read:finiteFieldOutType","ionicDipole: wrong number of occurrences",10) 8433 END IF 8434 END IF 8435 ! 8436 tmp_node => item(tmp_node_list, 0) 8437 IF (ASSOCIATED(tmp_node))& 8438 CALL extractDataContent(tmp_node, obj%ionicDipole, IOSTAT = iostat_ ) 8439 IF ( iostat_ /= 0 ) THEN 8440 IF ( PRESENT (ierr ) ) THEN 8441 CALL infomsg("qes_read:finiteFieldOutType","error reading ionicDipole") 8442 ierr = ierr + 1 8443 ELSE 8444 CALL errore ("qes_read:finiteFieldOutType","error reading ionicDipole",10) 8445 END IF 8446 END IF 8447 ! 8448 ! 8449 obj%lwrite = .TRUE. 8450 ! 8451 END SUBROUTINE qes_read_finiteFieldOut 8452 ! 8453 ! 8454 SUBROUTINE qes_read_polarization(xml_node, obj, ierr ) 8455 ! 8456 IMPLICIT NONE 8457 ! 8458 TYPE(Node), INTENT(IN), POINTER :: xml_node 8459 TYPE(polarization_type), INTENT(OUT) :: obj 8460 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 8461 ! 8462 TYPE(Node), POINTER :: tmp_node 8463 TYPE(NodeList), POINTER :: tmp_node_list 8464 INTEGER :: tmp_node_list_size, index, iostat_ 8465 ! 8466 obj%tagname = getTagName(xml_node) 8467 ! 8468 8469 8470 8471 8472 ! 8473 tmp_node_list => getElementsByTagname(xml_node, "polarization") 8474 tmp_node_list_size = getLength(tmp_node_list) 8475 ! 8476 IF (tmp_node_list_size /= 1) THEN 8477 IF (PRESENT(ierr) ) THEN 8478 CALL infomsg("qes_read:polarizationType","polarization: wrong number of occurrences") 8479 ierr = ierr + 1 8480 ELSE 8481 CALL errore("qes_read:polarizationType","polarization: wrong number of occurrences",10) 8482 END IF 8483 END IF 8484 ! 8485 tmp_node => item(tmp_node_list, 0) 8486 IF (ASSOCIATED(tmp_node))& 8487 CALL qes_read_scalarQuantity(tmp_node, obj%polarization, ierr ) 8488 ! 8489 tmp_node_list => getElementsByTagname(xml_node, "modulus") 8490 tmp_node_list_size = getLength(tmp_node_list) 8491 ! 8492 IF (tmp_node_list_size /= 1) THEN 8493 IF (PRESENT(ierr) ) THEN 8494 CALL infomsg("qes_read:polarizationType","modulus: wrong number of occurrences") 8495 ierr = ierr + 1 8496 ELSE 8497 CALL errore("qes_read:polarizationType","modulus: wrong number of occurrences",10) 8498 END IF 8499 END IF 8500 ! 8501 tmp_node => item(tmp_node_list, 0) 8502 IF (ASSOCIATED(tmp_node))& 8503 CALL extractDataContent(tmp_node, obj%modulus, IOSTAT = iostat_ ) 8504 IF ( iostat_ /= 0 ) THEN 8505 IF ( PRESENT (ierr ) ) THEN 8506 CALL infomsg("qes_read:polarizationType","error reading modulus") 8507 ierr = ierr + 1 8508 ELSE 8509 CALL errore ("qes_read:polarizationType","error reading modulus",10) 8510 END IF 8511 END IF 8512 ! 8513 tmp_node_list => getElementsByTagname(xml_node, "direction") 8514 tmp_node_list_size = getLength(tmp_node_list) 8515 ! 8516 IF (tmp_node_list_size /= 1) THEN 8517 IF (PRESENT(ierr) ) THEN 8518 CALL infomsg("qes_read:polarizationType","direction: wrong number of occurrences") 8519 ierr = ierr + 1 8520 ELSE 8521 CALL errore("qes_read:polarizationType","direction: wrong number of occurrences",10) 8522 END IF 8523 END IF 8524 ! 8525 tmp_node => item(tmp_node_list, 0) 8526 IF (ASSOCIATED(tmp_node))& 8527 CALL extractDataContent(tmp_node, obj%direction, IOSTAT = iostat_ ) 8528 IF ( iostat_ /= 0 ) THEN 8529 IF ( PRESENT (ierr ) ) THEN 8530 CALL infomsg("qes_read:polarizationType","error reading direction") 8531 ierr = ierr + 1 8532 ELSE 8533 CALL errore ("qes_read:polarizationType","error reading direction",10) 8534 END IF 8535 END IF 8536 ! 8537 ! 8538 obj%lwrite = .TRUE. 8539 ! 8540 END SUBROUTINE qes_read_polarization 8541 ! 8542 ! 8543 SUBROUTINE qes_read_ionicPolarization(xml_node, obj, ierr ) 8544 ! 8545 IMPLICIT NONE 8546 ! 8547 TYPE(Node), INTENT(IN), POINTER :: xml_node 8548 TYPE(ionicPolarization_type), INTENT(OUT) :: obj 8549 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 8550 ! 8551 TYPE(Node), POINTER :: tmp_node 8552 TYPE(NodeList), POINTER :: tmp_node_list 8553 INTEGER :: tmp_node_list_size, index, iostat_ 8554 ! 8555 obj%tagname = getTagName(xml_node) 8556 ! 8557 8558 8559 8560 8561 ! 8562 tmp_node_list => getElementsByTagname(xml_node, "ion") 8563 tmp_node_list_size = getLength(tmp_node_list) 8564 ! 8565 IF (tmp_node_list_size /= 1) THEN 8566 IF (PRESENT(ierr) ) THEN 8567 CALL infomsg("qes_read:ionicPolarizationType","ion: wrong number of occurrences") 8568 ierr = ierr + 1 8569 ELSE 8570 CALL errore("qes_read:ionicPolarizationType","ion: wrong number of occurrences",10) 8571 END IF 8572 END IF 8573 ! 8574 tmp_node => item(tmp_node_list, 0) 8575 IF (ASSOCIATED(tmp_node))& 8576 CALL qes_read_atom(tmp_node, obj%ion, ierr ) 8577 ! 8578 tmp_node_list => getElementsByTagname(xml_node, "charge") 8579 tmp_node_list_size = getLength(tmp_node_list) 8580 ! 8581 IF (tmp_node_list_size /= 1) THEN 8582 IF (PRESENT(ierr) ) THEN 8583 CALL infomsg("qes_read:ionicPolarizationType","charge: wrong number of occurrences") 8584 ierr = ierr + 1 8585 ELSE 8586 CALL errore("qes_read:ionicPolarizationType","charge: wrong number of occurrences",10) 8587 END IF 8588 END IF 8589 ! 8590 tmp_node => item(tmp_node_list, 0) 8591 IF (ASSOCIATED(tmp_node))& 8592 CALL extractDataContent(tmp_node, obj%charge, IOSTAT = iostat_ ) 8593 IF ( iostat_ /= 0 ) THEN 8594 IF ( PRESENT (ierr ) ) THEN 8595 CALL infomsg("qes_read:ionicPolarizationType","error reading charge") 8596 ierr = ierr + 1 8597 ELSE 8598 CALL errore ("qes_read:ionicPolarizationType","error reading charge",10) 8599 END IF 8600 END IF 8601 ! 8602 tmp_node_list => getElementsByTagname(xml_node, "phase") 8603 tmp_node_list_size = getLength(tmp_node_list) 8604 ! 8605 IF (tmp_node_list_size /= 1) THEN 8606 IF (PRESENT(ierr) ) THEN 8607 CALL infomsg("qes_read:ionicPolarizationType","phase: wrong number of occurrences") 8608 ierr = ierr + 1 8609 ELSE 8610 CALL errore("qes_read:ionicPolarizationType","phase: wrong number of occurrences",10) 8611 END IF 8612 END IF 8613 ! 8614 tmp_node => item(tmp_node_list, 0) 8615 IF (ASSOCIATED(tmp_node))& 8616 CALL qes_read_phase(tmp_node, obj%phase, ierr ) 8617 ! 8618 ! 8619 obj%lwrite = .TRUE. 8620 ! 8621 END SUBROUTINE qes_read_ionicPolarization 8622 ! 8623 ! 8624 SUBROUTINE qes_read_electronicPolarization(xml_node, obj, ierr ) 8625 ! 8626 IMPLICIT NONE 8627 ! 8628 TYPE(Node), INTENT(IN), POINTER :: xml_node 8629 TYPE(electronicPolarization_type), INTENT(OUT) :: obj 8630 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 8631 ! 8632 TYPE(Node), POINTER :: tmp_node 8633 TYPE(NodeList), POINTER :: tmp_node_list 8634 INTEGER :: tmp_node_list_size, index, iostat_ 8635 ! 8636 obj%tagname = getTagName(xml_node) 8637 ! 8638 8639 8640 8641 8642 ! 8643 tmp_node_list => getElementsByTagname(xml_node, "firstKeyPoint") 8644 tmp_node_list_size = getLength(tmp_node_list) 8645 ! 8646 IF (tmp_node_list_size /= 1) THEN 8647 IF (PRESENT(ierr) ) THEN 8648 CALL infomsg("qes_read:electronicPolarizationType","firstKeyPoint: wrong number of occurrences") 8649 ierr = ierr + 1 8650 ELSE 8651 CALL errore("qes_read:electronicPolarizationType","firstKeyPoint: wrong number of occurrences",10) 8652 END IF 8653 END IF 8654 ! 8655 tmp_node => item(tmp_node_list, 0) 8656 IF (ASSOCIATED(tmp_node))& 8657 CALL qes_read_k_point(tmp_node, obj%firstKeyPoint, ierr ) 8658 ! 8659 tmp_node_list => getElementsByTagname(xml_node, "spin") 8660 tmp_node_list_size = getLength(tmp_node_list) 8661 ! 8662 IF (tmp_node_list_size > 1) THEN 8663 IF (PRESENT(ierr) ) THEN 8664 CALL infomsg("qes_read:electronicPolarizationType","spin: too many occurrences") 8665 ierr = ierr + 1 8666 ELSE 8667 CALL errore("qes_read:electronicPolarizationType","spin: too many occurrences",10) 8668 END IF 8669 END IF 8670 ! 8671 IF (tmp_node_list_size>0) THEN 8672 obj%spin_ispresent = .TRUE. 8673 tmp_node => item(tmp_node_list, 0) 8674 CALL extractDataContent(tmp_node, obj%spin , IOSTAT = iostat_) 8675 IF ( iostat_ /= 0 ) THEN 8676 IF ( PRESENT (ierr ) ) THEN 8677 CALL infomsg("qes_read:electronicPolarizationType","error reading spin") 8678 ierr = ierr + 1 8679 ELSE 8680 CALL errore ("qes_read:electronicPolarizationType","error reading spin",10) 8681 END IF 8682 END IF 8683 ELSE 8684 obj%spin_ispresent = .FALSE. 8685 END IF 8686 ! 8687 tmp_node_list => getElementsByTagname(xml_node, "phase") 8688 tmp_node_list_size = getLength(tmp_node_list) 8689 ! 8690 IF (tmp_node_list_size /= 1) THEN 8691 IF (PRESENT(ierr) ) THEN 8692 CALL infomsg("qes_read:electronicPolarizationType","phase: wrong number of occurrences") 8693 ierr = ierr + 1 8694 ELSE 8695 CALL errore("qes_read:electronicPolarizationType","phase: wrong number of occurrences",10) 8696 END IF 8697 END IF 8698 ! 8699 tmp_node => item(tmp_node_list, 0) 8700 IF (ASSOCIATED(tmp_node))& 8701 CALL qes_read_phase(tmp_node, obj%phase, ierr ) 8702 ! 8703 ! 8704 obj%lwrite = .TRUE. 8705 ! 8706 END SUBROUTINE qes_read_electronicPolarization 8707 ! 8708 ! 8709 SUBROUTINE qes_read_phase(xml_node, obj, ierr ) 8710 ! 8711 IMPLICIT NONE 8712 ! 8713 TYPE(Node), INTENT(IN), POINTER :: xml_node 8714 TYPE(phase_type), INTENT(OUT) :: obj 8715 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 8716 ! 8717 TYPE(Node), POINTER :: tmp_node 8718 TYPE(NodeList), POINTER :: tmp_node_list 8719 INTEGER :: tmp_node_list_size, index, iostat_ 8720 ! 8721 obj%tagname = getTagName(xml_node) 8722 ! 8723 8724 IF (hasAttribute(xml_node, "ionic")) THEN 8725 CALL extractDataAttribute(xml_node, "ionic", obj%ionic) 8726 obj%ionic_ispresent = .TRUE. 8727 ELSE 8728 obj%ionic_ispresent = .FALSE. 8729 END IF 8730 ! 8731 IF (hasAttribute(xml_node, "electronic")) THEN 8732 CALL extractDataAttribute(xml_node, "electronic", obj%electronic) 8733 obj%electronic_ispresent = .TRUE. 8734 ELSE 8735 obj%electronic_ispresent = .FALSE. 8736 END IF 8737 ! 8738 IF (hasAttribute(xml_node, "modulus")) THEN 8739 CALL extractDataAttribute(xml_node, "modulus", obj%modulus) 8740 obj%modulus_ispresent = .TRUE. 8741 ELSE 8742 obj%modulus_ispresent = .FALSE. 8743 END IF 8744 ! 8745 8746 8747 8748 ! 8749 ! 8750 CALL extractDataContent(xml_node, obj%phase ) 8751 ! 8752 obj%lwrite = .TRUE. 8753 ! 8754 END SUBROUTINE qes_read_phase 8755 ! 8756 ! 8757 SUBROUTINE qes_read_gateInfo(xml_node, obj, ierr ) 8758 ! 8759 IMPLICIT NONE 8760 ! 8761 TYPE(Node), INTENT(IN), POINTER :: xml_node 8762 TYPE(gateInfo_type), INTENT(OUT) :: obj 8763 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 8764 ! 8765 TYPE(Node), POINTER :: tmp_node 8766 TYPE(NodeList), POINTER :: tmp_node_list 8767 INTEGER :: tmp_node_list_size, index, iostat_ 8768 ! 8769 obj%tagname = getTagName(xml_node) 8770 ! 8771 8772 8773 8774 8775 ! 8776 tmp_node_list => getElementsByTagname(xml_node, "pot_prefactor") 8777 tmp_node_list_size = getLength(tmp_node_list) 8778 ! 8779 IF (tmp_node_list_size /= 1) THEN 8780 IF (PRESENT(ierr) ) THEN 8781 CALL infomsg("qes_read:gateInfoType","pot_prefactor: wrong number of occurrences") 8782 ierr = ierr + 1 8783 ELSE 8784 CALL errore("qes_read:gateInfoType","pot_prefactor: wrong number of occurrences",10) 8785 END IF 8786 END IF 8787 ! 8788 tmp_node => item(tmp_node_list, 0) 8789 IF (ASSOCIATED(tmp_node))& 8790 CALL extractDataContent(tmp_node, obj%pot_prefactor, IOSTAT = iostat_ ) 8791 IF ( iostat_ /= 0 ) THEN 8792 IF ( PRESENT (ierr ) ) THEN 8793 CALL infomsg("qes_read:gateInfoType","error reading pot_prefactor") 8794 ierr = ierr + 1 8795 ELSE 8796 CALL errore ("qes_read:gateInfoType","error reading pot_prefactor",10) 8797 END IF 8798 END IF 8799 ! 8800 tmp_node_list => getElementsByTagname(xml_node, "gate_zpos") 8801 tmp_node_list_size = getLength(tmp_node_list) 8802 ! 8803 IF (tmp_node_list_size /= 1) THEN 8804 IF (PRESENT(ierr) ) THEN 8805 CALL infomsg("qes_read:gateInfoType","gate_zpos: wrong number of occurrences") 8806 ierr = ierr + 1 8807 ELSE 8808 CALL errore("qes_read:gateInfoType","gate_zpos: wrong number of occurrences",10) 8809 END IF 8810 END IF 8811 ! 8812 tmp_node => item(tmp_node_list, 0) 8813 IF (ASSOCIATED(tmp_node))& 8814 CALL extractDataContent(tmp_node, obj%gate_zpos, IOSTAT = iostat_ ) 8815 IF ( iostat_ /= 0 ) THEN 8816 IF ( PRESENT (ierr ) ) THEN 8817 CALL infomsg("qes_read:gateInfoType","error reading gate_zpos") 8818 ierr = ierr + 1 8819 ELSE 8820 CALL errore ("qes_read:gateInfoType","error reading gate_zpos",10) 8821 END IF 8822 END IF 8823 ! 8824 tmp_node_list => getElementsByTagname(xml_node, "gate_gate_term") 8825 tmp_node_list_size = getLength(tmp_node_list) 8826 ! 8827 IF (tmp_node_list_size /= 1) THEN 8828 IF (PRESENT(ierr) ) THEN 8829 CALL infomsg("qes_read:gateInfoType","gate_gate_term: wrong number of occurrences") 8830 ierr = ierr + 1 8831 ELSE 8832 CALL errore("qes_read:gateInfoType","gate_gate_term: wrong number of occurrences",10) 8833 END IF 8834 END IF 8835 ! 8836 tmp_node => item(tmp_node_list, 0) 8837 IF (ASSOCIATED(tmp_node))& 8838 CALL extractDataContent(tmp_node, obj%gate_gate_term, IOSTAT = iostat_ ) 8839 IF ( iostat_ /= 0 ) THEN 8840 IF ( PRESENT (ierr ) ) THEN 8841 CALL infomsg("qes_read:gateInfoType","error reading gate_gate_term") 8842 ierr = ierr + 1 8843 ELSE 8844 CALL errore ("qes_read:gateInfoType","error reading gate_gate_term",10) 8845 END IF 8846 END IF 8847 ! 8848 tmp_node_list => getElementsByTagname(xml_node, "gatefieldEnergy") 8849 tmp_node_list_size = getLength(tmp_node_list) 8850 ! 8851 IF (tmp_node_list_size /= 1) THEN 8852 IF (PRESENT(ierr) ) THEN 8853 CALL infomsg("qes_read:gateInfoType","gatefieldEnergy: wrong number of occurrences") 8854 ierr = ierr + 1 8855 ELSE 8856 CALL errore("qes_read:gateInfoType","gatefieldEnergy: wrong number of occurrences",10) 8857 END IF 8858 END IF 8859 ! 8860 tmp_node => item(tmp_node_list, 0) 8861 IF (ASSOCIATED(tmp_node))& 8862 CALL extractDataContent(tmp_node, obj%gatefieldEnergy, IOSTAT = iostat_ ) 8863 IF ( iostat_ /= 0 ) THEN 8864 IF ( PRESENT (ierr ) ) THEN 8865 CALL infomsg("qes_read:gateInfoType","error reading gatefieldEnergy") 8866 ierr = ierr + 1 8867 ELSE 8868 CALL errore ("qes_read:gateInfoType","error reading gatefieldEnergy",10) 8869 END IF 8870 END IF 8871 ! 8872 ! 8873 obj%lwrite = .TRUE. 8874 ! 8875 END SUBROUTINE qes_read_gateInfo 8876 ! 8877 ! 8878 SUBROUTINE qes_read_convergence_info(xml_node, obj, ierr ) 8879 ! 8880 IMPLICIT NONE 8881 ! 8882 TYPE(Node), INTENT(IN), POINTER :: xml_node 8883 TYPE(convergence_info_type), INTENT(OUT) :: obj 8884 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 8885 ! 8886 TYPE(Node), POINTER :: tmp_node 8887 TYPE(NodeList), POINTER :: tmp_node_list 8888 INTEGER :: tmp_node_list_size, index, iostat_ 8889 ! 8890 obj%tagname = getTagName(xml_node) 8891 ! 8892 8893 8894 8895 8896 ! 8897 tmp_node_list => getElementsByTagname(xml_node, "scf_conv") 8898 tmp_node_list_size = getLength(tmp_node_list) 8899 ! 8900 IF (tmp_node_list_size /= 1) THEN 8901 IF (PRESENT(ierr) ) THEN 8902 CALL infomsg("qes_read:convergence_infoType","scf_conv: wrong number of occurrences") 8903 ierr = ierr + 1 8904 ELSE 8905 CALL errore("qes_read:convergence_infoType","scf_conv: wrong number of occurrences",10) 8906 END IF 8907 END IF 8908 ! 8909 tmp_node => item(tmp_node_list, 0) 8910 IF (ASSOCIATED(tmp_node))& 8911 CALL qes_read_scf_conv(tmp_node, obj%scf_conv, ierr ) 8912 ! 8913 tmp_node_list => getElementsByTagname(xml_node, "opt_conv") 8914 tmp_node_list_size = getLength(tmp_node_list) 8915 ! 8916 IF (tmp_node_list_size > 1) THEN 8917 IF (PRESENT(ierr) ) THEN 8918 CALL infomsg("qes_read:convergence_infoType","opt_conv: too many occurrences") 8919 ierr = ierr + 1 8920 ELSE 8921 CALL errore("qes_read:convergence_infoType","opt_conv: too many occurrences",10) 8922 END IF 8923 END IF 8924 ! 8925 IF (tmp_node_list_size>0) THEN 8926 obj%opt_conv_ispresent = .TRUE. 8927 tmp_node => item(tmp_node_list, 0) 8928 CALL qes_read_opt_conv(tmp_node, obj%opt_conv, ierr ) 8929 ELSE 8930 obj%opt_conv_ispresent = .FALSE. 8931 END IF 8932 ! 8933 ! 8934 obj%lwrite = .TRUE. 8935 ! 8936 END SUBROUTINE qes_read_convergence_info 8937 ! 8938 ! 8939 SUBROUTINE qes_read_scf_conv(xml_node, obj, ierr ) 8940 ! 8941 IMPLICIT NONE 8942 ! 8943 TYPE(Node), INTENT(IN), POINTER :: xml_node 8944 TYPE(scf_conv_type), INTENT(OUT) :: obj 8945 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 8946 ! 8947 TYPE(Node), POINTER :: tmp_node 8948 TYPE(NodeList), POINTER :: tmp_node_list 8949 INTEGER :: tmp_node_list_size, index, iostat_ 8950 ! 8951 obj%tagname = getTagName(xml_node) 8952 ! 8953 8954 8955 8956 8957 ! 8958 tmp_node_list => getElementsByTagname(xml_node, "convergence_achieved") 8959 tmp_node_list_size = getLength(tmp_node_list) 8960 ! 8961 IF (tmp_node_list_size /= 1) THEN 8962 IF (PRESENT(ierr) ) THEN 8963 CALL infomsg("qes_read:scf_convType","convergence_achieved: wrong number of occurrences") 8964 ierr = ierr + 1 8965 ELSE 8966 CALL errore("qes_read:scf_convType","convergence_achieved: wrong number of occurrences",10) 8967 END IF 8968 END IF 8969 ! 8970 tmp_node => item(tmp_node_list, 0) 8971 IF (ASSOCIATED(tmp_node))& 8972 CALL extractDataContent(tmp_node, obj%convergence_achieved, IOSTAT = iostat_ ) 8973 IF ( iostat_ /= 0 ) THEN 8974 IF ( PRESENT (ierr ) ) THEN 8975 CALL infomsg("qes_read:scf_convType","error reading convergence_achieved") 8976 ierr = ierr + 1 8977 ELSE 8978 CALL errore ("qes_read:scf_convType","error reading convergence_achieved",10) 8979 END IF 8980 END IF 8981 ! 8982 tmp_node_list => getElementsByTagname(xml_node, "n_scf_steps") 8983 tmp_node_list_size = getLength(tmp_node_list) 8984 ! 8985 IF (tmp_node_list_size /= 1) THEN 8986 IF (PRESENT(ierr) ) THEN 8987 CALL infomsg("qes_read:scf_convType","n_scf_steps: wrong number of occurrences") 8988 ierr = ierr + 1 8989 ELSE 8990 CALL errore("qes_read:scf_convType","n_scf_steps: wrong number of occurrences",10) 8991 END IF 8992 END IF 8993 ! 8994 tmp_node => item(tmp_node_list, 0) 8995 IF (ASSOCIATED(tmp_node))& 8996 CALL extractDataContent(tmp_node, obj%n_scf_steps, IOSTAT = iostat_ ) 8997 IF ( iostat_ /= 0 ) THEN 8998 IF ( PRESENT (ierr ) ) THEN 8999 CALL infomsg("qes_read:scf_convType","error reading n_scf_steps") 9000 ierr = ierr + 1 9001 ELSE 9002 CALL errore ("qes_read:scf_convType","error reading n_scf_steps",10) 9003 END IF 9004 END IF 9005 ! 9006 tmp_node_list => getElementsByTagname(xml_node, "scf_error") 9007 tmp_node_list_size = getLength(tmp_node_list) 9008 ! 9009 IF (tmp_node_list_size /= 1) THEN 9010 IF (PRESENT(ierr) ) THEN 9011 CALL infomsg("qes_read:scf_convType","scf_error: wrong number of occurrences") 9012 ierr = ierr + 1 9013 ELSE 9014 CALL errore("qes_read:scf_convType","scf_error: wrong number of occurrences",10) 9015 END IF 9016 END IF 9017 ! 9018 tmp_node => item(tmp_node_list, 0) 9019 IF (ASSOCIATED(tmp_node))& 9020 CALL extractDataContent(tmp_node, obj%scf_error, IOSTAT = iostat_ ) 9021 IF ( iostat_ /= 0 ) THEN 9022 IF ( PRESENT (ierr ) ) THEN 9023 CALL infomsg("qes_read:scf_convType","error reading scf_error") 9024 ierr = ierr + 1 9025 ELSE 9026 CALL errore ("qes_read:scf_convType","error reading scf_error",10) 9027 END IF 9028 END IF 9029 ! 9030 ! 9031 obj%lwrite = .TRUE. 9032 ! 9033 END SUBROUTINE qes_read_scf_conv 9034 ! 9035 ! 9036 SUBROUTINE qes_read_opt_conv(xml_node, obj, ierr ) 9037 ! 9038 IMPLICIT NONE 9039 ! 9040 TYPE(Node), INTENT(IN), POINTER :: xml_node 9041 TYPE(opt_conv_type), INTENT(OUT) :: obj 9042 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 9043 ! 9044 TYPE(Node), POINTER :: tmp_node 9045 TYPE(NodeList), POINTER :: tmp_node_list 9046 INTEGER :: tmp_node_list_size, index, iostat_ 9047 ! 9048 obj%tagname = getTagName(xml_node) 9049 ! 9050 9051 9052 9053 9054 ! 9055 tmp_node_list => getElementsByTagname(xml_node, "convergence_achieved") 9056 tmp_node_list_size = getLength(tmp_node_list) 9057 ! 9058 IF (tmp_node_list_size /= 1) THEN 9059 IF (PRESENT(ierr) ) THEN 9060 CALL infomsg("qes_read:opt_convType","convergence_achieved: wrong number of occurrences") 9061 ierr = ierr + 1 9062 ELSE 9063 CALL errore("qes_read:opt_convType","convergence_achieved: wrong number of occurrences",10) 9064 END IF 9065 END IF 9066 ! 9067 tmp_node => item(tmp_node_list, 0) 9068 IF (ASSOCIATED(tmp_node))& 9069 CALL extractDataContent(tmp_node, obj%convergence_achieved, IOSTAT = iostat_ ) 9070 IF ( iostat_ /= 0 ) THEN 9071 IF ( PRESENT (ierr ) ) THEN 9072 CALL infomsg("qes_read:opt_convType","error reading convergence_achieved") 9073 ierr = ierr + 1 9074 ELSE 9075 CALL errore ("qes_read:opt_convType","error reading convergence_achieved",10) 9076 END IF 9077 END IF 9078 ! 9079 tmp_node_list => getElementsByTagname(xml_node, "n_opt_steps") 9080 tmp_node_list_size = getLength(tmp_node_list) 9081 ! 9082 IF (tmp_node_list_size /= 1) THEN 9083 IF (PRESENT(ierr) ) THEN 9084 CALL infomsg("qes_read:opt_convType","n_opt_steps: wrong number of occurrences") 9085 ierr = ierr + 1 9086 ELSE 9087 CALL errore("qes_read:opt_convType","n_opt_steps: wrong number of occurrences",10) 9088 END IF 9089 END IF 9090 ! 9091 tmp_node => item(tmp_node_list, 0) 9092 IF (ASSOCIATED(tmp_node))& 9093 CALL extractDataContent(tmp_node, obj%n_opt_steps, IOSTAT = iostat_ ) 9094 IF ( iostat_ /= 0 ) THEN 9095 IF ( PRESENT (ierr ) ) THEN 9096 CALL infomsg("qes_read:opt_convType","error reading n_opt_steps") 9097 ierr = ierr + 1 9098 ELSE 9099 CALL errore ("qes_read:opt_convType","error reading n_opt_steps",10) 9100 END IF 9101 END IF 9102 ! 9103 tmp_node_list => getElementsByTagname(xml_node, "grad_norm") 9104 tmp_node_list_size = getLength(tmp_node_list) 9105 ! 9106 IF (tmp_node_list_size /= 1) THEN 9107 IF (PRESENT(ierr) ) THEN 9108 CALL infomsg("qes_read:opt_convType","grad_norm: wrong number of occurrences") 9109 ierr = ierr + 1 9110 ELSE 9111 CALL errore("qes_read:opt_convType","grad_norm: wrong number of occurrences",10) 9112 END IF 9113 END IF 9114 ! 9115 tmp_node => item(tmp_node_list, 0) 9116 IF (ASSOCIATED(tmp_node))& 9117 CALL extractDataContent(tmp_node, obj%grad_norm, IOSTAT = iostat_ ) 9118 IF ( iostat_ /= 0 ) THEN 9119 IF ( PRESENT (ierr ) ) THEN 9120 CALL infomsg("qes_read:opt_convType","error reading grad_norm") 9121 ierr = ierr + 1 9122 ELSE 9123 CALL errore ("qes_read:opt_convType","error reading grad_norm",10) 9124 END IF 9125 END IF 9126 ! 9127 ! 9128 obj%lwrite = .TRUE. 9129 ! 9130 END SUBROUTINE qes_read_opt_conv 9131 ! 9132 ! 9133 SUBROUTINE qes_read_algorithmic_info(xml_node, obj, ierr ) 9134 ! 9135 IMPLICIT NONE 9136 ! 9137 TYPE(Node), INTENT(IN), POINTER :: xml_node 9138 TYPE(algorithmic_info_type), INTENT(OUT) :: obj 9139 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 9140 ! 9141 TYPE(Node), POINTER :: tmp_node 9142 TYPE(NodeList), POINTER :: tmp_node_list 9143 INTEGER :: tmp_node_list_size, index, iostat_ 9144 ! 9145 obj%tagname = getTagName(xml_node) 9146 ! 9147 9148 9149 9150 9151 ! 9152 tmp_node_list => getElementsByTagname(xml_node, "real_space_q") 9153 tmp_node_list_size = getLength(tmp_node_list) 9154 ! 9155 IF (tmp_node_list_size /= 1) THEN 9156 IF (PRESENT(ierr) ) THEN 9157 CALL infomsg("qes_read:algorithmic_infoType","real_space_q: wrong number of occurrences") 9158 ierr = ierr + 1 9159 ELSE 9160 CALL errore("qes_read:algorithmic_infoType","real_space_q: wrong number of occurrences",10) 9161 END IF 9162 END IF 9163 ! 9164 tmp_node => item(tmp_node_list, 0) 9165 IF (ASSOCIATED(tmp_node))& 9166 CALL extractDataContent(tmp_node, obj%real_space_q, IOSTAT = iostat_ ) 9167 IF ( iostat_ /= 0 ) THEN 9168 IF ( PRESENT (ierr ) ) THEN 9169 CALL infomsg("qes_read:algorithmic_infoType","error reading real_space_q") 9170 ierr = ierr + 1 9171 ELSE 9172 CALL errore ("qes_read:algorithmic_infoType","error reading real_space_q",10) 9173 END IF 9174 END IF 9175 ! 9176 tmp_node_list => getElementsByTagname(xml_node, "real_space_beta") 9177 tmp_node_list_size = getLength(tmp_node_list) 9178 ! 9179 IF (tmp_node_list_size > 1) THEN 9180 IF (PRESENT(ierr) ) THEN 9181 CALL infomsg("qes_read:algorithmic_infoType","real_space_beta: too many occurrences") 9182 ierr = ierr + 1 9183 ELSE 9184 CALL errore("qes_read:algorithmic_infoType","real_space_beta: too many occurrences",10) 9185 END IF 9186 END IF 9187 ! 9188 IF (tmp_node_list_size>0) THEN 9189 obj%real_space_beta_ispresent = .TRUE. 9190 tmp_node => item(tmp_node_list, 0) 9191 CALL extractDataContent(tmp_node, obj%real_space_beta , IOSTAT = iostat_) 9192 IF ( iostat_ /= 0 ) THEN 9193 IF ( PRESENT (ierr ) ) THEN 9194 CALL infomsg("qes_read:algorithmic_infoType","error reading real_space_beta") 9195 ierr = ierr + 1 9196 ELSE 9197 CALL errore ("qes_read:algorithmic_infoType","error reading real_space_beta",10) 9198 END IF 9199 END IF 9200 ELSE 9201 obj%real_space_beta_ispresent = .FALSE. 9202 END IF 9203 ! 9204 tmp_node_list => getElementsByTagname(xml_node, "uspp") 9205 tmp_node_list_size = getLength(tmp_node_list) 9206 ! 9207 IF (tmp_node_list_size /= 1) THEN 9208 IF (PRESENT(ierr) ) THEN 9209 CALL infomsg("qes_read:algorithmic_infoType","uspp: wrong number of occurrences") 9210 ierr = ierr + 1 9211 ELSE 9212 CALL errore("qes_read:algorithmic_infoType","uspp: wrong number of occurrences",10) 9213 END IF 9214 END IF 9215 ! 9216 tmp_node => item(tmp_node_list, 0) 9217 IF (ASSOCIATED(tmp_node))& 9218 CALL extractDataContent(tmp_node, obj%uspp, IOSTAT = iostat_ ) 9219 IF ( iostat_ /= 0 ) THEN 9220 IF ( PRESENT (ierr ) ) THEN 9221 CALL infomsg("qes_read:algorithmic_infoType","error reading uspp") 9222 ierr = ierr + 1 9223 ELSE 9224 CALL errore ("qes_read:algorithmic_infoType","error reading uspp",10) 9225 END IF 9226 END IF 9227 ! 9228 tmp_node_list => getElementsByTagname(xml_node, "paw") 9229 tmp_node_list_size = getLength(tmp_node_list) 9230 ! 9231 IF (tmp_node_list_size /= 1) THEN 9232 IF (PRESENT(ierr) ) THEN 9233 CALL infomsg("qes_read:algorithmic_infoType","paw: wrong number of occurrences") 9234 ierr = ierr + 1 9235 ELSE 9236 CALL errore("qes_read:algorithmic_infoType","paw: wrong number of occurrences",10) 9237 END IF 9238 END IF 9239 ! 9240 tmp_node => item(tmp_node_list, 0) 9241 IF (ASSOCIATED(tmp_node))& 9242 CALL extractDataContent(tmp_node, obj%paw, IOSTAT = iostat_ ) 9243 IF ( iostat_ /= 0 ) THEN 9244 IF ( PRESENT (ierr ) ) THEN 9245 CALL infomsg("qes_read:algorithmic_infoType","error reading paw") 9246 ierr = ierr + 1 9247 ELSE 9248 CALL errore ("qes_read:algorithmic_infoType","error reading paw",10) 9249 END IF 9250 END IF 9251 ! 9252 ! 9253 obj%lwrite = .TRUE. 9254 ! 9255 END SUBROUTINE qes_read_algorithmic_info 9256 ! 9257 ! 9258 SUBROUTINE qes_read_symmetries(xml_node, obj, ierr ) 9259 ! 9260 IMPLICIT NONE 9261 ! 9262 TYPE(Node), INTENT(IN), POINTER :: xml_node 9263 TYPE(symmetries_type), INTENT(OUT) :: obj 9264 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 9265 ! 9266 TYPE(Node), POINTER :: tmp_node 9267 TYPE(NodeList), POINTER :: tmp_node_list 9268 INTEGER :: tmp_node_list_size, index, iostat_ 9269 ! 9270 obj%tagname = getTagName(xml_node) 9271 ! 9272 9273 9274 9275 9276 ! 9277 tmp_node_list => getElementsByTagname(xml_node, "nsym") 9278 tmp_node_list_size = getLength(tmp_node_list) 9279 ! 9280 IF (tmp_node_list_size /= 1) THEN 9281 IF (PRESENT(ierr) ) THEN 9282 CALL infomsg("qes_read:symmetriesType","nsym: wrong number of occurrences") 9283 ierr = ierr + 1 9284 ELSE 9285 CALL errore("qes_read:symmetriesType","nsym: wrong number of occurrences",10) 9286 END IF 9287 END IF 9288 ! 9289 tmp_node => item(tmp_node_list, 0) 9290 IF (ASSOCIATED(tmp_node))& 9291 CALL extractDataContent(tmp_node, obj%nsym, IOSTAT = iostat_ ) 9292 IF ( iostat_ /= 0 ) THEN 9293 IF ( PRESENT (ierr ) ) THEN 9294 CALL infomsg("qes_read:symmetriesType","error reading nsym") 9295 ierr = ierr + 1 9296 ELSE 9297 CALL errore ("qes_read:symmetriesType","error reading nsym",10) 9298 END IF 9299 END IF 9300 ! 9301 tmp_node_list => getElementsByTagname(xml_node, "nrot") 9302 tmp_node_list_size = getLength(tmp_node_list) 9303 ! 9304 IF (tmp_node_list_size /= 1) THEN 9305 IF (PRESENT(ierr) ) THEN 9306 CALL infomsg("qes_read:symmetriesType","nrot: wrong number of occurrences") 9307 ierr = ierr + 1 9308 ELSE 9309 CALL errore("qes_read:symmetriesType","nrot: wrong number of occurrences",10) 9310 END IF 9311 END IF 9312 ! 9313 tmp_node => item(tmp_node_list, 0) 9314 IF (ASSOCIATED(tmp_node))& 9315 CALL extractDataContent(tmp_node, obj%nrot, IOSTAT = iostat_ ) 9316 IF ( iostat_ /= 0 ) THEN 9317 IF ( PRESENT (ierr ) ) THEN 9318 CALL infomsg("qes_read:symmetriesType","error reading nrot") 9319 ierr = ierr + 1 9320 ELSE 9321 CALL errore ("qes_read:symmetriesType","error reading nrot",10) 9322 END IF 9323 END IF 9324 ! 9325 tmp_node_list => getElementsByTagname(xml_node, "space_group") 9326 tmp_node_list_size = getLength(tmp_node_list) 9327 ! 9328 IF (tmp_node_list_size /= 1) THEN 9329 IF (PRESENT(ierr) ) THEN 9330 CALL infomsg("qes_read:symmetriesType","space_group: wrong number of occurrences") 9331 ierr = ierr + 1 9332 ELSE 9333 CALL errore("qes_read:symmetriesType","space_group: wrong number of occurrences",10) 9334 END IF 9335 END IF 9336 ! 9337 tmp_node => item(tmp_node_list, 0) 9338 IF (ASSOCIATED(tmp_node))& 9339 CALL extractDataContent(tmp_node, obj%space_group, IOSTAT = iostat_ ) 9340 IF ( iostat_ /= 0 ) THEN 9341 IF ( PRESENT (ierr ) ) THEN 9342 CALL infomsg("qes_read:symmetriesType","error reading space_group") 9343 ierr = ierr + 1 9344 ELSE 9345 CALL errore ("qes_read:symmetriesType","error reading space_group",10) 9346 END IF 9347 END IF 9348 ! 9349 tmp_node_list => getElementsByTagname(xml_node, "symmetry") 9350 tmp_node_list_size = getLength(tmp_node_list) 9351 ! 9352 IF (tmp_node_list_size < 1) THEN 9353 IF (PRESENT(ierr) ) THEN 9354 CALL infomsg("qes_read:symmetriesType","symmetry: not enough elements") 9355 ierr = ierr + 1 9356 ELSE 9357 CALL errore("qes_read:symmetriesType","symmetry: not enough elements",10) 9358 END IF 9359 END IF 9360 IF (tmp_node_list_size > 48) THEN 9361 IF (PRESENT(ierr) ) THEN 9362 CALL infomsg("qes_read:symmetriesType","symmetry: too many occurrences") 9363 ierr = ierr + 1 9364 ELSE 9365 CALL errore("qes_read:symmetriesType","symmetry: too many occurrences",10) 9366 END IF 9367 END IF 9368 ! 9369 obj%ndim_symmetry = tmp_node_list_size 9370 ALLOCATE(obj%symmetry(tmp_node_list_size)) 9371 DO index=1,tmp_node_list_size 9372 tmp_node => item( tmp_node_list, index-1 ) 9373 CALL qes_read_symmetry(tmp_node, obj%symmetry(index), ierr ) 9374 END DO 9375 ! 9376 ! 9377 obj%lwrite = .TRUE. 9378 ! 9379 END SUBROUTINE qes_read_symmetries 9380 ! 9381 ! 9382 SUBROUTINE qes_read_symmetry(xml_node, obj, ierr ) 9383 ! 9384 IMPLICIT NONE 9385 ! 9386 TYPE(Node), INTENT(IN), POINTER :: xml_node 9387 TYPE(symmetry_type), INTENT(OUT) :: obj 9388 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 9389 ! 9390 TYPE(Node), POINTER :: tmp_node 9391 TYPE(NodeList), POINTER :: tmp_node_list 9392 INTEGER :: tmp_node_list_size, index, iostat_ 9393 ! 9394 obj%tagname = getTagName(xml_node) 9395 ! 9396 9397 9398 9399 9400 ! 9401 tmp_node_list => getElementsByTagname(xml_node, "info") 9402 tmp_node_list_size = getLength(tmp_node_list) 9403 ! 9404 IF (tmp_node_list_size /= 1) THEN 9405 IF (PRESENT(ierr) ) THEN 9406 CALL infomsg("qes_read:symmetryType","info: wrong number of occurrences") 9407 ierr = ierr + 1 9408 ELSE 9409 CALL errore("qes_read:symmetryType","info: wrong number of occurrences",10) 9410 END IF 9411 END IF 9412 ! 9413 tmp_node => item(tmp_node_list, 0) 9414 IF (ASSOCIATED(tmp_node))& 9415 CALL qes_read_info(tmp_node, obj%info, ierr ) 9416 ! 9417 tmp_node_list => getElementsByTagname(xml_node, "rotation") 9418 tmp_node_list_size = getLength(tmp_node_list) 9419 ! 9420 IF (tmp_node_list_size /= 1) THEN 9421 IF (PRESENT(ierr) ) THEN 9422 CALL infomsg("qes_read:symmetryType","rotation: wrong number of occurrences") 9423 ierr = ierr + 1 9424 ELSE 9425 CALL errore("qes_read:symmetryType","rotation: wrong number of occurrences",10) 9426 END IF 9427 END IF 9428 ! 9429 tmp_node => item(tmp_node_list, 0) 9430 IF (ASSOCIATED(tmp_node))& 9431 CALL qes_read_matrix(tmp_node, obj%rotation, ierr ) 9432 ! 9433 tmp_node_list => getElementsByTagname(xml_node, "fractional_translation") 9434 tmp_node_list_size = getLength(tmp_node_list) 9435 ! 9436 IF (tmp_node_list_size > 1) THEN 9437 IF (PRESENT(ierr) ) THEN 9438 CALL infomsg("qes_read:symmetryType","fractional_translation: too many occurrences") 9439 ierr = ierr + 1 9440 ELSE 9441 CALL errore("qes_read:symmetryType","fractional_translation: too many occurrences",10) 9442 END IF 9443 END IF 9444 ! 9445 IF (tmp_node_list_size>0) THEN 9446 obj%fractional_translation_ispresent = .TRUE. 9447 tmp_node => item(tmp_node_list, 0) 9448 CALL extractDataContent(tmp_node, obj%fractional_translation , IOSTAT = iostat_) 9449 IF ( iostat_ /= 0 ) THEN 9450 IF ( PRESENT (ierr ) ) THEN 9451 CALL infomsg("qes_read:symmetryType","error reading fractional_translation") 9452 ierr = ierr + 1 9453 ELSE 9454 CALL errore ("qes_read:symmetryType","error reading fractional_translation",10) 9455 END IF 9456 END IF 9457 ELSE 9458 obj%fractional_translation_ispresent = .FALSE. 9459 END IF 9460 ! 9461 tmp_node_list => getElementsByTagname(xml_node, "equivalent_atoms") 9462 tmp_node_list_size = getLength(tmp_node_list) 9463 ! 9464 IF (tmp_node_list_size > 1) THEN 9465 IF (PRESENT(ierr) ) THEN 9466 CALL infomsg("qes_read:symmetryType","equivalent_atoms: too many occurrences") 9467 ierr = ierr + 1 9468 ELSE 9469 CALL errore("qes_read:symmetryType","equivalent_atoms: too many occurrences",10) 9470 END IF 9471 END IF 9472 ! 9473 IF (tmp_node_list_size>0) THEN 9474 obj%equivalent_atoms_ispresent = .TRUE. 9475 tmp_node => item(tmp_node_list, 0) 9476 CALL qes_read_equivalent_atoms(tmp_node, obj%equivalent_atoms, ierr ) 9477 ELSE 9478 obj%equivalent_atoms_ispresent = .FALSE. 9479 END IF 9480 ! 9481 ! 9482 obj%lwrite = .TRUE. 9483 ! 9484 END SUBROUTINE qes_read_symmetry 9485 ! 9486 ! 9487 SUBROUTINE qes_read_equivalent_atoms(xml_node, obj, ierr ) 9488 ! 9489 IMPLICIT NONE 9490 ! 9491 TYPE(Node), INTENT(IN), POINTER :: xml_node 9492 TYPE(equivalent_atoms_type), INTENT(OUT) :: obj 9493 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 9494 ! 9495 TYPE(Node), POINTER :: tmp_node 9496 TYPE(NodeList), POINTER :: tmp_node_list 9497 INTEGER :: tmp_node_list_size, index, iostat_ 9498 ! 9499 obj%tagname = getTagName(xml_node) 9500 ! 9501 9502 IF (hasAttribute(xml_node, "nat")) THEN 9503 CALL extractDataAttribute(xml_node, "nat", obj%nat) 9504 ELSE 9505 IF ( PRESENT(ierr) ) THEN 9506 CALL infomsg ( "qes_read: equivalent_atomsType",& 9507 "required attribute nat not found" ) 9508 ierr = ierr + 1 9509 ELSE 9510 CALL errore ("qes_read: equivalent_atomsType",& 9511 "required attribute nat not found", 10 ) 9512 END IF 9513 END IF 9514 ! 9515 9516 IF (hasAttribute(xml_node, "size")) THEN 9517 CALL extractDataAttribute(xml_node, "size", obj%size) 9518 ELSE 9519 CALL errore ("qes_read: equivalent_atomsType", & 9520 "mandatory size attribute not found in "//TRIM(obj%tagname), 12) 9521 END IF 9522 ! 9523 9524 ! 9525 ! 9526 ALLOCATE (obj%equivalent_atoms(obj%size)) 9527 CALL extractDataContent(xml_node, obj%equivalent_atoms) 9528 ! 9529 obj%lwrite = .TRUE. 9530 ! 9531 END SUBROUTINE qes_read_equivalent_atoms 9532 ! 9533 ! 9534 SUBROUTINE qes_read_info(xml_node, obj, ierr ) 9535 ! 9536 IMPLICIT NONE 9537 ! 9538 TYPE(Node), INTENT(IN), POINTER :: xml_node 9539 TYPE(info_type), INTENT(OUT) :: obj 9540 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 9541 ! 9542 TYPE(Node), POINTER :: tmp_node 9543 TYPE(NodeList), POINTER :: tmp_node_list 9544 INTEGER :: tmp_node_list_size, index, iostat_ 9545 ! 9546 obj%tagname = getTagName(xml_node) 9547 ! 9548 9549 IF (hasAttribute(xml_node, "name")) THEN 9550 CALL extractDataAttribute(xml_node, "name", obj%name) 9551 obj%name_ispresent = .TRUE. 9552 ELSE 9553 obj%name_ispresent = .FALSE. 9554 END IF 9555 ! 9556 IF (hasAttribute(xml_node, "class")) THEN 9557 CALL extractDataAttribute(xml_node, "class", obj%class) 9558 obj%class_ispresent = .TRUE. 9559 ELSE 9560 obj%class_ispresent = .FALSE. 9561 END IF 9562 ! 9563 IF (hasAttribute(xml_node, "time_reversal")) THEN 9564 CALL extractDataAttribute(xml_node, "time_reversal", obj%time_reversal) 9565 obj%time_reversal_ispresent = .TRUE. 9566 ELSE 9567 obj%time_reversal_ispresent = .FALSE. 9568 END IF 9569 ! 9570 9571 9572 9573 ! 9574 ! 9575 CALL extractDataContent(xml_node, obj%info ) 9576 ! 9577 obj%lwrite = .TRUE. 9578 ! 9579 END SUBROUTINE qes_read_info 9580 ! 9581 ! 9582 SUBROUTINE qes_read_outputPBC(xml_node, obj, ierr ) 9583 ! 9584 IMPLICIT NONE 9585 ! 9586 TYPE(Node), INTENT(IN), POINTER :: xml_node 9587 TYPE(outputPBC_type), INTENT(OUT) :: obj 9588 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 9589 ! 9590 TYPE(Node), POINTER :: tmp_node 9591 TYPE(NodeList), POINTER :: tmp_node_list 9592 INTEGER :: tmp_node_list_size, index, iostat_ 9593 ! 9594 obj%tagname = getTagName(xml_node) 9595 ! 9596 9597 9598 9599 9600 ! 9601 tmp_node_list => getElementsByTagname(xml_node, "assume_isolated") 9602 tmp_node_list_size = getLength(tmp_node_list) 9603 ! 9604 IF (tmp_node_list_size /= 1) THEN 9605 IF (PRESENT(ierr) ) THEN 9606 CALL infomsg("qes_read:outputPBCType","assume_isolated: wrong number of occurrences") 9607 ierr = ierr + 1 9608 ELSE 9609 CALL errore("qes_read:outputPBCType","assume_isolated: wrong number of occurrences",10) 9610 END IF 9611 END IF 9612 ! 9613 tmp_node => item(tmp_node_list, 0) 9614 IF (ASSOCIATED(tmp_node))& 9615 CALL extractDataContent(tmp_node, obj%assume_isolated, IOSTAT = iostat_ ) 9616 IF ( iostat_ /= 0 ) THEN 9617 IF ( PRESENT (ierr ) ) THEN 9618 CALL infomsg("qes_read:outputPBCType","error reading assume_isolated") 9619 ierr = ierr + 1 9620 ELSE 9621 CALL errore ("qes_read:outputPBCType","error reading assume_isolated",10) 9622 END IF 9623 END IF 9624 ! 9625 ! 9626 obj%lwrite = .TRUE. 9627 ! 9628 END SUBROUTINE qes_read_outputPBC 9629 ! 9630 ! 9631 SUBROUTINE qes_read_magnetization(xml_node, obj, ierr ) 9632 ! 9633 IMPLICIT NONE 9634 ! 9635 TYPE(Node), INTENT(IN), POINTER :: xml_node 9636 TYPE(magnetization_type), INTENT(OUT) :: obj 9637 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 9638 ! 9639 TYPE(Node), POINTER :: tmp_node 9640 TYPE(NodeList), POINTER :: tmp_node_list 9641 INTEGER :: tmp_node_list_size, index, iostat_ 9642 ! 9643 obj%tagname = getTagName(xml_node) 9644 ! 9645 9646 9647 9648 9649 ! 9650 tmp_node_list => getElementsByTagname(xml_node, "lsda") 9651 tmp_node_list_size = getLength(tmp_node_list) 9652 ! 9653 IF (tmp_node_list_size /= 1) THEN 9654 IF (PRESENT(ierr) ) THEN 9655 CALL infomsg("qes_read:magnetizationType","lsda: wrong number of occurrences") 9656 ierr = ierr + 1 9657 ELSE 9658 CALL errore("qes_read:magnetizationType","lsda: wrong number of occurrences",10) 9659 END IF 9660 END IF 9661 ! 9662 tmp_node => item(tmp_node_list, 0) 9663 IF (ASSOCIATED(tmp_node))& 9664 CALL extractDataContent(tmp_node, obj%lsda, IOSTAT = iostat_ ) 9665 IF ( iostat_ /= 0 ) THEN 9666 IF ( PRESENT (ierr ) ) THEN 9667 CALL infomsg("qes_read:magnetizationType","error reading lsda") 9668 ierr = ierr + 1 9669 ELSE 9670 CALL errore ("qes_read:magnetizationType","error reading lsda",10) 9671 END IF 9672 END IF 9673 ! 9674 tmp_node_list => getElementsByTagname(xml_node, "noncolin") 9675 tmp_node_list_size = getLength(tmp_node_list) 9676 ! 9677 IF (tmp_node_list_size /= 1) THEN 9678 IF (PRESENT(ierr) ) THEN 9679 CALL infomsg("qes_read:magnetizationType","noncolin: wrong number of occurrences") 9680 ierr = ierr + 1 9681 ELSE 9682 CALL errore("qes_read:magnetizationType","noncolin: wrong number of occurrences",10) 9683 END IF 9684 END IF 9685 ! 9686 tmp_node => item(tmp_node_list, 0) 9687 IF (ASSOCIATED(tmp_node))& 9688 CALL extractDataContent(tmp_node, obj%noncolin, IOSTAT = iostat_ ) 9689 IF ( iostat_ /= 0 ) THEN 9690 IF ( PRESENT (ierr ) ) THEN 9691 CALL infomsg("qes_read:magnetizationType","error reading noncolin") 9692 ierr = ierr + 1 9693 ELSE 9694 CALL errore ("qes_read:magnetizationType","error reading noncolin",10) 9695 END IF 9696 END IF 9697 ! 9698 tmp_node_list => getElementsByTagname(xml_node, "spinorbit") 9699 tmp_node_list_size = getLength(tmp_node_list) 9700 ! 9701 IF (tmp_node_list_size /= 1) THEN 9702 IF (PRESENT(ierr) ) THEN 9703 CALL infomsg("qes_read:magnetizationType","spinorbit: wrong number of occurrences") 9704 ierr = ierr + 1 9705 ELSE 9706 CALL errore("qes_read:magnetizationType","spinorbit: wrong number of occurrences",10) 9707 END IF 9708 END IF 9709 ! 9710 tmp_node => item(tmp_node_list, 0) 9711 IF (ASSOCIATED(tmp_node))& 9712 CALL extractDataContent(tmp_node, obj%spinorbit, IOSTAT = iostat_ ) 9713 IF ( iostat_ /= 0 ) THEN 9714 IF ( PRESENT (ierr ) ) THEN 9715 CALL infomsg("qes_read:magnetizationType","error reading spinorbit") 9716 ierr = ierr + 1 9717 ELSE 9718 CALL errore ("qes_read:magnetizationType","error reading spinorbit",10) 9719 END IF 9720 END IF 9721 ! 9722 tmp_node_list => getElementsByTagname(xml_node, "total") 9723 tmp_node_list_size = getLength(tmp_node_list) 9724 ! 9725 IF (tmp_node_list_size /= 1) THEN 9726 IF (PRESENT(ierr) ) THEN 9727 CALL infomsg("qes_read:magnetizationType","total: wrong number of occurrences") 9728 ierr = ierr + 1 9729 ELSE 9730 CALL errore("qes_read:magnetizationType","total: wrong number of occurrences",10) 9731 END IF 9732 END IF 9733 ! 9734 tmp_node => item(tmp_node_list, 0) 9735 IF (ASSOCIATED(tmp_node))& 9736 CALL extractDataContent(tmp_node, obj%total, IOSTAT = iostat_ ) 9737 IF ( iostat_ /= 0 ) THEN 9738 IF ( PRESENT (ierr ) ) THEN 9739 CALL infomsg("qes_read:magnetizationType","error reading total") 9740 ierr = ierr + 1 9741 ELSE 9742 CALL errore ("qes_read:magnetizationType","error reading total",10) 9743 END IF 9744 END IF 9745 ! 9746 tmp_node_list => getElementsByTagname(xml_node, "absolute") 9747 tmp_node_list_size = getLength(tmp_node_list) 9748 ! 9749 IF (tmp_node_list_size /= 1) THEN 9750 IF (PRESENT(ierr) ) THEN 9751 CALL infomsg("qes_read:magnetizationType","absolute: wrong number of occurrences") 9752 ierr = ierr + 1 9753 ELSE 9754 CALL errore("qes_read:magnetizationType","absolute: wrong number of occurrences",10) 9755 END IF 9756 END IF 9757 ! 9758 tmp_node => item(tmp_node_list, 0) 9759 IF (ASSOCIATED(tmp_node))& 9760 CALL extractDataContent(tmp_node, obj%absolute, IOSTAT = iostat_ ) 9761 IF ( iostat_ /= 0 ) THEN 9762 IF ( PRESENT (ierr ) ) THEN 9763 CALL infomsg("qes_read:magnetizationType","error reading absolute") 9764 ierr = ierr + 1 9765 ELSE 9766 CALL errore ("qes_read:magnetizationType","error reading absolute",10) 9767 END IF 9768 END IF 9769 ! 9770 tmp_node_list => getElementsByTagname(xml_node, "do_magnetization") 9771 tmp_node_list_size = getLength(tmp_node_list) 9772 ! 9773 IF (tmp_node_list_size > 1) THEN 9774 IF (PRESENT(ierr) ) THEN 9775 CALL infomsg("qes_read:magnetizationType","do_magnetization: too many occurrences") 9776 ierr = ierr + 1 9777 ELSE 9778 CALL errore("qes_read:magnetizationType","do_magnetization: too many occurrences",10) 9779 END IF 9780 END IF 9781 ! 9782 IF (tmp_node_list_size>0) THEN 9783 obj%do_magnetization_ispresent = .TRUE. 9784 tmp_node => item(tmp_node_list, 0) 9785 CALL extractDataContent(tmp_node, obj%do_magnetization , IOSTAT = iostat_) 9786 IF ( iostat_ /= 0 ) THEN 9787 IF ( PRESENT (ierr ) ) THEN 9788 CALL infomsg("qes_read:magnetizationType","error reading do_magnetization") 9789 ierr = ierr + 1 9790 ELSE 9791 CALL errore ("qes_read:magnetizationType","error reading do_magnetization",10) 9792 END IF 9793 END IF 9794 ELSE 9795 obj%do_magnetization_ispresent = .FALSE. 9796 END IF 9797 ! 9798 ! 9799 obj%lwrite = .TRUE. 9800 ! 9801 END SUBROUTINE qes_read_magnetization 9802 ! 9803 ! 9804 SUBROUTINE qes_read_total_energy(xml_node, obj, ierr ) 9805 ! 9806 IMPLICIT NONE 9807 ! 9808 TYPE(Node), INTENT(IN), POINTER :: xml_node 9809 TYPE(total_energy_type), INTENT(OUT) :: obj 9810 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 9811 ! 9812 TYPE(Node), POINTER :: tmp_node 9813 TYPE(NodeList), POINTER :: tmp_node_list 9814 INTEGER :: tmp_node_list_size, index, iostat_ 9815 ! 9816 obj%tagname = getTagName(xml_node) 9817 ! 9818 9819 9820 9821 9822 ! 9823 tmp_node_list => getElementsByTagname(xml_node, "etot") 9824 tmp_node_list_size = getLength(tmp_node_list) 9825 ! 9826 IF (tmp_node_list_size /= 1) THEN 9827 IF (PRESENT(ierr) ) THEN 9828 CALL infomsg("qes_read:total_energyType","etot: wrong number of occurrences") 9829 ierr = ierr + 1 9830 ELSE 9831 CALL errore("qes_read:total_energyType","etot: wrong number of occurrences",10) 9832 END IF 9833 END IF 9834 ! 9835 tmp_node => item(tmp_node_list, 0) 9836 IF (ASSOCIATED(tmp_node))& 9837 CALL extractDataContent(tmp_node, obj%etot, IOSTAT = iostat_ ) 9838 IF ( iostat_ /= 0 ) THEN 9839 IF ( PRESENT (ierr ) ) THEN 9840 CALL infomsg("qes_read:total_energyType","error reading etot") 9841 ierr = ierr + 1 9842 ELSE 9843 CALL errore ("qes_read:total_energyType","error reading etot",10) 9844 END IF 9845 END IF 9846 ! 9847 tmp_node_list => getElementsByTagname(xml_node, "eband") 9848 tmp_node_list_size = getLength(tmp_node_list) 9849 ! 9850 IF (tmp_node_list_size > 1) THEN 9851 IF (PRESENT(ierr) ) THEN 9852 CALL infomsg("qes_read:total_energyType","eband: too many occurrences") 9853 ierr = ierr + 1 9854 ELSE 9855 CALL errore("qes_read:total_energyType","eband: too many occurrences",10) 9856 END IF 9857 END IF 9858 ! 9859 IF (tmp_node_list_size>0) THEN 9860 obj%eband_ispresent = .TRUE. 9861 tmp_node => item(tmp_node_list, 0) 9862 CALL extractDataContent(tmp_node, obj%eband , IOSTAT = iostat_) 9863 IF ( iostat_ /= 0 ) THEN 9864 IF ( PRESENT (ierr ) ) THEN 9865 CALL infomsg("qes_read:total_energyType","error reading eband") 9866 ierr = ierr + 1 9867 ELSE 9868 CALL errore ("qes_read:total_energyType","error reading eband",10) 9869 END IF 9870 END IF 9871 ELSE 9872 obj%eband_ispresent = .FALSE. 9873 END IF 9874 ! 9875 tmp_node_list => getElementsByTagname(xml_node, "ehart") 9876 tmp_node_list_size = getLength(tmp_node_list) 9877 ! 9878 IF (tmp_node_list_size > 1) THEN 9879 IF (PRESENT(ierr) ) THEN 9880 CALL infomsg("qes_read:total_energyType","ehart: too many occurrences") 9881 ierr = ierr + 1 9882 ELSE 9883 CALL errore("qes_read:total_energyType","ehart: too many occurrences",10) 9884 END IF 9885 END IF 9886 ! 9887 IF (tmp_node_list_size>0) THEN 9888 obj%ehart_ispresent = .TRUE. 9889 tmp_node => item(tmp_node_list, 0) 9890 CALL extractDataContent(tmp_node, obj%ehart , IOSTAT = iostat_) 9891 IF ( iostat_ /= 0 ) THEN 9892 IF ( PRESENT (ierr ) ) THEN 9893 CALL infomsg("qes_read:total_energyType","error reading ehart") 9894 ierr = ierr + 1 9895 ELSE 9896 CALL errore ("qes_read:total_energyType","error reading ehart",10) 9897 END IF 9898 END IF 9899 ELSE 9900 obj%ehart_ispresent = .FALSE. 9901 END IF 9902 ! 9903 tmp_node_list => getElementsByTagname(xml_node, "vtxc") 9904 tmp_node_list_size = getLength(tmp_node_list) 9905 ! 9906 IF (tmp_node_list_size > 1) THEN 9907 IF (PRESENT(ierr) ) THEN 9908 CALL infomsg("qes_read:total_energyType","vtxc: too many occurrences") 9909 ierr = ierr + 1 9910 ELSE 9911 CALL errore("qes_read:total_energyType","vtxc: too many occurrences",10) 9912 END IF 9913 END IF 9914 ! 9915 IF (tmp_node_list_size>0) THEN 9916 obj%vtxc_ispresent = .TRUE. 9917 tmp_node => item(tmp_node_list, 0) 9918 CALL extractDataContent(tmp_node, obj%vtxc , IOSTAT = iostat_) 9919 IF ( iostat_ /= 0 ) THEN 9920 IF ( PRESENT (ierr ) ) THEN 9921 CALL infomsg("qes_read:total_energyType","error reading vtxc") 9922 ierr = ierr + 1 9923 ELSE 9924 CALL errore ("qes_read:total_energyType","error reading vtxc",10) 9925 END IF 9926 END IF 9927 ELSE 9928 obj%vtxc_ispresent = .FALSE. 9929 END IF 9930 ! 9931 tmp_node_list => getElementsByTagname(xml_node, "etxc") 9932 tmp_node_list_size = getLength(tmp_node_list) 9933 ! 9934 IF (tmp_node_list_size > 1) THEN 9935 IF (PRESENT(ierr) ) THEN 9936 CALL infomsg("qes_read:total_energyType","etxc: too many occurrences") 9937 ierr = ierr + 1 9938 ELSE 9939 CALL errore("qes_read:total_energyType","etxc: too many occurrences",10) 9940 END IF 9941 END IF 9942 ! 9943 IF (tmp_node_list_size>0) THEN 9944 obj%etxc_ispresent = .TRUE. 9945 tmp_node => item(tmp_node_list, 0) 9946 CALL extractDataContent(tmp_node, obj%etxc , IOSTAT = iostat_) 9947 IF ( iostat_ /= 0 ) THEN 9948 IF ( PRESENT (ierr ) ) THEN 9949 CALL infomsg("qes_read:total_energyType","error reading etxc") 9950 ierr = ierr + 1 9951 ELSE 9952 CALL errore ("qes_read:total_energyType","error reading etxc",10) 9953 END IF 9954 END IF 9955 ELSE 9956 obj%etxc_ispresent = .FALSE. 9957 END IF 9958 ! 9959 tmp_node_list => getElementsByTagname(xml_node, "ewald") 9960 tmp_node_list_size = getLength(tmp_node_list) 9961 ! 9962 IF (tmp_node_list_size > 1) THEN 9963 IF (PRESENT(ierr) ) THEN 9964 CALL infomsg("qes_read:total_energyType","ewald: too many occurrences") 9965 ierr = ierr + 1 9966 ELSE 9967 CALL errore("qes_read:total_energyType","ewald: too many occurrences",10) 9968 END IF 9969 END IF 9970 ! 9971 IF (tmp_node_list_size>0) THEN 9972 obj%ewald_ispresent = .TRUE. 9973 tmp_node => item(tmp_node_list, 0) 9974 CALL extractDataContent(tmp_node, obj%ewald , IOSTAT = iostat_) 9975 IF ( iostat_ /= 0 ) THEN 9976 IF ( PRESENT (ierr ) ) THEN 9977 CALL infomsg("qes_read:total_energyType","error reading ewald") 9978 ierr = ierr + 1 9979 ELSE 9980 CALL errore ("qes_read:total_energyType","error reading ewald",10) 9981 END IF 9982 END IF 9983 ELSE 9984 obj%ewald_ispresent = .FALSE. 9985 END IF 9986 ! 9987 tmp_node_list => getElementsByTagname(xml_node, "demet") 9988 tmp_node_list_size = getLength(tmp_node_list) 9989 ! 9990 IF (tmp_node_list_size > 1) THEN 9991 IF (PRESENT(ierr) ) THEN 9992 CALL infomsg("qes_read:total_energyType","demet: too many occurrences") 9993 ierr = ierr + 1 9994 ELSE 9995 CALL errore("qes_read:total_energyType","demet: too many occurrences",10) 9996 END IF 9997 END IF 9998 ! 9999 IF (tmp_node_list_size>0) THEN 10000 obj%demet_ispresent = .TRUE. 10001 tmp_node => item(tmp_node_list, 0) 10002 CALL extractDataContent(tmp_node, obj%demet , IOSTAT = iostat_) 10003 IF ( iostat_ /= 0 ) THEN 10004 IF ( PRESENT (ierr ) ) THEN 10005 CALL infomsg("qes_read:total_energyType","error reading demet") 10006 ierr = ierr + 1 10007 ELSE 10008 CALL errore ("qes_read:total_energyType","error reading demet",10) 10009 END IF 10010 END IF 10011 ELSE 10012 obj%demet_ispresent = .FALSE. 10013 END IF 10014 ! 10015 tmp_node_list => getElementsByTagname(xml_node, "efieldcorr") 10016 tmp_node_list_size = getLength(tmp_node_list) 10017 ! 10018 IF (tmp_node_list_size > 1) THEN 10019 IF (PRESENT(ierr) ) THEN 10020 CALL infomsg("qes_read:total_energyType","efieldcorr: too many occurrences") 10021 ierr = ierr + 1 10022 ELSE 10023 CALL errore("qes_read:total_energyType","efieldcorr: too many occurrences",10) 10024 END IF 10025 END IF 10026 ! 10027 IF (tmp_node_list_size>0) THEN 10028 obj%efieldcorr_ispresent = .TRUE. 10029 tmp_node => item(tmp_node_list, 0) 10030 CALL extractDataContent(tmp_node, obj%efieldcorr , IOSTAT = iostat_) 10031 IF ( iostat_ /= 0 ) THEN 10032 IF ( PRESENT (ierr ) ) THEN 10033 CALL infomsg("qes_read:total_energyType","error reading efieldcorr") 10034 ierr = ierr + 1 10035 ELSE 10036 CALL errore ("qes_read:total_energyType","error reading efieldcorr",10) 10037 END IF 10038 END IF 10039 ELSE 10040 obj%efieldcorr_ispresent = .FALSE. 10041 END IF 10042 ! 10043 tmp_node_list => getElementsByTagname(xml_node, "potentiostat_contr") 10044 tmp_node_list_size = getLength(tmp_node_list) 10045 ! 10046 IF (tmp_node_list_size > 1) THEN 10047 IF (PRESENT(ierr) ) THEN 10048 CALL infomsg("qes_read:total_energyType","potentiostat_contr: too many occurrences") 10049 ierr = ierr + 1 10050 ELSE 10051 CALL errore("qes_read:total_energyType","potentiostat_contr: too many occurrences",10) 10052 END IF 10053 END IF 10054 ! 10055 IF (tmp_node_list_size>0) THEN 10056 obj%potentiostat_contr_ispresent = .TRUE. 10057 tmp_node => item(tmp_node_list, 0) 10058 CALL extractDataContent(tmp_node, obj%potentiostat_contr , IOSTAT = iostat_) 10059 IF ( iostat_ /= 0 ) THEN 10060 IF ( PRESENT (ierr ) ) THEN 10061 CALL infomsg("qes_read:total_energyType","error reading potentiostat_contr") 10062 ierr = ierr + 1 10063 ELSE 10064 CALL errore ("qes_read:total_energyType","error reading potentiostat_contr",10) 10065 END IF 10066 END IF 10067 ELSE 10068 obj%potentiostat_contr_ispresent = .FALSE. 10069 END IF 10070 ! 10071 tmp_node_list => getElementsByTagname(xml_node, "gatefield_contr") 10072 tmp_node_list_size = getLength(tmp_node_list) 10073 ! 10074 IF (tmp_node_list_size > 1) THEN 10075 IF (PRESENT(ierr) ) THEN 10076 CALL infomsg("qes_read:total_energyType","gatefield_contr: too many occurrences") 10077 ierr = ierr + 1 10078 ELSE 10079 CALL errore("qes_read:total_energyType","gatefield_contr: too many occurrences",10) 10080 END IF 10081 END IF 10082 ! 10083 IF (tmp_node_list_size>0) THEN 10084 obj%gatefield_contr_ispresent = .TRUE. 10085 tmp_node => item(tmp_node_list, 0) 10086 CALL extractDataContent(tmp_node, obj%gatefield_contr , IOSTAT = iostat_) 10087 IF ( iostat_ /= 0 ) THEN 10088 IF ( PRESENT (ierr ) ) THEN 10089 CALL infomsg("qes_read:total_energyType","error reading gatefield_contr") 10090 ierr = ierr + 1 10091 ELSE 10092 CALL errore ("qes_read:total_energyType","error reading gatefield_contr",10) 10093 END IF 10094 END IF 10095 ELSE 10096 obj%gatefield_contr_ispresent = .FALSE. 10097 END IF 10098 ! 10099 tmp_node_list => getElementsByTagname(xml_node, "vdW_term") 10100 tmp_node_list_size = getLength(tmp_node_list) 10101 ! 10102 IF (tmp_node_list_size > 1) THEN 10103 IF (PRESENT(ierr) ) THEN 10104 CALL infomsg("qes_read:total_energyType","vdW_term: too many occurrences") 10105 ierr = ierr + 1 10106 ELSE 10107 CALL errore("qes_read:total_energyType","vdW_term: too many occurrences",10) 10108 END IF 10109 END IF 10110 ! 10111 IF (tmp_node_list_size>0) THEN 10112 obj%vdW_term_ispresent = .TRUE. 10113 tmp_node => item(tmp_node_list, 0) 10114 CALL extractDataContent(tmp_node, obj%vdW_term , IOSTAT = iostat_) 10115 IF ( iostat_ /= 0 ) THEN 10116 IF ( PRESENT (ierr ) ) THEN 10117 CALL infomsg("qes_read:total_energyType","error reading vdW_term") 10118 ierr = ierr + 1 10119 ELSE 10120 CALL errore ("qes_read:total_energyType","error reading vdW_term",10) 10121 END IF 10122 END IF 10123 ELSE 10124 obj%vdW_term_ispresent = .FALSE. 10125 END IF 10126 ! 10127 ! 10128 obj%lwrite = .TRUE. 10129 ! 10130 END SUBROUTINE qes_read_total_energy 10131 ! 10132 ! 10133 SUBROUTINE qes_read_band_structure(xml_node, obj, ierr ) 10134 ! 10135 IMPLICIT NONE 10136 ! 10137 TYPE(Node), INTENT(IN), POINTER :: xml_node 10138 TYPE(band_structure_type), INTENT(OUT) :: obj 10139 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 10140 ! 10141 TYPE(Node), POINTER :: tmp_node 10142 TYPE(NodeList), POINTER :: tmp_node_list 10143 INTEGER :: tmp_node_list_size, index, iostat_ 10144 ! 10145 obj%tagname = getTagName(xml_node) 10146 ! 10147 10148 10149 10150 10151 ! 10152 tmp_node_list => getElementsByTagname(xml_node, "lsda") 10153 tmp_node_list_size = getLength(tmp_node_list) 10154 ! 10155 IF (tmp_node_list_size /= 1) THEN 10156 IF (PRESENT(ierr) ) THEN 10157 CALL infomsg("qes_read:band_structureType","lsda: wrong number of occurrences") 10158 ierr = ierr + 1 10159 ELSE 10160 CALL errore("qes_read:band_structureType","lsda: wrong number of occurrences",10) 10161 END IF 10162 END IF 10163 ! 10164 tmp_node => item(tmp_node_list, 0) 10165 IF (ASSOCIATED(tmp_node))& 10166 CALL extractDataContent(tmp_node, obj%lsda, IOSTAT = iostat_ ) 10167 IF ( iostat_ /= 0 ) THEN 10168 IF ( PRESENT (ierr ) ) THEN 10169 CALL infomsg("qes_read:band_structureType","error reading lsda") 10170 ierr = ierr + 1 10171 ELSE 10172 CALL errore ("qes_read:band_structureType","error reading lsda",10) 10173 END IF 10174 END IF 10175 ! 10176 tmp_node_list => getElementsByTagname(xml_node, "noncolin") 10177 tmp_node_list_size = getLength(tmp_node_list) 10178 ! 10179 IF (tmp_node_list_size /= 1) THEN 10180 IF (PRESENT(ierr) ) THEN 10181 CALL infomsg("qes_read:band_structureType","noncolin: wrong number of occurrences") 10182 ierr = ierr + 1 10183 ELSE 10184 CALL errore("qes_read:band_structureType","noncolin: wrong number of occurrences",10) 10185 END IF 10186 END IF 10187 ! 10188 tmp_node => item(tmp_node_list, 0) 10189 IF (ASSOCIATED(tmp_node))& 10190 CALL extractDataContent(tmp_node, obj%noncolin, IOSTAT = iostat_ ) 10191 IF ( iostat_ /= 0 ) THEN 10192 IF ( PRESENT (ierr ) ) THEN 10193 CALL infomsg("qes_read:band_structureType","error reading noncolin") 10194 ierr = ierr + 1 10195 ELSE 10196 CALL errore ("qes_read:band_structureType","error reading noncolin",10) 10197 END IF 10198 END IF 10199 ! 10200 tmp_node_list => getElementsByTagname(xml_node, "spinorbit") 10201 tmp_node_list_size = getLength(tmp_node_list) 10202 ! 10203 IF (tmp_node_list_size /= 1) THEN 10204 IF (PRESENT(ierr) ) THEN 10205 CALL infomsg("qes_read:band_structureType","spinorbit: wrong number of occurrences") 10206 ierr = ierr + 1 10207 ELSE 10208 CALL errore("qes_read:band_structureType","spinorbit: wrong number of occurrences",10) 10209 END IF 10210 END IF 10211 ! 10212 tmp_node => item(tmp_node_list, 0) 10213 IF (ASSOCIATED(tmp_node))& 10214 CALL extractDataContent(tmp_node, obj%spinorbit, IOSTAT = iostat_ ) 10215 IF ( iostat_ /= 0 ) THEN 10216 IF ( PRESENT (ierr ) ) THEN 10217 CALL infomsg("qes_read:band_structureType","error reading spinorbit") 10218 ierr = ierr + 1 10219 ELSE 10220 CALL errore ("qes_read:band_structureType","error reading spinorbit",10) 10221 END IF 10222 END IF 10223 ! 10224 tmp_node_list => getElementsByTagname(xml_node, "nbnd") 10225 tmp_node_list_size = getLength(tmp_node_list) 10226 ! 10227 IF (tmp_node_list_size > 1) THEN 10228 IF (PRESENT(ierr) ) THEN 10229 CALL infomsg("qes_read:band_structureType","nbnd: too many occurrences") 10230 ierr = ierr + 1 10231 ELSE 10232 CALL errore("qes_read:band_structureType","nbnd: too many occurrences",10) 10233 END IF 10234 END IF 10235 ! 10236 IF (tmp_node_list_size>0) THEN 10237 obj%nbnd_ispresent = .TRUE. 10238 tmp_node => item(tmp_node_list, 0) 10239 CALL extractDataContent(tmp_node, obj%nbnd , IOSTAT = iostat_) 10240 IF ( iostat_ /= 0 ) THEN 10241 IF ( PRESENT (ierr ) ) THEN 10242 CALL infomsg("qes_read:band_structureType","error reading nbnd") 10243 ierr = ierr + 1 10244 ELSE 10245 CALL errore ("qes_read:band_structureType","error reading nbnd",10) 10246 END IF 10247 END IF 10248 ELSE 10249 obj%nbnd_ispresent = .FALSE. 10250 END IF 10251 ! 10252 tmp_node_list => getElementsByTagname(xml_node, "nbnd_up") 10253 tmp_node_list_size = getLength(tmp_node_list) 10254 ! 10255 IF (tmp_node_list_size > 1) THEN 10256 IF (PRESENT(ierr) ) THEN 10257 CALL infomsg("qes_read:band_structureType","nbnd_up: too many occurrences") 10258 ierr = ierr + 1 10259 ELSE 10260 CALL errore("qes_read:band_structureType","nbnd_up: too many occurrences",10) 10261 END IF 10262 END IF 10263 ! 10264 IF (tmp_node_list_size>0) THEN 10265 obj%nbnd_up_ispresent = .TRUE. 10266 tmp_node => item(tmp_node_list, 0) 10267 CALL extractDataContent(tmp_node, obj%nbnd_up , IOSTAT = iostat_) 10268 IF ( iostat_ /= 0 ) THEN 10269 IF ( PRESENT (ierr ) ) THEN 10270 CALL infomsg("qes_read:band_structureType","error reading nbnd_up") 10271 ierr = ierr + 1 10272 ELSE 10273 CALL errore ("qes_read:band_structureType","error reading nbnd_up",10) 10274 END IF 10275 END IF 10276 ELSE 10277 obj%nbnd_up_ispresent = .FALSE. 10278 END IF 10279 ! 10280 tmp_node_list => getElementsByTagname(xml_node, "nbnd_dw") 10281 tmp_node_list_size = getLength(tmp_node_list) 10282 ! 10283 IF (tmp_node_list_size > 1) THEN 10284 IF (PRESENT(ierr) ) THEN 10285 CALL infomsg("qes_read:band_structureType","nbnd_dw: too many occurrences") 10286 ierr = ierr + 1 10287 ELSE 10288 CALL errore("qes_read:band_structureType","nbnd_dw: too many occurrences",10) 10289 END IF 10290 END IF 10291 ! 10292 IF (tmp_node_list_size>0) THEN 10293 obj%nbnd_dw_ispresent = .TRUE. 10294 tmp_node => item(tmp_node_list, 0) 10295 CALL extractDataContent(tmp_node, obj%nbnd_dw , IOSTAT = iostat_) 10296 IF ( iostat_ /= 0 ) THEN 10297 IF ( PRESENT (ierr ) ) THEN 10298 CALL infomsg("qes_read:band_structureType","error reading nbnd_dw") 10299 ierr = ierr + 1 10300 ELSE 10301 CALL errore ("qes_read:band_structureType","error reading nbnd_dw",10) 10302 END IF 10303 END IF 10304 ELSE 10305 obj%nbnd_dw_ispresent = .FALSE. 10306 END IF 10307 ! 10308 tmp_node_list => getElementsByTagname(xml_node, "nelec") 10309 tmp_node_list_size = getLength(tmp_node_list) 10310 ! 10311 IF (tmp_node_list_size /= 1) THEN 10312 IF (PRESENT(ierr) ) THEN 10313 CALL infomsg("qes_read:band_structureType","nelec: wrong number of occurrences") 10314 ierr = ierr + 1 10315 ELSE 10316 CALL errore("qes_read:band_structureType","nelec: wrong number of occurrences",10) 10317 END IF 10318 END IF 10319 ! 10320 tmp_node => item(tmp_node_list, 0) 10321 IF (ASSOCIATED(tmp_node))& 10322 CALL extractDataContent(tmp_node, obj%nelec, IOSTAT = iostat_ ) 10323 IF ( iostat_ /= 0 ) THEN 10324 IF ( PRESENT (ierr ) ) THEN 10325 CALL infomsg("qes_read:band_structureType","error reading nelec") 10326 ierr = ierr + 1 10327 ELSE 10328 CALL errore ("qes_read:band_structureType","error reading nelec",10) 10329 END IF 10330 END IF 10331 ! 10332 tmp_node_list => getElementsByTagname(xml_node, "num_of_atomic_wfc") 10333 tmp_node_list_size = getLength(tmp_node_list) 10334 ! 10335 IF (tmp_node_list_size > 1) THEN 10336 IF (PRESENT(ierr) ) THEN 10337 CALL infomsg("qes_read:band_structureType","num_of_atomic_wfc: too many occurrences") 10338 ierr = ierr + 1 10339 ELSE 10340 CALL errore("qes_read:band_structureType","num_of_atomic_wfc: too many occurrences",10) 10341 END IF 10342 END IF 10343 ! 10344 IF (tmp_node_list_size>0) THEN 10345 obj%num_of_atomic_wfc_ispresent = .TRUE. 10346 tmp_node => item(tmp_node_list, 0) 10347 CALL extractDataContent(tmp_node, obj%num_of_atomic_wfc , IOSTAT = iostat_) 10348 IF ( iostat_ /= 0 ) THEN 10349 IF ( PRESENT (ierr ) ) THEN 10350 CALL infomsg("qes_read:band_structureType","error reading num_of_atomic_wfc") 10351 ierr = ierr + 1 10352 ELSE 10353 CALL errore ("qes_read:band_structureType","error reading num_of_atomic_wfc",10) 10354 END IF 10355 END IF 10356 ELSE 10357 obj%num_of_atomic_wfc_ispresent = .FALSE. 10358 END IF 10359 ! 10360 tmp_node_list => getElementsByTagname(xml_node, "wf_collected") 10361 tmp_node_list_size = getLength(tmp_node_list) 10362 ! 10363 IF (tmp_node_list_size /= 1) THEN 10364 IF (PRESENT(ierr) ) THEN 10365 CALL infomsg("qes_read:band_structureType","wf_collected: wrong number of occurrences") 10366 ierr = ierr + 1 10367 ELSE 10368 CALL errore("qes_read:band_structureType","wf_collected: wrong number of occurrences",10) 10369 END IF 10370 END IF 10371 ! 10372 tmp_node => item(tmp_node_list, 0) 10373 IF (ASSOCIATED(tmp_node))& 10374 CALL extractDataContent(tmp_node, obj%wf_collected, IOSTAT = iostat_ ) 10375 IF ( iostat_ /= 0 ) THEN 10376 IF ( PRESENT (ierr ) ) THEN 10377 CALL infomsg("qes_read:band_structureType","error reading wf_collected") 10378 ierr = ierr + 1 10379 ELSE 10380 CALL errore ("qes_read:band_structureType","error reading wf_collected",10) 10381 END IF 10382 END IF 10383 ! 10384 tmp_node_list => getElementsByTagname(xml_node, "fermi_energy") 10385 tmp_node_list_size = getLength(tmp_node_list) 10386 ! 10387 IF (tmp_node_list_size > 1) THEN 10388 IF (PRESENT(ierr) ) THEN 10389 CALL infomsg("qes_read:band_structureType","fermi_energy: too many occurrences") 10390 ierr = ierr + 1 10391 ELSE 10392 CALL errore("qes_read:band_structureType","fermi_energy: too many occurrences",10) 10393 END IF 10394 END IF 10395 ! 10396 IF (tmp_node_list_size>0) THEN 10397 obj%fermi_energy_ispresent = .TRUE. 10398 tmp_node => item(tmp_node_list, 0) 10399 CALL extractDataContent(tmp_node, obj%fermi_energy , IOSTAT = iostat_) 10400 IF ( iostat_ /= 0 ) THEN 10401 IF ( PRESENT (ierr ) ) THEN 10402 CALL infomsg("qes_read:band_structureType","error reading fermi_energy") 10403 ierr = ierr + 1 10404 ELSE 10405 CALL errore ("qes_read:band_structureType","error reading fermi_energy",10) 10406 END IF 10407 END IF 10408 ELSE 10409 obj%fermi_energy_ispresent = .FALSE. 10410 END IF 10411 ! 10412 tmp_node_list => getElementsByTagname(xml_node, "highestOccupiedLevel") 10413 tmp_node_list_size = getLength(tmp_node_list) 10414 ! 10415 IF (tmp_node_list_size > 1) THEN 10416 IF (PRESENT(ierr) ) THEN 10417 CALL infomsg("qes_read:band_structureType","highestOccupiedLevel: too many occurrences") 10418 ierr = ierr + 1 10419 ELSE 10420 CALL errore("qes_read:band_structureType","highestOccupiedLevel: too many occurrences",10) 10421 END IF 10422 END IF 10423 ! 10424 IF (tmp_node_list_size>0) THEN 10425 obj%highestOccupiedLevel_ispresent = .TRUE. 10426 tmp_node => item(tmp_node_list, 0) 10427 CALL extractDataContent(tmp_node, obj%highestOccupiedLevel , IOSTAT = iostat_) 10428 IF ( iostat_ /= 0 ) THEN 10429 IF ( PRESENT (ierr ) ) THEN 10430 CALL infomsg("qes_read:band_structureType","error reading highestOccupiedLevel") 10431 ierr = ierr + 1 10432 ELSE 10433 CALL errore ("qes_read:band_structureType","error reading highestOccupiedLevel",10) 10434 END IF 10435 END IF 10436 ELSE 10437 obj%highestOccupiedLevel_ispresent = .FALSE. 10438 END IF 10439 ! 10440 tmp_node_list => getElementsByTagname(xml_node, "lowestUnoccupiedLevel") 10441 tmp_node_list_size = getLength(tmp_node_list) 10442 ! 10443 IF (tmp_node_list_size > 1) THEN 10444 IF (PRESENT(ierr) ) THEN 10445 CALL infomsg("qes_read:band_structureType","lowestUnoccupiedLevel: too many occurrences") 10446 ierr = ierr + 1 10447 ELSE 10448 CALL errore("qes_read:band_structureType","lowestUnoccupiedLevel: too many occurrences",10) 10449 END IF 10450 END IF 10451 ! 10452 IF (tmp_node_list_size>0) THEN 10453 obj%lowestUnoccupiedLevel_ispresent = .TRUE. 10454 tmp_node => item(tmp_node_list, 0) 10455 CALL extractDataContent(tmp_node, obj%lowestUnoccupiedLevel , IOSTAT = iostat_) 10456 IF ( iostat_ /= 0 ) THEN 10457 IF ( PRESENT (ierr ) ) THEN 10458 CALL infomsg("qes_read:band_structureType","error reading lowestUnoccupiedLevel") 10459 ierr = ierr + 1 10460 ELSE 10461 CALL errore ("qes_read:band_structureType","error reading lowestUnoccupiedLevel",10) 10462 END IF 10463 END IF 10464 ELSE 10465 obj%lowestUnoccupiedLevel_ispresent = .FALSE. 10466 END IF 10467 ! 10468 tmp_node_list => getElementsByTagname(xml_node, "two_fermi_energies") 10469 tmp_node_list_size = getLength(tmp_node_list) 10470 ! 10471 IF (tmp_node_list_size > 1) THEN 10472 IF (PRESENT(ierr) ) THEN 10473 CALL infomsg("qes_read:band_structureType","two_fermi_energies: too many occurrences") 10474 ierr = ierr + 1 10475 ELSE 10476 CALL errore("qes_read:band_structureType","two_fermi_energies: too many occurrences",10) 10477 END IF 10478 END IF 10479 ! 10480 IF (tmp_node_list_size>0) THEN 10481 obj%two_fermi_energies_ispresent = .TRUE. 10482 tmp_node => item(tmp_node_list, 0) 10483 CALL extractDataContent(tmp_node, obj%two_fermi_energies , IOSTAT = iostat_) 10484 IF ( iostat_ /= 0 ) THEN 10485 IF ( PRESENT (ierr ) ) THEN 10486 CALL infomsg("qes_read:band_structureType","error reading two_fermi_energies") 10487 ierr = ierr + 1 10488 ELSE 10489 CALL errore ("qes_read:band_structureType","error reading two_fermi_energies",10) 10490 END IF 10491 END IF 10492 ELSE 10493 obj%two_fermi_energies_ispresent = .FALSE. 10494 END IF 10495 ! 10496 tmp_node_list => getElementsByTagname(xml_node, "starting_k_points") 10497 tmp_node_list_size = getLength(tmp_node_list) 10498 ! 10499 IF (tmp_node_list_size /= 1) THEN 10500 IF (PRESENT(ierr) ) THEN 10501 CALL infomsg("qes_read:band_structureType","starting_k_points: wrong number of occurrences") 10502 ierr = ierr + 1 10503 ELSE 10504 CALL errore("qes_read:band_structureType","starting_k_points: wrong number of occurrences",10) 10505 END IF 10506 END IF 10507 ! 10508 tmp_node => item(tmp_node_list, 0) 10509 IF (ASSOCIATED(tmp_node))& 10510 CALL qes_read_k_points_IBZ(tmp_node, obj%starting_k_points, ierr ) 10511 ! 10512 tmp_node_list => getElementsByTagname(xml_node, "nks") 10513 tmp_node_list_size = getLength(tmp_node_list) 10514 ! 10515 IF (tmp_node_list_size /= 1) THEN 10516 IF (PRESENT(ierr) ) THEN 10517 CALL infomsg("qes_read:band_structureType","nks: wrong number of occurrences") 10518 ierr = ierr + 1 10519 ELSE 10520 CALL errore("qes_read:band_structureType","nks: wrong number of occurrences",10) 10521 END IF 10522 END IF 10523 ! 10524 tmp_node => item(tmp_node_list, 0) 10525 IF (ASSOCIATED(tmp_node))& 10526 CALL extractDataContent(tmp_node, obj%nks, IOSTAT = iostat_ ) 10527 IF ( iostat_ /= 0 ) THEN 10528 IF ( PRESENT (ierr ) ) THEN 10529 CALL infomsg("qes_read:band_structureType","error reading nks") 10530 ierr = ierr + 1 10531 ELSE 10532 CALL errore ("qes_read:band_structureType","error reading nks",10) 10533 END IF 10534 END IF 10535 ! 10536 tmp_node_list => getElementsByTagname(xml_node, "occupations_kind") 10537 tmp_node_list_size = getLength(tmp_node_list) 10538 ! 10539 IF (tmp_node_list_size /= 1) THEN 10540 IF (PRESENT(ierr) ) THEN 10541 CALL infomsg("qes_read:band_structureType","occupations_kind: wrong number of occurrences") 10542 ierr = ierr + 1 10543 ELSE 10544 CALL errore("qes_read:band_structureType","occupations_kind: wrong number of occurrences",10) 10545 END IF 10546 END IF 10547 ! 10548 tmp_node => item(tmp_node_list, 0) 10549 IF (ASSOCIATED(tmp_node))& 10550 CALL qes_read_occupations(tmp_node, obj%occupations_kind, ierr ) 10551 ! 10552 tmp_node_list => getElementsByTagname(xml_node, "smearing") 10553 tmp_node_list_size = getLength(tmp_node_list) 10554 ! 10555 IF (tmp_node_list_size > 1) THEN 10556 IF (PRESENT(ierr) ) THEN 10557 CALL infomsg("qes_read:band_structureType","smearing: too many occurrences") 10558 ierr = ierr + 1 10559 ELSE 10560 CALL errore("qes_read:band_structureType","smearing: too many occurrences",10) 10561 END IF 10562 END IF 10563 ! 10564 IF (tmp_node_list_size>0) THEN 10565 obj%smearing_ispresent = .TRUE. 10566 tmp_node => item(tmp_node_list, 0) 10567 CALL qes_read_smearing(tmp_node, obj%smearing, ierr ) 10568 ELSE 10569 obj%smearing_ispresent = .FALSE. 10570 END IF 10571 ! 10572 tmp_node_list => getElementsByTagname(xml_node, "ks_energies") 10573 tmp_node_list_size = getLength(tmp_node_list) 10574 ! 10575 IF (tmp_node_list_size < 1) THEN 10576 IF (PRESENT(ierr) ) THEN 10577 CALL infomsg("qes_read:band_structureType","ks_energies: not enough elements") 10578 ierr = ierr + 1 10579 ELSE 10580 CALL errore("qes_read:band_structureType","ks_energies: not enough elements",10) 10581 END IF 10582 END IF 10583 ! 10584 obj%ndim_ks_energies = tmp_node_list_size 10585 ALLOCATE(obj%ks_energies(tmp_node_list_size)) 10586 DO index=1,tmp_node_list_size 10587 tmp_node => item( tmp_node_list, index-1 ) 10588 CALL qes_read_ks_energies(tmp_node, obj%ks_energies(index), ierr ) 10589 END DO 10590 ! 10591 ! 10592 obj%lwrite = .TRUE. 10593 ! 10594 END SUBROUTINE qes_read_band_structure 10595 ! 10596 ! 10597 SUBROUTINE qes_read_ks_energies(xml_node, obj, ierr ) 10598 ! 10599 IMPLICIT NONE 10600 ! 10601 TYPE(Node), INTENT(IN), POINTER :: xml_node 10602 TYPE(ks_energies_type), INTENT(OUT) :: obj 10603 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 10604 ! 10605 TYPE(Node), POINTER :: tmp_node 10606 TYPE(NodeList), POINTER :: tmp_node_list 10607 INTEGER :: tmp_node_list_size, index, iostat_ 10608 ! 10609 obj%tagname = getTagName(xml_node) 10610 ! 10611 10612 10613 10614 10615 ! 10616 tmp_node_list => getElementsByTagname(xml_node, "k_point") 10617 tmp_node_list_size = getLength(tmp_node_list) 10618 ! 10619 IF (tmp_node_list_size /= 1) THEN 10620 IF (PRESENT(ierr) ) THEN 10621 CALL infomsg("qes_read:ks_energiesType","k_point: wrong number of occurrences") 10622 ierr = ierr + 1 10623 ELSE 10624 CALL errore("qes_read:ks_energiesType","k_point: wrong number of occurrences",10) 10625 END IF 10626 END IF 10627 ! 10628 tmp_node => item(tmp_node_list, 0) 10629 IF (ASSOCIATED(tmp_node))& 10630 CALL qes_read_k_point(tmp_node, obj%k_point, ierr ) 10631 ! 10632 tmp_node_list => getElementsByTagname(xml_node, "npw") 10633 tmp_node_list_size = getLength(tmp_node_list) 10634 ! 10635 IF (tmp_node_list_size /= 1) THEN 10636 IF (PRESENT(ierr) ) THEN 10637 CALL infomsg("qes_read:ks_energiesType","npw: wrong number of occurrences") 10638 ierr = ierr + 1 10639 ELSE 10640 CALL errore("qes_read:ks_energiesType","npw: wrong number of occurrences",10) 10641 END IF 10642 END IF 10643 ! 10644 tmp_node => item(tmp_node_list, 0) 10645 IF (ASSOCIATED(tmp_node))& 10646 CALL extractDataContent(tmp_node, obj%npw, IOSTAT = iostat_ ) 10647 IF ( iostat_ /= 0 ) THEN 10648 IF ( PRESENT (ierr ) ) THEN 10649 CALL infomsg("qes_read:ks_energiesType","error reading npw") 10650 ierr = ierr + 1 10651 ELSE 10652 CALL errore ("qes_read:ks_energiesType","error reading npw",10) 10653 END IF 10654 END IF 10655 ! 10656 tmp_node_list => getElementsByTagname(xml_node, "eigenvalues") 10657 tmp_node_list_size = getLength(tmp_node_list) 10658 ! 10659 IF (tmp_node_list_size /= 1) THEN 10660 IF (PRESENT(ierr) ) THEN 10661 CALL infomsg("qes_read:ks_energiesType","eigenvalues: wrong number of occurrences") 10662 ierr = ierr + 1 10663 ELSE 10664 CALL errore("qes_read:ks_energiesType","eigenvalues: wrong number of occurrences",10) 10665 END IF 10666 END IF 10667 ! 10668 tmp_node => item(tmp_node_list, 0) 10669 IF (ASSOCIATED(tmp_node))& 10670 CALL qes_read_vector(tmp_node, obj%eigenvalues, ierr ) 10671 ! 10672 tmp_node_list => getElementsByTagname(xml_node, "occupations") 10673 tmp_node_list_size = getLength(tmp_node_list) 10674 ! 10675 IF (tmp_node_list_size /= 1) THEN 10676 IF (PRESENT(ierr) ) THEN 10677 CALL infomsg("qes_read:ks_energiesType","occupations: wrong number of occurrences") 10678 ierr = ierr + 1 10679 ELSE 10680 CALL errore("qes_read:ks_energiesType","occupations: wrong number of occurrences",10) 10681 END IF 10682 END IF 10683 ! 10684 tmp_node => item(tmp_node_list, 0) 10685 IF (ASSOCIATED(tmp_node))& 10686 CALL qes_read_vector(tmp_node, obj%occupations, ierr ) 10687 ! 10688 ! 10689 obj%lwrite = .TRUE. 10690 ! 10691 END SUBROUTINE qes_read_ks_energies 10692 ! 10693 ! 10694 SUBROUTINE qes_read_closed(xml_node, obj, ierr ) 10695 ! 10696 IMPLICIT NONE 10697 ! 10698 TYPE(Node), INTENT(IN), POINTER :: xml_node 10699 TYPE(closed_type), INTENT(OUT) :: obj 10700 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 10701 ! 10702 TYPE(Node), POINTER :: tmp_node 10703 TYPE(NodeList), POINTER :: tmp_node_list 10704 INTEGER :: tmp_node_list_size, index, iostat_ 10705 ! 10706 obj%tagname = getTagName(xml_node) 10707 ! 10708 10709 IF (hasAttribute(xml_node, "DATE")) THEN 10710 CALL extractDataAttribute(xml_node, "DATE", obj%DATE) 10711 ELSE 10712 IF ( PRESENT(ierr) ) THEN 10713 CALL infomsg ( "qes_read: closedType",& 10714 "required attribute DATE not found" ) 10715 ierr = ierr + 1 10716 ELSE 10717 CALL errore ("qes_read: closedType",& 10718 "required attribute DATE not found", 10 ) 10719 END IF 10720 END IF 10721 ! 10722 IF (hasAttribute(xml_node, "TIME")) THEN 10723 CALL extractDataAttribute(xml_node, "TIME", obj%TIME) 10724 ELSE 10725 IF ( PRESENT(ierr) ) THEN 10726 CALL infomsg ( "qes_read: closedType",& 10727 "required attribute TIME not found" ) 10728 ierr = ierr + 1 10729 ELSE 10730 CALL errore ("qes_read: closedType",& 10731 "required attribute TIME not found", 10 ) 10732 END IF 10733 END IF 10734 ! 10735 10736 10737 10738 ! 10739 ! 10740 CALL extractDataContent(xml_node, obj%closed ) 10741 ! 10742 obj%lwrite = .TRUE. 10743 ! 10744 END SUBROUTINE qes_read_closed 10745 ! 10746 ! 10747 SUBROUTINE qes_read_vector(xml_node, obj, ierr ) 10748 ! 10749 IMPLICIT NONE 10750 ! 10751 TYPE(Node), INTENT(IN), POINTER :: xml_node 10752 TYPE(vector_type), INTENT(OUT) :: obj 10753 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 10754 ! 10755 TYPE(Node), POINTER :: tmp_node 10756 TYPE(NodeList), POINTER :: tmp_node_list 10757 INTEGER :: tmp_node_list_size, index, iostat_ 10758 ! 10759 obj%tagname = getTagName(xml_node) 10760 ! 10761 IF (hasAttribute(xml_node, "size")) THEN 10762 CALL extractDataAttribute(xml_node, "size", obj%size) 10763 ELSE 10764 CALL errore ("qes_read: vectorType", & 10765 "mandatory size attribute not found in "//TRIM(obj%tagname), 12) 10766 END IF 10767 ! 10768 10769 10770 10771 ! 10772 ! 10773 ALLOCATE (obj%vector(obj%size)) 10774 CALL extractDataContent(xml_node, obj%vector ) 10775 ! 10776 obj%lwrite = .TRUE. 10777 ! 10778 END SUBROUTINE qes_read_vector 10779 ! 10780 ! 10781 SUBROUTINE qes_read_integerVector(xml_node, obj, ierr ) 10782 ! 10783 IMPLICIT NONE 10784 ! 10785 TYPE(Node), INTENT(IN), POINTER :: xml_node 10786 TYPE(integerVector_type), INTENT(OUT) :: obj 10787 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 10788 ! 10789 TYPE(Node), POINTER :: tmp_node 10790 TYPE(NodeList), POINTER :: tmp_node_list 10791 INTEGER :: tmp_node_list_size, index, iostat_ 10792 ! 10793 obj%tagname = getTagName(xml_node) 10794 ! 10795 IF (hasAttribute(xml_node, "size")) THEN 10796 CALL extractDataAttribute(xml_node, "size", obj%size) 10797 ELSE 10798 CALL errore ("qes_read: integerVectorType", & 10799 "mandatory size attribute not found in "//TRIM(obj%tagname), 12) 10800 END IF 10801 ! 10802 10803 10804 10805 ! 10806 ! 10807 ALLOCATE (obj%integerVector(obj%size)) 10808 CALL extractDataContent(xml_node, obj%integerVector) 10809 ! 10810 obj%lwrite = .TRUE. 10811 ! 10812 END SUBROUTINE qes_read_integerVector 10813 ! 10814 ! 10815 SUBROUTINE qes_read_matrix(xml_node, obj, ierr ) 10816 ! 10817 IMPLICIT NONE 10818 ! 10819 TYPE(Node), INTENT(IN), POINTER :: xml_node 10820 TYPE(matrix_type), INTENT(OUT) :: obj 10821 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 10822 ! 10823 TYPE(Node), POINTER :: tmp_node 10824 TYPE(NodeList), POINTER :: tmp_node_list 10825 INTEGER :: tmp_node_list_size, index, iostat_ 10826 INTEGER :: i, length 10827 ! 10828 obj%tagname = getTagName(xml_node) 10829 ! 10830 IF (hasAttribute(xml_node, "rank")) THEN 10831 CALL extractDataAttribute(xml_node, "rank", obj%rank) 10832 ELSE 10833 CALL errore ("qes_read: matrixType",& 10834 "required attribute rank not found, can't read further, stopping", 10 ) 10835 END IF 10836 ALLOCATE (obj%dims(obj%rank)) 10837 IF (hasAttribute(xml_node, "dims")) THEN 10838 CALL extractDataAttribute(xml_node, "dims", obj%dims) 10839 ELSE 10840 CALL errore ("qes_read: matrixType",& 10841 "required attribute dims not found, can't read further, stopping", 10 ) 10842 END IF 10843 IF (hasAttribute(xml_node,"order")) THEN 10844 CALL extractDataAttribute(xml_node, "order", obj%order) 10845 ELSE 10846 obj%order = "F" 10847 END IF 10848 ! 10849 10850 10851 10852 ! 10853 ! 10854 length = 1 10855 DO i =1, obj%rank 10856 length = length * obj%dims(i) 10857 END DO 10858 ALLOCATE (obj%matrix(length) ) 10859 CALL extractDataContent(xml_node, obj%matrix ) 10860 ! 10861 obj%lwrite = .TRUE. 10862 ! 10863 END SUBROUTINE qes_read_matrix 10864 ! 10865 ! 10866 SUBROUTINE qes_read_integerMatrix(xml_node, obj, ierr ) 10867 ! 10868 IMPLICIT NONE 10869 ! 10870 TYPE(Node), INTENT(IN), POINTER :: xml_node 10871 TYPE(integerMatrix_type), INTENT(OUT) :: obj 10872 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 10873 ! 10874 TYPE(Node), POINTER :: tmp_node 10875 TYPE(NodeList), POINTER :: tmp_node_list 10876 INTEGER :: tmp_node_list_size, index, iostat_ 10877 INTEGER :: i, length 10878 ! 10879 obj%tagname = getTagName(xml_node) 10880 ! 10881 IF (hasAttribute(xml_node, "rank")) THEN 10882 CALL extractDataAttribute(xml_node, "rank", obj%rank) 10883 ELSE 10884 CALL errore ("qes_read: integerMatrixType",& 10885 "required attribute rank not found, can't read further, stopping", 10 ) 10886 END IF 10887 ALLOCATE (obj%dims(obj%rank)) 10888 IF (hasAttribute(xml_node, "dims")) THEN 10889 CALL extractDataAttribute(xml_node, "dims", obj%dims) 10890 ELSE 10891 CALL errore ("qes_read: integerMatrixType",& 10892 "required attribute dims not found, can't read further, stopping", 10 ) 10893 END IF 10894 IF (hasAttribute(xml_node,"order")) THEN 10895 CALL extractDataAttribute(xml_node, "order", obj%order) 10896 ELSE 10897 obj%order = "F" 10898 END IF 10899 ! 10900 10901 10902 10903 ! 10904 ! 10905 length = 1 10906 DO i = 1, obj%rank 10907 length = length * obj%dims(i) 10908 END DO 10909 ALLOCATE(obj%integerMatrix(length)) 10910 CALL extractDataContent(xml_node, obj%integerMatrix) 10911 ! 10912 obj%lwrite = .TRUE. 10913 ! 10914 END SUBROUTINE qes_read_integerMatrix 10915 ! 10916 ! 10917 SUBROUTINE qes_read_scalarQuantity(xml_node, obj, ierr ) 10918 ! 10919 IMPLICIT NONE 10920 ! 10921 TYPE(Node), INTENT(IN), POINTER :: xml_node 10922 TYPE(scalarQuantity_type), INTENT(OUT) :: obj 10923 INTEGER, OPTIONAL, INTENT(INOUT) :: ierr 10924 ! 10925 TYPE(Node), POINTER :: tmp_node 10926 TYPE(NodeList), POINTER :: tmp_node_list 10927 INTEGER :: tmp_node_list_size, index, iostat_ 10928 ! 10929 obj%tagname = getTagName(xml_node) 10930 ! 10931 10932 IF (hasAttribute(xml_node, "Units")) THEN 10933 CALL extractDataAttribute(xml_node, "Units", obj%Units) 10934 ELSE 10935 IF ( PRESENT(ierr) ) THEN 10936 CALL infomsg ( "qes_read: scalarQuantityType",& 10937 "required attribute Units not found" ) 10938 ierr = ierr + 1 10939 ELSE 10940 CALL errore ("qes_read: scalarQuantityType",& 10941 "required attribute Units not found", 10 ) 10942 END IF 10943 END IF 10944 ! 10945 10946 10947 10948 ! 10949 ! 10950 CALL extractDataContent(xml_node, obj%scalarQuantity ) 10951 ! 10952 obj%lwrite = .TRUE. 10953 ! 10954 END SUBROUTINE qes_read_scalarQuantity 10955 ! 10956 ! 10957END MODULE qes_read_module