Octopus
io_function.F90
Go to the documentation of this file.
1!! Copyright (C) 2002-2006 M. Marques, A. Castro, A. Rubio, G. Bertsch
2!!
3!! This program is free software; you can redistribute it and/or modify
4!! it under the terms of the GNU General Public License as published by
5!! the Free Software Foundation; either version 2, or (at your option)
6!! any later version.
7!!
8!! This program is distributed in the hope that it will be useful,
9!! but WITHOUT ANY WARRANTY; without even the implied warranty of
10!! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11!! GNU General Public License for more details.
12!!
13!! You should have received a copy of the GNU General Public License
14!! along with this program; if not, write to the Free Software
15!! Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
16!! 02110-1301, USA.
17!!
18
19#include "global.h"
20
23 use atom_oct_m
24 use box_oct_m
26 use comm_oct_m
28 use cube_oct_m
29 use debug_oct_m
31 use fft_oct_m
32 use global_oct_m
33 use index_oct_m
34 use io_oct_m
36 use io_csv_oct_m
39 use mesh_oct_m
42 use mpi_oct_m
45#if defined(HAVE_NETCDF)
46 use netcdf
47#endif
49 use parser_oct_m
51 use space_oct_m
53 use unit_oct_m
55 use utils_oct_m
57 use vtk_oct_m
58
59 implicit none
60
61 private
62 public :: &
78
79#if defined(HAVE_NETCDF)
80 public :: &
83#endif
84
86 integer, parameter, private :: &
87 DOUTPUT_KIND = 1, &
88 zoutput_kind = -1
89
91 character(len=3), parameter :: &
92 index2label(3) = (/ 're ', 'im ', 'abs' /)
93
94
97 end interface io_function_output_vector
98
101 end interface io_function_output_vector_bz
102
105 end interface io_function_output_global_bz
106
109 end interface io_function_output_supercell
110
111
112
113contains
115 ! ---------------------------------------------------------
116 subroutine io_function_read_what_how_when(namespace, space, what, how, output_interval, &
117 what_tag_in, how_tag_in, output_interval_tag_in, ignore_error)
118 type(namespace_t), intent(in) :: namespace
119 class(space_t), intent(in) :: space
120 logical, intent(inout) :: what(MAX_OUTPUT_TYPES)
121 integer(int64), intent(out) :: how(0:MAX_OUTPUT_TYPES)
122 integer, intent(out) :: output_interval(0:MAX_OUTPUT_TYPES)
123 character(len=*), optional, intent(in) :: what_tag_in
124 character(len=*), optional, intent(in) :: how_tag_in
125 character(len=*), optional, intent(in) :: output_interval_tag_in
126 logical, optional, intent(in) :: ignore_error
127
128 type(block_t) :: blk
129 integer :: ncols, nrows, iout, column_index, what_i
130 integer(int64) :: what_no_how(12)
131 character(len=80) :: what_tag
132 character(len=80) :: how_tag
133 character(len=80) :: output_interval_tag
134 character(len=80) :: output_column_marker
136
137 how = 0_8
138 output_interval = 0_8
139 ncols = 0
140 what_tag = optional_default(what_tag_in, 'Output')
141 how_tag = optional_default(how_tag_in, 'OutputFormat')
142 output_interval_tag = optional_default(output_interval_tag_in, 'OutputInterval')
143
144 call messages_obsolete_variable(namespace, 'OutputHow', 'OutputFormat')
145 call messages_obsolete_variable(namespace, 'Output_KPT', 'Output')
146 call messages_obsolete_variable(namespace, 'OutputLDA_U' , 'Output')
147 call messages_obsolete_variable(namespace, 'OutputEvery', 'OutputInterval/RestartWriteInterval')
148
149 !%Variable Output
150 !%Type block
151 !%Default none
152 !%Section Output
153 !%Description
154 !% Specifies what to print.
155 !% Each output must be in a separate row. Optionally individual output formats and output intervals can be defined
156 !% for each row or they can be read separately from <tt>OutputFormat</tt> and <tt>OutputInterval</tt> variables
157 !% in the input file.
158 !% The output files are written at the end of the run into the output directory for the
159 !% relevant kind of run (<i>e.g.</i> <tt>static</tt> for <tt>CalculationMode = gs</tt>).
160 !% Time-dependent simulations print only per iteration, including always the last. The frequency of output per iteration
161 !% (available for <tt>CalculationMode</tt> = <tt>gs</tt>, <tt>unocc</tt>, <tt>td</tt>, and <tt>opt_control</tt>)
162 !% is set by <tt>OutputInterval</tt> and the directory is set by <tt>OutputIterDir</tt>.
163 !% For linear-response run modes, the derivatives of many quantities can be printed, as listed in
164 !% the options below. Indices in the filename are labelled as follows:
165 !% <tt>sp</tt> = spin (or spinor component), <tt>k</tt> = <i>k</i>-point, <tt>st</tt> = state/band.
166 !% There is no tag for directions, given as a letter. The perturbation direction is always
167 !% the last direction for linear-response quantities, and a following +/- indicates the sign of the frequency.
168 !%
169 !% Example (minimal):
170 !% <br><br><tt>%Output
171 !% <br>&nbsp;&nbsp;density
172 !% <br>&nbsp;&nbsp;potential
173 !% <br>%<br></tt>
174 !%
175 !% Example (with OutputFormat):
176 !% <br><br><tt>%Output
177 !% <br>&nbsp;&nbsp;density | cube + axis_z
178 !% <br>&nbsp;&nbsp;potential | cube
179 !% <br>%<br></tt>
180 !%
181 !% Example (with OutputFormat, incomplete):
182 !% <br><br><tt>%Output
183 !% <br>&nbsp;&nbsp;density | cube + axis_z
184 !% <br>&nbsp;&nbsp;potential
185 !% <br>%<br></tt>
186 !%
187 !% Example (tagged):
188 !% <br><br><tt>%Output
189 !% <br>&nbsp;&nbsp;density | "output_format" | cube + axis_z | "output_interval" | 50
190 !% <br>&nbsp;&nbsp;potential | "output_format" | cube | "output_interval" | 20
191 !% <br>%<br></tt>
192 !%
193 !% Example (tagged, incomplete):
194 !% <br><br><tt>%Output
195 !% <br>&nbsp;&nbsp;density | "output_format" | cube + axis_z
196 !% <br>&nbsp;&nbsp;potential | "output_interval" | 20
197 !% <br>%<br></tt>
198 !% Missing information for the incomplete blocks will be parsed form the out-of-block
199 !% definitions. It is also possible to mix the order of columns in the tagged format.
200 !% See <tt>OutputFormat</tt>, and <tt>OutputInterval</tt>.
201 !%Option potential 1
202 !% Outputs Kohn-Sham potential, separated by parts. File names are <tt>v0</tt> for
203 !% the local part of the ionic potential, <tt>vc</tt> for the classical potential (if it exists),
204 !% <tt>vh</tt> for the Hartree potential, <tt>vks</tt> for the local part of the Kohn-Sham potential, and
205 !% <tt>vxc-</tt> for the exchange-correlation potentials. For <tt>vks</tt> and <tt>vxc</tt>,
206 !% a suffix for spin is added in the spin-polarized case.
207 !%Option density 2
208 !% Outputs density. The output file is called <tt>density-</tt>, or <tt>lr_density-</tt> in linear response.
209 !%Option wfs 3
210 !% Outputs wavefunctions. Which wavefunctions are to be printed is specified
211 !% by the variable <tt>OutputWfsNumber</tt> -- see below. The output file is called
212 !% <tt>wf-</tt>, or <tt>lr_wf-</tt> in linear response.
213 !%Option wfs_sqmod 4
214 !% Outputs modulus squared of the wavefunctions.
215 !% The output file is called <tt>sqm-wf-</tt>. For linear response, the filename is <tt>sqm_lr_wf-</tt>.
216 !%Option geometry 5
217 !% Outputs file containing the coordinates of the atoms treated within quantum mechanics.
218 !% If <tt>OutputFormat = xyz</tt>, the file is called <tt>geometry.xyz</tt>; a
219 !% file <tt>crystal.xyz</tt> is written with a supercell geometry if the system is periodic;
220 !% if point charges were defined in the PDB file (see <tt>PDBCoordinates</tt>), they will be output
221 !% in the file <tt>geometry_classical.xyz</tt>.
222 !% If <tt>OutputFormat = xcrysden</tt>, a file called <tt>geometry.xsf</tt> is written.
223 !%Option current 6
224 !% Outputs the total current density. The output file is called <tt>current-</tt>.
225 !% For linear response, the filename is <tt>lr_current-</tt>.
226 !%Option ELF 7
227 !% Outputs electron localization function (ELF). The output file is called <tt>elf-</tt>,
228 !% or <tt>lr_elf-</tt> in linear response, in which case the associated function D is also written,
229 !% as <tt>lr_elf_D-</tt>. Only in 2D and 3D.
230 !%Option ELF_basins 8
231 !% Outputs basins of attraction of the ELF. The output file is called
232 !% <tt>elf_rs_basins.info</tt>. Only in 2D and 3D.
233 !%Option Bader 9
234 !% Outputs Laplacian of the density which shows lone pairs, bonded charge concentrations
235 !% and regions subject to electrophilic or nucleophilic attack.
236 !% See RF Bader, <i>Atoms in Molecules: A Quantum Theory</i> (Oxford Univ. Press, Oxford, 1990).
237 !%Option el_pressure 10
238 !% Outputs electronic pressure. See Tao, Vignale, and Tokatly, <i>Phys Rev Lett</i> <b>100</b>, 206405 (2008).
239 !%Option matrix_elements 11
240 !% Outputs a series of matrix elements of the Kohn-Sham states. What is output can
241 !% be controlled by the <tt>OutputMatrixElements</tt> variable.
242 !%Option pol_density 12
243 !% Outputs dipole-moment density <tt>dipole_density-</tt>, or polarizability density <tt>alpha_density-</tt>
244 !% in linear response. If <tt>ResponseMethod = finite_differences</tt>, the hyperpolarizability density
245 !% <tt>beta_density-</tt> is also printed.
246 !%Option mesh_r 13
247 !% Outputs values of the coordinates over the grid. Files
248 !% will be called <tt>mesh_r-</tt> followed by the direction.
249 !%Option kinetic_energy_density 14
250 !% Outputs kinetic-energy density, defined as:
251 !%
252 !% <math>\tau_\sigma(\vec{r}) = \sum_{i=1}^{N_\sigma}
253 !% \left| \vec{\nabla} \phi_{i\sigma}(\vec{r}) \right|^2\,. </math>
254 !%
255 !% The index <math>\sigma</math> is the spin index for the spin-polarized case,
256 !% or if you are using spinors. For spin-unpolarized calculations, you
257 !% get the total kinetic-energy density. The previous expression assumes full
258 !% or null occupations. If fractional occupation numbers, each term in the sum
259 !% is weighted by the occupation. Also, if we are working with an infinite
260 !% system, all <i>k</i>-points are summed up, with their corresponding weights. The
261 !% files will be called <tt>tau-sp1</tt> and <tt>tau-sp2</tt>, if the spin-resolved kinetic
262 !% energy density is produced (runs in spin-polarized and spinors mode), or
263 !% only <tt>tau</tt> if the run is in spin-unpolarized mode.
264 !%Option dos 15
265 !% Outputs density of states. See <tt>DOSEnergyMax</tt>, <tt>DOSEnergyMin</tt>, <tt>DOSEnergyPoints</tt>,
266 !% and <tt>DOSGamma</tt>.
267 !%Option tpa 16
268 !% Outputs transition-potential approximation (TPA) matrix elements, using <math>\vec{q}</math>-vector specified
269 !% by <tt>MomentumTransfer</tt>.
270 !%Option forces 17
271 !% Outputs file <tt>forces.xsf</tt> containing structure and forces on the atoms as
272 !% a vector associated with each atom, which can be visualized with XCrySDen.
273 !%Option wfs_fourier 18
274 !% (Experimental) Outputs wavefunctions in Fourier space. This is
275 !% only implemented for the ETSF file format output. The file will
276 !% be called <tt>wfs-pw-etsf.nc</tt>.
277 !%Option xc_density 19
278 !% Outputs the XC density, which is the charge density that
279 !% generates the XC potential. (This is <math>-1/4\pi</math> times
280 !% the Laplacian of the XC potential). The files are called <tt>nxc</tt>.
281 !%Option PES_wfs 20
282 !% Outputs the photoelectron wavefunctions. The file name is <tt>pes_wfs-</tt>
283 !% plus the orbital number.
284 !%Option PES_density 21
285 !% Outputs the photolectron density. Output file is <tt>pes_dens-</tt> plus spin species if
286 !% spin-polarized calculation is performed.
287 !%Option PES 22
288 !% Outputs the time-dependent photoelectron spectrum.
289 !%Option BerkeleyGW 23
290 !% Output for a run with <a href=http://www.berkeleygw.org>BerkeleyGW</a>.
291 !% See <tt>Output::BerkeleyGW</tt> for further specification.
292 !%Option delta_perturbation 24
293 !% Outputs the "kick", or time-delta perturbation applied to compute optical response in real time.
294 !%Option external_td_potential 25
295 !% Outputs the (scalar) time-dependent potential.
296 !%Option mmb_wfs 26
297 !% Triggers the ModelMB wavefunctions to be output for each state.
298 !%Option mmb_den 27
299 !% Triggers the ModelMB density matrix to be output for each state, and the particles
300 !% specified by the <tt>DensitytoCalc</tt> block. Calculates, and outputs, the reduced density
301 !% matrix. For the moment the trace is made over the second dimension, and
302 !% the code is limited to 2D. The idea is to model <i>N</i> particles in 1D as an
303 !% <i>N</i>-dimensional non-interacting problem, then to trace out <i>N</i>-1 coordinates.
304 !%Option potential_gradient 28
305 !% Prints the gradient of the potential.
306 !%Option energy_density 29
307 !% Outputs the total energy density to a file called
308 !% <tt>energy_density</tt>.
309 !%Option heat_current 30
310 !% Outputs the total heat current density. The output file is
311 !% called <tt>heat_current-</tt>.
312 !%Option photon_correlator 31
313 !% Outputs the electron-photon correlation function. The output file is
314 !% called <tt>photon_correlator</tt>.
315 !%Option J_flow 32
316 !% todo: document J_flow option!
317 !%Option current_kpt 33
318 !% Outputs the current density resolved in momentum space. The output file is called <tt>current_kpt-</tt>.
319 !%Option density_kpt 34
320 !% Outputs the electronic density resolved in momentum space.
321 !%Option occ_matrices 35
322 !% Only for DFT+U calculations.
323 !% Outputs the occupation matrices of DFT+U
324 !%Option effectiveU 36
325 !% Only for DFT+U calculations.
326 !% Outputs the value of the effectiveU for each atoms
327 !%Option magnetization 37
328 !% Only for DFT+U calculations.
329 !% Outputs file containing structure and magnetization of the localized subspace
330 !% on the atoms as a vector associated with each atom, which can be visualized.
331 !% For the moment, it only works if a +U is added on one type of orbital per atom.
332 !%Option local_orbitals 38
333 !% Only for DFT+U calculations.
334 !% Outputs the localized orbitals that form the correlated subspace
335 !%Option kanamoriU 39
336 !% Only for DFT+U calculations.
337 !% Outputs the Kanamori interaction parameters U, U`, and J.
338 !% These parameters are not determined self-consistently, but are taken from the
339 !% occupation matrices and Coulomb integrals comming from a standard +U calculation.
340 !%Option xc_torque 40
341 !% Outputs the exchange-correlation torque. Only for the spinor case and in the 3D case.
342 !%Option eigenval_kpt 41
343 !% Outputs the eigenvalues resolved in momentum space, with one file for each band.
344 !%Option stress 42
345 !% Outputs the stress tensor and each of its contributing terms
346 !%Option current_dia 43
347 !% Outputs the diamagnetic current density from a non-uniform vector potential.
348 !% The output file is called <tt>current_dia-</tt>.
349 !%Option jdos 44
350 !% Outputs the joint density of states.
351 !% The same variables as for the regular DOS are used to control the energies and broadening.
352 !%Option ldos 45
353 !% Outputs the local density of states
354 !% The broadening uses the same value as the regular DOS. The energies at which the LDOS is computed are
355 !% specified by the <tt>LDOSEnergies</tt> block.
356 !%End
357
358 !%Variable OutputFormat
359 !%Type flag
360 !%Default 0
361 !%Section Output
362 !%Description
363 !% Describes the format of the output files.
364 !% This variable can also be defined inside the <tt>Output</tt> block.
365 !% See <tt>Output</tt>.
366 !% Example: <tt>axis_x + plane_x + dx</tt>
367 !%Option axis_x bit(0)
368 !% The values of the function on the <i>x</i> axis are printed. The string <tt>.y=0,z=0</tt> is appended
369 !% to previous file names.
370 !%Option axis_y bit(1)
371 !% The values of the function on the <i>y</i> axis are printed. The string <tt>.x=0,z=0</tt> is appended
372 !% to previous file names.
373 !%Option axis_z bit(2)
374 !% The values of the function on the <i>z</i> axis are printed. The string <tt>.x=0,y=0</tt> is appended
375 !% to previous file names.
376 !%Option plane_x bit(3)
377 !% A plane slice at <i>x</i> = 0 is printed. The string <tt>.x=0</tt> is appended
378 !% to previous file names.
379 !%Option plane_y bit(4)
380 !% A plane slice at <i>y</i> = 0 is printed. The string <tt>.y=0</tt> is appended
381 !% to previous file names.
382 !%Option plane_z bit(5)
383 !% A plane slice at <i>z</i> = 0 is printed. The string <tt>.z=0</tt> is appended to
384 !% previous file names.
385 !%Option dx bit(6)
386 !% For printing three-dimensional information, the open-source program
387 !% visualization tool <a href=http://www.opendx.org>OpenDX</a> can be used. The string
388 !% <tt>.dx</tt> is appended to previous file names. Available only in 3D.
389 !%Option netcdf bit(7)
390 !% Outputs in <a href=http://www.unidata.ucar.edu/packages/netcdf>NetCDF</a> format. This file
391 !% can then be read, for example, by OpenDX. The string <tt>.ncdf</tt> is appended to previous file names.
392 !% Requires the NetCDF library. Only writes the real part of complex functions.
393 !%Option mesh_index bit(8)
394 !% Generates output files of a given quantity (density, wavefunctions, ...) which include
395 !% the internal numbering of mesh points. Since this mode produces large datafiles this is only
396 !% useful for small meshes and debugging purposes.
397 !% The output can also be used to display the mesh directly. A Gnuplot script for mesh visualization
398 !% can be found under <tt>PREFIX/share/octopus/util/display_mesh_index.gp</tt>.
399 !%Option xcrysden bit(9)
400 !% A format for printing structures and three-dimensional information, which can be visualized by
401 !% the free open-source program <a href=http://www.xcrysden.org>XCrySDen</a> and others. The string
402 !% <tt>.xsf</tt> is appended to previous file names. Note that lattice vectors and coordinates are as
403 !% specified by <tt>UnitsOutput</tt>. Available in 2D and 3D.
404 !%Option matlab bit(10)
405 !% In combination with <tt>plane_x</tt>, <tt>plane_y</tt> and
406 !% <tt>plane_z</tt>, this option produces output files which are
407 !% suitable for 2D Matlab functions like <tt>mesh()</tt>,
408 !% <tt>surf()</tt>, or <tt>waterfall()</tt>. To load these files
409 !% into Matlab you can use, <i>e.g.</i>
410 !%<tt>
411 !% >> density = load('static/density-1.x=0.matlab.abs');
412 !% >> mesh(density);
413 !%</tt>
414 !%Option meshgrid bit(11)
415 !% Outputs in Matlab mode the internal mesh in a format similar to
416 !%<tt>
417 !% >> [x,y] = meshgrid(-2:.2:2,-1:.15:1)
418 !%</tt>
419 !% The <i>x</i> meshgrid is contained in a file <tt>*.meshgrid.x</tt> and the <i>y</i>-grid can be found in
420 !% <tt>*.meshgrid.y</tt>.
421 !%Option boundary_points bit(12)
422 !% This option includes the output of the mesh enlargement. Default is without.
423 !% Supported only by <tt>binary</tt>, <tt>axis</tt>, <tt>plane</tt>, <tt>mesh_index</tt>,
424 !% and <tt>matlab</tt> formats.
425 !% Not all types of <tt>Output</tt> will have this information available. Not supported when parallel in domains.
426 !%Option binary bit(13)
427 !% Plain binary, new format.
428 !%Option etsf bit(14)
429 !% <a href=http://www.etsf.eu/resources/software/standardization_project>ETSF file format</a>.
430 !% Requires the ETSF_IO library. Applies only to <tt>Output = density</tt>, <tt>geometry</tt>,
431 !% <tt>wfs</tt>, and/or <tt>wfs_fourier</tt>.
432 !%Option xyz bit(15)
433 !% Geometry will be output in XYZ format. Does not affect other outputs.
434 !%Option cube bit(16)
435 !% Generates output in the <a href=http://paulbourke.net/dataformats/cube>cube file format</a>.
436 !% Available only in 3D. Only writes the real part of complex functions.
437 !% This output format always uses atomic units.
438 !%Option bild bit(19)
439 !% Generates output in <a href=http://plato.cgl.ucsf.edu/chimera/docs/UsersGuide/bild.html>BILD format</a>.
440 !%Option vtk bit(20)
441 !% Generates output in <a href=http://www.vtk.org/VTK/img/file-formats.pdf>VTK legacy format</a>.
442 !%Option integrate_xy bit(21)
443 !% Integrates the function in the x-y plane and the result on the <i>z</i> axis is printed.
444 !%Option integrate_xz bit(22)
445 !% Integrates the function in the x-z plane and the result on the <i>y</i> axis is printed
446 !%Option integrate_yz bit(23)
447 !% Integrates the function in the y-z plane and the result on the <i>x</i> axis is printed
448 !%Option ascii bit(24)
449 !% Plain text format regardless of dimensionality. For the moment only employed by the oct-phototoelectron_spectrum
450 !% post-processing utility.
451 !%End
452
453 !%Variable OutputInterval
454 !%Type integer
455 !%Default 50
456 !%Section Output
457 !%Description
458 !% The output requested by variable <tt>Output</tt> is written
459 !% to the directory <tt>OutputIterDir</tt>
460 !% when the iteration number is a multiple of the <tt>OutputInterval</tt> variable.
461 !% Subdirectories are named Y.X, where Y is <tt>td</tt>, <tt>scf</tt>, or <tt>unocc</tt>, and
462 !% X is the iteration number. To use the working directory, specify <tt>"."</tt>
463 !% (Output of restart files is instead controlled by <tt>RestartWriteInterval</tt>.)
464 !% Must be >= 0. If it is 0, then no output is written. For <tt>gs</tt> and <tt>unocc</tt>
465 !% calculations, <tt>OutputDuringSCF</tt> must be set too for this output to be produced.
466 !% This variable can also be defined inside the <tt>Output</tt> block.
467 !% See <tt>Output</tt>.
468 !%End
469
470
471 what_no_how = (/ option__output__matrix_elements, option__output__berkeleygw, option__output__dos, &
472 option__output__tpa, option__output__mmb_den, option__output__j_flow, option__output__occ_matrices, &
473 option__output__effectiveu, option__output__magnetization, option__output__kanamoriu, option__output__stress, option__output__jdos /)
474
475 if (parse_block(namespace, what_tag, blk) == 0) then
476 nrows = parse_block_n(blk)
477 do iout = 0, nrows - 1
478 ncols = max(ncols , parse_block_cols(blk, iout))
479 end do
480
481 if (ncols == 1) then
482 !new format, Type 0
483 !%Output
484 ! density
485 ! wfs
486 !%
487 do iout = 1, nrows
488 call parse_block_integer(blk, iout - 1, 0, what_i)
489 if (.not. varinfo_valid_option(what_tag, what_i)) then
490 call messages_input_error(namespace, what_tag)
491 end if
492 if (what_i > 0) then
493 what(what_i) = .true.
494 call parse_variable(namespace, output_interval_tag, 50, output_interval(what_i))
495 if (((what_tag == 'Output') .and. (.not. any(what_no_how == what_i)))&
496 .or. (what_tag /= 'Output')) then
497 call parse_variable(namespace, how_tag, 0, how(what_i))
498 if (.not. varinfo_valid_option(how_tag, how(what_i), is_flag=.true.)) then
499 call messages_input_error(namespace, how_tag)
500 end if
501 end if
502 end if
503 end do
504 else if (ncols == 2) then
505 !new format, Type 1
506 !%Output
507 ! density | cube + axis_z
508 ! wfs | cube
509 !%
510
511 do iout = 1, nrows
512 call parse_block_integer(blk, iout - 1, 0, what_i)
513 if (.not. varinfo_valid_option(what_tag, what_i)) then
514 call messages_input_error(namespace, what_tag)
515 end if
516 if (what_i > 0) then
517 what(what_i) = .true.
518 call parse_variable(namespace, output_interval_tag, 50, output_interval(what_i))
519 if (((what_tag == 'Output') .and. (.not. any(what_no_how == what_i)))&
520 .or. (what_tag /= 'Output')) then
521 call parse_block_integer(blk, iout - 1, 1, how(what_i))
522 if (how(what_i) == 0) call parse_variable(namespace, how_tag, 0, how(what_i))
523 if (.not. varinfo_valid_option(how_tag, how(what_i), is_flag=.true.)) then
524 call messages_input_error(namespace, how_tag)
525 end if
526 end if
527 end if
528 end do
529
530 else
531 !new format, Type 2 (tagged)
532 !%Output
533 ! density | "output_interval" | 10 | "output_format" | cube + axis_z
534 ! wfs | "output_format" | cube | "output_interval" | 50
535 !%
536 !
537 ! OR
538 !
539 !%Output
540 ! density | "output_interval" | 10 | "output_format" | cube + axis_z
541 ! wfs | "output_format" | cube
542 !%
543 do iout = 1, nrows
544 call parse_block_integer(blk, iout - 1, 0, what_i)
545 if (.not. varinfo_valid_option(what_tag, what_i)) then
546 call messages_input_error(namespace, what_tag)
547 end if
548 if (what_i > 0) then
549 what(what_i) = .true.
550 do column_index = 0, 1
551 call parse_block_string(blk, iout - 1, 1 + column_index * 2, output_column_marker)
552 if (output_column_marker == 'output_interval') then
553 call parse_block_integer(blk, iout - 1, 2 + column_index * 2, output_interval(what_i))
554 else if (output_column_marker == 'output_format') then
555 if (((what_tag == 'Output') .and. (.not. any(what_no_how == what_i)))&
556 .or. (what_tag /= 'Output')) then
557 call parse_block_integer(blk, iout - 1, 2 + column_index * 2, how(what_i))
558 if (.not. varinfo_valid_option(how_tag, how(what_i), is_flag=.true.)) then
559 call messages_input_error(namespace, how_tag)
560 end if
561 end if
562 else if (len_trim(output_column_marker) /= 0) then
563 ! Unknown output_column_marker
564 call messages_input_error(namespace, what_tag)
565 else
566 ! no output_column_marker -> full output info is not in this block
567 if (output_interval(what_i) == 0) then
568 call parse_variable(namespace, output_interval_tag, 50, output_interval(what_i))
569 end if
570 if (how(what_i) == 0) then
571 if (((what_tag == 'Output') .and. (.not. any(what_no_how == what_i)))&
572 .or. (what_tag /= 'Output')) then
573 call parse_variable(namespace, how_tag, 0, how(what_i))
574 if (.not. varinfo_valid_option(how_tag, how(what_i), is_flag=.true.)) then
575 call messages_input_error(namespace, how_tag)
576 end if
577 end if
578 end if
579 end if
580 end do
581 end if
582 end do
583 end if
584 call parse_block_end(blk)
585 else
586
587 call messages_variable_is_block(namespace, what_tag)
588
589 ! Output block does not exist but we may have OutputHow/OutputInterval
590 call parse_variable(namespace, how_tag, 0, how(0))
591 call parse_variable(namespace, output_interval_tag, 50, output_interval(0))
592 end if
593
594
595 do what_i = lbound(what, 1), ubound(what, 1)
596 if (what_tag == 'Output') then
597 if (what(what_i) .and. (.not. any(what_no_how == what_i))) then
598 if (.not. varinfo_valid_option(how_tag, how(what_i), is_flag=.true.)) then
599 call messages_input_error(namespace, how_tag)
600 end if
601
602 if (how(what_i) == 0 .and. .not. optional_default(ignore_error, .false.)) then
603 write(message(1), '(a)') 'Must specify output method with variable OutputFormat.'
604 call messages_fatal(1, only_root_writes = .true., namespace=namespace)
605 end if
606
607 ! some modes are not available in some circumstances
608 if (space%dim == 1) then
609 if (bitand(how(what_i), option__outputformat__axis_y) /= 0) then
610 message(1) = "OutputFormat = axis_y not available with Dimensions = 1."
611 call messages_fatal(1, namespace=namespace)
612 end if
613 if (bitand(how(what_i), option__outputformat__plane_z) /= 0) then
614 message(1) = "OutputFormat = plane_z not available with Dimensions = 1."
615 call messages_fatal(1, namespace=namespace)
616 end if
617 if (bitand(how(what_i), option__outputformat__xcrysden) /= 0) then
618 message(1) = "OutputFormat = xcrysden not available with Dimensions = 1."
619 call messages_fatal(1, namespace=namespace)
620 end if
621 end if
622
623 if (space%dim <= 2) then
624 if (bitand(how(what_i), option__outputformat__axis_z) /= 0) then
625 message(1) = "OutputFormat = axis_z not available with Dimensions <= 2."
626 call messages_fatal(1, namespace=namespace)
627 end if
628 if (bitand(how(what_i), option__outputformat__plane_x) /= 0) then
629 message(1) = "OutputFormat = plane_x not available with Dimensions <= 2."
630 call messages_fatal(1, namespace=namespace)
631 end if
632 if (bitand(how(what_i), option__outputformat__plane_y) /= 0) then
633 message(1) = "OutputFormat = plane_y not available with Dimensions <= 2."
634 call messages_fatal(1, namespace=namespace)
635 end if
636 if (bitand(how(what_i), option__outputformat__integrate_xy) /= 0) then
637 message(1) = "OutputFormat = integrate_xy not available with Dimensions <= 2."
638 call messages_fatal(1, namespace=namespace)
639 end if
640 if (bitand(how(what_i), option__outputformat__integrate_xz) /= 0) then
641 message(1) = "OutputFormat = integrate_xz not available with Dimensions <= 2."
642 call messages_fatal(1, namespace=namespace)
643 end if
644 if (bitand(how(what_i), option__outputformat__integrate_yz) /= 0) then
645 message(1) = "OutputFormat = integrate_yz not available with Dimensions <= 2."
646 call messages_fatal(1, namespace=namespace)
647 end if
648 if (bitand(how(what_i), option__outputformat__dx) /= 0) then
649 message(1) = "OutputFormat = dx not available with Dimensions <= 2."
650 call messages_fatal(1, namespace=namespace)
651 end if
652 if (bitand(how(what_i), option__outputformat__cube) /= 0) then
653 message(1) = "OutputFormat = cube not available with Dimensions <= 2."
654 call messages_fatal(1, namespace=namespace)
655 end if
656 end if
657
658#if !defined(HAVE_NETCDF)
659 if (bitand(how(what_i), option__outputformat__netcdf) /= 0) then
660 message(1) = 'Octopus was compiled without NetCDF support.'
661 message(2) = 'It is not possible to write output in NetCDF format.'
662 call messages_fatal(2, namespace=namespace)
663 end if
664#endif
665#if !defined(HAVE_ETSF_IO)
666 if (bitand(how(what_i), option__outputformat__etsf) /= 0) then
667 message(1) = 'Octopus was compiled without ETSF_IO support.'
668 message(2) = 'It is not possible to write output in ETSF format.'
669 call messages_fatal(2, namespace=namespace)
670 end if
671#endif
672
673
674 end if
675 end if
676
677 if (output_interval(what_i) < 0) then
678 message(1) = "OutputInterval must be >= 0."
679 call messages_fatal(1, namespace=namespace)
680 end if
681 end do
682
684 end subroutine io_function_read_what_how_when
685
686 ! -------------------------------------------------------------------
689 ! ".", "func", mesh, sb, func, M_ONE, ierr)
690 ! -------------------------------------------------------------------
691 integer(int64) function io_function_fill_how(where) result(how)
692 character(len=*), intent(in) :: where
693
694 push_sub(io_function_fill_how)
695
696 how = 0
697 if (index(where, "AxisX") /= 0) how = ior(how, option__outputformat__axis_x)
698 if (index(where, "AxisY") /= 0) how = ior(how, option__outputformat__axis_y)
699 if (index(where, "AxisZ") /= 0) how = ior(how, option__outputformat__axis_z)
700 if (index(where, "PlaneX") /= 0) how = ior(how, option__outputformat__plane_x)
701 if (index(where, "PlaneY") /= 0) how = ior(how, option__outputformat__plane_y)
702 if (index(where, "PlaneZ") /= 0) how = ior(how, option__outputformat__plane_z)
703 if (index(where, "IntegrateXY") /= 0) how = ior(how, option__outputformat__integrate_xy)
704 if (index(where, "IntegrateXZ") /= 0) how = ior(how, option__outputformat__integrate_xz)
705 if (index(where, "IntegrateYZ") /= 0) how = ior(how, option__outputformat__integrate_yz)
706 if (index(where, "PlaneZ") /= 0) how = ior(how, option__outputformat__plane_z)
707 if (index(where, "DX") /= 0) how = ior(how, option__outputformat__dx)
708 if (index(where, "XCrySDen") /= 0) how = ior(how, option__outputformat__xcrysden)
709 if (index(where, "Binary") /= 0) how = ior(how, option__outputformat__binary)
710 if (index(where, "MeshIndex") /= 0) how = ior(how, option__outputformat__mesh_index)
711 if (index(where, "XYZ") /= 0) how = ior(how, option__outputformat__xyz)
712#if defined(HAVE_NETCDF)
713 if (index(where, "NETCDF") /= 0) how = ior(how, option__outputformat__netcdf)
714#endif
715 if (index(where, "Cube") /= 0) how = ior(how, option__outputformat__cube)
716 if (index(where, "VTK") /= 0) how = ior(how, option__outputformat__vtk)
717
718 pop_sub(io_function_fill_how)
719 end function io_function_fill_how
720
721 ! ---------------------------------------------------------
726 subroutine write_canonicalized_xyz_file(dir, fname, space, latt, pos, atoms, box, namespace)
727 character(len=*), intent(in) :: dir
728 character(len=*), intent(in) :: fname
729 class(space_t), intent(in) :: space
730 type(lattice_vectors_t), intent(in) :: latt
731 real(real64), intent(in) :: pos(:,:)
732 type(atom_t), intent(in) :: atoms(:)
733 class(box_t), intent(in) :: box
734 type(namespace_t), intent(in) :: namespace
735
736 integer :: iunit
737 integer :: idir
738 real(real64) :: position
739 integer :: iatom
740
742
743 call io_mkdir(dir, namespace)
744 iunit = io_open(trim(dir)//'/'//trim(fname)//'.xyz', namespace, action='write', position='asis')
745
746 write(iunit, '(i6)') size(atoms)
747 write(iunit, '(a,a,a)', advance='no') trim(space%short_info()), '; ', trim(box%short_info(unit_angstrom))
748 if (space%is_periodic()) then
749 write(iunit, '(a,a)') '; ', trim(latt%short_info(unit_angstrom))
750 else
751 write(iunit, '()')
752 end if
753
754 ! xyz-style labels and positions:
755 do iatom = 1, size(atoms)
756 write(iunit, '(10a)', advance='no') atoms(iatom)%label
757 do idir = 1, 3
758 if (idir <= space%dim) then
759 position = pos(idir, iatom)
760 else
761 position = m_zero
762 end if
763 write(iunit, '(1x, f11.6)', advance='no') units_from_atomic(unit_angstrom, position)
764 end do
765 write(iunit, '()')
766 end do
767
768 call io_close(iunit)
769
771 end subroutine write_canonicalized_xyz_file
772
773 ! ---------------------------------------------------------
774 subroutine write_xsf_geometry_file(dir, fname, space, latt, pos, atoms, mesh, namespace, total_forces)
775 character(len=*), intent(in) :: dir, fname
776 class(space_t), intent(in) :: space
777 type(lattice_vectors_t), intent(in) :: latt
778 real(real64), intent(in) :: pos(:,:)
779 type(atom_t), intent(in) :: atoms(:)
780 class(mesh_t), intent(in) :: mesh
781 type(namespace_t), intent(in) :: namespace
782 real(real64), optional, intent(in) :: total_forces(:,:)
783
784 integer :: iunit
785 real(real64), allocatable :: forces(:,:)
786
787 if (.not. mpi_grp_is_root(mpi_world)) return
788
790
791 call io_mkdir(dir, namespace)
792 iunit = io_open(trim(dir)//'/'//trim(fname)//'.xsf', namespace, action='write', position='asis')
793
794 if (present(total_forces)) then
795 safe_allocate(forces(1:space%dim, 1:size(atoms)))
796 forces = units_from_atomic(units_out%force, total_forces)
797 call write_xsf_geometry(iunit, space, latt, pos, atoms, mesh, forces = forces)
798 safe_deallocate_a(forces)
799 else
800 call write_xsf_geometry(iunit, space, latt, pos, atoms, mesh)
801 end if
802
803 call io_close(iunit)
804
806 end subroutine write_xsf_geometry_file
807
808 ! ---------------------------------------------------------
811 subroutine write_xsf_geometry(iunit, space, latt, pos, atoms, mesh, forces, index)
812 integer, intent(in) :: iunit
813 class(space_t), intent(in) :: space
814 type(lattice_vectors_t), intent(in) :: latt
815 real(real64), intent(in) :: pos(:,:)
816 type(atom_t), intent(in) :: atoms(:)
817 class(mesh_t), intent(in) :: mesh
818 real(real64), optional, intent(in) :: forces(:, :)
819 integer, optional, intent(in) :: index
820
821 integer :: idir, idir2, iatom, index_, natoms
822 character(len=7) :: index_str
823 real(real64) :: offset(space%dim)
824 real(real64) :: rlattice(space%dim, space%dim)
825
826 push_sub(write_xsf_geometry)
827
828 if (present(index)) then
829 write(index_str, '(a,i6)') ' ', index
830 index_ = index
831 else
832 write(index_str, '(a)') ''
833 index_ = 1
834 end if
835 natoms = size(pos, dim=2)
836
837 ! The corner of the cell is always (0,0,0) to XCrySDen
838 ! so the offset is applied to the atomic coordinates.
839 ! Along periodic dimensions the offset is -1/2 in reduced coordinates, as
840 ! our origin is at the center of the cell instead of being at the edge.
841 offset(1:space%dim) = latt%red_to_cart(spread(-m_half, 1, space%dim))
842 ! Offset in aperiodic directions:
843 do idir = space%periodic_dim + 1, space%dim
844 offset(idir) = -(mesh%idx%ll(idir) - 1)/2 * mesh%spacing(idir)
845 end do
846
847 if (space%is_periodic()) then
848 if (index_ == 1) then
849 select case (space%periodic_dim)
850 case (3)
851 write(iunit, '(a)') 'CRYSTAL'
852 case (2)
853 write(iunit, '(a)') 'SLAB'
854 case (1)
855 write(iunit, '(a)') 'POLYMER'
856 end select
857 end if
858
859 write(iunit, '(a)') 'PRIMVEC'//trim(index_str)
860
861 !Computes the rlattice corresponding to the 3D periodic version of the simulation box
862 rlattice = latt%rlattice
863 do idir = space%periodic_dim+1, space%dim
864 rlattice(:,idir) = rlattice(:,idir)*m_two*mesh%box%bounding_box_l(idir)
865 end do
866
867 do idir = 1, space%dim
868 write(iunit, '(3f12.6)') (units_from_atomic(units_out%length, rlattice(idir2, idir)), idir2 = 1, space%dim)
869 end do
870
871 write(iunit, '(a)') 'PRIMCOORD'//trim(index_str)
872 write(iunit, '(i10, a)') natoms, ' 1'
873 else
874 write(iunit, '(a)') 'ATOMS'//trim(index_str)
875 end if
876
877 ! BoxOffset should be considered here
878 do iatom = 1, natoms
879 write(iunit, '(a10, 3f12.6)', advance='no') trim(atoms(iatom)%label), &
880 (units_from_atomic(units_out%length, pos(idir, iatom) - offset(idir)), idir = 1, space%dim)
881 if (present(forces)) then
882 write(iunit, '(5x, 3f12.6)', advance='no') forces(:, iatom)
883 end if
884 write(iunit, '()')
885 end do
886
887 pop_sub(write_xsf_geometry)
888 end subroutine write_xsf_geometry
889
890! ---------------------------------------------------------
893 subroutine write_xsf_geometry_supercell(iunit, space, latt, pos, atoms, mesh, centers, supercell, extra_atom)
894 integer, intent(in) :: iunit
895 class(space_t), intent(in) :: space
896 type(lattice_vectors_t), intent(in) :: latt
897 real(real64), intent(in) :: pos(:,:)
898 type(atom_t), intent(in) :: atoms(:)
899 class(mesh_t), intent(in) :: mesh
900 real(real64), intent(in) :: centers(:, :)
901 integer, intent(in) :: supercell(:)
902 real(real64), optional, intent(in) :: extra_atom(:)
903
904 integer :: idir, idir2, iatom, index_
905 character(len=7) :: index_str
906 real(real64) :: offset(3)
907 integer :: irep, nreplica
908
910
911 write(index_str, '(a)') ''
912 index_ = 1
913
914 nreplica = product(supercell(1:space%dim))
915
916 ! The corner of the cell is always (0,0,0) to XCrySDen
917 ! so the offset is applied to the atomic coordinates.
918 ! Offset in periodic directions:
919 offset(1:space%dim) = latt%red_to_cart(spread(-m_half, 1, space%dim))
920 offset(1:3) = offset(1:3) + centers(1:3,1)
921 ! Offset in aperiodic directions:
922 do idir = space%periodic_dim + 1, 3
923 offset(idir) = -(mesh%idx%ll(idir) - 1)/2 * mesh%spacing(idir)
924 end do
925
926 if(space%is_periodic()) then
927 if(index_ == 1) then
928 select case(space%periodic_dim)
929 case(3)
930 write(iunit, '(a)') 'CRYSTAL'
931 case(2)
932 write(iunit, '(a)') 'SLAB'
933 case(1)
934 write(iunit, '(a)') 'POLYMER'
935 end select
936 end if
937
938 write(iunit, '(a)') 'PRIMVEC'//trim(index_str)
939
940 do idir = 1, space%dim
941 write(iunit, '(3f12.6)') (units_from_atomic(units_out%length, &
942 latt%rlattice(idir2, idir)*supercell(idir)), idir2 = 1, space%dim)
943 end do
944
945 write(iunit, '(a)') 'PRIMCOORD'//trim(index_str)
946 if(.not.present(extra_atom)) then
947 write(iunit, '(i10, a)') size(atoms)*nreplica, ' 1'
948 else
949 write(iunit, '(i10, a)') size(atoms)*nreplica+1, ' 1'
950 end if
951 else
952 write(iunit, '(a)') 'ATOMS'//trim(index_str)
953 end if
954
955
956 do irep = 1, nreplica
957 ! BoxOffset should be considered here
958 do iatom = 1, size(atoms)
959 write(iunit, '(a10, 3f12.6)', advance='no') trim(atoms(iatom)%label), &
960 (units_from_atomic(units_out%length, pos(idir, iatom) + centers(idir, irep) &
961 - offset(idir)), idir = 1, space%dim)
962 write(iunit, '()')
963 end do
964 end do
965 write(iunit, '(a10, 3f12.6)', advance='no') 'X', &
966 (units_from_atomic(units_out%length, extra_atom(idir) - offset(idir)), idir = 1, space%dim)
967 write(iunit, '()')
968
971
972
973#if defined(HAVE_NETCDF)
974 ! ---------------------------------------------------------
975 subroutine ncdf_error(func, status, filename, namespace, ierr)
976 character(len=*), intent(in) :: func
977 integer, intent(in) :: status
978 character(len=*), intent(in) :: filename
979 type(namespace_t), intent(in) :: namespace
980 integer, intent(inout) :: ierr
981
982 push_sub(ncdf_error)
983
984 if (status == nf90_noerr) then
985 pop_sub(ncdf_error)
986 return
987 end if
988
989 write(message(1),'(3a)') "NETCDF error in function '" , trim(func) , "'"
990 write(message(2),'(3a)') "(reading/writing ", trim(filename) , ")"
991 write(message(3), '(6x,a,a)')'Error code = ', trim(nf90_strerror(status))
992 call messages_warning(3, namespace=namespace)
993 ierr = 5
994
995 pop_sub(ncdf_error)
996 end subroutine ncdf_error
997#endif
998
999 ! ---------------------------------------------------------
1000 subroutine transpose3(in, out)
1001 real(real64), intent(in) :: in(:, :, :)
1002 real(real64), intent(out) :: out(:, :, :)
1003 integer :: ix, iy, iz
1004
1005 push_sub(transpose3)
1006
1007 do ix = lbound(in, 1), ubound(in, 1)
1008 do iy = lbound(in, 2), ubound(in, 2)
1009 do iz = lbound(in, 3), ubound(in, 3)
1010 out(iz, iy, ix) = in(ix, iy, iz)
1011 end do
1012 end do
1013 end do
1014
1015 pop_sub(transpose3)
1016 end subroutine transpose3
1017
1018#include "undef.F90"
1019#include "real.F90"
1020#include "io_function_inc.F90"
1021
1022#include "undef.F90"
1023#include "complex.F90"
1024#include "io_function_inc.F90"
1025#include "undef.F90"
1026
1027end module io_function_oct_m
1028
1029!! Local Variables:
1030!! mode: f90
1031!! coding: utf-8
1032!! End:
Fast Fourier Transform module. This module provides a single interface that works with different FFT ...
Definition: fft.F90:118
real(real64), parameter, public m_two
Definition: global.F90:190
real(real64), parameter, public m_zero
Definition: global.F90:188
real(real64), parameter, public m_half
Definition: global.F90:194
This module implements the index, used for the mesh points.
Definition: index.F90:122
subroutine zio_function_output_vector_bz(how, dir, fname, namespace, space, kpt, kpoints, ff, unit, ierr, grp, root)
subroutine, public write_canonicalized_xyz_file(dir, fname, space, latt, pos, atoms, box, namespace)
Write canonicalized xyz file with atom labels and positions in Angstroms. Includes information about ...
subroutine, public zio_function_output(how, dir, fname, namespace, space, mesh, ff, unit, ierr, pos, atoms, grp, root)
Top-level IO routine for functions defined on the mesh.
subroutine, public dio_function_output_global(how, dir, fname, namespace, space, mesh, ff, unit, ierr)
subroutine, public io_function_read_what_how_when(namespace, space, what, how, output_interval, what_tag_in, how_tag_in, output_interval_tag_in, ignore_error)
subroutine, public zio_function_input(filename, namespace, space, mesh, ff, ierr, map)
Reads a mesh function from file filename, and puts it into ff. If the map argument is passed,...
subroutine, public write_xsf_geometry(iunit, space, latt, pos, atoms, mesh, forces, index)
for format specification see: http:
subroutine zio_function_output_vector(how, dir, fname, namespace, space, mesh, ff, unit, ierr, pos, atoms, grp, root)
subroutine write_xsf_geometry_supercell(iunit, space, latt, pos, atoms, mesh, centers, supercell, extra_atom)
for format specification see: http:
subroutine dio_function_output_supercell(how, dir, fname, mesh, space, latt, ff, centers, supercell, unit, ierr, namespace, pos, atoms, grp, root, is_global, extra_atom)
subroutine, public dio_function_output(how, dir, fname, namespace, space, mesh, ff, unit, ierr, pos, atoms, grp, root)
Top-level IO routine for functions defined on the mesh.
subroutine dio_function_output_vector(how, dir, fname, namespace, space, mesh, ff, unit, ierr, pos, atoms, grp, root)
subroutine transpose3(in, out)
subroutine zio_function_output_supercell(how, dir, fname, mesh, space, latt, ff, centers, supercell, unit, ierr, namespace, pos, atoms, grp, root, is_global, extra_atom)
subroutine, public write_xsf_geometry_file(dir, fname, space, latt, pos, atoms, mesh, namespace, total_forces)
subroutine, public dout_cf_netcdf(filename, ierr, cf, cube, space, spacing, transpose, unit, namespace)
Writes a cube_function in netcdf format.
subroutine dio_function_output_global_bz(how, dir, fname, namespace, kpoints, ff, unit, ierr)
subroutine ncdf_error(func, status, filename, namespace, ierr)
integer, parameter, private zoutput_kind
subroutine, public zio_function_output_global(how, dir, fname, namespace, space, mesh, ff, unit, ierr)
subroutine, public zout_cf_netcdf(filename, ierr, cf, cube, space, spacing, transpose, unit, namespace)
Writes a cube_function in netcdf format.
subroutine dio_function_output_vector_bz(how, dir, fname, namespace, space, kpt, kpoints, ff, unit, ierr, grp, root)
integer(int64) function, public io_function_fill_how(where)
Use this function to quickly plot functions for debugging purposes: call dio_function_output(io_funct...
subroutine, public dio_function_input(filename, namespace, space, mesh, ff, ierr, map)
Reads a mesh function from file filename, and puts it into ff. If the map argument is passed,...
subroutine zio_function_output_global_bz(how, dir, fname, namespace, kpoints, ff, unit, ierr)
Definition: io.F90:114
subroutine, public io_close(iunit, grp)
Definition: io.F90:418
subroutine, public io_mkdir(fname, namespace, parents)
Definition: io.F90:311
integer function, public io_open(file, namespace, action, status, form, position, die, recl, grp)
Definition: io.F90:352
This module defines various routines, operating on mesh functions.
This module defines the meshes, which are used in Octopus.
Definition: mesh.F90:118
subroutine, public messages_variable_is_block(namespace, name)
Definition: messages.F90:1069
subroutine, public messages_warning(no_lines, all_nodes, namespace)
Definition: messages.F90:537
subroutine, public messages_obsolete_variable(namespace, name, rep)
Definition: messages.F90:1045
character(len=256), dimension(max_lines), public message
to be output by fatal, warning
Definition: messages.F90:160
subroutine, public messages_fatal(no_lines, only_root_writes, namespace)
Definition: messages.F90:414
subroutine, public messages_input_error(namespace, var, details, row, column)
Definition: messages.F90:713
logical function mpi_grp_is_root(grp)
Is the current MPI process of grpcomm, root.
Definition: mpi.F90:430
type(mpi_grp_t), public mpi_world
Definition: mpi.F90:266
Some general things and nomenclature:
Definition: par_vec.F90:171
integer function, public parse_block(namespace, name, blk, check_varinfo_)
Definition: parser.F90:618
brief This module defines the class unit_t which is used by the unit_systems_oct_m module.
Definition: unit.F90:132
This module defines the unit system, used for input and output.
type(unit_t), public unit_angstrom
For XYZ files.
type(unit_system_t), public units_out
This module is intended to contain simple general-purpose utility functions and procedures.
Definition: utils.F90:118
class to tell whether a point is inside or outside
Definition: box.F90:141
Describes mesh distribution to nodes.
Definition: mesh.F90:186
int true(void)