quantum-espresso/Doc/README.AUTOPILOT

335 lines
15 KiB
Plaintext

README.AUTOPILOT
--------------------------------------------------------------------------------
Copyright (c) Targacept, Inc.
--------------------------------------------------------------------------------
Targacept, Inc.,
200 East First Street,
Suite 300,
Winston-Salem, NC, USA 27101
atp@targacept.com
--------------------------------------------------------------------------------
This file describes the Autopilot Feature Suite as introduced and used by
Targacept, Inc. This documentation accompanies free software; The software
is subject to the terms of the GNU General Public License as published by the
Free Software Foundation; either version 2 of the License, or (at your option)
any later version. See the GNU General Public License at
www.gnu.or/copyleft/gpl.txt for more details.
This documentation, like the software it accompanies, is distributed in the hope
that it will be useful, but WITHOUT ANY WARRANTY; without even the implied
warranty of MERCHANTABILITY FOR A PARTICULAR PURPOSE.
--------------------------------------------------------------------------------
AUTOPILOT DOCUMENTATION
--------------------------------------------------------------------------------
The Autopilot Feature Suite is a user level enhancement for directing
Car-Parrinello simulations based on CP.X packaged in ESPRESSO.
The following features are incorporated:
I. Auto Restart Mode
II. Autopilot Course Configuration (Dynamic Rules)
III. Autopilot Course Correction (Steering)
--------------------------------------------------------------------------------
I. Auto Restart Mode
--------------------------------------------------------------------------------
Auto Restart Mode is an extension of restart_mode declared in the CONTROL section
of the input file. When restart mode is set to "auto", control determines if the
current run is "from_scratch" or a valid "restart" based on the presence of a
restart file associated with unit NDR. When NDR, the unit number for input, and
NDW, the unit number for output, are the same, a simulation that is system
terminated can be restarted without significant loss, providing that ISAVE, the
parameter that indicates the frequency at which intermediate data are saved, is
not large.
Auto Restart Mode implements an effective "upto" mode and is also designed for
use on remote machines where simulations may frequently be terminated and
restarted. Auto Restart Mode is especially useful in connection with Autopilot's
Dynamic Rules capability. When they are used together, only one segment of a
simulation is necessary, thereby reducing run_script volume and errors, and
placing more control with the user.
restart_mode CHARACTER ( default = 'restart' )
from_scratch = from scratch. NEB only: the starting path is
obtained with a linear interpolation between
the images specified in the ATOMIC_POSITIONS
card. Note that in the linear interpolation,
periodic boundary conditions ARE NOT USED.
restart = continue a previous simulation and perform
"nstep" new steps.
reset_counters = continue a previous simulation, perform
"nstep" new steps, resetting the counter
and averages.
auto = automatically detect "from_scratch" or "restart";
continue any previous simulation, and stop
when the counter value is equal to "nstep".
--------------------------------------------------------------------------------
II. Autopilot Course Configuration (Dynamic Rules)
--------------------------------------------------------------------------------
Autopilot Course Configuration (Dynamic Rules) is a method that allows select
input parameters (Autopilot variables) to change during the course of a
simulation. This method allows the user to create a more concise set of
instructions that are easier to read and maintain and enables a more continuous
execution on remote resources.
Typically and historically, a user issues a run_script that creates a sequence of
input files, each with fixed parameter values. This run_script then calls cp.x
against each input file in the sequence, such that, after the first, each
execution continues with the next input file as well as restart information from
the previous execution.
The Autopilot Course Configuration effectively consolidates multiple input files
into one, allowing the user to specify at what time step a parameter should change
along with its new value. Thus a run_script becomes much shorter, and the user can
easily see the projected path of the simulation.
The Autopilot Course Configuration feature is implemented by adding a new card type
to the "CARDS" section of the input file. The Autopilot card must be placed after
the "NAMELIST" section but otherwise may appear before or after any other card.
A favorable place is as the first card.
Sytnax is as follows:
CARDS ...
AUTOPILOT
optional card : read dynamic rules to set parameters on an absolute
timestep (iteration) from either standard input or mailbox
(pilot.mb)
Syntax:
AUTOPILOT
ON_STEP = ith_event_STEP : varname = value
ON_STEP = jth_event_STEP : varname = value
ON_STEP = jth_event_STEP : varname = value
...
ON_STEP = nth_event_STEP : varname = value
ENDRULES
Description:
ON_STEP LABEL, must be in numerical timestep order, otherwise rule
is ignored
ith_event_STEP INTEGER, iteration (NFI) when rule is to be employed
varname Autopilot variable, currently limited to one of the
following: isave,iprint,dt,emass, electron_dynamics,
electron_damping, ion_dynamics, ion_damping,
ion_temperature, tempw.
value Must be valid value of variable type
(for example: isave, iprint must have a value of type
INTEGER, while dt must have a value of type REAL)
ENDRULES Required only for input (STDIN) if other cards follow.
The event specification (ON_STEP) should precede the variable assignment. The
colon separator between the event assignment and the variable assignment is
required, as are the equal signs. No semi-colon or comma should appear after the
variable assignment. There can be multiple rules per event but only one variable
assignment per rule (and only one rule per line). Within one event, there should
be only one assignment per variable. If multiple assignments are made for the
same variable for the same event, only the last assignment will be accepted.
Rules for which event specifications are not in numerical order will be ignored.
If syntax errors are present in the AUTOPILOT card during start-up, the
execution will stop.
Example Syntax:
AUTOPILOT
ON_STEP = 200 : tempw = 500.0
ON_STEP = 200 : dt = 3.0
ON_STEP = 250 : ISAVE = 50
ENDRULES
Currently there is a maximum of 32 supported events and 10 supported Autopilot
variables. Events that are out of timestep order are ignored. A user may establish
up to 10 rules (one for each Autopilot variable) per event. Currently implemented
Autopilot variables are: isave, iprint, dt, emass, electron_dynamics,
electron_damping, ion_dynamics, ion_damping, ion_temperature, and tempw.
If desired, users may implement other Autopilot variables. See Appendix below for
an explanation of "Adding an Autopilot Variable".
IMPORTANT: Variables should have values in accordance with their TYPE, or a
runtime error may occur.
--------------------------------------------------------------------------------
III. Autopilot Course Correction (Steering)
--------------------------------------------------------------------------------
Autopilot Course Correction (Steering) provides a run-time method of changing
Autopilot variables on the fly, after the simulation is underway. Autopilot
Course Correction (Steering) can be applied through any of the following
sub-features: New Course (power steering), Manual Steering, and Pause.
Steering utilizes a new mailbox file: pilot.mb. This file can be created via the
user's favorite text editor and can be "mailed" by placing the file in the
"results" directory. The user can also very quickly implement a single course
correction command with UNIX redirect to the pilot.mb file.
When a pilot.mb mailbox file is detected, the current event table is cleared to
prepare for the new course. The mailbox file is then parsed, and Autopilot
processes the command(s) before deleting the mailbox file. If Autopilot cannot
parse a command, it issues a warning and goes into PAUSE mode (see below).
The Steering subfeatures, including pilot.mb syntax are described here:
a) New Course or 'power steering' is implemented with the same syntax as the
INPUT file card for Autopilot. Remember that ON_STEP represents an absolute
iteration (NFI) step.
For example:
AUTOPILOT -required
ON_STEP=400 : ISAVE = 50 -events must be ordered by step
ON_STEP=400 : DT = 5.0 -use valid variable types (or die)
ON_STEP = 600:IONS_TEMPERATURE='damped' -indention optional
ON_STEP = 600: TEMPW=350.0 -white spaces are ignored
ENDRULES -optional
In this example, when NFI reaches 400, the value of ISAVE will be reset to 50
and the value of DT to 5.0. Then, when NFI reaches 600, IONS_TEMPERATURE and
TEMPW will be reset to the indicated values.
b) Manual Steering is implemented with a similar syntax except that the card type
is PILOT instead of AUTOPILOT and the user specifies a timestep relative to
the time the mailbox is read, rather than an absolute timestep. The relative
timestep allows the user to set a rule for a near future event without having
to judge the current absolute NFI value. The user may also pre-write multiple
mailboxes using relative event steps without regard to absolute iteration (NFI)
values.
For example, assume mailbox contents are:
NOW:ISAVE=50
NOW+100:TEMPW=600.0.
Assume further that the mailbox is saved to the "results" directory and then
read when the NFI is 380. Manual Steering will reset the value of ISAVE on
the next event that is modulo 50, and an ISAVE event will occur twice
(at 400 and again at 450) before TEMPW is reset to 600.0 on step 480. Compare
this with the syntax that specifies an absolute timestep:
ON_STEP=400:ISAVE=50
ON_STEP=500;TEMPW=600.0.
In this example, if the NFI is less than 400 when the mailbox is read, ISAVE
becomes 50 on step 400 and TEMPW becomes 600.0 on step 500, and ISAVE is
performed twice before TEMPW is reset, just as in the previous example that
uses relative indexing.
However, if the user misjudges the momentary NFI, and it is 530 when the
mailbox is read, then both rules are implemented immediately and simultaneously.
Furthermore, the ISAVE rule takes effect after the NFI specified. Neither of
these effects may have been intended by the user.
Following is an example of a Manual Steering mailbox to change temperature from
a relative iteration (NFI) step:
Example syntax for a Manual Steering mailbox is as follows:
PILOT -optional for single line
NOW : ISAVE = 50 -events must be ordered
NOW : DT = 5.0 -use valid variable types (or die)
NOW+50 :IONS_TEMPERATURE='damped' -offsets from NOW are supported
NOW + 150: TEMPW=350.0 -white spaces are ignored
ENDRULES -optional
Example format for a quick mailbox change using a single rule is as follows:
-defaults to PILOT
NOW + 250: TEMPW=450.0 -single line with NOW
c) Pause is a steering sub-feature that allows the user to suspend the simulation
until the user can decide on a future course. Pause is very helpful when the user
knows that a change should be imposed but needs time to establish rules and
create an appropriate mailbox. Steering then resumes as AUTOPILOT or PILOT upon
receiving another pilot.mb mailbox. The syntax is a single line with one of the
following:
PAUSE
SLEEP
HOLD
HOVER
WAIT
All of the above perform the same PAUSE mechanism. The user can issue the command
quickly through UNIX redirect:
>echo "PAUSE" > results/pilot.mb
Any mailbox not correctly identified with a AUTOPILOT, PILOT, NOW, or a PAUSE
command, will result in a warning to standard output (STDOUT), and the simulation
will pause.
--------------------------------------------------------------------------------
TESTING
--------------------------------------------------------------------------------
The entire Autopilot Feature Suite issues directives to slave nodes under
MPI, with the fewest broadcasted parameters. All features have been tested
under Intel 8.1 with MKL 7.0.1 libraries on a Linux-32 single processor and under
PGI 5.2 with MPI on Linux-64 with 1, 2 and 4 processors.
--------------------------------------------------------------------------------
ADDING AN AUTOPILOT VARIABLE
--------------------------------------------------------------------------------
See Autopilot.f90 for examples.
* Select the input parameter from the list in file INPUT_CP
* Identify parameter dependencies, initializations, assignments, etc
* Edit autopilot.f90 to add the following,
where VARNAME is the name of the new Autopilot variable:
o VARTYPE :: rule_VARNAME(max_event_step) at module scope
o LOGICAL :: event_VARNAME(max_event_step) at module scope
* Remember to add to the PUBLIC block as well
o event_VARNAME(:) = .false. to init_autopilot subroutine
o rule_VARNAME(:) = VARDEFAULT to init_autopilot subroutine
* Import VARNAME with USE to employ_rules subroutine
* In employ_rules, add conditional clause on event_VARNAME to assign VARNAME:
o ! VARNAME
o if (event_VARNAME(event_index)) then
o VARNAME = rule_VARNAME(event_index)
o CALL init_other_VARNAME_dependent_variables( VARNAME)
o write(*,*) 'RULE EVENT: VARNAME', VARNAME
o endif
* Import VARNAME with USE to assign_rule subroutine
* In assign_rule, add condition clause matching the VARNAME create rule as so:
o ELSEIF ( matches( "VARNAME", var ) ) THEN
o read(value, *) VARTYPE_value
o rule_VARNAME(event) = VARTYPE_value
o event_VARNAME(event) = .true.
* TEST
WARNING: Some Autopilot variables may create "side-effects". For example, the
inclusion of a rule for TEMPW rules invokes a side-effect call to ions_nose_init.
The user is cautioned to be aware of possible side-effects when adding other
Autopilot variables.
Last modified: Tue Aug 09 16:01:00 EDT 2005