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