### TABLE OF CONTENTS

## 2.4 Input Data Stacking

DESCRIPTION

Input data stacking is a useful concept when performing multiple
calculations. In such a case, one typically defines a set of default
parameters for all calculations. However, each individual
calculation may require some modification of the input data, yet it
is inconvenient if such a change would affect the input data for
other subsequent calculations. This inconvenience can be prevented
by using the input data stacking and to this end the PWTK provides
the **input_pushpop** command. The concept is illustrated
below:

#------------------------------------------------------------------------ import input-data.pwtk # let's label the input-data at this point as (#0)

# prepare and run the 1st calculation input_pushpop { # input data has been pushed on the stack; # at this point the input data is the same as in (#0)

... modify input data for this calculation (#1) ... perform the 1st calculation } # the modification of input data made inside the above input_pushpop { ... } # was popped away; at this point the input data is the same as in (#0)

# prepare and run the 2nd calculation input_pushpop { # input data still the same as in (#0)

... modify input data for this calculation (#2) ... perform the 2nd calculation

# prepare and run the 3rd calculation input_pushpop { # input data is the same as in (#2)

... modify input data for this calculation (#3) ... perform the 3rd calculation }

# at this point the input data is the same as in (#2) }

# at this point the input data is again the same as in (#0)

... perform further calculations #-----------------------------------------------------------------------

EXAMPLE

And here is a simple actual example that consists of three scans:
(i) scan over cutoff energy, (ii) scan over k-points, and (iii)
scan over A-lattice parameter. Note that due to use of
`input_pushpop { ... }` none of the test affects the
input data for subseuqent tests.

# pw.x input data are stored in "input-data.pwtk file import input-data.pwtk

# scan the cutoff energy input_pushpop { foreach e [seq 20.0 5.0 50.0] { SYSTEM "ecutwfc = $e, ecutrho = 8*$e" runPW scf.ecut$e.in } }

# scan the k-points input_pushpop { foreach k {2 4 6 8 10 12} { K_POINTS automatic "$k $k $k 1 1 1" runPW scf.k$k.in } }

# scan the lattice-parameter input_pushpop { foreach alat [seq 9.0 0.2 10.8] { SYSTEM " celldm(1) = $alat " runPW scf.alat$alat.in } }