Fixed a bug in getDegDij where summation range for l was too wide Fixed a bug in torsion angle analysis
Updates to utilities programs, fixed minor problems in Makefile
- Now one can scale energies with different brackets from gradients.
- fixed a bug where couplings are incorrectly given too high weights
- fixed a problem in the function call to conformSgn in OrthGH_Hd which can cause incorrect sign assignments
- Improved findmex algorithms
- On can use hd coefficients to weight the basis selection procedure with scalebycoef option
- Levenberg-Marquardt implementation where both diagonal and Jacobian shifts are manually set. Diagonal shift through LSETol and Jacobian shift through jshift parameter.
- Set
autoshrink
to.true.
to force the program to shrink step sizes when fitting error raises.
- Gradients of Lagrangian after the laster iteration is skipped to avoid unnessary time cost.
- Potlib subroutines can now use truncated expansions defined in an external basis file.
- findmex utility has been updated to allow the user to set a number of input parameters through input file
mexopt.in
, in namelist mexopt . One can now also set distance and angle constraints using the same input file.
- One can now use a term selection mechanism to select most useful terms from an extremely large expansion, in order
to limit the size of expansion while obtaining a more comprehensive basis. Use jobtype=2 to generate an expansion,
and use
basisfl
variable to specify an expansion file when you use such expansion.
- A test term selection routine for jobtype=2 would determine a subset of independent terms in an expansion that spans the same space as the full expansion. This will be used in the future to automatically select terms from a very large expansion.
- Use previously save set of diabat data to reconstruct Hd as the starting guess of the fit using
loadDiabats
option. - Updated manual page for
surfgen.in
- Fixed a problem where redundant blocks were not correctly linked, causing memory consumption to be higher than necessary.
- Added a procedure to record the values and gradients of each element of Hd at all data points. This will be used to provide a way to reconstruct Hd for new expansions.
- Updated options for gfortran
- Fixed a bug that after the QR decomposition with pivoting of projection operators in case of multi-dimensional irredicuble representations the projection operators were not correctly pivoted back to the original basis. The program is now tested for degenerate irreducible representations.
- Memory consumption information can now be explicitly printed out with printlvl>2.
- Fixed a potential memory violation in EvaluateVal() in hddata.f90
- Bug fix in potlib.f90 and libutility.f90 that may cause memory leak
- Minor bug fixes and print out improvements
- Preliminary code to identify degenerate coordinates in the local coordinate generation process. The rotation among them has not been implemented yet.
- New parameters
mng_scale_ener
andmng_scale_grad
control if the scaled values or original values will be used by the point manager. - A new parameter
deggrdbinding
forces all gradient/couplings to be include or excluded at the same time if they are in the range of degeneracy. The default is .true. which is recommended. .false. will reproduce previous results.
- A procedure to identify the symmetry of each coordinate at every data point is tested to facilitate a future functionality that allows the fitting of points with states that carry degenerate representations.
- A point management feature is added. The user can assign a set of points to be managed by the program by using the
MN keyword in
points.in
: MN X I J Here I and J defines the range of points to be managed. Managed points will be excluded unless they are reasonably predicted by the fit. New points that meet the criteria are added every iteration. - Options nrmediff2 and ediffcutoff2 have been removed. Energies are no longer scaled by energy difference, because they are likely treated by a quasi-degeneracy when this is the case and the energy difference in non-diagonal representation is not meaningful. This is in opposition to the gradient and coupling scaling, which only happens when energy difference is large and a diagonal representation is likely used.
- Option gScaleMode has been removed. Scaling can be turned off by setting intGradS=intGradT=0d0
- Feature added to treat more-than-two-state quasi-degeneracy by orthogonalizing all g and h pairs, as described in JCP 141(17),174109
- A new data structure gWeight is added, which records the fitting weights of each gradient or coupling block for every data point. The weight adjustment is due to high energy or large energy difference, and the relative weight assigned to w_fij and w_grad.
- Automatic assignment of phases in fixphase() now use a weighed sum of errors(using gWeight) instead of plain sum so that the important couplings can receive better representation. This brings the error in line with actual fitting error. This should make convergence smoother.
- The program should no longer require a very large stacksize to run.
- Fixed a problem where compilation may cause internal compiler error in earlier versions of ifort.
- A switch
no_nad
is added to turn of couplings.
- Minor bug fixes in findcp and readColGeom
- Changed License to CC-BY
- Fixed a bug where gradient and energy input files are not properly closed.
- fitinfo.csv now also contains the norm of fit gradients and couplings
- a new utility program analyse that can be used to show the internal coordinates of geometries
- Moved the internal coordinate analysis subroutine that is redundant in a number of utility programs to libutil.f90
- Fixed torsion angle info output in findmex and findcp to correctly create list of linked torsions.
- New subroutine
getNeightbor
in potlib.f90 that allows the caller to identify the closest data point from the last evaluation. If distance calculation is not enabled, it returns 0. - tespoints utility now returns also the closest point with respect to the test point. It now also properly handles the input argument and use it as the geometry filename.
- new utilities program findmex that can be used to search for minimum energy point on N-state intersection seams on fit surface
- New subroutine OrthogonalizeGH that can be used by external programs to obtain intersection adapted representations
- adjusted bond-length threshold in findcp
- OpenMP parallelization for evaluation of raw terms.
- New subroutine
finalizeSurfgen
in potlib.f90 that prints out the maximum deviation and evaluation count for the last trajectory
- Updated
setsgenvars.sh
andsetsgenvars.csh
to set also the binary directory of surfgen as variableSGENDIR
, and add surfgen directory toPATH
variable if it is not already present. - Updated
findcp
utility program to correctly search for critical points. It now use command line options to set geometry input file and initial state, so that the source code will not need ot be modified for different searches. - Utility programs will not be copied to binary directory upon installation.
- When making libraries with
make libs
, recommended compilation and link flags for the program to use surfgen evaluation libraries will be printed out. Two shell scripts, one for bash/sh one for csh/tcsh, will also be created in thebin
directory that can be - sourced to set these environment variables and adjust stack size settings. PDF documentations now distributed with the repository.
- A critical point search program
findmin
is added to the utilities.
This program can be used to search for minima, saddle points, or conical intersections on the fit surface. - More documentations for utility programs, along with installation scripts for each of them
Changed format string in potlib to allow parsing of longer propagation times.
Compatibility on Mac OS X. Build OS X dynamic libraries with target dylib
Built-in evaluation counters added and is incremented on every EvaluateSurfgen calls.
To retrieve the evaluation count, use GetEvalCount(count) subroutine.
The counter can be reset with the method ResetEvalCount().
- Updated Makefile for smoother compilation on NERSC (tested for Hopper, Edison II and Carver)
- Minor modifications that allows compilation on Cray fortran compilers
- Fixed a few use-before-initialization bugs.
- Slightly modified makefile to enable automatic detection based on $MKL_HOME variable
- Size of test decreased to more reasonable level.
- New coordinate type anti-symmetric bend (type=1) added to describe bendings of atoms attached to a ring or chain
- New option
cpcutoff
now allows couplings to be automatically removed above a set energy. works in a similar way asgradcutoff
. It is used to set the couplings cut off energy to be a different value from that of gradients. If not set, the gradient cut off will be used instead.
- The program also generates a fitinfo.csv file when PrintError=.true. This file contains information needed to generate figures regarding the quality of fit.
- Molecular information (atoms and number of states) are now written to the first record of trajectory log files
- Distance output now calculates the RMS average distance per non-vanishing coordinates. A new parameter
cvanish
is added and a coordinate is considered vanished when the norm of B-matrix elements of that coordinate is smaller than this value. Setting it to 0 will reproduce the old distance definition.
- Bug fix to prevent division by zero due to scaling function when distance is extremely large
- Format update for energy output.
- A new utility program
ghplot
that creates two dimensional plots of the coupled PESs. - Evaluation subroutine now records eigenvectors and can be retrieved with getEvec subroutine.
- Removal of linear dependencies from exact equations
- New option gradcutoff allows gradients and coupling equations to be automatically removed when above certain energy threshold.
- Increased the number of allowed input directories from 100 to 999.
- Minor output fixes.
- Fixed a problem where the derivative couplings were not properly divided by energy difference.
- Ability to plot size of couplings in evaluation libraries.
- Updated
surfgen.in
manual pages for the options for evaluation subroutines.
- Diagonal shift changed to a Morse form : D*(1-w/w0)^2 , so that minimum will not be moved while shifting dissociation energy.
- Diagonal shift by a list of single coordinate functions for size consistency corrections.
- During evaluation, RMS deviation per coordinate from existing point instead of total norm of deviation is displayed.
- Partially constructed parallelization wrapper with MPI through ScaLapack.
- Timing for normal equations and solution of Newton-Raphson equations are done separately.
- Print out for contribution of each nascent coordinate during local internal construction. This helps to diagnose reduced dimensionality issues. Enabled when
printlvl>1
.
- option
guide
allows the specification of a set of guide eigenvectors which will be used to determine state ordering at these points. - enhanced output for detected state flipping during iterations or between loaded ckl files and automatic orderings.
- singularities are now removed from linear equations of near degeneracy treatments
The eigenvalue decomposition procedure has been replaced by linear equation solver dsysv
. This alleviates memory issues and speeds up the procedure.
However, it can also be less reliable; specificly, it will fail when exact equations are linearly dependent. This will be fixed in a future patch.
- Added utilities
pauseParsing
andresumeParsing
to allow programs to temporarily suspend parsing in evaluation subroutines.
- Added option
printError
in groupMAKESURF
. When true, the program will generate filesrefgeom
anderror.log
, which can be used bylibsurfgen
libraries to evaluate distances to existing points. - Tested to integrate with ANT2012
- Rotation of Hd g and h vectors is now skipped when the corresponding rotation is forbiden by absence of data for ab initio data.
- Total fitting errors will be printed after final iteration.
- Updated manual pages for
surfgen.in
- Gradient ordering now also take into account all the errors of derivative couplings, in order to achieve better ordering accuracy.
- Fixed a problem with gradient ordering that can cause difficulty to obtain correct order when one of the states in the ordering group does not have gradients
- A new option CpOrder now allows the user to specify the maximum order of off-diagonal coupling blocks to be different from that of the diagonal blocks.
- Added g and h vector output for intersection points.
- Added FORTRAN77 interface to
libsurfgen
which allows arrays with arbitrary fixed sizes to be passed as arguments to evaluation subroutine. - Fixed a problem with matrix printing that caused the gradients and couplings output in
surfgen.out
not to align correctly.
- Added utility program
testpt
. This, and any future, utility programs can be found in theutilities
directory. - Removed some obselete features from
potlib
, such as coupling flattening, which can now be properly prevented by correct choice of coordinates.
- Fixed the
enfDiab
not working bug.
IMPORTANT : You have to updated your coord.in
file after updating to this version!
-
All coordinate types now require the two scaling coefficients. Put them there regardless of coordinate you are defining.
With this change, the format is the same for all coordinate definitions and you do not have to check if coefficients are expected for a specific type. -
Plain bond distance and bond angle coordinates are not shifted by coefficient 2 and then scaled by coefficient 1. Old definitions would be equivalent to defining with
1.000 0.000
-
Added new rij scaling type (tanh) that can be used as a smooth step function.
- Fixed an array deallocation problem upon termination.
- Block symmetry analysis: the program now try to detect blocks that exhibit the same symmetry properties.
Irrep matrices for blocks between all possible pairs of state irreps are constructed and compared.
Expansions(maptab
) and basis generation (AKA null space removal, performed in subroutinegenBasis
) are only performed for blocks with unique symmetries.
- Fixed a bug that off-diagonal are not being properly added during the normal equation construction when partial diagonalization is performed.
- Updated documentation for the changes in internal coordinate definition for type=0 mode=4
- Changed form of long range distance scalings (mode=4) to make it more useful.
- Fixed redundant gradient/couplings error output.
- Cleaning up fitting output
- Cleaned up
testsurfgen
. - Updated project settings for XCode
- Gradient following method implemented. A diagonal approximation is used for the coef-coef block of Lagrangian hessian. This prevents the construction and factorization of normal equations, which is the most memory and CPU intensive step.
- Linear search algorithm reworked. The program now use a more robust algorithm to sample along the step direction and use linear gradient extrapolation to find better step length. Each pair of adjacent points are chosen and the pair that give the best predicted improvements are used.
- Fixed a flag issue which made version subroutine fail to compile with
gfortran
- Improved linear search algorithm
- LinNegSteps is now deprecated
- Performance improvement for Lagrangian gradient and normal equations constructions.
- Examples updated for the newest version.
- The energies are structured as matrices with off-diagonal elements are explicitly stored for situations where intersection adapted coordinates instead of Schrodinger equations are used to determine some of the states. In these cases, the off-diagonal will be a small but non-zero number. The treatment is now exact even when intersection adapted coordinates are used for points that are not strictly degenerate (which will always be the case)
- The evaluation of Dij now use the same degeneracy groups that are used to construct intersectin adapted coordinates
- The Dij are solved with a set of linear equations which should exactly reflect the derivatives in an arbitrary groups of degeneracies among arbitrary number of states.
- Symbolic link
libsurfgen
to most recent library created inlib
directory when compiling libraries. - Parameter
DijScale2
is now deprecated. Its purpose is now achieved byDijScale
. You can still suppress the Dij contributions to normal equations, but you can no longer disable Dij contributions to Lagrangians. - pdf documentations are no longer distributed with the repository. Instead, they can be generated from man pages with
command
$ make man
. The man pages can be installed into/usr/share/man
with command$ sudo make install
.
- Added version numbers to
surfgen.out
, standard output, andhd.data
files - The eigenvector input file is now processed on a point by point basis. For undefined points,
updateEigenVec
will be used to generate the initial vectors. This allows Ckl data generated from a smaller point set to be used. It can also be used to manually modify the adiabatic-diabatic transformation at a specific point. - When compiling with
make surfgen
, a symbolic linksurfgen
will be created inlib
directory, pointing to the newest executable.
- Fixed the input file searching problem when printlvl<2 (Issue #8)
- Code clean up
- Fixed the DIJ problem in normal equations
- Fixed a bug in Lagrangian gradient evaluation where some elements of Dij are used before constructed, causing the program to fail the Lagrangian test. (Issue #7)
- Test program for the gradients of Hd and the Largrangian added to the test program
- Increased the length of all filename strings from 72 to 255
- Code clean up and structural optimizations
-
Test program can now be compiled and run with
make
by doing$ make tests
-
Another fix to error print out
- A test program created to test the consistency and detect problems within subroutines
- Fixed a bug that ncoords was not initialized to 0, which caused 4-center dot product
definition to behave erroneously with
gfortran
compiler.
- The print out for errors in LSE block before every iteration were not weighted and therefore does not reflect the true quality of fit. Now both weighted and unweighted results are reported.
- Direct construction of normal equations enables the program to skip explicit construction and storage of W matrix, which becomes memory intensive when number of equations grow close to 100,000.
- MINMEX mode is deprecated. Use the evaluation library with another program for the purpose.
This is a major update. Part of your input will have to be redone in order to work properly.
- You can now specify a list of allowed symmetries in stead of one specific symmetry for any state group. This allows the treatment of a changing symmetry. All specified symmetry has to share the same dimensionalities, otherwise the result will be unpredictable.
- Options
groupsym
andgroupprty
are now two dimensional arrays, with the first dimension being index of state group, second being the index of allowed symmetry. - Merged matrix basis forward and backward transformation matrix for basis reconstruction to improve memory efficiency further.
- StepMethod/=0 is now depreciated since it does not really work.
- For points that has large coupling errors, the program will now also print out the percentage error for derivative coupling
times energy difference. This is particularly useful for diagnosis purpose in order to find out if it is gradients of Hd or
energy difference that is causing the large gradient error. For points with small energy separations, large relative error
is sometimes unavoidable unless you force it with Lagrange multipliers using the LD option in
points.in
- Fixed a bug that sometimes corrupt the permutational sign of OOP angles and 4C dotproducts, resulting in problematic symmetry properties.
- New input option
restartdir
: the program will save Hd coefficients to$restartdir/hd.data.$iter
every iteration if this option is nonempty - Fixed a problem where the point indices are not correctly printed in
surfgen.out
when some ab initio are absent
- Fixed a problem where the construction of intersection adapted coordinate at points with partially avaiable data will cause all ab initio data to be corrupted.
- Fixed an error in the print out where the state label for the table of equation inclusion does not line up with the content
- Increased file index searching limit in getFLUnit to avoid file unit ID overflow.
- phenol input made runnable
- total number of coefs before null space removal is now printed to the surfgen.out file
- OS version dropped from executable name since they seem to be compatible
- Large gradient error warnings are now more reasonable and will no long complain about errors that are infinitesimal
- minor fixes to output formatting
- New coordinate 4-center dot product added to describe angular motions that are anti-symmetry with respect to atom permutations but symmetry with respect to inversion.
- Changed out-of-plane coordinate(type=-1,mode=0) to take a second parameter which scales the coordinate linearly.
- Fixed genEnerGroup problem where states with no input data are being classified as degenerate.
- Test jobs for phenol and hydroxymethyl added.
- Fixed
Makefile
to properly createbin
andlib
directories and prevent unnecessary building - Fixed up messy output search code in
makesurf.f90
- Fixed minor output formatting problems that cause warnings in newer versions of
ifort
- Updated makefile and project settings to allow compilation of evaluation libraries.
- Removed deprecated options disscprate and disscpmidpt. Since we use OOP angles with correct assyptotic behavior now, coupling scaling is no longer needed.
- Binaries are libraries are for the moment not supplied with the repository.
You will have to build it yourself.
- SearchPaths feature: the program to search a number of directories for input files, and files that are not present will automatically be marked as nonexistent and excluded from fit. This eliminates the need to make up placeholder data and then set then to be not used in points.in .
- Input file naming patterns: You can now set a naming pattern for your input files, just in case they are named in a non-conventional manner.
- Removed deprecated subroutines makeXCoords and removeTransRot
- First stable release of mix-global-local surfgen tested for NH3 case