Parameters for basis optimization

Parameters here are for optimizing the confined pseudo-atomic orbital (PAO) basis functions by a combined application of nanobase and nanodcal together. Basis optimization is important to LCAO methods.

calculation.basisOptimization.basisInputFiles

keyword: calculation.basisOptimization.basisInputFiles

possible values: cell array of strings which represents file names

default value: no default value

description: Each file is an input file of nanobase, which is used for generating LCAO basis functions.

For more information about how to prepare the input file for nanobase, see the User Reference manual of nanobase.

The basis parameters in the given input files are used as initial values for the basis optimization.

The file names of the generated basis functions should be specified in the parameter basisFileNames.

Please note that in each basis calculation, the working directory is automatically changed to the directory where the corresponding input file is located. Therefore, please put your input files in different directories to avoid overwriting useful results.

an example:

calculation.basisOptimization.basisInputFiles = { ...
'./Carbon_SZ/input.txt', ...
'./Carbon_DZ/input.txt', ...
'./Oxygen_DZP/input.txt'}

calculation.basisOptimization.basisFileNames

keyword: calculation.basisOptimization.basisFileNames

possible values: cell array of strings which represent file names

default value: no default value

description: The file names of the optimized basis, each corresponds to one set of initial basis parameters of files given in the parameter basisInputFiles. The path part of the names of the basis files are not needed, and the optimized basis files will always be saved in the current directory.

Please note that (1) At each optimization step, those atomic basis files will be updated with the updated basis parameters; then the updated basis will be copied to the working directories of the calculation of the physical properties; and used to calculate certain physical properties of the systems which are specified in the input parameter systemInputFiles (see also the description of the parameter systemInputFiles). (2) Therefore, the basis file names contained in this cell array should all be different from each other. In the following example, there are two different names.

an example:

calculation.basisOptimization.basisFileNames = { ...
'C_dzp.mat', 'O_dzp.mat'}

calculation.basisOptimization.systemInputFiles

keyword: calculation.basisOptimization.systemInputFiles

possible values: cell array of strings for file names

default value: no default value

description: Input file names for normal nanodcal calculations of different physical systems. The calculated physical properties of the physical system will be used to form a cost function by basisOptimization.costCalculator. This cost function is to be minimized.

Please note that (1) In each of the physical property calculation, the working directory is automatically changed to the directory where the corresponding input file is located. Therefore, please place your input files in different directories to avoid overwriting useful results. (2) The purpose of the above normal nanodcal calculation is to supply physical properties for the optimization of the basis, and then the basis sets with the names given by the parameter basisFileNames should be used in the calculation. Therefore, please make sure that the basis used in the calculations are the correct ones.

an example:

calculation.basisOptimization.systemInputFiles = { ...
'./CO2/input.txt', ...
'./O2/input.txt'}

calculation.basisOptimization.costCalculator

keyword: calculation.basisOptimization.costCalculator

possible values: a structure with two fields of ‘class’ and ‘parameter’

default value: the costEnergy class

description: This input parameter defines a plug-in calculator, which supplies the cost function to be minimized by nanodcal. In this parameter, the field ‘class’ clarifies the name of the calculator, and the field ‘parameter’ gives its construction parameter. The constructor of the plug-in calculator will be called in the following way: calculator = constructor([cp]) where [cp] = calculation.basisOptimization.costCalculator.parameter

For information about how to replace this plug-in calculator, type “nanodcal -help plug-in” and “nanodcal -api”.

an example:

calculation.basisOptimization.costCalculator.class = ...
'costGapOverK'
calculation.basisOptimization.costCalculator.parameter ...
= struct('GapOverK', [ 8.1398  2.6880   2.7482 ...
2.5293  2.9758  3.4849  8.1398  3.5565], ...
'KpointNumber', [1 50 75 99 125 148 197 246])

calculation.basisOptimization.constrainType

keyword: calculation.basisOptimization.constrainType

possible values: ‘soft’, ‘hard’

default value: ‘hard’

description: If ‘hard’, the basis parameters will be strictly confined within a pre-set optimization domain. If ‘soft’, the basis parameters will be allowed to be outside the optimization domain, but with a large punishing cost function value.

an example:

calculation.basisOptimization.constrainType = 'soft'

calculation.basisOptimization.constrainConstant

keyword: calculation.basisOptimization.constrainConstant

possible values: structure with all or part of the following fields ChargeTransfer_minimum_factor, ChargeTransfer_maximum_factor, EnergyShift_minimum_factor, EnergyShift_maximum_factor, SplitNorm_minimum_value, SplitNorm_maximum_value, SplitNorm_shift_half_range, rc_minimum_factor, rc_maximum_factor, rc_rc_minimum_distance, ri_minimum_factor, ri_maximum_factor, rc_ri_minimum_distance, V0_minimum_factor, V0_maximum_factor.

default value: ChargeTransfer_minimum_factor = 0, ChargeTransfer_maximum_factor = 2, EnergyShift_minimum_factor = 1, EnergyShift_maximum_factor = 2, SplitNorm_minimum_value = 0.01, SplitNorm_maximum_value = 0.99, SplitNorm_shift_half_range = 0.1, rc_minimum_factor = 0.85, rc_maximum_factor = 1.15, rc_rc_minimum_distance = 1.2, ri_minimum_factor = 0.85, ri_maximum_factor = 1.15, rc_ri_minimum_distance = 1.0, V0_minimum_factor = 1/100, V0_maximum_factor = 10.

description: The constrain constants which define an optimization domain in the space spanned by the basis parameters within which the optimal values of the parameters is searched for.

an example:

calculation.basisOptimization.constrainConstant ...
.ri_maximum_factor = 2.5

calculation.basisOptimization.history

keyword: calculation.basisOptimization.history

possible values: true or false

default value: false

description: If true, a file searchingHistoryOfTheBasisParameters.txt is generated to record the searching history of the basis parameters.

an example:

calculation.basisOptimization.history = false

calculation.basisOptimization.simplex.MaxFunEvals

keyword: calculation.basisOptimization.simplex.MaxFunEvals

possible values: an integer

default value: 1000

description: nanodcal uses a simplex method to optimize the basis. This parameter is used in the simplex. The maximum number of times the cost function being called.

an example:

calculation.basisOptimization.simplex.MaxFunEvals = 3000

calculation.basisOptimization.simplex.MaxIter

keyword: calculation.basisOptimization.simplex.MaxIter

possible values: an integer

default value: 500

description: nanodcal uses a simplex method to optimize the basis. This parameter is used in the simplex. The maximum number in the simplex searching steps.

an example:

calculation.basisOptimization.simplex.MaxIter = 2000

calculation.basisOptimization.simplex.TolX

keyword: calculation.basisOptimization.simplex.TolX

possible values: a small number

default value: 1e-2

description: nanodcal uses a simplex method to optimize the basis. This parameter is used in the simplex. The tolerance of parameters.

an example:

calculation.basisOptimization.simplex.TolX = 1e-2

calculation.basisOptimization.simplex.TolFun

keyword: calculation.basisOptimization.simplex.TolFun

possible values: a small number

default value: 1e-2

description: nanodcal uses a simplex method to optimize the basis. This parameter is used in the simplex. The tolerance of cost function value.

an example:

calculation.basisOptimization.simplex.TolFun = 1e-3