diff --git a/COPYING b/COPYING new file mode 100644 index 00000000..35c0e748 --- /dev/null +++ b/COPYING @@ -0,0 +1,279 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + diff --git a/Doxyfile b/Doxyfile new file mode 100644 index 00000000..04e32b2c --- /dev/null +++ b/Doxyfile @@ -0,0 +1,209 @@ +# Doxyfile 1.3.6 + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- +PROJECT_NAME = qwalk +PROJECT_NUMBER = +OUTPUT_DIRECTORY = releasedoc +OUTPUT_LANGUAGE = English +USE_WINDOWS_ENCODING = NO +BRIEF_MEMBER_DESC = YES +REPEAT_BRIEF = YES +ABBREVIATE_BRIEF = +ALWAYS_DETAILED_SEC = NO +INLINE_INHERITED_MEMB = NO +FULL_PATH_NAMES = NO +STRIP_FROM_PATH = +SHORT_NAMES = NO +JAVADOC_AUTOBRIEF = NO +MULTILINE_CPP_IS_BRIEF = NO +DETAILS_AT_TOP = YES +INHERIT_DOCS = YES +DISTRIBUTE_GROUP_DOC = NO +TAB_SIZE = 8 +ALIASES = +OPTIMIZE_OUTPUT_FOR_C = NO +OPTIMIZE_OUTPUT_JAVA = NO +SUBGROUPING = YES +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- +EXTRACT_ALL = YES +EXTRACT_PRIVATE = YES +EXTRACT_STATIC = NO +EXTRACT_LOCAL_CLASSES = YES +HIDE_UNDOC_MEMBERS = NO +HIDE_UNDOC_CLASSES = NO +HIDE_FRIEND_COMPOUNDS = NO +HIDE_IN_BODY_DOCS = NO +INTERNAL_DOCS = NO +CASE_SENSE_NAMES = YES +HIDE_SCOPE_NAMES = NO +SHOW_INCLUDE_FILES = YES +INLINE_INFO = YES +SORT_MEMBER_DOCS = YES +SORT_BRIEF_DOCS = NO +SORT_BY_SCOPE_NAME = NO +GENERATE_TODOLIST = YES +GENERATE_TESTLIST = YES +GENERATE_BUGLIST = YES +GENERATE_DEPRECATEDLIST= YES +ENABLED_SECTIONS = +MAX_INITIALIZER_LINES = 30 +SHOW_USED_FILES = YES +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- +QUIET = NO +WARNINGS = YES +WARN_IF_UNDOCUMENTED = YES +WARN_IF_DOC_ERROR = YES +WARN_FORMAT = "$file:$line: $text" +WARN_LOGFILE = +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- +INPUT = +FILE_PATTERNS = mainpage.html */guide/*.html */src/*/*.cpp */src/*/*.h +RECURSIVE = YES +EXCLUDE = */releasedoc/html/*.html */src/attic/* +EXCLUDE_SYMLINKS = NO +EXCLUDE_PATTERNS = +EXAMPLE_PATH = +EXAMPLE_PATTERNS = +EXAMPLE_RECURSIVE = NO +IMAGE_PATH = +INPUT_FILTER = +FILTER_SOURCE_FILES = NO +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- +SOURCE_BROWSER = YES +INLINE_SOURCES = NO +STRIP_CODE_COMMENTS = NO +REFERENCED_BY_RELATION = NO +REFERENCES_RELATION = NO +VERBATIM_HEADERS = YES +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- +ALPHABETICAL_INDEX = YES +COLS_IN_ALPHA_INDEX = 5 +IGNORE_PREFIX = +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- +GENERATE_HTML = YES +HTML_OUTPUT = html +HTML_FILE_EXTENSION = .html +HTML_HEADER = dox_setup/header.html +HTML_FOOTER = dox_setup/footer.html +HTML_STYLESHEET = dox_setup/stylesheet.css +HTML_ALIGN_MEMBERS = YES +GENERATE_HTMLHELP = NO +CHM_FILE = +HHC_LOCATION = +GENERATE_CHI = NO +BINARY_TOC = NO +TOC_EXPAND = NO +DISABLE_INDEX = NO +ENUM_VALUES_PER_LINE = 4 +GENERATE_TREEVIEW = YES +TREEVIEW_WIDTH = 250 +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- +GENERATE_LATEX = NO +LATEX_OUTPUT = latex +LATEX_CMD_NAME = latex +MAKEINDEX_CMD_NAME = makeindex +COMPACT_LATEX = YES +PAPER_TYPE = letter +EXTRA_PACKAGES = bm +LATEX_HEADER = +PDF_HYPERLINKS = NO +USE_PDFLATEX = NO +LATEX_BATCHMODE = YES +LATEX_HIDE_INDICES = NO +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- +GENERATE_RTF = NO +RTF_OUTPUT = rtf +COMPACT_RTF = NO +RTF_HYPERLINKS = NO +RTF_STYLESHEET_FILE = +RTF_EXTENSIONS_FILE = +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- +GENERATE_MAN = NO +MAN_OUTPUT = man +MAN_EXTENSION = .3 +MAN_LINKS = NO +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- +GENERATE_XML = NO +XML_OUTPUT = xml +XML_SCHEMA = +XML_DTD = +XML_PROGRAMLISTING = YES +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- +GENERATE_AUTOGEN_DEF = NO +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- +GENERATE_PERLMOD = NO +PERLMOD_LATEX = NO +PERLMOD_PRETTY = YES +PERLMOD_MAKEVAR_PREFIX = +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- +ENABLE_PREPROCESSING = YES +MACRO_EXPANSION = NO +EXPAND_ONLY_PREDEF = NO +SEARCH_INCLUDES = YES +INCLUDE_PATH = +INCLUDE_FILE_PATTERNS = +PREDEFINED = +EXPAND_AS_DEFINED = +SKIP_FUNCTION_MACROS = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- +TAGFILES = +GENERATE_TAGFILE = +ALLEXTERNALS = NO +EXTERNAL_GROUPS = YES +PERL_PATH = /usr/bin/perl +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- +CLASS_DIAGRAMS = YES +HIDE_UNDOC_RELATIONS = YES +HAVE_DOT = YES +CLASS_GRAPH = YES +COLLABORATION_GRAPH = YES +UML_LOOK = NO +TEMPLATE_RELATIONS = YES +INCLUDE_GRAPH = YES +INCLUDED_BY_GRAPH = YES +CALL_GRAPH = YES +GRAPHICAL_HIERARCHY = YES +DOT_IMAGE_FORMAT = gif +DOT_PATH = +DOTFILE_DIRS = +MAX_DOT_GRAPH_WIDTH = 1024 +MAX_DOT_GRAPH_HEIGHT = 1024 +MAX_DOT_GRAPH_DEPTH = 0 +GENERATE_LEGEND = YES +DOT_CLEANUP = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- +SEARCHENGINE = NO diff --git a/README b/README new file mode 100644 index 00000000..7a86f463 --- /dev/null +++ b/README @@ -0,0 +1,68 @@ + + +To build: + +for the impatient: cd src; gmake; +for the slightly less impatient: cd src; gmake PLATFORM=ARCH; + +NOTE: The build system currently requires GNU make. This can usually be called +as 'make' or 'gmake'. + +There are several makefile stubs in make/. You can look for your architecture +there or roll your own. Typing 'make' (or possibly gmake) without any arguments +will cause the build program to look for `uname -s`.mk(for example, on Linux, it +will look for Linux.mk). You can choose the platform by typing 'make PLATFORM=arch'. + +There are various variables to set in the .mk files. The most important are +CXX and CXXFLAGS; the rest are performance and debugging-related(these are +also very important in large calculations!) See make/Linux.mk for an example +of a fairly well-optimized .mk file. + +Makefile variables: + +CXX: C++ compiler. For example, for a serial compile, set this to g++. For +parallel, set it to mpiCC. + +CXXFLAGS: Flags to pass to the compiler. Put optimization (-O2) flags, etc +here. Must also include the option "$(INCLUDEPATH)" + +DEBUG: Define any debugging flags here. An optimized DEBUG might be +'-DNDEBUG'. A safe and slow DEBUG could be +'-DDEBUG_WRITE -DRANGE_CHECKING' + +LDFLAGS: Linker flags. Usually you don't need anything here, but some +compilers need '-lm' for the math libraries. + +BLAS_LIBS: The BLAS libraries(for example: -L/usr/lib -lcblas + +LAPACK_LIBS: LAPACK libs(as BLAS) (ex. -L/opt/lapack/lib -llapack) + +LAPACK_INCLUDE: LAPACK headers (for examples -I/opt/lapack/ + + +DEPENDMAKER: If you have gcc, it should be g++ -MM -I $(INCLUDEPATH). + + +List of preprocessor flags(these may be defined by -D[FLAG] with most +compilers. List them in the CXXFLAGS variable along with any optimization +flags.) + +DEBUG_WRITE: Enable extra debugging output. + +RANGE_CHECKING: Enable range checking of arrays. Big performance hit if you +turn this on! + +NDEBUG: Turn off assert()'s in code. For less safety and better performance +set this flag. + +USE_BLAS: Enable usage of CBLAS libraries. This will enable BLAS in some +of the linear algebra routine and enable BLAS_MO, which is a very fast MO +evaluator for some archetectures(Itanium is one that really benefits from this). +You must also set the BLAS_LIBS and BLAS_INCLUDE variables. + +USE_LAPACK: Enables usage of LAPACK libraries in pw2lcao. It's not used +in the main program, but improves pw2lcao's performance by several orders of +magnitude. You must also set the LAPACK_LIBS and BLAS_INCLUDE variables. + +USE_MPI: Enable use of MPI parallelization. For large calculations, this is +quite necessary. diff --git a/docs/Doxyfile b/docs/Doxyfile new file mode 100644 index 00000000..e68ea26c --- /dev/null +++ b/docs/Doxyfile @@ -0,0 +1,209 @@ +# Doxyfile 1.3.6 + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- +PROJECT_NAME = qwalk +PROJECT_NUMBER = +OUTPUT_DIRECTORY = releasedoc +OUTPUT_LANGUAGE = English +USE_WINDOWS_ENCODING = NO +BRIEF_MEMBER_DESC = YES +REPEAT_BRIEF = YES +ABBREVIATE_BRIEF = +ALWAYS_DETAILED_SEC = NO +INLINE_INHERITED_MEMB = NO +FULL_PATH_NAMES = NO +STRIP_FROM_PATH = +SHORT_NAMES = NO +JAVADOC_AUTOBRIEF = NO +MULTILINE_CPP_IS_BRIEF = NO +DETAILS_AT_TOP = YES +INHERIT_DOCS = YES +DISTRIBUTE_GROUP_DOC = NO +TAB_SIZE = 8 +ALIASES = +OPTIMIZE_OUTPUT_FOR_C = NO +OPTIMIZE_OUTPUT_JAVA = NO +SUBGROUPING = YES +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- +EXTRACT_ALL = YES +EXTRACT_PRIVATE = YES +EXTRACT_STATIC = NO +EXTRACT_LOCAL_CLASSES = YES +HIDE_UNDOC_MEMBERS = NO +HIDE_UNDOC_CLASSES = NO +HIDE_FRIEND_COMPOUNDS = NO +HIDE_IN_BODY_DOCS = NO +INTERNAL_DOCS = NO +CASE_SENSE_NAMES = YES +HIDE_SCOPE_NAMES = NO +SHOW_INCLUDE_FILES = YES +INLINE_INFO = YES +SORT_MEMBER_DOCS = YES +SORT_BRIEF_DOCS = NO +SORT_BY_SCOPE_NAME = NO +GENERATE_TODOLIST = YES +GENERATE_TESTLIST = YES +GENERATE_BUGLIST = YES +GENERATE_DEPRECATEDLIST= YES +ENABLED_SECTIONS = +MAX_INITIALIZER_LINES = 30 +SHOW_USED_FILES = YES +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- +QUIET = NO +WARNINGS = YES +WARN_IF_UNDOCUMENTED = YES +WARN_IF_DOC_ERROR = YES +WARN_FORMAT = "$file:$line: $text" +WARN_LOGFILE = +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- +INPUT = +FILE_PATTERNS = mainpage.html */guide/*.html +RECURSIVE = YES +EXCLUDE = */releasedoc/html/*.html +EXCLUDE_SYMLINKS = NO +EXCLUDE_PATTERNS = +EXAMPLE_PATH = +EXAMPLE_PATTERNS = +EXAMPLE_RECURSIVE = NO +IMAGE_PATH = +INPUT_FILTER = +FILTER_SOURCE_FILES = NO +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- +SOURCE_BROWSER = NO +INLINE_SOURCES = NO +STRIP_CODE_COMMENTS = NO +REFERENCED_BY_RELATION = NO +REFERENCES_RELATION = NO +VERBATIM_HEADERS = YES +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- +ALPHABETICAL_INDEX = YES +COLS_IN_ALPHA_INDEX = 5 +IGNORE_PREFIX = +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- +GENERATE_HTML = YES +HTML_OUTPUT = html +HTML_FILE_EXTENSION = .html +HTML_HEADER = dox_setup/header.html +HTML_FOOTER = dox_setup/footer.html +HTML_STYLESHEET = dox_setup/stylesheet.css +HTML_ALIGN_MEMBERS = YES +GENERATE_HTMLHELP = NO +CHM_FILE = +HHC_LOCATION = +GENERATE_CHI = NO +BINARY_TOC = NO +TOC_EXPAND = NO +DISABLE_INDEX = YES +ENUM_VALUES_PER_LINE = 4 +GENERATE_TREEVIEW = NO +TREEVIEW_WIDTH = 250 +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- +GENERATE_LATEX = NO +LATEX_OUTPUT = latex +LATEX_CMD_NAME = latex +MAKEINDEX_CMD_NAME = makeindex +COMPACT_LATEX = YES +PAPER_TYPE = letter +EXTRA_PACKAGES = bm +LATEX_HEADER = +PDF_HYPERLINKS = NO +USE_PDFLATEX = NO +LATEX_BATCHMODE = YES +LATEX_HIDE_INDICES = NO +#--------------------------------------------------------------------------- +# configuration options related to the RTF output +#--------------------------------------------------------------------------- +GENERATE_RTF = NO +RTF_OUTPUT = rtf +COMPACT_RTF = NO +RTF_HYPERLINKS = NO +RTF_STYLESHEET_FILE = +RTF_EXTENSIONS_FILE = +#--------------------------------------------------------------------------- +# configuration options related to the man page output +#--------------------------------------------------------------------------- +GENERATE_MAN = NO +MAN_OUTPUT = man +MAN_EXTENSION = .3 +MAN_LINKS = NO +#--------------------------------------------------------------------------- +# configuration options related to the XML output +#--------------------------------------------------------------------------- +GENERATE_XML = NO +XML_OUTPUT = xml +XML_SCHEMA = +XML_DTD = +XML_PROGRAMLISTING = YES +#--------------------------------------------------------------------------- +# configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- +GENERATE_AUTOGEN_DEF = NO +#--------------------------------------------------------------------------- +# configuration options related to the Perl module output +#--------------------------------------------------------------------------- +GENERATE_PERLMOD = NO +PERLMOD_LATEX = NO +PERLMOD_PRETTY = YES +PERLMOD_MAKEVAR_PREFIX = +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- +ENABLE_PREPROCESSING = YES +MACRO_EXPANSION = NO +EXPAND_ONLY_PREDEF = NO +SEARCH_INCLUDES = YES +INCLUDE_PATH = +INCLUDE_FILE_PATTERNS = +PREDEFINED = +EXPAND_AS_DEFINED = +SKIP_FUNCTION_MACROS = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- +TAGFILES = +GENERATE_TAGFILE = +ALLEXTERNALS = NO +EXTERNAL_GROUPS = YES +PERL_PATH = /usr/bin/perl +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- +CLASS_DIAGRAMS = YES +HIDE_UNDOC_RELATIONS = YES +HAVE_DOT = NO +CLASS_GRAPH = YES +COLLABORATION_GRAPH = YES +UML_LOOK = NO +TEMPLATE_RELATIONS = YES +INCLUDE_GRAPH = YES +INCLUDED_BY_GRAPH = YES +CALL_GRAPH = NO +GRAPHICAL_HIERARCHY = YES +DOT_IMAGE_FORMAT = gif +DOT_PATH = +DOTFILE_DIRS = +MAX_DOT_GRAPH_WIDTH = 1024 +MAX_DOT_GRAPH_HEIGHT = 1024 +MAX_DOT_GRAPH_DEPTH = 0 +GENERATE_LEGEND = YES +DOT_CLEANUP = YES +#--------------------------------------------------------------------------- +# Configuration::additions related to the search engine +#--------------------------------------------------------------------------- +SEARCHENGINE = NO diff --git a/docs/diff_f90.txt b/docs/diff_f90.txt new file mode 100644 index 00000000..5af9414a --- /dev/null +++ b/docs/diff_f90.txt @@ -0,0 +1,11 @@ +Differences necessary to get identical numbers(from the stable version) + +f90 changes: +needs higher precision pi and dqrt in orb3.f90 +more accurate multiplier in ulec +remove exreno factor in crosen.f90(or set it to a constant equal to the norm +in cpp) +reorder random numbers in nonloc.f90 + +cpp changes: +reorder the random numbers in vmc diff --git a/docs/dox_setup/footer.html b/docs/dox_setup/footer.html new file mode 100644 index 00000000..2fa79ca5 --- /dev/null +++ b/docs/dox_setup/footer.html @@ -0,0 +1,4 @@ +
+Generated on $datetime for $projectname by doxygen $doxygenversion
+ + diff --git a/docs/dox_setup/header.html b/docs/dox_setup/header.html new file mode 100644 index 00000000..29c3eb4f --- /dev/null +++ b/docs/dox_setup/header.html @@ -0,0 +1,5 @@ + + +$title + + diff --git a/docs/dox_setup/stylesheet.css b/docs/dox_setup/stylesheet.css new file mode 100644 index 00000000..0ce75210 --- /dev/null +++ b/docs/dox_setup/stylesheet.css @@ -0,0 +1,212 @@ +H1 { + text-align: center; + font-family: Arial, Helvetica, sans-serif; +} +H2 { + font-family: Geneva, Arial, Helvetica, sans-serif; +} +CAPTION { font-weight: bold } +DIV.qindex { + width: 100%; + background-color: #eeeeff; + border: 1px solid #B0B0B0; + text-align: center; + margin: 2px; + padding: 2px; +} +A.qindex { + text-decoration: none; + font-weight: bold; + color: #1A419D; + padding: 2px; +} +A.qindex:visited { + text-decoration: none; + font-weight: bold; + color: #1A419D + padding: 2px; +} +A.qindex:hover { + text-decoration: none; + background-color: #ddddff; + padding: 2px; +} +A.qindexHL { + text-decoration: none; + font-weight: bold; + background-color: #6666cc; + color: #ffffff; + padding: 2 6px; + border: 1px double #9295C2; + } +A.qindexHL:hover { + text-decoration: none; + background-color: #6666cc; + color: #ffffff; + padding: 2px 6px; +} +A.qindexHL:visited { text-decoration: none; background-color: #6666cc; color: #ffffff } +A.el { text-decoration: none; font-weight: bold } +A.elRef { font-weight: bold } +A.code { text-decoration: none; font-weight: normal; color: #1A419D} +A.codeRef { font-weight: normal; color: #1A419D} +A:hover { text-decoration: none; background-color: #f2f2ff } +DL.el { margin-left: -1cm } +PRE.fragment { + border: 1px solid #CCCCCC; + background-color: #f5f5f5; + margin-top: 4px; + margin-bottom: 4px; + margin-left: 2px; + margin-right: 8px; + padding-left: 6px; + padding-right: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +DIV.fragment { + border: 1px solid #CCCCCC; + background-color: #f5f5f5; + padding: 6px; +} +DIV.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px } +TD.md { background-color: #F4F4FB; font-weight: bold; } +TD.mdname1 { background-color: #F4F4FB; font-weight: bold; color: #602020; } +TD.mdname { background-color: #F4F4FB; font-weight: bold; color: #602020; width: 600px; } +DIV.groupHeader { margin-left: 16px; margin-top: 12px; margin-bottom: 6px; font-weight: bold } +DIV.groupText { margin-left: 16px; font-style: italic; font-size: smaller } +BODY { + background: white; + color: black; + margin-right: 20px; + margin-left: 20px; +} +TD.indexkey { + background-color: #eeeeff; + font-weight: bold; + padding-right : 10px; + padding-top : 2px; + padding-left : 10px; + padding-bottom : 2px; + margin-left : 0px; + margin-right : 0px; + margin-top : 2px; + margin-bottom : 2px; + border: 1px solid #CCCCCC; +} +TD.indexvalue { + background-color: #eeeeff; + font-style: italic; + padding-right : 10px; + padding-top : 2px; + padding-left : 10px; + padding-bottom : 2px; + margin-left : 0px; + margin-right : 0px; + margin-top : 2px; + margin-bottom : 2px; + border: 1px solid #CCCCCC; +} +TR.memlist { + background-color: #f0f0f0; +} +P.formulaDsp { text-align: center; } +IMG.formulaDsp { } +IMG.formulaInl { vertical-align: middle; } +SPAN.keyword { color: #008000 } +SPAN.keywordtype { color: #604020 } +SPAN.keywordflow { color: #e08000 } +SPAN.comment { color: #800000 } +SPAN.preprocessor { color: #806020 } +SPAN.stringliteral { color: #002080 } +SPAN.charliteral { color: #008080 } +.mdTable { + border: 1px solid #868686; + background-color: #F4F4FB; +} +.mdRow { + padding: 8px 10px; +} +.mdescLeft { + font-size: smaller; + font-family: Arial, Helvetica, sans-serif; + background-color: #FAFAFA; + padding-left: 8px; + border-top: 1px none #E0E0E0; + border-right: 1px none #E0E0E0; + border-bottom: 1px none #E0E0E0; + border-left: 1px none #E0E0E0; + margin: 0px; +} +.mdescRight { + font-size: smaller; + font-family: Arial, Helvetica, sans-serif; + font-style: italic; + background-color: #FAFAFA; + padding-left: 4px; + border-top: 1px none #E0E0E0; + border-right: 1px none #E0E0E0; + border-bottom: 1px none #E0E0E0; + border-left: 1px none #E0E0E0; + margin: 0px; + padding-bottom: 0px; + padding-right: 8px; +} +.memItemLeft { + padding: 1px 0px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-style: solid; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + background-color: #FAFAFA; + font-family: Geneva, Arial, Helvetica, sans-serif; + font-size: 12px; +} +.memItemRight { + padding: 1px 0px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-style: solid; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + background-color: #FAFAFA; + font-family: Geneva, Arial, Helvetica, sans-serif; + font-size: 13px; +} +.search { color: #003399; + font-weight: bold; +} +FORM.search { + margin-bottom: 0px; + margin-top: 0px; +} +INPUT.search { font-size: 75%; + color: #000080; + font-weight: normal; + background-color: #eeeeff; +} +TD.tiny { font-size: 75%; +} +a { + color: #252E78; +} +a:visited { + color: #3D2185; +} diff --git a/docs/guide/Basis_functionDoc.html b/docs/guide/Basis_functionDoc.html new file mode 100644 index 00000000..52e731e9 --- /dev/null +++ b/docs/guide/Basis_functionDoc.html @@ -0,0 +1,349 @@ + +/* +Let's mostly put the basis function references here, since they should +be relatively short +*/ + + +/*! \page Basis_functionDoc Basis function + + +\section description Description + +Basis_function is the base category for a number of simple three-dimensional +functions that can be used in many places throughout the code, usually as +expansions. The first keyword in each section is taken as the name +of the origin of the function, and the second is the type of function. +Further keywords are specific to the type of function. + +\section plugins Plugins + +\ref Cubic_splineDoc + +\ref Cutoff_cuspDoc + +\ref Exponent_cuspDoc + +\ref Gaussian_functionDoc + +\ref Mesh_functionDoc + +\ref Pade_functionDoc + +\ref Planewave_functionDoc + +\ref Poly_pade_functionDoc + +\ref Rgaussian_functionDoc + +\ref Step_functionDoc + +*/ + + +//###################################################################### + + +/*! \page Cubic_splineDoc Cubic spline + +Keyword: AOSPLINE + +\section description Description + + +\section options Options + +One of GAMESS or SPLINE is required + +\subsection reqopt Required + + +
Option Type Description +
GAMESS Section + input in roughly gamess format, as an expansion in Gaussians. There +is no normalization, though, so it looks like +
S 1
1.0 2.0
+but not like +
S 1 1.0
1.0 2.0
+ + +
SPLINE Section A listing of (x,y) pairs to fit to a spline +
+ +\subsection optopt Optional + + +
Option Type Default + Description +
NORENORMALIZE Keyword off prevents normalization of the basis functions to the GAMESS standard. +
CUTOFF Float infinity + forces a cutoff at a specified distance, with a smooth + cutoff function. Otherwise, a safe cutoff is calculated + automatically. +
NORMTYPE string GAMESSNORM + specify the normalization (GAMESSNORM or CRYSTAL) +
+ +*/ + +//###################################################################### + + +/*! \page Cutoff_cuspDoc Cutoff cusp + +Keyword: CUTOFF_CUSP + +\section description Description + +The function \f$ f(r)=c*p/(1+\gamma*p) \f$, where +\f$ p=z-z^2+z^3/3 \f$, \f$ z=r/{rcut} \f$, \f$ \gamma \f$ is the +curvature, and c is the cusp. + +\section options Options + +\subsection reqopt Required + + +
Option Type Description +
CUSP Float + What the derivative should be at r=0 +
GAMMA Float + a measure of the curvature, allowed to be (-1, infinity) +
RCUT Float + Distance where the function should be zero. + +
+ +*/ + +//###################################################################### + +/*! \page Exponent_cuspDoc Exponent cusp + +Keyword: EXPONENTIAL_CUSP + +\section description Description + +The function \f$ f(r)=-c*exp(-\gamma*r) \f$, where \f$ \gamma \f$ is the +curvature and c is the cusp + +\section options Options + +\subsection reqopt Required + + +
Option Type Description +
CUSP Float + What the derivative should be at r=0 +
GAMMA Float + a measure of the curvature, allowed to be (0, infinity) +
+ +*/ + +//###################################################################### + +/*! \page Gaussian_functionDoc Gaussian function + +Keyword: GAUSSIAN + +\section description Description + +The function \f$ f(r)= e^{-\alpha*r^2} \f$ + +\section options Options + +\subsection reqopt Required + + +
Option Type Description +
ALPHA Section + List of exponents to use(floats). These are treated as uncontracted + Gaussians in an optimization. +
+ +\subsection optopt Optional + + +
Option Type Default + Description +
CUTOFF Float infinity + force cutoff of the gaussians to some distance +
SMOOTHING Float 1.2 + control the distance over which we smooth the cutoff +
+ +*/ + +//###################################################################### + +/*! \page Mesh_functionDoc Mesh function + +Keyword: MESH + +\section description Description + +Three-dimensional mesh with on-the-fly interpolation + +\section options Options + +\subsection reqopt Required + + +
Option Type Description +
VALPLT Section + List of value plot files from JEEP +
DXPLT Section + List of x-derivative plot files from JEEP +
DXPLT Section + List of y-derivative plot files from JEEP +
DXPLT Section + List of z-derivative plot files from JEEP +
LAPPLT Section + List of laplacian plot files from JEEP + +
+ +*/ + +//###################################################################### + +/*! \page Pade_functionDoc Pade function + +Keyword: PADE + +\section description Description + +Function of the form: +\f[ +a_n(r) = \left( \frac{\alpha_nr}{1+\alpha_nr} \right)^2 +\f] +where \f$ \alpha_n = \alpha_0 / 2^{k}, 0 < n < nmax \f$ + + +\section options Options + +\subsection reqopt Required + + +
Option Type Description +
ALPHA0 Float + alpha_0 in the above equation +
NFUNC Integer Number of functions to create +
+ +*/ + +//###################################################################### + + +/*! \page Planewave_functionDoc Plane wave function + +Keyword: PLANEWAVE + +\section description Description + +Interleaves cos(g*r) and sin(g*r) for a set of g-vectors. + +\section options Options + +\subsection reqopt Required + + +
Option Type Description +
GVECTOR Section + List of triples of g-vectors to be used. +
+ +*/ + +//###################################################################### + +/*! \page Poly_pade_functionDoc Polynomial Pade function + +Keyword: POLYPADE + +\section description Description + +Function of the form: +\f[ +a_n(r) = \frac{1-zpp(r/b_0)}{1+\beta zpp(r/b_0)} +\f] +where +\f[ +zpp(x)=x^2(6-8x+3x^2) +\f] + +\f$ b_0 \f$ is the cutoff radius. + + +\section options Options + +\subsection reqopt Required + + +
Option Type Description +
RCUT Float + Cutoff radius +
BETA0 Float + Base curvature +
NFUNC Integer + Number of functions to generate +
+ +*/ + +//###################################################################### + +/*! \page Rgaussian_functionDoc Rgaussian function + +Keyword: RGAUSSIAN + +\section description Description + + Function of the form: +\f[ +a_n(r) = \sum c_i r^{n_i} e^{-\alpha_i*r^2} +\f] + + +\section options Options + +\subsection reqopt Required + + +
Option Type Description +
OLDQMC Section + A section from Lubos's psp format, ie,
+zeff number_l_vals
+num_s num_p num_local
+c n+2 alpha #for s channel
+...
+.. #for p channel
+... ...
+.. #local channel
+
+ +*/ + +//###################################################################### + +/*! \page Step_functionDoc Step function + +Keyword: STEP + +\section description Description + +Unit step function that is one until some distance + +\section options Options + +\subsection reqopt Required + + +
Option Type Description +
Cutoff Float + distance after which this function is zero +
+ +*/ diff --git a/docs/guide/CenterDoc.html b/docs/guide/CenterDoc.html new file mode 100644 index 00000000..78bfac2b --- /dev/null +++ b/docs/guide/CenterDoc.html @@ -0,0 +1,33 @@ +/*! \page CenterDoc Center set + + +\section description Description + + + +\section options Options + + +\subsection reqopt Required +One of these: + + +
Option Type Description +
USEATOMS Keyword + Use the atomic coordinates given in \ref SystemDoc +
USEGLOBAL Keyword + Use the centers generated by the \ref SystemDoc . In molecules, this will + just be the atomic centers, but in solids, it will include ghost + atoms. +
READ String + Read the center information from the file given. The format is:
+ncenters
+label1 x1 y1 z1
+label2 x2 y2 z2
+.
+.
+.
+ +
+ +*/ diff --git a/docs/guide/Crystal2qmcDoc.html b/docs/guide/Crystal2qmcDoc.html new file mode 100644 index 00000000..3f34901d --- /dev/null +++ b/docs/guide/Crystal2qmcDoc.html @@ -0,0 +1,119 @@ +/*! \page crystal2qmcDoc Crystal to qmc + + +\section description Description + +Basic usage: crystal2qmc -o [outputroot] [crystal output file]
+Additional options:
+-fort10file [filename] : Read from the output created by the +readcrys10.f utility and match the orbitals to the one in +the crystal output file. These are generally more accurate than the ones +in the output file.
+ + + +\section options Options + +\subsection crys98 Crystal98 + +One needs to put the options:
+
+COORPRT
+
+at the end of the geometry section, and
+ +
+PRINTOUT
+BASISSET
+EIGENVAL
+-1
+EIGENVEC
+-1
+END
+
+in the third section(the one after the basis set section). + +\subsection crys03 Crystal2003 + + For crystal 2003, put
+
+PRINTOUT
+EIGENVAL
+-1
+EIGENVEC
+-100
+END
+
+in the third section as above. To get the correct basis set, use the properties input:
+
+BASISSET
+0
+END
+
+and cat the output into the end of the output file. A script to do this is at the end of this section. +The -100 under EIGENVEC prints out the first 100 k-points used. If you end up with more k-points, +increase the absolute value of this number. At least for 2003(and maybe 98), crystal2qmc can find all the +real k-points and prepare an input file for qwalk at non-zero k-points. This can reduce the finite +size error in the kinetic energy significantly if you choose your k-point well(in a cubic supercell, the +111 direction minimizes the error, for example). + +To use the fort10file option with crystal98 or 2003, one must use NOSYMADA in +the last section. This turns off a feature that boosts the speed quite a bit in certain circumstances, but +mangles the wavefunction in fort.10.
+

+

+Further considerations:
+Finite size errors are a bit more problematic within QMC, since we do the calculation for only one +k-point, and there are finite size effects related to the electron correlation hole that (as far as I know) +aren't as bad in LDA/HF. See some papers by the group at Cambridge about this(need to add references). +So, we have to use a supercell, at least 2x2x2. +

+ + +\subsection script Script to run crystal2003 + +Make sure to put the PRINTOUT, etc in the input file.. Also, you may need to change SCRATCH, CRYSTAL, and +PROPERTIES to reflect the location of these files/directories on your system. +
+#!/bin/bash
+
+
+SCRATCH=/state/partition1/scratch/$USER
+if [ ! -e $SCRATCH ]
+    then
+    #first try to make the scratch directory.
+    mkdir $SCRATCH
+    #if it's still not there, error
+    if [ ! -e $SCRATCH ]
+    then echo "Scratch directory $SCRATCH doesn't exist and I couldn't make it"
+    exit 1;
+    fi
+fi
+
+CRYSTAL=/home/apps/crystal2003/crystal
+PROPERTIES=/home/apps/crystal2003/properties
+CURRDIR=`pwd`
+echo $CURRDIR
+
+inputfile=$(basename $1)
+echo $inputfile
+mkdir $SCRATCH/$inputfile
+cp $1 $SCRATCH/$inputfile/
+
+if [ -e fort.20 ]
+    then cp fort.20 $SCRATCH/$inputfile
+fi
+
+cd $SCRATCH/$inputfile
+
+$CRYSTAL < $inputfile > $CURRDIR/$inputfile.o
+echo "BASISSET" > prop.in
+echo "0" >> prop.in
+echo "END" >> prop.in
+echo "" >> prop.in
+$PROPERTIES < prop.in >> $CURRDIR/$inputfile.o
+cp fort.9 $CURRDIR/$inputfile.9
+cp fort.10 $CURRDIR/$inputfile.10
+rm -Rf $SCRATCH/$inputfile
+
+*/ diff --git a/docs/guide/Dmc_methodDoc.html b/docs/guide/Dmc_methodDoc.html new file mode 100644 index 00000000..35ae7fec --- /dev/null +++ b/docs/guide/Dmc_methodDoc.html @@ -0,0 +1,95 @@ +/*! \page Dmc_methodDoc Diffusion Monte Carlo method + +Keyword: DMC + +\section description Description + +In this implementation of DMC, we use something similar to the Umrigar +Nightingale, Runge paper, with some modifications. Electrons are moved +one-by-one, and there is an effective timestep for the branching part of +the green's function. We use a modification of the branching algorithm +that ensures a constant number of walkers as follows: + +Every few DMC steps, search for high weights. If one with greater than +some threshold(1.8) do: + + +This ensures a constant number of walkers. This algorithm is done on each +processor independently, so there can be nodes with all high weight walkers +and with all low-weight walkers. To mitigate this problem, we periodically +exchange walkers between nodes so that the total weight is more or less +evenly distributed. + + +\section options Options + +\subsection reqopt Required + + +
Option Type Description + +
NCONFIG Integer The desired average number of walkers +per node +
NSTEP Integer Number of average points to take in a block. + Should be such that NSTEP*TIMESTEP is approximately 1. +
NBLOCK Integer Number of blocks to take +
TIMESTEP Float A measure of how large each move +should be. Adjust such that the acceptance ratio is about .99. Acceptance ratio +is just a general guide, however, and it's useful to do several time steps if you +need highly accurate results. +
READCONFIG String Read from a configuration file +previously written by STORECONFIG. If there are more configurations +than NCONFIG, DMC will read NCONFIG. This should either be from a VMC +run or a previous DMC run. +
+ +\subsection optopt Optional + + +
Option Type Default + Description +
STORECONFIG String none Write the configurations and DMC +weights to this file every block. In parallel, each processor will write its configurations to this file with _n appended, where n is the processor number. +
DYNAMICS Section SPLIT + choose a dynamics generator. possible options are { SPLIT }, {UNR } Use UNR when you don't have pseudopotentials +
+ +The following options are advanced, and can be left as they are with no ill effects. +In other words, don't change these unless you know what you're doing! + + + + +
LOW_IO Flag Off Try to limit the amount of I/O, which +is useful when the run is faster than the I/O, or in the case of writing to +flaky NFS servers that are so prevalent. Currently it just turns off writing +configurations in intermediate blocks, only writing at the end of the run. +
FEEDBACK Float 1.0 + The strength of the population control. Set it to roughly 1/n, +where n is the number of steps that it should take to return the population +to the average value. +
START_FEEDBACK Float 1.0 + The strength of the population control when reading in from + a checkpoint file. This is mostly useful for CDMC, where it should + be set to 10. +
FEEDBACK_INTERVAL Integer 5 + Number of steps to wait before doing population control. + +
BRANCH_START_CUTOFF Float 10 + When a walker's energy is very low, we slow down the accumulation + of weights, eventually cutting it off. The cutoff starts at + BRANCH_START_CUTOFF*sigma, where sigma is the standard deviation + of the local energy. When doing highly accurate calculations, it's + sometimes the case that eref appears to be biased. One can increase + this value, which should alleviate the problem. +
+ + + +*/ diff --git a/docs/guide/DynamicsDoc.html b/docs/guide/DynamicsDoc.html new file mode 100644 index 00000000..0299a890 --- /dev/null +++ b/docs/guide/DynamicsDoc.html @@ -0,0 +1,28 @@ +/*! \page DynamicsDoc Dynamics + +\section description Description + +A dynamics generator for monte carlo processes. Different dynamics +are currently somewhat experimental, but the splitting rejection +method is relatively stable, so I'll list it here. (Keyword SPLIT) The +defaults are close to the optimal ones, so it's best to leave this alone +unless you know what you're doing. + +\section options Options + + +\subsection optopt Optional + + +
Option Type Default + Description +
DEPTH Integer 1 How many times to try to make a step. +
DIVIDER Float 1.0 +
DRIFT_TYPE String CYRUS The drift limiter. Can be either CYRUS or CUTOFF. Note that DMC is much less efficient when used with a CUTOFF +limiter. +
+ +\subsection expopt Experimental + + +*/ diff --git a/docs/guide/FAQ.html b/docs/guide/FAQ.html new file mode 100644 index 00000000..a9deec3f --- /dev/null +++ b/docs/guide/FAQ.html @@ -0,0 +1,24 @@ +/*! \page FAQ FAQ + +\section faq FAQ + +\ref faq1 + +\subsection faq1 How do I choose the timestep? +

+In VMC, the only concern with the timestep is the time it takes to decorrelate +each point in the random walk. There are two competing effects that prevent +this: 1) if the steps are too small, then the adjoining points are too close +and 2) if they are too large, then the rejection rate increases, causing a +repetition of a point in the walk. A general rule of thumb is to make the +acceptance ratio around 0.60, although the ideal number can change from system +to system. +

+

+In DMC, the propagator only works in short timesteps, so you should +choose the time step so that the acceptance ratio is roughly 0.99. For +very accurate calculations, more might be necessary; you may need to do +several calculations at different time steps to get a feel for the bias. +

+ +*/ \ No newline at end of file diff --git a/docs/guide/Gamess2qmcDoc.html b/docs/guide/Gamess2qmcDoc.html new file mode 100644 index 00000000..35eb3c32 --- /dev/null +++ b/docs/guide/Gamess2qmcDoc.html @@ -0,0 +1,19 @@ +/*! \page gamess2qmcDoc Gamess to qmc + + +\section description Description + +Basic usage: gamess2qmc -o [outputroot] [gamess output root]
+Additional options:
+ +
Option Description +
-o [outputroot] Use [outputroot] as the base for the GOS run. +Gamess2qmc will then create files like outputroot.slater, etc. +
-compare_punch [filename] Compares the orbitals in the current punch file to the one specified +here. Will print what orbitals have changed/rotated, and if any cannot be +mapped back between the two wavefunctions. +
-virtual [number] Include this number of virtual orbitals into the orb file. Defaults to 3. +
+ + +*/ diff --git a/docs/guide/InputDoc.html b/docs/guide/InputDoc.html new file mode 100644 index 00000000..b785154d --- /dev/null +++ b/docs/guide/InputDoc.html @@ -0,0 +1,35 @@ +/*! \page InputDoc Input Overview + + +

Input Files

+Basic rules:
+ +*/ diff --git a/docs/guide/Jeep2qmcDoc.html b/docs/guide/Jeep2qmcDoc.html new file mode 100644 index 00000000..4415893e --- /dev/null +++ b/docs/guide/Jeep2qmcDoc.html @@ -0,0 +1,28 @@ +/*! \page jeep2qmcDoc Jeep to qmc + + +\section description Description + +Basic usage: jeep2qmc -ecut [ecut in Hartrees] -o [outputroot] [jeep output root]
+ +Expects a .sys and .wf file with the given root. Note that if you don't +use the -o option, the sys file will be written over, so be careful. + +Additional options:
+ +
Option Description + +
-o [outputroot] + Use [outputroot] as the base for the GOS run. +jeep2qmc will then create files like outputroot.slater, etc. + +
-lcao [basis file] + Do not write out a plane wave wave function, but instead set up +a \ref pw2lcaoDoc input file. Except on very small systems, this is probably +the best way to perform a QMC calculation, since plane waves will take +a very long time. + +
+ + +*/ diff --git a/docs/guide/Local_density_accumulatorDoc.html b/docs/guide/Local_density_accumulatorDoc.html new file mode 100644 index 00000000..d80ce520 --- /dev/null +++ b/docs/guide/Local_density_accumulatorDoc.html @@ -0,0 +1,53 @@ + + + +/*! \page Local_density_accumulatorDoc Local Density accumulator + + +\section description Description + +These are local functions that do not require wave function information and are generally too big to put into the log file and calculate error bars like normal local variables. Examples include the one-particle density, g(r), and S(k). The only well-tested object at the moment is the one-particle density. + +Plugins: + +\ref One_particle_densityDoc + +*/ + + + + +/*! \page One_particle_densityDoc One Particle Density + +keyword: DENSITY + +\section description Description + +Collects the one-particle density +\f$ \rho(r)=\int dr_2...dr_N \Psi^2(r,r_2,...,r_N) \f$ and +stores it in the Gaussian cube file format readable by VMD or +other quantum chemistry visualization software. + +\section options Options + +\subsection optopt Optional + + +
Option Type Default + Description +
OUTPUTFILE String runid.cube Choose the file name of the cube file +
MIN Section special See MAX +
MAX Section special If MIN and/or MAX is not given, +and the system has open boundary conditions(that is, is a molecule), + they will be set either to { -3 -3 -3 }(for MIN) or { 3 3 3 }(for MAX). If +the system has periodic boundary conditions, then they will be set to the +smallest orthorhombic cell that includes the PBC cell. +
RESOLUTION Float .1 Specifies the resolution of the +density accumulation in bohrs. Larger resolutions will save on memory and +the surfaces will look smoother, although the smooth_cube utility will +also improve the appearance of isosurfaces. +
UP Flag off Plot only the spin up electrons +
DOWN Flag off Plot only the spin down electrons +
+ +*/ diff --git a/docs/guide/MO_matrixDoc.html b/docs/guide/MO_matrixDoc.html new file mode 100644 index 00000000..530f1de8 --- /dev/null +++ b/docs/guide/MO_matrixDoc.html @@ -0,0 +1,59 @@ +/*! \page MO_matrixDoc Molecular Orbital calculator + +Keyword: CUTOFF_MO, STANDARD_MO, BLAS_MO, and MO_1D + +\section description Description + +There are several plugins that both calculate molecular orbitals. The main +one, which should usually be used, is the cutoff MO, which takes advantage +of short-range basis functions and symmetry in the wavefunction to +drastically reduce the computation time, at least by a factor of N, in +some cases a factor of N2. The STANDARD_MO calculates exactly +the wave function given in the input, which is useful for sanity checking +and wavefunctions like plane waves, where almost no coefficients are zero +and the basis range is infinite. BLAS_MO is only usable if you compile +the BLAS linear algebra libraries into the code, and cuts off the basis +functions, but uses linear algebra routines to fill the molecular orbital +matrix. This gives formal scaling as O(N2), but can be much +faster than CUTOFF_MO in some circumstances(especially on Itanium processors). +These all take the same input. + +MO_1D is a special MO evaluator for one-dimensional systems, and takes +special input. + +\section options Options + +\subsection reqopt Required + + +
Option Type Description +
ORBFILE String A file containing the orbitals in format: +
+MO# AO#(for center) Center# Coeff#
+for all the MO's, then the keyword COEFFICIENTS, and a sequential +listing of all the values of the coefficients. + +
NMO Integer Number of molecular orbitals to read from the orb file. + +
BASIS Section input for a \ref Basis_functionDoc . Place as many of these as there are bases. + +
+ +\subsection optopt Optional + + +
Option Type Default + Description +
CENTERS Section CENTERS { USEATOMS } input for a \ref CenterDoc +
+ +\subsection expopt Experimental + + +
Option Type + Description +
OLDSOFILE String Read a basis function from an SO file from Lubos's qmc program. This overwrites a gaussian basis input, and is not robust enough to be useful except for debugging purposes. +
+ + +*/ diff --git a/docs/guide/Optimize_method2Doc.html b/docs/guide/Optimize_method2Doc.html new file mode 100644 index 00000000..623b7faa --- /dev/null +++ b/docs/guide/Optimize_method2Doc.html @@ -0,0 +1,70 @@ +/*! \page Optimize_method2Doc Optimize method2 + +Keyword: OPTIMIZE2 + +\section description Description +Uses Levenberg-Marquardt algorithm to minimize wavefunction's +energy/variance or mixture of both. It uses self-adjustable +damping parameter which is added to the diagonal of corresponding hessian. +Consequently a Newton step is performed to get new parameters. +(See C. J. Umrigar and C. Filippi. Phys. Rev. Lett. 94, 150201 (2005) ) + + +\section options Options + +\subsection reqopt Required + + +
Option Type Description +
NCONFIG Integer Number of configurations +
ITERATIONS Float + Number of iterations. Usually it converges within 10 iterations or so. +
EREF Float A best guess at the optimized energy +
READCONFIG String Read configurations from a file +
+ +\subsection optopt Optional + + +
Option Type Default + Description +
PSEUDOTEMP String runid.pseudo + Choose the filename for the temporary pseudopotential values. +Should be on a fast disk with lots of space +
WFOUTPUT String runid.wfout + Choose the filename to place an input deck for the final +wavefunction and intermediate ones as the optimization +continues. +
MINFUNCTION String VARIANCE + Choose the minimization function. Options are: + +VARIANCE (default) : \f$ \sum{(E_l - E_{ref})^2} \f$ + +ENERGY : \f$ \frac{1}{N} \sum { E_l } \f$ + +MIXED : \f$ mixing \frac{1}{N} \sum { E_l } + (1-mixing) \sum{(E_l - E_{ref})^2} \f$ + +For ENERGY or MIXED, USE_WEIGHTS is automatically turned on. +
USE_WEIGHTS Keyword off + Turn on correlated-sampling type reweighting +
MIXING Float 0.95 Mixing weight for energy contribution in mixed minimization + +
+ +\subsection expopt Experimental + +
Option Type Default + Description +
EXTENDED_WFOUTPUT Keyword off + Turn on printout of wavefunction after each step of optimization +
NFIXED_ITERATIONS Integer 4 + Number of iterations with number of configurations fixed +
MULTIPLICATIVE_FACTOR Integer 2 + Ratio by which the configurations will be increased after NFIXED_ITERATIONS +
START_NCONFIG Integer NCONFIG + Number of starting configurations +
+ + + +*/ diff --git a/docs/guide/Optimize_methodDoc.html b/docs/guide/Optimize_methodDoc.html new file mode 100644 index 00000000..e25f7a3a --- /dev/null +++ b/docs/guide/Optimize_methodDoc.html @@ -0,0 +1,64 @@ +/*! \page Optimize_methodDoc Optimize method + +Keyword: OPTIMIZE + +\section description Description + + +\section options Options + +\subsection reqopt Required + + +
Option Type Description +
NCONFIG Integer Number of configurations +
READCONFIG String Read configurations from a file +
+ +\subsection optopt Optional + + +
Option Type Default + Description +
ITERATIONS Float 30 + Number of optimization iterations. 30 is a pretty good default, + which should work except in special cases. +
EREF Float special A best guess at the optimized energy. If you don't put this keyword, QWalk will make a good guess at the proper value, which should be good enough unless the system is rather large. +
PSEUDOTEMP String runid.pseudo + Choose the filename for the temporary pseudopotential values. +Should be on a fast disk with lots of space +
WFOUTPUT String runid.wfout + Choose the filename to place an input deck for the final +wavefunction and intermediate ones as the optimization +continues. +
+ +\subsection expopt Experimental + +
Option Type Default + Description +
USE_WEIGHTS Keyword off + Turn on correlated-sampling type reweighting +
MIXING Float 0.95 Mixing weight for energy contribution in mixed minimization +
EXTENDED_WFOUTPUT Keyword off + Turn on printout of wavefunction after each step of optimization into a different file +
MINFUNCTION String VARIANCE + Choose the minimization function. Options are: + +VARIANCE (default) : \f$ \sum{(E_l - E_{ref})^2} \f$ + +ABSOLUTE : \f$ \sum{ | E_l - E_{ref} | } \f$ + +LORENTZ : \f$ \sum{ log(1+(E_l-E_{ref})^2/2) } \f$ + +ENERGY : \f$ \frac{1}{N} \sum { E_l } \f$ + +MIXED : \f$ mixing \frac{1}{N} \sum { E_l } + (1-mixing) \sum{(E_l - E_{ref})^2} \f$ + +For an energy minimization, it's advisable to also use USE_WEIGHTS, since +it's usually unstable otherwise. +
+ + + +*/ diff --git a/docs/guide/Pfaff_wfDoc.html b/docs/guide/Pfaff_wfDoc.html new file mode 100644 index 00000000..3fb7813f --- /dev/null +++ b/docs/guide/Pfaff_wfDoc.html @@ -0,0 +1,153 @@ +/*! \page Pfaff_wfDoc Pfaffian + +Keyword: PFAFFIAN + +\section description Description + +A pfaffian (generalized determinant) or several pfaffians. +
+\f[ +\Psi=\sum_i w_i \Psi_i +\f] + +\f[ +\Psi_i={\rm pf}\left[ \begin{array}{ccc} +{\boldsymbol \xi}^{\uparrow\uparrow}_i & +{\boldsymbol \Phi}^{\uparrow\downarrow}_i & + {\boldsymbol\varphi}^{\uparrow}_i \\ +-{\boldsymbol \Phi}^{\uparrow\downarrow T}_i & +{\boldsymbol \xi}^{\downarrow\downarrow}_i & +{\boldsymbol \varphi}^{\downarrow}_i \\ +-{\boldsymbol\varphi}^{\uparrow T}_i & + -{\boldsymbol\varphi}^{\downarrow T}_i & + 0 \;\; +\end{array} +\right] +\f] + +where submatrices \f$ \boldsymbol \xi \f$, \f$ \boldsymbol \Phi \f$ and \f$ \boldsymbol \varphi \f$ are defined in \ref Pfaffian_groupDoc section +and ordered according the ORBITAL_ORDER section. + +\section Example +Pfaffian wave function for the ground state of carbon pseudo-atom :
+
+PFAFFIAN
+  NPAIRS {  3  1  0  }
+  PFWT {  1  }
+  ORBITAL_ORDER {
+  1    1    1
+  1    1
+  1
+  }
+  PAIRING_ORBITAL {
+    ORBITALS_IN_PAIRING {  1  2  3  4  5  }
+    OPTIMIZE_PF {
+      NOCCUPIED 3
+      SINGLET_ALL
+    }
+    TRIPLET_UU_COEF {
+    0 0 0 0
+    1 0 0
+    0 0
+    0
+    }
+    TRIPLET_DD_COEF {
+    0 0 0 0
+    0 0 0
+    0 0
+    0
+    }
+    SINGLET_COEF {
+    1 0 0 0 0
+    0 0 0 0
+    0 0 0
+    0 0
+    0
+    }
+  }
+  ORBITALS {
+    CUTOFF_MO 
+    MAGNIFY 1 
+    INCLUDE c.basis 
+    NMO 5 
+    ORBFILE c.orb 
+    CENTERS { USEATOMS }
+    }
+  }
+
+ +\section options Options + +\subsection reqopt Required + + +
Option Type Description +
NPAIRS Section number of spin-up, spin-down and unpaired electrons (sum of these 3 numbers defines size of pfaffian matrix of size \f$ N \f$) +
PFWT Section list of the weights of the pfaffians (defines also have many are there) +
PAIRING_ORBITAL Section Section for \ref Pfaffian_groupDoc +
ORBITALS Section input for a \ref MO_matrixDoc +
+ +\subsection optopt Optional + + +
Option Type Default Description +
ORBITAL_ORDER Section i-th pairing orbital for i-th pfaffian matrix +Contains upper-diagonal of \f$ N \times N \f$ matrix of pairing occupation numbers +
OPTIMIZE_PFWT keyword off Optimize the pfaffian weights. +
+ + +*/ + +/*! \page Pfaffian_groupDoc Pairing Orbital + +Keyword: PAIRING ORBITAL + +\section description Description + +Defines the coefficients of linear combinations of one-particle orbitals from which the pairing orbitals +are constructed. The normalization is everywhere such that sum of squares of independent coefficients is +equal to 1. + +\section options Options + +\subsection reqopt Required + + +
Option Type Default Description +
TRIPLET_UU_COEF Section All zero \f$ N(N-1)/2 \f$ normalized coefficients for triplet spin-up spin-up pair of form: +\f$ \chi(1,2)= {1 \over \sqrt(2)} \sum_{i>j} a_{i,j}( \varphi_i(1)\varphi_j(2)- \varphi_j(1)\varphi_i(2))\f$ +
TRIPLET_DD_COEF Section All zero same as above for spin-down case +
SINGLET_COEF Section 1 on diagonal for all occupied orbitals, zero otherwise \f$ N(N+1)/2 \f$ normalized coefficients +for singlet spin-up spin-down pair of form: +\f$ \phi(1,2)= \sum_{i} s_{i,i} \varphi_i(1)\varphi_j(2) + {1 \over \sqrt(2)} \sum_{i>j} s_{i,j}( \varphi_i(1)\varphi_j(2)+\varphi_j(1)\varphi_i(2))\f$ +
UNPAIRED_COEF Section All zero # of spin down \f$\times\f$ # normalized coefficients for unpaired electron orbital of form: +\f$ \varphi'_{i}(1)= \sum_{j} c_{i,j}\varphi_j(1)\f$ +
+ +\subsection optopt Optional + + +
Option Type Default Description +
ORBITALS_IN_PAIRING Section 1 to NMO list of orbitals involved in pairing +
OPTIMIZE_PF Section empty bellow are keywords used for determination of which pairing coefficients to be optimized + +
KEYWORDDescription +
TRIPLET_UU_DIAG First off-diagonal triplet up up coefficients +
TRIPLET_UU_ALL All triplet up up coefficients +
TRIPLET_DD_DIAG First off-diagonal triplet down down coefficients +
TRIPLET_DD_ALL All triplet down down coefficients +
SINGLET_DIAG First off-diagonal triplet up up coefficients +
SINGLET_ALL All singlet coefficients +
NOCCUPIED number of occupied orbs used with keyword VIRTUAL (default = number of up electrons) +
TRIPLET_UU_VIRTUAL same as above just for virtual orbitals +
TRIPLET_UU_VIRTUAL_DIAG same as above just for virtual orbitals +
TRIPLET_DD_VIRTUAL same as above just for virtual orbitals +
TRIPLET_DD_VIRTUAL_DIAG same as above just for virtual orbitals +
SINGLET_VIRTUAL same as above just for virtual orbitals +
SINGLET_VIRTUAL_DIAG same as above just for virtual orbitals +
+
+ +*/ diff --git a/docs/guide/Plot_methodDoc.html b/docs/guide/Plot_methodDoc.html new file mode 100644 index 00000000..98fab164 --- /dev/null +++ b/docs/guide/Plot_methodDoc.html @@ -0,0 +1,37 @@ +/*! \page Plot_methodDoc Plot method + +Keyword: PLOT + +\section description Description + +The PLOT method simply plots the one-particle orbitals and density +of a trial function. + + Caveats + + For spin-polarized systems, the density is not that of +the system, but of the sum of the orbitals + + +\section options Options + +\subsection reqopt Required + + +
Option Type Description + +
ORBITALS Section A \ref MO_matrixDoc section +
MINMAX Section { xmin xmax ymin ymax zmin zmax } +
+ +\subsection optopt Optional + + +
Option Type Default + Description +
RESOLUTION Float .2 The plotting resolution. Lower is better +
PLOTORBITALS Section all orbitals Which orbitals to plot. The first orbital is labelled as 1. +
+ + +*/ diff --git a/docs/guide/PseudopotentialDoc.html b/docs/guide/PseudopotentialDoc.html new file mode 100644 index 00000000..76012047 --- /dev/null +++ b/docs/guide/PseudopotentialDoc.html @@ -0,0 +1,33 @@ +/*! \page PseudopotentialDoc Pseudopotential + +Keyword: Label of atom this pseudopotential is attached to. + +\section description Description + +Use an effective nonlocal potential to remove the core electrons from +the system. This is handled more or less as described in +Mitas, Shirley, Ceperly, J. Chem. Phys. 95, p 3467 (1991). +The first word in the pseudopotential section must be the label of the +atom to which is corresponds. Then the following options may be put in. + +\section options Options + +\subsection reqopt Required + + +
Option Type Description +
BASIS Section input for \ref Basis_functionDoc for the radial function of the psuedopotential +
+ +\subsection optopt Optional + + +
Option Type Default + Description +
AIP Integer 6 Number of atomic integration points +
ADD_ZEFF Keyword off Add the effective charge while in range of the pseudopotential, for soft psp's that have the effective charge +included. +
+ + +*/ diff --git a/docs/guide/Pw2lcaoDoc.html b/docs/guide/Pw2lcaoDoc.html new file mode 100644 index 00000000..5cdc805d --- /dev/null +++ b/docs/guide/Pw2lcaoDoc.html @@ -0,0 +1,77 @@ +/*! \page pw2lcaoDoc pw2lcao + + +\section description Description + +Basic usage: pw2lcao [inputfile]
+ +\section howto HOWTO + +

+1) Prepare a basis file in a modified GAMESS format. It should have +a list of sections like: +

+BASIS {
+C
+AOSPLINE
+  NORENORMALIZE
+  GAMESS {
+    S   5
+               1        8.13804      0.0117959
+               2        3.31518      -0.151981
+               3       0.668276       0.275523
+               4       0.291768       0.548645
+               5       0.114113       0.301215
+    S   1
+               1         0.9059              1
+    S   1
+               1         0.1285              1
+    P   5
+               1        8.52813      0.0235124
+               2        2.90145       0.116486
+               3       0.943121       0.327774
+               4       0.315586       0.492602
+               5       0.103936       0.273124
+    P   1
+               1         0.3827              1
+    P   1
+              1         0.1209              1
+    6D   1
+               1           0.55              1
+  }
+}
+
+ +Note the NORENORMALIZE; since it is essentially doing a periodic +calculation, the normalization is kind of a nebulous quantity, so +it's best to just take the basis functions as they are. Also, +if it's a solids-type calculation, make sure to be careful about +putting very diffuse Gaussians in. It will really slow down +the fitting process and the QMC run. On the other hand, make sure +that the overlaps printed out have converged with respect to the +basis, especially when doing pressure or force calculations, since +they can be easily biased with a small basis. +

+ +

+2) Run jeep2qmc with the -lcao option.. For example, for ch4, I +would run

 jeep2qmc -ecut 30 -lcao ch4.basis -o ch4_qmc ch4
+
+It should create the normal files, as well as a ch4_qmc.pw2lcao and +ch4.basis.centers . +

+ +

+3) Run +

+pw2lcao  ch4_qmc.pw2lcao
+
+After it runs, the qmc run should be set up to go. +

+ + +

+pw2lcao can also be run in parallel, with exactly the same usage. +

+ +*/ diff --git a/docs/guide/Qmc_methodDoc.html b/docs/guide/Qmc_methodDoc.html new file mode 100644 index 00000000..67aa2d42 --- /dev/null +++ b/docs/guide/Qmc_methodDoc.html @@ -0,0 +1,19 @@ +/*! \page Qmc_methodDoc Methods + + +\subsection plugins Plugins + +\ref Vmc_methodDoc + +\ref Optimize_methodDoc + +\ref Optimize_method2Doc + +\ref Dmc_methodDoc + +\ref Reptation_methodDoc + +\ref Plot_methodDoc + + +*/ diff --git a/docs/guide/Reptation_methodDoc.html b/docs/guide/Reptation_methodDoc.html new file mode 100644 index 00000000..c037c540 --- /dev/null +++ b/docs/guide/Reptation_methodDoc.html @@ -0,0 +1,71 @@ +/*! \page Reptation_methodDoc Reptation Monte Carlo method + +Keyword: REPTATION + +\section description Description + +This is an implementation of the Reptation Monte Carlo method(PRL 82, 4745 (1999)). There are quite a few modifications to the algorithm as presented in the above paper. Some are outlined in a paper by Pierleoni and Ceperley that's floating around on the net, most importantly the bounce algorithm. RMC is conceptually similar to DMC, in that we sample the distribution \f$\Psi_T e^{-H\tau} \Psi_T \f$, with the projection operator interpreted as a random walk. At each end of the walk, we have sampled \f$\Psi_T \Phi_0\f$, the mixed distribution. In the center, we have \f$\Phi_0^2\f$, since on either side there are projection operators. DMC only moves forward, so the center distribution is unavailable, except by forward walking, which simulates the effect of projection operators. In RMC, the random variable is the path, which, for finite length, can be a probability density. Therefore, there's no branching and no population control bias. The biases (and speed) are controlled by the timestep(just like DMC) and the length of the path. The larger the timestep and shorter the reptile, the more efficient and inaccurate the simulation. For chemical systems, I've found a good starting point is a reptile about 3 au long, and a timestep around .01 au, which corresponds to TIMESTEP .01 and LENGTH 300. Note that you have to scale the length with the timestep to maintain total projection length. + +RMC accumulates two estimators: label and label_cen. label contains the +mixed estimators, which are useful for the total energy and correlated +sampling energy differences. +label_cen contains the 'pure' estimator, which are useful for the local +potential energy and polarization, as well as other properties that +are specified with a DENSITY section(these automatically use the +center estimator). For finite differences, auxdiffn-0 is the Filippi & +Umrigar estimator, while auxdiffn-1 is the 'Full' estimator from +Pierleoni and Ceperley. For simple materials with good wave functions, they +should give very similar values, with the F-U estimator more efficient, +but for more complicated materials, the Full estimator should be more +accurate. + +\section options Options + +\subsection reqopt Required + + +
Option Type Description + +
NSTEP Integer Number of average points to take in a block. +
NBLOCK Integer Number of blocks to take +
TIMESTEP Float A measure of how large each move +should be. Adjust such that the acceptance ratio is about .99. Acceptance ratio +is just a general guide, however, and it's useful to do several time steps if you +need highly accurate results. +
LENGTH Integer Number of points in the reptile. Energy will be converged to LENGTH points, +and all other quantities(density, potential, etc) will be converged to LENGTH/2 points. +
READCONFIG String Read from a configuration file +previously written by STORECONFIG. Since RMC only uses one walker/node for memory reasons, if it is a VMC +configuration file, it will only take the first config, and ignore the rest. The upshot of this is that you +only need to generate one config/node in VMC. +
+ +\subsection optopt Optional + + +
Option Type Default + Description +
STORECONFIG String none Write the reptile to the file specified. In parallel, each processor will write its configurations to this file with _n appended, where n is the processor number. +
LABEL String rmc Label in the .log file. +
DYNAMICS Section SPLIT + choose a dynamics generator. possible options are { SPLIT }, {RUNGE }. The split dynamics generator is generally more efficient, so don't touch +it unless you know what you're doing. +
DENSITY Section empty + A section for a \ref Local_density_accumulatorDoc . This will be +measured at the center of the reptile, to obtain a 'pure' estimator. +
+ + +\subsection expopt Experimental + + +
Option Type Default + Description +
FULL_GF Flag Off Try to use the Full Green's function +to go beyond Filippi and Umrigar's method for correlated sampling. Note that +this may not be better and is still very much in an experimental phase. + +
+ + +*/ diff --git a/docs/guide/Slat_wfDoc.html b/docs/guide/Slat_wfDoc.html new file mode 100644 index 00000000..f0c77846 --- /dev/null +++ b/docs/guide/Slat_wfDoc.html @@ -0,0 +1,41 @@ +/*! \page Slat_wfDoc Slater determinant + +Keyword: SLATER + +\section description Description + +A Slater determinant or several determinants. Also can use the same +molecular orbitals to create several separate combinations of determinants. + +\section options Options + +\subsection reqopt Required + + +
Option Type Description +
DETWT Section list of the weights of the determinants +
STATES Section List of the occupations of the molecular orbitals, first +spin up, then spin down. For example, a RHF determinant might be
+1 2 3
+1 2 3
+and a UHF might be
+1 2 3
+4 5 6
+If there are more than one determinant, simply continue listing up and +down occupations.
Also, list several STATES functions, and they +will be added as separate guiding functions. +
ORBITALS Section input for a \ref MO_matrixDoc +
+ +\subsection optopt Optional + + +
Option Type Default + Description +
NSPIN Section same as in SYSTEM Override the global parameter. +
OPTIMIZE_DET Flag off Optimize the determinantal coefficients. For a single +determinant, this does nothing. +
+ + +*/ diff --git a/docs/guide/SystemDoc.html b/docs/guide/SystemDoc.html new file mode 100644 index 00000000..fd5ea25c --- /dev/null +++ b/docs/guide/SystemDoc.html @@ -0,0 +1,54 @@ +/*! \page SystemDoc System + +Keyword: MOLECULE or PERIODIC + +\section description Description + +Here we specify the Hamiltonian of the calculation, which includes +the atomic coordinates and the boundary conditions. Since there's a +lot of overlap between the choices, we'll list the options together, with +a note on the differences. + +\section options Options + +\subsection reqopt Required + + +
Option Type Description +
NSPIN Section Two integers, the first the number of spin u +electrons and the second the number of spin down. + +
ATOM Section Add an atom to the system. The format of +the section is { [label] [charge] COOR x y z }. For example, a Lithium atom +with atomic charge 3 at (.5, 0, -.5) would be ATOM { Li 3 COOR .5 0 -.5 }. + +
LATTICEVEC Section (only for PERIODIC) Enforce the +periodic boundary conditions as a parallelpiped, with three vectors specifying +the edges. For example, a cubic cell with sides 1.0 a.u. is:
+LATTICEVEC {
+1.0 0.0 0.0
+0.0 1.0 0.0
+0.0 0.0 1.0
+} +
+ +\subsection optopt Optional + + +
Option Type Default + Description + +
CUTOFF_DIVIDER Float 1.0 + Only in PERIODIC. Control how many unit cells to generate ghost + centers around the simulation cell. 1 is one unit cell, 2 is one + half a unit cell, and .5 is 2 unit cells. +
BOUNDING_BOX Section None + Only in MOLECULE. Enforce periodic boundary conditions without using + the Ewald summation or ghost atoms. The format is the same as LATTICEVEC. +
ORIGIN Section { 0 0 0 } + Change the origin of the periodic boundary conditions(in BOUNDING_BOX or LATVEC) + +
+ + +*/ diff --git a/docs/guide/Tutorial.html b/docs/guide/Tutorial.html new file mode 100644 index 00000000..fdd42d9f --- /dev/null +++ b/docs/guide/Tutorial.html @@ -0,0 +1,293 @@ +/*! \page Tutorial Tutorial + + +\ref compiling + +\ref ch4 + +\ref excited_state + +\ref force + +\ref densities + +\section compiling Compiling + +For a basic compile, with no parallel libraries and no special options, just get the source distribution, change directory to src, and type make(or perhaps gmake). On Linux, AIX, IRIX, and some alphas, that should work immediately. If this doesn't work, or you want to compile with the libraries, etc, look at the README file in the qwalk/ directory, which will explain how to modify the makefile(it's pretty easy, don't worry). There may also be some already made makefiles for specific machines, which you can access by typing make PLATFORM=ARCH. + +After a few minutes, you should see three new executables in the src/ directory: qwalk-ARCH, gosling-ARCH, and pw2lcao-ARCH, where ARCH is probably 'Linux'. The suffix is so you can do multiple compiles on the same source tree with different options or even on different computers. 'qwalk' is the main number-cruching program that will be eating up your computer time. 'gosling' is a tool that allows you to analyze the log files that 'qwalk' generates, and we won't worry about 'pw2lcao' for the moment. + +Now change directory to utils/converter and type make, which will not take too much time, and should produce 'gamess2qmc', 'crystal2qmc', and 'jeep2qmc'. For this tutorial, we'll need 'qwalk', 'gosling', 'gamess2qmc', and 'crystal2qmc', so put them somewhere in your PATH (like /home/yourname/bin/) under the names given here.(ie, do 'cp qwalk-Linux ~/bin/qwalk') + +\section ch4 CH4 molecule + +\subsection ch4_conversion Conversion + +Change to qwalk/examples/ch4. There you should see the results of a GAMESS run: ch4.inp ch4.pun, and ch4.out. Type: +
+$ gamess2qmc ch4
+
+It will produce several files: + +ch4.sys: This holds the 'system' information in QWalk format, which in this case consists of the atomic positions and charges, the fact that our simulation is being done on a molecule, and the pseudopotentials being used to represent the atoms. These things are held constant throughout the calculation. More on this at \ref SystemDoc + +ch4.slater: This file encapsulates the main result of a GAMESS calculation, which is the Hartree-Fock solution, AKA 'Slater determinant'. The basis and orbital coefficients are encoded in the auxillary files 'ch4.basis' and 'ch4.orb'. These files are generally set up when you do the conversion, and you won't have to worry about them much, but a good place to start is \ref Slat_wfDoc + + +ch4.jast2: This is the Jastrow correlation factor that we'll add onto the Slater determinant. More about that at \ref Jastrow2_wfDoc. + +\subsection ch4_hf Hartree-Fock +
+method { VMC
+   nconfig 500 nstep 10 nblock 10
+   timestep 1.0 storeconfig ch4.config
+}
+
+include ch4.sys
+
+trialfunc { include ch4.slater }
+
+
+ +\subsection ch4_opt Optimizing the correlation factor + +
+method { OPTIMIZE
+   iterations 30  nconfig 500
+   eref -7.85
+   readconfig ch4.config
+}
+
+include ch4.sys
+
+trialfunc { SLATER-JASTROW
+  wf1 { include ch4.slater }
+  wf2 { include ch4.jast2 }
+}
+
+ +\subsection ch4_vmc VMC total energy + +
+method { VMC
+   nconfig 500 nstep 10 nblock 10
+   timestep 1.0 
+   readconfig ch4.config
+   storeconfig ch4.config
+}
+
+include ch4.sys
+
+trialfunc { include ch4.opt.wfout }
+
+
+ +\subsection ch4_dmc DMC total energy + +
+method { DMC
+  nconfig 500 nstep 100 timestep .01
+  nblock 10
+  readconfig ch4.config
+  storeconfig ch4.config
+}
+
+include ch4.sys
+
+trialfunc { include ch4.opt.wfout }
+
+
+ +\subsection ch4_rmc RMC energy and properties + +
+method { REPTATION
+   nblock 10 nstep 50000
+   timestep .01 length 301
+   readconfig ch4.config
+   storeconfig ch4_rmc.config
+}
+
+include ch4.sys
+
+trialfunc { include ch4.opt.wfout }
+
+ + +\section excited_state Excited States + + +\section force Forces and Energy derivatives + +

+ +I'll take you through doing an entire force calculation on H2. +This is doable in real time on any workstation made in the past few years. First, + download the files h2.inp and h2b.inp. +h2.inp is the 'base' system, and h2b is the perturbed system, with one hydrogen displaced by .001 Bohr. +Run gamess with these two files, making sure the output(log) goes into h2.out and +the punch(dat) file goes into h2.pun(and likewise for h2b). Now, execute: +

+gamess2qmc h2
+gamess2qmc h2b
+
+In QWalk, we can test that we get the right energy difference. Create an input +file called 'h2.hf' with the following contents: +
+method { VMC
+   nconfig 1 nstep 1000 nblock 30
+   timestep 1.0
+   properties {
+      aux_sys { include h2b.sys }
+      aux_wf { include h2b.slater }
+   }
+}
+
+include h2.sys
+trialfunc { include h2.slater }
+
+This is the normal VMC section, with only the addition of the perturbed geometry(which we call aux_sys and aux_wf) +in a properties { } section. You can list more than one set of system and wave +function sections, and they will be matched in the order they're given. Run this +file with QWalk, and when it's done, run +
+gosling h2.hf.log
+
+It will print out the normal gosling things, with the addition of the energy +difference between the two geometries we gave it. It should be in a line like: +
+final_auxdiff0-0   -0.000192185083  +/-   3.938383729e-06   (sigma 0.0005672261411 )
+
+Check it versus the energy difference in GAMESS total energies; they should be the +same within the error bars. To get the force, simply divide the energy difference +by the displacement; in this case, we get a force of -0.192 +/- .004 atomic +units--pretty big, because the h2 is very compressed. +

+ +

+Now we're ready to perform a correlated calculation of the force. We need a +Jastrow factor, so let's optimize one. Write the following to h2.opt: +

+method { VMC
+   nconfig 500 nstep 10 nblock 10
+   timestep 1.0
+   storeconfig h2.config
+}
+
+method { OPTIMIZE
+   nconfig 500 readconfig h2.config
+   iterations 30 eref -1.12
+}
+
+method { VMC
+   nconfig 500 nstep 10 nblock 10
+   timestep 1.0
+   storeconfig h2.config
+   readconfig h2.config
+   label vmc2 
+}
+
+
+include h2.sys
+trialfunc { slater-jastrow
+   wf1 { include h2.slater }
+   wf2 { include h2.jast2 }
+}
+
+Note that I concatenated several method sections together, like a script. QWalk +will first generate the configurations for the optimization using the first VMC +section, evaluating the energy along the way, then optimize the Jastrow factor +using those configurations, and finally evaluate the energy of the new wave +function in the second VMC section. Run this, and look at the gosling output, +making sure that we did improve the wave function(there should be lower variance +and energy). +

+ +

+We want to use the same Jastrow on both the base and perturbed wave functions, +so we need to separate the output in h2.opt.wfout. Copy h2.opt.wfout to opt.jast +and edit it. The large structure will look like: +

+SLATER-JASTROW
+WF1 { SLATER 
+     ......
+     .....
+}
+WF2 { JASTROW2
+  GROUP { 
+     ......
+  }
+  GROUP {
+     ......
+  }
+}
+
+Edit opt.jast so that it looks like: +
+JASTROW2
+ GROUP { 
+   .....
+ }
+ GROUP { 
+   .....
+ }
+
+Now we're ready to perform a new energy difference calculation. Write to the file h2.vmc: +
+method { VMC
+   nconfig 1 nstep 1000 nblock 30
+   timestep 1.0
+   properties {
+      aux_sys { include h2b.sys }
+      aux_wf { slater-jastrow
+           wf1 { include h2b.slater }
+           wf2 { include opt.jast }
+      }
+   }
+}
+
+include h2.sys
+trialfunc { slater-jastrow
+     wf1 { include h2.slater }
+     wf2 { include opt.jast }
+}
+
+and run it. It will give the same gosling output as before, but the energy +difference will change somewhat, and it should have a smaller error bar, since +the variance of the wave function is smaller. To do the same in Diffusion Monte +Carlo, use a file like: +
+method { VMC 
+   nconfig 500 nstep 10 nblock 10 
+   timestep 1.0 storeconfig h2.config
+}
+
+method { DMC
+   nconfig 500 nstep 50 nblock 30 
+   timestep .02 
+   readconfig h2.config 
+   storeconfig h2.config
+   properties {
+      aux_sys { include h2b.sys }
+      aux_wf { slater-jastrow
+           wf1 { include h2b.slater }
+           wf2 { include opt.jast }
+      }
+   }
+}
+
+include h2.sys
+trialfunc { slater-jastrow
+     wf1 { include h2.slater }
+     wf2 { include opt.jast }
+}   
+
+The first VMC section is just to generate the configurations that DMC needs to +start with. +

+ + +\section densities One particle density and other functions + + +*/ diff --git a/docs/guide/Vmc_methodDoc.html b/docs/guide/Vmc_methodDoc.html new file mode 100644 index 00000000..b6d7f569 --- /dev/null +++ b/docs/guide/Vmc_methodDoc.html @@ -0,0 +1,55 @@ +/*! \page Vmc_methodDoc Variational Monte Carlo method + +Keyword: VMC + +\section description Description + +Evaluates the expectation value \f$ <\Psi|H|\Psi>/<\Psi|\Psi> \f$ +stochastically. + + +\section options Options + +\subsection reqopt Required + + +
Option Type Description +
NCONFIG Integer Number of sample points to use at one time +
NSTEP Integer Number of average points to take in a block. +
NBLOCK Integer Number of blocks to take +
TIMESTEP Float A measure of how large each Metropolis move +should be. Adjust such that the acceptance ratio is somewhat greater than +0.5 +
+ +\subsection optopt Optional + + +
Option Type Default + Description +
NDECORR Integer 2 + Number of Metropolis steps to take before evaluating the energy. + Since VMC steps don't require an energy evaluation, this serves + to decorrelate the averaging points before doing an expensive + evaluation of the energy(mostly pseudopotentials). + +
STORECONFIG String none Write the configurations to +this file every block. In parallel, each processor will write its configurations to this file with _n appended, where n is the processor number. +
READCONFIG String none Read from a configuration file +previously written by STORECONFIG. If there are more or less configurations +than NCONFIG, new configurations will be generated or old ones left out to +make the number exactly NCONFIG. +
GUIDETYPE String SUMSQUARES + Possible options: SUMSQUARES(\f$ \Psi_T^2 = \Psi_1^2+\Psi_2^2 \f$), + SUM(\f$ (\Psi_1 + \Psi_2)^2 \f$), FIRST(\f$ \Psi_T = \Psi_1 \f$). Specify +the importance-sampling function. This will importance-sample only +with respect to wave functions defined in the TRIALFUNC section. Ones +defined in AUX_WF/AUX_SYS will not be used, since they are auxillary, not +guiding functions. +
DYNAMICS Section SPLIT + Control the pseudo-dynamics of the sampling. Insert a + \ref DynamicsDoc section here. +
+ + +*/ diff --git a/docs/guide/WavefunctionDoc.html b/docs/guide/WavefunctionDoc.html new file mode 100644 index 00000000..461225da --- /dev/null +++ b/docs/guide/WavefunctionDoc.html @@ -0,0 +1,67 @@ +/*! \page WavefunctionDoc Wavefunction + +\section description Description + +A wavefunction is a function of all the electronic and ionic coordinates +(the many-body wavefunction). With this section, we can build a trial function. + +\section plugins Plugins + +\ref Slat_JastrowDoc + +\ref Slat_wfDoc + +\ref Pfaff_wfDoc + +\ref Jastrow2_wfDoc + + + +*/ + +//###################################################################### + +/*! \page Slat_JastrowDoc Slater-Jastrow + +Keyword: SLATER-JASTROW or MULTIPLY + +\section description Description + +Multiply two wave functions + +\section options Options + +\subsection reqopt Required + + +
Option Type Description +
WF1 Section a \ref WavefunctionDoc section +
WF2 Section a \ref WavefunctionDoc section +
+ +*/ + + +//###################################################################### + +/*! \page Cat_wfDoc Concatenate Wavefunction + +Keyword: CONCATENATE + +\section description Description + +Append wavefunctions into a vector + +\section options Options + +\subsection reqopt Required + + +
Option Type Description +
WF Section a \ref WavefunctionDoc section +
ORDER Section choose the ordering of the wave functions. +For example, ORDER { 0 0 1 } puts the first function twice and the second one +in the third slot. This is for matching multiplications, for example. +
+ +*/ diff --git a/docs/guide/h2.inp b/docs/guide/h2.inp new file mode 100644 index 00000000..9a5eff62 --- /dev/null +++ b/docs/guide/h2.inp @@ -0,0 +1,64 @@ + $CONTRL SCFTYP=RHF MULT=1 ICHARG=0 RUNTYP=ENERGY MAXIT=70 ECP=READ $END + $CONTRL UNITS=BOHR $END + $SYSTEM KDIAG=3 $END + $SCF DIRSCF=.T. RSTRCT=.T. SOSCF=.F. MVOQ=2 $END + $DATA + +C1 + H 1 0.0 0.0 -0.5509584635 +S 7 1. + 1 25.967331 3.54063093E-03 + 2 9.1676598 1.67008793E-02 + 3 2.8460805 6.08226508E-02 + 4 1.0048708 1.72330686E-01 + 5 0.38502821 3.53696261E-01 + 6 0.16005760 3.89585261E-01 + 7 0.69101229E-01 1.46735635E-01 +S 1 + 1 0.3258000000 1.000000000 +S 1 + 1 0.1027000000 1.000000000 +P 4 1. + 1 18.1264860 0.002058194485 + 2 4.4559865 0.015034403850 + 3 1.1582862 0.151153254935 + 4 0.3505376 0.890125250947 +P 1 1. + 1 .18 1. + + H 1 0.0 0.0 0.5509584635 +S 7 1. + 1 25.967331 3.54063093E-03 + 2 9.1676598 1.67008793E-02 + 3 2.8460805 6.08226508E-02 + 4 1.0048708 1.72330686E-01 + 5 0.38502821 3.53696261E-01 + 6 0.16005760 3.89585261E-01 + 7 0.69101229E-01 1.46735635E-01 +S 1 + 1 0.3258000000 1.000000000 +S 1 + 1 0.1027000000 1.000000000 +P 4 1. + 1 18.1264860 0.002058194485 + 2 4.4559865 0.015034403850 + 3 1.1582862 0.151153254935 + 4 0.3505376 0.890125250947 +P 1 1. + 1 .18 1. + + $END + $ECP +H-TR4 GEN 0 1 +6 P + -9.39168039 2 27.916162 + -0.536989635 2 394.363177 + 0.717083592 2 15.663672 + -1.25803771 2 90.1659831 + -0.267890288 2 2232.29185 + 1. 1 21.2435951 +1 S + 0. 2 1. +H-TR4 + $END + diff --git a/docs/guide/h2b.inp b/docs/guide/h2b.inp new file mode 100644 index 00000000..03345a54 --- /dev/null +++ b/docs/guide/h2b.inp @@ -0,0 +1,64 @@ + $CONTRL SCFTYP=RHF MULT=1 ICHARG=0 RUNTYP=ENERGY MAXIT=70 ECP=READ $END + $CONTRL UNITS=BOHR $END + $SYSTEM KDIAG=3 $END + $SCF DIRSCF=.T. RSTRCT=.T. SOSCF=.F. MVOQ=2 $END + $DATA + +C1 + H 1 0.0 0.0 -0.5509584635 +S 7 1. + 1 25.967331 3.54063093E-03 + 2 9.1676598 1.67008793E-02 + 3 2.8460805 6.08226508E-02 + 4 1.0048708 1.72330686E-01 + 5 0.38502821 3.53696261E-01 + 6 0.16005760 3.89585261E-01 + 7 0.69101229E-01 1.46735635E-01 +S 1 + 1 0.3258000000 1.000000000 +S 1 + 1 0.1027000000 1.000000000 +P 4 1. + 1 18.1264860 0.002058194485 + 2 4.4559865 0.015034403850 + 3 1.1582862 0.151153254935 + 4 0.3505376 0.890125250947 +P 1 1. + 1 .18 1. + + H 1 0.0 0.0 0.5519584635 +S 7 1. + 1 25.967331 3.54063093E-03 + 2 9.1676598 1.67008793E-02 + 3 2.8460805 6.08226508E-02 + 4 1.0048708 1.72330686E-01 + 5 0.38502821 3.53696261E-01 + 6 0.16005760 3.89585261E-01 + 7 0.69101229E-01 1.46735635E-01 +S 1 + 1 0.3258000000 1.000000000 +S 1 + 1 0.1027000000 1.000000000 +P 4 1. + 1 18.1264860 0.002058194485 + 2 4.4559865 0.015034403850 + 3 1.1582862 0.151153254935 + 4 0.3505376 0.890125250947 +P 1 1. + 1 .18 1. + + $END + $ECP +H-TR4 GEN 0 1 +6 P + -9.39168039 2 27.916162 + -0.536989635 2 394.363177 + 0.717083592 2 15.663672 + -1.25803771 2 90.1659831 + -0.267890288 2 2232.29185 + 1. 1 21.2435951 +1 S + 0. 2 1. +H-TR4 + $END + diff --git a/docs/guide/jastrow2Doc.html b/docs/guide/jastrow2Doc.html new file mode 100644 index 00000000..78663b52 --- /dev/null +++ b/docs/guide/jastrow2Doc.html @@ -0,0 +1,220 @@ +/*! \page Jastrow2_wfDoc Jastrow + +Keyword: JASTROW or JASTROW2 + +\section description Description + +This is a multi-layered object: the calculation goes like: +
+Jastrow2_wf_data
+   group 1
+     one_body
+     two_body
+     (eventually three-body)
+   group 2
+     one_body
+     two_body
+   ...
+
+ +The Jastrow_group 's are something like namespaces, +where one defines electron-electron and +electron-ion basis functions. These functions are then used in +the one-body and two-body objects to calculate the relevant terms +in the Jastrow factor. The Jastrow_wf object takes +the results of these calculations and stores it in its state +to support updates. I separated +it into logical groups so that the user can specify to, for +example, optimize the basis in one and freeze the coefficients in +another when doing an optimization. + +\section options Options + +\subsection reqopt Required + + +
Option Type Description +
GROUP Section input for \ref Jastrow_groupDoc +
+ + + +*/ + + +/*! \page Jastrow_groupDoc Jastrow Group + +Keyword: None + +\section description Description + +\section options Options + +\subsection reqopt Required + + +
Option Type Description +
EIBASIS Section input for \ref Basis_functionDoc centered around an atom +
EEBASIS Section input for \ref Basis_functionDoc centered around each electron +
ONEBODY Section input for \ref Jastrow_onebody_pieceDoc +
TWOBODY Section input for \ref Jastrow_twobody_pieceDoc +
TWOBODY_SPIN Section input for \ref Jastrow_twobody_piece_diffspinDoc +
THREEBODY Section input for \ref Jastrow_threebody_pieceDoc +
+ +\subsection optopt Optional + + +
Option Type Default + Description +
OPTIMIZEBASIS Keyword off signals (nonlinear) + optimization of the basis function within this group. +
+ +*/ + + +/*! \page Jastrow_twobody_pieceDoc Jastrow Two-body interaction + +\section description Description + +The correlation function \f$ \sum_m { c_m b_m(r_{ij}) } \f$ where +i and j are indices of electronic coordinates. + +\section options Options + +\subsection reqopt Required + + +
Option Type Description +
COEFFICIENTS Section List of expansion coefficients(floats) + +
+ +\subsection optopt Optional + + +
Option Type Default + Description +
FREEZE Keyword off + do not optimize the coefficients +
+ +*/ + + +/*! \page Jastrow_twobody_piece_diffspinDoc Jastrow Two-body interaction, spin difference + +\section description Description + +The correlation function \f$ \sum_m { c_m b_m(r_{ij}) } \f$ where +i and j are indices of electronic coordinates. b is allowed to be +different depending on the spin. + +\section options Options + +\subsection reqopt Required + + +
Option Type Description +
LIKE_COEFFICIENTS Section List of expansion coefficients(floats) for like spins +
UNLIKE_COEFFICIENTS Section List of expansion coefficients(floats) for unlike spins + +
+ +\subsection optopt Optional + + +
Option Type Default + Description +
FREEZE Keyword off + do not optimize the coefficients +
+ + + +*/ + + + + + +/*! \page Jastrow_onebody_pieceDoc Jastrow One-body interaction + +\section description Description + +The correlation function \f$ \sum_m { c_m a_m(r_{iI}) } \f$ where +i is an electron index and I is an ion index. a is allowed to be +different depending on the ionic type. + +\section options Options + +\subsection reqopt Required + + +
Option Type Description +
COEFFICIENTS Section + List of expansion coefficients(floats). There must be one section + for each atom type, each beginning with the name of the atom. + (for example, COEFFICIENTS { Li 3.4 2.3 } + +
+ +\subsection optopt Optional + + +
Option Type Default + Description +
SCALE Float 1.0 + Multiply all the coefficients by the value given +
+ +*/ + + +/*! \page Jastrow_threebody_pieceDoc Jastrow Three-body interaction + +\section description Description + + + +\section options Options + +\subsection reqopt Required + + +
Option Type Description +
COEFFICIENTS Section + List of expansion coefficients(floats). There must be one section + for each atom type, each beginning with the name of the atom. + (for example, COEFFICIENTS { Li 3.4 2.3 } There are a maximum + of 12 parameters currently, and they have requirements on the number of basis functions as follows:
+ 3 parms: 1 EE and 1 EI function
+ 5 parms: 1 EE and 2 EI
+ 7 parms: 2 EE and 2 EI
+ 12 parms: 2 EE and 3 EI
+ + +
+ +\subsection optopt Optional + + +
Option Type Default + Description +
FREEZE Float 1.0 + Multiply all the coefficients by the value given +
+ +*/ diff --git a/docs/mainpage.html b/docs/mainpage.html new file mode 100644 index 00000000..18978dd0 --- /dev/null +++ b/docs/mainpage.html @@ -0,0 +1,25 @@ +/*! \mainpage QWalk manual + +\ref InputDoc + +\section converters Converters + +\ref gamess2qmcDoc + +\ref jeep2qmcDoc + +\ref crystal2qmcDoc + +\section input Input + +\ref Qmc_methodDoc + +\ref SystemDoc + +\ref PseudopotentialDoc + +\ref WavefunctionDoc + +\ref Basis_functionDoc +*/ + diff --git a/docs/template.html b/docs/template.html new file mode 100644 index 00000000..03bf8d75 --- /dev/null +++ b/docs/template.html @@ -0,0 +1,38 @@ +/*! \page templateDoc Template documentation + +Keyword: TEMPLATE + +\section description Description + +This is a template for documentation of an object that the user interfaces +with. One can insert a function, \f$ x^2 \f$, or refer \ref templateDoc to +another page. The naming scheme is Name_of_classDoc. The html files should +be what one would expect a user to read. Any developer-specific information +should go into the header files as doxydoc. + +\section options Options + +The type can be one of: integer, float, string, section, or keyword. + + +\subsection reqopt Required + + +
Option Type Description +
FOO Section prefix for a bar +
BAR Float follows a foo +
+ +\subsection optopt Optional + + +
Option Type Default + Description +
FOO Section AOSPLINE specifies a Basis section +
BAR Float 4.5 follows a foo +
+ +\subsection expopt Experimental + + +*/ diff --git a/dox_setup/footer.html b/dox_setup/footer.html new file mode 100644 index 00000000..2fa79ca5 --- /dev/null +++ b/dox_setup/footer.html @@ -0,0 +1,4 @@ +
+Generated on $datetime for $projectname by doxygen $doxygenversion
+ + diff --git a/dox_setup/header.html b/dox_setup/header.html new file mode 100644 index 00000000..29c3eb4f --- /dev/null +++ b/dox_setup/header.html @@ -0,0 +1,5 @@ + + +$title + + diff --git a/dox_setup/stylesheet.css b/dox_setup/stylesheet.css new file mode 100644 index 00000000..0ce75210 --- /dev/null +++ b/dox_setup/stylesheet.css @@ -0,0 +1,212 @@ +H1 { + text-align: center; + font-family: Arial, Helvetica, sans-serif; +} +H2 { + font-family: Geneva, Arial, Helvetica, sans-serif; +} +CAPTION { font-weight: bold } +DIV.qindex { + width: 100%; + background-color: #eeeeff; + border: 1px solid #B0B0B0; + text-align: center; + margin: 2px; + padding: 2px; +} +A.qindex { + text-decoration: none; + font-weight: bold; + color: #1A419D; + padding: 2px; +} +A.qindex:visited { + text-decoration: none; + font-weight: bold; + color: #1A419D + padding: 2px; +} +A.qindex:hover { + text-decoration: none; + background-color: #ddddff; + padding: 2px; +} +A.qindexHL { + text-decoration: none; + font-weight: bold; + background-color: #6666cc; + color: #ffffff; + padding: 2 6px; + border: 1px double #9295C2; + } +A.qindexHL:hover { + text-decoration: none; + background-color: #6666cc; + color: #ffffff; + padding: 2px 6px; +} +A.qindexHL:visited { text-decoration: none; background-color: #6666cc; color: #ffffff } +A.el { text-decoration: none; font-weight: bold } +A.elRef { font-weight: bold } +A.code { text-decoration: none; font-weight: normal; color: #1A419D} +A.codeRef { font-weight: normal; color: #1A419D} +A:hover { text-decoration: none; background-color: #f2f2ff } +DL.el { margin-left: -1cm } +PRE.fragment { + border: 1px solid #CCCCCC; + background-color: #f5f5f5; + margin-top: 4px; + margin-bottom: 4px; + margin-left: 2px; + margin-right: 8px; + padding-left: 6px; + padding-right: 6px; + padding-top: 4px; + padding-bottom: 4px; +} +DIV.fragment { + border: 1px solid #CCCCCC; + background-color: #f5f5f5; + padding: 6px; +} +DIV.ah { background-color: black; font-weight: bold; color: #ffffff; margin-bottom: 3px; margin-top: 3px } +TD.md { background-color: #F4F4FB; font-weight: bold; } +TD.mdname1 { background-color: #F4F4FB; font-weight: bold; color: #602020; } +TD.mdname { background-color: #F4F4FB; font-weight: bold; color: #602020; width: 600px; } +DIV.groupHeader { margin-left: 16px; margin-top: 12px; margin-bottom: 6px; font-weight: bold } +DIV.groupText { margin-left: 16px; font-style: italic; font-size: smaller } +BODY { + background: white; + color: black; + margin-right: 20px; + margin-left: 20px; +} +TD.indexkey { + background-color: #eeeeff; + font-weight: bold; + padding-right : 10px; + padding-top : 2px; + padding-left : 10px; + padding-bottom : 2px; + margin-left : 0px; + margin-right : 0px; + margin-top : 2px; + margin-bottom : 2px; + border: 1px solid #CCCCCC; +} +TD.indexvalue { + background-color: #eeeeff; + font-style: italic; + padding-right : 10px; + padding-top : 2px; + padding-left : 10px; + padding-bottom : 2px; + margin-left : 0px; + margin-right : 0px; + margin-top : 2px; + margin-bottom : 2px; + border: 1px solid #CCCCCC; +} +TR.memlist { + background-color: #f0f0f0; +} +P.formulaDsp { text-align: center; } +IMG.formulaDsp { } +IMG.formulaInl { vertical-align: middle; } +SPAN.keyword { color: #008000 } +SPAN.keywordtype { color: #604020 } +SPAN.keywordflow { color: #e08000 } +SPAN.comment { color: #800000 } +SPAN.preprocessor { color: #806020 } +SPAN.stringliteral { color: #002080 } +SPAN.charliteral { color: #008080 } +.mdTable { + border: 1px solid #868686; + background-color: #F4F4FB; +} +.mdRow { + padding: 8px 10px; +} +.mdescLeft { + font-size: smaller; + font-family: Arial, Helvetica, sans-serif; + background-color: #FAFAFA; + padding-left: 8px; + border-top: 1px none #E0E0E0; + border-right: 1px none #E0E0E0; + border-bottom: 1px none #E0E0E0; + border-left: 1px none #E0E0E0; + margin: 0px; +} +.mdescRight { + font-size: smaller; + font-family: Arial, Helvetica, sans-serif; + font-style: italic; + background-color: #FAFAFA; + padding-left: 4px; + border-top: 1px none #E0E0E0; + border-right: 1px none #E0E0E0; + border-bottom: 1px none #E0E0E0; + border-left: 1px none #E0E0E0; + margin: 0px; + padding-bottom: 0px; + padding-right: 8px; +} +.memItemLeft { + padding: 1px 0px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-style: solid; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + background-color: #FAFAFA; + font-family: Geneva, Arial, Helvetica, sans-serif; + font-size: 12px; +} +.memItemRight { + padding: 1px 0px 0px 8px; + margin: 4px; + border-top-width: 1px; + border-right-width: 1px; + border-bottom-width: 1px; + border-left-width: 1px; + border-top-style: solid; + border-top-color: #E0E0E0; + border-right-color: #E0E0E0; + border-bottom-color: #E0E0E0; + border-left-color: #E0E0E0; + border-right-style: none; + border-bottom-style: none; + border-left-style: none; + background-color: #FAFAFA; + font-family: Geneva, Arial, Helvetica, sans-serif; + font-size: 13px; +} +.search { color: #003399; + font-weight: bold; +} +FORM.search { + margin-bottom: 0px; + margin-top: 0px; +} +INPUT.search { font-size: 75%; + color: #000080; + font-weight: normal; + background-color: #eeeeff; +} +TD.tiny { font-size: 75%; +} +a { + color: #252E78; +} +a:visited { + color: #3D2185; +} diff --git a/examples/c2h6/c2h6.inp b/examples/c2h6/c2h6.inp new file mode 100644 index 00000000..68164db4 --- /dev/null +++ b/examples/c2h6/c2h6.inp @@ -0,0 +1,126 @@ +!coords from: http://long-march.mit.edu/liju99/Papers/QC.ps + $CONTRL SCFTYP=ROHF MULT=1 ICHARG=0 RUNTYP=ENERGY MAXIT=70 ECP=READ $END + $SYSTEM KDIAG=3 $END + $SCF DIRSCF=.T. SOSCF=.F. $END + $DATA + +C1 +H 1.0 -0.8796102553 -0.5078432177 1.1532386695 + S 3 + 1 18.73113700 0.3349460000E-01 + 2 2.825393700 0.2347269500 + 3 0.6401217000 0.8137573300 + S 1 + 1 0.1612778000 1.000000000 + +H 1.0 0.8796102553 -0.5078432177 1.1532386695 + S 3 + 1 18.73113700 0.3349460000E-01 + 2 2.825393700 0.2347269500 + 3 0.6401217000 0.8137573300 + S 1 + 1 0.1612778000 1.000000000 + +H 1.0 -0.0 -1.0156864354 -1.1532386695 + S 3 + 1 18.73113700 0.3349460000E-01 + 2 2.825393700 0.2347269500 + 3 0.6401217000 0.8137573300 + S 1 + 1 0.1612778000 1.000000000 + +H 1.0 0.8796102553 0.5078432177 -1.1532386695 + S 3 + 1 18.73113700 0.3349460000E-01 + 2 2.825393700 0.2347269500 + 3 0.6401217000 0.8137573300 + S 1 + 1 0.1612778000 1.000000000 + +H 1.0 -0.8796102553 0.5078432177 -1.1532386695 + S 3 + 1 18.73113700 0.3349460000E-01 + 2 2.825393700 0.2347269500 + 3 0.6401217000 0.8137573300 + S 1 + 1 0.1612778000 1.000000000 + +H 1.0 0.0 1.0156864354 1.1532386695 + S 3 + 1 18.73113700 0.3349460000E-01 + 2 2.825393700 0.2347269500 + 3 0.6401217000 0.8137573300 + S 1 + 1 0.1612778000 1.000000000 + +C 6.0 0. 0. -0.7688385534 + S 5 + 1 8.1380377 0.11795918E-01 + 2 3.3151758 -0.15198125 + 3 0.66827631 0.27552348 + 4 0.29176766 0.54864514 + 5 0.11411349 0.30121511 + S 1 + 1 0.9059000000 1.000000000 + S 1 + 1 0.1285000000 1.000000000 + P 5 + 1 8.5281305 0.23512401E-01 + 2 2.9014509 0.11648574 + 3 0.94312090 0.32777384 + 4 0.31558555 0.49260154 + 5 0.10393611 0.27312428 + P 1 + 1 0.3827000000 1.000000000 + P 1 + 1 0.1209000000 1.000000000 + D 1 + 1 0.5500000000 1.000000000 + +C 6.0 0. 0. 0.7688385534 + S 5 + 1 8.1380377 0.11795918E-01 + 2 3.3151758 -0.15198125 + 3 0.66827631 0.27552348 + 4 0.29176766 0.54864514 + 5 0.11411349 0.30121511 + S 1 + 1 0.9059000000 1.000000000 + S 1 + 1 0.1285000000 1.000000000 + P 5 + 1 8.5281305 0.23512401E-01 + 2 2.9014509 0.11648574 + 3 0.94312090 0.32777384 + 4 0.31558555 0.49260154 + 5 0.10393611 0.27312428 + P 1 + 1 0.3827000000 1.000000000 + P 1 + 1 0.1209000000 1.000000000 + D 1 + 1 0.5500000000 1.000000000 + + $END + $ECP +H-ECP NONE +H-ECP NONE +H-ECP NONE +H-ECP NONE +H-ECP NONE +H-ECP NONE +C-LES GEN 2 1 +7 P + -16.7554933 2 7.71902471 + -0.318937855 2 2184.3154 + -2.90449512 2 20.7770051 + -1.24269724 2 76.3948299 + -0.601986071 2 351.761231 + 0.218138855 2 3.95786259 + 4. 1 5.992468 +3 S-P + 27.006964 2 5.74118955 + 8.57269969 2 5.12564415 + -6.3364597 2 4.68309865 +C-LES + $END diff --git a/examples/c2h6/c2h6.out b/examples/c2h6/c2h6.out new file mode 100644 index 00000000..b7e2f0e2 --- /dev/null +++ b/examples/c2h6/c2h6.out @@ -0,0 +1,1236 @@ +mkdir: cannot create directory `/tmp/lkwagner': File exists +----- GAMESS execution script ----- +This job is running on host aldebaran.physics.ncsu.edu at Wed Feb 19 17:02:56 EST 2003 +Available scratch disk space (Kbyte units) at beginning of the job is +Filesystem 1k-blocks Used Available Use% Mounted on +/dev/sda6 15717664 4386752 10532484 30% / +cp c2h6b.inp /tmp/lkwagner/c2h6b.F05 +unset echo +setenv EXTBAS /dev/null +setenv IRCDATA /tmp/lkwagner/c2h6b.irc +setenv INPUT /tmp/lkwagner/c2h6b.F05 +setenv PUNCH /tmp/lkwagner/c2h6b.pun +setenv AOINTS /tmp/lkwagner/c2h6b.F08 +setenv MOINTS /tmp/lkwagner/c2h6b.F09 +setenv DICTNRY /tmp/lkwagner/c2h6b.F10 +setenv DRTFILE /tmp/lkwagner/c2h6b.F11 +setenv CIVECTR /tmp/lkwagner/c2h6b.F12 +setenv CASINTS /tmp/lkwagner/c2h6b.F13 +setenv CIINTS /tmp/lkwagner/c2h6b.F14 +setenv WORK15 /tmp/lkwagner/c2h6b.F15 +setenv WORK16 /tmp/lkwagner/c2h6b.F16 +setenv CSFSAVE /tmp/lkwagner/c2h6b.F17 +setenv FOCKDER /tmp/lkwagner/c2h6b.F18 +setenv DASORT /tmp/lkwagner/c2h6b.F20 +setenv DFTINTS /tmp/lkwagner/c2h6b.F21 +setenv DFTGRID /tmp/lkwagner/c2h6b.F22 +setenv JKFILE /tmp/lkwagner/c2h6b.F23 +setenv ORDINT /tmp/lkwagner/c2h6b.F24 +setenv EFPIND /tmp/lkwagner/c2h6b.F25 +setenv PCMDATA /tmp/lkwagner/c2h6b.F26 +setenv PCMINTS /tmp/lkwagner/c2h6b.F27 +setenv MLTPL /tmp/lkwagner/c2h6b.F28 +setenv MLTPLT /tmp/lkwagner/c2h6b.F29 +setenv DAFL30 /tmp/lkwagner/c2h6b.F30 +setenv SOINTX /tmp/lkwagner/c2h6b.F31 +setenv SOINTY /tmp/lkwagner/c2h6b.F32 +setenv SOINTZ /tmp/lkwagner/c2h6b.F33 +setenv SORESC /tmp/lkwagner/c2h6b.F34 +setenv SIMEN /tmp/lkwagner/c2h6b.simen +setenv SIMCOR /tmp/lkwagner/c2h6b.simcor +setenv GCILIST /tmp/lkwagner/c2h6b.F37 +setenv SOCCDAT /tmp/lkwagner/c2h6b.F40 +setenv AABB41 /tmp/lkwagner/c2h6b.F41 +setenv BBAA42 /tmp/lkwagner/c2h6b.F42 +setenv BBBB43 /tmp/lkwagner/c2h6b.F43 +setenv MCQD50 /tmp/lkwagner/c2h6b.F50 +setenv MCQD51 /tmp/lkwagner/c2h6b.F51 +setenv MCQD52 /tmp/lkwagner/c2h6b.F52 +setenv MCQD53 /tmp/lkwagner/c2h6b.F53 +setenv MCQD54 /tmp/lkwagner/c2h6b.F54 +setenv MCQD55 /tmp/lkwagner/c2h6b.F55 +setenv MCQD56 /tmp/lkwagner/c2h6b.F56 +setenv MCQD57 /tmp/lkwagner/c2h6b.F57 +setenv MCQD58 /tmp/lkwagner/c2h6b.F58 +setenv MCQD59 /tmp/lkwagner/c2h6b.F59 +setenv MCQD60 /tmp/lkwagner/c2h6b.F60 +setenv MCQD61 /tmp/lkwagner/c2h6b.F61 +setenv MCQD62 /tmp/lkwagner/c2h6b.F62 +setenv MCQD63 /tmp/lkwagner/c2h6b.F63 +setenv MCQD64 /tmp/lkwagner/c2h6b.F64 +setenv CCREST /tmp/lkwagner/c2h6b.F70 +setenv CCRLE /tmp/lkwagner/c2h6b.F71 +setenv CCINTS /tmp/lkwagner/c2h6b.F72 +setenv CCT1AMP /tmp/lkwagner/c2h6b.F73 +setenv CCT2AMP /tmp/lkwagner/c2h6b.F74 +setenv CCT3AMP /tmp/lkwagner/c2h6b.F75 +setenv CCVM /tmp/lkwagner/c2h6b.F76 +setenv CCVE /tmp/lkwagner/c2h6b.F77 +unset echo +ddikick.x c2h6b /home/apps/gamess gamess.00.x /tmp/lkwagner 1 aldebaran.physics.ncsu.edu +Initiating 1 compute processes to run job c2h6b +Executable gamess.00.x will be run from directory /home/apps/gamess +Working scratch directory on each host will be /tmp/lkwagner +Running gamess.00.x on aldebaran.physics.ncsu.edu as compute process 0 +Running gamess.00.x on aldebaran.physics.ncsu.edu as data server 1 +Process initiation completed. + ****************************************************** + * GAMESS VERSION = 16 FEB 2002 (R4) * + * FROM IOWA STATE UNIVERSITY * + * M.W.SCHMIDT, K.K.BALDRIDGE, J.A.BOATZ, S.T.ELBERT, * + * M.S.GORDON, J.H.JENSEN, S.KOSEKI, N.MATSUNAGA, * + * K.A.NGUYEN, S.J.SU, T.L.WINDUS, * + * TOGETHER WITH M.DUPUIS, J.A.MONTGOMERY * + * J.COMPUT.CHEM. 14, 1347-1363(1993) * + ******************* PC-UNIX VERSION ****************** + + SINCE 1993, STUDENTS AND POSTDOCS WORKING AT IOWA STATE UNIVERSITY + AND ALSO IN THEIR VARIOUS JOBS AFTER LEAVING ISU HAVE MADE IMPORTANT + CONTRIBUTIONS TO THE CODE: + CHRISTINE AIKENS, ROB BELL, PRADIPTA BANDYOPADHYAY, BRETT BODE, + GALINA CHABAN, WEI CHEN, CHEOL CHOI, PAUL DAY, DMITRI FEDOROV, + GRAHAM FLETCHER, MARK FREITAG, KURT GLAESEMANN, GRANT MERRILL, + MIKE PAK, JIM SHOEMAKER, TETSUYA TAKETSUGU, SIMON WEBB. + + ADDITIONAL CODE HAS BEEN PROVIDED BY COLLABORATORS IN OTHER GROUPS: + IOWA STATE UNIVERSITY: JOE IVANIC, KLAUS RUEDENBERG + UNIVERSITY OF TOKYO: KIMIHIKO HIRAO, HARUYUKI NAKANO, TAKAHITO + NAKAJIMA, TAKAO TSUNEDA, MUNEAKI KAMIYA, SUSUMU YANAGISAWA + ODENSE UNIVERSITY: FRANK JENSEN + UNIVERSITY OF IOWA: VISVALDAS KAIRYS, HUI LI + NATIONAL INST. OF STANDARDS AND TECHNOLOGY: WALT STEVENS, DAVID GARMER + UNIVERSITY OF PISA: BENEDETTA MENNUCCI, JACOPO TOMASI + UNIVERSITY OF MEMPHIS: HENRY KURTZ, PRAKASHAN KORAMBATH + UNIVERSITY OF ALBERTA: MARIUSZ KLOBUKOWSKI + UNIVERSITY OF NEW ENGLAND: MARK SPACKMAN + MIE UNIVERSITY: HIROAKI UMEDA + MICHIGAN STATE UNIVERSITY: KAROL KOWALSKI, PIOTR PIECUCH + UNIVERSITY OF SILESIA: MONIKA MUSIAL, STANISLAW KUCHARSKI + + EXECUTION OF GAMESS BEGUN Wed Feb 19 17:02:56 2003 + + ECHO OF THE FIRST FEW INPUT CARDS - + INPUT CARD>!coords from: http://long-march.mit.edu/liju99/Papers/QC.ps + INPUT CARD> $CONTRL SCFTYP=ROHF MULT=1 ICHARG=0 RUNTYP=ENERGY MAXIT=70 ECP=READ $END + INPUT CARD> $SYSTEM KDIAG=3 $END + INPUT CARD> $SCF DIRSCF=.T. SOSCF=.F. $END + INPUT CARD> $DATA + INPUT CARD> + INPUT CARD>C1 + INPUT CARD>H 1.0 -0.8796102553 -0.5078432177 1.1532386695 + INPUT CARD> S 3 + INPUT CARD> 1 18.73113700 0.3349460000E-01 + INPUT CARD> 2 2.825393700 0.2347269500 + INPUT CARD> 3 0.6401217000 0.8137573300 + INPUT CARD> S 1 + INPUT CARD> 1 0.1612778000 1.000000000 + INPUT CARD> + INPUT CARD>H 1.0 0.8796102553 -0.5078432177 1.1532386695 + INPUT CARD> S 3 + INPUT CARD> 1 18.73113700 0.3349460000E-01 + INPUT CARD> 2 2.825393700 0.2347269500 + INPUT CARD> 3 0.6401217000 0.8137573300 + INPUT CARD> S 1 + INPUT CARD> 1 0.1612778000 1.000000000 + INPUT CARD> + INPUT CARD>H 1.0 -0.0 -1.0156864354 -1.1532386695 + INPUT CARD> S 3 + INPUT CARD> 1 18.73113700 0.3349460000E-01 + INPUT CARD> 2 2.825393700 0.2347269500 + INPUT CARD> 3 0.6401217000 0.8137573300 + INPUT CARD> S 1 + INPUT CARD> 1 0.1612778000 1.000000000 + INPUT CARD> + INPUT CARD>H 1.0 0.8796102553 0.5078432177 -1.1532386695 + INPUT CARD> S 3 + INPUT CARD> 1 18.73113700 0.3349460000E-01 + INPUT CARD> 2 2.825393700 0.2347269500 + INPUT CARD> 3 0.6401217000 0.8137573300 + INPUT CARD> S 1 + INPUT CARD> 1 0.1612778000 1.000000000 + INPUT CARD> + INPUT CARD>H 1.0 -0.8796102553 0.5078432177 -1.1532386695 + INPUT CARD> S 3 + INPUT CARD> 1 18.73113700 0.3349460000E-01 + INPUT CARD> 2 2.825393700 0.2347269500 + INPUT CARD> 3 0.6401217000 0.8137573300 + INPUT CARD> S 1 + INPUT CARD> 1 0.1612778000 1.000000000 + INPUT CARD> + INPUT CARD>H 1.0 0.0 1.0156864354 1.1532386695 + INPUT CARD> S 3 + INPUT CARD> 1 18.73113700 0.3349460000E-01 + + ..... DONE SETTING UP THE RUN ..... + 1000000 WORDS OF MEMORY AVAILABLE + + + RUN TITLE + --------- + + + THE POINT GROUP OF THE MOLECULE IS C1 + THE ORDER OF THE PRINCIPAL AXIS IS 0 + *** WARNING! ATOM 7 SHELL 13 TYPE S HAS NORMALIZATION 0.99999875 + *** WARNING! ATOM 7 SHELL 16 TYPE P HAS NORMALIZATION 1.00002537 + *** WARNING! ATOM 8 SHELL 20 TYPE S HAS NORMALIZATION 0.99999875 + *** WARNING! ATOM 8 SHELL 23 TYPE P HAS NORMALIZATION 1.00002537 + + ATOM ATOMIC COORDINATES (BOHR) + CHARGE X Y Z + H 1.0 -1.6622223585 -0.9596845262 2.1793050838 + H 1.0 1.6622223585 -0.9596845262 2.1793050838 + H 1.0 0.0000000000 -1.9193690524 -2.1793050838 + H 1.0 1.6622223585 0.9596845262 -2.1793050838 + H 1.0 -1.6622223585 0.9596845262 -2.1793050838 + H 1.0 0.0000000000 1.9193690524 2.1793050838 + C 6.0 0.0000000000 0.0000000000 -1.4528941947 + C 6.0 0.0000000000 0.0000000000 1.4528941947 + + INTERNUCLEAR DISTANCES (ANGS.) + ------------------------------ + + H H H H + + 1 H 0.0000000 1.7592205 * 2.5202096 * 3.0734856 + 2 H 1.7592205 * 0.0000000 2.5202096 * 2.5202096 * + 3 H 2.5202096 * 2.5202096 * 0.0000000 1.7592205 * + 4 H 3.0734856 2.5202096 * 1.7592205 * 0.0000000 + 5 H 2.5202096 * 3.0734856 1.7592205 * 1.7592205 * + 6 H 1.7592205 * 1.7592205 * 3.0734856 2.5202096 * + 7 C 2.1739365 * 2.1739365 * 1.0859937 * 1.0859937 * + 8 C 1.0859937 * 1.0859937 * 2.1739365 * 2.1739365 * + + H H C C + + 1 H 2.5202096 * 1.7592205 * 2.1739365 * 1.0859937 * + 2 H 3.0734856 1.7592205 * 2.1739365 * 1.0859937 * + 3 H 1.7592205 * 3.0734856 1.0859937 * 2.1739365 * + 4 H 1.7592205 * 2.5202096 * 1.0859937 * 2.1739365 * + 5 H 0.0000000 2.5202096 * 1.0859937 * 2.1739365 * + 6 H 2.5202096 * 0.0000000 2.1739365 * 1.0859937 * + 7 C 1.0859937 * 2.1739365 * 0.0000000 1.5376771 * + 8 C 2.1739365 * 1.0859937 * 1.5376771 * 0.0000000 + + * ... LESS THAN 3.000 + + + ATOMIC BASIS SET + ---------------- + THE CONTRACTED PRIMITIVE FUNCTIONS HAVE BEEN UNNORMALIZED + THE CONTRACTED BASIS FUNCTIONS ARE NOW NORMALIZED TO UNITY + + SHELL TYPE PRIMITIVE EXPONENT CONTRACTION COEFFICIENTS + + H + + 1 S 1 18.7311370 0.033494599523 + 1 S 2 2.8253937 0.234726946658 + 1 S 3 0.6401217 0.813757318413 + + 2 S 4 0.1612778 1.000000000000 + + H + + 3 S 5 18.7311370 0.033494599523 + 3 S 6 2.8253937 0.234726946658 + 3 S 7 0.6401217 0.813757318413 + + 4 S 8 0.1612778 1.000000000000 + + H + + 5 S 9 18.7311370 0.033494599523 + 5 S 10 2.8253937 0.234726946658 + 5 S 11 0.6401217 0.813757318413 + + 6 S 12 0.1612778 1.000000000000 + + H + + 7 S 13 18.7311370 0.033494599523 + 7 S 14 2.8253937 0.234726946658 + 7 S 15 0.6401217 0.813757318413 + + 8 S 16 0.1612778 1.000000000000 + + H + + 9 S 17 18.7311370 0.033494599523 + 9 S 18 2.8253937 0.234726946658 + 9 S 19 0.6401217 0.813757318413 + + 10 S 20 0.1612778 1.000000000000 + + H + + 11 S 21 18.7311370 0.033494599523 + 11 S 22 2.8253937 0.234726946658 + 11 S 23 0.6401217 0.813757318413 + + 12 S 24 0.1612778 1.000000000000 + + C + + 13 S 25 8.1380377 0.011795903264 + 13 S 26 3.3151758 -0.151981060139 + 13 S 27 0.6682763 0.275523135804 + 13 S 28 0.2917677 0.548644454609 + 13 S 29 0.1141135 0.301214733709 + + 14 S 30 0.9059000 1.000000000000 + + 15 S 31 0.1285000 1.000000000000 + + 16 P 32 8.5281305 0.023512997445 + 16 P 33 2.9014509 0.116488694925 + 16 P 34 0.9431209 0.327782154726 + 16 P 35 0.3155856 0.492614035954 + 16 P 36 0.1039361 0.273131208416 + + 17 P 37 0.3827000 1.000000000000 + + 18 P 38 0.1209000 1.000000000000 + + 19 D 39 0.5500000 1.000000000000 + + C + + 20 S 40 8.1380377 0.011795903264 + 20 S 41 3.3151758 -0.151981060139 + 20 S 42 0.6682763 0.275523135804 + 20 S 43 0.2917677 0.548644454609 + 20 S 44 0.1141135 0.301214733709 + + 21 S 45 0.9059000 1.000000000000 + + 22 S 46 0.1285000 1.000000000000 + + 23 P 47 8.5281305 0.023512997445 + 23 P 48 2.9014509 0.116488694925 + 23 P 49 0.9431209 0.327782154726 + 23 P 50 0.3155856 0.492614035954 + 23 P 51 0.1039361 0.273131208416 + + 24 P 52 0.3827000 1.000000000000 + + 25 P 53 0.1209000 1.000000000000 + + 26 D 54 0.5500000 1.000000000000 + + TOTAL NUMBER OF BASIS SET SHELLS = 26 + NUMBER OF CARTESIAN GAUSSIAN BASIS FUNCTIONS = 48 + NUMBER OF ELECTRONS = 18 + CHARGE OF MOLECULE = 0 + SPIN MULTIPLICITY = 1 + NUMBER OF OCCUPIED ORBITALS (ALPHA) = 9 + NUMBER OF OCCUPIED ORBITALS (BETA ) = 9 + TOTAL NUMBER OF ATOMS = 8 + THE NUCLEAR REPULSION ENERGY IS 42.2752124922 + NOTE THIS RUN IS USING CORE POTENTIALS, AND THE NUMBER OF ELECTRONS, + OCCUPIED ORBITALS, AND NUCLEAR REPULSION ENERGY WILL BE ADJUSTED BELOW + AFTER REMOVAL OF THE CORE CHARGES. + + $CONTRL OPTIONS + --------------- + SCFTYP=ROHF RUNTYP=ENERGY EXETYP=RUN + MPLEVL= 0 CITYP =NONE CCTYP =NONE + MULT = 1 ICHARG= 0 NZVAR = 0 COORD =UNIQUE + ECP =READ RELWFN=NONE LOCAL =NONE + ISPHER= -1 NOSYM = 0 MAXIT = 70 UNITS =ANGS + PLTORB= F MOLPLT= F AIMPAC= F FRIEND= + NPRINT= 7 IREST = 0 GEOM =INPUT + NORMF = 0 NORMP = 0 ITOL = 20 ICUT = 9 + INTTYP=POPLE QMTTOL= 1.0E-06 + + $SYSTEM OPTIONS + --------------- + REPLICATED MEMORY= 1000000 WORDS (ON EVERY NODE). + DISTRIBUTED MEMDDI= 0 MILLION WORDS IN AGGREGATE, + MEMDDI DISTRIBUTED OVER 1 PROCESSORS IS 0 WORDS/PROCESSOR. + TOTAL MEMORY REQUESTED ON EACH PROCESSOR= 1000000 WORDS. + TIMLIM= 36000.0 SECONDS. + COREFL=F KDIAG= 3 + + -------------- + ECP POTENTIALS + -------------- + + PARAMETERS FOR "C-LES " ON ATOM 7 WITH ZCORE 2 AND LMAX 1 ARE + FOR L= 1 COEFF N ZETA + 1 -16.75549 2 7.71902 + 2 -0.31894 2 2184.31540 + 3 -2.90450 2 20.77701 + 4 -1.24270 2 76.39483 + 5 -0.60199 2 351.76123 + 6 0.21814 2 3.95786 + 7 4.00000 1 5.99247 + FOR L= 0 COEFF N ZETA + 1 27.00696 2 5.74119 + 2 8.57270 2 5.12564 + 3 -6.33646 2 4.68310 + + PARAMETERS FOR "C-LES " ON ATOM 8 ARE THE SAME AS ATOM 7 + + THE ECP RUN REMOVES 4 CORE ELECTRONS, AND THE SAME NUMBER OF PROTONS. + NUMBER OF ELECTRONS KEPT IN THE CALCULATION IS = 14 + NUMBER OF OCCUPIED ORBITALS (ALPHA) KEPT IS = 7 + NUMBER OF OCCUPIED ORBITALS (BETA ) KEPT IS = 7 + THE ADJUSTED NUCLEAR REPULSION ENERGY= 26.6240757288 + ECP ANGULAR INTS......... 0.00 SECONDS + + ---------------- + PROPERTIES INPUT + ---------------- + + MOMENTS FIELD POTENTIAL DENSITY + IEMOM = 1 IEFLD = 0 IEPOT = 0 IEDEN = 0 + WHERE =COMASS WHERE =NUCLEI WHERE =NUCLEI WHERE =NUCLEI + OUTPUT=BOTH OUTPUT=BOTH OUTPUT=BOTH OUTPUT=BOTH + IEMINT= 0 IEFINT= 0 IEDINT= 0 + MORB = 0 + EXTRAPOLATION IN EFFECT + SOSCF IN EFFECT + + ------------------------------- + INTEGRAL TRANSFORMATION OPTIONS + ------------------------------- + NWORD = 0 CUTOFF = 1.0E-09 + MPTRAN = 0 DIRTRF = T + AOINTS =DUP + + ---------------------- + INTEGRAL INPUT OPTIONS + ---------------------- + NOPK = 1 NORDER= 0 SCHWRZ= T + + ------------------------------------------ + THE POINT GROUP IS C1 , NAXIS= 0, ORDER= 1 + ------------------------------------------ + + DIMENSIONS OF THE SYMMETRY SUBSPACES ARE + A = 48 + + ..... DONE SETTING UP THE RUN ..... + STEP CPU TIME = 0.04 TOTAL CPU TIME = 0.0 ( 0.0 MIN) + TOTAL WALL CLOCK TIME= 0.0 SECONDS, CPU UTILIZATION IS 100.00% + + ******************** + 1 ELECTRON INTEGRALS + ******************** + TIME TO DO ORDINARY INTEGRALS= 0.01 + TIME TO DO ECP INTEGRALS= 0.04 + ...... END OF ONE-ELECTRON INTEGRALS ...... + STEP CPU TIME = 0.05 TOTAL CPU TIME = 0.1 ( 0.0 MIN) + TOTAL WALL CLOCK TIME= 0.1 SECONDS, CPU UTILIZATION IS 100.00% + + ------------- + GUESS OPTIONS + ------------- + GUESS =HUCKEL NORB = 0 NORDER= 0 + MIX = F PRTMO = F PUNMO = F + TOLZ = 1.0E-08 TOLE = 1.0E-05 + SYMDEN= F PURIFY= F + + INITIAL GUESS ORBITALS GENERATED BY HUCKEL ROUTINE. + HUCKEL GUESS REQUIRES 23456 WORDS. + + SYMMETRIES FOR INITIAL GUESS ORBITALS FOLLOW. ALPHA SET(S). + 7 ORBITALS ARE OCCUPIED ( 0 CORE ORBITALS). + 1=A 2=A 3=A 4=A 5=A 6=A 7=A + 8=A 9=A 10=A 11=A 12=A 13=A 14=A + 15=A 16=A 17=A + + SYMMETRIES FOR INITIAL GUESS ORBITALS FOLLOW. BETA SET(S). + 7 ORBITALS ARE OCCUPIED ( 0 CORE ORBITALS). + 1=A 2=A 3=A 4=A 5=A 6=A 7=A + 8=A 9=A 10=A 11=A 12=A 13=A 14=A + 15=A 16=A 17=A + ...... END OF INITIAL ORBITAL SELECTION ...... + STEP CPU TIME = 0.06 TOTAL CPU TIME = 0.2 ( 0.0 MIN) + TOTAL WALL CLOCK TIME= 0.1 SECONDS, CPU UTILIZATION IS 100.00% + + -------------------- + 2 ELECTRON INTEGRALS + -------------------- + + DIRECT SCF METHOD SKIPS INTEGRAL STORAGE ON DISK. + DIRECT TRANSFORMATION SKIPS AO INTEGRAL STORAGE ON DISK. + ...... END OF TWO-ELECTRON INTEGRALS ..... + STEP CPU TIME = 0.00 TOTAL CPU TIME = 0.2 ( 0.0 MIN) + TOTAL WALL CLOCK TIME= 0.1 SECONDS, CPU UTILIZATION IS 100.00% + + --------------------------- + ROHF SCF CALCULATION + --------------------------- + + NUCLEAR ENERGY = 26.6240757288 + MAXIT = 70 NPUNCH= 2 MULT= 1 + EXTRAP=T DAMP=F SHIFT=F RSTRCT=F DIIS=F SOSCF=T + DENSITY CONV= 2.00E-05 + ROHF CANONICALIZATION PARAMETERS + C-C O-O V-V + ALPHA -0.5000 0.5000 1.5000 + BETA 1.5000 0.5000 -0.5000 + SOSCF WILL OPTIMIZE 287 ORBITAL ROTATION ANGLES. SOGTOL= 2.500E-01 + MEMORY REQUIRED FOR UHF/ROHF STEP= 39576 WORDS. + + DIRECT SCF CALCULATION, SCHWRZ=T FDIFF=T + SCHWARZ INEQUALITY OVERHEAD: 1176 INTEGRALS, T= 0.01 + + NONZERO BLOCKS + ITER EX TOTAL ENERGY E CHANGE DENSITY CHANGE ORB. GRAD INTEGRALS SKIPPED + 1 0 -14.327268912 -14.327268912 0.874842284 0.000000000 472972 6 + ---------------START SECOND ORDER SCF--------------- + 2 1 -14.489098773 -0.161829861 0.087920491 0.021927955 472954 24 + 3 2 -14.495927845 -0.006829072 0.036293495 0.009967587 472918 60 + 4 3 -14.496911204 -0.000983358 0.003284057 0.001605789 472744 156 + 5 4 -14.496934513 -0.000023309 0.000958771 0.000439966 472392 342 + 6 5 -14.496935979 -0.000001466 0.000198949 0.000067832 471524 691 + 7 6 -14.496936026 -0.000000047 0.000044329 0.000014069 469680 1547 + 8 7 -14.496936028 -0.000000002 0.000006085 0.000001671 465515 2622 + 9 8 -14.496936029 0.000000000 0.000001595 0.000000309 455533 5497 + + ----------------- + DENSITY CONVERGED + ----------------- + + FINAL ROHF ENERGY IS -14.4969360289 AFTER 9 ITERATIONS + + -------------------- + SPIN SZ = 0.000 + S-SQUARED = 0.000 + -------------------- + + ------------ + EIGENVECTORS + ------------ + + 1 2 3 4 5 + -1.0201 -0.8453 -0.5986 -0.5986 -0.5048 + A A A A A + 1 H 1 S 0.085325 0.113827 -0.168101 -0.048971 -0.077644 + 2 H 1 S 0.019823 0.049311 -0.120751 -0.035177 -0.085840 + 3 H 2 S 0.085325 0.113827 0.126461 -0.121095 -0.077644 + 4 H 2 S 0.019823 0.049311 0.090840 -0.086985 -0.085840 + 5 H 3 S 0.085325 -0.113827 -0.041641 -0.170066 -0.077644 + 6 H 3 S 0.019823 -0.049311 -0.029911 -0.122162 -0.085840 + 7 H 4 S 0.085325 -0.113827 0.168101 0.048971 -0.077644 + 8 H 4 S 0.019823 -0.049311 0.120751 0.035177 -0.085840 + 9 H 5 S 0.085325 -0.113827 -0.126461 0.121095 -0.077644 + 10 H 5 S 0.019823 -0.049311 -0.090840 0.086985 -0.085840 + 11 H 6 S 0.085325 0.113827 0.041641 0.170066 -0.077644 + 12 H 6 S 0.019823 0.049311 0.029911 0.122162 -0.085840 + 13 C 7 S 0.596445 -0.533521 0.000000 0.000000 0.074383 + 14 C 7 S -0.017056 0.013407 0.000000 0.000000 -0.004336 + 15 C 7 S -0.114753 0.067821 0.000000 0.000000 0.012051 + 16 C 7 X 0.000000 0.000000 0.444710 -0.108887 0.000000 + 17 C 7 Y 0.000000 0.000000 0.108887 0.444710 0.000000 + 18 C 7 Z 0.084382 0.177325 0.000000 0.000000 0.601588 + 19 C 7 X 0.000000 0.000000 0.012846 -0.003145 0.000000 + 20 C 7 Y 0.000000 0.000000 0.003145 0.012846 0.000000 + 21 C 7 Z -0.008974 0.029632 0.000000 0.000000 -0.002689 + 22 C 7 X 0.000000 0.000000 -0.065592 0.016060 0.000000 + 23 C 7 Y 0.000000 0.000000 -0.016060 -0.065592 0.000000 + 24 C 7 Z -0.024042 -0.044636 0.000000 0.000000 -0.067355 + 25 C 7 XX -0.001476 -0.012378 0.004756 0.019424 -0.018293 + 26 C 7 YY -0.001476 -0.012378 -0.004756 -0.019424 -0.018293 + 27 C 7 ZZ 0.006473 0.029608 0.000000 0.000000 0.025442 + 28 C 7 XY 0.000000 0.000000 0.022429 -0.005492 0.000000 + 29 C 7 XZ 0.000000 0.000000 -0.010307 0.002524 0.000000 + 30 C 7 YZ 0.000000 0.000000 -0.002524 -0.010307 0.000000 + 31 C 8 S 0.596445 0.533521 0.000000 0.000000 0.074383 + 32 C 8 S -0.017056 -0.013407 0.000000 0.000000 -0.004336 + 33 C 8 S -0.114753 -0.067821 0.000000 0.000000 0.012051 + 34 C 8 X 0.000000 0.000000 0.444710 -0.108887 0.000000 + 35 C 8 Y 0.000000 0.000000 0.108887 0.444710 0.000000 + 36 C 8 Z -0.084382 0.177325 0.000000 0.000000 -0.601588 + 37 C 8 X 0.000000 0.000000 0.012846 -0.003145 0.000000 + 38 C 8 Y 0.000000 0.000000 0.003145 0.012846 0.000000 + 39 C 8 Z 0.008974 0.029632 0.000000 0.000000 0.002689 + 40 C 8 X 0.000000 0.000000 -0.065592 0.016060 0.000000 + 41 C 8 Y 0.000000 0.000000 -0.016060 -0.065592 0.000000 + 42 C 8 Z 0.024042 -0.044636 0.000000 0.000000 0.067355 + 43 C 8 XX -0.001476 0.012378 -0.004756 -0.019424 -0.018293 + 44 C 8 YY -0.001476 0.012378 0.004756 0.019424 -0.018293 + 45 C 8 ZZ 0.006473 -0.029608 0.000000 0.000000 0.025442 + 46 C 8 XY 0.000000 0.000000 -0.022429 0.005492 0.000000 + 47 C 8 XZ 0.000000 0.000000 0.010307 -0.002524 0.000000 + 48 C 8 YZ 0.000000 0.000000 0.002524 0.010307 0.000000 + + 6 7 8 9 10 + -0.4900 -0.4900 0.2636 0.2657 0.3106 + A A A A A + 1 H 1 S -0.194760 -0.054302 0.012848 0.008608 0.005315 + 2 H 1 S -0.186059 -0.051876 -0.562689 -1.101918 0.339019 + 3 H 2 S 0.144407 -0.141516 0.012848 0.008608 0.020909 + 4 H 2 S 0.137955 -0.135194 -0.562689 -1.101918 1.333673 + 5 H 3 S 0.050353 0.195818 -0.012848 0.008608 -0.026224 + 6 H 3 S 0.048104 0.187069 0.562689 -1.101918 -1.672691 + 7 H 4 S -0.194760 -0.054302 -0.012848 0.008608 0.005315 + 8 H 4 S -0.186059 -0.051876 0.562689 -1.101918 0.339019 + 9 H 5 S 0.144407 -0.141516 -0.012848 0.008608 0.020909 + 10 H 5 S 0.137955 -0.135194 0.562689 -1.101918 1.333673 + 11 H 6 S 0.050353 0.195818 0.012848 0.008608 -0.026224 + 12 H 6 S 0.048104 0.187069 -0.562689 -1.101918 -1.672691 + 13 C 7 S 0.000000 0.000000 -0.392043 0.344556 0.000000 + 14 C 7 S 0.000000 0.000000 0.116136 0.021527 0.000000 + 15 C 7 S 0.000000 0.000000 -4.103178 1.987630 0.000000 + 16 C 7 X -0.442112 0.113686 0.000000 0.000000 0.071221 + 17 C 7 Y -0.113686 -0.442112 0.000000 0.000000 -0.207448 + 18 C 7 Z 0.000000 0.000000 -0.109913 -0.122862 0.000000 + 19 C 7 X -0.015970 0.004107 0.000000 0.000000 -0.014155 + 20 C 7 Y -0.004107 -0.015970 0.000000 0.000000 0.041230 + 21 C 7 Z 0.000000 0.000000 0.117367 -0.021712 0.000000 + 22 C 7 X 0.037748 -0.009707 0.000000 0.000000 0.732009 + 23 C 7 Y 0.009707 0.037748 0.000000 0.000000 -2.132165 + 24 C 7 Z 0.000000 0.000000 -1.866475 -0.746575 0.000000 + 25 C 7 XX -0.006205 -0.024131 0.071611 0.024484 0.017544 + 26 C 7 YY 0.006205 0.024131 0.071611 0.024484 -0.017544 + 27 C 7 ZZ 0.000000 0.000000 0.107892 0.041462 0.000000 + 28 C 7 XY -0.027864 0.007165 0.000000 0.000000 -0.006955 + 29 C 7 XZ 0.030833 -0.007928 0.000000 0.000000 -0.005150 + 30 C 7 YZ 0.007928 0.030833 0.000000 0.000000 0.015000 + 31 C 8 S 0.000000 0.000000 0.392043 0.344556 0.000000 + 32 C 8 S 0.000000 0.000000 -0.116136 0.021527 0.000000 + 33 C 8 S 0.000000 0.000000 4.103178 1.987630 0.000000 + 34 C 8 X 0.442112 -0.113686 0.000000 0.000000 -0.071221 + 35 C 8 Y 0.113686 0.442112 0.000000 0.000000 0.207448 + 36 C 8 Z 0.000000 0.000000 -0.109913 0.122862 0.000000 + 37 C 8 X 0.015970 -0.004107 0.000000 0.000000 0.014155 + 38 C 8 Y 0.004107 0.015970 0.000000 0.000000 -0.041230 + 39 C 8 Z 0.000000 0.000000 0.117367 0.021712 0.000000 + 40 C 8 X -0.037748 0.009707 0.000000 0.000000 -0.732009 + 41 C 8 Y -0.009707 -0.037748 0.000000 0.000000 2.132165 + 42 C 8 Z 0.000000 0.000000 -1.866475 0.746575 0.000000 + 43 C 8 XX -0.006205 -0.024131 -0.071611 0.024484 0.017544 + 44 C 8 YY 0.006205 0.024131 -0.071611 0.024484 -0.017544 + 45 C 8 ZZ 0.000000 0.000000 -0.107892 0.041462 0.000000 + 46 C 8 XY -0.027864 0.007165 0.000000 0.000000 -0.006955 + 47 C 8 XZ 0.030833 -0.007928 0.000000 0.000000 -0.005150 + 48 C 8 YZ 0.007928 0.030833 0.000000 0.000000 0.015000 + + 11 12 13 14 15 + 0.3106 0.3477 0.3477 0.3761 0.4158 + A A A A A + 1 H 1 S 0.027212 0.081781 0.005917 0.028747 -0.055114 + 2 H 1 S 1.735725 1.554387 0.112465 1.378524 -0.036382 + 3 H 2 S -0.018209 -0.046015 0.067866 0.028747 -0.055114 + 4 H 2 S -1.161461 -0.874591 1.289907 1.378525 -0.036382 + 5 H 3 S -0.009003 0.035766 0.073783 -0.028747 -0.055114 + 6 H 3 S -0.574264 0.679796 1.402371 -1.378525 -0.036382 + 7 H 4 S 0.027212 -0.081781 -0.005917 -0.028747 -0.055114 + 8 H 4 S 1.735725 -1.554387 -0.112465 -1.378524 -0.036382 + 9 H 5 S -0.018209 0.046015 -0.067866 -0.028747 -0.055114 + 10 H 5 S -1.161461 0.874591 -1.289907 -1.378525 -0.036382 + 11 H 6 S -0.009003 -0.035766 -0.073783 0.028747 -0.055114 + 12 H 6 S -0.574264 -0.679796 -1.402371 1.378525 -0.036382 + 13 C 7 S 0.000000 0.000000 0.000000 0.141381 -0.100533 + 14 C 7 S 0.000000 0.000000 0.000000 -0.048573 -0.048002 + 15 C 7 S 0.000000 0.000000 0.000000 2.146562 0.660981 + 16 C 7 X -0.207448 0.275575 -0.133584 0.000000 0.000000 + 17 C 7 Y -0.071221 0.133584 0.275575 0.000000 0.000000 + 18 C 7 Z 0.000000 0.000000 0.000000 -0.319372 0.278914 + 19 C 7 X 0.041230 0.092893 -0.045030 0.000000 0.000000 + 20 C 7 Y 0.014155 0.045030 0.092893 0.000000 0.000000 + 21 C 7 Z 0.000000 0.000000 0.000000 -0.006783 0.359303 + 22 C 7 X -2.132165 0.829092 -0.401900 0.000000 0.000000 + 23 C 7 Y -0.732009 0.401900 0.829092 0.000000 0.000000 + 24 C 7 Z 0.000000 0.000000 0.000000 -1.239516 -1.141254 + 25 C 7 XX 0.006023 -0.004114 -0.008488 -0.045029 -0.060806 + 26 C 7 YY -0.006023 0.004114 0.008488 -0.045029 -0.060806 + 27 C 7 ZZ 0.000000 0.000000 0.000000 0.004779 -0.035531 + 28 C 7 XY 0.020258 -0.009801 0.004751 0.000000 0.000000 + 29 C 7 XZ 0.015000 0.024369 -0.011813 0.000000 0.000000 + 30 C 7 YZ 0.005150 0.011813 0.024369 0.000000 0.000000 + 31 C 8 S 0.000000 0.000000 0.000000 -0.141381 -0.100533 + 32 C 8 S 0.000000 0.000000 0.000000 0.048573 -0.048002 + 33 C 8 S 0.000000 0.000000 0.000000 -2.146562 0.660981 + 34 C 8 X 0.207448 0.275575 -0.133584 0.000000 0.000000 + 35 C 8 Y 0.071221 0.133584 0.275575 0.000000 0.000000 + 36 C 8 Z 0.000000 0.000000 0.000000 -0.319372 -0.278914 + 37 C 8 X -0.041230 0.092893 -0.045030 0.000000 0.000000 + 38 C 8 Y -0.014155 0.045030 0.092893 0.000000 0.000000 + 39 C 8 Z 0.000000 0.000000 0.000000 -0.006783 -0.359303 + 40 C 8 X 2.132165 0.829092 -0.401900 0.000000 0.000000 + 41 C 8 Y 0.732009 0.401900 0.829092 0.000000 0.000000 + 42 C 8 Z 0.000000 0.000000 0.000000 -1.239516 1.141254 + 43 C 8 XX 0.006023 0.004114 0.008488 0.045029 -0.060806 + 44 C 8 YY -0.006023 -0.004114 -0.008488 0.045029 -0.060806 + 45 C 8 ZZ 0.000000 0.000000 0.000000 -0.004779 -0.035531 + 46 C 8 XY 0.020258 0.009801 -0.004751 0.000000 0.000000 + 47 C 8 XZ 0.015000 -0.024369 0.011813 0.000000 0.000000 + 48 C 8 YZ 0.005150 -0.011813 -0.024369 0.000000 0.000000 + + 16 17 18 19 20 + 0.4415 0.4415 0.4879 0.4879 0.7069 + A A A A A + 1 H 1 S 0.093314 0.039557 0.070072 0.023584 -0.025256 + 2 H 1 S 0.405438 0.171873 -0.061554 -0.020717 -0.628856 + 3 H 2 S -0.012399 -0.100591 -0.014612 -0.072476 -0.025256 + 4 H 2 S -0.053873 -0.437056 0.012836 0.063666 -0.628856 + 5 H 3 S 0.080914 -0.061033 -0.055460 0.048892 0.025256 + 6 H 3 S 0.351565 -0.265183 0.048718 -0.042949 0.628856 + 7 H 4 S -0.093314 -0.039557 0.070072 0.023584 0.025256 + 8 H 4 S -0.405438 -0.171873 -0.061554 -0.020717 0.628856 + 9 H 5 S 0.012399 0.100591 -0.014612 -0.072476 0.025256 + 10 H 5 S 0.053873 0.437056 0.012836 0.063666 0.628856 + 11 H 6 S -0.080914 0.061033 -0.055460 0.048892 -0.025256 + 12 H 6 S -0.351565 0.265183 0.048718 -0.042949 -0.628856 + 13 C 7 S 0.000000 0.000000 0.000000 0.000000 -0.356443 + 14 C 7 S 0.000000 0.000000 0.000000 0.000000 -0.032873 + 15 C 7 S 0.000000 0.000000 0.000000 0.000000 -0.359718 + 16 C 7 X -0.169665 -0.224933 0.278556 0.315976 0.000000 + 17 C 7 Y -0.224933 0.169665 0.315976 -0.278556 0.000000 + 18 C 7 Z 0.000000 0.000000 0.000000 0.000000 -0.733457 + 19 C 7 X -0.256041 -0.339444 0.282166 0.320072 0.000000 + 20 C 7 Y -0.339444 0.256041 0.320072 -0.282166 0.000000 + 21 C 7 Z 0.000000 0.000000 0.000000 0.000000 -0.432211 + 22 C 7 X 0.702464 0.931287 -0.945682 -1.072724 0.000000 + 23 C 7 Y 0.931287 -0.702464 -1.072724 0.945682 0.000000 + 24 C 7 Z 0.000000 0.000000 0.000000 0.000000 1.592021 + 25 C 7 XX -0.022436 0.016923 0.016197 -0.014279 -0.083867 + 26 C 7 YY 0.022436 -0.016923 -0.016197 0.014279 -0.083867 + 27 C 7 ZZ 0.000000 0.000000 0.000000 0.000000 0.090822 + 28 C 7 XY -0.019541 -0.025907 0.016488 0.018703 0.000000 + 29 C 7 XZ 0.001591 0.002109 -0.015502 -0.017584 0.000000 + 30 C 7 YZ 0.002109 -0.001591 -0.017584 0.015502 0.000000 + 31 C 8 S 0.000000 0.000000 0.000000 0.000000 0.356443 + 32 C 8 S 0.000000 0.000000 0.000000 0.000000 0.032873 + 33 C 8 S 0.000000 0.000000 0.000000 0.000000 0.359718 + 34 C 8 X -0.169665 -0.224933 -0.278556 -0.315976 0.000000 + 35 C 8 Y -0.224933 0.169665 -0.315976 0.278556 0.000000 + 36 C 8 Z 0.000000 0.000000 0.000000 0.000000 -0.733457 + 37 C 8 X -0.256041 -0.339444 -0.282166 -0.320072 0.000000 + 38 C 8 Y -0.339444 0.256041 -0.320072 0.282166 0.000000 + 39 C 8 Z 0.000000 0.000000 0.000000 0.000000 -0.432211 + 40 C 8 X 0.702464 0.931287 0.945682 1.072724 0.000000 + 41 C 8 Y 0.931287 -0.702464 1.072724 -0.945682 0.000000 + 42 C 8 Z 0.000000 0.000000 0.000000 0.000000 1.592021 + 43 C 8 XX 0.022436 -0.016923 0.016197 -0.014279 0.083867 + 44 C 8 YY -0.022436 0.016923 -0.016197 0.014279 0.083867 + 45 C 8 ZZ 0.000000 0.000000 0.000000 0.000000 -0.090822 + 46 C 8 XY 0.019541 0.025907 0.016488 0.018703 0.000000 + 47 C 8 XZ -0.001591 -0.002109 -0.015502 -0.017584 0.000000 + 48 C 8 YZ -0.002109 0.001591 -0.017584 0.015502 0.000000 + + 21 22 23 24 25 + 0.7696 0.8378 1.0691 1.0691 1.1785 + A A A A A + 1 H 1 S -0.043251 0.026147 -0.474369 0.044241 0.448521 + 2 H 1 S -1.678988 -1.654385 1.542536 -0.143861 -1.138597 + 3 H 2 S -0.043251 0.026147 0.275498 0.388695 -0.022226 + 4 H 2 S -1.678988 -1.654385 -0.895855 -1.263944 0.056422 + 5 H 3 S -0.043251 -0.026147 -0.198870 0.432936 -0.426294 + 6 H 3 S -1.678988 1.654385 0.646680 -1.407806 1.082174 + 7 H 4 S -0.043251 -0.026147 0.474369 -0.044241 0.448521 + 8 H 4 S -1.678988 1.654385 -1.542536 0.143861 -1.138597 + 9 H 5 S -0.043251 -0.026147 -0.275498 -0.388695 -0.022226 + 10 H 5 S -1.678988 1.654385 0.895855 1.263944 0.056422 + 11 H 6 S -0.043251 0.026147 0.198870 -0.432936 -0.426294 + 12 H 6 S -1.678988 -1.654385 -0.646680 1.407806 1.082174 + 13 C 7 S -0.263560 0.477058 0.000000 0.000000 0.000000 + 14 C 7 S -0.663211 0.867160 0.000000 0.000000 0.000000 + 15 C 7 S 5.196396 -11.200051 0.000000 0.000000 0.000000 + 16 C 7 X 0.000000 0.000000 -0.257142 -0.118119 -0.303113 + 17 C 7 Y 0.000000 0.000000 -0.118119 0.257142 -0.475431 + 18 C 7 Z -0.068392 -0.033024 0.000000 0.000000 0.000000 + 19 C 7 X 0.000000 0.000000 -0.061932 -0.028448 0.001637 + 20 C 7 Y 0.000000 0.000000 -0.028448 0.061932 0.002568 + 21 C 7 Z -0.163841 -0.191247 0.000000 0.000000 0.000000 + 22 C 7 X 0.000000 0.000000 1.053293 0.483833 0.738139 + 23 C 7 Y 0.000000 0.000000 0.483833 -1.053293 1.157767 + 24 C 7 Z -0.613390 -1.973523 0.000000 0.000000 0.000000 + 25 C 7 XX -0.499120 0.672854 0.052526 -0.114347 0.287337 + 26 C 7 YY -0.499120 0.672854 -0.052526 0.114347 -0.287337 + 27 C 7 ZZ -0.530100 0.623832 0.000000 0.000000 0.000000 + 28 C 7 XY 0.000000 0.000000 0.132037 0.060652 0.211533 + 29 C 7 XZ 0.000000 0.000000 -0.330285 -0.151717 -0.035212 + 30 C 7 YZ 0.000000 0.000000 -0.151717 0.330285 -0.055230 + 31 C 8 S -0.263560 -0.477058 0.000000 0.000000 0.000000 + 32 C 8 S -0.663211 -0.867160 0.000000 0.000000 0.000000 + 33 C 8 S 5.196396 11.200051 0.000000 0.000000 0.000000 + 34 C 8 X 0.000000 0.000000 -0.257142 -0.118119 0.303113 + 35 C 8 Y 0.000000 0.000000 -0.118119 0.257142 0.475431 + 36 C 8 Z 0.068392 -0.033024 0.000000 0.000000 0.000000 + 37 C 8 X 0.000000 0.000000 -0.061932 -0.028448 -0.001637 + 38 C 8 Y 0.000000 0.000000 -0.028448 0.061932 -0.002568 + 39 C 8 Z 0.163841 -0.191247 0.000000 0.000000 0.000000 + 40 C 8 X 0.000000 0.000000 1.053293 0.483833 -0.738139 + 41 C 8 Y 0.000000 0.000000 0.483833 -1.053293 -1.157767 + 42 C 8 Z 0.613390 -1.973523 0.000000 0.000000 0.000000 + 43 C 8 XX -0.499120 -0.672854 -0.052526 0.114347 0.287337 + 44 C 8 YY -0.499120 -0.672854 0.052526 -0.114347 -0.287337 + 45 C 8 ZZ -0.530100 -0.623832 0.000000 0.000000 0.000000 + 46 C 8 XY 0.000000 0.000000 -0.132037 -0.060652 0.211533 + 47 C 8 XZ 0.000000 0.000000 0.330285 0.151717 -0.035212 + 48 C 8 YZ 0.000000 0.000000 0.151717 -0.330285 -0.055230 + + 26 27 28 29 30 + 1.1785 1.2162 1.3232 1.3232 1.4213 + A A A A A + 1 H 1 S 0.233289 0.480126 0.165943 -0.190916 -0.578444 + 2 H 1 S -0.592218 -0.717630 -0.323869 0.372608 0.415704 + 3 H 2 S -0.505075 0.480126 0.082367 0.239169 -0.578444 + 4 H 2 S 1.282163 -0.717630 -0.160754 -0.466783 0.415704 + 5 H 3 S 0.271786 0.480126 0.248310 0.048253 0.578444 + 6 H 3 S -0.689945 -0.717630 -0.484623 -0.094175 -0.415704 + 7 H 4 S 0.233289 0.480126 -0.165943 0.190916 0.578444 + 8 H 4 S -0.592218 -0.717630 0.323869 -0.372608 -0.415704 + 9 H 5 S -0.505075 0.480126 -0.082367 -0.239169 0.578444 + 10 H 5 S 1.282163 -0.717630 0.160754 0.466783 -0.415704 + 11 H 6 S 0.271786 0.480126 -0.248310 -0.048253 -0.578444 + 12 H 6 S -0.689945 -0.717630 0.484623 0.094175 0.415704 + 13 C 7 S 0.000000 -0.458186 0.000000 0.000000 -0.509865 + 14 C 7 S 0.000000 -0.101986 0.000000 0.000000 0.159810 + 15 C 7 S 0.000000 1.565166 0.000000 0.000000 -2.257767 + 16 C 7 X -0.475431 0.000000 0.061749 -0.317761 0.000000 + 17 C 7 Y 0.303113 0.000000 0.317761 0.061749 0.000000 + 18 C 7 Z 0.000000 0.307505 0.000000 0.000000 0.157139 + 19 C 7 X 0.002568 0.000000 0.004266 -0.021953 0.000000 + 20 C 7 Y -0.001637 0.000000 0.021953 0.004266 0.000000 + 21 C 7 Z 0.000000 0.152214 0.000000 0.000000 -0.102441 + 22 C 7 X 1.157767 0.000000 -0.083524 0.429813 0.000000 + 23 C 7 Y -0.738139 0.000000 -0.429813 -0.083524 0.000000 + 24 C 7 Z 0.000000 -0.616333 0.000000 0.000000 -1.563994 + 25 C 7 XX -0.183193 0.094799 -0.386551 -0.075117 0.248959 + 26 C 7 YY 0.183193 0.094799 0.386551 0.075117 0.248959 + 27 C 7 ZZ 0.000000 -0.276736 0.000000 0.000000 -0.024356 + 28 C 7 XY 0.331788 0.000000 -0.086738 0.446351 0.000000 + 29 C 7 XZ -0.055230 0.000000 -0.082780 0.425983 0.000000 + 30 C 7 YZ 0.035212 0.000000 -0.425983 -0.082780 0.000000 + 31 C 8 S 0.000000 -0.458186 0.000000 0.000000 0.509865 + 32 C 8 S 0.000000 -0.101986 0.000000 0.000000 -0.159810 + 33 C 8 S 0.000000 1.565166 0.000000 0.000000 2.257767 + 34 C 8 X 0.475431 0.000000 0.061749 -0.317761 0.000000 + 35 C 8 Y -0.303113 0.000000 0.317761 0.061749 0.000000 + 36 C 8 Z 0.000000 -0.307505 0.000000 0.000000 0.157139 + 37 C 8 X -0.002568 0.000000 0.004266 -0.021953 0.000000 + 38 C 8 Y 0.001637 0.000000 0.021953 0.004266 0.000000 + 39 C 8 Z 0.000000 -0.152214 0.000000 0.000000 -0.102441 + 40 C 8 X -1.157767 0.000000 -0.083524 0.429813 0.000000 + 41 C 8 Y 0.738139 0.000000 -0.429813 -0.083524 0.000000 + 42 C 8 Z 0.000000 0.616333 0.000000 0.000000 -1.563994 + 43 C 8 XX -0.183193 0.094799 0.386551 0.075117 -0.248959 + 44 C 8 YY 0.183193 0.094799 -0.386551 -0.075117 -0.248959 + 45 C 8 ZZ 0.000000 -0.276736 0.000000 0.000000 0.024356 + 46 C 8 XY 0.331788 0.000000 0.086738 -0.446351 0.000000 + 47 C 8 XZ -0.055230 0.000000 0.082780 -0.425983 0.000000 + 48 C 8 YZ 0.035212 0.000000 0.425983 0.082780 0.000000 + + 31 32 33 34 35 + 1.6831 1.6831 1.7682 2.0813 2.0813 + A A A A A + 1 H 1 S 0.372554 -0.032320 0.286185 0.273166 0.335456 + 2 H 1 S 0.211637 -0.018360 -0.316952 -0.020003 -0.024564 + 3 H 2 S -0.214267 -0.306481 0.286185 0.153930 -0.404297 + 4 H 2 S -0.121719 -0.174103 -0.316952 -0.011272 0.029605 + 5 H 3 S -0.158287 0.338801 0.286185 0.427097 -0.068841 + 6 H 3 S -0.089918 0.192463 -0.316952 -0.031275 0.005041 + 7 H 4 S 0.372554 -0.032320 0.286185 -0.273166 -0.335456 + 8 H 4 S 0.211637 -0.018360 -0.316952 0.020003 0.024564 + 9 H 5 S -0.214267 -0.306481 0.286185 -0.153930 0.404297 + 10 H 5 S -0.121719 -0.174103 -0.316952 0.011272 -0.029605 + 11 H 6 S -0.158287 0.338801 0.286185 -0.427097 0.068841 + 12 H 6 S -0.089918 0.192463 -0.316952 0.031275 -0.005041 + 13 C 7 S 0.000000 0.000000 -0.407556 0.000000 0.000000 + 14 C 7 S 0.000000 0.000000 -0.207809 0.000000 0.000000 + 15 C 7 S 0.000000 0.000000 0.895459 0.000000 0.000000 + 16 C 7 X -0.703563 -0.328703 0.000000 0.288793 1.791700 + 17 C 7 Y -0.328703 0.703563 0.000000 1.791700 -0.288793 + 18 C 7 Z 0.000000 0.000000 0.809652 0.000000 0.000000 + 19 C 7 X 0.348711 0.162917 0.000000 -0.210318 -1.304834 + 20 C 7 Y 0.162917 -0.348711 0.000000 -1.304834 0.210318 + 21 C 7 Z 0.000000 0.000000 -0.864045 0.000000 0.000000 + 22 C 7 X -0.504943 -0.235908 0.000000 -0.049356 -0.306212 + 23 C 7 Y -0.235908 0.504943 0.000000 -0.306212 0.049356 + 24 C 7 Z 0.000000 0.000000 0.110796 0.000000 0.000000 + 25 C 7 XX -0.203517 0.435613 -0.455781 0.458884 -0.073965 + 26 C 7 YY 0.203517 -0.435613 -0.455781 -0.458884 0.073965 + 27 C 7 ZZ 0.000000 0.000000 0.559875 0.000000 0.000000 + 28 C 7 XY -0.503002 -0.235001 0.000000 0.085407 0.529874 + 29 C 7 XZ -0.438895 -0.205050 0.000000 -0.036048 -0.223644 + 30 C 7 YZ -0.205050 0.438895 0.000000 -0.223644 0.036048 + 31 C 8 S 0.000000 0.000000 -0.407556 0.000000 0.000000 + 32 C 8 S 0.000000 0.000000 -0.207809 0.000000 0.000000 + 33 C 8 S 0.000000 0.000000 0.895459 0.000000 0.000000 + 34 C 8 X 0.703563 0.328703 0.000000 0.288793 1.791700 + 35 C 8 Y 0.328703 -0.703563 0.000000 1.791700 -0.288793 + 36 C 8 Z 0.000000 0.000000 -0.809652 0.000000 0.000000 + 37 C 8 X -0.348711 -0.162917 0.000000 -0.210318 -1.304834 + 38 C 8 Y -0.162917 0.348711 0.000000 -1.304834 0.210318 + 39 C 8 Z 0.000000 0.000000 0.864045 0.000000 0.000000 + 40 C 8 X 0.504943 0.235908 0.000000 -0.049356 -0.306212 + 41 C 8 Y 0.235908 -0.504943 0.000000 -0.306212 0.049356 + 42 C 8 Z 0.000000 0.000000 -0.110796 0.000000 0.000000 + 43 C 8 XX -0.203517 0.435613 -0.455781 -0.458884 0.073965 + 44 C 8 YY 0.203517 -0.435613 -0.455781 0.458884 -0.073965 + 45 C 8 ZZ 0.000000 0.000000 0.559875 0.000000 0.000000 + 46 C 8 XY -0.503002 -0.235001 0.000000 -0.085407 -0.529874 + 47 C 8 XZ -0.438895 -0.205050 0.000000 0.036048 0.223644 + 48 C 8 YZ -0.205050 0.438895 0.000000 0.223644 -0.036048 + + 36 37 38 39 40 + 2.1016 2.1423 2.1423 2.8164 2.8759 + A A A A A + 1 H 1 S -0.130529 0.482973 0.265044 0.278870 -0.628727 + 2 H 1 S -0.109660 -0.143853 -0.078943 -0.251442 0.363696 + 3 H 2 S -0.130529 -0.011952 -0.550789 0.278870 0.579252 + 4 H 2 S -0.109660 0.003560 0.164051 -0.251442 -0.335076 + 5 H 3 S 0.130529 -0.471021 0.285745 0.278870 0.049476 + 6 H 3 S 0.109660 0.140293 -0.085109 -0.251442 -0.028620 + 7 H 4 S 0.130529 0.482973 0.265044 0.278870 -0.628727 + 8 H 4 S 0.109660 -0.143853 -0.078943 -0.251442 0.363696 + 9 H 5 S 0.130529 -0.011952 -0.550789 0.278870 0.579252 + 10 H 5 S 0.109660 0.003560 0.164051 -0.251442 -0.335076 + 11 H 6 S -0.130529 -0.471021 0.285745 0.278870 0.049476 + 12 H 6 S -0.109660 0.140293 -0.085109 -0.251442 -0.028620 + 13 C 7 S 0.096797 0.000000 0.000000 0.218581 0.000000 + 14 C 7 S 0.045724 0.000000 0.000000 -0.175177 0.000000 + 15 C 7 S 0.523616 0.000000 0.000000 0.656436 0.000000 + 16 C 7 X 0.000000 -0.416432 -0.686445 0.000000 -2.449329 + 17 C 7 Y 0.000000 -0.686445 0.416432 0.000000 -0.173756 + 18 C 7 Z 1.727206 0.000000 0.000000 -2.572739 0.000000 + 19 C 7 X 0.000000 0.314229 0.517974 0.000000 2.678213 + 20 C 7 Y 0.000000 0.517974 -0.314229 0.000000 0.189993 + 21 C 7 Z -0.951295 0.000000 0.000000 2.212622 0.000000 + 22 C 7 X 0.000000 0.076068 0.125390 0.000000 0.169608 + 23 C 7 Y 0.000000 0.125390 -0.076068 0.000000 0.012032 + 24 C 7 Z 0.139335 0.000000 0.000000 0.482138 0.000000 + 25 C 7 XX -0.350434 -0.283970 0.172271 -0.423113 0.020492 + 26 C 7 YY -0.350434 0.283970 -0.172271 -0.423113 -0.020492 + 27 C 7 ZZ 0.858400 0.000000 0.000000 -0.013305 0.000000 + 28 C 7 XY 0.000000 -0.198921 -0.327901 0.000000 0.333544 + 29 C 7 XZ 0.000000 0.452375 0.745694 0.000000 -0.103622 + 30 C 7 YZ 0.000000 0.745694 -0.452375 0.000000 -0.007351 + 31 C 8 S -0.096797 0.000000 0.000000 0.218581 0.000000 + 32 C 8 S -0.045724 0.000000 0.000000 -0.175177 0.000000 + 33 C 8 S -0.523616 0.000000 0.000000 0.656436 0.000000 + 34 C 8 X 0.000000 0.416432 0.686445 0.000000 2.449329 + 35 C 8 Y 0.000000 0.686445 -0.416432 0.000000 0.173756 + 36 C 8 Z 1.727206 0.000000 0.000000 2.572739 0.000000 + 37 C 8 X 0.000000 -0.314229 -0.517974 0.000000 -2.678213 + 38 C 8 Y 0.000000 -0.517974 0.314229 0.000000 -0.189993 + 39 C 8 Z -0.951295 0.000000 0.000000 -2.212622 0.000000 + 40 C 8 X 0.000000 -0.076068 -0.125390 0.000000 -0.169608 + 41 C 8 Y 0.000000 -0.125390 0.076068 0.000000 -0.012032 + 42 C 8 Z 0.139335 0.000000 0.000000 -0.482138 0.000000 + 43 C 8 XX 0.350434 -0.283970 0.172271 -0.423113 0.020492 + 44 C 8 YY 0.350434 0.283970 -0.172271 -0.423113 -0.020492 + 45 C 8 ZZ -0.858400 0.000000 0.000000 -0.013305 0.000000 + 46 C 8 XY 0.000000 -0.198921 -0.327901 0.000000 0.333544 + 47 C 8 XZ 0.000000 0.452375 0.745694 0.000000 -0.103622 + 48 C 8 YZ 0.000000 0.745694 -0.452375 0.000000 -0.007351 + + 41 42 43 44 45 + 2.8759 2.8840 2.9030 2.9030 2.9455 + A A A A A + 1 H 1 S -0.305866 0.253909 0.908264 -0.030240 -0.318745 + 2 H 1 S 0.176933 -0.824652 -0.633025 0.021076 0.845856 + 3 H 2 S -0.391561 0.253909 -0.427943 0.801700 -0.318745 + 4 H 2 S 0.226504 -0.824652 0.298260 -0.558754 0.845856 + 5 H 3 S 0.697427 0.253909 0.480321 0.771459 0.318745 + 6 H 3 S -0.403436 -0.824652 -0.334765 -0.537678 -0.845856 + 7 H 4 S -0.305866 0.253909 -0.908264 0.030240 0.318745 + 8 H 4 S 0.176933 -0.824652 0.633025 -0.021076 -0.845856 + 9 H 5 S -0.391561 0.253909 0.427943 -0.801700 0.318745 + 10 H 5 S 0.226504 -0.824652 -0.298260 0.558754 -0.845856 + 11 H 6 S 0.697427 0.253909 -0.480321 -0.771459 -0.318745 + 12 H 6 S -0.403436 -0.824652 0.334765 0.537678 0.845856 + 13 C 7 S 0.000000 2.641139 0.000000 0.000000 2.414948 + 14 C 7 S 0.000000 -0.357496 0.000000 0.000000 -0.382842 + 15 C 7 S 0.000000 1.576555 0.000000 0.000000 4.067822 + 16 C 7 X 0.173756 0.000000 -1.614653 1.005304 0.000000 + 17 C 7 Y -2.449329 0.000000 -1.005304 -1.614653 0.000000 + 18 C 7 Z 0.000000 0.423562 0.000000 0.000000 -0.870746 + 19 C 7 X -0.189993 0.000000 1.838109 -1.144431 0.000000 + 20 C 7 Y 2.678213 0.000000 1.144431 1.838109 0.000000 + 21 C 7 Z 0.000000 -0.261152 0.000000 0.000000 1.107013 + 22 C 7 X -0.012032 0.000000 0.093546 -0.058243 0.000000 + 23 C 7 Y 0.169608 0.000000 0.058243 0.093546 0.000000 + 24 C 7 Z 0.000000 -0.391411 0.000000 0.000000 0.893892 + 25 C 7 XX 0.288857 -1.309351 0.274739 0.441268 -1.385098 + 26 C 7 YY -0.288857 -1.309351 -0.274739 -0.441268 -1.385098 + 27 C 7 ZZ 0.000000 -1.143370 0.000000 0.000000 -0.934560 + 28 C 7 XY -0.023662 0.000000 0.509532 -0.317241 0.000000 + 29 C 7 XZ 0.007351 0.000000 -0.357536 0.222607 0.000000 + 30 C 7 YZ -0.103622 0.000000 -0.222607 -0.357536 0.000000 + 31 C 8 S 0.000000 2.641139 0.000000 0.000000 -2.414948 + 32 C 8 S 0.000000 -0.357496 0.000000 0.000000 0.382842 + 33 C 8 S 0.000000 1.576555 0.000000 0.000000 -4.067822 + 34 C 8 X -0.173756 0.000000 -1.614653 1.005304 0.000000 + 35 C 8 Y 2.449329 0.000000 -1.005304 -1.614653 0.000000 + 36 C 8 Z 0.000000 -0.423562 0.000000 0.000000 -0.870746 + 37 C 8 X 0.189993 0.000000 1.838109 -1.144431 0.000000 + 38 C 8 Y -2.678213 0.000000 1.144431 1.838109 0.000000 + 39 C 8 Z 0.000000 0.261152 0.000000 0.000000 1.107013 + 40 C 8 X 0.012032 0.000000 0.093546 -0.058243 0.000000 + 41 C 8 Y -0.169608 0.000000 0.058243 0.093546 0.000000 + 42 C 8 Z 0.000000 0.391411 0.000000 0.000000 0.893892 + 43 C 8 XX 0.288857 -1.309351 -0.274739 -0.441268 1.385098 + 44 C 8 YY -0.288857 -1.309351 0.274739 0.441268 1.385098 + 45 C 8 ZZ 0.000000 -1.143370 0.000000 0.000000 0.934560 + 46 C 8 XY -0.023662 0.000000 -0.509532 0.317241 0.000000 + 47 C 8 XZ 0.007351 0.000000 0.357536 -0.222607 0.000000 + 48 C 8 YZ -0.103622 0.000000 0.222607 0.357536 0.000000 + + 46 47 48 + 3.5891 11.9598 11.9791 + A A A + 1 H 1 S -0.239730 0.029155 0.053615 + 2 H 1 S 0.325464 -0.143545 -0.206234 + 3 H 2 S -0.239730 0.029155 0.053615 + 4 H 2 S 0.325464 -0.143545 -0.206234 + 5 H 3 S 0.239730 -0.029155 0.053615 + 6 H 3 S -0.325464 0.143545 -0.206234 + 7 H 4 S 0.239730 -0.029155 0.053615 + 8 H 4 S -0.325464 0.143545 -0.206234 + 9 H 5 S 0.239730 -0.029155 0.053615 + 10 H 5 S -0.325464 0.143545 -0.206234 + 11 H 6 S -0.239730 0.029155 0.053615 + 12 H 6 S 0.325464 -0.143545 -0.206234 + 13 C 7 S -1.197250 -8.076248 8.111185 + 14 C 7 S 0.360422 2.723715 -2.705602 + 15 C 7 S 1.304205 2.269773 -2.692338 + 16 C 7 X 0.000000 0.000000 0.000000 + 17 C 7 Y 0.000000 0.000000 0.000000 + 18 C 7 Z -2.258622 -0.043212 0.071931 + 19 C 7 X 0.000000 0.000000 0.000000 + 20 C 7 Y 0.000000 0.000000 0.000000 + 21 C 7 Z 4.494776 0.231218 -0.040548 + 22 C 7 X 0.000000 0.000000 0.000000 + 23 C 7 Y 0.000000 0.000000 0.000000 + 24 C 7 Z 0.385608 -0.183803 -0.091284 + 25 C 7 XX 0.197795 1.572292 -1.571179 + 26 C 7 YY 0.197795 1.572292 -1.571179 + 27 C 7 ZZ 2.706002 1.738391 -1.538015 + 28 C 7 XY 0.000000 0.000000 0.000000 + 29 C 7 XZ 0.000000 0.000000 0.000000 + 30 C 7 YZ 0.000000 0.000000 0.000000 + 31 C 8 S 1.197250 8.076248 8.111185 + 32 C 8 S -0.360422 -2.723715 -2.705602 + 33 C 8 S -1.304205 -2.269773 -2.692338 + 34 C 8 X 0.000000 0.000000 0.000000 + 35 C 8 Y 0.000000 0.000000 0.000000 + 36 C 8 Z -2.258622 -0.043212 -0.071931 + 37 C 8 X 0.000000 0.000000 0.000000 + 38 C 8 Y 0.000000 0.000000 0.000000 + 39 C 8 Z 4.494776 0.231218 0.040548 + 40 C 8 X 0.000000 0.000000 0.000000 + 41 C 8 Y 0.000000 0.000000 0.000000 + 42 C 8 Z 0.385608 -0.183803 0.091284 + 43 C 8 XX -0.197795 -1.572292 -1.571179 + 44 C 8 YY -0.197795 -1.572292 -1.571179 + 45 C 8 ZZ -2.706002 -1.738391 -1.538015 + 46 C 8 XY 0.000000 0.000000 0.000000 + 47 C 8 XZ 0.000000 0.000000 0.000000 + 48 C 8 YZ 0.000000 0.000000 0.000000 + ...... END OF ROHF CALCULATION ...... + STEP CPU TIME = 7.44 TOTAL CPU TIME = 7.6 ( 0.1 MIN) + TOTAL WALL CLOCK TIME= 7.7 SECONDS, CPU UTILIZATION IS 98.96% + + ----------------- + ENERGY COMPONENTS + ----------------- + + WAVEFUNCTION NORMALIZATION = 1.0000000000 + + ONE ELECTRON ENERGY = -73.1470639106 + TWO ELECTRON ENERGY = 32.0260521529 + NUCLEAR REPULSION ENERGY = 26.6240757288 + ------------------ + TOTAL ENERGY = -14.4969360289 + + ELECTRON-ELECTRON POTENTIAL ENERGY = 32.0260521529 + NUCLEUS-ELECTRON POTENTIAL ENERGY = -85.0118520386 + NUCLEUS-NUCLEUS POTENTIAL ENERGY = 26.6240757288 + ------------------ + TOTAL POTENTIAL ENERGY = -26.3617241569 + TOTAL KINETIC ENERGY = 11.8647881280 + VIRIAL RATIO (V/T) = 2.2218453353 + + --------------------------------------- + MULLIKEN AND LOWDIN POPULATION ANALYSES + --------------------------------------- + + MULLIKEN ATOMIC POPULATION IN EACH MOLECULAR ORBITAL + + 1 2 3 4 5 + + 2.000000 2.000000 2.000000 2.000000 2.000000 + + 1 0.069384 0.121056 0.235433 0.019980 0.057659 + 2 0.069384 0.121056 0.133240 0.122173 0.057659 + 3 0.069384 0.121056 0.014446 0.240967 0.057659 + 4 0.069384 0.121056 0.235433 0.019980 0.057659 + 5 0.069384 0.121056 0.133240 0.122173 0.057659 + 6 0.069384 0.121056 0.014446 0.240967 0.057659 + 7 0.791848 0.636833 0.616881 0.616881 0.827023 + 8 0.791848 0.636833 0.616881 0.616881 0.827023 + + 6 7 + + 2.000000 2.000000 + + 1 0.300330 0.023347 + 2 0.165111 0.158567 + 3 0.020075 0.303602 + 4 0.300330 0.023347 + 5 0.165111 0.158567 + 6 0.020075 0.303602 + 7 0.514484 0.514484 + 8 0.514484 0.514484 + + ATOMIC SPIN POPULATION (ALPHA MINUS BETA) + ATOM MULL.POP. LOW.POP. + 1 H 0.000000 0.000000 + 2 H 0.000000 0.000000 + 3 H 0.000000 0.000000 + 4 H 0.000000 0.000000 + 5 H 0.000000 0.000000 + 6 H 0.000000 0.000000 + 7 C 0.000000 0.000000 + 8 C 0.000000 0.000000 + + ----- POPULATIONS IN EACH AO ----- + MULLIKEN LOWDIN + 1 H 1 S 0.51177 0.41593 + 2 H 1 S 0.31542 0.27361 + 3 H 2 S 0.51177 0.41593 + 4 H 2 S 0.31542 0.27361 + 5 H 3 S 0.51177 0.41871 + 6 H 3 S 0.31542 0.27403 + 7 H 4 S 0.51177 0.41593 + 8 H 4 S 0.31542 0.27361 + 9 H 5 S 0.51177 0.41593 + 10 H 5 S 0.31542 0.27361 + 11 H 6 S 0.51177 0.41871 + 12 H 6 S 0.31542 0.27403 + 13 C 7 S 1.54276 0.35680 + 14 C 7 S -0.02944 0.16643 + 15 C 7 S -0.25159 0.18904 + 16 C 7 X 1.18858 0.64173 + 17 C 7 Y 1.18858 0.64097 + 18 C 7 Z 1.08670 0.55537 + 19 C 7 X 0.03725 0.42525 + 20 C 7 Y 0.03725 0.42409 + 21 C 7 Z 0.01454 0.38818 + 22 C 7 X -0.12498 0.20310 + 23 C 7 Y -0.12498 0.20234 + 24 C 7 Z -0.12738 0.15387 + 25 C 7 XX 0.01841 0.17182 + 26 C 7 YY 0.01841 0.17182 + 27 C 7 ZZ -0.00136 0.15400 + 28 C 7 XY 0.01533 0.02743 + 29 C 7 XZ 0.01519 0.02805 + 30 C 7 YZ 0.01519 0.02787 + 31 C 8 S 1.54276 0.35680 + 32 C 8 S -0.02944 0.16643 + 33 C 8 S -0.25159 0.18904 + 34 C 8 X 1.18858 0.64173 + 35 C 8 Y 1.18858 0.64097 + 36 C 8 Z 1.08670 0.55537 + 37 C 8 X 0.03725 0.42525 + 38 C 8 Y 0.03725 0.42409 + 39 C 8 Z 0.01454 0.38818 + 40 C 8 X -0.12498 0.20310 + 41 C 8 Y -0.12498 0.20234 + 42 C 8 Z -0.12738 0.15387 + 43 C 8 XX 0.01841 0.17182 + 44 C 8 YY 0.01841 0.17182 + 45 C 8 ZZ -0.00136 0.15400 + 46 C 8 XY 0.01533 0.02743 + 47 C 8 XZ 0.01519 0.02805 + 48 C 8 YZ 0.01519 0.02787 + + ----- MULLIKEN ATOMIC OVERLAP POPULATIONS ----- + (OFF-DIAGONAL ELEMENTS NEED TO BE MULTIPLIED BY 2) + + 1 2 3 4 5 + + 1 0.5198477 + 2 -0.0240417 0.5198477 + 3 -0.0025233 -0.0025233 0.5198476 + 4 0.0041661 -0.0025233 -0.0240417 0.5198477 + 5 -0.0025233 0.0041661 -0.0240417 -0.0240417 0.5198477 + 6 -0.0240417 -0.0240417 0.0041661 -0.0025233 -0.0025233 + 7 -0.0420590 -0.0420590 0.3983639 0.3983639 0.3983639 + 8 0.3983639 0.3983639 -0.0420590 -0.0420590 -0.0420590 + + 6 7 8 + + 6 0.5198476 + 7 -0.0420590 3.0751582 + 8 0.3983639 0.3743613 3.0751582 + + TOTAL MULLIKEN AND LOWDIN ATOMIC POPULATIONS + ATOM MULL.POP. CHARGE LOW.POP. CHARGE + 1 H 0.827189 0.172811 0.689545 0.310455 + 2 H 0.827189 0.172811 0.689545 0.310455 + 3 H 0.827189 0.172811 0.692739 0.307261 + 4 H 0.827189 0.172811 0.689545 0.310455 + 5 H 0.827189 0.172811 0.689545 0.310455 + 6 H 0.827189 0.172811 0.692739 0.307261 + 7 C 4.518434 -0.518434 4.928170 -0.928170 + 8 C 4.518434 -0.518434 4.928170 -0.928170 + + ------------------------------- + BOND ORDER AND VALENCE ANALYSIS BOND ORDER THRESHOLD=0.050 + ------------------------------- + + BOND BOND BOND + ATOM PAIR DIST ORDER ATOM PAIR DIST ORDER ATOM PAIR DIST ORDER + 1 8 1.086 0.962 2 8 1.086 0.962 3 7 1.086 0.962 + 4 7 1.086 0.962 5 7 1.086 0.962 6 8 1.086 0.962 + 7 8 1.538 0.991 + + TOTAL BONDED FREE + ATOM VALENCE VALENCE VALENCE + 1 H 0.928 0.928 0.000 + 2 H 0.928 0.928 0.000 + 3 H 0.928 0.928 0.000 + 4 H 0.928 0.928 0.000 + 5 H 0.928 0.928 0.000 + 6 H 0.928 0.928 0.000 + 7 C 3.826 3.826 0.000 + 8 C 3.826 3.826 0.000 + + ----------------------------------------- + ATOMIC SPIN DENSITY AT THE NUCLEUS (A.U.) + ----------------------------------------- + SPIN DENS ALPHA DENS BETA DENS + 1 H 1.0 0.0000000 0.20844 0.20844 + 2 H 1.0 0.0000000 0.20844 0.20844 + 3 H 1.0 0.0000000 0.20844 0.20844 + 4 H 1.0 0.0000000 0.20844 0.20844 + 5 H 1.0 0.0000000 0.20844 0.20844 + 6 H 1.0 0.0000000 0.20844 0.20844 + 7 C 4.0 0.0000000 0.00852 0.00852 + 8 C 4.0 0.0000000 0.00852 0.00852 + + --------------------- + ELECTROSTATIC MOMENTS + --------------------- + + POINT 1 X Y Z (BOHR) CHARGE + 0.000000 0.000000 0.000000 0.00 (A.U.) + DX DY DZ /D/ (DEBYE) + 0.000000 0.000000 0.000000 0.000000 + ...... END OF PROPERTY EVALUATION ...... + STEP CPU TIME = 0.04 TOTAL CPU TIME = 7.6 ( 0.1 MIN) + TOTAL WALL CLOCK TIME= 7.7 SECONDS, CPU UTILIZATION IS 98.96% + 100000 WORDS OF DYNAMIC MEMORY USED + EXECUTION OF GAMESS TERMINATED NORMALLY Wed Feb 19 17:03:04 2003 + +DATA SERVER STATS: TOTAL DISTRIBUTED MEMORY USED (MEMDDI)= 0 MWORDS. +FIRST DATA SERVER'S MAXIMUM MEMORY= 0 WORDS, CPU= 0.0 SECONDS. + +ddikick: all processes have ended gracefully. +unset echo +----- accounting info ----- +Wed Feb 19 17:03:06 EST 2003 +Files used on the master node aldebaran.physics.ncsu.edu were: +-rw-r--r-- 1 lkwagner user 3459 Feb 19 17:02 /tmp/lkwagner/c2h6b.F05 +-rw-r--r-- 1 lkwagner user 631392 Feb 19 17:03 /tmp/lkwagner/c2h6b.F10 +-rw-r--r-- 1 lkwagner user 41710 Feb 19 17:03 /tmp/lkwagner/c2h6b.pun +7.650u 0.110s 0:09.91 78.3% 0+0k 0+0io 5071pf+0w diff --git a/examples/c2h6/c2h6.pun b/examples/c2h6/c2h6.pun new file mode 100644 index 00000000..a8e2a25d --- /dev/null +++ b/examples/c2h6/c2h6.pun @@ -0,0 +1,596 @@ + $DATA + +C1 0 +H 1.0 -0.8796102553 -0.5078432177 1.1532386695 + S 3 + 1 18.7311370000 0.03349460 + 2 2.8253937000 0.23472695 + 3 0.6401217000 0.81375733 + S 1 + 1 0.1612778000 1.00000000 + +H 1.0 0.8796102553 -0.5078432177 1.1532386695 + S 3 + 1 18.7311370000 0.03349460 + 2 2.8253937000 0.23472695 + 3 0.6401217000 0.81375733 + S 1 + 1 0.1612778000 1.00000000 + +H 1.0 0.0000000000 -1.0156864354 -1.1532386695 + S 3 + 1 18.7311370000 0.03349460 + 2 2.8253937000 0.23472695 + 3 0.6401217000 0.81375733 + S 1 + 1 0.1612778000 1.00000000 + +H 1.0 0.8796102553 0.5078432177 -1.1532386695 + S 3 + 1 18.7311370000 0.03349460 + 2 2.8253937000 0.23472695 + 3 0.6401217000 0.81375733 + S 1 + 1 0.1612778000 1.00000000 + +H 1.0 -0.8796102553 0.5078432177 -1.1532386695 + S 3 + 1 18.7311370000 0.03349460 + 2 2.8253937000 0.23472695 + 3 0.6401217000 0.81375733 + S 1 + 1 0.1612778000 1.00000000 + +H 1.0 0.0000000000 1.0156864354 1.1532386695 + S 3 + 1 18.7311370000 0.03349460 + 2 2.8253937000 0.23472695 + 3 0.6401217000 0.81375733 + S 1 + 1 0.1612778000 1.00000000 + +C 6.0 0.0000000000 0.0000000000 -0.7688385534 + S 5 + 1 8.1380377000 0.01179592 + 2 3.3151758000 -0.15198125 + 3 0.6682763100 0.27552348 + 4 0.2917676600 0.54864514 + 5 0.1141134900 0.30121511 + S 1 + 1 0.9059000000 1.00000000 + S 1 + 1 0.1285000000 1.00000000 + P 5 + 1 8.5281305000 0.02351240 + 2 2.9014509000 0.11648574 + 3 0.9431209000 0.32777384 + 4 0.3155855500 0.49260154 + 5 0.1039361100 0.27312428 + P 1 + 1 0.3827000000 1.00000000 + P 1 + 1 0.1209000000 1.00000000 + D 1 + 1 0.5500000000 1.00000000 + +C 6.0 0.0000000000 0.0000000000 0.7688385534 + S 5 + 1 8.1380377000 0.01179592 + 2 3.3151758000 -0.15198125 + 3 0.6682763100 0.27552348 + 4 0.2917676600 0.54864514 + 5 0.1141134900 0.30121511 + S 1 + 1 0.9059000000 1.00000000 + S 1 + 1 0.1285000000 1.00000000 + P 5 + 1 8.5281305000 0.02351240 + 2 2.9014509000 0.11648574 + 3 0.9431209000 0.32777384 + 4 0.3155855500 0.49260154 + 5 0.1039361100 0.27312428 + P 1 + 1 0.3827000000 1.00000000 + P 1 + 1 0.1209000000 1.00000000 + D 1 + 1 0.5500000000 1.00000000 + + $END +--- OPEN SHELL ORBITALS --- GENERATED AT Wed Feb 19 17:03:04 2003 + +E(ROHF)= -14.4969360289, E(NUC)= 26.6240757288, 9 ITERS + $VEC + 1 1 8.53254878E-02 1.98231345E-02 8.53254872E-02 1.98231342E-02 8.53254860E-02 + 1 2 1.98231321E-02 8.53254878E-02 1.98231345E-02 8.53254872E-02 1.98231342E-02 + 1 3 8.53254860E-02 1.98231321E-02 5.96445038E-01-1.70558075E-02-1.14753176E-01 + 1 4 9.63353272E-10 8.56789552E-10 8.43815097E-02 2.23755276E-10-1.63531250E-10 + 1 5-8.97367162E-03-2.20351550E-10-2.31661945E-09-2.40424345E-02-1.47615054E-03 + 1 6-1.47615115E-03 6.47288789E-03-4.16291269E-11-2.52557713E-10-3.78397403E-10 + 1 7 5.96445038E-01-1.70558075E-02-1.14753176E-01-9.61301206E-10-8.56462976E-10 + 1 8-8.43815097E-02-2.24956941E-10 1.63503876E-10 8.97367162E-03 2.19152330E-10 + 1 9 2.31639486E-09 2.40424345E-02-1.47615054E-03-1.47615115E-03 6.47288789E-03 + 1 10-3.87370800E-11-2.52631136E-10-3.78385121E-10 + 2 1 1.13826654E-01 4.93106906E-02 1.13826652E-01 4.93106877E-02-1.13826650E-01 + 2 2-4.93106841E-02-1.13826654E-01-4.93106906E-02-1.13826652E-01-4.93106877E-02 + 2 3 1.13826650E-01 4.93106841E-02-5.33520943E-01 1.34066813E-02 6.78206880E-02 + 2 4-4.28485157E-09-4.90493594E-09 1.77324892E-01-2.40402898E-10 2.53502756E-10 + 2 5 2.96318898E-02 2.34505852E-09 4.55626326E-09-4.46363752E-02-1.23779833E-02 + 2 6-1.23779826E-02 2.96081868E-02 1.24713914E-11 9.36287615E-11 8.63771673E-11 + 2 7 5.33520943E-01-1.34066813E-02-6.78206880E-02-4.28895181E-09-4.90530526E-09 + 2 8 1.77324892E-01-2.37462807E-10 2.53665573E-10 2.96318898E-02 2.35236513E-09 + 2 9 4.55681908E-09-4.46363752E-02 1.23779833E-02 1.23779826E-02-2.96081868E-02 + 2 10-1.57839585E-11-9.33650201E-11-8.63945557E-11 + 3 1-1.68101458E-01-1.20750933E-01 1.26460801E-01 9.08395455E-02-4.16406603E-02 + 3 2-2.99113929E-02 1.68101458E-01 1.20750933E-01-1.26460801E-01-9.08395455E-02 + 3 3 4.16406603E-02 2.99113929E-02-2.06416510E-09 5.40540567E-10 8.11798665E-09 + 3 4 4.44709742E-01 1.08887434E-01-1.70167721E-09 1.28457483E-02 3.14528881E-03 + 3 5-5.00446810E-10-6.55917985E-02-1.60601892E-02 7.37144672E-09 4.75589686E-03 + 3 6-4.75589688E-03 1.29930242E-09 2.24285240E-02-1.03065337E-02-2.52356063E-03 + 3 7 2.07167080E-09-5.40180086E-10-8.13024276E-09 4.44709742E-01 1.08887434E-01 + 3 8-1.71307502E-09 1.28457483E-02 3.14528879E-03-5.05054029E-10-6.55917985E-02 + 3 9-1.60601891E-02 7.37981675E-09-4.75589687E-03 4.75589689E-03-1.30193886E-09 + 3 10-2.24285240E-02 1.03065337E-02 2.52356063E-03 + 4 1-4.89709303E-02-3.51768853E-02-1.21094667E-01-8.69849339E-02-1.70065600E-01 + 4 2-1.22161818E-01 4.89709303E-02 3.51768853E-02 1.21094667E-01 8.69849339E-02 + 4 3 1.70065600E-01 1.22161818E-01-3.41615163E-09 1.52031812E-09-1.99744902E-08 + 4 4-1.08887434E-01 4.44709742E-01-2.94114789E-09-3.14528880E-03 1.28457482E-02 + 4 5-9.32772228E-10 1.60601888E-02-6.55917974E-02-7.70957388E-09 1.94236720E-02 + 4 6-1.94236706E-02 2.12153678E-09-5.49163694E-03 2.52356068E-03-1.03065334E-02 + 4 7 3.41432390E-09-1.52050490E-09 1.99773784E-08-1.08887434E-01 4.44709742E-01 + 4 8-2.93997585E-09-3.14528882E-03 1.28457482E-02-9.31709208E-10 1.60601888E-02 + 4 9-6.55917974E-02-7.71148570E-09-1.94236720E-02 1.94236706E-02-2.12086128E-09 + 4 10 5.49163694E-03-2.52356068E-03 1.03065334E-02 + 5 1-7.76437483E-02-8.58403197E-02-7.76437230E-02-8.58402919E-02-7.76436732E-02 + 5 2-8.58402339E-02-7.76437483E-02-8.58403197E-02-7.76437230E-02-8.58402919E-02 + 5 3-7.76436732E-02-8.58402339E-02 7.43831775E-02-4.33552673E-03 1.20513124E-02 + 5 4-3.46384516E-08-9.68537496E-08 6.01588125E-01-6.55141177E-10-3.74106194E-09 + 5 5-2.68945879E-03 7.59773960E-09 2.52248219E-08-6.73552438E-02-1.82933965E-02 + 5 6-1.82933856E-02 2.54417494E-02-1.85073071E-09 1.87282755E-09 6.57454761E-09 + 5 7 7.43831775E-02-4.33552673E-03 1.20513124E-02 3.46330470E-08 9.68528222E-08 + 5 8-6.01588125E-01 6.55013515E-10 3.74061940E-09 2.68945879E-03-7.59704874E-09 + 5 9-2.52246310E-08 6.73552438E-02-1.82933965E-02-1.82933856E-02 2.54417494E-02 + 5 10-1.85006546E-09 1.87274074E-09 6.57444682E-09 + 6 1-1.94760063E-01-1.86058642E-01 1.44406887E-01 1.37955134E-01 5.03532049E-02 + 6 2 4.81035450E-02-1.94760063E-01-1.86058642E-01 1.44406887E-01 1.37955134E-01 + 6 3 5.03532049E-02 4.81035450E-02-1.12705783E-08-1.50107829E-09 2.70820074E-09 + 6 4-4.42111581E-01-1.13685749E-01-6.94439293E-08-1.59703798E-02-4.10666617E-03 + 6 5 8.89877392E-10 3.77482458E-02 9.70668257E-03 5.94140331E-09-6.20499901E-03 + 6 6 6.20500073E-03-5.31038770E-09-2.78635867E-02 3.08328113E-02 7.92843116E-03 + 6 7-1.12774231E-08-1.49973390E-09 2.72445135E-09 4.42111581E-01 1.13685749E-01 + 6 8 6.94442914E-08 1.59703798E-02 4.10666620E-03-8.94630429E-10-3.77482458E-02 + 6 9-9.70668256E-03-5.91849035E-09-6.20499901E-03 6.20500073E-03-5.30888214E-09 + 6 10-2.78635867E-02 3.08328113E-02 7.92843116E-03 + 7 1-5.43019041E-02-5.18758202E-02-1.41516196E-01-1.35193583E-01 1.95818144E-01 + 7 2 1.87069458E-01-5.43019041E-02-5.18758202E-02-1.41516196E-01-1.35193583E-01 + 7 3 1.95818144E-01 1.87069458E-01-1.57963449E-08-8.84450871E-10-9.09723057E-10 + 7 4 1.13685749E-01-4.42111580E-01-1.06730811E-07 4.10666592E-03-1.59703808E-02 + 7 5 1.23589047E-09-9.70668254E-03 3.77482434E-02 1.18155443E-08-2.41305717E-02 + 7 6 2.41305761E-02-6.68490435E-09 7.16491686E-03-7.92843118E-03 3.08328112E-02 + 7 7-1.57932541E-08-8.83763953E-10-9.11293866E-10-1.13685749E-01 4.42111580E-01 + 7 8 1.06728147E-07-4.10666590E-03 1.59703808E-02-1.23922213E-09 9.70668254E-03 + 7 9-3.77482434E-02-1.17448728E-08-2.41305717E-02 2.41305761E-02-6.68787727E-09 + 7 10 7.16491686E-03-7.92843118E-03 3.08328112E-02 + 8 1 1.28482849E-02-5.62689092E-01 1.28482862E-02-5.62689072E-01-1.28482846E-02 + 8 2 5.62689069E-01-1.28482849E-02 5.62689092E-01-1.28482862E-02 5.62689072E-01 + 8 3 1.28482846E-02-5.62689069E-01-3.92043043E-01 1.16135603E-01-4.10317837E+00 + 8 4-7.33289046E-10-2.17772614E-09-1.09912886E-01-2.36786846E-09-8.35927797E-10 + 8 5 1.17366759E-01-3.86878976E-09-3.85828169E-09-1.86647452E+00 7.16108830E-02 + 8 6 7.16108831E-02 1.07892259E-01-8.70090723E-11 1.58522484E-10 2.80662323E-10 + 8 7 3.92043043E-01-1.16135603E-01 4.10317837E+00-7.25943461E-10-2.17176029E-09 + 8 8-1.09912886E-01-2.35734538E-09-8.37038043E-10 1.17366759E-01-3.60849406E-09 + 8 9-3.87374146E-09-1.86647452E+00-7.16108830E-02-7.16108831E-02-1.07892259E-01 + 8 10 8.09707676E-11-1.60728683E-10-2.80713498E-10 + 9 1 8.60803925E-03-1.10191761E+00 8.60804103E-03-1.10191756E+00 8.60804224E-03 + 9 2-1.10191756E+00 8.60803925E-03-1.10191761E+00 8.60804102E-03-1.10191756E+00 + 9 3 8.60804224E-03-1.10191756E+00 3.44555833E-01 2.15274525E-02 1.98762959E+00 + 9 4 3.44376587E-09 1.77087141E-09-1.22862486E-01 1.35424623E-09 2.96755586E-09 + 9 5-2.17121501E-02 3.05407773E-08 5.75036844E-09-7.46574647E-01 2.44840521E-02 + 9 6 2.44840520E-02 4.14620636E-02-2.05859033E-10-3.56068486E-10-3.90724945E-10 + 9 7 3.44555833E-01 2.15274525E-02 1.98762959E+00-3.45584490E-09-1.77025082E-09 + 9 8 1.22862486E-01-1.35614022E-09-2.96794692E-09 2.17121501E-02-3.05861629E-08 + 9 9-5.75135126E-09 7.46574647E-01 2.44840521E-02 2.44840520E-02 4.14620636E-02 + 9 10-2.10772862E-10-3.51191701E-10-3.90628863E-10 +10 1 5.31507106E-03 3.39018533E-01 2.09090794E-02 1.33367283E+00-2.62241487E-02 +10 2-1.67269139E+00 5.31507107E-03 3.39018533E-01 2.09090794E-02 1.33367283E+00 +10 3-2.62241487E-02-1.67269139E+00 4.81090103E-09-2.39492242E-09 1.29359545E-08 +10 4 7.12206041E-02-2.07448325E-01 1.54406662E-09-1.41548951E-02 4.12297731E-02 +10 5-9.57335633E-10 7.32009275E-01-2.13216527E+00-5.48900932E-10 1.75439959E-02 +10 6-1.75440013E-02-2.27565966E-09-6.95494441E-03-5.14982696E-03 1.50001950E-02 +10 7 4.83240039E-09-2.40221294E-09 1.31268896E-08-7.12206040E-02 2.07448325E-01 +10 8-1.55182239E-09 1.41548949E-02-4.12297731E-02 9.59649094E-10-7.32009275E-01 +10 9 2.13216527E+00 4.71787129E-10 1.75439959E-02-1.75440013E-02-2.28283666E-09 +10 10-6.95494440E-03-5.14982695E-03 1.50001950E-02 +11 1 2.72123823E-02 1.73572517E+00-1.82091771E-02-1.16146128E+00-9.00320416E-03 +11 2-5.74263950E-01 2.72123823E-02 1.73572517E+00-1.82091771E-02-1.16146128E+00 +11 3-9.00320415E-03-5.74263950E-01 7.60456697E-09-4.88418143E-10 4.01041691E-08 +11 4-2.07448328E-01-7.12206045E-02-2.55196564E-10 4.12297696E-02 1.41548947E-02 +11 5-2.46534920E-10-2.13216526E+00-7.32009274E-01-1.49939062E-08 6.02315801E-03 +11 6-6.02315910E-03-6.73634656E-11 2.02580640E-02 1.50001955E-02 5.14982687E-03 +11 7 7.55534924E-09-4.71577971E-10 3.97197623E-08 2.07448328E-01 7.12206045E-02 +11 8 2.90219990E-10-4.12297697E-02-1.41548947E-02 2.40479539E-10 2.13216526E+00 +11 9 7.32009274E-01 1.52455787E-08 6.02315802E-03-6.02315909E-03-4.70005610E-11 +11 10 2.02580640E-02 1.50001955E-02 5.14982687E-03 +12 1 8.17813091E-02 1.55438734E+00-4.60150270E-02-8.74590709E-01 3.57662779E-02 +12 2 6.79796483E-01-8.17813091E-02-1.55438734E+00 4.60150270E-02 8.74590709E-01 +12 3-3.57662779E-02-6.79796483E-01 2.74403364E-09-2.78590976E-09 6.53042444E-08 +12 4 2.75574731E-01 1.33584287E-01-1.37782589E-08 9.28929037E-02 4.50296450E-02 +12 5 8.66629745E-10 8.29091505E-01 4.01900408E-01-5.87672014E-08-4.11445262E-03 +12 6 4.11444762E-03-9.31717827E-10-9.80088226E-03 2.43691347E-02 1.18128882E-02 +12 7-2.73839156E-09 2.80186771E-09-6.53096326E-08 2.75574731E-01 1.33584287E-01 +12 8-1.37731873E-08 9.28929038E-02 4.50296449E-02 8.64900895E-10 8.29091505E-01 +12 9 4.01900408E-01-5.87468859E-08 4.11445264E-03-4.11444760E-03 9.46990013E-10 +12 10 9.80088226E-03-2.43691347E-02-1.18128882E-02 +13 1 5.91711943E-03 1.12464521E-01 6.78661319E-02 1.28990666E+00 7.37832501E-02 +13 2 1.40237111E+00-5.91711943E-03-1.12464521E-01-6.78661319E-02-1.28990666E+00 +13 3-7.37832501E-02-1.40237111E+00 3.99719012E-09-4.45618915E-09 6.29828962E-08 +13 4-1.33584287E-01 2.75574731E-01-5.10446200E-09-4.50296442E-02 9.28929027E-02 +13 5-3.18779106E-10-4.01900410E-01 8.29091506E-01-1.09641619E-08-8.48781739E-03 +13 6 8.48781010E-03-3.91443596E-09 4.75095785E-03-1.18128881E-02 2.43691347E-02 +13 7-3.99950551E-09 4.44847573E-09-6.29796266E-08-1.33584287E-01 2.75574731E-01 +13 8-5.10635824E-09-4.50296442E-02 9.28929027E-02-3.18475721E-10-4.01900410E-01 +13 9 8.29091506E-01-1.09738775E-08 8.48781738E-03-8.48781011E-03 3.90675209E-09 +13 10-4.75095785E-03 1.18128881E-02-2.43691347E-02 +14 1 2.87474159E-02 1.37852446E+00 2.87474210E-02 1.37852454E+00-2.87474242E-02 +14 2-1.37852458E+00-2.87474159E-02-1.37852446E+00-2.87474210E-02-1.37852454E+00 +14 3 2.87474242E-02 1.37852458E+00 1.41381262E-01-4.85727111E-02 2.14656194E+00 +14 4-6.57237185E-09-5.53920952E-09-3.19372032E-01 6.31088655E-10 3.70702501E-09 +14 5-6.78305965E-03-3.58843108E-08-4.55625651E-08-1.23951555E+00-4.50287792E-02 +14 6-4.50287809E-02 4.77852709E-03 6.17087310E-10-9.87737209E-10-1.11516366E-09 +14 7-1.41381262E-01 4.85727111E-02-2.14656194E+00-6.57354856E-09-5.51597748E-09 +14 8-3.19372032E-01 6.07665620E-10 3.70404252E-09-6.78305965E-03-3.57352034E-08 +14 9-4.55419003E-08-1.23951555E+00 4.50287792E-02 4.50287809E-02-4.77852709E-03 +14 10-6.10515044E-10 1.00074855E-09 1.11542376E-09 +15 1-5.51135053E-02-3.63822180E-02-5.51135044E-02-3.63822165E-02-5.51135029E-02 +15 2-3.63822271E-02-5.51135053E-02-3.63822181E-02-5.51135043E-02-3.63822165E-02 +15 3-5.51135029E-02-3.63822271E-02-1.00532667E-01-4.80016959E-02 6.60981480E-01 +15 4-4.11909658E-09-8.13514617E-09 2.78914320E-01-5.65100113E-09-7.95634360E-09 +15 5 3.59303419E-01 2.25304639E-08 2.42774630E-08-1.14125366E+00-6.08062291E-02 +15 6-6.08062283E-02-3.55309113E-02-3.08796134E-10 2.73705971E-10 4.43740693E-10 +15 7-1.00532667E-01-4.80016959E-02 6.60981480E-01 4.09348786E-09 8.13493954E-09 +15 8-2.78914320E-01 5.62166174E-09 7.95645298E-09-3.59303419E-01-2.24437394E-08 +15 9-2.42771914E-08 1.14125366E+00-6.08062291E-02-6.08062283E-02-3.55309113E-02 +15 10-3.09122566E-10 2.73780984E-10 4.44086729E-10 +16 1 9.33135563E-02 4.05437830E-01-1.23991167E-02-5.38728485E-02 8.09144380E-02 +16 2 3.51564865E-01-9.33135562E-02-4.05437830E-01 1.23991167E-02 5.38728484E-02 +16 3-8.09144380E-02-3.51564865E-01 7.18577733E-09-6.07313576E-09 1.12476288E-07 +16 4-1.69665466E-01-2.24932938E-01-2.57290960E-09-2.56040722E-01-3.39444397E-01 +16 5 1.69568924E-09 7.02463691E-01 9.31286873E-01-1.38334413E-08-2.24361344E-02 +16 6 2.24361249E-02-4.71483446E-09-1.95414921E-02 1.59082205E-03 2.10902243E-03 +16 7-7.18485933E-09 6.08009490E-09-1.12516991E-07-1.69665466E-01-2.24932938E-01 +16 8-2.56075133E-09-2.56040722E-01-3.39444397E-01 1.71011116E-09 7.02463691E-01 +16 9 9.31286873E-01-1.38815338E-08 2.24361344E-02-2.24361249E-02 4.71997715E-09 +16 10 1.95414921E-02-1.59082205E-03-2.10902243E-03 +17 1 3.95573393E-02 1.71872558E-01-1.00590579E-01-4.37055718E-01-6.10332393E-02 +17 2-2.65183133E-01-3.95573393E-02-1.71872558E-01 1.00590579E-01 4.37055718E-01 +17 3 6.10332393E-02 2.65183133E-01-5.73996315E-10 2.66914404E-09-3.10320781E-08 +17 4-2.24932938E-01 1.69665467E-01 6.96823699E-10-3.39444397E-01 2.56040723E-01 +17 5-1.42724146E-09 9.31286873E-01-7.02463690E-01 4.60127431E-09 1.69234301E-02 +17 6-1.69234258E-02 2.12411428E-09-2.59070116E-02 2.10902235E-03-1.59082193E-03 +17 7 5.74868102E-10-2.65997660E-09 3.09777432E-08-2.24932938E-01 1.69665467E-01 +17 8 7.12337981E-10-3.39444397E-01 2.56040723E-01-1.40752099E-09 9.31286873E-01 +17 9-7.02463690E-01 4.53735811E-09-1.69234301E-02 1.69234258E-02-2.11693183E-09 +17 10 2.59070116E-02-2.10902235E-03 1.59082192E-03 +18 1 7.00715583E-02-6.15539127E-02-1.46116290E-02 1.28355014E-02-5.54599355E-02 +18 2 4.87184469E-02 7.00715583E-02-6.15539126E-02-1.46116290E-02 1.28355013E-02 +18 3-5.54599355E-02 4.87184469E-02-5.45716063E-09-4.55885693E-10-1.01234144E-08 +18 4 2.78555519E-01 3.15976331E-01 9.98435784E-09 2.82166348E-01 3.20072234E-01 +18 5 9.61686906E-09-9.45681845E-01-1.07272359E+00-2.01189324E-08 1.61973888E-02 +18 6-1.61973907E-02-2.25563665E-10 1.64881390E-02-1.55019784E-02-1.75844955E-02 +18 7-5.45451111E-09-4.35858880E-10-1.03451011E-08-2.78555518E-01-3.15976331E-01 +18 8-9.97093363E-09-2.82166348E-01-3.20072234E-01-9.60381877E-09 9.45681844E-01 +18 9 1.07272359E+00 2.01636495E-08 1.61973888E-02-1.61973907E-02-2.07949505E-10 +18 10 1.64881390E-02-1.55019784E-02-1.75844955E-02 +19 1 2.35837823E-02-2.07170271E-02-7.24756410E-02 6.36657744E-02 4.88918603E-02 +19 2-4.29487592E-02 2.35837823E-02-2.07170272E-02-7.24756410E-02 6.36657745E-02 +19 3 4.88918603E-02-4.29487592E-02 4.62733506E-10-6.18282682E-10 8.02651772E-09 +19 4 3.15976331E-01-2.78555521E-01-2.37828529E-09 3.20072234E-01-2.82166349E-01 +19 5-1.44760872E-09-1.07272360E+00 9.45681835E-01 2.02616844E-09-1.42791466E-02 +19 6 1.42791458E-02-5.44263902E-10 1.87031352E-02-1.75844954E-02 1.55019786E-02 +19 7 4.65438115E-10-5.95938185E-10 7.78869295E-09-3.15976331E-01 2.78555521E-01 +19 8 2.40038413E-09-3.20072234E-01 2.82166349E-01 1.46417751E-09 1.07272360E+00 +19 9-9.45681835E-01-1.96359217E-09-1.42791466E-02 1.42791458E-02-5.23812566E-10 +19 10 1.87031352E-02-1.75844954E-02 1.55019786E-02 +20 1-2.52558301E-02-6.28855747E-01-2.52558310E-02-6.28855747E-01 2.52558321E-02 +20 2 6.28855750E-01 2.52558302E-02 6.28855747E-01 2.52558310E-02 6.28855747E-01 +20 3-2.52558321E-02-6.28855751E-01-3.56443002E-01-3.28726666E-02-3.59718197E-01 +20 4-3.04309848E-10-1.30621884E-09-7.33457435E-01-1.62321764E-09-3.43674103E-09 +20 5-4.32210642E-01 1.47346107E-09 5.10529504E-09 1.59202100E+00-8.38671196E-02 +20 6-8.38671196E-02 9.08218065E-02-3.43939363E-10 1.26017507E-10-2.44014880E-10 +20 7 3.56443002E-01 3.28726666E-02 3.59718197E-01-2.89473596E-10-1.31750115E-09 +20 8-7.33457435E-01-1.64378749E-09-3.43070645E-09-4.32210642E-01 1.52498523E-09 +20 9 5.10381145E-09 1.59202100E+00 8.38671196E-02 8.38671196E-02-9.08218065E-02 +20 10 3.43984835E-10-1.36328965E-10 2.44616975E-10 +21 1-4.32507861E-02-1.67898826E+00-4.32507864E-02-1.67898827E+00-4.32507831E-02 +21 2-1.67898827E+00-4.32507860E-02-1.67898826E+00-4.32507865E-02-1.67898827E+00 +21 3-4.32507831E-02-1.67898827E+00-2.63560083E-01-6.63210584E-01 5.19639633E+00 +21 4 7.29505413E-10 1.38049877E-09-6.83921370E-02 1.70924086E-10 3.95520742E-09 +21 5-1.63841377E-01-1.44511071E-11-3.07711053E-09-6.13389762E-01-4.99120025E-01 +21 6-4.99120024E-01-5.30100205E-01 2.95781226E-10-2.12999641E-11 2.48093968E-10 +21 7-2.63560083E-01-6.63210584E-01 5.19639633E+00-7.33699915E-10-1.37929492E-09 +21 8 6.83921370E-02-1.75169183E-10-3.95607923E-09 1.63841377E-01 9.71882350E-11 +21 9 3.07517391E-09 6.13389762E-01-4.99120025E-01-4.99120024E-01-5.30100205E-01 +21 10 2.69941154E-10 0.00000000E+00 2.48093013E-10 +22 1 2.61473953E-02-1.65438536E+00 2.61473940E-02-1.65438536E+00-2.61473882E-02 +22 2 1.65438536E+00-2.61473953E-02 1.65438536E+00-2.61473940E-02 1.65438536E+00 +22 3 2.61473882E-02-1.65438536E+00 4.77057900E-01 8.67160026E-01-1.12000510E+01 +22 4-1.90930520E-10-1.17482747E-09-3.30238651E-02-2.72509860E-10 1.42202916E-10 +22 5-1.91247332E-01 2.55927414E-10 4.32892458E-09-1.97352342E+00 6.72854462E-01 +22 6 6.72854465E-01 6.23832070E-01-2.75147384E-10-3.47607001E-10 3.76712371E-10 +22 7-4.77057900E-01-8.67160026E-01 1.12000510E+01-2.15149927E-10-1.17518587E-09 +22 8-3.30238651E-02-2.83562007E-10 1.42284417E-10-1.91247332E-01 3.49749768E-10 +22 9 4.32849715E-09-1.97352342E+00-6.72854462E-01-6.72854465E-01-6.23832070E-01 +22 10 2.69855759E-10 3.19634676E-10-3.76665955E-10 +23 1-4.74368626E-01 1.54253566E+00 2.75498159E-01-8.95855495E-01-1.98870463E-01 +23 2 6.46680175E-01 4.74368626E-01-1.54253566E+00-2.75498159E-01 8.95855495E-01 +23 3 1.98870463E-01-6.46680175E-01 1.22309789E-09 1.73360396E-09-3.29192442E-08 +23 4-2.57141591E-01-1.18118827E-01 1.56900954E-09-6.19315048E-02-2.84484379E-02 +23 5-1.99783133E-09 1.05329267E+00 4.83833416E-01-8.68893240E-09 5.25258149E-02 +23 6-5.25258124E-02 5.81297265E-10 1.32036913E-01-3.30284706E-01-1.51717355E-01 +23 7-1.22647170E-09-1.70861068E-09 3.27355405E-08-2.57141591E-01-1.18118827E-01 +23 8 1.55748561E-09-6.19315047E-02-2.84484379E-02-2.00663937E-09 1.05329267E+00 +23 9 4.83833416E-01-8.70615186E-09-5.25258149E-02 5.25258124E-02-5.65648109E-10 +23 10-1.32036913E-01 3.30284706E-01 1.51717355E-01 +24 1 4.42410204E-02-1.43861432E-01 3.88694768E-01-1.26394434E+00 4.32935790E-01 +24 2-1.40780580E+00-4.42410204E-02 1.43861432E-01-3.88694768E-01 1.26394434E+00 +24 3-4.32935790E-01 1.40780580E+00-5.24536313E-09-2.07112730E-09 4.39279453E-08 +24 4-1.18118826E-01 2.57141590E-01-2.16329946E-09-2.84484381E-02 6.19315035E-02 +24 5 3.45948990E-09 4.83833415E-01-1.05329267E+00 7.59066217E-09-1.14347322E-01 +24 6 1.14347319E-01 1.06225494E-10 6.06515855E-02-1.51717355E-01 3.30284707E-01 +24 7 5.24351951E-09 2.08257690E-09-4.40130228E-08-1.18118826E-01 2.57141590E-01 +24 8-2.16909219E-09-2.84484383E-02 6.19315035E-02 3.45550357E-09 4.83833415E-01 +24 9-1.05329267E+00 7.58330194E-09 1.14347322E-01-1.14347319E-01-9.88781717E-11 +24 10-6.06515855E-02 1.51717355E-01-3.30284707E-01 +25 1 4.48520581E-01-1.13859661E+00-2.22261299E-02 5.64223836E-02-4.26294410E-01 +25 2 1.08217415E+00 4.48520581E-01-1.13859661E+00-2.22261299E-02 5.64223836E-02 +25 3-4.26294410E-01 1.08217415E+00-2.15328632E-08-3.53559646E-09 5.99806788E-08 +25 4-3.03113026E-01-4.75431098E-01 9.84333396E-09 1.63695310E-03 2.56755500E-03 +25 5 2.17069151E-09 7.38139044E-01 1.15776699E+00-1.91017823E-08 2.87336983E-01 +25 6-2.87336978E-01-6.50372931E-09 2.11532890E-01-3.52119564E-02-5.52297574E-02 +25 7-2.15941531E-08-3.52686121E-09 6.00679335E-08 3.03113025E-01 4.75431098E-01 +25 8-9.83494891E-09-1.63695297E-03-2.56755499E-03-2.18209208E-09-7.38139043E-01 +25 9-1.15776699E+00 1.90826283E-08 2.87336983E-01-2.87336978E-01-6.48371046E-09 +25 10 2.11532890E-01-3.52119564E-02-5.52297574E-02 +26 1 2.33288938E-01-5.92218067E-01-5.05074663E-01 1.28216259E+00 2.71785746E-01 +26 2-6.89944543E-01 2.33288938E-01-5.92218067E-01-5.05074663E-01 1.28216259E+00 +26 3 2.71785746E-01-6.89944543E-01-8.34269387E-10-1.08019954E-09 1.11981908E-08 +26 4-4.75431097E-01 3.03113025E-01 3.79739077E-09 2.56755207E-03-1.63695520E-03 +26 5 2.91604245E-09 1.15776699E+00-7.38139042E-01-7.35295984E-09-1.83192857E-01 +26 6 1.83192859E-01-4.41807270E-09 3.31788166E-01-5.52297578E-02 3.52119557E-02 +26 7-9.33897974E-10-1.06572181E-09 1.13181454E-08 4.75431097E-01-3.03113025E-01 +26 8-3.78257338E-09-2.56755216E-03 1.63695522E-03-2.93181519E-09-1.15776699E+00 +26 9 7.38139042E-01 7.31575660E-09-1.83192857E-01 1.83192859E-01-4.38608694E-09 +26 10 3.31788166E-01-5.52297578E-02 3.52119557E-02 +27 1 4.80126060E-01-7.17630363E-01 4.80126081E-01-7.17630423E-01 4.80126080E-01 +27 2-7.17630422E-01 4.80126060E-01-7.17630363E-01 4.80126081E-01-7.17630423E-01 +27 3 4.80126080E-01-7.17630422E-01-4.58185958E-01-1.01986101E-01 1.56516640E+00 +27 4 1.49047178E-08 1.03170642E-08 3.07505471E-01 1.16026109E-10-4.10943638E-10 +27 5 1.52213945E-01-3.69742013E-08-2.14540166E-08-6.16332609E-01 9.47991925E-02 +27 6 9.47992057E-02-2.76735702E-01-1.15227680E-08 1.86439108E-09 1.48830047E-09 +27 7-4.58185958E-01-1.01986101E-01 1.56516640E+00-1.49134955E-08-1.03166280E-08 +27 8-3.07505471E-01-1.13271053E-10 4.10617399E-10-1.52213945E-01 3.69684352E-08 +27 9 2.14533833E-08 6.16332609E-01 9.47991925E-02 9.47992057E-02-2.76735702E-01 +27 10-1.15568826E-08 1.83224177E-09 1.48829819E-09 +28 1 1.65943343E-01-3.23869167E-01 8.23665424E-02-1.60753560E-01 2.48309875E-01 +28 2-4.84622730E-01-1.65943343E-01 3.23869167E-01-8.23665424E-02 1.60753560E-01 +28 3-2.48309875E-01 4.84622730E-01-5.30522640E-10-2.29245761E-09 3.87126744E-08 +28 4 6.17492594E-02 3.17761027E-01-8.16301886E-10 4.26612467E-03 2.19534339E-02 +28 5 1.18338693E-09-8.35238073E-02-4.29812626E-01 1.31159186E-08-3.86551148E-01 +28 6 3.86551144E-01-7.13393019E-10-8.67376097E-02-8.27796952E-02-4.25983426E-01 +28 7 5.46054477E-10 2.28396832E-09-3.86786134E-08 6.17492595E-02 3.17761027E-01 +28 8-8.19888726E-10 4.26612458E-03 2.19534338E-02 1.18147721E-09-8.35238073E-02 +28 9-4.29812626E-01 1.31268451E-08 3.86551148E-01-3.86551144E-01 7.01336357E-10 +28 10 8.67376097E-02 8.27796952E-02 4.25983426E-01 +29 1-1.90916120E-01 3.72608172E-01 2.39169203E-01-4.66783011E-01 4.82530908E-02 +29 2-9.41748438E-02 1.90916120E-01-3.72608171E-01-2.39169203E-01 4.66783012E-01 +29 3-4.82530908E-02 9.41748438E-02-2.39170674E-09 1.09774496E-09-1.35398923E-08 +29 4-3.17761028E-01 6.17492584E-02 0.00000000E+00-2.19534337E-02 4.26612517E-03 +29 5-5.36666415E-10 4.29812624E-01-8.35238088E-02-7.19914920E-09-7.51169725E-02 +29 6 7.51169757E-02 0.00000000E+00 4.46350816E-01 4.25983427E-01-8.27796944E-02 +29 7 2.31088110E-09-1.05395663E-09 1.33579317E-08-3.17761028E-01 6.17492583E-02 +29 8 0.00000000E+00-2.19534337E-02 4.26612524E-03-5.22812722E-10 4.29812624E-01 +29 9-8.35238086E-02-7.25850028E-09 7.51169725E-02-7.51169757E-02 5.37351266E-11 +29 10-4.46350816E-01-4.25983427E-01 8.27796944E-02 +30 1-5.78444348E-01 4.15703758E-01-5.78444351E-01 4.15703767E-01 5.78444351E-01 +30 2-4.15703765E-01 5.78444348E-01-4.15703758E-01 5.78444351E-01-4.15703767E-01 +30 3-5.78444351E-01 4.15703765E-01-5.09864816E-01 1.59810469E-01-2.25776655E+00 +30 4 1.76338979E-09 2.81643888E-09 1.57138762E-01 3.05910012E-10-1.21144464E-09 +30 5-1.02441426E-01-4.27576755E-09-1.79381502E-09-1.56399382E+00 2.48959283E-01 +30 6 2.48959288E-01-2.43564229E-02-3.69473173E-09-9.26137542E-10-1.62404833E-09 +30 7 5.09864816E-01-1.59810469E-01 2.25776655E+00 1.79047160E-09 2.82608959E-09 +30 8 1.57138762E-01 2.87465262E-10-1.21791282E-09-1.02441426E-01-4.27511953E-09 +30 9-1.78943608E-09-1.56399382E+00-2.48959283E-01-2.48959288E-01 2.43564229E-02 +30 10 3.69624108E-09 9.33259071E-10 1.62185538E-09 +31 1 3.72553623E-01 2.11637329E-01-2.14266729E-01-1.21718962E-01-1.58286887E-01 +31 2-8.99183758E-02 3.72553623E-01 2.11637329E-01-2.14266729E-01-1.21718962E-01 +31 3-1.58286887E-01-8.99183758E-02-4.30896888E-09-2.02203111E-09 9.35495513E-09 +31 4-7.03562594E-01-3.28702610E-01 8.57381003E-09 3.48711040E-01 1.62916890E-01 +31 5-1.00678000E-08-5.04943041E-01-2.35908070E-01 1.56642195E-09-2.03517130E-01 +31 6 2.03517120E-01 6.08408173E-09-5.03002243E-01-4.38894576E-01-2.05050401E-01 +31 7-4.13128343E-09-2.05335029E-09 9.21080275E-09 7.03562594E-01 3.28702610E-01 +31 8-8.58031354E-09-3.48711040E-01-1.62916890E-01 1.01147564E-08 5.04943041E-01 +31 9 2.35908070E-01-1.57870373E-09-2.03517131E-01 2.03517120E-01 6.00788664E-09 +31 10-5.03002243E-01-4.38894576E-01-2.05050401E-01 +32 1-3.23199757E-02-1.83600774E-02-3.06480913E-01-1.74103265E-01 3.38800886E-01 +32 2 1.92463345E-01-3.23199757E-02-1.83600774E-02-3.06480913E-01-1.74103265E-01 +32 3 3.38800886E-01 1.92463345E-01 5.27396768E-09 5.32659910E-10-4.12757243E-09 +32 4-3.28702609E-01 7.03562602E-01-5.30270200E-09 1.62916888E-01-3.48711047E-01 +32 5 6.04759698E-09-2.35908069E-01 5.04943038E-01-7.67966311E-10 4.35612720E-01 +32 6-4.35612718E-01-4.17967907E-09-2.35001335E-01-2.05050400E-01 4.38894577E-01 +32 7 5.35907590E-09 5.17222910E-10-4.18728885E-09 3.28702609E-01-7.03562602E-01 +32 8 5.30301120E-09-1.62916888E-01 3.48711047E-01-6.02632069E-09 2.35908069E-01 +32 9-5.04943038E-01 7.50419712E-10 4.35612720E-01-4.35612718E-01-4.21638976E-09 +32 10-2.35001335E-01-2.05050400E-01 4.38894577E-01 +33 1 2.86184631E-01-3.16951741E-01 2.86184635E-01-3.16951739E-01 2.86184636E-01 +33 2-3.16951738E-01 2.86184631E-01-3.16951741E-01 2.86184635E-01-3.16951739E-01 +33 3 2.86184636E-01-3.16951738E-01-4.07555719E-01-2.07809386E-01 8.95458522E-01 +33 4 6.09571915E-09 9.99238497E-09 8.09651697E-01-3.24684482E-09-5.99657269E-09 +33 5-8.64045006E-01 3.48322974E-09 3.85620802E-09 1.10795966E-01-4.55780796E-01 +33 6-4.55780802E-01 5.59875472E-01 3.32791954E-09 4.24482120E-09 6.43288909E-09 +33 7-4.07555719E-01-2.07809386E-01 8.95458522E-01-6.07303475E-09-9.99190289E-09 +33 8-8.09651697E-01 3.23787534E-09 5.99603825E-09 8.64045006E-01-3.49527230E-09 +33 9-3.85596040E-09-1.10795966E-01-4.55780796E-01-4.55780802E-01 5.59875472E-01 +33 10 3.32046183E-09 4.25369798E-09 6.43285762E-09 +34 1 2.73166454E-01-2.00030586E-02 1.53930368E-01-1.12718008E-02 4.27096817E-01 +34 2-3.12748711E-02-2.73166454E-01 2.00030586E-02-1.53930368E-01 1.12718007E-02 +34 3-4.27096817E-01 3.12748712E-02 3.93915824E-09-1.85665374E-09-5.34328584E-09 +34 4 2.88792593E-01 1.79170003E+00-3.54627906E-08-2.10317793E-01-1.30483401E+00 +34 5 2.19689201E-08-4.93563809E-02-3.06212251E-01-2.55849854E-09 4.58884419E-01 +34 6-4.58884411E-01-1.86033310E-08 8.54069921E-02-3.60477651E-02-2.23644177E-01 +34 7-3.96128730E-09 1.86435592E-09 5.32258710E-09 2.88792593E-01 1.79170003E+00 +34 8-3.54577431E-08-2.10317793E-01-1.30483401E+00 2.19647868E-08-4.93563809E-02 +34 9-3.06212251E-01-2.56297748E-09-4.58884419E-01 4.58884411E-01 1.86111528E-08 +34 10-8.54069920E-02 3.60477650E-02 2.23644177E-01 +35 1 3.35456203E-01-2.45643298E-02-4.04297186E-01 2.96053283E-02-6.88409886E-02 +35 2 5.04099332E-03-3.35456203E-01 2.45643298E-02 4.04297186E-01-2.96053283E-02 +35 3 6.88409887E-02-5.04099312E-03-5.09920937E-09-3.55421449E-10-1.35794565E-08 +35 4 1.79170004E+00-2.88792594E-01-2.93240492E-08-1.30483401E+00 2.10317793E-01 +35 5 1.60193832E-08-3.06212250E-01 4.93563819E-02-4.53131210E-09-7.39646165E-02 +35 6 7.39646319E-02-1.38492627E-08 5.29874081E-01-2.23644177E-01 3.60477651E-02 +35 7 4.96234227E-09 4.03675908E-10 1.34524249E-08 1.79170004E+00-2.88792594E-01 +35 8-2.93007157E-08-1.30483401E+00 2.10317793E-01 1.60011408E-08-3.06212250E-01 +35 9 4.93563817E-02-4.55837520E-09 7.39646166E-02-7.39646320E-02 1.38974030E-08 +35 10-5.29874081E-01 2.23644177E-01-3.60477652E-02 +36 1-1.30529223E-01-1.09660319E-01-1.30529238E-01-1.09660318E-01 1.30529240E-01 +36 2 1.09660319E-01 1.30529223E-01 1.09660319E-01 1.30529238E-01 1.09660318E-01 +36 3-1.30529240E-01-1.09660319E-01 9.67967760E-02 4.57235946E-02 5.23615914E-01 +36 4 3.75459811E-08 3.27612060E-08 1.72720643E+00-2.72541661E-08-2.43838598E-08 +36 5-9.51295210E-01-6.63773603E-09-5.38259558E-09 1.39335267E-01-3.50434372E-01 +36 6-3.50434386E-01 8.58400493E-01 1.09195017E-08-4.28437087E-09-3.26098700E-09 +36 7-9.67967760E-02-4.57235946E-02-5.23615914E-01 3.75522029E-08 3.27620071E-08 +36 8 1.72720643E+00-2.72613281E-08-2.43844478E-08-9.51295210E-01-6.63374401E-09 +36 9-5.38175375E-09 1.39335267E-01 3.50434372E-01 3.50434386E-01-8.58400493E-01 +36 10-1.09208915E-08 4.28314825E-09 3.26041759E-09 +37 1 4.82973417E-01-1.43852525E-01-1.19521120E-02 3.55991200E-03-4.71021309E-01 +37 2 1.40292620E-01 4.82973417E-01-1.43852525E-01-1.19521120E-02 3.55991199E-03 +37 3-4.71021309E-01 1.40292619E-01 9.38418535E-11 6.58686024E-10-5.52035562E-09 +37 4-4.16432308E-01-6.86445008E-01-2.58890223E-09 3.14229153E-01 5.17973823E-01 +37 5 1.76624135E-09 7.60680604E-02 1.25390221E-01 7.44313989E-10-2.83970218E-01 +37 6 2.83970221E-01 2.47874722E-10-1.98921094E-01 4.52375492E-01 7.45693566E-01 +37 7 1.50207715E-10 6.31627383E-10-5.37307973E-09 4.16432308E-01 6.86445008E-01 +37 8 2.57480836E-09-3.14229153E-01-5.17973823E-01-1.73681942E-09-7.60680604E-02 +37 9-1.25390221E-01-7.59259024E-10-2.83970218E-01 2.83970221E-01 2.02013630E-10 +37 10-1.98921094E-01 4.52375492E-01 7.45693566E-01 +38 1 2.65043728E-01-7.89426703E-02-5.50789112E-01 1.64051276E-01 2.85745386E-01 +38 2-8.51086099E-02 2.65043728E-01-7.89426703E-02-5.50789112E-01 1.64051276E-01 +38 3 2.85745386E-01-8.51086100E-02 2.44974114E-09-4.21989231E-10 2.90310852E-09 +38 4-6.86444998E-01 4.16432316E-01-5.75343069E-10 5.17973813E-01-3.14229161E-01 +38 5 7.13290752E-10 1.25390222E-01-7.60680601E-02-1.03846780E-10 1.72270718E-01 +38 6-1.72270722E-01-1.09110812E-09-3.27900566E-01 7.45693567E-01-4.52375492E-01 +38 7 2.54199140E-09-4.66448024E-10 3.14405389E-09 6.86444998E-01-4.16432316E-01 +38 8 5.52391334E-10-5.17973813E-01 3.14229161E-01-6.65168422E-10-1.25390222E-01 +38 9 7.60680602E-02 7.91251967E-11 1.72270718E-01-1.72270722E-01-1.16636684E-09 +38 10-3.27900566E-01 7.45693567E-01-4.52375492E-01 +39 1 2.78869546E-01-2.51441939E-01 2.78869538E-01-2.51441934E-01 2.78869537E-01 +39 2-2.51441932E-01 2.78869546E-01-2.51441939E-01 2.78869538E-01-2.51441934E-01 +39 3 2.78869537E-01-2.51441932E-01 2.18580862E-01-1.75176900E-01 6.56436228E-01 +39 4 1.80052613E-08 9.93615302E-09-2.57273928E+00-1.98640316E-08-1.16466439E-08 +39 5 2.21262196E+00-1.20464351E-09 2.24449800E-10 4.82137847E-01-4.23112575E-01 +39 6-4.23112571E-01-1.33053777E-02-2.27872446E-09 3.26026779E-10 3.81009090E-10 +39 7 2.18580862E-01-1.75176900E-01 6.56436228E-01-1.79704284E-08-9.93734417E-09 +39 8 2.57273928E+00 1.98252067E-08 1.16478541E-08-2.21262196E+00 1.20251444E-09 +39 9-2.24939604E-10-4.82137847E-01-4.23112575E-01-4.23112571E-01-1.33053777E-02 +39 10-2.27000152E-09 3.18435404E-10 3.81129389E-10 +40 1-6.28727225E-01 3.63696001E-01 5.79251607E-01-3.35076182E-01 4.94756453E-02 +40 2-2.86198966E-02-6.28727224E-01 3.63696000E-01 5.79251609E-01-3.35076183E-01 +40 3 4.94756476E-02-2.86198980E-02 8.00905383E-08-1.20031945E-08 5.21171957E-08 +40 4-2.44932936E+00-1.73756026E-01-6.82061985E-09 2.67821306E+00 1.89993092E-01 +40 5 8.76063388E-09 1.69608159E-01 1.20320448E-02-7.68414625E-09 2.04915653E-02 +40 6-2.04916500E-02-3.39608310E-08 3.33543683E-01-1.03622066E-01-7.35097436E-03 +40 7 7.92158182E-08-1.18450487E-08 5.08945367E-08 2.44932936E+00 1.73756031E-01 +40 8 6.61153868E-09-2.67821306E+00-1.89993097E-01-8.54457309E-09-1.69608159E-01 +40 9-1.20320449E-02 7.95520032E-09 2.04915671E-02-2.04916509E-02-3.35642382E-08 +40 10 3.33543683E-01-1.03622066E-01-7.35097544E-03 +41 1-3.05866258E-01 1.76932507E-01-3.91560578E-01 2.26503580E-01 6.97426945E-01 +41 2-4.03436419E-01-3.05866261E-01 1.76932509E-01-3.91560575E-01 2.26503578E-01 +41 3 6.97426944E-01-4.03436419E-01 3.61356006E-07-5.02968365E-08 2.07523602E-07 +41 4 1.73756024E-01-2.44932935E+00 4.77139243E-08-1.89993090E-01 2.67821305E+00 +41 5-2.72643016E-08-1.20320445E-02 1.69608160E-01-4.97780090E-08 2.88857127E-01 +41 6-2.88857484E-01-1.53548198E-07-2.36616702E-02 7.35097420E-03-1.03622068E-01 +41 7 3.61415293E-07-5.03072437E-08 2.07604388E-07-1.73756032E-01 2.44932935E+00 +41 8-4.77007575E-08 1.89993098E-01-2.67821305E+00 2.72492657E-08 1.20320449E-02 +41 9-1.69608160E-01 4.97696625E-08 2.88857127E-01-2.88857484E-01-1.53575434E-07 +41 10-2.36616725E-02 7.35097578E-03-1.03622068E-01 +42 1 2.53909485E-01-8.24652261E-01 2.53909463E-01-8.24652248E-01 2.53909329E-01 +42 2-8.24652166E-01 2.53909487E-01-8.24652262E-01 2.53909462E-01-8.24652247E-01 +42 3 2.53909329E-01-8.24652166E-01 2.64113863E+00-3.57495828E-01 1.57655527E+00 +42 4 5.16658379E-08 3.31899239E-07 4.23561638E-01-5.60377034E-08-3.64071300E-07 +42 5-2.61151554E-01-3.55966004E-09-1.91743860E-08-3.91411457E-01-1.30935120E+00 +42 6-1.30935112E+00-1.14337035E+00-6.74866847E-09 2.18058438E-09 1.49472266E-08 +42 7 2.64113863E+00-3.57495828E-01 1.57655527E+00-4.87589618E-08-3.31898511E-07 +42 8-4.23561638E-01 5.27436538E-08 3.64070740E-07 2.61151554E-01 3.39381233E-09 +42 9 1.91734021E-08 3.91411457E-01-1.30935120E+00-1.30935112E+00-1.14337035E+00 +42 10-5.86988073E-09 1.54634470E-09 1.49472170E-08 +43 1 9.08263884E-01-6.33025228E-01-4.27943088E-01 2.98259963E-01 4.80320775E-01 +43 2-3.34765211E-01-9.08263883E-01 6.33025227E-01 4.27943090E-01-2.98259965E-01 +43 3-4.80320777E-01 3.34765211E-01-5.58907061E-08 9.30672156E-09-8.20474651E-08 +43 4-1.61465337E+00-1.00530438E+00 1.88601946E-08 1.83810903E+00 1.14443080E+00 +43 5-2.22733562E-08 9.35463427E-02 5.82431800E-02-1.93060877E-08 2.74739201E-01 +43 6-2.74739141E-01 2.23642956E-08 5.09532255E-01-3.57535875E-01-2.22606528E-01 +43 7 5.91862626E-08-9.73102159E-09 8.40426805E-08-1.61465337E+00-1.00530438E+00 +43 8 1.83618374E-08 1.83810903E+00 1.14443081E+00-2.19758113E-08 9.35463426E-02 +43 9 5.82431807E-02-1.88241593E-08-2.74739203E-01 2.74739141E-01-2.38046961E-08 +43 10-5.09532254E-01 3.57535875E-01 2.22606528E-01 +44 1-3.02402676E-02 2.10762997E-02 8.01699733E-01-5.58754085E-01 7.71459450E-01 +44 2-5.37677742E-01 3.02402654E-02-2.10762979E-02-8.01699732E-01 5.58754085E-01 +44 3-7.71459449E-01 5.37677742E-01-5.52526951E-08 9.51267586E-09-6.87073324E-08 +44 4 1.00530438E+00-1.61465337E+00 1.39100189E-08-1.14443080E+00 1.83810903E+00 +44 5-1.36527292E-08-5.82431804E-02 9.35463424E-02-1.55587244E-08 4.41267905E-01 +44 6-4.41267849E-01 2.50176085E-08-3.17241469E-01 2.22606528E-01-3.57535875E-01 +44 7 5.32009376E-08-9.24848896E-09 6.74654387E-08 1.00530438E+00-1.61465336E+00 +44 8 1.42190147E-08-1.14443081E+00 1.83810903E+00-1.38369602E-08-5.82431807E-02 +44 9 9.35463419E-02-1.58584620E-08-4.41267903E-01 4.41267849E-01-2.41208539E-08 +44 10 3.17241470E-01-2.22606529E-01 3.57535875E-01 +45 1-3.18744972E-01 8.45856143E-01-3.18744986E-01 8.45856152E-01 3.18745016E-01 +45 2-8.45856176E-01 3.18744972E-01-8.45856143E-01 3.18744986E-01-8.45856152E-01 +45 3-3.18745016E-01 8.45856176E-01 2.41494837E+00-3.82841673E-01 4.06782167E+00 +45 4-1.39829273E-08-5.67771566E-08-8.70745773E-01 1.64662945E-08 6.34093458E-08 +45 5 1.10701288E+00 5.90233591E-10 2.56473122E-09 8.93891682E-01-1.38509813E+00 +45 6-1.38509816E+00-9.34559651E-01 5.25841487E-09-3.53611226E-09-1.13406215E-08 +45 7-2.41494837E+00 3.82841673E-01-4.06782167E+00-1.47303464E-08-5.67793728E-08 +45 8-8.70745773E-01 1.72973867E-08 6.34118981E-08 1.10701288E+00 6.71743458E-10 +45 9 2.56489837E-09 8.93891682E-01 1.38509813E+00 1.38509816E+00 9.34559651E-01 +45 10-5.39567572E-09 3.56630884E-09 1.13408062E-08 +46 1-2.39730237E-01 3.25463927E-01-2.39730237E-01 3.25463928E-01 2.39730234E-01 +46 2-3.25463923E-01 2.39730237E-01-3.25463927E-01 2.39730237E-01-3.25463928E-01 +46 3-2.39730234E-01 3.25463923E-01-1.19724964E+00 3.60422428E-01 1.30420509E+00 +46 4-1.29809243E-09 3.10543738E-09-2.25862240E+00 1.19993139E-09-4.00201720E-09 +46 5 4.49477590E+00 1.59304745E-10 1.25993055E-09 3.85608254E-01 1.97795066E-01 +46 6 1.97795068E-01 2.70600225E+00 2.12164910E-10-1.37910409E-10 5.98253052E-10 +46 7 1.19724964E+00-3.60422428E-01-1.30420509E+00-1.24464777E-09 3.10532144E-09 +46 8-2.25862240E+00 1.13466430E-09-4.00214804E-09 4.49477590E+00 1.37429159E-10 +46 9 1.26040189E-09 3.85608254E-01-1.97795066E-01-1.97795068E-01-2.70600225E+00 +46 10-1.82793465E-10 1.27906001E-10-5.98369256E-10 +47 1 2.91547850E-02-1.43544918E-01 2.91547850E-02-1.43544918E-01-2.91547862E-02 +47 2 1.43544920E-01-2.91547850E-02 1.43544918E-01-2.91547850E-02 1.43544918E-01 +47 3 2.91547862E-02-1.43544920E-01-8.07624838E+00 2.72371458E+00 2.26977341E+00 +47 4 1.61549688E-10 1.68654917E-09-4.32115257E-02-1.48242286E-10-1.98754857E-09 +47 5 2.31217641E-01-1.57286331E-11 7.82283100E-10-1.83802795E-01 1.57229224E+00 +47 6 1.57229224E+00 1.73839127E+00 0.00000000E+00 1.64041948E-11 2.70097036E-10 +47 7 8.07624838E+00-2.72371458E+00-2.26977341E+00 1.73408794E-10 1.68663950E-09 +47 8-4.32115257E-02-1.63921922E-10-1.98762352E-09 2.31217641E-01-3.10827390E-11 +47 9 7.82283540E-10-1.83802795E-01-1.57229224E+00-1.57229224E+00-1.73839127E+00 +47 10 1.88232827E-11-1.91739743E-11-2.70090721E-10 +48 1 5.36149843E-02-2.06234048E-01 5.36149843E-02-2.06234048E-01 5.36149831E-02 +48 2-2.06234046E-01 5.36149843E-02-2.06234048E-01 5.36149843E-02-2.06234048E-01 +48 3 5.36149831E-02-2.06234046E-01 8.11118482E+00-2.70560217E+00-2.69233809E+00 +48 4-1.70199298E-10 1.68894098E-09 7.19314785E-02 1.70264907E-10-2.13739439E-09 +48 5-4.05481226E-02 0.00000000E+00 1.30307505E-09-9.12844867E-02-1.57117902E+00 +48 6-1.57117902E+00-1.53801505E+00 1.70079074E-11-1.27643178E-11-1.49515950E-10 +48 7 8.11118482E+00-2.70560217E+00-2.69233809E+00 1.60640916E-10-1.68887204E-09 +48 8-7.19314785E-02-1.56430787E-10 2.13733069E-09 4.05481226E-02 0.00000000E+00 +48 9-1.30320794E-09 9.12844867E-02-1.57117902E+00-1.57117902E+00-1.53801505E+00 +48 10 0.00000000E+00 0.00000000E+00-1.49516456E-10 + $END + POPULATION ANALYSIS +H 0.82719 0.17281 0.68955 0.31045 +H 0.82719 0.17281 0.68955 0.31045 +H 0.82719 0.17281 0.69274 0.30726 +H 0.82719 0.17281 0.68955 0.31045 +H 0.82719 0.17281 0.68955 0.31045 +H 0.82719 0.17281 0.69274 0.30726 +C 4.51843 -0.51843 4.92817 -0.92817 +C 4.51843 -0.51843 4.92817 -0.92817 + MOMENTS AT POINT 1 X,Y,Z= 0.000000 0.000000 0.000000 + DIPOLE 0.000000 0.000000 0.000000 diff --git a/examples/ch4/ch4.inp b/examples/ch4/ch4.inp new file mode 100644 index 00000000..756bdbda --- /dev/null +++ b/examples/ch4/ch4.inp @@ -0,0 +1,145 @@ +!Yoon ECP on Titanium, Lester on Oxygen + $CONTRL SCFTYP=ROHF MULT=1 ICHARG=0 RUNTYP=ENERGY MAXIT=70 ECP=READ $END + $SYSTEM KDIAG=3 $END + $SCF DIRSCF=.T. SOSCF=.F. $END + $DATA + +C1 +C 6 0. 0. 0. + S 5 + 1 8.1380377 0.11795918E-01 + 2 3.3151758 -0.15198125 + 3 0.66827631 0.27552348 + 4 0.29176766 0.54864514 + 5 0.11411349 0.30121511 + S 1 + 1 0.9059000000 1.000000000 + S 1 + 1 0.1285000000 1.000000000 + P 5 + 1 8.5281305 0.23512401E-01 + 2 2.9014509 0.11648574 + 3 0.94312090 0.32777384 + 4 0.31558555 0.49260154 + 5 0.10393611 0.27312428 + P 1 + 1 0.3827000000 1.000000000 + P 1 + 1 0.1209000000 1.000000000 + D 1 + 1 0.5500000000 1.000000000 + +H 1.0 -.6286475137 -.6286475137 .6286475139 +S 7 1. + 1 25.967331 3.54063093E-03 + 2 9.1676598 1.67008793E-02 + 3 2.8460805 6.08226508E-02 + 4 1.0048708 1.72330686E-01 + 5 0.38502821 3.53696261E-01 + 6 0.16005760 3.89585261E-01 + 7 0.69101229E-01 1.46735635E-01 +S 1 + 1 0.3258000000 1.000000000 +S 1 + 1 0.1027000000 1.000000000 +P 4 1. + 1 18.1264860 0.002058194485 + 2 4.4559865 0.015034403850 + 3 1.1582862 0.151153254935 + 4 0.3505376 0.890125250947 +P 1 1. + 1 .18 1. + +H 1.0 -.6286475137 .6286475137 -.6286475139 +S 7 1. + 1 25.967331 3.54063093E-03 + 2 9.1676598 1.67008793E-02 + 3 2.8460805 6.08226508E-02 + 4 1.0048708 1.72330686E-01 + 5 0.38502821 3.53696261E-01 + 6 0.16005760 3.89585261E-01 + 7 0.69101229E-01 1.46735635E-01 +S 1 + 1 0.3258000000 1.000000000 +S 1 + 1 0.1027000000 1.000000000 +P 4 1. + 1 18.1264860 0.002058194485 + 2 4.4559865 0.015034403850 + 3 1.1582862 0.151153254935 + 4 0.3505376 0.890125250947 +P 1 1. + 1 .18 1. + +H 1.0 .6286475137 -.6286475137 -.6286475139 +S 7 1. + 1 25.967331 3.54063093E-03 + 2 9.1676598 1.67008793E-02 + 3 2.8460805 6.08226508E-02 + 4 1.0048708 1.72330686E-01 + 5 0.38502821 3.53696261E-01 + 6 0.16005760 3.89585261E-01 + 7 0.69101229E-01 1.46735635E-01 +S 1 + 1 0.3258000000 1.000000000 +S 1 + 1 0.1027000000 1.000000000 +P 4 1. + 1 18.1264860 0.002058194485 + 2 4.4559865 0.015034403850 + 3 1.1582862 0.151153254935 + 4 0.3505376 0.890125250947 +P 1 1. + 1 .18 1. + +H 1.0 .6286475137 .6286475137 .6286475139 +S 7 1. + 1 25.967331 3.54063093E-03 + 2 9.1676598 1.67008793E-02 + 3 2.8460805 6.08226508E-02 + 4 1.0048708 1.72330686E-01 + 5 0.38502821 3.53696261E-01 + 6 0.16005760 3.89585261E-01 + 7 0.69101229E-01 1.46735635E-01 +S 1 + 1 0.3258000000 1.000000000 +S 1 + 1 0.1027000000 1.000000000 +P 4 1. + 1 18.1264860 0.002058194485 + 2 4.4559865 0.015034403850 + 3 1.1582862 0.151153254935 + 4 0.3505376 0.890125250947 +P 1 1. + 1 .18 1. + + $END + $ECP +C-LES GEN 2 1 +7 P + -16.7554933 2 7.71902471 + -0.318937855 2 2184.3154 + -2.90449512 2 20.7770051 + -1.24269724 2 76.3948299 + -0.601986071 2 351.761231 + 0.218138855 2 3.95786259 + 4. 1 5.992468 +3 S-P + 27.006964 2 5.74118955 + 8.57269969 2 5.12564415 + -6.3364597 2 4.68309865 +H-TR4 GEN 0 1 +6 P + -9.39168039 2 27.916162 + -0.536989635 2 394.363177 + 0.717083592 2 15.663672 + -1.25803771 2 90.1659831 + -0.267890288 2 2232.29185 + 1. 1 21.2435951 +1 S + 0. 2 1. +H-TR4 +H-TR4 +H-TR4 + $END + diff --git a/examples/ch4/ch4.out b/examples/ch4/ch4.out new file mode 100644 index 00000000..aab1925b --- /dev/null +++ b/examples/ch4/ch4.out @@ -0,0 +1,1336 @@ +mkdir: cannot create directory `/tmp/lkwagner': File exists +----- GAMESS execution script ----- +This job is running on host wartz at Wed Nov 10 08:33:27 EST 2004 +Available scratch disk space (Kbyte units) at beginning of the job is +Filesystem 1K-blocks Used Available Use% Mounted on +/dev/hda8 4535544 3563204 741940 83% / +cp ch4.inp /tmp/lkwagner/ch4.F05 +unset echo +setenv EXTBAS /dev/null +setenv IRCDATA /tmp/lkwagner/ch4.irc +setenv INPUT /tmp/lkwagner/ch4.F05 +setenv PUNCH /tmp/lkwagner/ch4.pun +setenv AOINTS /tmp/lkwagner/ch4.F08 +setenv MOINTS /tmp/lkwagner/ch4.F09 +setenv DICTNRY /tmp/lkwagner/ch4.F10 +setenv DRTFILE /tmp/lkwagner/ch4.F11 +setenv CIVECTR /tmp/lkwagner/ch4.F12 +setenv CASINTS /tmp/lkwagner/ch4.F13 +setenv CIINTS /tmp/lkwagner/ch4.F14 +setenv WORK15 /tmp/lkwagner/ch4.F15 +setenv WORK16 /tmp/lkwagner/ch4.F16 +setenv CSFSAVE /tmp/lkwagner/ch4.F17 +setenv FOCKDER /tmp/lkwagner/ch4.F18 +setenv DASORT /tmp/lkwagner/ch4.F20 +setenv DFTINTS /tmp/lkwagner/ch4.F21 +setenv DFTGRID /tmp/lkwagner/ch4.F22 +setenv JKFILE /tmp/lkwagner/ch4.F23 +setenv ORDINT /tmp/lkwagner/ch4.F24 +setenv EFPIND /tmp/lkwagner/ch4.F25 +setenv PCMDATA /tmp/lkwagner/ch4.F26 +setenv PCMINTS /tmp/lkwagner/ch4.F27 +setenv MLTPL /tmp/lkwagner/ch4.F28 +setenv MLTPLT /tmp/lkwagner/ch4.F29 +setenv DAFL30 /tmp/lkwagner/ch4.F30 +setenv SOINTX /tmp/lkwagner/ch4.F31 +setenv SOINTY /tmp/lkwagner/ch4.F32 +setenv SOINTZ /tmp/lkwagner/ch4.F33 +setenv SORESC /tmp/lkwagner/ch4.F34 +setenv SIMEN /tmp/lkwagner/ch4.simen +setenv SIMCOR /tmp/lkwagner/ch4.simcor +setenv GCILIST /tmp/lkwagner/ch4.F37 +setenv SOCCDAT /tmp/lkwagner/ch4.F40 +setenv AABB41 /tmp/lkwagner/ch4.F41 +setenv BBAA42 /tmp/lkwagner/ch4.F42 +setenv BBBB43 /tmp/lkwagner/ch4.F43 +setenv MCQD50 /tmp/lkwagner/ch4.F50 +setenv MCQD51 /tmp/lkwagner/ch4.F51 +setenv MCQD52 /tmp/lkwagner/ch4.F52 +setenv MCQD53 /tmp/lkwagner/ch4.F53 +setenv MCQD54 /tmp/lkwagner/ch4.F54 +setenv MCQD55 /tmp/lkwagner/ch4.F55 +setenv MCQD56 /tmp/lkwagner/ch4.F56 +setenv MCQD57 /tmp/lkwagner/ch4.F57 +setenv MCQD58 /tmp/lkwagner/ch4.F58 +setenv MCQD59 /tmp/lkwagner/ch4.F59 +setenv MCQD60 /tmp/lkwagner/ch4.F60 +setenv MCQD61 /tmp/lkwagner/ch4.F61 +setenv MCQD62 /tmp/lkwagner/ch4.F62 +setenv MCQD63 /tmp/lkwagner/ch4.F63 +setenv MCQD64 /tmp/lkwagner/ch4.F64 +setenv CCREST /tmp/lkwagner/ch4.F70 +setenv CCRLE /tmp/lkwagner/ch4.F71 +setenv CCINTS /tmp/lkwagner/ch4.F72 +setenv CCT1AMP /tmp/lkwagner/ch4.F73 +setenv CCT2AMP /tmp/lkwagner/ch4.F74 +setenv CCT3AMP /tmp/lkwagner/ch4.F75 +setenv CCVM /tmp/lkwagner/ch4.F76 +setenv CCVE /tmp/lkwagner/ch4.F77 +unset echo +ddikick.x ch4 /home/lkwagner/bin/ gamess.00.x /tmp/lkwagner 1 wartz +Initiating 1 compute processes to run job ch4 +Executable gamess.00.x will be run from directory /home/lkwagner/bin/ +Working scratch directory on each host will be /tmp/lkwagner +Running gamess.00.x on wartz as compute process 0 +Running gamess.00.x on wartz as data server 1 + ****************************************************** + * GAMESS VERSION = 16 FEB 2002 (R4) * + * FROM IOWA STATE UNIVERSITY * + * M.W.SCHMIDT, K.K.BALDRIDGE, J.A.BOATZ, S.T.ELBERT, * + * M.S.GORDON, J.H.JENSEN, S.KOSEKI, N.MATSUNAGA, * + * K.A.NGUYEN, S.J.SU, T.L.WINDUS, * + * TOGETHER WITH M.DUPUIS, J.A.MONTGOMERY * + * J.COMPUT.CHEM. 14, 1347-1363(1993) * + ******************* PC-UNIX VERSION ****************** + + SINCE 1993, STUDENTS AND POSTDOCS WORKING AT IOWA STATE UNIVERSITY + AND ALSO IN THEIR VARIOUS JOBS AFTER LEAVING ISU HAVE MADE IMPORTANT + CONTRIBUTIONS TO THE CODE: + CHRISTINE AIKENS, ROB BELL, PRADIPTA BANDYOPADHYAY, BRETT BODE, + GALINA CHABAN, WEI CHEN, CHEOL CHOI, PAUL DAY, DMITRI FEDOROV, + GRAHAM FLETCHER, MARK FREITAG, KURT GLAESEMANN, GRANT MERRILL, + MIKE PAK, JIM SHOEMAKER, TETSUYA TAKETSUGU, SIMON WEBB. + + ADDITIONAL CODE HAS BEEN PROVIDED BY COLLABORATORS IN OTHER GROUPS: + IOWA STATE UNIVERSITY: JOE IVANIC, KLAUS RUEDENBERG + UNIVERSITY OF TOKYO: KIMIHIKO HIRAO, HARUYUKI NAKANO, TAKAHITO + NAKAJIMA, TAKAO TSUNEDA, MUNEAKI KAMIYA, SUSUMU YANAGISAWA + ODENSE UNIVERSITY: FRANK JENSEN + UNIVERSITY OF IOWA: VISVALDAS KAIRYS, HUI LI + NATIONAL INST. OF STANDARDS AND TECHNOLOGY: WALT STEVENS, DAVID GARMER + UNIVERSITY OF PISA: BENEDETTA MENNUCCI, JACOPO TOMASI + UNIVERSITY OF MEMPHIS: HENRY KURTZ, PRAKASHAN KORAMBATH + UNIVERSITY OF ALBERTA: MARIUSZ KLOBUKOWSKI + UNIVERSITY OF NEW ENGLAND: MARK SPACKMAN + MIE UNIVERSITY: HIROAKI UMEDA + MICHIGAN STATE UNIVERSITY: KAROL KOWALSKI, PIOTR PIECUCH + UNIVERSITY OF SILESIA: MONIKA MUSIAL, STANISLAW KUCHARSKI + + EXECUTION OF GAMESS BEGUN Wed Nov 10 08:33:27 2004 + + ECHO OF THE FIRST FEW INPUT CARDS - + INPUT CARD>!Yoon ECP on Titanium, Lester on Oxygen + INPUT CARD> $CONTRL SCFTYP=ROHF MULT=1 ICHARG=0 RUNTYP=ENERGY MAXIT=70 ECP=READ $END + INPUT CARD> $SYSTEM KDIAG=3 $END + INPUT CARD> $SCF DIRSCF=.T. SOSCF=.F. $END + INPUT CARD> $DATA + INPUT CARD> + INPUT CARD>C1 + INPUT CARD>C 6 0. 0. 0. + INPUT CARD> S 5 + INPUT CARD> 1 8.1380377 0.11795918E-01 + INPUT CARD> 2 3.3151758 -0.15198125 + INPUT CARD> 3 0.66827631 0.27552348 + INPUT CARD> 4 0.29176766 0.54864514 + INPUT CARD> 5 0.11411349 0.30121511 + INPUT CARD> S 1 + INPUT CARD> 1 0.9059000000 1.000000000 + INPUT CARD> S 1 + INPUT CARD> 1 0.1285000000 1.000000000 + INPUT CARD> P 5 + INPUT CARD> 1 8.5281305 0.23512401E-01 + INPUT CARD> 2 2.9014509 0.11648574 + INPUT CARD> 3 0.94312090 0.32777384 + INPUT CARD> 4 0.31558555 0.49260154 + INPUT CARD> 5 0.1Process initiation completed. +0393611 0.27312428 + INPUT CARD> P 1 + INPUT CARD> 1 0.3827000000 1.000000000 + INPUT CARD> P 1 + INPUT CARD> 1 0.1209000000 1.000000000 + INPUT CARD> D 1 + INPUT CARD> 1 0.5500000000 1.000000000 + INPUT CARD> + INPUT CARD>H 1.0 -.6286475137 -.6286475137 .6286475139 + INPUT CARD>S 7 1. + INPUT CARD> 1 25.967331 3.54063093E-03 + INPUT CARD> 2 9.1676598 1.67008793E-02 + INPUT CARD> 3 2.8460805 6.08226508E-02 + INPUT CARD> 4 1.0048708 1.72330686E-01 + INPUT CARD> 5 0.38502821 3.53696261E-01 + INPUT CARD> 6 0.16005760 3.89585261E-01 + INPUT CARD> 7 0.69101229E-01 1.46735635E-01 + INPUT CARD>S 1 + INPUT CARD> 1 0.3258000000 1.000000000 + INPUT CARD>S 1 + INPUT CARD> 1 0.1027000000 1.000000000 + INPUT CARD>P 4 1. + INPUT CARD> 1 18.1264860 0.002058194485 + INPUT CARD> 2 4.4559865 0.015034403850 + INPUT CARD> 3 1.1582862 0.151153254935 + INPUT CARD> 4 0.3505376 0.890125250947 + INPUT CARD>P 1 1. + + ..... DONE SETTING UP THE RUN ..... + 1000000 WORDS OF MEMORY AVAILABLE + + + RUN TITLE + --------- + + + THE POINT GROUP OF THE MOLECULE IS C1 + THE ORDER OF THE PRINCIPAL AXIS IS 0 + *** WARNING! ATOM 1 SHELL 1 TYPE S HAS NORMALIZATION 0.99999875 + *** WARNING! ATOM 1 SHELL 4 TYPE P HAS NORMALIZATION 1.00002537 + + ATOM ATOMIC COORDINATES (BOHR) + CHARGE X Y Z + C 6.0 0.0000000000 0.0000000000 0.0000000000 + H 1.0 -1.1879715438 -1.1879715438 1.1879715441 + H 1.0 -1.1879715438 1.1879715438 -1.1879715441 + H 1.0 1.1879715438 -1.1879715438 -1.1879715441 + H 1.0 1.1879715438 1.1879715438 1.1879715441 + + INTERNUCLEAR DISTANCES (ANGS.) + ------------------------------ + + C H H H + + 1 C 0.0000000 1.0888494 * 1.0888494 * 1.0888494 * + 2 H 1.0888494 * 0.0000000 1.7780837 * 1.7780837 * + 3 H 1.0888494 * 1.7780837 * 0.0000000 1.7780837 * + 4 H 1.0888494 * 1.7780837 * 1.7780837 * 0.0000000 + 5 H 1.0888494 * 1.7780837 * 1.7780837 * 1.7780837 * + + H + + 1 C 1.0888494 * + 2 H 1.7780837 * + 3 H 1.7780837 * + 4 H 1.7780837 * + 5 H 0.0000000 + + * ... LESS THAN 3.000 + + + ATOMIC BASIS SET + ---------------- + THE CONTRACTED PRIMITIVE FUNCTIONS HAVE BEEN UNNORMALIZED + THE CONTRACTED BASIS FUNCTIONS ARE NOW NORMALIZED TO UNITY + + SHELL TYPE PRIMITIVE EXPONENT CONTRACTION COEFFICIENTS + + C + + 1 S 1 8.1380377 0.011795903264 + 1 S 2 3.3151758 -0.151981060139 + 1 S 3 0.6682763 0.275523135804 + 1 S 4 0.2917677 0.548644454609 + 1 S 5 0.1141135 0.301214733709 + + 2 S 6 0.9059000 1.000000000000 + + 3 S 7 0.1285000 1.000000000000 + + 4 P 8 8.5281305 0.023512997445 + 4 P 9 2.9014509 0.116488694925 + 4 P 10 0.9431209 0.327782154726 + 4 P 11 0.3155856 0.492614035954 + 4 P 12 0.1039361 0.273131208416 + + 5 P 13 0.3827000 1.000000000000 + + 6 P 14 0.1209000 1.000000000000 + + 7 D 15 0.5500000 1.000000000000 + + H + + 8 S 16 25.9673310 0.003540630929 + 8 S 17 9.1676598 0.016700879294 + 8 S 18 2.8460805 0.060822650777 + 8 S 19 1.0048708 0.172330685934 + 8 S 20 0.3850282 0.353696260865 + 8 S 21 0.1600576 0.389585260851 + 8 S 22 0.0691012 0.146735634944 + + 9 S 23 0.3258000 1.000000000000 + + 10 S 24 0.1027000 1.000000000000 + + 11 P 25 18.1264860 0.002058194485 + 11 P 26 4.4559865 0.015034403850 + 11 P 27 1.1582862 0.151153254935 + 11 P 28 0.3505376 0.890125250947 + + 12 P 29 0.1800000 1.000000000000 + + H + + 13 S 30 25.9673310 0.003540630929 + 13 S 31 9.1676598 0.016700879294 + 13 S 32 2.8460805 0.060822650777 + 13 S 33 1.0048708 0.172330685934 + 13 S 34 0.3850282 0.353696260865 + 13 S 35 0.1600576 0.389585260851 + 13 S 36 0.0691012 0.146735634944 + + 14 S 37 0.3258000 1.000000000000 + + 15 S 38 0.1027000 1.000000000000 + + 16 P 39 18.1264860 0.002058194485 + 16 P 40 4.4559865 0.015034403850 + 16 P 41 1.1582862 0.151153254935 + 16 P 42 0.3505376 0.890125250947 + + 17 P 43 0.1800000 1.000000000000 + + H + + 18 S 44 25.9673310 0.003540630929 + 18 S 45 9.1676598 0.016700879294 + 18 S 46 2.8460805 0.060822650777 + 18 S 47 1.0048708 0.172330685934 + 18 S 48 0.3850282 0.353696260865 + 18 S 49 0.1600576 0.389585260851 + 18 S 50 0.0691012 0.146735634944 + + 19 S 51 0.3258000 1.000000000000 + + 20 S 52 0.1027000 1.000000000000 + + 21 P 53 18.1264860 0.002058194485 + 21 P 54 4.4559865 0.015034403850 + 21 P 55 1.1582862 0.151153254935 + 21 P 56 0.3505376 0.890125250947 + + 22 P 57 0.1800000 1.000000000000 + + H + + 23 S 58 25.9673310 0.003540630929 + 23 S 59 9.1676598 0.016700879294 + 23 S 60 2.8460805 0.060822650777 + 23 S 61 1.0048708 0.172330685934 + 23 S 62 0.3850282 0.353696260865 + 23 S 63 0.1600576 0.389585260851 + 23 S 64 0.0691012 0.146735634944 + + 24 S 65 0.3258000 1.000000000000 + + 25 S 66 0.1027000 1.000000000000 + + 26 P 67 18.1264860 0.002058194485 + 26 P 68 4.4559865 0.015034403850 + 26 P 69 1.1582862 0.151153254935 + 26 P 70 0.3505376 0.890125250947 + + 27 P 71 0.1800000 1.000000000000 + + TOTAL NUMBER OF BASIS SET SHELLS = 27 + NUMBER OF CARTESIAN GAUSSIAN BASIS FUNCTIONS = 54 + NUMBER OF ELECTRONS = 10 + CHARGE OF MOLECULE = 0 + SPIN MULTIPLICITY = 1 + NUMBER OF OCCUPIED ORBITALS (ALPHA) = 5 + NUMBER OF OCCUPIED ORBITALS (BETA ) = 5 + TOTAL NUMBER OF ATOMS = 5 + THE NUCLEAR REPULSION ENERGY IS 13.4495871441 + NOTE THIS RUN IS USING CORE POTENTIALS, AND THE NUMBER OF ELECTRONS, + OCCUPIED ORBITALS, AND NUCLEAR REPULSION ENERGY WILL BE ADJUSTED BELOW + AFTER REMOVAL OF THE CORE CHARGES. + + $CONTRL OPTIONS + --------------- + SCFTYP=ROHF RUNTYP=ENERGY EXETYP=RUN + MPLEVL= 0 CITYP =NONE CCTYP =NONE + MULT = 1 ICHARG= 0 NZVAR = 0 COORD =UNIQUE + ECP =READ RELWFN=NONE LOCAL =NONE + ISPHER= -1 NOSYM = 0 MAXIT = 70 UNITS =ANGS + PLTORB= F MOLPLT= F AIMPAC= F FRIEND= + NPRINT= 7 IREST = 0 GEOM =INPUT + NORMF = 0 NORMP = 0 ITOL = 20 ICUT = 9 + INTTYP=POPLE QMTTOL= 1.0E-06 + + $SYSTEM OPTIONS + --------------- + REPLICATED MEMORY= 1000000 WORDS (ON EVERY NODE). + DISTRIBUTED MEMDDI= 0 MILLION WORDS IN AGGREGATE, + MEMDDI DISTRIBUTED OVER 1 PROCESSORS IS 0 WORDS/PROCESSOR. + TOTAL MEMORY REQUESTED ON EACH PROCESSOR= 1000000 WORDS. + TIMLIM= 36000.0 SECONDS. + COREFL=F KDIAG= 3 + + -------------- + ECP POTENTIALS + -------------- + + PARAMETERS FOR "C-LES " ON ATOM 1 WITH ZCORE 2 AND LMAX 1 ARE + FOR L= 1 COEFF N ZETA + 1 -16.75549 2 7.71902 + 2 -0.31894 2 2184.31540 + 3 -2.90450 2 20.77701 + 4 -1.24270 2 76.39483 + 5 -0.60199 2 351.76123 + 6 0.21814 2 3.95786 + 7 4.00000 1 5.99247 + FOR L= 0 COEFF N ZETA + 1 27.00696 2 5.74119 + 2 8.57270 2 5.12564 + 3 -6.33646 2 4.68310 + + PARAMETERS FOR "H-TR4 " ON ATOM 2 WITH ZCORE 0 AND LMAX 1 ARE + FOR L= 1 COEFF N ZETA + 1 -9.39168 2 27.91616 + 2 -0.53699 2 394.36318 + 3 0.71708 2 15.66367 + 4 -1.25804 2 90.16598 + 5 -0.26789 2 2232.29185 + 6 1.00000 1 21.24360 + FOR L= 0 COEFF N ZETA + 1 0.00000 2 1.00000 + + PARAMETERS FOR "H-TR4 " ON ATOM 3 ARE THE SAME AS ATOM 2 + + PARAMETERS FOR "H-TR4 " ON ATOM 4 ARE THE SAME AS ATOM 2 + + PARAMETERS FOR "H-TR4 " ON ATOM 5 ARE THE SAME AS ATOM 2 + + THE ECP RUN REMOVES 2 CORE ELECTRONS, AND THE SAME NUMBER OF PROTONS. + NUMBER OF ELECTRONS KEPT IN THE CALCULATION IS = 8 + NUMBER OF OCCUPIED ORBITALS (ALPHA) KEPT IS = 4 + NUMBER OF OCCUPIED ORBITALS (BETA ) KEPT IS = 4 + THE ADJUSTED NUCLEAR REPULSION ENERGY= 9.5616134150 + ECP ANGULAR INTS......... 0.00 SECONDS + + ---------------- + PROPERTIES INPUT + ---------------- + + MOMENTS FIELD POTENTIAL DENSITY + IEMOM = 1 IEFLD = 0 IEPOT = 0 IEDEN = 0 + WHERE =COMASS WHERE =NUCLEI WHERE =NUCLEI WHERE =NUCLEI + OUTPUT=BOTH OUTPUT=BOTH OUTPUT=BOTH OUTPUT=BOTH + IEMINT= 0 IEFINT= 0 IEDINT= 0 + MORB = 0 + EXTRAPOLATION IN EFFECT + SOSCF IN EFFECT + + ------------------------------- + INTEGRAL TRANSFORMATION OPTIONS + ------------------------------- + NWORD = 0 CUTOFF = 1.0E-09 + MPTRAN = 0 DIRTRF = T + AOINTS =DUP + + ---------------------- + INTEGRAL INPUT OPTIONS + ---------------------- + NOPK = 1 NORDER= 0 SCHWRZ= T + + ------------------------------------------ + THE POINT GROUP IS C1 , NAXIS= 0, ORDER= 1 + ------------------------------------------ + + DIMENSIONS OF THE SYMMETRY SUBSPACES ARE + A = 54 + + ..... DONE SETTING UP THE RUN ..... + STEP CPU TIME = 0.06 TOTAL CPU TIME = 0.1 ( 0.0 MIN) + TOTAL WALL CLOCK TIME= 0.1 SECONDS, CPU UTILIZATION IS 85.71% + + ******************** + 1 ELECTRON INTEGRALS + ******************** + TIME TO DO ORDINARY INTEGRALS= 0.03 + TIME TO DO ECP INTEGRALS= 0.34 + ...... END OF ONE-ELECTRON INTEGRALS ...... + STEP CPU TIME = 0.37 TOTAL CPU TIME = 0.4 ( 0.0 MIN) + TOTAL WALL CLOCK TIME= 0.4 SECONDS, CPU UTILIZATION IS 97.73% + + ------------- + GUESS OPTIONS + ------------- + GUESS =HUCKEL NORB = 0 NORDER= 0 + MIX = F PRTMO = F PUNMO = F + TOLZ = 1.0E-08 TOLE = 1.0E-05 + SYMDEN= F PURIFY= F + + INITIAL GUESS ORBITALS GENERATED BY HUCKEL ROUTINE. + HUCKEL GUESS REQUIRES 25085 WORDS. + + SYMMETRIES FOR INITIAL GUESS ORBITALS FOLLOW. ALPHA SET(S). + 4 ORBITALS ARE OCCUPIED ( 0 CORE ORBITALS). + 1=A 2=A 3=A 4=A 5=A 6=A 7=A + 8=A 9=A 10=A 11=A 12=A 13=A 14=A + + SYMMETRIES FOR INITIAL GUESS ORBITALS FOLLOW. BETA SET(S). + 4 ORBITALS ARE OCCUPIED ( 0 CORE ORBITALS). + 1=A 2=A 3=A 4=A 5=A 6=A 7=A + 8=A 9=A 10=A 11=A 12=A 13=A 14=A + ...... END OF INITIAL ORBITAL SELECTION ...... + STEP CPU TIME = 0.17 TOTAL CPU TIME = 0.6 ( 0.0 MIN) + TOTAL WALL CLOCK TIME= 0.6 SECONDS, CPU UTILIZATION IS 100.00% + + -------------------- + 2 ELECTRON INTEGRALS + -------------------- + + DIRECT SCF METHOD SKIPS INTEGRAL STORAGE ON DISK. + DIRECT TRANSFORMATION SKIPS AO INTEGRAL STORAGE ON DISK. + ...... END OF TWO-ELECTRON INTEGRALS ..... + STEP CPU TIME = 0.00 TOTAL CPU TIME = 0.6 ( 0.0 MIN) + TOTAL WALL CLOCK TIME= 0.6 SECONDS, CPU UTILIZATION IS 100.00% + + --------------------------- + ROHF SCF CALCULATION + --------------------------- + + NUCLEAR ENERGY = 9.5616134150 + MAXIT = 70 NPUNCH= 2 MULT= 1 + EXTRAP=T DAMP=F SHIFT=F RSTRCT=F DIIS=F SOSCF=T + DENSITY CONV= 2.00E-05 + ROHF CANONICALIZATION PARAMETERS + C-C O-O V-V + ALPHA -0.5000 0.5000 1.5000 + BETA 1.5000 0.5000 -0.5000 + SOSCF WILL OPTIMIZE 200 ORBITAL ROTATION ANGLES. SOGTOL= 2.500E-01 + MEMORY REQUIRED FOR UHF/ROHF STEP= 44706 WORDS. + + DIRECT SCF CALCULATION, SCHWRZ=T FDIFF=T + SCHWARZ INEQUALITY OVERHEAD: 1485 INTEGRALS, T= 0.04 + + NONZERO BLOCKS + ITER EX TOTAL ENERGY E CHANGE DENSITY CHANGE ORB. GRAD INTEGRALS SKIPPED + 1 0 -7.742172245 -7.742172245 0.928729077 0.000000000 1047555 0 + ---------------START SECOND ORDER SCF--------------- + 2 1 -7.833574070 -0.091401825 0.096747963 0.020465823 1047555 0 + 3 2 -7.837298520 -0.003724450 0.038877423 0.008387983 1047555 0 + 4 3 -7.837730151 -0.000431630 0.005284873 0.001631590 1047555 0 + 5 4 -7.837736407 -0.000006256 0.000920546 0.000134524 1047555 0 + 6 5 -7.837736743 -0.000000336 0.000086435 0.000044680 1047555 0 + 7 6 -7.837736753 -0.000000010 0.000056392 0.000009036 1047555 0 + 8 7 -7.837736753 -0.000000001 0.000005767 0.000000688 1047555 0 + 9 8 -7.837736753 0.000000000 0.000000249 0.000000191 1047291 55 + + ----------------- + DENSITY CONVERGED + ----------------- + + FINAL ROHF ENERGY IS -7.8377367531 AFTER 9 ITERATIONS + + -------------------- + SPIN SZ = 0.000 + S-SQUARED = 0.000 + -------------------- + + ------------ + EIGENVECTORS + ------------ + + 1 2 3 4 5 + -0.9458 -0.5449 -0.5449 -0.5449 0.1275 + A A A A A + 1 C 1 S 0.815115 0.000000 0.000000 0.000000 0.375985 + 2 C 1 S -0.060550 0.000000 0.000000 0.000000 -0.117963 + 3 C 1 S -0.037097 0.000000 0.000000 0.000000 6.365696 + 4 C 1 X 0.000000 -0.077077 0.388071 0.524337 0.000000 + 5 C 1 Y 0.000000 -0.410772 0.381283 -0.342578 0.000000 + 6 C 1 Z 0.000000 0.506750 0.368094 -0.197941 0.000000 + 7 C 1 X 0.000000 0.003201 -0.016115 -0.021774 0.000000 + 8 C 1 Y 0.000000 0.017058 -0.015833 0.014226 0.000000 + 9 C 1 Z 0.000000 -0.021043 -0.015286 0.008220 0.000000 + 10 C 1 X 0.000000 0.001172 -0.005902 -0.007975 0.000000 + 11 C 1 Y 0.000000 0.006247 -0.005799 0.005210 0.000000 + 12 C 1 Z 0.000000 -0.007707 -0.005598 0.003010 0.000000 + 13 C 1 XX -0.035997 0.000000 0.000000 0.000000 -0.091304 + 14 C 1 YY -0.035997 0.000000 0.000000 0.000000 -0.091304 + 15 C 1 ZZ -0.035997 0.000000 0.000000 0.000000 -0.091304 + 16 C 1 XY 0.000000 0.029524 0.021446 -0.011532 0.000000 + 17 C 1 XZ 0.000000 -0.023932 0.022214 -0.019959 0.000000 + 18 C 1 YZ 0.000000 -0.004491 0.022609 0.030548 0.000000 + 19 H 2 S 0.348311 0.635995 -0.256585 -0.242799 0.076308 + 20 H 2 S -0.053506 -0.096893 0.039091 0.036990 -0.273864 + 21 H 2 S -0.147743 -0.208398 0.084076 0.079559 -1.734175 + 22 H 2 X 0.024318 0.027005 0.000516 0.005510 0.027833 + 23 H 2 Y 0.024318 0.016338 0.000299 -0.022200 0.027833 + 24 H 2 Z -0.024318 -0.013271 0.023655 0.004923 -0.027833 + 25 H 2 X -0.017535 -0.030954 0.001805 -0.002994 -0.258613 + 26 H 2 Y -0.017535 -0.020968 0.002008 0.022950 -0.258613 + 27 H 2 Z 0.017535 0.018095 -0.024435 -0.006774 0.258613 + 28 H 3 S 0.348311 -0.537421 -0.239718 -0.427774 0.076308 + 29 H 3 S -0.053506 0.081876 0.036521 0.065171 -0.273864 + 30 H 3 S -0.147743 0.176098 0.078549 0.140170 -1.734175 + 31 H 3 X 0.024318 -0.027365 0.001297 -0.003061 0.027833 + 32 H 3 Y -0.024318 0.011771 0.023295 0.008870 -0.027833 + 33 H 3 Z 0.024318 -0.008703 0.000659 -0.026148 0.027833 + 34 H 3 X -0.017535 0.030413 0.000923 0.006680 -0.258613 + 35 H 3 Y 0.017535 -0.015813 -0.023948 -0.012119 0.258613 + 36 H 3 Z -0.017535 0.012940 0.001521 0.028295 -0.258613 + 37 H 4 S 0.348311 -0.110660 -0.231037 0.680921 0.076308 + 38 H 4 S -0.053506 0.016859 0.035198 -0.103738 -0.273864 + 39 H 4 S -0.147743 0.036260 0.075704 -0.223119 -1.734175 + 40 H 4 X -0.024318 0.002664 0.023109 -0.014790 -0.027833 + 41 H 4 Y 0.024318 -0.018257 0.001482 0.020600 0.027833 + 42 H 4 Z 0.024318 0.011070 0.001061 0.025223 0.027833 + 43 H 4 X 0.017535 -0.003481 -0.023697 0.019919 0.258613 + 44 H 4 Y -0.017535 0.018081 0.000672 -0.025358 -0.258613 + 45 H 4 Z -0.017535 -0.009378 0.001067 -0.029687 -0.258613 + 46 H 5 S 0.348311 0.012086 0.727340 -0.010347 0.076308 + 47 H 5 S -0.053506 -0.001841 -0.110810 0.001576 -0.273864 + 48 H 5 S -0.147743 -0.003960 -0.238329 0.003391 -1.734175 + 49 H 5 X -0.024318 -0.003024 -0.021297 0.017239 -0.027833 + 50 H 5 Y -0.024318 -0.013690 -0.021513 -0.010471 -0.027833 + 51 H 5 Z -0.024318 0.015638 -0.021935 -0.005848 -0.027833 + 52 H 5 X 0.017535 0.002939 0.026424 -0.016233 0.258613 + 53 H 5 Y 0.017535 0.012925 0.026627 0.009711 0.258613 + 54 H 5 Z 0.017535 -0.014534 0.027022 0.005383 0.258613 + + 6 7 8 9 10 + 0.2049 0.2049 0.2049 0.3614 0.3614 + A A A A A + 1 C 1 S 0.000000 0.000000 0.000000 0.000000 0.000000 + 2 C 1 S 0.000000 0.000000 0.000000 0.000000 0.000000 + 3 C 1 S 0.000000 0.000000 0.000000 0.000000 0.000000 + 4 C 1 X 0.252332 0.134718 -0.210460 0.007435 0.042290 + 5 C 1 Y -0.043310 0.318148 0.151724 0.039388 -0.007965 + 6 C 1 Z 0.246103 -0.082139 0.242488 0.015659 -0.000044 + 7 C 1 X -0.055194 -0.029468 0.046035 -0.009122 -0.051886 + 8 C 1 Y 0.009474 -0.069590 -0.033187 -0.048325 0.009772 + 9 C 1 Z -0.053832 0.017967 -0.053041 -0.019212 0.000054 + 10 C 1 X 2.376423 1.268757 -1.982080 -0.061013 -0.347048 + 11 C 1 Y -0.407889 2.996266 1.428911 -0.323231 0.065365 + 12 C 1 Z 2.317760 -0.773574 2.283713 -0.128506 0.000362 + 13 C 1 XX 0.000000 0.000000 0.000000 0.000000 0.000000 + 14 C 1 YY 0.000000 0.000000 0.000000 0.000000 0.000000 + 15 C 1 ZZ 0.000000 0.000000 0.000000 0.000000 0.000000 + 16 C 1 XY -0.014638 0.004886 -0.014423 -0.004390 0.000012 + 17 C 1 XZ 0.002576 -0.018923 -0.009024 -0.011042 0.002233 + 18 C 1 YZ -0.015008 -0.008013 0.012518 -0.002084 -0.011856 + 19 H 2 S 0.002209 -0.031876 0.017947 0.140552 0.155010 + 20 H 2 S -0.001890 0.027273 -0.015356 0.202464 0.223290 + 21 H 2 S -0.309898 4.471181 -2.517409 -0.494269 -0.545112 + 22 H 2 X 0.052185 -0.095148 0.030119 0.033039 -0.046906 + 23 H 2 Y 0.000676 -0.063190 0.093221 -0.045079 0.075957 + 24 H 2 Z 0.034657 0.104309 -0.024538 -0.089500 -0.056376 + 25 H 2 X -0.294406 0.521786 -0.160935 -0.151301 0.231115 + 26 H 2 Y -0.002637 0.340760 -0.518374 0.221726 -0.355576 + 27 H 2 Z -0.197499 -0.573677 0.129327 0.420908 0.262074 + 28 H 3 S -0.032278 0.015823 0.007132 -0.073487 0.226460 + 29 H 3 S 0.027617 -0.013538 -0.006102 -0.105857 0.326214 + 30 H 3 S 4.527508 -2.219427 -1.000331 0.258427 -0.796376 + 31 H 3 X -0.076151 0.082353 -0.010129 -0.044955 -0.020870 + 32 H 3 Y 0.112569 -0.003451 -0.000104 -0.069517 -0.063047 + 33 H 3 Z -0.077236 0.044570 0.068787 -0.065062 0.082628 + 34 H 3 X 0.413962 -0.457956 0.061219 0.211285 0.110077 + 35 H 3 Y -0.620245 0.011023 -0.003252 0.335335 0.290640 + 36 H 3 Z 0.420109 -0.243940 -0.385795 0.307299 -0.384142 + 37 H 4 S 0.002952 -0.006035 -0.036027 0.214739 -0.226858 + 38 H 4 S -0.002525 0.005163 0.030825 0.309330 -0.326787 + 39 H 4 S -0.414012 0.846509 5.053401 -0.755158 0.797775 + 40 H 4 X 0.032980 0.045930 0.097398 -0.096426 -0.020725 + 41 H 4 Y 0.003438 0.032973 -0.107632 -0.018046 -0.063192 + 42 H 4 Z 0.053862 -0.036769 -0.091818 0.039965 -0.082557 + 43 H 4 X -0.188400 -0.256912 -0.532295 0.450568 0.109403 + 44 H 4 Y -0.017883 -0.190021 0.590261 0.096051 0.291314 + 45 H 4 Z -0.303505 0.205022 0.500686 -0.180961 0.383786 + 46 H 5 S 0.027117 0.022088 0.010948 -0.281804 -0.154612 + 47 H 5 S -0.023201 -0.018899 -0.009367 -0.405936 -0.222717 + 48 H 5 S -3.803598 -3.098263 -1.535661 0.991000 0.543713 + 49 H 5 X -0.056946 -0.058725 -0.077409 0.084510 -0.047051 + 50 H 5 Y -0.108455 -0.026766 -0.014306 0.006392 0.075812 + 51 H 5 Z -0.058031 -0.096508 0.001507 0.064403 0.056447 + 52 H 5 X 0.307956 0.320742 0.432578 -0.390584 0.231789 + 53 H 5 Y 0.599725 0.139716 0.075139 -0.017558 -0.354902 + 54 H 5 Z 0.314103 0.534759 -0.014436 -0.294570 -0.262430 + + 11 12 13 14 15 + 0.3614 0.3941 0.3941 0.4916 0.5647 + A A A A A + 1 C 1 S 0.000000 0.000000 0.000000 -0.545218 0.000000 + 2 C 1 S 0.000000 0.000000 0.000000 -0.054352 0.000000 + 3 C 1 S 0.000000 0.000000 0.000000 11.179954 0.000000 + 4 C 1 X -0.002858 0.000000 0.000000 0.000000 -0.134894 + 5 C 1 Y -0.015396 0.000000 0.000000 0.000000 -0.646060 + 6 C 1 Z 0.040084 0.000000 0.000000 0.000000 -0.053576 + 7 C 1 X 0.003507 0.000000 0.000000 0.000000 -0.012410 + 8 C 1 Y 0.018890 0.000000 0.000000 0.000000 -0.059438 + 9 C 1 Z -0.049178 0.000000 0.000000 0.000000 -0.004929 + 10 C 1 X 0.023454 0.000000 0.000000 0.000000 1.183350 + 11 C 1 Y 0.126348 0.000000 0.000000 0.000000 5.667525 + 12 C 1 Z -0.328939 0.000000 0.000000 0.000000 0.469989 + 13 C 1 XX 0.000000 -0.045754 -0.026789 -0.042828 0.000000 + 14 C 1 YY 0.000000 0.046076 -0.026230 -0.042828 0.000000 + 15 C 1 ZZ 0.000000 -0.000323 0.053018 -0.042828 0.000000 + 16 C 1 XY -0.011237 0.000000 0.000000 0.000000 0.004114 + 17 C 1 XZ 0.004316 0.000000 0.000000 0.000000 0.049616 + 18 C 1 YZ 0.000801 0.000000 0.000000 0.000000 0.010360 + 19 H 2 S -0.263113 0.000000 0.000000 0.297949 -0.185936 + 20 H 2 S -0.379011 0.000000 0.000000 -0.492174 0.389909 + 21 H 2 S 0.925270 0.000000 0.000000 -2.411027 4.112716 + 22 H 2 X -0.088889 -0.083815 -0.049073 0.034326 -0.034895 + 23 H 2 Y -0.058235 0.084406 -0.048049 0.034326 -0.057024 + 24 H 2 Z -0.002119 0.000591 -0.097122 -0.034326 0.026735 + 25 H 2 X 0.412352 0.416604 0.243920 -0.754679 0.887512 + 26 H 2 Y 0.265977 -0.419543 0.238830 -0.754679 0.491279 + 27 H 2 Z 0.022226 -0.002938 0.482750 0.754679 -1.033605 + 28 H 3 S 0.237333 0.000000 0.000000 0.297949 0.116971 + 29 H 3 S 0.341875 0.000000 0.000000 -0.492173 -0.245290 + 30 H 3 S -0.834610 0.000000 0.000000 -2.411027 -2.587290 + 31 H 3 X 0.093469 -0.083815 -0.049073 0.034326 0.012438 + 32 H 3 Y -0.048841 -0.084406 0.048049 -0.034326 -0.046248 + 33 H 3 Z -0.011513 -0.000591 0.097122 0.034326 0.015959 + 34 H 3 X -0.435410 0.416604 0.243920 -0.754679 -0.728674 + 35 H 3 Y 0.222304 0.419543 -0.238830 0.754680 0.123313 + 36 H 3 Z 0.065898 0.002938 -0.482750 -0.754679 -0.665639 + 37 H 4 S 0.124233 0.000000 0.000000 0.297949 -0.144362 + 38 H 4 S 0.178956 0.000000 0.000000 -0.492174 0.302728 + 39 H 4 S -0.436880 0.000000 0.000000 -2.411027 3.193141 + 40 H 4 X -0.038282 0.083815 0.049073 -0.034326 0.016719 + 41 H 4 Y 0.082910 0.084406 -0.048049 0.034326 -0.050528 + 42 H 4 Z -0.052726 -0.000591 0.097122 0.034326 -0.024878 + 43 H 4 X 0.177087 -0.416604 -0.243920 0.754679 -0.874818 + 44 H 4 Y -0.390193 -0.419543 0.238830 -0.754679 0.269458 + 45 H 4 Z 0.257491 0.002938 -0.482750 -0.754679 0.728725 + 46 H 5 S -0.098452 0.000000 0.000000 0.297949 0.213326 + 47 H 5 S -0.141819 0.000000 0.000000 -0.492173 -0.447348 + 48 H 5 S 0.346220 0.000000 0.000000 -2.411027 -4.718566 + 49 H 5 X 0.042862 0.083815 0.049073 -0.034326 -0.039175 + 50 H 5 Y 0.073516 -0.084406 0.048049 -0.034326 -0.061305 + 51 H 5 Z -0.062120 0.000591 -0.097122 -0.034326 -0.035654 + 52 H 5 X -0.200145 -0.416604 -0.243920 0.754679 1.033656 + 53 H 5 Y -0.346521 0.419543 -0.238830 0.754680 0.637423 + 54 H 5 Z 0.301163 -0.002938 0.482750 0.754679 1.096690 + + 16 17 18 19 20 + 0.5647 0.5647 0.6073 0.6073 0.6073 + A A A A A + 1 C 1 S 0.000000 0.000000 0.000000 0.000000 0.000000 + 2 C 1 S 0.000000 0.000000 0.000000 0.000000 0.000000 + 3 C 1 S 0.000000 0.000000 0.000000 0.000000 0.000000 + 4 C 1 X -0.616857 0.199376 0.000000 0.000000 0.000000 + 5 C 1 Y 0.144747 0.010726 0.000000 0.000000 0.000000 + 6 C 1 Z -0.192343 -0.631343 0.000000 0.000000 0.000000 + 7 C 1 X -0.056752 0.018343 0.000000 0.000000 0.000000 + 8 C 1 Y 0.013317 0.000987 0.000000 0.000000 0.000000 + 9 C 1 Z -0.017696 -0.058084 0.000000 0.000000 0.000000 + 10 C 1 X 5.411345 -1.749019 0.000000 0.000000 0.000000 + 11 C 1 Y -1.269785 -0.094097 0.000000 0.000000 0.000000 + 12 C 1 Z 1.687315 5.538422 0.000000 0.000000 0.000000 + 13 C 1 XX 0.000000 0.000000 0.000000 0.000000 0.000000 + 14 C 1 YY 0.000000 0.000000 0.000000 0.000000 0.000000 + 15 C 1 ZZ 0.000000 0.000000 0.000000 0.000000 0.000000 + 16 C 1 XY 0.014771 0.048485 0.000000 0.000000 0.000000 + 17 C 1 XZ -0.011116 -0.000824 0.000000 0.000000 0.000000 + 18 C 1 YZ 0.047373 -0.015312 0.000000 0.000000 0.000000 + 19 H 2 S -0.071515 0.215094 0.000000 0.000000 0.000000 + 20 H 2 S 0.149969 -0.451055 0.000000 0.000000 0.000000 + 21 H 2 S 1.581852 -4.757673 0.000000 0.000000 0.000000 + 22 H 2 X -0.037881 0.042243 0.127428 -0.080325 0.094350 + 23 H 2 Y -0.004909 0.034076 -0.003445 -0.016634 -0.176928 + 24 H 2 Z 0.002848 -0.060944 0.123983 -0.096959 -0.082578 + 25 H 2 X -0.096583 -0.993105 -0.836627 0.527373 -0.619450 + 26 H 2 Y 0.493778 -1.139338 0.022620 0.109207 1.161614 + 27 H 2 Z -0.530672 0.658264 -0.814008 0.636580 0.542164 + 28 H 3 S -0.243852 -0.113163 0.000000 0.000000 0.000000 + 29 H 3 S 0.511361 0.237304 0.000000 0.000000 0.000000 + 30 H 3 S 5.393771 2.503059 0.000000 0.000000 0.000000 + 31 H 3 X -0.064810 -0.009052 -0.127428 0.080325 -0.094350 + 32 H 3 Y 0.044372 0.018148 -0.167513 -0.058772 0.008787 + 33 H 3 Z -0.046432 -0.045016 -0.040085 -0.139097 0.103137 + 34 H 3 X 0.822933 0.758339 0.836627 -0.527373 0.619450 + 35 H 3 Y -1.188892 -0.595477 1.099802 0.385865 -0.057692 + 36 H 3 Z 1.151998 0.114403 0.263175 0.913237 -0.677142 + 37 H 4 S 0.145517 -0.209610 0.000000 0.000000 0.000000 + 38 H 4 S -0.305151 0.439555 0.000000 0.000000 0.000000 + 39 H 4 S -3.218698 4.636375 0.000000 0.000000 0.000000 + 40 H 4 X -0.049444 0.041386 0.043530 0.155730 0.073791 + 41 H 4 Y 0.029005 -0.032290 0.003445 0.016634 0.176928 + 42 H 4 Z 0.014412 -0.060087 0.040085 0.139097 -0.103137 + 43 H 4 X 0.298259 -0.963846 -0.285795 -1.022445 -0.484472 + 44 H 4 Y -0.664218 1.126708 -0.022620 -0.109207 -1.161614 + 45 H 4 Z -0.925514 0.629005 -0.263175 -0.913237 0.677142 + 46 H 5 S 0.169850 0.107679 0.000000 0.000000 0.000000 + 47 H 5 S -0.356178 -0.225805 0.000000 0.000000 0.000000 + 48 H 5 S -3.756925 -2.381761 0.000000 0.000000 0.000000 + 49 H 5 X -0.053247 -0.008195 -0.043530 -0.155730 -0.073791 + 50 H 5 Y -0.020275 -0.016362 0.167513 0.058772 -0.008787 + 51 H 5 Z -0.034868 -0.044159 -0.123983 0.096959 0.082578 + 52 H 5 X 0.428091 0.729080 0.285795 1.022445 0.484472 + 53 H 5 Y 1.018452 0.582847 -1.099802 -0.385865 0.057692 + 54 H 5 Z 0.757156 0.085143 0.814008 -0.636580 -0.542164 + + 21 22 23 24 25 + 0.7429 0.8247 0.8247 0.8247 0.9366 + A A A A A + 1 C 1 S -0.447974 0.000000 0.000000 0.000000 0.000000 + 2 C 1 S -0.695249 0.000000 0.000000 0.000000 0.000000 + 3 C 1 S 5.840619 -0.000001 0.000000 0.000000 -0.000002 + 4 C 1 X 0.000000 0.000028 -0.066829 -0.025239 -0.006658 + 5 C 1 Y 0.000000 -0.070994 -0.002828 0.007409 0.534216 + 6 C 1 Z 0.000000 -0.007931 0.025080 -0.066417 0.044623 + 7 C 1 X 0.000000 0.000049 -0.116294 -0.043920 -0.008917 + 8 C 1 Y 0.000000 -0.123542 -0.004922 0.012893 0.715428 + 9 C 1 Z 0.000000 -0.013801 0.043644 -0.115577 0.059759 + 10 C 1 X 0.000000 -0.002281 5.371275 2.028544 -0.064879 + 11 C 1 Y -0.000001 5.706074 0.227326 -0.595509 5.205375 + 12 C 1 Z 0.000000 0.637419 -2.015768 5.338161 0.434800 + 13 C 1 XX -0.493170 0.000000 0.000000 0.000000 0.000000 + 14 C 1 YY -0.493170 0.000000 0.000000 0.000000 0.000000 + 15 C 1 ZZ -0.493170 0.000000 0.000000 0.000000 0.000000 + 16 C 1 XY 0.000000 0.019524 -0.061741 0.163503 -0.011436 + 17 C 1 XZ 0.000000 0.174772 0.006963 -0.018240 -0.136914 + 18 C 1 YZ 0.000000 -0.000070 0.164517 0.062132 0.001706 + 19 H 2 S 0.032199 -0.077073 -0.115834 0.059407 0.211501 + 20 H 2 S -0.826559 0.748865 1.125485 -0.577219 0.887300 + 21 H 2 S -0.750355 -0.198843 -0.298846 0.153267 2.421462 + 22 H 2 X -0.106475 0.084176 0.251646 -0.017694 -0.151631 + 23 H 2 Y -0.106475 0.217080 0.131883 -0.078788 0.105305 + 24 H 2 Z 0.106475 -0.069389 -0.173522 0.189208 0.169666 + 25 H 2 X 0.156574 -0.088281 -2.169235 -0.699932 1.092165 + 26 H 2 Y 0.156574 -2.251262 -0.220116 0.294360 -0.176599 + 27 H 2 Z -0.156574 -0.152382 0.897783 -2.091421 -1.181220 + 28 H 3 S 0.032199 0.077142 -0.047588 -0.121125 -0.217333 + 29 H 3 S -0.826559 -0.749539 0.462379 1.176900 -0.911767 + 30 H 3 S -0.750355 0.199022 -0.122774 -0.312498 -2.488232 + 31 H 3 X -0.106475 -0.084359 0.177063 0.179603 0.149399 + 32 H 3 Y 0.106475 0.217156 -0.046714 -0.146238 0.101211 + 33 H 3 Z -0.106475 -0.069465 0.005075 0.256658 0.173760 + 34 H 3 X 0.156574 0.090090 -2.090298 -0.908745 -1.090612 + 35 H 3 Y -0.156574 -2.251342 -0.031095 0.365747 -0.146914 + 36 H 3 Z 0.156574 -0.152301 0.708762 -2.162808 -1.210905 + 37 H 4 S 0.032199 -0.096535 0.108918 -0.041288 0.256418 + 38 H 4 S -0.826559 0.937974 -1.058283 0.401174 1.075738 + 39 H 4 S -0.750355 -0.249056 0.281002 -0.106522 2.935712 + 40 H 4 X 0.106475 -0.105553 0.244088 0.002107 0.176836 + 41 H 4 Y -0.106475 0.238351 -0.113739 0.031258 0.073774 + 42 H 4 Z -0.106475 0.120340 -0.165964 0.169408 -0.158801 + 43 H 4 X -0.156574 0.112521 -2.161235 -0.720889 -1.289555 + 44 H 4 Y 0.156574 -2.273773 0.039842 0.177891 0.052029 + 45 H 4 Z 0.156574 -0.353185 0.889783 -2.070464 1.200500 + 46 H 5 S 0.032199 0.096466 0.054504 0.103007 -0.250586 + 47 H 5 S -0.826559 -0.937299 -0.529581 -1.000855 -1.051270 + 48 H 5 S -0.750355 0.248877 0.140618 0.265753 -2.868941 + 49 H 5 X 0.106475 0.105371 0.184621 0.159802 -0.179068 + 50 H 5 Y 0.106475 0.238275 0.064858 0.098708 0.077868 + 51 H 5 Z 0.106475 0.120265 0.012634 0.236857 -0.154707 + 52 H 5 X -0.156574 -0.110713 -2.098297 -0.887788 1.291107 + 53 H 5 Y -0.156574 -2.273693 -0.149179 0.106504 0.022344 + 54 H 5 Z -0.156574 -0.353105 0.700762 -2.141851 1.170815 + + 26 27 28 29 30 + 0.9366 0.9366 1.0484 1.2454 1.2454 + A A A A A + 1 C 1 S 0.000000 0.000000 0.625457 0.000000 0.000000 + 2 C 1 S 0.000000 0.000000 0.308497 0.000000 0.000000 + 3 C 1 S 0.000001 0.000000 12.340607 0.000000 0.000000 + 4 C 1 X 0.445513 0.298155 0.000000 0.000000 0.000000 + 5 C 1 Y 0.030334 -0.033397 0.000000 0.000000 0.000000 + 6 C 1 Z -0.296682 0.444309 0.000000 0.000000 0.000000 + 7 C 1 X 0.596635 0.399292 0.000000 0.000000 0.000000 + 8 C 1 Y 0.040624 -0.044725 0.000000 0.000000 0.000000 + 9 C 1 Z -0.397320 0.595023 0.000000 0.000000 0.000000 + 10 C 1 X 4.341055 2.905208 0.000000 0.000000 0.000000 + 11 C 1 Y 0.295577 -0.325414 0.000001 0.000000 0.000000 + 12 C 1 Z -2.890861 4.329327 0.000000 0.000000 0.000000 + 13 C 1 XX 0.000000 0.000000 0.242181 -0.003636 -0.348465 + 14 C 1 YY 0.000000 0.000000 0.242181 0.303597 0.171083 + 15 C 1 ZZ 0.000000 0.000000 0.242181 -0.299961 0.177381 + 16 C 1 XY 0.076037 -0.113872 0.000000 0.000000 0.000000 + 17 C 1 XZ -0.007774 0.008559 0.000000 0.000000 0.000000 + 18 C 1 YZ -0.114181 -0.076414 0.000000 0.000000 0.000000 + 19 H 2 S 0.338329 -0.078634 -0.371621 0.000000 0.000000 + 20 H 2 S 1.419374 -0.329890 -1.456375 0.000000 0.000000 + 21 H 2 S 3.873503 -0.900276 -1.993949 0.000000 0.000000 + 22 H 2 X -0.025862 0.196834 0.121467 0.006022 0.577093 + 23 H 2 Y -0.223088 0.039334 0.121467 -0.502788 -0.283332 + 24 H 2 Z 0.096562 0.155865 -0.121467 -0.496766 0.293761 + 25 H 2 X 0.677034 -1.099651 -0.895878 -0.005800 -0.555875 + 26 H 2 Y 1.650945 -0.321909 -0.895878 0.484302 0.272914 + 27 H 2 Z -1.026155 -0.641995 0.895878 0.478502 -0.282961 + 28 H 3 S 0.051895 0.339788 -0.371621 0.000000 0.000000 + 29 H 3 S 0.217713 1.425494 -1.456375 0.000000 0.000000 + 30 H 3 S 0.594144 3.890205 -1.993949 0.000000 0.000000 + 31 H 3 X 0.175207 -0.096887 0.121467 0.006022 0.577093 + 32 H 3 Y 0.050839 0.222658 -0.121467 0.502788 0.283332 + 33 H 3 Z -0.177365 -0.027458 0.121467 0.496766 -0.293761 + 34 H 3 X -0.780920 1.030126 -0.895878 -0.005800 -0.555875 + 35 H 3 Y -0.335305 -1.651187 0.895878 -0.484302 -0.272914 + 36 H 3 Z 0.960095 0.687283 -0.895878 -0.478502 0.282961 + 37 H 4 S -0.311759 0.049382 -0.371621 0.000000 0.000000 + 38 H 4 S -1.307907 0.207170 -1.456375 0.000000 0.000000 + 39 H 4 S -3.569307 0.565372 -1.993948 0.000000 0.000000 + 40 H 4 X -0.007211 0.176300 -0.121467 -0.006022 -0.577093 + 41 H 4 Y 0.233257 -0.050530 0.121467 -0.502788 -0.283332 + 42 H 4 Z 0.077911 0.176399 0.121467 0.496766 -0.293761 + 43 H 4 X 0.541793 -0.950758 0.895878 0.005800 0.555875 + 44 H 4 Y -1.658018 0.329697 -0.895878 0.484302 0.272914 + 45 H 4 Z -0.890914 -0.790888 -0.895878 -0.478502 0.282961 + 46 H 5 S -0.078465 -0.310536 -0.371621 0.000000 0.000000 + 47 H 5 S -0.329180 -1.302774 -1.456375 0.000000 0.000000 + 48 H 5 S -0.898340 -3.555301 -1.993949 0.000000 0.000000 + 49 H 5 X 0.156555 -0.076353 -0.121468 -0.006022 -0.577093 + 50 H 5 Y -0.040670 -0.233853 -0.121468 0.502788 0.283332 + 51 H 5 Z -0.196016 -0.006924 -0.121468 -0.496766 0.293761 + 52 H 5 X -0.645679 0.881233 0.895878 0.005800 0.555875 + 53 H 5 Y 0.328231 1.658975 0.895878 -0.484302 -0.272914 + 54 H 5 Z 1.095336 0.538389 0.895878 0.478502 -0.282961 + + 31 32 33 34 35 + 1.5034 1.5034 1.5034 1.6338 1.6338 + A A A A A + 1 C 1 S 0.000000 0.000000 0.000000 0.000000 0.000000 + 2 C 1 S 0.000000 0.000000 0.000000 0.000000 0.000000 + 3 C 1 S 0.000000 0.000000 0.000000 0.000000 0.000000 + 4 C 1 X -0.269156 0.660409 -0.523769 0.000000 0.000000 + 5 C 1 Y -0.834518 -0.286118 0.068084 0.000000 0.000000 + 6 C 1 Z -0.118551 0.514699 0.709894 0.000000 0.000000 + 7 C 1 X -0.070833 0.173798 -0.137839 0.000000 0.000000 + 8 C 1 Y -0.219618 -0.075297 0.017917 0.000000 0.000000 + 9 C 1 Z -0.031199 0.135452 0.186821 0.000000 0.000000 + 10 C 1 X -0.012115 0.029726 -0.023576 0.000000 0.000000 + 11 C 1 Y -0.037563 -0.012879 0.003065 0.000000 0.000000 + 12 C 1 Z -0.005336 0.023167 0.031953 0.000000 0.000000 + 13 C 1 XX 0.000000 0.000000 0.000000 0.000000 0.000000 + 14 C 1 YY 0.000000 0.000000 0.000000 0.000000 0.000000 + 15 C 1 ZZ 0.000000 0.000000 0.000000 0.000000 0.000000 + 16 C 1 XY -0.055281 0.240010 0.331031 0.000000 0.000000 + 17 C 1 XZ -0.389145 -0.133420 0.031748 0.000000 0.000000 + 18 C 1 YZ -0.125510 0.307956 -0.244239 0.000000 0.000000 + 19 H 2 S 0.417917 0.059565 0.494471 0.000000 0.000000 + 20 H 2 S -0.942551 -0.134340 -1.115208 0.000000 0.000000 + 21 H 2 S -1.268879 -0.180851 -1.501314 0.000000 0.000000 + 22 H 2 X 0.038137 -0.722929 0.259126 -0.948441 -0.369758 + 23 H 2 Y 0.627442 0.263684 -0.357791 0.242349 0.417886 + 24 H 2 Z 0.365989 -0.501945 -0.453134 -0.706092 0.048128 + 25 H 2 X -0.475062 0.653450 -0.773972 1.018173 0.396943 + 26 H 2 Y -1.058539 -0.323404 -0.163157 -0.260167 -0.448610 + 27 H 2 Z 0.074934 0.559308 0.966061 0.758006 -0.051667 + 28 H 3 S -0.189550 -0.619893 -0.050077 0.000000 0.000000 + 29 H 3 S 0.427503 1.398079 0.112940 0.000000 0.000000 + 30 H 3 S 0.575512 1.882120 0.152043 0.000000 0.000000 + 31 H 3 X 0.390505 -0.328801 0.574998 0.948441 0.369758 + 32 H 3 Y 0.759909 -0.061341 -0.100014 0.797840 -0.646949 + 33 H 3 Z 0.233522 -0.176920 -0.710911 -0.150601 -1.016706 + 34 H 3 X -0.188300 0.974197 -0.516911 -1.018173 -0.396943 + 35 H 3 Y -0.950735 -0.587914 0.046626 -0.856499 0.694514 + 36 H 3 Z -0.032869 0.823819 0.756278 0.161674 1.091458 + 37 H 4 S 0.290135 0.183194 -0.552237 0.000000 0.000000 + 38 H 4 S -0.654357 -0.413167 1.245491 0.000000 0.000000 + 39 H 4 S -0.880908 -0.556213 1.676703 0.000000 0.000000 + 40 H 4 X 0.448851 -0.582114 0.225618 -0.091748 0.598820 + 41 H 4 Y 0.701563 0.191972 0.249365 -0.242349 -0.417886 + 42 H 4 Z -0.044725 -0.642760 -0.419626 0.150601 1.016706 + 43 H 4 X -0.140817 0.768048 -0.801241 0.098493 -0.642847 + 44 H 4 Y -0.998218 -0.381764 0.330956 0.260167 0.448610 + 45 H 4 Z -0.259311 0.444711 0.993330 -0.161674 -1.091458 + 46 H 5 S -0.518501 0.377134 0.107842 0.000000 0.000000 + 47 H 5 S 1.169406 -0.850572 -0.243223 0.000000 0.000000 + 48 H 5 S 1.574275 -1.145056 -0.327432 0.000000 0.000000 + 49 H 5 X -0.020209 -0.469616 0.608506 0.091748 -0.598820 + 50 H 5 Y 0.569096 0.516997 -0.008412 -0.797840 0.646949 + 51 H 5 Z -0.177192 -0.317735 -0.677403 0.706092 -0.048128 + 52 H 5 X -0.522545 0.859600 -0.489642 -0.098493 0.642847 + 53 H 5 Y -1.106021 -0.117254 0.121174 0.856499 -0.694514 + 54 H 5 Z -0.367114 0.709221 0.783548 -0.758006 0.051667 + + 36 37 38 39 40 + 1.6338 2.0960 2.0960 2.0960 2.3189 + A A A A A + 1 C 1 S 0.000000 0.000000 0.000000 0.000000 0.000000 + 2 C 1 S 0.000000 0.000000 0.000000 0.000000 0.000000 + 3 C 1 S 0.000000 0.000000 0.000000 0.000000 0.000000 + 4 C 1 X 0.000000 0.114153 -0.151777 0.125447 0.000000 + 5 C 1 Y 0.000000 -0.000109 0.144955 0.175478 0.000000 + 6 C 1 Z 0.000000 -0.196909 -0.088069 0.072628 0.000000 + 7 C 1 X 0.000000 0.442184 -0.587922 0.485932 0.000000 + 8 C 1 Y 0.000000 -0.000423 0.561495 0.679730 0.000000 + 9 C 1 Z 0.000000 -0.762747 -0.341145 0.281331 0.000000 + 10 C 1 X 0.000000 -2.127287 2.828414 -2.337754 0.000000 + 11 C 1 Y 0.000000 0.002035 -2.701277 -3.270087 0.000000 + 12 C 1 Z 0.000000 3.669470 1.641203 -1.353443 0.000000 + 13 C 1 XX 0.000000 0.000000 0.000000 0.000000 1.397037 + 14 C 1 YY 0.000000 0.000000 0.000000 0.000000 -1.074615 + 15 C 1 ZZ 0.000000 0.000000 0.000000 0.000000 -0.322422 + 16 C 1 XY 0.000000 0.671553 0.300358 -0.247695 0.000000 + 17 C 1 XZ 0.000000 0.000372 -0.494363 -0.598461 0.000000 + 18 C 1 YZ 0.000000 -0.389317 0.517630 -0.427834 0.000000 + 19 H 2 S 0.000000 0.126762 0.033121 0.093067 0.000000 + 20 H 2 S 0.000000 -0.537419 -0.140419 -0.394564 0.000000 + 21 H 2 S 0.000000 -2.992643 -0.781928 -2.197153 0.000000 + 22 H 2 X -0.161189 0.562390 0.963793 0.225613 0.767588 + 23 H 2 Y 0.910429 1.076342 -0.370902 0.000576 -0.590437 + 24 H 2 Z 0.749240 -0.190155 0.115033 -1.116553 0.177151 + 25 H 2 X 0.173040 -0.845634 -1.167689 -0.403785 -0.404266 + 26 H 2 Y -0.977367 -1.441311 0.379239 -0.142965 0.310966 + 27 H 2 Z -0.804326 0.414209 -0.082684 1.436396 -0.093300 + 28 H 3 S 0.000000 -0.033691 -0.156866 0.009212 0.000000 + 29 H 3 S 0.000000 0.142837 0.665048 -0.039055 0.000000 + 30 H 3 S 0.000000 0.795398 3.703357 -0.217479 0.000000 + 31 H 3 X 0.161189 -0.799406 -0.648661 -0.486077 0.767588 + 32 H 3 Y 0.084570 0.286436 0.679347 -0.867481 0.590437 + 33 H 3 Z -0.076619 0.599751 -0.935216 -0.248496 -0.177151 + 34 H 3 X -0.173040 0.978035 0.991651 0.549285 -0.404266 + 35 H 3 Y -0.090788 -0.383496 -1.027218 1.019506 -0.310966 + 36 H 3 Z 0.082252 -0.643606 1.323773 0.273925 0.093300 + 37 H 4 S 0.000000 -0.126851 0.085062 0.050002 0.000000 + 38 H 4 S 0.000000 0.537796 -0.360629 -0.211989 0.000000 + 39 H 4 S 0.000000 2.994745 -2.008182 -1.180473 0.000000 + 40 H 4 X -0.833810 0.563146 -0.039247 -0.988639 -0.767588 + 41 H 4 Y -0.910429 -1.076115 0.069934 -0.364919 -0.590437 + 42 H 4 Z 0.076619 -0.190911 1.118074 0.097699 -0.177151 + 43 H 4 X 0.895114 -0.846646 0.175547 1.222298 0.404266 + 44 H 4 Y 0.977367 1.441184 -0.211113 0.346493 0.310966 + 45 H 4 Z -0.082252 0.415221 -1.425920 -0.189687 0.093300 + 46 H 5 S 0.000000 0.033780 0.038683 -0.152281 0.000000 + 47 H 5 S 0.000000 -0.143215 -0.164000 0.645608 0.000000 + 48 H 5 S 0.000000 -0.797500 -0.913247 3.595105 0.000000 + 49 H 5 X 0.833810 -0.800161 0.354380 0.728174 -0.767588 + 50 H 5 Y -0.084570 -0.286209 -0.980315 0.503138 0.590437 + 51 H 5 Z -0.749240 0.598996 0.067824 0.965756 0.177151 + 52 H 5 X -0.895114 0.979046 -0.351585 -1.076798 0.404266 + 53 H 5 Y 0.090788 0.383369 1.195343 -0.815978 -0.310966 + 54 H 5 Z 0.804327 -0.642594 -0.019463 -1.352158 -0.093301 + + 41 42 43 44 45 + 2.3189 2.4025 2.5657 2.5657 2.5657 + A A A A A + 1 C 1 S 0.000000 -1.640655 0.000000 0.000000 0.000000 + 2 C 1 S 0.000000 -1.410351 0.000000 0.000000 0.000000 + 3 C 1 S 0.000000 4.185354 -0.000003 0.000000 -0.000001 + 4 C 1 X 0.000000 0.000000 -0.056538 1.651462 0.590802 + 5 C 1 Y 0.000000 0.000000 1.739998 0.127239 -0.189157 + 6 C 1 Z 0.000000 0.000000 0.220847 -0.579701 1.641569 + 7 C 1 X 0.000000 0.000000 -0.032463 0.948226 0.339222 + 8 C 1 Y 0.000000 0.000000 0.999066 0.073057 -0.108608 + 9 C 1 Z 0.000000 0.000000 0.126805 -0.332849 0.942542 + 10 C 1 X 0.000000 0.000000 -0.036828 1.075741 0.384841 + 11 C 1 Y 0.000000 0.000000 1.133416 0.082882 -0.123214 + 12 C 1 Z 0.000000 0.000000 0.143857 -0.377610 1.069295 + 13 C 1 XX -0.434279 -0.786691 0.000000 0.000000 0.000000 + 14 C 1 YY -0.992730 -0.786691 0.000000 0.000000 0.000000 + 15 C 1 ZZ 1.427009 -0.786691 0.000000 0.000000 0.000000 + 16 C 1 XY 0.000000 0.000000 0.191829 -0.503531 1.425873 + 17 C 1 XZ 0.000000 0.000000 1.511373 0.110520 -0.164302 + 18 C 1 YZ 0.000000 0.000000 -0.049109 1.434468 0.513173 + 19 H 2 S 0.000000 0.512514 -0.337833 -0.544736 0.286391 + 20 H 2 S 0.000000 0.835015 1.756944 2.832988 -1.489431 + 21 H 2 S 0.000000 -1.078961 -0.696223 -1.122632 0.590221 + 22 H 2 X -0.238610 1.023574 0.731983 1.668520 -0.468436 + 23 H 2 Y -0.545446 1.023574 1.235318 1.241479 -0.686957 + 24 H 2 Z -0.784056 -1.023574 -0.685948 -1.368245 1.093878 + 25 H 2 X 0.125669 -0.769866 -0.380654 -1.651675 -0.000631 + 26 H 2 Y 0.287270 -0.769866 -1.450650 -0.743866 0.463902 + 27 H 2 Z 0.412940 0.769866 0.282793 1.013347 -1.328940 + 28 H 3 S 0.000000 0.512513 0.363949 -0.218162 -0.559314 + 29 H 3 S 0.000000 0.835016 -1.892772 1.134589 2.908811 + 30 H 3 S 0.000000 -1.078961 0.750051 -0.449605 -1.152680 + 31 H 3 X -0.238610 1.023574 -0.821478 0.945615 1.403629 + 32 H 3 Y 0.545446 -1.023574 1.293132 -0.447277 -1.291100 + 33 H 3 Z 0.784056 1.023574 -0.743763 0.320511 1.698021 + 34 H 3 X 0.125669 -0.769867 0.480032 -1.251153 -1.037840 + 35 H 3 Y -0.287270 0.769867 -1.482682 0.191780 0.798625 + 36 H 3 Z -0.412940 -0.769866 0.314825 0.077700 -1.663663 + 37 H 4 S 0.000000 0.512514 -0.465973 0.485957 -0.199011 + 38 H 4 S 0.000000 0.835015 2.423353 -2.527301 1.034991 + 39 H 4 S 0.000000 -1.078961 -0.960301 1.001497 -0.410138 + 40 H 4 X 0.238610 -1.023574 -1.047312 1.538407 -0.275008 + 41 H 4 Y -0.545446 1.023574 1.518967 -1.040070 0.387537 + 42 H 4 Z 0.784056 1.023574 1.093347 -1.238133 0.900450 + 43 H 4 X -0.125669 0.769866 0.605155 -1.579587 -0.107799 + 44 H 4 Y 0.287270 -0.769866 -1.607804 0.520214 -0.131416 + 45 H 4 Z -0.412940 -0.769866 -0.703015 0.941259 -1.221772 + 46 H 5 S 0.000000 0.512513 0.439852 0.276941 0.471932 + 47 H 5 S 0.000000 0.835016 -2.287518 -1.440277 -2.454370 + 48 H 5 S 0.000000 -1.078961 0.906477 0.570740 0.972598 + 49 H 5 X 0.238610 -1.023574 0.957817 1.075727 1.210201 + 50 H 5 Y 0.545446 -1.023574 1.461151 0.648687 0.991681 + 51 H 5 Z -0.784056 -1.023574 1.035531 0.450624 1.504593 + 52 H 5 X -0.125669 0.769866 -0.505776 -1.323241 -0.930672 + 53 H 5 Y -0.287270 0.769867 -1.575772 -0.415433 -0.466139 + 54 H 5 Z 0.412940 0.769866 -0.670983 0.005612 -1.556495 + + 46 47 48 49 50 + 2.7800 2.7800 2.7800 3.1179 3.2787 + A A A A A + 1 C 1 S 0.000000 0.000000 0.000000 2.990770 -1.769388 + 2 C 1 S 0.000001 0.000000 0.000000 -0.913981 1.971187 + 3 C 1 S 0.000004 0.000001 -0.000002 6.288407 9.951128 + 4 C 1 X 0.039267 -2.126869 -0.618203 0.000000 0.000000 + 5 C 1 Y 2.201166 -0.031263 0.247369 0.000000 0.000001 + 6 C 1 Z 0.246225 0.618660 -2.112799 0.000000 0.000000 + 7 C 1 X -0.076163 4.125366 1.199094 0.000000 0.000000 + 8 C 1 Y -4.269470 0.060639 -0.479807 0.000001 0.000000 + 9 C 1 Z -0.477589 -1.199978 4.098076 0.000000 0.000000 + 10 C 1 X -0.050561 2.738658 0.796029 0.000000 0.000000 + 11 C 1 Y -2.834322 0.040256 -0.318524 0.000001 0.000002 + 12 C 1 Z -0.317051 -0.796616 2.720543 0.000001 0.000001 + 13 C 1 XX 0.000000 0.000000 0.000000 -1.989650 2.492736 + 14 C 1 YY 0.000000 0.000000 0.000000 -1.989650 2.492736 + 15 C 1 ZZ 0.000000 0.000000 0.000000 -1.989650 2.492736 + 16 C 1 XY -0.064865 -0.162979 0.556595 0.000000 0.000000 + 17 C 1 XZ -0.579872 0.008236 -0.065167 0.000000 0.000000 + 18 C 1 YZ -0.010344 0.560301 0.162859 0.000000 0.000000 + 19 H 2 S 2.505696 -3.489007 2.188759 2.424063 2.990885 + 20 H 2 S -3.454261 4.809817 -3.017343 -1.647554 -5.330547 + 21 H 2 S -1.164883 1.622017 -1.017540 -2.148390 -2.269436 + 22 H 2 X -0.510254 0.588237 -0.484211 0.388154 -0.873323 + 23 H 2 Y -0.382705 0.711875 -0.433144 0.388155 -0.873322 + 24 H 2 Z 0.527098 -0.677220 0.323086 -0.388154 0.873323 + 25 H 2 X -0.159893 -0.294542 -0.302521 -0.418163 -0.164847 + 26 H 2 Y 0.379676 0.228482 -0.086490 -0.418164 -0.164848 + 27 H 2 Z 0.231146 -0.081879 -0.379087 0.418163 0.164847 + 28 H 3 S -2.407017 -1.855766 -3.742291 2.424065 2.990887 + 29 H 3 S 3.318225 2.558291 5.158987 -1.647555 -5.330548 + 30 H 3 S 1.119007 0.862734 1.739767 -2.148391 -2.269437 + 31 H 3 X 0.494702 0.254137 0.729060 0.388154 -0.873323 + 32 H 3 Y -0.362519 -0.381464 -0.750938 -0.388154 0.873323 + 33 H 3 Z 0.506912 0.416120 0.640881 0.388154 -0.873323 + 34 H 3 X 0.172810 -0.405149 0.099146 -0.418163 -0.164848 + 35 H 3 Y 0.386358 -0.133480 -0.191699 0.418163 0.164847 + 36 H 3 Z 0.224463 0.280084 -0.273878 -0.418163 -0.164848 + 37 H 4 S 3.025779 3.410444 -1.567128 2.424062 2.990884 + 38 H 4 S -4.171227 -4.701513 2.160386 -1.647552 -5.330545 + 39 H 4 S -1.406667 -1.585494 0.728548 -2.148390 -2.269436 + 40 H 4 X 0.621277 0.572166 -0.357049 -0.388155 0.873322 + 41 H 4 Y -0.489094 -0.699493 0.335170 0.388155 -0.873322 + 42 H 4 Z -0.604433 -0.661149 0.195924 0.388155 -0.873322 + 43 H 4 X 0.214715 -0.299862 -0.260422 0.418163 0.164847 + 44 H 4 Y 0.344454 -0.238768 0.167869 -0.418164 -0.164848 + 45 H 4 Z -0.143461 -0.076559 -0.421186 -0.418163 -0.164848 + 46 H 5 S -3.124451 1.934330 3.120658 2.424065 2.990889 + 47 H 5 S 4.307253 -2.666596 -4.302026 -1.647556 -5.330550 + 48 H 5 S 1.452538 -0.899258 -1.450773 -2.148391 -2.269438 + 49 H 5 X -0.636828 0.270209 0.601897 -0.388154 0.873323 + 50 H 5 Y -0.509279 0.393847 0.652964 -0.388154 0.873323 + 51 H 5 Z -0.624618 0.432191 0.513718 -0.388154 0.873323 + 52 H 5 X -0.201797 -0.399829 0.057047 0.418163 0.164848 + 53 H 5 Y 0.337771 0.123195 0.273078 0.418163 0.164847 + 54 H 5 Z -0.150144 0.285404 -0.315977 0.418163 0.164847 + + 51 52 53 54 + 3.7273 3.7273 3.7273 11.9879 + A A A A + 1 C 1 S 0.000000 0.000000 0.000000 11.477737 + 2 C 1 S 0.000001 0.000000 0.000000 -3.962913 + 3 C 1 S 0.000004 0.000001 0.000001 -4.393595 + 4 C 1 X 0.534742 -2.939638 -0.828513 0.000000 + 5 C 1 Y -2.981050 -0.685307 0.507491 0.000000 + 6 C 1 Z -0.664263 0.709039 -2.944464 0.000000 + 7 C 1 X -1.138464 6.258480 1.763902 0.000000 + 8 C 1 Y 6.346646 1.459017 -1.080447 0.000000 + 9 C 1 Z 1.414213 -1.509543 6.268756 0.000000 + 10 C 1 X 0.120740 -0.663742 -0.187070 0.000000 + 11 C 1 Y -0.673093 -0.154736 0.114587 0.000000 + 12 C 1 Z -0.149984 0.160094 -0.664831 0.000000 + 13 C 1 XX 0.000001 0.000000 0.000000 -2.369818 + 14 C 1 YY 0.000001 0.000000 0.000000 -2.369818 + 15 C 1 ZZ 0.000001 0.000000 0.000000 -2.369818 + 16 C 1 XY 0.384214 -0.410113 1.703097 0.000000 + 17 C 1 XZ 1.724258 0.396386 -0.293536 0.000000 + 18 C 1 YZ -0.309298 1.700305 0.479217 0.000000 + 19 H 2 S 1.334568 3.245703 -1.964685 0.086057 + 20 H 2 S 0.300553 0.730958 -0.442464 0.175625 + 21 H 2 S -1.280133 -3.113317 1.884549 -0.111393 + 22 H 2 X 0.766214 1.207955 -1.134368 0.078777 + 23 H 2 Y 0.222695 1.556460 -0.927830 0.078777 + 24 H 2 Z -0.786237 -1.552791 0.551090 -0.078777 + 25 H 2 X -0.434473 -0.619163 0.643871 -0.003050 + 26 H 2 Y -0.071722 -0.851759 0.506025 -0.003050 + 27 H 2 Z 0.447837 0.849311 -0.254584 0.003050 + 28 H 3 S -2.135498 1.157262 3.205626 0.086057 + 29 H 3 S -0.480933 0.260625 0.721933 0.175625 + 30 H 3 S 2.048395 -1.110060 -3.074875 -0.111393 + 31 H 3 X -1.011105 0.138284 1.513795 0.078777 + 32 H 3 Y 0.632922 -0.698678 -1.563423 -0.078777 + 33 H 3 Z -1.196464 0.702347 1.186682 0.078777 + 34 H 3 X 0.551761 -0.025603 -0.825593 -0.003050 + 35 H 3 Y -0.299356 0.399616 0.858716 0.003050 + 36 H 3 Z 0.675471 -0.402065 -0.607274 -0.003050 + 37 H 4 S 3.130427 -2.219255 1.204569 0.086057 + 38 H 4 S 0.704995 -0.499795 0.271279 0.175625 + 39 H 4 S -3.002742 2.128736 -1.155437 -0.111393 + 40 H 4 X -1.520693 0.682223 -0.745047 -0.078777 + 41 H 4 Y 1.142509 -1.242616 0.695419 0.078777 + 42 H 4 Z 1.500670 -1.027059 0.161768 0.078777 + 43 H 4 X 0.834531 -0.327434 0.427837 0.003050 + 44 H 4 Y -0.582127 0.701448 -0.394715 -0.003050 + 45 H 4 Z -0.821168 0.557582 -0.038550 -0.003050 + 46 H 5 S -2.329493 -2.183710 -2.445509 0.086057 + 47 H 5 S -0.524622 -0.491789 -0.550749 0.175625 + 48 H 5 S 2.234477 2.094640 2.345762 -0.111393 + 49 H 5 X 1.275803 0.664017 1.124474 -0.078777 + 50 H 5 Y 0.732283 1.012522 1.331011 -0.078777 + 51 H 5 Z 1.090444 1.228079 0.797361 -0.078777 + 52 H 5 X -0.717243 -0.317332 -0.609559 0.003050 + 53 H 5 Y -0.354492 -0.549928 -0.747405 0.003050 + 54 H 5 Z -0.593533 -0.693794 -0.391240 0.003050 + ...... END OF ROHF CALCULATION ...... + STEP CPU TIME = 33.40 TOTAL CPU TIME = 34.0 ( 0.6 MIN) + TOTAL WALL CLOCK TIME= 35.7 SECONDS, CPU UTILIZATION IS 95.16% + + ----------------- + ENERGY COMPONENTS + ----------------- + + WAVEFUNCTION NORMALIZATION = 1.0000000000 + + ONE ELECTRON ENERGY = -29.6375114155 + TWO ELECTRON ENERGY = 12.2381612475 + NUCLEAR REPULSION ENERGY = 9.5616134150 + ------------------ + TOTAL ENERGY = -7.8377367531 + + ELECTRON-ELECTRON POTENTIAL ENERGY = 12.2381612475 + NUCLEUS-ELECTRON POTENTIAL ENERGY = -36.1380895686 + NUCLEUS-NUCLEUS POTENTIAL ENERGY = 9.5616134150 + ------------------ + TOTAL POTENTIAL ENERGY = -14.3383149062 + TOTAL KINETIC ENERGY = 6.5005781531 + VIRIAL RATIO (V/T) = 2.2056984115 + + --------------------------------------- + MULLIKEN AND LOWDIN POPULATION ANALYSES + --------------------------------------- + + MULLIKEN ATOMIC POPULATION IN EACH MOLECULAR ORBITAL + + 1 2 3 4 + + 2.000000 2.000000 2.000000 2.000000 + + 1 1.291096 1.175118 1.175118 1.175118 + 2 0.177226 0.478421 0.074229 0.066012 + 3 0.177226 0.340368 0.064238 0.214056 + 4 0.177226 0.010267 0.059360 0.549034 + 5 0.177226 -0.004174 0.627056 -0.004220 + + ATOMIC SPIN POPULATION (ALPHA MINUS BETA) + ATOM MULL.POP. LOW.POP. + 1 C 0.000000 0.000000 + 2 H 0.000000 0.000000 + 3 H 0.000000 0.000000 + 4 H 0.000000 0.000000 + 5 H 0.000000 0.000000 + + ----- POPULATIONS IN EACH AO ----- + MULLIKEN LOWDIN + 1 C 1 S 1.59354 0.25455 + 2 C 1 S -0.08128 0.10764 + 3 C 1 S -0.06940 0.11276 + 4 C 1 X 1.22110 0.56389 + 5 C 1 Y 1.22110 0.56389 + 6 C 1 Z 1.22110 0.56389 + 7 C 1 X -0.04926 0.38901 + 8 C 1 Y -0.04926 0.38901 + 9 C 1 Z -0.04926 0.38901 + 10 C 1 X -0.01565 0.12966 + 11 C 1 Y -0.01565 0.12966 + 12 C 1 Z -0.01565 0.12966 + 13 C 1 XX -0.05059 0.10198 + 14 C 1 YY -0.05059 0.10198 + 15 C 1 ZZ -0.05059 0.10198 + 16 C 1 XY 0.01892 0.05215 + 17 C 1 XZ 0.01892 0.05215 + 18 C 1 YZ 0.01892 0.05215 + 19 H 2 S 1.38980 0.39391 + 20 H 2 S -0.21900 0.28985 + 21 H 2 S -0.38922 0.07928 + 22 H 2 X 0.02303 0.02300 + 23 H 2 Y 0.02303 0.02300 + 24 H 2 Z 0.02303 0.02300 + 25 H 2 X -0.01826 0.04057 + 26 H 2 Y -0.01826 0.04057 + 27 H 2 Z -0.01826 0.04057 + 28 H 3 S 1.38980 0.39391 + 29 H 3 S -0.21900 0.28985 + 30 H 3 S -0.38922 0.07928 + 31 H 3 X 0.02303 0.02300 + 32 H 3 Y 0.02303 0.02300 + 33 H 3 Z 0.02303 0.02300 + 34 H 3 X -0.01826 0.04057 + 35 H 3 Y -0.01826 0.04057 + 36 H 3 Z -0.01826 0.04057 + 37 H 4 S 1.38980 0.39391 + 38 H 4 S -0.21900 0.28985 + 39 H 4 S -0.38922 0.07928 + 40 H 4 X 0.02303 0.02300 + 41 H 4 Y 0.02303 0.02300 + 42 H 4 Z 0.02303 0.02300 + 43 H 4 X -0.01826 0.04057 + 44 H 4 Y -0.01826 0.04057 + 45 H 4 Z -0.01826 0.04057 + 46 H 5 S 1.38980 0.39391 + 47 H 5 S -0.21900 0.28985 + 48 H 5 S -0.38922 0.07928 + 49 H 5 X 0.02303 0.02300 + 50 H 5 Y 0.02303 0.02300 + 51 H 5 Z 0.02303 0.02300 + 52 H 5 X -0.01826 0.04057 + 53 H 5 Y -0.01826 0.04057 + 54 H 5 Z -0.01826 0.04057 + + ----- MULLIKEN ATOMIC OVERLAP POPULATIONS ----- + (OFF-DIAGONAL ELEMENTS NEED TO BE MULTIPLIED BY 2) + + 1 2 3 4 5 + + 1 3.2115085 + 2 0.4012353 0.4306145 + 3 0.4012352 -0.0119874 0.4306144 + 4 0.4012352 -0.0119873 -0.0119873 0.4306145 + 5 0.4012353 -0.0119874 -0.0119874 -0.0119874 0.4306144 + + TOTAL MULLIKEN AND LOWDIN ATOMIC POPULATIONS + ATOM MULL.POP. CHARGE LOW.POP. CHARGE + 1 C 4.816449 -0.816449 4.185009 -0.185009 + 2 H 0.795888 0.204112 0.953748 0.046252 + 3 H 0.795888 0.204112 0.953748 0.046252 + 4 H 0.795888 0.204112 0.953748 0.046252 + 5 H 0.795888 0.204112 0.953748 0.046252 + + ------------------------------- + BOND ORDER AND VALENCE ANALYSIS BOND ORDER THRESHOLD=0.050 + ------------------------------- + + BOND BOND BOND + ATOM PAIR DIST ORDER ATOM PAIR DIST ORDER ATOM PAIR DIST ORDER + 1 2 1.089 0.956 1 3 1.089 0.956 1 4 1.089 0.956 + 1 5 1.089 0.956 + + TOTAL BONDED FREE + ATOM VALENCE VALENCE VALENCE + 1 C 3.823 3.823 0.000 + 2 H 0.921 0.921 0.000 + 3 H 0.921 0.921 0.000 + 4 H 0.921 0.921 0.000 + 5 H 0.921 0.921 0.000 + + ----------------------------------------- + ATOMIC SPIN DENSITY AT THE NUCLEUS (A.U.) + ----------------------------------------- + SPIN DENS ALPHA DENS BETA DENS + 1 C 4.0 0.0000000 0.00847 0.00847 + 2 H 1.0 0.0000000 0.19912 0.19912 + 3 H 1.0 0.0000000 0.19912 0.19912 + 4 H 1.0 0.0000000 0.19912 0.19912 + 5 H 1.0 0.0000000 0.19912 0.19912 + + --------------------- + ELECTROSTATIC MOMENTS + --------------------- + + POINT 1 X Y Z (BOHR) CHARGE + 0.000000 0.000000 0.000000 0.00 (A.U.) + DX DY DZ /D/ (DEBYE) + 0.000000 0.000000 0.000000 0.000000 + ...... END OF PROPERTY EVALUATION ...... + STEP CPU TIME = 0.07 TOTAL CPU TIME = 34.1 ( 0.6 MIN) + TOTAL WALL CLOCK TIME= 35.8 SECONDS, CPU UTILIZATION IS 95.09% + 100000 WORDS OF DYNAMIC MEMORY USED + EXECUTION OF GAMESS TERMINATED NORMALLY Wed Nov 10 08:34:03 2004 + +DATA SERVER STATS: TOTAL DISTRIBUTED MEMORY USED (MEMDDI)= 0 MWORDS. +FIRST DATA SERVER'S MAXIMUM MEMORY= 0 WORDS, CPU= 0.0 SECONDS. + +ddikick: all processes have ended gracefully. +unset echo +----- accounting info ----- +Wed Nov 10 08:34:05 EST 2004 +Files used on the master node wartz were: +-rw-rw-r-- 1 lkwagner lkwagner 4206 Nov 10 08:33 /tmp/lkwagner/ch4.F05 +-rw-rw-r-- 1 lkwagner lkwagner 633864 Nov 10 08:34 /tmp/lkwagner/ch4.F10 +-rw-rw-r-- 1 lkwagner lkwagner 51962 Nov 10 08:34 /tmp/lkwagner/ch4.pun +34.084u 0.135s 0:38.00 90.0% 0+0k 0+0io 0pf+0w diff --git a/examples/ch4/ch4.pun b/examples/ch4/ch4.pun new file mode 100644 index 00000000..30bf16e9 --- /dev/null +++ b/examples/ch4/ch4.pun @@ -0,0 +1,719 @@ + $DATA + +C1 0 +C 6.0 0.0000000000 0.0000000000 0.0000000000 + S 5 + 1 8.1380377000 0.01179592 + 2 3.3151758000 -0.15198125 + 3 0.6682763100 0.27552348 + 4 0.2917676600 0.54864514 + 5 0.1141134900 0.30121511 + S 1 + 1 0.9059000000 1.00000000 + S 1 + 1 0.1285000000 1.00000000 + P 5 + 1 8.5281305000 0.02351240 + 2 2.9014509000 0.11648574 + 3 0.9431209000 0.32777384 + 4 0.3155855500 0.49260154 + 5 0.1039361100 0.27312428 + P 1 + 1 0.3827000000 1.00000000 + P 1 + 1 0.1209000000 1.00000000 + D 1 + 1 0.5500000000 1.00000000 + +H 1.0 -0.6286475137 -0.6286475137 0.6286475139 + S 7 + 1 25.9673310000 0.00354063 + 2 9.1676598000 0.01670088 + 3 2.8460805000 0.06082265 + 4 1.0048708000 0.17233069 + 5 0.3850282100 0.35369626 + 6 0.1600576000 0.38958526 + 7 0.0691012290 0.14673564 + S 1 + 1 0.3258000000 1.00000000 + S 1 + 1 0.1027000000 1.00000000 + P 4 + 1 18.1264860000 0.00205819 + 2 4.4559865000 0.01503440 + 3 1.1582862000 0.15115325 + 4 0.3505376000 0.89012525 + P 1 + 1 0.1800000000 1.00000000 + +H 1.0 -0.6286475137 0.6286475137 -0.6286475139 + S 7 + 1 25.9673310000 0.00354063 + 2 9.1676598000 0.01670088 + 3 2.8460805000 0.06082265 + 4 1.0048708000 0.17233069 + 5 0.3850282100 0.35369626 + 6 0.1600576000 0.38958526 + 7 0.0691012290 0.14673564 + S 1 + 1 0.3258000000 1.00000000 + S 1 + 1 0.1027000000 1.00000000 + P 4 + 1 18.1264860000 0.00205819 + 2 4.4559865000 0.01503440 + 3 1.1582862000 0.15115325 + 4 0.3505376000 0.89012525 + P 1 + 1 0.1800000000 1.00000000 + +H 1.0 0.6286475137 -0.6286475137 -0.6286475139 + S 7 + 1 25.9673310000 0.00354063 + 2 9.1676598000 0.01670088 + 3 2.8460805000 0.06082265 + 4 1.0048708000 0.17233069 + 5 0.3850282100 0.35369626 + 6 0.1600576000 0.38958526 + 7 0.0691012290 0.14673564 + S 1 + 1 0.3258000000 1.00000000 + S 1 + 1 0.1027000000 1.00000000 + P 4 + 1 18.1264860000 0.00205819 + 2 4.4559865000 0.01503440 + 3 1.1582862000 0.15115325 + 4 0.3505376000 0.89012525 + P 1 + 1 0.1800000000 1.00000000 + +H 1.0 0.6286475137 0.6286475137 0.6286475139 + S 7 + 1 25.9673310000 0.00354063 + 2 9.1676598000 0.01670088 + 3 2.8460805000 0.06082265 + 4 1.0048708000 0.17233069 + 5 0.3850282100 0.35369626 + 6 0.1600576000 0.38958526 + 7 0.0691012290 0.14673564 + S 1 + 1 0.3258000000 1.00000000 + S 1 + 1 0.1027000000 1.00000000 + P 4 + 1 18.1264860000 0.00205819 + 2 4.4559865000 0.01503440 + 3 1.1582862000 0.15115325 + 4 0.3505376000 0.89012525 + P 1 + 1 0.1800000000 1.00000000 + + $END +--- OPEN SHELL ORBITALS --- GENERATED AT Wed Nov 10 08:34:02 2004 + +E(ROHF)= -7.8377367531, E(NUC)= 9.5616134150, 9 ITERS + $VEC + 1 1 8.15115071E-01-6.05499516E-02-3.70970418E-02-2.00380222E-09 1.52944814E-09 + 1 2 2.84365500E-11-8.35686504E-11-6.74192200E-09-2.85481295E-09 1.12519766E-09 + 1 3-1.38214897E-08-3.13608915E-09-3.59965905E-02-3.59965894E-02-3.59965897E-02 + 1 4-5.86003775E-10-3.25999129E-09 2.36349446E-10 3.48310588E-01-5.35064507E-02 + 1 5-1.47743259E-01 2.43179001E-02 2.43178983E-02-2.43178979E-02-1.75346558E-02 + 1 6-1.75346513E-02 1.75346571E-02 3.48310585E-01-5.35064387E-02-1.47743262E-01 + 1 7 2.43179008E-02-2.43179011E-02 2.43179009E-02-1.75346574E-02 1.75346616E-02 + 1 8-1.75346559E-02 3.48310585E-01-5.35064559E-02-1.47743258E-01-2.43178972E-02 + 1 9 2.43178961E-02 2.43178964E-02 1.75346543E-02-1.75346509E-02-1.75346570E-02 + 1 10 3.48310582E-01-5.35064337E-02-1.47743256E-01-2.43179010E-02-2.43179024E-02 + 1 11-2.43179016E-02 1.75346545E-02 1.75346599E-02 1.75346554E-02 + 2 1-1.59916140E-09-8.91466659E-10 6.12097223E-09-7.70770488E-02-4.10771655E-01 + 2 2 5.06750073E-01 3.20071456E-03 1.70577832E-02-2.10434095E-02 1.17224624E-03 + 2 3 6.24734573E-03-7.70707147E-03-7.58444301E-10-1.17559574E-09-8.17814537E-10 + 2 4 2.95237390E-02-2.39319478E-02-4.49058323E-03 6.35994675E-01-9.68932818E-02 + 2 5-2.08398063E-01 2.70047172E-02 1.63384900E-02-1.32706307E-02-3.09543193E-02 + 2 6-2.09677154E-02 1.80953357E-02-5.37421069E-01 8.18756660E-02 1.76098188E-01 + 2 7-2.73647601E-02 1.17711441E-02-8.70328622E-03 3.04125820E-02-1.58125448E-02 + 2 8 1.29401628E-02-1.10660053E-01 1.68589667E-02 3.62602737E-02 2.66367025E-03 + 2 9-1.82572879E-02 1.10704164E-02-3.48054672E-03 1.80805860E-02-9.37844269E-03 + 2 10 1.20864476E-02-1.84135193E-03-3.96039838E-03-3.02371489E-03-1.36899443E-02 + 2 11 1.56377614E-02 2.93880930E-03 1.29254196E-02-1.45336120E-02 + 3 1 3.93280374E-09-6.00686034E-10 2.05704121E-08 3.88071422E-01 3.81283389E-01 + 3 2 3.68094294E-01-1.61151326E-02-1.58332455E-02-1.52855604E-02-5.90210582E-03 + 3 3-5.79885485E-03-5.59828354E-03 4.70306613E-10-8.73535202E-10-1.73226343E-09 + 3 4 2.14455211E-02 2.22139335E-02 2.26094086E-02-2.56585429E-01 3.90905925E-02 + 3 5 8.40760222E-02 5.15609842E-04 2.98636606E-04 2.36545041E-02 1.80485205E-03 + 3 6 2.00800155E-03-2.44349175E-02-2.39717928E-01 3.65208265E-02 7.85490010E-02 + 3 7 1.29715071E-03 2.32945396E-02 6.58601231E-04 9.22723508E-04-2.39475061E-02 + 3 8 1.52058987E-03-2.31036742E-01 3.51982677E-02 7.57044176E-02 2.31092721E-02 + 3 9 1.48241821E-03 1.06084062E-03-2.36966457E-02 6.71863462E-04 1.06658508E-03 + 3 10 7.27340099E-01-1.10809683E-01-2.38329473E-01-2.12965128E-02-2.15134856E-02 + 3 11-2.19350627E-02 2.64242301E-02 2.66273691E-02 2.70220922E-02 + 4 1 1.93000880E-09 1.08289716E-10-1.29996067E-08 5.24337259E-01-3.42577703E-01 + 4 2-1.97941447E-01-2.17737350E-02 1.42259461E-02 8.21975596E-03-7.97454506E-03 + 4 3 5.21019003E-03 3.01044907E-03-1.42601996E-09-3.47081502E-10 4.36630022E-10 + 4 4-1.15322565E-02-1.99589034E-02 3.05483862E-02-2.42799225E-01 3.69902670E-02 + 4 5 7.95586691E-02 5.50998906E-03-2.22001178E-02 4.92294063E-03-2.99421288E-03 + 4 6 2.29502894E-02-6.77396152E-03-4.27774099E-01 6.51710473E-02 1.40169880E-01 + 4 7-3.06070272E-03 8.87047149E-03-2.61476514E-02 6.67954205E-03-1.21191287E-02 + 4 8 2.82954588E-02 6.80920817E-01-1.03737749E-01-2.23119131E-01-1.47900961E-02 + 4 9 2.05998672E-02 2.52230275E-02 1.99185261E-02-2.53581119E-02-2.96867011E-02 + 4 10-1.03474875E-02 1.57643945E-03 3.39059609E-03 1.72393817E-02-1.04707256E-02 + 4 11-5.84756739E-03-1.62331953E-02 9.71130740E-03 5.38272363E-03 + 5 1 3.75985081E-01-1.17963112E-01 6.36569555E+00-3.62998560E-09 6.88939325E-09 + 5 2 2.01976254E-09 1.86711880E-09-4.39774823E-08-1.91050935E-08 1.19464764E-09 + 5 3-3.37253957E-08-2.62030758E-08-9.13038204E-02-9.13038199E-02-9.13038206E-02 + 5 4-6.70124942E-09-1.59198937E-08 1.04652486E-09 7.63078389E-02-2.73864049E-01 + 5 5-1.73417509E+00 2.78327915E-02 2.78327927E-02-2.78327920E-02-2.58612560E-01 + 5 6-2.58612546E-01 2.58612570E-01 7.63078218E-02-2.73863999E-01-1.73417514E+00 + 5 7 2.78328059E-02-2.78328063E-02 2.78328049E-02-2.58612571E-01 2.58612586E-01 + 5 8-2.58612560E-01 7.63078562E-02-2.73864101E-01-1.73417506E+00-2.78327815E-02 + 5 9 2.78327819E-02 2.78327810E-02 2.58612558E-01-2.58612544E-01-2.58612552E-01 + 5 10 7.63078105E-02-2.73863970E-01-1.73417512E+00-2.78328140E-02-2.78328144E-02 + 5 11-2.78328134E-02 2.58612568E-01 2.58612585E-01 2.58612577E-01 + 6 1 6.74729442E-10 4.01161218E-10 4.91582050E-08 2.52332119E-01-4.33102624E-02 + 6 2 2.46103123E-01-5.51941502E-02 9.47351622E-03-5.38316385E-02 2.37642344E+00 + 6 3-4.07889109E-01 2.31775978E+00 4.33860057E-10 4.05339083E-10 4.47344709E-10 + 6 4-1.46378305E-02 2.57602608E-03-1.50083234E-02 2.20936514E-03-1.89032476E-03 + 6 5-3.09897805E-01 5.21850036E-02 6.75679700E-04 3.46566130E-02-2.94406078E-01 + 6 6-2.63723558E-03-1.97498612E-01-3.22780209E-02 2.76168050E-02 4.52750794E+00 + 6 7-7.61509731E-02 1.12568534E-01-7.72362423E-02 4.13961889E-01-6.20245117E-01 + 6 8 4.20109270E-01 2.95162562E-03-2.52538534E-03-4.14012448E-01 3.29797252E-02 + 6 9 3.43783522E-03 5.38618905E-02-1.88399910E-01-1.78833157E-02-3.03504780E-01 + 6 10 2.71170404E-02-2.32011161E-02-3.80359773E+00-5.69456952E-02-1.08455018E-01 + 6 11-5.80309627E-02 3.07955735E-01 5.99724572E-01 3.14103110E-01 + 7 1-5.72682991E-09 3.43291782E-09-1.87516210E-08 1.34718457E-01 3.18147933E-01 + 7 2-8.21392409E-02-2.94677894E-02-6.95904454E-02 1.79668170E-02 1.26875686E+00 + 7 3 2.99626622E+00-7.73574205E-01 3.48605413E-09 3.57016194E-09 3.32635400E-09 + 7 4 4.88551358E-03-1.89229457E-02-8.01284369E-03-3.18764459E-02 2.72732188E-02 + 7 5 4.47118108E+00-9.51482769E-02-6.31896397E-02 1.04309075E-01 5.21786306E-01 + 7 6 3.40760155E-01-5.73676631E-01 1.58229909E-02-1.35380211E-02-2.21942674E+00 + 7 7 8.23530021E-02-3.45077761E-03 4.45702142E-02-4.57956245E-01 1.10233611E-02 + 7 8-2.43939837E-01-6.03501800E-03 5.16349974E-03 8.46508800E-01 4.59296049E-02 + 7 9 3.29726189E-02-3.67688078E-02-2.56912309E-01-1.90020576E-01 2.05021990E-01 + 7 10 2.20884900E-02-1.88987331E-02-3.09826311E+00-5.87248735E-02-2.67662331E-02 + 7 11-9.65076613E-02 3.20742370E-01 1.39716208E-01 5.34758776E-01 + 8 1-6.03410526E-09 2.24305715E-09-5.93136324E-08-2.10460124E-01 1.51723891E-01 + 8 2 2.42487983E-01 4.60352266E-02-3.31874939E-02-5.30408764E-02-1.98207972E+00 + 8 3 1.42891129E+00 2.28371297E+00 2.57503479E-09 2.18045390E-09 2.06808346E-09 + 8 4-1.44228077E-02-9.02430155E-03 1.25178404E-02 1.79474011E-02-1.53556562E-02 + 8 5-2.51740903E+00 3.01185056E-02 9.32212775E-02-2.45383411E-02-1.60935416E-01 + 8 6-5.18374059E-01 1.29327192E-01 7.13167195E-03-6.10180109E-03-1.00033081E+00 + 8 7-1.01294546E-02-1.04070263E-04 6.87870076E-02 6.12187042E-02-3.25203719E-03 + 8 8-3.85794830E-01-3.60272779E-02 3.08246489E-02 5.05340102E+00 9.73981681E-02 + 8 9-1.07631693E-01-9.18180025E-02-5.32294695E-01 5.90261360E-01 5.00686466E-01 + 8 10 1.09482095E-02-9.36720152E-03-1.53566111E+00-7.74091110E-02-1.43063392E-02 + 8 11 1.50735108E-03 4.32577968E-01 7.51393262E-02-1.44355669E-02 + 9 1 1.15770041E-08-2.35207174E-09-3.38795869E-07 7.43490933E-03 3.93881203E-02 + 9 2 1.56594332E-02-9.12184124E-03-4.83250081E-02-1.92124689E-02-6.10131440E-02 + 9 3-3.23230997E-01-1.28506158E-01-3.96501034E-09-3.01933047E-09-2.60064588E-09 + 9 4-4.39010312E-03-1.10423919E-02-2.08436618E-03 1.40551967E-01 2.02463715E-01 + 9 5-4.94268691E-01 3.30393140E-02-4.50790740E-02-8.94997560E-02-1.51300875E-01 + 9 6 2.21725904E-01 4.20907796E-01-7.34871554E-02-1.05857438E-01 2.58426837E-01 + 9 7-4.49547828E-02-6.95169488E-02-6.50618819E-02 2.11284607E-01 3.35334735E-01 + 9 8 3.07298978E-01 2.14739388E-01 3.09329839E-01-7.55158075E-01-9.64259180E-02 + 9 9-1.80458073E-02 3.99654802E-02 4.50567978E-01 9.60513269E-02-1.80961077E-01 + 9 10-2.81804285E-01-4.05935924E-01 9.91000192E-01 8.45104544E-02 6.39206131E-03 + 9 11 6.44033499E-02-3.90584360E-01-1.75575533E-02-2.94569971E-01 +10 1-4.59972640E-09 1.83650111E-09 7.42678504E-08 4.22903589E-02-7.96519778E-03 +10 2-4.41027831E-05-5.18857889E-02 9.77244671E-03 5.41095876E-05-3.47047723E-01 +10 3 6.53648682E-02 3.61904546E-04-5.49872353E-10 2.72567697E-09 2.28973500E-09 +10 4 1.23629794E-05 2.23302985E-03-1.18560462E-02 1.55009961E-01 2.23290086E-01 +10 5-5.45111989E-01-4.69060288E-02 7.59574297E-02-5.63764986E-02 2.31114997E-01 +10 6-3.55576109E-01 2.62074283E-01 2.26460346E-01 3.26213560E-01-7.96376260E-01 +10 7-2.08701055E-02-6.30471395E-02 8.26280675E-02 1.10076987E-01 2.90640220E-01 +10 8-3.84142039E-01-2.26858160E-01-3.26786666E-01 7.97775239E-01-2.07251330E-02 +10 9-6.31921010E-02-8.25573843E-02 1.09403039E-01 2.91314114E-01 3.83786192E-01 +10 10-1.54612118E-01-2.22717020E-01 5.43712949E-01-4.70509879E-02 7.58124579E-02 +10 11 5.64471735E-02 2.31788903E-01-3.54902153E-01-2.62430075E-01 +11 1 5.23923867E-10-9.63138448E-10-2.51286509E-08-2.85805031E-03-1.53964733E-02 +11 2 4.00836803E-02 3.50652200E-03 1.88898285E-02-4.91784499E-02 2.34540580E-02 +11 3 1.26348171E-01-3.28939075E-01-4.80861765E-10-9.38566577E-10-1.76104119E-09 +11 4-1.12374154E-02 4.31637649E-03 8.01248335E-04-2.63113053E-01-3.79011373E-01 +11 5 9.25270122E-01-8.88888830E-02-5.82352901E-02-2.11932422E-03 4.12352032E-01 +11 6 2.65976611E-01 2.22255873E-02 2.37332647E-01 3.41874992E-01-8.34610083E-01 +11 7 9.34693056E-02-4.88411242E-02-1.15134898E-02-4.35410357E-01 2.22304223E-01 +11 8 6.58979793E-02 1.24232777E-01 1.78955866E-01-4.36880161E-01-3.82820749E-02 +11 9 8.29102548E-02-5.27261357E-02 1.77086793E-01-3.90192915E-01 2.57490836E-01 +11 10-9.84523792E-02-1.41819460E-01 3.46220139E-01 4.28624900E-02 7.35160872E-02 +11 11-6.21203005E-02-2.00145103E-01-3.46520536E-01 3.01163214E-01 +12 1-1.03757206E-09 1.24290435E-09 2.53757898E-09 1.19309885E-11 1.87205999E-09 +12 2 5.59544033E-10 1.56067864E-09-3.19426366E-09-1.25712192E-09 4.05483783E-08 +12 3-1.25198084E-09 3.05257365E-09-4.57536054E-02 4.60763259E-02-3.22717003E-04 +12 4-3.78636117E-10-7.56962522E-10 9.60296721E-10-1.01504159E-08-1.72943763E-08 +12 5 4.84627434E-08-8.38148614E-02 8.44060373E-02 5.91184073E-04 4.16604307E-01 +12 6-4.19542772E-01-2.93849396E-03-4.50400914E-09-3.90487638E-09 3.23899040E-08 +12 7-8.38148588E-02-8.44060371E-02-5.91180564E-04 4.16604300E-01 4.19542770E-01 +12 8 2.93848411E-03 5.73880836E-09-5.06747266E-09-2.39689192E-08 8.38148650E-02 +12 9 8.44060413E-02-5.91178926E-04-4.16604322E-01-4.19542795E-01 2.93846428E-03 +12 10 1.17193186E-08 1.41754151E-08-5.58104448E-08 8.38148614E-02-8.44060432E-02 +12 11 5.91174591E-04-4.16604314E-01 4.19542799E-01-2.93845193E-03 +13 1 1.10600588E-10-2.07418866E-11-5.69646311E-08-5.74013540E-10 9.27752121E-11 +13 2 8.72016300E-11 1.16506878E-09 2.66571905E-09-1.73342557E-09 1.48926987E-08 +13 3 2.90111764E-08-1.07132562E-08-2.67885003E-02-2.62295361E-02 5.30180351E-02 +13 4-5.13420355E-10 9.81133777E-10 5.33546720E-10-1.02940309E-08 9.67874117E-09 +13 5 4.88614143E-08-4.90731655E-02-4.80492153E-02-9.71223826E-02 2.43919670E-01 +13 6 2.38830094E-01 4.82749740E-01-2.59790049E-09-1.44089240E-09 4.79433623E-09 +13 7-4.90731664E-02 4.80492163E-02 9.71223819E-02 2.43919662E-01-2.38830092E-01 +13 8-4.82749748E-01-1.45792222E-09 1.47595278E-08 6.27185598E-09 4.90731671E-02 +13 9-4.80492125E-02 9.71223831E-02-2.43919674E-01 2.38830073E-01-4.82749742E-01 +13 10 1.35663710E-09 7.84900339E-09-1.35708664E-08 4.90731685E-02 4.80492139E-02 +13 11-9.71223848E-02-2.43919675E-01-2.38830080E-01 4.82749760E-01 +14 1-5.45218454E-01-5.43523722E-02 1.11799540E+01 1.90463983E-09 2.04902283E-08 +14 2 1.03299608E-08 6.22883869E-09-8.81455590E-08-3.85881040E-08 2.69319850E-08 +14 3-2.81537150E-07-1.49404759E-07-4.28281053E-02-4.28281046E-02-4.28281056E-02 +14 4-1.44981219E-08-3.25150519E-08 1.84165406E-09 2.97949030E-01-4.92173584E-01 +14 5-2.41102686E+00 3.43263418E-02 3.43263370E-02-3.43263434E-02-7.54679460E-01 +14 6-7.54679367E-01 7.54679488E-01 2.97948999E-01-4.92173484E-01-2.41102680E+00 +14 7 3.43263663E-02-3.43263710E-02 3.43263600E-02-7.54679448E-01 7.54679517E-01 +14 8-7.54679396E-01 2.97949068E-01-4.92173694E-01-2.41102696E+00-3.43263228E-02 +14 9 3.43263201E-02 3.43263224E-02 7.54679469E-01-7.54679398E-01-7.54679444E-01 +14 10 2.97948976E-01-4.92173416E-01-2.41102670E+00-3.43263786E-02-3.43263886E-02 +14 11-3.43263818E-02 7.54679400E-01 7.54679500E-01 7.54679454E-01 +15 1-6.14508149E-09 3.43660291E-09-4.90819247E-08-1.34893958E-01-6.46059657E-01 +15 2-5.35756278E-02-1.24104310E-02-5.94383613E-02-4.92902767E-03 1.18335022E+00 +15 3 5.66752482E+00 4.69989401E-01 2.57485048E-09 1.76899950E-09 2.72043806E-09 +15 4 4.11447122E-03 4.96157110E-02 1.03595052E-02-1.85935648E-01 3.89909374E-01 +15 5 4.11271553E+00-3.48947976E-02-5.70244587E-02 2.67354699E-02 8.87511612E-01 +15 6 4.91278703E-01-1.03360484E+00 1.16971234E-01-2.45290127E-01-2.58729001E+00 +15 7 1.24383905E-02-4.62478564E-02 1.59588694E-02-7.28673755E-01 1.23313275E-01 +15 8-6.65639410E-01-1.44361739E-01 3.02728371E-01 3.19314093E+00 1.67185157E-02 +15 9-5.05279844E-02-2.48778457E-02-8.74818014E-01 2.69457544E-01 7.28724794E-01 +15 10 2.13326119E-01-4.47347515E-01-4.71856644E+00-3.91749165E-02-6.13045744E-02 +15 11-3.56544386E-02 1.03365587E+00 6.37422967E-01 1.09669021E+00 +16 1-1.34265695E-09 1.03694305E-09 8.15279352E-08-6.16856930E-01 1.44746922E-01 +16 2-1.92342547E-01-5.67517445E-02 1.33169134E-02-1.76958072E-02 5.41134526E+00 +16 3-1.26978486E+00 1.68731491E+00 1.82477767E-09 9.98454024E-10 9.66423054E-10 +16 4 1.47713978E-02-1.11161893E-02 4.73729926E-02-7.15154082E-02 1.49968680E-01 +16 5 1.58185153E+00-3.78805420E-02-4.90877204E-03 2.84823363E-03-9.65833816E-02 +16 6 4.93777958E-01-5.30671935E-01-2.43852037E-01 5.11360712E-01 5.39377079E+00 +16 7-6.48104246E-02 4.43715794E-02-4.64321207E-02 8.22933479E-01-1.18889208E+00 +16 8 1.15199811E+00 1.45517136E-01-3.05151232E-01-3.21869765E+00-4.94442863E-02 +16 9 2.90054386E-02 1.44119764E-02 2.98259096E-01-6.64217690E-01-9.25514405E-01 +16 10 1.69850326E-01-3.56178207E-01-3.75692472E+00-5.32466832E-02-2.02749151E-02 +16 11-3.48683801E-02 4.28091027E-01 1.01845237E+00 7.57155665E-01 +17 1-2.75823055E-09-4.89402133E-10-3.84820289E-08 1.99376396E-01 1.07264349E-02 +17 2-6.31342848E-01 1.83429081E-02 9.86856604E-04-5.80844952E-02-1.74901908E+00 +17 3-9.40970841E-02 5.53842221E+00-1.40860486E-09-1.17000758E-09-1.11528654E-09 +17 4 4.84854653E-02-8.23757957E-04-1.53115896E-02 2.15094099E-01-4.51054948E-01 +17 5-4.75767315E+00 4.22428282E-02 3.40756915E-02-6.09437584E-02-9.93105334E-01 +17 6-1.13933838E+00 6.58264239E-01-1.13163126E-01 2.37304457E-01 2.50305887E+00 +17 7-9.05174602E-03 1.81476303E-02-4.50156921E-02 7.58339313E-01-5.95476957E-01 +17 8 1.14402800E-01-2.09610238E-01 4.39555246E-01 4.63637506E+00 4.13858928E-02 +17 9-3.22900060E-02-6.00868239E-02-9.63845623E-01 1.12670797E+00 6.29004535E-01 +17 10 1.07679243E-01-2.25804672E-01-2.38176077E+00-8.19481579E-03-1.63619467E-02 +17 11-4.41587582E-02 7.29079606E-01 5.82846544E-01 8.51430948E-02 +18 1 3.04240366E-10-2.44142363E-10-1.53583715E-08-1.49602367E-09-4.34098920E-09 +18 2 1.04834607E-09 1.61913276E-09 3.65855772E-09-3.76306859E-09-1.49631914E-08 +18 3 1.18424231E-08-2.34514382E-08-2.77641953E-10-5.82242019E-10-3.83334098E-10 +18 4-1.28890019E-09 1.49866952E-09 6.78061029E-10-5.39281453E-09 1.40348419E-08 +18 5 1.07915097E-08 1.27428269E-01-3.44522665E-03 1.23983036E-01-8.36627180E-01 +18 6 2.26195662E-02-8.14007619E-01 1.75902693E-09-6.79476042E-09-1.47015175E-08 +18 7-1.27428269E-01-1.67512943E-01-4.00846766E-02 8.36627186E-01 1.09980215E+00 +18 8 2.63174963E-01-4.08933621E-10 2.32599453E-09 8.77065909E-09 4.35299034E-02 +18 9 3.44522789E-03 4.00846756E-02-2.85794523E-01-2.26195618E-02-2.63174954E-01 +18 10 5.72095877E-10 7.09278223E-09 3.95489072E-09-4.35299044E-02 1.67512943E-01 +18 11-1.23983040E-01 2.85794528E-01-1.09980215E+00 8.14007629E-01 +19 1-2.20542551E-09 7.98452682E-10 9.55936025E-09-9.29278928E-10-2.65208209E-10 +19 2-2.94310551E-09-3.83755036E-09-2.36129289E-09 2.21366903E-09-2.23677535E-08 +19 3-1.28582404E-08-6.44327544E-09 2.72738878E-10 8.91190780E-10 1.29334862E-09 +19 4 7.25574509E-10-7.93762207E-10-1.19330549E-09 4.82266742E-09-1.34560448E-08 +19 5-8.75439637E-09-8.03251300E-02-1.66335826E-02-9.69587065E-02 5.27372673E-01 +19 6 1.09207367E-01 6.36580040E-01-6.91330091E-10-5.66733065E-09 3.89485655E-09 +19 7 8.03251261E-02-5.87717765E-02-1.39096904E-01-5.27372657E-01 3.85864669E-01 +19 8 9.13237336E-01-6.41171033E-10 1.37654013E-09 2.28206894E-10 1.55730483E-01 +19 9 1.66335800E-02 1.39096904E-01-1.02244469E+00-1.09207360E-01-9.13237330E-01 +19 10 1.85774556E-10 8.02501768E-09-1.74815011E-09-1.55730485E-01 5.87717759E-02 +19 11 9.69587063E-02 1.02244471E+00-3.85864663E-01-6.36580026E-01 +20 1 3.35954413E-10-2.56771558E-10-2.84985669E-09-2.65245133E-09-1.80490678E-09 +20 2 2.69648431E-09-7.95552955E-09 9.55853597E-10 7.72533606E-09-2.59442933E-08 +20 3-1.33562222E-08 2.10793196E-08-4.50773442E-10-1.20070300E-10-5.99729028E-10 +20 4 2.27172105E-09 3.02860999E-10-2.29391767E-09 2.99889459E-09-2.26806156E-08 +20 5 1.29612371E-08 9.43495274E-02-1.76927609E-01-8.25780715E-02-6.19449534E-01 +20 6 1.16161389E+00 5.42164327E-01 7.70089209E-10 3.42911696E-09-3.36936432E-09 +20 7-9.43495319E-02 8.78723931E-03 1.03136772E-01 6.19449559E-01-5.76924059E-02 +20 8-6.77141973E-01-5.75535282E-09 2.48242183E-08-1.48124325E-08 7.37908302E-02 +20 9 1.76927610E-01-1.03136767E-01-4.84471914E-01-1.16161389E+00 6.77141947E-01 +20 10-5.85266525E-10 4.21261047E-09 5.26195497E-09-7.37908364E-02-8.78724144E-03 +20 11 8.25780769E-02 4.84471941E-01 5.76924178E-02-5.42164357E-01 +21 1-4.47973696E-01-6.95249467E-01 5.84061915E+00 6.30626376E-09 9.56820601E-09 +21 2 9.78599850E-10 5.28196099E-09-1.32581494E-07-6.33524843E-08 7.21838604E-08 +21 3-6.15085118E-07-3.30662798E-07-4.93169834E-01-4.93169833E-01-4.93169835E-01 +21 4-2.60995465E-08-5.47305059E-08 5.21792477E-10 3.21986553E-02-8.26559101E-01 +21 5-7.50354565E-01-1.06475251E-01-1.06475268E-01 1.06475246E-01 1.56574226E-01 +21 6 1.56574469E-01-1.56574122E-01 3.21986257E-02-8.26558925E-01-7.50354554E-01 +21 7-1.06475208E-01 1.06475193E-01-1.06475227E-01 1.56574225E-01-1.56574012E-01 +21 8 1.56574367E-01 3.21987033E-02-8.26559333E-01-7.50354658E-01 1.06475285E-01 +21 9-1.06475296E-01-1.06475292E-01-1.56574224E-01 1.56574430E-01 1.56574327E-01 +21 10 3.21985981E-02-8.26558770E-01-7.50354586E-01 1.06475180E-01 1.06475154E-01 +21 11 1.06475170E-01-1.56574248E-01-1.56574000E-01-1.56574109E-01 +22 1-9.11091216E-08-1.07954750E-07-5.88038907E-07 2.83668758E-05-7.09940232E-02 +22 2-7.93065878E-03 4.93811994E-05-1.23542308E-01-1.38007617E-02-2.28063403E-03 +22 3 5.70607442E+00 6.37418695E-01-8.53821532E-08-8.62231641E-08-8.49686674E-08 +22 4 1.95235473E-02 1.74771788E-01-6.98481141E-05-7.70725427E-02 7.48864908E-01 +22 5-1.98842706E-01 8.41764531E-02 2.17080392E-01-6.93889482E-02-8.82814631E-02 +22 6-2.25126156E+00-1.52381747E-01 7.71418381E-02-7.49538791E-01 1.99021904E-01 +22 7-8.43585024E-02 2.17156241E-01-6.94647845E-02 9.00901809E-02-2.25134197E+00 +22 8-1.52301353E-01-9.65354576E-02 9.37973792E-01-2.49055915E-01-1.05552921E-01 +22 9 2.38350656E-01 1.20340426E-01 1.12521484E-01-2.27377327E+00-3.53184694E-01 +22 10 9.64659849E-02-9.37299274E-01 2.48877207E-01 1.05370918E-01 2.38274871E-01 +22 11 1.20264627E-01-1.10713110E-01-2.27369323E+00-3.53104638E-01 +23 1 1.97765411E-08 2.10828226E-08 1.66349605E-07-6.68285455E-02-2.82834605E-03 +23 2 2.50798462E-02-1.16293814E-01-4.92184740E-03 4.36435202E-02 5.37127461E+00 +23 3 2.27325735E-01-2.01576758E+00 1.64410522E-08 1.71718746E-08 1.73431982E-08 +23 4-6.17410769E-02 6.96277205E-03 1.64517148E-01-1.15833896E-01 1.12548521E+00 +23 5-2.98845612E-01 2.51646353E-01 1.31883125E-01-1.73522264E-01-2.16923461E+00 +23 6-2.20116270E-01 8.97783337E-01-4.75875886E-02 4.62378712E-01-1.22773713E-01 +23 7 1.77062597E-01-4.67140130E-02 5.07486368E-03-2.09029763E+00-3.10948602E-02 +23 8 7.08761929E-01 1.08917505E-01-1.05828293E+00 2.81001601E-01 2.44087681E-01 +23 9-1.13739097E-01-1.65963590E-01-2.16123473E+00 3.98422304E-02 8.89783457E-01 +23 10 5.45040160E-02-5.29581158E-01 1.40617599E-01 1.84621269E-01 6.48580281E-02 +23 11 1.26335221E-02-2.09829744E+00-1.49179102E-01 7.00762128E-01 +24 1-2.73964820E-08-3.86409244E-08-1.07174418E-07-2.52388313E-02 7.40923024E-03 +24 2-6.64165754E-02-4.39202022E-02 1.28934188E-02-1.15577049E-01 2.02854369E+00 +24 3-5.95508762E-01 5.33816086E+00-3.07349236E-08-3.09216466E-08-3.10852364E-08 +24 4 1.63502880E-01-1.82398776E-02 6.21323994E-02 5.94068606E-02-5.77219370E-01 +24 5 1.53266958E-01-1.76942632E-02-7.87883698E-02 1.89208462E-01-6.99932208E-01 +24 6 2.94360105E-01-2.09142119E+00-1.21125499E-01 1.17690040E+00-3.12498010E-01 +24 7 1.79602705E-01-1.46238287E-01 2.56658380E-01-9.08745085E-01 3.65746939E-01 +24 8-2.16280801E+00-4.12884905E-02 4.01174316E-01-1.06522283E-01 2.10665381E-03 +24 9 3.12577646E-02 1.69407544E-01-7.20888920E-01 1.77890772E-01-2.07046448E+00 +24 10 1.03007072E-01-1.00085518E+00 2.65753441E-01 1.59801791E-01 9.87076870E-02 +24 11 2.36857474E-01-8.87788462E-01 1.06503847E-01-2.14185140E+00 +25 1-9.35609756E-08-6.07073963E-08-1.58468309E-06-6.65836473E-03 5.34215854E-01 +25 2 4.46225214E-02-8.91692753E-03 7.15428029E-01 5.97590108E-02-6.48788266E-02 +25 3 5.20537527E+00 4.34799849E-01-4.67858560E-08-4.78472815E-08-4.70799153E-08 +25 4-1.14363167E-02-1.36914326E-01 1.70648050E-03 2.11501227E-01 8.87300249E-01 +25 5 2.42146182E+00-1.51631301E-01 1.05304835E-01 1.69665737E-01 1.09216501E+00 +25 6-1.76598712E-01-1.18121998E+00-2.17333321E-01-9.11766660E-01-2.48823205E+00 +25 7 1.49399252E-01 1.01210925E-01 1.73759669E-01-1.09061212E+00-1.46913676E-01 +25 8-1.21090504E+00 2.56418141E-01 1.07573774E+00 2.93571201E+00 1.76835824E-01 +25 9 7.37743413E-02-1.58801386E-01-1.28955509E+00 5.20293038E-02 1.20050012E+00 +25 10-2.50586098E-01-1.05127036E+00-2.86894068E+00-1.79067788E-01 7.78683655E-02 +25 11-1.54707385E-01 1.29110747E+00 2.23437319E-02 1.17081457E+00 +26 1 3.91481703E-08 3.56317853E-08 6.13945039E-07 4.45512547E-01 3.03343822E-02 +26 2-2.96682479E-01 5.96635367E-01 4.06241154E-02-3.97320405E-01 4.34105456E+00 +26 3 2.95576884E-01-2.89086099E+00 2.80450573E-08 2.94036134E-08 2.97948495E-08 +26 4 7.60368718E-02-7.77441366E-03-1.14180566E-01 3.38329162E-01 1.41937371E+00 +26 5 3.87350320E+00-2.58624688E-02-2.23088139E-01 9.65624940E-02 6.77034339E-01 +26 6 1.65094479E+00-1.02615470E+00 5.18951766E-02 2.17712921E-01 5.94143571E-01 +26 7 1.75206667E-01 5.08390111E-02-1.77364671E-01-7.80920374E-01-3.35304760E-01 +26 8 9.60094860E-01-3.11759267E-01-1.30790679E+00-3.56930706E+00-7.21111647E-03 +26 9 2.33256792E-01 7.79111459E-02 5.41793244E-01-1.65801838E+00-8.90913610E-01 +26 10-7.84650257E-02-3.29180276E-01-8.98340146E-01 1.56555309E-01-4.06703810E-02 +26 11-1.96016048E-01-6.45679089E-01 3.28231375E-01 1.09533616E+00 +27 1-1.83017745E-08-1.62106565E-08-3.35139367E-07 2.98154886E-01-3.33965455E-02 +27 2 4.44308953E-01 3.99292257E-01-4.47250147E-02 5.95023343E-01 2.90520820E+00 +27 3-3.25414467E-01 4.32932707E+00-1.34825123E-08-1.32193666E-08-1.33530290E-08 +27 4-1.13872130E-01 8.55921362E-03-7.64142382E-02-7.86341867E-02-3.29889547E-01 +27 5-9.00276187E-01 1.96834212E-01 3.93344678E-02 1.55864812E-01-1.09965086E+00 +27 6-3.21909001E-01-6.41995111E-01 3.39788007E-01 1.42549384E+00 3.89020497E+00 +27 7-9.68871109E-02 2.22657552E-01-2.74582734E-02 1.03012609E+00-1.65118704E+00 +27 8 6.87282934E-01 4.93821504E-02 2.07170239E-01 5.65372228E-01 1.76300064E-01 +27 9-5.05296227E-02 1.76398954E-01-9.50757528E-01 3.29696575E-01-7.90888447E-01 +27 10-3.10535980E-01-1.30277431E+00-3.55530078E+00-7.63529548E-02-2.33852699E-01 +27 11-6.92411317E-03 8.81232650E-01 1.65897451E+00 5.38389486E-01 +28 1 6.25457290E-01 3.08496949E-01 1.23406073E+01-1.70159280E-08 1.05142268E-07 +28 2 4.90712389E-08-7.70345617E-09-2.43787620E-07-1.01867220E-07-2.02299447E-07 +28 3 1.03815901E-06 4.99287217E-07 2.42181324E-01 2.42181324E-01 2.42181325E-01 +28 4-5.53399639E-08-1.23210814E-07 1.03028183E-08-3.71620837E-01-1.45637473E+00 +28 5-1.99394865E+00 1.21467352E-01 1.21467423E-01-1.21467326E-01-8.95877861E-01 +28 6-8.95878224E-01 8.95877770E-01-3.71620979E-01-1.45637463E+00-1.99394901E+00 +28 7 1.21467468E-01-1.21467429E-01 1.21467482E-01-8.95878046E-01 8.95877812E-01 +28 8-8.95878230E-01-3.71620640E-01-1.45637477E+00-1.99394818E+00-1.21467273E-01 +28 9 1.21467326E-01 1.21467282E-01 8.95877748E-01-8.95877994E-01-8.95877827E-01 +28 10-3.71621057E-01-1.45637455E+00-1.99394921E+00-1.21467555E-01-1.21467512E-01 +28 11-1.21467510E-01 8.95878258E-01 8.95877918E-01 8.95878049E-01 +29 1 1.07378869E-08-1.23273893E-08 1.87698995E-07 4.21494937E-11-6.94842099E-09 +29 2 5.18601561E-10 1.63996401E-09 2.45916910E-08-3.94219059E-09 1.31042153E-09 +29 3-4.82122448E-08 8.25020994E-09-3.63600594E-03 3.03597278E-01-2.99961309E-01 +29 4-2.26255274E-09 1.31260669E-08 2.08822710E-10-5.24955341E-08 3.88249113E-08 +29 5-3.90327984E-08 6.02159468E-03-5.02787991E-01-4.96766445E-01-5.80020552E-03 +29 6 4.84301866E-01 4.78501718E-01-5.75113285E-09-1.46561712E-08-1.10156672E-08 +29 7 6.02157499E-03 5.02787998E-01 4.96766431E-01-5.80018438E-03-4.84301852E-01 +29 8-4.78501706E-01-4.53966406E-08 2.85763381E-08-3.67865052E-08-6.02159120E-03 +29 9-5.02787990E-01 4.96766441E-01 5.80020219E-03 4.84301864E-01-4.78501719E-01 +29 10-1.23829560E-08-8.38029444E-09-1.41043422E-08-6.02157704E-03 5.02787992E-01 +29 11-4.96766426E-01 5.80018616E-03-4.84301845E-01 4.78501698E-01 +30 1-1.09867068E-09-8.01258223E-10-7.44695507E-09-2.29267698E-09-1.45400424E-09 +30 2-1.77140967E-09-1.00601308E-08 4.89623236E-09 1.12794645E-08 1.84451333E-08 +30 3-6.16585823E-09-2.15669111E-08-3.48464714E-01 1.71083493E-01 1.77381218E-01 +30 4 5.55723555E-09 1.53103544E-09-5.80776295E-09 1.58139014E-08-1.72620610E-08 +30 5 6.37370155E-10 5.77093017E-01-2.83331678E-01 2.93761349E-01-5.55874903E-01 +30 6 2.72914353E-01-2.82960548E-01 3.39615490E-09-3.80233379E-09-1.13142365E-09 +30 7 5.77093023E-01 2.83331674E-01-2.93761351E-01-5.55874908E-01-2.72914347E-01 +30 8 2.82960561E-01-2.20872664E-08 2.76551205E-08-4.78804750E-09-5.77093020E-01 +30 9-2.83331663E-01-2.93761340E-01 5.55874895E-01 2.72914342E-01 2.82960552E-01 +30 10 3.24530488E-09-6.85876373E-10 1.00881291E-08-5.77093013E-01 2.83331673E-01 +30 11 2.93761344E-01 5.55874886E-01-2.72914350E-01-2.82960546E-01 +31 1-1.28514053E-08-3.13035130E-08-9.82716692E-08-2.69155732E-01-8.34517900E-01 +31 2-1.18550625E-01-7.08331396E-02-2.19618363E-01-3.11987212E-02-1.21150410E-02 +31 3-3.75627089E-02-5.33611316E-03-2.75877890E-08-2.35817508E-08-3.32886476E-08 +31 4-5.52814438E-02-3.89144800E-01-1.25510240E-01 4.17916619E-01-9.42550676E-01 +31 5-1.26887865E+00 3.81366083E-02 6.27441868E-01 3.65989070E-01-4.75062416E-01 +31 6-1.05853871E+00 7.49340517E-02-1.89549885E-01 4.27502550E-01 5.75511527E-01 +31 7 3.90505343E-01 7.59908861E-01 2.33522096E-01-1.88299939E-01-9.50735230E-01 +31 8-3.28694526E-02 2.90134885E-01-6.54357361E-01-8.80907596E-01 4.48850888E-01 +31 9 7.01563297E-01-4.47251690E-02-1.40817492E-01-9.98217656E-01-2.59310916E-01 +31 10-5.18501482E-01 1.16940556E+00 1.57427473E+00-2.02089985E-02 5.69096239E-01 +31 11-1.77192214E-01-5.22544865E-01-1.10602114E+00-3.67114410E-01 +32 1-2.22355991E-09-1.13758935E-08-1.83958589E-08 6.60409339E-01-2.86118295E-01 +32 2 5.14699055E-01 1.73798359E-01-7.52971309E-02 1.35452089E-01 2.97259132E-02 +32 3-1.28785620E-02 2.31673031E-02-1.20902870E-08-6.79254013E-09-1.18689888E-08 +32 4 2.40009688E-01-1.33420067E-01 3.07955984E-01 5.95649615E-02-1.34340201E-01 +32 5-1.80851241E-01-7.22929038E-01 2.63683977E-01-5.01945088E-01 6.53450265E-01 +32 6-3.23403906E-01 5.59308314E-01-6.19892788E-01 1.39807905E+00 1.88211959E+00 +32 7-3.28800851E-01-6.13413641E-02-1.76919760E-01 9.74197338E-01-5.87914121E-01 +32 8 8.23818541E-01 1.83193678E-01-4.13166967E-01-5.56212832E-01-5.82113784E-01 +32 9 1.91971547E-01-6.42760332E-01 7.68047684E-01-3.81764442E-01 4.44710883E-01 +32 10 3.77134149E-01-8.50571829E-01-1.14505551E+00-4.69616134E-01 5.16996865E-01 +32 11-3.17735030E-01 8.59599930E-01-1.17254225E-01 7.09221120E-01 +33 1 9.47129862E-09 7.49491745E-09 7.62921729E-08-5.23769025E-01 6.80836412E-02 +33 2 7.09894339E-01-1.37839035E-01 1.79174490E-02 1.86821072E-01-2.35755672E-02 +33 3 3.06453200E-03 3.19533512E-02 1.15940048E-08 3.33868221E-09 2.12835421E-09 +33 4 3.31031323E-01 3.17481494E-02-2.44239131E-01 4.94471048E-01-1.11520843E+00 +33 5-1.50131423E+00 2.59126310E-01-3.57791278E-01-4.53134020E-01-7.73972172E-01 +33 6-1.63156680E-01 9.66060907E-01-5.00765203E-02 1.12940319E-01 1.52042504E-01 +33 7 5.74998059E-01-1.00014455E-01-7.10910762E-01-5.16911113E-01 4.66256962E-02 +33 8 7.56278446E-01-5.52237050E-01 1.24549124E+00 1.67670323E+00 2.25618451E-01 +33 9 2.49365204E-01-4.19626115E-01-8.01241357E-01 3.30955886E-01 9.93330041E-01 +33 10 1.07842413E-01-2.43223115E-01-3.27431512E-01 6.08505939E-01-8.41160519E-03 +33 11-6.77402844E-01-4.89641923E-01 1.21173525E-01 7.83547598E-01 +34 1-1.90234833E-09 1.06367529E-08-9.40934335E-09 6.66618804E-09 2.17471000E-08 +34 2-1.04931931E-08-7.37727144E-09-2.88294049E-08 1.11276418E-08 4.02051935E-09 +34 3 3.03824583E-09-5.36001951E-10 1.08608304E-08 9.83806104E-09 9.99883426E-09 +34 4 1.70446969E-09-5.43685490E-09-3.26759213E-10 3.71654805E-08-4.76769492E-08 +34 5 3.41883481E-08-9.48441078E-01 2.42349011E-01-7.06092006E-01 1.01817324E+00 +34 6-2.60167219E-01 7.58005954E-01 4.05885252E-09-3.79189754E-09-2.19637289E-08 +34 7 9.48441056E-01 7.97839831E-01-1.50601214E-01-1.01817322E+00-8.56499345E-01 +34 8 1.61673852E-01 2.32044223E-08-3.08468326E-08 4.39469564E-10-9.17478157E-02 +34 9-2.42349059E-01 1.50601218E-01 9.84933862E-02 2.60167266E-01-1.61673863E-01 +34 10 8.04502270E-09-9.64939304E-09-2.21044240E-08 9.17478158E-02-7.97839857E-01 +34 11 7.06092034E-01-9.84933797E-02 8.56499379E-01-7.58005979E-01 +35 1-1.79871508E-10 5.16011940E-09-2.07856460E-09-1.14967774E-08 8.44267848E-09 +35 2 1.06831094E-08 1.20866824E-08-9.01352927E-09-2.20101086E-08-5.79548387E-10 +35 3-1.41969181E-09-6.69827112E-09 5.93777593E-09 5.94536066E-09 2.95814946E-09 +35 4-9.65336918E-09-1.96471261E-09 1.78449581E-09-7.68243730E-09 1.11765156E-08 +35 5-7.66010046E-09-3.69757721E-01 4.17886030E-01 4.81282962E-02 3.96943390E-01 +35 6-4.48610233E-01-5.16668292E-02 1.14945906E-08-1.92030755E-08-1.45924053E-08 +35 7 3.69757734E-01-6.46948691E-01-1.01670643E+00-3.96943408E-01 6.94514255E-01 +35 8 1.09145765E+00 3.13005078E-08-4.34020230E-08 1.73906948E-08 5.98820402E-01 +35 9-4.17886050E-01 1.01670641E+00-6.42847426E-01 4.48610252E-01-1.09145764E+00 +35 10-5.23360042E-09 9.63906231E-09 2.02617325E-10-5.98820379E-01 6.46948684E-01 +35 11-4.81283127E-02 6.42847402E-01-6.94514245E-01 5.16668456E-02 +36 1-5.47397194E-10 1.84020733E-09-2.14953212E-09-4.32953715E-08-1.46755273E-09 +36 2 3.76113177E-08 6.09054171E-08 6.12783701E-09-5.32381515E-08 4.89395618E-09 +36 3 2.53247712E-09-1.76492068E-09 9.42654854E-10 2.77049513E-09 1.35524796E-09 +36 4-1.39619700E-08 3.48479565E-09 1.73763098E-08-6.34488604E-08 8.44841497E-08 +36 5-5.55187676E-08-1.61188979E-01 9.10429220E-01 7.49240138E-01 1.73040066E-01 +36 6-9.77366638E-01-8.04326465E-01 6.14722679E-10-2.59987506E-09-2.11617511E-09 +36 7 1.61189051E-01 8.45701202E-02-7.66189324E-02-1.73040140E-01-9.07879615E-02 +36 8 8.22521770E-02 5.76932714E-08-7.61995725E-08 5.80254032E-08-8.33810253E-01 +36 9-9.10429219E-01 7.66188657E-02 8.95114421E-01 9.77366638E-01-8.22521086E-02 +36 10 1.25433748E-08-1.79041426E-08-1.55028455E-11 8.33810330E-01-8.45701133E-02 +36 11-7.49240202E-01-8.95114498E-01 9.07879571E-02 8.04326532E-01 +37 1 7.55272632E-09 1.21076120E-09-4.65612013E-08 1.14153441E-01-1.09199292E-04 +37 2-1.96909265E-01 4.42183973E-01-4.22925638E-04-7.62746733E-01-2.12728744E+00 +37 3 2.03494728E-03 3.66947040E+00 4.95987212E-09-2.14709754E-09-5.19105413E-09 +37 4 6.71552713E-01 3.72438685E-04-3.89316618E-01 1.26762125E-01-5.37418549E-01 +37 5-2.99264301E+00 5.62390030E-01 1.07634214E+00-1.90155079E-01-8.45633765E-01 +37 6-1.44131069E+00 4.14208840E-01-3.36913560E-02 1.42837398E-01 7.95398465E-01 +37 7-7.99405609E-01 2.86435850E-01 5.99751191E-01 9.78034541E-01-3.83496185E-01 +37 8-6.43605650E-01-1.26851258E-01 5.37796157E-01 2.99474488E+00 5.63145601E-01 +37 9-1.07611538E+00-1.90910663E-01-8.46645639E-01 1.44118401E+00 4.15220723E-01 +37 10 3.37803835E-02-1.43214918E-01-7.97500263E-01-8.00161182E-01-2.86209076E-01 +37 11 5.98995624E-01 9.79046406E-01 3.83369485E-01-6.42593785E-01 +38 1-1.65821185E-08-2.36831775E-08 6.33382670E-08-1.51776875E-01 1.44954541E-01 +38 2-8.80694021E-02-5.87922472E-01 5.61495136E-01-3.41145303E-01 2.82841387E+00 +38 3-2.70127673E+00 1.64120305E+00-1.89334498E-08-9.06158838E-09-2.51533540E-08 +38 4 3.00357857E-01-4.94362839E-01 5.17630240E-01 3.31209313E-02-1.40418737E-01 +38 5-7.81928453E-01 9.63793187E-01-3.70901908E-01 1.15033148E-01-1.16768944E+00 +38 6 3.79238803E-01-8.26836947E-02-1.56866278E-01 6.65048146E-01 3.70335658E+00 +38 7-6.48660525E-01 6.79347468E-01-9.35216242E-01 9.91651274E-01-1.02721780E+00 +38 8 1.32377291E+00 8.50623410E-02-3.60628958E-01-2.00818150E+00-3.92474251E-02 +38 9 6.99343836E-02 1.11807376E+00 1.75546929E-01-2.11113463E-01-1.42592006E+00 +38 10 3.86830889E-02-1.64000432E-01-9.13246708E-01 3.54380027E-01-9.80315073E-01 +38 11 6.78243145E-02-3.51585051E-01 1.19534319E+00-1.94634157E-02 +39 1-3.00523443E-08-1.00768886E-07 1.42273933E-08 1.25447325E-01 1.75477718E-01 +39 2 7.26277620E-02 4.85932314E-01 6.79729822E-01 2.81330637E-01-2.33775355E+00 +39 3-3.27008695E+00-1.35344307E+00-8.67199325E-08-7.72986846E-08-9.01789642E-08 +39 4-2.47694689E-01-5.98461214E-01-4.27834124E-01 9.30666521E-02-3.94564200E-01 +39 5-2.19715304E+00 2.25612631E-01 5.76391082E-04-1.11655254E+00-4.03785088E-01 +39 6-1.42965276E-01 1.43639553E+00 9.21188039E-03-3.90546688E-02-2.17479082E-01 +39 7-4.86077405E-01-8.67480649E-01-2.48495509E-01 5.49284909E-01 1.01950572E+00 +39 8 2.73924536E-01 5.00022666E-02-2.11988991E-01-1.18047285E+00-9.88639308E-01 +39 9-3.64918742E-01 9.76993940E-02 1.22229784E+00 3.46492797E-01-1.89687389E-01 +39 10-1.52281007E-01 6.45608448E-01 3.59510496E+00 7.28174295E-01 5.03138043E-01 +39 11 9.65756189E-01-1.07679790E+00-8.15978074E-01-1.35215826E+00 +40 1-2.09645910E-08-3.23772893E-08 1.10536593E-08 1.28268134E-08-3.39896602E-09 +40 2-7.54473721E-09-6.55053216E-08 7.34440177E-08 5.46586079E-08-2.32940913E-08 +40 3 2.31867845E-08 1.73998819E-08 1.39703654E+00-1.07461500E+00-3.22421603E-01 +40 4 1.76375406E-08 2.75681972E-08-2.14778017E-08 7.39447668E-09 8.16163974E-09 +40 5-1.65247483E-09 7.67588166E-01-5.90436742E-01 1.77151394E-01-4.04266364E-01 +40 6 3.10965850E-01-9.33004968E-02 2.19154600E-08-3.14170398E-08 1.02156149E-08 +40 7 7.67588150E-01 5.90436762E-01-1.77151406E-01-4.04266355E-01-3.10965890E-01 +40 8 9.33004829E-02-1.13761285E-07 2.33706242E-07-2.62650106E-08-7.67588239E-01 +40 9-5.90436674E-01-1.77151323E-01 4.04266418E-01 3.10965822E-01 9.33004464E-02 +40 10 2.11288294E-08-2.13206023E-08 1.05395406E-08-7.67588158E-01 5.90436759E-01 +40 11 1.77151405E-01 4.04266380E-01-3.10965890E-01-9.33005040E-02 +41 1-5.55206140E-08-9.53064245E-08 3.54202535E-08-2.99280170E-09-1.35981336E-08 +41 2 6.75154068E-09 2.44446911E-08 1.34437857E-07-4.44798819E-08 1.32288522E-08 +41 3 4.07286387E-08-1.18672494E-08-4.34279134E-01-9.92729691E-01 1.42700861E+00 +41 4-1.33589694E-08 4.56278070E-08 1.02631227E-08-1.51888244E-07 3.34955257E-07 +41 5-3.04499913E-08-2.38610287E-01-5.45445515E-01-7.84056170E-01 1.25669100E-01 +41 6 2.87270275E-01 4.12939595E-01 3.50408833E-08-1.09558012E-08 1.70534174E-08 +41 7-2.38610394E-01 5.45445629E-01 7.84056061E-01 1.25669149E-01-2.87270377E-01 +41 8-4.12939530E-01-8.22283663E-08 2.02712150E-07-1.62606435E-08 2.38610331E-01 +41 9-5.45445555E-01 7.84056130E-01-1.25669130E-01 2.87270293E-01-4.12939564E-01 +41 10 1.00142172E-08 2.60959157E-08 7.61530964E-09 2.38610386E-01 5.45445617E-01 +41 11-7.84056075E-01-1.25669154E-01-2.87270370E-01 4.12939554E-01 +42 1-1.64065549E+00-1.41035150E+00 4.18535430E+00 1.80562688E-08 1.65809272E-07 +42 2 5.32639424E-08 1.53321755E-07-4.73016714E-07-7.37749796E-08 1.33876406E-07 +42 3-8.39913087E-08 1.45985766E-08-7.86690779E-01-7.86690716E-01-7.86690836E-01 +42 4 1.44870150E-08-6.00628067E-08 9.69111814E-08 5.12513594E-01 8.35015449E-01 +42 5-1.07896132E+00 1.02357369E+00 1.02357373E+00-1.02357362E+00-7.69866460E-01 +42 6-7.69866375E-01 7.69866369E-01 5.12513053E-01 8.35016223E-01-1.07896134E+00 +42 7 1.02357390E+00-1.02357388E+00 1.02357385E+00-7.69866551E-01 7.69866541E-01 +42 8-7.69866471E-01 5.12513852E-01 8.35014982E-01-1.07896130E+00-1.02357351E+00 +42 9 1.02357360E+00 1.02357352E+00 7.69866286E-01-7.69866331E-01-7.69866346E-01 +42 10 5.12513049E-01 8.35015987E-01-1.07896132E+00-1.02357376E+00-1.02357380E+00 +42 11-1.02357374E+00 7.69866398E-01 7.69866528E-01 7.69866439E-01 +43 1-2.15971196E-08-4.47218140E-07-2.78937579E-06-5.65380056E-02 1.73999832E+00 +43 2 2.20846746E-01-3.24628542E-02 9.99065666E-01 1.26804897E-01-3.68282157E-02 +43 3 1.13341589E+00 1.43857107E-01-4.09166040E-07-3.57619487E-07-4.22752466E-07 +43 4 1.91828842E-01 1.51137347E+00-4.91092702E-02-3.37832868E-01 1.75694410E+00 +43 5-6.96223398E-01 7.31982731E-01 1.23531750E+00-6.85948419E-01-3.80653586E-01 +43 6-1.45065009E+00 2.82793203E-01 3.63948706E-01-1.89277180E+00 7.50050752E-01 +43 7-8.21477664E-01 1.29313195E+00-7.43762949E-01 4.80032492E-01-1.48268219E+00 +43 8 3.14825348E-01-4.65972595E-01 2.42335266E+00-9.60301356E-01-1.04731245E+00 +43 9 1.51896679E+00 1.09334675E+00 6.05154692E-01-1.60780441E+00-7.03015077E-01 +43 10 4.39851923E-01-2.28751826E+00 9.06477174E-01 9.57816671E-01 1.46115137E+00 +43 11 1.03553141E+00-5.05775956E-01-1.57577241E+00-6.70983122E-01 +44 1 7.64170961E-08 7.52627100E-08 2.93245682E-08 1.65146221E+00 1.27238808E-01 +44 2-5.79701363E-01 9.48225746E-01 7.30574915E-02-3.32849175E-01 1.07574139E+00 +44 3 8.28819698E-02-3.77609963E-01 6.24447734E-08 3.99095427E-08 2.83557673E-08 +44 4-5.03531482E-01 1.10520418E-01 1.43446836E+00-5.44736020E-01 2.83298827E+00 +44 5-1.12263193E+00 1.66851954E+00 1.24147896E+00-1.36824502E+00-1.65167473E+00 +44 6-7.43866153E-01 1.01334714E+00-2.18162117E-01 1.13458929E+00-4.49605432E-01 +44 7 9.45614647E-01-4.47277203E-01 3.20511161E-01-1.25115303E+00 1.91780493E-01 +44 8 7.77004738E-02 4.85957344E-01-2.52730113E+00 1.00149705E+00 1.53840723E+00 +44 9-1.04006980E+00-1.23813274E+00-1.57958673E+00 5.20214189E-01 9.41259146E-01 +44 10 2.76941081E-01-1.44027701E+00 5.70740243E-01 1.07572711E+00 6.48686579E-01 +44 11 4.50623678E-01-1.32324111E+00-4.15432564E-01 5.61235345E-03 +45 1 7.38389765E-08-9.06629892E-08-9.64718286E-07 5.90802194E-01-1.89156713E-01 +45 2 1.64156882E+00 3.39222130E-01-1.08608273E-01 9.42541888E-01 3.84840546E-01 +45 3-1.23213960E-01 1.06929478E+00-1.14177445E-07-1.09258034E-07-9.39433218E-08 +45 4 1.42587339E+00-1.64302256E-01 5.13173394E-01 2.86391276E-01-1.48943150E+00 +45 5 5.90220721E-01-4.68436378E-01-6.86956815E-01 1.09387783E+00-6.31203033E-04 +45 6 4.63902336E-01-1.32894020E+00-5.59314177E-01 2.90881148E+00-1.15268001E+00 +45 7 1.40362905E+00-1.29110033E+00 1.69802135E+00-1.03783996E+00 7.98624939E-01 +45 8-1.66366280E+00-1.99011003E-01 1.03499140E+00-4.10137840E-01-2.75008404E-01 +45 9 3.87537119E-01 9.00449878E-01-1.07799152E-01-1.31415872E-01-1.22177226E+00 +45 10 4.71932456E-01-2.45436954E+00 9.72598187E-01 1.21020097E+00 9.91680521E-01 +45 11 1.50459325E+00-9.30672178E-01-4.66138631E-01-1.55649500E+00 +46 1 4.66146780E-07 5.82042798E-07 4.28665144E-06 3.92665381E-02 2.20116552E+00 +46 2 2.46225402E-01-7.61628334E-02-4.26946987E+00-4.77588728E-01-5.05613134E-02 +46 3-2.83432205E+00-3.17051145E-01 3.68738168E-07 3.26926489E-07 3.86543435E-07 +46 4-6.48652265E-02-5.79871709E-01-1.03442979E-02 2.50569639E+00-3.45426072E+00 +46 5-1.16488350E+00-5.10254161E-01-3.82704811E-01 5.27097827E-01-1.59892884E-01 +46 6 3.79675535E-01 2.31146126E-01-2.40701741E+00 3.31822548E+00 1.11900733E+00 +46 7 4.94701631E-01-3.62518891E-01 5.06911987E-01 1.72810410E-01 3.86358260E-01 +46 8 2.24463355E-01 3.02577902E+00-4.17122734E+00-1.40666669E+00 6.21276759E-01 +46 9-4.89094065E-01-6.04433086E-01 2.14714635E-01 3.44454056E-01-1.43461388E-01 +46 10-3.12445080E+00 4.30725277E+00 1.45253792E+00-6.36828058E-01-5.09278641E-01 +46 11-6.24617742E-01-2.01796873E-01 3.37771499E-01-1.50143895E-01 +47 1 9.04014464E-08 1.10775186E-07 7.36749258E-07-2.12686945E+00-3.12629336E-02 +47 2 6.18659626E-01 4.12536564E+00 6.06391754E-02-1.19997846E+00 2.73865840E+00 +47 3 4.02558642E-02-7.96615645E-01 8.76488923E-08 6.03255965E-08 5.52986084E-08 +47 4-1.62979185E-01 8.23599412E-03 5.60300741E-01-3.48900659E+00 4.80981715E+00 +47 5 1.62201707E+00 5.88237369E-01 7.11875279E-01-6.77219644E-01-2.94541753E-01 +47 6 2.28482487E-01-8.18792819E-02-1.85576552E+00 2.55829067E+00 8.62733875E-01 +47 7 2.54137499E-01-3.81464309E-01 4.16119977E-01-4.05149228E-01-1.33480489E-01 +47 8 2.80083651E-01 3.41044380E+00-4.70151323E+00-1.58549401E+00 5.72166262E-01 +47 9-6.99493080E-01-6.61148561E-01-2.99862197E-01-2.38767530E-01-7.65588351E-02 +47 10 1.93432964E+00-2.66659639E+00-8.99257802E-01 2.70208797E-01 3.93846771E-01 +47 11 4.32191337E-01-3.99828731E-01 1.23195456E-01 2.85404100E-01 +48 1-1.62772708E-08-1.82551246E-07-1.52784012E-06-6.18202978E-01 2.47368709E-01 +48 2-2.11279893E+00 1.19909351E+00-4.79806987E-01 4.09807630E+00 7.96028564E-01 +48 3-3.18523929E-01 2.72054289E+00-1.69386702E-07-1.62310935E-07-1.45158993E-07 +48 4 5.56595061E-01-6.51667068E-02 1.62859323E-01 2.18875873E+00-3.01734339E+00 +48 5-1.01753978E+00-4.84211121E-01-4.33143700E-01 3.23086075E-01-3.02521021E-01 +48 6-8.64900067E-02-3.79087450E-01-3.74229075E+00 5.15898652E+00 1.73976704E+00 +48 7 7.29059591E-01-7.50938217E-01 6.40880592E-01 9.91457242E-02-1.91699351E-01 +48 8-2.73878092E-01-1.56712791E+00 2.16038564E+00 7.28547873E-01-3.57048653E-01 +48 9 3.35170028E-01 1.95923631E-01-2.60422485E-01 1.67868862E-01-4.21185996E-01 +48 10 3.12065760E+00-4.30202561E+00-1.45077346E+00 6.01896812E-01 6.52964216E-01 +48 11 5.13717773E-01 5.70470171E-02 2.73078047E-01-3.15976770E-01 +49 1 2.99076994E+00-9.13981086E-01 6.28840674E+00 4.30106219E-08-1.73808665E-07 +49 2-7.42660031E-08-1.08411959E-07 9.96247772E-07 4.15535127E-07-1.35779629E-07 +49 3 1.22429767E-06 5.23091527E-07-1.98965044E+00-1.98965044E+00-1.98965043E+00 +49 4 1.18292603E-07 2.87729998E-07-2.59919043E-08 2.42406342E+00-1.64755376E+00 +49 5-2.14839011E+00 3.88154462E-01 3.88154527E-01-3.88154441E-01-4.18163239E-01 +49 6-4.18163648E-01 4.18163113E-01 2.42406465E+00-1.64755547E+00-2.14839064E+00 +49 7 3.88154192E-01-3.88154128E-01 3.88154233E-01-4.18163280E-01 4.18162933E-01 +49 8-4.18163481E-01 2.42406233E+00-1.64755226E+00-2.14838959E+00-3.88154687E-01 +49 9 3.88154743E-01 3.88154713E-01 4.18163239E-01-4.18163582E-01-4.18163367E-01 +49 10 2.42406539E+00-1.64755647E+00-2.14839093E+00-3.88154048E-01-3.88153969E-01 +49 11-3.88154020E-01 4.18163366E-01 4.18162947E-01 4.18163176E-01 +50 1-1.76938773E+00 1.97118672E+00 9.95112773E+00 1.45833760E-07 5.60564252E-07 +50 2 1.64128937E-07-2.77282246E-07-5.18892433E-08 1.56541670E-07-1.45823085E-07 +50 3 1.57705365E-06 8.15235381E-07 2.49273566E+00 2.49273564E+00 2.49273568E+00 +50 4 8.23398235E-08 9.80059422E-08-7.44355479E-08 2.99088549E+00-5.33054659E+00 +50 5-2.26943637E+00-8.73322534E-01-8.73322357E-01 8.73322612E-01-1.64847468E-01 +50 6-1.64848061E-01 1.64847216E-01 2.99088727E+00-5.33054830E+00-2.26943722E+00 +50 7-8.73322626E-01 8.73322841E-01-8.73322519E-01-1.64847564E-01 1.64847004E-01 +50 8-1.64847893E-01 2.99088388E+00-5.33054458E+00-2.26943553E+00 8.73322321E-01 +50 9-8.73322131E-01-8.73322222E-01 1.64847389E-01-1.64847939E-01-1.64847649E-01 +50 10 2.99088891E+00-5.33054989E+00-2.26943800E+00 8.73322713E-01 8.73322935E-01 +50 11 8.73322777E-01 1.64847721E-01 1.64847094E-01 1.64847427E-01 +51 1-2.53507552E-07 5.01111216E-07 3.51102893E-06 5.34741713E-01-2.98104973E+00 +51 2-6.64262538E-01-1.13846358E+00 6.34664628E+00 1.41421306E+00 1.20739538E-01 +51 3-6.73092570E-01-1.49984067E-01 5.62797665E-07 5.65411803E-07 5.62579993E-07 +51 4 3.84213710E-01 1.72425824E+00-3.09298032E-01 1.33456789E+00 3.00553136E-01 +51 5-1.28013324E+00 7.66214105E-01 2.22695079E-01-7.86237199E-01-4.34473402E-01 +51 6-7.17221142E-02 4.47837054E-01-2.13549765E+00-4.80932723E-01 2.04839492E+00 +51 7-1.01110547E+00 6.32921790E-01-1.19646391E+00 5.51760852E-01-2.99356391E-01 +51 8 6.75471333E-01 3.13042670E+00 7.04994947E-01-3.00274249E+00-1.52069298E+00 +51 9 1.14250929E+00 1.50066989E+00 8.34531246E-01-5.82126785E-01-8.21167596E-01 +51 10-2.32949286E+00-5.24622045E-01 2.23447745E+00 1.27580252E+00 7.32283487E-01 +51 11 1.09044408E+00-7.17243456E-01-3.54492164E-01-5.93532977E-01 +52 1-8.00732232E-08 1.25968500E-07 7.08795927E-07-2.93963751E+00-6.85307204E-01 +52 2 7.09039356E-01 6.25847996E+00 1.45901704E+00-1.50954278E+00-6.63741685E-01 +52 3-1.54735912E-01 1.60094221E-01 1.50594590E-07 1.48219617E-07 1.47078161E-07 +52 4-4.10112910E-01 3.96386070E-01 1.70030521E+00 3.24570329E+00 7.30957984E-01 +52 5-3.11331736E+00 1.20795520E+00 1.55646032E+00-1.55279149E+00-6.19162912E-01 +52 6-8.51759403E-01 8.49310825E-01 1.15726213E+00 2.60624577E-01-1.11005970E+00 +52 7 1.38284454E-01-6.98677865E-01 7.02346697E-01-2.56028579E-02 3.99616246E-01 +52 8-4.02064827E-01-2.21925505E+00-4.99794785E-01 2.12873610E+00 6.82222996E-01 +52 9-1.24261641E+00-1.02705929E+00-3.27434116E-01 7.01447504E-01 5.57582029E-01 +52 10-2.18370956E+00-4.91789214E-01 2.09464032E+00 6.64016887E-01 1.01252201E+00 +52 11 1.22807914E+00-3.17331603E-01-5.49928096E-01-6.93793576E-01 +53 1-6.53276103E-08 1.25953573E-07 8.52968239E-07-8.28513176E-01 5.07491272E-01 +53 2-2.94446437E+00 1.76390221E+00-1.08044750E+00 6.26875645E+00-1.87070328E-01 +53 3 1.14586583E-01-6.64831272E-01 1.42791238E-07 1.41925295E-07 1.42742330E-07 +53 4 1.70309713E+00-2.93536214E-01 4.79217343E-01-1.96468478E+00-4.42463777E-01 +53 5 1.88454929E+00-1.13436784E+00-9.27830050E-01 5.51089522E-01 6.43871225E-01 +53 6 5.06025395E-01-2.54584270E-01 3.20562567E+00 7.21932595E-01-3.07487455E+00 +53 7 1.51379457E+00-1.56342252E+00 1.18668199E+00-8.25593294E-01 8.58715611E-01 +53 8-6.07274484E-01 1.20456904E+00 2.71278577E-01-1.15543710E+00-7.45046591E-01 +53 9 6.95418640E-01 1.61768270E-01 4.27837081E-01-3.94714763E-01-3.85501248E-02 +53 10-2.44550894E+00-5.50749037E-01 2.34576155E+00 1.12447355E+00 1.33101134E+00 +53 11 7.97360969E-01-6.09559071E-01-7.47404900E-01-3.91240260E-01 +54 1 1.14777366E+01-3.96291336E+00-4.39359482E+00 2.17635312E-10 8.21213820E-10 +54 2 6.37760798E-10-5.81297662E-10-3.85281574E-09-2.27988239E-09 3.69265336E-10 +54 3-1.01213954E-09-1.16441289E-09-2.36981785E+00-2.36981785E+00-2.36981785E+00 +54 4-7.36454704E-10-1.42690539E-09-1.57267556E-10 8.60568495E-02 1.75624616E-01 +54 5-1.11392853E-01 7.87768498E-02 7.87768499E-02-7.87768498E-02-3.05002560E-03 +54 6-3.05002501E-03 3.05002596E-03 8.60568504E-02 1.75624617E-01-1.11392855E-01 +54 7 7.87768509E-02-7.87768509E-02 7.87768508E-02-3.05002648E-03 3.05002704E-03 +54 8-3.05002586E-03 8.60568506E-02 1.75624614E-01-1.11392853E-01-7.87768490E-02 +54 9 7.87768491E-02 7.87768490E-02 3.05002546E-03-3.05002495E-03-3.05002510E-03 +54 10 8.60568503E-02 1.75624620E-01-1.11392856E-01-7.87768522E-02-7.87768524E-02 +54 11-7.87768522E-02 3.05002697E-03 3.05002773E-03 3.05002738E-03 + $END + POPULATION ANALYSIS +C 4.81645 -0.81645 4.18501 -0.18501 +H 0.79589 0.20411 0.95375 0.04625 +H 0.79589 0.20411 0.95375 0.04625 +H 0.79589 0.20411 0.95375 0.04625 +H 0.79589 0.20411 0.95375 0.04625 + MOMENTS AT POINT 1 X,Y,Z= 0.000000 0.000000 0.000000 + DIPOLE 0.000000 0.000000 0.000000 diff --git a/examples/co/co.inp b/examples/co/co.inp new file mode 100644 index 00000000..7f63e642 --- /dev/null +++ b/examples/co/co.inp @@ -0,0 +1,87 @@ + $CONTRL SCFTYP=RHF MULT=1 ECP=READ $END + $DATA + +C1 +O 8 0. 0. 0. +S 8 1. +1 64.2325670 -0.000146284806 +2 44.2294580 0.000232571658 +3 14.4012840 0.014522921481 +4 6.2716241 -0.159288494635 +5 2.8360343 0.017170056214 +6 1.1159210 0.387280886160 +7 0.4530391 0.534404313640 +8 0.1800000 0.195875516232 +S 1 + 1 0.752000000 1.000000000 +S 1 + 1 0.2384000000 1.000000000 +P 8 1. +1 23.5159210 0.006185522026 +2 14.9592690 -0.001429661902 +3 11.1499140 0.049362220387 +4 4.5494628 0.119429052586 +5 2.0155363 0.232565392345 +6 0.8786699 0.354109222684 +7 0.3557349 0.352406238388 +8 0.1343186 0.144049619271 +P 1 + 1 0.7156000000 1.000000000 +P 1 + 1 0.2140000000 1.000000000 +D 1 1. +1 0.98500000000 1.00000000 + +C 6 0. 0. 1.47 + S 5 + 1 8.1380377 0.11795918E-01 + 2 3.3151758 -0.15198125 + 3 0.66827631 0.27552348 + 4 0.29176766 0.54864514 + 5 0.11411349 0.30121511 + S 1 + 1 0.9059000000 1.000000000 + S 1 + 1 0.1285000000 1.000000000 + P 5 + 1 8.5281305 0.23512401E-01 + 2 2.9014509 0.11648574 + 3 0.94312090 0.32777384 + 4 0.31558555 0.49260154 + 5 0.10393611 0.27312428 + P 1 + 1 0.3827000000 1.000000000 + P 1 + 1 0.1209000000 1.000000000 + D 1 + 1 0.5500000000 1.000000000 + +$END + $ECP +O-LN2 GEN 2 1 +7 P + -33.7880782 2 15.2168459 + -3.3940401 2 128.509992 + -7.80348522 2 38.1725349 + -1.77249588 2 540.590474 + 3.92316748 2 8.69742515 + -0.939126666 2 3211.15414 + 6. 1 15. +3 S-P + 29.1102439 2 10.0448527 + 47.7288457 2 10.237855 + -21.4103895 2 8.77094221 +C-LES GEN 2 1 +7 P + -16.7554933 2 7.71902471 + -0.318937855 2 2184.3154 + -2.90449512 2 20.7770051 + -1.24269724 2 76.3948299 + -0.601986071 2 351.761231 + 0.218138855 2 3.95786259 + 4. 1 5.992468 +3 S-P + 27.006964 2 5.74118955 + 8.57269969 2 5.12564415 + -6.3364597 2 4.68309865 + $END diff --git a/examples/co/co.out b/examples/co/co.out new file mode 100644 index 00000000..a33df5eb --- /dev/null +++ b/examples/co/co.out @@ -0,0 +1,922 @@ +mkdir: cannot create directory `/tmp/lkwagner': File exists +----- GAMESS execution script ----- +This job is running on host daflower at Sun Aug 7 15:27:33 EDT 2005 +Available scratch disk space (Kbyte units) at beginning of the job is +Filesystem 1K-blocks Used Available Use% Mounted on +/dev/hda1 14421344 2009996 11678788 15% / +cp co.inp /tmp/lkwagner/co.F05 +unset echo +setenv EXTBAS /dev/null +setenv IRCDATA /tmp/lkwagner/co.irc +setenv INPUT /tmp/lkwagner/co.F05 +setenv PUNCH /tmp/lkwagner/co.pun +setenv AOINTS /tmp/lkwagner/co.F08 +setenv MOINTS /tmp/lkwagner/co.F09 +setenv DICTNRY /tmp/lkwagner/co.F10 +setenv DRTFILE /tmp/lkwagner/co.F11 +setenv CIVECTR /tmp/lkwagner/co.F12 +setenv CASINTS /tmp/lkwagner/co.F13 +setenv CIINTS /tmp/lkwagner/co.F14 +setenv WORK15 /tmp/lkwagner/co.F15 +setenv WORK16 /tmp/lkwagner/co.F16 +setenv CSFSAVE /tmp/lkwagner/co.F17 +setenv FOCKDER /tmp/lkwagner/co.F18 +setenv DASORT /tmp/lkwagner/co.F20 +setenv DFTINTS /tmp/lkwagner/co.F21 +setenv DFTGRID /tmp/lkwagner/co.F22 +setenv JKFILE /tmp/lkwagner/co.F23 +setenv ORDINT /tmp/lkwagner/co.F24 +setenv EFPIND /tmp/lkwagner/co.F25 +setenv PCMDATA /tmp/lkwagner/co.F26 +setenv PCMINTS /tmp/lkwagner/co.F27 +setenv MLTPL /tmp/lkwagner/co.F28 +setenv MLTPLT /tmp/lkwagner/co.F29 +setenv DAFL30 /tmp/lkwagner/co.F30 +setenv SOINTX /tmp/lkwagner/co.F31 +setenv SOINTY /tmp/lkwagner/co.F32 +setenv SOINTZ /tmp/lkwagner/co.F33 +setenv SORESC /tmp/lkwagner/co.F34 +setenv SIMEN /tmp/lkwagner/co.simen +setenv SIMCOR /tmp/lkwagner/co.simcor +setenv GCILIST /tmp/lkwagner/co.F37 +setenv SOCCDAT /tmp/lkwagner/co.F40 +setenv AABB41 /tmp/lkwagner/co.F41 +setenv BBAA42 /tmp/lkwagner/co.F42 +setenv BBBB43 /tmp/lkwagner/co.F43 +setenv MCQD50 /tmp/lkwagner/co.F50 +setenv MCQD51 /tmp/lkwagner/co.F51 +setenv MCQD52 /tmp/lkwagner/co.F52 +setenv MCQD53 /tmp/lkwagner/co.F53 +setenv MCQD54 /tmp/lkwagner/co.F54 +setenv MCQD55 /tmp/lkwagner/co.F55 +setenv MCQD56 /tmp/lkwagner/co.F56 +setenv MCQD57 /tmp/lkwagner/co.F57 +setenv MCQD58 /tmp/lkwagner/co.F58 +setenv MCQD59 /tmp/lkwagner/co.F59 +setenv MCQD60 /tmp/lkwagner/co.F60 +setenv MCQD61 /tmp/lkwagner/co.F61 +setenv MCQD62 /tmp/lkwagner/co.F62 +setenv MCQD63 /tmp/lkwagner/co.F63 +setenv MCQD64 /tmp/lkwagner/co.F64 +setenv CCREST /tmp/lkwagner/co.F70 +setenv CCRLE /tmp/lkwagner/co.F71 +setenv CCINTS /tmp/lkwagner/co.F72 +setenv CCT1AMP /tmp/lkwagner/co.F73 +setenv CCT2AMP /tmp/lkwagner/co.F74 +setenv CCT3AMP /tmp/lkwagner/co.F75 +setenv CCVM /tmp/lkwagner/co.F76 +setenv CCVE /tmp/lkwagner/co.F77 +unset echo +ddikick.x co /home/lkwagner/bin gamess.00.x /tmp/lkwagner 1 daflower +Initiating 1 compute processes to run job co +Executable gamess.00.x will be run from directory /home/lkwagner/bin +Working scratch directory on each host will be /tmp/lkwagner +Running gamess.00.x on daflower as compute process 0 +Running gamess.00.x on daflower as data server 1 + ****************************************************** + * GAMESS VERSION = 16 FEB 2002 (R4) * + * FROM IOWA STATE UNIVERSITY * + * M.W.SCHMIDT, K.K.BALDRIDGE, J.A.BOATZ, S.T.ELBERT, * + * M.S.GORDON, J.H.JENSEN, S.KOSEKI, N.MATSUNAGA, * + * K.A.NGUYEN, S.J.SU, T.L.WINDUS, * + * TOGETHER WITH M.DUPUIS, J.A.MONTGOMERY * + * J.COMPUT.CHEM. 14, 1347-1363(1993) * + ******************* PC-UNIX VERSION ****************** + + SINCE 1993, STUDENTS AND POSTDOCS WORKING AT IOWA STATE UNIVERSITY + AND ALSO IN THEIR VARIOUS JOBS AFTER LEAVING ISU HAVE MADE IMPORTANT + CONTRIBUTIONS TO THE CODE: + CHRISTINE AIKENS, ROB BELL, PRADIPTA BANDYOPADHYAY, BRETT BODE, + GALINA CHABAN, WEI CHEN, CHEOL CHOI, PAUL DAY, DMITRI FEDOROV, + GRAHAM FLETCHER, MARK FREITAG, KURT GLAESEMANN, GRANT MERRILL, + MIKE PAK, JIM SHOEMAKER, TETSUYA TAKETSUGU, SIMON WEBB. + + ADDITIONAL CODE HAS BEEN PROVIDED BY COLLABORATORS IN OTHER GROUPS: + IOWA STATE UNIVERSITY: JOE IVANIC, KLAUS RUEDENBERG + UNIVERSITY OF TOKYO: KIMIHIKO HIRAO, HARUYUKI NAKANO, TAKAHITO + NAKAJIMA, TAKAO TSUNEDA, MUNEAKI KAMIYA, SUSUMU YANAGISAWA + ODENSE UNIVERSITY: FRANK JENSEN + UNIVERSITY OF IOWA: VISVALDAS KAIRYS, HUI LI + NATIONAL INST. OF STANDARDS AND TECHNOLOGY: WALT STEVENS, DAVID GARMER + UNIVERSITY OF PISA: BENEDETTA MENNUCCI, JACOPO TOMASI + UNIVERSITY OF MEMPHIS: HENRY KURTZ, PRAKASHAN KORAMBATH + UNIVERSITY OF ALBERTA: MARIUSZ KLOBUKOWSKI + UNIVERSITY OF NEW ENGLAND: MARK SPACKMAN + MIE UNIVERSITY: HIROAKI UMEDA + MICHIGAN STATE UNIVERSITY: KAROL KOWALSKI, PIOTR PIECUCH + UNIVERSITY OF SILESIA: MONIKA MUSIAL, STANISLAW KUCHARSKI + + EXECUTION OF GAMESS BEGUN Sun Aug 7 15:27:33 2005 + + ECHO OF THE FIRST FEW INPUT CARDS - + INPUT CARD> $CONTRL SCFTYP=RHF MULT=1 ECP=READ $END + INPUT CARD> $DATA + INPUT CARD> + INPUT CARD>C1 + INPUT CARD>O 8 0. 0. 0. + INPUT CARD>S 8 1. + INPUT CARD>1 64.2325670 -0.000146284806 + INPUT CARD>2 44.2294580 0.000232571658 + INPUT CARD>3 14.4012840 0.014522921481 + INPUT CARD>4 6.2716241 -0.159288494635 + INPUT CARD>5 2.8360343 0.017170056214 + INPUT CARD>6 1.1159210 0.387280886160 + INPUT CARD>7 0.4530391 0.534404313640 + INPUT CARD>8 0.1800000 0.195875516232 + INPUT CARD>S 1 + INPUT CARD> 1 0.752000000 1.000000000 + INPUT CARD>S 1 + INPUT CARD> 1 0.2384000000 1.000000000 + INPUT CARD>P 8 1. + INPUT CARD>1 23.5159210 0.006185522026 + INPUT CARD>2 14.9592690 -0.001429661902 + INPUT CARD>3 11.1499140 0.049362220387 + INPUT CARD>4 4.5494628 0.119429052586 + INPUT CARD>5 Process initiation completed. + 2.0155363 0.232565392345 + INPUT CARD>6 0.8786699 0.354109222684 + INPUT CARD>7 0.3557349 0.352406238388 + INPUT CARD>8 0.1343186 0.144049619271 + INPUT CARD>P 1 + INPUT CARD> 1 0.7156000000 1.000000000 + INPUT CARD>P 1 + INPUT CARD> 1 0.2140000000 1.000000000 + INPUT CARD>D 1 1. + INPUT CARD>1 0.98500000000 1.00000000 + INPUT CARD> + INPUT CARD>C 6 0. 0. 1.47 + INPUT CARD> S 5 + INPUT CARD> 1 8.1380377 0.11795918E-01 + INPUT CARD> 2 3.3151758 -0.15198125 + INPUT CARD> 3 0.66827631 0.27552348 + INPUT CARD> 4 0.29176766 0.54864514 + INPUT CARD> 5 0.11411349 0.30121511 + INPUT CARD> S 1 + INPUT CARD> 1 0.9059000000 1.000000000 + INPUT CARD> S 1 + INPUT CARD> 1 0.1285000000 1.000000000 + INPUT CARD> P 5 + INPUT CARD> 1 8.5281305 0.23512401E-01 + INPUT CARD> 2 2.9014509 0.11648574 + INPUT CARD> 3 0.94312090 0.32777384 + INPUT CARD> 4 0.31558555 0.49260154 + + ..... DONE SETTING UP THE RUN ..... + 1000000 WORDS OF MEMORY AVAILABLE + + + RUN TITLE + --------- + + + THE POINT GROUP OF THE MOLECULE IS C1 + THE ORDER OF THE PRINCIPAL AXIS IS 0 + *** WARNING! ATOM 2 SHELL 8 TYPE S HAS NORMALIZATION 0.99999875 + *** WARNING! ATOM 2 SHELL 11 TYPE P HAS NORMALIZATION 1.00002537 + + ATOM ATOMIC COORDINATES (BOHR) + CHARGE X Y Z + O 8.0 0.0000000000 0.0000000000 0.0000000000 + C 6.0 0.0000000000 0.0000000000 2.7778972020 + + INTERNUCLEAR DISTANCES (ANGS.) + ------------------------------ + + O C + + 1 O 0.0000000 1.4700000 * + 2 C 1.4700000 * 0.0000000 + + * ... LESS THAN 3.000 + + + ATOMIC BASIS SET + ---------------- + THE CONTRACTED PRIMITIVE FUNCTIONS HAVE BEEN UNNORMALIZED + THE CONTRACTED BASIS FUNCTIONS ARE NOW NORMALIZED TO UNITY + + SHELL TYPE PRIMITIVE EXPONENT CONTRACTION COEFFICIENTS + + O + + 1 S 1 64.2325670 -0.000146284806 + 1 S 2 44.2294580 0.000232571658 + 1 S 3 14.4012840 0.014522921502 + 1 S 4 6.2716241 -0.159288494863 + 1 S 5 2.8360343 0.017170056239 + 1 S 6 1.1159210 0.387280886713 + 1 S 7 0.4530391 0.534404314403 + 1 S 8 0.1800000 0.195875516512 + + 2 S 9 0.7520000 1.000000000000 + + 3 S 10 0.2384000 1.000000000000 + + 4 P 11 23.5159210 0.006185522138 + 4 P 12 14.9592690 -0.001429661928 + 4 P 13 11.1499140 0.049362221280 + 4 P 14 4.5494628 0.119429054746 + 4 P 15 2.0155363 0.232565396550 + 4 P 16 0.8786699 0.354109229087 + 4 P 17 0.3557349 0.352406244760 + 4 P 18 0.1343186 0.144049621876 + + 5 P 19 0.7156000 1.000000000000 + + 6 P 20 0.2140000 1.000000000000 + + 7 D 21 0.9850000 1.000000000000 + + C + + 8 S 22 8.1380377 0.011795903264 + 8 S 23 3.3151758 -0.151981060139 + 8 S 24 0.6682763 0.275523135804 + 8 S 25 0.2917677 0.548644454609 + 8 S 26 0.1141135 0.301214733709 + + 9 S 27 0.9059000 1.000000000000 + + 10 S 28 0.1285000 1.000000000000 + + 11 P 29 8.5281305 0.023512997445 + 11 P 30 2.9014509 0.116488694925 + 11 P 31 0.9431209 0.327782154726 + 11 P 32 0.3155856 0.492614035954 + 11 P 33 0.1039361 0.273131208416 + + 12 P 34 0.3827000 1.000000000000 + + 13 P 35 0.1209000 1.000000000000 + + 14 D 36 0.5500000 1.000000000000 + + TOTAL NUMBER OF BASIS SET SHELLS = 14 + NUMBER OF CARTESIAN GAUSSIAN BASIS FUNCTIONS = 36 + NUMBER OF ELECTRONS = 14 + CHARGE OF MOLECULE = 0 + SPIN MULTIPLICITY = 1 + NUMBER OF OCCUPIED ORBITALS (ALPHA) = 7 + NUMBER OF OCCUPIED ORBITALS (BETA ) = 7 + TOTAL NUMBER OF ATOMS = 2 + THE NUCLEAR REPULSION ENERGY IS 17.2792571180 + NOTE THIS RUN IS USING CORE POTENTIALS, AND THE NUMBER OF ELECTRONS, + OCCUPIED ORBITALS, AND NUCLEAR REPULSION ENERGY WILL BE ADJUSTED BELOW + AFTER REMOVAL OF THE CORE CHARGES. + + THIS MOLECULE IS RECOGNIZED AS BEING LINEAR. + + $CONTRL OPTIONS + --------------- + SCFTYP=RHF RUNTYP=ENERGY EXETYP=RUN + MPLEVL= 0 CITYP =NONE CCTYP =NONE + MULT = 1 ICHARG= 0 NZVAR = 0 COORD =UNIQUE + ECP =READ RELWFN=NONE LOCAL =NONE + ISPHER= -1 NOSYM = 0 MAXIT = 30 UNITS =ANGS + PLTORB= F MOLPLT= F AIMPAC= F FRIEND= + NPRINT= 7 IREST = 0 GEOM =INPUT + NORMF = 0 NORMP = 0 ITOL = 20 ICUT = 9 + INTTYP=POPLE QMTTOL= 1.0E-06 + + $SYSTEM OPTIONS + --------------- + REPLICATED MEMORY= 1000000 WORDS (ON EVERY NODE). + DISTRIBUTED MEMDDI= 0 MILLION WORDS IN AGGREGATE, + MEMDDI DISTRIBUTED OVER 1 PROCESSORS IS 0 WORDS/PROCESSOR. + TOTAL MEMORY REQUESTED ON EACH PROCESSOR= 1000000 WORDS. + TIMLIM= 36000.0 SECONDS. + COREFL=F KDIAG= 0 + + -------------- + ECP POTENTIALS + -------------- + + PARAMETERS FOR "O-LN2 " ON ATOM 1 WITH ZCORE 2 AND LMAX 1 ARE + FOR L= 1 COEFF N ZETA + 1 -33.78808 2 15.21685 + 2 -3.39404 2 128.50999 + 3 -7.80349 2 38.17253 + 4 -1.77250 2 540.59047 + 5 3.92317 2 8.69743 + 6 -0.93913 2 3211.15414 + 7 6.00000 1 15.00000 + FOR L= 0 COEFF N ZETA + 1 29.11024 2 10.04485 + 2 47.72885 2 10.23785 + 3 -21.41039 2 8.77094 + + PARAMETERS FOR "C-LES " ON ATOM 2 WITH ZCORE 2 AND LMAX 1 ARE + FOR L= 1 COEFF N ZETA + 1 -16.75549 2 7.71902 + 2 -0.31894 2 2184.31540 + 3 -2.90450 2 20.77701 + 4 -1.24270 2 76.39483 + 5 -0.60199 2 351.76123 + 6 0.21814 2 3.95786 + 7 4.00000 1 5.99247 + FOR L= 0 COEFF N ZETA + 1 27.00696 2 5.74119 + 2 8.57270 2 5.12564 + 3 -6.33646 2 4.68310 + + THE ECP RUN REMOVES 4 CORE ELECTRONS, AND THE SAME NUMBER OF PROTONS. + NUMBER OF ELECTRONS KEPT IN THE CALCULATION IS = 10 + NUMBER OF OCCUPIED ORBITALS (ALPHA) KEPT IS = 5 + NUMBER OF OCCUPIED ORBITALS (BETA ) KEPT IS = 5 + THE ADJUSTED NUCLEAR REPULSION ENERGY= 8.6396285590 + ECP ANGULAR INTS......... 0.00 SECONDS + + ---------------- + PROPERTIES INPUT + ---------------- + + MOMENTS FIELD POTENTIAL DENSITY + IEMOM = 1 IEFLD = 0 IEPOT = 0 IEDEN = 0 + WHERE =COMASS WHERE =NUCLEI WHERE =NUCLEI WHERE =NUCLEI + OUTPUT=BOTH OUTPUT=BOTH OUTPUT=BOTH OUTPUT=BOTH + IEMINT= 0 IEFINT= 0 IEDINT= 0 + MORB = 0 + EXTRAPOLATION IN EFFECT + SOSCF IN EFFECT + + ------------------------------- + INTEGRAL TRANSFORMATION OPTIONS + ------------------------------- + NWORD = 0 CUTOFF = 1.0E-09 + MPTRAN = 0 DIRTRF = F + AOINTS =DUP + + ---------------------- + INTEGRAL INPUT OPTIONS + ---------------------- + NOPK = 1 NORDER= 0 SCHWRZ= F + + ------------------------------------------ + THE POINT GROUP IS C1 , NAXIS= 0, ORDER= 1 + ------------------------------------------ + + DIMENSIONS OF THE SYMMETRY SUBSPACES ARE + A = 36 + + ..... DONE SETTING UP THE RUN ..... + STEP CPU TIME = 0.02 TOTAL CPU TIME = 0.0 ( 0.0 MIN) + TOTAL WALL CLOCK TIME= 0.0 SECONDS, CPU UTILIZATION IS 66.67% + + ******************** + 1 ELECTRON INTEGRALS + ******************** + TIME TO DO ORDINARY INTEGRALS= 0.00 + TIME TO DO ECP INTEGRALS= 0.02 + ...... END OF ONE-ELECTRON INTEGRALS ...... + STEP CPU TIME = 0.02 TOTAL CPU TIME = 0.0 ( 0.0 MIN) + TOTAL WALL CLOCK TIME= 0.0 SECONDS, CPU UTILIZATION IS 80.00% + + ------------- + GUESS OPTIONS + ------------- + GUESS =HUCKEL NORB = 0 NORDER= 0 + MIX = F PRTMO = F PUNMO = F + TOLZ = 1.0E-08 TOLE = 1.0E-05 + SYMDEN= F PURIFY= F + + INITIAL GUESS ORBITALS GENERATED BY HUCKEL ROUTINE. + HUCKEL GUESS REQUIRES 11588 WORDS. + + SYMMETRIES FOR INITIAL GUESS ORBITALS FOLLOW. BOTH SET(S). + 5 ORBITALS ARE OCCUPIED ( 0 CORE ORBITALS). + 1=A 2=A 3=A 4=A 5=A 6=A 7=A + 8=A 9=A 10=A 11=A 12=A 13=A 14=A + 15=A + ...... END OF INITIAL ORBITAL SELECTION ...... + STEP CPU TIME = 0.02 TOTAL CPU TIME = 0.1 ( 0.0 MIN) + TOTAL WALL CLOCK TIME= 0.1 SECONDS, CPU UTILIZATION IS 85.71% + + -------------------- + 2 ELECTRON INTEGRALS + -------------------- + + THE -PK- OPTION IS OFF, THE INTEGRALS ARE NOT IN SUPERMATRIX FORM. + STORING 15000 INTEGRALS/RECORD ON DISK, USING 12 BYTES/INTEGRAL. + TWO ELECTRON INTEGRAL EVALUATION REQUIRES 60801 WORDS OF MEMORY. + II,JST,KST,LST = 1 1 1 1 NREC = 1 INTLOC = 1 + II,JST,KST,LST = 2 1 1 1 NREC = 1 INTLOC = 2 + II,JST,KST,LST = 3 1 1 1 NREC = 1 INTLOC = 7 + II,JST,KST,LST = 4 1 1 1 NREC = 1 INTLOC = 22 + II,JST,KST,LST = 5 1 1 1 NREC = 1 INTLOC = 67 + II,JST,KST,LST = 6 1 1 1 NREC = 1 INTLOC = 214 + II,JST,KST,LST = 7 1 1 1 NREC = 1 INTLOC = 571 + II,JST,KST,LST = 8 1 1 1 NREC = 1 INTLOC = 2257 + II,JST,KST,LST = 9 1 1 1 NREC = 1 INTLOC = 3338 + II,JST,KST,LST = 10 1 1 1 NREC = 1 INTLOC = 4639 + II,JST,KST,LST = 11 1 1 1 NREC = 1 INTLOC = 6193 + II,JST,KST,LST = 12 1 1 1 NREC = 1 INTLOC =11262 + II,JST,KST,LST = 13 1 1 1 NREC = 2 INTLOC = 3434 + II,JST,KST,LST = 14 1 1 1 NREC = 2 INTLOC =13192 + TOTAL NUMBER OF NONZERO TWO-ELECTRON INTEGRALS = 57351 + 4 INTEGRAL RECORDS WERE STORED ON DISK FILE 8. + ...... END OF TWO-ELECTRON INTEGRALS ..... + STEP CPU TIME = 0.37 TOTAL CPU TIME = 0.4 ( 0.0 MIN) + TOTAL WALL CLOCK TIME= 0.4 SECONDS, CPU UTILIZATION IS 97.73% + + -------------------------- + RHF SCF CALCULATION + -------------------------- + + NUCLEAR ENERGY = 8.6396285590 + MAXIT = 30 NPUNCH= 2 + EXTRAP=T DAMP=F SHIFT=F RSTRCT=F DIIS=F DEM=F SOSCF=T + DENSITY CONV= 1.00E-05 + SOSCF WILL OPTIMIZE 155 ORBITAL ROTATIONS, SOGTOL= 0.250 + MEMORY REQUIRED FOR RHF STEP= 40196 WORDS. + + ITER EX DEM TOTAL ENERGY E CHANGE DENSITY CHANGE ORB. GRAD + 1 0 0 -20.787514337 -20.787514337 1.047812351 0.000000000 + ---------------START SECOND ORDER SCF--------------- + 2 1 0 -21.062629796 -0.275115459 0.190166927 0.039535364 + 3 2 0 -21.066191697 -0.003561901 0.113702255 0.041297520 + 4 3 0 -21.080139856 -0.013948159 0.023123199 0.006243254 + 5 4 0 -21.080535295 -0.000395438 0.028514925 0.002458162 + 6 5 0 -21.080704373 -0.000169078 0.008220488 0.001354053 + 7 6 0 -21.080724101 -0.000019728 0.002576013 0.000552632 + 8 7 0 -21.080726931 -0.000002830 0.000291863 0.000059903 + 9 8 0 -21.080726975 -0.000000043 0.000054156 0.000008103 + 10 9 0 -21.080726976 -0.000000001 0.000006144 0.000001801 + 11 10 0 -21.080726976 0.000000000 0.000002160 0.000000262 + + ----------------- + DENSITY CONVERGED + ----------------- + TIME TO FORM FOCK OPERATORS= 0.1 SECONDS ( 0.0 SEC/ITER) + TIME TO SOLVE SCF EQUATIONS= 0.0 SECONDS ( 0.0 SEC/ITER) + + FINAL RHF ENERGY IS -21.0807269756 AFTER 11 ITERATIONS + + ------------ + EIGENVECTORS + ------------ + + 1 2 3 4 5 + -1.3314 -0.7948 -0.5513 -0.5248 -0.5248 + A A A A A + 1 O 1 S 0.880097 -0.408116 0.107043 0.000000 0.000000 + 2 O 1 S -0.011673 -0.004560 0.001995 0.000000 0.000000 + 3 O 1 S -0.025998 -0.078629 0.054455 0.000000 0.000000 + 4 O 1 X 0.000000 0.000000 0.000000 0.812535 -0.083448 + 5 O 1 Y 0.000000 0.000000 0.000000 0.083448 0.812535 + 6 O 1 Z 0.104983 0.424294 -0.597477 0.000000 0.000000 + 7 O 1 X 0.000000 0.000000 0.000000 0.001329 -0.000137 + 8 O 1 Y 0.000000 0.000000 0.000000 0.000137 0.001329 + 9 O 1 Z 0.008834 -0.002119 0.005309 0.000000 0.000000 + 10 O 1 X 0.000000 0.000000 0.000000 0.052013 -0.005342 + 11 O 1 Y 0.000000 0.000000 0.000000 0.005342 0.052013 + 12 O 1 Z -0.020384 -0.032440 -0.004985 0.000000 0.000000 + 13 O 1 XX -0.004261 -0.004047 0.005887 0.000000 0.000000 + 14 O 1 YY -0.004261 -0.004047 0.005887 0.000000 0.000000 + 15 O 1 ZZ 0.014104 0.020787 -0.022518 0.000000 0.000000 + 16 O 1 XY 0.000000 0.000000 0.000000 0.000000 0.000000 + 17 O 1 XZ 0.000000 0.000000 0.000000 0.024560 -0.002522 + 18 O 1 YZ 0.000000 0.000000 0.000000 0.002522 0.024560 + 19 C 2 S 0.318545 0.861460 0.399500 0.000000 0.000000 + 20 C 2 S -0.003333 0.018239 -0.000573 0.000000 0.000000 + 21 C 2 S -0.091352 -0.111361 0.149073 0.000000 0.000000 + 22 C 2 X 0.000000 0.000000 0.000000 0.344944 -0.035426 + 23 C 2 Y 0.000000 0.000000 0.000000 0.035426 0.344944 + 24 C 2 Z -0.189832 -0.002581 0.687578 0.000000 0.000000 + 25 C 2 X 0.000000 0.000000 0.000000 0.010656 -0.001094 + 26 C 2 Y 0.000000 0.000000 0.000000 0.001094 0.010656 + 27 C 2 Z 0.005925 -0.007927 -0.007233 0.000000 0.000000 + 28 C 2 X 0.000000 0.000000 0.000000 -0.015462 0.001588 + 29 C 2 Y 0.000000 0.000000 0.000000 -0.001588 -0.015462 + 30 C 2 Z 0.062392 0.033921 -0.122531 0.000000 0.000000 + 31 C 2 XX -0.013776 0.003030 0.009882 0.000000 0.000000 + 32 C 2 YY -0.013776 0.003030 0.009882 0.000000 0.000000 + 33 C 2 ZZ 0.026331 0.019953 -0.045406 0.000000 0.000000 + 34 C 2 XY 0.000000 0.000000 0.000000 0.000000 0.000000 + 35 C 2 XZ 0.000000 0.000000 0.000000 -0.044476 0.004568 + 36 C 2 YZ 0.000000 0.000000 0.000000 -0.004568 -0.044476 + + 6 7 8 9 10 + 0.0281 0.0281 0.2493 0.3954 0.4390 + A A A A A + 1 O 1 S 0.000000 0.000000 0.372358 -0.086580 0.000000 + 2 O 1 S 0.000000 0.000000 -0.104709 0.015801 0.000000 + 3 O 1 S 0.000000 0.000000 1.165850 -0.447993 0.000000 + 4 O 1 X -0.360336 -0.295530 0.000000 0.000000 -0.009603 + 5 O 1 Y 0.295530 -0.360336 0.000000 0.000000 -0.011013 + 6 O 1 Z 0.000000 0.000000 0.397687 0.099267 0.000000 + 7 O 1 X 0.015873 0.013018 0.000000 0.000000 -0.005562 + 8 O 1 Y -0.013018 0.015873 0.000000 0.000000 -0.006379 + 9 O 1 Z 0.000000 0.000000 -0.032758 0.026635 0.000000 + 10 O 1 X -0.138092 -0.113256 0.000000 0.000000 -0.077474 + 11 O 1 Y 0.113256 -0.138092 0.000000 0.000000 -0.088847 + 12 O 1 Z 0.000000 0.000000 0.567740 -0.277864 0.000000 + 13 O 1 XX 0.000000 0.000000 -0.034607 0.013372 0.000000 + 14 O 1 YY 0.000000 0.000000 -0.034607 0.013372 0.000000 + 15 O 1 ZZ 0.000000 0.000000 -0.026042 -0.010586 0.000000 + 16 O 1 XY 0.000000 0.000000 0.000000 0.000000 0.000000 + 17 O 1 XZ 0.006284 0.005153 0.000000 0.000000 -0.012791 + 18 O 1 YZ -0.005153 0.006284 0.000000 0.000000 -0.014669 + 19 C 2 S 0.000000 0.000000 -0.275829 -0.549922 0.000000 + 20 C 2 S 0.000000 0.000000 0.024490 -0.494035 0.000000 + 21 C 2 S 0.000000 0.000000 -0.957011 2.287154 0.000000 + 22 C 2 X 0.602073 0.493790 0.000000 0.000000 -0.456434 + 23 C 2 Y -0.493790 0.602073 0.000000 0.000000 -0.523437 + 24 C 2 Z 0.000000 0.000000 0.396722 -0.154949 0.000000 + 25 C 2 X -0.020707 -0.016983 0.000000 0.000000 -0.367531 + 26 C 2 Y 0.016983 -0.020707 0.000000 0.000000 -0.421483 + 27 C 2 Z 0.000000 0.000000 -0.039264 -0.217047 0.000000 + 28 C 2 X 0.237833 0.195059 0.000000 0.000000 0.982760 + 29 C 2 Y -0.195059 0.237833 0.000000 0.000000 1.127025 + 30 C 2 Z 0.000000 0.000000 1.274996 0.094736 0.000000 + 31 C 2 XX 0.000000 0.000000 0.007605 -0.416055 0.000000 + 32 C 2 YY 0.000000 0.000000 0.007605 -0.416055 0.000000 + 33 C 2 ZZ 0.000000 0.000000 0.037676 -0.389444 0.000000 + 34 C 2 XY 0.000000 0.000000 0.000000 0.000000 0.000000 + 35 C 2 XZ 0.008399 0.006889 0.000000 0.000000 0.017822 + 36 C 2 YZ -0.006889 0.008399 0.000000 0.000000 0.020438 + + 11 12 13 14 15 + 0.4390 0.5032 0.7781 0.8475 0.8475 + A A A A A + 1 O 1 S 0.000000 -0.136224 0.166862 0.000000 0.000000 + 2 O 1 S 0.000000 -0.101427 0.121721 0.000000 0.000000 + 3 O 1 S 0.000000 0.580093 0.070923 0.000000 0.000000 + 4 O 1 X -0.011013 0.000000 0.000000 -0.651267 0.101915 + 5 O 1 Y 0.009603 0.000000 0.000000 -0.101915 -0.651267 + 6 O 1 Z 0.000000 -0.487223 -0.561886 0.000000 0.000000 + 7 O 1 X -0.006379 0.000000 0.000000 -0.482521 0.075508 + 8 O 1 Y 0.005562 0.000000 0.000000 -0.075508 -0.482521 + 9 O 1 Z 0.000000 -0.017722 -0.401535 0.000000 0.000000 + 10 O 1 X -0.088847 0.000000 0.000000 1.572269 -0.246039 + 11 O 1 Y 0.077474 0.000000 0.000000 0.246039 1.572269 + 12 O 1 Z 0.000000 -0.102504 1.738820 0.000000 0.000000 + 13 O 1 XX 0.000000 -0.041699 0.033510 0.000000 0.000000 + 14 O 1 YY 0.000000 -0.041699 0.033510 0.000000 0.000000 + 15 O 1 ZZ 0.000000 0.013425 0.057693 0.000000 0.000000 + 16 O 1 XY 0.000000 0.000000 0.000000 0.000000 0.000000 + 17 O 1 XZ -0.014669 0.000000 0.000000 -0.017845 0.002793 + 18 O 1 YZ 0.012791 0.000000 0.000000 -0.002793 -0.017845 + 19 C 2 S 0.000000 0.335738 0.004433 0.000000 0.000000 + 20 C 2 S 0.000000 0.159107 -0.183289 0.000000 0.000000 + 21 C 2 S 0.000000 -0.597425 -0.335398 0.000000 0.000000 + 22 C 2 X -0.523437 0.000000 0.000000 0.107822 -0.016873 + 23 C 2 Y 0.456434 0.000000 0.000000 0.016873 0.107822 + 24 C 2 Z 0.000000 -0.928539 -0.158323 0.000000 0.000000 + 25 C 2 X -0.421483 0.000000 0.000000 -0.069445 0.010867 + 26 C 2 Y 0.367531 0.000000 0.000000 -0.010867 -0.069445 + 27 C 2 Z 0.000000 -0.429836 0.342693 0.000000 0.000000 + 28 C 2 X 1.127025 0.000000 0.000000 -0.455451 0.071272 + 29 C 2 Y -0.982760 0.000000 0.000000 -0.071272 -0.455451 + 30 C 2 Z 0.000000 1.451770 0.175929 0.000000 0.000000 + 31 C 2 XX 0.000000 0.142753 -0.048705 0.000000 0.000000 + 32 C 2 YY 0.000000 0.142753 -0.048705 0.000000 0.000000 + 33 C 2 ZZ 0.000000 0.043800 -0.356169 0.000000 0.000000 + 34 C 2 XY 0.000000 0.000000 0.000000 0.000000 0.000000 + 35 C 2 XZ 0.020438 0.000000 0.000000 0.006664 -0.001043 + 36 C 2 YZ -0.017822 0.000000 0.000000 0.001043 0.006664 + + 16 17 18 19 20 + 1.1791 1.3169 1.3169 1.3712 1.3712 + A A A A A + 1 O 1 S -0.354722 0.000000 0.000000 0.000000 0.000000 + 2 O 1 S -1.417668 0.000000 0.000000 0.000000 0.000000 + 3 O 1 S 4.219297 0.000000 0.000000 0.000000 0.000000 + 4 O 1 X 0.000000 0.000000 0.000000 0.081912 0.135301 + 5 O 1 Y 0.000000 0.000000 0.000000 0.135301 -0.081912 + 6 O 1 Z -0.107298 0.000000 0.000000 0.000000 0.000000 + 7 O 1 X 0.000000 0.000000 0.000000 -0.042015 -0.069399 + 8 O 1 Y 0.000000 0.000000 0.000000 -0.069399 0.042015 + 9 O 1 Z -0.121544 0.000000 0.000000 0.000000 0.000000 + 10 O 1 X 0.000000 0.000000 0.000000 0.158030 0.261031 + 11 O 1 Y 0.000000 0.000000 0.000000 0.261031 -0.158030 + 12 O 1 Z 1.545703 0.000000 0.000000 0.000000 0.000000 + 13 O 1 XX -0.271252 -0.000012 0.064841 0.000000 0.000000 + 14 O 1 YY -0.271252 0.000012 -0.064841 0.000000 0.000000 + 15 O 1 ZZ -0.315979 0.000000 0.000000 0.000000 0.000000 + 16 O 1 XY 0.000000 0.074871 0.000014 0.000000 0.000000 + 17 O 1 XZ 0.000000 0.000000 0.000000 -0.094412 -0.155948 + 18 O 1 YZ 0.000000 0.000000 0.000000 -0.155948 0.094412 + 19 C 2 S 0.051449 0.000000 0.000000 0.000000 0.000000 + 20 C 2 S -0.053260 0.000000 0.000000 0.000000 0.000000 + 21 C 2 S -1.863232 0.000000 0.000000 0.000000 0.000000 + 22 C 2 X 0.000000 0.000000 0.000000 0.067920 0.112189 + 23 C 2 Y 0.000000 0.000000 0.000000 0.112189 -0.067920 + 24 C 2 Z -0.082228 0.000000 0.000000 0.000000 0.000000 + 25 C 2 X 0.000000 0.000000 0.000000 -0.013302 -0.021972 + 26 C 2 Y 0.000000 0.000000 0.000000 -0.021972 0.013302 + 27 C 2 Z 0.617338 0.000000 0.000000 0.000000 0.000000 + 28 C 2 X 0.000000 0.000000 0.000000 -0.129676 -0.214197 + 29 C 2 Y 0.000000 0.000000 0.000000 -0.214197 0.129676 + 30 C 2 Z 1.152889 0.000000 0.000000 0.000000 0.000000 + 31 C 2 XX -0.006418 -0.000165 0.859926 0.000000 0.000000 + 32 C 2 YY -0.006418 0.000165 -0.859926 0.000000 0.000000 + 33 C 2 ZZ -0.246908 0.000000 0.000000 0.000000 0.000000 + 34 C 2 XY 0.000000 0.992957 0.000191 0.000000 0.000000 + 35 C 2 XZ 0.000000 0.000000 0.000000 0.506531 0.836680 + 36 C 2 YZ 0.000000 0.000000 0.000000 0.836680 -0.506531 + + 21 22 23 24 25 + 1.7074 2.1841 2.1841 2.3461 2.5052 + A A A A A + 1 O 1 S 0.112367 0.000000 0.000000 -0.014917 0.000000 + 2 O 1 S -0.075400 0.000000 0.000000 0.010698 0.000000 + 3 O 1 S 0.888201 0.000000 0.000000 -0.314818 0.000000 + 4 O 1 X 0.000000 0.154669 -0.008364 0.000000 0.000000 + 5 O 1 Y 0.000000 0.008364 0.154669 0.000000 0.000000 + 6 O 1 Z 0.397033 0.000000 0.000000 -0.059179 0.000000 + 7 O 1 X 0.000000 -0.052006 0.002812 0.000000 0.000000 + 8 O 1 Y 0.000000 -0.002812 -0.052006 0.000000 0.000000 + 9 O 1 Z 0.201142 0.000000 0.000000 -0.070866 0.000000 + 10 O 1 X 0.000000 -0.158534 0.008573 0.000000 0.000000 + 11 O 1 Y 0.000000 -0.008573 -0.158534 0.000000 0.000000 + 12 O 1 Z -0.136856 0.000000 0.000000 -0.113622 0.000000 + 13 O 1 XX 0.035325 0.000000 0.000000 -0.029348 -0.000152 + 14 O 1 YY 0.035325 0.000000 0.000000 -0.029348 0.000152 + 15 O 1 ZZ -0.084951 0.000000 0.000000 0.046218 0.000000 + 16 O 1 XY 0.000000 0.000000 0.000000 0.000000 0.998809 + 17 O 1 XZ 0.000000 -0.193255 0.010450 0.000000 0.000000 + 18 O 1 YZ 0.000000 -0.010450 -0.193255 0.000000 0.000000 + 19 C 2 S -0.371717 0.000000 0.000000 2.617463 0.000000 + 20 C 2 S 0.115490 0.000000 0.000000 -0.148994 0.000000 + 21 C 2 S -0.638361 0.000000 0.000000 -0.114225 0.000000 + 22 C 2 X 0.000000 3.480035 -0.188182 0.000000 0.000000 + 23 C 2 Y 0.000000 0.188182 3.480035 0.000000 0.000000 + 24 C 2 Z 1.013230 0.000000 0.000000 2.420052 0.000000 + 25 C 2 X 0.000000 -3.119281 0.168674 0.000000 0.000000 + 26 C 2 Y 0.000000 -0.168674 -3.119281 0.000000 0.000000 + 27 C 2 Z -0.772603 0.000000 0.000000 -2.293789 0.000000 + 28 C 2 X 0.000000 -0.578342 0.031274 0.000000 0.000000 + 29 C 2 Y 0.000000 -0.031274 -0.578342 0.000000 0.000000 + 30 C 2 Z 0.356099 0.000000 0.000000 -0.591008 0.000000 + 31 C 2 XX 0.743988 0.000000 0.000000 -1.126873 0.000020 + 32 C 2 YY 0.743988 0.000000 0.000000 -1.126873 -0.000020 + 33 C 2 ZZ -0.899601 0.000000 0.000000 -0.863452 0.000000 + 34 C 2 XY 0.000000 0.000000 0.000000 0.000000 -0.131384 + 35 C 2 XZ 0.000000 -0.136571 0.007385 0.000000 0.000000 + 36 C 2 YZ 0.000000 -0.007385 -0.136571 0.000000 0.000000 + + 26 27 28 29 30 + 2.5052 2.5597 2.8191 2.8191 3.3247 + A A A A A + 1 O 1 S 0.000000 -0.197030 0.000000 0.000000 0.020173 + 2 O 1 S 0.000000 -0.145840 0.000000 0.000000 -0.385424 + 3 O 1 S 0.000000 0.050651 0.000000 0.000000 1.878592 + 4 O 1 X 0.000000 0.000000 0.065697 -0.011447 0.000000 + 5 O 1 Y 0.000000 0.000000 0.011447 0.065697 0.000000 + 6 O 1 Z 0.000000 -0.158918 0.000000 0.000000 1.158176 + 7 O 1 X 0.000000 0.000000 -0.083564 0.014561 0.000000 + 8 O 1 Y 0.000000 0.000000 -0.014561 -0.083564 0.000000 + 9 O 1 Z 0.000000 -0.294345 0.000000 0.000000 -0.670456 + 10 O 1 X 0.000000 0.000000 0.221227 -0.038548 0.000000 + 11 O 1 Y 0.000000 0.000000 0.038548 0.221227 0.000000 + 12 O 1 Z 0.000000 -0.034479 0.000000 0.000000 0.910854 + 13 O 1 XX 0.864994 -0.190246 0.000000 0.000000 -0.590735 + 14 O 1 YY -0.864994 -0.190246 0.000000 0.000000 -0.590735 + 15 O 1 ZZ 0.000000 0.306651 0.000000 0.000000 1.104429 + 16 O 1 XY 0.000176 0.000000 0.000000 0.000000 0.000000 + 17 O 1 XZ 0.000000 0.000000 1.006792 -0.175430 0.000000 + 18 O 1 YZ 0.000000 0.000000 0.175430 1.006792 0.000000 + 19 C 2 S 0.000000 -2.269282 0.000000 0.000000 0.916099 + 20 C 2 S 0.000000 0.070584 0.000000 0.000000 -0.200271 + 21 C 2 S 0.000000 0.537677 0.000000 0.000000 -1.044847 + 22 C 2 X 0.000000 0.000000 0.921671 -0.160598 0.000000 + 23 C 2 Y 0.000000 0.000000 0.160598 0.921671 0.000000 + 24 C 2 Z 0.000000 2.369147 0.000000 0.000000 -1.309474 + 25 C 2 X 0.000000 0.000000 -0.979466 0.170668 0.000000 + 26 C 2 Y 0.000000 0.000000 -0.170668 -0.979466 0.000000 + 27 C 2 Z 0.000000 -2.259070 0.000000 0.000000 2.198210 + 28 C 2 X 0.000000 0.000000 -0.259531 0.045222 0.000000 + 29 C 2 Y 0.000000 0.000000 -0.045222 -0.259531 0.000000 + 30 C 2 Z 0.000000 -0.554001 0.000000 0.000000 0.638522 + 31 C 2 XX -0.113782 0.752008 0.000000 0.000000 -0.260867 + 32 C 2 YY 0.113782 0.752008 0.000000 0.000000 -0.260867 + 33 C 2 ZZ 0.000000 1.191784 0.000000 0.000000 -1.358714 + 34 C 2 XY -0.000023 0.000000 0.000000 0.000000 0.000000 + 35 C 2 XZ 0.000000 0.000000 0.462690 -0.080622 0.000000 + 36 C 2 YZ 0.000000 0.000000 0.080622 0.462690 0.000000 + + 31 32 33 34 35 + 4.1233 4.1233 4.4285 4.8634 11.6175 + A A A A A + 1 O 1 S 0.000000 0.000000 2.235002 -2.294409 -0.008731 + 2 O 1 S 0.000000 0.000000 -0.557164 0.381552 0.002141 + 3 O 1 S 0.000000 0.000000 1.269076 0.102861 0.083408 + 4 O 1 X -0.087569 3.203031 0.000000 0.000000 0.000000 + 5 O 1 Y 3.203031 0.087569 0.000000 0.000000 0.000000 + 6 O 1 Z 0.000000 0.000000 -2.149895 -2.242029 0.019455 + 7 O 1 X 0.083062 -3.038163 0.000000 0.000000 0.000000 + 8 O 1 Y -3.038163 -0.083062 0.000000 0.000000 0.000000 + 9 O 1 Z 0.000000 0.000000 2.216262 2.583766 0.061632 + 10 O 1 X 0.011540 -0.422108 0.000000 0.000000 0.000000 + 11 O 1 Y -0.422108 -0.011540 0.000000 0.000000 0.000000 + 12 O 1 Z 0.000000 0.000000 1.009552 0.450466 0.071126 + 13 O 1 XX 0.000000 0.000000 -1.152779 0.835593 -0.010756 + 14 O 1 YY 0.000000 0.000000 -1.152779 0.835593 -0.010756 + 15 O 1 ZZ 0.000000 0.000000 -0.519222 1.482753 0.060913 + 16 O 1 XY 0.000000 0.000000 0.000000 0.000000 0.000000 + 17 O 1 XZ 0.000441 -0.016115 0.000000 0.000000 0.000000 + 18 O 1 YZ -0.016115 -0.000441 0.000000 0.000000 0.000000 + 19 C 2 S 0.000000 0.000000 0.239517 0.582593 11.267794 + 20 C 2 S 0.000000 0.000000 -0.061667 -0.080128 -3.717872 + 21 C 2 S 0.000000 0.000000 -0.736173 0.148105 -4.502970 + 22 C 2 X 0.007037 -0.257384 0.000000 0.000000 0.000000 + 23 C 2 Y -0.257384 -0.007037 0.000000 0.000000 0.000000 + 24 C 2 Z 0.000000 0.000000 -0.383665 -0.701036 -0.104908 + 25 C 2 X -0.007987 0.292147 0.000000 0.000000 0.000000 + 26 C 2 Y 0.292147 0.007987 0.000000 0.000000 0.000000 + 27 C 2 Z 0.000000 0.000000 0.919547 1.304882 0.181641 + 28 C 2 X 0.003721 -0.136092 0.000000 0.000000 0.000000 + 29 C 2 Y -0.136092 -0.003721 0.000000 0.000000 0.000000 + 30 C 2 Z 0.000000 0.000000 0.510950 -0.056066 0.035934 + 31 C 2 XX 0.000000 0.000000 0.009235 -0.078838 -2.063863 + 32 C 2 YY 0.000000 0.000000 0.009235 -0.078838 -2.063863 + 33 C 2 ZZ 0.000000 0.000000 -0.655708 -1.056158 -2.162592 + 34 C 2 XY 0.000000 0.000000 0.000000 0.000000 0.000000 + 35 C 2 XZ 0.001850 -0.067652 0.000000 0.000000 0.000000 + 36 C 2 YZ -0.067652 -0.001850 0.000000 0.000000 0.000000 + + 36 + 22.5098 + A + 1 O 1 S 12.598991 + 2 O 1 S -7.771338 + 3 O 1 S -4.365777 + 4 O 1 X 0.000000 + 5 O 1 Y 0.000000 + 6 O 1 Z 0.056688 + 7 O 1 X 0.000000 + 8 O 1 Y 0.000000 + 9 O 1 Z -0.096959 + 10 O 1 X 0.000000 + 11 O 1 Y 0.000000 + 12 O 1 Z 0.117525 + 13 O 1 XX -0.465746 + 14 O 1 YY -0.465746 + 15 O 1 ZZ -0.470127 + 16 O 1 XY 0.000000 + 17 O 1 XZ 0.000000 + 18 O 1 YZ 0.000000 + 19 C 2 S -0.031855 + 20 C 2 S 0.008886 + 21 C 2 S -0.239351 + 22 C 2 X 0.000000 + 23 C 2 Y 0.000000 + 24 C 2 Z 0.064303 + 25 C 2 X 0.000000 + 26 C 2 Y 0.000000 + 27 C 2 Z -0.061852 + 28 C 2 X 0.000000 + 29 C 2 Y 0.000000 + 30 C 2 Z 0.119379 + 31 C 2 XX 0.026931 + 32 C 2 YY 0.026931 + 33 C 2 ZZ 0.048036 + 34 C 2 XY 0.000000 + 35 C 2 XZ 0.000000 + 36 C 2 YZ 0.000000 + ...... END OF RHF CALCULATION ...... + STEP CPU TIME = 0.09 TOTAL CPU TIME = 0.5 ( 0.0 MIN) + TOTAL WALL CLOCK TIME= 0.5 SECONDS, CPU UTILIZATION IS 98.11% + + ----------------- + ENERGY COMPONENTS + ----------------- + + WAVEFUNCTION NORMALIZATION = 1.0000000000 + + ONE ELECTRON ENERGY = -51.9865333953 + TWO ELECTRON ENERGY = 22.2661778606 + NUCLEAR REPULSION ENERGY = 8.6396285590 + ------------------ + TOTAL ENERGY = -21.0807269756 + + ELECTRON-ELECTRON POTENTIAL ENERGY = 22.2661778606 + NUCLEUS-ELECTRON POTENTIAL ENERGY = -66.4210567010 + NUCLEUS-NUCLEUS POTENTIAL ENERGY = 8.6396285590 + ------------------ + TOTAL POTENTIAL ENERGY = -35.5152502814 + TOTAL KINETIC ENERGY = 14.4345233057 + VIRIAL RATIO (V/T) = 2.4604380435 + + ...... PI ENERGY ANALYSIS ...... + + ENERGY ANALYSIS: + FOCK ENERGY= -7.4541779911 + BARE H ENERGY= -51.9865333953 + ELECTRONIC ENERGY = -29.7203556932 + KINETIC ENERGY= 14.4345233057 + N-N REPULSION= 8.6396285590 + TOTAL ENERGY= -21.0807271342 + SIGMA PART(1+2)= -18.2827644663 + (K,V1,2)= 6.6988380460 -37.9092424055 12.9276398932 + PI PART(1+2)= -11.4375912269 + (K,V1,2)= 7.7356852597 -28.5118142956 9.3385378089 + SIGMA SKELETON, ERROR= -9.6431359072 0.0000000000 + MIXED PART= 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 + ...... END OF PI ENERGY ANALYSIS ...... + + --------------------------------------- + MULLIKEN AND LOWDIN POPULATION ANALYSES + --------------------------------------- + + MULLIKEN ATOMIC POPULATION IN EACH MOLECULAR ORBITAL + + 1 2 3 4 5 + + 2.000000 2.000000 2.000000 2.000000 2.000000 + + 1 1.655397 0.758784 0.753867 1.614304 1.614304 + 2 0.344603 1.241216 1.246133 0.385696 0.385696 + + ----- POPULATIONS IN EACH AO ----- + MULLIKEN LOWDIN + 1 O 1 S 1.92296 0.55002 + 2 O 1 S -0.01760 0.47218 + 3 O 1 S -0.00781 0.30176 + 4 O 1 X 1.52598 0.86343 + 5 O 1 Y 1.52598 0.86343 + 6 O 1 Z 1.31902 0.72494 + 7 O 1 X 0.00230 0.44280 + 8 O 1 Y 0.00230 0.44280 + 9 O 1 Z -0.00558 0.40779 + 10 O 1 X 0.08232 0.27387 + 11 O 1 Y 0.08232 0.27387 + 12 O 1 Z -0.05247 0.22575 + 13 O 1 XX -0.00258 0.15489 + 14 O 1 YY -0.00258 0.15489 + 15 O 1 ZZ 0.01468 0.16099 + 16 O 1 XY 0.00000 0.00000 + 17 O 1 XZ 0.00371 0.00300 + 18 O 1 YZ 0.00371 0.00300 + 19 C 2 S 1.92957 0.54924 + 20 C 2 S 0.02097 0.28920 + 21 C 2 S -0.11947 0.33629 + 22 C 2 X 0.36977 0.19360 + 23 C 2 Y 0.36977 0.19360 + 24 C 2 Z 1.11479 0.56881 + 25 C 2 X 0.01065 0.11397 + 26 C 2 Y 0.01065 0.11397 + 27 C 2 Z -0.01669 0.37239 + 28 C 2 X -0.01601 0.08402 + 29 C 2 Y -0.01601 0.08402 + 30 C 2 Z -0.13889 0.11718 + 31 C 2 XX 0.00204 0.19586 + 32 C 2 YY 0.00204 0.19586 + 33 C 2 ZZ 0.03759 0.22194 + 34 C 2 XY 0.00000 0.00000 + 35 C 2 XZ 0.02128 0.02531 + 36 C 2 YZ 0.02128 0.02531 + + ----- MULLIKEN ATOMIC OVERLAP POPULATIONS ----- + (OFF-DIAGONAL ELEMENTS NEED TO BE MULTIPLIED BY 2) + + 1 2 + + 1 5.9353924 + 2 0.4612643 3.1420790 + + TOTAL MULLIKEN AND LOWDIN ATOMIC POPULATIONS + ATOM MULL.POP. CHARGE LOW.POP. CHARGE + 1 O 6.396657 -0.396657 6.319397 -0.319397 + 2 C 3.603343 0.396657 3.680603 0.319397 + + ------------------------------- + BOND ORDER AND VALENCE ANALYSIS BOND ORDER THRESHOLD=0.050 + ------------------------------- + + BOND BOND BOND + ATOM PAIR DIST ORDER ATOM PAIR DIST ORDER ATOM PAIR DIST ORDER + 1 2 1.470 2.155 + + TOTAL BONDED FREE + ATOM VALENCE VALENCE VALENCE + 1 O 2.155 2.155 0.000 + 2 C 2.155 2.155 0.000 + + --------------------- + ELECTROSTATIC MOMENTS + --------------------- + + POINT 1 X Y Z (BOHR) CHARGE + 0.000000 0.000000 1.190744 0.00 (A.U.) + DX DY DZ /D/ (DEBYE) + 0.000000 0.000000 2.045189 2.045189 + ...... END OF PROPERTY EVALUATION ...... + STEP CPU TIME = 0.01 TOTAL CPU TIME = 0.5 ( 0.0 MIN) + TOTAL WALL CLOCK TIME= 0.5 SECONDS, CPU UTILIZATION IS 98.15% + 100000 WORDS OF DYNAMIC MEMORY USED + EXECUTION OF GAMESS TERMINATED NORMALLY Sun Aug 7 15:27:34 2005 + +DATA SERVER STATS: TOTAL DISTRIBUTED MEMORY USED (MEMDDI)= 0 MWORDS. +FIRST DATA SERVER'S MAXIMUM MEMORY= 0 WORDS, CPU= 0.0 SECONDS. + +ddikick: all processes have ended gracefully. +unset echo +----- accounting info ----- +Sun Aug 7 15:27:36 EDT 2005 +Files used on the master node daflower were: +-rw-r--r-- 1 lkwagner lkwagner 2399 2005-08-07 15:27 /tmp/lkwagner/co.F05 +-rw-r--r-- 1 lkwagner lkwagner 720048 2005-08-07 15:27 /tmp/lkwagner/co.F08 +-rw-r--r-- 1 lkwagner lkwagner 406344 2005-08-07 15:27 /tmp/lkwagner/co.F10 +-rw-r--r-- 1 lkwagner lkwagner 23693 2005-08-07 15:27 /tmp/lkwagner/co.pun +0.5u 0.0s 0:02.61 22.2% 0+0k 0+0io 0pf+0w diff --git a/examples/co/co.pun b/examples/co/co.pun new file mode 100644 index 00000000..918f3369 --- /dev/null +++ b/examples/co/co.pun @@ -0,0 +1,356 @@ + $DATA + +C1 0 +O 8.0 0.0000000000 0.0000000000 0.0000000000 + S 8 + 1 64.2325670000 -0.00014628 + 2 44.2294580000 0.00023257 + 3 14.4012840000 0.01452292 + 4 6.2716241000 -0.15928849 + 5 2.8360343000 0.01717006 + 6 1.1159210000 0.38728089 + 7 0.4530391000 0.53440431 + 8 0.1800000000 0.19587552 + S 1 + 1 0.7520000000 1.00000000 + S 1 + 1 0.2384000000 1.00000000 + P 8 + 1 23.5159210000 0.00618552 + 2 14.9592690000 -0.00142966 + 3 11.1499140000 0.04936222 + 4 4.5494628000 0.11942905 + 5 2.0155363000 0.23256539 + 6 0.8786699000 0.35410922 + 7 0.3557349000 0.35240624 + 8 0.1343186000 0.14404962 + P 1 + 1 0.7156000000 1.00000000 + P 1 + 1 0.2140000000 1.00000000 + D 1 + 1 0.9850000000 1.00000000 + +C 6.0 0.0000000000 0.0000000000 1.4700000000 + S 5 + 1 8.1380377000 0.01179592 + 2 3.3151758000 -0.15198125 + 3 0.6682763100 0.27552348 + 4 0.2917676600 0.54864514 + 5 0.1141134900 0.30121511 + S 1 + 1 0.9059000000 1.00000000 + S 1 + 1 0.1285000000 1.00000000 + P 5 + 1 8.5281305000 0.02351240 + 2 2.9014509000 0.11648574 + 3 0.9431209000 0.32777384 + 4 0.3155855500 0.49260154 + 5 0.1039361100 0.27312428 + P 1 + 1 0.3827000000 1.00000000 + P 1 + 1 0.1209000000 1.00000000 + D 1 + 1 0.5500000000 1.00000000 + + $END +--- CLOSED SHELL ORBITALS --- GENERATED AT Sun Aug 7 15:27:34 2005 + +E(RHF)= -21.0807269756, E(NUC)= 8.6396285590, 11 ITERS + $VEC + 1 1 8.80096778E-01-1.16730741E-02-2.59978701E-02 0.00000000E+00 0.00000000E+00 + 1 2 1.04982831E-01 0.00000000E+00 0.00000000E+00 8.83409448E-03 0.00000000E+00 + 1 3 0.00000000E+00-2.03840682E-02-4.26090413E-03-4.26090413E-03 1.41035517E-02 + 1 4 0.00000000E+00 0.00000000E+00 0.00000000E+00 3.18545040E-01-3.33269529E-03 + 1 5-9.13517357E-02 0.00000000E+00 0.00000000E+00-1.89831786E-01 0.00000000E+00 + 1 6 0.00000000E+00 5.92500646E-03 0.00000000E+00 0.00000000E+00 6.23918246E-02 + 1 7-1.37756901E-02-1.37756901E-02 2.63306465E-02 0.00000000E+00 0.00000000E+00 + 1 8 0.00000000E+00 + 2 1-4.08116291E-01-4.56001262E-03-7.86286702E-02 0.00000000E+00 0.00000000E+00 + 2 2 4.24294337E-01 0.00000000E+00 0.00000000E+00-2.11928519E-03 0.00000000E+00 + 2 3 0.00000000E+00-3.24395733E-02-4.04681500E-03-4.04681500E-03 2.07869869E-02 + 2 4 0.00000000E+00 0.00000000E+00 0.00000000E+00 8.61460351E-01 1.82393782E-02 + 2 5-1.11361056E-01 0.00000000E+00 0.00000000E+00-2.58108949E-03 0.00000000E+00 + 2 6 0.00000000E+00-7.92705221E-03 0.00000000E+00 0.00000000E+00 3.39210331E-02 + 2 7 3.03049330E-03 3.03049330E-03 1.99528046E-02 0.00000000E+00 0.00000000E+00 + 2 8 0.00000000E+00 + 3 1 1.07042957E-01 1.99504287E-03 5.44549674E-02 0.00000000E+00 0.00000000E+00 + 3 2-5.97476679E-01 0.00000000E+00 0.00000000E+00 5.30877927E-03 0.00000000E+00 + 3 3 0.00000000E+00-4.98542342E-03 5.88710877E-03 5.88710877E-03-2.25181471E-02 + 3 4 0.00000000E+00 0.00000000E+00 0.00000000E+00 3.99500094E-01-5.72741868E-04 + 3 5 1.49073112E-01 0.00000000E+00 0.00000000E+00 6.87577690E-01 0.00000000E+00 + 3 6 0.00000000E+00-7.23329608E-03 0.00000000E+00 0.00000000E+00-1.22531205E-01 + 3 7 9.88156960E-03 9.88156960E-03-4.54062705E-02 0.00000000E+00 0.00000000E+00 + 3 8 0.00000000E+00 + 4 1 0.00000000E+00 0.00000000E+00 0.00000000E+00 8.12535380E-01 8.34478677E-02 + 4 2 0.00000000E+00 1.32919413E-03 1.36509029E-04 0.00000000E+00 5.20131143E-02 + 4 3 5.34177783E-03 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 4 4 0.00000000E+00 2.45595869E-02 2.52228421E-03 0.00000000E+00 0.00000000E+00 + 4 5 0.00000000E+00 3.44943916E-01 3.54259457E-02 0.00000000E+00 1.06559980E-02 + 4 6 1.09437735E-03 0.00000000E+00-1.54624134E-02-1.58799907E-03 0.00000000E+00 + 4 7 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00-4.44758484E-02 + 4 8-4.56769613E-03 + 5 1 0.00000000E+00 0.00000000E+00 0.00000000E+00-8.34478677E-02 8.12535380E-01 + 5 2 0.00000000E+00-1.36509029E-04 1.32919413E-03 0.00000000E+00-5.34177783E-03 + 5 3 5.20131143E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 5 4 0.00000000E+00-2.52228421E-03 2.45595869E-02 0.00000000E+00 0.00000000E+00 + 5 5 0.00000000E+00-3.54259457E-02 3.44943916E-01 0.00000000E+00-1.09437735E-03 + 5 6 1.06559980E-02 0.00000000E+00 1.58799907E-03-1.54624134E-02 0.00000000E+00 + 5 7 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 4.56769613E-03 + 5 8-4.44758484E-02 + 6 1 0.00000000E+00 0.00000000E+00 0.00000000E+00-3.60336405E-01 2.95529611E-01 + 6 2 0.00000000E+00 1.58725978E-02-1.30178983E-02 0.00000000E+00-1.38091711E-01 + 6 3 1.13255805E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 6 4 0.00000000E+00 6.28355349E-03-5.15345131E-03 0.00000000E+00 0.00000000E+00 + 6 5 0.00000000E+00 6.02073173E-01-4.93789826E-01 0.00000000E+00-2.07066394E-02 + 6 6 1.69825336E-02 0.00000000E+00 2.37833392E-01-1.95058864E-01 0.00000000E+00 + 6 7 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 8.39916560E-03 + 6 8-6.88856888E-03 + 7 1 0.00000000E+00 0.00000000E+00 0.00000000E+00-2.95529611E-01-3.60336405E-01 + 7 2 0.00000000E+00 1.30178983E-02 1.58725978E-02 0.00000000E+00-1.13255805E-01 + 7 3-1.38091711E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 7 4 0.00000000E+00 5.15345131E-03 6.28355349E-03 0.00000000E+00 0.00000000E+00 + 7 5 0.00000000E+00 4.93789826E-01 6.02073173E-01 0.00000000E+00-1.69825336E-02 + 7 6-2.07066394E-02 0.00000000E+00 1.95058864E-01 2.37833392E-01 0.00000000E+00 + 7 7 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 6.88856888E-03 + 7 8 8.39916560E-03 + 8 1 3.72357898E-01-1.04708864E-01 1.16585007E+00 0.00000000E+00 0.00000000E+00 + 8 2 3.97687254E-01 0.00000000E+00 0.00000000E+00-3.27583264E-02 0.00000000E+00 + 8 3 0.00000000E+00 5.67739796E-01-3.46067957E-02-3.46067957E-02-2.60415381E-02 + 8 4 0.00000000E+00 0.00000000E+00 0.00000000E+00-2.75829108E-01 2.44904473E-02 + 8 5-9.57010972E-01 0.00000000E+00 0.00000000E+00 3.96722298E-01 0.00000000E+00 + 8 6 0.00000000E+00-3.92635637E-02 0.00000000E+00 0.00000000E+00 1.27499555E+00 + 8 7 7.60479931E-03 7.60479931E-03 3.76760724E-02 0.00000000E+00 0.00000000E+00 + 8 8 0.00000000E+00 + 9 1-8.65795511E-02 1.58006942E-02-4.47992858E-01 0.00000000E+00 0.00000000E+00 + 9 2 9.92667793E-02 0.00000000E+00 0.00000000E+00 2.66348297E-02 0.00000000E+00 + 9 3 0.00000000E+00-2.77863614E-01 1.33718627E-02 1.33718627E-02-1.05857242E-02 + 9 4 0.00000000E+00 0.00000000E+00 0.00000000E+00-5.49921929E-01-4.94035198E-01 + 9 5 2.28715367E+00 0.00000000E+00 0.00000000E+00-1.54949112E-01 0.00000000E+00 + 9 6 0.00000000E+00-2.17046526E-01 0.00000000E+00 0.00000000E+00 9.47357162E-02 + 9 7-4.16055359E-01-4.16055359E-01-3.89443668E-01 0.00000000E+00 0.00000000E+00 + 9 8 0.00000000E+00 +10 1 0.00000000E+00 0.00000000E+00 0.00000000E+00-9.60341178E-03-1.10131532E-02 +10 2 0.00000000E+00-5.56242891E-03-6.37897061E-03 0.00000000E+00-7.74742901E-02 +10 3-8.88471975E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +10 4 0.00000000E+00-1.27909426E-02-1.46686004E-02 0.00000000E+00 0.00000000E+00 +10 5 0.00000000E+00-4.56433999E-01-5.23436633E-01 0.00000000E+00-3.67530801E-01 +10 6-4.21482812E-01 0.00000000E+00 9.82759721E-01 1.12702481E+00 0.00000000E+00 +10 7 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.78215384E-02 +10 8 2.04376670E-02 +11 1 0.00000000E+00 0.00000000E+00 0.00000000E+00-1.10131532E-02 9.60341178E-03 +11 2 0.00000000E+00-6.37897061E-03 5.56242891E-03 0.00000000E+00-8.88471975E-02 +11 3 7.74742901E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +11 4 0.00000000E+00-1.46686004E-02 1.27909426E-02 0.00000000E+00 0.00000000E+00 +11 5 0.00000000E+00-5.23436633E-01 4.56433999E-01 0.00000000E+00-4.21482812E-01 +11 6 3.67530801E-01 0.00000000E+00 1.12702481E+00-9.82759721E-01 0.00000000E+00 +11 7 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.04376670E-02 +11 8-1.78215384E-02 +12 1-1.36224138E-01-1.01427061E-01 5.80093079E-01 0.00000000E+00 0.00000000E+00 +12 2-4.87222973E-01 0.00000000E+00 0.00000000E+00-1.77217093E-02 0.00000000E+00 +12 3 0.00000000E+00-1.02503512E-01-4.16989908E-02-4.16989908E-02 1.34251074E-02 +12 4 0.00000000E+00 0.00000000E+00 0.00000000E+00 3.35738417E-01 1.59107239E-01 +12 5-5.97424816E-01 0.00000000E+00 0.00000000E+00-9.28539059E-01 0.00000000E+00 +12 6 0.00000000E+00-4.29836242E-01 0.00000000E+00 0.00000000E+00 1.45176959E+00 +12 7 1.42753478E-01 1.42753478E-01 4.37997311E-02 0.00000000E+00 0.00000000E+00 +12 8 0.00000000E+00 +13 1 1.66862347E-01 1.21721060E-01 7.09231558E-02 0.00000000E+00 0.00000000E+00 +13 2-5.61886145E-01 0.00000000E+00 0.00000000E+00-4.01534745E-01 0.00000000E+00 +13 3 0.00000000E+00 1.73882001E+00 3.35101476E-02 3.35101476E-02 5.76934638E-02 +13 4 0.00000000E+00 0.00000000E+00 0.00000000E+00 4.43340593E-03-1.83289323E-01 +13 5-3.35398158E-01 0.00000000E+00 0.00000000E+00-1.58322783E-01 0.00000000E+00 +13 6 0.00000000E+00 3.42693184E-01 0.00000000E+00 0.00000000E+00 1.75929413E-01 +13 7-4.87046333E-02-4.87046333E-02-3.56169291E-01 0.00000000E+00 0.00000000E+00 +13 8 0.00000000E+00 +14 1 0.00000000E+00 0.00000000E+00 0.00000000E+00-6.51266880E-01-1.01914618E-01 +14 2 0.00000000E+00-4.82520739E-01-7.55080876E-02 0.00000000E+00 1.57226922E+00 +14 3 2.46039252E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +14 4 0.00000000E+00-1.78454929E-02-2.79258264E-03 0.00000000E+00 0.00000000E+00 +14 5 0.00000000E+00 1.07821770E-01 1.68726751E-02 0.00000000E+00-6.94450143E-02 +14 6-1.08672225E-02 0.00000000E+00-4.55451396E-01-7.12720949E-02 0.00000000E+00 +14 7 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 6.66392296E-03 +14 8 1.04281544E-03 +15 1 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.01914618E-01-6.51266880E-01 +15 2 0.00000000E+00 7.55080876E-02-4.82520739E-01 0.00000000E+00-2.46039252E-01 +15 3 1.57226922E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +15 4 0.00000000E+00 2.79258264E-03-1.78454929E-02 0.00000000E+00 0.00000000E+00 +15 5 0.00000000E+00-1.68726751E-02 1.07821770E-01 0.00000000E+00 1.08672225E-02 +15 6-6.94450143E-02 0.00000000E+00 7.12720949E-02-4.55451396E-01 0.00000000E+00 +15 7 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00-1.04281544E-03 +15 8 6.66392296E-03 +16 1-3.54721585E-01-1.41766780E+00 4.21929727E+00 0.00000000E+00 0.00000000E+00 +16 2-1.07298314E-01 0.00000000E+00 0.00000000E+00-1.21544274E-01 0.00000000E+00 +16 3 0.00000000E+00 1.54570304E+00-2.71252246E-01-2.71252246E-01-3.15978833E-01 +16 4 0.00000000E+00 0.00000000E+00 0.00000000E+00 5.14490307E-02-5.32602304E-02 +16 5-1.86323236E+00 0.00000000E+00 0.00000000E+00-8.22278365E-02 0.00000000E+00 +16 6 0.00000000E+00 6.17338394E-01 0.00000000E+00 0.00000000E+00 1.15288880E+00 +16 7-6.41845788E-03-6.41845788E-03-2.46908242E-01 0.00000000E+00 0.00000000E+00 +16 8 0.00000000E+00 +17 1 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +17 2 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +17 3 0.00000000E+00 0.00000000E+00-1.24572244E-05 1.24572244E-05 0.00000000E+00 +17 4 7.48714377E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +17 5 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +17 6 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +17 7-1.65209703E-04 1.65209703E-04 0.00000000E+00 9.92956983E-01 0.00000000E+00 +17 8 0.00000000E+00 +18 1 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +18 2 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +18 3 0.00000000E+00 0.00000000E+00 6.48405671E-02-6.48405671E-02 0.00000000E+00 +18 4 1.43843638E-05 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +18 5 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +18 6 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +18 7 8.59925972E-01-8.59925972E-01 0.00000000E+00 1.90767733E-04 0.00000000E+00 +18 8 0.00000000E+00 +19 1 0.00000000E+00 0.00000000E+00 0.00000000E+00 8.19121512E-02 1.35301296E-01 +19 2 0.00000000E+00-4.20145087E-02-6.93989525E-02 0.00000000E+00 1.58029708E-01 +19 3 2.61031166E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +19 4 0.00000000E+00-9.44119487E-02-1.55948279E-01 0.00000000E+00 0.00000000E+00 +19 5 0.00000000E+00 6.79198526E-02 1.12189022E-01 0.00000000E+00-1.33019827E-02 +19 6-2.19720210E-02 0.00000000E+00-1.29676043E-01-2.14196996E-01 0.00000000E+00 +19 7 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 5.06530839E-01 +19 8 8.36680249E-01 +20 1 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.35301296E-01-8.19121512E-02 +20 2 0.00000000E+00-6.93989525E-02 4.20145087E-02 0.00000000E+00 2.61031166E-01 +20 3-1.58029708E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +20 4 0.00000000E+00-1.55948279E-01 9.44119487E-02 0.00000000E+00 0.00000000E+00 +20 5 0.00000000E+00 1.12189022E-01-6.79198526E-02 0.00000000E+00-2.19720210E-02 +20 6 1.33019827E-02 0.00000000E+00-2.14196996E-01 1.29676043E-01 0.00000000E+00 +20 7 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 8.36680249E-01 +20 8-5.06530839E-01 +21 1 1.12366537E-01-7.53998356E-02 8.88200677E-01 0.00000000E+00 0.00000000E+00 +21 2 3.97033242E-01 0.00000000E+00 0.00000000E+00 2.01141969E-01 0.00000000E+00 +21 3 0.00000000E+00-1.36855981E-01 3.53249996E-02 3.53249996E-02-8.49508471E-02 +21 4 0.00000000E+00 0.00000000E+00 0.00000000E+00-3.71716878E-01 1.15489530E-01 +21 5-6.38360679E-01 0.00000000E+00 0.00000000E+00 1.01322961E+00 0.00000000E+00 +21 6 0.00000000E+00-7.72602986E-01 0.00000000E+00 0.00000000E+00 3.56098735E-01 +21 7 7.43988433E-01 7.43988433E-01-8.99600971E-01 0.00000000E+00 0.00000000E+00 +21 8 0.00000000E+00 +22 1 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.54668989E-01 8.36367414E-03 +22 2 0.00000000E+00-5.20059871E-02-2.81220645E-03 0.00000000E+00-1.58534392E-01 +22 3-8.57269452E-03 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +22 4 0.00000000E+00-1.93254966E-01-1.04501980E-02 0.00000000E+00 0.00000000E+00 +22 5 0.00000000E+00 3.48003478E+00 1.88181723E-01 0.00000000E+00-3.11928120E+00 +22 6-1.68674093E-01 0.00000000E+00-5.78342245E-01-3.12736645E-02 0.00000000E+00 +22 7 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00-1.36571349E-01 +22 8-7.38505029E-03 +23 1 0.00000000E+00 0.00000000E+00 0.00000000E+00-8.36367414E-03 1.54668989E-01 +23 2 0.00000000E+00 2.81220645E-03-5.20059871E-02 0.00000000E+00 8.57269452E-03 +23 3-1.58534392E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +23 4 0.00000000E+00 1.04501980E-02-1.93254966E-01 0.00000000E+00 0.00000000E+00 +23 5 0.00000000E+00-1.88181723E-01 3.48003478E+00 0.00000000E+00 1.68674093E-01 +23 6-3.11928120E+00 0.00000000E+00 3.12736645E-02-5.78342245E-01 0.00000000E+00 +23 7 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 7.38505029E-03 +23 8-1.36571349E-01 +24 1-1.49168668E-02 1.06981386E-02-3.14817793E-01 0.00000000E+00 0.00000000E+00 +24 2-5.91792678E-02 0.00000000E+00 0.00000000E+00-7.08660794E-02 0.00000000E+00 +24 3 0.00000000E+00-1.13621683E-01-2.93476317E-02-2.93476317E-02 4.62181443E-02 +24 4 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.61746277E+00-1.48993975E-01 +24 5-1.14224748E-01 0.00000000E+00 0.00000000E+00 2.42005216E+00 0.00000000E+00 +24 6 0.00000000E+00-2.29378881E+00 0.00000000E+00 0.00000000E+00-5.91008472E-01 +24 7-1.12687307E+00-1.12687307E+00-8.63452462E-01 0.00000000E+00 0.00000000E+00 +24 8 0.00000000E+00 +25 1 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +25 2 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +25 3 0.00000000E+00 0.00000000E+00-1.52350304E-04 1.52350304E-04 0.00000000E+00 +25 4 9.98809053E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +25 5 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +25 6 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +25 7 2.00402156E-05-2.00402156E-05 0.00000000E+00-1.31383714E-01 0.00000000E+00 +25 8 0.00000000E+00 +26 1 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +26 2 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +26 3 0.00000000E+00 0.00000000E+00 8.64994013E-01-8.64994013E-01 0.00000000E+00 +26 4 1.75918978E-04 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +26 5 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +26 6 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +26 7-1.13781634E-01 1.13781634E-01 0.00000000E+00-2.31404478E-05 0.00000000E+00 +26 8 0.00000000E+00 +27 1-1.97029732E-01-1.45840373E-01 5.06507950E-02 0.00000000E+00 0.00000000E+00 +27 2-1.58918386E-01 0.00000000E+00 0.00000000E+00-2.94345213E-01 0.00000000E+00 +27 3 0.00000000E+00-3.44794752E-02-1.90245860E-01-1.90245860E-01 3.06650583E-01 +27 4 0.00000000E+00 0.00000000E+00 0.00000000E+00-2.26928209E+00 7.05843987E-02 +27 5 5.37677443E-01 0.00000000E+00 0.00000000E+00 2.36914680E+00 0.00000000E+00 +27 6 0.00000000E+00-2.25906969E+00 0.00000000E+00 0.00000000E+00-5.54001219E-01 +27 7 7.52008149E-01 7.52008149E-01 1.19178362E+00 0.00000000E+00 0.00000000E+00 +27 8 0.00000000E+00 +28 1 0.00000000E+00 0.00000000E+00 0.00000000E+00 6.56968858E-02 1.14474229E-02 +28 2 0.00000000E+00-8.35638539E-02-1.45606715E-02 0.00000000E+00 2.21226615E-01 +28 3 3.85478638E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +28 4 0.00000000E+00 1.00679242E+00 1.75429603E-01 0.00000000E+00 0.00000000E+00 +28 5 0.00000000E+00 9.21671245E-01 1.60597574E-01 0.00000000E+00-9.79466270E-01 +28 6-1.70668129E-01 0.00000000E+00-2.59530539E-01-4.52221714E-02 0.00000000E+00 +28 7 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 4.62689998E-01 +28 8 8.06219047E-02 +29 1 0.00000000E+00 0.00000000E+00 0.00000000E+00-1.14474229E-02 6.56968858E-02 +29 2 0.00000000E+00 1.45606715E-02-8.35638539E-02 0.00000000E+00-3.85478638E-02 +29 3 2.21226615E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +29 4 0.00000000E+00-1.75429603E-01 1.00679242E+00 0.00000000E+00 0.00000000E+00 +29 5 0.00000000E+00-1.60597574E-01 9.21671245E-01 0.00000000E+00 1.70668129E-01 +29 6-9.79466270E-01 0.00000000E+00 4.52221714E-02-2.59530539E-01 0.00000000E+00 +29 7 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00-8.06219047E-02 +29 8 4.62689998E-01 +30 1 2.01734740E-02-3.85424147E-01 1.87859191E+00 0.00000000E+00 0.00000000E+00 +30 2 1.15817585E+00 0.00000000E+00 0.00000000E+00-6.70456440E-01 0.00000000E+00 +30 3 0.00000000E+00 9.10854240E-01-5.90735124E-01-5.90735124E-01 1.10442942E+00 +30 4 0.00000000E+00 0.00000000E+00 0.00000000E+00 9.16099389E-01-2.00270763E-01 +30 5-1.04484656E+00 0.00000000E+00 0.00000000E+00-1.30947445E+00 0.00000000E+00 +30 6 0.00000000E+00 2.19820965E+00 0.00000000E+00 0.00000000E+00 6.38522154E-01 +30 7-2.60866688E-01-2.60866688E-01-1.35871420E+00 0.00000000E+00 0.00000000E+00 +30 8 0.00000000E+00 +31 1 0.00000000E+00 0.00000000E+00 0.00000000E+00-8.75691421E-02 3.20303111E+00 +31 2 0.00000000E+00 8.30617342E-02-3.03816290E+00 0.00000000E+00 1.15401934E-02 +31 3-4.22107579E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +31 4 0.00000000E+00 4.40577705E-04-1.61150842E-02 0.00000000E+00 0.00000000E+00 +31 5 0.00000000E+00 7.03674838E-03-2.57384319E-01 0.00000000E+00-7.98713077E-03 +31 6 2.92146614E-01 0.00000000E+00 3.72067132E-03-1.36091615E-01 0.00000000E+00 +31 7 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.84957803E-03 +31 8-6.76523239E-02 +32 1 0.00000000E+00 0.00000000E+00 0.00000000E+00 3.20303111E+00 8.75691421E-02 +32 2 0.00000000E+00-3.03816290E+00-8.30617342E-02 0.00000000E+00-4.22107579E-01 +32 3-1.15401934E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +32 4 0.00000000E+00-1.61150842E-02-4.40577705E-04 0.00000000E+00 0.00000000E+00 +32 5 0.00000000E+00-2.57384319E-01-7.03674838E-03 0.00000000E+00 2.92146614E-01 +32 6 7.98713077E-03 0.00000000E+00-1.36091615E-01-3.72067132E-03 0.00000000E+00 +32 7 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00-6.76523239E-02 +32 8-1.84957803E-03 +33 1 2.23500155E+00-5.57164259E-01 1.26907622E+00 0.00000000E+00 0.00000000E+00 +33 2-2.14989494E+00 0.00000000E+00 0.00000000E+00 2.21626163E+00 0.00000000E+00 +33 3 0.00000000E+00 1.00955192E+00-1.15277879E+00-1.15277879E+00-5.19222218E-01 +33 4 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.39517461E-01-6.16674826E-02 +33 5-7.36173154E-01 0.00000000E+00 0.00000000E+00-3.83664905E-01 0.00000000E+00 +33 6 0.00000000E+00 9.19546660E-01 0.00000000E+00 0.00000000E+00 5.10949561E-01 +33 7 9.23530616E-03 9.23530616E-03-6.55708230E-01 0.00000000E+00 0.00000000E+00 +33 8 0.00000000E+00 +34 1-2.29440875E+00 3.81552154E-01 1.02860880E-01 0.00000000E+00 0.00000000E+00 +34 2-2.24202894E+00 0.00000000E+00 0.00000000E+00 2.58376612E+00 0.00000000E+00 +34 3 0.00000000E+00 4.50466058E-01 8.35592907E-01 8.35592907E-01 1.48275292E+00 +34 4 0.00000000E+00 0.00000000E+00 0.00000000E+00 5.82593446E-01-8.01282977E-02 +34 5 1.48105425E-01 0.00000000E+00 0.00000000E+00-7.01035833E-01 0.00000000E+00 +34 6 0.00000000E+00 1.30488246E+00 0.00000000E+00 0.00000000E+00-5.60656803E-02 +34 7-7.88377012E-02-7.88377012E-02-1.05615827E+00 0.00000000E+00 0.00000000E+00 +34 8 0.00000000E+00 +35 1-8.73103965E-03 2.14057519E-03 8.34077654E-02 0.00000000E+00 0.00000000E+00 +35 2 1.94545017E-02 0.00000000E+00 0.00000000E+00 6.16320414E-02 0.00000000E+00 +35 3 0.00000000E+00 7.11263672E-02-1.07555312E-02-1.07555312E-02 6.09132419E-02 +35 4 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.12677943E+01-3.71787209E+00 +35 5-4.50297008E+00 0.00000000E+00 0.00000000E+00-1.04908476E-01 0.00000000E+00 +35 6 0.00000000E+00 1.81640837E-01 0.00000000E+00 0.00000000E+00 3.59341945E-02 +35 7-2.06386314E+00-2.06386314E+00-2.16259242E+00 0.00000000E+00 0.00000000E+00 +35 8 0.00000000E+00 +36 1 1.25989908E+01-7.77133802E+00-4.36577663E+00 0.00000000E+00 0.00000000E+00 +36 2 5.66880348E-02 0.00000000E+00 0.00000000E+00-9.69585604E-02 0.00000000E+00 +36 3 0.00000000E+00 1.17525310E-01-4.65745684E-01-4.65745684E-01-4.70127367E-01 +36 4 0.00000000E+00 0.00000000E+00 0.00000000E+00-3.18553926E-02 8.88551741E-03 +36 5-2.39351282E-01 0.00000000E+00 0.00000000E+00 6.43031752E-02 0.00000000E+00 +36 6 0.00000000E+00-6.18521487E-02 0.00000000E+00 0.00000000E+00 1.19378760E-01 +36 7 2.69311915E-02 2.69311915E-02 4.80355435E-02 0.00000000E+00 0.00000000E+00 +36 8 0.00000000E+00 + $END + POPULATION ANALYSIS +O 6.39666 -0.39666 6.31940 -0.31940 +C 3.60334 0.39666 3.68060 0.31940 + MOMENTS AT POINT 1 X,Y,Z= 0.000000 0.000000 1.190744 + DIPOLE 0.000000 0.000000 2.045189 diff --git a/examples/mno/mno.inp b/examples/mno/mno.inp new file mode 100644 index 00000000..dc8853c6 --- /dev/null +++ b/examples/mno/mno.inp @@ -0,0 +1,1124 @@ +!Yoon ECP on Titanium, Lester on Oxygen + $CONTRL SCFTYP=ROHF MULT=6 ICHARG=0 RUNTYP=ENERGY MAXIT=70 ECP=READ $END + $SYSTEM KDIAG=3 $END + $SCF DIRSCF=.T. RSTRCT=.F. SOSCF=.F. $END + $GUESS GUESS=MOREAD NORDER=1 IORDER(8)=9,8 $END + $DATA + +C1 +MN 25. 0. 0. -.0675725099 +S 7 1. + 1 37.267155 0.39037801E-01 + 2 23.295664 -0.25834960 + 3 14.061365 0.76279390 + 4 9.9303875 -0.24825741 + 5 7.9979882 -0.61830252 + 6 1.9205208 0.51014656 + 7 1.0861154 0.38060132 +S 1 + 1 1.765983000 1.000000000 +S 1 + 1 0.7137740000 1.000000000 +S 1 1. + 1 .25 1. +S 1 1. + 1 .1 1. +S 1 1. + 1 .04 1. +P 7 1. + 1 50.453613 0.28731674E-02 + 2 20.993099 -0.32531628 + 3 18.158922 0.53472191 + 4 12.328713 -0.24152134 + 5 4.5823927 -0.10436746 + 6 3.3082843 0.41230637 + 7 1.3713011 0.51765233 +P 1 1. + 1 1.765983000 1.000000000 +P 1 1. + 1 0.7137740000 1.000000000 +P 1 1. + 1 .25 1. +P 1 1. + 1 .1 1. +P 1 1. + 1 .04 1. +D 5 1. + 1 27.851509 -0.84132208E-02 + 2 16.152140 0.85403956E-01 + 3 5.6169748 0.21698587 + 4 2.1590731 0.39649862 + 5 0.77049690 0.43369588 +D 1 1. + 1 0.27 1. +D 1 1. + 1 0.07 1. +F 1 1. + 1 1.800000000 1.000000000 + +O 8. 0. 0. 1.6675725099 +S 7 1. + 1 19.447813 0.23837024E-02 + 2 12.420972 0.14954804E-01 + 3 6.1715364 -0.17688230 + 4 4.0532336 0.27786544E-01 + 5 1.1199164 0.39952806 + 6 0.43257234 0.56537366 + 7 0.15980007 0.15779860 +S 1 1. +1 0.295000000 1.00000000 +S 1 1. +1 0.0978000000 1.00000000 +P 7 1. + 1 62.841007 -0.13814421E-03 + 2 24.321384 0.76169823E-02 + 3 9.3865118 0.70101440E-01 + 4 3.2627614 0.19551891 + 5 1.2486125 0.35298672 + 6 0.46735620 0.41737372 + 7 0.16023938 0.21061262 +P 1 1. +1 0.240000000 1.00000000 +P 1 1. +1 0.080000000 1.00000000 +D 1 1. +1 0.9800000000 1.00000000 + + $END + $ECP +MN-ECP GEN 10 2 +11 D + 6414.98369 2 138.285553 + 4352.98345 2 81.9172716 + 4242.28523 2 17.7328935 + -4.07742092 2 7749.96944 + -2222.65038 2 16.3824906 + -5461.95518 2 99.2406454 + 7265.55593 2 30.9265869 + -4470.82724 2 147.0145 + -5812.86306 2 23.5011807 + -4381.7868 2 40.1680914 + 15. 1 18. +10 S-D + -12638.2625 2 13.2868202 + 27155.593 2 24.4109053 + -46214.1202 2 21.2041228 + 20923.3938 2 27.7810677 + 1654.36426 2 10.9523854 + -20006.196 2 34.2304514 + 4712.00229 2 51.2910259 + 25417.5192 2 15.6039936 + 12187.553 2 88.8560066 + -13133.5166 2 87.6174717 +10 P-D + -11900.9554 2 17.4308152 + 1771.78434 2 6.78674711 + 6798.65983 2 13.1928791 + -661.347051 2 6.03484502 + 5324.30064 2 21.473549 + -1131.64204 2 54.6219981 + -2628.40227 2 8.6501916 + -5330.83041 2 34.1746927 + 4587.11743 2 24.7233606 + 3209.86996 2 46.291548 +O-LES GEN 2 1 +7 P + -33.7880782 2 15.2168459 + -3.3940401 2 128.509992 + -7.80348522 2 38.1725349 + -1.77249588 2 540.590474 + 3.92316748 2 8.69742515 + -0.939126666 2 3211.15414 + 6. 1 15. +3 S-P + 29.1102439 2 10.0448527 + 47.7288457 2 10.237855 + -21.4103895 2 8.77094221 + $END + $VEC + 1 1 6.58679288E-01-1.63276262E-02 3.04404322E-01 9.17455420E-02 4.45627349E-03 + 1 2 8.48615212E-03 7.49098860E-08 6.11226803E-08 6.26591066E-04-1.37933958E-09 + 1 3 5.30519651E-09 1.07566000E-03 1.49441415E-08 1.12481846E-08-3.18847678E-04 + 1 4 2.67896155E-09-3.02383112E-10-1.12159099E-03-6.44416451E-09-1.11576037E-08 + 1 5-4.66325209E-03-1.57812731E-09-5.59796805E-09-5.75275737E-06-6.48737141E-03 + 1 6-6.48575341E-03 1.24444418E-02-1.07288780E-03 1.09748569E-07 9.62200674E-08 + 1 7-1.39208835E-02-1.39209489E-02-2.04576915E-02 4.18771693E-05 5.81830587E-08 + 1 8 1.21996557E-07-3.49448762E-03-3.49433221E-03-3.91301362E-03-1.03038380E-04 + 1 9-1.42561663E-09-7.49926659E-09 7.42215018E-10 1.54409848E-10-1.31164011E-03 + 1 10-2.78789955E-09-4.11928895E-05-3.15168240E-09-4.13089405E-05-4.39578402E-09 + 1 11-4.35264061E-09 7.68426828E-05 5.83739582E-03-3.81004630E-04 5.73966118E-03 + 1 12-1.98183481E-08-6.82827309E-09-5.47332913E-03-9.68289706E-09-1.87657516E-08 + 1 13-6.92908868E-04 2.26049822E-09 9.07547531E-09-1.43317944E-03-1.82399339E-04 + 1 14-1.82292297E-04 1.13953793E-03-7.09014324E-05-1.64831333E-10 8.50513312E-10 + 2 1-1.84731112E-07 2.22719502E-07-5.27464378E-07 3.56335339E-08-2.99081502E-06 + 2 2 1.68652457E-06-5.46021996E-01 5.46493831E-01 9.52407513E-05 1.52350370E-02 + 2 3-1.52482012E-02-2.72318016E-06-1.92167949E-01 1.92334003E-01 3.22945664E-05 + 2 4-5.45506715E-02 5.45978057E-02 1.00426286E-05 1.30314367E-02-1.30426965E-02 + 2 5-3.98683204E-06-4.14049345E-03 4.14407186E-03 4.79787327E-07 2.37986705E-07 + 2 6 4.34243361E-07-6.33217627E-07 4.14279130E-08 5.11896265E-04-5.12345688E-04 + 2 7-9.65312392E-08-1.06787471E-07 9.21235262E-07 3.15086984E-08 2.15802167E-03 + 2 8-2.15988945E-03-5.32820868E-07-5.22829462E-07-1.42323797E-06-9.34134610E-09 + 2 9 3.78451742E-04-3.78778468E-04 9.12354250E-03-9.14090414E-03-1.03592041E-06 + 2 10-8.99092619E-03-8.01480973E-07 8.99586680E-03-6.00042794E-07-1.19221723E-03 + 2 11 1.19325081E-03 1.82519171E-08 5.71446579E-06-2.12509789E-06 3.06478043E-06 + 2 12-5.00557587E-03 5.00992994E-03-4.73868200E-06 6.56267102E-05-6.56811562E-05 + 2 13 1.09352861E-06-6.30256436E-04 6.30800543E-04-9.28476836E-07-1.01678390E-07 + 2 14-9.85935164E-08 8.33895246E-07-2.93179071E-08 7.79037024E-04-7.79711717E-04 + 3 1-1.58998564E-03 1.79725324E-03-4.37810395E-03 3.86300261E-04-2.42774049E-02 + 3 2 1.36118422E-02 2.44407771E-04 1.09419803E-04 7.71813564E-01-6.85578877E-06 + 3 3-3.08999573E-06-2.20743393E-02 8.62442018E-05 3.87684464E-05 2.61576315E-01 + 3 4 2.45446045E-05 1.10864931E-05 8.11662370E-02-5.90540687E-06-2.68107723E-06 + 3 5-3.23945487E-02 1.82826011E-06 8.03848679E-07 3.86234912E-03 2.69609925E-03 + 3 6 2.69560646E-03-5.07577248E-03 3.26920134E-04 8.03033828E-08 2.04779322E-07 + 3 7-8.41312584E-04-8.41657141E-04 7.40385416E-03 2.28944328E-04-7.77386707E-07 + 3 8-2.45015851E-07-4.24527716E-03-4.24514945E-03-1.15858599E-02-8.45702096E-05 + 3 9-1.76556744E-07-8.13840926E-08-3.93497344E-06-1.59535282E-06-8.36940731E-03 + 3 10-1.86818911E-06-5.60606082E-03-4.04480089E-06-5.60540009E-03 2.71796645E-07 + 3 11-1.22322784E-07-4.37259864E-04 4.66160134E-02-1.70936287E-02 2.49601283E-02 + 3 12 1.05011714E-06-1.99266877E-07-3.86946457E-02-1.37898279E-07-1.33157709E-07 + 3 13 8.75227608E-03 3.06727560E-07 1.54365552E-07-7.49871977E-03-8.20691179E-04 + 3 14-8.20310081E-04 6.79778363E-03-2.52421283E-04-2.85927352E-07-8.78149842E-08 + 4 1 4.93011884E-07-5.57377295E-07 1.42414090E-06-2.10881774E-07 7.93084183E-06 + 4 2-4.39995119E-06 5.46255784E-01 5.45784203E-01-2.50116095E-04-1.53490605E-02 + 4 3-1.53358088E-02 7.15678585E-06 1.92890294E-01 1.92723767E-01-8.47529655E-05 + 4 4 5.49091363E-02 5.48617286E-02-2.62072519E-05-1.32508843E-02-1.32394438E-02 + 4 5 1.05870380E-05 4.07333880E-03 4.06982276E-03-1.23082603E-06-8.33764402E-07 + 4 6-8.53201294E-07 1.58855251E-06-1.42825300E-07 4.83266316E-04 4.82842006E-04 + 4 7 2.58094521E-07 2.60607262E-07-2.30421054E-06-7.23243344E-08-1.68809331E-03 + 4 8-1.68663898E-03 1.35981777E-06 1.36076658E-06 3.79396820E-06 3.19793494E-08 + 4 9-4.18629527E-04-4.18267767E-04-8.96387966E-03-8.94652139E-03 2.61979545E-06 + 4 10-8.99477992E-03 1.84141829E-06-8.98963284E-03 1.88063346E-06 7.63852534E-04 + 4 11 7.63196559E-04 3.79570682E-09-1.53305749E-05 5.44674262E-06-8.23747286E-06 + 4 12 1.34134404E-03 1.34021511E-03 1.27207041E-05-3.37200892E-04-3.36907487E-04 + 4 13-2.73889101E-06 6.96838344E-04 6.96236229E-04 2.43415733E-06 2.68277255E-07 + 4 14 2.71729179E-07-2.23213405E-06 8.21466575E-08-5.98428036E-04-5.97912932E-04 + 5 1-4.45523896E-02-7.09307123E-03-5.02108213E-02 4.37818031E-02-1.90942116E-02 + 5 2-1.80439710E-04 1.46893261E-07 2.03449134E-07-1.04283873E-01-4.79562521E-09 + 5 3-1.15046850E-09-5.33514745E-03 5.54202562E-08 7.30103653E-08-3.32740248E-02 + 5 4 9.03334999E-10-1.80740865E-08 2.87158691E-02-1.43672499E-08-1.04074632E-08 + 5 5-2.44380033E-02 2.01981686E-10-5.02762063E-09-1.24933178E-02-2.94001510E-02 + 5 6-2.93983267E-02 5.66735327E-02-1.16243765E-03-2.81729473E-08-4.45764384E-08 + 5 7-1.49500388E-02-1.49484000E-02 3.07365976E-02-1.07202507E-03-6.22594163E-09 + 5 8-3.96967476E-08 2.08465412E-03 2.08638765E-03-2.28692889E-02-1.14549085E-03 + 5 9-5.10736359E-09-1.98960568E-09-1.55818938E-08-1.98236179E-08 6.17207137E-03 + 5 10 1.65144990E-09-2.17039850E-03 1.03427047E-09-2.17034787E-03 1.61556248E-08 + 5 11 2.41296339E-08-3.35999730E-05 9.30657970E-01-4.78016430E-03 7.35481462E-02 + 5 12-3.08715341E-08-7.57527627E-08-9.53181557E-02-7.53615847E-09-2.90592128E-08 + 5 13-5.86362799E-03 7.22592576E-09 2.07790669E-08 6.44575199E-04 1.17096576E-03 + 5 14 1.17334388E-03 1.90603526E-02-1.57496734E-03 3.83470500E-09 1.91636459E-08 + 6 1 7.33724172E-02 1.65053854E-02 9.01876527E-02-6.88644372E-02-9.66895073E-02 + 6 2 4.71628403E-02-8.88199494E-08-1.36033816E-07 1.06689581E-01 1.52701318E-09 + 6 3-7.11561095E-10 1.15502279E-02-3.70850997E-08-4.94335386E-08 3.34708809E-02 + 6 4 4.24486331E-09 5.48985835E-08-5.76559300E-02 3.26600121E-08 4.23726384E-08 + 6 5-1.31873736E-02 5.21496419E-09 5.28575381E-09 8.75962971E-03 8.65092824E-02 + 6 6 8.65104003E-02-1.68796257E-01-9.49697374E-04-3.50755548E-08 5.31264329E-08 + 6 7 3.54775701E-02 3.54800830E-02-9.48668796E-02-1.72951749E-03-9.07758591E-08 + 6 8 6.56077730E-09-2.04322840E-02-2.04314937E-02-6.90223040E-03-5.37298512E-04 + 6 9-3.96423830E-08-3.63402734E-08 1.17319064E-08 1.40295413E-08-8.79008580E-03 + 6 10-1.82198468E-09 3.33570000E-03-7.52265887E-10 3.33580443E-03-1.48124199E-08 + 6 11-2.08129153E-08-6.90947561E-05 1.71007156E-01 2.37428397E-02 6.65636970E-02 + 6 12 3.06875323E-07 1.80839353E-07 8.74842638E-01 1.50998801E-09 7.68904399E-09 + 6 13 2.13563053E-02 2.22571839E-08-1.04502549E-08-7.67903996E-03 7.72645760E-03 + 6 14 7.72620177E-03-2.97613086E-02 1.68632590E-04 5.14946820E-09-1.77499021E-08 + 7 1-4.95370055E-09 2.47078102E-09-9.70031934E-10 3.37325808E-09 5.34633998E-09 + 7 2-1.53505462E-08 3.38461563E-02-3.38756689E-02 1.13743348E-08 2.91136917E-03 + 7 3-2.91390776E-03 1.63141652E-09 1.98879776E-02-1.99053195E-02 1.94648973E-08 + 7 4-2.37698317E-02 2.37905584E-02-3.55472052E-08-2.50629824E-02 2.50848368E-02 + 7 5-9.51287507E-09-9.12743792E-03 9.13539657E-03 1.26644461E-10-1.33732170E-05 + 7 6 1.34082374E-05-3.52907280E-08 7.86989893E-08-6.38020290E-02 6.38576631E-02 + 7 7-3.83524919E-06 3.83813920E-06-3.50275334E-08 3.26222687E-08-3.95700782E-02 + 7 8 3.96045828E-02-6.92732256E-07 7.05421920E-07 4.51398393E-09 1.17126462E-08 + 7 9-7.90512864E-03 7.91202191E-03-4.65306481E-04 4.65696345E-04-3.49650296E-09 + 7 10 2.00369789E-04 1.58872354E-08-2.00173987E-04-1.66001448E-08-4.05841826E-03 + 7 11 4.06195714E-03-8.79256274E-10 1.03517591E-07 2.97505143E-08-5.03859136E-08 + 7 12-6.25048669E-01 6.25593690E-01-7.12957726E-09-4.91566548E-02 4.91995181E-02 + 7 13 1.03552415E-08-1.76122797E-02 1.76276369E-02 1.70443573E-08-1.94791963E-08 + 7 14 1.26488103E-08 2.40205259E-09 1.24722105E-08 1.49329599E-02-1.49459810E-02 + 8 1-5.01999761E-08-1.65592367E-08-6.56825077E-08 4.27226207E-08 1.81168541E-07 + 8 2 8.56704764E-09 1.01428716E-06-1.04907080E-06-4.06763761E-08 1.32450816E-07 + 8 3-1.55612614E-07-4.63253893E-09 5.55925503E-07-5.34408944E-07-1.68377755E-08 + 8 4-9.49541141E-07 1.02607819E-06 3.34195380E-08-1.04141345E-06 1.13498895E-06 + 8 5 3.03208154E-08-2.46756006E-07 1.54419400E-07-9.86600821E-09 7.41380414E-01 + 8 6-7.41380229E-01-1.89268536E-07-7.38768790E-04 6.52763876E-06-1.71401045E-05 + 8 7 2.23408181E-01-2.23408120E-01-3.22403083E-08-2.22620284E-04 1.24372955E-06 + 8 8-4.29246747E-06 4.74312283E-02-4.74311930E-02-2.72964801E-09-4.72636022E-05 + 8 9 2.55778155E-07-9.37421885E-07-3.70295007E-08 4.40086814E-08 3.30317550E-09 + 8 10 3.64748077E-09-6.67701364E-04-5.51805053E-09 6.67701356E-04-1.20574758E-07 + 8 11 1.26348779E-07 6.65372788E-07 2.60232552E-08-1.00773346E-08-4.72335217E-08 + 8 12-1.47857985E-05 1.26831501E-05-2.06076837E-07-1.38940491E-06 1.35444050E-06 + 8 13-4.15458728E-09-8.04632798E-07 1.14724530E-06 1.00642705E-08 2.43760958E-03 + 8 14-2.43761151E-03 4.98147072E-09-2.42933328E-06 2.78089829E-07-1.06776835E-07 + 9 1-3.00166315E-07-7.89702838E-08-2.89456003E-07 3.24852523E-07 5.73885954E-07 + 9 2-2.13208272E-07-1.80974995E-02-1.80817342E-02-3.29749240E-07-1.16661116E-03 + 9 3-1.16559521E-03-6.19098705E-08-1.12058677E-02-1.11961051E-02-6.93777452E-08 + 9 4 8.71422918E-03 8.70663956E-03 2.91388039E-07 9.69561436E-03 9.68717049E-03 + 9 5 1.92212851E-07 8.61017334E-03 8.60266688E-03-8.16969579E-08 6.71018877E-06 + 9 6-3.07653942E-06-3.68695075E-06-1.59554604E-06 3.18532890E-01 3.18255394E-01 + 9 7 1.67756327E-06-1.03615238E-06-5.92999293E-07-3.72687144E-07 8.54965033E-02 + 9 8 8.54220237E-02 4.15852334E-07-9.53805730E-08-7.45753711E-08-6.52381220E-08 + 9 9 1.53013769E-02 1.52880454E-02 2.49225399E-05 2.49733663E-05 4.61303154E-08 + 9 10-2.68250610E-05-1.90437641E-08-2.67512137E-05-9.96050837E-09 2.22897221E-03 + 9 11 2.22703032E-03-4.43463761E-09 3.24141145E-07 1.96349338E-07-2.05604055E-07 + 9 12 5.53855200E-01 5.53372674E-01-1.15696408E-06 1.85977138E-02 1.85815104E-02 + 9 13-2.01919136E-07-1.47649449E-02-1.47520809E-02 1.24839873E-07 1.72037779E-08 + 9 14-3.71418556E-08 4.77843061E-08-1.58579447E-08-1.49163826E-02-1.49033875E-02 +10 1-5.65304980E-07-1.58849462E-07-6.95449902E-07 4.59296123E-08 2.22629127E-06 +10 2 1.23096231E-06-2.14099202E-02 2.14285889E-02 1.75559517E-07-4.31736209E-03 +10 3 4.32112654E-03 2.27570451E-08-8.73107737E-03 8.73869150E-03 1.19363238E-07 +10 4 2.65976113E-02-2.66208038E-02-2.11679811E-07 2.52207843E-02-2.52427772E-02 +10 5-5.80632077E-07-1.57937629E-05 1.58068823E-05-3.49638158E-07 1.67123229E-05 +10 6-1.52890280E-05-1.48870969E-06 5.80326146E-06-6.30333842E-01 6.30883499E-01 +10 7 4.54436854E-06-3.92685774E-06-4.46587516E-07 1.46968193E-06-1.42710885E-01 +10 8 1.42835335E-01 7.97300584E-07-6.08973631E-07-9.52458307E-08 2.17931296E-07 +10 9-2.53530227E-02 2.53751296E-02 9.93046614E-04-9.93840843E-04-4.35739490E-09 +10 10-4.07080766E-04-8.06422699E-09 4.06630390E-04-1.71059824E-08 2.44931865E-03 +10 11-2.45145477E-03-2.24937903E-09-1.78052359E-07-5.73907954E-09-1.08425819E-08 +10 12 1.19759950E-01-1.19864415E-01-8.78731154E-09 2.09133601E-02-2.09315989E-02 +10 13-7.11246045E-08 2.34575501E-02-2.34780037E-02 3.98843798E-08 5.84942928E-08 +10 14-3.33716152E-08-6.25345213E-09 1.49346365E-08 2.92125432E-03-2.92380097E-03 +11 1-1.46917375E-01-4.11684981E-02-1.87103332E-01-2.09068230E-03 6.00611678E-01 +11 2 3.68997781E-01 2.69075721E-07-1.07508117E-09 7.37140105E-02 4.12407484E-08 +11 3-1.34158560E-08 1.05408074E-02 9.32835830E-08-1.54018133E-08 4.27178546E-02 +11 4-2.08619664E-07 1.41205322E-07-7.48359904E-02 6.45361669E-08 5.64031829E-07 +11 5-2.08145427E-01 2.33881439E-07 1.18708200E-07-1.00067436E-01 1.11545417E-01 +11 6 1.11435972E-01-2.34615822E-01 7.34474669E-02 8.87972060E-06 3.70695636E-06 +11 7 6.01832716E-02 6.01550690E-02-7.42712573E-02 1.89395534E-02 1.37178751E-06 +11 8-1.15835843E-07 2.04468585E-02 2.04389048E-02-1.75509052E-02 5.30915514E-03 +11 9-1.96411940E-07-6.51826496E-07-1.13981385E-08 5.97521860E-09-3.78676050E-03 +11 10 3.61115083E-09-3.17036480E-03 1.46769682E-09-3.17057952E-03-3.17794512E-08 +11 11-1.26649181E-08 1.42007844E-04-6.32994517E-02-1.06412081E-02 6.07615399E-03 +11 12-5.71963090E-06-4.70861510E-06 6.97395238E-02-3.51707806E-07-1.30308037E-07 +11 13-6.14040836E-03-5.16059688E-08 2.48420317E-07 8.56510821E-03 2.68223622E-03 +11 14 2.68291950E-03-3.32600154E-03-4.49815171E-04 3.33377371E-08 4.53330462E-08 +12 1 1.00582440E-06 3.00806086E-07 1.48041592E-06 2.79508239E-07-5.09076579E-06 +12 2-4.14681647E-06 2.66368204E-02 2.66136166E-02-1.19247991E-06 4.51605698E-03 +12 3 4.51212315E-03-1.90883631E-07 1.23117295E-02 1.23010102E-02-5.63750011E-07 +12 4-2.67372056E-02-2.67139211E-02 1.01366034E-06-2.74287840E-02-2.74048829E-02 +12 5 2.53940120E-06-2.88614690E-03-2.88371032E-03 9.25890876E-07 6.65133944E-06 +12 6-2.69406379E-06-3.92892395E-06-4.14629576E-05 5.47268441E-01 5.46791606E-01 +12 7 1.30553885E-06-1.07599289E-06-6.54449000E-07-1.10948387E-05 1.22332034E-01 +12 8 1.22225452E-01 2.42136829E-07-1.23782212E-07-3.20775320E-08-1.90047471E-06 +12 9 2.16040837E-02 2.15852692E-02-8.07951844E-04-8.07463767E-04 1.00042964E-07 +12 10-2.49886729E-04 1.75294996E-08-2.50392574E-04 2.04121526E-08-3.40628331E-03 +12 11-3.40331602E-03 1.95146143E-08 9.15068409E-07 4.55682289E-07 5.73466823E-08 +12 12-3.84844004E-01-3.84508708E-01-2.18225271E-06-2.70956842E-02-2.70720788E-02 +12 13-3.52795315E-07-1.29018657E-02-1.28906097E-02-4.30771594E-08-1.22456734E-09 +12 14-1.50022663E-08 2.15732252E-08-1.02401945E-07 2.81176916E-03 2.80931998E-03 +13 1 1.27462455E-02 2.88095809E-03 1.60706798E-02 5.15766322E-03-5.24337493E-02 +13 2-4.32639199E-02 1.38141357E-06 1.25987882E-06-1.30682559E-02 2.39845220E-07 +13 3 2.21110058E-07-2.05240895E-03 5.71223431E-07 7.02669993E-07-7.11867982E-03 +13 4-1.37953381E-06-1.42177608E-06 1.40421523E-02-1.61556440E-06-1.03186888E-06 +13 5 3.01340485E-02 5.11591658E-07-2.23926793E-06 1.07071977E-02 1.41907577E-02 +13 6 1.28924375E-02-2.62261111E-02 8.68601483E-01 2.97139422E-05 2.15441228E-05 +13 7 5.15825729E-04 1.63927618E-04-2.93345086E-03 2.35424048E-01 6.84744312E-06 +13 8 4.98320967E-06-5.42435539E-04-6.02541327E-04 7.14350074E-04 4.02133816E-02 +13 9 1.20839165E-06 1.13398714E-06-3.09689536E-08-6.28173415E-08 1.00957568E-03 +13 10-3.68914454E-08 4.58972751E-04-2.52752906E-08 4.60070883E-04-1.66839354E-07 +13 11-1.46517570E-07-7.34561809E-04 1.09696294E-02 1.78739830E-03-3.13786290E-03 +13 12-1.75892098E-05-1.58027701E-05-1.67641392E-02-1.35119341E-06-1.13004726E-06 +13 13-1.19805704E-03-9.59351653E-07-1.66431955E-07-4.46466600E-04-2.29179001E-05 +13 14-2.72367688E-05-1.17346929E-04 2.88767502E-03 7.96467010E-08 1.26777099E-07 +14 1-9.63211358E-07-5.88951014E-07-2.80225065E-08 2.34627340E-06 2.55852566E-05 +14 2-5.86077160E-05-7.62781819E-02-7.62117971E-02-1.97432137E-06-1.37384909E-02 +14 3-1.37265350E-02-2.81757093E-07-6.55230760E-02-6.54660476E-02-1.55893775E-06 +14 4 9.92360182E-02 9.91496568E-02 1.20259812E-06 1.31408763E-01 1.31294418E-01 +14 5 1.39818492E-06 6.00859034E-01 6.00336059E-01 1.44766597E-05 6.45803629E-06 +14 6 6.13052653E-06-1.27204486E-05-1.52812581E-07 7.07611230E-02 7.06995452E-02 +14 7 4.16926955E-06 4.32829880E-06-4.53809388E-06 4.92377679E-08-7.02155705E-03 +14 8-7.01544631E-03 1.65936342E-05 1.69898070E-05 7.13475458E-06 6.22482116E-08 +14 9-7.82664782E-02-7.81983666E-02 1.15016743E-02 1.14919798E-02 2.30984542E-07 +14 10 4.97573873E-03 7.91783479E-08 4.98049716E-03 9.25325708E-08 2.22230624E-03 +14 11 2.22037179E-03-8.65594608E-10-3.50314016E-07 1.41258915E-06-2.75451268E-07 +14 12-1.24019756E-01-1.23911814E-01-3.31670651E-06 3.86844962E-03 3.86506907E-03 +14 13-1.41970704E-06-7.74405701E-02-7.73731919E-02-1.03532697E-06 1.03481637E-07 +14 14 1.07236378E-07-1.69979707E-07 4.02944848E-08-2.06677427E-03-2.06497461E-03 +15 1 4.20769283E-02 2.24466049E-02 1.74468199E-02-7.74262214E-02-7.01305564E-01 +15 2 1.52538490E+00-1.62732816E-06-2.29594674E-06 7.86104402E-02-2.97621025E-07 +15 3-4.36326047E-07 1.28549414E-02-1.39206815E-06-1.96043239E-06 6.55882308E-02 +15 4 2.16551702E-06 3.09574406E-06-6.86934573E-02 2.98000484E-06 4.21849213E-06 +15 5-7.57806003E-02 1.30552245E-05 1.82165942E-05-5.79947985E-01-2.27517899E-01 +15 6-2.27575257E-01 4.60151102E-01 3.81774829E-02 5.62148016E-06 6.78629657E-06 +15 7-1.52183597E-01-1.52201505E-01 1.83134389E-01 1.19211120E-02 1.52642197E-06 +15 8 1.61793285E-06-4.95596613E-01-4.95597982E-01-9.61466076E-02 9.47569649E-04 +15 9-5.06543280E-07-1.49061407E-06 2.61992123E-07 3.63680045E-07-9.64743092E-03 +15 10 1.67183804E-07-4.19890153E-03 1.16210291E-07-4.19870434E-03 2.28120793E-08 +15 11 3.38754721E-08-1.31176644E-04 3.53767601E-02-3.19182425E-02 2.55380525E-02 +15 12-4.18697693E-06-5.36484704E-06 1.05674779E-01-8.99346657E-09-1.00307958E-07 +15 13 3.72105945E-02-2.09061425E-06-2.83303610E-06 6.20928196E-02-4.73272267E-03 +15 14-4.73139066E-03 7.34980172E-03-8.81263634E-04-1.06790640E-07-1.20215934E-07 +16 1-1.78734174E-07-1.13932243E-07 2.53876217E-08 4.77976997E-07 5.29954481E-06 +16 2-1.24278117E-05 7.05562754E-02-7.06177375E-02-3.13875531E-07 1.30026761E-02 +16 3-1.30140035E-02-3.71717278E-08 6.42739536E-02-6.43299412E-02-2.62802027E-07 +16 4-9.87085780E-02 9.87945690E-02 1.54598596E-07-1.04107782E-01 1.04198490E-01 +16 5-7.51378249E-08-6.29732082E-01 6.30280634E-01 2.72922656E-06 1.01941114E-06 +16 6 1.00208152E-06-2.04831472E-06 1.22484543E-06-8.27657244E-02 8.28378866E-02 +16 7 3.76708676E-07 1.20697875E-06-7.46492651E-07 3.96283484E-07 9.39713535E-03 +16 8-9.40530572E-03 2.94750874E-06 4.11772374E-06 1.68612382E-06 1.62186542E-07 +16 9 9.78570387E-02-9.79422865E-02-1.13455000E-02 1.13552255E-02 3.51335828E-08 +16 10 4.99624930E-03 1.34635984E-08-4.99168934E-03 1.97218707E-08-2.09753318E-03 +16 11 2.09935970E-03-5.45197391E-09-8.49441991E-08 3.19647068E-07 1.31617404E-07 +16 12 1.16579499E-01-1.16681088E-01-5.29191938E-07 4.45851607E-03-4.46241653E-03 +16 13-3.15035186E-07 1.02107622E-01-1.02196597E-01-1.70505907E-07 7.87571178E-09 +16 14 2.43835858E-08-2.25184203E-08 9.37539852E-09 1.14218110E-03-1.14317505E-03 +17 1 6.16319065E-02 4.24926726E-02-1.11062785E-01-1.06547876E-01-4.65037976E+00 +17 2 9.34757114E+00-1.01149199E-07-7.29207275E-08-4.37453576E-02 1.02014734E-08 +17 3-3.28158146E-08-1.04389202E-02-1.14885910E-07-2.19939159E-07-5.85063462E-02 +17 4 8.96396430E-08 1.76413854E-07 1.22809265E-01-4.49226097E-08-3.78708643E-07 +17 5-1.78363726E-01 1.82528856E-06 3.27691158E-06 1.38502972E-01-2.47494879E-02 +17 6-2.47464241E-02 5.44617393E-02-2.03245181E-03 5.63016659E-08 6.35723686E-08 +17 7-2.01333343E-01-2.01331676E-01-1.88618526E-01-1.10121274E-03 2.28763808E-07 +17 8 3.57810420E-07-2.34065619E+00-2.34067854E+00-2.66848809E+00 1.48372485E-02 +17 9 1.39882430E-07 8.94315371E-08 2.21905271E-08 4.37652679E-08 8.07099578E-03 +17 10 1.99412680E-08 5.29443394E-03 1.04394539E-08 5.29456591E-03-6.02916554E-09 +17 11 4.21198900E-09-8.75723243E-05-4.77882173E-02-8.55523552E-02 5.44458039E-01 +17 12-2.85710042E-07-4.10295778E-07-4.17537791E-02-2.48922208E-08-1.52658002E-08 +17 13 2.72700575E-02-3.61293498E-07-6.63046926E-07-3.66597557E-01 1.40588346E-03 +17 14 1.40714769E-03 1.10981949E-04-8.37141869E-04 1.24929372E-09 5.83164898E-09 +18 1-2.80891817E-02-5.72337659E-03-2.72029270E-02-5.63542451E-02 2.17041490E+00 +18 2-1.89677736E+00 2.57917148E-08-7.36801256E-08 7.23026940E-02-2.73292934E-08 +18 3-2.14945879E-08 4.11469321E-03-1.06997199E-07-6.24187808E-08-2.62461481E-02 +18 4 3.44913061E-07 2.95424792E-07 1.08924035E-01-5.88272894E-07 1.21447937E-07 +18 5-1.20899748E-01 1.87936177E-06 9.40341358E-07 1.71039692E+00-1.82824361E-01 +18 6-1.82842853E-01 3.64332595E-01 1.23190133E-02 2.33386911E-06 2.65639536E-06 +18 7-7.53388030E-02-7.53491971E-02 2.12388756E-01 6.94253752E-03 1.16609387E-06 +18 8 1.16408529E-06 5.26055619E-01 5.25995159E-01 1.40643174E+00 4.02353133E-02 +18 9 1.79589537E-06 1.52950772E-06 3.49428731E-08 2.27099663E-08 5.78997467E-03 +18 10 1.62670912E-08 4.97577130E-03 1.82796263E-08 4.97573856E-03-5.16244092E-09 +18 11-1.53546341E-08 2.15011550E-05-1.92942731E-01 1.68272384E-01-2.08021644E+00 +18 12-1.02526030E-06-1.00115291E-06 8.27314645E-02-7.55260569E-08-6.44011615E-08 +18 13 9.95506164E-02-1.22700176E-06-1.10515898E-06 3.63565760E-01-8.35103425E-04 +18 14-8.29387524E-04-2.25943368E-03-3.78407425E-03-4.56505858E-08-5.54415940E-08 +19 1-1.34707488E-07-1.99059319E-07 1.34714215E-06 1.37094955E-06 3.09876573E-06 +19 2-2.94919942E-05 1.09086238E-01 1.08991462E-01-1.37137452E-07 3.52762947E-03 +19 3 3.52456572E-03-6.31648188E-08-5.64077530E-02-5.63587450E-02-1.71749138E-07 +19 4 1.89086403E-01 1.88922110E-01 7.71596581E-07-1.04267131E+00-1.04176541E+00 +19 5-1.89207504E-06 1.08106050E+00 1.08012127E+00-4.55775073E-06-1.29348703E-06 +19 6-1.52650138E-07 1.45215141E-06 1.08934735E-06-7.59842567E-02-7.59182364E-02 +19 7 1.33822002E-06 1.63278090E-06 1.64234846E-06 3.89567615E-07-1.57607720E-02 +19 8-1.57470681E-02 1.38678433E-05 7.91964303E-06 2.95124045E-06-5.62530445E-06 +19 9 5.17397303E-01 5.16947693E-01 1.40906265E-02 1.40779867E-02 2.00058119E-08 +19 10 6.50184563E-03 3.03057188E-08 6.50696602E-03 2.32233633E-08 7.39742734E-03 +19 11 7.39100053E-03 8.36067994E-09-1.20102988E-07-1.25294397E-06 1.04331908E-05 +19 12-5.80369165E-03-5.79864298E-03 1.23010022E-06 1.85530512E-02 1.85369541E-02 +19 13 1.67403905E-07-2.78136987E-01-2.77895376E-01-2.35583838E-06 3.56474675E-08 +19 14-7.60342278E-09-1.83840249E-08-5.02556889E-08 6.06350781E-03 6.05823684E-03 +20 1-2.46365628E-08-3.61229495E-08 2.49425833E-07-1.48125403E-08 5.27345192E-06 +20 2-8.99631730E-06-1.08727589E-01 1.08822152E-01-5.32307987E-08-3.11704893E-03 +20 3 3.11976106E-03-5.73960780E-09 5.87295499E-02-5.87806281E-02 4.81089708E-08 +20 4-1.94453342E-01 1.94622450E-01-2.95793294E-08 1.04047768E+00-1.04138259E+00 +20 5 1.73284003E-06-1.09641670E+00 1.09737029E+00-1.28549964E-07-2.00167249E-06 +20 6 1.77105316E-06 2.33305552E-07-6.02871796E-07 7.97200792E-02-7.97893987E-02 +20 7-4.39732504E-07 8.09278621E-07 3.94383570E-07-1.92951340E-07 1.25510258E-02 +20 8-1.25619282E-02 1.28667909E-05-7.52326061E-06 3.70129558E-06 4.58520654E-06 +20 9-5.28878291E-01 5.29338152E-01-1.46366031E-02 1.46495898E-02-9.59515610E-09 +20 10 6.68488122E-03-4.42354410E-09-6.67941730E-03 2.85688939E-10-7.65529663E-03 +20 11 7.66195487E-03 2.00853483E-09-1.63016622E-07-1.39481870E-07-2.37847087E-06 +20 12 8.35023999E-03-8.35749033E-03 1.76502517E-07-2.21374881E-02 2.21567674E-02 +20 13 1.80814786E-07 3.11863919E-01-3.12135201E-01 8.66060226E-07 8.54452977E-08 +20 14-6.81369579E-08-1.09357167E-08 3.40147832E-08-5.00143836E-03 5.00578528E-03 +21 1 2.04678317E-03-3.06758206E-03 3.79806571E-02 4.12090922E-02-2.06171171E-01 +21 2-4.58806968E-01 1.09312914E-06 1.05820934E-07 7.87587970E-06 2.83215748E-08 +21 3 3.67496229E-09-1.51848342E-06-6.33403852E-07-6.24133103E-08-2.22060461E-03 +21 4 2.06616283E-06 1.93384140E-07 3.36559514E-03-1.07192281E-05-9.98560058E-07 +21 5-1.22796164E-01 1.07400985E-05 5.74040425E-07-1.20750697E-01-1.39537304E-02 +21 6-1.36807216E-02 2.79530124E-02-1.82637612E-01-6.55482800E-07 1.09258507E-07 +21 7 3.39644632E-02 3.40677283E-02 3.95229908E-02-6.90790736E-02-1.61038177E-07 +21 8 3.60604491E-08 1.84328261E-01 1.82808940E-01-2.74718132E-02 1.01637993E+00 +21 9 4.33644500E-06-9.60044546E-08 1.50500894E-07 8.77655124E-09-1.15070917E-05 +21 10 1.29520213E-08 4.13056050E-04 7.45625178E-08 4.13826859E-04 8.25415202E-08 +21 11 7.79741633E-09-5.15675147E-04 7.24089164E-03-3.78535602E-02 4.07455861E-01 +21 12 9.00187731E-08 8.54044504E-08 2.25989569E-02 3.00910366E-07 3.80771438E-08 +21 13-5.16718724E-03-2.63640133E-06 6.85030470E-08-1.40073620E-01 9.20709526E-04 +21 14 9.08570784E-04-1.09193690E-03 8.11893011E-03 5.38319480E-08 7.30406980E-09 +22 1 1.88847538E-08-1.92956959E-08 2.60847362E-07 2.64490611E-07-9.98601703E-07 +22 2-3.32524017E-06 9.44640136E-07-2.04156387E-06 3.30993394E-09 2.67363438E-08 +22 3-8.10577539E-08 8.02019446E-10-5.37235433E-07 1.03055867E-06-4.91876421E-09 +22 4 1.72790508E-06-3.50537845E-06-1.50452035E-09-8.96822067E-06 1.93651372E-05 +22 5-6.63853271E-07 8.39605120E-06-1.70965694E-05-5.66088876E-07-1.61018838E-01 +22 6 1.61018668E-01 1.73346839E-07 1.60480823E-04-7.44433003E-07 1.17934524E-06 +22 7-9.54759872E-02 9.54764116E-02 2.80325072E-07 9.51524496E-05-4.38484244E-07 +22 8 8.77593836E-07 8.96956185E-01-8.96953674E-01 2.66248482E-07-8.93931807E-04 +22 9 4.07536467E-06-4.93398855E-06 1.32362322E-07-2.50389351E-07-1.66225308E-09 +22 10-1.09042784E-07-3.80702601E-04 5.24039430E-08 3.80706973E-04 7.31183811E-08 +22 11-1.48831648E-07 3.79334693E-07 2.75643729E-08-2.25837426E-07 2.14371802E-06 +22 12 2.01537230E-07-1.01520566E-06 1.30304429E-07 2.21548566E-07-8.70324835E-07 +22 13-2.28396005E-08-1.77828762E-06 3.25401075E-06-8.52939029E-07 6.60727979E-03 +22 14-6.60726524E-03-8.75136874E-09-6.58397013E-06 4.27193286E-08-1.04781419E-07 +23 1 4.48909735E-03-2.59105047E-02 2.81134815E-01 4.66456794E-01-3.45881637E+00 +23 2-1.64173127E+00-1.62844582E-06-1.58583649E-06 6.39659053E-02-1.14959781E-07 +23 3-1.19475038E-07-1.35764654E-03 5.74658983E-07 5.14373319E-07-1.03769363E-01 +23 4-2.29234023E-06-2.09767772E-06 3.31753033E-01 1.54089203E-05 1.48868993E-05 +23 5-2.38672905E+00-1.07346133E-05-1.00566070E-05-2.51593452E-01-1.73159651E-01 +23 6-1.73206767E-01 3.48209834E-01 3.13423200E-02 1.40111281E-06 1.43550328E-06 +23 7 2.51252306E-01 2.51229786E-01 4.41926128E-01 1.49765368E-02 8.50024850E-07 +23 8 8.94159302E-07 1.04254309E+00 1.04268815E+00-1.25180505E+00-9.64274595E-02 +23 9 6.59969740E-06 7.46934319E-06-1.20858579E-07-1.02607596E-07 2.01958375E-02 +23 10-4.50185113E-08 1.01479308E-02-5.23121251E-08 1.01479962E-02-1.40058045E-07 +23 11-1.37571216E-07-4.36795809E-05 6.78534205E-02-1.72985837E-01 4.06673289E+00 +23 12-2.95943673E-06-3.08913796E-06 2.09066884E-01-2.07295688E-06-2.15532568E-06 +23 13-1.61091591E-02 9.58199091E-07 6.52129082E-07-1.59868017E+00-3.81766594E-04 +23 14-3.80547950E-04-7.81301410E-03-8.09537051E-04-9.52701422E-08-9.50831739E-08 +24 1-2.24553960E-07 3.63790474E-07-4.66603970E-06-6.71991493E-06 4.55627918E-05 +24 2 3.09239221E-05-8.14620196E-02-8.13910783E-02-9.39486046E-07-5.60152667E-03 +24 3-5.59665053E-03 6.17420209E-08 2.50973867E-02 2.50755228E-02 1.51409436E-06 +24 4-1.10392409E-01-1.10296245E-01-5.36725202E-06 7.62944584E-01 7.62280158E-01 +24 5 3.31634259E-05-4.79889621E-01-4.79471580E-01 5.10112261E-07 3.17629395E-06 +24 6 2.24956578E-06-5.45903813E-06-5.92624676E-07-4.92252363E-02-4.91823865E-02 +24 7-3.25616435E-06-3.97610450E-06-7.48603399E-06-3.84188243E-07-3.82219801E-02 +24 8-3.81887035E-02-1.86533518E-05-1.51258767E-05 1.07472187E-05 1.96595919E-06 +24 9 6.56279511E-01 6.55708220E-01-5.62366498E-03-5.61888455E-03-3.07173528E-07 +24 10-2.45155710E-03-1.61974149E-07-2.45385484E-03-1.49292910E-07-6.16776820E-03 +24 11-6.16239696E-03 1.59106728E-08-7.46845644E-07 2.35538849E-06-5.13450504E-05 +24 12-1.78906140E-01-1.78750357E-01-3.07189293E-06-1.55846471E-01-1.55710775E-01 +24 13-4.21364191E-07 5.85995772E-02 5.85483886E-02 2.30025983E-05-5.43864234E-09 +24 14 1.74520834E-08 1.32377179E-07 2.08083665E-08-1.54608316E-03-1.54473598E-03 +25 1-5.57471588E-08 3.77666807E-08-5.76074558E-07-2.93788609E-07-3.55645218E-06 +25 2 1.06710818E-05 8.62788601E-02-8.63540425E-02 1.03460123E-07 5.84137263E-03 +25 3-5.84646459E-03 2.37732146E-08-2.81350729E-02 2.81595827E-02-1.61627159E-08 +25 4 1.20720732E-01-1.20825898E-01-1.84396549E-08-8.39955877E-01 8.40687796E-01 +25 5-1.62519455E-06 3.73406579E-01-3.73731823E-01 4.95614846E-07 4.81563510E-07 +25 6-1.74612676E-07-3.11407332E-07-8.30987191E-08 3.76489300E-02-3.76817520E-02 +25 7 7.32915816E-08-8.84682155E-07-6.71147670E-07-1.92575656E-08 4.95393272E-02 +25 8-4.95825046E-02-5.44391361E-06-1.63210803E-06-3.96515993E-06-1.37566580E-07 +25 9-7.67521557E-01 7.68190566E-01 6.01229190E-03-6.01773950E-03 8.36049490E-09 +25 10-2.79955340E-03-2.32623975E-08 2.79739898E-03 1.94666114E-08 7.02031161E-03 +25 11-7.02642896E-03-1.96581110E-09 1.39691318E-07 3.49112853E-07 1.10659589E-06 +25 12 1.69917823E-01-1.70065888E-01-2.09089510E-07 1.68404283E-01-1.68551039E-01 +25 13-2.03355809E-07 1.54134151E-01-1.54268666E-01-2.34553034E-07-1.74171872E-08 +25 14 2.40648970E-09 9.81460420E-09-4.35566732E-10 1.37396721E-03-1.37516394E-03 +26 1-5.89287997E-02 3.14270198E-02-5.29937907E-01-3.35867286E-01-5.23789878E+00 +26 2 1.16724927E+01 1.67486220E-07 4.69253599E-07 1.20934799E-01 1.25283590E-08 +26 3-5.22886299E-08 6.97232146E-03-1.38367576E-07-3.49119701E-07-9.64816499E-02 +26 4 6.96236668E-07 1.52651477E-06 3.33982937E-01-2.77462080E-06-5.88343801E-06 +26 5-2.58332255E+00 6.41323299E-07 2.18943310E-06 6.56544645E-01 6.64012560E-02 +26 6 6.64108950E-02-1.39360042E-01-6.40081164E-03-2.39089810E-07-1.71316250E-07 +26 7-4.13101494E-01-4.13093467E-01-4.75963022E-01-5.32840280E-03-6.43957955E-07 +26 8-7.98724353E-07-3.92863747E+00-3.92868368E+00-4.52007666E+00 3.06589657E-02 +26 9 5.43854772E-08-8.78834923E-07 2.57857344E-08 8.31941126E-08 2.53124803E-02 +26 10 3.47133671E-08 6.48439439E-03 1.09708292E-08 6.48430696E-03 2.89003247E-08 +26 11 5.90842969E-08 5.79031591E-05 1.72353919E-01 6.10656427E-02 2.48079398E+00 +26 12-3.82136687E-08 2.47603740E-07-1.42340848E-03-2.93351552E-07 4.33304051E-08 +26 13 2.97242158E-02 2.04551833E-06 2.42251172E-06-1.46266351E+00-5.12884904E-03 +26 14-5.13347199E-03-6.83487939E-03 3.06255736E-03 3.53797868E-08 4.16802587E-08 +27 1-3.66356640E-02 2.58793104E-02-3.79920583E-01-4.31854576E-01 2.64868022E+00 +27 2 1.05550708E+00-2.66700855E-07-2.03079141E-07-7.99557517E-03 4.90353614E-09 +27 3 1.59338066E-09 9.34170323E-04 3.08913472E-07 2.76341578E-07 8.44794758E-02 +27 4-8.43481319E-07-7.18582375E-07-2.17612690E-01 5.34274441E-06 4.75721976E-06 +27 5 7.01775974E-01 5.45734100E-06 5.63418091E-06-1.38467758E+00-8.30233028E-02 +27 6-8.30271925E-02 1.62826831E-01 2.60649618E-03 3.43118141E-07 4.57525918E-07 +27 7-3.93663294E-01-3.93670631E-01-3.12445552E-01 4.90872416E-03 3.62504134E-07 +27 8 2.84238849E-07-3.00042531E-01-3.00049207E-01-2.21366037E+00 4.34695951E-03 +27 9 7.57594349E-06 7.28713112E-06-5.83679301E-08-4.68180378E-08-1.07101083E-02 +27 10-3.08980376E-08-8.36362463E-03-2.92443088E-08-8.36363459E-03-3.95628625E-08 +27 11-3.64623355E-08 6.33950829E-06-7.91595427E-02-2.07670322E-02 7.27483368E-01 +27 12 8.73883068E-07 9.51810343E-07-2.97995902E-02 2.21489263E-06 2.28506565E-06 +27 13-3.15186007E-01-1.63959794E-05-1.62176431E-05 2.17364537E+00-9.62198248E-03 +27 14-9.61641286E-03 3.03807473E-02-3.68954543E-03-1.31423054E-07-1.27790277E-07 +28 1-8.25912817E-08 1.59153398E-07-1.70589707E-06-2.22771006E-06 2.89108118E-05 +28 2-1.58564595E-05 3.33054787E-02 3.32764615E-02-1.27045633E-07 3.68862227E-04 +28 3 3.68541126E-04-3.00084755E-08-3.57563158E-02-3.57251647E-02 6.23378713E-07 +28 4 1.03338740E-01 1.03248705E-01-1.39017838E-06-6.49249077E-01-6.48683459E-01 +28 5 6.46579653E-06-6.37363391E-01-6.36808210E-01-1.15327683E-05-8.51265309E-07 +28 6-8.69946008E-07 1.71028935E-06 6.83903353E-08 4.01297617E-02 4.00948060E-02 +28 7-2.46360673E-06-2.23492125E-06-9.04417502E-07 1.17629339E-07 2.23426882E-02 +28 8 2.23232222E-02 6.86663794E-06 6.44635885E-06-1.07389556E-05-1.31641823E-07 +28 9-9.98927671E-01-9.98057480E-01 7.36908680E-03 7.36271910E-03-6.49645275E-08 +28 10 3.26584725E-03-6.03426714E-08 3.26876530E-03-6.32031730E-08 4.01304938E-03 +28 11 4.00955308E-03-8.46393878E-09-8.04744318E-07 4.85268913E-07 3.76327073E-06 +28 12-1.10275964E-01-1.10179912E-01-3.70855332E-07-2.45242862E-01-2.45029244E-01 +28 13-2.87846554E-06 1.92343400E+00 1.92175850E+00 2.05091778E-05-8.63614211E-08 +28 14-8.05962858E-08 2.43059933E-07-3.16462398E-08 1.31089322E-02 1.30975126E-02 +29 1 1.18373171E-08-2.61984551E-09 6.99726802E-08 3.50499260E-08 6.68247833E-07 +29 2-1.22000431E-06-2.58853512E-02 2.59079169E-02-1.56348366E-08 4.62899217E-04 +29 3-4.63302594E-04-1.46997457E-08 3.62664477E-02-3.62980640E-02-2.02716436E-08 +29 4-9.67763141E-02 9.68606774E-02 6.44954155E-08 5.74095929E-01-5.74596421E-01 +29 5 3.87489074E-07 6.61145837E-01-6.61722275E-01 8.23322338E-08-8.64264461E-08 +29 6 6.07775452E-08 2.54933396E-08-9.43047034E-09-3.80089711E-02 3.80421099E-02 +29 7-2.77326627E-07 3.59955612E-07 1.03870737E-07-2.30737209E-08-1.67562557E-02 +29 8 1.67708632E-02 9.18460858E-07-9.99549344E-08 6.54176653E-07 2.89054522E-08 +29 9 9.09437964E-01-9.10230846E-01-7.52330589E-03 7.53000367E-03 3.48334818E-09 +29 10 3.43922888E-03 1.11474278E-08-3.43641974E-03-6.63720694E-09-3.38297388E-03 +29 11 3.38592297E-03 3.70255845E-10-3.91635017E-08 1.05175716E-08-6.70325854E-07 +29 12 1.24545784E-01-1.24654374E-01 4.25416679E-08 3.03037036E-01-3.03301248E-01 +29 13 7.08651452E-08-1.92828807E+00 1.92996926E+00 1.27291247E-07-1.46308388E-09 +29 14 6.61806106E-09-3.96341924E-09-3.02543128E-09-1.11050919E-02 1.11147735E-02 +30 1-9.11610732E-02 3.93281477E-04-3.81453801E-01-6.18489458E-01-2.85309830E-01 +30 2 4.90869725E+00-4.78176365E-08-9.02402150E-08-5.07178862E-02 1.55351974E-08 +30 3 1.10813588E-08 7.96199952E-03 9.19511896E-08 1.67644909E-07 1.43511177E-01 +30 4-1.88401783E-07-4.77461153E-07-4.51829790E-01-4.69476736E-09 7.91138677E-07 +30 5 1.51831755E+00-1.36537672E-06-1.63504990E-06-7.77544176E-01-1.73919019E-01 +30 6-1.73924797E-01 3.40372303E-01 3.85313052E-03 1.15187028E-06 1.41931975E-06 +30 7-3.61329123E-01-3.61356812E-01-1.22404515E-01 1.84416121E-02 1.22319807E-06 +30 8 9.03814438E-07-2.07953453E+00-2.07949968E+00-1.55271175E+00-2.31826297E-02 +30 9-2.34769422E-06-1.91438789E-06-1.88741163E-08-4.12862558E-08-3.83239759E-02 +30 10-7.36263909E-09-5.60332589E-03-5.32407944E-09-5.60376370E-03-1.14657337E-08 +30 11-2.02411648E-08 2.90845351E-04-2.12551681E-01-9.72102060E-01 8.73862373E-01 +30 12-4.66861547E-07-4.09662360E-07 3.03454937E-01-3.50962437E-07-4.34964165E-07 +30 13 3.48353808E-01 2.69393334E-06 2.46941900E-06-6.40103256E-01 9.36556356E-03 +30 14 9.37421034E-03 1.35927891E-02-5.72727091E-03-3.08918164E-08-4.29739005E-08 +31 1-7.29287389E-03-4.75417619E-02 3.68372106E-01 9.74527403E-01-9.05940293E+00 +31 2 7.72057697E-01 1.35589585E-08 1.03811076E-08 6.02703703E-02-3.80951920E-08 +31 3-8.37815769E-08 5.19594468E-03-1.81918389E-07-4.12438221E-07-1.12372940E-02 +31 4 5.78406478E-07 1.26742978E-06 1.09892147E-01-7.31689187E-07-1.61527050E-06 +31 5-5.04521420E+00 6.25739396E-07 9.02646612E-07-9.07937631E-01 1.01259400E-01 +31 6 1.01256654E-01-2.03552213E-01 1.82616908E-03-1.46691825E-07-1.62788824E-07 +31 7 5.58369358E-01 5.58385618E-01 1.82926661E-01-1.08511830E-02-1.09019952E-06 +31 8-1.13523149E-06-5.61687536E-02-5.61739437E-02-2.49267283E+00 3.49289316E-03 +31 9 9.38663226E-07 8.78696899E-07 3.00486540E-08 8.27257265E-08 8.37886377E-03 +31 10 3.21932454E-08-8.78551380E-04 1.04606234E-08-8.78507781E-04 2.45987978E-08 +31 11 4.57195292E-08-2.90003669E-05-1.35904970E-01-1.25892383E+00 1.05359356E+01 +31 12 3.40830561E-07 3.92254185E-07-2.52687149E-01 3.88444403E-08-9.82103680E-09 +31 13-7.78268859E-01-6.44397394E-07-4.56965943E-07-2.53017942E+00 1.33934310E-02 +31 14 1.33952735E-02 1.56195855E-02-1.22107505E-03 2.55251278E-08 2.99638095E-08 +32 1-1.48547402E-06-1.72066089E-06 7.96574037E-06 1.58103199E-05-1.91404717E-06 +32 2-6.48921241E-05-9.54999075E-02-9.54170620E-02 8.46914178E-07-7.61299928E-02 +32 3-7.60639517E-02 6.45233308E-07-7.42646976E-01-7.42002707E-01 4.87438653E-06 +32 4 1.94031300E+00 1.93862976E+00-1.59774398E-05-1.83293101E+00-1.83134093E+00 +32 5 3.14077340E-05 5.89680566E-01 5.89169028E-01-2.19203437E-06 4.63554141E-07 +32 6 1.25590710E-07-7.37006570E-07 1.80364021E-07 3.74498113E-02 3.74173881E-02 +32 7 1.14502282E-05 1.19800428E-05 1.45182006E-05-2.55997099E-07-6.40587224E-02 +32 8-6.40032596E-02 2.64963242E-05 2.62128748E-05 3.42099409E-05 5.11422566E-08 +32 9-7.32413325E-02-7.31777413E-02 1.32751058E-01 1.32636190E-01-8.66836793E-07 +32 10 5.91624033E-02-4.21896327E-07 5.92141712E-02-4.07301153E-07 5.81989668E-02 +32 11 5.81484767E-02 5.47759013E-09 9.54540550E-07 3.87734846E-06-3.58926014E-05 +32 12-4.54019226E-02-4.53624885E-02-3.57654356E-07 6.46760040E-02 6.46198578E-02 +32 13 7.88710253E-07 1.43019653E-01 1.42895569E-01 1.06942473E-05-1.81354173E-08 +32 14-1.90164880E-08 8.17964738E-08 8.07703890E-09-1.51631887E-02-1.51500217E-02 +33 1-1.33383886E-06-1.51897205E-06 6.97903103E-06 1.42988874E-05-1.30449375E-05 +33 2-4.94693725E-05 9.46770059E-02-9.47592090E-02 4.29741940E-07 7.58641069E-02 +33 3-7.59299771E-02 3.18187161E-07 7.39997669E-01-7.40640145E-01 2.64542555E-06 +33 4-1.93171581E+00 1.93339299E+00-8.24473030E-06 1.81861898E+00-1.82019798E+00 +33 5 1.61801036E-05-5.89314737E-01 5.89826417E-01-7.72147236E-07 5.88837613E-07 +33 6-3.95333847E-07-3.29002151E-07 9.47445729E-08-5.98818775E-02 5.99339389E-02 +33 7 9.72426877E-06 1.17386128E-05 1.21413787E-05-2.56048837E-07 1.02801789E-01 +33 8-1.02891165E-01 2.10779828E-05 2.00403227E-05 2.49544300E-05 1.27127411E-07 +33 9 5.06085752E-02-5.06524540E-02-1.32378449E-01 1.32492824E-01-4.56360151E-07 +33 10 5.89640208E-02-2.32948933E-07-5.89121234E-02-2.08352735E-07-5.77340222E-02 +33 11 5.77841469E-02-4.20031673E-09 4.28848857E-07 2.54337590E-06-1.93829648E-05 +33 12 3.19273177E-02-3.19549881E-02-2.99453383E-08-5.48528302E-02 5.49004151E-02 +33 13 7.76519292E-07-1.32299651E-01 1.32414500E-01 5.14093920E-06-4.32725785E-08 +33 14-2.22978576E-08 8.14569383E-08-7.96132771E-09 1.17607805E-02-1.17709784E-02 +34 1 2.80584489E-01 3.11764820E-01-1.41734577E+00-2.99157212E+00 4.29893043E+00 +34 2 8.89964199E+00-1.71523159E-07-1.21653877E-06-3.93654044E-02-1.01031258E-07 +34 3-9.03078882E-07-2.85037603E-02-1.22328703E-06-9.33867904E-06-2.51716760E-01 +34 4 3.04513998E-06 2.40460240E-05 7.10210733E-01-2.78919049E-06-2.24101749E-05 +34 5-1.66836494E+00 4.38363647E-07 6.38319211E-06-1.70875997E-02-5.64663246E-03 +34 6-5.64419906E-03 3.93297475E-02-1.60104368E-03-1.16428833E-06-1.42885585E-06 +34 7-2.23439235E+00-2.23439799E+00-2.48760069E+00 3.70568468E-03 2.18162812E-06 +34 8 2.92714148E-06-3.79279090E+00-3.79278447E+00-4.31925019E+00-4.25352505E-03 +34 9-1.48640868E-06-3.09882079E-06 2.17415225E-07 1.66354238E-06 4.22424774E-02 +34 10 7.47429551E-07 2.12129113E-02 1.01372761E-07 2.12132966E-02 7.88078587E-08 +34 11 7.10443854E-07-2.55757266E-04-2.22462829E-02-3.42137473E-01 2.27502769E+00 +34 12-7.02336144E-07-1.43734863E-06-5.12919955E-02 3.32410842E-07 7.37801265E-07 +34 13-2.65960225E-01 1.01966665E-06 3.27934469E-06-4.30639984E-01 8.45094736E-03 +34 14 8.44499132E-03-1.24294417E-02 3.94510587E-03-1.07061225E-07-2.72395919E-07 +35 1 4.31357076E-04 4.31355228E-04-1.86350281E-03-5.49137659E-03 2.90125839E-02 +35 2-3.31549507E-03-1.58141472E-02-1.58003697E-02 5.66623394E-04-5.26946754E-03 +35 3-5.26487482E-03 4.04456623E-04-2.56886936E-02-2.56662859E-02 4.73344082E-03 +35 4 9.83857547E-02 9.82999831E-02-1.38533971E-02-1.28904783E-01-1.28792437E-01 +35 5 2.15502195E-02-8.05732162E-02-8.05030586E-02-3.04292407E-03 4.26375802E-04 +35 6 4.17512536E-04-7.96495082E-04 1.23445112E-02-4.29125378E-01-4.28751598E-01 +35 7-4.21262371E-03-4.19631196E-03-2.13367562E-03-2.32861537E-02 8.40757526E-01 +35 8 8.40025194E-01 3.56024773E-05 2.85979585E-05 3.65907604E-03 9.93183544E-03 +35 9-4.86288797E-01-4.85865219E-01 4.11200957E-03 4.10781271E-03-7.83169753E-04 +35 10 2.15099819E-03-3.81475756E-04 2.15205734E-03-3.81496757E-04 3.23182270E-03 +35 11 3.22900471E-03 3.66725227E-05 1.03692553E-03 9.88927266E-04-1.95780187E-02 +35 12-3.03766213E-01-3.03501606E-01-7.35327354E-04 1.81153042E-01 1.80995225E-01 +35 13-1.47331773E-03 2.41547965E-01 2.41337575E-01 8.14355923E-03 4.16617788E-05 +35 14 4.18808622E-05-1.67244146E-06-3.86906608E-04-3.29210952E-02-3.28924173E-02 +36 1 2.22059460E-02 2.22099878E-02-9.59943963E-02-2.82593288E-01 1.49166887E+00 +36 2-1.68970094E-01 3.08572853E-04 3.08523824E-04 2.90884327E-02 1.02828265E-04 +36 3 1.02866487E-04 2.07637643E-02 5.01472444E-04 5.02302837E-04 2.43011428E-01 +36 4-1.92019598E-03-1.92183822E-03-7.11249936E-01 2.51561522E-03 2.51650230E-03 +36 5 1.10695868E+00 1.57161090E-03 1.57048519E-03-1.56289468E-01 2.21542577E-02 +36 6 2.12086152E-02-4.09276794E-02 6.32533664E-01 8.37253755E-03 8.36796933E-03 +36 7-2.17404204E-01-2.15620416E-01-1.09774133E-01-1.19316726E+00-1.64033629E-02 +36 8-1.63947947E-02 1.46426097E-03 7.03473054E-04 1.87296678E-01 5.08894733E-01 +36 9 9.48751287E-03 9.48276675E-03-8.02532781E-05-8.03970444E-05-4.02085525E-02 +36 10-4.20946029E-05-1.95816079E-02-4.20168133E-05-1.95844133E-02-6.30921611E-05 +36 11-6.31317495E-05 1.87686376E-03 5.32256109E-02 5.06701277E-02-1.00582709E+00 +36 12 5.92694092E-03 5.92345084E-03-3.77038004E-02-3.53514295E-03-3.53227014E-03 +36 13-7.55395847E-02-4.71219647E-03-4.71064790E-03 4.18386091E-01 2.13353218E-03 +36 14 2.16312629E-03-9.90756402E-05-1.98197767E-02 6.42351927E-04 6.41983701E-04 +37 1 9.58917370E-02 8.41566315E-02-2.98422107E-01-1.10729593E+00 5.61288683E+00 +37 2-1.02804108E+00 1.39247868E-07-3.74403619E-08 1.41393358E-01 1.28253815E-07 +37 3 1.59977088E-07 9.21450940E-02 2.16227467E-06 3.68431457E-06 1.03146914E+00 +37 4-4.85389170E-06-7.41023699E-06-3.08458835E+00 3.92946685E-06 5.75823495E-06 +37 5 4.34758806E+00-1.19015033E-06-3.98310662E-06-6.55027532E-01 9.27701081E-02 +37 6 9.29874809E-02-1.75590816E-01-1.45524994E-01-1.50958484E-06-7.60049877E-06 +37 7-7.46305014E-01-7.46718137E-01-5.00659147E-01 2.76542573E-01 2.43805533E-06 +37 8 1.46720440E-05 1.53199818E-01 1.53379859E-01 8.57797743E-01-1.20484704E-01 +37 9-9.42108908E-07-7.91005458E-06-3.70921256E-07-6.16363794E-07-1.70215927E-01 +37 10-2.67235447E-07-8.32737639E-02-1.53755571E-07-8.32726163E-02-1.49882538E-07 +37 11-2.69189340E-07-7.66409000E-04 2.41502777E-01 2.84168566E-01-3.78255219E+00 +37 12-1.33307144E-06-4.69039769E-06-1.74887397E-01 1.77834788E-06 2.17080015E-06 +37 13-4.96799218E-01-6.34858198E-07 3.86705871E-06 1.67420512E+00 1.50806815E-02 +37 14 1.50535204E-02-8.78509097E-03 1.80468995E-02-1.01370922E-07-4.37059052E-07 +38 1-9.18213755E-07-8.47983988E-07 3.48569171E-06 9.17368158E-06-3.91392048E-05 +38 2-1.37609209E-06 2.40074922E-02-2.40284179E-02-8.07403241E-07 9.92779287E-03 +38 3-9.93644510E-03-5.23234184E-07 6.22344413E-02-6.22886687E-02-5.94563950E-06 +38 4-2.01422339E-01 2.01597870E-01 1.78922352E-05 2.02004528E-01-2.02180571E-01 +38 5-2.46235142E-05 9.37605125E-02-9.38422668E-02 3.95688539E-06-2.04855867E-05 +38 6 1.92409360E-05 1.17514170E-06 3.17789547E-06 4.31608813E-01-4.31985043E-01 +38 7 4.42948732E-05-2.99390963E-05 5.65401717E-06-5.88716460E-06-8.69446540E-01 +38 8 8.70204429E-01-1.32054004E-05 1.78669135E-05-1.23848028E-06 2.50331534E-06 +38 9 5.11330370E-01-5.11776095E-01-1.18411184E-02 1.18507678E-02 9.78691710E-07 +38 10 4.95647119E-03 3.69836668E-07-4.95125959E-03 5.84580194E-07-4.70791538E-03 +38 11 4.71201682E-03 1.39637341E-08-1.45594806E-06-1.52103234E-06 2.09033965E-05 +38 12 2.53253846E-01-2.53474579E-01 9.74467076E-07-4.17453282E-02 4.17816657E-02 +38 13 3.52823768E-06-3.44369349E-01 3.44669559E-01-9.95243355E-06 6.19159322E-07 +38 14-8.33704621E-07 1.07062854E-07-1.97389337E-07 2.78650719E-02-2.78893583E-02 +39 1-5.09455515E-10-1.83095791E-08 1.75955668E-07-2.66515090E-08-6.84566253E-08 +39 2-7.23978573E-07-6.08864058E-07 8.24378311E-07 3.51696123E-08-2.37969191E-07 +39 3 2.82805383E-07 1.28186055E-08-1.43775528E-06 1.39905220E-06 5.00191525E-08 +39 4 4.88623749E-06-5.41231546E-06-2.75361656E-07-4.80659189E-06 6.10098371E-06 +39 5 2.52088105E-07-2.79188704E-06 3.98119573E-06-5.23503155E-08-5.80968491E-01 +39 6 5.80968536E-01-4.52259396E-08 5.78899571E-04-1.16610685E-05 1.93580763E-05 +39 7 1.05481044E+00-1.05481015E+00 1.71444035E-07-1.05105638E-03 2.31692292E-05 +39 8-3.73466737E-05-4.28903089E-01 4.28903698E-01 2.87217949E-07 4.27376547E-04 +39 9-1.32672528E-05 2.09033342E-05 2.85959549E-07-2.63509783E-07-1.02185472E-08 +39 10-9.16035030E-08-1.71849296E-03 9.59081966E-08 1.71848818E-03 1.01412861E-07 +39 11-1.25145039E-07 1.71229669E-06 1.88974732E-08 7.14278924E-08-1.93911021E-07 +39 12-6.16761609E-06 1.21937394E-05 2.02130946E-08 9.20619129E-08-4.73769902E-06 +39 13-1.44339715E-07 9.45690919E-06-1.22819833E-05 1.56936581E-07 2.16408238E-02 +39 14-2.16407987E-02-2.20363395E-08-2.15608323E-05-7.17819359E-07 1.31455069E-06 +40 1 3.35885056E-07 5.52292800E-07-3.68716970E-06-1.51776549E-05 9.32146765E-05 +40 2 1.57797848E-05-2.10188486E-03-2.10005413E-03-5.41776396E-07 3.31079255E-03 +40 3 3.30790776E-03 1.87710108E-08 7.83104364E-02 7.82422057E-02-7.82945841E-06 +40 4-1.79061718E-01-1.78905707E-01 2.38196895E-05 6.55157162E-02 6.54586298E-02 +40 5 5.05742040E-05 3.39092702E-01 3.38797294E-01 1.35008621E-06 5.96144322E-06 +40 6 6.47253050E-06-1.24697402E-05-1.73977631E-07 1.10911878E-01 1.10815252E-01 +40 7-2.16185552E-05-2.26235345E-05 3.54026628E-05 1.54074460E-07-4.03482599E-01 +40 8-4.03131088E-01-6.98205417E-06-6.62899442E-06 1.26389028E-06-3.39219092E-08 +40 9 3.22477296E-01 3.22196357E-01-1.85527092E-02-1.85355462E-02 6.92072913E-07 +40 10-8.80693214E-03 8.05851395E-07-8.81327006E-03 7.97202692E-07 3.78503453E-03 +40 11 3.78173836E-03-2.33141655E-08-1.63162013E-06-1.62078641E-05-8.14678733E-05 +40 12-8.48823892E-01-8.48084418E-01-3.64146159E-06 1.57983039E+00 1.57845408E+00 +40 13 4.46618046E-05-9.71363063E-01-9.70516828E-01 1.46796623E-05-7.02038118E-08 +40 14-1.07041012E-07-9.56814248E-07-2.85551914E-07 3.37408619E-02 3.37114664E-02 +41 1 1.48418164E-02 2.27901886E-02-1.33935754E-01-7.65812549E-01 4.64528865E+00 +41 2 6.66531692E-01-1.63430948E-09-2.56013297E-08-2.35733812E-02-5.73211604E-08 +41 3-4.93980090E-08 3.64512421E-03-1.60226849E-06-1.89002004E-06-3.83031820E-01 +41 4 3.63257732E-06 4.16678565E-06 1.17075823E+00-1.41494545E-06-1.79704955E-06 +41 5 2.61851628E+00-6.87031646E-06-6.72967437E-06 7.75510897E-02 3.19249716E-01 +41 6 3.19272561E-01-6.39597367E-01-1.52530099E-02-4.13809749E-06-4.25467451E-06 +41 7-1.05673268E+00-1.05675947E+00 1.85025058E+00 1.79028925E-02 1.02352452E-05 +41 8 1.03996659E-05-2.88871113E-01-2.88862987E-01 1.55514268E-01-5.44064792E-03 +41 9-7.40000995E-06-7.48087830E-06 3.21232212E-07 3.44003019E-07 3.32967564E-02 +41 10 2.14894468E-07 3.85795237E-02 1.74839713E-07 3.85791210E-02-8.57628617E-09 +41 11 1.92271621E-08 2.69248348E-04-8.14460928E-02-8.00986524E-01-4.22226188E+00 +41 12 1.60013883E-05 1.57810389E-05-2.12689842E-01-3.07146341E-05-3.04525255E-05 +41 13 2.30041469E+00 1.95744041E-05 1.95203120E-05 7.50563865E-01-4.97356914E-03 +41 14-4.95317842E-03-4.73918538E-02-1.35020933E-02-8.23542713E-07-8.34947420E-07 +42 1 2.25465142E-08 3.21013183E-08-2.58406783E-07 6.91976430E-09 1.94277570E-07 +42 2 7.58301911E-07 6.04362875E-03-6.04889842E-03-2.64726912E-09-2.30149102E-03 +42 3 2.30349757E-03 4.13852772E-09-7.44962253E-02 7.45611754E-02 3.01984375E-08 +42 4 1.63530276E-01-1.63672854E-01-4.38213916E-08-5.29133450E-02 5.29594757E-02 +42 5-2.40033328E-07-3.15558295E-01 3.15833443E-01-1.93931031E-08-4.30842832E-07 +42 6 3.63805978E-07 6.49620173E-08-2.66347006E-08-7.64707277E-02 7.65374047E-02 +42 7 3.65476247E-07-8.37777606E-07-4.78339968E-07 4.11981802E-08 3.33055128E-01 +42 8-3.33345529E-01-5.49207541E-07-1.27821350E-07-3.58129569E-07-1.64354704E-08 +42 9-2.75209202E-01 2.75449166E-01 1.83828345E-02-1.83992511E-02-4.88450664E-09 +42 10-8.43032018E-03 3.10271448E-08 8.42349702E-03-3.75043287E-08-4.47025280E-03 +42 11 4.47415167E-03 1.99068738E-09 6.60305354E-08-6.63907217E-08 4.73915176E-07 +42 12 8.93639241E-01-8.94418442E-01-9.02868978E-08-1.57703216E+00 1.57840723E+00 +42 13-2.99703333E-08 9.02399216E-01-9.03186051E-01-1.52405365E-07 3.50748361E-08 +42 14-3.72649201E-08 7.56750058E-09 6.10549857E-09-2.92010123E-02 2.92264727E-02 +43 1-6.07524408E-02-4.61026895E-03-4.14314339E-01 6.39669160E-01-7.87929429E-01 +43 2-9.16928308E-01 3.13738583E-08 5.10872237E-08-8.88539647E-02 1.26812733E-08 +43 3 2.26734758E-08-4.40411339E-02-2.79046662E-07-5.89628105E-07-4.73732326E-02 +43 4 3.99708053E-07 8.57272921E-07-9.57045983E-02-2.88240554E-07-6.23011317E-07 +43 5-1.37202669E+00-1.35876484E-07-3.25964021E-08-4.47634718E-01 1.30342365E-01 +43 6 1.30345772E-01-2.68666211E-01-2.29935492E-03-7.13641593E-07-8.36900495E-07 +43 7-4.36240630E-01-4.36240184E-01-1.10022029E-01-2.46165602E-04 9.27249929E-07 +43 8 1.15129168E-06 4.39255594E-01 4.39256118E-01-7.85386685E-01-3.63439443E-04 +43 9-4.95733344E-07-6.10514031E-07 2.42790691E-08 6.70167076E-08 3.96660784E-03 +43 10 3.91084906E-08 1.77076359E-02 1.21556097E-08 1.77070691E-02 3.68533632E-08 +43 11 5.92284024E-08 3.76646965E-04-1.25333845E-01-8.86952908E-02 2.78445507E+00 +43 12 5.70359278E-08-1.30695743E-07 1.29303849E+00-4.66694739E-07-2.39591142E-07 +43 13-2.42100934E+00 5.60774226E-07 5.46879049E-07 3.78640825E-01 3.12568293E-02 +43 14 3.12483274E-02-6.79727260E-02 5.63400998E-03-7.15066587E-08-8.28702899E-08 +44 1-1.52151423E-01 4.97563491E-01-6.40793391E+00 5.77876472E+00 8.15556699E+00 +44 2 5.35490369E+00 1.03428340E-07 8.17021634E-09 1.76354204E-02-8.97564658E-09 +44 3 4.80549446E-08-7.25066123E-05-1.78032620E-07-2.01608146E-08 1.59490838E-01 +44 4 4.59881763E-08-1.15489403E-07-4.87680559E-01-9.97715776E-09 8.46949422E-08 +44 5 3.43075188E-01-3.65642432E-08-1.09561975E-07-1.05158240E-02-1.88797980E-02 +44 6-1.88768057E-02 2.74190093E-02-1.97839304E-03-4.86325114E-08-1.19733399E-07 +44 7-4.98866923E+00-4.98867557E+00-5.33147387E+00 4.19349827E-03 1.33347653E-07 +44 8 2.80724373E-07-2.52741023E+00-2.52740930E+00-2.37407517E+00-6.18067327E-04 +44 9-9.30195159E-08-1.88849488E-07 4.53016566E-08 3.27071435E-08 7.25443088E-05 +44 10-2.74238082E-08-2.66255312E-02 1.27850619E-09-2.66257308E-02 2.68220539E-08 +44 11 1.23003596E-08 1.31901661E-04-1.12275442E-01 4.04001567E-01-4.31172439E-01 +44 12-5.51481082E-09 2.04767583E-08-1.99733529E-01-6.18384815E-08-1.61972948E-07 +44 13-1.55315619E-01 9.79449060E-08 2.06768363E-07 1.95286376E-01-5.10257909E-02 +44 14-5.09978994E-02 1.61724434E-01-1.84774715E-02-5.88700462E-08-1.12471989E-07 +45 1-1.52611792E-02 1.09089410E-02-2.33076462E-01 3.40568793E-01 4.23673631E-01 +45 2 9.78225536E-02-7.94784600E-08-1.40017820E-07 1.07956699E-01-3.02167378E-08 +45 3-5.65751583E-08 3.30461660E-02 2.41992724E-07 4.65681228E-07-4.39026022E-01 +45 4-1.45504160E-07-3.27071192E-07 4.90015409E-01 9.69325580E-08 1.90318977E-07 +45 5-3.11656661E-02-2.12151013E-08-4.79201998E-08 1.16932002E-01-3.66693019E-03 +45 6-3.71218710E-03 5.45927372E-03 2.99725048E-02 3.27821039E-08 3.91108263E-08 +45 7-1.75066206E-01-1.74952741E-01 1.30665726E-02-7.51659689E-02 3.77395601E-08 +45 8 1.59861747E-09-2.93430245E-02-2.93165338E-02 2.15074913E-02-1.75588754E-02 +45 9-1.06831260E-09 6.07151752E-09-3.24623909E-08-8.84721062E-08 5.47079105E-02 +45 10-1.84168462E-08 4.79990151E-02-1.67259799E-08 4.79842700E-02-1.98762980E-08 +45 11-1.94690955E-08 9.77546935E-03-2.31638107E-01 2.18365698E-01-4.86460879E-01 +45 12 2.81083095E-08 7.37792947E-09-3.51394642E-02-7.41004494E-09 9.21833275E-09 +45 13 2.79807488E-01-2.67976596E-08-2.45212255E-08 5.20725951E-02 1.10229819E-01 +45 14 1.08756623E-01-1.98542068E-01 9.76180501E-01 1.48591081E-07 6.49940558E-09 +46 1-3.79186912E-09 2.49307898E-09-5.59075667E-08 8.40658082E-08 1.10368439E-07 +46 2 2.12170661E-08 7.64893824E-10 3.69685811E-08 2.93547945E-08 4.96114846E-10 +46 3 1.07579197E-08 9.13430555E-09 4.76070113E-09-3.61535781E-08-1.20434627E-07 +46 4-1.62573121E-08-5.37904770E-08 1.35443922E-07 8.52462144E-09 1.15029060E-09 +46 5-7.26588362E-09 7.53223415E-09-1.21040633E-08 3.12212744E-08 2.75859493E-02 +46 6-2.75859492E-02-6.03586610E-10-2.77395278E-05 2.29510766E-08-1.01931794E-08 +46 7-6.78892414E-02 6.78891538E-02 1.29755770E-08 6.82862790E-05-4.60627127E-08 +46 8-6.41765566E-08-1.51499415E-02 1.51499308E-02 7.53472177E-09 1.52475817E-05 +46 9 1.84124259E-08 3.90344220E-09-8.04741872E-11-3.33584530E-09 1.51554989E-08 +46 10-1.29393426E-08 8.21919978E-03 6.08950928E-10-8.21917384E-03-3.76262473E-09 +46 11 3.43105746E-08-8.27320678E-06-6.18433290E-08 5.62483772E-08-1.33087102E-07 +46 12-1.08577371E-08-3.12956668E-08-8.96201066E-09 4.19263228E-08 1.28583984E-08 +46 13 7.73596228E-08-2.50017656E-08 3.52050602E-08 1.48537832E-08 8.67124868E-01 +46 14-8.67124808E-01-5.48957174E-08-8.72424894E-04-4.82427389E-08-3.13677032E-07 +47 1-2.32997439E-08 8.71326428E-08-8.21214532E-07 8.57357995E-07 7.45724424E-07 +47 2 5.89631825E-07-1.03251833E-01-1.03161898E-01 2.77681735E-07-3.32090375E-02 +47 3-3.31801121E-02 1.41202389E-07 1.97617356E-01 1.97445250E-01-1.13508047E-06 +47 4 2.54015007E-02 2.53793340E-02 9.22082089E-07 4.03495172E-02 4.03143871E-02 +47 5-3.83664476E-07-2.96219255E-02-2.95961251E-02 1.56146487E-07 9.03269919E-08 +47 6 1.58734824E-08-9.56148016E-08-2.04929553E-08-6.20428418E-02-6.19887920E-02 +47 7-6.29976770E-07-5.06587181E-07-2.54167246E-07 4.67896335E-08 2.61576139E-01 +47 8 2.61348261E-01-2.24909024E-07-2.44130255E-07-2.65787409E-07-6.74761116E-09 +47 9-6.50968026E-02-6.50400909E-02-5.61182413E-03-5.61029294E-03 2.15621990E-07 +47 10-7.71472164E-04 2.64978244E-08-7.76641146E-04 5.43381973E-08-6.37006903E-02 +47 11-6.36452022E-02 5.81028094E-08-4.49938493E-07 3.46179665E-07-2.35533495E-07 +47 12 6.51009175E-02 6.50442042E-02 7.96828717E-08-1.68318159E-01-1.68171524E-01 +47 13 1.58773005E-07 3.37069448E-02 3.36775770E-02-1.05184988E-09 2.41387431E-07 +47 14-1.90187858E-07-5.07066966E-09-1.65951987E-07 7.19224699E-01 7.18598138E-01 +48 1 3.41867045E-02-1.99317124E-02 4.54083348E-01-8.71318497E-01-8.50996145E-01 +48 2-9.06131122E-02 5.88664415E-07 1.65563196E-06-6.61059520E-01 2.25698949E-07 +48 3 6.33250329E-07-2.18637058E-01-2.09092111E-06-5.50492496E-06 2.46987464E+00 +48 4 1.64004002E-06 3.74127568E-06-2.31497116E+00-8.66783054E-07-2.10974139E-06 +48 5 5.58322176E-01 2.12445032E-07 5.71934872E-07-5.28915903E-01 1.10379327E-02 +48 6 1.10315829E-02-1.63201033E-02 4.19827381E-03-1.88342585E-07-1.17016953E-07 +48 7 3.00192721E-01 3.00213218E-01-3.23199320E-01-1.35694012E-02 3.23036216E-07 +48 8-1.16098496E-08-4.68322287E-02-4.68255145E-02-1.63491850E-01-4.44952324E-03 +48 9-1.17189647E-07-8.34058677E-08 3.88951191E-07 9.42001883E-07-3.30498073E-01 +48 10 3.27614031E-07-2.48723049E-01 1.35241565E-07-2.48726145E-01 4.48601306E-08 +48 11 3.24308760E-07 2.04977096E-03 1.06149527E+00-1.16356690E+00 1.67651428E+00 +48 12 1.35833447E-08-9.94288145E-08 6.72698034E-02-1.65731095E-07 1.92703718E-08 +48 13-9.00389587E-01 1.16609864E-07 1.89132325E-07-1.56861556E-01-4.08512072E-01 +48 14-4.08840888E-01 8.22045409E-01 2.17812566E-01 7.72854207E-07-1.73457705E-07 +49 1 2.31933876E-08 1.01975797E-08 1.65941119E-07-4.86638422E-07-6.83792112E-07 +49 2 1.36532106E-07 1.27461984E-01-1.27573142E-01-3.84588706E-07 4.17648358E-02 +49 3-4.18012589E-02-1.13344844E-07-2.83482868E-01 2.83730118E-01 1.44224616E-06 +49 4 3.61744219E-02-3.62060179E-02-1.45948307E-06-7.28796697E-02 7.29432448E-02 +49 5 1.64797241E-07 3.72921838E-02-3.73247070E-02-3.54007951E-07 7.70955528E-08 +49 6-4.97265096E-08-1.92787347E-08 7.29853479E-09 5.66709520E-02-5.67203637E-02 +49 7 3.08458448E-08 2.45014038E-07-3.58325473E-07-2.57114803E-08-2.48981740E-01 +49 8 2.49198828E-01-8.74673166E-08-1.39979576E-07-2.36201263E-07-2.62267796E-09 +49 9 5.93625934E-02-5.94143502E-02 1.84361191E-02-1.84500132E-02-1.69187865E-07 +49 10-7.11518101E-03-2.41897114E-07 7.10603958E-03-1.04827653E-07 7.19534694E-02 +49 11-7.20162142E-02-2.55672785E-09 6.31767935E-07-7.61579704E-07 1.42855547E-06 +49 12-6.61813632E-02 6.62390678E-02 1.06194214E-07 1.63092996E-01-1.63235196E-01 +49 13-7.27133638E-07-2.84144746E-02 2.84392452E-02-1.77935803E-07-1.65504488E-07 +49 14-4.80949770E-07 7.06078975E-07 2.56002090E-07-7.15378057E-01 7.16001806E-01 +50 1 1.73665668E-07 5.67611910E-08 1.40554065E-06-2.42357302E-06-1.32844194E-05 +50 2 5.87244813E-06-8.74528761E-01-8.73771626E-01 2.58796887E-06-2.85904883E-01 +50 3-2.85657364E-01 1.43794899E-06 2.84781212E+00 2.84534663E+00-9.48551842E-06 +50 4-1.85472064E+00-1.85311496E+00 7.03939347E-06 1.00402291E+00 1.00315369E+00 +50 5-1.07642647E-05-2.66252209E-01-2.66021702E-01-7.16242008E-07 9.22529965E-08 +50 6 9.07007741E-08-1.58274257E-07 2.69030128E-08 1.59023579E-02 1.58886054E-02 +50 7 1.07913669E-06 1.06165394E-06 4.79709555E-07-4.25708236E-08-5.54018723E-02 +50 8-5.53539584E-02-2.11626036E-06-2.11245639E-06-5.52020195E-06 6.49252266E-09 +50 9 6.07721981E-02 6.07195978E-02-4.86491784E-01-4.86074505E-01 1.47021367E-06 +50 10-2.15354842E-01 4.25614167E-07-2.15546681E-01 3.24209739E-07-2.03963875E-01 +50 11-2.03787284E-01-3.85522043E-08 6.73895029E-06-9.39837252E-06 1.77356524E-05 +50 12 1.12039150E-02 1.11942111E-02 1.16261068E-06 4.59371429E-02 4.58973969E-02 +50 13-2.19451152E-06-1.01950467E-01-1.01862208E-01-4.35859168E-06-2.06215678E-06 +50 14-2.04298596E-06 2.24423508E-06 3.06597987E-07-1.09555579E-01-1.09460867E-01 +51 1 6.24620028E-08-1.96879778E-08 9.11352736E-07-1.28893450E-06-5.67201175E-06 +51 2 2.17344563E-06 8.70006874E-01-8.70760693E-01 1.06435444E-06 2.84855206E-01 +51 3-2.85102026E-01 5.87633981E-07-2.83777747E+00 2.84023631E+00-3.92880011E-06 +51 4 1.85214619E+00-1.85375104E+00 2.89177055E-06-1.00088046E+00 1.00174770E+00 +51 5-4.33244622E-06 2.64968906E-01-2.65198492E-01-2.71166221E-07 3.28732101E-08 +51 6 3.62861409E-08-6.22240624E-08-7.10698924E-09-1.83789601E-02 1.83948990E-02 +51 7 6.65975683E-07 6.46367472E-07 4.51812848E-07-1.70429808E-09 6.31173561E-02 +51 8-6.31720929E-02-7.63824043E-07-7.46904463E-07-2.11623617E-06-4.23181689E-09 +51 9-6.25512308E-02 6.26054417E-02 4.85328341E-01-4.85746027E-01 6.30147321E-07 +51 10-2.15766225E-01 2.86745813E-07 2.15575633E-01 3.83701509E-08 2.01539107E-01 +51 11-2.01713725E-01 1.76383965E-08 2.64890181E-06-3.71679445E-06 7.07237889E-06 +51 12-1.06780585E-02 1.06873069E-02 4.66185922E-07-4.91577114E-02 4.92003273E-02 +51 13-8.52936367E-07 1.02105001E-01-1.02193476E-01-1.75427840E-06-8.32862445E-07 +51 14-8.12044617E-07 8.96482304E-07 1.17995856E-07 1.30595924E-01-1.30709210E-01 +52 1 1.23354090E-02 1.07802352E-03 1.75024038E-01-2.09937647E-01-3.41081374E+00 +52 2 1.84946250E+00 1.92679393E-06 4.47100133E-06 8.95904298E-01 5.38001492E-07 +52 3 1.32871072E-06 4.12535306E-01-6.14799826E-06-1.44258954E-05-3.33942310E+00 +52 4 3.82328602E-06 9.04772652E-06 2.77010032E+00-2.03843676E-06-4.83058500E-06 +52 5-3.04958322E+00 5.35054646E-07 1.26823601E-06-1.02868268E-01 1.16366583E-02 +52 6 1.16345620E-02-2.20903665E-02 1.39187163E-03 1.37920864E-08-3.08069216E-08 +52 7 9.96997786E-02 9.97037484E-02 3.85107014E-01-2.63008465E-03 8.25729895E-08 +52 8 2.27904722E-07-6.57485913E-01-6.57485723E-01-1.58568932E+00-1.25219394E-04 +52 9-1.20578890E-07-2.88585129E-07 1.09681789E-06 2.55107995E-06 4.83058196E-01 +52 10 1.12979981E-06 2.47902689E-01 4.86606607E-07 2.47902499E-01 5.23328720E-07 +52 11 1.20700315E-06 1.24761443E-04 2.40719203E+00-3.16785803E+00 4.54731040E+00 +52 12-9.92626523E-09-3.70778426E-08 2.19861721E-01-1.11102127E-07-2.52119181E-07 +52 13 7.43176990E-03 2.22635743E-07 5.19421056E-07-1.24906520E+00-4.49704256E-01 +52 14-4.49748956E-01 3.96845228E-02 2.96101432E-02 1.72399667E-07 4.42455243E-07 +53 1 8.36251543E-02 6.57915815E-02 4.30491030E-01-7.59890204E-01 2.06764344E-01 +53 2-1.09825048E+00 5.24650750E-07 1.34942051E-06 4.59419159E-01 1.49798089E-07 +53 3 3.00861733E-07 1.69692143E-01-1.67733416E-06-4.16210200E-06-1.14509540E+00 +53 4 9.83602865E-07 2.43960311E-06-2.37835239E-01-5.26631218E-07-1.30374758E-06 +53 5 4.73769885E-02 1.47350313E-07 3.66461404E-07 3.31063744E-01 2.27117768E-02 +53 6 2.27108349E-02-3.39966380E-02 6.21859377E-04-3.90241579E-08-4.37039509E-08 +53 7 5.45563666E-01 5.45566115E-01-2.81396515E-01-1.62031589E-03 9.86415499E-09 +53 8-5.22400113E-09 4.79622904E-01 4.79623530E-01 7.47737553E-01-4.15177665E-04 +53 9-2.31592082E-08-4.79316427E-08 4.86478578E-07 1.09642636E-06 3.83823548E-01 +53 10 1.04966087E-07-5.95576476E-02 5.39432887E-08-5.95556394E-02 4.19396354E-08 +53 11 2.61460078E-07-1.34386526E-03-3.34032733E+00 3.75159314E+00-1.49205234E+00 +53 12-3.22848384E-08-5.97404733E-08 1.50404316E-01 2.36902204E-08 5.27010858E-08 +53 13-9.58761984E-01 3.18335040E-08 7.61896624E-08 4.99209632E-01 9.25151718E-02 +53 14 9.24814879E-02 9.84082586E-01 2.23127418E-02 7.94518845E-11-2.85436098E-08 +54 1 1.42622676E-03 2.97347444E-03-6.57921953E-03 2.26476008E-03 2.74903371E-04 +54 2-3.98584341E-03 1.30259442E-08-7.31482379E-09 1.36093613E-03 2.07677826E-08 +54 3-1.08064977E-11 3.09499589E-04 1.04322966E-06 5.80265678E-07 2.35119219E-03 +54 4-7.05065835E-07-4.44642655E-07-1.08835766E-02 2.08472063E-07 1.01836587E-07 +54 5-1.45694074E-03 9.54863915E-08 1.00332738E-07-1.45615734E-04-1.60458266E-04 +54 6-1.58813198E-04 4.93769015E-04-1.10061891E-03 1.00800293E-07 8.94566056E-08 +54 7 3.18821444E-04 3.13628655E-04-1.03883139E-02 3.47413088E-03-4.07594351E-07 +54 8-3.48853184E-07 1.43336049E-03 1.43373432E-03 1.06948908E-03-2.50129248E-04 +54 9 1.10705441E-07 8.88004158E-08 1.16605271E-05 5.67184553E-06-1.35004255E-02 +54 10-1.90200167E-06 9.00332100E-03-9.14515142E-06 7.50884814E-03-7.37183350E-06 +54 11-6.14080657E-06 9.99860392E-01-1.58157631E-02 1.83776571E-02 2.17304771E-03 +54 12-2.64315480E-07-2.23604424E-07-2.99153072E-04 8.34591252E-07 7.00681853E-07 +54 13-1.06420087E-02-4.30843694E-07-3.56300156E-07 2.18808575E-03 6.01283594E-04 +54 14 6.20351350E-04 8.01225696E-03-1.27574769E-02-6.49941398E-07-5.43873972E-07 +55 1-6.34083572E-09-1.85098970E-08 8.55111573E-08-7.78559426E-08-3.46608725E-08 +55 2-2.90801233E-08 1.59289977E-08-1.34156773E-07 6.31023130E-09-8.99815461E-08 +55 3 2.19614764E-07 5.00705987E-10 1.71464171E-06-4.08132704E-06 2.57433382E-10 +55 4-1.43893514E-06 3.46729595E-06-6.22369023E-09 2.81712574E-07-6.17591087E-07 +55 5 1.78902223E-09 3.76304178E-07-9.67120015E-07 1.41624059E-09-9.54135608E-04 +55 6 9.54133972E-04-7.21788380E-10 9.50784587E-07 2.41878621E-07-5.77017187E-07 +55 7 2.98815997E-03-2.98809003E-03 2.78704340E-08-2.97760065E-06-1.16513150E-06 +55 8 2.88588828E-06-2.21957537E-04 2.21984744E-04 1.51936889E-08 2.21168775E-07 +55 9 3.11880136E-07-7.57863880E-07 1.71808940E-06 2.30967314E-06-3.29929304E-09 +55 10-5.66382750E-05 8.65987637E-01 1.85371886E-05-8.65987635E-01-2.20534271E-05 +55 11 5.63422953E-05-8.62917035E-04-7.29855164E-09 1.95256433E-08-9.78693895E-09 +55 12-8.07250652E-07 2.02583602E-06-2.13256602E-09 2.52263811E-06-6.31297140E-06 +55 13-4.41817555E-09-1.26157035E-06 3.16637790E-06 2.72025716E-09-1.06859708E-02 +55 14 1.06859673E-02 6.76102573E-10 1.06480344E-05-2.01472255E-06 4.96945132E-06 +56 1-1.18062785E-08-4.15815909E-08 2.51518678E-07-2.57341377E-07 3.58106270E-08 +56 2-2.84872744E-07-3.42285284E-03-3.41990023E-03 5.76951428E-08 3.09594159E-03 +56 3 3.09326632E-03-3.64550558E-09-2.95896490E-02-2.95640879E-02 1.05233392E-06 +56 4 2.94618286E-02 2.94363818E-02-7.22622114E-07-2.66423214E-03-2.66193151E-03 +56 5 3.14030366E-07-1.14416804E-02-1.14317989E-02-7.24798152E-08-4.23910282E-09 +56 6-6.75364236E-08 6.03411548E-08-1.16149316E-08-5.86423561E-03-5.85917158E-03 +56 7 4.86753042E-08 2.32001945E-07-1.22678044E-07 4.24958281E-09 3.04950308E-02 +56 8 3.04686977E-02 1.06856818E-07 9.37194743E-08 1.48408872E-07 6.89743229E-10 +56 9-7.75829302E-03-7.75159440E-03 5.87025898E-03 7.04466131E-03-7.77025211E-07 +56 10-6.09113012E-01-2.56067608E-05-6.08055817E-01 2.56405112E-05 6.15329895E-01 +56 11 6.14798379E-01 1.05903902E-06-2.06890804E-07 1.65980508E-07-8.18470556E-08 +56 12 2.17966251E-02 2.17778005E-02-3.12533958E-08-6.76242271E-02-6.75658241E-02 +56 13-1.89213361E-07 3.37073531E-02 3.36782415E-02 9.09708270E-08 4.00484478E-07 +56 14-2.23605555E-07 1.33921330E-07-1.56752027E-08 5.24203917E-02 5.23751266E-02 +57 1-1.29807769E-07-3.17336536E-07 1.07182641E-06-7.78486662E-07-2.22705910E-07 +57 2-1.16088398E-07 3.53749968E-03-3.54056214E-03-2.30715958E-08-3.32004661E-03 +57 3 3.32291549E-03 5.18350646E-09 3.01974889E-02-3.02235878E-02 2.19622425E-07 +57 4-2.98930644E-02 2.99189043E-02 2.79443224E-07 2.93075617E-03-2.93328980E-03 +57 5 2.14973638E-07 1.13637760E-02-1.13736004E-02-2.47765371E-09 4.61407560E-08 +57 6-5.46585471E-08-2.13459858E-08-2.50430849E-09 5.68000425E-03-5.68491542E-03 +57 7 1.02387297E-07 4.59624017E-07 7.20681837E-07 9.31830271E-09-3.03969482E-02 +57 8 3.04232307E-02 7.64793555E-08 4.96369484E-08 1.18172691E-07 3.97603298E-10 +57 9 7.85240907E-03-7.85919936E-03-1.27967572E-02 1.16153750E-02 4.70929308E-07 +57 10-6.11745535E-01-5.47985528E-05 6.12815666E-01 5.38768896E-05-6.10943778E-01 +57 11 6.11471860E-01 2.55577041E-06 6.71829118E-07-7.25117131E-07-2.57911703E-07 +57 12-2.18772759E-02 2.18961891E-02-7.63317131E-09 6.78918934E-02-6.79505874E-02 +57 13 4.62196353E-07-3.37084455E-02 3.37375866E-02-5.22666614E-08 6.43119784E-07 +57 14-6.78251513E-07-3.64719211E-07-3.26078434E-08-5.35413207E-02 5.35876153E-02 +58 1 4.17649168E-07 1.04793641E-06-3.63568545E-06 2.69921050E-06 1.16227680E-06 +58 2 2.11415549E-07-1.23122824E-03 1.23228644E-03 2.08759311E-08-1.78641177E-03 +58 3 1.78795648E-03 4.78002329E-08 4.01116135E-02-4.01462224E-02 7.59833947E-07 +58 4-3.25171231E-02 3.25451909E-02-1.66820312E-06 6.91015429E-03-6.91611472E-03 +58 5-1.45939607E-07 7.63188660E-03-7.63847966E-03-9.63954395E-08 2.56649730E-08 +58 6-1.33772797E-08 8.62883236E-08 4.46011230E-09 4.58694800E-03-4.59090888E-03 +58 7-1.02784324E-06-9.95512384E-07-2.42690402E-06-1.60803902E-08-2.39037508E-02 +58 8 2.39243944E-02-1.69909487E-07-1.74087466E-07-2.65612414E-07 1.23489295E-10 +58 9 6.39192077E-03-6.39744123E-03 6.93003225E-01-6.92083543E-01-2.32160524E-06 +58 10 4.75830400E-01 1.50729497E-07-4.77454888E-01 2.51285441E-06-4.83935031E-01 +58 11 4.84352919E-01-4.39387194E-06-2.06638458E-06 2.10101917E-06 5.73493444E-07 +58 12-1.67126582E-02 1.67270920E-02-1.48621594E-08 5.28003303E-02-5.28459322E-02 +58 13-1.47164391E-06-2.66479365E-02 2.66709496E-02 2.80514247E-07 1.76104819E-07 +58 14 1.50510187E-07 1.17178807E-06 5.82648308E-08-4.12882086E-02 4.13238739E-02 +59 1-1.59888578E-06-3.95437605E-06 1.35132720E-05-9.91526906E-06-4.12093054E-06 +59 2-7.07674311E-07-2.06027929E-03-2.05849619E-03-1.58488003E-07-1.82721432E-03 +59 3-1.82564069E-03-1.41269151E-07 4.10415904E-02 4.10061611E-02-2.65865303E-06 +59 4-3.24747297E-02-3.24467072E-02 6.30750224E-06 7.00198343E-03 6.99593696E-03 +59 5 6.90505659E-07 7.26888651E-03 7.26261991E-03 3.48625940E-07-1.16389456E-09 +59 6 2.64336012E-09-3.63836813E-07-1.16707866E-08 4.21247414E-03 4.20884071E-03 +59 7 3.66171251E-06 3.67188647E-06 9.19644056E-06-1.92338315E-08-2.25457837E-02 +59 8-2.25263398E-02 6.04601845E-07 6.06442399E-07 9.76000961E-07-1.94839268E-10 +59 9 5.96583220E-03 5.96068750E-03 6.92022959E-01 6.92952128E-01 8.87391215E-06 +59 10-4.82364085E-01-7.27548529E-06-4.80731344E-01-3.08421757E-06-4.79688036E-01 +59 11-4.79274297E-01-1.25564469E-05 7.99497414E-06-8.17905771E-06-2.29135469E-06 +59 12-1.62791507E-02-1.62651117E-02 5.43354172E-08 5.10896123E-02 5.10455544E-02 +59 13 5.70084388E-06-2.58567540E-02-2.58344541E-02-1.04609711E-06-5.96290348E-07 +59 14-6.43364893E-07-4.50284602E-06 1.29693688E-07-3.92742163E-02-3.92403538E-02 +60 1-2.74554541E-01-7.10264408E-01 2.47990571E+00-1.89313761E+00-8.01924807E-01 +60 2-3.46070753E-01 7.15074521E-08 1.10613393E-07 9.16838086E-03-2.17995797E-08 +60 3-8.16619823E-08-1.39573182E-02-4.54217596E-07-9.96036207E-07-2.79733131E-01 +60 4 3.15424829E-07 6.31987391E-07 6.53350394E-01-9.36934688E-08-2.22810406E-07 +60 5 9.58714972E-02-4.02902649E-08-3.38944111E-08 4.99883627E-02-1.04854771E-02 +60 6-1.04852012E-02-4.41867928E-02-1.84040023E-04-4.57308464E-08-6.22890776E-08 +60 7 7.49569876E-01 7.49569323E-01 1.31522379E+00 3.67669585E-04 1.74985799E-07 +60 8 2.51818826E-07 1.90307482E-01 1.90307472E-01 2.47644686E-01 6.52572015E-06 +60 9-5.05516379E-08-7.80112897E-08-4.07928404E-06-7.02238730E-06 1.03006766E+00 +60 10 5.45018172E-06-6.12906709E-01 2.37579317E-06-6.12926572E-01 3.54413456E-06 +60 11 5.01196705E-06 1.32878267E-02 7.78532651E-01-7.44217936E-01-3.23613006E-01 +60 12 9.73286534E-08 1.39382435E-07 8.79746008E-03-3.48289427E-07-4.99694505E-07 +60 13 5.94436201E-01 1.87182314E-07 2.74655393E-07-9.84566898E-02-8.00874617E-02 +60 14-8.00838200E-02-4.72719540E-01-2.41361787E-03 2.60530739E-07 3.76839505E-07 +61 1-1.38034172E+00-3.77575788E+00 1.33436984E+01-1.06051230E+01-5.28746564E+00 +61 2-3.06169588E+00-1.19718205E-07 9.87499256E-08-4.16213071E-03 1.33427282E-07 +61 3-6.37706543E-08 7.07821366E-02 1.95284667E-07 1.73993070E-07 4.27337627E-02 +61 4-8.50302498E-08-9.05303848E-08-1.28584422E-01 4.03136503E-08 4.47239363E-08 +61 5-1.77605465E-01-1.03427375E-08-1.56178278E-08-1.09663538E-02-1.15987309E-01 +61 6-1.15987362E-01-1.09717555E-01 3.48131382E-05-1.29885505E-09-6.15471812E-09 +61 7 4.49291092E+00 4.49291096E+00 4.31667036E+00-2.65497434E-05 8.51580449E-09 +61 8 1.73027658E-08 1.43923419E+00 1.43923423E+00 1.40133557E+00-2.63959520E-05 +61 9-6.17241285E-09-1.37219149E-08 1.61305006E-07 3.69613151E-07-2.31902986E-01 +61 10-3.51875867E-07 9.37648422E-02-1.67039010E-07 9.37674292E-02-3.02923763E-07 +61 11-3.96687694E-07-1.72495581E-03-3.72635288E-01 1.32721129E-01 3.81480542E-01 +61 12-6.62071384E-09-8.14396253E-09-2.10683324E-02 1.59477173E-08 1.76234465E-08 +61 13-1.29051996E-01-5.89283124E-09-1.10314210E-09-1.13741417E-01 4.58954836E-02 +61 14 4.58948851E-02 3.01436182E-01 3.96521159E-04-1.33590620E-08-1.65675179E-08 +62 1-4.19966208E-02-1.56351821E-01 6.93798131E-01-7.56486038E-01 2.49436283E+00 +62 2-1.95935900E+00-7.80030537E-08-4.05455877E-08 5.22505697E-02 9.48199231E-08 +62 3 9.96447682E-08-2.72486621E-01 2.89404440E-07 6.14876293E-07 9.63064219E-02 +62 4-1.22006188E-07-2.62130825E-07-1.23378835E+00 5.71039836E-08 1.24627033E-07 +62 5 1.65042350E+00-1.35901231E-08-3.07738342E-08 5.73984410E-01 1.79463251E-03 +62 6 1.79452121E-03-2.21194902E-02 7.34710567E-05-4.37228843E-09-5.35066774E-09 +62 7 4.00869869E-01 4.00870307E-01-3.04318804E-01-2.89706207E-04 1.94119807E-09 +62 8 5.23887667E-09 8.43521523E-01 8.43521733E-01 1.62036486E+00-1.39149043E-04 +62 9 2.15680628E-09 4.15660774E-09-1.33152356E-07-3.08596361E-07 1.15830034E-01 +62 10-2.33437985E-07 1.69028578E-01-1.02325010E-07 1.69029052E-01-8.32034327E-08 +62 11-1.55600256E-07-3.15978748E-04-1.34493028E+00 6.75267889E+00-5.20761573E+00 +62 12-2.61724179E-09-8.14437903E-09 5.58208779E-03 9.82145454E-09 2.04637025E-08 +62 13-7.25739673E-01-9.66412519E-09-1.89778325E-08 1.31360386E+00-1.52696524E+00 +62 14-1.52697336E+00-1.17062172E+00 5.38041648E-03-4.77499943E-09-2.40212537E-09 +63 1-2.13372964E-07-1.18640191E-06 4.79419249E-06-3.63519735E-06-1.96637258E-05 +63 2 9.29493790E-06-2.36021809E-01-2.35819573E-01 2.95760709E-06 8.14296291E-01 +63 3 8.13598581E-01-1.09572027E-05 2.90891254E+00 2.90642017E+00-5.07928271E-05 +63 4-1.10861911E+00-1.10766924E+00 2.36772504E-05 5.36449855E-01 5.35990221E-01 +63 5-1.95323663E-05-1.42456672E-01-1.42334615E-01 9.10601728E-07-3.95873707E-10 +63 6 2.88363809E-09-1.26736328E-07-2.96224240E-09 1.71248243E-03 1.71101391E-03 +63 7 1.96019853E-06 1.95681003E-06 3.25981899E-06 8.36014934E-10-9.37892765E-03 +63 8-9.37089027E-03-3.06773647E-06-3.06680395E-06-7.73847896E-06-9.17723290E-11 +63 9 2.64204302E-02 2.63977919E-02-1.94725262E+00-1.94559049E+00 3.19022623E-05 +63 10-8.66826726E-01 1.42370713E-05-8.67578517E-01 1.40908355E-05-8.66354446E-01 +63 11-8.65612148E-01-4.13863436E-08 1.58440164E-06-1.39645791E-05 2.30163058E-05 +63 12 6.42065383E-03 6.41515232E-03 4.61726872E-07 1.39567867E-02 1.39448266E-02 +63 13 1.25514142E-06-4.98223514E-02-4.97796615E-02-6.77775220E-06 2.11276632E-06 +63 14 2.11372595E-06 3.54856181E-06-1.46991534E-09-8.65439240E-03-8.64697575E-03 +64 1-1.15389305E-07-5.58795671E-07 2.22711301E-06-1.70121871E-06-8.21343528E-06 +64 2 3.77863018E-06 2.35044375E-01-2.35245926E-01 1.15043943E-06-8.12755513E-01 +64 3 8.13452473E-01-4.45366060E-06-2.90651327E+00 2.90900574E+00-2.08372791E-05 +64 4 1.10781215E+00-1.10876215E+00 9.71542404E-06-5.35979154E-01 5.36438782E-01 +64 5-8.03681972E-06 1.42368448E-01-1.42490536E-01 3.72105873E-07-1.01365837E-09 +64 6 5.73517724E-09-5.53974839E-08 6.69171390E-10-1.61084152E-03 1.61222167E-03 +64 7 9.02894288E-07 8.88255801E-07 1.42718553E-06-4.58973114E-10 9.25264463E-03 +64 8-9.26057777E-03-1.23892464E-06-1.23487813E-06-3.16304200E-06 1.03748836E-10 +64 9-2.63129655E-02 2.63355290E-02 1.94554905E+00-1.94721116E+00 1.31060244E-05 +64 10-8.67573767E-01 5.98778735E-06 8.66822009E-01 5.64056953E-06 8.65583804E-01 +64 11-8.66326082E-01 2.33876943E-08 6.45752025E-07-5.73030872E-06 9.48311382E-06 +64 12-6.40278478E-03 6.40827523E-03 1.90841104E-07-1.38025682E-02 1.38144028E-02 +64 13 5.10225503E-07 4.96429272E-02-4.96854965E-02-2.79286301E-06 8.64905549E-07 +64 14 8.67506667E-07 1.46000112E-06-7.78698215E-10 8.53163810E-03-8.53895286E-03 +65 1 2.43333929E-02 1.18715853E-01-4.74114267E-01 3.64075759E-01 1.71432311E+00 +65 2-7.80546177E-01-1.54120714E-06-3.76374869E-06-2.51268497E-01 5.47478995E-06 +65 3 1.31370342E-05 9.73755598E-01 1.92952047E-05 4.62513142E-05 4.44053944E+00 +65 4-7.33239667E-06-1.75792244E-05-2.04868911E+00 3.54635359E-06 8.49863601E-06 +65 5 1.68947381E+00-9.38844289E-07-2.25267982E-06-8.38891094E-02-2.44307146E-04 +65 6-2.44493368E-04 1.17854694E-02 1.24330357E-04 2.87636549E-08 4.39742378E-08 +65 7-1.92133165E-01-1.92133079E-01-2.94850480E-01-5.77267851E-05-7.79349758E-08 +65 8-1.65837529E-07 2.54060431E-01 2.54060418E-01 6.55246930E-01 9.04835796E-06 +65 9 1.80627741E-07 4.24154890E-07-1.29833868E-05-3.10804575E-05-2.79780446E+00 +65 10-1.37609924E-05-1.25476659E+00-5.74606844E-06-1.25476658E+00-5.83453393E-06 +65 11-1.39669138E-05-8.93285446E-06-1.20659090E-01 1.15252242E+00-1.96449510E+00 +65 12 4.20727233E-08 9.94624280E-08-4.00366361E-02 1.00270967E-07 2.35449645E-07 +65 13-9.86941767E-02-3.36577974E-07-7.98927096E-07 5.78991592E-01-1.71343887E-01 +65 14-1.71344030E-01-3.02537767E-01 9.42948696E-05-6.07709933E-08-1.42847927E-07 +66 1-3.87022606E+00 6.22941458E-01 8.53472092E+00-3.98847624E+00-1.93006091E+00 +66 2-1.18881726E+00-9.45448298E-08 1.77005699E-07-5.45739380E-02 9.28063851E-08 +66 3-1.75522783E-07 5.57244412E-02 2.48428873E-08-2.81116362E-08-3.20621933E-02 +66 4-8.77039592E-09 6.00269370E-09 1.14044547E-02 4.96962020E-09-2.61031988E-09 +66 5-5.25858022E-02-2.14693510E-09 6.77420968E-11 5.97623743E-03-9.34644323E-01 +66 6-9.34644327E-01-9.35560366E-01 2.98565701E-06-3.41108924E-09-6.87312165E-09 +66 7 1.67060689E+00 1.67060689E+00 1.65286566E+00 1.34671082E-06 2.31417397E-09 +66 8 5.05103388E-09 5.55312362E-01 5.55312366E-01 5.49164273E-01-2.78794176E-06 +66 9-7.72768462E-10-1.97196899E-09-1.16799667E-08 1.42214235E-08 1.24678976E-02 +66 10 8.14470984E-09 9.17698340E-03-3.72131496E-09 9.17705597E-03-7.10766250E-09 +66 11 4.75507997E-09-4.81817860E-05-5.14165074E-02 2.99205385E-02 7.52442675E-02 +66 12-1.67991166E-11-5.24524473E-11-7.97672681E-03-6.29605327E-10-1.38369063E-09 +66 13 3.07748900E-03 5.93174921E-10 1.76432783E-09-4.32052455E-02-7.14415960E-03 +66 14-7.14415363E-03 4.14527540E-02-3.95594045E-06 7.98257966E-11 4.30011231E-10 +67 1-2.56421209E-07-1.12157956E-07-2.22635557E-07-6.65980179E-07-1.82371077E-07 +67 2-7.14312536E-08-2.66436745E+01 2.66676195E+01 1.25370763E-06 2.64449349E+01 +67 3-2.64687013E+01-1.24301450E-06 5.09920780E+00-5.10379052E+00-2.44133342E-07 +67 4-1.32114828E+00 1.32233561E+00 7.36679242E-08 6.11126102E-01-6.11675329E-01 +67 5-5.22618866E-08-1.62392082E-01 1.62538026E-01 4.60397405E-09 4.77163223E-07 +67 6 4.76658561E-07 4.76312022E-07 4.08365691E-11 2.23023456E-03-2.23223885E-03 +67 7 1.83201136E-07 1.83649304E-07 1.87768103E-07 3.08486546E-11-1.00254288E-02 +67 8 1.00344388E-02 3.46164788E-08 3.44164508E-08 2.39506073E-08-6.24259071E-11 +67 9 2.99710467E-02-2.99979822E-02-2.61419329E+00 2.61654282E+00 1.23760507E-07 +67 10 1.17021513E+00 5.68587465E-08-1.16916455E+00 5.20536436E-08-1.16983428E+00 +67 11 1.17088563E+00 1.35808530E-10 7.10913072E-09-3.07165999E-08 5.28462078E-08 +67 12 5.48484701E-03-5.48977638E-03-9.63441138E-10 1.65280746E-02-1.65429289E-02 +67 13 6.91990981E-09-5.68260314E-02 5.68771020E-02-1.78008011E-08 1.74749359E-09 +67 14 1.77532451E-09 6.43254201E-09 0.00000000E+00-7.36734586E-03 7.37396720E-03 +68 1-8.01050067E-08-1.48177905E-08-2.65550777E-07-1.37963577E-07 7.91721560E-07 +68 2-4.54163588E-07 2.66676047E+01 2.66436597E+01-2.17224036E-05-2.64686793E+01 +68 3-2.64449129E+01 2.15349922E-05-5.10367663E+00-5.09909401E+00 4.36624355E-06 +68 4 1.32229734E+00 1.32111004E+00-1.31552937E-06-6.11671129E-01-6.11121906E-01 +68 5 9.69980868E-07 1.62535573E-01 1.62389632E-01-9.56047221E-08 1.86710484E-07 +68 6 1.86682962E-07 1.93499078E-07-5.32794398E-11-2.23030944E-03-2.22830678E-03 +68 7-8.48350069E-09-8.44173890E-09-4.72657419E-08 7.72731357E-11 1.00344328E-02 +68 8 1.00254229E-02 1.45029302E-07 1.45155610E-07 3.47754143E-07-8.22917442E-11 +68 9-3.00025289E-02-2.99755896E-02 2.61648158E+00 2.61413210E+00-2.19948307E-06 +68 10 1.16913831E+00-9.82266616E-07 1.17018887E+00-9.84324549E-07 1.17085015E+00 +68 11 1.16979884E+00 4.86816356E-10-2.61240828E-08 3.33355234E-07-8.92869996E-07 +68 12-5.49218245E-03-5.48725106E-03-1.28391692E-08-1.65527609E-02-1.65378983E-02 +68 13-5.06894675E-08 5.68889852E-02 5.68379046E-02 2.86795224E-07-1.86042330E-08 +68 14-1.85974118E-08-8.76959325E-08 2.01135605E-11 7.38193406E-03 7.37530599E-03 +69 1 4.71101792E-01 1.66751622E-01 5.74529786E-01 1.08634975E+00-1.12125550E+00 +69 2 9.23299131E-01 1.57585483E-05 1.44822239E-05 3.78955247E+01-1.56426194E-05 +69 3-1.43757064E-05-3.75722158E+01-3.01838891E-06-2.76216026E-06-7.58731992E+00 +69 4 7.82243149E-07 7.13533342E-07 2.27596526E+00-3.61771809E-07-3.29643910E-07 +69 5-1.66272107E+00 9.56957142E-08 8.79306039E-08 1.65707258E-01-8.61714645E-01 +69 6-8.61714653E-01-8.73995589E-01 5.20955258E-06-1.63568139E-09-1.73014832E-09 +69 7-2.41340551E-01-2.41340539E-01-1.71795944E-01-7.54329952E-06 6.51451031E-09 +69 8 5.87321102E-09-3.16101792E-01-3.16101795E-01-6.61305474E-01 2.28432924E-06 +69 9-1.82971002E-08-1.59692830E-08 1.54919130E-06 1.41762601E-06 3.82616673E+00 +69 10 6.35572075E-07 1.70969607E+00 6.93674821E-07 1.70969608E+00 6.91146682E-07 +69 11 6.31872588E-07-6.60080914E-06 4.80867042E-02-5.76151403E-01 1.51925409E+00 +69 12-3.20444367E-09-3.07867078E-09 2.30369169E-02-1.00426798E-08-8.72921686E-09 +69 13 8.81846906E-02 3.42832191E-08 3.01371681E-08-4.86506455E-01 3.24953664E-02 +69 14 3.24953612E-02 1.49234684E-01 3.43611626E-06 4.41858203E-09 3.81877574E-09 +70 1 4.03501003E+00 1.77417847E+00 1.80412119E+00 1.05078876E+01 2.89163950E+00 +70 2 1.40534031E+00-3.12602748E-06 7.41344523E-07-4.94419698E+00 3.10243735E-06 +70 3-7.36199759E-07 4.89905292E+00 5.96098984E-07-1.44776889E-07 1.02099171E+00 +70 4-1.53708349E-07 3.83785880E-08-3.17770106E-01 7.08855561E-08-1.79382219E-08 +70 5 2.69747586E-01-1.88592359E-08 4.19565791E-09-2.94988808E-02-6.78466105E+00 +70 6-6.78466106E+00-6.78228001E+00 4.08617649E-06-1.24104872E-09-3.32896839E-09 +70 7-3.07847174E+00-3.07847174E+00-3.07865288E+00-3.97112272E-06 6.58762817E-11 +70 8 2.93009336E-09-6.82052107E-01-6.82052109E-01-6.32945318E-01 1.25424322E-06 +70 9 3.08698328E-09-2.04330968E-09-3.05397197E-07 7.44635461E-08-5.10733615E-01 +70 10 3.30724880E-08-2.30001491E-01-1.36792550E-07-2.30001492E-01-1.36612432E-07 +70 11 3.34486934E-08 6.03582910E-07 2.64989549E-02 6.20709010E-02-2.71646712E-01 +70 12 5.47574875E-10-1.63692149E-10 1.60375635E-02 1.63427001E-09-1.30940844E-09 +70 13-3.72687045E-02-6.33030530E-09 2.81912287E-09 1.15454568E-01 3.93890837E-03 +70 14 3.93890520E-03-5.01064476E-02 2.09911431E-06-7.40159812E-10 4.81445230E-10 + $END + POPULATION ANALYSIS +MN 14.37211 .62789 14.59846 .40154 +O 6.62789 -.62789 6.40154 -.40154 + MOMENTS AT POINT 1 X,Y,Z= .000000 .000000 .611687 + DIPOLE -.000006 -.000015 -3.134091 diff --git a/examples/mno/mno.out b/examples/mno/mno.out new file mode 100644 index 00000000..9ad7491e --- /dev/null +++ b/examples/mno/mno.out @@ -0,0 +1,1695 @@ +mkdir: cannot create directory `/tmp/lkwagner': File exists +----- GAMESS execution script ----- +This job is running on host aldebaran.physics.ncsu.edu at Wed May 22 11:34:43 EDT 2002 +Available scratch disk space (Kbyte units) at beginning of the job is +Filesystem 1k-blocks Used Available Use% Mounted on +/dev/sda6 15968084 14737840 1230244 93% / +cp mno1i.inp /tmp/lkwagner/mno1i.F05 +unset echo +setenv IRCDATA /tmp/lkwagner/mno1i.irc +setenv INPUT /tmp/lkwagner/mno1i.F05 +setenv PUNCH /tmp/lkwagner/mno1i.pun +setenv AOINTS /tmp/lkwagner/mno1i.F08 +setenv MOINTS /tmp/lkwagner/mno1i.F09 +setenv DICTNRY /tmp/lkwagner/mno1i.F10 +setenv DRTFILE /tmp/lkwagner/mno1i.F11 +setenv CIVECTR /tmp/lkwagner/mno1i.F12 +setenv CASINTS /tmp/lkwagner/mno1i.F13 +setenv CIINTS /tmp/lkwagner/mno1i.F14 +setenv WORK15 /tmp/lkwagner/mno1i.F15 +setenv WORK16 /tmp/lkwagner/mno1i.F16 +setenv CSFSAVE /tmp/lkwagner/mno1i.F17 +setenv FOCKDER /tmp/lkwagner/mno1i.F18 +setenv DASORT /tmp/lkwagner/mno1i.F20 +setenv DFTINTS /tmp/lkwagner/mno1i.F21 +setenv JKFILE /tmp/lkwagner/mno1i.F23 +setenv ORDINT /tmp/lkwagner/mno1i.F24 +setenv EFPIND /tmp/lkwagner/mno1i.F25 +setenv PCMDATA /tmp/lkwagner/mno1i.F26 +setenv PCMINTS /tmp/lkwagner/mno1i.F27 +setenv DAFL30 /tmp/lkwagner/mno1i.F30 +setenv SOCCDAT /tmp/lkwagner/mno1i.F40 +setenv MCQD50 /tmp/lkwagner/mno1i.F50 +setenv MCQD51 /tmp/lkwagner/mno1i.F51 +setenv MCQD52 /tmp/lkwagner/mno1i.F52 +setenv MCQD53 /tmp/lkwagner/mno1i.F53 +setenv MCQD54 /tmp/lkwagner/mno1i.F54 +setenv MCQD55 /tmp/lkwagner/mno1i.F55 +setenv MCQD56 /tmp/lkwagner/mno1i.F56 +setenv MCQD57 /tmp/lkwagner/mno1i.F57 +setenv MCQD58 /tmp/lkwagner/mno1i.F58 +setenv MCQD59 /tmp/lkwagner/mno1i.F59 +setenv MCQD60 /tmp/lkwagner/mno1i.F60 +setenv MCQD61 /tmp/lkwagner/mno1i.F61 +setenv MCQD62 /tmp/lkwagner/mno1i.F62 +setenv MCQD63 /tmp/lkwagner/mno1i.F63 +setenv MCQD64 /tmp/lkwagner/mno1i.F64 +unset echo +ddikick.x mno1i /usr/local/gamess gamess.00.x /tmp/lkwagner 1 aldebaran.physics.ncsu.edu +Initiating 1 processes to run job mno1i +Executable gamess.00.x will be run from directory /usr/local/gamess +Working scratch directory on each host will be /tmp/lkwagner +Running gamess.00.x on aldebaran.physics.ncsu.edu as compute process 0 +Running gamess.00.x on aldebaran.physics.ncsu.edu as data server 1 +1 ****************************************************** + * GAMESS VERSION = 26 OCT 2000 R3 * + * FROM IOWA STATE UNIVERSITY * + * M.W.SCHMIDT, K.K.BALDRIDGE, J.A.BOATZ, S.T.ELBERT, * + * M.S.GORDON, J.H.JENSEN, S.KOSEKI, N.MATSUNAGA, * + * K.A.NGUYEN, S.J.SU, T.L.WINDUS, * + * TOGETHER WITH M.DUPUIS, J.A.MONTGOMERY * + * J.COMPUT.CHEM. 14, 1347-1363(1993) * + ******************* PC-UNIX VERSION ****************** + + EXECUTION OF GAMESS BEGUN Wed May 22 11:34:43 2002 + + ECHO OF THE FIRST FEW INPUT CARDS - + INPUT CARD>!Yoon ECP on Titanium, Lester on Oxygen + INPUT CARD> $CONTRL SCFTYP=ROHF MULT=6 ICHARG=0 RUNTYP=ENERGY MAXIT=70 ECP=READ $END + INPUT CARD> $SYSTEM KDIAG=3 $END + INPUT CARD> $SCF DIRSCF=.T. RSTRCT=.F. SOSCF=.F. $END + INPUT CARD> $GUESS GUESS=MOREAD NORDER=1 IORDER(8)=9,8 $END + INPUT CARD> $DATA + INPUT CARD> + INPUT CARD>C1 + INPUT CARD>MN 25. 0. 0. -.0675725099 + INPUT CARD>S 7 1. + INPUT CARD> 1 37.267155 0.39037801E-01 + INPUT CARD> 2 23.295664 -0.25834960 + INPUT CARD> 3 14.061365 0.76279390 + INPUT CARD> 4 9.9303875 -0.24825741 + INPUT CARD> 5 7.9979882 -0.61830252 + INPUT CARD> 6 1.9205208 0.51014656 + INPUT CARD> 7 1.0861154 0.38060132 + INPUT CARD>S 1 + INPUT CARD> 1 1.765983000 1.000000000 + INPUT CARD>S 1 + INPUT CARD> 1 0.7137740000 1.000000000 + INPUT CARD>S 1 1. + INPUT CARD> 1 .25 1. + INPUT CARD>S 1 1. + INPUT CARD> 1 .1 1. + INPUT CARD>S 1 1. + INPUT CARD> 1 .04 1. + INPUT CARD>P 7 1. + INPUT CARD> 1 50.453613 0.28731674E-02 + INPUT CARD> 2 20.993099 -0.32531628 + INPUT CARD> 3 18.158922 0.53472191 + INPUT CARD> 4 12.328713 -0.24152134 + INPUT CARD> 5 4.5823927 -0.10436746 + INPUT CARD> 6 3.3082843 0.41230637 + INPUT CARD> 7 1.3713011 0.51765233 + INPUT CARD>P 1 1. + INPUT CARD> 1 1.765983000 1.000000000 Process initiation completed. + + INPUT CARD>P 1 1. + INPUT CARD> 1 0.7137740000 1.000000000 + INPUT CARD>P 1 1. + INPUT CARD> 1 .25 1. + INPUT CARD>P 1 1. + INPUT CARD> 1 .1 1. + INPUT CARD>P 1 1. + INPUT CARD> 1 .04 1. + INPUT CARD>D 5 1. + INPUT CARD> 1 27.851509 -0.84132208E-02 + INPUT CARD> 2 16.152140 0.85403956E-01 + INPUT CARD> 3 5.6169748 0.21698587 + INPUT CARD> 4 2.1590731 0.39649862 + 1000000 WORDS OF MEMORY AVAILABLE + + + RUN TITLE + --------- + + + THE POINT GROUP OF THE MOLECULE IS C1 + THE ORDER OF THE PRINCIPAL AXIS IS 0 + *** WARNING! ATOM 1 SHELL 1 TYPE S HAS NORMALIZATION 1.50657422 + *** WARNING! ATOM 1 SHELL 7 TYPE P HAS NORMALIZATION 1.29763370 + *** WARNING! ATOM 1 SHELL 13 TYPE D HAS NORMALIZATION 1.10634848 + *** WARNING! ATOM 2 SHELL 17 TYPE S HAS NORMALIZATION 1.00004554 + *** WARNING! ATOM 2 SHELL 20 TYPE P HAS NORMALIZATION 1.00079698 + + ATOM ATOMIC COORDINATES (BOHR) + CHARGE X Y Z + MN 25.0 .0000000000 .0000000000 -.1276935280 + O 8.0 .0000000000 .0000000000 3.1512551084 + + INTERNUCLEAR DISTANCES (ANGS.) + ------------------------------ + + MN O + + 1 MN .0000000 1.7351450 * + 2 O 1.7351450 * .0000000 + + * ... LESS THAN 3.000 + + + ATOMIC BASIS SET + ---------------- + THE CONTRACTED PRIMITIVE FUNCTIONS HAVE BEEN UNNORMALIZED + THE CONTRACTED BASIS FUNCTIONS ARE NOW NORMALIZED TO UNITY + + SHELL TYPE PRIMITIVE EXPONENT CONTRACTION COEFFICIENTS + + MN + + 1 S 1 37.2671550 .058813344487 + 1 S 2 23.2956640 -.389222846410 + 1 S 3 14.0613650 1.149205622855 + 1 S 4 9.9303875 -.374018213160 + 1 S 5 7.9979882 -.931518635125 + 1 S 6 1.9205208 .768573654341 + 1 S 7 1.0861154 .573404135783 + + 2 S 8 1.7659830 1.000000000000 + + 3 S 9 .7137740 1.000000000000 + + 4 S 10 .2500000 1.000000000000 + + 5 S 11 .1000000 1.000000000000 + + 6 S 12 .0400000 1.000000000000 + + 7 P 13 50.4536130 .003728318844 + 7 P 14 20.9930990 -.422141368061 + 7 P 15 18.1589220 .693873170502 + 7 P 16 12.3287130 -.313406230034 + 7 P 17 4.5823927 -.135430733271 + 7 P 18 3.3082843 .535022640404 + 7 P 19 1.3713011 .671723108250 + + 8 P 20 1.7659830 1.000000000000 + + 9 P 21 .7137740 1.000000000000 + + 10 P 22 .2500000 1.000000000000 + + 11 P 23 .1000000 1.000000000000 + + 12 P 24 .0400000 1.000000000000 + + 13 D 25 27.8515090 -.009307954069 + 13 D 26 16.1521400 .094486537164 + 13 D 27 5.6169748 .240061988110 + 13 D 28 2.1590731 .438665646754 + 13 D 29 .7704969 .479818778927 + + 14 D 30 .2700000 1.000000000000 + + 15 D 31 .0700000 1.000000000000 + + 16 F 32 1.8000000 1.000000000000 + + O + + 17 S 33 19.4478130 .002383810957 + 17 S 34 12.4209720 .014955485062 + 17 S 35 6.1715364 -.176890355455 + 17 S 36 4.0532336 .027787809436 + 17 S 37 1.1199164 .399546255038 + 17 S 38 .4325723 .565399407867 + 17 S 39 .1598001 .157805786358 + + 18 S 40 .2950000 1.000000000000 + + 19 S 41 .0978000 1.000000000000 + + 20 P 42 62.8410070 -.000138254308 + 20 P 43 24.3213840 .007623052892 + 20 P 44 9.3865118 .070157309537 + 20 P 45 3.2627614 .195674734915 + 20 P 46 1.2486125 .353268043814 + 20 P 47 .4673562 .417706359049 + 20 P 48 .1602394 .210780474319 + + 21 P 49 .2400000 1.000000000000 + + 22 P 50 .0800000 1.000000000000 + + 23 D 51 .9800000 1.000000000000 + + TOTAL NUMBER OF BASIS SET SHELLS = 23 + NUMBER OF CARTESIAN GAUSSIAN BASIS FUNCTIONS = 70 + NUMBER OF ELECTRONS = 33 + CHARGE OF MOLECULE = 0 + SPIN MULTIPLICITY = 6 + NUMBER OF OCCUPIED ORBITALS (ALPHA) = 19 + NUMBER OF OCCUPIED ORBITALS (BETA ) = 14 + TOTAL NUMBER OF ATOMS = 2 + THE NUCLEAR REPULSION ENERGY IS 60.9951610040 + NOTE THIS RUN IS USING CORE POTENTIALS, AND THE NUMBER OF ELECTRONS, + OCCUPIED ORBITALS, AND NUCLEAR REPULSION ENERGY WILL BE ADJUSTED BELOW + AFTER REMOVAL OF THE CORE CHARGES. + + THIS MOLECULE IS RECOGNIZED AS BEING LINEAR. + + $CONTRL OPTIONS + --------------- + SCFTYP=ROHF RUNTYP=ENERGY EXETYP=RUN + MPLEVL= 0 LOCAL =NONE UNITS =ANGS + MULT = 6 ICHARG= 0 MAXIT = 70 + NPRINT= 7 IREST = 0 COORD =UNIQUE + ECP =READ NORMF = 0 NORMP = 0 + ITOL = 20 ICUT = 9 NZVAR = 0 + NOSYM = 0 INTTYP=POPLE GEOM =INPUT + PLTORB= F MOLPLT= F RPAC = F + AIMPAC= F FRIEND= CITYP =NONE + ISPHER= -1 QMTTOL= 1.0E-06 RELWFN=NONE + + $SYSTEM OPTIONS + --------------- + REPLICATED MEMORY= 1000000 WORDS (ON EVERY NODE). + DISTRIBUTED MEMDDI= 0 MILLION WORDS IN AGGREGATE, + MEMDDI DISTRIBUTED OVER 1 PROCESSORS IS 0 WORDS/PROCESSOR. + TOTAL MEMORY REQUESTED ON EACH PROCESSOR= 1000000 WORDS. + TIMLIM= 36000.0 SECONDS. + COREFL=F KDIAG= 3 + + -------------- + ECP POTENTIALS + -------------- + + PARAMETERS FOR "MN-ECP " ON ATOM 1 WITH ZCORE 10 AND LMAX 2 ARE + FOR L= 2 COEFF N ZETA + 1 6414.98369 2 138.28555 + 2 4352.98345 2 81.91727 + 3 4242.28523 2 17.73289 + 4 -4.07742 2 7749.96944 + 5 -2222.65038 2 16.38249 + 6 -5461.95518 2 99.24065 + 7 7265.55593 2 30.92659 + 8 -4470.82724 2 147.01450 + 9 -5812.86306 2 23.50118 + 10 -4381.78680 2 40.16809 + 11 15.00000 1 18.00000 + FOR L= 0 COEFF N ZETA + 1 -12638.26250 2 13.28682 + 2 27155.59300 2 24.41091 + 3 -46214.12020 2 21.20412 + 4 20923.39380 2 27.78107 + 5 1654.36426 2 10.95239 + 6 -20006.19600 2 34.23045 + 7 4712.00229 2 51.29103 + 8 25417.51920 2 15.60399 + 9 12187.55300 2 88.85601 + 10 -13133.51660 2 87.61747 + FOR L= 1 COEFF N ZETA + 1 -11900.95540 2 17.43082 + 2 1771.78434 2 6.78675 + 3 6798.65983 2 13.19288 + 4 -661.34705 2 6.03485 + 5 5324.30064 2 21.47355 + 6 -1131.64204 2 54.62200 + 7 -2628.40227 2 8.65019 + 8 -5330.83041 2 34.17469 + 9 4587.11743 2 24.72336 + 10 3209.86996 2 46.29155 + + PARAMETERS FOR "O-LES " ON ATOM 2 WITH ZCORE 2 AND LMAX 1 ARE + FOR L= 1 COEFF N ZETA + 1 -33.78808 2 15.21685 + 2 -3.39404 2 128.50999 + 3 -7.80349 2 38.17253 + 4 -1.77250 2 540.59047 + 5 3.92317 2 8.69743 + 6 -.93913 2 3211.15414 + 7 6.00000 1 15.00000 + FOR L= 0 COEFF N ZETA + 1 29.11024 2 10.04485 + 2 47.72885 2 10.23785 + 3 -21.41039 2 8.77094 + + THE ECP RUN REMOVES 12 CORE ELECTRONS, AND THE SAME NUMBER OF PROTONS. + NUMBER OF ELECTRONS KEPT IN THE CALCULATION IS = 21 + NUMBER OF OCCUPIED ORBITALS (ALPHA) KEPT IS = 13 + NUMBER OF OCCUPIED ORBITALS (BETA ) KEPT IS = 8 + THE ADJUSTED NUCLEAR REPULSION ENERGY= 27.4478224518 + ECP ANGULAR INTS......... .01 SECONDS + + ---------------- + PROPERTIES INPUT + ---------------- + + MOMENTS FIELD POTENTIAL DENSITY + IEMOM = 1 IEFLD = 0 IEPOT = 0 IEDEN = 0 + WHERE =COMASS WHERE =NUCLEI WHERE =NUCLEI WHERE =NUCLEI + OUTPUT=BOTH OUTPUT=BOTH OUTPUT=BOTH OUTPUT=BOTH + IEMINT= 0 IEFINT= 0 IEDINT= 0 + MORB = 0 + EXTRAPOLATION IN EFFECT + DIIS IN EFFECT + + ------------------------------- + INTEGRAL TRANSFORMATION OPTIONS + ------------------------------- + NWORD = 0 CUTOFF = 1.0E-09 + MPTRAN = 0 DIRTRF = T + AOINTS =DUP + + ---------------------- + INTEGRAL INPUT OPTIONS + ---------------------- + NOPK = 1 NORDER= 0 SCHWRZ= T + + ------------------------------------------ + THE POINT GROUP IS C1 , NAXIS= 0, ORDER= 1 + ------------------------------------------ + + DIMENSIONS OF THE SYMMETRY SUBSPACES ARE + A = 70 + + ..... DONE SETTING UP THE RUN ..... + STEP CPU TIME = .21 TOTAL CPU TIME = .2 ( .0 MIN) + TOTAL WALL CLOCK TIME= .3 SECONDS, CPU UTILIZATION IS 80.77% + + ******************** + 1 ELECTRON INTEGRALS + ******************** + TIME TO DO ORDINARY INTEGRALS= .01 + TIME TO DO ECP INTEGRALS= .08 + ...... END OF ONE-ELECTRON INTEGRALS ...... + STEP CPU TIME = .09 TOTAL CPU TIME = .3 ( .0 MIN) + TOTAL WALL CLOCK TIME= .3 SECONDS, CPU UTILIZATION IS 85.71% + + ------------- + GUESS OPTIONS + ------------- + GUESS =MOREAD NORB = 0 NORDER= 1 + MIX = F PRTMO = F PUNMO = F + TOLZ = 1.0E-08 TOLE = 1.0E-05 + SYMDEN= F PURIFY= F + + INITIAL GUESS ORBITALS GENERATED BY MOREAD ROUTINE. + + SYMMETRIES FOR INITIAL GUESS ORBITALS FOLLOW. ALPHA SET(S). + 13 ORBITALS ARE OCCUPIED ( 4 CORE ORBITALS). + 5=A 6=A 7=A 8=A 9=A 10=A 11=A + 12=A 13=A 14=A 15=A 16=A 17=A 18=A + 19=A 20=A 21=A 22=A 23=A + + SYMMETRIES FOR INITIAL GUESS ORBITALS FOLLOW. BETA SET(S). + 8 ORBITALS ARE OCCUPIED ( 4 CORE ORBITALS). + 5=A 6=A 7=A 8=A 9=A 10=A 11=A + 12=A 13=A 14=A 15=A 16=A 17=A 18=A + ...... END OF INITIAL ORBITAL SELECTION ...... + STEP CPU TIME = .05 TOTAL CPU TIME = .3 ( .0 MIN) + TOTAL WALL CLOCK TIME= .4 SECONDS, CPU UTILIZATION IS 87.50% + + -------------------- + 2 ELECTRON INTEGRALS + -------------------- + + DIRECT SCF METHOD SKIPS INTEGRAL STORAGE ON DISK. + DIRECT TRANSFORMATION SKIPS AO INTEGRAL STORAGE ON DISK. + ...... END OF TWO-ELECTRON INTEGRALS ..... + STEP CPU TIME = .00 TOTAL CPU TIME = .3 ( .0 MIN) + TOTAL WALL CLOCK TIME= .4 SECONDS, CPU UTILIZATION IS 87.50% + + -------------------- + ROHF SCF CALCULATION + -------------------- + + NUCLEAR ENERGY = 27.4478224518 + MAXIT = 70 NPUNCH= 2 MULT= 6 + EXTRAP=T DAMP=F SHIFT=F RSTRCT=F DIIS=T SOSCF=F + DENSITY CONV= 2.00E-05 + ROHF CANONICALIZATION PARAMETERS + C-C O-O V-V + ALPHA -.5000 .5000 1.5000 + BETA 1.5000 .5000 -.5000 + MEMORY REQUIRED FOR UHF/ROHF STEP= 72757 WORDS. + + DIRECT SCF CALCULATION, SCHWRZ=T FDIFF=T + SCHWARZ INEQUALITY OVERHEAD: 2485 INTEGRALS, T= .06 + + NONZERO BLOCKS + ITER EX TOTAL ENERGY E CHANGE DENSITY CHANGE DIIS ERROR INTEGRALS SKIPPED + * * * INITIATING DIIS PROCEDURE * * * + 1 0 -118.795133678 -118.795133678 1.493693402 .211446974 695431 0 + 2 1 -113.278935056 5.516198623 1.422542348 .783062932 695431 0 + 3 2 -118.846495963 -5.567560907 .330684248 .168469735 695431 0 + 4 3 -118.962461549 -.115965587 .294266846 .061984477 695431 0 + 5 4 -119.007121291 -.044659742 .153880816 .026954998 695431 0 + 6 5 -119.016802068 -.009680777 .084628010 .027608964 695431 0 + 7 6 -119.025555070 -.008753002 .227599501 .020824528 695431 0 + 8 7 -119.021436375 .004118695 .357499435 .024503547 695431 0 + 9 8 -119.030425384 -.008989009 .311981487 .009965926 695431 0 + 10 9 -119.031243999 -.000818615 .139835731 .005141869 695431 0 + 11 10 -119.031793954 -.000549955 .030990913 .002833792 695431 0 + 12 11 -119.031864359 -.000070405 .054800117 .001411499 695431 0 + 13 12 -119.031893117 -.000028758 .029825751 .001364478 695431 0 + 14 13 -119.031929475 -.000036358 .013777409 .000427118 695431 0 + 15 14 -119.031929604 -.000000129 .006869847 .000571388 695431 0 + 16 15 -119.031933447 -.000003842 .002458823 .000191420 695422 1 + 17 16 -119.031934292 -.000000845 .002716866 .000159614 695422 1 + 18 17 -119.031934742 -.000000450 .001002452 .000033706 695431 0 + 19 18 -119.031934761 -.000000019 .001455947 .000024958 695251 4 + 20 19 -119.031934767 -.000000006 .001035749 .000036655 695217 8 + 21 20 -119.031934798 -.000000030 .000173821 .000009387 694866 14 + 22 21 -119.031934801 -.000000003 .000044014 .000004451 694153 26 + 23 22 -119.031934801 .000000000 .000081192 .000002077 691607 114 + 24 23 -119.031934801 .000000000 .000049209 .000002407 676160 842 + 25 24 -119.031934802 -.000000001 .000014996 .000000642 672451 821 + 26 25 -119.031934801 .000000001 .000006626 .000000416 661367 1025 + + ----------------- + DENSITY CONVERGED + ----------------- + + FINAL ENERGY IS -119.0319348009 AFTER 26 ITERATIONS + + -------------------- + SPIN SZ = 2.500 + S-SQUARED = 8.750 + -------------------- + + ------------ + EIGENVECTORS + ------------ + + 1 2 3 4 5 + -3.4868 -2.0282 -2.0158 -2.0158 -1.0719 + A A A A A + 1 MN 1 S .657651 .023646 .000000 .000000 -.049462 + 2 MN 1 S -.017489 .003338 .000000 .000000 -.008226 + 3 MN 1 S .306336 .005946 .000000 .000000 -.056085 + 4 MN 1 S .089230 -.005647 .000000 .000000 .045160 + 5 MN 1 S .011820 -.023663 .000000 .000000 -.014025 + 6 MN 1 S .005557 .016160 .000000 .000000 .014374 + 7 MN 1 X .000000 .000000 .593294 -.495320 .000000 + 8 MN 1 Y .000000 .000000 .495320 .593294 .000000 + 9 MN 1 Z -.027172 .766764 .000000 .000000 -.113040 + 10 MN 1 X .000000 .000000 -.016738 .013974 .000000 + 11 MN 1 Y .000000 .000000 -.013974 -.016738 .000000 + 12 MN 1 Z .002439 -.022384 .000000 .000000 -.004649 + 13 MN 1 X .000000 .000000 .207930 -.173593 .000000 + 14 MN 1 Y .000000 .000000 .173593 .207930 .000000 + 15 MN 1 Z -.012817 .264881 .000000 .000000 -.041796 + 16 MN 1 X .000000 .000000 .057799 -.048254 .000000 + 17 MN 1 Y .000000 .000000 .048254 .057799 .000000 + 18 MN 1 Z -.004483 .082323 .000000 .000000 .031195 + 19 MN 1 X .000000 .000000 -.014028 .011711 .000000 + 20 MN 1 Y .000000 .000000 -.011711 -.014028 .000000 + 21 MN 1 Z .001026 -.037039 .000000 .000000 -.021497 + 22 MN 1 X .000000 .000000 .004614 -.003852 .000000 + 23 MN 1 Y .000000 .000000 .003852 .004614 .000000 + 24 MN 1 Z -.000590 .002852 .000000 .000000 -.012997 + 25 MN 1 XX .000724 .008128 .000000 .000000 -.030744 + 26 MN 1 YY .000724 .008128 .000000 .000000 -.030744 + 27 MN 1 ZZ -.002113 -.016073 .000000 .000000 .059040 + 28 MN 1 XY .000000 .000000 .000000 .000000 .000000 + 29 MN 1 XZ .000000 .000000 -.012205 .010190 .000000 + 30 MN 1 YZ .000000 .000000 -.010190 -.012205 .000000 + 31 MN 1 XX -.015013 .003047 .000000 .000000 -.012396 + 32 MN 1 YY -.015013 .003047 .000000 .000000 -.012396 + 33 MN 1 ZZ -.016772 .002082 .000000 .000000 .029679 + 34 MN 1 XY .000000 .000000 .000000 .000000 .000000 + 35 MN 1 XZ .000000 .000000 -.003830 .003197 .000000 + 36 MN 1 YZ .000000 .000000 -.003197 -.003830 .000000 + 37 MN 1 XX -.002434 -.003975 .000000 .000000 -.004105 + 38 MN 1 YY -.002434 -.003975 .000000 .000000 -.004105 + 39 MN 1 ZZ -.002808 -.013350 .000000 .000000 -.027385 + 40 MN 1 XY .000000 .000000 .000000 .000000 .000000 + 41 MN 1 XZ .000000 .000000 .000094 -.000078 .000000 + 42 MN 1 YZ .000000 .000000 .000078 .000094 .000000 + 43 MN XXX .000000 .000000 -.008781 .007331 .000000 + 44 MN YYY .000000 .000000 -.007331 -.008781 .000000 + 45 MN ZZZ -.000597 -.011426 .000000 .000000 .006484 + 46 MN XXY .000000 .000000 -.003278 -.003927 .000000 + 47 MN XXZ -.000230 -.004948 .000000 .000000 -.001203 + 48 MN YYX .000000 .000000 -.003927 .003278 .000000 + 49 MN YYZ -.000230 -.004948 .000000 .000000 -.001203 + 50 MN ZZX .000000 .000000 -.004157 .003471 .000000 + 51 MN ZZY .000000 .000000 -.003471 -.004157 .000000 + 52 MN XYZ .000000 .000000 .000000 .000000 .000000 + 53 O 2 S .006560 .061789 .000000 .000000 .919749 + 54 O 2 S -.000256 -.015065 .000000 .000000 -.015875 + 55 O 2 S .000160 .033911 .000000 .000000 .103715 + 56 O 2 X .000000 .000000 .006767 -.005650 .000000 + 57 O 2 Y .000000 .000000 .005650 .006767 .000000 + 58 O 2 Z -.005727 -.037072 .000000 .000000 -.053119 + 59 O 2 X .000000 .000000 .000125 -.000104 .000000 + 60 O 2 Y .000000 .000000 .000104 .000125 .000000 + 61 O 2 Z -.000380 .004523 .000000 .000000 -.005713 + 62 O 2 X .000000 .000000 .000786 -.000656 .000000 + 63 O 2 Y .000000 .000000 .000656 .000786 .000000 + 64 O 2 Z .000522 -.010115 .000000 .000000 -.008230 + 65 O 2 XX -.000128 -.000580 .000000 .000000 .002032 + 66 O 2 YY -.000128 -.000580 .000000 .000000 .002032 + 67 O 2 ZZ .001112 .006945 .000000 .000000 .013923 + 68 O 2 XY .000000 .000000 .000000 .000000 .000000 + 69 O 2 XZ .000000 .000000 -.000770 .000643 .000000 + 70 O 2 YZ .000000 .000000 -.000643 -.000770 .000000 + + 6 7 8 9 10 + -.3272 -.3272 -.3235 -.1539 -.1539 + A A A A A + 1 MN 1 S .000000 .000000 .118441 .000000 .000000 + 2 MN 1 S .000000 .000000 .028287 .000000 .000000 + 3 MN 1 S .000000 .000000 .156796 .000000 .000000 + 4 MN 1 S .000000 .000000 -.075538 .000000 .000000 + 5 MN 1 S .000000 .000000 -.333110 .000001 .000000 + 6 MN 1 S .000000 .000000 -.019071 -.000001 .000000 + 7 MN 1 X -.042480 .042412 .000000 .000000 .000000 + 8 MN 1 Y -.042411 -.042480 .000000 .000000 .000000 + 9 MN 1 Z .000000 .000000 .081917 .000000 .000000 + 10 MN 1 X -.004339 .004332 .000000 .000000 .000000 + 11 MN 1 Y -.004332 -.004339 .000000 .000000 .000000 + 12 MN 1 Z .000000 .000000 .008678 .000000 .000000 + 13 MN 1 X -.027197 .027153 .000000 .000000 .000000 + 14 MN 1 Y -.027153 -.027197 .000000 .000000 .000000 + 15 MN 1 Z .000000 .000000 .025363 .000000 .000000 + 16 MN 1 X .035809 -.035751 .000000 .000000 .000000 + 17 MN 1 Y .035751 .035809 .000000 .000000 .000000 + 18 MN 1 Z .000000 .000000 -.054883 .000000 .000000 + 19 MN 1 X .060499 -.060402 .000000 .000000 .000000 + 20 MN 1 Y .060402 .060499 .000000 .000000 .000000 + 21 MN 1 Z .000000 .000000 .001139 .000000 .000000 + 22 MN 1 X .023519 -.023481 .000000 .000000 .000000 + 23 MN 1 Y .023481 .023519 .000000 .000000 .000000 + 24 MN 1 Z .000000 .000000 .020811 .000000 .000000 + 25 MN 1 XX .000000 .000000 .104640 .000000 .773575 + 26 MN 1 YY .000000 .000000 .104640 .000000 -.773575 + 27 MN 1 ZZ .000000 .000000 -.201656 .000000 .000000 + 28 MN 1 XY .000000 .000000 .000000 .893247 .000000 + 29 MN 1 XZ .088580 -.088438 .000000 .000000 .000000 + 30 MN 1 YZ .088438 .088580 .000000 .000000 .000000 + 31 MN 1 XX .000000 .000000 .028043 .000000 .180794 + 32 MN 1 YY .000000 .000000 .028043 .000000 -.180794 + 33 MN 1 ZZ .000000 .000000 -.103037 .000000 .000000 + 34 MN 1 XY .000000 .000000 .000000 .208762 .000000 + 35 MN 1 XZ .056223 -.056133 .000000 .000000 .000000 + 36 MN 1 YZ .056133 .056223 .000000 .000000 .000000 + 37 MN 1 XX .000000 .000000 -.028688 .000000 .021581 + 38 MN 1 YY .000000 .000000 -.028688 .000000 -.021581 + 39 MN 1 ZZ .000000 .000000 -.013272 .000000 .000000 + 40 MN 1 XY .000000 .000000 .000000 .024919 .000000 + 41 MN 1 XZ .018608 -.018579 .000000 .000000 .000000 + 42 MN 1 YZ .018579 .018608 .000000 .000000 .000000 + 43 MN XXX .001500 -.001498 .000000 .000000 .000000 + 44 MN YYY .001498 .001500 .000000 .000000 .000000 + 45 MN ZZZ .000000 .000000 -.005846 .000000 .000000 + 46 MN XXY .000670 .000671 .000000 .000000 .000000 + 47 MN XXZ .000000 .000000 .002280 .000000 -.003909 + 48 MN YYX .000671 -.000670 .000000 .000000 .000000 + 49 MN YYZ .000000 .000000 .002280 .000000 .003909 + 50 MN ZZX .004176 -.004169 .000000 .000000 .000000 + 51 MN ZZY .004169 .004176 .000000 .000000 .000000 + 52 MN XYZ .000000 .000000 .000000 -.004514 .000000 + 53 O 2 S .000000 .000000 .174369 .000000 .000000 + 54 O 2 S .000000 .000000 .053310 .000000 .000000 + 55 O 2 S .000000 .000000 .105710 .000000 .000000 + 56 O 2 X .581667 -.580735 .000000 .000000 .000000 + 57 O 2 Y .580735 .581667 .000000 .000000 .000000 + 58 O 2 Z .000000 .000000 .743453 .000000 .000000 + 59 O 2 X .048562 -.048484 .000000 .000000 .000000 + 60 O 2 Y .048484 .048562 .000000 .000000 .000000 + 61 O 2 Z .000000 .000000 .015741 .000000 .000000 + 62 O 2 X .036911 -.036851 .000000 .000000 .000000 + 63 O 2 Y .036851 .036911 .000000 .000000 .000000 + 64 O 2 Z .000000 .000000 .027924 .000000 .000000 + 65 O 2 XX .000000 .000000 .005173 .000000 .001398 + 66 O 2 YY .000000 .000000 .005173 .000000 -.001398 + 67 O 2 ZZ .000000 .000000 -.024289 .000000 .000000 + 68 O 2 XY .000000 .000000 .000000 .001614 .000000 + 69 O 2 XZ -.015024 .015000 .000000 .000000 .000000 + 70 O 2 YZ -.015000 -.015024 .000000 .000000 .000000 + + 11 12 13 14 15 + -.1339 -.1303 -.1303 -.0666 .0301 + A A A A A + 1 MN 1 S .095469 .000000 .000000 -.064968 .000000 + 2 MN 1 S .033783 .000000 .000000 -.012799 .000000 + 3 MN 1 S .113462 .000000 .000000 -.106758 .000000 + 4 MN 1 S -.100619 .000000 .000000 -.045661 .000000 + 5 MN 1 S -.255120 .000000 .000000 -.156689 .000000 + 6 MN 1 S .001447 .000000 .000000 1.459554 .000000 + 7 MN 1 X .000000 .041893 -.041570 .000000 -.058989 + 8 MN 1 Y .000000 .041570 .041893 .000000 -.058867 + 9 MN 1 Z .045551 .000000 .000000 .140909 .000000 + 10 MN 1 X .000000 .006864 -.006811 .000000 -.013166 + 11 MN 1 Y .000000 .006811 .006864 .000000 -.013138 + 12 MN 1 Z .006665 .000000 .000000 .023111 .000000 + 13 MN 1 X .000000 .013179 -.013077 .000000 -.059255 + 14 MN 1 Y .000000 .013077 .013179 .000000 -.059132 + 15 MN 1 Z .003849 .000000 .000000 .068053 .000000 + 16 MN 1 X .000000 -.046121 .045765 .000000 .109418 + 17 MN 1 Y .000000 -.045765 -.046121 .000000 .109190 + 18 MN 1 Z -.013072 .000000 .000000 -.123043 .000000 + 19 MN 1 X .000000 -.036236 .035955 .000000 .009706 + 20 MN 1 Y .000000 -.035956 -.036236 .000000 .009685 + 21 MN 1 Z .018374 .000000 .000000 -.237968 .000000 + 22 MN 1 X .000000 -.006127 .006080 .000000 .680483 + 23 MN 1 Y .000000 -.006080 -.006128 .000000 .679066 + 24 MN 1 Z .026586 .000000 .000000 -.309561 .000000 + 25 MN 1 XX -.406729 .000000 .000000 -.095170 .000000 + 26 MN 1 YY -.406729 .000000 .000000 -.095170 .000000 + 27 MN 1 ZZ .821667 .000000 .000000 .184874 .000000 + 28 MN 1 XY .000000 .000000 .000000 .000000 .000000 + 29 MN 1 XZ .000000 .630763 -.625886 .000000 .096023 + 30 MN 1 YZ .000000 .625886 .630763 .000000 .095823 + 31 MN 1 XX -.112412 .000000 .000000 -.025924 .000000 + 32 MN 1 YY -.112412 .000000 .000000 -.025924 .000000 + 33 MN 1 ZZ .206493 .000000 .000000 -.000514 .000000 + 34 MN 1 XY .000000 .000000 .000000 .000000 .000000 + 35 MN 1 XZ .000000 .135953 -.134902 .000000 -.002825 + 36 MN 1 YZ .000000 .134902 .135953 .000000 -.002819 + 37 MN 1 XX -.038610 .000000 .000000 -.271604 .000000 + 38 MN 1 YY -.038610 .000000 .000000 -.271604 .000000 + 39 MN 1 ZZ .041694 .000000 .000000 -.196862 .000000 + 40 MN 1 XY .000000 .000000 .000000 .000000 .000000 + 41 MN 1 XZ .000000 .019826 -.019673 .000000 -.163271 + 42 MN 1 YZ .000000 .019673 .019826 .000000 -.162931 + 43 MN XXX .000000 .000394 -.000391 .000000 .011327 + 44 MN YYY .000000 .000391 .000394 .000000 .011304 + 45 MN ZZZ -.007553 .000000 .000000 -.011807 .000000 + 46 MN XXY .000000 .000175 .000176 .000000 .005055 + 47 MN XXZ .004069 .000000 .000000 -.003237 .000000 + 48 MN YYX .000000 .000176 -.000175 .000000 .005066 + 49 MN YYZ .004069 .000000 .000000 -.003237 .000000 + 50 MN ZZX .000000 -.006109 .006061 .000000 .001896 + 51 MN ZZY .000000 -.006061 -.006109 .000000 .001892 + 52 MN XYZ .000000 .000000 .000000 .000000 .000000 + 53 O 2 S -.025542 .000000 .000000 -.037779 .000000 + 54 O 2 S -.046499 .000000 .000000 -.008474 .000000 + 55 O 2 S -.044574 .000000 .000000 .069356 .000000 + 56 O 2 X .000000 -.129458 .128457 .000000 -.138859 + 57 O 2 Y .000000 -.128457 -.129457 .000000 -.138570 + 58 O 2 Z .085891 .000000 .000000 .343692 .000000 + 59 O 2 X .000000 -.025826 .025626 .000000 .005695 + 60 O 2 Y .000000 -.025626 -.025826 .000000 .005683 + 61 O 2 Z .058810 .000000 .000000 .021934 .000000 + 62 O 2 X .000000 -.025356 .025160 .000000 -.110454 + 63 O 2 Y .000000 -.025160 -.025356 .000000 -.110224 + 64 O 2 Z .002441 .000000 .000000 .056464 .000000 + 65 O 2 XX -.002241 .000000 .000000 .001243 .000000 + 66 O 2 YY -.002241 .000000 .000000 .001243 .000000 + 67 O 2 ZZ .001333 .000000 .000000 -.004185 .000000 + 68 O 2 XY .000000 .000000 .000000 .000000 .000000 + 69 O 2 XZ .000000 -.000364 .000361 .000000 -.000198 + 70 O 2 YZ .000000 -.000361 -.000364 .000000 -.000198 + + 16 17 18 19 20 + .0301 .0682 .0903 .1810 .1810 + A A A A A + 1 MN 1 S .000000 .083736 -.024249 .000000 .000000 + 2 MN 1 S .000000 .047609 -.000013 .000000 .000000 + 3 MN 1 S .000000 -.078814 -.072055 .000000 .000000 + 4 MN 1 S .000000 -.102662 .004982 .000000 .000000 + 5 MN 1 S .000000 -4.993219 -1.445102 .000000 .000000 + 6 MN 1 S .000000 9.324694 2.717051 .000000 .000000 + 7 MN 1 X .058867 .000000 .000000 .116847 .116059 + 8 MN 1 Y -.058989 .000000 .000000 -.116059 .116847 + 9 MN 1 Z .000000 -.083936 .035720 .000000 .000000 + 10 MN 1 X .013138 .000000 .000000 .006200 .006158 + 11 MN 1 Y -.013166 .000000 .000000 -.006158 .006200 + 12 MN 1 Z .000000 -.012142 -.003868 .000000 .000000 + 13 MN 1 X .059132 .000000 .000000 -.061862 -.061445 + 14 MN 1 Y -.059255 .000000 .000000 .061445 -.061862 + 15 MN 1 Z .000000 -.027840 -.090592 .000000 .000000 + 16 MN 1 X -.109190 .000000 .000000 .185743 .184490 + 17 MN 1 Y .109418 .000000 .000000 -.184490 .185743 + 18 MN 1 Z .000000 .041068 .214862 .000000 .000000 + 19 MN 1 X -.009685 .000000 .000000 -1.059467 -1.052322 + 20 MN 1 Y .009706 .000000 .000000 1.052322 -1.059467 + 21 MN 1 Z .000000 .095488 -.916044 .000000 .000000 + 22 MN 1 X -.679066 .000000 .000000 1.145728 1.138002 + 23 MN 1 Y .680483 .000000 .000000 -1.138002 1.145728 + 24 MN 1 Z .000000 -.676378 1.207453 .000000 .000000 + 25 MN 1 XX .000000 .034328 -.094224 .000000 .000000 + 26 MN 1 YY .000000 .034328 -.094224 .000000 .000000 + 27 MN 1 ZZ .000000 -.061497 .186202 .000000 .000000 + 28 MN 1 XY .000000 .000000 .000000 .000000 .000000 + 29 MN 1 XZ -.095824 .000000 .000000 -.090646 -.090035 + 30 MN 1 YZ .096023 .000000 .000000 .090035 -.090646 + 31 MN 1 XX .000000 -.190875 -.027450 .000000 .000000 + 32 MN 1 YY .000000 -.190875 -.027450 .000000 .000000 + 33 MN 1 ZZ .000000 -.207213 -.020597 .000000 .000000 + 34 MN 1 XY .000000 .000000 .000000 .000000 .000000 + 35 MN 1 XZ .002819 .000000 .000000 -.002941 -.002921 + 36 MN 1 YZ -.002825 .000000 .000000 .002921 -.002941 + 37 MN 1 XX .000000 -2.442725 -.439156 .000000 .000000 + 38 MN 1 YY .000000 -2.442725 -.439156 .000000 .000000 + 39 MN 1 ZZ .000000 -2.854293 -1.190569 .000000 .000000 + 40 MN 1 XY .000000 .000000 .000000 .000000 .000000 + 41 MN 1 XZ .162931 .000000 .000000 .518556 .515059 + 42 MN 1 YZ -.163271 .000000 .000000 -.515059 .518555 + 43 MN XXX -.011304 .000000 .000000 .014532 .014434 + 44 MN YYY .011327 .000000 .000000 -.014434 .014532 + 45 MN ZZZ .000000 .003297 .015362 .000000 .000000 + 46 MN XXY .005066 .000000 .000000 -.006455 .006499 + 47 MN XXZ .000000 .001093 .009818 .000000 .000000 + 48 MN YYX -.005055 .000000 .000000 .006499 .006455 + 49 MN YYZ .000000 .001093 .009818 .000000 .000000 + 50 MN ZZX -.001892 .000000 .000000 .008182 .008126 + 51 MN ZZY .001895 .000000 .000000 -.008126 .008182 + 52 MN XYZ .000000 .000000 .000000 .000000 .000000 + 53 O 2 S .000000 .051521 -.138774 .000000 .000000 + 54 O 2 S .000000 -.156239 .053868 .000000 .000000 + 55 O 2 S .000000 1.075409 .363003 .000000 .000000 + 56 O 2 X .138570 .000000 .000000 .016346 .016236 + 57 O 2 Y -.138859 .000000 .000000 -.016236 .016346 + 58 O 2 Z .000000 -.135241 .127459 .000000 .000000 + 59 O 2 X -.005683 .000000 .000000 .056373 .055993 + 60 O 2 Y .005695 .000000 .000000 -.055993 .056373 + 61 O 2 Z .000000 -.006552 .026122 .000000 .000000 + 62 O 2 X .110224 .000000 .000000 -.404953 -.402223 + 63 O 2 Y -.110454 .000000 .000000 .402223 -.404953 + 64 O 2 Z .000000 -.376106 -.337346 .000000 .000000 + 65 O 2 XX .000000 .000153 .002296 .000000 .000000 + 66 O 2 YY .000000 .000153 .002296 .000000 .000000 + 67 O 2 ZZ .000000 .004594 -.009556 .000000 .000000 + 68 O 2 XY .000000 .000000 .000000 .000000 .000000 + 69 O 2 XZ .000198 .000000 .000000 .004147 .004119 + 70 O 2 YZ -.000198 .000000 .000000 -.004119 .004147 + + 21 22 23 24 25 + .1878 .1878 .1933 .2425 .2425 + A A A A A + 1 MN 1 S .000000 .000000 .000841 .000000 .000000 + 2 MN 1 S .000000 .000000 -.024076 .000000 .000000 + 3 MN 1 S .000000 .000000 .227874 .000000 .000000 + 4 MN 1 S .000000 .000000 .364401 .000000 .000000 + 5 MN 1 S -.000001 .000000 -2.201056 .000000 .000000 + 6 MN 1 S -.000002 .000000 -2.771345 .000000 .000000 + 7 MN 1 X .000000 .000000 .000000 -.091661 .091566 + 8 MN 1 Y .000000 .000000 .000000 -.091566 -.091661 + 9 MN 1 Z .000000 .000000 .008104 .000000 .000000 + 10 MN 1 X .000000 .000000 .000000 -.010731 .010720 + 11 MN 1 Y .000000 .000000 .000000 -.010720 -.010731 + 12 MN 1 Z .000000 .000000 -.001254 .000000 .000000 + 13 MN 1 X .000000 .000000 .000000 .009924 -.009913 + 14 MN 1 Y .000000 .000000 .000000 .009913 .009924 + 15 MN 1 Z .000000 .000000 -.024489 .000000 .000000 + 16 MN 1 X .000000 .000000 .000000 -.054839 .054782 + 17 MN 1 Y .000000 .000000 .000000 -.054782 -.054839 + 18 MN 1 Z .000000 .000000 .071084 .000000 .000000 + 19 MN 1 X .000000 .000000 .000000 .806853 -.806014 + 20 MN 1 Y .000000 .000000 .000000 .806014 .806853 + 21 MN 1 Z -.000001 .000000 -1.490931 .000000 .000000 + 22 MN 1 X .000000 .000000 .000000 -.087837 .087746 + 23 MN 1 Y .000000 .000000 .000000 -.087746 -.087837 + 24 MN 1 Z -.000001 .000000 -1.436564 .000000 .000000 + 25 MN 1 XX .000000 -.141794 -.066300 .000000 .000000 + 26 MN 1 YY .000000 .141794 -.066300 .000000 .000000 + 27 MN 1 ZZ .000000 .000000 .133319 .000000 .000000 + 28 MN 1 XY -.163730 .000000 .000000 .000000 .000000 + 29 MN 1 XZ .000000 .000000 .000000 -.019039 .019019 + 30 MN 1 YZ .000000 .000000 .000000 -.019019 -.019039 + 31 MN 1 XX .000000 -.048882 .270446 .000000 .000000 + 32 MN 1 YY .000000 .048882 .270446 .000000 .000000 + 33 MN 1 ZZ .000000 .000000 .194506 .000000 .000000 + 34 MN 1 XY -.056444 .000000 .000000 .000000 .000000 + 35 MN 1 XZ .000000 .000000 .000000 -.069317 .069245 + 36 MN 1 YZ .000000 .000000 .000000 -.069245 -.069317 + 37 MN 1 XX .000001 .883677 1.282559 .000000 .000000 + 38 MN 1 YY .000001 -.883677 1.282559 .000000 .000000 + 39 MN 1 ZZ -.000001 .000000 -1.414525 .000000 .000000 + 40 MN 1 XY 1.020383 .000000 -.000001 .000000 .000000 + 41 MN 1 XZ .000000 .000000 .000000 .950360 -.949372 + 42 MN 1 YZ .000000 .000000 .000000 .949372 .950360 + 43 MN XXX .000000 .000000 .000000 -.001418 .001416 + 44 MN YYY .000000 .000000 .000000 -.001416 -.001418 + 45 MN ZZZ .000000 .000000 .005722 .000000 .000000 + 46 MN XXY .000000 .000000 .000000 -.000633 -.000634 + 47 MN XXZ .000000 -.000293 .001447 .000000 .000000 + 48 MN YYX .000000 .000000 .000000 -.000634 .000633 + 49 MN YYZ .000000 .000293 .001447 .000000 .000000 + 50 MN ZZX .000000 .000000 .000000 -.006468 .006461 + 51 MN ZZY .000000 .000000 .000000 -.006461 -.006468 + 52 MN XYZ -.000339 .000000 .000000 .000000 .000000 + 53 O 2 S .000000 .000000 .107976 .000000 .000000 + 54 O 2 S .000000 .000000 -.252451 .000000 .000000 + 55 O 2 S .000002 .000000 4.431142 .000000 .000000 + 56 O 2 X .000000 .000000 .000000 -.177577 .177393 + 57 O 2 Y .000000 .000000 .000000 -.177393 -.177578 + 58 O 2 Z .000000 .000000 .156393 .000000 .000000 + 59 O 2 X .000000 .000000 .000000 -.129182 .129048 + 60 O 2 Y .000000 .000000 .000000 -.129048 -.129182 + 61 O 2 Z .000000 .000000 -.178312 .000000 .000000 + 62 O 2 X .000000 .000000 .000000 -.538515 .537955 + 63 O 2 Y .000000 .000000 .000000 -.537955 -.538515 + 64 O 2 Z .000000 .000000 -.858018 .000000 .000000 + 65 O 2 XX .000000 .004118 -.000446 .000000 .000000 + 66 O 2 YY .000000 -.004118 -.000446 .000000 .000000 + 67 O 2 ZZ .000000 .000000 .003594 .000000 .000000 + 68 O 2 XY .004755 .000000 .000000 .000000 .000000 + 69 O 2 XZ .000000 .000000 .000000 -.001300 .001299 + 70 O 2 YZ .000000 .000000 .000000 -.001299 -.001300 + + 26 27 28 29 30 + .2821 .3245 .3734 .3734 .4106 + A A A A A + 1 MN 1 S -.071629 -.054777 .000000 .000000 -.085430 + 2 MN 1 S .029480 .024814 .000000 .000000 -.018181 + 3 MN 1 S -.574493 -.467217 .000000 .000000 -.207606 + 4 MN 1 S -.397203 -.611748 .000000 .000000 -.394813 + 5 MN 1 S -5.376998 4.727880 .000000 .000000 .003480 + 6 MN 1 S 11.809517 .537928 .000000 .000000 3.330527 + 7 MN 1 X .000000 .000000 .018286 -.018245 .000000 + 8 MN 1 Y .000000 .000000 .018245 .018286 .000000 + 9 MN 1 Z .122073 -.065732 .000000 .000000 -.049630 + 10 MN 1 X .000000 .000000 -.000451 .000450 .000000 + 11 MN 1 Y .000000 .000000 -.000450 -.000451 .000000 + 12 MN 1 Z .010749 .003940 .000000 .000000 .012189 + 13 MN 1 X .000000 .000000 -.031883 .031811 .000000 + 14 MN 1 Y .000000 .000000 -.031811 -.031883 .000000 + 15 MN 1 Z -.049271 .199731 .000000 .000000 .152467 + 16 MN 1 X .000000 .000000 .072574 -.072408 .000000 + 17 MN 1 Y .000000 .000000 .072408 .072573 .000000 + 18 MN 1 Z .229312 -.577053 .000000 .000000 -.494324 + 19 MN 1 X .000000 .000000 -.462866 .461811 .000000 + 20 MN 1 Y .000000 .000000 -.461811 -.462865 .000000 + 21 MN 1 Z -2.688164 2.510575 .000000 .000000 2.037498 + 22 MN 1 X .000000 .000000 -.634175 .632731 .000000 + 23 MN 1 Y .000000 .000000 -.632731 -.634175 .000000 + 24 MN 1 Z .097568 -1.408396 .000000 .000000 -.242936 + 25 MN 1 XX .030390 -.075260 .000000 .000000 -.116369 + 26 MN 1 YY .030390 -.075260 .000000 .000000 -.116369 + 27 MN 1 ZZ -.068705 .144714 .000000 .000000 .224378 + 28 MN 1 XY .000000 .000000 .000000 .000000 .000000 + 29 MN 1 XZ .000000 .000000 .029242 -.029176 .000000 + 30 MN 1 YZ .000000 .000000 .029176 .029242 .000000 + 31 MN 1 XX -.479988 -.424465 .000000 .000000 -.089547 + 32 MN 1 YY -.479988 -.424465 .000000 .000000 -.089547 + 33 MN 1 ZZ -.482737 -.480187 .000000 .000000 -.077884 + 34 MN 1 XY .000000 .000000 .000000 .000000 .000000 + 35 MN 1 XZ .000000 .000000 .008046 -.008028 .000000 + 36 MN 1 YZ .000000 .000000 .008028 .008046 .000000 + 37 MN 1 XX -4.002690 -.407449 .000000 .000000 -1.534646 + 38 MN 1 YY -4.002690 -.407449 .000000 .000000 -1.534646 + 39 MN 1 ZZ -5.160282 -1.028923 .000000 .000000 -.111445 + 40 MN 1 XY .000000 .000000 .000000 .000000 .000000 + 41 MN 1 XZ .000000 .000000 -.721502 .719858 .000000 + 42 MN 1 YZ .000000 .000000 -.719858 -.721502 .000000 + 43 MN XXX .000000 .000000 .006960 -.006944 .000000 + 44 MN YYY .000000 .000000 .006944 .006960 .000000 + 45 MN ZZZ .016775 -.036352 .000000 .000000 -.043818 + 46 MN XXY .000000 .000000 .003106 .003113 .000000 + 47 MN XXZ .002441 -.016572 .000000 .000000 -.005258 + 48 MN YYX .000000 .000000 .003113 -.003106 .000000 + 49 MN YYZ .002441 -.016572 .000000 .000000 -.005258 + 50 MN ZZX .000000 .000000 .001967 -.001962 .000000 + 51 MN ZZY .000000 .000000 .001962 .001967 .000000 + 52 MN XYZ .000000 .000000 .000000 .000000 .000000 + 53 O 2 S .142884 -.149361 .000000 .000000 -.111096 + 54 O 2 S -.162709 -.092139 .000000 .000000 -.705682 + 55 O 2 S 3.686560 -1.424217 .000000 .000000 -.877182 + 56 O 2 X .000000 .000000 -.158036 .157676 .000000 + 57 O 2 Y .000000 .000000 -.157676 -.158036 .000000 + 58 O 2 Z .023112 -.005378 .000000 .000000 .316914 + 59 O 2 X .000000 .000000 -.360289 .359468 .000000 + 60 O 2 Y .000000 .000000 -.359468 -.360289 .000000 + 61 O 2 Z -.050386 -.220563 .000000 .000000 .532099 + 62 O 2 X .000000 .000000 1.853788 -1.849565 .000000 + 63 O 2 Y .000000 .000000 1.849565 1.853788 .000000 + 64 O 2 Z -1.375767 2.671179 .000000 .000000 -.898545 + 65 O 2 XX -.005169 -.005225 .000000 .000000 .010464 + 66 O 2 YY -.005169 -.005225 .000000 .000000 .010464 + 67 O 2 ZZ .004562 .032337 .000000 .000000 -.000680 + 68 O 2 XY .000000 .000000 .000000 .000000 .000000 + 69 O 2 XZ .000000 .000000 .009797 -.009775 .000000 + 70 O 2 YZ .000000 .000000 .009775 .009797 .000000 + + 31 32 33 34 35 + .6186 .7614 .7614 .7883 .8781 + A A A A A + 1 MN 1 S -.033713 .000000 .000000 .261431 .000000 + 2 MN 1 S -.068214 .000000 .000000 .292446 .000000 + 3 MN 1 S .432808 .000000 .000000 -1.309143 .000000 + 4 MN 1 S .977844 .000000 .000000 -2.824244 .000000 + 5 MN 1 S -8.252206 .000000 .000000 2.911013 .000000 + 6 MN 1 S -.115323 .000000 .000000 9.142266 .000000 + 7 MN 1 X .000000 -.098991 .098805 .000000 .000000 + 8 MN 1 Y .000000 -.098805 -.098991 .000000 .000000 + 9 MN 1 Z .043238 .000000 .000000 -.067355 .000000 + 10 MN 1 X .000000 -.079504 .079354 .000000 .000000 + 11 MN 1 Y .000000 -.079354 -.079504 .000000 .000000 + 12 MN 1 Z .009903 .000000 .000000 -.038199 .000000 + 13 MN 1 X .000000 -.700461 .699142 .000000 .000000 + 14 MN 1 Y .000000 -.699142 -.700461 .000000 .000000 + 15 MN 1 Z .061691 .000000 .000000 -.382576 .000000 + 16 MN 1 X .000000 1.900576 -1.896997 .000000 .000000 + 17 MN 1 Y .000000 1.896997 1.900576 .000000 .000000 + 18 MN 1 Z -.102924 .000000 .000000 1.119276 .000000 + 19 MN 1 X .000000 -1.841384 1.837916 .000000 .000000 + 20 MN 1 Y .000000 -1.837916 -1.841384 .000000 .000000 + 21 MN 1 Z -4.106148 .000000 .000000 -2.403875 .000000 + 22 MN 1 X .000000 .600539 -.599408 .000000 .000000 + 23 MN 1 Y .000000 .599408 .600539 .000000 .000000 + 24 MN 1 Z -1.053845 .000000 .000000 -.040193 .000000 + 25 MN 1 XX .068630 .000000 .000000 -.017085 -.543007 + 26 MN 1 YY .068630 .000000 .000000 -.017085 .543007 + 27 MN 1 ZZ -.140406 .000000 .000000 .061781 .000000 + 28 MN 1 XY .000000 .000000 .000000 .000000 .000000 + 29 MN 1 XZ .000000 .092021 -.091848 .000000 .000000 + 30 MN 1 YZ .000000 .091848 .092021 .000000 .000000 + 31 MN 1 XX .587582 .000000 .000000 -2.046197 1.066671 + 32 MN 1 YY .587582 .000000 .000000 -2.046197 -1.066671 + 33 MN 1 ZZ .457423 .000000 .000000 -2.324786 .000000 + 34 MN 1 XY .000000 .000000 .000000 .000000 .000000 + 35 MN 1 XZ .000000 -.148514 .148234 .000000 .000000 + 36 MN 1 YZ .000000 -.148234 -.148514 .000000 .000000 + 37 MN 1 XX .223721 .000000 .000000 -3.845568 -.457556 + 38 MN 1 YY .223721 .000000 .000000 -3.845568 .457556 + 39 MN 1 ZZ -1.968537 .000000 .000000 -4.553228 .000000 + 40 MN 1 XY .000000 .000000 .000000 .000000 .000000 + 41 MN 1 XZ .000000 -.056317 .056211 .000000 .000000 + 42 MN 1 YZ .000000 -.056211 -.056317 .000000 .000000 + 43 MN XXX .000000 .127141 -.126902 .000000 .000000 + 44 MN YYY .000000 .126902 .127141 .000000 .000000 + 45 MN ZZZ -.008289 .000000 .000000 .061862 .000000 + 46 MN XXY .000000 .056752 .056859 .000000 .000000 + 47 MN XXZ -.005289 .000000 .000000 .031554 -.002341 + 48 MN YYX .000000 .056859 -.056752 .000000 .000000 + 49 MN YYZ -.005289 .000000 .000000 .031554 .002341 + 50 MN ZZX .000000 .055123 -.055019 .000000 .000000 + 51 MN ZZY .000000 .055019 .055123 .000000 .000000 + 52 MN XYZ .000000 .000000 .000000 .000000 .000000 + 53 O 2 S -.151124 .000000 .000000 -.045890 .000000 + 54 O 2 S -1.452388 .000000 .000000 -.567111 .000000 + 55 O 2 S 9.760916 .000000 .000000 3.404524 .000000 + 56 O 2 X .000000 -.021315 .021274 .000000 .000000 + 57 O 2 Y .000000 -.021274 -.021315 .000000 .000000 + 58 O 2 Z -.178937 .000000 .000000 -.030393 .000000 + 59 O 2 X .000000 .064153 -.064032 .000000 .000000 + 60 O 2 Y .000000 .064032 .064153 .000000 .000000 + 61 O 2 Z -.695568 .000000 .000000 -.194670 .000000 + 62 O 2 X .000000 .139932 -.139668 .000000 .000000 + 63 O 2 Y .000000 .139668 .139932 .000000 .000000 + 64 O 2 Z -2.240056 .000000 .000000 -.824972 .000000 + 65 O 2 XX .012235 .000000 .000000 .005331 .013429 + 66 O 2 YY .012235 .000000 .000000 .005331 -.013429 + 67 O 2 ZZ .013738 .000000 .000000 -.007680 .000000 + 68 O 2 XY .000000 .000000 .000000 .000000 .000000 + 69 O 2 XZ .000000 -.007873 .007858 .000000 .000000 + 70 O 2 YZ .000000 -.007858 -.007873 .000000 .000000 + + 36 37 38 39 40 + .8781 .9307 .9394 .9394 1.1880 + A A A A A + 1 MN 1 S .000000 .138751 .000000 .000000 -.036305 + 2 MN 1 S .000000 .135328 .000000 .000000 -.020046 + 3 MN 1 S .000000 -.483030 .000000 .000000 -.044498 + 4 MN 1 S .000000 -1.758978 .000000 .000000 -.432360 + 5 MN 1 S .000000 7.440768 .000000 .000000 3.471723 + 6 MN 1 S .000000 .076570 .000000 .000000 .406578 + 7 MN 1 X .000000 .000000 -.040316 -.040361 .000000 + 8 MN 1 Y .000000 .000000 -.040361 .040316 .000000 + 9 MN 1 Z .000000 .122097 .000000 .000000 -.072927 + 10 MN 1 X .000000 .000000 -.017314 -.017333 .000000 + 11 MN 1 Y .000000 .000000 -.017333 .017314 .000000 + 12 MN 1 Z .000000 .089811 .000000 .000000 -.026594 + 13 MN 1 X .000000 .000000 -.078217 -.078304 .000000 + 14 MN 1 Y .000000 .000000 -.078304 .078217 .000000 + 15 MN 1 Z .000000 .909259 .000000 .000000 -.568900 + 16 MN 1 X .000000 .000000 .296890 .297222 .000000 + 17 MN 1 Y .000000 .000000 .297222 -.296890 .000000 + 18 MN 1 Z .000000 -2.730436 .000000 .000000 1.733208 + 19 MN 1 X .000000 .000000 -.275401 -.275708 .000000 + 20 MN 1 Y .000000 .000000 -.275708 .275401 .000000 + 21 MN 1 Z .000000 4.831440 .000000 .000000 1.767309 + 22 MN 1 X .000000 .000000 -.096548 -.096656 .000000 + 23 MN 1 Y .000000 .000000 -.096656 .096548 .000000 + 24 MN 1 Z .000000 -.622355 .000000 .000000 .103567 + 25 MN 1 XX .000000 .150426 .000000 .000000 .255818 + 26 MN 1 YY .000000 .150426 .000000 .000000 .255818 + 27 MN 1 ZZ .000000 -.284812 .000000 .000000 -.517448 + 28 MN 1 XY -.627011 .000000 .000000 .000000 .000000 + 29 MN 1 XZ .000000 .000000 -.425730 -.426205 .000000 + 30 MN 1 YZ .000000 .000000 -.426205 .425730 .000000 + 31 MN 1 XX .000000 -1.242834 .000000 .000000 -.854346 + 32 MN 1 YY .000000 -1.242834 .000000 .000000 -.854346 + 33 MN 1 ZZ .000000 -.369263 .000000 .000000 2.020084 + 34 MN 1 XY 1.231685 .000000 .000000 .000000 .000000 + 35 MN 1 XZ .000000 .000000 .883413 .884399 .000000 + 36 MN 1 YZ .000000 .000000 .884399 -.883413 .000000 + 37 MN 1 XX .000000 -.334883 .000000 .000000 -.123253 + 38 MN 1 YY .000000 -.334883 .000000 .000000 -.123253 + 39 MN 1 ZZ .000000 .444961 .000000 .000000 .031551 + 40 MN 1 XY -.528340 .000000 .000000 .000000 .000000 + 41 MN 1 XZ .000000 .000000 -.519357 -.519937 .000000 + 42 MN 1 YZ .000000 .000000 -.519937 .519357 .000000 + 43 MN XXX .000000 .000000 .017112 .017132 .000000 + 44 MN YYY .000000 .000000 .017132 -.017112 .000000 + 45 MN ZZZ .000000 -.157040 .000000 .000000 .056819 + 46 MN XXY .000000 .000000 .007661 -.007653 .000000 + 47 MN XXZ .000000 -.073761 .000000 .000000 .064012 + 48 MN YYX .000000 .000000 .007653 .007661 .000000 + 49 MN YYZ .000000 -.073761 .000000 .000000 .064012 + 50 MN ZZX .000000 .000000 .003194 .003198 .000000 + 51 MN ZZY .000000 .000000 .003198 -.003194 .000000 + 52 MN XYZ -.002703 .000000 .000000 .000000 .000000 + 53 O 2 S .000000 .204224 .000000 .000000 -.133575 + 54 O 2 S .000000 .109330 .000000 .000000 -.881815 + 55 O 2 S .000000 -4.683637 .000000 .000000 -3.303710 + 56 O 2 X .000000 .000000 -.218980 -.219224 .000000 + 57 O 2 Y .000000 .000000 -.219224 .218980 .000000 + 58 O 2 Z .000000 -.165308 .000000 .000000 .100094 + 59 O 2 X .000000 .000000 -.054156 -.054216 .000000 + 60 O 2 Y .000000 .000000 -.054216 .054156 .000000 + 61 O 2 Z .000000 -.097201 .000000 .000000 2.018827 + 62 O 2 X .000000 .000000 .403820 .404271 .000000 + 63 O 2 Y .000000 .000000 .404271 -.403820 .000000 + 64 O 2 Z .000000 1.878993 .000000 .000000 .585938 + 65 O 2 XX .000000 .011694 .000000 .000000 .002134 + 66 O 2 YY .000000 .011694 .000000 .000000 .002134 + 67 O 2 ZZ .000000 -.009681 .000000 .000000 -.074833 + 68 O 2 XY .015507 .000000 .000000 .000000 .000000 + 69 O 2 XZ .000000 .000000 -.018628 -.018649 .000000 + 70 O 2 YZ .000000 .000000 -.018649 .018628 .000000 + + 41 42 43 44 45 + 1.4350 1.4350 1.5189 1.9727 2.6469 + A A A A A + 1 MN 1 S .000000 .000000 -.071440 -.155700 .000000 + 2 MN 1 S .000000 .000000 .006009 .478245 .000000 + 3 MN 1 S .000000 .000000 -.634877 -6.325544 .000000 + 4 MN 1 S .000000 .000000 .899560 5.666159 .000000 + 5 MN 1 S .000000 .000000 -.964361 8.233500 .000000 + 6 MN 1 S .000000 .000000 -.678120 5.483912 .000000 + 7 MN 1 X -.005993 .005985 .000000 .000000 .000000 + 8 MN 1 Y -.005985 -.005993 .000000 .000000 .000000 + 9 MN 1 Z .000000 .000000 -.087884 .082891 .000000 + 10 MN 1 X .002354 -.002351 .000000 .000000 .000000 + 11 MN 1 Y .002351 .002354 .000000 .000000 .000000 + 12 MN 1 Z .000000 .000000 -.048631 .014974 .000000 + 13 MN 1 X .068587 -.068491 .000000 .000000 .000000 + 14 MN 1 Y .068491 .068587 .000000 .000000 .000000 + 15 MN 1 Z .000000 .000000 .045242 -.051767 .000001 + 16 MN 1 X -.156270 .156052 .000000 .000000 .000000 + 17 MN 1 Y -.156052 -.156270 .000000 .000000 .000000 + 18 MN 1 Z .000000 .000000 -.334261 -.296479 -.000001 + 19 MN 1 X .051287 -.051215 .000000 .000000 .000000 + 20 MN 1 Y .051215 .051287 .000000 .000000 .000000 + 21 MN 1 Z .000000 .000000 -1.590932 .340869 .000000 + 22 MN 1 X .293774 -.293363 .000000 .000000 .000000 + 23 MN 1 Y .293363 .293774 .000000 .000000 .000000 + 24 MN 1 Z .000000 .000000 -.440889 .024191 .000000 + 25 MN 1 XX .000000 .000000 .058899 -.018848 .000000 + 26 MN 1 YY .000000 .000000 .058899 -.018848 .000000 + 27 MN 1 ZZ .000000 .000000 -.126970 .023401 .000000 + 28 MN 1 XY .000000 .000000 .000000 .000000 .025186 + 29 MN 1 XZ .054493 -.054416 .000000 .000000 .000000 + 30 MN 1 YZ .054416 .054492 .000000 .000000 .000000 + 31 MN 1 XX .000000 .000000 -.475880 -4.994784 .000000 + 32 MN 1 YY .000000 .000000 -.475880 -4.994784 .000000 + 33 MN 1 ZZ .000000 .000000 -.639005 -5.251192 .000000 + 34 MN 1 XY .000000 .000000 .000000 .000000 -.067210 + 35 MN 1 XZ -.283812 .283415 .000000 .000000 .000000 + 36 MN 1 YZ -.283415 -.283812 .000000 .000000 .000000 + 37 MN 1 XX .000000 .000000 .316711 -2.575990 .000000 + 38 MN 1 YY .000000 .000000 .316711 -2.575990 .000000 + 39 MN 1 ZZ .000000 .000000 -.864052 -2.398873 .000000 + 40 MN 1 XY .000000 .000000 .000000 .000000 -.018514 + 41 MN 1 XZ .242593 -.242254 .000000 .000000 .000000 + 42 MN 1 YZ .242254 .242593 .000000 .000000 .000000 + 43 MN XXX -.019135 .019108 .000000 .000000 .000000 + 44 MN YYY -.019108 -.019135 .000000 .000000 .000000 + 45 MN ZZZ .000000 .000000 -.004920 .038601 .000000 + 46 MN XXY -.008546 -.008557 .000000 .000000 .000000 + 47 MN XXZ .000000 .000000 .010967 -.007972 .000000 + 48 MN YYX -.008557 .008546 .000000 .000000 .000000 + 49 MN YYZ .000000 .000000 .010967 -.007972 .000000 + 50 MN ZZX .007390 -.007380 .000000 .000000 .000000 + 51 MN ZZY .007380 .007390 .000000 .000000 .000000 + 52 MN XYZ .000000 .000000 .000000 .000000 .011430 + 53 O 2 S .000000 .000000 -.101749 -.110209 .000000 + 54 O 2 S .000000 .000000 .047241 .369129 .000000 + 55 O 2 S .000000 .000000 3.165938 -.552601 .000000 + 56 O 2 X -.922161 .920871 .000000 .000000 .000000 + 57 O 2 Y -.920871 -.922162 .000000 .000000 .000000 + 58 O 2 Z .000000 .000000 1.346255 -.257237 .000000 + 59 O 2 X 1.569600 -1.567404 .000000 .000000 .000000 + 60 O 2 Y 1.567404 1.569600 .000000 .000000 .000000 + 61 O 2 Z .000000 .000000 -2.735438 .016186 .000000 + 62 O 2 X -.852769 .851576 .000000 .000000 .000000 + 63 O 2 Y -.851576 -.852769 .000000 .000000 .000000 + 64 O 2 Z .000000 .000000 .281683 .169819 .000000 + 65 O 2 XX .000000 .000000 .026164 -.037255 .000000 + 66 O 2 YY .000000 .000000 .026164 -.037255 .000000 + 67 O 2 ZZ .000000 .000000 -.050130 .120244 .000000 + 68 O 2 XY .000000 .000000 .000000 .000000 1.001456 + 69 O 2 XZ .023951 -.023917 .000000 .000000 .000000 + 70 O 2 YZ .023917 .023951 .000000 .000000 .000000 + + 46 47 48 49 50 + 2.6469 2.6662 2.7281 2.7281 2.8635 + A A A A A + 1 MN 1 S .000000 .023115 .000000 .000000 .000000 + 2 MN 1 S .000000 -.001323 .000000 .000000 .000000 + 3 MN 1 S .000000 .125312 .000000 .000000 .000000 + 4 MN 1 S .000000 -.546412 .000000 .000000 .000000 + 5 MN 1 S .000000 .024305 .000000 .000000 .000000 + 6 MN 1 S .000000 -.107116 .000000 .000000 .000000 + 7 MN 1 X .000000 .000000 .326564 -.326736 -.807393 + 8 MN 1 Y .000000 .000000 -.326736 -.326564 -.807670 + 9 MN 1 Z .000000 -.794628 .000000 .000000 .000000 + 10 MN 1 X .000000 .000000 .110753 -.110811 -.274024 + 11 MN 1 Y .000000 .000000 -.110811 -.110753 -.274118 + 12 MN 1 Z .000000 -.279907 .000000 .000000 .000000 + 13 MN 1 X .000000 .000000 -.949141 .949639 2.683411 + 14 MN 1 Y .000000 .000000 .949639 .949141 2.684331 + 15 MN 1 Z .000000 2.957081 .000000 .000000 .000000 + 16 MN 1 X .000000 .000000 .493746 -.494005 -1.808146 + 17 MN 1 Y .000000 .000000 -.494005 -.493746 -1.808766 + 18 MN 1 Z .000000 -2.702572 .000000 .000000 .000000 + 19 MN 1 X .000000 .000000 -.321631 .321800 .968277 + 20 MN 1 Y .000000 .000000 .321800 .321631 .968609 + 21 MN 1 Z .000000 1.017648 .000000 .000000 .000000 + 22 MN 1 X .000000 .000000 .099443 -.099495 -.252042 + 23 MN 1 Y .000000 .000000 -.099495 -.099443 -.252129 + 24 MN 1 Z .000000 -.512988 .000000 .000000 .000000 + 25 MN 1 XX -.021812 .001336 .000000 .000000 .000000 + 26 MN 1 YY .021812 .001336 .000000 .000000 .000000 + 27 MN 1 ZZ .000000 .001831 .000000 .000000 .000000 + 28 MN 1 XY .000000 .000000 .000000 .000000 .000000 + 29 MN 1 XZ .000000 .000000 .043598 -.043621 .034325 + 30 MN 1 YZ .000000 .000000 -.043621 -.043598 .034337 + 31 MN 1 XX .058205 .041869 .000000 .000000 .000000 + 32 MN 1 YY -.058205 .041869 .000000 .000000 .000000 + 33 MN 1 ZZ .000000 -.604837 .000000 .000000 .000000 + 34 MN 1 XY .000000 .000000 .000000 .000000 .000000 + 35 MN 1 XZ .000000 .000000 -.209240 .209349 -.121400 + 36 MN 1 YZ .000000 .000000 .209349 .209240 -.121442 + 37 MN 1 XX .016034 -.071899 .000000 .000000 .000000 + 38 MN 1 YY -.016034 -.071899 .000000 .000000 .000000 + 39 MN 1 ZZ .000000 -.040925 .000000 .000000 .000000 + 40 MN 1 XY .000000 .000000 .000000 .000000 .000000 + 41 MN 1 XZ .000000 .000000 .034541 -.034560 .076724 + 42 MN 1 YZ .000000 .000000 -.034560 -.034541 .076750 + 43 MN XXX .000000 .000000 .122527 -.122591 -.457415 + 44 MN YYY .000000 .000000 -.122591 -.122527 -.457572 + 45 MN ZZZ .000000 -.388532 .000000 .000000 .000000 + 46 MN XXY .000000 .000000 -.054824 -.054796 -.204632 + 47 MN XXZ -.009899 -.290820 .000000 .000000 .000000 + 48 MN YYX .000000 .000000 .054796 -.054824 -.204562 + 49 MN YYZ .009899 -.290820 .000000 .000000 .000000 + 50 MN ZZX .000000 .000000 .126878 -.126944 -.175725 + 51 MN ZZY .000000 .000000 -.126944 -.126878 -.175785 + 52 MN XYZ .000000 .000000 .000000 .000000 .000000 + 53 O 2 S .000000 .822227 .000000 .000000 .000000 + 54 O 2 S .000000 -.821000 .000000 .000000 .000000 + 55 O 2 S .000000 1.010472 .000000 .000000 .000000 + 56 O 2 X .000000 .000000 -.065564 .065599 -.003293 + 57 O 2 Y .000000 .000000 .065599 .065564 -.003294 + 58 O 2 Z .000000 .020488 .000000 .000000 .000000 + 59 O 2 X .000000 .000000 .135586 -.135657 .085842 + 60 O 2 Y .000000 .000000 -.135657 -.135586 .085872 + 61 O 2 Z .000000 -.858081 .000000 .000000 .000000 + 62 O 2 X .000000 .000000 .006109 -.006112 -.107928 + 63 O 2 Y .000000 .000000 -.006112 -.006109 -.107965 + 64 O 2 Z .000000 .012703 .000000 .000000 .000000 + 65 O 2 XX -.867286 -.357005 .000000 .000000 .000000 + 66 O 2 YY .867286 -.357005 .000000 .000000 .000000 + 67 O 2 ZZ .000000 .815046 .000000 .000000 .000000 + 68 O 2 XY .000000 .000000 .000000 .000000 .000000 + 69 O 2 XZ .000000 .000000 -.663816 .664165 -.296507 + 70 O 2 YZ .000000 .000000 .664165 .663816 -.296608 + + 51 52 53 54 55 + 2.8635 3.1799 3.4629 4.5745 4.5745 + A A A A A + 1 MN 1 S .000000 .026854 .083159 .000000 .000000 + 2 MN 1 S .000000 .001369 .081176 .000000 .000000 + 3 MN 1 S .000000 .380068 .326866 .000000 .000000 + 4 MN 1 S .000000 -.489187 -.663026 .000000 .000000 + 5 MN 1 S .000000 -3.552042 .683401 .000000 .000000 + 6 MN 1 S .000000 1.551422 -1.238304 .000000 .000000 + 7 MN 1 X -.807670 .000000 .000000 .000000 .000000 + 8 MN 1 Y .807393 .000000 .000000 .000000 .000000 + 9 MN 1 Z .000000 .840990 .327992 .000000 .000000 + 10 MN 1 X -.274118 .000000 .000000 .000000 .000000 + 11 MN 1 Y .274024 .000000 .000000 .000000 .000000 + 12 MN 1 Z .000000 .402557 .113739 .000000 .000000 + 13 MN 1 X 2.684331 .000000 .000000 .000000 .000000 + 14 MN 1 Y -2.683411 .000000 .000000 .000000 .000000 + 15 MN 1 Z .000000 -3.073663 -.697466 .000000 .000000 + 16 MN 1 X -1.808766 .000000 .000000 .000000 .000000 + 17 MN 1 Y 1.808146 .000000 .000000 .000000 .000000 + 18 MN 1 Z .000000 2.391957 -.533714 .000000 .000000 + 19 MN 1 X .968609 .000000 .000000 .000000 .000000 + 20 MN 1 Y -.968277 .000000 .000000 .000000 .000000 + 21 MN 1 Z .000000 -2.900602 .441391 .000000 .000000 + 22 MN 1 X -.252129 .000000 .000000 .000000 .000000 + 23 MN 1 Y .252042 .000000 .000000 .000000 .000000 + 24 MN 1 Z .000000 -.129262 .338571 .000000 .000000 + 25 MN 1 XX .000000 .018791 .022306 .000000 .000000 + 26 MN 1 YY .000000 .018791 .022306 .000000 .000000 + 27 MN 1 ZZ .000000 -.033056 -.031457 .000000 .000000 + 28 MN 1 XY .000000 .000000 .000000 .000000 .000000 + 29 MN 1 XZ .034337 .000000 .000000 .000000 .000000 + 30 MN 1 YZ -.034325 .000000 .000000 .000000 .000000 + 31 MN 1 XX .000000 .285086 .478827 .000000 .000000 + 32 MN 1 YY .000000 .285086 .478827 .000000 .000000 + 33 MN 1 ZZ .000000 .396335 -.306729 .000000 .000000 + 34 MN 1 XY .000000 .000000 .000000 .000000 .000000 + 35 MN 1 XZ -.121442 .000000 .000000 .000000 .000000 + 36 MN 1 YZ .121400 .000000 .000000 .000000 .000000 + 37 MN 1 XX .000000 -.540139 .524527 .000000 .000000 + 38 MN 1 YY .000000 -.540139 .524527 .000000 .000000 + 39 MN 1 ZZ .000000 -1.431499 .904314 .000000 .000000 + 40 MN 1 XY .000000 .000000 .000000 .000000 .000000 + 41 MN 1 XZ .076750 .000000 .000000 .000000 .000000 + 42 MN 1 YZ -.076724 .000000 .000000 .000000 .000000 + 43 MN XXX -.457572 .000000 .000000 .000000 -.790569 + 44 MN YYY .457415 .000000 .000000 -.790569 .000000 + 45 MN ZZZ .000000 .474881 .369074 .000000 .000000 + 46 MN XXY .204562 .000000 .000000 1.060660 .000000 + 47 MN XXZ .000000 .191966 -.131385 .000000 .000000 + 48 MN YYX -.204632 .000000 .000000 .000000 1.060660 + 49 MN YYZ .000000 .191966 -.131385 .000000 .000000 + 50 MN ZZX -.175785 .000000 .000000 .000000 .000000 + 51 MN ZZY .175725 .000000 .000000 .000000 .000000 + 52 MN XYZ .000000 .000000 .000000 .000000 .000000 + 53 O 2 S .000000 2.091938 -3.587446 .000000 .000000 + 54 O 2 S .000000 -2.842805 4.077503 .000000 .000000 + 55 O 2 S .000000 4.484856 -2.056705 .000000 .000000 + 56 O 2 X -.003294 .000000 .000000 .000000 .000000 + 57 O 2 Y .003293 .000000 .000000 .000000 .000000 + 58 O 2 Z .000000 .249338 .128221 .000000 .000000 + 59 O 2 X .085872 .000000 .000000 .000000 .000000 + 60 O 2 Y -.085842 .000000 .000000 .000000 .000000 + 61 O 2 Z .000000 -.223329 -.896845 .000000 .000000 + 62 O 2 X -.107965 .000000 .000000 .000000 .000000 + 63 O 2 Y .107928 .000000 .000000 .000000 .000000 + 64 O 2 Z .000000 -1.179316 .638862 .000000 .000000 + 65 O 2 XX .000000 -.475210 .140193 .000000 .000000 + 66 O 2 YY .000000 -.475210 .140193 .000000 .000000 + 67 O 2 ZZ .000000 .293387 .934022 .000000 .000000 + 68 O 2 XY .000000 .000000 .000000 .000000 .000000 + 69 O 2 XZ -.296608 .000000 .000000 .000000 .000000 + 70 O 2 YZ .296507 .000000 .000000 .000000 .000000 + + 56 57 58 59 60 + 4.5805 4.5805 4.6265 4.6265 4.8593 + A A A A A + 1 MN 1 S .000000 .000000 .000000 .000000 -.259826 + 2 MN 1 S .000000 .000000 .000000 .000000 -.664496 + 3 MN 1 S .000000 .000000 .000000 .000000 2.297734 + 4 MN 1 S .000000 .000000 .000000 .000000 -1.723397 + 5 MN 1 S .000000 .000000 .000000 .000000 -.785877 + 6 MN 1 S .000000 .000000 .000000 .000000 -.244903 + 7 MN 1 X .000000 .000000 -.002766 .002764 .000000 + 8 MN 1 Y .000000 .000000 -.002764 -.002766 .000000 + 9 MN 1 Z .000000 .000000 .000000 .000000 -.008479 + 10 MN 1 X .000000 .000000 .004379 -.004376 .000000 + 11 MN 1 Y .000000 .000000 .004376 .004379 .000000 + 12 MN 1 Z .000000 .000000 .000000 .000000 -.008200 + 13 MN 1 X .000000 .000000 -.013011 .013001 .000000 + 14 MN 1 Y .000000 .000000 -.013001 -.013011 .000000 + 15 MN 1 Z .000000 .000000 .000000 .000000 -.238656 + 16 MN 1 X .000000 .000000 .029698 -.029676 .000000 + 17 MN 1 Y .000000 .000000 .029676 .029698 .000000 + 18 MN 1 Z .000000 .000000 .000000 .000000 .721170 + 19 MN 1 X .000000 .000000 .001400 -.001399 .000000 + 20 MN 1 Y .000000 .000000 .001399 .001400 .000000 + 21 MN 1 Z .000000 .000000 .000000 .000000 .079506 + 22 MN 1 X .000000 .000000 -.017155 .017142 .000000 + 23 MN 1 Y .000000 .000000 -.017142 -.017155 .000000 + 24 MN 1 Z .000000 .000000 .000000 .000000 .030815 + 25 MN 1 XX -.001686 .000000 .000000 .000000 -.010865 + 26 MN 1 YY .001686 .000000 .000000 .000000 -.010865 + 27 MN 1 ZZ .000000 .000000 .000000 .000000 -.039940 + 28 MN 1 XY .000000 .001947 .000000 .000000 .000000 + 29 MN 1 XZ .000000 .000000 -.006189 .006184 .000000 + 30 MN 1 YZ .000000 .000000 -.006184 -.006189 .000000 + 31 MN 1 XX -.004469 .000000 .000000 .000000 .672719 + 32 MN 1 YY .004469 .000000 .000000 .000000 .672719 + 33 MN 1 ZZ .000000 .000000 .000000 .000000 1.319830 + 34 MN 1 XY .000000 .005160 .000000 .000000 .000000 + 35 MN 1 XZ .000000 .000000 .044567 -.044534 .000000 + 36 MN 1 YZ .000000 .000000 .044534 .044567 .000000 + 37 MN 1 XX .000602 .000000 .000000 .000000 .146164 + 38 MN 1 YY -.000602 .000000 .000000 .000000 .146164 + 39 MN 1 ZZ .000000 .000000 .000000 .000000 .183721 + 40 MN 1 XY .000000 -.000696 .000000 .000000 .000000 + 41 MN 1 XZ .000000 .000000 -.011504 .011496 .000000 + 42 MN 1 YZ .000000 .000000 -.011496 -.011504 .000000 + 43 MN XXX .000000 .000000 -.432960 .432634 .000000 + 44 MN YYY .000000 .000000 -.432634 -.432960 .000000 + 45 MN ZZZ .000000 .000000 .000000 .000000 .998520 + 46 MN XXY .000000 .000000 -.193480 -.193626 .000000 + 47 MN XXZ -.865960 .000000 .000000 .000000 -.614195 + 48 MN YYX .000000 .000000 -.193626 .193480 .000000 + 49 MN YYZ .865960 .000000 .000000 .000000 -.614195 + 50 MN ZZX .000000 .000000 .772550 -.771968 .000000 + 51 MN ZZY .000000 .000000 .771968 .772550 .000000 + 52 MN XYZ .000000 .999925 .000000 .000000 .000000 + 53 O 2 S .000000 .000000 .000000 .000000 .986610 + 54 O 2 S .000000 .000000 .000000 .000000 -1.048764 + 55 O 2 S .000000 .000000 .000000 .000000 -.216112 + 56 O 2 X .000000 .000000 .030126 -.030103 .000000 + 57 O 2 Y .000000 .000000 .030103 .030126 .000000 + 58 O 2 Z .000000 .000000 .000000 .000000 .003860 + 59 O 2 X .000000 .000000 -.093067 .092997 .000000 + 60 O 2 Y .000000 .000000 -.092997 -.093067 .000000 + 61 O 2 Z .000000 .000000 .000000 .000000 .679271 + 62 O 2 X .000000 .000000 .045666 -.045632 .000000 + 63 O 2 Y .000000 .000000 .045632 .045666 .000000 + 64 O 2 Z .000000 .000000 .000000 .000000 -.137537 + 65 O 2 XX .012374 .000000 .000000 .000000 -.061004 + 66 O 2 YY -.012374 .000000 .000000 .000000 -.061004 + 67 O 2 ZZ .000000 .000000 .000000 .000000 -.529195 + 68 O 2 XY .000000 -.014288 .000000 .000000 .000000 + 69 O 2 XZ .000000 .000000 .076539 -.076481 .000000 + 70 O 2 YZ .000000 .000000 .076481 .076539 .000000 + + 61 62 63 64 65 + 5.2610 6.5249 7.9600 7.9600 8.1460 + A A A A A + 1 MN 1 S -1.377545 -.038597 .000000 .000000 .030422 + 2 MN 1 S -3.785347 -.149826 .000000 .000000 .143507 + 3 MN 1 S 13.411251 .666644 .000000 .000000 -.570800 + 4 MN 1 S -10.675891 -.741426 .000000 .000000 .445888 + 5 MN 1 S -5.296578 2.450702 .000000 .000000 1.803232 + 6 MN 1 S -3.121803 -1.891218 .000000 .000000 -.774463 + 7 MN 1 X .000000 .000000 -.236530 -.235724 .000000 + 8 MN 1 Y .000000 .000000 .235724 -.236530 .000000 + 9 MN 1 Z -.009978 .061755 .000000 .000000 -.255597 + 10 MN 1 X .000000 .000000 .808875 .806119 .000000 + 11 MN 1 Y .000000 .000000 -.806119 .808875 .000000 + 12 MN 1 Z .086562 -.284081 .000000 .000000 .967757 + 13 MN 1 X .000000 .000000 2.927702 2.917729 .000000 + 14 MN 1 Y .000000 .000000 -2.917729 2.927702 .000000 + 15 MN 1 Z .060974 .018630 .000000 .000000 4.455773 + 16 MN 1 X .000000 .000000 -1.118884 -1.115072 .000000 + 17 MN 1 Y .000000 .000000 1.115072 -1.118884 .000000 + 18 MN 1 Z -.155121 -1.180224 .000000 .000000 -2.071084 + 19 MN 1 X .000000 .000000 .541678 .539833 .000000 + 20 MN 1 Y .000000 .000000 -.539833 .541678 .000000 + 21 MN 1 Z -.146506 1.600313 .000000 .000000 1.714876 + 22 MN 1 X .000000 .000000 -.143903 -.143413 .000000 + 23 MN 1 Y .000000 .000000 .143413 -.143903 .000000 + 24 MN 1 Z -.005958 .569543 .000000 .000000 -.078079 + 25 MN 1 XX -.118023 .002099 .000000 .000000 .000472 + 26 MN 1 YY -.118023 .002099 .000000 .000000 .000472 + 27 MN 1 ZZ -.110915 -.022102 .000000 .000000 .010297 + 28 MN 1 XY .000000 .000000 .000000 .000000 .000000 + 29 MN 1 XZ .000000 .000000 .001490 .001485 .000000 + 30 MN 1 YZ .000000 .000000 -.001485 .001490 .000000 + 31 MN 1 XX 4.534157 .386581 .000000 .000000 -.232296 + 32 MN 1 YY 4.534157 .386581 .000000 .000000 -.232296 + 33 MN 1 ZZ 4.344653 -.305501 .000000 .000000 -.342467 + 34 MN 1 XY .000000 .000000 .000000 .000000 .000000 + 35 MN 1 XZ .000000 .000000 -.009326 -.009294 .000000 + 36 MN 1 YZ .000000 .000000 .009294 -.009326 .000000 + 37 MN 1 XX 1.464843 .816734 .000000 .000000 .249671 + 38 MN 1 YY 1.464843 .816734 .000000 .000000 .249671 + 39 MN 1 ZZ 1.439872 1.577621 .000000 .000000 .660372 + 40 MN 1 XY .000000 .000000 .000000 .000000 .000000 + 41 MN 1 XZ .000000 .000000 .026548 .026457 .000000 + 42 MN 1 YZ .000000 .000000 -.026457 .026548 .000000 + 43 MN XXX .000000 .000000 -1.947309 -1.940675 .000000 + 44 MN YYY .000000 .000000 1.940675 -1.947309 .000000 + 45 MN ZZZ -.230688 .168058 .000000 .000000 -2.802942 + 46 MN XXY .000000 .000000 .867896 -.870863 .000000 + 47 MN XXZ .076818 .176871 .000000 .000000 -1.250253 + 48 MN YYX .000000 .000000 -.870863 -.867896 .000000 + 49 MN YYZ .076818 .176871 .000000 .000000 -1.250253 + 50 MN ZZX .000000 .000000 -.873465 -.870490 .000000 + 51 MN ZZY .000000 .000000 .870490 -.873465 .000000 + 52 MN XYZ .000000 .000000 .000000 .000000 .000000 + 53 O 2 S -.414678 -1.296818 .000000 .000000 -.132812 + 54 O 2 S .213754 6.677758 .000000 .000000 1.231847 + 55 O 2 S .315980 -5.119698 .000000 .000000 -2.030641 + 56 O 2 X .000000 .000000 .006269 .006248 .000000 + 57 O 2 Y .000000 .000000 -.006248 .006269 .000000 + 58 O 2 Z -.021892 .007880 .000000 .000000 -.040104 + 59 O 2 X .000000 .000000 .014228 .014179 .000000 + 60 O 2 Y .000000 .000000 -.014179 .014228 .000000 + 61 O 2 Z -.140295 -.715202 .000000 .000000 -.108223 + 62 O 2 X .000000 .000000 -.050287 -.050116 .000000 + 63 O 2 Y .000000 .000000 .050116 -.050287 .000000 + 64 O 2 Z -.096263 1.286452 .000000 .000000 .597037 + 65 O 2 XX .038041 -1.532008 .000000 .000000 -.189644 + 66 O 2 YY .038041 -1.532008 .000000 .000000 -.189644 + 67 O 2 ZZ .302579 -1.173265 .000000 .000000 -.318737 + 68 O 2 XY .000000 .000000 .000000 .000000 .000000 + 69 O 2 XZ .000000 .000000 -.008809 -.008779 .000000 + 70 O 2 YZ .000000 .000000 .008779 -.008809 .000000 + + 66 67 68 69 70 + 16.7053 51.4953 51.4953 52.7141 54.1657 + A A A A A + 1 MN 1 S -3.872545 .000000 .000000 .474647 4.033437 + 2 MN 1 S .619942 .000000 .000000 .168055 1.775529 + 3 MN 1 S 8.543480 .000000 .000000 .582417 1.802511 + 4 MN 1 S -4.001433 .000000 .000000 1.094091 10.508242 + 5 MN 1 S -1.933447 .000000 .000000 -1.120621 2.893478 + 6 MN 1 S -1.193991 .000000 .000000 .924270 1.405059 + 7 MN 1 X .000000 26.698585 -26.613009 .000000 .000000 + 8 MN 1 Y .000000 26.613009 26.698585 -.000001 .000000 + 9 MN 1 Z -.061576 .000000 .000001 37.889813 -4.988137 + 10 MN 1 X .000000 -26.499326 26.414389 .000000 .000000 + 11 MN 1 Y .000000 -26.414389 -26.499326 .000001 .000000 + 12 MN 1 Z .061473 .000000 -.000001 -37.566431 4.942717 + 13 MN 1 X .000000 -5.110574 5.094194 .000000 .000000 + 14 MN 1 Y .000000 -5.094194 -5.110574 .000000 .000000 + 15 MN 1 Z -.030759 .000000 .000000 -7.586378 1.029208 + 16 MN 1 X .000000 1.324339 -1.320094 .000000 .000000 + 17 MN 1 Y .000000 1.320094 1.324339 .000000 .000000 + 18 MN 1 Z .009935 .000000 .000000 2.275762 -.319935 + 19 MN 1 X .000000 -.612658 .610694 .000000 .000000 + 20 MN 1 Y .000000 -.610694 -.612658 .000000 .000000 + 21 MN 1 Z -.050579 .000000 .000000 -1.662586 .271296 + 22 MN 1 X .000000 .162805 -.162283 .000000 .000000 + 23 MN 1 Y .000000 .162283 .162805 .000000 .000000 + 24 MN 1 Z .005857 .000000 .000000 .165596 -.029646 + 25 MN 1 XX -.931674 .000000 .000000 -.869818 -6.783943 + 26 MN 1 YY -.931674 .000000 .000000 -.869818 -6.783943 + 27 MN 1 ZZ -.933055 .000000 .000000 -.882131 -6.781670 + 28 MN 1 XY .000000 .000000 .000000 .000000 .000000 + 29 MN 1 XZ .000000 -.002254 .002246 .000000 .000000 + 30 MN 1 YZ .000000 -.002246 -.002254 .000000 .000000 + 31 MN 1 XX 1.675595 .000000 .000000 -.242909 -3.078930 + 32 MN 1 YY 1.675595 .000000 .000000 -.242909 -3.078930 + 33 MN 1 ZZ 1.658196 .000000 .000000 -.173340 -3.079065 + 34 MN 1 XY .000000 .000000 .000000 .000000 .000000 + 35 MN 1 XZ .000000 .010067 -.010035 .000000 .000000 + 36 MN 1 YZ .000000 .010035 .010067 .000000 .000000 + 37 MN 1 XX .557548 .000000 .000000 -.316503 -.682017 + 38 MN 1 YY .557548 .000000 .000000 -.316503 -.682017 + 39 MN 1 ZZ .551818 .000000 .000000 -.661750 -.632615 + 40 MN 1 XY .000000 .000000 .000000 .000000 .000000 + 41 MN 1 XZ .000000 -.030063 .029967 .000000 .000000 + 42 MN 1 YZ .000000 -.029967 -.030063 .000000 .000000 + 43 MN XXX .000000 2.620001 -2.611603 .000000 .000000 + 44 MN YYY .000000 2.611603 2.620001 .000000 .000000 + 45 MN ZZZ .012842 .000000 .000000 3.825652 -.514988 + 46 MN XXY .000000 1.167945 1.171700 .000000 .000000 + 47 MN XXZ .009319 .000000 .000000 1.709410 -.231912 + 48 MN YYX .000000 1.171700 -1.167945 .000000 .000000 + 49 MN YYZ .009319 .000000 .000000 1.709410 -.231912 + 50 MN ZZX .000000 1.172323 -1.168565 .000000 .000000 + 51 MN ZZY .000000 1.168565 1.172323 .000000 .000000 + 52 MN XYZ .000000 .000000 .000000 .000000 .000000 + 53 O 2 S -.052067 .000000 .000000 .048068 .026551 + 54 O 2 S .031301 .000000 .000000 -.576443 .062488 + 55 O 2 S .072753 .000000 .000000 1.519457 -.273047 + 56 O 2 X .000000 -.005495 .005477 .000000 .000000 + 57 O 2 Y .000000 -.005477 -.005495 .000000 .000000 + 58 O 2 Z -.008143 .000000 .000000 .023042 .015992 + 59 O 2 X .000000 -.016572 .016519 .000000 .000000 + 60 O 2 Y .000000 -.016519 -.016572 .000000 .000000 + 61 O 2 Z .002977 .000000 .000000 .088189 -.037293 + 62 O 2 X .000000 .056981 -.056798 .000000 .000000 + 63 O 2 Y .000000 .056798 .056981 .000000 .000000 + 64 O 2 Z -.042404 .000000 .000000 -.486491 .115883 + 65 O 2 XX -.007303 .000000 .000000 .032568 .003910 + 66 O 2 YY -.007303 .000000 .000000 .032568 .003910 + 67 O 2 ZZ .041497 .000000 .000000 .149332 -.050287 + 68 O 2 XY .000000 .000000 .000000 .000000 .000000 + 69 O 2 XZ .000000 .007387 -.007363 .000000 .000000 + 70 O 2 YZ .000000 .007363 .007387 .000000 .000000 + ...... END OF ROHF CALCULATION ...... + STEP CPU TIME = 74.72 TOTAL CPU TIME = 75.1 ( 1.3 MIN) + TOTAL WALL CLOCK TIME= 76.8 SECONDS, CPU UTILIZATION IS 97.73% + + ----------------- + ENERGY COMPONENTS + ----------------- + + WAVEFUNCTION NORMALIZATION = 1.0000000000 + + ONE ELECTRON ENERGY = -262.5948082346 + TWO ELECTRON ENERGY = 116.1150509818 + NUCLEAR REPULSION ENERGY = 27.4478224518 + ------------------ + TOTAL ENERGY = -119.0319348009 + + ELECTRON-ELECTRON POTENTIAL ENERGY = 116.1150509818 + NUCLEUS-ELECTRON POTENTIAL ENERGY = -330.7889032345 + NUCLEUS-NUCLEUS POTENTIAL ENERGY = 27.4478224518 + ------------------ + TOTAL POTENTIAL ENERGY = -187.2260298009 + TOTAL KINETIC ENERGY = 68.1940949999 + VIRIAL RATIO (V/T) = 2.7454874180 + + --------------------------------------- + MULLIKEN AND LOWDIN POPULATION ANALYSES + --------------------------------------- + + MULLIKEN ATOMIC POPULATION IN EACH MOLECULAR ORBITAL + + 1 2 3 4 5 + + 2.000000 2.000000 2.000000 2.000000 2.000000 + + 1 1.998031 1.967340 1.999017 1.999017 .048347 + 2 .001969 .032660 .000983 .000983 1.951653 + + 6 7 8 9 10 + + 2.000000 2.000000 2.000000 1.000000 1.000000 + + 1 .244632 .244633 .575308 .999971 .999971 + 2 1.755368 1.755367 1.424692 .000029 .000029 + + 11 12 13 + + 1.000000 1.000000 1.000000 + + 1 .975291 .966047 .966047 + 2 .024709 .033953 .033953 + + ATOMIC SPIN POPULATION (ALPHA MINUS BETA) + ATOM MULL.POP. LOW.POP. + 1 MN 4.907327 4.899604 + 2 O .092673 .100396 + + ----- POPULATIONS IN EACH AO ----- + MULLIKEN LOWDIN + 1 MN 1 S 1.32082 .61525 + 2 MN 1 S -.02295 .28547 + 3 MN 1 S .58346 .38160 + 4 MN 1 S .22149 .17315 + 5 MN 1 S .35840 .13939 + 6 MN 1 S .02436 .06534 + 7 MN 1 X 1.51869 .59192 + 8 MN 1 Y 1.51869 .59192 + 9 MN 1 Z 1.52518 .59457 + 10 MN 1 X -.04140 .53512 + 11 MN 1 Y -.04140 .53512 + 12 MN 1 Z -.04112 .53840 + 13 MN 1 X .48548 .34100 + 14 MN 1 Y .48548 .34100 + 15 MN 1 Z .47812 .33641 + 16 MN 1 X .11340 .12046 + 17 MN 1 Y .11340 .12046 + 18 MN 1 Z .12557 .12225 + 19 MN 1 X .06236 .07274 + 20 MN 1 Y .06236 .07274 + 21 MN 1 Z -.04138 .06277 + 22 MN 1 X .02230 .03219 + 23 MN 1 Y .02230 .03219 + 24 MN 1 Z -.00047 .03366 + 25 MN 1 XX .58493 .75306 + 26 MN 1 YY .58493 .75306 + 27 MN 1 ZZ .56369 .72994 + 28 MN 1 XY .87434 .84150 + 29 MN 1 XZ .90014 .86577 + 30 MN 1 YZ .90014 .86577 + 31 MN 1 XX .08650 .17183 + 32 MN 1 YY .08650 .17183 + 33 MN 1 ZZ .14001 .25897 + 34 MN 1 XY .12090 .15112 + 35 MN 1 XZ .15865 .19587 + 36 MN 1 YZ .15865 .19587 + 37 MN 1 XX .02287 .02985 + 38 MN 1 YY .02287 .02985 + 39 MN 1 ZZ -.02797 .03692 + 40 MN 1 XY .00471 .00731 + 41 MN 1 XZ .02238 .04017 + 42 MN 1 YZ .02238 .04017 + 43 MN XXX -.01919 .22559 + 44 MN YYY -.01919 .22559 + 45 MN ZZZ -.01990 .22312 + 46 MN XXY -.00640 .10706 + 47 MN XXZ -.00581 .10743 + 48 MN YYX -.00640 .10706 + 49 MN YYZ -.00581 .10743 + 50 MN ZZX -.00673 .10647 + 51 MN ZZY -.00673 .10647 + 52 MN XYZ .00002 .00002 + 53 O 2 S 1.86273 .78642 + 54 O 2 S -.02328 .37287 + 55 O 2 S .16297 .11245 + 56 O 2 X 1.60670 1.26761 + 57 O 2 Y 1.60670 1.26761 + 58 O 2 Z 1.34394 1.03803 + 59 O 2 X .11809 .38960 + 60 O 2 Y .11809 .38960 + 61 O 2 Z .02911 .31329 + 62 O 2 X .06331 .10589 + 63 O 2 Y .06331 .10589 + 64 O 2 Z .03335 .12715 + 65 O 2 XX .00378 .17256 + 66 O 2 YY .00378 .17256 + 67 O 2 ZZ .01933 .18308 + 68 O 2 XY .00003 .00005 + 69 O 2 XZ .00220 .00254 + 70 O 2 YZ .00220 .00254 + + ----- MULLIKEN ATOMIC OVERLAP POPULATIONS ----- + (OFF-DIAGONAL ELEMENTS NEED TO BE MULTIPLIED BY 2) + + 1 2 + + 1 13.6983402 + 2 .2853106 6.7310386 + + TOTAL MULLIKEN AND LOWDIN ATOMIC POPULATIONS + ATOM MULL.POP. CHARGE LOW.POP. CHARGE + 1 MN 13.983651 1.016349 14.190254 .809746 + 2 O 7.016349 -1.016349 6.809746 -.809746 + + ------------------------------- + BOND ORDER AND VALENCE ANALYSIS BOND ORDER THRESHOLD= .050 + ------------------------------- + + BOND BOND BOND + ATOM PAIR DIST ORDER ATOM PAIR DIST ORDER ATOM PAIR DIST ORDER + 1 2 1.735 1.525 + + TOTAL BONDED FREE + ATOM VALENCE VALENCE VALENCE + 1 MN 6.343 1.525 4.818 + 2 O 1.528 1.525 .003 + + ----------------------------------------- + ATOMIC SPIN DENSITY AT THE NUCLEUS (A.U.) + ----------------------------------------- + SPIN DENS ALPHA DENS BETA DENS + 1 MN 15.0 .0041091 .15910 .15499 + 2 O 6.0 .0000921 .03957 .03948 + + --------------------- + ELECTROSTATIC MOMENTS + --------------------- + + POINT 1 X Y Z (BOHR) CHARGE + .000000 .000000 .611687 .00 (A.U.) + DX DY DZ /D/ (DEBYE) + .000000 .000000 -9.323846 9.323846 + ...... END OF PROPERTY EVALUATION ...... + STEP CPU TIME = .06 TOTAL CPU TIME = 75.1 ( 1.3 MIN) + TOTAL WALL CLOCK TIME= 76.9 SECONDS, CPU UTILIZATION IS 97.74% + 100000 WORDS OF DYNAMIC MEMORY USED +ddikick: all processes have ended gracefully. +unset echo +----- accounting info ----- +Wed May 22 11:36:00 EDT 2002 +Files used on the master node aldebaran.physics.ncsu.edu were: +-rw-rw-r-- 1 lkwagner lkwagner 83185 May 22 11:34 /tmp/lkwagner/mno1i.F05 +-rw-rw-r-- 1 lkwagner lkwagner 1100168 May 22 11:36 /tmp/lkwagner/mno1i.F10 +-rw-rw-r-- 1 lkwagner lkwagner 82410 May 22 11:36 /tmp/lkwagner/mno1i.pun +0.120u 0.080s 1:17.21 0.2% 0+0k 0+0io 6133pf+0w + EXECUTION OF GAMESS TERMINATED NORMALLY Wed May 22 11:36:00 2002 + +DATA SERVER STATS: TOTAL DISTRIBUTED MEMORY USED (MEMDDI)= 0 MWORDS. +FIRST DATA SERVER'S MAXIMUM MEMORY= 0 WORDS, CPU= .0 SECONDS. + diff --git a/examples/mno/mno.pun b/examples/mno/mno.pun new file mode 100644 index 00000000..d36342e5 --- /dev/null +++ b/examples/mno/mno.pun @@ -0,0 +1,1072 @@ + $DATA + +C1 0 +MN 25.0 .0000000000 .0000000000 -.0675725099 + S 7 + 1 37.2671550000 .03903780 + 2 23.2956640000 -.25834960 + 3 14.0613650000 .76279390 + 4 9.9303875000 -.24825741 + 5 7.9979882000 -.61830252 + 6 1.9205208000 .51014656 + 7 1.0861154000 .38060132 + S 1 + 1 1.7659830000 1.00000000 + S 1 + 1 .7137740000 1.00000000 + S 1 + 1 .2500000000 1.00000000 + S 1 + 1 .1000000000 1.00000000 + S 1 + 1 .0400000000 1.00000000 + P 7 + 1 50.4536130000 .00287317 + 2 20.9930990000 -.32531628 + 3 18.1589220000 .53472191 + 4 12.3287130000 -.24152134 + 5 4.5823927000 -.10436746 + 6 3.3082843000 .41230637 + 7 1.3713011000 .51765233 + P 1 + 1 1.7659830000 1.00000000 + P 1 + 1 .7137740000 1.00000000 + P 1 + 1 .2500000000 1.00000000 + P 1 + 1 .1000000000 1.00000000 + P 1 + 1 .0400000000 1.00000000 + D 5 + 1 27.8515090000 -.00841322 + 2 16.1521400000 .08540396 + 3 5.6169748000 .21698587 + 4 2.1590731000 .39649862 + 5 .7704969000 .43369588 + D 1 + 1 .2700000000 1.00000000 + D 1 + 1 .0700000000 1.00000000 + F 1 + 1 1.8000000000 1.00000000 + +O 8.0 .0000000000 .0000000000 1.6675725099 + S 7 + 1 19.4478130000 .00238370 + 2 12.4209720000 .01495480 + 3 6.1715364000 -.17688230 + 4 4.0532336000 .02778654 + 5 1.1199164000 .39952806 + 6 .4325723400 .56537366 + 7 .1598000700 .15779860 + S 1 + 1 .2950000000 1.00000000 + S 1 + 1 .0978000000 1.00000000 + P 7 + 1 62.8410070000 -.00013814 + 2 24.3213840000 .00761698 + 3 9.3865118000 .07010144 + 4 3.2627614000 .19551891 + 5 1.2486125000 .35298672 + 6 .4673562000 .41737372 + 7 .1602393800 .21061262 + P 1 + 1 .2400000000 1.00000000 + P 1 + 1 .0800000000 1.00000000 + D 1 + 1 .9800000000 1.00000000 + + $END +--- ROHF ORBITALS --- GENERATED AT Wed May 22 11:36:00 2002 + +E(ROHF)= -119.0319348009, E(NUC)= 27.4478224518, 26 ITERS + $VEC + 1 1 6.57651085E-01-1.74891947E-02 3.06336182E-01 8.92303512E-02 1.18201742E-02 + 1 2 5.55677746E-03-2.90570691E-11-6.35412314E-10-2.71715337E-02 0.00000000E+00 + 1 3 6.87753916E-10 2.43891216E-03-5.03592834E-11 6.63117827E-11-1.28167060E-02 + 1 4-1.18470909E-11 2.19941975E-11-4.48299781E-03 0.00000000E+00-5.14759975E-11 + 1 5 1.02648068E-03 0.00000000E+00 3.84930986E-11-5.90151375E-04 7.24469098E-04 + 1 6 7.24469082E-04-2.11265572E-03 1.55298536E-09 0.00000000E+00 4.28820360E-11 + 1 7-1.50133465E-02-1.50133465E-02-1.67717722E-02 1.86277507E-10 0.00000000E+00 + 1 8-1.48465106E-11-2.43417055E-03-2.43417055E-03-2.80830337E-03-2.93615851E-10 + 1 9 0.00000000E+00 0.00000000E+00-1.05923702E-11-7.46002048E-11-5.96804933E-04 + 1 10-3.45807789E-11-2.30347820E-04 0.00000000E+00-2.30347821E-04 0.00000000E+00 + 1 11-3.97512461E-11 1.60738183E-10 6.56020989E-03-2.56318786E-04 1.59506678E-04 + 1 12-2.78728281E-11-2.67138895E-11-5.72696482E-03 0.00000000E+00 1.48197788E-11 + 1 13-3.80389326E-04 0.00000000E+00-1.02306978E-11 5.21583982E-04-1.27854379E-04 + 1 14-1.27854380E-04 1.11244250E-03-6.65778288E-11 0.00000000E+00 0.00000000E+00 + 2 1 2.36456471E-02 3.33780931E-03 5.94626976E-03-5.64673544E-03-2.36630521E-02 + 2 2 1.61600181E-02 3.52549067E-09 6.19830251E-09 7.66764082E-01-1.18937767E-10 + 2 3-6.93262620E-10-2.23844947E-02 1.23713064E-09 1.86680840E-09 2.64880987E-01 + 2 4 3.42133009E-10 5.67480495E-10 8.23230983E-02-7.66812401E-11-1.74330267E-10 + 2 5-3.70392878E-02 4.15189793E-11 4.64235291E-11 2.85177522E-03 8.12806527E-03 + 2 6 8.12806529E-03-1.60734243E-02 2.08767611E-09-9.44189001E-11-7.74795321E-11 + 2 7 3.04658869E-03 3.04658869E-03 2.08229961E-03-2.28533421E-11 0.00000000E+00 + 2 8 3.44029560E-11-3.97479773E-03-3.97479772E-03-1.33500633E-02-1.52478340E-09 + 2 9 0.00000000E+00 1.94498853E-11-4.87952963E-11-1.65015939E-11-1.14261124E-02 + 2 10 0.00000000E+00-4.94762731E-03-2.55141002E-11-4.94762732E-03-2.92843583E-11 + 2 11 0.00000000E+00 3.64773756E-10 6.17888269E-02-1.50651211E-02 3.39112211E-02 + 2 12-1.36676992E-10-5.92766955E-11-3.70717111E-02 1.51231231E-11 0.00000000E+00 + 2 13 4.52323640E-03 0.00000000E+00 0.00000000E+00-1.01153846E-02-5.80431163E-04 + 2 14-5.80431161E-04 6.94456655E-03-5.97909774E-11 0.00000000E+00-1.13286160E-11 + 3 1-1.08330282E-10 0.00000000E+00 1.25343609E-10-1.57786522E-10-3.42147178E-10 + 3 2-2.73514206E-10 5.93293994E-01 4.95319542E-01-5.90502163E-09-1.67375617E-02 + 3 3-1.39735810E-02-1.54933207E-10 2.07930029E-01 1.73593206E-01-2.25232068E-09 + 3 4 5.77985851E-02 4.82539333E-02-6.10129933E-10-1.40279591E-02-1.17114327E-02 + 3 5 1.44763081E-11 4.61424977E-03 3.85226930E-03-1.42256917E-10-1.36949890E-10 + 3 6-4.07560295E-11 1.92820919E-10-7.14002946E-11-1.22050063E-02-1.01895144E-02 + 3 7 8.39265233E-11 7.61895413E-11 2.04619815E-10-4.87077729E-11-3.82977372E-03 + 3 8-3.19733841E-03 1.34353157E-10 1.27159036E-10 4.25433690E-11 0.00000000E+00 + 3 9 9.35740618E-05 7.81214917E-05-8.78090379E-03-7.33085666E-03 1.20828098E-10 + 3 10-3.27845783E-03 6.75936156E-11-3.92693879E-03 8.01792102E-11-4.15713367E-03 + 3 11-3.47063951E-03 1.56200355E-11-4.80868030E-10-7.43989832E-11 3.11473940E-10 + 3 12 6.76749993E-03 5.64993924E-03 4.02635082E-10 1.24601854E-04 1.04025420E-04 + 3 13-7.26790212E-11 7.85773778E-04 6.56013832E-04-1.84826700E-11 1.47398257E-11 + 3 14 1.49313025E-11-3.86801405E-11 0.00000000E+00-7.70025720E-04-6.42866382E-04 + 4 1-9.55243224E-11-2.41705794E-11 1.02154546E-10-1.59942727E-11-1.00771254E-09 + 4 2 3.02008429E-10-4.95319540E-01 5.93293992E-01-1.65437180E-09 1.39735776E-02 + 4 3-1.67375588E-02-3.23289900E-10-1.73593206E-01 2.07930028E-01-8.41375491E-10 + 4 4-4.82539318E-02 5.77985838E-02-1.27960487E-10 1.17114282E-02-1.40279553E-02 + 4 5-4.79706783E-10-3.85226755E-03 4.61424830E-03-1.32712408E-10 5.65097497E-11 + 4 6-8.96359563E-11 2.92516194E-11-2.55343002E-11 1.01895196E-02-1.22050107E-02 + 4 7 1.22765402E-10 4.31059486E-11 6.72565741E-11 0.00000000E+00 3.19733941E-03 + 4 8-3.82977456E-03-6.98911608E-11-4.96781891E-11-3.09294998E-10 0.00000000E+00 + 4 9-7.81220604E-05 9.35745428E-05 7.33085687E-03-8.78090399E-03 7.32457176E-11 + 4 10-3.92694043E-03 3.64405282E-11 3.27845981E-03 6.52964206E-11 3.47063916E-03 + 4 11-4.15713338E-03-1.42659473E-11-1.64172589E-10-2.02399229E-10 9.99059353E-10 + 4 12-5.64993866E-03 6.76749946E-03 1.81448288E-10-1.04026275E-04 1.24602570E-04 + 4 13-1.03697528E-10-6.56014287E-04 7.85774158E-04-2.26067768E-10 0.00000000E+00 + 4 14 1.42860010E-11 0.00000000E+00 0.00000000E+00 6.42866644E-04-7.70025940E-04 + 5 1-4.94622347E-02-8.22577471E-03-5.60845085E-02 4.51602048E-02-1.40250989E-02 + 5 2 1.43743825E-02 2.63930731E-11 1.84415682E-09-1.13039710E-01-6.29900350E-11 + 5 3-1.81717359E-09-4.64868221E-03-5.95924359E-11-2.79492633E-10-4.17956173E-02 + 5 4 3.17734365E-11 5.73690408E-11 3.11945311E-02 4.22146460E-11 3.83140754E-11 + 5 5-2.14969729E-02 0.00000000E+00-3.31830419E-11-1.29965140E-02-3.07441212E-02 + 5 6-3.07441212E-02 5.90402846E-02-1.68534814E-09 8.95234865E-11 3.74104717E-11 + 5 7-1.23959023E-02-1.23959023E-02 2.96788725E-02-3.90524854E-09 0.00000000E+00 + 5 8 0.00000000E+00-4.10543430E-03-4.10543428E-03-2.73846447E-02-5.15578513E-09 + 5 9-1.05310117E-11-3.67622403E-11 2.34653812E-11 1.84027135E-10 6.48433737E-03 + 5 10 8.03032554E-11-1.20273152E-03 0.00000000E+00-1.20273152E-03 1.93025203E-11 + 5 11 9.62239516E-11-2.12101002E-10 9.19749250E-01-1.58752578E-02 1.03714947E-01 + 5 12-3.21462711E-10-2.65012096E-10-5.31185390E-02-5.34819484E-11-4.88540066E-11 + 5 13-5.71284615E-03 5.92334542E-11 7.56340539E-11-8.22976969E-03 2.03238686E-03 + 5 14 2.03238686E-03 1.39232986E-02 2.88217508E-09 6.31336497E-11 4.46158591E-11 + 6 1 5.45865182E-08 1.30267870E-08 7.21595389E-08-3.60951393E-08-1.51644032E-07 + 6 2-2.37126116E-09-4.24795697E-02-4.24114671E-02 3.96235890E-08-4.33884269E-03 + 6 3-4.33188673E-03 4.22658338E-09-2.71970363E-02-2.71534345E-02 1.24272227E-08 + 6 4 3.58087218E-02 3.57513138E-02-2.61006239E-08 6.04989387E-02 6.04019477E-02 + 6 5-8.94170149E-10 2.35189545E-02 2.34812492E-02 8.42995008E-09 4.59643005E-08 + 6 6 5.17814737E-08-9.41867105E-08 1.44339068E-10 8.85798340E-02 8.84378241E-02 + 6 7 1.27642043E-08 1.36550296E-08-4.79679042E-08-1.71105432E-11 5.62228711E-02 + 6 8 5.61327354E-02-1.40102346E-08-1.39992731E-08-6.64486832E-09-1.47187879E-10 + 6 9 1.86083802E-02 1.85785475E-02 1.50049634E-03 1.49809076E-03-2.83337667E-09 + 6 10 6.69966552E-04 1.08278773E-09 6.71042357E-04 1.04953609E-09 4.17579032E-03 + 6 11 4.16909576E-03 0.00000000E+00 8.15498098E-08 2.45837084E-08 4.85855946E-08 + 6 12 5.81667327E-01 5.80734807E-01 3.54401424E-07 4.85615729E-02 4.84837198E-02 + 6 13 7.40023836E-09 3.69105641E-02 3.68513897E-02 1.29846873E-08 2.44979823E-09 + 6 14 2.45827782E-09-1.14768892E-08-2.05448556E-11-1.50238768E-02-1.49997908E-02 + 7 1-1.36400139E-08-3.20968010E-09-1.82716167E-08 8.86888208E-09 3.67293804E-08 + 7 2 5.68741105E-09 4.24115019E-02-4.24796046E-02-9.64008946E-09 4.33189086E-03 + 7 3-4.33884683E-03-9.26104666E-10 2.71534551E-02-2.71970570E-02-2.94192063E-09 + 7 4-3.57513277E-02 3.58087357E-02 6.32165364E-09-6.04021181E-02 6.04991093E-02 + 7 5-6.21420996E-11-2.34813172E-02 2.35190225E-02-2.76365281E-09-1.16070273E-08 + 7 6-1.31147982E-08 2.37687180E-08-8.47333055E-10-8.84378122E-02 8.85798219E-02 + 7 7-3.30550772E-09-3.59531490E-09 1.18590707E-08-1.28883443E-10-5.61327647E-02 + 7 8 5.62229004E-02 2.52241903E-09 2.25650333E-09 6.87331734E-10 0.00000000E+00 + 7 9-1.85785932E-02 1.86084259E-02-1.49809252E-03 1.50049810E-03 6.72150673E-10 + 7 10 6.71043159E-04-2.70858488E-10-6.69967353E-04-2.69244102E-10-4.16909748E-03 + 7 11 4.17579205E-03 0.00000000E+00-2.02586842E-08-6.17860426E-09-1.20665892E-08 + 7 12-5.80734655E-01 5.81667175E-01-8.67690607E-08-4.84837517E-02 4.85616050E-02 + 7 13-1.76910601E-09-3.68513981E-02 3.69105725E-02-3.20149536E-09-5.86578042E-10 + 7 14-6.22393628E-10 2.82946638E-09 0.00000000E+00 1.49997961E-02-1.50238822E-02 + 8 1 1.18440689E-01 2.82870645E-02 1.56796119E-01-7.55378166E-02-3.33109635E-01 + 8 2-1.90709275E-02 2.50704245E-08 1.51290671E-08 8.19168203E-02 2.57631876E-09 + 8 3 1.43819394E-09 8.67761367E-03 1.60318625E-08 9.55939317E-09 2.53631976E-02 + 8 4-2.11702379E-08-1.26556893E-08-5.48831893E-02-3.59590481E-08-2.17676492E-08 + 8 5 1.13914160E-03-1.43422265E-08-8.53683883E-09 2.08107547E-02 1.04640314E-01 + 8 6 1.04640314E-01-2.01656369E-01 1.53095156E-08-5.29953652E-08-3.28863529E-08 + 8 7 2.80434703E-02 2.80434702E-02-1.03037109E-01 6.36988323E-09-3.34623340E-08 + 8 8-2.04225200E-08-2.86875487E-02-2.86875487E-02-1.32722384E-02 1.67913823E-08 + 8 9-1.11865556E-08-6.78779071E-09-8.95070475E-10-5.15828248E-10-5.84556436E-03 + 8 10-2.32438593E-10 2.28048598E-03-3.99345500E-10 2.28048598E-03-2.45234297E-09 + 8 11-1.47695593E-09 9.88096932E-11 1.74369406E-01 5.33098113E-02 1.05710050E-01 + 8 12-3.39325993E-07-2.03857030E-07 7.43452898E-01-2.88385149E-08-1.74047007E-08 + 8 13 1.57406182E-02-2.21046201E-08-1.34009457E-08 2.79243969E-02 5.17293928E-03 + 8 14 5.17293928E-03-2.42889470E-02 3.04840425E-09 8.82745174E-09 5.32955208E-09 + 9 1-2.67265397E-08-1.25944798E-08-6.24237679E-09 4.50235881E-08 6.95099888E-07 + 9 2-1.17792248E-06 4.08072028E-10 1.52307653E-10-1.09688886E-08 6.06851949E-11 + 9 3 3.56441877E-11-1.48187693E-09 2.17125043E-11 2.71462834E-11 6.10884156E-09 + 9 4-3.31832887E-10-2.25875180E-10-7.26933400E-09-6.07088779E-10 3.71482648E-11 + 9 5 9.01104802E-08 1.00199597E-09-3.61955180E-10 3.21594780E-08 6.67695547E-08 + 9 6 6.67695547E-08-1.35754071E-07 8.93247060E-01 4.14087160E-09 0.00000000E+00 + 9 7 4.35511057E-08 4.35511057E-08-9.26018200E-09 2.08762433E-01 7.83056783E-10 + 9 8 1.39687509E-11 3.17764574E-07 3.17764574E-07 4.17299400E-07 2.49190632E-02 + 9 9-2.19282648E-10 8.15269476E-11 3.41495499E-11 0.00000000E+00 5.62844462E-10 + 9 10-3.99550131E-11-1.26616435E-09-2.60677863E-11-1.26616435E-09-3.79701992E-11 + 9 11 0.00000000E+00-4.51376045E-03 1.94369406E-09 2.79543123E-08-2.33229147E-07 + 9 12-1.53330653E-09 5.86352972E-10-2.80778590E-08-1.40848064E-10 7.46230417E-11 + 9 13-7.23571014E-09-2.81231616E-10 1.10936592E-10 8.50901169E-08 6.84178677E-11 + 9 14 6.84178677E-11 4.56803860E-10 1.61425387E-03 0.00000000E+00-1.95617770E-11 +10 1-5.35620011E-11-8.18097593E-11 2.51551936E-10 5.86428682E-10 5.96078781E-09 +10 2-1.56123833E-08 1.54946050E-11-4.40979533E-10-5.74498172E-10 5.15921954E-11 +10 3-8.24249834E-11-9.50104597E-11 2.22351216E-10 7.00072256E-11-2.82969142E-10 +10 4-6.23362344E-10 1.47743737E-10 4.77898246E-10 1.56087751E-09 1.23999029E-09 +10 5 4.87464514E-10-4.44578285E-09-2.74040843E-09 2.32234204E-09 7.73574647E-01 +10 6-7.73574645E-01-2.08079925E-09 0.00000000E+00-1.47054994E-09-4.72998081E-09 +10 7 1.80793570E-01-1.80793569E-01-1.26205331E-10 0.00000000E+00-1.17557330E-10 +10 8-8.34933055E-10 2.15805497E-02-2.15805424E-02 3.37277921E-09 0.00000000E+00 +10 9 6.59119802E-10 4.22601610E-10-1.05130838E-10 0.00000000E+00 5.85629450E-11 +10 10-4.62042982E-11-3.90903122E-03 0.00000000E+00 3.90903123E-03 2.30897421E-11 +10 11 3.64183338E-11 0.00000000E+00 1.00337422E-10 2.69051236E-10-9.44017508E-10 +10 12 3.59431517E-09 2.80646173E-09-1.68770801E-09 1.78883154E-10 1.75072616E-10 +10 13-2.04539339E-10 1.09041876E-09 7.46926079E-10-1.48382480E-10 1.39798487E-03 +10 14-1.39798487E-03 1.11392575E-11 0.00000000E+00-7.80555484E-11-3.17587358E-11 +11 1 9.54694572E-02 3.37831953E-02 1.13461823E-01-1.00618628E-01-2.55120154E-01 +11 2 1.44678996E-03 2.34246754E-09 3.35768511E-09 4.55506183E-02 3.92268566E-10 +11 3 6.77421713E-10 6.66494848E-03 7.20124624E-10 1.14531705E-09 3.84939939E-03 +11 4-2.43585969E-09-3.70954526E-09-1.30717881E-02-2.30863282E-09-3.08702832E-09 +11 5 1.83738885E-02-5.15345521E-11-1.26505464E-09 2.65861904E-02-4.06729170E-01 +11 6-4.06729173E-01 8.21666598E-01 1.49946159E-07 3.98124934E-08 5.51506106E-08 +11 7-1.12411796E-01-1.12411797E-01 2.06492616E-01 3.55551567E-08 8.82614337E-09 +11 8 1.23103049E-08-3.86096252E-02-3.86096253E-02 4.16943254E-02 1.09299045E-08 +11 9 1.26960603E-09 2.10902625E-09 6.35933783E-11 6.88583306E-11-7.55293352E-03 +11 10 3.08652719E-11 4.06854548E-03 3.14207879E-11 4.06854550E-03-4.07738316E-10 +11 11-5.79795046E-10-9.84758572E-10-2.55421659E-02-4.64987212E-02-4.45735781E-02 +11 12-6.39767359E-09-1.01420711E-08 8.58911435E-02-1.59586312E-09-2.35645701E-09 +11 13 5.88097089E-02-1.82201501E-09-2.38286281E-09 2.44118338E-03-2.24060745E-03 +11 14-2.24060746E-03 1.33336492E-03 1.54844891E-09-6.77957005E-11-6.12617732E-11 +12 1-7.38044145E-09-2.27963770E-09-1.02431341E-08 5.40607628E-09-5.38805925E-09 +12 2 6.81696143E-08 4.18934201E-02 4.15695188E-02-1.20182801E-09 6.86407515E-03 +12 3 6.81100514E-03-2.37713993E-10 1.31788356E-02 1.30769424E-02 1.09526596E-09 +12 4-4.61212200E-02-4.57646307E-02-1.07021599E-09-3.62356582E-02-3.59555013E-02 +12 5-3.70455051E-09-6.12711974E-03-6.07974394E-03-1.30275260E-08 3.33484844E-08 +12 6 2.57774388E-08-5.97671920E-08-2.90564875E-09 6.30762953E-01 6.25886178E-01 +12 7 7.86168446E-09 6.10884909E-09-1.68968123E-08-7.08134152E-10 1.35953304E-01 +12 8 1.34902174E-01-1.24037168E-08-1.27769990E-08-1.74914520E-08-6.30810278E-11 +12 9 1.98262777E-02 1.96729899E-02 3.94238472E-04 3.91190469E-04 3.69249109E-10 +12 10 1.74945646E-04-4.23488158E-10 1.76308755E-04-3.83420285E-10-6.10851462E-03 +12 11-6.06128631E-03-1.81607591E-11 1.77892526E-09 3.14304342E-09 7.50140740E-09 +12 12-1.29457560E-01-1.28456653E-01 2.44531161E-10-2.58256175E-02-2.56259453E-02 +12 13-4.03202831E-09-2.53558037E-02-2.51597648E-02 1.18033679E-09 1.76788411E-10 +12 14 1.62345366E-10-1.10102328E-10 0.00000000E+00-3.63928484E-04-3.61114753E-04 +13 1-2.17334201E-09-4.90354628E-10-3.79229371E-09-3.33260722E-10-2.07962600E-08 +13 2 7.01626554E-08-4.15695460E-02 4.18934472E-02 1.94910563E-09-6.81101509E-03 +13 3 6.86408505E-03 3.55715128E-10-1.30769922E-02 1.31788850E-02 1.30744481E-09 +13 4 4.57647399E-02-4.61213285E-02-1.97701586E-09 3.59553666E-02-3.62355243E-02 +13 5-4.24753429E-09 6.08028985E-03-6.12766252E-03-1.07738171E-08 5.30966595E-09 +13 6 1.36023429E-09-6.81709531E-09 2.89365992E-09-6.25886142E-01 6.30762918E-01 +13 7 6.84458798E-10-3.37552402E-10-3.39636608E-09 6.97067794E-10-1.34902173E-01 +13 8 1.35953303E-01-1.51547290E-08-1.52415320E-08-1.57014960E-08 1.81674655E-10 +13 9-1.96729821E-02 1.98262699E-02-3.91179945E-04 3.94228011E-04-1.34233504E-10 +13 10 1.76304169E-04-9.33917859E-11-1.74941033E-04-1.30764694E-10 6.06128928E-03 +13 11-6.10851758E-03-2.17858073E-11-2.24399010E-10-2.82545585E-10 5.68325492E-09 +13 12 1.28456539E-01-1.29457446E-01 6.18724411E-09 2.56259667E-02-2.58256388E-02 +13 13-2.51068418E-10 2.51596387E-02-2.53556782E-02 3.42294313E-10 4.73687791E-11 +13 14 5.09479422E-11-6.05209095E-11 0.00000000E+00 3.61115003E-04-3.63928737E-04 +14 1-6.49678208E-02-1.27987143E-02-1.06758473E-01-4.56610813E-02-1.56688529E-01 +14 2 1.45955358E+00 6.02050687E-10-1.02789165E-09 1.40909185E-01 1.68941035E-10 +14 3-7.92030420E-10 2.31112317E-02 4.35492922E-10-5.12888641E-10 6.80531358E-02 +14 4-6.39524799E-10 1.67124990E-09-1.23043330E-01-8.06356692E-10 1.84807548E-09 +14 5-2.37967555E-01-2.08977901E-09-6.24339063E-10-3.09560748E-01-9.51700436E-02 +14 6-9.51700502E-02 1.84873653E-01 1.04319708E-08 6.34891219E-10-2.62012734E-08 +14 7-2.59237799E-02-2.59237818E-02-5.13548581E-04 1.75664131E-10-2.33083707E-10 +14 8-7.27698994E-09-2.71603854E-01-2.71603855E-01-1.96861858E-01 6.79705826E-09 +14 9 2.61961184E-10-2.13573469E-09-7.20023172E-11-2.76723797E-11-1.18070860E-02 +14 10-1.66047117E-11-3.23656153E-03-3.81644698E-11-3.23656148E-03-2.46398793E-11 +14 11 3.16116423E-10 3.56221421E-10-3.77789809E-02-8.47391880E-03 6.93558106E-02 +14 12-4.85218629E-09 4.75781384E-10 3.43691974E-01-5.67990048E-10 7.04681026E-10 +14 13 2.19335277E-02-9.87781985E-10 7.05671940E-10 5.64643984E-02 1.24257831E-03 +14 14 1.24257829E-03-4.18511950E-03-3.83520247E-10 7.59395318E-11 1.06209803E-10 +15 1 7.22716744E-10 7.89577808E-10-2.07071273E-09 1.33674794E-09-2.97914717E-09 +15 2 1.19984096E-08-5.89894016E-02-5.88665830E-02 1.33432600E-09-1.31655362E-02 +15 3-1.31381250E-02-1.11863256E-09-5.92554325E-02-5.91320600E-02 2.62053971E-10 +15 4 1.09417940E-01 1.09190127E-01-1.18032250E-09 9.70566762E-03 9.68545986E-03 +15 5 3.04495752E-09 6.80482844E-01 6.79066048E-01-4.65335069E-09 3.44868404E-09 +15 6-2.40450585E-09-1.24173522E-09-1.63936993E-11 9.60231565E-02 9.58232316E-02 +15 7-5.53314825E-10-2.55991366E-09-1.35624928E-09 0.00000000E+00-2.82476732E-03 +15 8-2.81888612E-03-4.72613356E-09-5.79475720E-09 4.21124418E-10-1.31996721E-09 +15 9-1.63270629E-01-1.62930692E-01 1.13271662E-02 1.13035825E-02 9.71430870E-11 +15 10 5.05511578E-03 0.00000000E+00 5.06566271E-03 0.00000000E+00 1.89550287E-03 +15 11 1.89155636E-03-4.89189455E-11 7.36515246E-10-1.30668077E-10-1.99417892E-09 +15 12-1.38859078E-01-1.38569967E-01-1.02084088E-10 5.69511707E-03 5.68325963E-03 +15 13 3.06515435E-11-1.10454067E-01-1.10224097E-01 1.13566773E-09 1.60477325E-11 +15 14 0.00000000E+00 0.00000000E+00 2.33686702E-11-1.98495969E-04-1.98082693E-04 +16 1 5.68183939E-10 6.79477182E-10-1.89201775E-09 1.95118202E-09-1.07576946E-08 +16 2 1.91906413E-08 5.88665422E-02-5.89893608E-02 4.81968570E-10 1.31381190E-02 +16 3-1.31655302E-02-1.05256955E-09 5.91320474E-02-5.92554199E-02-3.84573618E-10 +16 4-1.09190088E-01 1.09417901E-01 4.14112525E-10-9.68540582E-03 9.70561323E-03 +16 5 1.01918702E-09-6.79066066E-01 6.80482862E-01-1.30211183E-09-8.62725046E-10 +16 6 9.30571931E-10-2.28909056E-10 8.02668823E-10-9.58235576E-02 9.60234824E-02 +16 7-1.66409249E-09-1.03624077E-09-1.03991019E-09 2.38716674E-10 2.81879877E-03 +16 8-2.82467998E-03-4.67354593E-09-6.50720581E-09-5.67969793E-09 3.83334494E-11 +16 9 1.62930707E-01-1.63270643E-01-1.13035823E-02 1.13271659E-02 1.68924700E-10 +16 10 5.06566265E-03 1.00980126E-10-5.05511571E-03 0.00000000E+00-1.89155265E-03 +16 11 1.89549917E-03 1.40275231E-11 2.84575554E-10-3.70594531E-10 1.66012045E-09 +16 12 1.38570172E-01-1.38859283E-01-1.35800301E-09-5.68323110E-03 5.69508858E-03 +16 13 0.00000000E+00 1.10224156E-01-1.10454126E-01-9.64923900E-10-2.28707699E-11 +16 14 2.54459709E-11 2.12091394E-11 0.00000000E+00 1.98080977E-04-1.98494252E-04 +17 1 8.37358659E-02 4.76085819E-02-7.88135913E-02-1.02662409E-01-4.99321948E+00 +17 2 9.32469366E+00-8.44968979E-10 1.95318243E-09-8.39360289E-02 4.16229189E-10 +17 3-2.42922649E-09-1.21418245E-02 6.16534266E-11-3.29983955E-10-2.78403536E-02 +17 4-1.54131629E-10-3.63840806E-11 4.10684218E-02 2.21919879E-09 2.11880578E-09 +17 5 9.54877083E-02-1.43565423E-09-5.26595051E-09-6.76377572E-01 3.43280287E-02 +17 6 3.43280270E-02-6.14967238E-02 7.37312515E-08-3.64409875E-10-6.49733156E-09 +17 7-1.90875000E-01-1.90875001E-01-2.07212526E-01 2.34017821E-08-1.34234841E-10 +17 8-1.89880009E-09-2.44272495E+00-2.44272495E+00-2.85429286E+00 3.56600500E-08 +17 9-3.05819919E-10-4.57605127E-10-5.56682964E-11 1.76570773E-10 3.29709395E-03 +17 10 8.17699097E-11 1.09323415E-03-1.72558146E-11 1.09323415E-03-4.43241812E-11 +17 11 1.13345762E-10-1.21811313E-09 5.15207243E-02-1.56239050E-01 1.07540946E+00 +17 12 6.90957772E-10 2.20566270E-09-1.35240804E-01-1.17684400E-10 7.70960431E-11 +17 13-6.55213019E-03 9.92426963E-10 2.50930549E-09-3.76105699E-01 1.52986760E-04 +17 14 1.52986757E-04 4.59444445E-03 2.84281386E-10 0.00000000E+00 1.85051953E-11 +18 1-2.42487933E-02-1.26820466E-05-7.20550909E-02 4.98220578E-03-1.44510241E+00 +18 2 2.71705078E+00-2.52335525E-10 3.75702687E-10 3.57199814E-02 1.17859535E-10 +18 3-3.83561452E-10-3.86750427E-03-1.07985275E-10-3.22931294E-10-9.05916653E-02 +18 4 3.68422210E-10 6.58144865E-10 2.14862177E-01-4.81618477E-10-1.88639066E-09 +18 5-9.16043891E-01 2.02169344E-09 4.46285394E-09 1.20745327E+00-9.42243370E-02 +18 6-9.42243367E-02 1.86201730E-01 2.94212592E-08 1.08895362E-09 1.62694918E-09 +18 7-2.74496037E-02-2.74496036E-02-2.05965742E-02 6.24655042E-09 3.29917562E-10 +18 8 6.19191572E-10-4.39156022E-01-4.39156021E-01-1.19056916E+00 1.39040282E-08 +18 9-2.93451793E-09-2.53813132E-09 2.54544157E-11 1.19563256E-10 1.53623519E-02 +18 10 5.17319157E-11 9.81751540E-03 0.00000000E+00 9.81751539E-03-1.69145004E-11 +18 11-1.04746338E-11-1.33619291E-10-1.38773527E-01 5.38680127E-02 3.63002933E-01 +18 12-1.08349062E-09-1.18660398E-09 1.27459258E-01 2.46080783E-10 2.29215705E-10 +18 13 2.61221260E-02-1.40014226E-10-5.94080613E-10-3.37346241E-01 2.29620535E-03 +18 14 2.29620535E-03-9.55559738E-03-1.59669602E-09-1.47021023E-11 0.00000000E+00 +19 1-1.60188384E-10-4.47777159E-10 1.15130543E-09-4.00012272E-09 1.04541331E-08 +19 2 5.58958933E-09 1.16847260E-01-1.16059291E-01-1.91311587E-09 6.20018366E-03 +19 3-6.15837226E-03 1.77418787E-09-6.18623262E-02 6.14451527E-02 5.89231788E-10 +19 4 1.85742517E-01-1.84489948E-01-5.34481971E-10-1.05946694E+00 1.05232234E+00 +19 5 5.86064285E-09 1.14572824E+00-1.13800193E+00 4.58844464E-09 1.28486103E-09 +19 6-7.06198920E-10-2.28839199E-10 1.37518486E-10-9.06462546E-02 9.00349738E-02 +19 7 2.94097202E-10-1.07209133E-09-6.06322097E-11 1.13087554E-11-2.94126825E-03 +19 8 2.92143329E-03-9.79023633E-09 3.86351565E-09 3.93450533E-09-1.11262015E-09 +19 9 5.18555503E-01-5.15058583E-01 1.45316365E-02-1.44336413E-02-2.53224621E-10 +19 10-6.45492052E-03-7.72516070E-11 6.49874533E-03-1.61856758E-10 8.18167198E-03 +19 11-8.12649822E-03 1.22419953E-11-4.54149006E-10 1.00268422E-09-1.47935224E-08 +19 12 1.63464410E-02-1.62362074E-02-5.37158290E-10 5.63730577E-02-5.59929015E-02 +19 13 4.49761376E-10-4.04953475E-01 4.02222639E-01 4.04990212E-09-4.56947649E-11 +19 14 2.25051995E-11 1.87269019E-11 0.00000000E+00 4.14738657E-03-4.11941835E-03 +20 1 1.92410721E-10 4.03608776E-10-4.18141114E-10 4.73047442E-09-2.88237400E-08 +20 2-4.69517414E-09 1.16059292E-01 1.16847260E-01 2.12492721E-09 6.15836905E-03 +20 3 6.20018048E-03-2.14265289E-09-6.14451558E-02-6.18623293E-02-9.69435654E-10 +20 4 1.84489956E-01 1.85742525E-01 1.24347620E-09-1.05232235E+00-1.05946695E+00 +20 5-1.44342401E-08 1.13800195E+00 1.14572826E+00-1.56912144E-08-9.17042824E-10 +20 6-1.28280426E-09 1.86975755E-09 1.05486201E-09-9.00350550E-02-9.06463351E-02 +20 7 1.46221433E-09 1.17733326E-09 1.77856495E-11 7.53824986E-10-2.92147099E-03 +20 8-2.94130563E-03 8.26216280E-09 4.07290895E-09-2.12292403E-08-8.76097148E-09 +20 9 5.15058579E-01 5.18555498E-01 1.44336409E-02 1.45316362E-02 3.18604068E-10 +20 10 6.49874532E-03 1.67081189E-10 6.45492053E-03 1.95780828E-10 8.12649944E-03 +20 11 8.18167319E-03 5.03528943E-11 1.02550644E-09-3.18691450E-09 4.58404530E-08 +20 12 1.62362121E-02 1.63464456E-02 1.96459885E-09 5.59929080E-02 5.63730641E-02 +20 13-1.64396044E-09-4.02222655E-01-4.04953491E-01-8.72401983E-09 1.71430071E-11 +20 14 0.00000000E+00 3.26258267E-11-4.39311845E-11 4.11941798E-03 4.14738621E-03 +21 1-3.33495539E-09-1.62980168E-08 1.33717872E-07 2.37191872E-07-1.07745970E-06 +21 2-1.96477755E-06 8.96547051E-10 9.19392268E-10 9.22478433E-09 2.75490184E-10 +21 3 3.19812531E-11-1.44683104E-09-7.90898813E-10-7.23946887E-10-1.63234640E-08 +21 4 2.43560014E-09 2.12807598E-09 5.19049404E-08-1.17325311E-08-9.84970837E-09 +21 5-8.79297435E-07 1.20626178E-08 9.65379581E-09-7.64930036E-07-3.28703732E-08 +21 6-3.28703732E-08 6.38270604E-08-1.63729552E-01-5.91443663E-10-5.44252802E-10 +21 7 1.62382708E-07 1.62382708E-07 1.27826665E-07-5.64439064E-02 4.20606267E-11 +21 8 5.87767399E-11 8.41344492E-07 8.41344492E-07-6.64670610E-07 1.02038253E+00 +21 9 3.23072220E-09 1.73843195E-09 1.55364561E-10 1.44313896E-10 4.28227938E-09 +21 10 7.63994299E-11 7.87341423E-10 7.22615692E-11 7.87341423E-10 9.78776656E-11 +21 11 9.25515166E-11-3.38821111E-04 7.48345258E-08-1.12165887E-07 2.41656192E-06 +21 12 3.28603187E-10 3.70662355E-10 6.84050404E-08 7.91738633E-10 7.51166633E-10 +21 13-9.79568236E-08-3.10622749E-09-2.09535867E-09-4.74455112E-07-1.01852333E-09 +21 14-1.01852333E-09 2.26256521E-09 4.75462588E-03 3.41272396E-11 2.42296948E-11 +22 1 0.00000000E+00-1.27405661E-11 1.39140403E-10 2.10794850E-10 5.04838737E-10 +22 2-4.05158418E-09 5.90448405E-10-6.40313902E-10 0.00000000E+00 1.45808214E-10 +22 3-5.53124658E-10 0.00000000E+00-5.31762695E-10 7.77967233E-10-4.86854587E-11 +22 4 1.66717573E-09-2.52347895E-09 1.72929652E-10-7.59363508E-09 1.20987939E-08 +22 5-8.33822821E-10 6.59377883E-09-1.28616573E-08-8.75433477E-11-1.41793954E-01 +22 6 1.41793954E-01 8.10065443E-11 0.00000000E+00-4.32160153E-10 6.02329661E-10 +22 7-4.88818583E-02 4.88818586E-02 1.73266864E-10 0.00000000E+00 6.28340648E-11 +22 8-4.97783842E-11 8.83677193E-01-8.83677190E-01 1.73080670E-10 0.00000000E+00 +22 9 7.99744110E-10-3.51883113E-09 1.10692837E-10-1.39412405E-10 1.13878163E-11 +22 10-6.14674621E-11-2.93427663E-04 3.71331676E-11 2.93427672E-04 6.81937541E-11 +22 11-8.87491591E-11 0.00000000E+00 2.78910213E-11 1.68569219E-11 1.41872692E-09 +22 12 3.33771693E-10-3.35981322E-10 1.15881234E-11 6.15157793E-10-8.67876814E-10 +22 13-6.71419467E-11-1.17693518E-09 3.52765731E-09-2.00233090E-10 4.11762678E-03 +22 14-4.11762679E-03 0.00000000E+00 0.00000000E+00 2.14208716E-11-4.00136911E-11 +23 1 8.41078426E-04-2.40758101E-02 2.27873873E-01 3.64400995E-01-2.20105612E+00 +23 2-2.77134549E+00-1.10076646E-09-8.70859382E-09 8.10413010E-03 3.34075512E-10 +23 3 7.39787774E-09-1.25358093E-03 3.29537209E-10 1.74821811E-09-2.44892083E-02 +23 4-7.38840734E-10-1.93068736E-09 7.10838421E-02 5.35716401E-09 1.10187822E-08 +23 5-1.49093107E+00-7.41188280E-09-1.35118861E-08-1.43656404E+00-6.63001079E-02 +23 6-6.63001080E-02 1.33318727E-01 1.00339054E-07 1.00947525E-09 1.68473099E-09 +23 7 2.70445624E-01 2.70445624E-01 1.94505576E-01 3.54236124E-08 1.60986617E-10 +23 8 3.65896401E-10 1.28255908E+00 1.28255908E+00-1.41452548E+00-5.76329026E-07 +23 9-6.21294125E-09-9.57997203E-09-9.61017003E-11-8.86300474E-10 5.72195191E-03 +23 10-3.95421743E-10 1.44652272E-03-4.45474748E-11 1.44652271E-03-7.42639511E-11 +23 11-4.57758762E-10-8.07884061E-11 1.07975893E-01-2.52450800E-01 4.43114164E+00 +23 12-4.88451747E-10-5.20434056E-10 1.56393099E-01-6.47466442E-10-1.04324543E-09 +23 13-1.78312261E-01 4.99893219E-09 7.73398213E-09-8.58018160E-01-4.46294226E-04 +23 14-4.46294230E-04 3.59354332E-03-2.61086743E-09-1.85315651E-11-3.81097058E-11 +24 1-3.88329477E-11-3.13386307E-10 1.19285502E-09 5.64311379E-10-1.90680798E-08 +24 2 7.49869431E-09-9.16610811E-02-9.15657664E-02 1.64460640E-10-1.07310922E-02 +24 3-1.07199333E-02 6.87328421E-10 9.92352776E-03 9.91320868E-03-4.66546203E-10 +24 4-5.48394751E-02-5.47824497E-02 1.70687882E-09 8.06852979E-01 8.06013965E-01 +24 5-1.73072430E-08-8.78374787E-02-8.77461400E-02 1.45141816E-10-9.95474877E-11 +24 6 4.57678826E-10-1.31759722E-10 5.36531688E-11-1.90388104E-02-1.90190126E-02 +24 7 6.03607466E-10 8.49013902E-10 1.41079149E-10-3.25621032E-10-6.93174555E-02 +24 8-6.92453750E-02 3.23673395E-10-1.05372840E-10-1.35884990E-08 1.92389506E-09 +24 9 9.50359925E-01 9.49371683E-01-1.41777879E-03-1.41630450E-03 1.00699387E-10 +24 10-6.33390500E-04 0.00000000E+00-6.34049825E-04 0.00000000E+00-6.46803169E-03 +24 11-6.46130583E-03-1.43705124E-11 2.69684972E-10 9.13099475E-10 2.30280085E-08 +24 12-1.77577452E-01-1.77392797E-01 7.65021543E-10-1.29182224E-01-1.29047892E-01 +24 13-1.94489146E-09-5.38514552E-01-5.37954572E-01-3.30030915E-09 0.00000000E+00 +24 14-1.08797891E-11-3.58682859E-11 3.54752464E-11-1.30016946E-03-1.29881747E-03 +25 1-1.01002518E-10-2.97466487E-10 1.03331528E-09-1.20926925E-09 5.83532750E-09 +25 2-5.67271331E-09 9.15657699E-02-9.16610846E-02-7.56644987E-10 1.07199257E-02 +25 3-1.07310845E-02 5.91191464E-10-9.91321681E-03 9.92353591E-03 3.40399327E-10 +25 4 5.47824653E-02-5.48394907E-02-7.74731828E-10-8.06014025E-01 8.06853040E-01 +25 5 4.60351369E-09 8.77460662E-02-8.78374049E-02-1.24862736E-09 0.00000000E+00 +25 6-4.75314245E-11 1.83719585E-10-1.08135728E-10 1.90189950E-02-1.90387927E-02 +25 7 7.32268954E-10 3.87178019E-11 4.06545985E-10-4.90382173E-11 6.92453863E-02 +25 8-6.93174668E-02 3.59645823E-10 3.65188552E-09 2.92085462E-09 2.32063852E-10 +25 9-9.49371750E-01 9.50359991E-01 1.41630618E-03-1.41778048E-03-1.14639453E-10 +25 10-6.34050800E-04-3.05433311E-11 6.33391478E-04-5.30641111E-11 6.46130723E-03 +25 11-6.46803308E-03 0.00000000E+00-2.08026004E-10-2.47553911E-11-4.46251471E-09 +25 12 1.77392890E-01-1.77577546E-01 1.67674256E-11 1.29047886E-01-1.29182217E-01 +25 13 1.27426932E-10 5.37954785E-01-5.38514766E-01 2.28310641E-09-1.89372939E-11 +25 14 3.60880943E-11 1.99477618E-11 0.00000000E+00 1.29881713E-03-1.30016912E-03 +26 1-7.16286624E-02 2.94796266E-02-5.74493170E-01-3.97202795E-01-5.37699763E+00 +26 2 1.18095167E+01-6.73325901E-10 2.44547303E-09 1.22073017E-01 1.02442286E-09 +26 3-2.31577321E-09 1.07491450E-02 5.74260995E-10-4.13456775E-11-4.92713350E-02 +26 4-6.20058257E-10-2.26039424E-10 2.29312081E-01-1.91509765E-09-1.24028992E-09 +26 5-2.68816375E+00-9.01310816E-10-1.63320556E-09 9.75678240E-02 3.03902068E-02 +26 6 3.03902069E-02-6.87052617E-02 1.19721936E-08 2.12880889E-10 7.60367607E-10 +26 7-4.79987663E-01-4.79987663E-01-4.82737292E-01 1.66125004E-08 4.72523876E-10 +26 8 6.40994453E-10-4.00269039E+00-4.00269039E+00-5.16028183E+00-1.26821388E-08 +26 9-3.21450521E-09-2.33133680E-09-2.01860612E-10 9.62730771E-11 1.67749532E-02 +26 10 5.14542551E-11 2.44084370E-03-7.65082913E-11 2.44084371E-03-3.74143160E-11 +26 11 1.12610973E-10 3.87060715E-10 1.42883519E-01-1.62709092E-01 3.68656050E+00 +26 12 3.23917283E-10-1.62432731E-10 2.31123161E-02-1.19102446E-10-6.80699988E-10 +26 13-5.03857280E-02 3.37004148E-09 3.97152208E-09-1.37576734E+00-5.16878381E-03 +26 14-5.16878382E-03 4.56160973E-03 1.59922620E-09 1.51397316E-11 0.00000000E+00 +27 1-5.47765319E-02 2.48139011E-02-4.67216988E-01-6.11748398E-01 4.72788011E+00 +27 2 5.37927809E-01-2.04756718E-10 1.94831679E-09-6.57316622E-02 0.00000000E+00 +27 3-1.95347722E-09 3.93973042E-03 3.60045628E-10 4.13888396E-10 1.99731342E-01 +27 4-8.02741180E-10-1.50637337E-09-5.77053306E-01 2.68340523E-09 2.11649917E-09 +27 5 2.51057535E+00-1.68812293E-10 1.20101144E-09-1.40839571E+00-7.52602866E-02 +27 6-7.52602867E-02 1.44714453E-01-7.51271466E-09 1.36616015E-10-8.29316215E-11 +27 7-4.24464626E-01-4.24464626E-01-4.80187426E-01 4.34826712E-09-6.52665758E-11 +27 8 1.79879362E-10-4.07449356E-01-4.07449356E-01-1.02892283E+00 1.33898229E-08 +27 9 1.14794327E-09 1.01220014E-09-6.95003957E-11 7.35766131E-11-3.63524476E-02 +27 10 3.43947637E-11-1.65719586E-02-2.86121195E-11-1.65719586E-02-3.62486977E-11 +27 11 2.99708754E-11 5.21907648E-10-1.49360804E-01-9.21393485E-02-1.42421676E+00 +27 12 1.87752910E-10 4.05959815E-10-5.37792495E-03 4.45924508E-10 8.06943139E-10 +27 13-2.20563314E-01-3.06207267E-09-4.01015120E-09 2.67117939E+00-5.22506851E-03 +27 14-5.22506851E-03 3.23366645E-02-4.25867968E-10-4.13634964E-11-4.85244167E-11 +28 1 8.93651928E-10 5.32916735E-10 4.03856218E-10 8.24266022E-10 2.34935730E-08 +28 2-3.92390272E-08 1.82863368E-02 1.82446776E-02-1.38259552E-09-4.51137506E-04 +28 3-4.50109699E-04 1.74731491E-09-3.18832319E-02-3.18105969E-02-3.30476580E-10 +28 4 7.25735051E-02 7.24081714E-02 2.21606272E-09-4.62865536E-01-4.61811056E-01 +28 5-6.38874701E-09-6.34175432E-01-6.32730681E-01 1.05591249E-09 5.77016789E-10 +28 6 6.39998714E-10-1.09292988E-09-3.89222697E-11 2.92422096E-02 2.91755913E-02 +28 7-6.61678606E-10-6.16482257E-10-5.49121539E-10 2.81903092E-11 8.04631018E-03 +28 8 8.02797945E-03 1.53872373E-08 1.53862470E-08 6.50201881E-09 0.00000000E+00 +28 9-7.21501981E-01-7.19858288E-01 6.96014443E-03 6.94428813E-03 0.00000000E+00 +28 10 3.10557997E-03-7.86416197E-11 3.11267112E-03-9.64488089E-11 1.96682474E-03 +28 11 1.96234401E-03-1.78962905E-11 5.38873305E-10 5.44038022E-09-5.20979342E-09 +28 12-1.58036242E-01-1.57676211E-01-1.95322249E-09-3.60289145E-01-3.59468351E-01 +28 13-3.74227252E-09 1.85378843E+00 1.84956521E+00 1.51056943E-08-7.72334211E-11 +28 14-8.40685631E-11-1.61202487E-11 1.51690594E-11 9.79696578E-03 9.77464676E-03 +29 1 1.29461099E-10 2.55017040E-10-6.40747133E-10 1.53363973E-11 1.60357113E-09 +29 2-2.91571682E-09-1.82446869E-02 1.82863460E-02-1.61511888E-09 4.50127971E-04 +29 3-4.51155729E-04 1.54080146E-09 3.18105944E-02-3.18832294E-02 2.19634461E-10 +29 4-7.24081471E-02 7.25734808E-02 1.14145337E-10 4.61810936E-01-4.62865416E-01 +29 5-9.06161943E-10 6.32730687E-01-6.34175438E-01-6.48933157E-10 5.97308584E-11 +29 6-4.60469879E-11-2.77663883E-11 0.00000000E+00-2.91756024E-02 2.92422208E-02 +29 7-4.46973689E-10-3.83743301E-10-6.23253866E-10 0.00000000E+00-8.02795448E-03 +29 8 8.04628519E-03 5.96115613E-10 6.77464685E-10-1.22256036E-10 3.68609291E-11 +29 9 7.19858182E-01-7.21501875E-01-6.94428921E-03 6.96014550E-03-1.64147755E-10 +29 10 3.11267179E-03-7.09379092E-11-3.10558064E-03-8.16804766E-11-1.96234329E-03 +29 11 1.96682402E-03 0.00000000E+00 8.48614347E-11-8.81494836E-10 3.04067050E-09 +29 12 1.57676267E-01-1.58036298E-01-2.52194598E-10 3.59468395E-01-3.60289189E-01 +29 13-5.44276724E-10-1.84956515E+00 1.85378837E+00 3.17200745E-10-1.64758990E-11 +29 14 1.22122849E-11 2.85023484E-11 0.00000000E+00-9.77464861E-03 9.79696762E-03 +30 1-8.54300000E-02-1.81806396E-02-2.07606456E-01-3.94813386E-01 3.48003971E-03 +30 2 3.33052737E+00-2.07440057E-11 4.91398654E-09-4.96303591E-02-7.65707063E-11 +30 3-4.97493570E-09 1.21892031E-02 2.34809027E-10-9.89731775E-10 1.52466785E-01 +30 4-6.50019431E-10 5.94938604E-11-4.94323684E-01 1.30054298E-10-8.14627415E-10 +30 5 2.03749810E+00-5.74848791E-09-5.78797751E-09-2.42935583E-01-1.16368849E-01 +30 6-1.16368849E-01 2.24378000E-01-6.72646233E-09 7.54219705E-10 8.73234640E-10 +30 7-8.95474684E-02-8.95474683E-02-7.78841896E-02 5.01968424E-09-3.12691424E-10 +30 8 1.47515923E-10-1.53464575E+00-1.53464575E+00-1.11445027E-01 2.00092866E-08 +30 9-2.94155722E-09-4.07957279E-09-1.93766695E-11 5.86409691E-10-4.38182261E-02 +30 10 2.60547015E-10-5.25765580E-03 0.00000000E+00-5.25765580E-03-5.37970741E-11 +30 11 1.94637886E-10 8.37069218E-10-1.11096178E-01-7.05681683E-01-8.77182304E-01 +30 12-2.33186575E-09-2.25052298E-09 3.16913552E-01-3.95877809E-09-3.96026209E-09 +30 13 5.32099052E-01 1.29162615E-08 1.39988880E-08-8.98544990E-01 1.04643522E-02 +30 14 1.04643522E-02-6.79555684E-04-2.07916073E-09 4.44791340E-11 6.25035911E-11 +31 1-3.37131547E-02-6.82144969E-02 4.32807794E-01 9.77844215E-01-8.25220564E+00 +31 2-1.15322534E-01-9.29156607E-10-1.43177790E-08 4.32384756E-02 1.03747911E-09 +31 3 1.44625839E-08 9.90334820E-03 2.55681179E-10 9.65142044E-10 6.16912452E-02 +31 4-2.46984363E-11 2.43986664E-09-1.02924124E-01-9.36169083E-10-2.65551261E-09 +31 5-4.10614803E+00-2.21859492E-10 6.81507218E-10-1.05384549E+00 6.86303688E-02 +31 6 6.86303688E-02-1.40405958E-01 6.81278752E-09-2.91955159E-10-8.72943332E-11 +31 7 5.87582001E-01 5.87582001E-01 4.57423013E-01-1.19319467E-08 5.33752182E-10 +31 8 1.31324300E-10 2.23720772E-01 2.23720772E-01-1.96853717E+00 1.36023973E-08 +31 9-1.00106893E-09-3.68399180E-10-1.56075825E-10-1.25136458E-09-8.28889856E-03 +31 10-5.70104382E-10-5.28948705E-03-5.50426313E-11-5.28948705E-03-3.27647207E-11 +31 11-5.14993862E-10-4.10286391E-11-1.51123888E-01-1.45238768E+00 9.76091614E+00 +31 12 4.19263213E-10 4.76766444E-10-1.78936751E-01-1.12844420E-10 1.41155264E-10 +31 13-6.95567887E-01 1.28254550E-09 5.06591639E-11-2.24005610E+00 1.22345430E-02 +31 14 1.22345430E-02 1.37383952E-02-9.02253708E-10 1.00875528E-11 0.00000000E+00 +32 1 3.02801440E-09 3.81284131E-09-1.66320386E-08-3.31525396E-08 4.92189991E-08 +32 2 1.04770774E-07-9.89910401E-02-9.88046396E-02 5.90305435E-11-7.95036972E-02 +32 3-7.93539915E-02-1.00280366E-09-7.00460825E-01-6.99141855E-01-3.63135946E-09 +32 4 1.90057555E+00 1.89699676E+00 9.63965741E-09-1.84138362E+00-1.83791629E+00 +32 5-1.57714382E-08 6.00538832E-01 5.99408015E-01-9.56365875E-10 9.33523749E-11 +32 6-1.49949051E-10-9.73624040E-11 1.20901632E-09 9.20210900E-02 9.18478139E-02 +32 7-2.56869007E-08-2.51917531E-08-2.60928483E-08-2.00710589E-09-1.48513770E-01 +32 8-1.48234118E-01-4.45435165E-08-4.46973314E-08-4.96575855E-08 6.15555087E-10 +32 9-5.63171587E-02-5.62111133E-02 1.27141331E-01 1.26901924E-01 6.88795045E-10 +32 10 5.67522657E-02 3.15956742E-10 5.68593321E-02 2.93520735E-10 5.51226060E-02 +32 11 5.50188099E-02-5.27812995E-11-4.42950973E-11-6.31509439E-09 2.36510941E-08 +32 12-2.13145679E-02-2.12744326E-02-5.01532142E-10 6.41526593E-02 6.40318596E-02 +32 13-5.73720068E-10 1.39931801E-01 1.39668309E-01-4.59214592E-09 7.49413167E-11 +32 14 8.26155482E-11-1.07666604E-10-2.85060248E-11-7.87260292E-03-7.85777878E-03 +33 1 1.24112132E-10 4.82423038E-10-1.02756643E-09 2.25027027E-10 3.86058137E-09 +33 2 6.67426602E-10 9.88046264E-02-9.89910269E-02 4.52779887E-10 7.93540037E-02 +33 3-7.95037095E-02-6.55603547E-10 6.99141866E-01-7.00460837E-01-1.13570846E-09 +33 4-1.89699677E+00 1.90057556E+00 2.68797114E-09 1.83791630E+00-1.84138364E+00 +33 5-2.98457356E-10-5.99408018E-01 6.00538835E-01 9.20534824E-10-1.33970009E-09 +33 6 7.94967984E-10 1.34673890E-10 8.12197886E-11-9.18478208E-02 9.20210968E-02 +33 7 1.42210740E-09-2.16609485E-09-4.63566450E-10-1.38454983E-10 1.48234109E-01 +33 8-1.48513761E-01-9.90389270E-10 1.03496953E-10 1.33335571E-10 4.56610471E-11 +33 9 5.62111227E-02-5.63171682E-02-1.26901929E-01 1.27141337E-01 2.51373888E-10 +33 10 5.68593342E-02 1.56148747E-10-5.67522678E-02 6.60425120E-11-5.50188126E-02 +33 11 5.51226087E-02 0.00000000E+00 9.79453807E-11 2.81760133E-10-3.54724431E-09 +33 12 2.12744243E-02-2.13145597E-02 1.60098511E-10-6.40318473E-02 6.41526470E-02 +33 13 9.23804605E-10-1.39668329E-01 1.39931821E-01 8.51072725E-10 3.11945000E-11 +33 14 0.00000000E+00-2.70577207E-11 1.45380055E-11 7.85778007E-03-7.87260422E-03 +34 1 2.61431055E-01 2.92445821E-01-1.30914325E+00-2.82424435E+00 2.91101291E+00 +34 2 9.14226642E+00 8.23257608E-11 4.33804149E-09-6.73553276E-02 1.75753281E-09 +34 3-2.37907959E-09-3.81989498E-02 7.81002700E-09 7.43207237E-09-3.82575535E-01 +34 4-2.04924606E-08-2.14833509E-08 1.11927605E+00 2.00830923E-08 2.11565859E-08 +34 5-2.40387531E+00-6.64048494E-09-6.19908350E-09-4.01933852E-02-1.70853427E-02 +34 6-1.70853426E-02 6.17809104E-02 8.39552605E-09-8.82676379E-10-9.64439680E-10 +34 7-2.04619650E+00-2.04619650E+00-2.32478551E+00-1.55376148E-08 1.07917970E-09 +34 8 8.40399162E-10-3.84556832E+00-3.84556832E+00-4.55322842E+00 1.23436436E-08 +34 9 8.16340604E-10 1.52958174E-09-1.49647084E-09-1.10910476E-09 6.18616150E-02 +34 10-4.92803566E-10 3.15536513E-02-6.53893055E-10 3.15536513E-02-6.89024944E-10 +34 11-5.46070788E-10-6.43527498E-10-4.58898188E-02-5.67111363E-01 3.40452358E+00 +34 12 4.05616672E-10 8.04304221E-10-3.03929117E-02-7.49101988E-10-8.48957078E-10 +34 13-1.94670201E-01-1.69217752E-09-2.96117135E-09-8.24972405E-01 5.33137404E-03 +34 14 5.33137404E-03-7.68047372E-03-1.40253882E-09 1.03900014E-10 1.01311367E-10 +35 1-8.05861456E-11-9.24636720E-11 4.66731569E-10 8.56477001E-10-2.93085728E-09 +35 2-1.73480421E-09-1.66164970E-10-6.64652528E-11-6.62314396E-11-2.29052274E-10 +35 3 4.32529826E-10-3.78002066E-11-9.59290836E-10 8.22225668E-10-2.95851841E-10 +35 4 2.89696909E-09-2.44001452E-09 9.76746432E-10-2.38089989E-09 2.07380497E-09 +35 5-1.44363446E-09 6.23937613E-10-9.34608785E-10 3.10631414E-10-5.43007331E-01 +35 6 5.43007331E-01 8.46955882E-11 0.00000000E+00 8.94834847E-10-5.22732413E-10 +35 7 1.06667092E+00-1.06667091E+00 6.67818425E-10 0.00000000E+00-1.80761989E-09 +35 8 9.03940754E-10-4.57556283E-01 4.57556285E-01 4.64929710E-10 0.00000000E+00 +35 9 9.36233567E-10-4.54923995E-10 1.77298744E-10-1.59223065E-10 5.11427843E-11 +35 10-8.47557572E-11-2.34106472E-03 8.16492653E-11 2.34106478E-03 1.01857291E-10 +35 11-1.07637873E-10 0.00000000E+00-8.02617737E-11-8.27218876E-11 1.31716060E-09 +35 12 1.07608634E-10-9.78254721E-11 5.41460907E-11 2.72951129E-10-2.46764888E-10 +35 13 1.79657601E-10-4.94117071E-10 3.23526957E-10-6.07387819E-10 1.34294712E-02 +35 14-1.34294712E-02 0.00000000E+00 0.00000000E+00-1.17154013E-11 2.94602906E-11 +36 1-3.79288547E-09-6.23108123E-09 4.50665369E-08 7.67620885E-08-4.97506223E-07 +36 2-8.06079121E-08-1.57704622E-10-2.21127666E-10-7.26118087E-09-2.07276283E-10 +36 3-1.56867232E-10-4.60420029E-09-7.24206522E-10-8.30646541E-10-6.23947619E-08 +36 4 2.37541955E-09 2.63456650E-09 1.83492878E-07-2.02232251E-09-2.22157747E-09 +36 5-3.76715594E-07 8.29232865E-10 8.62891109E-10 4.06728532E-08-1.00247558E-08 +36 6-1.00247558E-08 2.05939280E-08-6.27010858E-01 6.79858776E-10 8.86019530E-10 +36 7 8.74501638E-08 8.74501638E-08 1.46841711E-08 1.23168548E+00-1.26585767E-09 +36 8-1.75162899E-09 4.05485103E-08 4.05485103E-08-2.45451246E-08-5.28340488E-01 +36 9 6.26234039E-10 8.62487597E-10 1.34889232E-10 1.51708532E-10 9.13074358E-09 +36 10 6.29947543E-11 5.44299570E-09 4.75888046E-11 5.44299570E-09 8.54252184E-11 +36 11 8.37020927E-11-2.70322873E-03-6.90920282E-09-2.49331599E-08 4.10577339E-07 +36 12 1.19809141E-10 2.29116242E-10 7.15536788E-10 3.11930477E-10 2.47321757E-10 +36 13-4.16136074E-09-4.23760730E-10-5.10578928E-10-1.48254434E-07-8.20148896E-10 +36 14-8.20148896E-10-8.96028604E-11 1.55070177E-02-2.53812337E-11-1.87482923E-11 +37 1 1.38751380E-01 1.35327674E-01-4.83029712E-01-1.75897797E+00 7.44076805E+00 +37 2 7.65704612E-02 1.26051083E-11 7.63445550E-09 1.22097471E-01-6.99498637E-10 +37 3-8.63819178E-09 8.98108757E-02-3.66905334E-10-2.18677605E-09 9.09259053E-01 +37 4 2.10682542E-09 4.26568179E-09-2.73043629E+00-1.84405478E-09-4.28060990E-09 +37 5 4.83143967E+00-2.63004904E-09-1.34976990E-09-6.22354877E-01 1.50426242E-01 +37 6 1.50426242E-01-2.84812424E-01-3.53820784E-08-8.33503633E-09-7.34152473E-09 +37 7-1.24283355E+00-1.24283355E+00-3.69263180E-01 7.81074737E-08 1.69556562E-08 +37 8 1.53929447E-08-3.34882911E-01-3.34882911E-01 4.44961019E-01-3.46040731E-08 +37 9-9.38278801E-09-8.61927303E-09 1.27477147E-10 1.01702767E-09-1.57039638E-01 +37 10 4.56108982E-10-7.37608781E-02 5.72813448E-11-7.37608781E-02 0.00000000E+00 +37 11 4.40555071E-10-9.77839949E-10 2.04224047E-01 1.09330205E-01-4.68363732E+00 +37 12-4.07494530E-09-3.82677194E-09-1.65307748E-01-6.17892539E-10-4.08140544E-10 +37 13-9.72012922E-02 6.65213222E-09 6.17903380E-09 1.87899264E+00 1.16944162E-02 +37 14 1.16944162E-02-9.68129536E-03 6.73366504E-10-2.90837893E-10-3.00296964E-10 +38 1-2.20509414E-09-2.08971045E-09 7.00504138E-09 3.06568567E-08-1.32981691E-07 +38 2 6.66925511E-09-4.03161236E-02-4.03611193E-02-2.28613263E-09-1.73137349E-02 +38 3-1.73330582E-02-1.32401711E-09-7.82165760E-02-7.83038712E-02-1.57598967E-08 +38 4 2.96890495E-01 2.97221846E-01 4.74399785E-08-2.75400951E-01-2.75708317E-01 +38 5-8.85670138E-08-9.65478811E-02-9.66556355E-02 1.10860960E-08-3.39805652E-09 +38 6-2.90136970E-09 5.96359445E-09-7.99617158E-10-4.25729675E-01-4.26204819E-01 +38 7 2.21036534E-08 2.11272234E-08 9.25786307E-10 1.70995924E-09 8.83413122E-01 +38 8 8.84399073E-01 2.47179434E-09 2.90543376E-09-9.95386440E-09-7.18778364E-10 +38 9-5.19357363E-01-5.19937003E-01 1.71124048E-02 1.71315035E-02 2.69077685E-09 +38 10 7.66144194E-03 1.21667137E-09 7.65290078E-03 1.25067395E-09 3.19430746E-03 +38 11 3.19787252E-03 4.15856730E-11-3.47496203E-09-4.19529688E-10 8.62097392E-08 +38 12-2.18980021E-01-2.19224419E-01 2.79509347E-09-5.41557332E-02-5.42161750E-02 +38 13 1.87467285E-10 4.03819846E-01 4.04270537E-01-3.46034197E-08-1.94728741E-10 +38 14-2.00067271E-10 3.03356675E-10 2.76086991E-11-1.86279288E-02-1.86487189E-02 +39 1-2.32477855E-10-3.38647853E-10 1.20916538E-09 1.05510519E-09-4.09171814E-09 +39 2-3.53873790E-09-4.03611133E-02 4.03161177E-02-6.05515764E-11-1.73330647E-02 +39 3 1.73137414E-02-2.60177700E-10-7.83038617E-02 7.82165664E-02-6.37559768E-10 +39 4 2.97221829E-01-2.96890478E-01 2.15444622E-09-2.75708293E-01 2.75400926E-01 +39 5-2.12338181E-09-9.66557018E-02 9.65479476E-02 8.41596664E-10-6.59716222E-10 +39 6 5.22898254E-10 1.82102985E-10 1.71066282E-10-4.26204818E-01 4.25729673E-01 +39 7 2.67533917E-09 1.00639050E-10 1.41648006E-09-3.13919973E-10 8.84399081E-01 +39 8-8.83413129E-01 6.90313170E-10 1.78526215E-09 1.03884171E-09 1.46814081E-10 +39 9-5.19937024E-01 5.19357385E-01 1.71315053E-02-1.71124067E-02 1.57550823E-10 +39 10-7.65290023E-03 9.89082926E-11 7.66144142E-03 2.60128306E-11 3.19787090E-03 +39 11-3.19430582E-03 2.24877518E-11-2.73442686E-10-3.90008623E-11 1.21367736E-09 +39 12-2.19224433E-01 2.18980036E-01 1.91775303E-10-5.42162424E-02 5.41558009E-02 +39 13 6.45881867E-10 4.04270608E-01-4.03819916E-01-1.03255794E-09 0.00000000E+00 +39 14-3.34245431E-11 3.32014909E-11-2.22989751E-11-1.86487204E-02 1.86279303E-02 +40 1-3.63051580E-02-2.00459590E-02-4.44981085E-02-4.32360405E-01 3.47172252E+00 +40 2 4.06578334E-01 4.31939134E-10 6.00803811E-09-7.29266963E-02-3.43060093E-10 +40 3-5.88947823E-09-2.65938624E-02-2.31556435E-10-1.27201494E-09-5.68900170E-01 +40 4 6.90842237E-11-2.13151285E-11 1.73320796E+00 3.35737349E-11 1.93707148E-10 +40 5 1.76730872E+00-2.69097117E-10-3.89612737E-10 1.03566762E-01 2.55818103E-01 +40 6 2.55818103E-01-5.17447805E-01-3.38830861E-09-6.62602478E-10-1.00760852E-09 +40 7-8.54345678E-01-8.54345678E-01 2.02008400E+00 7.12204254E-09 1.30629661E-09 +40 8 1.68739550E-09-1.23252793E-01-1.23252793E-01 3.15511331E-02-4.07107595E-09 +40 9-6.46580441E-10-8.34789252E-10 4.93006088E-11 6.47613557E-10 5.68194460E-02 +40 10 2.95812634E-10 6.40117352E-02 2.41268615E-11 6.40117352E-02 2.96142099E-11 +40 11 3.50179715E-10 4.59621392E-10-1.33574888E-01-8.81814572E-01-3.30370971E+00 +40 12-2.49868008E-10-5.25390882E-10 1.00093658E-01-6.91432244E-10-3.09515533E-10 +40 13 2.01882702E+00 6.76437422E-10 7.26406640E-10 5.85938455E-01 2.13381215E-03 +40 14 2.13381214E-03-7.48333114E-02-2.88730567E-10-6.08274689E-11-3.62379656E-11 +41 1 3.20090127E-10-4.31450247E-10 5.53054442E-09-7.17581003E-09 3.09704299E-09 +41 2 6.19996152E-09-5.99296206E-03-5.98457648E-03 1.44843395E-09 2.35382473E-03 +41 3 2.35053116E-03-6.34180924E-10 6.85867709E-02 6.84908019E-02-8.40890794E-10 +41 4-1.56270305E-01-1.56051646E-01 3.27512372E-09 5.12872584E-02 5.12154955E-02 +41 5 8.43132665E-09 2.93774192E-01 2.93363133E-01 2.61645534E-09-4.37480698E-10 +41 6-4.30865477E-10 9.46132258E-10 3.63592003E-11 5.44925021E-02 5.44162543E-02 +41 7 3.53294379E-09 3.53574030E-09 4.92878272E-09-9.52335521E-11-2.83812068E-01 +41 8-2.83414948E-01-2.68079249E-09-2.69456446E-09 4.12940965E-09 2.09257467E-11 +41 9 2.42593020E-01 2.42253575E-01-1.91351272E-02-1.91083526E-02 1.50066159E-10 +41 10-8.54551520E-03 3.95187840E-11-8.55748914E-03 4.09216424E-11 7.39048495E-03 +41 11 7.38014393E-03 0.00000000E+00 6.06202195E-10-1.18663288E-09-1.70203228E-08 +41 12-9.22161462E-01-9.20871141E-01-7.49583957E-09 1.56960003E+00 1.56740380E+00 +41 13 1.74279411E-08-8.52769489E-01-8.51576264E-01-2.91949720E-09-1.22568685E-10 +41 14-1.14293338E-10 2.42662266E-10-3.73037115E-11 2.39508481E-02 2.39173353E-02 +42 1-9.27263821E-11-3.44675231E-10 1.36627935E-09-1.36781769E-09-1.32034183E-09 +42 2 2.05769131E-10 5.98458851E-03-5.99297406E-03 7.92034471E-10-2.35054104E-03 +42 3 2.35383458E-03-8.64240678E-10-6.84907972E-02 6.85867662E-02-5.83480627E-11 +42 4 1.56051624E-01-1.56270283E-01-1.68584723E-10-5.12154780E-02 5.12872408E-02 +42 5-7.54824824E-10-2.93363127E-01 2.93774186E-01-1.09001479E-11-7.20184148E-11 +42 6-1.66579890E-11 6.00728357E-11-1.91504057E-11-5.44162453E-02 5.44924931E-02 +42 7 6.42726938E-10 4.82660852E-10 8.54908946E-11 3.71092651E-11 2.83414921E-01 +42 8-2.83812040E-01-6.31124270E-11-3.95176209E-11-3.36891209E-10-1.41767152E-11 +42 9-2.42253557E-01 2.42593001E-01 1.91083527E-02-1.91351272E-02 1.01800203E-10 +42 10-8.55748892E-03 4.97694946E-11 8.54551499E-03 2.88429742E-11-7.38014300E-03 +42 11 7.39048402E-03 0.00000000E+00-2.42774379E-10 4.12786606E-10 1.15444980E-09 +42 12 9.20871191E-01-9.22161512E-01 2.81549122E-11-1.56740378E+00 1.56960002E+00 +42 13-5.81230171E-10 8.51576232E-01-8.52769456E-01-1.80894489E-10 3.76019446E-11 +42 14-2.50053385E-11 0.00000000E+00-1.98198502E-11-2.39173385E-02 2.39508514E-02 +43 1-7.14403280E-02 6.00870803E-03-6.34876568E-01 8.99560238E-01-9.64361497E-01 +43 2-6.78120142E-01-4.32867143E-10-4.80292008E-09-8.78840444E-02 4.53593852E-10 +43 3 4.76751039E-09-4.86305851E-02 3.00833617E-10 1.15250952E-09 4.52416854E-02 +43 4-6.99151455E-10-6.90889224E-10-3.34260975E-01 5.86311359E-11-5.77051247E-11 +43 5-1.59093167E+00 1.71440978E-09 1.70110083E-09-4.40889307E-01 5.88985883E-02 +43 6 5.88985883E-02-1.26970045E-01-2.91053105E-09 2.08541994E-10 1.80773445E-10 +43 7-4.75879613E-01-4.75879613E-01-6.39004890E-01 4.70551463E-09-1.35195871E-09 +43 8-1.28367879E-09 3.16710574E-01 3.16710574E-01-8.64052459E-01-7.50722646E-10 +43 9 1.18489359E-09 1.13158404E-09-1.23401698E-10-6.11520536E-10-4.91982139E-03 +43 10-2.75776770E-10 1.09668677E-02-4.99150417E-11 1.09668677E-02 4.07560753E-11 +43 11-1.72360844E-10 4.22859618E-10-1.01749379E-01 4.72407157E-02 3.16593836E+00 +43 12-6.39491572E-09-6.11783258E-09 1.34625487E+00 9.55300584E-09 9.30709101E-09 +43 13-2.73543825E+00-4.74501460E-09-4.60952120E-09 2.81682509E-01 2.61643773E-02 +43 14 2.61643773E-02-5.01301069E-02-2.04567750E-10 1.91568868E-10 1.53146839E-10 +44 1-1.55699905E-01 4.78244615E-01-6.32554425E+00 5.66615897E+00 8.23349960E+00 +44 2 5.48391154E+00 6.48436790E-10 1.99974394E-08 8.28911224E-02 2.21649408E-11 +44 3-2.03377944E-08 1.49738800E-02-1.64195945E-09-3.45519857E-09-5.17666305E-02 +44 4 8.15591433E-10 5.66248960E-10-2.96478814E-01-3.93389277E-10-1.90264960E-10 +44 5 3.40868631E-01 1.54601357E-10-9.97855618E-11 2.41905107E-02-1.88483156E-02 +44 6-1.88483156E-02 2.34008246E-02-3.21769902E-09 8.22398231E-11 1.68795250E-10 +44 7-4.99478400E+00-4.99478400E+00-5.25119171E+00 3.92983133E-09-1.02584257E-10 +44 8-2.39468761E-10-2.57599023E+00-2.57599023E+00-2.39887264E+00-3.31621140E-09 +44 9 2.99331807E-11 4.72724838E-11 3.20887968E-10 2.16535000E-09 3.86008435E-02 +44 10 9.78931641E-10-7.97182442E-03 1.50604762E-10-7.97182441E-03 2.13695400E-10 +44 11 1.05604173E-09 1.25640920E-09-1.10209457E-01 3.69129423E-01-5.52600620E-01 +44 12 7.09977673E-11-3.37307422E-11-2.57237442E-01 3.90938489E-11 2.12372725E-10 +44 13 1.61860523E-02 0.00000000E+00 1.74933941E-11 1.69818636E-01-3.72547515E-02 +44 14-3.72547516E-02 1.20243682E-01 1.88543890E-09-2.48623983E-11-1.18030207E-10 +45 1 5.72778484E-09-1.84121963E-09 4.60908094E-08-1.56341376E-07-3.29464527E-08 +45 2-1.31196629E-08-4.72628174E-11 1.85105855E-10-1.90382082E-07-3.33903515E-11 +45 3 7.24268855E-11-6.89877285E-08 1.47776702E-10-4.97828615E-10 7.13347977E-07 +45 4-3.11377388E-11 1.93889459E-10-6.54575150E-07 0.00000000E+00-1.69563705E-10 +45 5 2.31225790E-07 0.00000000E+00 7.11685539E-11-1.30649244E-07 4.12090067E-10 +45 6 4.12090067E-10 2.13903438E-10 2.51858805E-02-2.19899590E-11 4.32556957E-11 +45 7 1.94599416E-08 1.94599416E-08-1.39356090E-07-6.72096950E-02 6.90726253E-11 +45 8-2.01123729E-10-2.21811845E-08-2.21811845E-08-2.27416537E-08-1.85141555E-02 +45 9-1.99418870E-11 4.42902746E-11-3.28309484E-11 5.91557491E-11-9.35892770E-08 +45 10 1.65699304E-11-7.02631623E-08 0.00000000E+00-7.02631623E-08-1.50712460E-11 +45 11 8.31793953E-11 1.14303161E-02 2.36001901E-07-2.36614117E-07 2.96839074E-07 +45 12 2.53546504E-11-7.22581891E-11 6.86637844E-09 0.00000000E+00 2.08980084E-10 +45 13-2.16037869E-07-1.82106994E-11-6.67542246E-11-9.35524846E-09-1.00184231E-07 +45 14-1.00184231E-07 1.99813972E-07 1.00145614E+00 2.00158838E-10-5.25228298E-10 +46 1 0.00000000E+00 1.94606047E-11-2.06743910E-10 3.64718264E-10 1.92700273E-10 +46 2 9.44114067E-11-2.82868647E-10-2.46132784E-10 2.88270472E-10-1.96332984E-10 +46 3 0.00000000E+00 9.31983882E-11 1.07026072E-09 6.37568970E-10-1.04215494E-09 +46 4-5.94611709E-10-3.87883349E-10 9.58496826E-10 3.90692015E-10 2.14522776E-10 +46 5-3.35622325E-10-1.34161388E-10-6.83070799E-11 1.92583106E-10-2.18116123E-02 +46 6 2.18116123E-02 0.00000000E+00 0.00000000E+00-2.78095390E-11-1.13315406E-11 +46 7 5.82053031E-02-5.82053033E-02 1.13830280E-10 0.00000000E+00 1.65711234E-10 +46 8 4.10595698E-11 1.60337290E-02-1.60337290E-02-1.18566914E-11 0.00000000E+00 +46 9-2.72217195E-11 0.00000000E+00-1.44898519E-10-1.03280148E-10 1.29706599E-10 +46 10-6.18607312E-11-9.89894403E-03-6.37637950E-11 9.89894424E-03-1.37342756E-10 +46 11-6.18576386E-11 0.00000000E+00-3.52943357E-10 3.53697822E-10-4.45831104E-10 +46 12 6.41150738E-11 1.60785156E-11-1.54750024E-11-1.75260561E-10 2.07361555E-11 +46 13 3.26276573E-10 3.96484415E-11-4.64364513E-11 1.83287867E-11-8.67286455E-01 +46 14 8.67286455E-01-2.89804743E-10 0.00000000E+00 5.10656375E-10 1.81928451E-10 +47 1 2.31150419E-02-1.32321850E-03 1.25312271E-01-5.46412289E-01 2.43054050E-02 +47 2-1.07116179E-01-1.81103407E-10-2.12217332E-09-7.94628444E-01 3.15671000E-10 +47 3 4.74352954E-09-2.79907168E-01-3.00385743E-10-5.59352088E-09 2.95708108E+00 +47 4 2.26121288E-10 3.31632723E-09-2.70257247E+00-8.56166328E-11-2.10828535E-09 +47 5 1.01764823E+00 1.88096217E-11 6.85381584E-10-5.12987956E-01 1.33551312E-03 +47 6 1.33551311E-03 1.83114111E-03-7.47276615E-09-4.92738669E-11 6.20953643E-11 +47 7 4.18690478E-02 4.18690478E-02-6.04836798E-01 1.75574116E-08 3.29776423E-11 +47 8-9.84774015E-10-7.18990942E-02-7.18990943E-02-4.09250787E-02 3.75711004E-09 +47 9 0.00000000E+00 1.87409990E-10 5.98448209E-11 6.21405135E-10-3.88531759E-01 +47 10 2.71529886E-10-2.90820383E-01 2.03228126E-11-2.90820383E-01-3.48118745E-11 +47 11 6.48981398E-10-1.72227222E-09 8.22227011E-01-8.20999630E-01 1.01047249E+00 +47 12-6.69725380E-11-4.24255638E-10 2.04883314E-02-3.27570324E-11 7.13400856E-10 +47 13-8.58081314E-01 3.03155868E-11 2.51158719E-11 1.27026253E-02-3.57005011E-01 +47 14-3.57005010E-01 8.15045639E-01-2.51577734E-07 1.77913764E-10-3.26957975E-09 +48 1 5.17237284E-11-2.17348083E-10 1.35333391E-09-2.19837889E-09-1.95402537E-09 +48 2-1.15505823E-09 3.26564295E-01-3.26735784E-01-4.43325055E-09 1.10752977E-01 +48 3-1.10811137E-01 1.50070871E-09-9.49140826E-01 9.49639249E-01 8.34953888E-09 +48 4 4.93745735E-01-4.94005016E-01-7.15534693E-09-3.21631020E-01 3.21799919E-01 +48 5 2.17170740E-09 9.94430360E-02-9.94952566E-02-1.50665717E-09 3.38114567E-11 +48 6 9.01500839E-11 5.71057111E-11 1.19228781E-11 4.35977584E-02-4.36206529E-02 +48 7 8.66596200E-10 8.63634449E-10-7.95123707E-10-3.46286959E-11-2.09239606E-01 +48 8 2.09349484E-01 2.40724739E-10 2.20687772E-10 0.00000000E+00 0.00000000E+00 +48 9 3.45414463E-02-3.45595851E-02 1.22526534E-01-1.22590876E-01-1.27501132E-09 +48 10-5.48243082E-02-8.51008217E-10 5.47955333E-02-8.82158408E-10 1.26877696E-01 +48 11-1.26944323E-01 0.00000000E+00 2.74914352E-09-2.60145479E-09 3.84504882E-09 +48 12-6.55640879E-02 6.55985176E-02 8.00001010E-11 1.35585733E-01-1.35656933E-01 +48 13-2.30826345E-09 6.10879661E-03-6.11200452E-03-2.54117413E-10-1.29499792E-09 +48 14-8.61417148E-10 1.90886291E-09 5.21358558E-10-6.63816052E-01 6.64164642E-01 +49 1 0.00000000E+00-1.21499027E-10-2.59956405E-10-5.59840000E-10 2.03458720E-10 +49 2 1.95885428E-10-3.26735801E-01-3.26564312E-01-4.34937398E-09-1.10811154E-01 +49 3-1.10752994E-01 1.82023175E-09 9.49639327E-01 9.49140904E-01 7.31129862E-09 +49 4-4.94005075E-01-4.93745793E-01-6.15956160E-09 3.21799947E-01 3.21631049E-01 +49 5 2.00146902E-09-9.94952640E-02-9.94430434E-02-1.36181108E-09 7.05131424E-11 +49 6 4.83729689E-11 2.16289407E-11 3.10364202E-11-4.36206524E-02-4.35977579E-02 +49 7-4.52699607E-10-3.82829253E-10-1.74313781E-09 0.00000000E+00 2.09349478E-01 +49 8 2.09239600E-01-3.85887466E-10-3.73229321E-10-5.24041680E-10 0.00000000E+00 +49 9-3.45595823E-02-3.45414435E-02-1.22590887E-01-1.22526545E-01-1.13023240E-09 +49 10-5.47955351E-02-7.90350166E-10-5.48243099E-02-7.95877306E-10-1.26944328E-01 +49 11-1.26877700E-01-3.36758358E-11 3.14911905E-09-2.82352730E-09 3.37954829E-09 +49 12 6.55985091E-02 6.55640794E-02 3.93962271E-11-1.35656925E-01-1.35585725E-01 +49 13-1.84188354E-09-6.11201022E-03-6.10880229E-03-2.92928213E-10-7.58724932E-10 +49 14-1.75023588E-09 1.63472636E-09 2.39635513E-10 6.64164633E-01 6.63816043E-01 +50 1 3.53410411E-10 4.98480677E-10-1.98657763E-09 1.61200773E-09-1.19892620E-09 +50 2-1.07065550E-09-8.07393336E-01-8.07670119E-01-3.76164211E-09-2.74023952E-01 +50 3-2.74117891E-01 3.85968426E-09 2.68341124E+00 2.68433114E+00 2.49764353E-10 +50 4-1.80814593E+00-1.80876578E+00-5.03814620E-10 9.68276962E-01 9.68608898E-01 +50 5-1.07171206E-09-2.52042475E-01-2.52128878E-01-2.02177327E-10 2.07723491E-10 +50 6 2.10937178E-10-1.35495749E-11 9.74703883E-11 3.43254521E-02 3.43372193E-02 +50 7-3.30236128E-10-3.10047383E-10-8.51440361E-10-1.17962545E-10-1.21400345E-01 +50 8-1.21441962E-01 4.20147632E-10 4.23433913E-10-1.21025351E-10 4.77099978E-11 +50 9 7.67236465E-02 7.67499482E-02-4.57414764E-01-4.57571571E-01-5.12086445E-11 +50 10-2.04632224E-01-2.21558539E-10-2.04562098E-01-1.45941564E-10-1.75725219E-01 +50 11-1.75785460E-01-2.38378843E-11-1.05402517E-09 1.16202330E-09 2.16602919E-09 +50 12-3.29264808E-03-3.29377683E-03 1.81231022E-10 8.58423568E-02 8.58717845E-02 +50 13-1.01729946E-09-1.07928122E-01-1.07965121E-01-4.02475903E-10-1.65136157E-10 +50 14-3.58225114E-10 7.27055408E-10-1.91932498E-11-2.96506789E-01-2.96608435E-01 +51 1-3.49719017E-10-2.49714874E-10-7.89311983E-10 6.15383453E-10 5.04369955E-09 +51 2 2.81121690E-09-8.07670160E-01 8.07393376E-01 3.70319127E-09-2.74117860E-01 +51 3 2.74023922E-01-3.45991161E-09 2.68433119E+00-2.68341129E+00-8.12279829E-10 +51 4-1.80876580E+00 1.80814595E+00 1.80888308E-10 9.68608912E-01-9.68276976E-01 +51 5 1.13276620E-09-2.52128881E-01 2.52042478E-01 1.92149436E-10-4.36056429E-11 +51 6-2.00976116E-10-1.25658714E-10 0.00000000E+00 3.43372208E-02-3.43254537E-02 +51 7-1.97331725E-09-1.79066594E-09-1.68549466E-09 0.00000000E+00-1.21441959E-01 +51 8 1.21400341E-01-1.27408894E-09-1.34876781E-09-7.42010880E-10 0.00000000E+00 +51 9 7.67499487E-02-7.67236470E-02-4.57571587E-01 4.57414780E-01 3.26823882E-10 +51 10 2.04562112E-01 5.65708545E-11-2.04632238E-01 1.24226403E-10-1.75785470E-01 +51 11 1.75725229E-01 4.89178410E-11 1.14738078E-10-2.16844788E-10-2.25637248E-09 +51 12-3.29377484E-03 3.29264608E-03-1.23083296E-10 8.58717832E-02-8.58423555E-02 +51 13 3.27342567E-10-1.07965123E-01 1.07928124E-01 6.35075624E-10 1.73395555E-10 +51 14 1.75095177E-10 3.82064975E-11 5.83155025E-11-2.96608414E-01 2.96506768E-01 +52 1 2.68540948E-02 1.36864738E-03 3.80067853E-01-4.89186734E-01-3.55204159E+00 +52 2 1.55142212E+00-1.37622971E-10 3.07611528E-09 8.40990398E-01 5.06301947E-10 +52 3-2.52822950E-09 4.02556787E-01-7.46138444E-10-8.87037533E-10-3.07366343E+00 +52 4 5.08414194E-10 3.52055457E-10 2.39195741E+00-2.60328156E-10-5.74502459E-11 +52 5-2.90060153E+00 3.47735189E-11 1.13307974E-10-1.29261951E-01 1.87914675E-02 +52 6 1.87914675E-02-3.30557008E-02 1.16468376E-09-1.39405105E-11 3.46481002E-11 +52 7 2.85086241E-01 2.85086241E-01 3.96334982E-01-5.38719840E-10 4.64227979E-11 +52 8-4.01933248E-11-5.40139326E-01-5.40139326E-01-1.43149905E+00 4.60625535E-10 +52 9-4.40144657E-11 1.02404684E-10 5.73694402E-11 0.00000000E+00 4.74881451E-01 +52 10 4.59342483E-11 1.91966267E-01 2.69391284E-11 1.91966267E-01 6.12043093E-11 +52 11 4.67247235E-11-3.27825964E-09 2.09193794E+00-2.84280544E+00 4.48485568E+00 +52 12 1.42212498E-11-6.79137166E-11 2.49338332E-01-6.41868286E-11 1.55617306E-10 +52 13-2.23328834E-01 9.03972753E-11-2.47555319E-10-1.17931628E+00-4.75209673E-01 +52 14-4.75209673E-01 2.93386677E-01-1.07315117E-08-4.81297709E-11-6.94441611E-11 +53 1 8.31594977E-02 8.11764300E-02 3.26866407E-01-6.63026401E-01 6.83401142E-01 +53 2-1.23830366E+00 5.29791540E-10-4.19740467E-09 3.27991777E-01-3.64542311E-11 +53 3 4.60676135E-09 1.13738717E-01-1.14590784E-09 1.49380359E-11-6.97465998E-01 +53 4 7.68241837E-10 4.99411521E-10-5.33714450E-01-4.44495622E-10-3.66109872E-10 +53 5 4.41390965E-01 1.17301472E-10 6.10663011E-11 3.38571422E-01 2.23063431E-02 +53 6 2.23063431E-02-3.14571058E-02-2.11698575E-10-4.06684527E-11-7.50515929E-11 +53 7 4.78827186E-01 4.78827186E-01-3.06729284E-01 1.17635050E-09 3.68713506E-11 +53 8 1.36707862E-10 5.24527284E-01 5.24527284E-01 9.04314172E-01-8.89094681E-11 +53 9-4.23458014E-11-9.67772709E-11 1.97349503E-10-3.22889290E-10 3.69074106E-01 +53 10-1.36653314E-10-1.31384744E-01 3.84806171E-11-1.31384744E-01 7.26745519E-11 +53 11-3.14164695E-10-5.10739462E-09-3.58744591E+00 4.07750286E+00-2.05670500E+00 +53 12-4.49736918E-11 0.00000000E+00 1.28220747E-01 3.95647548E-11-6.63186484E-11 +53 13-8.96844784E-01 3.38770639E-11 1.40323284E-10 6.38861864E-01 1.40193083E-01 +53 14 1.40193083E-01 9.34021610E-01 4.19421092E-09 2.08891937E-10 4.17723386E-10 +54 1 1.77678008E-11 2.90808841E-11-8.48037154E-11 9.19604418E-11 2.48354865E-11 +54 2-1.64418558E-10-1.31488142E-09 2.40418264E-10 0.00000000E+00 7.15728831E-09 +54 3-1.93054087E-10-3.70055960E-11-1.27943307E-08-1.49522301E-10 1.22272420E-10 +54 4 7.28701932E-09 1.19534621E-10-1.27199484E-10-4.69303091E-09-4.50564312E-11 +54 5 5.45952741E-11 2.02497693E-09-4.78958488E-11 0.00000000E+00 4.41416240E-11 +54 6-4.76768404E-11 0.00000000E+00 2.26633031E-11 6.90645145E-10-2.39086911E-11 +54 7 9.47772873E-11-8.54008912E-11-4.39610386E-11 0.00000000E+00-2.77002706E-09 +54 8 1.32961345E-10 4.52503010E-11 7.33250855E-11 7.25246264E-11 0.00000000E+00 +54 9 4.95820809E-10-3.83832202E-11 2.12536579E-08-7.90569416E-01-7.08938300E-11 +54 10 1.06066017E+00 1.43137246E-08 9.50492561E-09-1.42536934E-08-3.49326219E-08 +54 11 2.14781289E-09-1.93034337E-09-9.51278728E-11 9.50753768E-11-2.92371977E-11 +54 12-1.46460278E-09 8.90132056E-11 0.00000000E+00 4.44550674E-09-2.55947210E-10 +54 13-4.47491511E-11-1.78326890E-09 1.36089206E-10 2.26374104E-11-1.92133286E-10 +54 14 2.34965424E-10 2.26516395E-11 3.46444954E-11-3.51914301E-09 2.12424317E-10 +55 1 1.03381610E-11 2.65611859E-11-4.70963305E-11 6.90571552E-11 7.68344768E-11 +55 2-2.61645700E-10 1.09264271E-10-1.31544537E-09 0.00000000E+00-7.32492049E-11 +55 3 7.15728012E-09 0.00000000E+00-2.85173107E-11-1.27961110E-08-3.53333053E-11 +55 4 5.83854172E-11 7.28734557E-09 3.14311116E-11-2.77609712E-11-4.69322134E-09 +55 5 5.49870742E-11-2.75328052E-11 2.02534896E-09 1.53797446E-11-2.28391879E-11 +55 6 2.66790714E-11 0.00000000E+00 5.33262723E-11 0.00000000E+00 6.90734828E-10 +55 7 1.77531063E-11 2.86400896E-11 4.36400576E-11 1.05098204E-10 6.35312918E-11 +55 8-2.77066104E-09 1.02294944E-10 8.74992050E-11 1.25926894E-10-1.75475404E-11 +55 9-2.42696298E-11 4.96006877E-10-7.90569416E-01 2.12612220E-08 6.58441260E-11 +55 10 9.50830685E-09 5.01429365E-10 1.06066017E+00-5.69071507E-10 1.25576345E-09 +55 11-3.49431130E-08 1.68598917E-08-3.45329720E-11-5.46303067E-11-1.17292436E-10 +55 12 5.33694788E-11-1.46507466E-09 0.00000000E+00-1.46258104E-10 4.44680799E-09 +55 13 2.95577449E-11 8.00988805E-11-1.78393786E-09 2.77008872E-11 3.29375984E-11 +55 14 4.70234981E-11 3.90972879E-11-2.52423249E-10 1.27093327E-10-3.52024512E-09 +56 1 2.36219786E-11 5.24785129E-11-1.66669011E-10 1.35221543E-10 1.24679799E-11 +56 2 1.52379835E-11-2.25745362E-11 1.94394579E-09-7.77493530E-11 1.43228473E-10 +56 3-1.98775881E-09 8.25031766E-11-2.54895441E-10-4.35717482E-10 3.79012187E-11 +56 4 1.97737469E-10 8.64924950E-11 0.00000000E+00-5.79704672E-11-1.06541648E-10 +56 5 0.00000000E+00-5.25442101E-11 1.17080401E-10 0.00000000E+00-1.68636801E-03 +56 6 1.68636801E-03 0.00000000E+00 0.00000000E+00-6.74825646E-11 9.68780839E-11 +56 7-4.46889181E-03 4.46889173E-03-5.58172243E-11 0.00000000E+00 1.90236439E-10 +56 8-2.80277219E-10 6.02360567E-04-6.02360579E-04 0.00000000E+00 0.00000000E+00 +56 9-4.93042798E-11 4.69123730E-11-1.95908018E-09-1.06539400E-08-3.97754354E-11 +56 10 1.85627723E-08-8.65960398E-01 0.00000000E+00 8.65960398E-01 2.69604147E-09 +56 11-3.69593773E-09 0.00000000E+00-2.34013274E-11 0.00000000E+00 1.96189070E-11 +56 12 1.21317010E-10-1.61728148E-10 0.00000000E+00-3.48563542E-10 4.68330306E-10 +56 13-1.26587896E-11 1.85919284E-10-2.07034880E-10 0.00000000E+00 1.23738893E-02 +56 14-1.23738892E-02 0.00000000E+00 0.00000000E+00 2.74442825E-10-3.62493747E-10 +57 1 2.36565269E-09 4.35808341E-09-1.95944897E-09-6.18231498E-09-1.33678040E-08 +57 2-8.58622531E-09 1.90804043E-09 0.00000000E+00-7.69721854E-09-1.93002484E-09 +57 3-1.13634147E-10 1.53280462E-08-3.97987667E-10 2.47828774E-10-7.94296390E-09 +57 4 7.48169254E-11-1.83900861E-10-1.01610371E-08-1.09208597E-10 4.25268549E-11 +57 5-1.01921460E-08 1.12470213E-10 5.10132159E-11 7.88556674E-10 1.24143218E-10 +57 6 1.24143217E-10 2.89105003E-10 1.94725004E-03 9.40004787E-11 7.17809933E-11 +57 7 6.24013163E-09 6.24013163E-09-1.17661487E-08 5.16023173E-03-2.84234422E-10 +57 8-1.96075221E-10 4.37897973E-09 4.37897973E-09 1.64305052E-09-6.95546075E-04 +57 9 3.53245054E-11 4.72510805E-11 1.57708382E-08 6.10840169E-11-2.03256773E-08 +57 10 2.75735091E-09 1.31843877E-08-1.67927530E-08 1.31843876E-08-3.87809277E-09 +57 11-2.91105069E-09 9.99924938E-01-3.46946953E-08 3.61392090E-08 9.40218986E-09 +57 12-1.57354552E-10-1.31438655E-10 1.74200948E-10 4.67259057E-10 3.72601986E-10 +57 13-1.99688775E-08-1.90253564E-10-1.75769725E-10 2.10136626E-09 1.28475776E-09 +57 14 1.28475776E-09 1.72051783E-08-1.42881366E-02-3.61220869E-10-2.83452705E-10 +58 1 2.08404534E-11-9.84900566E-11 7.78526021E-10-8.57578878E-10-6.12813832E-10 +58 2-5.27534605E-10-2.76587110E-03-2.76378778E-03 1.56915603E-09 4.37942258E-03 +58 3 4.37612392E-03-1.59255893E-09-1.30108225E-02-1.30010226E-02-1.40210181E-10 +58 4 2.96979582E-02 2.96755893E-02-3.15747112E-10 1.39963054E-03 1.39857632E-03 +58 5-1.39174920E-10-1.71552944E-02-1.71423728E-02 3.62915685E-11-5.89255920E-11 +58 6-4.57288176E-11 9.19366329E-11 1.86251869E-11-6.18901153E-03-6.18434989E-03 +58 7 5.06470396E-10 4.98101560E-10-7.14219348E-11 0.00000000E+00 4.45672740E-02 +58 8 4.45337054E-02 2.24398701E-10 2.26797432E-10 2.08359638E-10 0.00000000E+00 +58 9-1.15044278E-02-1.14957625E-02-4.32960092E-01-4.32633981E-01-4.14933224E-10 +58 10-1.93479768E-01-2.16280245E-10-1.93625608E-01 1.04302083E-09 7.72550246E-01 +58 11 7.71968352E-01 4.44492616E-09-8.57172575E-10 8.24893896E-10 1.43744749E-10 +58 12 3.01259143E-02 3.01032231E-02 1.28105255E-11-9.30670014E-02-9.29969022E-02 +58 13-4.69777625E-10 4.56661270E-02 4.56317307E-02 5.17838761E-11 8.36767076E-11 +58 14 7.29775358E-11 4.06793525E-10-7.27377819E-11 7.65389773E-02 7.64813272E-02 +59 1-1.63958594E-10-4.79594997E-10 1.75991122E-09-1.44614161E-09-8.52251825E-10 +59 2-4.09313626E-10 2.76378897E-03-2.76587223E-03 1.52859079E-09-4.37612726E-03 +59 3 4.37942587E-03-1.46136336E-09 1.30010261E-02-1.30108260E-02-5.27064742E-10 +59 4-2.96755915E-02 2.96979604E-02 1.82394934E-10-1.39857436E-03 1.39962858E-03 +59 5-2.01338353E-10 1.71423728E-02-1.71552944E-02 5.09720020E-11-2.92999189E-11 +59 6 0.00000000E+00 1.91297917E-11 0.00000000E+00 6.18435074E-03-6.18901238E-03 +59 7 6.57531081E-10 6.42358588E-10 5.12271431E-10 0.00000000E+00-4.45337065E-02 +59 8 4.45672751E-02 1.97010246E-10 2.05434924E-10 1.77447198E-10 0.00000000E+00 +59 9 1.14957634E-02-1.15044287E-02 4.32633945E-01-4.32960056E-01 2.12523357E-10 +59 10-1.93625658E-01-3.54084726E-09 1.93479816E-01 3.73635465E-09-7.71968352E-01 +59 11 7.72550246E-01-6.95012695E-10-3.18851084E-10 2.31377526E-10 1.26768272E-10 +59 12-3.01032218E-02 3.01259130E-02 0.00000000E+00 9.29969021E-02-9.30670013E-02 +59 13-7.94656927E-11-4.56317311E-02 4.56661274E-02-4.63099106E-11 1.11801948E-10 +59 14-1.36313894E-11 1.13844011E-10 1.81650615E-11-7.64813266E-02 7.65389767E-02 +60 1-2.59826051E-01-6.64495532E-01 2.29773357E+00-1.72339661E+00-7.85877216E-01 +60 2-2.44902655E-01-3.63919238E-11-6.71421039E-09-8.47851943E-03 1.09081522E-10 +60 3 6.74146905E-09-8.19970768E-03-3.38212238E-11 2.11469842E-09-2.38656391E-01 +60 4 0.00000000E+00-7.33751697E-10 7.21170109E-01 2.18419891E-11 2.82586531E-10 +60 5 7.95055649E-02 0.00000000E+00-3.31912669E-11 3.08146917E-02-1.08648745E-02 +60 6-1.08648745E-02-3.99399305E-02-7.62913645E-10-1.96396312E-11-3.04950264E-11 +60 7 6.72718926E-01 6.72718926E-01 1.31983018E+00 1.23811185E-09 2.52577160E-11 +60 8 2.81107789E-11 1.46163671E-01 1.46163671E-01 1.83721297E-01-5.45302796E-10 +60 9 0.00000000E+00 0.00000000E+00-2.33004566E-10-1.39666833E-09 9.98519532E-01 +60 10-5.44542859E-10-6.14195216E-01-1.66891518E-10-6.14195216E-01 4.23979167E-10 +60 11-5.12498782E-11 2.19108287E-08 9.86610173E-01-1.04876438E+00-2.16111928E-01 +60 12 0.00000000E+00 2.07176607E-11 3.85970259E-03-2.66713183E-11-4.74969544E-11 +60 13 6.79271305E-01 0.00000000E+00 2.02744579E-11-1.37536639E-01-6.10036545E-02 +60 14-6.10036545E-02-5.29195493E-01-6.87362279E-10 2.70247156E-11-7.83770669E-11 +61 1-1.37754531E+00-3.78534651E+00 1.34112513E+01-1.06758915E+01-5.29657801E+00 +61 2-3.12180296E+00-5.30365672E-10-4.79428973E-08-9.97823081E-03 6.42555036E-10 +61 3 4.81756342E-08 8.65618434E-02 6.58945168E-10 1.39541259E-08 6.09739190E-02 +61 4-2.74069411E-10-3.96564778E-09-1.55121437E-01 1.48132921E-10 1.29069285E-09 +61 5-1.46506319E-01-3.50760101E-11-6.70966096E-11-5.95849607E-03-1.18023244E-01 +61 6-1.18023244E-01-1.10914569E-01-4.52201203E-10 4.09373953E-11 4.53550974E-11 +61 7 4.53415709E+00 4.53415709E+00 4.34465267E+00 2.16492675E-10-2.77652554E-11 +61 8-1.69911653E-11 1.46484304E+00 1.46484304E+00 1.43987179E+00-2.73200250E-10 +61 9 0.00000000E+00-8.99714116E-11-4.27391188E-10-7.55246157E-09-2.30687941E-01 +61 10-3.37866802E-09 7.68183470E-02-1.70312903E-10 7.68183470E-02-1.81843315E-10 +61 11-3.61695222E-09-2.76577342E-09-4.14678158E-01 2.13753746E-01 3.15980412E-01 +61 12 1.95226078E-11 1.50773004E-10-2.18916437E-02 0.00000000E+00-1.75952173E-10 +61 13-1.40294607E-01 0.00000000E+00 1.37257372E-10-9.62629361E-02 3.80408208E-02 +61 14 3.80408208E-02 3.02578797E-01 1.00456037E-10 0.00000000E+00-1.50858921E-10 +62 1-3.85969159E-02-1.49825948E-01 6.66644047E-01-7.41426172E-01 2.45070206E+00 +62 2-1.89121785E+00 4.29685222E-10-9.14265205E-10 6.17552969E-02-4.53891903E-10 +62 3 1.28427356E-09-2.84081213E-01-1.82137808E-10 1.36645908E-10 1.86302177E-02 +62 4 4.22548151E-11 2.29010157E-10-1.18022392E+00-3.57092346E-11-2.33222764E-10 +62 5 1.60031313E+00 2.34334111E-11 4.89858846E-11 5.69542819E-01 2.09877450E-03 +62 6 2.09877450E-03-2.21021571E-02-1.76953310E-10 0.00000000E+00 0.00000000E+00 +62 7 3.86580559E-01 3.86580559E-01-3.05500847E-01 3.26994968E-10-2.73417032E-11 +62 8-1.52243494E-11 8.16734414E-01 8.16734414E-01 1.57762147E+00 1.02600570E-10 +62 9 0.00000000E+00-4.96768555E-11 9.64334247E-11-4.06173229E-10 1.68057593E-01 +62 10-1.77541089E-10 1.76870779E-01 7.88718735E-11 1.76870779E-01 5.91511089E-11 +62 11-1.46508051E-10 9.26007786E-11-1.29681790E+00 6.67775838E+00-5.11969805E+00 +62 12-3.32255433E-11 0.00000000E+00 7.88032923E-03 6.67295677E-11-1.80917084E-11 +62 13-7.15201914E-01-2.83683078E-11 1.07351262E-10 1.28645210E+00-1.53200770E+00 +62 14-1.53200770E+00-1.17326548E+00-3.18628342E-09-6.24008591E-11-9.22541404E-11 +63 1-1.35371041E-09-3.01547237E-09 1.22077410E-08-9.32883448E-09-1.10310944E-08 +63 2-2.73937737E-10-2.36530192E-01 2.35724478E-01 2.14305350E-08 8.08874764E-01 +63 3-8.06119423E-01-2.30994149E-08 2.92770196E+00-2.91772908E+00-1.72812927E-08 +63 4-1.11888359E+00 1.11507224E+00 7.35555613E-09 5.41677716E-01-5.39832552E-01 +63 5-6.45923131E-09-1.43902720E-01 1.43412532E-01 3.47630434E-10-1.64463957E-10 +63 6-1.47673855E-10-1.87374269E-10 0.00000000E+00 1.49010804E-03-1.48503215E-03 +63 7 4.49263930E-09 4.47683180E-09 4.62245222E-09 0.00000000E+00-9.32614150E-03 +63 8 9.29437305E-03 5.49149143E-10 5.56259870E-10-1.02693288E-09 0.00000000E+00 +63 9 2.65476636E-02-2.64572320E-02-1.94730871E+00 1.94067542E+00 1.01236235E-08 +63 10 8.67896433E-01 4.55295196E-09-8.70862929E-01 4.53208781E-09-8.73464870E-01 +63 11 8.70489511E-01 0.00000000E+00 1.39886916E-10-3.14264420E-09 7.27750084E-09 +63 12 6.26897660E-03-6.24762204E-03 1.78573027E-10 1.42278712E-02-1.41794056E-02 +63 13 1.00446482E-10-5.02870231E-02 5.01157261E-02-2.15449505E-09 3.70531539E-10 +63 14 3.71762631E-10 9.99361742E-10 0.00000000E+00-8.80932193E-03 8.77931397E-03 +64 1 1.56042846E-09 3.76950908E-09-1.50921472E-08 1.17397144E-08 1.29494887E-08 +64 2 5.63500387E-10-2.35724448E-01-2.36530161E-01-2.30653689E-08 8.06119385E-01 +64 3 8.08874725E-01 2.47487177E-08 2.91772909E+00 2.92770198E+00 1.81386072E-08 +64 4-1.11507225E+00-1.11888360E+00-7.75853193E-09 5.39832562E-01 5.41677726E-01 +64 5 6.96376400E-09-1.43412535E-01-1.43902723E-01-3.09600601E-10 1.81041413E-10 +64 6 1.79048593E-10 2.35665145E-10 0.00000000E+00 1.48503293E-03 1.49010881E-03 +64 7-5.57449688E-09-5.57200150E-09-5.74236614E-09 0.00000000E+00-9.29437400E-03 +64 8-9.32614245E-03-7.52630714E-10-7.52861977E-10 1.00316224E-09 0.00000000E+00 +64 9 2.64572332E-02 2.65476648E-02-1.94067542E+00-1.94730871E+00-1.05687927E-08 +64 10-8.70862929E-01-4.76083012E-09-8.67896433E-01-4.73474954E-09-8.70489510E-01 +64 11-8.73464870E-01 0.00000000E+00-9.79755768E-11 3.57290609E-09-8.12267578E-09 +64 12 6.24762218E-03 6.26897674E-03-1.94058123E-10 1.41794064E-02 1.42278721E-02 +64 13-1.02936951E-10-5.01157279E-02-5.02870250E-02 2.38226758E-09-4.56225845E-10 +64 14-4.65949716E-10-1.15783228E-09 0.00000000E+00-8.77931448E-03-8.80932244E-03 +65 1 3.04217877E-02 1.43506959E-01-5.70799964E-01 4.45888189E-01 1.80323189E+00 +65 2-7.74462841E-01-2.90229333E-10-1.15980716E-08-2.55597074E-01 2.16493645E-10 +65 3 8.09471377E-09 9.67756521E-01-2.00461636E-10-1.43373408E-08 4.45577333E+00 +65 4 8.31349954E-11 5.75704036E-09-2.07108436E+00-4.64145180E-11-2.83440910E-09 +65 5 1.71487597E+00 2.66125867E-11 8.34973667E-10-7.80792126E-02 4.72252700E-04 +65 6 4.72252703E-04 1.02970276E-02 2.61130542E-10 0.00000000E+00 1.76885355E-11 +65 7-2.32295548E-01-2.32295548E-01-3.42466856E-01-2.35236833E-10-1.32078548E-11 +65 8 0.00000000E+00 2.49670538E-01 2.49670538E-01 6.60371824E-01 1.29647662E-10 +65 9 1.09338349E-11-7.43455083E-11 1.60508815E-10 1.00033760E-08-2.80294159E+00 +65 10 4.47551179E-09-1.25025260E+00 7.83092042E-11-1.25025260E+00 5.87562108E-11 +65 11 4.51347959E-09-9.25106114E-11-1.32812120E-01 1.23184720E+00-2.03064111E+00 +65 12 0.00000000E+00-4.37080342E-11-4.01044993E-02 0.00000000E+00-1.90210938E-11 +65 13-1.08223198E-01-1.77692126E-11 1.57872909E-10 5.97036988E-01-1.89643740E-01 +65 14-1.89643740E-01-3.18737244E-01-1.97574917E-10-1.19140366E-11 1.16200235E-11 +66 1-3.87254499E+00 6.19941506E-01 8.54348013E+00-4.00143251E+00-1.93344691E+00 +66 2-1.19399064E+00 0.00000000E+00-8.43170523E-09-6.15757248E-02 0.00000000E+00 +66 3 8.36970981E-09 6.14727099E-02 0.00000000E+00 2.32567850E-09-3.07585725E-02 +66 4 0.00000000E+00-8.65561543E-10 9.93502073E-03 0.00000000E+00 5.11210944E-10 +66 5-5.05789640E-02 0.00000000E+00-1.46573715E-10 5.85711647E-03-9.31673557E-01 +66 6-9.31673557E-01-9.33054925E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 +66 7 1.67559487E+00 1.67559487E+00 1.65819592E+00 1.38188232E-11 0.00000000E+00 +66 8 0.00000000E+00 5.57547934E-01 5.57547934E-01 5.51818336E-01-2.78414492E-11 +66 9 0.00000000E+00 3.93075059E-11 1.17274773E-11-1.16574697E-09 1.28419597E-02 +66 10-5.20032466E-10 9.31859607E-03 0.00000000E+00 9.31859607E-03 0.00000000E+00 +66 11-5.22062115E-10-1.46607421E-10-5.20672154E-02 3.13012680E-02 7.27531825E-02 +66 12 0.00000000E+00 0.00000000E+00-8.14259187E-03 0.00000000E+00 1.41757232E-11 +66 13 2.97680242E-03 0.00000000E+00-7.30588388E-11-4.24038689E-02-7.30259860E-03 +66 14-7.30259860E-03 4.14970243E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 +67 1-7.71839990E-09-6.66912143E-09 1.80903910E-08-2.86512812E-08-3.39150904E-08 +67 2-3.61756578E-10 2.66985848E+01 2.66130086E+01 4.71973003E-07-2.64993262E+01 +67 3-2.64143887E+01-4.67857580E-07-5.11057444E+00-5.09419366E+00-9.32240124E-08 +67 4 1.32433881E+00 1.32009394E+00 2.77888592E-08-6.12657810E-01-6.10694075E-01 +67 5-2.31209117E-08 1.62804532E-01 1.62282700E-01 1.68399213E-09 8.77372640E-09 +67 6 8.77636094E-09 8.68082772E-09 0.00000000E+00-2.25353240E-03-2.24630922E-03 +67 7 1.28439388E-08 1.28343336E-08 1.29912947E-08 0.00000000E+00 1.00674650E-02 +67 8 1.00351960E-02 1.54912573E-09 1.56611889E-09-3.98603082E-09 0.00000000E+00 +67 9-3.00630246E-02-2.99666645E-02 2.62000118E+00 2.61160337E+00 4.69159031E-08 +67 10 1.16794453E+00 2.10012298E-08 1.17170015E+00 2.09411991E-08 1.17232282E+00 +67 11 1.16856521E+00-3.73497177E-11-1.50160366E-10-6.70851534E-09 2.35841434E-08 +67 12-5.49477559E-03-5.47716334E-03 3.91951355E-10-1.65717619E-02-1.65186449E-02 +67 13 2.08749177E-10 5.69809421E-02 5.67983027E-02-7.17677341E-09 3.62211645E-10 +67 14 3.62133147E-10 2.16032783E-09 0.00000000E+00 7.38676937E-03 7.36309277E-03 +68 1-7.38147631E-09-6.58915070E-09 1.90891706E-08-2.80193049E-08-3.68118891E-08 +68 2 1.01334398E-09-2.66130086E+01 2.66985848E+01 5.78450935E-07 2.64143887E+01 +68 3-2.64993262E+01-5.73439987E-07 5.09419366E+00-5.11057443E+00-1.14562038E-07 +68 4-1.32009394E+00 1.32433880E+00 3.41073777E-08 6.10694072E-01-6.12657807E-01 +68 5-2.72472227E-08-1.62282699E-01 1.62804532E-01 2.22980824E-09 8.04124145E-09 +68 6 8.04592340E-09 7.90330671E-09 0.00000000E+00 2.24630913E-03-2.25353231E-03 +68 7 1.28907167E-08 1.28744561E-08 1.32939188E-08 0.00000000E+00-1.00351957E-02 +68 8 1.00674646E-02 1.10579067E-09 1.13356974E-09-5.13174442E-09 0.00000000E+00 +68 9 2.99666634E-02-3.00630235E-02-2.61160336E+00 2.62000118E+00 5.76971875E-08 +68 10 1.17170015E+00 2.58236742E-08-1.16794453E+00 2.57568743E-08-1.16856521E+00 +68 11 1.17232282E+00 3.44580170E-11-9.81884060E-11-8.07779375E-09 2.68195061E-08 +68 12 5.47716357E-03-5.49477581E-03 4.31240153E-10 1.65186440E-02-1.65717610E-02 +68 13 5.67618327E-10-5.67983006E-02 5.69809400E-02-8.29666892E-09 4.37570423E-10 +68 14 4.42658389E-10 2.56197718E-09 0.00000000E+00-7.36309262E-03 7.38676922E-03 +69 1 4.74646777E-01 1.68055310E-01 5.82417027E-01 1.09409105E+00-1.12062136E+00 +69 2 9.24270051E-01 7.28672259E-08-7.18753293E-07 3.78898129E+01-7.23119156E-08 +69 3 7.13743461E-07-3.75664306E+01-1.38063974E-08 1.41413981E-07-7.58637769E+00 +69 4 3.54695097E-09-3.73768621E-08 2.27576229E+00-1.62933728E-09 1.74796579E-08 +69 5-1.66258560E+00 4.16024722E-10-4.85582449E-09 1.65595868E-01-8.69818085E-01 +69 6-8.69818085E-01-8.82130570E-01 0.00000000E+00 0.00000000E+00 6.01930974E-11 +69 7-2.42909104E-01-2.42909104E-01-1.73340111E-01 3.00645455E-11 2.93167977E-11 +69 8-2.57520560E-10-3.16502656E-01-3.16502656E-01-6.61750475E-01-4.50544777E-11 +69 9-8.81170660E-11 7.62007168E-10 7.07167270E-09-7.27207938E-08 3.82565222E+00 +69 10-3.25225929E-08 1.70941036E+00 3.16279249E-09 1.70941036E+00 3.16077952E-09 +69 11-3.26233259E-08 3.30906016E-10 4.80678010E-02-5.76442822E-01 1.51945677E+00 +69 12-1.35485132E-11 1.88919468E-10 2.30421238E-02-5.04972975E-11 3.53573021E-10 +69 13 8.81893229E-02 1.69389724E-10-1.38717281E-09-4.86490768E-01 3.25676999E-02 +69 14 3.25676999E-02 1.49331600E-01-5.04254167E-11 2.08116042E-11-1.90257673E-10 +70 1 4.03343669E+00 1.77552859E+00 1.80251067E+00 1.05082423E+01 2.89347816E+00 +70 2 1.40505893E+00-6.33988208E-09 1.60318305E-07-4.98813742E+00 6.29247791E-09 +70 3-1.59192033E-07 4.94271698E+00 1.20510585E-09-3.10742673E-08 1.02920762E+00 +70 4-3.13474214E-10 8.04094684E-09-3.19935366E-01 1.47250747E-10-3.65598087E-09 +70 5 2.71295687E-01-3.89705555E-11 9.50053462E-10-2.96463578E-02-6.78394283E+00 +70 6-6.78394283E+00-6.78167024E+00-1.07035546E-11 0.00000000E+00-1.26102260E-11 +70 7-3.07892980E+00-3.07892980E+00-3.07906546E+00 5.47159419E-11 0.00000000E+00 +70 8 5.60925101E-11-6.82016932E-01-6.82016932E-01-6.32615214E-01-1.12718346E-10 +70 9 1.22721978E-11-1.64509162E-10-6.16711431E-10 1.59930282E-08-5.14988462E-01 +70 10 7.15211776E-09-2.31911710E-01-2.75696634E-10-2.31911710E-01-2.76733658E-10 +70 11 7.16757936E-09-2.31701757E-11 2.65508160E-02 6.24877706E-02-2.73047112E-01 +70 12 0.00000000E+00-3.81916666E-11 1.59924494E-02 0.00000000E+00-9.07389724E-11 +70 13-3.72932425E-02-1.52197190E-11 3.19611333E-10 1.15883021E-01 3.91034354E-03 +70 14 3.91034354E-03-5.02868886E-02 0.00000000E+00 0.00000000E+00 4.48985997E-11 + $END + POPULATION ANALYSIS +MN 13.98365 1.01635 14.19025 .80975 +O 7.01635 -1.01635 6.80975 -.80975 + MOMENTS AT POINT 1 X,Y,Z= .000000 .000000 .611687 + DIPOLE .000000 .000000 -9.323846 diff --git a/examples/n2/n2.inp b/examples/n2/n2.inp new file mode 100644 index 00000000..63b969ff --- /dev/null +++ b/examples/n2/n2.inp @@ -0,0 +1,87 @@ + $CONTRL SCFTYP=RHF CITYP=NONE MULT=1 ECP=READ ISPHER=1 $END + $SYSTEM MWORDS=60 KDIAG=3 $END + $SCF DIIS=.F. RSTRCT=.T. MVOQ=10 $END + $DATA +N2 experimental bond length +C1 +N 7. 0.00 0.00 0.54875 + S 8 + 1 47.060276 0.10656288E-02 + 2 30.249283 -0.48950333E-02 + 3 17.336468 0.12675333E-01 + 4 5.0682259 -0.21338198E-01 + 5 4.4719543 -0.15430793 + 6 0.94583613 0.37090391 + 7 0.43119121 0.57003045 + 8 0.19367546 0.18613993 + S 1 + 1 1.293000000 1.000000000 + S 1 + 1 0.1787000000 1.000000000 + P 8 + 1 26.800018 0.55202533E-03 + 2 10.427275 0.21705279E-01 + 3 10.711001 0.95714470E-02 + 4 4.4962521 0.94816543E-01 + 5 2.0193243 0.19748625 + 6 0.91650265 0.36549339 + 7 0.40482002 0.37327099 + 8 0.17522678 0.14081325 + P 1 + 1 0.5550000000 1.000000000 + P 1 + 1 0.1725000000 1.000000000 + D 1 + 1 1.654000000 1.000000000 + D 1 + 1 0.4690000000 1.000000000 + F 1 + 1 1.093000000 1.000000000 + +N 7. 0.00 0.00 -0.54875 + S 8 + 1 47.060276 0.10656288E-02 + 2 30.249283 -0.48950333E-02 + 3 17.336468 0.12675333E-01 + 4 5.0682259 -0.21338198E-01 + 5 4.4719543 -0.15430793 + 6 0.94583613 0.37090391 + 7 0.43119121 0.57003045 + 8 0.19367546 0.18613993 + S 1 + 1 1.293000000 1.000000000 + S 1 + 1 0.1787000000 1.000000000 + P 8 + 1 26.800018 0.55202533E-03 + 2 10.427275 0.21705279E-01 + 3 10.711001 0.95714470E-02 + 4 4.4962521 0.94816543E-01 + 5 2.0193243 0.19748625 + 6 0.91650265 0.36549339 + 7 0.40482002 0.37327099 + 8 0.17522678 0.14081325 + P 1 + 1 0.5550000000 1.000000000 + P 1 + 1 0.1725000000 1.000000000 + D 1 + 1 1.654000000 1.000000000 + D 1 + 1 0.4690000000 1.000000000 + F 1 + 1 1.093000000 1.000000000 + + $END + $ECP +N-LN2 GEN 2 1 + 3 P + 5. 1 7.348473 + 36.742369 3 7.348473 + -29.945309 2 7.239787 + 3 S-P + 60.6949292 2 7.04441431 + -27.5668222 2 5.93242526 + 7.59799606 2 6.67558402 +N-LN2 + $END diff --git a/examples/n2/n2.out b/examples/n2/n2.out new file mode 100644 index 00000000..ff13507c --- /dev/null +++ b/examples/n2/n2.out @@ -0,0 +1,1503 @@ +mkdir: cannot create directory `/tmp/lubos': File exists +----- GAMESS execution script ----- +This job is running on host heze.physics.ncsu.edu at Tue Jun 22 18:00:30 EDT 2004 +Available scratch disk space (Kbyte units) at beginning of the job is +Filesystem 1k-blocks Used Available Use% Mounted on +/dev/hda3 74628028 26398868 44438224 38% / +cp n2.inp /tmp/lubos/n2.F05 +unset echo +setenv EXTBAS /dev/null +setenv IRCDATA /tmp/lubos/n2.irc +setenv INPUT /tmp/lubos/n2.F05 +setenv PUNCH /tmp/lubos/n2.pun +setenv AOINTS /tmp/lubos/n2.F08 +setenv MOINTS /tmp/lubos/n2.F09 +setenv DICTNRY /tmp/lubos/n2.F10 +setenv DRTFILE /tmp/lubos/n2.F11 +setenv CIVECTR /tmp/lubos/n2.F12 +setenv CASINTS /tmp/lubos/n2.F13 +setenv CIINTS /tmp/lubos/n2.F14 +setenv WORK15 /tmp/lubos/n2.F15 +setenv WORK16 /tmp/lubos/n2.F16 +setenv CSFSAVE /tmp/lubos/n2.F17 +setenv FOCKDER /tmp/lubos/n2.F18 +setenv DASORT /tmp/lubos/n2.F20 +setenv DFTINTS /tmp/lubos/n2.F21 +setenv DFTGRID /tmp/lubos/n2.F22 +setenv JKFILE /tmp/lubos/n2.F23 +setenv ORDINT /tmp/lubos/n2.F24 +setenv EFPIND /tmp/lubos/n2.F25 +setenv PCMDATA /tmp/lubos/n2.F26 +setenv PCMINTS /tmp/lubos/n2.F27 +setenv MLTPL /tmp/lubos/n2.F28 +setenv MLTPLT /tmp/lubos/n2.F29 +setenv DAFL30 /tmp/lubos/n2.F30 +setenv SOINTX /tmp/lubos/n2.F31 +setenv SOINTY /tmp/lubos/n2.F32 +setenv SOINTZ /tmp/lubos/n2.F33 +setenv SORESC /tmp/lubos/n2.F34 +setenv SIMEN /tmp/lubos/n2.simen +setenv SIMCOR /tmp/lubos/n2.simcor +setenv GCILIST /tmp/lubos/n2.F37 +setenv SOCCDAT /tmp/lubos/n2.F40 +setenv AABB41 /tmp/lubos/n2.F41 +setenv BBAA42 /tmp/lubos/n2.F42 +setenv BBBB43 /tmp/lubos/n2.F43 +setenv MCQD50 /tmp/lubos/n2.F50 +setenv MCQD51 /tmp/lubos/n2.F51 +setenv MCQD52 /tmp/lubos/n2.F52 +setenv MCQD53 /tmp/lubos/n2.F53 +setenv MCQD54 /tmp/lubos/n2.F54 +setenv MCQD55 /tmp/lubos/n2.F55 +setenv MCQD56 /tmp/lubos/n2.F56 +setenv MCQD57 /tmp/lubos/n2.F57 +setenv MCQD58 /tmp/lubos/n2.F58 +setenv MCQD59 /tmp/lubos/n2.F59 +setenv MCQD60 /tmp/lubos/n2.F60 +setenv MCQD61 /tmp/lubos/n2.F61 +setenv MCQD62 /tmp/lubos/n2.F62 +setenv MCQD63 /tmp/lubos/n2.F63 +setenv MCQD64 /tmp/lubos/n2.F64 +setenv CCREST /tmp/lubos/n2.F70 +setenv CCRLE /tmp/lubos/n2.F71 +setenv CCINTS /tmp/lubos/n2.F72 +setenv CCT1AMP /tmp/lubos/n2.F73 +setenv CCT2AMP /tmp/lubos/n2.F74 +setenv CCT3AMP /tmp/lubos/n2.F75 +setenv CCVM /tmp/lubos/n2.F76 +setenv CCVE /tmp/lubos/n2.F77 +unset echo +ddikick.x n2 /home/apps/gamess gamess.00.x /tmp/lubos 1 heze.physics.ncsu.edu +Initiating 1 compute processes to run job n2 +Executable gamess.00.x will be run from directory /home/apps/gamess +Working scratch directory on each host will be /tmp/lubos +Running gamess.00.x on heze.physics.ncsu.edu as compute process 0 +Running gamess.00.x on heze.physics.ncsu.edu as data server 1 + ****************************************************** + * GAMESS VERSION = 16 FEB 2002 (R4) * + * FROM IOWA STATE UNIVERSITY * + * M.W.SCHMIDT, K.K.BALDRIDGE, J.A.BOATZ, S.T.ELBERT, * + * M.S.GORDON, J.H.JENSEN, S.KOSEKI, N.MATSUNAGA, * + * K.A.NGUYEN, S.J.SU, T.L.WINDUS, * + * TOGETHER WITH M.DUPUIS, J.A.MONTGOMERY * + * J.COMPUT.CHEM. 14, 1347-1363(1993) * + ******************* PC-UNIX VERSION ****************** + + SINCE 1993, STUDENTS AND POSTDOCS WORKING AT IOWA STATE UNIVERSITY + AND ALSO IN THEIR VARIOUS JOBS AFTER LEAVING ISU HAVE MADE IMPORTANT + CONTRIBUTIONS TO THE CODE: + CHRISTINE AIKENS, ROB BELL, PRADIPTA BANDYOPADHYAY, BRETT BODE, + GALINA CHABAN, WEI CHEN, CHEOL CHOI, PAUL DAY, DMITRI FEDOROV, + GRAHAM FLETCHER, MARK FREITAG, KURT GLAESEMANN, GRANT MERRILL, + MIKE PAK, JIM SHOEMAKER, TETSUYA TAKETSUGU, SIMON WEBB. + + ADDITIONAL CODE HAS BEEN PROVIDED BY COLLABORATORS IN OTHER GROUPS: + IOWA STATE UNIVERSITY: JOE IVANIC, KLAUS RUEDENBERG + UNIVERSITY OF TOKYO: KIMIHIKO HIRAO, HARUYUKI NAKANO, TAKAHITO + NAKAJIMA, TAKAO TSUNEDA, MUNEAKI KAMIYA, SUSUMU YANAGISAWA + ODENSE UNIVERSITY: FRANK JENSEN + UNIVERSITY OF IOWA: VISVALDAS KAIRYS, HUI LI + NATIONAL INST. OF STANDARDS AND TECHNOLOGY: WALT STEVENS, DAVID GARMER + UNIVERSITY OF PISA: BENEDETTA MENNUCCI, JACOPO TOMASI + UNIVERSITY OF MEMPHIS: HENRY KURTZ, PRAKASHAN KORAMBATH + UNIVERSITY OF ALBERTA: MARIUSZ KLOBUKOWSKI + UNIVERSITY OF NEW ENGLAND: MARK SPACKMAN + MIE UNIVERSITY: HIROAKI UMEDA + MICHIGAN STATE UNIVERSITY: KAROL KOWALSKI, PIOTR PIECUCH + UNIVERSITY OF SILESIA: MONIKA MUSIAL, STANISLAW KUCHARSKI + + EXECUTION OF GAMESS BEGUN Tue Jun 22 18:00:30 2004 + + ECHO OF THE FIRST FEW INPUT CARDS - + INPUT CARD> $CONTRL SCFTYP=RHF CITYP=NONE MULT=1 ECP=READ ISPHER=1 $END + INPUT CARD> $SYSTEM MWORDS=60 KDIAG=3 $END + INPUT CARD> $SCF DIIS=.F. RSTRCT=.T. MVOQ=10 $END + INPUT CARD> $DATA + INPUT CARD>N2 experimental bond length + INPUT CARD>C1 + INPUT CARD>N 7. 0.00 0.00 0.54875 + INPUT CARD> S 8 + INPUT CARD> 1 47.060276 0.10656288E-02 + INPUT CARD> 2 30.249283 -0.48950333E-02 + INPUT CARD> 3 17.336468 0.12675333E-01 + INPUT CARD> 4 5.0682259 -0.21338198E-01 + INPUT CARD> 5 4.4719543 -0.15430793 + INPUT CARD> 6 0.94583613 0.37090391 + INPUT CARD> 7 0.43119121 0.57003045 + INPUT CARD> 8 0.19367546 0.18613993 + INPUT CARD> S 1 + INPUT CARD> 1 1.293000000 1.000000000 + INPUT CARD> S 1 + INPUT CARD> 1 0.1787000000 1.000000000 + INPUT CARD> P 8 + INPUT CARD> 1 26.800018 0.55202533E-03 + INPUT CARD> 2 10.427275 0.21705279E-01 + INPUT CARD> 3 10.711001 0.95714470E-02 + INPUT CARD> 4 4.4962521 0.94816543E-01 + INPUT CARD> 5 2.0193243 0.19748625 + INPUT CARD> 6 0.91650265 0.36549339 + INPUT CARD> 7 0.40482002 0.37327099 + INPUT CARD> 8 0.17522678 0.14081325 + INPUT CARD> P 1 + INPUT CARD> 1 0.5550000000 1.000000000 + INPUT CARD> P 1 + INPUT CARD> 1 0.1725000000 1.000000000 + INPUT CARD> D 1 + INPUT CARD> 1 1.654000000 1.000000000 + INPUT CARD> D 1 + INPUT CARD> 1 0.4690000000 1.000000000 + INPUT CARD> F 1 + INPUT CARD> 1 1.093000000 1.000000000 + INPUT CARD> + INPUT CARD>N 7. 0.00 0.00 -0.54875 + INPUT CARD> S 8 + INPUT CARD> 1 47.060276 0.10656288E-02 + INPUT CARD> 2 30.249283 -0.48950333E-02 + INPUT CARD> 3 17.336468 0.12675333E-01 + INPUT CARD> 4 5.0682259 -0.21338198E-01 + INPUT CARD> 5 4.4719543 -0.15430793 + INPUT CARD> 6 0.94583613 0.37090391 + INPUT CARD> 7 0.43119121 0.57003045 + INPUT CARD> 8 0.19367546 0.18613993 + + ..... DONE SETTING UP THE RUN ..... + 60000000 WORDS OF MEMORY AVAILABLE + + + RUN TITLE + --------- + N2 experimental bond length + + THE POINT GROUP OF THE MOLECULE IS C1 + THE ORDER OF THE PRINCIPAL AXIS IS 0 + *** WARNING! ATOM 1 SHELL 1 TYPE S HAS NORMALIZATION 0.99999818 + *** WARNING! ATOM 1 SHELL 4 TYPE P HAS NORMALIZATION 1.00000266 + *** WARNING! ATOM 2 SHELL 10 TYPE S HAS NORMALIZATION 0.99999818 + *** WARNING! ATOM 2 SHELL 13 TYPE P HAS NORMALIZATION 1.00000266 + + ATOM ATOMIC COORDINATES (BOHR) + CHARGE X Y Z + N 7.0 0.0000000000 0.0000000000 1.0369871358 + N 7.0 0.0000000000 0.0000000000 -1.0369871358 + + INTERNUCLEAR DISTANCES (ANGS.) + ------------------------------ + + N N + + 1 N 0.0000000 1.0975000 * + 2 N 1.0975000 * 0.0000000 + + * ... LESS THAN 3.000 + + + ATOMIC BASIS SET + ---------------- + THE CONTRACTED PRIMITIVE FUNCTIONS HAVE BEEN UNNORMALIZED + THE CONTRACTED BASIS FUNCTIONS ARE NOW NORMALIZED TO UNITY + + SHELL TYPE PRIMITIVE EXPONENT CONTRACTION COEFFICIENTS + + N + + 1 S 1 47.0602760 0.001065626866 + 1 S 2 30.2492830 -0.004895024414 + 1 S 3 17.3364680 0.012675309991 + 1 S 4 5.0682259 -0.021338159266 + 1 S 5 4.4719543 -0.154307649895 + 1 S 6 0.9458361 0.370903236723 + 1 S 7 0.4311912 0.570029415262 + 1 S 8 0.1936755 0.186139592113 + + 2 S 9 1.2930000 1.000000000000 + + 3 S 10 0.1787000 1.000000000000 + + 4 P 11 26.8000180 0.000552026797 + 4 P 12 10.4272750 0.021705336696 + 4 P 13 10.7110010 0.009571472442 + 4 P 14 4.4962521 0.094816795038 + 4 P 15 2.0193243 0.197486774950 + 4 P 16 0.9165027 0.365494361540 + 4 P 17 0.4048200 0.373271982214 + 4 P 18 0.1752268 0.140813624304 + + 5 P 19 0.5550000 1.000000000000 + + 6 P 20 0.1725000 1.000000000000 + + 7 D 21 1.6540000 1.000000000000 + + 8 D 22 0.4690000 1.000000000000 + + 9 F 23 1.0930000 1.000000000000 + + N + + 10 S 24 47.0602760 0.001065626866 + 10 S 25 30.2492830 -0.004895024414 + 10 S 26 17.3364680 0.012675309991 + 10 S 27 5.0682259 -0.021338159266 + 10 S 28 4.4719543 -0.154307649895 + 10 S 29 0.9458361 0.370903236723 + 10 S 30 0.4311912 0.570029415262 + 10 S 31 0.1936755 0.186139592113 + + 11 S 32 1.2930000 1.000000000000 + + 12 S 33 0.1787000 1.000000000000 + + 13 P 34 26.8000180 0.000552026797 + 13 P 35 10.4272750 0.021705336696 + 13 P 36 10.7110010 0.009571472442 + 13 P 37 4.4962521 0.094816795038 + 13 P 38 2.0193243 0.197486774950 + 13 P 39 0.9165027 0.365494361540 + 13 P 40 0.4048200 0.373271982214 + 13 P 41 0.1752268 0.140813624304 + + 14 P 42 0.5550000 1.000000000000 + + 15 P 43 0.1725000 1.000000000000 + + 16 D 44 1.6540000 1.000000000000 + + 17 D 45 0.4690000 1.000000000000 + + 18 F 46 1.0930000 1.000000000000 + + TOTAL NUMBER OF BASIS SET SHELLS = 18 + NUMBER OF CARTESIAN GAUSSIAN BASIS FUNCTIONS = 68 + NOTE: THIS RUN WILL RESTRICT THE MO VARIATION SPACE TO SPHERICAL HARMONICS. + THE NUMBER OF ORBITALS KEPT IN THE VARIATIONAL SPACE WILL BE PRINTED LATER. + NUMBER OF ELECTRONS = 14 + CHARGE OF MOLECULE = 0 + SPIN MULTIPLICITY = 1 + NUMBER OF OCCUPIED ORBITALS (ALPHA) = 7 + NUMBER OF OCCUPIED ORBITALS (BETA ) = 7 + TOTAL NUMBER OF ATOMS = 2 + THE NUCLEAR REPULSION ENERGY IS 23.6261368681 + NOTE THIS RUN IS USING CORE POTENTIALS, AND THE NUMBER OF ELECTRONS, + OCCUPIED ORBITALS, AND NUCLEAR REPULSION ENERGY WILL BE ADJUSTED BELOW + AFTER REMOVAL OF THE CORE CHARGES. + + THIS MOLECULE IS RECOGNIZED AS BEING LINEAR. + + $CONTRL OPTIONS + --------------- + SCFTYP=RHF RUNTYP=ENERGY EXETYP=RUN + MPLEVL= 0 CITYP =NONE CCTYP =NONE + MULT = 1 ICHARG= 0 NZVAR = 0 COORD =UNIQUE + ECP =READ RELWFN=NONE LOCAL =NONE + ISPHER= 1 NOSYM = 0 MAXIT = 30 UNITS =ANGS + PLTORB= F MOLPLT= F AIMPAC= F FRIEND= + NPRINT= 7 IREST = 0 GEOM =INPUT + NORMF = 0 NORMP = 0 ITOL = 20 ICUT = 9 + INTTYP=POPLE QMTTOL= 1.0E-06 + + $SYSTEM OPTIONS + --------------- + REPLICATED MEMORY= 60000000 WORDS (ON EVERY NODE). + DISTRIBUTED MEMDDI= 0 MILLION WORDS IN AGGREGATE, + MEMDDI DISTRIBUTED OVER 1 PROCESSORS IS 0 WORDS/PROCESSOR. + TOTAL MEMORY REQUESTED ON EACH PROCESSOR= 600Process initiation completed. +00000 WORDS. + TIMLIM= 36000.0 SECONDS. + COREFL=F KDIAG= 3 + + -------------- + ECP POTENTIALS + -------------- + + PARAMETERS FOR "N-LN2 " ON ATOM 1 WITH ZCORE 2 AND LMAX 1 ARE + FOR L= 1 COEFF N ZETA + 1 5.00000 1 7.34847 + 2 36.74237 3 7.34847 + 3 -29.94531 2 7.23979 + FOR L= 0 COEFF N ZETA + 1 60.69493 2 7.04441 + 2 -27.56682 2 5.93243 + 3 7.59800 2 6.67558 + + PARAMETERS FOR "N-LN2 " ON ATOM 2 ARE THE SAME AS ATOM 1 + + THE ECP RUN REMOVES 4 CORE ELECTRONS, AND THE SAME NUMBER OF PROTONS. + NUMBER OF ELECTRONS KEPT IN THE CALCULATION IS = 10 + NUMBER OF OCCUPIED ORBITALS (ALPHA) KEPT IS = 5 + NUMBER OF OCCUPIED ORBITALS (BETA ) KEPT IS = 5 + THE ADJUSTED NUCLEAR REPULSION ENERGY= 12.0541514633 + ECP ANGULAR INTS......... 0.01 SECONDS + + ---------------- + PROPERTIES INPUT + ---------------- + + MOMENTS FIELD POTENTIAL DENSITY + IEMOM = 1 IEFLD = 0 IEPOT = 0 IEDEN = 0 + WHERE =COMASS WHERE =NUCLEI WHERE =NUCLEI WHERE =NUCLEI + OUTPUT=BOTH OUTPUT=BOTH OUTPUT=BOTH OUTPUT=BOTH + IEMINT= 0 IEFINT= 0 IEDINT= 0 + MORB = 0 + EXTRAPOLATION IN EFFECT + RESTRICTION OF ORBITAL MIXING IN EFFECT + SOSCF IN EFFECT + + ------------------------------- + INTEGRAL TRANSFORMATION OPTIONS + ------------------------------- + NWORD = 0 CUTOFF = 1.0E-09 + MPTRAN = 0 DIRTRF = F + AOINTS =DUP + + ---------------------- + INTEGRAL INPUT OPTIONS + ---------------------- + NOPK = 1 NORDER= 0 SCHWRZ= F + + ------------------------------------------ + THE POINT GROUP IS C1 , NAXIS= 0, ORDER= 1 + ------------------------------------------ + + -- VARIATIONAL SPACE WILL BE RESTRICTED TO PURE SPHERICAL HARMONICS ONLY -- + AFTER EXCLUDING CONTAMINANT COMBINATIONS FROM THE CARTESIAN GAUSSIAN BASIS + SET, THE NUMBER OF SPHERICAL HARMONICS KEPT IN THE VARIATION SPACE IS 58 + + DIMENSIONS OF THE SYMMETRY SUBSPACES ARE + A = 58 + + ..... DONE SETTING UP THE RUN ..... + STEP CPU TIME = 0.04 TOTAL CPU TIME = 0.0 ( 0.0 MIN) + TOTAL WALL CLOCK TIME= 0.0 SECONDS, CPU UTILIZATION IS 100.00% + + ******************** + 1 ELECTRON INTEGRALS + ******************** + TIME TO DO ORDINARY INTEGRALS= 0.01 + TIME TO DO ECP INTEGRALS= 0.02 + ...... END OF ONE-ELECTRON INTEGRALS ...... + STEP CPU TIME = 0.03 TOTAL CPU TIME = 0.1 ( 0.0 MIN) + TOTAL WALL CLOCK TIME= 0.1 SECONDS, CPU UTILIZATION IS 100.00% + + ------------- + GUESS OPTIONS + ------------- + GUESS =HUCKEL NORB = 0 NORDER= 0 + MIX = F PRTMO = F PUNMO = F + TOLZ = 1.0E-08 TOLE = 1.0E-05 + SYMDEN= F PURIFY= F + + INITIAL GUESS ORBITALS GENERATED BY HUCKEL ROUTINE. + HUCKEL GUESS REQUIRES 35652 WORDS. + + STATISTICS FOR GENERATION OF SYMMETRY ORBITAL -Q- MATRIX + NUMBER OF CARTESIAN ATOMIC ORBITALS= 68 + NUMBER OF SPHERICAL CONTAMINANTS DROPPED= 10 + NUMBER OF LINEARLY DEPENDENT MOS DROPPED= 0 + TOTAL NUMBER OF MOS IN VARIATION SPACE= 58 + + SYMMETRIES FOR INITIAL GUESS ORBITALS FOLLOW. BOTH SET(S). + 5 ORBITALS ARE OCCUPIED ( 0 CORE ORBITALS). + 1=A 2=A 3=A 4=A 5=A 6=A 7=A + 8=A 9=A 10=A 11=A 12=A 13=A 14=A + 15=A + ...... END OF INITIAL ORBITAL SELECTION ...... + STEP CPU TIME = 0.04 TOTAL CPU TIME = 0.1 ( 0.0 MIN) + TOTAL WALL CLOCK TIME= 0.1 SECONDS, CPU UTILIZATION IS 100.00% + + -------------------- + 2 ELECTRON INTEGRALS + -------------------- + + THE -PK- OPTION IS OFF, THE INTEGRALS ARE NOT IN SUPERMATRIX FORM. + STORING 15000 INTEGRALS/RECORD ON DISK, USING 12 BYTES/INTEGRAL. + TWO ELECTRON INTEGRAL EVALUATION REQUIRES 69571 WORDS OF MEMORY. + II,JST,KST,LST = 1 1 1 1 NREC = 1 INTLOC = 1 + II,JST,KST,LST = 2 1 1 1 NREC = 1 INTLOC = 2 + II,JST,KST,LST = 3 1 1 1 NREC = 1 INTLOC = 7 + II,JST,KST,LST = 4 1 1 1 NREC = 1 INTLOC = 22 + II,JST,KST,LST = 5 1 1 1 NREC = 1 INTLOC = 67 + II,JST,KST,LST = 6 1 1 1 NREC = 1 INTLOC = 214 + II,JST,KST,LST = 7 1 1 1 NREC = 1 INTLOC = 571 + II,JST,KST,LST = 8 1 1 1 NREC = 1 INTLOC = 2257 + II,JST,KST,LST = 9 1 1 1 NREC = 1 INTLOC = 6628 + II,JST,KST,LST = 10 1 1 1 NREC = 2 INTLOC = 9017 + II,JST,KST,LST = 11 1 1 1 NREC = 3 INTLOC = 30 + II,JST,KST,LST = 12 1 1 1 NREC = 3 INTLOC = 6667 + II,JST,KST,LST = 13 1 1 1 NREC = 3 INTLOC =13979 + II,JST,KST,LST = 14 1 1 1 NREC = 5 INTLOC = 7442 + II,JST,KST,LST = 15 1 1 1 NREC = 7 INTLOC = 6614 + II,JST,KST,LST = 16 1 1 1 NREC = 9 INTLOC =12308 + II,JST,KST,LST = 17 1 1 1 NREC = 16 INTLOC = 1484 + II,JST,KST,LST = 18 1 1 1 NREC = 24 INTLOC =12089 + TOTAL NUMBER OF NONZERO TWO-ELECTRON INTEGRALS = 670159 + 45 INTEGRAL RECORDS WERE STORED ON DISK FILE 8. + ...... END OF TWO-ELECTRON INTEGRALS ..... + STEP CPU TIME = 1.43 TOTAL CPU TIME = 1.5 ( 0.0 MIN) + TOTAL WALL CLOCK TIME= 1.6 SECONDS, CPU UTILIZATION IS 98.72% + + -------------------------- + RHF SCF CALCULATION + -------------------------- + + NUCLEAR ENERGY = 12.0541514633 + MAXIT = 30 NPUNCH= 2 + EXTRAP=T DAMP=F SHIFT=F RSTRCT=T DIIS=F DEM=F SOSCF=T + DENSITY CONV= 1.00E-05 + SOSCF WILL OPTIMIZE 265 ORBITAL ROTATIONS, SOGTOL= 0.250 + MEMORY REQUIRED FOR RHF STEP= 64380 WORDS. + + ITER EX DEM TOTAL ENERGY E CHANGE DENSITY CHANGE ORB. GRAD + 1 0 0 -19.063008768 -19.063008768 0.515570685 0.000000000 + ---------------START SECOND ORDER SCF--------------- + 2 1 0 -19.436436218 -0.373427450 0.067409954 0.032682213 + 3 2 0 -19.443417154 -0.006980936 0.015858599 0.007849167 + 4 3 0 -19.443844147 -0.000426993 0.003133135 0.001522397 + 5 4 0 -19.443853341 -0.000009194 0.000737533 0.000162485 + 6 5 0 -19.443853559 -0.000000218 0.000070219 0.000024337 + 7 6 0 -19.443853562 -0.000000003 0.000012759 0.000003764 + 8 7 0 -19.443853563 0.000000000 0.000001998 0.000000769 + 9 8 0 -19.443853563 0.000000000 0.000000243 0.000000183 + + ----------------- + DENSITY CONVERGED + ----------------- + TIME TO FORM FOCK OPERATORS= 0.5 SECONDS ( 0.1 SEC/ITER) + TIME TO SOLVE SCF EQUATIONS= 0.0 SECONDS ( 0.0 SEC/ITER) + + FINAL RHF ENERGY IS -19.4438535625 AFTER 9 ITERATIONS + + GENERATING 53 MVO-S ( 5 ORBITALS FROZEN), BY REMOVING 10 ELECTRONS. + + ------------ + EIGENVECTORS + ------------ + + 1 2 3 4 5 + -1.4732 -0.6114 -0.6114 -0.7732 -0.6291 + A A A A A + 1 N 1 S 0.533297 0.000000 0.000000 0.563617 0.201291 + 2 N 1 S -0.034430 0.000000 0.000000 -0.017449 -0.007286 + 3 N 1 S -0.022799 0.000000 0.000000 0.161064 0.224073 + 4 N 1 X 0.000000 0.552140 0.000000 0.000000 0.000000 + 5 N 1 Y 0.000000 0.000000 0.552140 0.000000 0.000000 + 6 N 1 Z -0.305858 0.000000 0.000000 0.281029 0.614317 + 7 N 1 X 0.000000 -0.007699 0.000000 0.000000 0.000000 + 8 N 1 Y 0.000000 0.000000 -0.007699 0.000000 0.000000 + 9 N 1 Z 0.042150 0.000000 0.000000 -0.021850 -0.045823 + 10 N 1 X 0.000000 0.073764 0.000000 0.000000 0.000000 + 11 N 1 Y 0.000000 0.000000 0.073764 0.000000 0.000000 + 12 N 1 Z 0.051589 0.000000 0.000000 0.036214 0.028552 + 13 N 1 XX -0.010334 0.000000 0.000000 0.001559 0.008828 + 14 N 1 YY -0.010334 0.000000 0.000000 0.001559 0.008828 + 15 N 1 ZZ 0.020667 0.000000 0.000000 -0.003118 -0.017657 + 16 N 1 XY 0.000000 0.000000 0.000000 0.000000 0.000000 + 17 N 1 XZ 0.000000 -0.020362 0.000000 0.000000 0.000000 + 18 N 1 YZ 0.000000 0.000000 -0.020362 0.000000 0.000000 + 19 N 1 XX -0.007612 0.000000 0.000000 0.001692 0.008577 + 20 N 1 YY -0.007612 0.000000 0.000000 0.001692 0.008577 + 21 N 1 ZZ 0.015223 0.000000 0.000000 -0.003384 -0.017154 + 22 N 1 XY 0.000000 0.000000 0.000000 0.000000 0.000000 + 23 N 1 XZ 0.000000 -0.038309 0.000000 0.000000 0.000000 + 24 N 1 YZ 0.000000 0.000000 -0.038309 0.000000 0.000000 + 25 N XXX 0.000000 -0.005021 0.000000 0.000000 0.000000 + 26 N YYY 0.000000 0.000000 -0.005021 0.000000 0.000000 + 27 N ZZZ -0.006604 0.000000 0.000000 -0.000760 0.003519 + 28 N XXY 0.000000 0.000000 -0.002246 0.000000 0.000000 + 29 N XXZ 0.004430 0.000000 0.000000 0.000510 -0.002361 + 30 N YYX 0.000000 -0.002246 0.000000 0.000000 0.000000 + 31 N YYZ 0.004430 0.000000 0.000000 0.000510 -0.002361 + 32 N ZZX 0.000000 0.008982 0.000000 0.000000 0.000000 + 33 N ZZY 0.000000 0.000000 0.008982 0.000000 0.000000 + 34 N XYZ 0.000000 0.000000 0.000000 0.000000 0.000000 + 35 N 2 S 0.533297 0.000000 0.000000 -0.563617 0.201291 + 36 N 2 S -0.034430 0.000000 0.000000 0.017449 -0.007286 + 37 N 2 S -0.022799 0.000000 0.000000 -0.161064 0.224073 + 38 N 2 X 0.000000 0.552140 0.000000 0.000000 0.000000 + 39 N 2 Y 0.000000 0.000000 0.552140 0.000000 0.000000 + 40 N 2 Z 0.305858 0.000000 0.000000 0.281029 -0.614317 + 41 N 2 X 0.000000 -0.007699 0.000000 0.000000 0.000000 + 42 N 2 Y 0.000000 0.000000 -0.007699 0.000000 0.000000 + 43 N 2 Z -0.042150 0.000000 0.000000 -0.021850 0.045823 + 44 N 2 X 0.000000 0.073764 0.000000 0.000000 0.000000 + 45 N 2 Y 0.000000 0.000000 0.073764 0.000000 0.000000 + 46 N 2 Z -0.051589 0.000000 0.000000 0.036214 -0.028552 + 47 N 2 XX -0.010334 0.000000 0.000000 -0.001559 0.008828 + 48 N 2 YY -0.010334 0.000000 0.000000 -0.001559 0.008828 + 49 N 2 ZZ 0.020667 0.000000 0.000000 0.003118 -0.017657 + 50 N 2 XY 0.000000 0.000000 0.000000 0.000000 0.000000 + 51 N 2 XZ 0.000000 0.020362 0.000000 0.000000 0.000000 + 52 N 2 YZ 0.000000 0.000000 0.020362 0.000000 0.000000 + 53 N 2 XX -0.007612 0.000000 0.000000 -0.001692 0.008577 + 54 N 2 YY -0.007612 0.000000 0.000000 -0.001692 0.008577 + 55 N 2 ZZ 0.015223 0.000000 0.000000 0.003384 -0.017154 + 56 N 2 XY 0.000000 0.000000 0.000000 0.000000 0.000000 + 57 N 2 XZ 0.000000 0.038309 0.000000 0.000000 0.000000 + 58 N 2 YZ 0.000000 0.000000 0.038309 0.000000 0.000000 + 59 N XXX 0.000000 -0.005021 0.000000 0.000000 0.000000 + 60 N YYY 0.000000 0.000000 -0.005021 0.000000 0.000000 + 61 N ZZZ 0.006604 0.000000 0.000000 -0.000760 -0.003519 + 62 N XXY 0.000000 0.000000 -0.002246 0.000000 0.000000 + 63 N XXZ -0.004430 0.000000 0.000000 0.000510 0.002361 + 64 N YYX 0.000000 -0.002246 0.000000 0.000000 0.000000 + 65 N YYZ -0.004430 0.000000 0.000000 0.000510 0.002361 + 66 N ZZX 0.000000 0.008982 0.000000 0.000000 0.000000 + 67 N ZZY 0.000000 0.000000 0.008982 0.000000 0.000000 + 68 N XYZ 0.000000 0.000000 0.000000 0.000000 0.000000 + + 6 7 8 9 10 + -5.2969 -5.2969 -5.0048 -3.7225 -3.6233 + A A A A A + 1 N 1 S 0.000000 0.000000 -0.754427 -0.420199 0.000000 + 2 N 1 S 0.000000 0.000000 -0.147096 -0.194246 0.000000 + 3 N 1 S 0.000000 0.000000 0.013867 0.499106 0.000000 + 4 N 1 X 0.000000 -1.224940 0.000000 0.000000 1.481078 + 5 N 1 Y -1.224940 0.000000 0.000000 0.000000 0.000000 + 6 N 1 Z 0.000000 0.000000 1.289951 0.331212 0.000000 + 7 N 1 X 0.000000 0.317730 0.000000 0.000000 -0.853345 + 8 N 1 Y 0.317730 0.000000 0.000000 0.000000 0.000000 + 9 N 1 Z 0.000000 0.000000 -0.211245 -0.351954 0.000000 + 10 N 1 X 0.000000 0.249711 0.000000 0.000000 -0.638676 + 11 N 1 Y 0.249711 0.000000 0.000000 0.000000 0.000000 + 12 N 1 Z 0.000000 0.000000 -0.167807 -0.322823 0.000000 + 13 N 1 XX 0.000000 0.000000 0.005285 0.085536 0.000000 + 14 N 1 YY 0.000000 0.000000 0.005285 0.085536 0.000000 + 15 N 1 ZZ 0.000000 0.000000 -0.010570 -0.171072 0.000000 + 16 N 1 XY 0.000000 0.000000 0.000000 0.000000 0.000000 + 17 N 1 XZ 0.000000 0.038358 0.000000 0.000000 -0.028341 + 18 N 1 YZ 0.038358 0.000000 0.000000 0.000000 0.000000 + 19 N 1 XX 0.000000 0.000000 0.028178 0.107862 0.000000 + 20 N 1 YY 0.000000 0.000000 0.028178 0.107862 0.000000 + 21 N 1 ZZ 0.000000 0.000000 -0.056355 -0.215724 0.000000 + 22 N 1 XY 0.000000 0.000000 0.000000 0.000000 0.000000 + 23 N 1 XZ 0.000000 0.070865 0.000000 0.000000 0.191363 + 24 N 1 YZ 0.070865 0.000000 0.000000 0.000000 0.000000 + 25 N XXX 0.000000 0.005783 0.000000 0.000000 -0.012680 + 26 N YYY 0.005783 0.000000 0.000000 0.000000 0.000000 + 27 N ZZZ 0.000000 0.000000 -0.007080 0.112196 0.000000 + 28 N XXY 0.002586 0.000000 0.000000 0.000000 0.000000 + 29 N XXZ 0.000000 0.000000 0.004749 -0.075264 0.000000 + 30 N YYX 0.000000 0.002586 0.000000 0.000000 -0.005671 + 31 N YYZ 0.000000 0.000000 0.004749 -0.075264 0.000000 + 32 N ZZX 0.000000 -0.010344 0.000000 0.000000 0.022683 + 33 N ZZY -0.010344 0.000000 0.000000 0.000000 0.000000 + 34 N XYZ 0.000000 0.000000 0.000000 0.000000 0.000000 + 35 N 2 S 0.000000 0.000000 0.754427 -0.420199 0.000000 + 36 N 2 S 0.000000 0.000000 0.147096 -0.194246 0.000000 + 37 N 2 S 0.000000 0.000000 -0.013867 0.499106 0.000000 + 38 N 2 X 0.000000 1.224940 0.000000 0.000000 1.481078 + 39 N 2 Y 1.224940 0.000000 0.000000 0.000000 0.000000 + 40 N 2 Z 0.000000 0.000000 1.289951 -0.331212 0.000000 + 41 N 2 X 0.000000 -0.317730 0.000000 0.000000 -0.853345 + 42 N 2 Y -0.317730 0.000000 0.000000 0.000000 0.000000 + 43 N 2 Z 0.000000 0.000000 -0.211245 0.351954 0.000000 + 44 N 2 X 0.000000 -0.249711 0.000000 0.000000 -0.638676 + 45 N 2 Y -0.249711 0.000000 0.000000 0.000000 0.000000 + 46 N 2 Z 0.000000 0.000000 -0.167807 0.322823 0.000000 + 47 N 2 XX 0.000000 0.000000 -0.005285 0.085536 0.000000 + 48 N 2 YY 0.000000 0.000000 -0.005285 0.085536 0.000000 + 49 N 2 ZZ 0.000000 0.000000 0.010570 -0.171072 0.000000 + 50 N 2 XY 0.000000 0.000000 0.000000 0.000000 0.000000 + 51 N 2 XZ 0.000000 0.038358 0.000000 0.000000 0.028341 + 52 N 2 YZ 0.038358 0.000000 0.000000 0.000000 0.000000 + 53 N 2 XX 0.000000 0.000000 -0.028178 0.107862 0.000000 + 54 N 2 YY 0.000000 0.000000 -0.028178 0.107862 0.000000 + 55 N 2 ZZ 0.000000 0.000000 0.056355 -0.215724 0.000000 + 56 N 2 XY 0.000000 0.000000 0.000000 0.000000 0.000000 + 57 N 2 XZ 0.000000 0.070865 0.000000 0.000000 -0.191363 + 58 N 2 YZ 0.070865 0.000000 0.000000 0.000000 0.000000 + 59 N XXX 0.000000 -0.005783 0.000000 0.000000 -0.012680 + 60 N YYY -0.005783 0.000000 0.000000 0.000000 0.000000 + 61 N ZZZ 0.000000 0.000000 -0.007080 -0.112196 0.000000 + 62 N XXY -0.002586 0.000000 0.000000 0.000000 0.000000 + 63 N XXZ 0.000000 0.000000 0.004749 0.075264 0.000000 + 64 N YYX 0.000000 -0.002586 0.000000 0.000000 -0.005671 + 65 N YYZ 0.000000 0.000000 0.004749 0.075264 0.000000 + 66 N ZZX 0.000000 0.010344 0.000000 0.000000 0.022683 + 67 N ZZY 0.010344 0.000000 0.000000 0.000000 0.000000 + 68 N XYZ 0.000000 0.000000 0.000000 0.000000 0.000000 + + 11 12 13 14 15 + -3.6233 -3.5911 -3.5911 -3.4864 -3.4864 + A A A A A + 1 N 1 S 0.000000 0.000000 0.000000 0.000000 0.000000 + 2 N 1 S 0.000000 0.000000 0.000000 0.000000 0.000000 + 3 N 1 S 0.000000 0.000000 0.000000 0.000000 0.000000 + 4 N 1 X 0.000000 0.000000 0.000000 0.000000 0.016762 + 5 N 1 Y 1.481078 0.000000 0.000000 0.016762 0.000000 + 6 N 1 Z 0.000000 0.000000 0.000000 0.000000 0.000000 + 7 N 1 X 0.000000 0.000000 0.000000 0.000000 0.047359 + 8 N 1 Y -0.853345 0.000000 0.000000 0.047359 0.000000 + 9 N 1 Z 0.000000 0.000000 0.000000 0.000000 0.000000 + 10 N 1 X 0.000000 0.000000 0.000000 0.000000 0.194430 + 11 N 1 Y -0.638676 0.000000 0.000000 0.194430 0.000000 + 12 N 1 Z 0.000000 0.000000 0.000000 0.000000 0.000000 + 13 N 1 XX 0.000000 0.145594 0.000000 0.000000 0.000000 + 14 N 1 YY 0.000000 -0.145594 0.000000 0.000000 0.000000 + 15 N 1 ZZ 0.000000 0.000000 0.000000 0.000000 0.000000 + 16 N 1 XY 0.000000 0.000000 0.168117 0.000000 0.000000 + 17 N 1 XZ 0.000000 0.000000 0.000000 0.000000 0.252205 + 18 N 1 YZ -0.028341 0.000000 0.000000 0.252205 0.000000 + 19 N 1 XX 0.000000 0.415776 0.000000 0.000000 0.000000 + 20 N 1 YY 0.000000 -0.415776 0.000000 0.000000 0.000000 + 21 N 1 ZZ 0.000000 0.000000 0.000000 0.000000 0.000000 + 22 N 1 XY 0.000000 0.000000 0.480097 0.000000 0.000000 + 23 N 1 XZ 0.000000 0.000000 0.000000 0.000000 0.403142 + 24 N 1 YZ 0.191363 0.000000 0.000000 0.403142 0.000000 + 25 N XXX 0.000000 0.000000 0.000000 0.000000 0.072740 + 26 N YYY -0.012680 0.000000 0.000000 0.072740 0.000000 + 27 N ZZZ 0.000000 0.000000 0.000000 0.000000 0.000000 + 28 N XXY -0.005671 0.000000 0.000000 0.032530 0.000000 + 29 N XXZ 0.000000 -0.107822 0.000000 0.000000 0.000000 + 30 N YYX 0.000000 0.000000 0.000000 0.000000 0.032530 + 31 N YYZ 0.000000 0.107822 0.000000 0.000000 0.000000 + 32 N ZZX 0.000000 0.000000 0.000000 0.000000 -0.130122 + 33 N ZZY 0.022683 0.000000 0.000000 -0.130122 0.000000 + 34 N XYZ 0.000000 0.000000 -0.124502 0.000000 0.000000 + 35 N 2 S 0.000000 0.000000 0.000000 0.000000 0.000000 + 36 N 2 S 0.000000 0.000000 0.000000 0.000000 0.000000 + 37 N 2 S 0.000000 0.000000 0.000000 0.000000 0.000000 + 38 N 2 X 0.000000 0.000000 0.000000 0.000000 0.016762 + 39 N 2 Y 1.481078 0.000000 0.000000 0.016762 0.000000 + 40 N 2 Z 0.000000 0.000000 0.000000 0.000000 0.000000 + 41 N 2 X 0.000000 0.000000 0.000000 0.000000 0.047359 + 42 N 2 Y -0.853345 0.000000 0.000000 0.047359 0.000000 + 43 N 2 Z 0.000000 0.000000 0.000000 0.000000 0.000000 + 44 N 2 X 0.000000 0.000000 0.000000 0.000000 0.194430 + 45 N 2 Y -0.638676 0.000000 0.000000 0.194430 0.000000 + 46 N 2 Z 0.000000 0.000000 0.000000 0.000000 0.000000 + 47 N 2 XX 0.000000 0.145594 0.000000 0.000000 0.000000 + 48 N 2 YY 0.000000 -0.145594 0.000000 0.000000 0.000000 + 49 N 2 ZZ 0.000000 0.000000 0.000000 0.000000 0.000000 + 50 N 2 XY 0.000000 0.000000 0.168117 0.000000 0.000000 + 51 N 2 XZ 0.000000 0.000000 0.000000 0.000000 -0.252205 + 52 N 2 YZ 0.028341 0.000000 0.000000 -0.252205 0.000000 + 53 N 2 XX 0.000000 0.415776 0.000000 0.000000 0.000000 + 54 N 2 YY 0.000000 -0.415776 0.000000 0.000000 0.000000 + 55 N 2 ZZ 0.000000 0.000000 0.000000 0.000000 0.000000 + 56 N 2 XY 0.000000 0.000000 0.480097 0.000000 0.000000 + 57 N 2 XZ 0.000000 0.000000 0.000000 0.000000 -0.403142 + 58 N 2 YZ -0.191363 0.000000 0.000000 -0.403142 0.000000 + 59 N XXX 0.000000 0.000000 0.000000 0.000000 0.072740 + 60 N YYY -0.012680 0.000000 0.000000 0.072740 0.000000 + 61 N ZZZ 0.000000 0.000000 0.000000 0.000000 0.000000 + 62 N XXY -0.005671 0.000000 0.000000 0.032530 0.000000 + 63 N XXZ 0.000000 0.107822 0.000000 0.000000 0.000000 + 64 N YYX 0.000000 0.000000 0.000000 0.000000 0.032530 + 65 N YYZ 0.000000 -0.107822 0.000000 0.000000 0.000000 + 66 N ZZX 0.000000 0.000000 0.000000 0.000000 -0.130122 + 67 N ZZY 0.022683 0.000000 0.000000 -0.130122 0.000000 + 68 N XYZ 0.000000 0.000000 0.124502 0.000000 0.000000 + + 16 17 18 19 20 + -3.2583 -3.1379 -2.9076 -2.9076 -2.8337 + A A A A A + 1 N 1 S 0.746532 0.912528 0.000000 0.000000 0.000000 + 2 N 1 S 0.235267 0.317901 0.000000 0.000000 0.000000 + 3 N 1 S -0.893257 -2.317946 0.000000 0.000000 0.000000 + 4 N 1 X 0.000000 0.000000 0.000000 0.000000 -0.911837 + 5 N 1 Y 0.000000 0.000000 0.000000 0.000000 0.000000 + 6 N 1 Z 0.949391 0.746034 0.000000 0.000000 0.000000 + 7 N 1 X 0.000000 0.000000 0.000000 0.000000 0.651029 + 8 N 1 Y 0.000000 0.000000 0.000000 0.000000 0.000000 + 9 N 1 Z -0.659228 -0.542656 0.000000 0.000000 0.000000 + 10 N 1 X 0.000000 0.000000 0.000000 0.000000 0.817192 + 11 N 1 Y 0.000000 0.000000 0.000000 0.000000 0.000000 + 12 N 1 Z -0.394683 0.173201 0.000000 0.000000 0.000000 + 13 N 1 XX 0.063145 0.007442 -0.178967 0.000000 0.000000 + 14 N 1 YY 0.063145 0.007442 0.178967 0.000000 0.000000 + 15 N 1 ZZ -0.126291 -0.014884 0.000000 0.000000 0.000000 + 16 N 1 XY 0.000000 0.000000 0.000000 -0.206653 0.000000 + 17 N 1 XZ 0.000000 0.000000 0.000000 0.000000 0.121124 + 18 N 1 YZ 0.000000 0.000000 0.000000 0.000000 0.000000 + 19 N 1 XX 0.093005 -0.033997 -0.639069 0.000000 0.000000 + 20 N 1 YY 0.093005 -0.033997 0.639069 0.000000 0.000000 + 21 N 1 ZZ -0.186009 0.067995 0.000000 0.000000 0.000000 + 22 N 1 XY 0.000000 0.000000 0.000000 -0.737933 0.000000 + 23 N 1 XZ 0.000000 0.000000 0.000000 0.000000 0.375590 + 24 N 1 YZ 0.000000 0.000000 0.000000 0.000000 0.000000 + 25 N XXX 0.000000 0.000000 0.000000 0.000000 0.014299 + 26 N YYY 0.000000 0.000000 0.000000 0.000000 0.000000 + 27 N ZZZ 0.064278 0.002769 0.000000 0.000000 0.000000 + 28 N XXY 0.000000 0.000000 0.000000 0.000000 0.000000 + 29 N XXZ -0.043119 -0.001858 0.029831 0.000000 0.000000 + 30 N YYX 0.000000 0.000000 0.000000 0.000000 0.006395 + 31 N YYZ -0.043119 -0.001858 -0.029831 0.000000 0.000000 + 32 N ZZX 0.000000 0.000000 0.000000 0.000000 -0.025578 + 33 N ZZY 0.000000 0.000000 0.000000 0.000000 0.000000 + 34 N XYZ 0.000000 0.000000 0.000000 0.034446 0.000000 + 35 N 2 S 0.746532 -0.912528 0.000000 0.000000 0.000000 + 36 N 2 S 0.235267 -0.317901 0.000000 0.000000 0.000000 + 37 N 2 S -0.893257 2.317946 0.000000 0.000000 0.000000 + 38 N 2 X 0.000000 0.000000 0.000000 0.000000 0.911837 + 39 N 2 Y 0.000000 0.000000 0.000000 0.000000 0.000000 + 40 N 2 Z -0.949391 0.746034 0.000000 0.000000 0.000000 + 41 N 2 X 0.000000 0.000000 0.000000 0.000000 -0.651029 + 42 N 2 Y 0.000000 0.000000 0.000000 0.000000 0.000000 + 43 N 2 Z 0.659228 -0.542656 0.000000 0.000000 0.000000 + 44 N 2 X 0.000000 0.000000 0.000000 0.000000 -0.817192 + 45 N 2 Y 0.000000 0.000000 0.000000 0.000000 0.000000 + 46 N 2 Z 0.394683 0.173201 0.000000 0.000000 0.000000 + 47 N 2 XX 0.063145 -0.007442 0.178967 0.000000 0.000000 + 48 N 2 YY 0.063145 -0.007442 -0.178967 0.000000 0.000000 + 49 N 2 ZZ -0.126291 0.014884 0.000000 0.000000 0.000000 + 50 N 2 XY 0.000000 0.000000 0.000000 0.206653 0.000000 + 51 N 2 XZ 0.000000 0.000000 0.000000 0.000000 0.121124 + 52 N 2 YZ 0.000000 0.000000 0.000000 0.000000 0.000000 + 53 N 2 XX 0.093005 0.033997 0.639069 0.000000 0.000000 + 54 N 2 YY 0.093005 0.033997 -0.639069 0.000000 0.000000 + 55 N 2 ZZ -0.186009 -0.067995 0.000000 0.000000 0.000000 + 56 N 2 XY 0.000000 0.000000 0.000000 0.737933 0.000000 + 57 N 2 XZ 0.000000 0.000000 0.000000 0.000000 0.375590 + 58 N 2 YZ 0.000000 0.000000 0.000000 0.000000 0.000000 + 59 N XXX 0.000000 0.000000 0.000000 0.000000 -0.014299 + 60 N YYY 0.000000 0.000000 0.000000 0.000000 0.000000 + 61 N ZZZ -0.064278 0.002769 0.000000 0.000000 0.000000 + 62 N XXY 0.000000 0.000000 0.000000 0.000000 0.000000 + 63 N XXZ 0.043119 -0.001858 0.029831 0.000000 0.000000 + 64 N YYX 0.000000 0.000000 0.000000 0.000000 -0.006395 + 65 N YYZ 0.043119 -0.001858 -0.029831 0.000000 0.000000 + 66 N ZZX 0.000000 0.000000 0.000000 0.000000 0.025578 + 67 N ZZY 0.000000 0.000000 0.000000 0.000000 0.000000 + 68 N XYZ 0.000000 0.000000 0.000000 0.034446 0.000000 + + 21 22 23 24 25 + -2.8337 -2.6938 -2.2823 -2.0956 -2.0956 + A A A A A + 1 N 1 S 0.000000 -0.472054 -0.625916 0.000000 0.000000 + 2 N 1 S 0.000000 -0.271597 -0.391731 0.000000 0.000000 + 3 N 1 S 0.000000 1.705281 0.352218 0.000000 0.000000 + 4 N 1 X 0.000000 0.000000 0.000000 0.000000 0.520932 + 5 N 1 Y -0.911837 0.000000 0.000000 0.520932 0.000000 + 6 N 1 Z 0.000000 0.762554 1.075613 0.000000 0.000000 + 7 N 1 X 0.000000 0.000000 0.000000 0.000000 -0.939407 + 8 N 1 Y 0.651029 0.000000 0.000000 -0.939407 0.000000 + 9 N 1 Z 0.000000 -0.404186 -0.689667 0.000000 0.000000 + 10 N 1 X 0.000000 0.000000 0.000000 0.000000 -1.329971 + 11 N 1 Y 0.817192 0.000000 0.000000 -1.329971 0.000000 + 12 N 1 Z 0.000000 -0.914899 -0.993859 0.000000 0.000000 + 13 N 1 XX 0.000000 0.070228 -0.116801 0.000000 0.000000 + 14 N 1 YY 0.000000 0.070228 -0.116801 0.000000 0.000000 + 15 N 1 ZZ 0.000000 -0.140457 0.233601 0.000000 0.000000 + 16 N 1 XY 0.000000 0.000000 0.000000 0.000000 0.000000 + 17 N 1 XZ 0.000000 0.000000 0.000000 0.000000 0.210635 + 18 N 1 YZ 0.121124 0.000000 0.000000 0.210635 0.000000 + 19 N 1 XX 0.000000 0.315484 -0.378174 0.000000 0.000000 + 20 N 1 YY 0.000000 0.315484 -0.378174 0.000000 0.000000 + 21 N 1 ZZ 0.000000 -0.630968 0.756349 0.000000 0.000000 + 22 N 1 XY 0.000000 0.000000 0.000000 0.000000 0.000000 + 23 N 1 XZ 0.000000 0.000000 0.000000 0.000000 1.257879 + 24 N 1 YZ 0.375590 0.000000 0.000000 1.257879 0.000000 + 25 N XXX 0.000000 0.000000 0.000000 0.000000 -0.029322 + 26 N YYY 0.014299 0.000000 0.000000 -0.029322 0.000000 + 27 N ZZZ 0.000000 0.000411 0.091020 0.000000 0.000000 + 28 N XXY 0.006395 0.000000 0.000000 -0.013113 0.000000 + 29 N XXZ 0.000000 -0.000276 -0.061058 0.000000 0.000000 + 30 N YYX 0.000000 0.000000 0.000000 0.000000 -0.013113 + 31 N YYZ 0.000000 -0.000276 -0.061058 0.000000 0.000000 + 32 N ZZX 0.000000 0.000000 0.000000 0.000000 0.052453 + 33 N ZZY -0.025578 0.000000 0.000000 0.052453 0.000000 + 34 N XYZ 0.000000 0.000000 0.000000 0.000000 0.000000 + 35 N 2 S 0.000000 0.472054 -0.625916 0.000000 0.000000 + 36 N 2 S 0.000000 0.271597 -0.391731 0.000000 0.000000 + 37 N 2 S 0.000000 -1.705281 0.352218 0.000000 0.000000 + 38 N 2 X 0.000000 0.000000 0.000000 0.000000 -0.520932 + 39 N 2 Y 0.911837 0.000000 0.000000 -0.520932 0.000000 + 40 N 2 Z 0.000000 0.762554 -1.075613 0.000000 0.000000 + 41 N 2 X 0.000000 0.000000 0.000000 0.000000 0.939407 + 42 N 2 Y -0.651029 0.000000 0.000000 0.939407 0.000000 + 43 N 2 Z 0.000000 -0.404186 0.689667 0.000000 0.000000 + 44 N 2 X 0.000000 0.000000 0.000000 0.000000 1.329971 + 45 N 2 Y -0.817192 0.000000 0.000000 1.329971 0.000000 + 46 N 2 Z 0.000000 -0.914899 0.993859 0.000000 0.000000 + 47 N 2 XX 0.000000 -0.070228 -0.116801 0.000000 0.000000 + 48 N 2 YY 0.000000 -0.070228 -0.116801 0.000000 0.000000 + 49 N 2 ZZ 0.000000 0.140457 0.233601 0.000000 0.000000 + 50 N 2 XY 0.000000 0.000000 0.000000 0.000000 0.000000 + 51 N 2 XZ 0.000000 0.000000 0.000000 0.000000 0.210635 + 52 N 2 YZ 0.121124 0.000000 0.000000 0.210635 0.000000 + 53 N 2 XX 0.000000 -0.315484 -0.378174 0.000000 0.000000 + 54 N 2 YY 0.000000 -0.315484 -0.378174 0.000000 0.000000 + 55 N 2 ZZ 0.000000 0.630968 0.756349 0.000000 0.000000 + 56 N 2 XY 0.000000 0.000000 0.000000 0.000000 0.000000 + 57 N 2 XZ 0.000000 0.000000 0.000000 0.000000 1.257879 + 58 N 2 YZ 0.375590 0.000000 0.000000 1.257879 0.000000 + 59 N XXX 0.000000 0.000000 0.000000 0.000000 0.029322 + 60 N YYY -0.014299 0.000000 0.000000 0.029322 0.000000 + 61 N ZZZ 0.000000 0.000411 -0.091020 0.000000 0.000000 + 62 N XXY -0.006395 0.000000 0.000000 0.013113 0.000000 + 63 N XXZ 0.000000 -0.000276 0.061058 0.000000 0.000000 + 64 N YYX 0.000000 0.000000 0.000000 0.000000 0.013113 + 65 N YYZ 0.000000 -0.000276 0.061058 0.000000 0.000000 + 66 N ZZX 0.000000 0.000000 0.000000 0.000000 -0.052453 + 67 N ZZY 0.025578 0.000000 0.000000 -0.052453 0.000000 + 68 N XYZ 0.000000 0.000000 0.000000 0.000000 0.000000 + + 26 27 28 29 30 + -1.8289 -1.8146 -1.8146 -1.7142 -1.5878 + A A A A A + 1 N 1 S -0.217918 0.000000 0.000000 0.133146 0.000000 + 2 N 1 S 0.075348 0.000000 0.000000 0.089774 0.000000 + 3 N 1 S -0.075400 0.000000 0.000000 -9.997870 0.000000 + 4 N 1 X 0.000000 -1.614807 0.000000 0.000000 1.619484 + 5 N 1 Y 0.000000 0.000000 -1.614807 0.000000 0.000000 + 6 N 1 Z -0.948525 0.000000 0.000000 0.644445 0.000000 + 7 N 1 X 0.000000 2.066879 0.000000 0.000000 -2.279804 + 8 N 1 Y 0.000000 0.000000 2.066879 0.000000 0.000000 + 9 N 1 Z 1.354790 0.000000 0.000000 -0.189482 0.000000 + 10 N 1 X 0.000000 -0.372781 0.000000 0.000000 0.921678 + 11 N 1 Y 0.000000 0.000000 -0.372781 0.000000 0.000000 + 12 N 1 Z -0.862820 0.000000 0.000000 4.763839 0.000000 + 13 N 1 XX -0.102423 0.000000 0.000000 0.075104 0.000000 + 14 N 1 YY -0.102423 0.000000 0.000000 0.075104 0.000000 + 15 N 1 ZZ 0.204846 0.000000 0.000000 -0.150209 0.000000 + 16 N 1 XY 0.000000 0.000000 0.000000 0.000000 0.000000 + 17 N 1 XZ 0.000000 0.058963 0.000000 0.000000 -0.042654 + 18 N 1 YZ 0.000000 0.000000 0.058963 0.000000 0.000000 + 19 N 1 XX 0.037641 0.000000 0.000000 0.352917 0.000000 + 20 N 1 YY 0.037641 0.000000 0.000000 0.352917 0.000000 + 21 N 1 ZZ -0.075282 0.000000 0.000000 -0.705833 0.000000 + 22 N 1 XY 0.000000 0.000000 0.000000 0.000000 0.000000 + 23 N 1 XZ 0.000000 0.140602 0.000000 0.000000 0.205286 + 24 N 1 YZ 0.000000 0.000000 0.140602 0.000000 0.000000 + 25 N XXX 0.000000 0.004773 0.000000 0.000000 -0.066183 + 26 N YYY 0.000000 0.000000 0.004773 0.000000 0.000000 + 27 N ZZZ -0.245351 0.000000 0.000000 0.043436 0.000000 + 28 N XXY 0.000000 0.000000 0.002135 0.000000 0.000000 + 29 N XXZ 0.164587 0.000000 0.000000 -0.029138 0.000000 + 30 N YYX 0.000000 0.002135 0.000000 0.000000 -0.029598 + 31 N YYZ 0.164587 0.000000 0.000000 -0.029138 0.000000 + 32 N ZZX 0.000000 -0.008538 0.000000 0.000000 0.118393 + 33 N ZZY 0.000000 0.000000 -0.008538 0.000000 0.000000 + 34 N XYZ 0.000000 0.000000 0.000000 0.000000 0.000000 + 35 N 2 S -0.217918 0.000000 0.000000 -0.133146 0.000000 + 36 N 2 S 0.075348 0.000000 0.000000 -0.089774 0.000000 + 37 N 2 S -0.075400 0.000000 0.000000 9.997870 0.000000 + 38 N 2 X 0.000000 -1.614807 0.000000 0.000000 -1.619484 + 39 N 2 Y 0.000000 0.000000 -1.614807 0.000000 0.000000 + 40 N 2 Z 0.948525 0.000000 0.000000 0.644445 0.000000 + 41 N 2 X 0.000000 2.066879 0.000000 0.000000 2.279804 + 42 N 2 Y 0.000000 0.000000 2.066879 0.000000 0.000000 + 43 N 2 Z -1.354790 0.000000 0.000000 -0.189482 0.000000 + 44 N 2 X 0.000000 -0.372781 0.000000 0.000000 -0.921678 + 45 N 2 Y 0.000000 0.000000 -0.372781 0.000000 0.000000 + 46 N 2 Z 0.862820 0.000000 0.000000 4.763839 0.000000 + 47 N 2 XX -0.102423 0.000000 0.000000 -0.075104 0.000000 + 48 N 2 YY -0.102423 0.000000 0.000000 -0.075104 0.000000 + 49 N 2 ZZ 0.204846 0.000000 0.000000 0.150209 0.000000 + 50 N 2 XY 0.000000 0.000000 0.000000 0.000000 0.000000 + 51 N 2 XZ 0.000000 -0.058963 0.000000 0.000000 -0.042654 + 52 N 2 YZ 0.000000 0.000000 -0.058963 0.000000 0.000000 + 53 N 2 XX 0.037641 0.000000 0.000000 -0.352917 0.000000 + 54 N 2 YY 0.037641 0.000000 0.000000 -0.352917 0.000000 + 55 N 2 ZZ -0.075282 0.000000 0.000000 0.705833 0.000000 + 56 N 2 XY 0.000000 0.000000 0.000000 0.000000 0.000000 + 57 N 2 XZ 0.000000 -0.140602 0.000000 0.000000 0.205286 + 58 N 2 YZ 0.000000 0.000000 -0.140602 0.000000 0.000000 + 59 N XXX 0.000000 0.004773 0.000000 0.000000 0.066183 + 60 N YYY 0.000000 0.000000 0.004773 0.000000 0.000000 + 61 N ZZZ 0.245351 0.000000 0.000000 0.043436 0.000000 + 62 N XXY 0.000000 0.000000 0.002135 0.000000 0.000000 + 63 N XXZ -0.164587 0.000000 0.000000 -0.029138 0.000000 + 64 N YYX 0.000000 0.002135 0.000000 0.000000 0.029598 + 65 N YYZ -0.164587 0.000000 0.000000 -0.029138 0.000000 + 66 N ZZX 0.000000 -0.008538 0.000000 0.000000 -0.118393 + 67 N ZZY 0.000000 0.000000 -0.008538 0.000000 0.000000 + 68 N XYZ 0.000000 0.000000 0.000000 0.000000 0.000000 + + 31 32 33 34 35 + -1.5878 -1.5147 -1.5147 -1.4403 -1.4403 + A A A A A + 1 N 1 S 0.000000 0.000000 0.000000 0.000000 0.000000 + 2 N 1 S 0.000000 0.000000 0.000000 0.000000 0.000000 + 3 N 1 S 0.000000 0.000000 0.000000 0.000000 0.000000 + 4 N 1 X 0.000000 0.000000 -0.252381 0.000000 0.000000 + 5 N 1 Y 1.619484 -0.252381 0.000000 0.000000 0.000000 + 6 N 1 Z 0.000000 0.000000 0.000000 0.000000 0.000000 + 7 N 1 X 0.000000 0.000000 0.175256 0.000000 0.000000 + 8 N 1 Y -2.279804 0.175256 0.000000 0.000000 0.000000 + 9 N 1 Z 0.000000 0.000000 0.000000 0.000000 0.000000 + 10 N 1 X 0.000000 0.000000 0.175479 0.000000 0.000000 + 11 N 1 Y 0.921678 0.175479 0.000000 0.000000 0.000000 + 12 N 1 Z 0.000000 0.000000 0.000000 0.000000 0.000000 + 13 N 1 XX 0.000000 0.000000 0.000000 0.189899 0.000000 + 14 N 1 YY 0.000000 0.000000 0.000000 -0.189899 0.000000 + 15 N 1 ZZ 0.000000 0.000000 0.000000 0.000000 0.000000 + 16 N 1 XY 0.000000 0.000000 0.000000 0.000000 0.219276 + 17 N 1 XZ 0.000000 0.000000 -0.454046 0.000000 0.000000 + 18 N 1 YZ -0.042654 -0.454046 0.000000 0.000000 0.000000 + 19 N 1 XX 0.000000 0.000000 0.000000 -0.307850 0.000000 + 20 N 1 YY 0.000000 0.000000 0.000000 0.307850 0.000000 + 21 N 1 ZZ 0.000000 0.000000 0.000000 0.000000 0.000000 + 22 N 1 XY 0.000000 0.000000 0.000000 0.000000 -0.355474 + 23 N 1 XZ 0.000000 0.000000 0.517081 0.000000 0.000000 + 24 N 1 YZ 0.205286 0.517081 0.000000 0.000000 0.000000 + 25 N XXX 0.000000 0.000000 -0.232378 0.000000 0.000000 + 26 N YYY -0.066183 -0.232378 0.000000 0.000000 0.000000 + 27 N ZZZ 0.000000 0.000000 0.000000 0.000000 0.000000 + 28 N XXY -0.029598 -0.103923 0.000000 0.000000 0.000000 + 29 N XXZ 0.000000 0.000000 0.000000 -0.491040 0.000000 + 30 N YYX 0.000000 0.000000 -0.103923 0.000000 0.000000 + 31 N YYZ 0.000000 0.000000 0.000000 0.491040 0.000000 + 32 N ZZX 0.000000 0.000000 0.415691 0.000000 0.000000 + 33 N ZZY 0.118393 0.415691 0.000000 0.000000 0.000000 + 34 N XYZ 0.000000 0.000000 0.000000 0.000000 -0.567004 + 35 N 2 S 0.000000 0.000000 0.000000 0.000000 0.000000 + 36 N 2 S 0.000000 0.000000 0.000000 0.000000 0.000000 + 37 N 2 S 0.000000 0.000000 0.000000 0.000000 0.000000 + 38 N 2 X 0.000000 0.000000 -0.252381 0.000000 0.000000 + 39 N 2 Y -1.619484 -0.252381 0.000000 0.000000 0.000000 + 40 N 2 Z 0.000000 0.000000 0.000000 0.000000 0.000000 + 41 N 2 X 0.000000 0.000000 0.175256 0.000000 0.000000 + 42 N 2 Y 2.279804 0.175256 0.000000 0.000000 0.000000 + 43 N 2 Z 0.000000 0.000000 0.000000 0.000000 0.000000 + 44 N 2 X 0.000000 0.000000 0.175479 0.000000 0.000000 + 45 N 2 Y -0.921678 0.175479 0.000000 0.000000 0.000000 + 46 N 2 Z 0.000000 0.000000 0.000000 0.000000 0.000000 + 47 N 2 XX 0.000000 0.000000 0.000000 0.189899 0.000000 + 48 N 2 YY 0.000000 0.000000 0.000000 -0.189899 0.000000 + 49 N 2 ZZ 0.000000 0.000000 0.000000 0.000000 0.000000 + 50 N 2 XY 0.000000 0.000000 0.000000 0.000000 0.219276 + 51 N 2 XZ 0.000000 0.000000 0.454046 0.000000 0.000000 + 52 N 2 YZ -0.042654 0.454046 0.000000 0.000000 0.000000 + 53 N 2 XX 0.000000 0.000000 0.000000 -0.307850 0.000000 + 54 N 2 YY 0.000000 0.000000 0.000000 0.307850 0.000000 + 55 N 2 ZZ 0.000000 0.000000 0.000000 0.000000 0.000000 + 56 N 2 XY 0.000000 0.000000 0.000000 0.000000 -0.355474 + 57 N 2 XZ 0.000000 0.000000 -0.517081 0.000000 0.000000 + 58 N 2 YZ 0.205286 -0.517081 0.000000 0.000000 0.000000 + 59 N XXX 0.000000 0.000000 -0.232378 0.000000 0.000000 + 60 N YYY 0.066183 -0.232378 0.000000 0.000000 0.000000 + 61 N ZZZ 0.000000 0.000000 0.000000 0.000000 0.000000 + 62 N XXY 0.029598 -0.103923 0.000000 0.000000 0.000000 + 63 N XXZ 0.000000 0.000000 0.000000 0.491040 0.000000 + 64 N YYX 0.000000 0.000000 -0.103923 0.000000 0.000000 + 65 N YYZ 0.000000 0.000000 0.000000 -0.491040 0.000000 + 66 N ZZX 0.000000 0.000000 0.415691 0.000000 0.000000 + 67 N ZZY -0.118393 0.415691 0.000000 0.000000 0.000000 + 68 N XYZ 0.000000 0.000000 0.000000 0.000000 0.567004 + + 36 37 38 39 40 + -1.2190 -1.2190 -1.0372 -0.8906 -0.7628 + A A A A A + 1 N 1 S 0.000000 0.000000 -0.089735 0.901490 0.000000 + 2 N 1 S 0.000000 0.000000 -0.272782 0.553536 0.000000 + 3 N 1 S 0.000000 0.000000 -0.087719 11.492903 0.000000 + 4 N 1 X 0.000000 0.000000 0.000000 0.000000 0.000000 + 5 N 1 Y 0.000000 0.000000 0.000000 0.000000 0.000000 + 6 N 1 Z 0.000000 0.000000 -1.163720 1.470299 0.000000 + 7 N 1 X 0.000000 0.000000 0.000000 0.000000 0.000000 + 8 N 1 Y 0.000000 0.000000 0.000000 0.000000 0.000000 + 9 N 1 Z 0.000000 0.000000 1.326005 -4.640543 0.000000 + 10 N 1 X 0.000000 0.000000 0.000000 0.000000 0.000000 + 11 N 1 Y 0.000000 0.000000 0.000000 0.000000 0.000000 + 12 N 1 Z 0.000000 0.000000 -0.622949 -4.581735 0.000000 + 13 N 1 XX 0.000000 0.000000 0.262592 -0.065174 0.671350 + 14 N 1 YY 0.000000 0.000000 0.262592 -0.065174 -0.671350 + 15 N 1 ZZ 0.000000 0.000000 -0.525184 0.130349 0.000000 + 16 N 1 XY 0.000000 0.000000 0.000000 0.000000 0.000000 + 17 N 1 XZ 0.000000 0.000000 0.000000 0.000000 0.000000 + 18 N 1 YZ 0.000000 0.000000 0.000000 0.000000 0.000000 + 19 N 1 XX 0.000000 0.000000 -0.408543 -0.843357 -0.348017 + 20 N 1 YY 0.000000 0.000000 -0.408543 -0.843357 0.348017 + 21 N 1 ZZ 0.000000 0.000000 0.817086 1.686714 0.000000 + 22 N 1 XY 0.000000 0.000000 0.000000 0.000000 0.000000 + 23 N 1 XZ 0.000000 0.000000 0.000000 0.000000 0.000000 + 24 N 1 YZ 0.000000 0.000000 0.000000 0.000000 0.000000 + 25 N XXX 0.000000 -0.534144 0.000000 0.000000 0.000000 + 26 N YYY -0.534144 0.000000 0.000000 0.000000 0.000000 + 27 N ZZZ 0.000000 0.000000 0.184507 -0.079870 0.000000 + 28 N XXY 0.716629 0.000000 0.000000 0.000000 0.000000 + 29 N XXZ 0.000000 0.000000 -0.123771 0.053578 0.182516 + 30 N YYX 0.000000 0.716629 0.000000 0.000000 0.000000 + 31 N YYZ 0.000000 0.000000 -0.123771 0.053578 -0.182516 + 32 N ZZX 0.000000 0.000000 0.000000 0.000000 0.000000 + 33 N ZZY 0.000000 0.000000 0.000000 0.000000 0.000000 + 34 N XYZ 0.000000 0.000000 0.000000 0.000000 0.000000 + 35 N 2 S 0.000000 0.000000 -0.089735 -0.901490 0.000000 + 36 N 2 S 0.000000 0.000000 -0.272782 -0.553536 0.000000 + 37 N 2 S 0.000000 0.000000 -0.087719 -11.492903 0.000000 + 38 N 2 X 0.000000 0.000000 0.000000 0.000000 0.000000 + 39 N 2 Y 0.000000 0.000000 0.000000 0.000000 0.000000 + 40 N 2 Z 0.000000 0.000000 1.163720 1.470299 0.000000 + 41 N 2 X 0.000000 0.000000 0.000000 0.000000 0.000000 + 42 N 2 Y 0.000000 0.000000 0.000000 0.000000 0.000000 + 43 N 2 Z 0.000000 0.000000 -1.326005 -4.640543 0.000000 + 44 N 2 X 0.000000 0.000000 0.000000 0.000000 0.000000 + 45 N 2 Y 0.000000 0.000000 0.000000 0.000000 0.000000 + 46 N 2 Z 0.000000 0.000000 0.622949 -4.581735 0.000000 + 47 N 2 XX 0.000000 0.000000 0.262592 0.065174 0.671350 + 48 N 2 YY 0.000000 0.000000 0.262592 0.065174 -0.671350 + 49 N 2 ZZ 0.000000 0.000000 -0.525184 -0.130349 0.000000 + 50 N 2 XY 0.000000 0.000000 0.000000 0.000000 0.000000 + 51 N 2 XZ 0.000000 0.000000 0.000000 0.000000 0.000000 + 52 N 2 YZ 0.000000 0.000000 0.000000 0.000000 0.000000 + 53 N 2 XX 0.000000 0.000000 -0.408543 0.843357 -0.348017 + 54 N 2 YY 0.000000 0.000000 -0.408543 0.843357 0.348017 + 55 N 2 ZZ 0.000000 0.000000 0.817086 -1.686714 0.000000 + 56 N 2 XY 0.000000 0.000000 0.000000 0.000000 0.000000 + 57 N 2 XZ 0.000000 0.000000 0.000000 0.000000 0.000000 + 58 N 2 YZ 0.000000 0.000000 0.000000 0.000000 0.000000 + 59 N XXX 0.000000 -0.534144 0.000000 0.000000 0.000000 + 60 N YYY -0.534144 0.000000 0.000000 0.000000 0.000000 + 61 N ZZZ 0.000000 0.000000 -0.184507 -0.079870 0.000000 + 62 N XXY 0.716629 0.000000 0.000000 0.000000 0.000000 + 63 N XXZ 0.000000 0.000000 0.123771 0.053578 -0.182516 + 64 N YYX 0.000000 0.716629 0.000000 0.000000 0.000000 + 65 N YYZ 0.000000 0.000000 0.123771 0.053578 0.182516 + 66 N ZZX 0.000000 0.000000 0.000000 0.000000 0.000000 + 67 N ZZY 0.000000 0.000000 0.000000 0.000000 0.000000 + 68 N XYZ 0.000000 0.000000 0.000000 0.000000 0.000000 + + 41 42 43 44 45 + -0.7628 -0.6810 -0.6810 -0.6370 -0.6370 + A A A A A + 1 N 1 S 0.000000 0.000000 0.000000 0.000000 0.000000 + 2 N 1 S 0.000000 0.000000 0.000000 0.000000 0.000000 + 3 N 1 S 0.000000 0.000000 0.000000 0.000000 0.000000 + 4 N 1 X 0.000000 0.000000 0.000000 0.000000 0.000000 + 5 N 1 Y 0.000000 0.000000 0.000000 0.000000 0.000000 + 6 N 1 Z 0.000000 0.000000 0.000000 0.000000 0.000000 + 7 N 1 X 0.000000 0.000000 0.000000 0.000000 0.000000 + 8 N 1 Y 0.000000 0.000000 0.000000 0.000000 0.000000 + 9 N 1 Z 0.000000 0.000000 0.000000 0.000000 0.000000 + 10 N 1 X 0.000000 0.000000 0.000000 0.000000 0.000000 + 11 N 1 Y 0.000000 0.000000 0.000000 0.000000 0.000000 + 12 N 1 Z 0.000000 0.000000 0.000000 0.000000 0.000000 + 13 N 1 XX 0.000000 0.000000 0.000000 0.000000 0.689232 + 14 N 1 YY 0.000000 0.000000 0.000000 0.000000 -0.689232 + 15 N 1 ZZ 0.000000 0.000000 0.000000 0.000000 0.000000 + 16 N 1 XY 0.775208 0.000000 0.000000 0.795856 0.000000 + 17 N 1 XZ 0.000000 0.000000 0.000000 0.000000 0.000000 + 18 N 1 YZ 0.000000 0.000000 0.000000 0.000000 0.000000 + 19 N 1 XX 0.000000 0.000000 0.000000 0.000000 -0.576553 + 20 N 1 YY 0.000000 0.000000 0.000000 0.000000 0.576553 + 21 N 1 ZZ 0.000000 0.000000 0.000000 0.000000 0.000000 + 22 N 1 XY -0.401856 0.000000 0.000000 -0.665746 0.000000 + 23 N 1 XZ 0.000000 0.000000 0.000000 0.000000 0.000000 + 24 N 1 YZ 0.000000 0.000000 0.000000 0.000000 0.000000 + 25 N XXX 0.000000 0.000000 -0.587724 0.000000 0.000000 + 26 N YYY 0.000000 -0.587724 0.000000 0.000000 0.000000 + 27 N ZZZ 0.000000 0.000000 0.000000 0.000000 0.000000 + 28 N XXY 0.000000 0.788514 0.000000 0.000000 0.000000 + 29 N XXZ 0.000000 0.000000 0.000000 0.000000 -0.166058 + 30 N YYX 0.000000 0.000000 0.788514 0.000000 0.000000 + 31 N YYZ 0.000000 0.000000 0.000000 0.000000 0.166058 + 32 N ZZX 0.000000 0.000000 0.000000 0.000000 0.000000 + 33 N ZZY 0.000000 0.000000 0.000000 0.000000 0.000000 + 34 N XYZ 0.210752 0.000000 0.000000 -0.191747 0.000000 + 35 N 2 S 0.000000 0.000000 0.000000 0.000000 0.000000 + 36 N 2 S 0.000000 0.000000 0.000000 0.000000 0.000000 + 37 N 2 S 0.000000 0.000000 0.000000 0.000000 0.000000 + 38 N 2 X 0.000000 0.000000 0.000000 0.000000 0.000000 + 39 N 2 Y 0.000000 0.000000 0.000000 0.000000 0.000000 + 40 N 2 Z 0.000000 0.000000 0.000000 0.000000 0.000000 + 41 N 2 X 0.000000 0.000000 0.000000 0.000000 0.000000 + 42 N 2 Y 0.000000 0.000000 0.000000 0.000000 0.000000 + 43 N 2 Z 0.000000 0.000000 0.000000 0.000000 0.000000 + 44 N 2 X 0.000000 0.000000 0.000000 0.000000 0.000000 + 45 N 2 Y 0.000000 0.000000 0.000000 0.000000 0.000000 + 46 N 2 Z 0.000000 0.000000 0.000000 0.000000 0.000000 + 47 N 2 XX 0.000000 0.000000 0.000000 0.000000 -0.689232 + 48 N 2 YY 0.000000 0.000000 0.000000 0.000000 0.689232 + 49 N 2 ZZ 0.000000 0.000000 0.000000 0.000000 0.000000 + 50 N 2 XY 0.775208 0.000000 0.000000 -0.795856 0.000000 + 51 N 2 XZ 0.000000 0.000000 0.000000 0.000000 0.000000 + 52 N 2 YZ 0.000000 0.000000 0.000000 0.000000 0.000000 + 53 N 2 XX 0.000000 0.000000 0.000000 0.000000 0.576553 + 54 N 2 YY 0.000000 0.000000 0.000000 0.000000 -0.576553 + 55 N 2 ZZ 0.000000 0.000000 0.000000 0.000000 0.000000 + 56 N 2 XY -0.401856 0.000000 0.000000 0.665746 0.000000 + 57 N 2 XZ 0.000000 0.000000 0.000000 0.000000 0.000000 + 58 N 2 YZ 0.000000 0.000000 0.000000 0.000000 0.000000 + 59 N XXX 0.000000 0.000000 0.587724 0.000000 0.000000 + 60 N YYY 0.000000 0.587724 0.000000 0.000000 0.000000 + 61 N ZZZ 0.000000 0.000000 0.000000 0.000000 0.000000 + 62 N XXY 0.000000 -0.788514 0.000000 0.000000 0.000000 + 63 N XXZ 0.000000 0.000000 0.000000 0.000000 -0.166058 + 64 N YYX 0.000000 0.000000 -0.788514 0.000000 0.000000 + 65 N YYZ 0.000000 0.000000 0.000000 0.000000 0.166058 + 66 N ZZX 0.000000 0.000000 0.000000 0.000000 0.000000 + 67 N ZZY 0.000000 0.000000 0.000000 0.000000 0.000000 + 68 N XYZ -0.210752 0.000000 0.000000 -0.191747 0.000000 + + 46 47 48 49 50 + -0.2802 -0.2802 -0.1490 0.0889 0.0889 + A A A A A + 1 N 1 S 0.000000 0.000000 -0.678447 0.000000 0.000000 + 2 N 1 S 0.000000 0.000000 -0.486580 0.000000 0.000000 + 3 N 1 S 0.000000 0.000000 -3.684100 0.000000 0.000000 + 4 N 1 X 0.000000 0.106203 0.000000 0.000000 -0.046921 + 5 N 1 Y 0.106203 0.000000 0.000000 -0.046921 0.000000 + 6 N 1 Z 0.000000 0.000000 0.452678 0.000000 0.000000 + 7 N 1 X 0.000000 -0.807292 0.000000 0.000000 -0.228010 + 8 N 1 Y -0.807292 0.000000 0.000000 -0.228010 0.000000 + 9 N 1 Z 0.000000 0.000000 0.999173 0.000000 0.000000 + 10 N 1 X 0.000000 -0.902490 0.000000 0.000000 0.091375 + 11 N 1 Y -0.902490 0.000000 0.000000 0.091375 0.000000 + 12 N 1 Z 0.000000 0.000000 1.462386 0.000000 0.000000 + 13 N 1 XX 0.000000 0.000000 -0.044905 0.000000 0.000000 + 14 N 1 YY 0.000000 0.000000 -0.044905 0.000000 0.000000 + 15 N 1 ZZ 0.000000 0.000000 0.089811 0.000000 0.000000 + 16 N 1 XY 0.000000 0.000000 0.000000 0.000000 0.000000 + 17 N 1 XZ 0.000000 -0.783259 0.000000 0.000000 0.680851 + 18 N 1 YZ -0.783259 0.000000 0.000000 0.680851 0.000000 + 19 N 1 XX 0.000000 0.000000 0.458108 0.000000 0.000000 + 20 N 1 YY 0.000000 0.000000 0.458108 0.000000 0.000000 + 21 N 1 ZZ 0.000000 0.000000 -0.916216 0.000000 0.000000 + 22 N 1 XY 0.000000 0.000000 0.000000 0.000000 0.000000 + 23 N 1 XZ 0.000000 1.613301 0.000000 0.000000 -0.443315 + 24 N 1 YZ 1.613301 0.000000 0.000000 -0.443315 0.000000 + 25 N XXX 0.000000 0.164459 0.000000 0.000000 -0.347387 + 26 N YYY 0.164459 0.000000 0.000000 -0.347387 0.000000 + 27 N ZZZ 0.000000 0.000000 0.893086 0.000000 0.000000 + 28 N XXY 0.073548 0.000000 0.000000 -0.155356 0.000000 + 29 N XXZ 0.000000 0.000000 -0.599100 0.000000 0.000000 + 30 N YYX 0.000000 0.073548 0.000000 0.000000 -0.155356 + 31 N YYZ 0.000000 0.000000 -0.599100 0.000000 0.000000 + 32 N ZZX 0.000000 -0.294193 0.000000 0.000000 0.621425 + 33 N ZZY -0.294193 0.000000 0.000000 0.621425 0.000000 + 34 N XYZ 0.000000 0.000000 0.000000 0.000000 0.000000 + 35 N 2 S 0.000000 0.000000 0.678447 0.000000 0.000000 + 36 N 2 S 0.000000 0.000000 0.486580 0.000000 0.000000 + 37 N 2 S 0.000000 0.000000 3.684100 0.000000 0.000000 + 38 N 2 X 0.000000 -0.106203 0.000000 0.000000 -0.046921 + 39 N 2 Y -0.106203 0.000000 0.000000 -0.046921 0.000000 + 40 N 2 Z 0.000000 0.000000 0.452678 0.000000 0.000000 + 41 N 2 X 0.000000 0.807292 0.000000 0.000000 -0.228010 + 42 N 2 Y 0.807292 0.000000 0.000000 -0.228010 0.000000 + 43 N 2 Z 0.000000 0.000000 0.999173 0.000000 0.000000 + 44 N 2 X 0.000000 0.902490 0.000000 0.000000 0.091375 + 45 N 2 Y 0.902490 0.000000 0.000000 0.091375 0.000000 + 46 N 2 Z 0.000000 0.000000 1.462386 0.000000 0.000000 + 47 N 2 XX 0.000000 0.000000 0.044905 0.000000 0.000000 + 48 N 2 YY 0.000000 0.000000 0.044905 0.000000 0.000000 + 49 N 2 ZZ 0.000000 0.000000 -0.089811 0.000000 0.000000 + 50 N 2 XY 0.000000 0.000000 0.000000 0.000000 0.000000 + 51 N 2 XZ 0.000000 -0.783259 0.000000 0.000000 -0.680851 + 52 N 2 YZ -0.783259 0.000000 0.000000 -0.680851 0.000000 + 53 N 2 XX 0.000000 0.000000 -0.458108 0.000000 0.000000 + 54 N 2 YY 0.000000 0.000000 -0.458108 0.000000 0.000000 + 55 N 2 ZZ 0.000000 0.000000 0.916216 0.000000 0.000000 + 56 N 2 XY 0.000000 0.000000 0.000000 0.000000 0.000000 + 57 N 2 XZ 0.000000 1.613301 0.000000 0.000000 0.443315 + 58 N 2 YZ 1.613301 0.000000 0.000000 0.443315 0.000000 + 59 N XXX 0.000000 -0.164459 0.000000 0.000000 -0.347387 + 60 N YYY -0.164459 0.000000 0.000000 -0.347387 0.000000 + 61 N ZZZ 0.000000 0.000000 0.893086 0.000000 0.000000 + 62 N XXY -0.073548 0.000000 0.000000 -0.155356 0.000000 + 63 N XXZ 0.000000 0.000000 -0.599100 0.000000 0.000000 + 64 N YYX 0.000000 -0.073548 0.000000 0.000000 -0.155356 + 65 N YYZ 0.000000 0.000000 -0.599100 0.000000 0.000000 + 66 N ZZX 0.000000 0.294193 0.000000 0.000000 0.621425 + 67 N ZZY 0.294193 0.000000 0.000000 0.621425 0.000000 + 68 N XYZ 0.000000 0.000000 0.000000 0.000000 0.000000 + + 51 52 53 54 55 + 0.1646 0.1646 0.3750 0.9365 1.4046 + A A A A A + 1 N 1 S 0.000000 0.000000 0.004010 -1.125909 0.000000 + 2 N 1 S 0.000000 0.000000 -0.265965 -0.740071 0.000000 + 3 N 1 S 0.000000 0.000000 2.951107 0.817708 0.000000 + 4 N 1 X 0.000000 0.000000 0.000000 0.000000 -0.781838 + 5 N 1 Y 0.000000 0.000000 0.000000 0.000000 0.000000 + 6 N 1 Z 0.000000 0.000000 0.258737 1.846911 0.000000 + 7 N 1 X 0.000000 0.000000 0.000000 0.000000 2.344241 + 8 N 1 Y 0.000000 0.000000 0.000000 0.000000 0.000000 + 9 N 1 Z 0.000000 0.000000 0.009720 -1.510964 0.000000 + 10 N 1 X 0.000000 0.000000 0.000000 0.000000 0.567421 + 11 N 1 Y 0.000000 0.000000 0.000000 0.000000 0.000000 + 12 N 1 Z 0.000000 0.000000 -1.510060 -1.122199 0.000000 + 13 N 1 XX 0.160421 0.000000 0.509935 0.286354 0.000000 + 14 N 1 YY -0.160421 0.000000 0.509935 0.286354 0.000000 + 15 N 1 ZZ 0.000000 0.000000 -1.019869 -0.572708 0.000000 + 16 N 1 XY 0.000000 0.185238 0.000000 0.000000 0.000000 + 17 N 1 XZ 0.000000 0.000000 0.000000 0.000000 -0.459356 + 18 N 1 YZ 0.000000 0.000000 0.000000 0.000000 0.000000 + 19 N 1 XX -0.410739 0.000000 -0.322506 -0.707641 0.000000 + 20 N 1 YY 0.410739 0.000000 -0.322506 -0.707641 0.000000 + 21 N 1 ZZ 0.000000 0.000000 0.645011 1.415282 0.000000 + 22 N 1 XY 0.000000 -0.474280 0.000000 0.000000 0.000000 + 23 N 1 XZ 0.000000 0.000000 0.000000 0.000000 -1.666507 + 24 N 1 YZ 0.000000 0.000000 0.000000 0.000000 0.000000 + 25 N XXX 0.000000 0.000000 0.000000 0.000000 -0.850944 + 26 N YYY 0.000000 0.000000 0.000000 0.000000 0.000000 + 27 N ZZZ 0.000000 0.000000 0.371112 -0.861490 0.000000 + 28 N XXY 0.000000 0.000000 0.000000 0.000000 0.000000 + 29 N XXZ 0.800098 0.000000 -0.248950 0.577905 0.000000 + 30 N YYX 0.000000 0.000000 0.000000 0.000000 -0.380554 + 31 N YYZ -0.800098 0.000000 -0.248950 0.577905 0.000000 + 32 N ZZX 0.000000 0.000000 0.000000 0.000000 1.522214 + 33 N ZZY 0.000000 0.000000 0.000000 0.000000 0.000000 + 34 N XYZ 0.000000 0.923873 0.000000 0.000000 0.000000 + 35 N 2 S 0.000000 0.000000 -0.004010 -1.125909 0.000000 + 36 N 2 S 0.000000 0.000000 0.265965 -0.740071 0.000000 + 37 N 2 S 0.000000 0.000000 -2.951107 0.817708 0.000000 + 38 N 2 X 0.000000 0.000000 0.000000 0.000000 0.781838 + 39 N 2 Y 0.000000 0.000000 0.000000 0.000000 0.000000 + 40 N 2 Z 0.000000 0.000000 0.258737 -1.846911 0.000000 + 41 N 2 X 0.000000 0.000000 0.000000 0.000000 -2.344241 + 42 N 2 Y 0.000000 0.000000 0.000000 0.000000 0.000000 + 43 N 2 Z 0.000000 0.000000 0.009720 1.510964 0.000000 + 44 N 2 X 0.000000 0.000000 0.000000 0.000000 -0.567421 + 45 N 2 Y 0.000000 0.000000 0.000000 0.000000 0.000000 + 46 N 2 Z 0.000000 0.000000 -1.510060 1.122199 0.000000 + 47 N 2 XX -0.160421 0.000000 -0.509935 0.286354 0.000000 + 48 N 2 YY 0.160421 0.000000 -0.509935 0.286354 0.000000 + 49 N 2 ZZ 0.000000 0.000000 1.019869 -0.572708 0.000000 + 50 N 2 XY 0.000000 -0.185238 0.000000 0.000000 0.000000 + 51 N 2 XZ 0.000000 0.000000 0.000000 0.000000 -0.459356 + 52 N 2 YZ 0.000000 0.000000 0.000000 0.000000 0.000000 + 53 N 2 XX 0.410739 0.000000 0.322506 -0.707641 0.000000 + 54 N 2 YY -0.410739 0.000000 0.322506 -0.707641 0.000000 + 55 N 2 ZZ 0.000000 0.000000 -0.645011 1.415282 0.000000 + 56 N 2 XY 0.000000 0.474280 0.000000 0.000000 0.000000 + 57 N 2 XZ 0.000000 0.000000 0.000000 0.000000 -1.666507 + 58 N 2 YZ 0.000000 0.000000 0.000000 0.000000 0.000000 + 59 N XXX 0.000000 0.000000 0.000000 0.000000 0.850944 + 60 N YYY 0.000000 0.000000 0.000000 0.000000 0.000000 + 61 N ZZZ 0.000000 0.000000 0.371112 0.861490 0.000000 + 62 N XXY 0.000000 0.000000 0.000000 0.000000 0.000000 + 63 N XXZ 0.800098 0.000000 -0.248950 -0.577905 0.000000 + 64 N YYX 0.000000 0.000000 0.000000 0.000000 0.380554 + 65 N YYZ -0.800098 0.000000 -0.248950 -0.577905 0.000000 + 66 N ZZX 0.000000 0.000000 0.000000 0.000000 -1.522214 + 67 N ZZY 0.000000 0.000000 0.000000 0.000000 0.000000 + 68 N XYZ 0.000000 0.923873 0.000000 0.000000 0.000000 + + 56 57 58 + 1.4046 2.1809 8.3622 + A A A + 1 N 1 S 0.000000 2.457874 5.817087 + 2 N 1 S 0.000000 -1.303970 -1.283603 + 3 N 1 S 0.000000 -1.294806 3.156830 + 4 N 1 X 0.000000 0.000000 0.000000 + 5 N 1 Y -0.781838 0.000000 0.000000 + 6 N 1 Z 0.000000 0.020991 0.599037 + 7 N 1 X 0.000000 0.000000 0.000000 + 8 N 1 Y 2.344241 0.000000 0.000000 + 9 N 1 Z 0.000000 -0.014766 -4.684513 + 10 N 1 X 0.000000 0.000000 0.000000 + 11 N 1 Y 0.567421 0.000000 0.000000 + 12 N 1 Z 0.000000 0.364338 -1.811900 + 13 N 1 XX 0.000000 -0.057395 -0.290361 + 14 N 1 YY 0.000000 -0.057395 -0.290361 + 15 N 1 ZZ 0.000000 0.114789 0.580721 + 16 N 1 XY 0.000000 0.000000 0.000000 + 17 N 1 XZ 0.000000 0.000000 0.000000 + 18 N 1 YZ -0.459356 0.000000 0.000000 + 19 N 1 XX 0.000000 0.194422 -0.859255 + 20 N 1 YY 0.000000 0.194422 -0.859255 + 21 N 1 ZZ 0.000000 -0.388844 1.718510 + 22 N 1 XY 0.000000 0.000000 0.000000 + 23 N 1 XZ 0.000000 0.000000 0.000000 + 24 N 1 YZ -1.666507 0.000000 0.000000 + 25 N XXX 0.000000 0.000000 0.000000 + 26 N YYY -0.850944 0.000000 0.000000 + 27 N ZZZ 0.000000 -0.057885 -0.578912 + 28 N XXY -0.380554 0.000000 0.000000 + 29 N XXZ 0.000000 0.038830 0.388346 + 30 N YYX 0.000000 0.000000 0.000000 + 31 N YYZ 0.000000 0.038830 0.388346 + 32 N ZZX 0.000000 0.000000 0.000000 + 33 N ZZY 1.522214 0.000000 0.000000 + 34 N XYZ 0.000000 0.000000 0.000000 + 35 N 2 S 0.000000 2.457874 -5.817087 + 36 N 2 S 0.000000 -1.303970 1.283603 + 37 N 2 S 0.000000 -1.294806 -3.156830 + 38 N 2 X 0.000000 0.000000 0.000000 + 39 N 2 Y 0.781838 0.000000 0.000000 + 40 N 2 Z 0.000000 -0.020991 0.599037 + 41 N 2 X 0.000000 0.000000 0.000000 + 42 N 2 Y -2.344241 0.000000 0.000000 + 43 N 2 Z 0.000000 0.014766 -4.684513 + 44 N 2 X 0.000000 0.000000 0.000000 + 45 N 2 Y -0.567421 0.000000 0.000000 + 46 N 2 Z 0.000000 -0.364338 -1.811900 + 47 N 2 XX 0.000000 -0.057395 0.290361 + 48 N 2 YY 0.000000 -0.057395 0.290361 + 49 N 2 ZZ 0.000000 0.114789 -0.580721 + 50 N 2 XY 0.000000 0.000000 0.000000 + 51 N 2 XZ 0.000000 0.000000 0.000000 + 52 N 2 YZ -0.459356 0.000000 0.000000 + 53 N 2 XX 0.000000 0.194422 0.859255 + 54 N 2 YY 0.000000 0.194422 0.859255 + 55 N 2 ZZ 0.000000 -0.388844 -1.718510 + 56 N 2 XY 0.000000 0.000000 0.000000 + 57 N 2 XZ 0.000000 0.000000 0.000000 + 58 N 2 YZ -1.666507 0.000000 0.000000 + 59 N XXX 0.000000 0.000000 0.000000 + 60 N YYY 0.850944 0.000000 0.000000 + 61 N ZZZ 0.000000 0.057885 -0.578912 + 62 N XXY 0.380554 0.000000 0.000000 + 63 N XXZ 0.000000 -0.038830 0.388346 + 64 N YYX 0.000000 0.000000 0.000000 + 65 N YYZ 0.000000 -0.038830 0.388346 + 66 N ZZX 0.000000 0.000000 0.000000 + 67 N ZZY -1.522214 0.000000 0.000000 + 68 N XYZ 0.000000 0.000000 0.000000 + ...... END OF RHF CALCULATION ...... + STEP CPU TIME = 0.60 TOTAL CPU TIME = 2.1 ( 0.0 MIN) + TOTAL WALL CLOCK TIME= 2.2 SECONDS, CPU UTILIZATION IS 99.07% + + ----------------- + ENERGY COMPONENTS + ----------------- + + WAVEFUNCTION NORMALIZATION = 1.0000000000 + + ONE ELECTRON ENERGY = -54.7994052775 + TWO ELECTRON ENERGY = 23.3014002516 + NUCLEAR REPULSION ENERGY = 12.0541514633 + ------------------ + TOTAL ENERGY = -19.4438535625 + + ELECTRON-ELECTRON POTENTIAL ENERGY = 23.3014002516 + NUCLEUS-ELECTRON POTENTIAL ENERGY = -68.6805281720 + NUCLEUS-NUCLEUS POTENTIAL ENERGY = 12.0541514633 + ------------------ + TOTAL POTENTIAL ENERGY = -33.3249764570 + TOTAL KINETIC ENERGY = 13.8811228945 + VIRIAL RATIO (V/T) = 2.4007406829 + + --------------------------------------- + MULLIKEN AND LOWDIN POPULATION ANALYSES + --------------------------------------- + + MULLIKEN ATOMIC POPULATION IN EACH MOLECULAR ORBITAL + + 1 2 3 4 5 + + 2.000000 2.000000 2.000000 2.000000 2.000000 + + 1 1.000000 1.000000 1.000000 1.000000 1.000000 + 2 1.000000 1.000000 1.000000 1.000000 1.000000 + + ----- POPULATIONS IN EACH AO ----- + MULLIKEN LOWDIN + 1 N 1 S 1.53827 0.32983 + 2 N 1 S -0.05625 0.14443 + 3 N 1 S 0.27681 0.26390 + 4 N 1 X 0.87341 0.40117 + 5 N 1 Y 0.87341 0.40117 + 6 N 1 Z 1.33300 0.60341 + 7 N 1 X -0.01191 0.19506 + 8 N 1 Y -0.01191 0.19506 + 9 N 1 Z -0.12048 0.31696 + 10 N 1 X 0.10466 0.16209 + 11 N 1 Y 0.10466 0.16209 + 12 N 1 Z 0.01079 0.19287 + 13 N 1 XX 0.00907 0.13119 + 14 N 1 YY 0.00000 0.13119 + 15 N 1 ZZ 0.00000 0.14762 + 16 N 1 XY 0.00526 0.00000 + 17 N 1 XZ 0.00526 0.00376 + 18 N 1 YZ 0.00000 0.00376 + 19 N 1 XX 0.00718 0.11876 + 20 N 1 YY 0.00000 0.11876 + 21 N 1 ZZ 0.00000 0.16618 + 22 N 1 XY 0.02611 0.00000 + 23 N 1 XZ 0.02611 0.03079 + 24 N 1 YZ 0.00000 0.03079 + 25 N XXX 0.00000 0.08710 + 26 N YYY 0.00000 0.08710 + 27 N ZZZ 0.00247 0.21071 + 28 N XXY 0.00161 0.04270 + 29 N XXZ 0.00247 0.06209 + 30 N YYX 0.00000 0.04270 + 31 N YYZ 0.00000 0.06209 + 32 N ZZX 0.00000 0.07732 + 33 N ZZY 0.00000 0.07732 + 34 N XYZ 0.00000 0.00000 + 35 N 2 S 1.53827 0.32983 + 36 N 2 S -0.05625 0.14443 + 37 N 2 S 0.27681 0.26390 + 38 N 2 X 0.87341 0.40117 + 39 N 2 Y 0.87341 0.40117 + 40 N 2 Z 1.33300 0.60341 + 41 N 2 X -0.01191 0.19506 + 42 N 2 Y -0.01191 0.19506 + 43 N 2 Z -0.12048 0.31696 + 44 N 2 X 0.10466 0.16209 + 45 N 2 Y 0.10466 0.16209 + 46 N 2 Z 0.01079 0.19287 + 47 N 2 XX 0.00907 0.13119 + 48 N 2 YY 0.00000 0.13119 + 49 N 2 ZZ 0.00000 0.14762 + 50 N 2 XY 0.00526 0.00000 + 51 N 2 XZ 0.00526 0.00376 + 52 N 2 YZ 0.00000 0.00376 + 53 N 2 XX 0.00718 0.11876 + 54 N 2 YY 0.00000 0.11876 + 55 N 2 ZZ 0.00000 0.16618 + 56 N 2 XY 0.02611 0.00000 + 57 N 2 XZ 0.02611 0.03079 + 58 N 2 YZ 0.00000 0.03079 + 59 N XXX 0.00000 0.08710 + 60 N YYY 0.00000 0.08710 + 61 N ZZZ 0.00247 0.21071 + 62 N XXY 0.00161 0.04270 + 63 N XXZ 0.00247 0.06209 + 64 N YYX 0.00000 0.04270 + 65 N YYZ 0.00000 0.06209 + 66 N ZZX 0.00000 0.07732 + 67 N ZZY 0.00000 0.07732 + 68 N XYZ 0.00000 0.00000 + + ----- MULLIKEN ATOMIC OVERLAP POPULATIONS ----- + (OFF-DIAGONAL ELEMENTS NEED TO BE MULTIPLIED BY 2) + + 1 2 + + 1 4.1770999 + 2 0.8229001 4.1770999 + + TOTAL MULLIKEN AND LOWDIN ATOMIC POPULATIONS + ATOM MULL.POP. CHARGE LOW.POP. CHARGE + 1 N 5.000000 0.000000 5.000000 0.000000 + 2 N 5.000000 0.000000 5.000000 0.000000 + + S,P,D,F,G SHELL MULLIKEN POPULATIONS + ATOM S P D F G TOTAL + 1 N 1.75883 3.15564 0.07897 0.00655 0.00000 5.000000 + 2 N 1.75883 3.15564 0.07897 0.00655 0.00000 5.000000 + + ------------------------------- + BOND ORDER AND VALENCE ANALYSIS BOND ORDER THRESHOLD=0.050 + ------------------------------- + + BOND BOND BOND + ATOM PAIR DIST ORDER ATOM PAIR DIST ORDER ATOM PAIR DIST ORDER + 1 2 1.098 2.949 + + TOTAL BONDED FREE + ATOM VALENCE VALENCE VALENCE + 1 N 2.949 2.949 0.000 + 2 N 2.949 2.949 0.000 + + --------------------- + ELECTROSTATIC MOMENTS + --------------------- + + POINT 1 X Y Z (BOHR) CHARGE + 0.000000 0.000000 0.000000 0.00 (A.U.) + DX DY DZ /D/ (DEBYE) + 0.000000 0.000000 0.000000 0.000000 + ...... END OF PROPERTY EVALUATION ...... + STEP CPU TIME = 0.03 TOTAL CPU TIME = 2.2 ( 0.0 MIN) + TOTAL WALL CLOCK TIME= 2.2 SECONDS, CPU UTILIZATION IS 99.09% + 100000 WORDS OF DYNAMIC MEMORY USED + EXECUTION OF GAMESS TERMINATED NORMALLY Tue Jun 22 18:00:32 2004 + +DATA SERVER STATS: TOTAL DISTRIBUTED MEMORY USED (MEMDDI)= 0 MWORDS. +FIRST DATA SERVER'S MAXIMUM MEMORY= 0 WORDS, CPU= 0.0 SECONDS. + +ddikick: all processes have ended gracefully. +unset echo +----- accounting info ----- +Tue Jun 22 18:00:34 EDT 2004 +Files used on the master node heze.physics.ncsu.edu were: +-rw-r--r-- 1 lubos user 2569 Jun 22 18:00 /tmp/lubos/n2.F05 +-rw-r--r-- 1 lubos user 8100540 Jun 22 18:00 /tmp/lubos/n2.F08 +-rw-r--r-- 1 lubos user 1017216 Jun 22 18:00 /tmp/lubos/n2.F10 +-rw-r--r-- 1 lubos user 67059 Jun 22 18:00 /tmp/lubos/n2.pun +1.890u 0.400s 0:04.39 52.1% 0+0k 0+0io 4856pf+0w diff --git a/examples/n2/n2.pun b/examples/n2/n2.pun new file mode 100644 index 00000000..5cc1d232 --- /dev/null +++ b/examples/n2/n2.pun @@ -0,0 +1,894 @@ + $DATA +N2 experimental bond length +C1 0 +N 7.0 0.0000000000 0.0000000000 0.5487500000 + S 8 + 1 47.0602760000 0.00106563 + 2 30.2492830000 -0.00489503 + 3 17.3364680000 0.01267533 + 4 5.0682259000 -0.02133820 + 5 4.4719543000 -0.15430793 + 6 0.9458361300 0.37090391 + 7 0.4311912100 0.57003045 + 8 0.1936754600 0.18613993 + S 1 + 1 1.2930000000 1.00000000 + S 1 + 1 0.1787000000 1.00000000 + P 8 + 1 26.8000180000 0.00055203 + 2 10.4272750000 0.02170528 + 3 10.7110010000 0.00957145 + 4 4.4962521000 0.09481654 + 5 2.0193243000 0.19748625 + 6 0.9165026500 0.36549339 + 7 0.4048200200 0.37327099 + 8 0.1752267800 0.14081325 + P 1 + 1 0.5550000000 1.00000000 + P 1 + 1 0.1725000000 1.00000000 + D 1 + 1 1.6540000000 1.00000000 + D 1 + 1 0.4690000000 1.00000000 + F 1 + 1 1.0930000000 1.00000000 + +N 7.0 0.0000000000 0.0000000000 -0.5487500000 + S 8 + 1 47.0602760000 0.00106563 + 2 30.2492830000 -0.00489503 + 3 17.3364680000 0.01267533 + 4 5.0682259000 -0.02133820 + 5 4.4719543000 -0.15430793 + 6 0.9458361300 0.37090391 + 7 0.4311912100 0.57003045 + 8 0.1936754600 0.18613993 + S 1 + 1 1.2930000000 1.00000000 + S 1 + 1 0.1787000000 1.00000000 + P 8 + 1 26.8000180000 0.00055203 + 2 10.4272750000 0.02170528 + 3 10.7110010000 0.00957145 + 4 4.4962521000 0.09481654 + 5 2.0193243000 0.19748625 + 6 0.9165026500 0.36549339 + 7 0.4048200200 0.37327099 + 8 0.1752267800 0.14081325 + P 1 + 1 0.5550000000 1.00000000 + P 1 + 1 0.1725000000 1.00000000 + D 1 + 1 1.6540000000 1.00000000 + D 1 + 1 0.4690000000 1.00000000 + F 1 + 1 1.0930000000 1.00000000 + + $END +--- CLOSED SHELL ORBITALS --- GENERATED AT Tue Jun 22 18:00:32 2004 +N2 experimental bond length +E(RHF)= -19.4438535625, E(NUC)= 12.0541514633, 9 ITERS + $VEC + 1 1 5.33297031E-01-3.44299350E-02-2.27990389E-02 0.00000000E+00 0.00000000E+00 + 1 2-3.05857763E-01 0.00000000E+00 0.00000000E+00 4.21502489E-02 0.00000000E+00 + 1 3 0.00000000E+00 5.15892354E-02-1.03335010E-02-1.03335010E-02 2.06670019E-02 + 1 4 0.00000000E+00 0.00000000E+00 0.00000000E+00-7.61172606E-03-7.61172606E-03 + 1 5 1.52234521E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 1 6 0.00000000E+00-6.60359637E-03 0.00000000E+00 4.42982711E-03 0.00000000E+00 + 1 7 4.42982711E-03 0.00000000E+00 0.00000000E+00 0.00000000E+00 5.33297031E-01 + 1 8-3.44299350E-02-2.27990389E-02 0.00000000E+00 0.00000000E+00 3.05857763E-01 + 1 9 0.00000000E+00 0.00000000E+00-4.21502489E-02 0.00000000E+00 0.00000000E+00 + 1 10-5.15892354E-02-1.03335010E-02-1.03335010E-02 2.06670019E-02 0.00000000E+00 + 1 11 0.00000000E+00 0.00000000E+00-7.61172606E-03-7.61172606E-03 1.52234521E-02 + 1 12 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 1 13 6.60359637E-03 0.00000000E+00-4.42982711E-03 0.00000000E+00-4.42982711E-03 + 1 14 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 2 1 0.00000000E+00 0.00000000E+00 0.00000000E+00 5.52139945E-01 0.00000000E+00 + 2 2 0.00000000E+00-7.69934061E-03 0.00000000E+00 0.00000000E+00 7.37638709E-02 + 2 3 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 2 4 0.00000000E+00-2.03616618E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 2 5 0.00000000E+00 0.00000000E+00-3.83094058E-02 0.00000000E+00-5.02134664E-03 + 2 6 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00-2.24561449E-03 + 2 7 0.00000000E+00 8.98245795E-03 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 2 8 0.00000000E+00 0.00000000E+00 5.52139945E-01 0.00000000E+00 0.00000000E+00 + 2 9-7.69934061E-03 0.00000000E+00 0.00000000E+00 7.37638709E-02 0.00000000E+00 + 2 10 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 2 11 2.03616618E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 2 12 0.00000000E+00 3.83094058E-02 0.00000000E+00-5.02134664E-03 0.00000000E+00 + 2 13 0.00000000E+00 0.00000000E+00 0.00000000E+00-2.24561449E-03 0.00000000E+00 + 2 14 8.98245795E-03 0.00000000E+00 0.00000000E+00 + 3 1 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 5.52139945E-01 + 3 2 0.00000000E+00 0.00000000E+00-7.69934061E-03 0.00000000E+00 0.00000000E+00 + 3 3 7.37638709E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 3 4 0.00000000E+00 0.00000000E+00-2.03616618E-02 0.00000000E+00 0.00000000E+00 + 3 5 0.00000000E+00 0.00000000E+00 0.00000000E+00-3.83094058E-02 0.00000000E+00 + 3 6-5.02134664E-03 0.00000000E+00-2.24561449E-03 0.00000000E+00 0.00000000E+00 + 3 7 0.00000000E+00 0.00000000E+00 8.98245795E-03 0.00000000E+00 0.00000000E+00 + 3 8 0.00000000E+00 0.00000000E+00 0.00000000E+00 5.52139945E-01 0.00000000E+00 + 3 9 0.00000000E+00-7.69934061E-03 0.00000000E+00 0.00000000E+00 7.37638709E-02 + 3 10 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 3 11 0.00000000E+00 2.03616618E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 3 12 0.00000000E+00 0.00000000E+00 3.83094058E-02 0.00000000E+00-5.02134664E-03 + 3 13 0.00000000E+00-2.24561449E-03 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 3 14 0.00000000E+00 8.98245795E-03 0.00000000E+00 + 4 1 5.63616840E-01-1.74485478E-02 1.61063548E-01 0.00000000E+00 0.00000000E+00 + 4 2 2.81028628E-01 0.00000000E+00 0.00000000E+00-2.18503416E-02 0.00000000E+00 + 4 3 0.00000000E+00 3.62139532E-02 1.55921093E-03 1.55921093E-03-3.11842185E-03 + 4 4 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.69201487E-03 1.69201487E-03 + 4 5-3.38402975E-03 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 4 6 0.00000000E+00-7.60138983E-04 0.00000000E+00 5.09916731E-04 0.00000000E+00 + 4 7 5.09916731E-04 0.00000000E+00 0.00000000E+00 0.00000000E+00-5.63616840E-01 + 4 8 1.74485478E-02-1.61063548E-01 0.00000000E+00 0.00000000E+00 2.81028628E-01 + 4 9 0.00000000E+00 0.00000000E+00-2.18503416E-02 0.00000000E+00 0.00000000E+00 + 4 10 3.62139532E-02-1.55921093E-03-1.55921093E-03 3.11842185E-03 0.00000000E+00 + 4 11 0.00000000E+00 0.00000000E+00-1.69201487E-03-1.69201487E-03 3.38402975E-03 + 4 12 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 4 13-7.60138983E-04 0.00000000E+00 5.09916731E-04 0.00000000E+00 5.09916731E-04 + 4 14 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 5 1 2.01290553E-01-7.28613605E-03 2.24073165E-01 0.00000000E+00 0.00000000E+00 + 5 2 6.14316536E-01 0.00000000E+00 0.00000000E+00-4.58225791E-02 0.00000000E+00 + 5 3 0.00000000E+00 2.85520916E-02 8.82844291E-03 8.82844291E-03-1.76568858E-02 + 5 4 0.00000000E+00 0.00000000E+00 0.00000000E+00 8.57686773E-03 8.57686773E-03 + 5 5-1.71537355E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 5 6 0.00000000E+00 3.51942090E-03 0.00000000E+00-2.36089932E-03 0.00000000E+00 + 5 7-2.36089932E-03 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.01290553E-01 + 5 8-7.28613605E-03 2.24073165E-01 0.00000000E+00 0.00000000E+00-6.14316536E-01 + 5 9 0.00000000E+00 0.00000000E+00 4.58225791E-02 0.00000000E+00 0.00000000E+00 + 5 10-2.85520916E-02 8.82844291E-03 8.82844291E-03-1.76568858E-02 0.00000000E+00 + 5 11 0.00000000E+00 0.00000000E+00 8.57686773E-03 8.57686773E-03-1.71537355E-02 + 5 12 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 5 13-3.51942090E-03 0.00000000E+00 2.36089932E-03 0.00000000E+00 2.36089932E-03 + 5 14 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 6 1 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00-1.22493979E+00 + 6 2 0.00000000E+00 0.00000000E+00 3.17730434E-01 0.00000000E+00 0.00000000E+00 + 6 3 2.49711444E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 6 4 0.00000000E+00 0.00000000E+00 3.83582768E-02 0.00000000E+00 0.00000000E+00 + 6 5 0.00000000E+00 0.00000000E+00 0.00000000E+00 7.08650828E-02 0.00000000E+00 + 6 6 5.78275109E-03 0.00000000E+00 2.58612490E-03 0.00000000E+00 0.00000000E+00 + 6 7 0.00000000E+00 0.00000000E+00-1.03444996E-02 0.00000000E+00 0.00000000E+00 + 6 8 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.22493979E+00 0.00000000E+00 + 6 9 0.00000000E+00-3.17730434E-01 0.00000000E+00 0.00000000E+00-2.49711444E-01 + 6 10 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 6 11 0.00000000E+00 3.83582768E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 6 12 0.00000000E+00 0.00000000E+00 7.08650828E-02 0.00000000E+00-5.78275109E-03 + 6 13 0.00000000E+00-2.58612490E-03 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 6 14 0.00000000E+00 1.03444996E-02 0.00000000E+00 + 7 1 0.00000000E+00 0.00000000E+00 0.00000000E+00-1.22493979E+00 0.00000000E+00 + 7 2 0.00000000E+00 3.17730434E-01 0.00000000E+00 0.00000000E+00 2.49711444E-01 + 7 3 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 7 4 0.00000000E+00 3.83582768E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 7 5 0.00000000E+00 0.00000000E+00 7.08650828E-02 0.00000000E+00 5.78275109E-03 + 7 6 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.58612490E-03 + 7 7 0.00000000E+00-1.03444996E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 7 8 0.00000000E+00 0.00000000E+00 1.22493979E+00 0.00000000E+00 0.00000000E+00 + 7 9-3.17730434E-01 0.00000000E+00 0.00000000E+00-2.49711444E-01 0.00000000E+00 + 7 10 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 7 11 3.83582768E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 7 12 0.00000000E+00 7.08650828E-02 0.00000000E+00-5.78275109E-03 0.00000000E+00 + 7 13 0.00000000E+00 0.00000000E+00 0.00000000E+00-2.58612490E-03 0.00000000E+00 + 7 14 1.03444996E-02 0.00000000E+00 0.00000000E+00 + 8 1-7.54426880E-01-1.47095614E-01 1.38671229E-02 0.00000000E+00 0.00000000E+00 + 8 2 1.28995129E+00 0.00000000E+00 0.00000000E+00-2.11245456E-01 0.00000000E+00 + 8 3 0.00000000E+00-1.67807370E-01 5.28485307E-03 5.28485307E-03-1.05697061E-02 + 8 4 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.81776041E-02 2.81776041E-02 + 8 5-5.63552082E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 8 6 0.00000000E+00-7.07967763E-03 0.00000000E+00 4.74919213E-03 0.00000000E+00 + 8 7 4.74919213E-03 0.00000000E+00 0.00000000E+00 0.00000000E+00 7.54426880E-01 + 8 8 1.47095614E-01-1.38671229E-02 0.00000000E+00 0.00000000E+00 1.28995129E+00 + 8 9 0.00000000E+00 0.00000000E+00-2.11245456E-01 0.00000000E+00 0.00000000E+00 + 8 10-1.67807370E-01-5.28485307E-03-5.28485307E-03 1.05697061E-02 0.00000000E+00 + 8 11 0.00000000E+00 0.00000000E+00-2.81776041E-02-2.81776041E-02 5.63552082E-02 + 8 12 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 8 13-7.07967763E-03 0.00000000E+00 4.74919213E-03 0.00000000E+00 4.74919213E-03 + 8 14 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 9 1-4.20198578E-01-1.94246401E-01 4.99105710E-01 0.00000000E+00 0.00000000E+00 + 9 2 3.31211707E-01 0.00000000E+00 0.00000000E+00-3.51954256E-01 0.00000000E+00 + 9 3 0.00000000E+00-3.22822727E-01 8.55362114E-02 8.55362114E-02-1.71072423E-01 + 9 4 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.07861783E-01 1.07861783E-01 + 9 5-2.15723566E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 9 6 0.00000000E+00 1.12196362E-01 0.00000000E+00-7.52636077E-02 0.00000000E+00 + 9 7-7.52636077E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00-4.20198578E-01 + 9 8-1.94246401E-01 4.99105710E-01 0.00000000E+00 0.00000000E+00-3.31211707E-01 + 9 9 0.00000000E+00 0.00000000E+00 3.51954256E-01 0.00000000E+00 0.00000000E+00 + 9 10 3.22822727E-01 8.55362114E-02 8.55362114E-02-1.71072423E-01 0.00000000E+00 + 9 11 0.00000000E+00 0.00000000E+00 1.07861783E-01 1.07861783E-01-2.15723566E-01 + 9 12 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 + 9 13-1.12196362E-01 0.00000000E+00 7.52636077E-02 0.00000000E+00 7.52636077E-02 + 9 14 0.00000000E+00 0.00000000E+00 0.00000000E+00 +10 1 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.48107770E+00 0.00000000E+00 +10 2 0.00000000E+00-8.53345193E-01 0.00000000E+00 0.00000000E+00-6.38676142E-01 +10 3 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +10 4 0.00000000E+00-2.83411046E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 +10 5 0.00000000E+00 0.00000000E+00 1.91362717E-01 0.00000000E+00-1.26801596E-02 +10 6 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00-5.67073978E-03 +10 7 0.00000000E+00 2.26829591E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 +10 8 0.00000000E+00 0.00000000E+00 1.48107770E+00 0.00000000E+00 0.00000000E+00 +10 9-8.53345193E-01 0.00000000E+00 0.00000000E+00-6.38676142E-01 0.00000000E+00 +10 10 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +10 11 2.83411046E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +10 12 0.00000000E+00-1.91362717E-01 0.00000000E+00-1.26801596E-02 0.00000000E+00 +10 13 0.00000000E+00 0.00000000E+00 0.00000000E+00-5.67073978E-03 0.00000000E+00 +10 14 2.26829591E-02 0.00000000E+00 0.00000000E+00 +11 1 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.48107770E+00 +11 2 0.00000000E+00 0.00000000E+00-8.53345193E-01 0.00000000E+00 0.00000000E+00 +11 3-6.38676142E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +11 4 0.00000000E+00 0.00000000E+00-2.83411046E-02 0.00000000E+00 0.00000000E+00 +11 5 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.91362717E-01 0.00000000E+00 +11 6-1.26801596E-02 0.00000000E+00-5.67073978E-03 0.00000000E+00 0.00000000E+00 +11 7 0.00000000E+00 0.00000000E+00 2.26829591E-02 0.00000000E+00 0.00000000E+00 +11 8 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.48107770E+00 0.00000000E+00 +11 9 0.00000000E+00-8.53345193E-01 0.00000000E+00 0.00000000E+00-6.38676142E-01 +11 10 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +11 11 0.00000000E+00 2.83411046E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 +11 12 0.00000000E+00 0.00000000E+00-1.91362717E-01 0.00000000E+00-1.26801596E-02 +11 13 0.00000000E+00-5.67073978E-03 0.00000000E+00 0.00000000E+00 0.00000000E+00 +11 14 0.00000000E+00 2.26829591E-02 0.00000000E+00 +12 1 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +12 2 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +12 3 0.00000000E+00 0.00000000E+00 1.45593634E-01-1.45593634E-01 0.00000000E+00 +12 4 0.00000000E+00 0.00000000E+00 0.00000000E+00 4.15776067E-01-4.15776067E-01 +12 5 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +12 6 0.00000000E+00 0.00000000E+00 0.00000000E+00-1.07821777E-01 0.00000000E+00 +12 7 1.07821777E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +12 8 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +12 9 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +12 10 0.00000000E+00 1.45593634E-01-1.45593634E-01 0.00000000E+00 0.00000000E+00 +12 11 0.00000000E+00 0.00000000E+00 4.15776067E-01-4.15776067E-01 0.00000000E+00 +12 12 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +12 13 0.00000000E+00 0.00000000E+00 1.07821777E-01 0.00000000E+00-1.07821777E-01 +12 14 0.00000000E+00 0.00000000E+00 0.00000000E+00 +13 1 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +13 2 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +13 3 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +13 4 1.68117048E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +13 5 0.00000000E+00 4.80096849E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 +13 6 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +13 7 0.00000000E+00 0.00000000E+00 0.00000000E+00-1.24501864E-01 0.00000000E+00 +13 8 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +13 9 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +13 10 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.68117048E-01 +13 11 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +13 12 4.80096849E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +13 13 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +13 14 0.00000000E+00 0.00000000E+00 1.24501864E-01 +14 1 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.67624485E-02 +14 2 0.00000000E+00 0.00000000E+00 4.73590467E-02 0.00000000E+00 0.00000000E+00 +14 3 1.94429791E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +14 4 0.00000000E+00 0.00000000E+00 2.52204961E-01 0.00000000E+00 0.00000000E+00 +14 5 0.00000000E+00 0.00000000E+00 0.00000000E+00 4.03141761E-01 0.00000000E+00 +14 6 7.27403757E-02 0.00000000E+00 3.25304850E-02 0.00000000E+00 0.00000000E+00 +14 7 0.00000000E+00 0.00000000E+00-1.30121940E-01 0.00000000E+00 0.00000000E+00 +14 8 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.67624485E-02 0.00000000E+00 +14 9 0.00000000E+00 4.73590467E-02 0.00000000E+00 0.00000000E+00 1.94429791E-01 +14 10 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +14 11 0.00000000E+00-2.52204961E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 +14 12 0.00000000E+00 0.00000000E+00-4.03141761E-01 0.00000000E+00 7.27403757E-02 +14 13 0.00000000E+00 3.25304850E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 +14 14 0.00000000E+00-1.30121940E-01 0.00000000E+00 +15 1 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.67624485E-02 0.00000000E+00 +15 2 0.00000000E+00 4.73590467E-02 0.00000000E+00 0.00000000E+00 1.94429791E-01 +15 3 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +15 4 0.00000000E+00 2.52204961E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 +15 5 0.00000000E+00 0.00000000E+00 4.03141761E-01 0.00000000E+00 7.27403757E-02 +15 6 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 3.25304850E-02 +15 7 0.00000000E+00-1.30121940E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 +15 8 0.00000000E+00 0.00000000E+00 1.67624485E-02 0.00000000E+00 0.00000000E+00 +15 9 4.73590467E-02 0.00000000E+00 0.00000000E+00 1.94429791E-01 0.00000000E+00 +15 10 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +15 11-2.52204961E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +15 12 0.00000000E+00-4.03141761E-01 0.00000000E+00 7.27403757E-02 0.00000000E+00 +15 13 0.00000000E+00 0.00000000E+00 0.00000000E+00 3.25304850E-02 0.00000000E+00 +15 14-1.30121940E-01 0.00000000E+00 0.00000000E+00 +16 1 7.46532173E-01 2.35267388E-01-8.93256518E-01 0.00000000E+00 0.00000000E+00 +16 2 9.49390913E-01 0.00000000E+00 0.00000000E+00-6.59227870E-01 0.00000000E+00 +16 3 0.00000000E+00-3.94683224E-01 6.31453953E-02 6.31453953E-02-1.26290791E-01 +16 4 0.00000000E+00 0.00000000E+00 0.00000000E+00 9.30046799E-02 9.30046799E-02 +16 5-1.86009360E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +16 6 0.00000000E+00 6.42776316E-02 0.00000000E+00-4.31187461E-02 0.00000000E+00 +16 7-4.31187461E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 7.46532173E-01 +16 8 2.35267388E-01-8.93256518E-01 0.00000000E+00 0.00000000E+00-9.49390913E-01 +16 9 0.00000000E+00 0.00000000E+00 6.59227870E-01 0.00000000E+00 0.00000000E+00 +16 10 3.94683224E-01 6.31453953E-02 6.31453953E-02-1.26290791E-01 0.00000000E+00 +16 11 0.00000000E+00 0.00000000E+00 9.30046799E-02 9.30046799E-02-1.86009360E-01 +16 12 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +16 13-6.42776316E-02 0.00000000E+00 4.31187461E-02 0.00000000E+00 4.31187461E-02 +16 14 0.00000000E+00 0.00000000E+00 0.00000000E+00 +17 1 9.12527781E-01 3.17900732E-01-2.31794605E+00 0.00000000E+00 0.00000000E+00 +17 2 7.46034402E-01 0.00000000E+00 0.00000000E+00-5.42656476E-01 0.00000000E+00 +17 3 0.00000000E+00 1.73200560E-01 7.44207774E-03 7.44207774E-03-1.48841555E-02 +17 4 0.00000000E+00 0.00000000E+00 0.00000000E+00-3.39973921E-02-3.39973921E-02 +17 5 6.79947843E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +17 6 0.00000000E+00 2.76930203E-03 0.00000000E+00-1.85770428E-03 0.00000000E+00 +17 7-1.85770428E-03 0.00000000E+00 0.00000000E+00 0.00000000E+00-9.12527781E-01 +17 8-3.17900732E-01 2.31794605E+00 0.00000000E+00 0.00000000E+00 7.46034402E-01 +17 9 0.00000000E+00 0.00000000E+00-5.42656476E-01 0.00000000E+00 0.00000000E+00 +17 10 1.73200560E-01-7.44207774E-03-7.44207774E-03 1.48841555E-02 0.00000000E+00 +17 11 0.00000000E+00 0.00000000E+00 3.39973921E-02 3.39973921E-02-6.79947843E-02 +17 12 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +17 13 2.76930203E-03 0.00000000E+00-1.85770428E-03 0.00000000E+00-1.85770428E-03 +17 14 0.00000000E+00 0.00000000E+00 0.00000000E+00 +18 1 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +18 2 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +18 3 0.00000000E+00 0.00000000E+00-1.78966615E-01 1.78966615E-01 0.00000000E+00 +18 4 0.00000000E+00 0.00000000E+00 0.00000000E+00-6.39068699E-01 6.39068699E-01 +18 5 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +18 6 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.98308943E-02 0.00000000E+00 +18 7-2.98308943E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +18 8 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +18 9 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +18 10 0.00000000E+00 1.78966615E-01-1.78966615E-01 0.00000000E+00 0.00000000E+00 +18 11 0.00000000E+00 0.00000000E+00 6.39068699E-01-6.39068699E-01 0.00000000E+00 +18 12 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +18 13 0.00000000E+00 0.00000000E+00 2.98308943E-02 0.00000000E+00-2.98308943E-02 +18 14 0.00000000E+00 0.00000000E+00 0.00000000E+00 +19 1 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +19 2 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +19 3 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +19 4-2.06652846E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +19 5 0.00000000E+00-7.37932970E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 +19 6 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +19 7 0.00000000E+00 0.00000000E+00 0.00000000E+00 3.44457497E-02 0.00000000E+00 +19 8 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +19 9 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +19 10 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.06652846E-01 +19 11 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +19 12 7.37932970E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +19 13 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +19 14 0.00000000E+00 0.00000000E+00 3.44457497E-02 +20 1 0.00000000E+00 0.00000000E+00 0.00000000E+00-9.11836907E-01 0.00000000E+00 +20 2 0.00000000E+00 6.51028935E-01 0.00000000E+00 0.00000000E+00 8.17191713E-01 +20 3 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +20 4 0.00000000E+00 1.21124134E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 +20 5 0.00000000E+00 0.00000000E+00 3.75590343E-01 0.00000000E+00 1.42986665E-02 +20 6 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 6.39455806E-03 +20 7 0.00000000E+00-2.55782322E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 +20 8 0.00000000E+00 0.00000000E+00 9.11836907E-01 0.00000000E+00 0.00000000E+00 +20 9-6.51028935E-01 0.00000000E+00 0.00000000E+00-8.17191713E-01 0.00000000E+00 +20 10 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +20 11 1.21124134E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +20 12 0.00000000E+00 3.75590343E-01 0.00000000E+00-1.42986665E-02 0.00000000E+00 +20 13 0.00000000E+00 0.00000000E+00 0.00000000E+00-6.39455806E-03 0.00000000E+00 +20 14 2.55782322E-02 0.00000000E+00 0.00000000E+00 +21 1 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00-9.11836907E-01 +21 2 0.00000000E+00 0.00000000E+00 6.51028935E-01 0.00000000E+00 0.00000000E+00 +21 3 8.17191713E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +21 4 0.00000000E+00 0.00000000E+00 1.21124134E-01 0.00000000E+00 0.00000000E+00 +21 5 0.00000000E+00 0.00000000E+00 0.00000000E+00 3.75590343E-01 0.00000000E+00 +21 6 1.42986665E-02 0.00000000E+00 6.39455806E-03 0.00000000E+00 0.00000000E+00 +21 7 0.00000000E+00 0.00000000E+00-2.55782322E-02 0.00000000E+00 0.00000000E+00 +21 8 0.00000000E+00 0.00000000E+00 0.00000000E+00 9.11836907E-01 0.00000000E+00 +21 9 0.00000000E+00-6.51028935E-01 0.00000000E+00 0.00000000E+00-8.17191713E-01 +21 10 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +21 11 0.00000000E+00 1.21124134E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 +21 12 0.00000000E+00 0.00000000E+00 3.75590343E-01 0.00000000E+00-1.42986665E-02 +21 13 0.00000000E+00-6.39455806E-03 0.00000000E+00 0.00000000E+00 0.00000000E+00 +21 14 0.00000000E+00 2.55782322E-02 0.00000000E+00 +22 1-4.72053707E-01-2.71596933E-01 1.70528112E+00 0.00000000E+00 0.00000000E+00 +22 2 7.62553891E-01 0.00000000E+00 0.00000000E+00-4.04186270E-01 0.00000000E+00 +22 3 0.00000000E+00-9.14898846E-01 7.02282696E-02 7.02282696E-02-1.40456539E-01 +22 4 0.00000000E+00 0.00000000E+00 0.00000000E+00 3.15484010E-01 3.15484010E-01 +22 5-6.30968019E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +22 6 0.00000000E+00 4.11335419E-04 0.00000000E+00-2.75932187E-04 0.00000000E+00 +22 7-2.75932187E-04 0.00000000E+00 0.00000000E+00 0.00000000E+00 4.72053707E-01 +22 8 2.71596933E-01-1.70528112E+00 0.00000000E+00 0.00000000E+00 7.62553891E-01 +22 9 0.00000000E+00 0.00000000E+00-4.04186270E-01 0.00000000E+00 0.00000000E+00 +22 10-9.14898846E-01-7.02282696E-02-7.02282696E-02 1.40456539E-01 0.00000000E+00 +22 11 0.00000000E+00 0.00000000E+00-3.15484010E-01-3.15484010E-01 6.30968019E-01 +22 12 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +22 13 4.11335419E-04 0.00000000E+00-2.75932187E-04 0.00000000E+00-2.75932187E-04 +22 14 0.00000000E+00 0.00000000E+00 0.00000000E+00 +23 1-6.25916433E-01-3.91731438E-01 3.52217729E-01 0.00000000E+00 0.00000000E+00 +23 2 1.07561320E+00 0.00000000E+00 0.00000000E+00-6.89666889E-01 0.00000000E+00 +23 3 0.00000000E+00-9.93859135E-01-1.16800530E-01-1.16800530E-01 2.33601060E-01 +23 4 0.00000000E+00 0.00000000E+00 0.00000000E+00-3.78174266E-01-3.78174266E-01 +23 5 7.56348533E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +23 6 0.00000000E+00 9.10204972E-02 0.00000000E+00-6.10584057E-02 0.00000000E+00 +23 7-6.10584057E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00-6.25916433E-01 +23 8-3.91731438E-01 3.52217729E-01 0.00000000E+00 0.00000000E+00-1.07561320E+00 +23 9 0.00000000E+00 0.00000000E+00 6.89666889E-01 0.00000000E+00 0.00000000E+00 +23 10 9.93859135E-01-1.16800530E-01-1.16800530E-01 2.33601060E-01 0.00000000E+00 +23 11 0.00000000E+00 0.00000000E+00-3.78174266E-01-3.78174266E-01 7.56348533E-01 +23 12 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +23 13-9.10204972E-02 0.00000000E+00 6.10584057E-02 0.00000000E+00 6.10584057E-02 +23 14 0.00000000E+00 0.00000000E+00 0.00000000E+00 +24 1 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 5.20931749E-01 +24 2 0.00000000E+00 0.00000000E+00-9.39406707E-01 0.00000000E+00 0.00000000E+00 +24 3-1.32997140E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +24 4 0.00000000E+00 0.00000000E+00 2.10635045E-01 0.00000000E+00 0.00000000E+00 +24 5 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.25787866E+00 0.00000000E+00 +24 6-2.93219412E-02 0.00000000E+00-1.31131708E-02 0.00000000E+00 0.00000000E+00 +24 7 0.00000000E+00 0.00000000E+00 5.24526831E-02 0.00000000E+00 0.00000000E+00 +24 8 0.00000000E+00 0.00000000E+00 0.00000000E+00-5.20931749E-01 0.00000000E+00 +24 9 0.00000000E+00 9.39406707E-01 0.00000000E+00 0.00000000E+00 1.32997140E+00 +24 10 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +24 11 0.00000000E+00 2.10635045E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 +24 12 0.00000000E+00 0.00000000E+00 1.25787866E+00 0.00000000E+00 2.93219412E-02 +24 13 0.00000000E+00 1.31131708E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 +24 14 0.00000000E+00-5.24526831E-02 0.00000000E+00 +25 1 0.00000000E+00 0.00000000E+00 0.00000000E+00 5.20931749E-01 0.00000000E+00 +25 2 0.00000000E+00-9.39406707E-01 0.00000000E+00 0.00000000E+00-1.32997140E+00 +25 3 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +25 4 0.00000000E+00 2.10635045E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 +25 5 0.00000000E+00 0.00000000E+00 1.25787866E+00 0.00000000E+00-2.93219412E-02 +25 6 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00-1.31131708E-02 +25 7 0.00000000E+00 5.24526831E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 +25 8 0.00000000E+00 0.00000000E+00-5.20931749E-01 0.00000000E+00 0.00000000E+00 +25 9 9.39406707E-01 0.00000000E+00 0.00000000E+00 1.32997140E+00 0.00000000E+00 +25 10 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +25 11 2.10635045E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +25 12 0.00000000E+00 1.25787866E+00 0.00000000E+00 2.93219412E-02 0.00000000E+00 +25 13 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.31131708E-02 0.00000000E+00 +25 14-5.24526831E-02 0.00000000E+00 0.00000000E+00 +26 1-2.17917546E-01 7.53484239E-02-7.54001086E-02 0.00000000E+00 0.00000000E+00 +26 2-9.48524637E-01 0.00000000E+00 0.00000000E+00 1.35479030E+00 0.00000000E+00 +26 3 0.00000000E+00-8.62819843E-01-1.02423076E-01-1.02423076E-01 2.04846151E-01 +26 4 0.00000000E+00 0.00000000E+00 0.00000000E+00 3.76411874E-02 3.76411874E-02 +26 5-7.52823748E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +26 6 0.00000000E+00-2.45351293E-01 0.00000000E+00 1.64586651E-01 0.00000000E+00 +26 7 1.64586651E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00-2.17917546E-01 +26 8 7.53484239E-02-7.54001086E-02 0.00000000E+00 0.00000000E+00 9.48524637E-01 +26 9 0.00000000E+00 0.00000000E+00-1.35479030E+00 0.00000000E+00 0.00000000E+00 +26 10 8.62819843E-01-1.02423076E-01-1.02423076E-01 2.04846151E-01 0.00000000E+00 +26 11 0.00000000E+00 0.00000000E+00 3.76411874E-02 3.76411874E-02-7.52823748E-02 +26 12 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +26 13 2.45351293E-01 0.00000000E+00-1.64586651E-01 0.00000000E+00-1.64586651E-01 +26 14 0.00000000E+00 0.00000000E+00 0.00000000E+00 +27 1 0.00000000E+00 0.00000000E+00 0.00000000E+00-1.61480748E+00 0.00000000E+00 +27 2 0.00000000E+00 2.06687940E+00 0.00000000E+00 0.00000000E+00-3.72781023E-01 +27 3 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +27 4 0.00000000E+00 5.89625677E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 +27 5 0.00000000E+00 0.00000000E+00 1.40602351E-01 0.00000000E+00 4.77295492E-03 +27 6 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.13453033E-03 +27 7 0.00000000E+00-8.53812133E-03 0.00000000E+00 0.00000000E+00 0.00000000E+00 +27 8 0.00000000E+00 0.00000000E+00-1.61480748E+00 0.00000000E+00 0.00000000E+00 +27 9 2.06687940E+00 0.00000000E+00 0.00000000E+00-3.72781023E-01 0.00000000E+00 +27 10 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +27 11-5.89625677E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +27 12 0.00000000E+00-1.40602351E-01 0.00000000E+00 4.77295492E-03 0.00000000E+00 +27 13 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.13453033E-03 0.00000000E+00 +27 14-8.53812133E-03 0.00000000E+00 0.00000000E+00 +28 1 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00-1.61480748E+00 +28 2 0.00000000E+00 0.00000000E+00 2.06687940E+00 0.00000000E+00 0.00000000E+00 +28 3-3.72781023E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +28 4 0.00000000E+00 0.00000000E+00 5.89625677E-02 0.00000000E+00 0.00000000E+00 +28 5 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.40602351E-01 0.00000000E+00 +28 6 4.77295492E-03 0.00000000E+00 2.13453033E-03 0.00000000E+00 0.00000000E+00 +28 7 0.00000000E+00 0.00000000E+00-8.53812133E-03 0.00000000E+00 0.00000000E+00 +28 8 0.00000000E+00 0.00000000E+00 0.00000000E+00-1.61480748E+00 0.00000000E+00 +28 9 0.00000000E+00 2.06687940E+00 0.00000000E+00 0.00000000E+00-3.72781023E-01 +28 10 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +28 11 0.00000000E+00-5.89625677E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 +28 12 0.00000000E+00 0.00000000E+00-1.40602351E-01 0.00000000E+00 4.77295492E-03 +28 13 0.00000000E+00 2.13453033E-03 0.00000000E+00 0.00000000E+00 0.00000000E+00 +28 14 0.00000000E+00-8.53812133E-03 0.00000000E+00 +29 1 1.33146309E-01 8.97741652E-02-9.99787013E+00 0.00000000E+00 0.00000000E+00 +29 2 6.44444979E-01 0.00000000E+00 0.00000000E+00-1.89481604E-01 0.00000000E+00 +29 3 0.00000000E+00 4.76383873E+00 7.51043305E-02 7.51043305E-02-1.50208661E-01 +29 4 0.00000000E+00 0.00000000E+00 0.00000000E+00 3.52916701E-01 3.52916701E-01 +29 5-7.05833402E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +29 6 0.00000000E+00 4.34359385E-02 0.00000000E+00-2.91377133E-02 0.00000000E+00 +29 7-2.91377133E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00-1.33146309E-01 +29 8-8.97741652E-02 9.99787013E+00 0.00000000E+00 0.00000000E+00 6.44444979E-01 +29 9 0.00000000E+00 0.00000000E+00-1.89481604E-01 0.00000000E+00 0.00000000E+00 +29 10 4.76383873E+00-7.51043305E-02-7.51043305E-02 1.50208661E-01 0.00000000E+00 +29 11 0.00000000E+00 0.00000000E+00-3.52916701E-01-3.52916701E-01 7.05833402E-01 +29 12 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +29 13 4.34359385E-02 0.00000000E+00-2.91377133E-02 0.00000000E+00-2.91377133E-02 +29 14 0.00000000E+00 0.00000000E+00 0.00000000E+00 +30 1 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.61948424E+00 0.00000000E+00 +30 2 0.00000000E+00-2.27980416E+00 0.00000000E+00 0.00000000E+00 9.21677889E-01 +30 3 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +30 4 0.00000000E+00-4.26542974E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 +30 5 0.00000000E+00 0.00000000E+00 2.05285672E-01 0.00000000E+00-6.61834385E-02 +30 6 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00-2.95981335E-02 +30 7 0.00000000E+00 1.18392534E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 +30 8 0.00000000E+00 0.00000000E+00-1.61948424E+00 0.00000000E+00 0.00000000E+00 +30 9 2.27980416E+00 0.00000000E+00 0.00000000E+00-9.21677889E-01 0.00000000E+00 +30 10 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +30 11-4.26542974E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +30 12 0.00000000E+00 2.05285672E-01 0.00000000E+00 6.61834385E-02 0.00000000E+00 +30 13 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.95981335E-02 0.00000000E+00 +30 14-1.18392534E-01 0.00000000E+00 0.00000000E+00 +31 1 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.61948424E+00 +31 2 0.00000000E+00 0.00000000E+00-2.27980416E+00 0.00000000E+00 0.00000000E+00 +31 3 9.21677889E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +31 4 0.00000000E+00 0.00000000E+00-4.26542974E-02 0.00000000E+00 0.00000000E+00 +31 5 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.05285672E-01 0.00000000E+00 +31 6-6.61834385E-02 0.00000000E+00-2.95981335E-02 0.00000000E+00 0.00000000E+00 +31 7 0.00000000E+00 0.00000000E+00 1.18392534E-01 0.00000000E+00 0.00000000E+00 +31 8 0.00000000E+00 0.00000000E+00 0.00000000E+00-1.61948424E+00 0.00000000E+00 +31 9 0.00000000E+00 2.27980416E+00 0.00000000E+00 0.00000000E+00-9.21677889E-01 +31 10 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +31 11 0.00000000E+00-4.26542974E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 +31 12 0.00000000E+00 0.00000000E+00 2.05285672E-01 0.00000000E+00 6.61834385E-02 +31 13 0.00000000E+00 2.95981335E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 +31 14 0.00000000E+00-1.18392534E-01 0.00000000E+00 +32 1 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00-2.52381352E-01 +32 2 0.00000000E+00 0.00000000E+00 1.75256244E-01 0.00000000E+00 0.00000000E+00 +32 3 1.75479481E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +32 4 0.00000000E+00 0.00000000E+00-4.54046273E-01 0.00000000E+00 0.00000000E+00 +32 5 0.00000000E+00 0.00000000E+00 0.00000000E+00 5.17080716E-01 0.00000000E+00 +32 6-2.32378098E-01 0.00000000E+00-1.03922645E-01 0.00000000E+00 0.00000000E+00 +32 7 0.00000000E+00 0.00000000E+00 4.15690578E-01 0.00000000E+00 0.00000000E+00 +32 8 0.00000000E+00 0.00000000E+00 0.00000000E+00-2.52381352E-01 0.00000000E+00 +32 9 0.00000000E+00 1.75256244E-01 0.00000000E+00 0.00000000E+00 1.75479481E-01 +32 10 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +32 11 0.00000000E+00 4.54046273E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 +32 12 0.00000000E+00 0.00000000E+00-5.17080716E-01 0.00000000E+00-2.32378098E-01 +32 13 0.00000000E+00-1.03922645E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 +32 14 0.00000000E+00 4.15690578E-01 0.00000000E+00 +33 1 0.00000000E+00 0.00000000E+00 0.00000000E+00-2.52381352E-01 0.00000000E+00 +33 2 0.00000000E+00 1.75256244E-01 0.00000000E+00 0.00000000E+00 1.75479481E-01 +33 3 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +33 4 0.00000000E+00-4.54046273E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 +33 5 0.00000000E+00 0.00000000E+00 5.17080716E-01 0.00000000E+00-2.32378098E-01 +33 6 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00-1.03922645E-01 +33 7 0.00000000E+00 4.15690578E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 +33 8 0.00000000E+00 0.00000000E+00-2.52381352E-01 0.00000000E+00 0.00000000E+00 +33 9 1.75256244E-01 0.00000000E+00 0.00000000E+00 1.75479481E-01 0.00000000E+00 +33 10 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +33 11 4.54046273E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +33 12 0.00000000E+00-5.17080716E-01 0.00000000E+00-2.32378098E-01 0.00000000E+00 +33 13 0.00000000E+00 0.00000000E+00 0.00000000E+00-1.03922645E-01 0.00000000E+00 +33 14 4.15690578E-01 0.00000000E+00 0.00000000E+00 +34 1 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +34 2 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +34 3 0.00000000E+00 0.00000000E+00 1.89898544E-01-1.89898544E-01 0.00000000E+00 +34 4 0.00000000E+00 0.00000000E+00 0.00000000E+00-3.07849642E-01 3.07849642E-01 +34 5 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +34 6 0.00000000E+00 0.00000000E+00 0.00000000E+00-4.91040165E-01 0.00000000E+00 +34 7 4.91040165E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +34 8 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +34 9 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +34 10 0.00000000E+00 1.89898544E-01-1.89898544E-01 0.00000000E+00 0.00000000E+00 +34 11 0.00000000E+00 0.00000000E+00-3.07849642E-01 3.07849642E-01 0.00000000E+00 +34 12 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +34 13 0.00000000E+00 0.00000000E+00 4.91040165E-01 0.00000000E+00-4.91040165E-01 +34 14 0.00000000E+00 0.00000000E+00 0.00000000E+00 +35 1 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +35 2 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +35 3 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +35 4 2.19275951E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +35 5 0.00000000E+00-3.55474147E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 +35 6 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +35 7 0.00000000E+00 0.00000000E+00 0.00000000E+00-5.67004343E-01 0.00000000E+00 +35 8 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +35 9 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +35 10 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.19275951E-01 +35 11 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +35 12-3.55474147E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +35 13 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +35 14 0.00000000E+00 0.00000000E+00 5.67004343E-01 +36 1 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +36 2 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +36 3 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +36 4 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +36 5 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +36 6-5.34143507E-01 0.00000000E+00 7.16628715E-01 0.00000000E+00 0.00000000E+00 +36 7 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +36 8 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +36 9 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +36 10 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +36 11 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +36 12 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00-5.34143507E-01 +36 13 0.00000000E+00 7.16628715E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 +36 14 0.00000000E+00 0.00000000E+00 0.00000000E+00 +37 1 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +37 2 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +37 3 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +37 4 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +37 5 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00-5.34143507E-01 +37 6 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 7.16628715E-01 +37 7 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +37 8 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +37 9 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +37 10 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +37 11 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +37 12 0.00000000E+00 0.00000000E+00 0.00000000E+00-5.34143507E-01 0.00000000E+00 +37 13 0.00000000E+00 0.00000000E+00 0.00000000E+00 7.16628715E-01 0.00000000E+00 +37 14 0.00000000E+00 0.00000000E+00 0.00000000E+00 +38 1-8.97348163E-02-2.72781648E-01-8.77193644E-02 0.00000000E+00 0.00000000E+00 +38 2-1.16371951E+00 0.00000000E+00 0.00000000E+00 1.32600524E+00 0.00000000E+00 +38 3 0.00000000E+00-6.22949124E-01 2.62591953E-01 2.62591953E-01-5.25183907E-01 +38 4 0.00000000E+00 0.00000000E+00 0.00000000E+00-4.08543173E-01-4.08543173E-01 +38 5 8.17086345E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +38 6 0.00000000E+00 1.84506809E-01 0.00000000E+00-1.23770930E-01 0.00000000E+00 +38 7-1.23770930E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00-8.97348163E-02 +38 8-2.72781648E-01-8.77193644E-02 0.00000000E+00 0.00000000E+00 1.16371951E+00 +38 9 0.00000000E+00 0.00000000E+00-1.32600524E+00 0.00000000E+00 0.00000000E+00 +38 10 6.22949124E-01 2.62591953E-01 2.62591953E-01-5.25183907E-01 0.00000000E+00 +38 11 0.00000000E+00 0.00000000E+00-4.08543173E-01-4.08543173E-01 8.17086345E-01 +38 12 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +38 13-1.84506809E-01 0.00000000E+00 1.23770930E-01 0.00000000E+00 1.23770930E-01 +38 14 0.00000000E+00 0.00000000E+00 0.00000000E+00 +39 1 9.01489956E-01 5.53536043E-01 1.14929026E+01 0.00000000E+00 0.00000000E+00 +39 2 1.47029891E+00 0.00000000E+00 0.00000000E+00-4.64054312E+00 0.00000000E+00 +39 3 0.00000000E+00-4.58173451E+00-6.51743806E-02-6.51743806E-02 1.30348761E-01 +39 4 0.00000000E+00 0.00000000E+00 0.00000000E+00-8.43356789E-01-8.43356789E-01 +39 5 1.68671358E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +39 6 0.00000000E+00-7.98698866E-02 0.00000000E+00 5.35783488E-02 0.00000000E+00 +39 7 5.35783488E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00-9.01489956E-01 +39 8-5.53536043E-01-1.14929026E+01 0.00000000E+00 0.00000000E+00 1.47029891E+00 +39 9 0.00000000E+00 0.00000000E+00-4.64054312E+00 0.00000000E+00 0.00000000E+00 +39 10-4.58173451E+00 6.51743806E-02 6.51743806E-02-1.30348761E-01 0.00000000E+00 +39 11 0.00000000E+00 0.00000000E+00 8.43356789E-01 8.43356789E-01-1.68671358E+00 +39 12 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +39 13-7.98698866E-02 0.00000000E+00 5.35783488E-02 0.00000000E+00 5.35783488E-02 +39 14 0.00000000E+00 0.00000000E+00 0.00000000E+00 +40 1 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +40 2 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +40 3 0.00000000E+00 0.00000000E+00 6.71349507E-01-6.71349507E-01 0.00000000E+00 +40 4 0.00000000E+00 0.00000000E+00 0.00000000E+00-3.48017129E-01 3.48017129E-01 +40 5 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +40 6 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.82516464E-01 0.00000000E+00 +40 7-1.82516464E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +40 8 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +40 9 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +40 10 0.00000000E+00 6.71349507E-01-6.71349507E-01 0.00000000E+00 0.00000000E+00 +40 11 0.00000000E+00 0.00000000E+00-3.48017129E-01 3.48017129E-01 0.00000000E+00 +40 12 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +40 13 0.00000000E+00 0.00000000E+00-1.82516464E-01 0.00000000E+00 1.82516464E-01 +40 14 0.00000000E+00 0.00000000E+00 0.00000000E+00 +41 1 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +41 2 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +41 3 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +41 4 7.75207638E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +41 5 0.00000000E+00-4.01855566E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 +41 6 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +41 7 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.10751859E-01 0.00000000E+00 +41 8 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +41 9 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +41 10 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 7.75207638E-01 +41 11 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +41 12-4.01855566E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +41 13 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +41 14 0.00000000E+00 0.00000000E+00-2.10751859E-01 +42 1 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +42 2 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +42 3 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +42 4 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +42 5 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +42 6-5.87723880E-01 0.00000000E+00 7.88514328E-01 0.00000000E+00 0.00000000E+00 +42 7 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +42 8 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +42 9 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +42 10 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +42 11 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +42 12 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 5.87723880E-01 +42 13 0.00000000E+00-7.88514328E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 +42 14 0.00000000E+00 0.00000000E+00 0.00000000E+00 +43 1 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +43 2 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +43 3 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +43 4 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +43 5 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00-5.87723880E-01 +43 6 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 7.88514328E-01 +43 7 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +43 8 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +43 9 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +43 10 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +43 11 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +43 12 0.00000000E+00 0.00000000E+00 0.00000000E+00 5.87723880E-01 0.00000000E+00 +43 13 0.00000000E+00 0.00000000E+00 0.00000000E+00-7.88514328E-01 0.00000000E+00 +43 14 0.00000000E+00 0.00000000E+00 0.00000000E+00 +44 1 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +44 2 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +44 3 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +44 4 7.95856352E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +44 5 0.00000000E+00-6.65745902E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 +44 6 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +44 7 0.00000000E+00 0.00000000E+00 0.00000000E+00-1.91747301E-01 0.00000000E+00 +44 8 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +44 9 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +44 10 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00-7.95856352E-01 +44 11 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +44 12 6.65745902E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +44 13 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +44 14 0.00000000E+00 0.00000000E+00-1.91747301E-01 +45 1 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +45 2 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +45 3 0.00000000E+00 0.00000000E+00 6.89231819E-01-6.89231819E-01 0.00000000E+00 +45 4 0.00000000E+00 0.00000000E+00 0.00000000E+00-5.76552864E-01 5.76552864E-01 +45 5 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +45 6 0.00000000E+00 0.00000000E+00 0.00000000E+00-1.66058033E-01 0.00000000E+00 +45 7 1.66058033E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +45 8 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +45 9 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +45 10 0.00000000E+00-6.89231819E-01 6.89231819E-01 0.00000000E+00 0.00000000E+00 +45 11 0.00000000E+00 0.00000000E+00 5.76552864E-01-5.76552864E-01 0.00000000E+00 +45 12 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +45 13 0.00000000E+00 0.00000000E+00-1.66058033E-01 0.00000000E+00 1.66058033E-01 +45 14 0.00000000E+00 0.00000000E+00 0.00000000E+00 +46 1 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.06202963E-01 +46 2 0.00000000E+00 0.00000000E+00-8.07291620E-01 0.00000000E+00 0.00000000E+00 +46 3-9.02490244E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +46 4 0.00000000E+00 0.00000000E+00-7.83259228E-01 0.00000000E+00 0.00000000E+00 +46 5 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.61330059E+00 0.00000000E+00 +46 6 1.64458785E-01 0.00000000E+00 7.35482045E-02 0.00000000E+00 0.00000000E+00 +46 7 0.00000000E+00 0.00000000E+00-2.94192818E-01 0.00000000E+00 0.00000000E+00 +46 8 0.00000000E+00 0.00000000E+00 0.00000000E+00-1.06202963E-01 0.00000000E+00 +46 9 0.00000000E+00 8.07291620E-01 0.00000000E+00 0.00000000E+00 9.02490244E-01 +46 10 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +46 11 0.00000000E+00-7.83259228E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 +46 12 0.00000000E+00 0.00000000E+00 1.61330059E+00 0.00000000E+00-1.64458785E-01 +46 13 0.00000000E+00-7.35482045E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 +46 14 0.00000000E+00 2.94192818E-01 0.00000000E+00 +47 1 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.06202963E-01 0.00000000E+00 +47 2 0.00000000E+00-8.07291620E-01 0.00000000E+00 0.00000000E+00-9.02490244E-01 +47 3 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +47 4 0.00000000E+00-7.83259228E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 +47 5 0.00000000E+00 0.00000000E+00 1.61330059E+00 0.00000000E+00 1.64458785E-01 +47 6 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 7.35482045E-02 +47 7 0.00000000E+00-2.94192818E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 +47 8 0.00000000E+00 0.00000000E+00-1.06202963E-01 0.00000000E+00 0.00000000E+00 +47 9 8.07291620E-01 0.00000000E+00 0.00000000E+00 9.02490244E-01 0.00000000E+00 +47 10 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +47 11-7.83259228E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +47 12 0.00000000E+00 1.61330059E+00 0.00000000E+00-1.64458785E-01 0.00000000E+00 +47 13 0.00000000E+00 0.00000000E+00 0.00000000E+00-7.35482045E-02 0.00000000E+00 +47 14 2.94192818E-01 0.00000000E+00 0.00000000E+00 +48 1-6.78446990E-01-4.86580086E-01-3.68410015E+00 0.00000000E+00 0.00000000E+00 +48 2 4.52677703E-01 0.00000000E+00 0.00000000E+00 9.99172547E-01 0.00000000E+00 +48 3 0.00000000E+00 1.46238627E+00-4.49052749E-02-4.49052749E-02 8.98105498E-02 +48 4 0.00000000E+00 0.00000000E+00 0.00000000E+00 4.58108177E-01 4.58108177E-01 +48 5-9.16216353E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +48 6 0.00000000E+00 8.93085958E-01 0.00000000E+00-5.99100274E-01 0.00000000E+00 +48 7-5.99100274E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 6.78446990E-01 +48 8 4.86580086E-01 3.68410015E+00 0.00000000E+00 0.00000000E+00 4.52677703E-01 +48 9 0.00000000E+00 0.00000000E+00 9.99172547E-01 0.00000000E+00 0.00000000E+00 +48 10 1.46238627E+00 4.49052749E-02 4.49052749E-02-8.98105498E-02 0.00000000E+00 +48 11 0.00000000E+00 0.00000000E+00-4.58108177E-01-4.58108177E-01 9.16216353E-01 +48 12 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +48 13 8.93085958E-01 0.00000000E+00-5.99100274E-01 0.00000000E+00-5.99100274E-01 +48 14 0.00000000E+00 0.00000000E+00 0.00000000E+00 +49 1 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00-4.69210113E-02 +49 2 0.00000000E+00 0.00000000E+00-2.28009960E-01 0.00000000E+00 0.00000000E+00 +49 3 9.13745035E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +49 4 0.00000000E+00 0.00000000E+00 6.80851490E-01 0.00000000E+00 0.00000000E+00 +49 5 0.00000000E+00 0.00000000E+00 0.00000000E+00-4.43315165E-01 0.00000000E+00 +49 6-3.47387394E-01 0.00000000E+00-1.55356365E-01 0.00000000E+00 0.00000000E+00 +49 7 0.00000000E+00 0.00000000E+00 6.21425461E-01 0.00000000E+00 0.00000000E+00 +49 8 0.00000000E+00 0.00000000E+00 0.00000000E+00-4.69210113E-02 0.00000000E+00 +49 9 0.00000000E+00-2.28009960E-01 0.00000000E+00 0.00000000E+00 9.13745035E-02 +49 10 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +49 11 0.00000000E+00-6.80851490E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 +49 12 0.00000000E+00 0.00000000E+00 4.43315165E-01 0.00000000E+00-3.47387394E-01 +49 13 0.00000000E+00-1.55356365E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 +49 14 0.00000000E+00 6.21425461E-01 0.00000000E+00 +50 1 0.00000000E+00 0.00000000E+00 0.00000000E+00-4.69210113E-02 0.00000000E+00 +50 2 0.00000000E+00-2.28009960E-01 0.00000000E+00 0.00000000E+00 9.13745035E-02 +50 3 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +50 4 0.00000000E+00 6.80851490E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 +50 5 0.00000000E+00 0.00000000E+00-4.43315165E-01 0.00000000E+00-3.47387394E-01 +50 6 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00-1.55356365E-01 +50 7 0.00000000E+00 6.21425461E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 +50 8 0.00000000E+00 0.00000000E+00-4.69210113E-02 0.00000000E+00 0.00000000E+00 +50 9-2.28009960E-01 0.00000000E+00 0.00000000E+00 9.13745035E-02 0.00000000E+00 +50 10 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +50 11-6.80851490E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +50 12 0.00000000E+00 4.43315165E-01 0.00000000E+00-3.47387394E-01 0.00000000E+00 +50 13 0.00000000E+00 0.00000000E+00 0.00000000E+00-1.55356365E-01 0.00000000E+00 +50 14 6.21425461E-01 0.00000000E+00 0.00000000E+00 +51 1 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +51 2 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +51 3 0.00000000E+00 0.00000000E+00 1.60420583E-01-1.60420583E-01 0.00000000E+00 +51 4 0.00000000E+00 0.00000000E+00 0.00000000E+00-4.10738620E-01 4.10738620E-01 +51 5 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +51 6 0.00000000E+00 0.00000000E+00 0.00000000E+00 8.00097662E-01 0.00000000E+00 +51 7-8.00097662E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +51 8 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +51 9 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +51 10 0.00000000E+00-1.60420583E-01 1.60420583E-01 0.00000000E+00 0.00000000E+00 +51 11 0.00000000E+00 0.00000000E+00 4.10738620E-01-4.10738620E-01 0.00000000E+00 +51 12 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +51 13 0.00000000E+00 0.00000000E+00 8.00097662E-01 0.00000000E+00-8.00097662E-01 +51 14 0.00000000E+00 0.00000000E+00 0.00000000E+00 +52 1 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +52 2 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +52 3 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +52 4 1.85237734E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +52 5 0.00000000E+00-4.74280106E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 +52 6 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +52 7 0.00000000E+00 0.00000000E+00 0.00000000E+00 9.23873201E-01 0.00000000E+00 +52 8 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +52 9 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +52 10 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00-1.85237734E-01 +52 11 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +52 12 4.74280106E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +52 13 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +52 14 0.00000000E+00 0.00000000E+00 9.23873201E-01 +53 1 4.01003920E-03-2.65964531E-01 2.95110716E+00 0.00000000E+00 0.00000000E+00 +53 2 2.58736646E-01 0.00000000E+00 0.00000000E+00 9.72012430E-03 0.00000000E+00 +53 3 0.00000000E+00-1.51006043E+00 5.09934613E-01 5.09934613E-01-1.01986923E+00 +53 4 0.00000000E+00 0.00000000E+00 0.00000000E+00-3.22505507E-01-3.22505507E-01 +53 5 6.45011014E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +53 6 0.00000000E+00 3.71112048E-01 0.00000000E+00-2.48949530E-01 0.00000000E+00 +53 7-2.48949530E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00-4.01003920E-03 +53 8 2.65964531E-01-2.95110716E+00 0.00000000E+00 0.00000000E+00 2.58736646E-01 +53 9 0.00000000E+00 0.00000000E+00 9.72012430E-03 0.00000000E+00 0.00000000E+00 +53 10-1.51006043E+00-5.09934613E-01-5.09934613E-01 1.01986923E+00 0.00000000E+00 +53 11 0.00000000E+00 0.00000000E+00 3.22505507E-01 3.22505507E-01-6.45011014E-01 +53 12 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +53 13 3.71112048E-01 0.00000000E+00-2.48949530E-01 0.00000000E+00-2.48949530E-01 +53 14 0.00000000E+00 0.00000000E+00 0.00000000E+00 +54 1-1.12590891E+00-7.40070825E-01 8.17708145E-01 0.00000000E+00 0.00000000E+00 +54 2 1.84691061E+00 0.00000000E+00 0.00000000E+00-1.51096381E+00 0.00000000E+00 +54 3 0.00000000E+00-1.12219898E+00 2.86353846E-01 2.86353846E-01-5.72707691E-01 +54 4 0.00000000E+00 0.00000000E+00 0.00000000E+00-7.07641200E-01-7.07641200E-01 +54 5 1.41528240E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +54 6 0.00000000E+00-8.61489736E-01 0.00000000E+00 5.77904883E-01 0.00000000E+00 +54 7 5.77904883E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00-1.12590891E+00 +54 8-7.40070825E-01 8.17708145E-01 0.00000000E+00 0.00000000E+00-1.84691061E+00 +54 9 0.00000000E+00 0.00000000E+00 1.51096381E+00 0.00000000E+00 0.00000000E+00 +54 10 1.12219898E+00 2.86353846E-01 2.86353846E-01-5.72707691E-01 0.00000000E+00 +54 11 0.00000000E+00 0.00000000E+00-7.07641200E-01-7.07641200E-01 1.41528240E+00 +54 12 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +54 13 8.61489736E-01 0.00000000E+00-5.77904883E-01 0.00000000E+00-5.77904883E-01 +54 14 0.00000000E+00 0.00000000E+00 0.00000000E+00 +55 1 0.00000000E+00 0.00000000E+00 0.00000000E+00-7.81838023E-01 0.00000000E+00 +55 2 0.00000000E+00 2.34424053E+00 0.00000000E+00 0.00000000E+00 5.67420622E-01 +55 3 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +55 4 0.00000000E+00-4.59355662E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 +55 5 0.00000000E+00 0.00000000E+00-1.66650687E+00 0.00000000E+00-8.50943504E-01 +55 6 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00-3.80553504E-01 +55 7 0.00000000E+00 1.52221402E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +55 8 0.00000000E+00 0.00000000E+00 7.81838023E-01 0.00000000E+00 0.00000000E+00 +55 9-2.34424053E+00 0.00000000E+00 0.00000000E+00-5.67420622E-01 0.00000000E+00 +55 10 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +55 11-4.59355662E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +55 12 0.00000000E+00-1.66650687E+00 0.00000000E+00 8.50943504E-01 0.00000000E+00 +55 13 0.00000000E+00 0.00000000E+00 0.00000000E+00 3.80553504E-01 0.00000000E+00 +55 14-1.52221402E+00 0.00000000E+00 0.00000000E+00 +56 1 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00-7.81838023E-01 +56 2 0.00000000E+00 0.00000000E+00 2.34424053E+00 0.00000000E+00 0.00000000E+00 +56 3 5.67420622E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +56 4 0.00000000E+00 0.00000000E+00-4.59355662E-01 0.00000000E+00 0.00000000E+00 +56 5 0.00000000E+00 0.00000000E+00 0.00000000E+00-1.66650687E+00 0.00000000E+00 +56 6-8.50943504E-01 0.00000000E+00-3.80553504E-01 0.00000000E+00 0.00000000E+00 +56 7 0.00000000E+00 0.00000000E+00 1.52221402E+00 0.00000000E+00 0.00000000E+00 +56 8 0.00000000E+00 0.00000000E+00 0.00000000E+00 7.81838023E-01 0.00000000E+00 +56 9 0.00000000E+00-2.34424053E+00 0.00000000E+00 0.00000000E+00-5.67420622E-01 +56 10 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +56 11 0.00000000E+00-4.59355662E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 +56 12 0.00000000E+00 0.00000000E+00-1.66650687E+00 0.00000000E+00 8.50943504E-01 +56 13 0.00000000E+00 3.80553504E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 +56 14 0.00000000E+00-1.52221402E+00 0.00000000E+00 +57 1 2.45787393E+00-1.30396995E+00-1.29480588E+00 0.00000000E+00 0.00000000E+00 +57 2 2.09914277E-02 0.00000000E+00 0.00000000E+00-1.47657507E-02 0.00000000E+00 +57 3 0.00000000E+00 3.64337567E-01-5.73947069E-02-5.73947069E-02 1.14789414E-01 +57 4 0.00000000E+00 0.00000000E+00 0.00000000E+00 1.94421851E-01 1.94421851E-01 +57 5-3.88843702E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +57 6 0.00000000E+00-5.78848009E-02 0.00000000E+00 3.88303049E-02 0.00000000E+00 +57 7 3.88303049E-02 0.00000000E+00 0.00000000E+00 0.00000000E+00 2.45787393E+00 +57 8-1.30396995E+00-1.29480588E+00 0.00000000E+00 0.00000000E+00-2.09914277E-02 +57 9 0.00000000E+00 0.00000000E+00 1.47657507E-02 0.00000000E+00 0.00000000E+00 +57 10-3.64337567E-01-5.73947069E-02-5.73947069E-02 1.14789414E-01 0.00000000E+00 +57 11 0.00000000E+00 0.00000000E+00 1.94421851E-01 1.94421851E-01-3.88843702E-01 +57 12 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +57 13 5.78848009E-02 0.00000000E+00-3.88303049E-02 0.00000000E+00-3.88303049E-02 +57 14 0.00000000E+00 0.00000000E+00 0.00000000E+00 +58 1 5.81708730E+00-1.28360332E+00 3.15683009E+00 0.00000000E+00 0.00000000E+00 +58 2 5.99037113E-01 0.00000000E+00 0.00000000E+00-4.68451291E+00 0.00000000E+00 +58 3 0.00000000E+00-1.81189953E+00-2.90360669E-01-2.90360669E-01 5.80721339E-01 +58 4 0.00000000E+00 0.00000000E+00 0.00000000E+00-8.59255230E-01-8.59255230E-01 +58 5 1.71851046E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +58 6 0.00000000E+00-5.78912367E-01 0.00000000E+00 3.88346222E-01 0.00000000E+00 +58 7 3.88346222E-01 0.00000000E+00 0.00000000E+00 0.00000000E+00-5.81708730E+00 +58 8 1.28360332E+00-3.15683009E+00 0.00000000E+00 0.00000000E+00 5.99037113E-01 +58 9 0.00000000E+00 0.00000000E+00-4.68451291E+00 0.00000000E+00 0.00000000E+00 +58 10-1.81189953E+00 2.90360669E-01 2.90360669E-01-5.80721339E-01 0.00000000E+00 +58 11 0.00000000E+00 0.00000000E+00 8.59255230E-01 8.59255230E-01-1.71851046E+00 +58 12 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 0.00000000E+00 +58 13-5.78912367E-01 0.00000000E+00 3.88346222E-01 0.00000000E+00 3.88346222E-01 +58 14 0.00000000E+00 0.00000000E+00 0.00000000E+00 + $END + POPULATION ANALYSIS +N 5.00000 0.00000 5.00000 0.00000 +N 5.00000 0.00000 5.00000 0.00000 + MOMENTS AT POINT 1 X,Y,Z= 0.000000 0.000000 0.000000 + DIPOLE 0.000000 0.000000 0.000000 diff --git a/examples/n2/n2_qmc.nodes b/examples/n2/n2_qmc.nodes new file mode 100644 index 00000000..4263075b --- /dev/null +++ b/examples/n2/n2_qmc.nodes @@ -0,0 +1,20 @@ +METHOD { + NODES + #uncomment the following to scan by specified electron + #CONTOURS { 1 5 2 6 5 10 } + + MINMAX { -4. 4. -4. 4. -5. 5. } + + RESOLUTION 0.1 + + #uncomment the following to read a configuration file + #READCONFIG n2_qmc.config.nodes + + #uncomment the following to proceed with double scanning with relative traslation of + # { x y z } of electron in pair as specified in CONTOURS + #DOUBLEMOVES { 0.0 0.0 0.3 0.0 0.0 0.3 0.0 0.0 0.3 } +} + +INCLUDE n2_qmc.sys +TRIALFUNC { INCLUDE n2_qmc.slater } + diff --git a/examples/p3_nodes/n_p3gamess.inp b/examples/p3_nodes/n_p3gamess.inp new file mode 100644 index 00000000..b6f0ea9f --- /dev/null +++ b/examples/p3_nodes/n_p3gamess.inp @@ -0,0 +1,28 @@ + $CONTRL SCFTYP=ROHF MULT=4 ECP=READ $END + $CONTRL MAXIT=30 ICHARG=2 $END + $GUESS GUESS=HCORE $END + $DATA +N +C1 +N 7. 0.00 0.00 0.0 + P 8 + 1 22.418770 0.20196617E-02 + 2 14.645104 -0.65822154E-02 + 3 10.880627 0.39232615E-01 + 4 4.5064673 0.11100382 + 5 1.8477713 0.27851099 + 6 0.76760375 0.44553038 + 7 0.32683185 0.28979886 + 8 0.14013694 0.30348772E-01 + + $END + $ECP +N-LN2 GEN 2 1 + 3 P + 5. 1 7.348473 + 36.742369 3 7.348473 + -29.945309 2 7.239787 + 2 S-P + 40.726174 2 7.186794 + -22.059630 4 6.279885 + $END diff --git a/examples/p3_nodes/n_p3gamess.out b/examples/p3_nodes/n_p3gamess.out new file mode 100644 index 00000000..3a42d1c0 --- /dev/null +++ b/examples/p3_nodes/n_p3gamess.out @@ -0,0 +1,456 @@ +mkdir: cannot create directory `/tmp/bajdich': File exists +----- GAMESS execution script ----- +This job is running on host atria.physics.ncsu.edu at Fri Jun 4 10:51:28 EDT 2004 +Available scratch disk space (Kbyte units) at beginning of the job is +Filesystem 1k-blocks Used Available Use% Mounted on +/dev/hda3 75228220 34809012 36597748 49% / +cp n_p3gamess.inp /tmp/bajdich/n_p3gamess.F05 +unset echo +setenv EXTBAS /dev/null +setenv IRCDATA /tmp/bajdich/n_p3gamess.irc +setenv INPUT /tmp/bajdich/n_p3gamess.F05 +setenv PUNCH /tmp/bajdich/n_p3gamess.pun +setenv AOINTS /tmp/bajdich/n_p3gamess.F08 +setenv MOINTS /tmp/bajdich/n_p3gamess.F09 +setenv DICTNRY /tmp/bajdich/n_p3gamess.F10 +setenv DRTFILE /tmp/bajdich/n_p3gamess.F11 +setenv CIVECTR /tmp/bajdich/n_p3gamess.F12 +setenv CASINTS /tmp/bajdich/n_p3gamess.F13 +setenv CIINTS /tmp/bajdich/n_p3gamess.F14 +setenv WORK15 /tmp/bajdich/n_p3gamess.F15 +setenv WORK16 /tmp/bajdich/n_p3gamess.F16 +setenv CSFSAVE /tmp/bajdich/n_p3gamess.F17 +setenv FOCKDER /tmp/bajdich/n_p3gamess.F18 +setenv DASORT /tmp/bajdich/n_p3gamess.F20 +setenv DFTINTS /tmp/bajdich/n_p3gamess.F21 +setenv DFTGRID /tmp/bajdich/n_p3gamess.F22 +setenv JKFILE /tmp/bajdich/n_p3gamess.F23 +setenv ORDINT /tmp/bajdich/n_p3gamess.F24 +setenv EFPIND /tmp/bajdich/n_p3gamess.F25 +setenv PCMDATA /tmp/bajdich/n_p3gamess.F26 +setenv PCMINTS /tmp/bajdich/n_p3gamess.F27 +setenv MLTPL /tmp/bajdich/n_p3gamess.F28 +setenv MLTPLT /tmp/bajdich/n_p3gamess.F29 +setenv DAFL30 /tmp/bajdich/n_p3gamess.F30 +setenv SOINTX /tmp/bajdich/n_p3gamess.F31 +setenv SOINTY /tmp/bajdich/n_p3gamess.F32 +setenv SOINTZ /tmp/bajdich/n_p3gamess.F33 +setenv SORESC /tmp/bajdich/n_p3gamess.F34 +setenv SIMEN /tmp/bajdich/n_p3gamess.simen +setenv SIMCOR /tmp/bajdich/n_p3gamess.simcor +setenv GCILIST /tmp/bajdich/n_p3gamess.F37 +setenv SOCCDAT /tmp/bajdich/n_p3gamess.F40 +setenv AABB41 /tmp/bajdich/n_p3gamess.F41 +setenv BBAA42 /tmp/bajdich/n_p3gamess.F42 +setenv BBBB43 /tmp/bajdich/n_p3gamess.F43 +setenv MCQD50 /tmp/bajdich/n_p3gamess.F50 +setenv MCQD51 /tmp/bajdich/n_p3gamess.F51 +setenv MCQD52 /tmp/bajdich/n_p3gamess.F52 +setenv MCQD53 /tmp/bajdich/n_p3gamess.F53 +setenv MCQD54 /tmp/bajdich/n_p3gamess.F54 +setenv MCQD55 /tmp/bajdich/n_p3gamess.F55 +setenv MCQD56 /tmp/bajdich/n_p3gamess.F56 +setenv MCQD57 /tmp/bajdich/n_p3gamess.F57 +setenv MCQD58 /tmp/bajdich/n_p3gamess.F58 +setenv MCQD59 /tmp/bajdich/n_p3gamess.F59 +setenv MCQD60 /tmp/bajdich/n_p3gamess.F60 +setenv MCQD61 /tmp/bajdich/n_p3gamess.F61 +setenv MCQD62 /tmp/bajdich/n_p3gamess.F62 +setenv MCQD63 /tmp/bajdich/n_p3gamess.F63 +setenv MCQD64 /tmp/bajdich/n_p3gamess.F64 +setenv CCREST /tmp/bajdich/n_p3gamess.F70 +setenv CCRLE /tmp/bajdich/n_p3gamess.F71 +setenv CCINTS /tmp/bajdich/n_p3gamess.F72 +setenv CCT1AMP /tmp/bajdich/n_p3gamess.F73 +setenv CCT2AMP /tmp/bajdich/n_p3gamess.F74 +setenv CCT3AMP /tmp/bajdich/n_p3gamess.F75 +setenv CCVM /tmp/bajdich/n_p3gamess.F76 +setenv CCVE /tmp/bajdich/n_p3gamess.F77 +unset echo +ddikick.x n_p3gamess /home/apps/gamess gamess.00.x /tmp/bajdich 1 atria.physics.ncsu.edu +Initiating 1 compute processes to run job n_p3gamess +Executable gamess.00.x will be run from directory /home/apps/gamess +Working scratch directory on each host will be /tmp/bajdich +Running gamess.00.x on atria.physics.ncsu.edu as compute process 0 +Running gamess.00.x on atria.physics.ncsu.edu as data server 1 + ****************************************************** + * GAMESS VERSION = 16 FEB 2002 (R4) * + * FROM IOWA STATE UNIVERSITY * + * M.W.SCHMIDT, K.K.BALDRIDGE, J.A.BOATZ, S.T.ELBERT, * + * M.S.GORDON, J.H.JENSEN, S.KOSEKI, N.MATSUNAGA, * + * K.A.NGUYEN, S.J.SU, T.L.WINDUS, * + * TOGETHER WITH M.DUPUIS, J.A.MONTGOMERY * + * J.COMPUT.CHEM. 14, 1347-1363(1993) * + ******************* PC-UNIX VERSION ****************** + + SINCE 1993, STUDENTS AND POSTDOCS WORKING AT IOWA STATE UNIVERSITY + AND ALSO IN THEIR VARIOUS JOBS AFTER LEAVING ISU HAVE MADE IMPORTANT + CONTRIBUTIONS TO THE CODE: + CHRISTINE AIKENS, ROB BELL, PRADIPTA BANDYOPADHYAY, BRETT BODE, + GALINA CHABAN, WEI CHEN, CHEOL CHOI, PAUL DAY, DMITRI FEDOROV, + GRAHAM FLETCHER, MARK FREITAG, KURT GLAESEMANN, GRANT MERRILL, + MIKE PAK, JIM SHOEMAKER, TETSUYA TAKETSUGU, SIMON WEBB. + + ADDITIONAL CODE HAS BEEN PROVIDED BY COLLABORATORS IN OTHER GROUPS: + IOWA STATE UNIVERSITY: JOE IVANIC, KLAUS RUEDENBERG + UNIVERSITY OF TOKYO: KIMIHIKO HIRAO, HARUYUKI NAKANO, TAKAHITO + NAKAJIMA, TAKAO TSUNEDA, MUNEAKI KAMIYA, SUSUMU YANAGISAWA + ODENSE UNIVERSITY: FRANK JENSEN + UNIVERSITY OF IOWA: VISVALDAS KAIRYS, HUI LI + NATIONAL INST. OF STANDARDS AND TECHNOLOGY: WALT STEVENS, DAVID GARMER + UNIVERSITY OF PISA: BENEDETTA MENNUCCI, JACOPO TOMASI + UNIVERSITY OF MEMPHIS: HENRY KURTZ, PRAKASHAN KORAMBATH + UNIVERSITY OF ALBERTA: MARIUSZ KLOBUKOWSKI + UNIVERSITY OF NEW ENGLAND: MARK SPACKMAN + MIE UNIVERSITY: HIROAKI UMEDA + MICHIGAN STATE UNIVERSITY: KAROL KOWALSKI, PIOTR PIECUCH + UNIVERSITY OF SILESIA: MONIKA MUSIAL, STANISLAW KUCHARSKI + + EXECUTION OF GAMESS BEGUN Fri Jun 4 10:51:28 2004 + + ECHO OF THE FIRST FEW INPUT CARDS - + INPUT CARD> $CONTRL SCFTYP=ROHF MULT=4 ECP=READ $END + INPUT CARD> $CONTRL MAXIT=30 ICHARG=2 $END + INPUT CARD> $GUESS GUESS=HCORE $END + INPUT CARD> $DATA + INPUT CARD>N + INPUT CARD>C1 + INPUT CARD>N 7. 0.00 0.00 0.0 + INPUT CARD> P 8 + INPUT CARD> 1 22.418770 0.20196617E-02 + INPUT CARD> 2 14.645104 -0.65822154E-02 + INPUT CARD> 3 10.880627 0.39232615E-01 + INPUT CARD> 4 4.5064673 0.11100382 + INPUT CARD> 5 1.8477713 0.27851099 + INPUT CARD> 6 0.76760375 0.44553038 + INPUT CARD> 7 0.32683185 0.28979886 + INPUT CARD> 8 0.14013694 0.30348772E-01 + INPUT CARD> + INPUT CARD> $END + INPUT CARD> $ECP + INPUT CARD>N-LN2 GEN 2 1 + INPUT CARD> 3 P + INPUT CARD> 5. 1 7.348473 + INPUT CARD> 36.742369 3 7.348473 + INPUT CARD> -29.945309 Process initiation completed. +2 7.239787 + INPUT CARD> 2 S-P + INPUT CARD> 40.726174 2 7.186794 + INPUT CARD> -22.059630 4 6.279885 + INPUT CARD> $END + + ..... DONE SETTING UP THE RUN ..... + 1000000 WORDS OF MEMORY AVAILABLE + + + RUN TITLE + --------- + N + + THE POINT GROUP OF THE MOLECULE IS C1 + THE ORDER OF THE PRINCIPAL AXIS IS 0 + *** WARNING! ATOM 1 SHELL 1 TYPE P HAS NORMALIZATION 0.99999622 + + ATOM ATOMIC COORDINATES (BOHR) + CHARGE X Y Z + N 7.0 0.0000000000 0.0000000000 0.0000000000 + + INTERNUCLEAR DISTANCES (ANGS.) + ------------------------------ + + N + + 1 N 0.0000000 + + * ... LESS THAN 3.000 + + + ATOMIC BASIS SET + ---------------- + THE CONTRACTED PRIMITIVE FUNCTIONS HAVE BEEN UNNORMALIZED + THE CONTRACTED BASIS FUNCTIONS ARE NOW NORMALIZED TO UNITY + + SHELL TYPE PRIMITIVE EXPONENT CONTRACTION COEFFICIENTS + + N + + 1 P 1 22.4187700 0.002019654062 + 1 P 2 14.6451040 -0.006582190508 + 1 P 3 10.8806270 0.039232466636 + 1 P 4 4.5064673 0.111003400221 + 1 P 5 1.8477713 0.278509936766 + 1 P 6 0.7676038 0.445528695155 + 1 P 7 0.3268319 0.289797764079 + 1 P 8 0.1401369 0.030348657231 + + TOTAL NUMBER OF BASIS SET SHELLS = 1 + NUMBER OF CARTESIAN GAUSSIAN BASIS FUNCTIONS = 3 + NUMBER OF ELECTRONS = 5 + CHARGE OF MOLECULE = 2 + SPIN MULTIPLICITY = 4 + NUMBER OF OCCUPIED ORBITALS (ALPHA) = 4 + NUMBER OF OCCUPIED ORBITALS (BETA ) = 1 + TOTAL NUMBER OF ATOMS = 1 + THE NUCLEAR REPULSION ENERGY IS 0.0000000000 + NOTE THIS RUN IS USING CORE POTENTIALS, AND THE NUMBER OF ELECTRONS, + OCCUPIED ORBITALS, AND NUCLEAR REPULSION ENERGY WILL BE ADJUSTED BELOW + AFTER REMOVAL OF THE CORE CHARGES. + + THIS MOLECULE IS RECOGNIZED AS BEING LINEAR. + + $CONTRL OPTIONS + --------------- + SCFTYP=ROHF RUNTYP=ENERGY EXETYP=RUN + MPLEVL= 0 CITYP =NONE CCTYP =NONE + MULT = 4 ICHARG= 2 NZVAR = 0 COORD =UNIQUE + ECP =READ RELWFN=NONE LOCAL =NONE + ISPHER= -1 NOSYM = 0 MAXIT = 30 UNITS =ANGS + PLTORB= F MOLPLT= F AIMPAC= F FRIEND= + NPRINT= 7 IREST = 0 GEOM =INPUT + NORMF = 0 NORMP = 0 ITOL = 20 ICUT = 9 + INTTYP=POPLE QMTTOL= 1.0E-06 + + $SYSTEM OPTIONS + --------------- + REPLICATED MEMORY= 1000000 WORDS (ON EVERY NODE). + DISTRIBUTED MEMDDI= 0 MILLION WORDS IN AGGREGATE, + MEMDDI DISTRIBUTED OVER 1 PROCESSORS IS 0 WORDS/PROCESSOR. + TOTAL MEMORY REQUESTED ON EACH PROCESSOR= 1000000 WORDS. + TIMLIM= 36000.0 SECONDS. + COREFL=F KDIAG= 0 + + -------------- + ECP POTENTIALS + -------------- + + PARAMETERS FOR "N-LN2 " ON ATOM 1 WITH ZCORE 2 AND LMAX 1 ARE + FOR L= 1 COEFF N ZETA + 1 5.00000 1 7.34847 + 2 36.74237 3 7.34847 + 3 -29.94531 2 7.23979 + FOR L= 0 COEFF N ZETA + 1 40.72617 2 7.18679 + 2 -22.05963 4 6.27989 + + THE ECP RUN REMOVES 2 CORE ELECTRONS, AND THE SAME NUMBER OF PROTONS. + NUMBER OF ELECTRONS KEPT IN THE CALCULATION IS = 3 + NUMBER OF OCCUPIED ORBITALS (ALPHA) KEPT IS = 3 + NUMBER OF OCCUPIED ORBITALS (BETA ) KEPT IS = 0 + THE ADJUSTED NUCLEAR REPULSION ENERGY= 0.0000000000 + ECP ANGULAR INTS......... 0.00 SECONDS + + ---------------- + PROPERTIES INPUT + ---------------- + + MOMENTS FIELD POTENTIAL DENSITY + IEMOM = 1 IEFLD = 0 IEPOT = 0 IEDEN = 0 + WHERE =COMASS WHERE =NUCLEI WHERE =NUCLEI WHERE =NUCLEI + OUTPUT=BOTH OUTPUT=BOTH OUTPUT=BOTH OUTPUT=BOTH + IEMINT= 0 IEFINT= 0 IEDINT= 0 + MORB = 0 + EXTRAPOLATION IN EFFECT + + ------------------------------- + INTEGRAL TRANSFORMATION OPTIONS + ------------------------------- + NWORD = 0 CUTOFF = 1.0E-09 + MPTRAN = 0 DIRTRF = F + AOINTS =DUP + + ---------------------- + INTEGRAL INPUT OPTIONS + ---------------------- + NOPK = 1 NORDER= 0 SCHWRZ= F + + ------------------------------------------ + THE POINT GROUP IS C1 , NAXIS= 0, ORDER= 1 + ------------------------------------------ + + DIMENSIONS OF THE SYMMETRY SUBSPACES ARE + A = 3 + + ..... DONE SETTING UP THE RUN ..... + STEP CPU TIME = 0.01 TOTAL CPU TIME = 0.0 ( 0.0 MIN) + TOTAL WALL CLOCK TIME= 0.0 SECONDS, CPU UTILIZATION IS 100.00% + + ******************** + 1 ELECTRON INTEGRALS + ******************** + TIME TO DO ORDINARY INTEGRALS= 0.00 + TIME TO DO ECP INTEGRALS= 0.00 + ...... END OF ONE-ELECTRON INTEGRALS ...... + STEP CPU TIME = 0.00 TOTAL CPU TIME = 0.0 ( 0.0 MIN) + TOTAL WALL CLOCK TIME= 0.0 SECONDS, CPU UTILIZATION IS 100.00% + + ------------- + GUESS OPTIONS + ------------- + GUESS =HCORE NORB = 0 NORDER= 0 + MIX = F PRTMO = F PUNMO = F + TOLZ = 1.0E-08 TOLE = 1.0E-05 + SYMDEN= F PURIFY= F + + INITIAL GUESS ORBITALS GENERATED BY HCORE ROUTINE. + + SYMMETRIES FOR INITIAL GUESS ORBITALS FOLLOW. ALPHA SET(S). + 3 ORBITALS ARE OCCUPIED ( 0 CORE ORBITALS). + 1=A 2=A 3=A + ...... END OF INITIAL ORBITAL SELECTION ...... + STEP CPU TIME = 0.00 TOTAL CPU TIME = 0.0 ( 0.0 MIN) + TOTAL WALL CLOCK TIME= 0.0 SECONDS, CPU UTILIZATION IS 100.00% + + -------------------- + 2 ELECTRON INTEGRALS + -------------------- + + THE -PK- OPTION IS OFF, THE INTEGRALS ARE NOT IN SUPERMATRIX FORM. + STORING 15000 INTEGRALS/RECORD ON DISK, USING 12 BYTES/INTEGRAL. + TWO ELECTRON INTEGRAL EVALUATION REQUIRES 59657 WORDS OF MEMORY. + II,JST,KST,LST = 1 1 1 1 NREC = 1 INTLOC = 1 + TOTAL NUMBER OF NONZERO TWO-ELECTRON INTEGRALS = 9 + 1 INTEGRAL RECORDS WERE STORED ON DISK FILE 8. + ...... END OF TWO-ELECTRON INTEGRALS ..... + STEP CPU TIME = 0.01 TOTAL CPU TIME = 0.0 ( 0.0 MIN) + TOTAL WALL CLOCK TIME= 0.0 SECONDS, CPU UTILIZATION IS 100.00% + + --------------------------- + ROHF SCF CALCULATION + --------------------------- + + NUCLEAR ENERGY = 0.0000000000 + MAXIT = 30 NPUNCH= 2 MULT= 4 + EXTRAP=T DAMP=F SHIFT=F RSTRCT=F DIIS=F SOSCF=F + DENSITY CONV= 1.00E-05 + ROHF CANONICALIZATION PARAMETERS + C-C O-O V-V + ALPHA -0.5000 0.5000 1.5000 + BETA 1.5000 0.5000 -0.5000 + MEMORY REQUIRED FOR UHF/ROHF STEP= 30126 WORDS. + + ITER EX TOTAL ENERGY E CHANGE DENSITY CHANGE DIIS ERROR + 1 0 -7.247139917 -7.247139917 0.000000000 0.000000000 + 2 1 -7.247139917 0.000000000 0.000000000 0.000000000 + + ----------------- + DENSITY CONVERGED + ----------------- + + FINAL ROHF ENERGY IS -7.2471399168 AFTER 2 ITERATIONS + + -------------------- + SPIN SZ = 1.500 + S-SQUARED = 3.750 + -------------------- + + ------------ + EIGENVECTORS + ------------ + + 1 2 3 + -1.6932 -1.6932 -1.6932 + A A A + 1 N 1 X 0.000000 0.000000 1.000000 + 2 N 1 Y 0.000000 1.000000 0.000000 + 3 N 1 Z 1.000000 0.000000 0.000000 + ...... END OF ROHF CALCULATION ...... + STEP CPU TIME = 0.00 TOTAL CPU TIME = 0.0 ( 0.0 MIN) + TOTAL WALL CLOCK TIME= 0.0 SECONDS, CPU UTILIZATION IS 100.00% + + ----------------- + ENERGY COMPONENTS + ----------------- + + WAVEFUNCTION NORMALIZATION = 1.0000000000 + + ONE ELECTRON ENERGY = -9.4146648838 + TWO ELECTRON ENERGY = 2.1675249670 + NUCLEAR REPULSION ENERGY = 0.0000000000 + ------------------ + TOTAL ENERGY = -7.2471399168 + + ELECTRON-ELECTRON POTENTIAL ENERGY = 2.1675249670 + NUCLEUS-ELECTRON POTENTIAL ENERGY = -16.9645527796 + NUCLEUS-NUCLEUS POTENTIAL ENERGY = 0.0000000000 + ------------------ + TOTAL POTENTIAL ENERGY = -14.7970278126 + TOTAL KINETIC ENERGY = 7.5498878958 + VIRIAL RATIO (V/T) = 1.9599003345 + + --------------------------------------- + MULLIKEN AND LOWDIN POPULATION ANALYSES + --------------------------------------- + + MULLIKEN ATOMIC POPULATION IN EACH MOLECULAR ORBITAL + + 1 2 3 + + 1.000000 1.000000 1.000000 + + 1 1.000000 1.000000 1.000000 + + ATOMIC SPIN POPULATION (ALPHA MINUS BETA) + ATOM MULL.POP. LOW.POP. + 1 N 3.000000 3.000000 + + ----- POPULATIONS IN EACH AO ----- + MULLIKEN LOWDIN + 1 N 1 X 1.00000 1.00000 + 2 N 1 Y 1.00000 1.00000 + 3 N 1 Z 1.00000 1.00000 + + ----- MULLIKEN ATOMIC OVERLAP POPULATIONS ----- + (OFF-DIAGONAL ELEMENTS NEED TO BE MULTIPLIED BY 2) + + 1 + + 1 3.0000000 + + TOTAL MULLIKEN AND LOWDIN ATOMIC POPULATIONS + ATOM MULL.POP. CHARGE LOW.POP. CHARGE + 1 N 3.000000 2.000000 3.000000 2.000000 + + ------------------------------- + BOND ORDER AND VALENCE ANALYSIS BOND ORDER THRESHOLD=0.050 + ------------------------------- + + BOND BOND BOND + ATOM PAIR DIST ORDER ATOM PAIR DIST ORDER ATOM PAIR DIST ORDER + + TOTAL BONDED FREE + ATOM VALENCE VALENCE VALENCE + 1 N 3.000 0.000 3.000 + + ----------------------------------------- + ATOMIC SPIN DENSITY AT THE NUCLEUS (A.U.) + ----------------------------------------- + SPIN DENS ALPHA DENS BETA DENS + 1 N 5.0 0.0000000 0.00000 0.00000 + + --------------------- + ELECTROSTATIC MOMENTS + --------------------- + + POINT 1 X Y Z (BOHR) CHARGE + 0.000000 0.000000 0.000000 2.00 (A.U.) + DX DY DZ /D/ (DEBYE) + 0.000000 0.000000 0.000000 0.000000 + ...... END OF PROPERTY EVALUATION ...... + STEP CPU TIME = 0.00 TOTAL CPU TIME = 0.0 ( 0.0 MIN) + TOTAL WALL CLOCK TIME= 0.0 SECONDS, CPU UTILIZATION IS 100.00% + 100000 WORDS OF DYNAMIC MEMORY USED + EXECUTION OF GAMESS TERMINATED NORMALLY Fri Jun 4 10:51:28 2004 + +DATA SERVER STATS: TOTAL DISTRIBUTED MEMORY USED (MEMDDI)= 0 MWORDS. +FIRST DATA SERVER'S MAXIMUM MEMORY= 0 WORDS, CPU= 0.0 SECONDS. + +ddikick: all processes have ended gracefully. +unset echo +----- accounting info ----- +Fri Jun 4 10:51:30 EDT 2004 +Files used on the master node atria.physics.ncsu.edu were: +-rw-r--r-- 1 bajdich user 681 Jun 4 10:51 /tmp/bajdich/n_p3gamess.F05 +-rw-r--r-- 1 bajdich user 180012 Jun 4 10:51 /tmp/bajdich/n_p3gamess.F08 +-rw-r--r-- 1 bajdich user 401064 Jun 4 10:51 /tmp/bajdich/n_p3gamess.F10 +-rw-r--r-- 1 bajdich user 1118 Jun 4 10:51 /tmp/bajdich/n_p3gamess.pun +0.070u 0.060s 0:02.20 5.9% 0+0k 0+0io 4891pf+0w diff --git a/examples/p3_nodes/n_p3gamess.pun b/examples/p3_nodes/n_p3gamess.pun new file mode 100644 index 00000000..bbf45d30 --- /dev/null +++ b/examples/p3_nodes/n_p3gamess.pun @@ -0,0 +1,27 @@ + $DATA +N +C1 0 +N 7.0 0.0000000000 0.0000000000 0.0000000000 + P 8 + 1 22.4187700000 0.00201966 + 2 14.6451040000 -0.00658222 + 3 10.8806270000 0.03923262 + 4 4.5064673000 0.11100382 + 5 1.8477713000 0.27851099 + 6 0.7676037500 0.44553038 + 7 0.3268318500 0.28979886 + 8 0.1401369400 0.03034877 + + $END +--- OPEN SHELL ORBITALS --- GENERATED AT Fri Jun 4 10:51:28 2004 +N +E(ROHF)= -7.2471399168, E(NUC)= 0.0000000000, 2 ITERS + $VEC + 1 1 0.00000000E+00 0.00000000E+00 1.00000000E+00 + 2 1 0.00000000E+00 1.00000000E+00 0.00000000E+00 + 3 1 1.00000000E+00 0.00000000E+00 0.00000000E+00 + $END + POPULATION ANALYSIS +N 3.00000 2.00000 3.00000 2.00000 + MOMENTS AT POINT 1 X,Y,Z= 0.000000 0.000000 0.000000 + DIPOLE 0.000000 0.000000 0.000000 diff --git a/examples/p3_nodes/p3.nodes b/examples/p3_nodes/p3.nodes new file mode 100644 index 00000000..f2d40dbf --- /dev/null +++ b/examples/p3_nodes/p3.nodes @@ -0,0 +1,14 @@ +METHOD { + NODES + CONTOURS { 3 } #from 3 elec. we choose the last one to scan + MINMAX { -5. 5. -5. 5. -5. 5. } + RESOLUTION 0.2 + READCONFIG p3.nodes.config #starting configuration comes here +} + +INCLUDE p3.sys +TRIALFUNC { INCLUDE p3.slater } +TRIALFUNC { INCLUDE p3.slater } +#TRIALFUNC { INCLUDE p3.opt.wfout_jast } +#TRIALFUNC { INCLUDE p3.opt.wfout_jast2 } + diff --git a/src/Makefile b/src/Makefile new file mode 100644 index 00000000..992b6965 --- /dev/null +++ b/src/Makefile @@ -0,0 +1,62 @@ +#################################################################### +# Set platform and build specific information +# any of these can be overridden by environment variables of the +# same name, or by command line options "make target PLATFORM=foo" +PLATFORM = $(shell uname -s) +DVLPATH = . + +#################################################################### +# Derived paths, all relative to the base path. These shouldn't +# change without restructuring the make environment + +MAKEPATH:=$(DVLPATH)/make +OBJPATH:=$(DVLPATH)/obj/$(PLATFORM) +SRCPATH:=$(DVLPATH) +PROJECT:=$(DVLPATH)/qwalk-$(PLATFORM) +DEPENDFILE:=$(OBJPATH)/depend + +include make.include +include basis_function/make.include +include macopt/make.include +include method/make.include +include orbitals/make.include +include program_utils/make.include +include properties/make.include +include system/make.include +include wavefunction/make.include + +#remove the directory prefix and .cpp extension, and add the .o extension +OBJS:= $(addprefix $(OBJPATH)/,$(addsuffix .o,$(notdir $(basename $(SOURCES))))) +NODEPENDGOALS = depend clean totalclean cleanhtml html all + +#################################################################### +# Special rules +all: $(PROJECT) gosling +.PHONY: clean totalclean depend gosling pw2lcao +#.SILENT: +#################################################################### +# Included files for dependency and platform specific defines +include $(MAKEPATH)/$(PLATFORM).mk +include $(DEPENDFILE) + +#################################################################### +# Project and build rules + +$(PROJECT):$(OBJS) + @echo ________________________________________________________________ + @echo Linking $@ + $(CXX) $(DEBUG) $(CXXFLAGS) -o $(PROJECT) $(OBJS) $(LDFLAGS) $(BLAS_LIBS) + +gosling: + $(MAKE) -f Makefile.gosling + +pw2lcao: + $(MAKE) -f Makefile.pw2lcao + +clean: + @echo ________________________________________________________________ + @echo Cleaning object files... + rm -f $(OBJS) core $(PROJECT) + make -f Makefile.gosling clean + +include make.rules diff --git a/src/Makefile.gosling b/src/Makefile.gosling new file mode 100644 index 00000000..f91a8c89 --- /dev/null +++ b/src/Makefile.gosling @@ -0,0 +1,55 @@ +#################################################################### +# Set platform and build specific information +# any of these can be overridden by environment variables of the +# same name, or by command line options "make target PLATFORM=foo" +PLATFORM = $(shell uname -s) +DVLPATH = . + +#################################################################### +# Derived paths, all relative to the base path. These shouldn't +# change without restructuring the make environment + +MAKEPATH:=$(DVLPATH)/make +OBJPATH:=$(DVLPATH)/obj/$(PLATFORM) +SRCPATH:=$(DVLPATH) +PROJECT:=$(DVLPATH)/gosling-$(PLATFORM) +DEPENDFILE:=$(OBJPATH)/depend.gosling + +include make.include + +SOURCES:=properties/Properties_average.cpp \ + properties/Properties_block.cpp \ + program_utils/Qmc_std.cpp \ + program_utils/qmc_io.cpp \ + properties/gosling.cpp + + +#remove the directory prefix and .cpp extension, and add the .o extension +OBJS:= $(addprefix $(OBJPATH)/,$(addsuffix .o,$(notdir $(basename $(SOURCES))))) +NODEPENDGOALS = depend clean totalclean cleanhtml html all + +#################################################################### +# Special rules +DEFAULT: $(PROJECT) +all: $(PROJECT) +.PHONY: clean totalclean depend cleanhtml +#.SILENT: +#################################################################### +# Included files for dependency and platform specific defines +include $(MAKEPATH)/$(PLATFORM).mk +include $(DEPENDFILE) + +#################################################################### +# Project and build rules + +$(PROJECT):$(OBJS) + @echo ________________________________________________________________ + @echo Linking $@ + $(CXX) $(DEBUG) $(CXXFLAGS) -o $(PROJECT) $(OBJS) $(LDFLAGS) $(BLAS_LIBS) + +clean: + @echo ________________________________________________________________ + @echo Cleaning object files... + rm -f $(OBJS) core $(PROJECT) + +include make.rules diff --git a/src/Makefile.pw2lcao b/src/Makefile.pw2lcao new file mode 100644 index 00000000..f6647cbe --- /dev/null +++ b/src/Makefile.pw2lcao @@ -0,0 +1,55 @@ +#################################################################### +# Set platform and build specific information +# any of these can be overridden by environment variables of the +# same name, or by command line options "make target PLATFORM=foo" +PLATFORM = $(shell uname -s) +DVLPATH = . + +#################################################################### +# Derived paths, all relative to the base path. These shouldn't +# change without restructuring the make environment + +MAKEPATH:=$(DVLPATH)/make +OBJPATH:=$(DVLPATH)/obj/$(PLATFORM) +SRCPATH:=$(DVLPATH) +PROJECT:=$(DVLPATH)/pw2lcao-$(PLATFORM) +DEPENDFILE:=$(OBJPATH)/depend.pw2lcao + +include make.include +INCLUDEPATH:=$(INCLUDEPATH) -I$(DVLPATH)/pw2lcao + +SOURCES:= \ + pw2lcao/pw2lcao.cpp \ + pw2lcao/pwoverlap.cpp \ + program_utils/qmc_io.cpp \ + pw2lcao/gaussian_set.cpp \ + program_utils/Qmc_std.cpp \ + pw2lcao/JeepBasis.cpp \ + program_utils/jeep_utils.cpp \ + program_utils/MatrixAlgebrac.cpp \ + system/Pbc_enforcer.cpp \ + pw2lcao/overlaps.cpp + +#remove the directory prefix and .cpp extension, and add the .o extension +OBJS:= $(addprefix $(OBJPATH)/,$(addsuffix .o,$(notdir $(basename $(SOURCES))))) +NODEPENDGOALS = depend clean totalclean cleanhtml html all + +#################################################################### +# Special rules +all: $(PROJECT) +.PHONY: clean totalclean depend cleanhtml converter +#.SILENT: +#################################################################### +# Included files for dependency and platform specific defines +include $(MAKEPATH)/$(PLATFORM).mk +include $(DEPENDFILE) + +#################################################################### +# Project and build rules + +$(PROJECT):$(OBJS) + @echo ________________________________________________________________ + @echo Linking $@ + $(CXX) $(DEBUG) $(CXXFLAGS) -o $(PROJECT) $(OBJS) $(LDFLAGS) $(BLAS_LIBS) + +include make.rules diff --git a/src/attic/Basis_fitter.h b/src/attic/Basis_fitter.h new file mode 100644 index 00000000..1ce4cda5 --- /dev/null +++ b/src/attic/Basis_fitter.h @@ -0,0 +1,290 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ +//---------------------------------------------------------------------- + + +#include "Qmc_std.h" +#include "Center_set.h" +#include "Basis_function.h" + + +//------------------------------------------------------------------------ + +void divide_job(int node, int nprocs, int npoints, int & start, int & end) { + start=node*npoints/nprocs; + end=(node+1)*npoints/nprocs; +} + + +//------------------------------------------------------------------------ +void fit_molecorb(Center_set & centers, + Array1 & basis, + Sample_point * sample, + Array1 & origin, + Array1 & box_size, + Array1 npoints, + Array2 & basis_matrix_inverse, + vector & file_list, + Array2 & coefficients) { + + int totbasis=0; + for(int i=0; i< centers.size(); i++) + { + int basiscent=0; + for(int j=0; j< centers.nbasis(i); j++) + { + basiscent+=basis(centers.basis(i,j))->nfunc(); + //cout << "basiscent " << basiscent << endl; + } + totbasis+=basiscent; + } + + int nmo_fit=file_list.size(); + + + Array1 projection(totbasis); + coefficients.Resize(nmo_fit, totbasis); + coefficients=0; + + Array3 mo_grid; + + + + Array1 pos(3); + Basis_function * tempbasis=NULL; + Array1 basisvals(totbasis); + Array1 R(5); + doublevar delta0=box_size(0)/(npoints(0)-1); + doublevar delta1=box_size(1)/(npoints(1)-1); + doublevar delta2=box_size(2)/(npoints(2)-1); + + int mo_start=0; + int mo_end=nmo_fit; + +#ifdef USE_MPI + divide_job(mpi_info.node, mpi_info.nprocs, nmo_fit, mo_start, mo_end); + cout << mpi_info.node << " mos: " << mo_start << " - " << mo_end << endl; +#endif + + for(int mo=mo_start; mo < mo_end; mo++) { + cout << mpi_info.node << ":fitting mo " << mo << endl; + + ifstream orbin(file_list[mo].c_str()); + //cout << "reading grid " << endl; + get_grid_from_plot(orbin, mo_grid, box_size, origin); + + projection=0; + + int pointnum=0; + + doublevar threshold=1e-6; + + for(int x=0; x< npoints(0); x++) { + cout << "."; cout.flush(); + pos(0)=origin(0)+delta0*x; + + for(int y=0; y< npoints(1); y++) { + pos(1)=origin(1)+delta1*y; + + for(int z=0; z< npoints(2); z++) { + pos(2)=origin(2)+delta2*z; + + + + if(fabs(mo_grid.v[pointnum]) > threshold) { + + sample->setElectronPos(0, pos); + centers.updateDistance(0, sample); + int currfunc=0; + for(int cent=0; cent< centers.size(); cent++) + { + centers.getDistance(0,cent , R); + for(int j=0; j< centers.nbasis(cent); j++) + { + tempbasis=basis(centers.basis(cent,j)); + tempbasis->calcVal(R, basisvals, currfunc); + currfunc+=tempbasis->nfunc(); + + } + } + + for(int bas=0; bas< totbasis; bas++) { + projection(bas)+=mo_grid.v[pointnum]*basisvals(bas); + } + } + pointnum++; + } + } + } + + cout << endl; + + + for(int bas=0; bas < totbasis; bas++) { + cout << "projection " << bas << " " << projection(bas)*delta0*delta1*delta2 << endl; + } + + //now multiply the projection by the inverse to get the coefficients + + for(int bas=0; bas < totbasis; bas++) { + for(int bas2=0; bas2 < totbasis; bas2++) { + coefficients(mo, bas)+=basis_matrix_inverse(bas, bas2)*projection(bas2); + } + } + + + orbin.close(); + + + } + +#ifdef USE_MPI + for(int mo=0; mo < nmo_fit; mo++) { + + int bcast_node=0; + for(int n=0; n< mpi_info.nprocs; n++) { + int node_start;//=n*nmo_fit/mpi_info.nprocs; + int node_end;//=(n+1)*nmo_fit/mpi_info.nprocs; + divide_job(n, mpi_info.nprocs, nmo_fit, node_start, node_end); + if(mo >= node_start && mo < node_end) { + bcast_node=n; + break; + } + } + + if(bcast_node==mpi_info.node) + cout << "broadcasting " << mo << " " << bcast_node << endl; + MPI_Bcast(coefficients.v+mo*totbasis, totbasis, MPI_DOUBLE, bcast_node, + MPI_COMM_WORLD); + } + + +#endif + + +} + +//------------------------------------------------------------------------ + + +void calculate_basis_overlap(Center_set & centers, + Array1 & basis, + Sample_point * sample, + Array1 & origin, + Array1 & box_size, + Array1 & npoints, + Array2 & basis_matrix) { + + + int totbasis=0; + for(int i=0; i< centers.size(); i++) + { + int basiscent=0; + for(int j=0; j< centers.nbasis(i); j++) + { + basiscent+=basis(centers.basis(i,j))->nfunc(); + //cout << "basiscent " << basiscent << endl; + } + totbasis+=basiscent; + } + + Array1 pos(3); + Basis_function * tempbasis=NULL; + Array1 basisvals(totbasis); + Array1 R(5); + int pointnum=0; + doublevar delta0=box_size(0)/(npoints(0)-1); + doublevar delta1=box_size(1)/(npoints(1)-1); + doublevar delta2=box_size(2)/(npoints(2)-1); + + cout << "spacing (x, y, z) : " << delta0 << " " << delta1 << " " << delta2 << endl; + + doublevar basis_threshold=1e-8; + basis_matrix.Resize(totbasis, totbasis); + basis_matrix=0; + cout << "calculating basis functions"; + cout.flush(); + + + int xstart=0; + int xend=npoints(0); +#ifdef USE_MPI + divide_job(mpi_info.node, mpi_info.nprocs, npoints(0), xstart, xend); + //cout << "xstart for " << mpi_info.node << " : " << xstart << endl; + //cout << "xend for " << mpi_info.node << " : " << xend << endl; +#endif + for(int x=xstart; x< xend; x++) { + cout << "."; cout.flush(); + pos(0)=origin(0)+delta0*x; + // cout << "x " << pos(0) << endl; + for(int y=0; y< npoints(1); y++) { + pos(1)=origin(1)+delta1*y; + // cout << "y " << pos(1) << endl; + for(int z=0; z< npoints(2); z++) { + pos(2)=origin(2)+delta2*z; + + sample->setElectronPos(0, pos); + centers.updateDistance(0, sample); + int currfunc=0; + for(int cent=0; cent< centers.size(); cent++) + { + centers.getDistance(0,cent , R); + for(int j=0; j< centers.nbasis(cent); j++) + { + tempbasis=basis(centers.basis(cent,j)); + tempbasis->calcVal(R, basisvals, currfunc); + currfunc+=tempbasis->nfunc(); + + } + } + + //Get overlap matrix + for(int b1=0; b1 < totbasis; b1++) { + if(fabs(basisvals(b1)) > basis_threshold) + for(int b2=b1; b2 < totbasis; b2++) { + basis_matrix(b1, b2)+=basisvals(b1)*basisvals(b2); + } + } + pointnum++; + + } + } + } + cout << endl; + + + //this is a symmetric matrix.. + for(int b1=0; b1 < totbasis; b1++) { + for(int b2=b1+1; b2 < totbasis; b2++) { + basis_matrix(b2, b1)=basis_matrix(b1, b2); + } + } + + +#ifdef USE_MPI + Array2 tempmatrix(totbasis, totbasis); + tempmatrix=basis_matrix; + MPI_Allreduce(tempmatrix.v, basis_matrix.v, totbasis*totbasis, + MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); +#endif + +} + +//---------------------------------------------------------------------- diff --git a/src/attic/Binner.cpp b/src/attic/Binner.cpp new file mode 100644 index 00000000..59040a74 --- /dev/null +++ b/src/attic/Binner.cpp @@ -0,0 +1,134 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ +//---------------------------------------------------------------------- +//src/Binner.cpp +//Author: Lucas Wagner + + +#include "Binner.h" +#include "Sample_point.h" +#include "qmc_io.h" +#include "System.h" + +void allocate(vector & words, Binner * & bin, System * sys) { + if(words[0]=="EEBIN") + bin=new EE_bin; + else error("unknown bin type: ", words[0]); + bin->read(words, sys); +} + +//---------------------------------------------------------------------- + +void EE_bin::read(vector & words, System * sys) { + unsigned int pos=0; + if(!readvalue(words, pos=0, range, "RANGE")) + error("Need RANGE variable in EEBIN"); + if(!readvalue(words, pos=0, width, "WIDTH")) + error("Need WIDTH in EEBIN"); + if(!readvalue(words, pos=0, output_file, "OUTPUT")) + error("Need OUTPUT in EEBIN"); + + int nbins=int(ceil(range/width)); + eebin.Resize(nbins); + eebin=0; + eebin_like.Resize(nbins); + eebin_unlike.Resize(nbins); + eebin_like=0; + eebin_unlike=0; + npoints=0; + high_up_spin=sys->nelectrons(0); +} + +//---------------------------------------------------------------------- + +void EE_bin::accumulate(Sample_point * sample) { + Array1 dis(5); + sample->updateEEDist(); + nelec=sample->electronSize(); + npoints++; + + for(int i=0; i< nelec; i++) { + for(int j=i+1; j< nelec; j++) { + sample->getEEDist(i,j,dis); + if(dis(0) < range) { + int bin=int(dis(0)/width); + eebin(bin)++; + if( (i < high_up_spin) == (j < high_up_spin) ) + eebin_like(bin)++; + else + eebin_unlike(bin)++; + } + } + } +} + +//---------------------------------------------------------------------- + +void EE_bin::write() { + ofstream os(output_file.c_str()); + int nbins=eebin.GetDim(0); + + + int ntot=0; //!< Number of pair distances + int nltot=0; //!< number of like pair distances + int nutot=0; //!< number of unlike pair distances + + //Ok, this is a stupid, but foolproof way to figure out the + //normalization. There's probably a general way to do it.. + for(int i=0; i< nelec; i++) { + for(int j=i+1; j< nelec; j++) { + ntot++; + if( (i < high_up_spin) == (j < high_up_spin) ) + nltot++; + else + nutot++; + } + } + + + + doublevar norm=ntot*3.0/(4.0*pi*range*range*range); + for(int i=0; i< nbins; i++) { + os << i*width << " " << eebin(i)/(npoints*norm) << endl; + } + os.close(); + + + string likeoutname=output_file+"l"; + ofstream osl(likeoutname.c_str()); + norm=nltot*3.0/(4.0*pi*range*range*range); + for(int i=0; i< nbins; i++) { + osl << i*width << " " << eebin_like(i)/(npoints*norm) << endl; + } + osl.close(); + + string unlikeoutname=output_file+"u"; + ofstream osu(unlikeoutname.c_str()); + norm=nutot + *3.0/(4.0*pi*range*range*range); + for(int i=0; i< nbins; i++) { + osu << i*width << " " << eebin_unlike(i)/(npoints*norm) << endl; + } + osu.close(); + +} + +//---------------------------------------------------------------------- + diff --git a/src/attic/Binner.h b/src/attic/Binner.h new file mode 100644 index 00000000..bafc765c --- /dev/null +++ b/src/attic/Binner.h @@ -0,0 +1,63 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ +//---------------------------------------------------------------------- +//include/Binner.h +//Author: Lucas Wagner +#ifndef BINNER_H_INCLUDED +#define BINNER_H_INCLUDED + +#include "Qmc_std.h" +#include "Array.h" + +class Sample_point; +class System; + +class Binner { + public: + virtual void read(vector &, System * )=0; + virtual void accumulate(Sample_point *)=0; + virtual void write()=0; + virtual ~Binner() {} +}; + +class EE_bin : public Binner { + public: + EE_bin():nelec(0){} + virtual void read(vector &, System * ); + virtual void accumulate(Sample_point *); + virtual void write(); + private: + Array1 eebin; //A count of the distances that fall in each bin + Array1 eebin_like; //!< For electrons of like spin + Array1 eebin_unlike; //!< For electrons of unlike spin.. + doublevar range; //The maximum range of the bins + doublevar width; //The width of each bin + string output_file; + unsigned long int npoints; //!< number of points that have been accumulated + int nelec; //!< number of electrons + int high_up_spin; //!< number of up spin + +}; + + +void allocate(vector < string> &, Binner * &, System *); + +#endif //BINNER_H_INCLUDED +//---------------------------------------------------------------------- diff --git a/src/attic/Cat_wf.cpp b/src/attic/Cat_wf.cpp new file mode 100644 index 00000000..8988101d --- /dev/null +++ b/src/attic/Cat_wf.cpp @@ -0,0 +1,340 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ + +//-------------------------------------------------------------------------- +// Cat_wf.cpp +// +// +#include "Cat_wf.h" +#include "qmc_io.h" +#include "Qmc_std.h" +#include "Sample_point.h" + + +void Cat_wf::notify(change_type change , int num ) +{ + for(int i=0; i< nUniqueFunc; i++) + { + wfarray(i)->notify(change, num); + } +} + + + +void Cat_wf::storeParmIndVal(Wavefunction_data * wfdata, Sample_point * sample, + int e, Array1 & vals ) +{ + Cat_wf_data * dataptr; + recast(wfdata, dataptr); + assert(dataptr != NULL); + Array1 > temparray(nUniqueFunc); + + for(int i=0; i< nUniqueFunc; i++) + { + temparray(i).Resize(dataptr->data_array(i)->valSize()); + wfarray(i)->storeParmIndVal(dataptr->data_array(i),sample, e,temparray(i)); + } + int counter=0; + for(int i=0; i & oldval, + Wf_return & newval) +{ + Cat_wf_data * dataptr; + recast(wfdata, dataptr); + assert(dataptr != NULL); + assert(oldval.GetDim(0) >= dataptr->valSize()); + Array1 < Array1 > temparray(nUniqueFunc); + Array1 tempval(nUniqueFunc); + int counter=0; + + for(int i=0; i< nUniqueFunc; i++) + { + tempval(i).Resize(wfarray(i)->nfunc(),2); + temparray(i).Resize(dataptr->data_array(i)->valSize()); + for(int j=0; j< temparray(i).GetDim(0); j++) + { + temparray(i)(j)=oldval(counter); + counter++; + } + wfarray(i)->getParmDepVal(dataptr->data_array(i), sample, e, + temparray(i),tempval(i)); + } + + counter=0; + for(int i=0; i< ordering.GetDim(0); i++) + { + int index=ordering(i); + for(int j=0; j< tempval(index).amp.GetDim(0); j++) + { + for(int k=0; k<2; k++) + { + newval.amp(counter,k)=tempval(index).amp(j,k); + newval.phase(counter,k)=tempval(index).phase(j,k); + } + counter++; + assert(counter <= nFunc); + } + } + + counter=0; + for(int i=0; istore_array.Resize(nUniqueFunc); + for(int i=0; i< nUniqueFunc; i++) + { + wfarray(i)->generateStorage(store->store_array(i)); + } +} + +void Cat_wf::saveUpdate(Sample_point * sample, int e, + Wavefunction_storage * wfstore) +{ + //cout << "saveUpdate\n"; + Cat_wf_storage * store; + recast(wfstore, store); + + for(int i=0; i< nUniqueFunc; i++) + { + wfarray(i)->saveUpdate(sample, e, store->store_array(i)); + } +} + +void Cat_wf::restoreUpdate(Sample_point * sample, int e, + Wavefunction_storage * wfstore) +{ + //cout << "restoreUpdate\n"; + Cat_wf_storage * store; + recast(wfstore, store); + + for(int i=0; i< nUniqueFunc; i++) + { + wfarray(i)->restoreUpdate(sample, e, store->store_array(i)); + } + +} + +void Cat_wf::getDensity(Wavefunction_data * wfdata, int e, + Array2 & dens) +{ + assert(dens.GetDim(0) >= nFunc); + Cat_wf_data * dataptr; + recast(wfdata, dataptr); + Array1 > tempval(nUniqueFunc); + for(int i=0; i< nUniqueFunc; i++) + { + tempval(i).Resize(wfarray(i)->nfunc(),2); + wfarray(i)->getDensity(dataptr->data_array(i),e, tempval(i)); + } + int counter=0; + for(int i=0; i< ordering.GetDim(0); i++) + { + int index=ordering(i); + for(int j=0; j< tempval(index).GetDim(0); j++) + { + for(int d=0; d< 2; d++) + { + dens(counter,d)=tempval(index)(j,d); + } + counter++; + assert(counter <= nFunc); + } + } + +} + + +void Cat_wf::getVal(Wavefunction_data * wfdata, int e, + Wf_return & val, int startpos) +{ + assert(val.amp.GetDim(0) >= nFunc+startpos); + Array1 tempval(nUniqueFunc); + Cat_wf_data * dataptr; + recast(wfdata, dataptr); + assert(dataptr != NULL); + + for(int i=0; i< nUniqueFunc; i++) + { + tempval(i).Resize(wfarray(i)->nfunc(),2); + wfarray(i)->getVal(dataptr->data_array(i), e, tempval(i)); + } + int counter=startpos; + for(int i=0; i< ordering.GetDim(0); i++) + { + int index=ordering(i); + for(int j=0; j< tempval(index).amp.GetDim(0); j++) + { + for(int d=0; d< 2; d++) + { + val.amp(counter,d)=tempval(index).amp(j,d); + val.phase(counter,d)=tempval(index).phase(j,d); + } + counter++; + assert(counter <= nFunc+startpos); + } + } + +} + +void Cat_wf::getForceBias(Wavefunction_data * wfdata, int e, + Wf_return & bias, int startpos) +{ + + + assert(bias.amp.GetDim(0) >= nFunc+startpos); + assert(bias.amp.GetDim(1) >= 5); + Cat_wf_data * dataptr; + recast(wfdata, dataptr); + + assert(dataptr != NULL); + + Array1 tempbias(nUniqueFunc); + + for(int i=0; i< nUniqueFunc; i++) + { + tempbias(i).Resize(wfarray(i)->nfunc(), 5); + wfarray(i)->getForceBias(dataptr->data_array(i), e, tempbias(i)); + } + + int counter=startpos; + for(int i=0; i< ordering.GetDim(0); i++) + { + int index=ordering(i); + for(int j=0; j< tempbias(index).amp.GetDim(0); j++) + { + for(int d=0; d< 5; d++) + { + bias.amp(counter,d)=tempbias(index).amp(j,d); + bias.phase(counter,d)=tempbias(index).phase(j,d); + } + counter++; + assert(counter <= nFunc); + } + } + + +} + + +void Cat_wf::getLap(Wavefunction_data * wfdata, int e, + Wf_return & lap, int startpos) +{ + + assert(lap.amp.GetDim(0) >= nFunc+startpos); + assert(lap.amp.GetDim(1) >= 6); + Cat_wf_data * dataptr; + recast(wfdata, dataptr); + assert(dataptr != NULL); + + Array1 templap(nUniqueFunc); + + for(int i=0; i< nUniqueFunc; i++) + { + templap(i).Resize(wfarray(i)->nfunc(), 6); + wfarray(i)->getLap(dataptr->data_array(i), e, templap(i)); + } + + + + int counter=startpos; + for(int i=0; i< ordering.GetDim(0); i++) + { + int index=ordering(i); + for(int j=0; j< templap(index).amp.GetDim(0); j++) + { + for(int d=0; d< 6; d++) + { + + lap.amp(counter,d)=templap(index).amp(j,d); + lap.phase(counter,d)=templap(index).phase(j,d); + + } + counter++; + assert(counter <= nFunc); + } + } + +} + +void Cat_wf::updateVal(Wavefunction_data * wfdata, Sample_point * sample) +{ + Cat_wf_data * dataptr; + recast(wfdata, dataptr); + assert(dataptr != NULL); + for(int i=0; i< nUniqueFunc; i++) + { + wfarray(i)->updateVal(dataptr->data_array(i), sample); + } +} + +void Cat_wf::updateLap(Wavefunction_data * wfdata, Sample_point * sample) +{ + //cout << "updateLap " << endl; + Cat_wf_data * dataptr; + recast(wfdata, dataptr); + + assert(dataptr != NULL); + for(int i=0; i< nUniqueFunc; i++) + { + wfarray(i)->updateLap(dataptr->data_array(i), sample); + } + //cout << "done Lap" << endl; +} + +void Cat_wf::updateForceBias(Wavefunction_data * wfdata, Sample_point * sample) +{ + Cat_wf_data * dataptr; + recast(wfdata, dataptr); + assert(dataptr != NULL); + for(int i=0; iupdateForceBias(dataptr->data_array(i), sample); + } +} diff --git a/src/attic/Cat_wf.h b/src/attic/Cat_wf.h new file mode 100644 index 00000000..53c80f4c --- /dev/null +++ b/src/attic/Cat_wf.h @@ -0,0 +1,113 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ + +//-------------------------------------------------------------------------- +// Cat_wf.h +// + +#ifndef CAT_WF_H_INCLUDED +#define CAT_WF_H_INCLUDED + +#include "Wavefunction.h" +#include "Cat_wf_data.h" + +class Cat_wf_storage : public Wavefunction_storage +{ + Cat_wf_storage() + {} + ~Cat_wf_storage() + { + for(int i=0; i< store_array.GetDim(0); i++) + { + if(store_array(i)) + delete store_array(i); + } + } +private: + friend class Cat_wf; + Array1 store_array; + +}; + +/*! + +*/ +class Cat_wf : public Wavefunction +{ +public: + + Cat_wf() + {} + ~Cat_wf() + { + for(int i=0; i< wfarray.GetDim(0); i++) + deallocate(wfarray(i)); + } + + + + void generateStorage(Wavefunction_storage * & wfstore); + + + int nfunc() + { + return nFunc; + } + + virtual void notify(change_type , int ); + + + virtual void updateVal(Wavefunction_data *, Sample_point *); + virtual void updateLap(Wavefunction_data *, Sample_point *); + virtual void updateForceBias(Wavefunction_data *, Sample_point *); + + virtual void getVal(Wavefunction_data *, int, Wf_return &, + int startpos=0); + virtual void getLap(Wavefunction_data *, int, Wf_return &, + int startpos=0) ; + virtual void getForceBias(Wavefunction_data *, int, Wf_return &, + int startpos=0); + + virtual void getDensity(Wavefunction_data *,int, Array2 &); + + virtual void saveUpdate(Sample_point *, int e, Wavefunction_storage *); + + virtual void restoreUpdate(Sample_point *, int e, Wavefunction_storage *); + + + virtual void storeParmIndVal(Wavefunction_data *, Sample_point *, + int, Array1 & ); + virtual void getParmDepVal(Wavefunction_data *, + Sample_point *, + int, + Array1 &, + Wf_return &); + + +private: + friend class Cat_wf_data; + Array1 wfarray; + Array1 ordering; + int nFunc; + int nUniqueFunc; +}; + +#endif //CAT_WF_H_INCLUDED +//-------------------------------------------------------------------------- diff --git a/src/attic/Cat_wf_data.cpp b/src/attic/Cat_wf_data.cpp new file mode 100644 index 00000000..a1027a59 --- /dev/null +++ b/src/attic/Cat_wf_data.cpp @@ -0,0 +1,227 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ + +//------------------------------------------------------------------------ +//Cat_wf_data.cpp + +#include "Qmc_std.h" +#include "qmc_io.h" +#include "Cat_wf_data.h" +#include "Cat_wf.h" + +/*! +*/ +void Cat_wf_data::read(vector & words, unsigned int & pos, + System * sys) +{ + vector > wfsection; + unsigned int startpos=pos; + vector indsection; + while(readsection(words, pos, indsection, "WF")) + { + wfsection.push_back(indsection); + } + + pos=startpos; + vector orderingtext; + if( ! readsection(words, pos, orderingtext, "ORDER")) + { + int imax=wfsection.size(); + ordering.Resize(imax); + for(int i=0; i< imax; i++) + { + ordering(i)=i; + } + } + else + { + int imax=orderingtext.size(); + ordering.Resize(imax); + for(int i=0; i< imax; i++) + { + ordering(i)=atoi(orderingtext[i].c_str()); + } + } + + nFunc=ordering.GetDim(0); + nUniqueFunc=wfsection.size(); + + data_array.Resize(nUniqueFunc); + data_array=NULL; + for(int i=0; i< nUniqueFunc; i++) + { + allocate(wfsection[i],sys, data_array(i)); + } + +} +//---------------------------------------------------------------------- + +int Cat_wf_data::supports(wf_support_type support) { + int ret=1; + for(int i=0; i< nUniqueFunc; i++) + ret=ret && data_array(i)->supports(support); + return ret; + +} + +//---------------------------------------------------------------------- + +void Cat_wf_data::generateWavefunction(Wavefunction *& wf) +{ + assert(wf==NULL); + wf=new Cat_wf; + Cat_wf * catwf; + recast(wf, catwf); + + catwf->nUniqueFunc=nUniqueFunc; + catwf->ordering.Resize(ordering.GetDim(0)); + catwf->ordering=ordering; + catwf->nFunc=nFunc; + catwf->wfarray.Resize(nUniqueFunc); + catwf->wfarray=NULL; + for(int i=0; i< nUniqueFunc; i++) + { + data_array(i)->generateWavefunction(catwf->wfarray(i)); + } + attachObserver(catwf); +} + + + +void Cat_wf_data::attachObserver(Wavefunction * wf) +{ + Cat_wf * wfptr; + //cout << "foo " << endl; + recast(wf, wfptr); + //cout << "bar " << endl; + assert(wfptr != NULL); + for(int i=0; i< nUniqueFunc; i++) + { + data_array(i)->attachObserver(wfptr->wfarray(i)); + } +} + + +int Cat_wf_data::nparms() +{ + int sum=0; + for(int i=0; i< nUniqueFunc; i++) + { + sum+=data_array(i)->nparms(); + } + return sum; +} + +int Cat_wf_data::valSize() +{ + int total=0; + for(int i=0; i< nUniqueFunc; i++) + { + total+=data_array(i)->valSize(); + } + return total; +} + + + +/*! + + */ +void Cat_wf_data::getVarParms(Array1 & parms) +{ + Array1 > temp_parms(nUniqueFunc); + + int totalsize=0; + for(int i=0; i< nUniqueFunc; i++) + { + data_array(i)->getVarParms(temp_parms(i)); + totalsize+=temp_parms(i).GetDim(0); + } + temp_parms.Resize(totalsize); + + int par=0; + for(int i=0; i< nUniqueFunc; i++) + { + for(int j=0; j< temp_parms(i).GetDim(0); j++) + { + parms(par)=temp_parms(i)(j); + par++; + } + } + + assert(par==totalsize); + +} + +void Cat_wf_data::setVarParms(Array1 & parms) +{ + Array1 > temp_parms(nUniqueFunc); + assert( nparms() ==parms.GetDim(0)); + + int par=0; + for(int i=0; i< nUniqueFunc; i++) + { + int thisNParms=data_array(i)->nparms(); + temp_parms(i).Resize(thisNParms); + for(int j=0; j< thisNParms; j++) + { + temp_parms(i)(j)=parms(par); + } + data_array(i)->setVarParms(temp_parms(i)); + } + + assert(par==nparms()); +} + +int Cat_wf_data::showinfo(ostream & os) +{ + os << "###############Concatenated function##############\n\n"; + for(int i=0; i< nUniqueFunc; i++) + { + data_array(i)->showinfo(os); + } + os << endl; + os << "#############Concatenation Done####################\n"; + return 1; +} + +int Cat_wf_data::writeinput(string & indent, ostream & os) +{ + os << indent << "CONCATENATE" << endl; + os << indent << "ORDER { "; + for(int i=0; i< nFunc; i++) + { + os << ordering(i) << " "; + } + os << " } " << endl; + + string indent2=indent+" "; + + for(int i=0; i< nUniqueFunc; i++) + { + os << indent << "WF { " << endl; + data_array(i)->writeinput(indent2, os); + os << indent << "}" << endl; + } + return 1; +} + + +//------------------------------------------------------------------------ diff --git a/src/attic/Cat_wf_data.h b/src/attic/Cat_wf_data.h new file mode 100644 index 00000000..e6f160b0 --- /dev/null +++ b/src/attic/Cat_wf_data.h @@ -0,0 +1,89 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ + +//------------------------------------------------------------------------ +//Cat_wf_data.h + +#ifndef CAT_WF_DATA_H_INCLUDED +#define CAT_WF_DATA_H_INCLUDED + +#include "Qmc_std.h" +#include "Wavefunction_data.h" + +class Cat_wf; + +class Cat_wf_data : public Wavefunction_data +{ +public: + + virtual void read(vector & words, + unsigned int & pos, + System * sys + ); + virtual int supports(wf_support_type ); + void getVarParms(Array1 & ); + void setVarParms(Array1 & ); + + void attachObserver(Wavefunction * wf); + void generateWavefunction(Wavefunction *&); + int nparms(); + + + virtual int valSize(); + + + int showinfo(ostream & os); + int writeinput(string &, ostream &); + + + void renormalize() + { + for(int i=0; i< nUniqueFunc; i++) + { + data_array(i)->renormalize(); + } + } + + void resetNormalization() + { + for(int i=0; i< nUniqueFunc; i++) + { + data_array(i)->resetNormalization(); + } + } + + Cat_wf_data() + {} + ~Cat_wf_data() + { + for(int i=0; i< data_array.GetDim(0); i++) + deallocate(data_array(i)); + } + + +private: + friend class Cat_wf; + int nFunc, nUniqueFunc; + Array1 ordering; + Array1 data_array; +}; + +#endif //CAT_WF_DATA_H_INCLUDED +//------------------------------------------------------------------------ diff --git a/src/attic/Cubic_spline3D.cpp b/src/attic/Cubic_spline3D.cpp new file mode 100644 index 00000000..6bd893f4 --- /dev/null +++ b/src/attic/Cubic_spline3D.cpp @@ -0,0 +1,134 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ +//---------------------------------------------------------------------- +//src/Cubic_spline3D.cpp +#include "Array.h" +#include "Qmc_std.h" +using namespace std; + + +//use delta in interval 0.05 to 0.25 (100 to 25 points on 6x6x6 space) +static Array1 a(8); + + +inline doublevar spline_1D_my(doublevar x,doublevar delta, Array1 & y) + //given 7 y values on the grid with equal spacing delta, routine calculates 2 splines + //around y(3)=f(0) and returns value at point x +{ + + + //calculating spline + a(0)=a(4)=y(3); + a(1)=a(5)=((-y(0)-37.0*y(2)+37.0*y(4)+y(6))/48.0 +(y(1)-y(5))/6.0)/delta; + a(2)=a(6)=((y(0)+37.0*y(2)+37.0*y(4)+y(6))/28.0 +(-2.0*y(1)-15.0*y(3)-2*y(5))/7.0) + /(delta*delta); + a(3)=((19.0*y(0)+367.0*y(2)+185.0*y(4)+5.0*y(6))/336.0 + + (-19.0*y(1)-48.0*y(3)-5.0*y(5))/42.0)/(delta*delta*delta); + + a(7)=((-5.0*y(0)-185.0*y(2)-367.0*y(4)-19.0*y(6))/336.0 + + (5.0*y(1)+48.0*y(3)+19.0*y(5))/42.0)/(delta*delta*delta); + + //determining the returned value + if (x>0.0) { + return a(4)+ a(5)*x+ a(6)*x*x+ a(7)*x*x*x; + } + + else { + return a(0)+ a(1)*x+ a(2)*x*x+ a(3)*x*x*x; + } + +} + + +static Array2 yya_tmp(7,7); +static Array1 y1_tmp(7),y2_tmp(7), y3_tmp(7); +static Array1 x_center(3); +static Array1 i_center(3); + + +void splin3_my(Array1 & rmin, doublevar delta, Array3 & yya, + Array1 & xx, doublevar & y) + //given x_min, y_min, z_min (in vector rmin), mesh step delta and mesh values yya + //routine gives function value y at vector xx +{ + + //finding a center of 4x4x4 cube + i_center(0)=int(0.5+(xx(0)-rmin(0))/delta); + i_center(1)=int(0.5+(xx(1)-rmin(1))/delta); + i_center(2)=int(0.5+(xx(2)-rmin(2))/delta); + + x_center(0)=rmin(0)+delta*i_center(0); + x_center(1)=rmin(1)+delta*i_center(1); + x_center(2)=rmin(2)+delta*i_center(2); + + //calculating splines in z direction (fastest running) + for (int i=0; i<7 ;i++) + for (int j=0; j<7 ;j++){ + for (int k=0; k<7 ;k++) { + y3_tmp(k)=yya(i+i_center(0)-3,j+i_center(1)-3,k+i_center(2)-3); + } + yya_tmp(i,j)=spline_1D_my(xx(2)-x_center(2), delta,y3_tmp); + } + + //calculating splines in y direction (second fastest running) + for (int i=0;i<7;i++){ + for (int j=0;j<7;j++) y2_tmp(j)=yya_tmp(i,j); + y1_tmp(i)=spline_1D_my(xx(1)-x_center(1), delta ,y2_tmp); + } + //final spline over x direction + y=spline_1D_my(xx(0)-x_center(0), delta, y1_tmp); +} + +void splin3_my(Array1 & rmin, Array1 & delta, Array3 & yya, + Array1 & xx, doublevar & y) + //given x_min, y_min, z_min (in vector rmin), mesh step delta and mesh values yya + //routine gives function value y at vector xx +{ + //static Array2 yya_tmp(7,7); + //static Array1 y1_tmp(7),y2_tmp(7), y3_tmp(7); + //static Array1 x_center(3); + //static Array1 i_center(3); + + //finding a center of 4x4x4 cube + for (int i=0;i<3;i++){ + i_center(i)=int(0.5+(xx(i)-rmin(i))/delta(i)); + x_center(i)=rmin(i)+delta(i)*i_center(i); + } + + //calculating splines in z direction (fastest running) + for (int i=0; i<7 ;i++) + for (int j=0; j<7 ;j++){ + for (int k=0; k<7 ;k++) { + y3_tmp(k)=yya(i+i_center(0)-3,j+i_center(1)-3,k+i_center(2)-3); + } + yya_tmp(i,j)=spline_1D_my(xx(2)-x_center(2), delta(2),y3_tmp); + } + + //calculating splines in y direction (second fastest running) + for (int i=0;i<7;i++){ + for (int j=0;j<7;j++) y2_tmp(j)=yya_tmp(i,j); + y1_tmp(i)=spline_1D_my(xx(1)-x_center(1), delta(1) ,y2_tmp); + } + //final spline over x direction + y=spline_1D_my(xx(0)-x_center(0), delta(0), y1_tmp); +} + +//---------------------------------------------------------------------- + diff --git a/src/attic/Cubic_spline3D.h b/src/attic/Cubic_spline3D.h new file mode 100644 index 00000000..ce454bb3 --- /dev/null +++ b/src/attic/Cubic_spline3D.h @@ -0,0 +1,40 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ +//---------------------------------------------------------------------- +//include/Cubic_spline3D.h + + +#ifndef CUBIC_SPLINE3D_H_INCLUDED +#define CUBIC_SPLINE3D_H_INCLUDED + +#include "Array.h" +#include "Qmc_std.h" +using namespace std; + +doublevar spline_1D_my(doublevar x,doublevar delta, Array1 & y); + +void splin3_my(Array1 & rmin, doublevar delta, Array3 & yya, + Array1 & xx, doublevar & y); + +void splin3_my(Array1 & rmin, Array1 & delta, Array3 & yya, + Array1 & xx, doublevar & y); + +#endif //CUBIC_SPLINE3D_H_INCLUDED +//---------------------------------------------------------------------- diff --git a/src/attic/Ext_slat.cpp b/src/attic/Ext_slat.cpp new file mode 100644 index 00000000..30a3693c --- /dev/null +++ b/src/attic/Ext_slat.cpp @@ -0,0 +1,480 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ +//-------------------------------------------------------------------------- +// src/Ext_slat_calc.cpp +// +// +#include "Qmc_std.h" +#include "Ext_slat.h" +#include "MatrixAlgebra.h" +#include "Sample_point.h" +#include "Ext_slat_data.h" + +//---------------------------------------------------------------------- + +/*! +*/ +void Ext_slat::notify(change_type change, int num) +{ + switch(change) + { + case electron_move: + electronIsStaleVal(num)=1; + electronIsStaleLap(num)=1; + break; + case all_electrons_move: + updateEverythingVal=1; + updateEverythingLap=1; + break; + case wf_parm_change: + case all_wf_parms_change: + updateEverythingVal=1; + updateEverythingLap=1; + break; + case sample_attach: + sampleAttached=1; + updateEverythingVal=1; + updateEverythingLap=1; + break; + case data_attach: + dataAttached=1; + updateEverythingVal=1; + updateEverythingLap=1; + break; + case sample_static: + staticSample=1; + break; + case sample_dynamic: + staticSample=0; + break; + default: + updateEverythingVal=1; + updateEverythingLap=1; + } +} + +//---------------------------------------------------------------------- + +void Ext_slat::init(Wavefunction_data * wfdata) +{ + recast(wfdata, parent); + + int nmo=parent->nmo; + + + nelectrons=parent->spin.GetDim(0); + + + //Properties and intermediate calculation storage. + + + moVal.Resize(nelectrons, nmo, 5); + updatedMoVal.Resize(nmo,5); + + detVal=1; + inverse.Resize(nelectrons, nelectrons); + + inverse=0; + for(int e=0; e< nelectrons; e++) { + inverse(e,e)=1; + } + + + electronIsStaleVal.Resize(nelectrons); + electronIsStaleLap.Resize(nelectrons); + + electronIsStaleVal=0; + electronIsStaleLap=0; + updateEverythingVal=1; + updateEverythingLap=1; + sampleAttached=0; + dataAttached=0; + staticSample=0; +} +//---------------------------------------------------------------------- + +void Ext_slat::generateStorage(Wavefunction_storage * & wfstore) +{ + wfstore=new Ext_slat_storage; + Ext_slat_storage * store; + recast(wfstore, store); + nelectrons=parent->spin.GetDim(0); + store->moVal_temp.Resize (parent->nmo,5); + store->inverse_temp.Resize(nelectrons, nelectrons); + +} + + +//---------------------------------------------------------------------- + +void Ext_slat::saveUpdate(Sample_point * sample, int e, + Wavefunction_storage * wfstore) +{ + Ext_slat_storage * store; + recast(wfstore, store); + for(int m=0; m < parent->nmo; m++) { + for(int d=0; d< 5; d++) { + store->moVal_temp(m,d)=moVal(e,m,d); + } + } + + array_cp(store->inverse_temp, inverse); + store->detVal=detVal; +} + +//---------------------------------------------------------------------- + +void Ext_slat::restoreUpdate(Sample_point * sample, int e, + Wavefunction_storage * wfstore) +{ + Ext_slat_storage * store; + recast(wfstore, store); + for(int m=0; m < parent->nmo; m++) { + for(int d=0; d< 5; d++) { + moVal(e,m,d)=store->moVal_temp(m,d); + } + } + + array_cp(inverse, store->inverse_temp); + detVal=store->detVal; + +} + +//---------------------------------------------------------------------- + +void Ext_slat::updateVal(Wavefunction_data * wfdata, + Sample_point * sample) +{ + assert(sampleAttached); + assert(dataAttached); + + Ext_slat_data * slatdata; + recast(wfdata, slatdata); + + if(updateEverythingVal==1) { + calcVal(slatdata, sample); + updateEverythingVal=0; + electronIsStaleVal=0; + } + else + { + for(int e=0; e< nelectrons; e++) + { + if(electronIsStaleVal(e)) + { + updateVal(slatdata, sample, e); + electronIsStaleVal(e)=0; + } + } + } + +} + +//---------------------------------------------------------------------- + +void Ext_slat::updateForceBias(Wavefunction_data * wfdata, + Sample_point * sample) +{ + //We just use the laplacian, since the speed diff is minimal. + assert(sampleAttached); + assert(dataAttached); + + updateLap(wfdata, sample); +} + + +//---------------------------------------------------------------------- +/*! + + */ +void Ext_slat::updateLap( Wavefunction_data * wfdata, + Sample_point * sample) +{ + assert(sampleAttached); + assert(dataAttached); + + //cout << "updateLap\n"; + + Ext_slat_data * slatdata; + recast(wfdata, slatdata); + if(updateEverythingLap==1) { + calcLap(slatdata, sample); + updateEverythingVal=0; + updateEverythingLap=0; + electronIsStaleLap=0; + electronIsStaleVal=0; + } + else { + for(int e=0; e< nelectrons; e++) { + if(electronIsStaleLap(e)) { + updateLap(slatdata, sample, e); + electronIsStaleLap(e)=0; + electronIsStaleVal(e)=0; + } + } + } + + +} + +//---------------------------------------------------------------------- + + +void Ext_slat::storeParmIndVal(Wavefunction_data * wfdata, Sample_point * sample, + int e, Array1 & vals ) +{ + + assert(vals.GetDim(0)==0); +} + +//---------------------------------------------------------------------- + +void Ext_slat::getParmDepVal(Wavefunction_data * wfdata, + Sample_point * sample, + int e, + Array1 & oldval, + Array2 & newval) +{ + + updateVal(wfdata, sample); + getVal(wfdata, e, newval); + +} + + +//------------------------------------------------------------------------ + + +void Ext_slat::calcVal(Ext_slat_data * dataptr, Sample_point * sample) +{ + + calcLap(dataptr, sample); + +} + +//------------------------------------------------------------------------ +/*! + +*/ +void Ext_slat::updateVal( Ext_slat_data * dataptr, Sample_point * sample,int e) +{ + updateLap(dataptr, sample, e); +} + +//------------------------------------------------------------------------ + + +void Ext_slat::getVal(Wavefunction_data * wfdata, int e, + Array2 & val, int startpos) +{ + val(startpos,0)=sign(detVal); + val(startpos,1)=log(fabs(detVal)); +} + +//---------------------------------------------------------------------- + +void Ext_slat::getDensity(Wavefunction_data * wfdata, int e, + Array2 & dens) +{ + + error("Ext_slat::No density"); + +} + +//---------------------------------------------------------------------------- + + +void Ext_slat::getForceBias(Wavefunction_data * wfdata, int e, + Array2 & bias, int startpos) +{ + //cout << "getForceBias" << endl; + assert(bias.GetDim(0) >=startpos+1); + assert(bias.GetDim(1) >=5); + + Array2 bias_temp(1,6); + getLap(wfdata, e, bias_temp); + int shiftf=1+startpos; + for(int i=0; i< 5; i++) + bias(shiftf,i)=bias_temp(0,i); +} + +//------------------------------------------------------------------------ + +void Ext_slat::calcLap(Ext_slat_data * dataptr, Sample_point * sample) +{ + //cout << "calcLap " << endl; + for(int e=0; e< nelectrons; e++) { + parent->molecorb->updateLap(sample, e, 0,updatedMoVal); + for(int d=0; d< 5; d++) { + for(int i=0; i< updatedMoVal.GetDim(0); i++) { + moVal(e,i,d)=updatedMoVal(i,d); + } + } + } + + Array2 modet(nelectrons, nelectrons); + + for(int i=0; i< nelectrons; i++) { + //cout << "modet: "; + int s=parent->spin(i); + for(int j=0; j< nelectrons; j++) { + + modet(i,j)=parent->amplitude(s,j)*( + parent->pair_coeff(s,j,0) + *moVal(i,parent->pairs(s,j,0),0) + +parent->pair_coeff(s,j,1) + *moVal(i,parent->pairs(s,j,1),0)); + //cout << modet(i,j) << " "; + } + //cout << endl; + } + + detVal=TransposeInverseMatrix(modet, inverse, nelectrons); + //cout << "detVal " << detVal << endl; + + +} + +//------------------------------------------------------------------------ + + +/*! +*/ + +void Ext_slat::getLap(Wavefunction_data * wfdata, + int e, Array2 & lap, int startpos) +{ + //cout << "---getLap---" << endl; + + assert(lap.GetDim(1) >= 5); + assert(lap.GetDim(0) >= startpos); + getVal(wfdata, e, lap, startpos); + int s=parent->spin(e); + for(int d=1; d< 5; d++) { + doublevar temp=0; + for(int i=0; i< nelectrons; i++) { + + temp+=inverse(e,i) + *parent->amplitude(s,i)*( + parent->pair_coeff(s,i,0) + *moVal(e,parent->pairs(s,i,0),d) + +parent->pair_coeff(s,i,1) + *moVal(e,parent->pairs(s,i,1),d)); + //cout << "amplitude " << parent->amplitude(s,i) << endl; + + //cout << "temp " << temp + // << " pair " << parent->pair_coeff(s,i,0) + // << " " << parent->pair_coeff(s,i,1) + // << " vals " << moVal(e,parent->pairs(s,i,0),d) + // << " " << moVal(e,parent->pairs(s,i,1),d) << endl; + //cout << "inverse " << inverse(e,i) << endl; + } + lap(startpos,d+1)=temp; + } + + //cout << "lap "; + //for(int d=0; d< 6; d++) { + // cout << lap(startpos, d) << " "; + //} + //cout << endl; + +} + +//------------------------------------------------------------------------- + +/*! +*/ +void Ext_slat::updateLap( + Ext_slat_data * dataptr, + Sample_point * sample, + int e +) +{ + assert(dataptr != NULL); + + + int s=dataptr->spin(e); + sample->updateEIDist(); + doublevar ratio; + + int maxmatsize=nelectrons; + static Array1 modet(maxmatsize); + //cout << "electron " << e << " detVal " << detVal << endl; + + //check to make sure the determinant isn't zero + if(detVal==0) { + cout << "WARNING: Determinant zero" << endl; + //error("Determinant zero "); + calcLap(dataptr, sample); + return; + } + + + //cout << "mo update\n"; + //update all the mo's that we will be using. + dataptr->molecorb->updateLap(sample, e, + 0, + updatedMoVal); + + //for(int i=0; i< nelectrons; i++) { + // cout << "updatedMoVal " << i << " " << updatedMoVal(i,0) << endl; + //} + + for(int i = 0; i < nelectrons; i++) { + modet(i)=parent->amplitude(s,i)*( + parent->pair_coeff(s,i,0) + *updatedMoVal(parent->pairs(s,i,0),0) + +parent->pair_coeff(s,i,1) + *updatedMoVal(parent->pairs(s,i,1), 0)); + //cout << "modet " << i << " "<< modet(i) << endl; + } + + //for(int i=0; i< nelectrons; i++) { + // cout << "inverse : "; + // for(int j=0; j< nelectrons; j++) { + // cout << inverse(i,j) << " "; + // } + // cout << endl; + //} + + doublevar tmpratio=InverseUpdateColumn(inverse, + modet,e, + nelectrons); + + ratio=1./tmpratio; + if(tmpratio==0) + ratio=0; + + //cout << "detval before " << detVal << " ratio " << ratio << endl; + detVal=ratio*detVal; + + + for(int d=0; d< 5; d++) + { + for(int i=0; i< updatedMoVal.GetDim(0); i++) + { + moVal(e,i,d)=updatedMoVal(i,d); + } + } + +} + +//------------------------------------------------------------------------- + diff --git a/src/attic/Ext_slat.h b/src/attic/Ext_slat.h new file mode 100644 index 00000000..a8eab247 --- /dev/null +++ b/src/attic/Ext_slat.h @@ -0,0 +1,141 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ +//-------------------------------------------------------------------------- +// include/Ext_slat.h +// +// +#ifndef EXT_SLAT_H_INCLUDED + +#define EXT_SLAT_H_INCLUDED + +#include "Qmc_std.h" +#include "Array.h" +#include "Wavefunction.h" +class Wavefunction_data; +class Ext_slat_data; +class System; + + +class Ext_slat_storage : public Wavefunction_storage +{ +public: + virtual ~Ext_slat_storage() + {} +private: + friend class Ext_slat; + + //dimensions are [value gradient lap, MO] + Array2 moVal_temp; + Array2 inverse_temp; + doublevar detVal; + +}; + + +/*! +A slater wavefunction; \f$\Psi=\sum_i det_i(\Phi_1\Phi_2...)\f$ +where the \f$\Phi\f$'s are one-particle molecular orbitals. +Also supports multiple states as a vector of wavefunction values. Just +specify multiple STATE keywords. +*/ +class Ext_slat : public Wavefunction +{ + +public: + + Ext_slat() + {} + + + virtual int nfunc() + { + return 1; + } + + + virtual void notify(change_type , int ); + + virtual void updateVal(Wavefunction_data *, Sample_point *); + virtual void updateLap(Wavefunction_data *, Sample_point *); + virtual void updateForceBias(Wavefunction_data *, Sample_point *); + + + virtual void getVal(Wavefunction_data *, int, Array2 &, + int startpos=0); + virtual void getLap(Wavefunction_data *, int, Array2 &, + int startpos=0 ); + virtual void getForceBias(Wavefunction_data *, int, Array2 &, + int startpos=0); + virtual void getDensity(Wavefunction_data *,int, Array2 &); + + virtual void saveUpdate(Sample_point *, int e, Wavefunction_storage *); + virtual void restoreUpdate(Sample_point *, int e, Wavefunction_storage *); + + + virtual void storeParmIndVal(Wavefunction_data *, Sample_point *, + int, Array1 & ); + virtual void getParmDepVal(Wavefunction_data *, + Sample_point *, + int, + Array1 &, + Array2 &); + + + void generateStorage(Wavefunction_storage * & wfstore); + + + void init(Wavefunction_data *); + + //-- +private: + + + void calcVal(Ext_slat_data *, Sample_point *); + void updateVal(Ext_slat_data *, Sample_point *, int); + void calcLap(Ext_slat_data *, Sample_point *); + void updateLap(Ext_slat_data *, Sample_point *, int); + + Array1 electronIsStaleVal; + Array1 electronIsStaleLap; + int updateEverythingVal; + int updateEverythingLap; + + int sampleAttached; + int dataAttached; + Ext_slat_data * parent; + + int staticSample; + + //Saved variables for electron updates + Array3 moVal; + + Array2 updatedMoVal; + + Array2 inverse; + //! + + + +/*! +*/ +void Ext_slat_data::read(vector & words, unsigned int & pos, + System * sys) +{ + vector motxt; + if(!readsection(words, pos=0, motxt, "ORBITALS") ) + error("Need section ORBITALS in EXT_SLAT"); + + vector pairtxt; + if(!readsection(words, pos=0, pairtxt, "PAIRS")) + error("Need section PAIRS in EXT_SLAT"); + if(pairtxt.size()%2 !=0) + error("PAIRS needs a set of doubles "); + + vector coefftxt; + if(!readsection(words, pos=0, coefftxt, "COEFF")) + error("Need COEFF"); + + vector amptxt; + if(!readsection(words, pos=0, amptxt, "AMPLITUDE")) + error("Need AMPLITUDE"); + + if(coefftxt.size() != pairtxt.size()/2) + error("coefftxt != pairtxt/2"); + + if(amptxt.size() != pairtxt.size()/2) + error("amptxt != pairtxt/2"); + + + + allocate(motxt, sys, molecorb); + + int nup=sys->nelectrons(0); + int ndown=sys->nelectrons(1); + + int nelectrons=nup+ndown; + + pairs.Resize(2,nelectrons, 2); + pair_coeff.Resize(2,nelectrons, 2); + amplitude.Resize(2,nelectrons); + + //------------------------------------------------------ + //This part is specific to total spin=0.. + + if(nup != ndown) + error("open-shell not supported yet"); + + cout << "nelectrons " << nelectrons + << " pair size " << pairtxt.size() << endl; + if(pairtxt.size() != 2*nelectrons) + error("pairs must contain a double for every orbital"); + + //a,b + int bigmo=0; + int count=0; + for(int e=0; e< nelectrons/2; e++) { + cout << "electron " << e << " count " << count << endl; + pairs(0,e,0)=atoi(pairtxt[count++].c_str())-1; + pairs(0,e,1)=atoi(pairtxt[count++].c_str())-1; + + if(pairs(0,e,0) > bigmo) bigmo=pairs(0,e,0); + if(pairs(0,e,1) > bigmo) bigmo=pairs(0,e,1); + + pair_coeff(0,e,1)=atof(coefftxt[e].c_str()); + //pair_coeff(0,e,0)=sqrt(1-pair_coeff(0,e,1)*pair_coeff(0,e,1)); + pair_coeff(0,e,0)=1; + amplitude(0,e)=atof(amptxt[e].c_str()); + } + + for(int e=nelectrons-1; e >= nelectrons/2; e--) { + cout << "electron " << e << " count " << count << endl; + pairs(1,e,0)=atoi(pairtxt[count++].c_str())-1; + pairs(1,e,1)=atoi(pairtxt[count++].c_str())-1; + + if(pairs(1,e,0) > bigmo) bigmo=pairs(0,e,0); + if(pairs(1,e,1) > bigmo) bigmo=pairs(0,e,1); + + pair_coeff(1,e,1)=atof(coefftxt[e].c_str()); + //pair_coeff(1,e,0)=sqrt(1-pair_coeff(1,e,1)*pair_coeff(1,e,1)); + pair_coeff(1,e,0)=1; + amplitude(1,e)=atof(amptxt[e].c_str()); + } + + + bigmo+=1; + propagate_irreducible(); + nmo=bigmo; + + for(int s=0; s< 2; s++) { + cout << "****For spin channel " << s << endl; + for(int e=0; e< nelectrons; e++) { + cout << "pair " << e << " : "; + for(int p=0; p < 2; p++) { + cout << pairs(s,e,p) << " "; + } + cout << " amplitude " << amplitude(s,e); + cout << " coeff "; + for(int p=0; p < 2; p++) { + cout << pair_coeff(s,e,p) << " "; + } + cout << endl; + } + } + + + + //---------------------------------------------------- + + if(nmo > molecorb->getNmo() ) + error("Asked for more MO's than the MO object has."); + + Array1 < Array1 > totoccupation(1); + totoccupation(0).Resize(bigmo); + for(int i=0; i< bigmo; i++) { + totoccupation(0)(i)=i; + } + molecorb->buildLists(totoccupation); + + spin.Resize(nelectrons); + for(int e=0; e < nup; e++) + spin(e)=0; + for(int e=nup; e< nelectrons; e++) + spin(e)=1; + + +} + + +//---------------------------------------------------------------------- + +void Ext_slat_data::propagate_irreducible() { + + //BUG: we should pad with zeros if we have a spin-polarized case + + int nelectrons=pairs.GetDim(1); + //Get the coefficients for the c,d,.. + + //cout << "doing same spin" << endl; + + for(int e=nelectrons/2; e< nelectrons; e++) { + int oppe=e-nelectrons/2; + pairs(0,e,0)=pairs(0,oppe,0); + pairs(0,e,1)=pairs(0,oppe,1); + pair_coeff(0,e,0)=pair_coeff(0,oppe,1); + pair_coeff(0,e,1)=-pair_coeff(0,oppe,0); + amplitude(0,e)=1-amplitude(0,oppe); + } + + //cout << "doing opposite spin " << endl; + //Now for the opposite spin, we reverse the order + for(int e=0; e < nelectrons/2; e++) { + int oppe=e+nelectrons/2; + + pairs(1,e,0)=pairs(1,oppe,0); + pairs(1,e,1)=pairs(1,oppe,1); + pair_coeff(1,e,0)=pair_coeff(1,oppe,1); + pair_coeff(1,e,1)=-pair_coeff(1,oppe,0); + amplitude(1,e)=1-amplitude(1,oppe); + } +} + + + +//---------------------------------------------------------------------- + +int Ext_slat_data::supports(wf_support_type support) { + switch(support) { + case laplacian_update: + return 1; + case density: + return 1; + default: + return 0; + } +} + +//---------------------------------------------------------------------- + +//---------------------------------------------------------------------- + +void Ext_slat_data::generateWavefunction(Wavefunction *& wf) +{ + assert(wf==NULL); + wf=new Ext_slat; + Ext_slat * slatwf; + recast(wf, slatwf); + slatwf->init(this); + attachObserver(slatwf); +} + +int Ext_slat_data::showinfo(ostream & os) +{ + os << "Extended Slater function" << endl; + + + os << "Molecular Orbital object : "; + molecorb->showinfo(os); + + return 1; +} + +//---------------------------------------------------------------------- + +int Ext_slat_data::writeinput(string & indent, ostream & os) +{ + os << indent << "EXT_SLAT" << endl; + + os << indent << "PAIRS { " << endl; + int npair=pairs.GetDim(1)/2; + int nelectrons=npair*2; + + cout << "nelectrons " << nelectrons << endl; + + for(int i=0; i< npair; i++) { + os << indent << " " << pairs(0,i,0)+1 << " " << pairs(0,i,1)+1 << endl; + } + + for(int e=nelectrons-1; e >= nelectrons/2; e--) { + os << indent << " " << pairs(1,e,0)+1 + << " " << pairs(1,e,1)+1 << endl; + } + + + os << indent << "}\n"; + + os << indent << "COEFF { "; + for(int i=0; i< npair; i++) { + os << pair_coeff(0,i,1) << " "; + } + os <= nelectrons/2; e--) { + os << amplitude(1,e) << " "; + } + os << "}" << endl; + + + + + os << indent << "ORBITALS {\n"; + string indent2=indent+" "; + molecorb->writeinput(indent2, os); + os << indent << "}\n"; + + return 1; +} + +//------------------------------------------------------------------------ +void Ext_slat_data::getVarParms(Array1 & parms) +{ + parms.Resize(nparms()); + int npair=amplitude.GetDim(1)/2; + int counter=0; + int nelectrons=amplitude.GetDim(1); + for(int s=0; s< 2; s++) { + for(int i=0; i< npair; i++) { + int f=i+s*nelectrons/2; + //parms(counter++)=tan((pi-.2)*(amplitude(s,f)-.5)); + //cout << "amplitude " << amplitude(s,f) << " parm " << parms(counter-1) << endl; + + } + + for(int i=0; i< npair; i++) { + int f=i+s*nelectrons/2; + parms(counter++)=tan(.5*(pi-.2)*(pair_coeff(s,f,1))); + } + } +} + +void Ext_slat_data::setVarParms(Array1 & parms) +{ + assert(parms.GetDim(0)==nparms()); + + int counter=0; + int npair=amplitude.GetDim(1)/2; + int nelectrons=amplitude.GetDim(1); + for(int s=0; s< 2; s++) { + for(int i=0; i< npair; i++) { + int f=i+s*nelectrons/2; + //amplitude(s,f)=(atan(parms(counter++)))/(pi-.2)+.5; + } + + for(int i=0; i< npair; i++) { + int f=i+s*nelectrons/2; + pair_coeff(s,f,1)=(atan(parms(counter++)))/(.5*(pi-.2)) ; + //pair_coeff(s,f,0)=sqrt(1-pair_coeff(s,f,1)*pair_coeff(s,f,1)); + } + } + + propagate_irreducible(); + + for(int s=0; s< 2; s++) { + cout << "****For spin channel " << s << endl; + for(int e=0; e< nelectrons; e++) { + cout << "pair " << e << " : "; + for(int p=0; p < 2; p++) { + cout << pairs(s,e,p) << " "; + } + cout << " amplitude " << amplitude(s,e); + cout << " coeff "; + for(int p=0; p < 2; p++) { + cout << pair_coeff(s,e,p) << " "; + } + cout << endl; + } + } + + + + int max=wfObserver.size(); + for(int i=0; i< max; i++) { + wfObserver[i]->notify(all_wf_parms_change, 0); + } +} diff --git a/src/attic/Ext_slat_data.h b/src/attic/Ext_slat_data.h new file mode 100644 index 00000000..4f02bb49 --- /dev/null +++ b/src/attic/Ext_slat_data.h @@ -0,0 +1,99 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ +//------------------------------------------------------------------------ +//include/Ext_slat_data.h + +#ifndef EXT_SLAT_DATA_H_INCLUDED +#define EXT_SLAT_DATA_H_INCLUDED + +#include "Qmc_std.h" +#include "Wavefunction_data.h" +#include "MO_matrix.h" +#include "Ext_slat.h" + +/*! + + +
  • + ORBITALS This section is an input deck for an MO_matrix +
  • + + +PAIRS + + */ +class Ext_slat_data : public Wavefunction_data +{ +public: + + Ext_slat_data():molecorb(NULL) {} + + ~Ext_slat_data() + { + if(molecorb != NULL ) delete molecorb; + } + + + virtual int valSize() + { + return 0; + } + + virtual void getVarParms(Array1 & parms); + virtual void setVarParms(Array1 & parms); + + virtual void read(vector & words, + unsigned int & pos, + System * sys + ); + virtual int supports(wf_support_type ); + void generateWavefunction(Wavefunction *&); + + + int showinfo(ostream & os); + + int writeinput(string &, ostream &); + + + int nparms() + { + + //We have nelectrons coefficients and nelectrons amplitudes + return amplitude.GetDim(1); + } + +private: + + void propagate_irreducible(); + + friend class Ext_slat; + MO_matrix * molecorb; + + Array3 pairs; //!< which pairs to combine + Array3 pair_coeff; //!< their coefficients(NB: c_0=sqrt(1-c_1^2) + Array2 amplitude; //!< amplitude of the MO + + int nmo; + Array1 spin; + +}; + +#endif //SLAT_WF_DATA_H_INCLUDED +//------------------------------------------------------------------------ diff --git a/src/attic/Fitbasis_method.cpp b/src/attic/Fitbasis_method.cpp new file mode 100644 index 00000000..34a05341 --- /dev/null +++ b/src/attic/Fitbasis_method.cpp @@ -0,0 +1,240 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ +//------------------------------------------------------------------------ +//src/Fitbasis_method.cpp +#include "Fitbasis_method.h" +#include "qmc_io.h" +#include "Program_options.h" +#include "MatrixAlgebra.h" + +void Fitbasis_method::read(vector words, + unsigned int & pos, + Program_options & options) +{ + + vector > basis_sections; + + vector basistmp; + pos=0; + while(readsection(words, pos,basistmp, "BASIS")) { + basis_sections.push_back(basistmp); + } + + int nbasis=basis_sections.size(); + + if(nbasis<= 0) error("Need at least one BASIS section in FITBASIS."); + + basis.Resize(nbasis); + basis=NULL; + for(int i=0; i< nbasis; i++) { + allocate(basis_sections[i], basis(i)); + } + + + allocate(options.systemtext[0], sys); + + + vector centertext; + if(readsection(words, pos=0, centertext, "CENTERS")) + {} + else + { + single_write(cout, "Defaulting to using the atoms as centers\n"); + string temp="USEATOMS"; + centertext.push_back(temp); + } + unsigned int newpos=0; + centers.read(centertext, newpos, sys); + centers.assignBasis(basis); + + + + totbasis=0; + for(int i=0; i< centers.size(); i++) + { + int basiscent=0; + for(int j=0; j< centers.nbasis(i); j++) + { + basiscent+=basis(centers.basis(i,j))->nfunc(); + //cout << "basiscent " << basiscent << endl; + } + totbasis+=basiscent; + } + + cout << "Fitting " << totbasis << " total basis functions." << endl; + + + if(!readsection(words, pos=0, file_list, "MO_MESHES") ) { + error("need list of files in MO_MESHES"); + } + + + readvalue(words, pos=0, localize_output, "JEEP_CENTERS"); + + if(!readvalue(words, pos=0, orb_out_file, "ORBFILE") ) { + orb_out_file=options.runid+".orb"; + } + +} + +//------------------------------------------------------------------------ + +int Fitbasis_method::showinfo(ostream & os) +{ + os << "###################Fit basis#########################\n"; + return 1; +} + +//------------------------------------------------------------------------ + + + +//------------------------------------------------------------------------ + +#include "jeep_utils.h" +#include "Basis_fitter.h" +void Fitbasis_method::run(Program_options & options, ostream & output) +{ + + + Array1 origin(3); + Array1 box_size(3); + Array1 npoints(3); + + if(file_list.size() < 1) error("no files to open"); + ifstream orbin(file_list[0].c_str()); + if(!orbin) error("couldn't open ",file_list[0]); + + int nfunctions; + get_global_header(orbin, nfunctions); + get_function_header(orbin, npoints, box_size, origin); + orbin.close(); + + + + Sample_point * sample=NULL; + sys->generateSample(sample); + Array2 basis_matrix; + calculate_basis_overlap(centers,basis, sample, + origin,box_size, npoints, + basis_matrix); + + + + + //Note that this is a symmetric matrix, so we could use a better + //inverter. + cout << "inverting matrix " << endl; + Array2 basis_matrix_inverse(totbasis, totbasis); + + doublevar delta0=box_size(0)/(npoints(0)-1); + doublevar delta1=box_size(1)/(npoints(1)-1); + doublevar delta2=box_size(2)/(npoints(2)-1); + + + + for(int b1=0; b1 < totbasis; b1++) { + for(int b2=0; b2 < totbasis; b2++) { + basis_matrix(b1,b2) *= delta0*delta1*delta2; + } + } + + + + InvertMatrix(basis_matrix, basis_matrix_inverse, totbasis); + + + cout << "----overlap matrix-------" << endl; + for(int b1=0; b1 < totbasis; b1++) { + for(int b2=0; b2 < totbasis; b2++) { + + cout << setw(14) << basis_matrix(b1,b2);//*delta0*delta1*delta2; + } + cout << endl; + } + + cout << "----inverse matrix-------" << endl; + for(int b1=0; b1 < totbasis; b1++) { + for(int b2=0; b2 < totbasis; b2++) { + cout << setw(14) << basis_matrix_inverse(b1,b2); + } + cout << endl; + } + + + //loop over MO's to fit + //Array1 projection(totbasis); + Array2 coefficients; + + fit_molecorb(centers, basis, sample, origin, box_size, npoints, + basis_matrix_inverse, file_list, coefficients); + + + + if(mpi_info.node==0) { + cout << "writing orb file " << endl; + int nmo_fit=file_list.size(); + + //print header to the orb file + ofstream orbout(orb_out_file.c_str()); + orbout.precision(14); + int totmo=0; + for(int mo=0; mo < nmo_fit; mo++) { + for(int cent=0; cent< centers.size(); cent++) + { + int currfunc=0; + for(int j=0; j< centers.nbasis(cent); j++) + { + //cout << "basi " << centers.basis(cent,j) << endl; + int nfunc=basis(centers.basis(cent,j))->nfunc(); + for(int i=0; i< nfunc; i++) { + currfunc++; + totmo++; + orbout << " " << mo+1 << " " << currfunc << " " << cent+1 + << " " << totmo << endl; + } + + } + } + } + + orbout << "COEFFICIENTS " << endl; + + + for(int mo=0; mo < nmo_fit; mo++) { + for(int bas=0; bas< totbasis; bas++) { + orbout << coefficients(mo, bas) << " "; + if(bas%5==4) orbout << endl; + } + orbout << endl; + } + + + orbout.close(); + } + delete sample; + sample=NULL; + + +} + + + +//------------------------------------------------------------------------ diff --git a/src/attic/Fitbasis_method.h b/src/attic/Fitbasis_method.h new file mode 100644 index 00000000..0e3c62f3 --- /dev/null +++ b/src/attic/Fitbasis_method.h @@ -0,0 +1,68 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ +//------------------------------------------------------------------------ +//include/Fitbasis_method.h + +#ifndef FITBASIS_METHOD_H_INCLUDED +#define FITBASIS_METHOD_H_INCLUDED + +#include "Qmc_std.h" +#include "Qmc_method.h" +#include "Basis_function.h" +#include "Center_set.h" +class Program_options; +/*! + + */ +class Fitbasis_method : public Qmc_method +{ +public: + void read(vector words, + unsigned int & pos, + Program_options & options); + void run(Program_options & options, ostream & output); + Fitbasis_method() { + sys=NULL; + } + ~Fitbasis_method() + { + if(sys) delete sys; + for(int i=0; i< basis.GetDim(0); i++) { + if(basis(i)) delete basis(i); + } + } + + int showinfo(ostream & os); +private: + + Array1 basis; + Center_set centers; + vector file_list; + + string localize_output; + string orb_out_file; + int totbasis; + + System * sys; + +}; + +#endif //FITBASIS_METHOD_H_INCLUDED +//------------------------------------------------------------------------ diff --git a/src/attic/Jastrow_wf.cpp b/src/attic/Jastrow_wf.cpp new file mode 100644 index 00000000..c1faf912 --- /dev/null +++ b/src/attic/Jastrow_wf.cpp @@ -0,0 +1,600 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ +//-------------------------------------------------------------------------- +// src/Jastrow_wf.cpp +// +// +#include "Qmc_std.h" +#include "Jastrow_wf.h" +#include "Sample_point.h" + + +//---------------------------------------------------------------------- +void Jastrow_wf::notify(change_type change, int num) +{ + switch(change) + { + case electron_move: + electronIsStaleVal(num)=1; + updateEverythingLap=1; + break; + case all_electrons_move: + updateEverythingVal=1; + updateEverythingLap=1; + break; + case wf_parm_change: + case all_wf_parms_change: + parmChanged=1; + break; + case sample_attach: + sampleAttached=1; + updateEverythingVal=1; + updateEverythingLap=1; + break; + case data_attach: + dataAttached=1; + updateEverythingVal=1; + updateEverythingLap=1; + break; + case sample_static: + staticSample=1; + updateStatic=1; + break; + case sample_dynamic: + staticSample=0; + updateStatic=0; + break; + default: + updateEverythingVal=1; + updateEverythingLap=1; + } +} + + +//---------------------------------------------------------------------- + +void Jastrow_wf::init(Wavefunction_data * wfdata) +{ + Jastrow_wf_data * dataptr; + recast(wfdata, dataptr); + //cout << "Jastrow_wf" << endl; + nelectrons=dataptr->nelectrons; + nions=dataptr->nions; + + derivatives.Resize(nelectrons, 5); + valPartialSum.Resize(nelectrons); + ionPartialSum.Resize(nelectrons); + + elecPartialSum.Resize(nelectrons, nelectrons); + a_kval.Resize(nions, nelectrons); + for(int i=0; i< nions; i++) + { + for(int j=0; j < nelectrons; j++) + { + a_kval(i,j).Resize(dataptr->elecIonBasis->nfunc()+1); + a_kval(i,j)(0)=1; + } + } + electronIsStaleVal.Resize(nelectrons); + electronIsStaleVal=0; + updateEverythingVal=1; + updateEverythingLap=1; + sampleAttached=0; + dataAttached=0; + staticSample=0; + updateStatic=0; + parmChanged=0; + // cout << "done" << endl; + +} + +//---------------------------------------------------------------------- + +void Jastrow_wf::updateVal(Wavefunction_data * wfdata, + Sample_point * sample) +{ + assert(sampleAttached); + assert(dataAttached); + + Jastrow_wf_data * jastdata; + recast(wfdata, jastdata); + + + if(updateEverythingVal==1) + { + calcVal(jastdata, sample); + updateEverythingVal=0; + electronIsStaleVal=0; + } + else + { + for(int e=0; e< nelectrons; e++) + { + if(electronIsStaleVal(e)==1) + { + updateVal(jastdata, sample, e); + //calcLap(jastdata, sample); + electronIsStaleVal(e)=0; + } + } + } + +} + +//---------------------------------------------------------------------- + +void Jastrow_wf::updateForceBias(Wavefunction_data * wfdata, + Sample_point * sample) +{ + assert(sampleAttached); + assert(dataAttached); + + updateVal(wfdata, sample); +} + + +//---------------------------------------------------------------------- + +void Jastrow_wf::updateLap(Wavefunction_data * wfdata, Sample_point * sample) +{ + assert(sampleAttached); + assert(dataAttached); + + Jastrow_wf_data * jastdata; + recast(wfdata, jastdata); + + //cout << "updateEverythingLap " << updateEverythingLap << endl; + + //For a static sample, we trust that only the parameters + //are changing + //If we're optimizing the basis, we have to recalculate everything + if(staticSample && parmChanged && !(jastdata->optimize_basis)) + { + if(updateStatic) + { //if we haven't saved since set static + jastdata->makeStaticSave(sample, values_static, + partialValues_static, deriv_static); + updateStatic=0; + } + jastdata->updateParms(sample, values_static,partialValues_static, + deriv_static, value,valPartialSum, derivatives); + parmChanged=0; + } + else + { //Otherwise do a regular update + if(updateEverythingLap==1 || parmChanged==1) + { + + calcLap(jastdata, sample); + updateEverythingVal=0; + updateEverythingLap=0; + electronIsStaleVal=0; + parmChanged=0; + } + else + { + assert(updateEverythingVal==0); + for(int e=0; e< nelectrons; e++) + { + assert(electronIsStaleVal(e) == 0); + } + } + } + +} + +//---------------------------------------------------------------------- + + +void Jastrow_wf::storeParmIndVal(Wavefunction_data * wfdata, + Sample_point * sample, + int e, Array1 & vals ) +{ + Jastrow_wf_data * dataptr; + recast(wfdata, dataptr); + assert(vals.GetDim(0) >= dataptr->valSize()); + + if(dataptr->optimize_basis) { + //do nothing. + } + else { + dataptr->fillParmInd(sample, e, vals); + } +} + + + + +//---------------------------------------------------------------------- +/*! + + */ +void Jastrow_wf::getParmDepVal(Wavefunction_data * wfdata, + Sample_point * sample, + int e, + Array1 & oldval, + Array2 & newval) +{ + assert(staticSample); + Jastrow_wf_data * dataptr; + recast(wfdata, dataptr); + assert(staticSample==1); + + if(dataptr->optimize_basis) { + //cout << "value before " << value << endl; + updateVal(dataptr, sample, e); + //cout << "value after " << value << endl; + getVal(dataptr, e, newval); + } + else { + assert(updateStatic==0); + + doublevar newvalue=0; + doublevar oldvalue=valPartialSum(e); + //cout << "oldvalue " << oldvalue << endl; + + dataptr->updateParmsVal(sample, e, newvalue, oldval); + //cout << "updateParmsnewvalue " << newvalue << endl; + newval(0,0)=1; + newval(0,1)=value+newvalue-oldvalue-dataptr->normalization; + //cout << "value " << value << endl; + } + + //cout << "newvalue " << newval(0,0) << " " << newval(0,1) << endl; + +} +//---------------------------------------------------------------------- + + +int Jastrow_wf::getParmDeriv(Wavefunction_data * wfdata, + Sample_point * sample , + Parm_deriv_return & derivatives){ + + error("Not implemented for this wavefunction"); + /* + assert(staticSample); + Jastrow_wf_data * dataptr; + recast(wfdata, dataptr); + assert(staticSample==1); + + derivatives.gradient.Resize(dataptr->nparms()); + derivatives.hessian.Resize(dataptr->nparms(),dataptr->nparms()); + + if(dataptr->nparms()) { + error("Not implemented yet!"); + return 0; + } + else { + derivatives.gradient=0; + derivatives.hessian=0; + return 1; + } + */ + return 0; +} + +//---------------------------------------------------------------------- + +void Jastrow_wf::generateStorage(Wavefunction_storage * & wfstore) +{ + wfstore=new Jastrow_wf_storage; + Jastrow_wf_storage * store; + recast(wfstore, store); + store->elecPartialSum_temp.Resize(nelectrons); + store->a_kval_temp.Resize(nions); + for(int i=0; i< nions; i++) + { + store->a_kval_temp(i).Resize(a_kval(i,0).GetDim(0)); + } +} + +//---------------------------------------------------------------------- + +void Jastrow_wf::saveUpdate(Sample_point * sample, int e, + Wavefunction_storage * wfstore) +{ + //cout << "Jastrow::save" << endl; + Jastrow_wf_storage * store; + recast(wfstore, store); + + store->value_temp=value; + + store->valPartialSum_temp=valPartialSum(e); + + for(int i=0; i< e; i++) + { + store->elecPartialSum_temp(i)=elecPartialSum(i,e); + } + for(int j=e+1; j< nelectrons; j++) + { + store->elecPartialSum_temp(j)=elecPartialSum(e,j); + } + + for(int i=0; i< nions; i++) { + store->a_kval_temp(i)=a_kval(i,e); + } + + store->ionPartialSum_temp=ionPartialSum(e); + +} + +//---------------------------------------------------------------------- + +void Jastrow_wf::restoreUpdate(Sample_point * sample, int e, + Wavefunction_storage * wfstore) +{ + + //cout << "Jastrow::restore" << endl; + Jastrow_wf_storage * store; + + recast(wfstore, store); + //cout << "ionPartialSum " << ionPartialSum(e) << " " + // << store->ionPartialSum_temp << endl; + + ionPartialSum(e)=store->ionPartialSum_temp; + + for(int i=0; i< e; i++) + { + //cout << "elecPartialSum " << elecPartialSum(i,e) + // << " " << store->elecPartialSum_temp(i) << endl; + elecPartialSum(i,e)=store->elecPartialSum_temp(i); + } + for(int j=e+1; j< nelectrons; j++) + { + //cout << "elecPartialSum " << elecPartialSum(e,j) + // << " " << store->elecPartialSum_temp(j) << endl; + elecPartialSum(e,j)=store->elecPartialSum_temp(j); + } + + + for(int i=0; i< nions; i++) + { + a_kval(i,e)=store->a_kval_temp(i); + } + //cout << "value " << value << " " << store->value_temp << endl; + value=store->value_temp; + valPartialSum(e)=store->valPartialSum_temp; + updateEverythingVal=0; + electronIsStaleVal=0; +} + +//------------------------------------------------------------------------ + +void Jastrow_wf::calcVal(Jastrow_wf_data * dataptr, Sample_point * sample) +{ + + for(int e=0; e< nelectrons; e++) + { + updateVal(dataptr, sample, e); + } +} + +//------------------------------------------------------------------------ + +/*! + + */ +void Jastrow_wf::updateVal(Jastrow_wf_data * dataptr, Sample_point * sample,int e) +{ + + + + Array1 elecPartialSum_temp(nelectrons); + doublevar ionPartialSum_temp; + //Save old values + for(int i=0; i< e; i++) + { + elecPartialSum_temp(i)=elecPartialSum(i,e); + //cout << "elecPartialSum_temp(" << i << ")" + // << elecPartialSum_temp(i) << endl; + } + for(int j=e+1; j< nelectrons; j++) + { + elecPartialSum_temp(j)=elecPartialSum(e,j); + //cout << "elecPartialSum_temp(" << j << ")" + // << elecPartialSum_temp(j) << endl; + + } + ionPartialSum_temp=ionPartialSum(e); + //cout << "ionPartialSum_temp " << ionPartialSum_temp << endl; + + + + dataptr->updateVal(a_kval, sample, e,ionPartialSum, elecPartialSum); + + //Assign the value + value+=ionPartialSum(e)-ionPartialSum_temp; + //cout << "ionpartialSum " << ionPartialSum(e) << endl; + for(int i=0; i< e; i++) + { + value+=elecPartialSum(i,e)-elecPartialSum_temp(i); + //cout << "elecPartialSum(" << i << ") " << elecPartialSum(i,e) + // < & val, int startpos) +{ + assert(val.GetDim(0) >= startpos+1); + Jastrow_wf_data * jastdata; + recast(wfdata, jastdata); + //cout << "getVal " << value << endl; + val(startpos,0)=1; //always positive + val(startpos,1)=value-jastdata->normalization; +} + +//---------------------------------------------------------------------- + +void Jastrow_wf::getDensity(Wavefunction_data * wfdata, + int e, + Array2 & dens) +{ + dens(0,0)=1; +} + +//---------------------------------------------------------------------------- + +void Jastrow_wf::getForceBias(Wavefunction_data * wfdata, int e, + Array2 & bias, int startpos) +{ + bias=0; + getVal(wfdata, e,bias, startpos); +} + +//------------------------------------------------------------------------ +/*! + +*/ +void Jastrow_wf::calcLap(Jastrow_wf_data * dataptr, Sample_point * sample) +{ + //cout << "calcLap" << endl;; + assert(dataptr != NULL); + + + + //Get the necessary basis functions + + //Electron-electron + //cout << "Electron-electron\n"; + Array1 eedist(5); + Array1 temp(5); + + sample->updateEIDist(); + sample->updateEEDist(); + + for(int i=0; i< nelectrons; i++) + { + + for(int j=i+1; j< nelectrons; j++) + { + //cout << "getDist" << endl; + sample->getEEDist(i,j, eedist); + //cout << "calcLap " << endl; + + dataptr->elecElecBasis-> + calcLap(eedist, dataptr->b_m(i,j), dataptr->basisoffset); + //cout << "cusp " << endl; + //cout << "eedist " << eedist(0) << endl; + dataptr->calcEECuspLap(i,j,eedist); + //cout << "done2 " << endl; + } + } + + //cout << "Electron-ion\n"; + //Electron-ion + Array1 eidist(5); + for(int j=0; j< nelectrons; j++) + { + for(int i=0; i< nions; i++) + { + sample->getEIDist(j,i,eidist); + //cout << "eidist " << eidist(0) << endl; + dataptr->elecIonBasis-> + calcLap(eidist,dataptr->a_k(i,j), dataptr->basisoffset); + int max=dataptr->a_k(i,j).GetDim(0); + for(int k=0; k< max; k++) { + a_kval(i,j)(k)=dataptr->a_k(i,j)(k,0); + } + } + } + + //Initialize sum variables + derivatives=0; + ionPartialSum=0; + elecPartialSum=0; + //Calculate the value, gradient, and laplacian + + // cout << "sumElecIon\n"; + //Electron-ion correlation + + dataptr->sumElecIon(ionPartialSum, derivatives); + //cout << "sumElecElec\n"; + //electron-electron and electron-electron-ion correlations + dataptr->sumElecElec(elecPartialSum, derivatives); + + value=0; + for(int i=0; i< nelectrons; i++) { + value+=ionPartialSum(i); + } + //cout << "u from ion " << value << endl; + doublevar tot=0; + for(int i=0; i< nelectrons; i++) + { + + //cout << "ionPartialSum " << ionPartialSum(i) << endl; + for(int j=i+1; j< nelectrons; j++) + { + tot+=elecPartialSum(i,j); + //cout << "elecPartialSum " << elecPartialSum(i,j) << endl; + //cout << "calcLap " << value << endl; + } + } + value+=tot; + //cout << "u from electron " << tot << endl; + + + +} + + +//------------------------------------------------------------------------ + + +void Jastrow_wf::getLap(Wavefunction_data * wfdata, int e, + Array2 & lap, int startpos) +{ + assert(lap.GetDim(0) >=startpos+1); + assert(lap.GetDim(1) >=6 ); + Jastrow_wf_data * jastdata; + recast(wfdata, jastdata); + + lap(startpos,0)=1; + lap(startpos,1)=value-jastdata->normalization; + + doublevar dotproduct=0; + for(int d=1; d< 4; d++) + { + lap(startpos,d+1)=derivatives(e,d); + dotproduct+=derivatives(e,d)*derivatives(e,d); + //cout << "derivative " << e << " " << d+1 << " " << derivatives(e,d) + // << endl; + } + lap(startpos,5)=derivatives(e,4)+dotproduct; + //cout << "derivative " << e << " " << "5" << " " << lap(0,5) + // << endl; +} + +//------------------------------------------------------------------------- + + + diff --git a/src/attic/Jastrow_wf.h b/src/attic/Jastrow_wf.h new file mode 100644 index 00000000..7ab2c524 --- /dev/null +++ b/src/attic/Jastrow_wf.h @@ -0,0 +1,191 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ +//-------------------------------------------------------------------------- +// include/Jastrow_wf.h +// +// +#ifndef JASTROW_WF_H_INCLUDED + +#define JASTROW_WF_H_INCLUDED + +#include "Qmc_std.h" +#include "Array.h" +#include "Wavefunction.h" +#include "Jastrow_wf_data.h" +#include "Array45.h" + +class System; + +class Jastrow_wf_storage : public Wavefunction_storage +{ +private: + friend class Jastrow_wf; + + //!The natural logarithm of the value(U) + doublevar value_temp; + + doublevar valPartialSum_temp; + + Array1 elecPartialSum_temp; + doublevar ionPartialSum_temp; + Array1 < Array1 > a_kval_temp; +}; + + +/*! + +Jastrow factor = \f$e^U\f$, where +\f[ U=\sum_{i &, + int startpos=0); + virtual void getLap(Wavefunction_data *, int, Array2 &, + int startpos=0 ); + virtual void getForceBias(Wavefunction_data *, int, Array2 &, + int startpos=0); + + virtual void getDensity(Wavefunction_data *,int, Array2 &); + + + virtual void storeParmIndVal(Wavefunction_data *, Sample_point *, + int, Array1 & ); + virtual void getParmDepVal(Wavefunction_data *, Sample_point *, + int, + Array1 &, + Array2 &); + + virtual int getParmDeriv(Wavefunction_data *, + Sample_point *, + Parm_deriv_return & ); + + + virtual void saveUpdate(Sample_point *, int e, Wavefunction_storage *); + virtual void restoreUpdate(Sample_point *, int e, Wavefunction_storage *); + + void generateStorage(Wavefunction_storage * & wfstore); + void init(Wavefunction_data *); + +private: + int nelectrons, nions; + + doublevar value; + //!The natural logarithm of the value(U) + + Array2 derivatives; + //!the derivatives of the Jastrow factor, with indices(electron#, [null, dx, dy, dz, lap]) + + Array2 elecPartialSum; + Array1 ionPartialSum; + + Array1 valPartialSum; + //!The contribution from each electron to the value. Note that sum(partialSum) != value, since there are two-body interactions. + + Array1 electronIsStaleVal; + int updateEverythingLap; + int updateEverythingVal; + int sampleAttached; + int dataAttached; + + int staticSample; + //!< Whether we have a unmoving sample. + + int updateStatic; + //! > a_kval; + + //saved variables for a static calculation. + Array3 deriv_static; + Array2 partialValues_static; + Array1 values_static; + + void calcVal(Jastrow_wf_data * , Sample_point *); + void updateVal(Jastrow_wf_data *, Sample_point *,int); + void calcLap(Jastrow_wf_data *, Sample_point *); +}; + +#endif //JASTROW_WF_H_INCLUDED +//-------------------------------------------------------------------------- diff --git a/src/attic/Jastrow_wf_calc.cpp b/src/attic/Jastrow_wf_calc.cpp new file mode 100644 index 00000000..9b8c1734 --- /dev/null +++ b/src/attic/Jastrow_wf_calc.cpp @@ -0,0 +1,1099 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ +//---------------------------------------------------------------------- +//src/Jastrow_wf_calc.cpp + +#include "Qmc_std.h" +#include "Jastrow_wf_data.h" +#include "Sample_point.h" + + +void Jastrow_wf_data::calcEECuspVal(int i, int j, Array1 & eedist) +{ + assert(i tempval(1); + if(jspin==ispin) { + cuspBasis(0)->calcVal(eedist, tempval); + } + else { + cuspBasis(1)->calcVal(eedist, tempval); + } + + eecusp(0,i,j)=tempval(0); + //cout << "done " << endl; +} + + +void Jastrow_wf_data::calcEECuspLap(int i, int j, Array1 & eedist) +{ + //cout << "cusplap " << endl; + assert(i tempvals(1,5); + if(jspin==ispin) { + cuspBasis(0)->calcLap(eedist, tempvals); + } + else { + cuspBasis(1)->calcLap(eedist, tempvals); + } + + for(int k=0; k< 5; k++) { + eecusp(k,i,j)=tempvals(0,k); + } + + +} + +//---------------------------------------------------------------------- + +void Jastrow_wf_data::sumElecIon(Array1 & ionPartialSum, + Array2 & derivatives) +{ + + + for(int I=0; I< nions; I++) + { + int k=0; + + for(int seq=eiCorr_start(I); + seq < eiCorr_end(I); seq++) + { + //cout << "seq " << seq << endl; + doublevar coeff=facco*eiCorrelation(seq); + //cout << "coeff " << coeff << endl; + for(int e=0; e< nelectrons; e++) + { + ionPartialSum(e)+=coeff*a_k(I,e)(k+1,0); + //cout << "ionPartialSum("<< e<<") " << ionPartialSum(e) + // << " coeff " << coeff << " basis " << a_k(I,e)(k+1, 0) << endl; + for(int d=1; d< 5; d++) + { + derivatives(e,d)+=coeff*a_k(I,e)(k+1,d); + //cout << "deriv " << e << " " << d << " " + // << derivatives(e,d) << endl; + } + //cout << "ecor " << derivatives(e,4)*(-.5) << endl; + + } + k++; //Count the function on this center. + } + } + + + +} + +//---------------------------------------------------------------------- + +/*! +adds to value, valPartialSum, and derivatives. +*/ +void Jastrow_wf_data::sumElecElec(Array2 & elecPartialSum, + Array2 & derivatives) +{ + + + + + //cout << "eecusp " << endl; + for(int i=0; i< nelectrons; i++) + { + for(int j=i+1; j< nelectrons; j++) + { + elecPartialSum(i,j)+=eecusp(0,i,j); + //cout << "eecusp " << eecusp(0,i,j); + //cout << "elecPartialSum(" << i << "," << j + // << ") " << elecPartialSum(i,j) << endl; + } + } + for(int d=1; d< 4; d++) + { + for(int i=0; i< nelectrons; i++) + { + for(int j=i+1; j< nelectrons; j++) + { + derivatives(i,d)+=eecusp(d,i,j); + derivatives(j,d)-=eecusp(d,i,j); + } + } + } + for(int i=0; i< nelectrons; i++) + { + for(int j=i+1; j< nelectrons; j++) + { + derivatives(i,4)+=eecusp(4,i,j); + derivatives(j,4)+=eecusp(4,i,j); + } + } + + Array3 driftij(nelectrons, nelectrons,5); + Array3 driftion_i(nelectrons, nelectrons,5); + Array3 driftion_j(nelectrons, nelectrons,5); + + driftij=0; + driftion_i=0; + driftion_j=0; + + //----------e-e correlation---------- + //cout << "eecorr" << endl; + for(int seq=0; + seq< eeCorrelation.GetDim(0); + seq++) + { + + doublevar coeff=eeCorrelation(seq)*faccp; + for(int i=0; i< nelectrons; i++) + { + for(int j=i+1; j< nelectrons; j++) + { + elecPartialSum(i,j)+=coeff*b_m(i,j)(seq+1,0); + + //cout << "elecPartialSum(" << i << "," << j + // << ") " << elecPartialSum(i,j) + // << " coeff " << coeff + // << " basis " << b_m(i,j)(seq+1,0) + // << endl; + for(int d=1; d<5; d++) + { + driftij(i, j,d)+=coeff*b_m(i,j)(seq+1,d); + } + //cout << "add to laplacian " << -.5*coeff*b_m(i,j)(seq+1, 4) << endl; + } + } + } + + + //-----electron electron ion--------- + //Array1 v_kl_i(5); + //Array1 v_kl_j(5); + //cout << "eeicorr" << endl; + for(int i=0; i< nelectrons; i++) + { + int istride=i*nelectrons; + doublevar dotproduct_i, dotproduct_j; + int ijd; + doublevar v_klval; + doublevar v_kl_i[5], v_kl_j[5]; + doublevar bmij[5]; + doublevar akj_temp, alj_temp; + doublevar aki_drift[5], ali_drift[5]; + + for(int j=i+1; j< nelectrons; j++) + { + for(int I=0; I< nions; I++) + { + int ionstride=I*a_k.GetDim(1); + int ionstridei=ionstride+i; + int ionstridej=ionstride+j; + int istridej=istride+j; + + for(int seq=eeiCorr_start(I); + seq < eeiCorr_end(I); + seq++) + { + int c_kt=c_k(seq); //temporary variable lookups + int c_lt=c_l(seq); + int c_mt=c_m(seq); + doublevar coeff=faccp*eeiCorrelation(seq); + c_kt*=5; + c_mt*=5; + c_lt*=5; //account for the stride. + + doublevar aki_temp=a_k.v[ionstridei].v[c_kt]; + doublevar ali_temp=a_k.v[ionstridei].v[c_lt]; + + for(int d=1; d< 5; d++) + { + aki_drift[d]=a_k.v[ionstridei].v[c_kt+d]; + ali_drift[d]=a_k.v[ionstridei].v[c_lt+d]; + } + + + for(int d=0; d<5; d++) + { + bmij[d]=b_m.v[istridej].v[c_mt+d]; + } + + + akj_temp=a_k.v[ionstridej].v[c_kt]; + alj_temp=a_k.v[ionstridej].v[c_lt]; + + + v_klval=coeff*(aki_temp*alj_temp+ali_temp*akj_temp); + elecPartialSum(i,j)+=v_klval*bmij[0]; + //cout << "elecPartialSum(" << i << "," << j + // << ") " << elecPartialSum(i,j) << endl; + for(int d=1; d< 5; d++) + { + v_kl_i[d]=coeff*(aki_drift[d]*alj_temp + +ali_drift[d]*akj_temp); + + v_kl_j[d]=coeff*(aki_temp*a_k.v[ionstridej].v[c_lt+d] + +ali_temp*a_k.v[ionstridej].v[c_kt+d]); + } + + ijd=(istridej)*5; + for(int d=1; d< 5; d++) + { + //ijd=(istridej)*5+d; + ijd++; + + driftij.v[ijd]+=v_klval*bmij[d]; + driftion_i.v[ijd]+=v_kl_i[d]*bmij[0]; + driftion_j.v[ijd]+=v_kl_j[d]*bmij[0]; + + } + + //cout << "done " << endl; + + //Cross terms in the laplacian + dotproduct_i=0; + dotproduct_j=0; + for(int d=1; d<4; d++) + { + dotproduct_i +=v_kl_i[d]*bmij[d];//*b_m.v[istride+j].v[c_mt+d]; + dotproduct_j +=v_kl_j[d]*bmij[d];//b_m.v[istride+j].v[c_mt+d]; + + } + //since we don't change the + //sign for the lap later, + //we need to do it here. + //driftion_i(i,j,4)+=2.0*dotproduct_i; + //driftion_j(i,j,4)-=2.0*dotproduct_j; + int driftoffset=(istride+j)*5+4; + driftion_i.v[driftoffset]+=2.0*dotproduct_i; + driftion_j.v[driftoffset]-=2.0*dotproduct_j; + } + } + } + } + + + //cout << "gradient adding\n"; + //add up the gradient for i and j + //Now sum up the derivatives. + for(int i=0; i< nelectrons; i++) + { + for(int j=i+1; j< nelectrons; j++) + { + for(int d=1; d<4; d++) + { + derivatives(i,d)+=driftion_i(i,j,d)+driftij(i,j,d); + derivatives(j,d)+=driftion_j(i,j,d)-driftij(i,j,d); + } + + //Laplacian is added for both i and j + derivatives(i,4)+=driftion_i(i,j,4)+driftij(i,j,4); + derivatives(j,4)+=driftion_j(i,j,4)+driftij(i,j,4); + //cout << "pair " << i << " " << j + // << " driftion " << driftion_i(i,j,4) + // << " driftij " << driftij(i,j,4) << endl; + } + } + // cout << "done" << endl; + +} + +//---------------------------------------------------------------------- + +/*! + */ +void Jastrow_wf_data::updateVal(Array2 > & a_kval, + Sample_point * sample, int e, + Array1 & ionPartialSum, + Array2 & elecPartialSum + ) +{ + //cout << "updateVal\n"; + Array1 eedist(5); + Array1 temp(5); + + sample->updateEIDist(); + sample->updateEEDist(); + + //Calculate the updated basis functions for electron-electron + for(int i=0; i< e; i++) + { + sample->getEEDist(i,e,eedist); + //for(int k=0; k< 5; k++) { + // cout << "eedist " << k << " " << eedist(k) << endl; + //} + calcEECuspVal( i,e,eedist); + elecElecBasis->calcVal(eedist, bupdate(i),basisoffset ); + } + for(int j=e+1; j< nelectrons; j++) + { + sample->getEEDist(e,j,eedist); + calcEECuspVal(e,j,eedist); + elecElecBasis->calcVal(eedist, bupdate(j), basisoffset); + } + + //Calculate the updated basis functions for electron-ion + Array1 eidist(5); + Array1 tempa(elecIonBasis->nfunc()); + for(int i=0; i< nions; i++) + { + //for(int j=0; j< nelectrons; j++) + //{ + // sample->getEIDist(j,i,eidist); + + // elecIonBasis->calcVal(eidist, a_kval(i,j), basisoffset); + //elecIonBasis->calcLap(eidist, temp, a_k(i,j)); + //} + sample->getEIDist(e,i,eidist); + elecIonBasis->calcVal(eidist, a_kval(i,e), basisoffset); + } + + //---------electron-ion---------- + + + ionPartialSum(e)=0; + for(int I=0; I< nions; I++) + { + int k=0; + for(int seq=eiCorr_start(I); + seq < eiCorr_end(I); seq++) + { + doublevar coeff=facco*eiCorrelation(seq); + //ionPartialSum(e)+=coeff*a_k(I,e)(k+1,0); + ionPartialSum(e)+=coeff*a_kval(I,e)(k+1); + k++; + } + } + + //int estride=a_k.GetDim(1); + int estride=a_kval.GetDim(1); + + //Electron-electron interaction + + + + //-----electron electron cusp---------- + for(int i=0; i< e; i++) + { + elecPartialSum(i,e)=eecusp(0,i,e); //initialize and assign + } + for(int j=e+1; j< nelectrons; j++) + { + elecPartialSum(e,j)=eecusp(0,e,j); + } + + + //----electron electron correlation------ + + for(int seq=0; + seq< eeCorrelation.GetDim(0); + seq++) + { + doublevar coeff=eeCorrelation(seq)*faccp; + for(int i=0; i< e; i++) + { + elecPartialSum(i,e)+=coeff*bupdate(i)(seq+1); + } + + for(int j=e+1; j< nelectrons; j++) + { + elecPartialSum(e,j)+=coeff*bupdate(j)(seq+1); + } + + } + + + //--------electron electron ion------------ + + //Array1 elecPartial_temp(nelectrons); + elecPartial_temp=0; + + for(int I=0; I< nions; I++) + { + //cout << "center " << I << endl; + + doublevar v_klval; + int ionoffset=I*estride; + int eoffset; + //cout << "ionoffset " << ionoffset << endl; + for(int seq=eeiCorr_start(I); + seq < eeiCorr_end(I); + seq++) + { + //doublevar total=0; + int c_kt=c_k(seq); + int c_lt=c_l(seq); + int c_mt=c_m(seq); + doublevar coeff=faccp*eeiCorrelation(seq); + + doublevar tmpa_k=a_kval.v[ionoffset+e].v[c_kt]; + doublevar tmpa_l=a_kval.v[ionoffset+e].v[c_lt]; + for(int i=0; i< e; i++) + { + // v_klval=coeff* + // (a_k(I,i)(c_k,0) + // *a_k(I,e)(c_l,0) + // +a_k(I,i)(c_l,0) + // *a_k(I,e)(c_k,0) ); + // elecPartialSum(i,e)+=v_klval*b_m(i,e)(c_m,0); + //eoffset=i*estride; + v_klval=coeff*( + a_kval.v[ionoffset+i].v[c_kt] + *tmpa_l + +a_kval.v[ionoffset+i].v[c_lt] + *tmpa_k); + elecPartial_temp.v[i]+=v_klval*bupdate.v[i].v[c_mt]; + } + //cout << "total-mideei " << total << endl; + eoffset=e*estride; + for(int j=e+1; j< nelectrons; j++) + { + //v_klval=coeff*(a_k(I,j)(c_k,0)*a_k(I,e)(c_l,0) + // +a_k(I,j)(c_l,0)*a_k(I,e)(c_k,0)); + v_klval=coeff*( + a_kval.v[ionoffset+j].v[c_kt] + *tmpa_l + +a_kval.v[ionoffset+j].v[c_lt] + *tmpa_k); + elecPartial_temp.v[j]+=v_klval*bupdate.v[j].v[c_mt]; + } + //cout << "total-eei " << total << endl; + } + } + + for(int i=0; i< e; i++) + { + elecPartialSum(i,e)+=elecPartial_temp(i); + } + for(int j=e+1; j< nelectrons; j++) + { + elecPartialSum(e,j)+=elecPartial_temp(j); + } + +} + +//---------------------------------------------------------------------- + +void Jastrow_wf_data::makeStaticSave(Sample_point * sample, + Array1 & values, + Array2 & partialValues, + Array3 & derivatives) +{ + + //cout << "makeStatic " << endl; + Array1 eedist(5); + Array1 temp(5); + sample->updateEIDist(); + sample->updateEEDist(); + + for(int i=0; i< nelectrons; i++) + { + for(int j=i+1; j< nelectrons; j++) + { + //cout << "getDist" << endl; + sample->getEEDist(i,j, eedist); + //cout << "calcLap " << endl; + + elecElecBasis->calcLap(eedist, b_m(i,j), basisoffset); + //cout << "cusp " << endl; + + calcEECuspLap(i,j,eedist); + //cout << "done " << endl; + } + } + + //cout << "Electron-ion\n"; + //Electron-ion + Array1 eidist(5); + for(int j=0; j< nelectrons; j++) + { + for(int i=0; i< nions; i++) + { + sample->getEIDist(j,i,eidist); + elecIonBasis->calcLap(eidist, a_k(i,j), basisoffset); + } + } + + //now fill the partial sums. + //cout << "valSize() " << valSize() << endl; + values.Resize(valSize()); + partialValues.Resize(valSize(), nelectrons); + derivatives.Resize(valSize(), nelectrons, 5); + values=0; + partialValues=0; + derivatives=0; + int counter=0; + for(int I=0; I< nions; I++) + { + int k=0; + + for(int seq=eiCorr_start(I); + seq < eiCorr_end(I); seq++) + { + //doublevar total=0; + int place=seq+counter; + + for(int e=0; e< nelectrons; e++) + { + values(place)+=a_k(I,e)(k+1,0); + partialValues(place, e)+=a_k(I,e)(k+1,0); + for(int d=1; d< 5; d++) + { + derivatives(place,e,d)+=a_k(I,e)(k+1,d); + } + } + k++; + } + } + + counter+=eiCorrelation.GetDim(0); + + //cout << "counter " << counter << endl; + + //----------e-e correlation---------- + + for(int seq=0; + seq< eeCorrelation.GetDim(0); + seq++) + { + + for(int i=0; i< nelectrons; i++) + { + for(int j=i+1; j< nelectrons; j++) + { + values(counter)+=b_m(i,j)(seq+1, 0); + partialValues(counter, i)+=b_m(i,j)(seq+1, 0); + partialValues(counter, j)+=b_m(i,j)(seq+1, 0); + for(int d=1; d<4; d++) + { + derivatives(counter, i, d)+=b_m(i,j)(seq+1,d); + derivatives(counter, j, d)-=b_m(i,j)(seq+1,d); + } + derivatives(counter, i, 4)+=b_m(i,j)(seq+1,4); + derivatives(counter, j, 4)+=b_m(i,j)(seq+1,4); + } + } + counter++; + } + + //cout << "done ee " << endl; + //------e-e-i correlation--------- + + for(int I=0; I< nions; I++) + { + for(int seq=eeiCorr_start(I); + seq < eeiCorr_end(I); + seq++) + { + int place=seq+counter; + int c_kt=c_k(seq); //temporary variable lookups + int c_lt=c_l(seq); + int c_mt=c_m(seq); + + doublevar dotproduct_i, dotproduct_j; + + int ionstride=I*a_k.GetDim(1); + + c_kt*=5; + c_mt*=5; + c_lt*=5; + doublevar v_klval; + doublevar v_kl_i[5], v_kl_j[5]; + + for(int i=0; i< nelectrons; i++) + { + int istride=i*nelectrons; + int ionstridei=ionstride+i; + doublevar aki_temp=a_k.v[ionstridei].v[c_kt]; + doublevar ali_temp=a_k.v[ionstridei].v[c_lt]; + doublevar akj_temp, alj_temp; + doublevar aki_drift[5], ali_drift[5]; + + for(int d=1; d< 5; d++) + { + aki_drift[d]=a_k.v[ionstridei].v[c_kt+d]; + ali_drift[d]=a_k.v[ionstridei].v[c_lt+d]; + } + doublevar bmij[5]; + for(int j=i+1; j< nelectrons; j++) + { + int ionstridej=ionstride+j; + int istridej=istride+j; + + for(int d=0; d<5; d++) + { + bmij[d]=b_m.v[istridej].v[c_mt+d]; + } + + + akj_temp=a_k.v[ionstridej].v[c_kt]; + alj_temp=a_k.v[ionstridej].v[c_lt]; + + + v_klval=(aki_temp*alj_temp+ali_temp*akj_temp); + //elecPartialSum.v[istridej]+=v_klval*bmij[0]; + values(place)+=v_klval*bmij[0]; + partialValues(place,i)+=v_klval*bmij[0]; + partialValues(place,j)+=v_klval*bmij[0]; + + for(int d=1; d< 5; d++) + { + //v_kl_i(d)=coeff*(a_k(I,i)(c_kt,d)*a_k(I,j)(c_lt,0) + // +a_k(I,i)(c_lt,d)*a_k(I,j)(c_kt,0)); + //v_kl_j(d)=coeff*(a_k(I,i)(c_kt,0)*a_k(I,j)(c_lt,d) + // +a_k(I,i)(c_lt,0)*a_k(I,j)(c_kt,d)); + //driftij(i,j,d)+=v_klval*b_m(i,j)(c_mt,d); + //driftion_i(i,j,d)+=v_kl_i(d)*b_m(i,j)(c_mt, 0); + //driftion_j(i,j,d)+=v_kl_j(d)*b_m(i,j)(c_mt, 0); + //cout << "d " << d << endl; + + v_kl_i[d]=(aki_drift[d]*alj_temp + +ali_drift[d]*akj_temp); + + v_kl_j[d]=(aki_temp*a_k.v[ionstridej].v[c_lt+d] + +ali_temp*a_k.v[ionstridej].v[c_kt+d]); + } + + + + for(int d=1; d< 4; d++) + { + derivatives(place, i,d) += v_klval*bmij[d]; + derivatives(place, j,d) -= v_klval*bmij[d]; + derivatives(place, i,d) += v_kl_i[d]*bmij[0]; + derivatives(place, j,d) += v_kl_j[d]*bmij[0]; + + } + + derivatives(place, i,4) += v_klval*bmij[4]; + derivatives(place, j,4) += v_klval*bmij[4]; + derivatives(place, i,4) += v_kl_i[4]*bmij[0]; + derivatives(place, j,4) += v_kl_j[4]*bmij[0]; + //cout << "done " << endl; + + //Cross terms in the laplacian + dotproduct_i=0; + dotproduct_j=0; + for(int d=1; d<4; d++) + { + //dotproduct_i +=v_kl_i(d)*b_m(i,j)(c_mt,d); + //dotproduct_j +=v_kl_j(d)*b_m(i,j)(c_mt,d); + dotproduct_i +=v_kl_i[d]*bmij[d];//*b_m.v[istride+j].v[c_mt+d]; + dotproduct_j +=v_kl_j[d]*bmij[d];//b_m.v[istride+j].v[c_mt+d]; + + } + //since we don't change the + //sign for the lap later, + //we need to do it here. + //driftion_i(i,j,4)+=2.0*dotproduct_i; + //driftion_j(i,j,4)-=2.0*dotproduct_j; + //int driftoffset=(istride+j)*5+4; + //driftion_i.v[driftoffset]+=2.0*dotproduct_i; + //driftion_j.v[driftoffset]-=2.0*dotproduct_j; + derivatives(place, i, 4)+=2.0*dotproduct_i; + derivatives(place, j, 4)-=2.0*dotproduct_j; + } + } + } + } + counter += eeiCorrelation.GetDim(0); + + //cout << "done " << endl; +} + +//---------------------------------------------------------------------- + + +void Jastrow_wf_data::updateParms(Sample_point * sample, + Array1 & oldvalue, + Array2 & oldValPartial, + Array3 & oldderiv, + doublevar & value, + Array1 & valPartialSum, + Array2 & derivatives) +{ + //cout << "updateParms" << endl; + value=0; + valPartialSum=0; + derivatives=0; + Array1 eedist(5); + + Array1 temp(5); + sample->updateEIDist(); + sample->updateEEDist(); + + for(int i=0; i< nelectrons; i++) + { + for(int j=i+1; j< nelectrons; j++) + { + sample->getEEDist(i,j, eedist); + calcEECuspLap(i,j,eedist); + } + } + + for(int i=0; i< nelectrons; i++) + { + for(int j=i+1; j< nelectrons; j++) + { + value+=eecusp(0,i,j); + valPartialSum(i)+=eecusp(0,i,j); + valPartialSum(j)+=eecusp(0,i,j); + } + } + for(int d=1; d< 4; d++) + { + for(int i=0; i< nelectrons; i++) + { + for(int j=i+1; j< nelectrons; j++) + { + derivatives(i,d)+=eecusp(d,i,j); + derivatives(j,d)-=eecusp(d,i,j); + } + } + } + for(int i=0; i< nelectrons; i++) + { + for(int j=i+1; j< nelectrons; j++) + { + derivatives(i,4)+=eecusp(4,i,j); + derivatives(j,4)+=eecusp(4,i,j); + } + } + + + + int counter=0; + for(int seq=0; seq < eiCorrelation.GetDim(0); seq++) + { + doublevar coeff=facco*eiCorrelation(seq); + int place=seq+counter; + //cout << "coeff " << coeff << endl; + //cout << "counter " << counter << " oldval " << oldvalue(counter) + // << endl; + value+=coeff*oldvalue(place); + for(int e=0; e< nelectrons; e++) + { + valPartialSum(e)+=coeff*oldValPartial(place,e); + for(int d=1; d< 5; d++) + { + derivatives(e, d)+=coeff*oldderiv(place,e,d); + //cout << "deriv " << e << " " << d << " " + // << derivatives(e,d) << endl; + } + } + } + + counter+=eiCorrelation.GetDim(0); + + //cout << "eecorr" << endl; + //----electron electron correlation------ + + for(int seq=0; + seq< eeCorrelation.GetDim(0); + seq++) + { + doublevar coeff=eeCorrelation(seq)*faccp; + value+=coeff*oldvalue(counter); + for(int e=0; e< nelectrons; e++) + { + valPartialSum(e)+=coeff*oldValPartial(counter,e); + for(int d=1; d< 5; d++) + { + derivatives(e, d)+=coeff*oldderiv(counter, e,d); + } + } + counter++; + } + + + + for(int seq=0; seq < eeiCorrelation.GetDim(0); seq++) + { + doublevar coeff=faccp*eeiCorrelation(seq); + int place=seq+counter; + + value+=coeff*oldvalue(place); + for(int e=0; e< nelectrons; e++) + { + valPartialSum(e)+=coeff*oldValPartial(place,e); + for(int d=1; d< 5; d++) + { + derivatives(e, d)+=coeff*oldderiv(place, e,d); + } + } + } + counter+=eeiCorrelation.GetDim(0); + + //cout << "eeiCorr" << endl; + //for(int i=0; i< nelectrons; i++) { + //for(int d=1; d< 5; d++) { + // cout << "derivatives(" << i << "," << d + // <<") " << derivatives(i,d) << endl; + //} + //} + //cout << "done updateParms " << endl; +} + +//---------------------------------------------------------------------- + + +/*! + + */ +void Jastrow_wf_data::fillParmInd(Sample_point * sample, + int e, + Array1 & vals) +{ + + //assert(vals.GetDim(0) >= totalsize); + //cout << "fillparmInd" << endl; + Array1 eedist(5); + Array1 temp(5); + + + Array1 eiCorr_save(eiCorrelation.GetDim(0)); + Array1 eeCorr_save(eeCorrelation.GetDim(0)); + Array1 eeiCorr_save(eeiCorrelation.GetDim(0)); + eiCorr_save=0; + eeCorr_save=0; + eeiCorr_save=0; + + + sample->updateEIDist(); + sample->updateEEDist(); + + + //Calculate the updated basis functions for electron-electron + for(int i=0; i< e; i++) + { + sample->getEEDist(i,e,eedist); + elecElecBasis->calcVal(eedist, bupdate(i), basisoffset); + } + for(int j=e+1; j< nelectrons; j++) + { + sample->getEEDist(e,j,eedist); + elecElecBasis->calcVal(eedist, bupdate(j), basisoffset); + } + + //Calculate the updated basis functions for electron-ion + Array1 eidist(5); + for(int i=0; i< nions; i++) + { + for(int j=0; j< nelectrons; j++) + { + sample->getEIDist(j,i,eidist); + elecIonBasis->calcLap(eidist, a_k(i,j), basisoffset); + } + } + + + //Fill the saved array + + //---------electron-ion---------- + + for(int I=0; I< nions; I++) + { + int k=0; + for(int seq=eiCorr_start(I); + seq < eiCorr_end(I); seq++) + { + eiCorr_save(seq)+=a_k(I,e)(k+1,0); + k++; + } + } + + + //----electron electron correlation------ + for(int seq=0; + seq< eeCorrelation.GetDim(0); + seq++) + { + doublevar total=0; + for(int i=0; i< e; i++) + { + total+=bupdate(i)(seq+1); + } + + for(int j=e+1; j< nelectrons; j++) + { + total+=bupdate(j)(seq+1); + } + eeCorr_save(seq)+=total; + //cout << "total-fill " << total << endl; + } + + int estride=a_k.GetDim(1); + + //--------electron electron ion------------ + + for(int I=0; I< nions; I++) + { + //cout << "center " << I << endl; + + doublevar v_klval; + int ionoffset=I*estride; + int eoffset; + //cout << "ionoffset " << ionoffset << endl; + for(int seq=eeiCorr_start(I); + seq < eeiCorr_end(I); + seq++) + { + doublevar total=0; + int c_kt=c_k(seq); + int c_lt=c_l(seq); + int c_mt=c_m(seq); + c_kt*=5; + c_lt*=5; //account for stride. + + doublevar tmpa_k=a_k.v[ionoffset+e].v[c_kt]; + doublevar tmpa_l=a_k.v[ionoffset+e].v[c_lt]; + for(int i=0; i< e; i++) + { + // v_klval=coeff* + // (a_k(I,i)(c_k,0) + // *a_k(I,e)(c_l,0) + // +a_k(I,i)(c_l,0) + // *a_k(I,e)(c_k,0) ); + // elecPartialSum(i,e)+=v_klval*b_m(i,e)(c_m,0); + v_klval=( + a_k.v[ionoffset+i].v[c_kt] + *tmpa_l + +a_k.v[ionoffset+i].v[c_lt] + *tmpa_k); + total+=v_klval*bupdate.v[i].v[c_mt]; + } + + eoffset=e*estride; + for(int j=e+1; j< nelectrons; j++) + { + //v_klval=coeff*(a_k(I,j)(c_k,0)*a_k(I,e)(c_l,0) + // +a_k(I,j)(c_l,0)*a_k(I,e)(c_k,0)); + //elecPartialSum(e,j)+=v_klval*b_m(e,j)(c_m,0); + v_klval=( + a_k.v[ionoffset+j].v[c_kt] + *tmpa_l + +a_k.v[ionoffset+j].v[c_lt] + *tmpa_k); + total+=v_klval*bupdate.v[j].v[c_mt]; + } + eeiCorr_save(seq)+=total; + } + } + + int counter=0; + for(int i=0; i< eiCorr_save.GetDim(0); i++) + { + vals(counter)=eiCorr_save(i); + counter++; + } + for(int i=0; i< eeCorr_save.GetDim(0); i++) + { + vals(counter)=eeCorr_save(i); + counter++; + } + for(int i=0; i< eeiCorr_save.GetDim(0); i++) + { + vals(counter)=eeiCorr_save(i); + counter++; + } + + //for(int i=0; i< counter; i++) { + // cout << "vals " << i << " " << vals(i) << endl; + //} + //cout << "done " << endl; + +} + +//---------------------------------------------------------------------- + + +void Jastrow_wf_data::updateParmsVal(Sample_point * sample, + int e, doublevar & value, + Array1 & oldvalue + ) +{ + //cout << "updateParmsVal " << endl; + Array1 eedist(5); + + sample->updateEEDist(); + value=0; + + //Calculate the updated basis functions for electron-electron + for(int i=0; i< e; i++) + { + sample->getEEDist(i,e,eedist); + calcEECuspVal( i,e,eedist); + } + for(int j=e+1; j< nelectrons; j++) + { + sample->getEEDist(e,j,eedist); + calcEECuspVal(e,j,eedist); + + } + int counter=0; + for(int seq=0; seq < eiCorrelation.GetDim(0); seq++) + { + doublevar coeff=facco*eiCorrelation(seq); + value+=coeff*oldvalue(counter); + counter++; + } + //cout << "e-ion " << value << endl; + //Electron-electron interaction + //-----electron electron cusp---------- + for(int i=0; i< e; i++) + { + value+= eecusp(0, i,e); + } + for(int j=e+1; j< nelectrons; j++) + { + value+= eecusp(0,e,j); + } + + //cout << "eecusp " << value << endl; + //----electron electron correlation------ + for(int seq=0; + seq< eeCorrelation.GetDim(0); + seq++) + { + doublevar coeff=eeCorrelation(seq)*faccp; + value+=coeff*oldvalue(counter); + counter++; + } + + //cout << "eeCorr " << value << endl; + + for(int seq=0; seq < eeiCorrelation.GetDim(0); seq++) + { + doublevar coeff=faccp*eeiCorrelation(seq); + value+=coeff*oldvalue(counter); + counter++; + } + + //cout << "done " << endl; + //cout << "eeiCorr " << value << endl; +} + +//---------------------------------------------------------------------- diff --git a/src/attic/Jastrow_wf_data.cpp b/src/attic/Jastrow_wf_data.cpp new file mode 100644 index 00000000..16a0bad1 --- /dev/null +++ b/src/attic/Jastrow_wf_data.cpp @@ -0,0 +1,810 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ +//------------------------------------------------------------------------ +//src/Jastrow_wf_data.cpp + +#include "Qmc_std.h" +#include "qmc_io.h" +#include "Jastrow_wf_data.h" +#include "Wavefunction_data.h" +#include "Jastrow_wf.h" +#include "System.h" +/*! + +*/ +void Jastrow_wf_data::read(vector & words, unsigned int & pos, + System * sys) +{ + + + //cout << "jast wf data " << endl; + unsigned int startpos=pos; + Array1 espin(2); + vector nspinstr; + espin(0)=sys->nelectrons(0); + espin(1)=sys->nelectrons(1); + + if(readsection(words, pos, nspinstr, "NSPIN")) + { + if(nspinstr.size() != 2) + error("NSPIN must have 2 elements"); + espin(0)=atoi(nspinstr[0].c_str()); + espin(1)=atoi(nspinstr[1].c_str()); + if(espin(0)+espin(1) != sys->nelectrons(0)+sys->nelectrons(1)) { + error("NSPIN must specify the same number of electrons as the SYSTEM " + "in JASTROW."); + } + } + + nelectrons=espin(0)+espin(1); + + vector atomlabels; + sys->getAtomicLabels(atomlabels); + nions=atomlabels.size(); + + + //faccp and facco are for compatability with the f90 code. + //They also help with overflow problems in that nice exponential, + //although since we never actually exponentiate it, it shouldn't + //be such a big problem. + pos=startpos; + if(!haskeyword(words, pos, "NOFACCO")) { + if(nions==1) + { + facco=nelectrons-1; + faccp=1.0; + } + else if(nions <= 10) + { + faccp=1.0/((double(nions-1)/double(nions))*double(nelectrons-1)); + facco=(nelectrons-1)*faccp; + } + else + { + faccp=1.0/nelectrons; + facco=1.0; + } + } + else { //if there is the keyword NOFACCO + faccp=1.0; + facco=1.0; + } + + + firste.Resize(2); + laste.Resize(2); + firste(0)=0; + firste(1)=espin(0); + laste(0)=espin(0); + laste(1)=laste(0)+espin(1); + + spin.Resize(nelectrons); + for(int s=0; s< 2; s++) + { + //cout << firste(s) << " " << laste(s) << endl; + for(int e=firste(s); e elecIonWords; + readsection(words, pos, elecIonWords, "EIBASIS"); + allocate(elecIonWords, elecIonBasis); + + pos=startpos; + vector elecElecWords; + readsection(words, pos, elecElecWords, "EEBASIS"); + allocate(elecElecWords, elecElecBasis); + + + //Find the maximum cutoff radii + maxeicutoff=0; + for(int i=0; i< elecIonBasis->nfunc(); i++ ) + { + if(elecIonBasis->cutoff(i) > maxeicutoff) + { + maxeicutoff=elecIonBasis->cutoff(i); + } + } + + maxeecutoff=0; + for(int i=0; i< elecElecBasis->nfunc(); i++) + { + if(elecElecBasis->cutoff(i) > maxeecutoff) + { + maxeecutoff=elecElecBasis->cutoff(i); + } + } + + //The cutoffs only work if the electron-ion cutoff is + //less than half of the electron-electron + //(because b_0=1, it's infinite range, and we have to + //be able to know that when the electrons are out of + //range of each other, they're also out of range + //of the ions. Otherwise, we have to treat the parameters + //like 2 2 0 and such separately, which is annoying.) + if(maxeicutoff*2 > maxeecutoff) + { + debug_write(cout, "Forcing Jastrow electron-electron" + " cutoff to be twice the electron-ion cutoff. May not" + " be as efficient as it could be.\n"); + maxeecutoff=maxeicutoff*2; + } + + debug_write(cout, "Electron-electron cutoff for Jastrow factor: ", + maxeecutoff, "\n"); + debug_write(cout, "Electron-ion cutoff for Jastrow factor: ", + maxeicutoff, "\n"); + + //---------------------------------------------------------------------- + + pos=startpos; + if(haskeyword(words,pos, "OPTIMIZEBASIS")) { + single_write(cout, "Turning on basis set optimization in Jastrow factor. " + " Don't be surprised if it takes a long time. \n"); + optimize_basis=1; + nbasisparms=elecElecBasis->nparms()+elecIonBasis->nparms(); + } + else { + optimize_basis=0; + nbasisparms=0; + } + + + + //---------------------------------------------------------------- + //Cusp part of the factor + + + pos=startpos; + vector likeCuspWords, unlikeCuspWords; + if(!readsection(words, pos, likeCuspWords, "LIKECUSP")) { + + error("Need LIKECUSP section in Jastrow factor. Try: \n" + "LIKECUSP {\n" + " NULL \n" + " EXPONENTIAL_CUSP\n" + " GAMMA " + " CUSP 0.25\n" + "}"); + } + pos=startpos; + if(!readsection(words, pos, unlikeCuspWords, "UNLIKECUSP") ) { + error("Need UNLIKECUSP section in Jastrow factor. Try: \n" + "UNLIKECUSP {\n" + " NULL \n" + " EXPONENTIAL_CUSP\n" + " GAMMA " + " CUSP 0.5\n" + "}"); + } + + + cuspBasis.Resize(2); + cuspBasis=NULL; + allocate(likeCuspWords, cuspBasis(0)); + allocate(unlikeCuspWords, cuspBasis(1)); + + + + //---------------------------------------------------------------- + //Electron-electron correlation + + pos=startpos; + vector eeWords; + readsection(words, pos, eeWords, "EECORRELATION"); + eeCorrelation.Resize(eeWords.size()); + for(unsigned int i=0; i< eeWords.size(); i++) + { + eeCorrelation(i)=atof(eeWords[i].c_str()); + } + + //---------------------------------------------------------------- + //Electron-ion correlation + + pos=startpos; + vector > eiWords; + vector eiWords_temp; + + int numparms=0; + while(readsection(words, pos, eiWords_temp, "EICORRELATION")) + { + eiWords.push_back(eiWords_temp); + numparms+=eiWords_temp.size()-1; + eiWords_temp.erase(eiWords_temp.begin(), eiWords_temp.end()); + + } + + eiCorrelation.Resize(numparms); + eiCorr_start.Resize(nions); + eiCorr_end.Resize(nions); + eiCorr_start=0; + eiCorr_end=0; + int totnum=0; + for(unsigned int i=0; i< eiWords.size(); i++) + { + int foundone=0; + for(int k=0; k< nions; k++) + { + if(eiWords[i][0] == atomlabels[k]) + { + if(eiCorr_end(k) != 0) { + error("There seem to be several EICORRELATION sections for ", + atomlabels[k]); + } + foundone=1; + eiCorr_start(k)=totnum; + eiCorr_end(k)=totnum+eiWords[i].size()-1; + } + } + if(foundone==0) + error("Couldn't find a matching atom for ", eiWords[i][0], + " in EICORRELATION."); + + + for(unsigned int j=1; j< eiWords[i].size(); j++) + { + eiCorrelation(totnum)=atof(eiWords[i][j].c_str()); + totnum++; + } + } + + //------------------------------------------------------------------ + //Electron-electron-ion correlation + + pos=startpos; + vector > eeiWords; + vector eeiWords_temp; + numparms=0; + while(readsection(words, pos, eeiWords_temp, "EEICORRELATION")) + { + eeiWords.push_back(eeiWords_temp); + numparms+=eeiWords_temp.size()-1; + eeiWords_temp.erase(eeiWords_temp.begin(), eeiWords_temp.end()); + } + if(numparms%4 !=0) + { + error("In EEICORRELATION, the number of parameters should" + "be divisible by four, but is instead ", numparms); + } + + + nUniqueAtoms=eeiWords.size(); + + numparms/=4; + + eeiCorrelation.Resize(numparms); + c_k.Resize(numparms); + c_l.Resize(numparms); + c_m.Resize(numparms); + eeiCorr_start.Resize(nions); + eeiCorr_end.Resize(nions); + eeiCorr_start=0; + eeiCorr_end=0; + totnum=0; + for(unsigned int i=0; i< eeiWords.size(); i++) + { + for(int k=0; k< nions; k++) + { + //cout << eeiWords[i][0] << " " << options.atoms[k].name << endl; + if(eeiWords[i][0] == atomlabels[k]) + { + if(eeiCorr_end(k) !=0) { + error("There seem to be several EEICORRELATION sections for ", + atomlabels[k]); + } + eeiCorr_start(k)=totnum; + eeiCorr_end(k)=totnum+(eeiWords[i].size()-1)/4; + if((eeiWords[i].size()-1)%4 != 0) + error("need divisable by four in ", atomlabels[k]); + } + } + + for(unsigned int j=1; j< eeiWords[i].size(); j++) + { + c_k(totnum)=atoi(eeiWords[i][j].c_str()); + j++; + c_l(totnum)=atoi(eeiWords[i][j].c_str()); + j++; + c_m(totnum)=atoi(eeiWords[i][j].c_str()); + j++; + eeiCorrelation(totnum)=atof(eeiWords[i][j].c_str()); + + //When k and l are the same, the value a_k*a_l+a_l*a_k + //should just be a_k*a_k, so we need to prevent double- + //counting.. Better to do it here than in the inner + //loop that gets evaluated a bunch of times. + if(c_k(totnum)==c_l(totnum)) + eeiCorrelation(totnum)*=0.5; + + totnum++; + } + } + + //------------------------------------- + //Temporary variables + + eecusp.Resize(5, nelectrons, nelectrons); + + basisoffset=1; + bupdate.Resize(nelectrons); + + a_k.Resize(nions, nelectrons); + //a_kval.Resize(nions, nelectrons); + for(int i=0; i< nions; i++) + { + for(int j=0; j< nelectrons; j++) + { + a_k(i,j).Resize(elecIonBasis->nfunc()+1,5); + //a_kval(i,j).Resize(elecIonBasis->nfunc()+1); + + //The zeroth a_k is defined to be one. + a_k(i,j)(0,0)=1; + //a_kval(i,j)(0)=1; + for(int d=1; d< 5; d++) + { + a_k(i,j)(0,d)=0; + } + } + } + + b_m.Resize(nelectrons, nelectrons); + for(int i=0; i< nelectrons; i++) + { + bupdate(i).Resize(elecElecBasis->nfunc()+1); + bupdate(i)(0)=1; + for(int j=0; j< nelectrons; j++) + { + b_m(i,j).Resize(elecElecBasis->nfunc()+1,5); + + //the zeroth b_m is always 1. + b_m(i,j)(0,0)=1; + for(int d=1; d< 5; d++) + { + b_m(i,j)(0,d)=0; + } + } + } + + + //Keeping track of the names so that we can print out things nicely. + for(int i=0; i< nions; i++) + { + atomname.push_back(atomlabels[i]); + } + + elecPartial_temp.Resize(nelectrons); + +} + +int Jastrow_wf_data::supports(wf_support_type support) { + switch(support) { + case laplacian_update: + return 0; + case density: + return 1; + default: + return 0; + } +} + +//---------------------------------------------------------------------- + + +void Jastrow_wf_data::generateWavefunction(Wavefunction *& wf) +{ + assert(wf==NULL); + wf=new Jastrow_wf; + //Jastrow_wf * jaswf; + //recast(wf, jaswf); + //jaswf->init(this); + //attachObserver(jaswf); + wf->init(this); + attachObserver(wf); +} + +//---------------------------------------------------------------------- + +void Jastrow_wf_data::renormalize() +{ + Array2 vals(1,2); + doublevar total=0; + for(unsigned int i=0; i < wfObserver.size(); i++) + { + wfObserver[i]->getVal(this, 0, vals); + total+=vals(0,1); + } + normalization=total/wfObserver.size(); +} + +void Jastrow_wf_data::resetNormalization() +{ + normalization=0; +} + + +//---------------------------------------- + +int Jastrow_wf_data::valSize() +{ + if(optimize_basis) { + return 0; + } + else { + return eeCorrelation.GetDim(0)+eiCorrelation.GetDim(0) + +eeiCorrelation.GetDim(0); + } +} + +//---------------------------- + +int Jastrow_wf_data::showinfo(ostream & os) +{ + os << "Jastrow function\n"; + + os << "Normalization: " << normalization << endl; + + os << "\n-------Basis functions----------------\n"; + string indent=" "; + os << "EIBASIS { \n"; + elecIonBasis->showinfo(indent, os); + os << " } \n"; + + os << "EEBASIS { \n"; + elecElecBasis->showinfo(indent, os); + os << " } \n"; + + os << "--------------Basis Done-------------\n\n"; + + //os << "Gamma factor for:\n"; + //os << "Like: " << gamma(0) << " " << "Unlike: " << gamma(1) + // << endl; + //os << " GAMMA { \n"; + //os << gamma(0) << " #Like spins \n"; + // os << gamma(1) << " #Unlike spins \n"; + //os << "} \n"; + + + os << "\n ---------Cusp basis------------\n"; + os << "Like spins:\n"; + cuspBasis(0)->showinfo(indent, os); + os << "Unlike spins: \n"; + cuspBasis(1)->showinfo(indent, os); + + + //os << "Electron-electron correlation: \n"; + os << "EECORRELATION { \n"; + for(int i=0; i< eeCorrelation.GetDim(0); i++) + { + os << eeCorrelation(i) << endl; + } + os << "}\n"; + + vector uniquenames; + for(unsigned int i=0; i< atomname.size(); i++) + { + int unique=1; + for(unsigned int j=0; j< uniquenames.size(); j++) + { + if(uniquenames[j]==atomname[i]) + { + unique=0; + break; + } + } + if(unique) + { + uniquenames.push_back(atomname[i]); + //os << "Correlation for atom " << atomname[i] << " : \n"; + os << "EICORRELATION { \n"; + os << atomname[i] << endl; + //cout << "eiCorr_start " << i << " " << eiCorr_start(i) + // <<" eiCorr_end " << eiCorr_end(i) << endl; + for(int j=eiCorr_start(i); j< eiCorr_end(i); j++) + { + os << eiCorrelation(j) << endl; + } + os << "} \n"; + + //os << "Electron-electron-ion correlation\n"; + os << "EEICORRELATION { \n"; + os << atomname[i] << endl; + //cout << i << " eeiCorr_start " << eeiCorr_start(i) + // << " eeiCorr_end " << eeiCorr_end(i) << endl; + for(int j=eeiCorr_start(i); jwriteinput(indent2, os); + os << indent << "} \n"; + + os << indent << "EEBASIS { \n"; + elecElecBasis->writeinput(indent2,os); + os << indent << "} \n"; + + os << indent << "LIKECUSP { \n"; + cuspBasis(0)->writeinput(indent2, os); + os << indent << "} \n"; + + os << indent << "UNLIKECUSP { \n"; + cuspBasis(1)->writeinput(indent2, os); + os << indent << "} \n"; + /* + os << indent << "CUSP { " + << cusp(0) << " " + << cusp(1) << " } \n"; + + os << indent << "GAMMA { "; + os << gamma(0) << " "; + os << gamma(1); + os << "} \n"; + */ + + //os << "Electron-electron correlation: \n"; + os << indent << "EECORRELATION { "; + for(int i=0; i< eeCorrelation.GetDim(0); i++) + { + os << eeCorrelation(i) << " "; + } + os << "}\n"; + + vector uniquenames; + for(unsigned int i=0; i< atomname.size(); i++) + { + int unique=1; + for(unsigned int j=0; j< uniquenames.size(); j++) + { + if(uniquenames[j]==atomname[i]) + { + unique=0; + break; + } + } + if(unique) + { + uniquenames.push_back(atomname[i]); + if(eiCorr_end(i)-eiCorr_start(i) > 0 ) { + os < 0 ) { + os << indent << "EEICORRELATION { \n"; + os << indent < & parms) +{ + parms.Resize(nparms()); + int k=0; + for(int i=0; i< cuspBasis.GetDim(0); i++) { + Array1 cuspbasisparms; + cuspBasis(i)->getVarParms(cuspbasisparms); + for(int j=0; j< cuspbasisparms.GetDim(0); j++) { + parms(k)=cuspbasisparms(j); + k++; + } + } + /* + for(int i=0; i< gamma.GetDim(0); i++) + { + parms(k)=log(gamma(i)); + k++; + } + */ + for(int i=0; + i< eeCorrelation.GetDim(0); + i++) + { + parms(k)=eeCorrelation(i); + k++; + } + + for(int i=0; i< eiCorrelation.GetDim(0); i++) + { + parms(k)=eiCorrelation(i); + k++; + } + + for(int i=0; i< eeiCorrelation.GetDim(0); i++) + { + parms(k)=eeiCorrelation(i); + if(c_k(i)== c_l(i)) + parms(k)*=2.0; //Shouldn't matter, but f90 + //code does it this way. + //(same in set..) + k++; + } + + //Basis set variational parameters + if(optimize_basis) { + Array1 eebasisparms; + elecElecBasis->getVarParms(eebasisparms); + for(int i=0; i< eebasisparms.GetDim(0); i++) { + parms(k)=eebasisparms(i); + k++; + } + + Array1 eibasisparms; + elecIonBasis->getVarParms(eibasisparms); + for(int i=0; i< eibasisparms.GetDim(0); i++) { + parms(k)=eibasisparms(i); + k++; + } + } + + assert(k==parms.GetDim(0)); +} + + + +void Jastrow_wf_data::setVarParms(Array1 & parms) +{ + assert(parms.GetDim(0)==nparms()); + + int k=0; + + + /* + for(int i=0; i< gamma.GetDim(0); i++) + { + gamma(i)=exp(parms(k)); + k++; + } + */ + + for(int i=0; i< cuspBasis.GetDim(0); i++) { + int cuspmax=cuspBasis(i)->nparms(); + Array1 cuspparms(cuspmax); + for(int j=0; j< cuspmax; j++) { + cuspparms(j)=parms(k); + k++; + } + cuspBasis(i)->setVarParms(cuspparms); + } + + + for(int i=0; + i< eeCorrelation.GetDim(0); + i++) + { + eeCorrelation(i)=parms(k); + k++; + } + + for(int i=0; i< eiCorrelation.GetDim(0); i++) + { + eiCorrelation(i)=parms(k); + //cout << "eiCorrelation " << i << " " << eiCorrelation(i) << endl; + k++; + } + + for(int i=0; i< eeiCorrelation.GetDim(0); i++) + { + eeiCorrelation(i)=parms(k); + if(c_k(i)==c_l(i)) + eeiCorrelation(i)*=0.5; + //cout << "eeiCorrelation " << i << " " << eeiCorrelation(i) << endl; + k++; + } + + + //Basis set variational parameters + if(optimize_basis) { + int eemax=elecElecBasis->nparms(); + Array1 eeparms(eemax); + for(int i=0; i< eemax; i++) { + eeparms(i)=parms(k); + k++; + } + elecElecBasis->setVarParms(eeparms); + + + int eimax=elecIonBasis->nparms(); + Array1 eiparms(eimax); + for(int i=0; i< eimax; i++) { + eiparms(i)=parms(k); + k++; + } + elecIonBasis->setVarParms(eiparms); + } + + + assert(k==parms.GetDim(0)); + + + int max=wfObserver.size(); + for(int i=0; i< max; i++) + { + wfObserver[i]->notify(all_wf_parms_change,0); + } + +} + + +//------------------------------------------------------------------------ diff --git a/src/attic/Jastrow_wf_data.h b/src/attic/Jastrow_wf_data.h new file mode 100644 index 00000000..b0e40777 --- /dev/null +++ b/src/attic/Jastrow_wf_data.h @@ -0,0 +1,180 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ +//------------------------------------------------------------------------ +//include/Jastrow_wf_data.h + +#ifndef JASTROW_WF_DATA_H_INCLUDED +#define JASTROW_WF_DATA_H_INCLUDED + +#include "Qmc_std.h" +#include "Wavefunction_data.h" +#include "Basis_function.h" + +class Jastrow_wf; + +class Jastrow_wf_data : public Wavefunction_data +{ +public: + + Jastrow_wf_data():elecIonBasis(NULL), elecElecBasis(NULL) + {} + + virtual void read(vector & words, + unsigned int & pos, + System * sys + ); + + virtual int supports(wf_support_type ); + void generateWavefunction(Wavefunction *&); + + virtual int valSize(); + void getVarParms(Array1 & ); + void setVarParms(Array1 & ); + int nparms() + { + return cuspBasis(0)->nparms()+cuspBasis(1)->nparms()+ eeCorrelation.GetDim(0) + +eiCorrelation.GetDim(0) +eeiCorrelation.GetDim(0)+nbasisparms; + } + int showinfo(ostream & os); + int writeinput(string &, ostream &); + + void renormalize(); + void resetNormalization(); + + + void calcEECuspVal(int i, int j, Array1 & eedist); + + //Helper functions for calcLap() + void calcEECuspLap(int i, int j,Array1 & eedist); + void sumElecIon(Array1 &,Array2 &); + void sumElecElec(Array2 & , Array2 &); + + + /*! + Get the contribution from one electron to the value. + */ + void updateVal(Array2 < Array1 > & a_kval, //!< The a_k's that we need to update + Sample_point * sample, //!< sample point we're using + int e , //!< electron to update + Array1 & ionPartialSum, + //!< contribution from this electron to the value + Array2 & elecPartialSum + + ); + + + + /*! + Fill the parameter independent values. + */ + void fillParmInd(Sample_point * sample, + int e, + Array1 & vals + ); + /*! + Use the values from fillParmInd to update the total value. + */ + void updateParmsVal(Sample_point * sample, + int e, doublevar & value, + Array1 & oldvalue); + /*! + makes the saved variables for a static calculation. + */ + void makeStaticSave(Sample_point * sample, + Array1 & values, + Array2 & valPartial, + Array3 & derivatives); + /*! + uses the variables from makeStaticSave to update value, valPartialSum, derivatives + */ + void updateParms(Sample_point * sample, + Array1 & oldvalue, + Array2 & oldValPartial, + Array3 & oldderiv, + doublevar & value, + Array1 & valPartialSum, + Array2 & derivatives); + +private: + friend class Jastrow_wf; + + int optimize_basis; + //!< Whether or not to optimize the basis + int nbasisparms; + //!< Number of parameters in the basis + + //! the \f$ \gamma \f$ in \f$ \frac{-c}{\gamma} e^{-\gamma r_{ij} \f$ + //Array1 gamma; + + //! the \f$ c \f$ in \f$ \frac{-c}{\gamma} e^{-\gamma r_{ij} \f$. Can be diff for diff spins + //Array1 cusp; + + //c_klm's + Array1 eeCorrelation; + Array1 eiCorrelation; + Array1 eeiCorrelation; + + //indexing to the wavefunction parameters. + Array1 eiCorr_start, eiCorr_end; + Array1 eeiCorr_start, eeiCorr_end; + Array1 c_k, c_l, c_m; + + + //Calculation info + + Array1 cuspBasis; + + Basis_function * elecIonBasis; + Basis_function * elecElecBasis; + doublevar maxeecutoff; //!< maximum electron-electron cutoff + doublevar maxeicutoff; //!< maximum electron-ion cutoff + + int nelectrons; + int nions; + int eenum; + int einum; + int nUniqueAtoms; + int basisoffset; //! firste, laste; + Array1 spin; + doublevar faccp; + doublevar facco; + doublevar normalization; + + vector atomname; + + + //Temporary storage for the basis function values. + Array2 < Array2 > a_k; + //Array2 > a_kval; + + + //! (electron#, electron#) for outer, (basis, valgradlap) for inner + Array2 > b_m; + Array3 eecusp; + + Array1 > bupdate; + + Array1 elecPartial_temp; + +}; + +#endif //JASTROW_WF_DATA_H_INCLUDED +//------------------------------------------------------------------------ diff --git a/src/attic/Localize_method.cpp b/src/attic/Localize_method.cpp new file mode 100644 index 00000000..728dd98a --- /dev/null +++ b/src/attic/Localize_method.cpp @@ -0,0 +1,514 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ +//------------------------------------------------------------------------ +//src/Localize_method.cpp +#include "Localize_method.h" +#include "conjugategrad.h" +#include "MatrixAlgebra.h" +#include "Array45.h" +#include "qmc_io.h" +#include "ulec.h" +#include "System.h" +#include "Program_options.h" +#include "Qmc_std.h" +#include "Cubic_spline3D.h" +using namespace std; + +//using namespace NR; +/*! +Read the "words" from the method section in the input file +via doinput() parsing, and store section information in private +variables orbs, resolution, and minmax. +Set up MO_matrix and Sample_point objects for wavefunction from input +*/ +void Localize_method::read(vector words, + unsigned int & pos, + Program_options & options) +{ + pos=0; //always start from first word + doublevar Tres; + doublevar Tres2; + doublevar Tres3; + int dummy; + vector Torbs; + vector Tminmax; + vector Lcenters; + vector orbtext; + + if(! readsection(words,pos,Torbs,"PLOTORBITALS")) + error("Need PLOTORBITALS in METHOD section"); + orbs.Resize(Torbs.size()); + for(unsigned int i=0; i3*orbs.GetSize()) + error("More center vectors in LCENTERS then orbitals involved"); + cout <<"Reading localization centers"< > orblist(1); + orblist(0).Resize(orbs.GetDim(0)); + + for(int i=0; i< orbs.GetDim(0); i++) + { + cout << "i " << i << endl; + cout << "orbs " << orbs(i) << endl; + orblist(0)(i)=orbs(i)-1; + } + // unsigned int startpos=0; + //mymomat.read(orbtext,startpos,sysprop); + allocate(orbtext, sysprop, mymomat); + mymomat->buildLists(orblist); + mywalker=NULL; + sysprop->generateSample(mywalker); + mymovals.Resize(mymomat->getNmo(),5); + } + + + +bool sphere_check(Array1 & pos, + doublevar r_max_x, doublevar r_max_y, doublevar r_max_z, + doublevar radius) + //checks whether vector pos is inside the sphere +{ + if (((pos(0)-r_max_x)*(pos(0)-r_max_x)+(pos(1)-r_max_y)*(pos(1)-r_max_y) + +(pos(2)-r_max_z)*(pos(2)-r_max_z)) & pos,Array1 & prim_trans, + doublevar r_max_x, doublevar r_max_y, doublevar r_max_z, + doublevar radius,Array1 & new_pos) + //constructs the periodic images for neighbouring cells + //end checks whether are inside the sphere +{ + for(int i=0;i<=2;i++){ + if (i<2) new_pos(0)=pos(0)+i*prim_trans(0); + else new_pos(0)=pos(0)-prim_trans(0); + for(int j=0;j<=2;j++){ + if (j<2) new_pos(1)=pos(1)+j*prim_trans(1); + else new_pos(1)=pos(1)-prim_trans(1); + for(int k=0;k<=2;k++){ + if (k<2) new_pos(2)=pos(2)+k*prim_trans(2); + else new_pos(2)=pos(2)-prim_trans(2); + if (sphere_check(new_pos,r_max_x,r_max_y,r_max_z,radius)) return true; + } + } + } + return false; +} + + +doublevar norm_i(Array1 & a) +{ + int m=a.GetSize(); + double norm=0.0; + for (int k=0;k & a) +{ + int m=a.GetSize(); + double norm; + norm=norm_i(a); + for (int k=0;k _overlap_ma_R; + +public: + void init_overlap_ma_R(Array2 &overlap_ma_R); + doublevar func(Array1 &a); + void dfunc(Array1 &a, Vec_O_doublevar &xi); + Minimization_function(); + ~Minimization_function(); +}; + +Minimization_function::Minimization_function(){ +} + +Minimization_function::~Minimization_function(){ +} + +void Minimization_function::init_overlap_ma_R(Array2 &overlap_ma_R){ + assert(overlap_ma_R.GetDim(0)==overlap_ma_R.GetDim(1)); + _overlap_ma_R.Resize(overlap_ma_R.GetDim(0),overlap_ma_R.GetDim(0)); + for(int k=0;k &a){ + // \begin{equation} + // {\cal F}=1-\frac{\sum_{i,j}^{N}a_i a_j S_{ij}}{\sum_{i}^{N}a_{i}^2} + // \end{equation} + int m=a.GetSize(); + double tmp=0.0; + double norm=norm_i(a); + for (int k=0;k &a, Array1 &xi){ + // \begin{equation} + // \frac{\partial {\cal F}}{\partial a_k}= + // -2\frac{\sum_{i}^{N}a_iS_{ik}+2a_k({\cal F}-1)}{\sum_{i}^{N}a_{i}^2} + // \end{equation} + int m=a.GetSize(); + double fa_i=func(a); + double norm=norm_i(a); + double temp=0.0; + for (int j=0;j &a, Array2 & grid) +{ + double tmp=0.0; + + for (int k=0;k os_array; + unsigned int electron=0; //# of the electron that will move through grid + string pltfile; //name of plotfile being written + string orbfile; //name of orbfile being written + Array1 orbfile_array; + Array1 xyz(3),resolution_array(3); //position of electron "in" MO + Array1 D_array1(3); //dummy array1 + D_array1=0; //sets all 3 components to 0. use as counter for gridpoints + + const double ftol=0.00001;//precision in minimalization routine + double fret; //values of minima + int iter=0; //number of iterations + + Array1 p0(orbs.GetSize()); //starting vector for minimization + Array1 xi(orbs.GetSize()); //gradient of minimization + Array2 RM(orbs.GetSize(),orbs.GetSize()); //rotation_matrix + Array3 overlap_ma_R_all(r_max.GetDim(0),orbs.GetSize(),orbs.GetSize()); + //all overlaps + Array1 temp_orbs(orbs.GetSize()); //same like orbs-1 + Array1 orb_norm(orbs.GetSize()); //normalization of orbitals + Array1 orb_norm_new(r_max.GetDim(0)); //normalization of new orbitals + doublevar determinant_RM; //determinat of rotation_matrix + doublevar backup,dummy; //some temporary variables + Array1 sphere_norm(r_max.GetDim(0)); // + Array1 new_pos(3),prim_trans(3); + //zeroing + overlap_ma_R_all=0.0; + orb_norm=0.0; + sphere_norm=0.0; + RM=0.0; + + + D_array1(0)=roundoff((minmax(1)-minmax(0))/resolution); + D_array1(1)=roundoff((minmax(3)-minmax(2))/resolution); + D_array1(2)=roundoff((minmax(5)-minmax(4))/resolution); + + resolution_array(0)=(minmax(1)-minmax(0))/(D_array1(0)-1); + resolution_array(1)=(minmax(3)-minmax(2))/(D_array1(1)-1); + resolution_array(2)=(minmax(5)-minmax(4))/(D_array1(2)-1); + + prim_trans(0)=minmax(1)-minmax(0); + prim_trans(1)=minmax(3)-minmax(2); + prim_trans(2)=minmax(5)-minmax(4); + + + if(orbs.GetSize()<=0) + error("number of orbitals requested is not a positive number"); + + //calculate value of each molecular orbital at each grid point + // grid values with x=fastest running variable, and z=slowest + + cout<<"calculating "<setElectronPos(electron,xyz); //move elec#1 to point specified by xyz + mymovals=-1e99; //MO_matrix::updateVal() ADDS to mymovals instead to replace + //mymomat->updateLap(mywalker,electron,0,mymovals); //recalculate MO value for elec#1 + mymomat->updateVal(mywalker,electron,0,mymovals); //recalculate MO value for elec#1 + for(int i=0; i overlap_ma_R(overlap_ma_R_all(i)); + minfunc.init_overlap_ma_R(overlap_ma_R); + fret=1.0; + int tries=0; + while (fret > delta_norm){ + + //initialization of p0 + for (int ii=0;ii minimizer(& minfunc); + minimizer.frprmn(p0, ftol, iter, fret); + if (fret > delta_norm ) //testing whether better than required limit on normalization + cout <<"iter:"<200) + error("Couldn't find value small enough, increase R_cut"); + tries++; + } + backup=norm_i(p0); + cout <<"Current norm is "< "Orbital/density surface" + //number of grid points for x, y, & z direction + os_array(i) <setElectronPos(electron,xyz); //move elec#1 to point specified by xyz + mymovals=-1e99; //MO_matrix::updateVal() ADDS to mymovals instead to replace + //mymomat->updateLap(mywalker,electron,0,mymovals); //recalculate MO value for elec#1 + mymomat->updateVal(mywalker,electron,0,mymovals); //recalculate MO value for elec#1 + for(int i=0; iwriteorb(testorb, RM, temp_orbs); + testorb.close(); +} + + +/*! +Print information about private variables {orbs,resolution,minmax} +*/ +int Localize_method::showinfo(ostream & os) +{ + os << " MO_matrix: "; + mymomat->showinfo(os); + os << endl; + + os<<"#############Localize_method#################\n"; + os<<"orbs="< +#include +#include +#include +#include "Qmc_method.h" +#include "qmc_io.h" +#include "Array.h" +#include "MO_matrix.h" +#include "Sample_point.h" +class System; +class Wavefunction; +class Program_options; + +/*! +\brief +Generate a grid of sample points of MO functions. Keyword PLOT +in METHOD section + + the PLOT method generates a .xyz file that can be imported by gOpenMOl + and "formatted" .plt files that need to be "unformatted" + using gOpenMol's "Pltfile (conversion)" utility + + +

    Options

    + Required + + ORBITALS A list of the orbitals to be plotted + + RESOLUTION Grid coarsness, from 0.1(fine) to 10(coarse) + + MINMAX list of 6 numbers: xmin xmax ymin ymax zmin zmax + +In the qmc input file +write "PLOT" in the method section and include 3 subsections "ORBITALS", +"RESOLUTION", and "MINMAX". Should output FORMATTED .plt files that can +be both unformatted and viewed in gOpenMol. + */ +class Localize_method : public Qmc_method +{ +public: + void read(vector words, + unsigned int & pos, + Program_options & options); + void run(Program_options & options, ostream & output); + int showinfo(ostream & os); + Localize_method():mymomat(NULL), mywalker(NULL), sysprop(NULL) {} + ~Localize_method() + { + if(mymomat != NULL) delete mymomat; + if(mywalker != NULL) delete mywalker; + if(sysprop != NULL) delete sysprop; + } + +private: + Array1 orbs; //! minmax; //! r_max; //! mymovals; //!<(i,j) where i=MO#, j=0 default (for now) + System * sysprop; +}; + +#endif //LOCALIZE_METHOD_H_INCLUDED +//------------------------------------------------------------------------ diff --git a/src/attic/Md_method.cpp b/src/attic/Md_method.cpp new file mode 100644 index 00000000..ce65c664 --- /dev/null +++ b/src/attic/Md_method.cpp @@ -0,0 +1,438 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ +//------------------------------------------------------------------------ +//src/Md_method.cpp +//Author:Lucas Wagner + + + +#include "Md_method.h" +#include "qmc_io.h" + +#include + +#include "Program_options.h" +#include "System.h" + +#include "Properties.h" + +//---------------------------------------------------------------------- + +void Md_method::read(vector words, + unsigned int & pos, + Program_options & options) +{ + pos=0; + vector vmcsec; + if(!readsection(words, pos=0, vmcsec, "EMBED")) { + error("Need EMBED section"); + } + allocate(vmcsec,options, qmc_avg); + + if(!readvalue(words, pos=0, nstep, "NSTEP")) { + error("Need NSTEP"); + } + + if(!readvalue(words, pos=0, tstep, "TIMESTEP")) { + error("Need TIMESTEP in MD method"); + } + + readvalue(words, pos=0, readcheckfile, "READCHECK"); + readvalue(words, pos=0, writecheckfile, "STORECHECK"); + + if(!readvalue(words, pos=0, log_label, "LABEL")) + log_label="md"; + + + if(readvalue(words, pos=0, damp, "DAMP")) { + if(damp > 1 || damp < 0) error("DAMP must be in [0,1]"); + } + else damp=0.0; + + string resdim; + pos=0; + restrict_dimension.Resize(3); + restrict_dimension=0; + if(readvalue(words, pos, resdim, "RESTRICT")) { + if(caseless_eq(resdim, "X")) restrict_dimension(0)=1; + else if(caseless_eq(resdim, "Y")) restrict_dimension(1)=1; + else if(caseless_eq(resdim, "Z")) restrict_dimension(2)=1; + else error("Unknown argument to RESTRICT:", resdim); + } + + vector weighttxt; + if(!readsection(words, pos=0, weighttxt, "ATOMIC_WEIGHTS") ) { + error("Need ATOMIC_WEIGHTS in MD method"); + } + atomic_weights.Resize(weighttxt.size()); + for(int i=0; i< atomic_weights.GetDim(0); i++) { + atomic_weights(i)=atof(weighttxt[i].c_str()); + } + +} + + +//---------------------------------------------------------------------- + +int Md_method::generateVariables(Program_options & options) { + + + allocate(options.systemtext[0], sys ); + allocate(options.twftext[0], sys, wfdata); + + sys->generatePseudo(options.pseudotext, pseudo); + + return 1; +} + +//---------------------------------------------------------------------- + + + +int Md_method::showinfo(ostream & os) +{ + + if(os) + { + + sys->showinfo(os); + os << endl << endl; + os << " Wavefunction " + << endl << endl; + wfdata->showinfo(os); + pseudo->showinfo(os); + os << endl; + + os << "Embedded QMC" << endl; + qmc_avg->showinfo(os); + + + return 1; + } + else + return 0; +} + +//---------------------------------------------------------------------- + + +void recenter(Array2 & pos, Array1 & mass) { + int natoms=pos.GetDim(0); + assert(pos.GetDim(0)==mass.GetDim(0)); + assert(pos.GetDim(1)==3); + + Array1 center(3,0.0); //center of mass + doublevar tot=0.0; + for(int at=0; at< natoms; at++) { + for(int d=0; d< 3; d++) { + center(d)+=mass(at)*pos(at,d); + } + tot+=mass(at); + } + + for(int d=0; d< 3; d++) { + center(d)/=tot; + } + + for(int at=0; at< natoms; at++) { + for(int d=0; d< 3; d++) { + pos(at,d)-=center(d); + } + } + +} + +/*! + +*/ +void Md_method::run(Program_options & options, ostream & output) +{ + + output.precision(10); + + + string logfile=options.runid+".log"; + prop.setLog(logfile, log_label); + + int natoms=sys->nIons(); + + Array1 < Array1 > atom_move; + Array1 < Array2 > displace; + + //Even numbered displacements are in + direction, odd are in + // - direction + + if(natoms==2) { + //For a dimer, assume they are oriented in the z + //direction and only move in that direction. + atom_move.Resize(4); + displace.Resize(4); + int count=0; + for(int at=0; at < natoms; at++) { + for(int s=0; s< 2; s++) { + atom_move(count).Resize(1); + displace(count).Resize(1,3); + atom_move(count)(0)=at; + displace(count)=0; + if(s==0) + displace(count)(0,2)=0.00025; + else + displace(count)(0,2)=-0.00025; + count++; + } + } + + } + else { + int ndim=0; + for(int d=0; d< 3; d++) { + if(restrict_dimension(d) ==0) ndim++; + } + atom_move.Resize(2*ndim*natoms); + displace.Resize(2*ndim*natoms); + int count=0; + for(int at=0; at< natoms; at++) { + for(int d=0; d< 3; d++) { + if(!restrict_dimension(d) ) { + for(int s=0; s< 2; s++) { + atom_move(count).Resize(1); + displace(count).Resize(1,3); + atom_move(count)(0)=at; + displace(count)=0; + if(s==0) + displace(count)(0,d)=0.00025; + else + displace(count)(0,d)=-0.00025; + count++; + } + } + } + } + } + + prop.setDisplacement(atom_move, displace); + Properties_final_average curravg; + + string vmcout=options.runid+".embed"; + ofstream vmcoutput; + if(output) + vmcoutput.open(vmcout.c_str()); + + + Array3 ionpos(nstep+2, natoms, 3, 0.0); + Array1 temppos(3); + + + for(int s=0; s< 2; s++) { + for(int at=0; at< natoms; at++) { + sys->getIonPos(at, temppos); + for(int d=0; d< 3; d++) { + ionpos(s,at,d)=temppos(d); + } + } + } + + if(readcheckfile != "") { + read_check(ionpos); + } + + + for(int s=0; s< 2; s++) { + Array2 pos(ionpos(s)); + recenter(pos, atomic_weights); + } + + for(int step=0; step < nstep; step++) { + + int currt=step+1; //current time + + for(int at=0; at< natoms; at++) { + for(int d=0; d< 3; d++) { + temppos(d)=ionpos(currt, at, d); + } + sys->setIonPos(at, temppos); + } + + qmc_avg->runWithVariables(prop, sys, wfdata, pseudo, vmcoutput); + prop.getFinal(curravg); + + if(output) + output << "*****Step " << step << endl; + Array2 force(natoms, 3, 0.0); + Array2 force_err(natoms, 3, 0.0); + + for(int f=0; f< atom_move.GetDim(0); f+=2 ) { + for(int m=0; m < atom_move(f).GetDim(0); m++) { + int at=atom_move(f)(m); + for(int d=0; d< 3; d++) { + //Take a finite difference between the two forces + doublevar prop=fabs(displace(f)(m,d)/curravg.aux_size(f)); + doublevar fin_diff=(curravg.aux_diff(f,0)-curravg.aux_diff(f+1,0)) + /(2*curravg.aux_size(f)); + force(at,d)+= -prop*fin_diff; + + force_err(at,d)+=prop*(curravg.aux_differr(f,0) + +curravg.aux_differr(f+1,0)) + /(2*curravg.aux_size(f))/(2*curravg.aux_size(f)); + } + } + } + + + + for(int at=0; at< natoms; at++) { + for(int d=0; d< 3; d++) + force_err(at,d)=sqrt(force_err(at,d)); + } + + + //Make sure that Newton's laws are actually followed for + //two atoms; we can do this for more, as well. + if(natoms==2) { + doublevar average=(force(0,2)-force(1,2))/2.0; + force(0,2)=average; + force(1,2)=-average; + } + + //Verlet algorithm.. + for(int at=0; at< natoms; at++) { + for(int d=0; d< 3; d++) { + ionpos(currt+1, at, d)=ionpos(currt, at,d) + +(1-damp)*(ionpos(currt, at, d)-ionpos(currt-1, at,d)) + +tstep*tstep*force(at,d)/atomic_weights(at); + //cout << "pos " << ionpos(currt, at,d) + // << " last " << ionpos(currt-1, at,d) + // << " weight " << atomic_weights(at) << endl; + } + } + + Array2 currpos(ionpos(currt+1)); + recenter(currpos, atomic_weights); + + doublevar kinen=0; + int field=output.precision() + 15; + + for(int at=0; at < natoms; at++) { + if(output) + + output << "position" << at << " " + << setw(field) << ionpos(currt+1, at, 0) + << setw(field) << ionpos(currt+1, at, 1) + << setw(field) << ionpos(currt+1, at, 2) << endl; + + Array1 velocity(3); + for(int d=0; d< 3; d++) { + velocity(d)=(ionpos(currt+1, at, d)-ionpos(currt-1, at,d))/(2*tstep); + } + + for(int d=0;d < 3; d++) { + kinen+=.5*atomic_weights(at)*velocity(d)*velocity(d); + } + if(output ) { + output << "velocity" << at << " " + << setw(field) << velocity(0) + << setw(field) << velocity(1) + << setw(field) << velocity(2) << endl; + + output << "force" << at << " " + << setw(field) << force(at,0) + << setw(field) << force(at, 1) + << setw(field) << force(at,2) << endl; + output << "force_err" << at + << setw(field) << force_err(at, 0) + << setw(field) << force_err(at, 1) + << setw(field) << force_err(at, 2) << endl; + //output << "force" << at << "z " << force(at,2) << " +/- " + // << force_err(at,2) << endl; + } + + } + if(output ) { + output << "kinetic_energy " << kinen << endl; + output << "electronic_energy " << curravg.total_energy(0) << " +/- " + << sqrt(curravg.total_energyerr(0)) << endl; + + output << "total_energy " << curravg.total_energy(0)+kinen << " +/- " + << sqrt(curravg.total_energyerr(0)) << endl; + + if(writecheckfile != "") + if(output) + write_check(ionpos, currt+1); + } + + } + if(output) + vmcoutput.close(); + + +} + +//------------------------------------------------------------------------ + +void Md_method::read_check(Array3 & last_pos) { + ifstream is(readcheckfile.c_str()); + if(!is) error("Couldn't open ", readcheckfile); + is.precision(15); + string dummy; + is >> dummy; + assert(dummy=="natoms"); + int natoms; is >> natoms; + assert(last_pos.GetDim(1)==natoms); + assert(last_pos.GetDim(2)==3); + is >> dummy; //current_pos + for(int at=0; at< natoms; at++) { + for(int d=0; d < 3; d++) + is >> last_pos(1,at,d); + } + is >> dummy; //last_pos + for(int at=0; at< natoms; at++) { + for(int d=0; d < 3; d++) + is >> last_pos(0,at,d); + } + is.close(); +} + +void Md_method::write_check(Array3 & pos, int step) { + assert(step > 0); + + ofstream os(writecheckfile.c_str()); + os.precision(15); + if(!os) error("Couldn't open ", writecheckfile); + assert(pos.GetDim(2)==3); + int natoms=pos.GetDim(1); + os << "natoms " << natoms << endl; + os << "current_pos" << endl; + for(int at=0; at< natoms; at++) { + for(int d=0; d < 3; d++) { + os << pos(step, at, d) << " "; + } + os << endl; + } + os << "last_pos" << endl; + for(int at=0; at< natoms; at++) { + for(int d=0; d < 3; d++) { + os << pos(step-1, at, d) << " "; + } + os << endl; + } + os.close(); +} + +//---------------------------------------------------------------------- diff --git a/src/attic/Md_method.h b/src/attic/Md_method.h new file mode 100644 index 00000000..b5ae52bd --- /dev/null +++ b/src/attic/Md_method.h @@ -0,0 +1,98 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ +//------------------------------------------------------------------------ +//include/Vmc_method.h + +#ifndef MD_METHOD_H_INCLUDED +#define MD_METHOD_H_INCLUDED + +#include "Qmc_std.h" +#include "Qmc_method.h" +#include "Wavefunction.h" +#include "Wavefunction_data.h" +#include "Sample_point.h" +#include "Guiding_function.h" +#include "System.h" +#include "Properties.h" + +class Program_options; + + +/*! +\brief + Keyword: MD +*/ +class Md_method : public Qmc_method +{ +public: + + Md_method() { + sys=NULL; + wfdata=NULL; + pseudo=NULL; + qmc_avg=NULL; + } + void read(vector words, + unsigned int & pos, + Program_options & options); + void run(Program_options & options, ostream & output); + + int showinfo(ostream & os); + + int generateVariables(Program_options & options); + + + ~Md_method() + { + if(sys) delete sys; + if(wfdata) delete wfdata; + + if(pseudo) delete pseudo; + + } + +private: + + void read_check(Array3 & last_pos); + void write_check(Array3 & pos, int); + + Array1 atomic_weights; + + string readcheckfile, writecheckfile; + string log_label; + + int nstep; + doublevar tstep; + doublevar damp; + + Array1 restrict_dimension; + + Pseudopotential * pseudo; + System * sys; + Wavefunction_data * wfdata; + + Qmc_avg_method * qmc_avg; + + Properties_manager prop; + +}; + +#endif //MD_METHOD_H_INCLUDED +//------------------------------------------------------------------------ diff --git a/src/attic/Md_opt_method.cpp b/src/attic/Md_opt_method.cpp new file mode 100644 index 00000000..77f32f8e --- /dev/null +++ b/src/attic/Md_opt_method.cpp @@ -0,0 +1,224 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ +//------------------------------------------------------------------------ +//src/Md_opt_opt_method.cpp +//Author:Lucas Wagner + + + +#include "Md_opt_method.h" +#include "qmc_io.h" + +#include + +#include "Program_options.h" +#include "System.h" + +#include "Properties.h" + +//---------------------------------------------------------------------- + +void Md_opt_method::read(vector words, + unsigned int & pos, + Program_options & options) +{ + pos=0; + vector vmcsec; + if(!readsection(words, pos=0, vmcsec, "EMBED")) { + error("Need EMBED section"); + } + allocate(vmcsec,options, qmc_avg); + + if(!readvalue(words, pos=0, nstep, "NSTEP")) { + error("Need NSTEP"); + } + + if(!readvalue(words, pos=0, tstep, "TIMESTEP")) { + error("Need TIMESTEP in MD method"); + } + + if(readvalue(words, pos=0, damp, "DAMP")) { + if(damp > 1 || damp < 0) error("DAMP must be in [0,1]"); + } + else damp=0.0; + +} + + +//---------------------------------------------------------------------- + +int Md_opt_method::generateVariables(Program_options & options) { + + + allocate(options.systemtext[0], sys ); + allocate(options.twftext[0], sys, wfdata); + + sys->generatePseudo(options.pseudotext, pseudo); + + return 1; +} + +//---------------------------------------------------------------------- + + + +int Md_opt_method::showinfo(ostream & os) +{ + + if(os) + { + + sys->showinfo(os); + os << endl << endl; + os << " Wavefunction " + << endl << endl; + wfdata->showinfo(os); + pseudo->showinfo(os); + os << endl; + + os << "Embedded QMC" << endl; + qmc_avg->showinfo(os); + + + return 1; + } + else + return 0; +} + +//---------------------------------------------------------------------- + + + + +/*! + +*/ +void Md_opt_method::run(Program_options & options, ostream & output) +{ + + output.precision(10); + + + + string vmcout=options.runid+".embed"; + ofstream vmcoutput; + if(output) + vmcoutput.open(vmcout.c_str()); + + + + int nparms=wfdata->nparms(); + Array1 parm_num(2*nparms); + Array1 displace(2*nparms); + for(int i=0; i< 2*nparms; i+=2) { + parm_num(i)=i/2; + parm_num(i+1)=i/2; + displace(i)=.00025; + displace(i+1)=-.00025; + } + + prop.setParmDisplacement(parm_num, displace); + + Array2 parms(nstep+2, nparms); + Array1 orig_parms(nparms); + wfdata->getVarParms(orig_parms); + for(int i=0; i< 2; i++) { + for(int p=0; p < nparms; p++) + parms(i,p)=orig_parms(p); + } + Array1 weights(nparms); + weights=100; + + Properties_final_average curravg; + + for(int step=0; step < nstep; step++) { + + int currt=step+1; //current time + + //cout << "set parms " << endl; + Array1 curr_parms(nparms); + for(int p=0; p < nparms; p++) { + curr_parms(p)=parms(currt,p); + } + wfdata->setVarParms(curr_parms); + + //cout << "averaging " << endl; + qmc_avg->runWithVariables(prop, sys, wfdata, pseudo, vmcoutput); + //cout << "getting final " << endl; + prop.getFinal(curravg); + + if(output) + output << "*****Step " << step << endl; + Array1 force(nparms, 0.0); + Array1 force_err(nparms, 0.0); + + + //cout << "forces " << endl; + for(int f=0; f< 2*nparms; f+=2) { + int p=parm_num(f); + doublevar fin_diff=(curravg.aux_diff(f,0)-curravg.aux_diff(f+1,0)) + /(2*curravg.aux_size(f)); + force(p)+= -fin_diff; + + force_err(p)=(curravg.aux_differr(f,0) + +curravg.aux_differr(f+1,0)) + /(2*curravg.aux_size(f))/(2*curravg.aux_size(f)); + } + + for(int p=0; p < nparms; p++) { + force_err(p)=sqrt(force_err(p)); + if(fabs(force(p)) < force_err(p) ) { + force(p)=0; + } + } + + //cout << "move " << endl; + for(int p=0;p < nparms; p++) { + + parms(currt+1, p)=parms(currt,p) + +(1-damp)*(parms(currt,p)-parms(currt-1, p)) + +tstep*tstep*force(p)/weights(p); + } + + + //cout << "write " << endl; + string wfoutput(options.runid+".wfout"); + string indent=""; + ofstream wfout(wfoutput.c_str()); + wfdata->writeinput(indent, wfout); + wfout.close(); + + if(output) { + for(int p=0; p < nparms; p++) { + output << "parm" << p << " " << parms(currt, p) << " force " + << force(p) << " +/- " << force_err(p) << endl; + } + } + + + } + + + +} + +//------------------------------------------------------------------------ + diff --git a/src/attic/Md_opt_method.h b/src/attic/Md_opt_method.h new file mode 100644 index 00000000..2c84f39b --- /dev/null +++ b/src/attic/Md_opt_method.h @@ -0,0 +1,95 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ +//------------------------------------------------------------------------ +//include/Md__opt_method.h + +#ifndef MD_OPT_METHOD_H_INCLUDED +#define MD_OPT_METHOD_H_INCLUDED + +#include "Qmc_std.h" +#include "Qmc_method.h" +#include "Wavefunction.h" +#include "Wavefunction_data.h" +#include "Sample_point.h" +#include "Guiding_function.h" +#include "System.h" +#include "Properties.h" + +class Program_options; + + +/*! +\brief + Keyword: MD +*/ +class Md_opt_method : public Qmc_method +{ +public: + + Md_opt_method() { + sys=NULL; + wfdata=NULL; + pseudo=NULL; + qmc_avg=NULL; + } + void read(vector words, + unsigned int & pos, + Program_options & options); + void run(Program_options & options, ostream & output); + + int showinfo(ostream & os); + + int generateVariables(Program_options & options); + + + ~Md_opt_method() + { + if(sys) delete sys; + if(wfdata) delete wfdata; + + if(pseudo) delete pseudo; + + } + +private: + + void read_check(Array3 & last_pos); + void write_check(Array3 & pos, int); + + Array1 atomic_weights; + + string readcheckfile, writecheckfile; + + int nstep; + doublevar tstep; + doublevar damp; + + Pseudopotential * pseudo; + System * sys; + Wavefunction_data * wfdata; + + Qmc_avg_method * qmc_avg; + + Properties_manager prop; + +}; + +#endif //MD_OPT_METHOD_H_INCLUDED +//------------------------------------------------------------------------ diff --git a/src/attic/Mesh_function.cpp b/src/attic/Mesh_function.cpp new file mode 100644 index 00000000..79ce039d --- /dev/null +++ b/src/attic/Mesh_function.cpp @@ -0,0 +1,335 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ +//------------------------------------------------------------------------ +//src/Mesh_function.cpp +#include "Mesh_function.h" +#include "qmc_io.h" +#include "Cubic_spline3D.h" +#include "jeep_utils.h" +/*! +\todo +Rewrite the code to do the edges. As it is, it's quite inefficient +and confusing.. + +*/ +int Mesh_function::read( + vector & words, + unsigned int & pos) +{ + + centername=words[0]; + + rcut=1e99; + + vector valfiles, dxfiles, dyfiles, dzfiles, lapfiles; + readsection(words, pos=0, valfiles, "VALPLT"); + readsection(words, pos=0, dxfiles, "DXPLT"); + readsection(words, pos=0, dyfiles, "DYPLT"); + readsection(words, pos=0, dzfiles, "DZPLT"); + readsection(words, pos=0, lapfiles, "LAPPLT"); + + nmax=valfiles.size(); + if((valfiles.size()!=dxfiles.size()) + || (valfiles.size() != dyfiles.size()) + || (valfiles.size() !=dzfiles.size()) + || (valfiles.size() !=lapfiles.size())) + + { + cout << "num of vals " << valfiles.size() << endl; + cout << "num of dx " << dxfiles.size() << endl; + cout << "num of dy " << dyfiles.size() << endl; + cout << "num of dz " << dzfiles.size() << endl; + cout << "num of lap " << lapfiles.size() << endl; + error("Must have the same number of files for the values and derivatives"); + } + + //int count,nfunctions,natoms; + Array1 origin(3),box_size(3); + Array1 indie_points(3),grid_points(3); + string orbfile_0,orbfile_1,orbfile_2,orbfile_3,orbfile_lap; + //doublevar dummy1,dummy2,dummy3,dummy4,dummy5; + single_write(cout, "Mesh Basis\n"); + + //iterations for all orbitals + grid.Resize(nmax,5); + minmax.Resize(nmax); + resolution.Resize(nmax); + + for (int m=0;m< nmax;m++){ + orbfile_0=valfiles[m]; + orbfile_1=dxfiles[m]; + orbfile_2=dyfiles[m]; + orbfile_3=dzfiles[m]; + orbfile_lap=lapfiles[m]; + + + ifstream ORB_0(orbfile_0.c_str()); + if(!ORB_0) + { + error("couldn't find orb file ", orbfile_0); + } + ifstream ORB_1(orbfile_1.c_str()); + if(!ORB_1) + { + error("couldn't find orb file ", orbfile_1); + } + ifstream ORB_2(orbfile_2.c_str()); + if(!ORB_2) + { + error("couldn't find orb file ", orbfile_2); + } + ifstream ORB_3(orbfile_3.c_str()); + if(!ORB_3) + { + error("couldn't find orb file ", orbfile_3); + } + ifstream ORB_lap(orbfile_lap.c_str()); + if(!ORB_lap) + { + error("couldn't find orb file ", orbfile_lap); + } + + + Array1 padding(3); + + padding=7; + Array1 startfill(3); + startfill=3; + + get_grid_from_plot(ORB_0, grid(m,0), box_size, origin, padding, startfill); + get_grid_from_plot(ORB_1, grid(m,1), box_size, origin, padding, startfill); + get_grid_from_plot(ORB_2, grid(m,2), box_size, origin, padding, startfill); + get_grid_from_plot(ORB_3, grid(m,3), box_size, origin, padding, startfill); + get_grid_from_plot(ORB_lap, grid(m,4), box_size, origin, padding, startfill); + + + ORB_0.close(); + ORB_1.close(); + ORB_2.close(); + ORB_3.close(); + ORB_lap.close(); + + + Array1 indie_points(3); + + for(int i=0; i< 3; i++) indie_points(i)=grid(m,0).GetDim(i)-padding(i); + + minmax(m).Resize(6); + resolution(m).Resize(3); + + cout << "resolution of grid "; + for (int i=0;i<3;i++) { + resolution(m)(i)=box_size(i)/(indie_points(i)-1); + cout << resolution(m)(i) << " "; + minmax(m)(2*i)=origin(i)-3.0*resolution(m)(i); + minmax(m)(2*i+1)=origin(i)+box_size(i)+4.0*resolution(m)(i); + } + cout << endl; + + cout << "origin "; + for(int i=0; i< 3; i++) cout << origin(i) << " " ; + cout << endl; + + cout << "box_size "; + for(int i=0; i< 3; i++) cout << box_size(i) << " "; + cout << endl; + + cout << "npoints "; + for(int i=0; i< 3; i++) cout << indie_points(i) << " "; + cout << endl; + + for(int i=0; i< 3; i++) grid_points(i)=indie_points(i)+padding(i); + + for(int i=0;iindie_points(0)+2){ + if (j>indie_points(1)+2){ + if(k>indie_points(2)+2) for (int l=0;l<5;l++){ + grid(m,l)(i,j,k)=grid(m,l)(i-indie_points(0), + j-indie_points(1), + k-indie_points(2)); + } + else for (int l=0;l<5;l++){ + grid(m,l)(i,j,k)=grid(m,l)(i-indie_points(0),j-indie_points(1),k); + } + } + else { + if (k>indie_points(2)+2)for (int l=0;l<5;l++){ + grid(m,l)(i,j,k)=grid(m,l)(i-indie_points(0),j,k-indie_points(2)); + } + else for (int l=0;l<5;l++){ + grid(m,l)(i,j,k)=grid(m,l)(i-indie_points(0),j,k); + } + } + } + else { + if (j>indie_points(1)+2){ + if(k>indie_points(2)+2) for (int l=0;l<5;l++){ + grid(m,l)(i,j,k)=grid(m,l)(i,j-indie_points(1),k-indie_points(2)); + } + else for (int l=0;l<5;l++){ + grid(m,l)(i,j,k)=grid(m,l)(i,j-indie_points(1),k); + } + } + else if (k>indie_points(2)+2) for (int l=0;l<5;l++){ + grid(m,l)(i,j,k)=grid(m,l)(i,j,k-indie_points(2)); + } + } + } + + single_write(cout,"Reading of",m+1,"-th orbital done ..."); + cout < & parms) { + //cout << "getVarParms " << endl; + parms.Resize(0); +} +//------------------------------------------------------------------------ +void Mesh_function::setVarParms(Array1 & parms) { + //cout << "setVArParms " << endl; + assert(parms.GetDim(0)==0); + +} + +//------------------------------------------------------------------------ +int Mesh_function::nfunc() +{ + return nmax; +} + +//------------------------------------------------------------------------ +int Mesh_function::showinfo(string & indent, ostream & os) +{ + os << indent << "Mesh function\n"; + os << indent << "Number of functions " << nmax << endl; + return 1; +} + +//------------------------------------------------------------------------ +int Mesh_function::writeinput(string & indent, ostream & os) +{ + os << indent << centername << endl; + os << indent << "MESH\n"; + os << indent << "CUTOFF " << rcut << endl; + return 1; +} + +//------------------------------------------------------------------------ +void Mesh_function::raw_input(ifstream & input) +{error("Raw input not supported by Mesh_function");} + + +//------------------------------------------------------------------------ + +void Mesh_function::calcVal(const Array1 & r, + Array1 & symvals, + const int startfill) +{ + static Array1 xyz(3); + static Array1 rmin(3); + for(int d=0; d< 3; d++) { + xyz(d)=r(d+2); + } + + int index=startfill; + for(int m=0; m < nmax; m++) { + rmin(0)=minmax(m)(0); + rmin(1)=minmax(m)(2); + rmin(2)=minmax(m)(4); + splin3_my(rmin, resolution(m), grid(m,0), xyz, symvals(index)); + index++; + } +} + +//------------------------------------------------------------------------ + +void Mesh_function::calcLap( + const Array1 & r, + Array2 & symvals, + const int startfill +) +{ + static Array1 xyz(3); + static Array1 rmin(3); + for(int d=0; d< 3; d++) { + xyz(d)=r(d+2); + } + + int index=startfill; + for(int m=0; m < nmax; m++) { + rmin(0)=minmax(m)(0); + rmin(1)=minmax(m)(2); + rmin(2)=minmax(m)(4); + //cout < & words, + //!< The words from the basis section that will create this basis function + unsigned int & pos + //!< The current position in the words(important if one basis section makes several functions); will be incremented as the Basis_function reads the words. + ); + + + + + int nfunc(); + virtual string label() + { + return centername; + } + doublevar cutoff(int i ) + { + return rcut; + } + + int showinfo(string & indent, ostream & os); + int writeinput(string &, ostream &); + + void raw_input(ifstream & input); + + void calcVal(const Array1 & r, + Array1 & symvals, + const int startfill=0); + + void calcLap( + const Array1 & r, + Array2 & symvals, + const int startfill=0 + ); + + virtual void getVarParms(Array1 & parms); + virtual void setVarParms(Array1 & parms); + virtual int nparms() { + return 0; + } + +private: + + doublevar rcut; + int nmax; + string centername; + Array1 < Array1 > resolution,minmax; + Array2 < Array3 > grid; //first index is fom mo, + //second is for func, der of f,lap of f +}; + +#endif // MESH_FUNCTION_H_INCLUDED +//-------------------------------------------------------------------------- diff --git a/src/attic/Onebody_int_method.cpp b/src/attic/Onebody_int_method.cpp new file mode 100644 index 00000000..889dec01 --- /dev/null +++ b/src/attic/Onebody_int_method.cpp @@ -0,0 +1,512 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ +//------------------------------------------------------------------------ +//src/Onebody_int_method.cpp +#include "Onebody_int_method.h" +#include "qmc_io.h" +#include "System.h" +#include "Program_options.h" +/*! +Read the "words" from the method section in the input file +via doinput() parsing, and store section information in private +variables orbs, resolution, and minmax. +Set up MO_matrix and Sample_point objects for wavefunction from input +*/ +void Onebody_int_method::read(vector words, + unsigned int & pos, + Program_options & options) +{ + pos=0; //always start from first word + vector Torbs; + vector Tminmax; + vector orbtext; + + + if(!readsection(words, pos=0, orbtext, "ORBITALS")) + error("Need ORBITALS in ONEBODY_INT section"); + + if(! readvalue(words,pos=0,resolution,"RESOLUTION")) + resolution=.1; + + sys=NULL; + allocate(options.systemtext[0], sys); + allocate(orbtext, sys, mymomat); + + + vector statestxt; + if(!readsection(words, pos=0, statestxt,"STATES")) + error("Need STATES in ONEBODY_INT section"); + + orbs.Resize(2); + int nelec=sys->nelectrons(0)+sys->nelectrons(1); + if(statestxt.size()!=nelec) + error("states size doesn't match nelectrons"); + + int counter=0; + for(int s=0; s< 2; s++) { + orbs(s).Resize(sys->nelectrons(s)); + for(int e=0; e< sys->nelectrons(s); e++) { + orbs(s)(e)=atoi(statestxt[counter].c_str())-1; + counter++; + } + } + + mymomat->buildLists(orbs); + + mywalker=NULL; + sys->generateSample(mywalker); +} + +#include "MatrixAlgebra.h" + +void divide_job_1b(int node, int nprocs, int npoints, int & start, int & end) { + start=node*npoints/nprocs; + end=(node+1)*npoints/nprocs; +} + + +/*! + +*/ +void Onebody_int_method::run(Program_options & options, ostream & output) { + ofstream os; //for writing to *.plt files + unsigned int electron=0; //# of the electron that will move through grid + string pltfile; //name of plotfile being written + Array1 xyz(3),resolution_array(3); //position of electron "in" MO + Array1 D_array1(3); //dummy array1 + D_array1=0; //sets all 3 components to 0. use as counter for gridpoints + Array1 minmax(6); + + Array2 latvec(3,3); + if(!sys->getBounds(latvec)) error("sys must support getBounds"); + minmax(0)=minmax(2)=minmax(3)=0; + for(int i=0; i< 3; i++) { + doublevar len=0; + for(int j=0; j< 3; j++) len+=latvec(i,j)*latvec(i,j); + len=sqrt(len); + minmax(2*i+1)=len; + } + + + D_array1(0)=roundoff((minmax(1)-minmax(0))/resolution); + D_array1(1)=roundoff((minmax(3)-minmax(2))/resolution); + D_array1(2)=roundoff((minmax(5)-minmax(4))/resolution); + + //resolution_array(0)=(minmax(1)-minmax(0))/(D_array1(0)-1); + //resolution_array(1)=(minmax(3)-minmax(2))/(D_array1(1)-1); + //resolution_array(2)=(minmax(5)-minmax(4))/(D_array1(2)-1); + resolution_array(0)=1.0/(D_array1(0)-1); + resolution_array(1)=1.0/(D_array1(1)-1); + resolution_array(2)=1.0/(D_array1(2)-1); + + int npts=D_array1(0)*D_array1(1)*D_array1(2); + //Array2 grid(orbs.GetSize(),npts); + //Array1 density(npts); + //generate .xyz file for gOpenMol to view coordinates + pltfile=options.runid + ".xyz"; + os.open(pltfile.c_str()); + write_xyz(sys,os); + os.close(); + + Array2 mymovals(max(orbs(0).GetDim(0), orbs(1).GetDim(0)),1); + + Array1 > overlap_matrix(2); + Array1 > norm(2); + Array1 > overlap_com(2); + + Array2 density(sys->nelectrons(0),D_array1(2)); + density=0; + + + for(int s=0; s< 2; s++) { + overlap_matrix(s).Resize(sys->nelectrons(s),sys->nelectrons(s)); + overlap_matrix(s)=dcomplex(0.0,0.0); + overlap_com(s).Resize(sys->nelectrons(s),sys->nelectrons(s)); + overlap_com(s)=dcomplex(0.0,0.0); + norm(s).Resize(sys->nelectrons(s)); + norm(s)=0.0; + } + + + vector cvg_tmp; + cvg_tmp.push_back(1.0); + for(double i=1; i < 20; i++) cvg_tmp.push_back((sys->nelectrons(0)+sys->nelectrons(1))/i); + //cvg_tmp.push_back(1); + //cvg_tmp.push_back(sys->nelectrons(0)+sys->nelectrons(1)); + //for(int i=1; i <= sys->nelectrons(0)+sys->nelectrons(1); i++) { + //if(fabs(sys->nelectrons(0)/i-double(sys->nelectrons(0))/double(i))< 1e-8) { + // cvg_tmp.push_back(i); + // output << "adding " << i << endl; + //} + //} + Array1 cvg; + cvg.Resize(cvg_tmp.size()); + for(int i=0; i< cvg.GetDim(0); i++) cvg(i)=cvg_tmp[i]; + int ncvg=cvg.GetDim(0); + + Array1 < Array2 > overlap_com_cvg(ncvg); + for(int i=0; i< ncvg; i++) { + overlap_com_cvg(i).Resize(sys->nelectrons(0),sys->nelectrons(0)); + overlap_com_cvg(i)=dcomplex(0.0,0.0); + } + + + + Array2 gvec; + if(!sys->getRecipLattice(gvec)) error("need reciplattice"); + + int nions=mywalker->ionSize(); + Array2 ioncharge(sys->nelectrons(0),nions,0.0); + Array1 eidist(5); + + doublevar expansion=1.0; + + output <<"calculating "< xavg(sys->nelectrons(0),3,0.0); + + + int start; int end; + + divide_job_1b(mpi_info.node, mpi_info.nprocs, D_array1(0), + start, end); + + //for(int xx=0;xxsetElectronPos(electron,xyz); + mymomat->updateVal(mywalker,electron,0,mymovals); + mywalker->updateEIDist(); + //---Find the closest atom + doublevar smalldist=1e99; + int closestatom=-1; + for(int at=0; at< nions; at++) { + mywalker->getEIDist(0,at,eidist); + //ut << "at " << at << " eidist0 " << eidist(0) << endl; + if(eidist(0)nelectrons(0); + dcomplex comp_com(cos(2*pi*sum_com),sin(2*pi*sum_com)); + + Array1 comp_cvg(ncvg); + for(int i=0; i< ncvg; i++) { + doublevar sum_tmp=sum/cvg(i); + comp_cvg(i)=dcomplex(cos(2*pi*sum_tmp),sin(2*pi*sum_tmp)); + } + + + for(int j=0; j< sys->nelectrons(0);j++) { + norm(0)(j)+=mymovals(j,0)*mymovals(j,0)/npts; + density(j,zz)+=mymovals(j,0)*mymovals(j,0)/npts; + ioncharge(j,closestatom)+=mymovals(j,0)*mymovals(j,0)/npts; + for(int d=0; d< 3; d++) + xavg(j,d)+=mymovals(j,0)*mymovals(j,0)*xyz(d)/npts; + for(int jp=0; jp< sys->nelectrons(0); jp++) { + doublevar fac=mymovals(j,0)*mymovals(jp,0); + overlap_matrix(0)(j,jp)+=fac*comp_part/doublevar(npts); + overlap_com(0)(j,jp)+=fac*comp_com/doublevar(npts); + for(int i=0; i< ncvg; i++) { + overlap_com_cvg(i)(j,jp)+=fac*comp_cvg(i)/doublevar(npts); + } + } + } + + + } + } + } + + + + for(int j=0; j< sys->nelectrons(0); j++) { + norm(0)(j)=parallel_sum(norm(0)(j)); + for(int jp=0; jp< sys->nelectrons(0);jp++) { + overlap_matrix(0)(j,jp)=parallel_sum(overlap_matrix(0)(j,jp)); + overlap_com(0)(j,jp)=parallel_sum(overlap_com(0)(j,jp)); + for(int i=0; i < ncvg; i++) + overlap_com_cvg(i)(j,jp)=parallel_sum(overlap_com_cvg(i)(j,jp)); + } + } + + + + for(int j=0; j< sys->nelectrons(0); j++) { + for(int jp=0; jp< sys->nelectrons(0);jp++) { + overlap_matrix(0)(j,jp)/=sqrt(norm(0)(j)*norm(0)(jp)); + overlap_com(0)(j,jp)/=sqrt(norm(0)(j)*norm(0)(jp)); + for(int i=0; i < ncvg; i++) + overlap_com_cvg(i)(j,jp)/=sqrt(norm(0)(j)*norm(0)(jp)); + } + } + + + Array1 totxavg(3,0.0); + Array1 totcharge(nions,0.0); + for(int j=0; j< sys->nelectrons(0); j++) { + for(int d=0; d< 3; d++) xavg(j,d)/=norm(0)(j); + output << "norm " << norm(0)(j) + << " overlap for this orbital " << overlap_matrix(0)(j,j)<nelectrons(0); + } + output << endl; + output << "ion charges "; + for(int at=0; at < nions; at++) { + ioncharge(j,at)/=norm(0)(j); + ioncharge(j,at)*=2.0; //account for double occupation + output << ioncharge(j,at) << " "; + totcharge(at)+=ioncharge(j,at); + } + output << endl; + + } + + output << "totcharge " << endl; + for(int at=0; at < nions; at++) output << totcharge(at) << " "; + output << endl; + + + output << "totxavg "; + for(int d=0; d< 3; d++) output << totxavg(d) <<" "; + output << endl; + + doublevar cellVolume=Determinant(latvec,3); + doublevar au2Cm=57.216; + + Array1 epol(3,0.0); + for(int d=0; d< 3; d++) + epol(d)=(sys->nelectrons(0)+sys->nelectrons(1))*totxavg(d)/cellVolume; + + + Array1 estpol(3,0.0); + Array1 ipol(3,0.0); + Array1 pos(3); + + + for(int at=0; at < nions; at++) { + mywalker->getIonPos(at,pos); + doublevar charge=mywalker->getIonCharge(at); + for(int d=0; d< 3; d++) { + ipol(d)+=charge*pos(d)/cellVolume; + estpol(d)+=(charge-totcharge(at))*pos(d)/cellVolume; + } + } + for(int d=0; d< 3; d++) { + output << "From xavg: electronic pol" << d << " " << au2Cm*epol(d) + << " ionic " << au2Cm*ipol(d) << " total: " + << au2Cm*(ipol(d)-epol(d)) << endl; + } + + for(int d=0; d< 3; d++) { + output << "pol from estimated charges" << d << " " << au2Cm*estpol(d) + << endl; + } + + + + string outname=options.runid+".polgraph"; + ofstream polgraph(outname.c_str()); + for(doublevar ii=0; ii< 1.0; ii+=.01) { + dcomplex zpolep(0.0,0.0); + dcomplex zpolen(0.0,0.0); + doublevar pol0=0.0; + doublevar atshift=ii*latvec(2,2); + doublevar chargeaccp=0.0; + doublevar chargeaccn=0.0; + polgraph << atshift << " "; + for(int at=0; at < nions; at++) { + mywalker->getIonPos(at,pos); + doublevar charge=mywalker->getIonCharge(at)-totcharge(at); + //output << "charge " << charge << endl; + chargeaccp+=mywalker->getIonCharge(at); + chargeaccn+=totcharge(at); + pos(2)+=atshift; + if(pos(2) > latvec(2,2)) pos(2)-=latvec(2,2); + double atpol=charge*(pos(2))/cellVolume; + pol0+=atpol; + polgraph << atpol << " "; + zpolep+=mywalker->getIonCharge(at)*dcomplex(cos(2*pi*gvec(2,2)*pos(2)), + sin(2*pi*gvec(2,2)*pos(2))); + zpolen+= totcharge(at)*dcomplex(cos(2*pi*gvec(2,2)*pos(2)), + sin(2*pi*gvec(2,2)*pos(2))); + + } + zpolep/=chargeaccp; + zpolen/=chargeaccn; + //out << "chargeacc " << chargeaccp << " " << chargeaccn << endl; + polgraph << pol0 << " " << zpolep.real() << " " << zpolep.imag() + << " " << zpolen.real() << " " << zpolep.imag() << " \n"; + if(ii==0) { + output << "zpolep " << zpolep << " zpolen " << zpolen << endl; + doublevar phasep=atan2(zpolep.imag(), zpolep.real()); + doublevar phasen=atan2(zpolen.imag(), zpolen.real()); + output << "phases: p " << phasep << " n " << phasen << endl; + output << "poldiff " << 40*au2Cm*(phasep-phasen)/(2*pi*latvec(0,0)*latvec(1,1)) + << endl; + + } + + } + polgraph.close(); + + + dcomplex zpol=Determinant(overlap_matrix(0),sys->nelectrons(0)); + output << "zpol " << zpol << endl; + zpol=zpol*zpol; + output << " squared " << zpol << endl; + + + dcomplex zpol_com=Determinant(overlap_com(0),sys->nelectrons(0)); + output << "zpol_com " << zpol_com << endl; + zpol_com*=zpol_com; + output << " com squared " << zpol_com << endl; + + + for(int i=0; i< ncvg; i++) { + dcomplex zpol_cvg=Determinant(overlap_com_cvg(i), sys->nelectrons(0)); + zpol_cvg*=zpol_cvg; + doublevar angle=atan2(zpol_cvg.imag(), zpol_cvg.real()); + doublevar angscale=cvg(i)*angle; + while(angscale> 2*pi) angscale-=2*pi; + while(angscale< 0) angscale+=2*pi; + output << "zpol_cvg " << cvg(i) << " com " << zpol_cvg + << " angle " << angle + << " angscale " << angscale + << " mag2 " + << zpol_cvg.real()*zpol_cvg.real()+zpol_cvg.imag()*zpol_cvg.imag() + <nelectrons(0); + Array1 > overlap_partial(npartoverlap); + Array1 npartial(npartoverlap); + for(int i=0;i< npartoverlap; i++) { + overlap_partial(i).Resize(sys->nelectrons(0),sys->nelectrons(0)); + overlap_partial(i)=dcomplex(0.0,0.0); + } + for(int e=0; e< sys->nelectrons(0); e++) { + npartial(e)=e+1; + } + + + for(int i=0; i< npartoverlap; i++) { + for(int j=0; j< sys->nelectrons(0); j++) { + for(int jp=0; jp < npartial(i); jp++) + overlap_partial(i)(j,jp)=overlap_matrix(0)(j,jp); + } + for(int j=npartial(i); j< sys->nelectrons(0); j++) + overlap_partial(i)(j,j)=1.0; + dcomplex zpol_partial=Determinant(overlap_partial(i),sys->nelectrons(0)); + cout << "**for " << npartial(i) << " partial sums " << endl; + cout << "partial zpol(n= " << npartial(i) << " : " << zpol_partial + << endl; + doublevar angle=(sys->nelectrons(0)+sys->nelectrons(1)) + *atan2(zpol_partial.imag(), zpol_partial.real())/npartial(i); + while(angle > pi) { angle-=2*pi;} + while(angle < -pi) angle+=2*pi; + cout << "angle " << angle + << endl; + + doublevar area=latvec(0,0)*latvec(1,1); + doublevar epol=au2Cm*angle/(2*pi*area); + cout << "epol " << epol << " totalp " << ipol(2)-epol << endl; + + + } + */ + + + dcomplex trace(0.0,0.0); + for(int e=0; e< sys->nelectrons(0); e++) { + trace+=overlap_matrix(0)(e,e); + } + + output << "trace " << trace/(double(sys->nelectrons(0))) << endl; + + dcomplex twobody(0.0,0.0); + double npoints=0; + for(int e=0; e< sys->nelectrons(0); e++ ) { + for(int j=e+1; j< sys->nelectrons(0); j++) { + twobody+=overlap_matrix(0)(e,e)*overlap_matrix(0)(j,j) + -overlap_matrix(0)(e,j)*overlap_matrix(0)(e,j); + npoints++; + } + } + twobody/=double(npoints); + twobody*=twobody; + output << "twobody " << twobody << endl; + + /* + for(int e=0; e< sys->nelectrons(0); e++) { + string densname=options.runid+".dens"; + append_number(densname,e); + ofstream densout(densname.c_str()); + for(int zz=0; zzshowinfo(os); + os<<"resolution="< +#include +#include +#include +#include "Qmc_method.h" +#include "qmc_io.h" +#include "Array.h" +#include "MO_matrix.h" +#include "Sample_point.h" +class System; +class Wavefunction; +class Program_options; + +/*! + */ +class Onebody_int_method : public Qmc_method +{ +public: + void read(vector words, + unsigned int & pos, + Program_options & options); + void run(Program_options & options, ostream & output); + int showinfo(ostream & os); + Onebody_int_method():mymomat(NULL), mywalker(NULL) {} + ~Onebody_int_method() + { + if(mymomat!=NULL) delete mymomat; + if(mywalker != NULL) delete mywalker; + } + +private: + Array1 > orbs; //orbital #'s to be plotted(spin up and down) + doublevar resolution; //grid coarsness: 10=coarser 0.1=finer + MO_matrix * mymomat; //will hold MO information + Sample_point * mywalker; //a single configuration/walker + System * sys; +}; + +#endif //ONEBODY_INT_METHOD_H_INCLUDED +//------------------------------------------------------------------------ diff --git a/src/attic/create_mesh_orb.cpp b/src/attic/create_mesh_orb.cpp new file mode 100644 index 00000000..fde1cbe6 --- /dev/null +++ b/src/attic/create_mesh_orb.cpp @@ -0,0 +1,54 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ +//---------------------------------------------------------------------- +//utils/create_mesh_orb.cpp + +#include +#include + +using namespace std; + +int main(int argc, char ** argv) { + if(argc < 2) { + cerr << "usage: " << argv[0] << " " + << endl; + exit(1); + } + + int nmo=atoi(argv[1]); + + //We output for one center the mo's + //There are two coefficients: 1 is 0.0 and 2 is 1.0 + for(int m=0; m < nmo; m++) { + for(int m2=0; m2 < nmo; m2++) { + int coeff=1; + if(m==m2) coeff=2; + cout << m+1 << " " << m2+1 << " 1 " << coeff << endl; + } + } + + cout << "COEFFICIENTS" << endl; + cout << "0.0 1.0 " << endl; + + +} + + +//---------------------------------------------------------------------- diff --git a/src/attic/dataVis.cpp b/src/attic/dataVis.cpp new file mode 100644 index 00000000..edb81ccb --- /dev/null +++ b/src/attic/dataVis.cpp @@ -0,0 +1,251 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ +#include +#include +#include +#include +#include +#include +#include +#include "dataVisF.h" +using namespace std; + +/*! +

    USE: dataVis -h 20 -ooqmc inputfile

    +

    Output Data Format Options:

    + "-h 20" will cause dataVis to bin data from inputfile + into 20 bins for a "histogram". Default # of bins = 20
    + "-o file.out" will send output data to file.out
    + "-sc 1" will set serial correlation index to 1
    + "-sc -1" will look at correlation between weights + psi[1]/(psi[1]+psi[2]) and psi[2]/(psi[1]+psi[2]) + for two wavefunctions with GUIDETYPE SUM
    +

    Input Data Format Options:

    + "-ooqmc li2.path" tells dataVis to read ooqmc formatted + .path file data. Default is ooqmc format, and if there + is no "format" option, then the last argument will be + read as the input data file.
    + "-wf 1" tells the code that you want to plot data for + the first wavefunction.
    +

    Assumptions

    + expects consistent file format
    + .path file with 8 items per line
    +*/ +int main(int argc, char * argv[]){ + //VARIABLE DECLARATIONS AND DEFAULT INITIALIZATIONS + int nbins=0; //number of bins for histogram + int scvar=0; //serial correlation index + int wf=1; //wave function you want data for {1,2,3,...} + int nwalk=0; //total number of walkers {1,2,3,...} + int nwf=0; //total number of wavefunctions {1,2,3,...} + int startindex=0; //for parsing + int skipindex=0; //for parsing + double runningsum=0; + double sercorr; + string idformat="OOQMC"; //input data format + string ifilename=argv[argc-1]; //input data file name + string ofilename; //default output filename + string temp; + vector datapoints; + vector weights; + + //READ COMMAND LINE OPTIONS + if(argc==1) error("USE: dataVis -h 20 -wf 1 -sc 1 -o file.out -ooqmc file.path"); + + if(readoption(argv, argc, "-h", temp)) nbins=atoi(temp.c_str()); + + //user specifies type of input file and name + if(readoption(argv, argc, "-ooqmc", ifilename)){ + idformat="OOQMC"; + if(ifilename==""){ error("must enter a filename after -ooqmc"); } + } + cout<<"Input type = "<special_getwfmax(ifilename)) + error("err: you asked for a wf that is not in the input file"); + if(idformat=="OOQMC") cout<<"looking at data for wavefunction # "<0){ + if(readoption(argv, argc, "-o", ofilename)) ofilename+=ifilename+".histogram"; + else ofilename=ifilename+".histogram"; + + //get datapoints from column 5 and weights from col 8 + startindex=wf-1; + nwf=special_getwfmax(ifilename); + skipindex=nwf-1; + datapoints=parsefile(ifilename,idformat,startindex,skipindex,5); + weights=parsefile(ifilename,idformat,startindex,skipindex,8); + generateHistogram(datapoints,weights,nbins,ofilename); + + //print out histogram of the weights + vector nullweight; + nullweight.reserve(weights.size()); + for(uint i=0; i< weights.size(); i++) nullweight.push_back(1); + string weightfilename=ofilename+"w"; + generateHistogram(weights, nullweight, nbins, weightfilename); + } + + //Calculate Serial Correlation with index scvar + if(scvar>0){ + if(readoption(argv, argc, "-o", ofilename)) ofilename+=ifilename+".serCorr"; + else ofilename=ifilename+".serCorr"; + //wipe ofilename clean of previous data since serial_correlation() appends + ofstream zout453; + zout453.open(ofilename.c_str()); + zout453.close(); + + startindex=wf-1; + nwf=special_getwfmax(ifilename); + nwalk=special_getwalkermax(ifilename); + skipindex=nwf*nwalk-1; + runningsum=0; + for(int i=0; i data1,data2,data3,weight1,weight2,weight3; + double psi1,psi2; + + if(readoption(argv, argc, "-o", ofilename)) ofilename+=ifilename+".wfWeight"; + else ofilename=ifilename+".wfWeight"; + + nwalk=special_getwalkermax(ifilename); + startindex=0; //start from first line of input file + skipindex=0; // + + //datapoints=ln(wfsample) weights=sign(wfsample) + datapoints=parsefile(ifilename,idformat,startindex,skipindex,7); + weights=parsefile(ifilename,idformat,startindex,skipindex,6); + for(uint i=0; i>dud){ + temp_block=(int)dud; + zin863>>dud; zin863>>dud; zin863>>dud; + temp_wf=(int)dud; + zin863>>dud; + temp_energy=dud; + zin863>>dud; zin863>>dud; zin863>>dud; + temp_weight=dud; + + if(temp_wf==(wf-1)) { + data[temp_block]+=temp_energy*temp_weight; + weightsum[temp_block]+=temp_weight; + } + } + + for(int i=0; i +#include +#include +#include +#include +#include +#include +#include "dataVisF.h" + +using namespace std; + +bool readoption(char* elem[], int & size, const string val1, string & val2){ + for(int i=0; i & v, vector & w){ + double runningsum=0; + double weightsum=0; + for(uint i=0; i & v, vector & w){ + double m=wavg(v,w); + double runningsum=0; + double weightsum=0; + for(uint i=0; i & v){ + double s=0; + for(uint i=0; i & v){ + double m=v[0]; + for(uint i=0; iv[i]) m=v[i]; + return m; +} + +double getmax(vector & v){ + double m=v[0]; + for(uint i=0; i>dud){//ignore first item on line, also ensures not at eof + zin>>dud;zin>>dud; //ignore first two items + zin>>dud; //read in wf# + if(dud<=maxwf){//wf number should increase or stay at 0 + zin.close(); + return (maxwf+1); + } + if(dud>maxwf) maxwf=(int)dud; + zin>>dud;zin>>dud;zin>>dud;zin>>dud; //ignore energy and last 3 items + } + + //should not get here + zin.close(); + error("can't tell how many wf's there are"); + return 0; +} + +int special_getwalkermax(string ifilename){ + int maxwf=-1; + double dud=0; + ifstream zin; + + zin.open(ifilename.c_str()); + if(!zin) error("Unable to open input file"); + + while(zin>>dud){//ignore first item on line, also ensures not at eof + zin>>dud; //ignore first item + zin>>dud; //read in wf# + if(dudmaxwf) maxwf=(int)dud; + zin>>dud;zin>>dud;zin>>dud;zin>>dud;zin>>dud; //ignore last 5 items + } + + //should not get here + zin.close(); + error("can't tell how many walker's there are"); + return 0; +} + +vector parsefile(string ifilename, string idformat, int opt1, int opt2, int opt3){ + vector data; + double dud; + string ofilename; + ifstream zin; + int num_items=8; //#items per line in input file + + if(idformat!="OOQMC") error("ERROR: OOQMC path data is the only supported format"); + if(opt3>num_items) error("within the code, you are asking parsefile() for a column# > num_items"); + + //OPEN INPUT FILE FOR READING + zin.open(ifilename.c_str()); + if(!zin) error("Unable to open input file"); + + //skip to appropriate wf, opt1=0 => get data for first wf + for(int i=0; i>dud; + + //read in data points + while(zin>>dud){//ignore first item on line, also ensures not at eof + for(int i=1; i>dud; //ignore preceding data items + data.push_back(dud); //store energy in vector + for(int i=0; i<(num_items-opt3); i++) zin>>dud; //ignore following data items + //ignore opt2 # of lines between data points we want + for(int i=0; i>dud; + } + + //CLOSE INPUT FILE UPON COMPLETION + zin.close(); + + return data; +} + +vector generateHistogram(vector & data, vector & weight, int nbins, string ofilename){ + cout<<"-----GENERATING HISTOGRAM\n"; + double myavg=wavg(data,weight); + double mystdev=wstdev(data,weight); + double min=getmin(data); + double max=getmax(data); + vector bincount; + double total_weight=0; //for normalizing bincounts + double bin_width=0; //for normalizing + int bin=0; + int stdev_width=10; + ofstream zout; + + //initialize nbin elements of bincount to 0 + for(int i=0; imin) min=myavg-stdev_width*mystdev; + if((myavg+stdev_width*mystdev) & X, vector & Xw, int index, string ofilename){ + cout<<"-----CALCULATING SERIAL CORRELATION\n"; + vector U; + vector Uw; + vector V; + vector Vw; + double cov_of_UV=0; + double var_of_X=wstdev(X,Xw);var_of_X*=var_of_X; + + if((index<1) || (index>=(int)X.size())) + error("err: in function 'serial_correlation', the index must be within bounds of data vector size"); + + //this step is probably not necessary if you want to be efficient + for(uint i=0; i<(X.size()-index); i++){ + U.push_back(X[i]); + Uw.push_back(Xw[i]); + V.push_back(X[i+index]); + Vw.push_back(Xw[i+index]); + } + + cov_of_UV=covariance(U,V,Uw,Vw,ofilename); + + return (cov_of_UV/var_of_X); +} + +double covariance(vector & v1, vector & v2, vector & w1, vector & w2, string ofilename){ + //assertions + if(v1.size()!=v2.size()) + error("unable to calculate covariance of datasets with different size"); + cout<<"-----CALCULATING COVARIANCE\n"; + + double cov=0; + double mean_of_v1=wavg(v1,w1); + double mean_of_v2=wavg(v2,w2); + + //OUTPUT DATA PAIRS TO FILE + ofstream zout; + zout.open(ofilename.c_str()); + for(uint i=0; i +#include + +/*! for reading command line options.
    +arg1 is the array of std::strings to look through
    +arg2 is the number of std::strings to look through
    +arg3 is the option tag like -h or -ooqmc
    +arg4 is the return path for the std::string after the option tag
    +function returns 'true' if it successfully reads an option value */ +bool readoption(char* arg1[], int & arg2, const std::string arg3, std::string & arg4); + +/*! Print an error message and exit the program */ +void error(char * arg1); + +/*! returns the weighted average of doubles stored in a std::vector
    +arg1 is data
    +arg2 is weights*/ +double wavg(std::vector & arg1, std::vector & arg2); + +/*! returns the weighted standard deviation of doubles stored in a std::vector
    +arg1 is data
    +arg2 is weights*/ +double wstdev(std::vector & arg1, std::vector & arg2); + +/*! returns the sum of items in the std::vector*/ +double sum(std::vector & arg1); + +/*! returns the maximum value stored in the std::vector */ +double getmax(std::vector & arg1); + +/*! returns the minimum value stored in the std::vector */ +double getmin(std::vector & arg1); + +/*! a quick routine that opens the OOQMC .path input file + and determines what the max number of wavefunctions is.
    +arg1 is the input file name
    +returns the max number of wavefunctions {1,2,3,...}*/ +int special_getwfmax(std::string arg1); + +/*! opens the OOQMC .path input file and determines how +many walkers there are.
    +arg1 is the input file name
    +returns the number of walkers {1,2,3,...}*/ +int special_getwalkermax(std::string arg1); + +/*! Opens an input stream from the input file, extracts + appropriate data for the given file type and options. +arg1 is the input data file name
    +arg2 is the input data file format {OOQMC, etc...}
    +arg3 is an option for which line to start on {0,1,2,...}
    +arg4 is an option for how many lines to skip between +arg5 is the column number of the data item to extract + each data point.
    +returns std::vector containing data*/ +std::vector parsefile(std::string arg1, std::string arg2, int arg3, int arg4, int arg5); + +/*! This function takes the data in a std::vector and outputs +data in a format ready for xmgr to plot. Data points +outside of 4 standard deviations of the sample average +are not included in the histogram data, but instead +the data point is output to the screen with a note.
    +arg1 is a std::vector of data
    +arg2 is a std::vector of weights
    +arg3 is the number of bins
    +arg4 is the output file name
    +returns the std::vector of normalized bin counts*/ +std::vector generateHistogram(std::vector & arg1, std::vector & arg2, int arg3, std::string arg4); + +/*! A measure of the correlation between U[i] and U[i+j] + where j in the index of the j'th data element that comes + after the i'th element. the equation reads: r = Cov(U,V)/var(X) + where X is the set of data, and U and V are overlapping + subsequences of X with U={x[0],x[1],...,x[N-j-1]} and + V={x[j],x[1+j],...,x[N-1]
    +arg1 is a std::vector containing the data
    +arg2 is a std::vector containing the weights
    +arg3 is the index 'j'
    +arg4 is the output file name
    +returns the serial correlation which ranges from -1 to 1 + with 0 indicating independant data points*/ +double serial_correlation(std::vector & arg1, std::vector & arg2, int arg3, std::string arg4); + +/*! calculate and return cov(arg1,arg2) assuming the joint probability mass function +is given by p(arg1,arg2)=1/(arg1.size()*arg2.size()) (i.e. equally weighted data points)
    +quits with error message if arg1.size() != arg2.size()
    +arg1 is a std::vector of data1
    +arg2 is a std::vector of data2
    +arg3 is a std::vector of weights1
    +arg4 is a std::vector of weights2
    +arg5 is the output file name for ordered pairs (arg1[i],arg2[i]) +*/ +double covariance(std::vector & arg1, std::vector & arg2, std::vector & arg3, std::vector & arg4, std::string arg5); + + +typedef unsigned int uint; + +#endif //DATAVISF_H diff --git a/src/attic/elements.h b/src/attic/elements.h new file mode 100644 index 00000000..cb665d71 --- /dev/null +++ b/src/attic/elements.h @@ -0,0 +1,36 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ +//A lookup table of the atomic numbers and the associated elements. +#ifndef ELEMENTS_H_INCLUDED +#define ELEMENTS_H_INCLUDED + +const char * element_lookup_caps[]= {"NULL", "H", "HE", +"LI", "BE", "B", "C", "N", "O", "F", "NE", +"NA", "MG", "AL", "SI", "P", "S", "CL", "AR", +"K", "CA", "SC", "TI", "V", "CR", "MN", "FE", + "CO", "NI", "CU", "ZN", "GA", "GE", "AS", "SE", "BR", "KR", +"RB", "SR", "Y", "ZR", "NB", "MO", "TC", "RU", "RH", "PD", + "AG", "CD", "IN", "SN", "SB", "TE", "I", "XE", +"CS", "BA", "LA", "CE", "PR", "ND", "PM", "SM", "EU", "GD", "TB", + "DY", "HO", "ER", "TM", "YB", "LU", "HF", "TA", "W", "RE", + "OS", "IR", "PT", "AU", "HG", "TL", "PB", "BI", "PO", "AT", "RN" }; + + +#endif //ELEMENTS_H_INCLUDED diff --git a/src/attic/get_pol.pl b/src/attic/get_pol.pl new file mode 100644 index 00000000..5c72177b --- /dev/null +++ b/src/attic/get_pol.pl @@ -0,0 +1,44 @@ + +#get the actual polarization from two sets of files. Uses +#get_zpol.pl; they have to be modified a bit, but hopefully +#these will be improved after some time.. + +$au2Cm=57.216; +$pi=3.14159; +$a=4.00/.529; +$c=4.036/.529; +$base1="centro"; +$base2="dist"; + + +$ion1=`grep "ionic polarization" ${base1}5.vmc.o | awk '{print \$5}'`; +$ion2=`grep "ionic polarization" ${base2}5.vmc.o | awk '{print \$5}'`; + +chomp($ion1); chomp($ion2); +print "ionic contribution : $ion1 $ion2\n"; + +$iondiff=$ion2-$ion1; + +@phase=split(' ', `perl get_zpol.pl | grep angle`); +$phasediff=$phase[1]; #$phase2[1]-$phase1[1]; +$phaseerr=$phase[2]; #sqrt($phase2[3]**2+$phase1[3]**2); + + +$ne=1; + +$vol=$a*$a*$c; +$area=$a*$a; + + +print "volume: $vol area: $area\n"; +$fac=$au2Cm*$ne/(2*$pi*$area); + +$elec_contrib=$phasediff*$fac; +$ion_contrib=$au2Cm*$iondiff/($vol); +$err=$phaseerr*$fac; + +$quantum=2*$pi*$fac; +print "quantum: $quantum \n"; +print "electronic: $elec_contrib C/m^2 ionic: $ion_contrib C/m^2\n"; +$total=$ion_contrib-$elec_contrib; +print "difference: $total +/- $err C/m^2 \n"; diff --git a/src/attic/get_zpol.pl b/src/attic/get_zpol.pl new file mode 100644 index 00000000..dcfc8d4e --- /dev/null +++ b/src/attic/get_zpol.pl @@ -0,0 +1,117 @@ + +#use strict; +sub get_realimag; +sub magnitude; + +#We calculate the angle difference between two Z= +#as cos(theta)=a*b/ab. This seems to be the best way to do it, +#since calculating the angles directly seems to be very noisy.. +#in each array, [0] is the average value, [1] is the error bar, and +#[2] is the bias, if any +$string="z_pol2"; +$prefix=$ARGV[0]; +$suffix=".vmc.log"; + +($areal[0],$areal[1],$aimag[0], $aimag[1])=get_realimag("centro", $suffix); +print "centro real/imag $areal[0] $aimag[0] errors $areal[1] $aimag[1] \n"; +@a=magnitude(@areal, @aimag); +print "centro magnitude $a[0] $a[1] bias $a[2] \n\n"; + +($breal[0],$breal[1],$bimag[0], $bimag[1])=get_realimag("dist", $suffix); +print "dist real/imag $breal[0] $bimag[0] errors $breal[1] $bimag[1] \n"; +@b=magnitude(@breal, @bimag); +print "dist magnitude $b[0] $b[1] bias $b[2] \n\n"; + +$ab[0]=$a[0]*$b[0]; +$ab[1]=abs($a[0])*$b[1]+abs($b[0])*$a[1]; +$ab[2]=0; + +$adotb[0]=$areal[0]*$breal[0]+$aimag[0]*$bimag[0]; +$adotb[1]=$areal[1]*$breal[0]+$areal[0]*$breal[1] + +$aimag[1]*$bimag[0]+$aimag[0]*$bimag[1]; +$adotb[2]=0; + +@cos_2=divide(@adotb,@ab); +print "\n\n adotb @adotb ab @ab \n"; +print "cos method 2 @cos_2 \n"; + +@angle=acos(@cos_2); +print "\n angle @angle\n"; + + +sub acos { + my($x) = shift(@_); + my($xerr)=shift(@_); + my $ret = atan2(sqrt(1 - $x**2), $x); + my $err=$xerr*1/(sqrt(1-$x**2)); + my $bias=0; + return ($ret,$err,$bias); +} + +sub divide { + my @x,@y,@z; + for(my $i=0; $i < 3; $i++) { + $x[$i]=shift(@_); + } + for(my $i=0; $i < 3; $i++) { + $y[$i]=shift(@_); + } + $z[0]=$x[0]/$y[0]; + $z[1]=$x[1]/abs($y[0])+$y[1]*abs($z[0]); + $z[2]=$y[1]*$y[1]*2.0*$x[0]/$y[0]**3; + return @z; +} + +sub magnitude { + my @real,@imag,$mag, $magerr, $magbias; + $real[0]=shift(@_); + $real[1]=shift(@_); + $imag[0]=shift(@_); + $imag[1]=shift(@_); + $mag=sqrt($real[0]*$real[0]+$imag[0]*$imag[0]); + $magerr=(abs($real[0])*$real[1]+abs($imag[0])*$imag[1])/$mag; + $magbias=.5*($real[1]**2*($mag**2-$real[0]**2) + +$imag[1]**2*($mag**2-$imag[0]**2))/$mag**3; + return ($mag, $magerr, $magbias); +} + +sub get_realimag { + my @gamma, @k100, @k110, @k001, @k101, @lpoint; + my @real, @imag; + my $prefix=shift(@_); + my $suffix=shift(@_); + @gamma=split(' ',`gosling ${prefix}0${suffix} | grep z_pol2`); + @k100=split(' ',`gosling ${prefix}1${suffix} | grep z_pol2`); + @k110=split(' ',`gosling ${prefix}2${suffix} | grep z_pol2`); + @k001=split(' ',`gosling ${prefix}3${suffix} | grep z_pol2`); + @k101=split(' ',`gosling ${prefix}4${suffix} | grep z_pol2`); + @lpoint=split(' ',`gosling ${prefix}5${suffix} | grep z_pol2`); + + $real[0]=(.125*$gamma[1] + +.250*$k100[1] + +.125*$k110[1] + +.125*$k001[1] + +.25*$k101[1] + +.125*$lpoint[1]); + $real[1]=sqrt(.125*.125*$gamma[6]**2 + +.250*.250*$k100[6]**2 + +.125*.125*$k110[6]**2 + +.125*.125*$k001[6]**2 + +.25*.25*$k101[6]**2 + +.125*.125*$lpoint[6]**2); + + $imag[0]=(.125*$gamma[4] + +.250*$k100[4] + +.125*$k110[4] + +.125*$k001[4] + +.25*$k101[4] + +.125*$lpoint[4]); + + $imag[1]=sqrt(.125*.125*$gamma[9]**2 + +.250*.250*$k100[9]**2 + +.125*.125*$k110[9]**2 + +.125*.125*$k001[9]**2 + +.25*.25*$k101[9]**2 + +.125*.125*$lpoint[9]**2); + return (@real, @imag); +} diff --git a/src/attic/jeep_der.cpp b/src/attic/jeep_der.cpp new file mode 100644 index 00000000..9035bbc7 --- /dev/null +++ b/src/attic/jeep_der.cpp @@ -0,0 +1,335 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ +#include +#include +#include +#include +#include +#include +#include +#include "JeepBasis.h" +using namespace std; + + + +/* + (format comment copied from T. Ogitsu and B. Militzer) +Jeep wf format + +spin up data + +int = 0 +int nst +double[nst]   = occ[n], n=0, .. , nst-1 --number of electrons in each orbital +int ngw +complex[nst*ngw] = wf(t) +complex[nst*ngw] = wf(t-dt) + +next lines only if nspin == 2: + +spin down data + +int = 0 +int nst +double[nst]   = occ[n], n=0, .. , nst-1 +int ngw +complex[nst*ngw] = wf(t) +complex[nst*ngw] = wf(t-dt) + +*/ + + +//--------------------------------------------- +//read/write stuff +int read_int(FILE * file) { + int i; + fread(&i, sizeof(int), 1, file); + return i; +} + +double read_double(FILE * file) { + double f; + fread(&f, sizeof(double), 1, file); + return f; +} + +void write_int(FILE *outfile, int i) { + fwrite(&i,sizeof(int),1,outfile); +} + +void write_double(FILE *outfile, double d) { + fwrite(&d,sizeof(double),1,outfile); +} + +//--------------------------------------------------- + +int main(int argc, char ** argv) { + + if(argc < 4) { + cout << "usage: " << argv[0] + << " -ecut " << endl; + cout << "other options: " << endl; + cout << "--no_derivatives Don't print the derivatives" << endl; + cout << "--no_laplacian Don't print the laplacian" << endl; + exit(1); + } + + bool do_dx=true; + bool do_dy=true; + bool do_dz=true; + bool do_lap=true; + + double ecut=0; + for(int i=1; i < argc-1; i++) { + if(!strcmp(argv[i], "-ecut")) { + if( (++i) < argc) { + ecut=atof(argv[i]); + } + else { + cout << "Need number after -ecut" << endl; + exit(1); + } + } + else if(!strcmp(argv[i], "--no_derivatives")) { + do_dx=do_dy=do_dz=false; + } + else if(!strcmp(argv[i], "--no_laplacian") ) { + do_lap=false; + } + else { + cout << "don't understand argument " << argv[i] << endl; + exit(1); + } + } + string basename=argv[argc-1]; + string wf_name=basename+".wf"; + string sys_name=basename+".sys"; + + + + + int nspin=1; + + //Get the cell from the sys file + D3vector cell; + string dummy; + ifstream sysfile(sys_name.c_str()); + while(sysfile >> dummy) { + if(dummy=="set_cell") { + sysfile >> cell.x >> cell.y >> cell.z; + break; + } + } + sysfile.close(); + + + //make the basis set + + RealBasis basis; + if(!basis.resize(cell, cell, ecut)) { + cout << "Basis resize failed " << endl; + exit(1); + } + + cout << basis.size() << " plane waves " << endl; + + + + + + FILE * wfin = fopen(wf_name.c_str(), "r"); + FILE * wfoutdx, * wfoutdy, * wfoutdz,* wfoutlap; + string lapfile=wf_name+"lap"; + string dxfile=wf_name+"dx"; + string dyfile=wf_name+"dy"; + string dzfile=wf_name+"dz"; + + if(do_lap) { + wfoutlap=fopen(lapfile.c_str(), "w"); + } + if(do_dx) { + wfoutdx=fopen(dxfile.c_str(), "w"); + } + if(do_dy) { + wfoutdy=fopen(dyfile.c_str(), "w"); + } + if(do_dz) { + wfoutdz=fopen(dzfile.c_str(), "w"); + } + + int nst; + for(int s=0; s < nspin; s++) { + int test=read_int(wfin); + cout << "should be zero " << test << endl; + nst=read_int(wfin); + cout << "number of states " << nst << endl; + double * occupation=new double[nst]; + for(int i=0; i< nst; i++) { + occupation[i]=read_double(wfin); + cout << "occupation " << i << " " << occupation[i] << endl; + } + int ngw=read_int(wfin); + assert(ngw==basis.size()); + cout << "Number of plane waves " << ngw << endl; + + + //------------------------------- + //Write header + if(do_lap) { + write_int(wfoutlap, test); + write_int(wfoutlap, nst); + for(int i=0; i< nst; i++) { + write_double(wfoutlap, occupation[i]); + } + write_int(wfoutlap, ngw); + } + + if(do_dx) { + write_int(wfoutdx, test); + write_int(wfoutdx, nst); + for(int i=0; i< nst; i++) { + write_double(wfoutdx, occupation[i]); + } + write_int(wfoutdx, ngw); + } + + if(do_dy) { + write_int(wfoutdy, test); + write_int(wfoutdy, nst); + for(int i=0; i< nst; i++) { + write_double(wfoutdy, occupation[i]); + } + write_int(wfoutdy, ngw); + } + + if(do_dz) { + write_int(wfoutdz, test); + write_int(wfoutdz, nst); + for(int i=0; i< nst; i++) { + write_double(wfoutdz, occupation[i]); + } + write_int(wfoutdz, ngw); + } + + //------------------------------ + //read/write states times the appropriate g + //note that we're just taking the current time wf. + for(int i=0; i < nst; i++) { + + cout << "State number " << i << endl; + for(int j=0; j < ngw; j++) { + double real, imag; + real=read_double(wfin); + imag=read_double(wfin); + + double gx=basis.gx[j]; + double gy=basis.gx[ngw+j]; + double gz=basis.gx[ngw+ngw+j]; + + if(do_lap) { + double gsquared=gx*gx+gy*gy+gz*gz; + write_double(wfoutlap, -gsquared*real); + write_double(wfoutlap, -gsquared*imag); + } + + if(do_dx) { + write_double(wfoutdx, -gx*imag); + write_double(wfoutdx, gx*real); + } + if(do_dy) { + write_double(wfoutdy, -gy*imag); + write_double(wfoutdy, gy*real); + } + if(do_dz) { + write_double(wfoutdz, -gz*imag); + write_double(wfoutdz, gz*real); + } + + } + } + + delete [] occupation; + + } + + if(do_dx) { + fclose(wfoutdx); + } + if(do_dy) { + fclose(wfoutdy); + } + if(do_dz) { + fclose(wfoutdz); + } + if(do_lap) { + fclose(wfoutlap); + } + fclose(wfin); + + + ofstream jeeplot("plot.in"); + jeeplot << sys_name << endl; + jeeplot << "set ecut " << ecut*2 << endl; + + + jeeplot << "\nload " << wf_name << endl; + for(int i=0; i< nst; i++) { + jeeplot << "plot orbital " << i+1 << " orb" << i+1 << ".plt\n"; + } + jeeplot << endl; + + if(do_dx) { + jeeplot << "\nload " << dxfile << endl; + for(int i=0; i< nst; i++) { + jeeplot << "plot orbital " << i+1 << " orb" << i+1 << "dx.plt\n"; + } + } + jeeplot << endl; + + if(do_dy) { + jeeplot << "\nload " << dyfile << endl; + for(int i=0; i< nst; i++) { + jeeplot << "plot orbital " << i+1 << " orb" << i+1 << "dy.plt\n"; + } + } + jeeplot << endl; + + if(do_dz) { + jeeplot << "\nload " << dzfile << endl; + for(int i=0; i< nst; i++) { + jeeplot << "plot orbital " << i+1 << " orb" << i+1 << "dz.plt\n"; + } + } + jeeplot << endl; + + if(do_lap) { + jeeplot << "\nload " << lapfile << endl; + for(int i=0; i< nst; i++) { + jeeplot << "plot orbital " << i+1 << " orb" << i+1 << "lap.plt\n"; + } + } + jeeplot << endl; + + + jeeplot.close(); + +} + + diff --git a/src/attic/md_drive.py b/src/attic/md_drive.py new file mode 100644 index 00000000..01cc0563 --- /dev/null +++ b/src/attic/md_drive.py @@ -0,0 +1,213 @@ +import os +import string + +gamess2qmc="gamess2qmc" +gamess="nohup nice /home/apps/gamess/rungms" +gos="/home/lkwagner/qmcsources/qmc_inherit/gos-Linux-3.2" + + +#We want to read the sysdef module from the current +#directory, so add this to Python's search path +import sys +sys.path.insert(0,".") + +from sysdef import * + +def print_gamess(atoms, file, basis, ecp_section, last_pun): + f=open(file, "w") + f.write(gamess_header) + if(last_pun != ''): + f.write(gamess_guess_line) + f.write(" $DATA \n \n") + f.write(gamess_symm+"\n") + for at in atoms: + string=" "+at.label+" "+ str(at.atomnum) + " " \ + + str(at.pos[0]) + " " + str(at.pos[1]) + " "\ + + str(at.pos[2]) + "\n" + f.write(string); + f.write(basis[at.basis]+ "\n") + f.write(" $END\n") + f.write(ecp_section) + if(last_pun != ''): + inf=open(last_pun, "r") + pr=0; + while(1): + line=inf.readline() + if(line==''): + break + if(line.rfind("$VEC") > 0) or line.rfind("$SCF") > 0: + pr=1 + if(pr==1): + f.write(line) + f.close() + +################################################## + +class gos_dynamic_options: + root="" + wffile="" + md_wf="" + md_read="" + md_write="" + + +################################################### + +def print_gos_opt(sopts, dopts): + "Print optimization file" + dopts.md_wf=dopts.root+".wf" + return """\ +METHOD { + VMC + NBLOCK 1 + NSTEP 5 + TIMESTEP """ + str(sopts.vmc_timestep) + """ + NDECORR """ + str(sopts.vmc_ndecorr) + """ + STORECONFIG md_opt.config + READCONFIG md_opt.config + NCONFIG """ + str(sopts.nconfig) + """ + EREF """ + str(sopts.eref) + """ +} + +METHOD { + OPTIMIZE + ITERATIONS """ + str(sopts.iterations)+ """ + READCONFIG md_opt.config + NCONFIG """ + str(sopts.nconfig) + """ + EREF """ + str(sopts.eref) + """ + MINFUNCTION VARIANCE + WFOUTPUT """ + dopts.md_wf + """ + PSEUDOTEMP /scratch/lkwagner/qmcpseudo +} + +INCLUDE """ + dopts.root + """.sys +TRIALFUNC { INCLUDE """ + dopts.wffile + " } \n" + + +################################################## + +def print_gos_md(sopts, dopts): + read='' + write='' + if(dopts.md_read != ''): + read="READCHECK " + dopts.md_read + "\n" + if(dopts.md_write !=''): + write="STORECHECK " + dopts.md_write +"\n" + atomweights='' + for at in atoms: + atomweights=atomweights + str(at.atomweight) + " " + + return """\ +METHOD { + MD + NSTEP """ +str(sopts.md_nsteps)+ """ + TIMESTEP """ + str(sopts.md_timestep) + "\n " + \ + read + write + """ + ATOMIC_WEIGHTS { """ + atomweights + """ } + EMBED { + VMC + NBLOCK """ + str(sopts.md_vmc_nblock) + """ + NSTEP """ + str(sopts.md_vmc_nstep) + """ + NDECORR """ + str(sopts.vmc_ndecorr) + """ + TIMESTEP """ + str(sopts.vmc_timestep) + """ + NCONFIG """ + str(sopts.md_vmc_nconfig) + """ + STORECONFIG md.config + """ + sopts.md_vmc_extra + """ + #uncomment the following to read a configuration + READCONFIG md.config + EREF """ + str(sopts.eref) + """ + } +} + +INCLUDE """ + dopts.root + """.sys +TRIALFUNC { INCLUDE """ + dopts.md_wf+ " } \n" + + +################################################## +################################################## + + + +#log=open(log_file, "w") + +nsteps=int(simulation_time/(static_options.md_timestep*static_options.md_nsteps)) + +for i in range(0,nsteps): + + #Run GAMESS + gamessroot=gamess_base + string.zfill(str(i),4) + gosroot=gos_base+string.zfill(str(i),4) + last_pun='' + if(i > 0): + last_pun=gamess_base+string.zfill(str(i-1), 4) + ".pun" + elif(gamess_punch_start!= ''): + last_pun=gamess_punch_start + + print_gamess(atoms, gamessroot + ".inp", basis, ecp_sec, last_pun) + systext=gamess+" " + gamessroot + ' >& ' + gamessroot + ".out" + print "executing: " + systext + os.system(systext) + + #Convert from GAMESS to QMC + + systext=gamess2qmc +" -o " + gosroot + " " + gamessroot + print "executing: " + systext + os.system(systext) + os.remove(gosroot+".hf"); + os.remove(gosroot+".jast"); + os.remove(gosroot+".jast2"); + + refwf=gosroot+".refwf" + + f=open(refwf, "w"); + f.write("SLATER-JASTROW\n WF1 { INCLUDE " +\ + gosroot + ".slater }\n WF2 { INCLUDE " + refjast + " }\n") + f.close() + + + #Set dynamic options + + firstoptfile=gosroot+".opt" + dyn_opt=gos_dynamic_options() + dyn_opt.root=gosroot + dyn_opt.wffile=refwf + dyn_opt.md_write=gosroot+".mdcheck" + if(i > 0): + last_name=gos_base+string.zfill(str(i-1),4) + dyn_opt.md_read=last_name + ".mdcheck" + + + #Optimize the first wave function + + f=open(firstoptfile, "w") + f.write(print_gos_opt(static_options, dyn_opt)) + f.close() + + systext=gos + " " + firstoptfile + print "executing: " + systext + os.system(systext) + + #Run MD + + mdfile=gosroot+".md" + f=open(mdfile, "w") + f.write(print_gos_md(static_options, dyn_opt)) + f.close() + + systext=gos + " " + mdfile + print "executing: " + systext + os.system(systext) + + + + mdout=open(dyn_opt.md_write, "r") + mdout.readline() #natoms + mdout.readline() #current_pos + n=0 + for at in atoms: + line=mdout.readline() + lsp=line.split() + at.pos[0]=float(lsp[0]) + at.pos[1]=float(lsp[1]) + at.pos[2]=float(lsp[2]) + diff --git a/src/attic/optimize.pl b/src/attic/optimize.pl new file mode 100644 index 00000000..0adc1e89 --- /dev/null +++ b/src/attic/optimize.pl @@ -0,0 +1,103 @@ +#!/bin/perl + +$basename="test"; + +$nconfig=10; +$eref=-1052.6; +$nregen=3; + +$niterations=300; +$scrdir="/var/tmp"; + +$nblock=5; +$nstep=10; +$ndecorr=2; +$timestep=1.0; + +$configdir="config"; +$configname="$configdir/$basename.config"; +system("mkdir $configdir"); + + +$sysname=$basename . ".sys"; +$jastname=$basename . ".jast"; +$slatname=$basename . ".slater"; + +open(hfout, ">$basename.hf"); +print hfout +"METHOD { + VMC + NBLOCK $nblock + NSTEP $nstep + NDECORR $ndecorr + TIMESTEP $timestep + NCONFIG $nconfig + STORECONFIG $configname + EREF $eref +} + + + +INCLUDE $sysname +TRIALFUNC { + INCLUDE $slatname +} +"; +close(hfout); + +for($i=0; $i < $nregen; $i++) { + + open(optout, ">$basename.opt$i"); + print optout +"METHOD { + OPTIMIZE + ITERATIONS $niterations + READCONFIG $configname + NCONFIG $nconfig + EREF $eref + MINFUNCTION VARIANCE + PSEUDOTEMP $scrdir/$basename.pseudo +} + +INCLUDE $sysname +"; + if($i==0) { + print optout "TRIALFUNC { \n SLATER-JASTROW \n"; + print optout " WF1 { INCLUDE $slatname } \n"; + print optout " WF2 { INCLUDE $jastname } \n"; + print optout "}\n"; + } + else { + $i2=$i-1; + print optout "TRIALFUNC { INCLUDE $basename.opt$i2.wfout }\n"; + } + + close(optout); + + open(vmcout, ">$basename.vmc$i"); + print vmcout +" +METHOD { + VMC + NBLOCK $nblock + NSTEP $nstep + NDECORR $ndecorr + TIMESTEP $timestep + NCONFIG $nconfig + STORECONFIG $configname + + #uncomment the following to read a configuration + READCONFIG $configname + EREF $eref +} + + + +INCLUDE $sysname +TRIALFUNC { +INCLUDE $basename.opt$i.wfout +} +"; + close(vmcout); +} + diff --git a/src/attic/sysdef.py b/src/attic/sysdef.py new file mode 100644 index 00000000..d2334a5e --- /dev/null +++ b/src/attic/sysdef.py @@ -0,0 +1,115 @@ +refjast="reference.jast" + + +################################################## +##GAMESS INPUT +################################################# +gamess_header="""\ + $CONTRL SCFTYP=UHF MULT=1 ICHARG=0 RUNTYP=GRADIENT MAXIT=70 ECP=READ $END + $CONTRL UNITS=BOHR $END + $SYSTEM KDIAG=3 $END + $SCF DIRSCF=.T. RSTRCT=.T. SOSCF=.F. $END +""" + +gamess_guess_line=" $GUESS GUESS=MOREAD NORB=18 $END\n" + +gamess_symm="C1" + +################################################## + +basis=["""\ +S 7 1. + 1 25.967331 3.54063093E-03 + 2 9.1676598 1.67008793E-02 + 3 2.8460805 6.08226508E-02 + 4 1.0048708 1.72330686E-01 + 5 0.38502821 3.53696261E-01 + 6 0.16005760 3.89585261E-01 + 7 0.69101229E-01 1.46735635E-01 +S 1 + 1 0.3258000000 1.000000000 +S 1 + 1 0.1027000000 1.000000000 +P 4 1. + 1 18.1264860 0.002058194485 + 2 4.4559865 0.015034403850 + 3 1.1582862 0.151153254935 + 4 0.3505376 0.890125250947 +P 1 1. + 1 .18 1. +"""] + +################################################## + +ecp_sec="""\ + $ECP +H-TR4 GEN 0 1 +6 P + -9.39168039 2 27.916162 + -0.536989635 2 394.363177 + 0.717083592 2 15.663672 + -1.25803771 2 90.1659831 + -0.267890288 2 2232.29185 + 1. 1 21.2435951 +1 S + 0. 2 1. +H-TR4 + $END +""" + +################################################## + +class Atom: + basis=0 + label="" + pos=[0, 0,0] + velocity=[0,0,0] + atomnum=0 + atomweight=0 + def __init__(self, lab, bas, atnum, atweight): + self.basis=bas + self.label=lab + self.atomnum=atnum + self.atomweight=atweight + +################################################## + +class gos_static_options: + #general + eref=-1.1 + vmc_timestep=1.0 + vmc_ndecorr=2 + vmc_nstep=10 + ref_config="reference.config" + + #For optimization + nconfig=100 + eref=-1.1 + iterations=50 + ref_jast="reference.jast" + + md_timestep=.1 + md_nsteps=1 + md_vmc_nstep=4000 + md_vmc_nblock=20 + md_vmc_nconfig=1 + +static_options = gos_static_options() + + + +################################## + +######################################################## +# Start program here +######################################################## +#Define the starting position here +atoms=[Atom("H",0,1,1), Atom("H", 0,1,1)] +atoms[0].pos=[0,0,0] +atoms[1].pos=[0,0,1.5] +simulation_time=2 + +gamess_base="start" +gos_base="startq" +log_file="md.log" + diff --git a/src/attic/vecmath.h b/src/attic/vecmath.h new file mode 100644 index 00000000..69935f67 --- /dev/null +++ b/src/attic/vecmath.h @@ -0,0 +1,231 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ +//---------------------------------------------------------------------- +//utils/vecmath.h + +//This is a relatively slow library for vectors using the STL +//vector 's. + + +#ifndef VECMATH_H_INCLUDED +#define VECMATH_H_INCLUDED + +#include +#include +/*! + */ +inline std::vector cross(std::vector & a, std::vector & b) { + assert(a.size()==3); + assert(b.size()==3); + std::vector c; + c.push_back(a[1]*b[2]-a[2]*b[1]); + c.push_back(a[2]*b[0]-a[0]*b[2]); + c.push_back(a[0]*b[1]-a[1]*b[0]); + return c; +} + +inline double dot(std::vector & a, std::vector & b) { + assert(a.size()==3); + assert(b.size()==3); + return a[0]*b[0]+a[1]*b[1]+a[2]*b[2]; +} + +inline double length_vec(std::vector & a) { + assert(a.size()==3); + return sqrt(a[0]*a[0]+a[1]*a[1]+a[2]*a[2]); +} + +inline std::vector operator+(std::vector & a, std::vector & b) { + assert(a.size()==3); + assert(b.size()==3); + std::vector c; + for(int i=0; i< 3; i++) { + c.push_back(a[i]+b[i]); + } + return c; +} + +inline double distance_vec(std::vector & a, std::vector & b) { + assert(a.size()==3); + assert(b.size()==3); + return sqrt( + (a[0]-b[0])*(a[0]-b[0]) + +(a[1]-b[1])*(a[1]-b[1]) + +(a[2]-b[2])*(a[2]-b[2])); +} + +inline std::vector operator-(std::vector & a, std::vector & b) { + assert(a.size()==3); + assert(b.size()==3); + std::vector c; + for(int i=0; i< 3; i++) { + c.push_back(a[i]-b[i]); + } + return c; +} + +inline std::vector operator*(std::vector & v, int & i) { + assert(v.size()==3); + std::vector c; + for(int i=0; i< 3; i++) c.push_back(i*v[i]); + return c; +} + + +//projection of a onto b (returns a dot b/abs(b)) +inline double projection(std::vector & a, std::vector & b) { + assert(a.size()==3); + assert(b.size()==3); + double c; + c=dot(a,b); + double bsize=dot(b,b); + return c/sqrt(bsize); +} + + + +class Shifter { + +public: + Shifter() { + for(int i=0; i< 3; i++) origin.push_back(0); + } + std::vector origin; + int enforcepbc(std::vector & x, std::vector > & latvec ) { + + //Find normal vectors.. + std::vector > norm; + std::vector temp; + for(int i=0; i<3; i++) temp.push_back(0); + for(int i=0; i<3; i++) norm.push_back(temp); + + norm[0]=cross(latvec[1], latvec[2]); + norm[1]=cross(latvec[0], latvec[2]); + norm[2]=cross(latvec[0], latvec[1]); + + /* + for(int i=0; i< 3; i++) { + cout << "normal before " << i << " "; + for(int j=0; j< 3; j++) { + cout << norm[i][j] << " "; + } + cout << endl; + } + */ + + //Make sure the normal vectors are pointing out of the box + for(int i=0; i< 3; i++) { + //cout << "dot " << i << dot(norm[i], latvec[i]) << endl; + if(dot(norm[i], latvec[i]) < 0) { + for(int j=0; j< 3; j++) { + norm[i][j]=-norm[i][j]; + } + } + } + + /* + for(int i=0; i< 3; i++) { + cout << "normal " << i << " "; + for(int j=0; j< 3; j++) { + cout << norm[i][j] << " "; + } + cout << endl; + } + */ + + //find corners + std::vector > corners; + for(int i=0; i <3; i++) corners.push_back(temp); + + for(int i=0; i< 3; i++) { + corners[i]=origin+latvec[i]; + } + + int shifted=0; + //Initialization done, now do the pbc.. + for(int i=0; i< 3; i++) { //loop over lattice vectors + int shouldcontinue=1; + while(shouldcontinue) { + temp=x-origin; + double sm=dot(norm[i], temp); + temp=x-corners[i]; + double sp=dot(norm[i], temp); + // cout << "sm " << sm << " sp " << sp << endl; + + if(sm < 0) { + x=x+latvec[i]; + shifted=1; + } + else if(sp >0 ) { + x=x-latvec[i]; + shifted=1; + } + else { + shouldcontinue=0; + } + } + } + return shifted; + } + +}; + +//---------------------------------------------------------------------- + +//check whether the vector is enclosed in the parallelpiped defined by +//the three vectors in box(inclusive edges) +inline bool is_enclosed(std::vector & x, + std::vector > & box) { + + /* + //This is quite possibly wrong when the box edges are not orthogonal. + //Using the shifter instead + assert(box.size()==3); + assert(box[0].size()==3); + assert(box[1].size()==3); + assert(box[2].size()==3); + assert(x.size()==3); + std::vector lengths; + for(int i=0; i< 3; i++) { + lengths.push_back(sqrt(dot(box[i], box[i]))); + } + + bool in_box=true; + for(int i=0; i< 3; i++) { + double proj=projection(x,box[i]); + //cout << "projection " << i << " " << proj + // << " length " << lengths[i] + // << endl; + if(proj > lengths[i] || proj < 0 ) { + in_box=false; + } + } + + //return in_box; + */ + Shifter shft; + return !shft.enforcepbc(x,box); +} + + + +#endif //VECMATH_H_INCLUDED + +//---------------------------------------------------------------------- diff --git a/src/attic/walkerReDist.cpp b/src/attic/walkerReDist.cpp new file mode 100644 index 00000000..2887bb92 --- /dev/null +++ b/src/attic/walkerReDist.cpp @@ -0,0 +1,269 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ +#include +#include +#include +#include //setw() +#include //sprintf() +#include //floor() +#include +using namespace std; + +/////////////////////////////////////////////////////////////////////// +//function declarations//function declarations//function declarations// +/////////////////////////////////////////////////////////////////////// +/*! Print an error message and exit the program */ +void error(char * arg1); + +//////////////////////////////////////////////////////////////////// +//main//main//main//main//main//main//main//main//main//main//main// +//////////////////////////////////////////////////////////////////// +/*! +

    USE: walkerReDist c2h6.hf.config 7 c2h6.hf.newconfig 10

    + detail: arg1 - utility name (walkerReDist)
    + arg2 - base name for new configuration files
    + arg3 - number of old config files to redistribute walkers from
    + arg4 - base name for new configuration files
    + arg5 - number of new config files to redistribute walkers to
    +

    Assumptions

    + if file begins with "Array { nconfigs" where nconfigs is the # of + configurations in the file, then the rest of the file is formatted + like an ooqmc .config file with number of ions/electrons in each + section given by the numbers in the file.
    +*/ +int main(int argc, char * argv[]){ + time_t starttime; + time(&starttime); + + cout<>text; + if(0!=strcmp(text.c_str(),"Array")){ + cout<<"BAD FORMAT: first word != Array in "<>text; + if(0!=strcmp(text.c_str(),"{")){ + cout<<"BAD FORMAT: second word != { in "<>text_i; + nconfigs += text_i; + cout<<" # of configurations in "<>text; + sampleType=text; + zin>>text; zin>>text; + numIons=atoi(text.c_str()); + for(int j=0;j<(numIons*3);j++) zin>>text; + zin>>text; zin>>text; + numElectrons=atoi(text.c_str()); + numWordsPerConfig=5+3*(numIons+numElectrons); + //cout<<"numIons="<>text;zin>>text;zin>>text_i; //next zin will get 1st element of config + + nconfigs=text_i; + //for each config in old config file + for(int j=0; j= minConfigsPerFile)){ //if I have min#configs in new file + // open new zout stream if 'writing to minConfigFile' or if I have max#configs in new file + if( (newFileCount>=numleftover) || (numConfigsInNewfile >= maxConfigsPerFile)){ + //zout '}', close zout, open zout on next output file, put first 3 words in + zout<<" } "<>text; + zout<>text; + zout<>text; + zout<> text_d; + zout << setw(20) << setprecision(12) << text_d; + } + zout<>text; //'numElectrons' + zout<<" "<>text; //numElectrons + zout<> text_d; + zout << setw(20) << setprecision(12) << text_d; + } + zout<\n"; + exit(1); +} +$wf_name=$ARGV[0]; +$wf_caps=$wf_name; +$wf_caps =~ tr/a-z/A-Z/; + +$headerfile=" +//-------------------------------------------------------------------------- +// $wf_name.h +// + +#ifndef $wf_caps\_H_INCLUDED +#define $wf_caps\_H_INCLUDED + +#include \"Wavefunction.h\" +#include \"$wf_name\_data.h\" +#include \"Toolkit.h\" + +/* +Don't forget to put allocation information in Wavefunction.cpp and +Wavefunction_data.cpp, and to add the .cpp files in the makefile. +*/ +class $wf_name : public Wavefunction { +public: + virtual void read(vector & words, + unsigned int & pos, + Program_options & options + ); + + /*! + Link the wavefunction with a data object. From this point + forward, the wavefunction will use the parameters in the Wavefunction_data + object to do the calculations. + */ + virtual void link(Wavefunction_data * wfdata ) { + recast(wfdata, dataptr); + } + + + + virtual void calcVal(System & , Sample_point &); + virtual void updateVal(System &, Sample_point &, int, doublevar &); + virtual void rejectVal(int ); + virtual void getVal(int, doublevar &); + + virtual void calcGrad(System &, Sample_point &); + virtual void updateGrad(System &, Sample_point &, int, Array1 &); + virtual void rejectGrad(int); + virtual void getGrad(int, Array1 &); + + virtual void calcLap(System &, Sample_point &); + virtual void updateLap(System &, Sample_point &, int, Array1 &); + virtual void rejectLap(int); + virtual void getLap(int, Array1 &); + + virtual void calcForceBias(System &, Sample_point &); + virtual void updateForceBias(System &, Sample_point &, int, Array1 &); + virtual void rejectForceBias(int); + virtual void getForceBias(int, Array1 &); + +private: + $wf_name\_data * dataptr; + //Put the information that needs to be stored for each walker here. + +}; + +#endif //$wf_caps\_H_INCLUDED +//-------------------------------------------------------------------------- +"; + +$dataheaderfile=" +//------------------------------------------------------------------------ +//$wf_name\_data.h + +#ifndef $wf_caps\_DATA_H_INCLUDED +#define $wf_caps\_DATA_H_INCLUDED + +#include \"Qmc_std.h\" +class Program_options; +#include \"Wavefunction_data.h\" + +class $wf_name\_data : public Wavefunction_data { +public: + + void read(vector & words, + unsigned int & pos, + Program_options & options + ); + void getVarParms(Array1 & parms); + void setVarParms(Array1 & parms); + int showinfo(ostream & os); + int nparms(); + +private: + friend class $wf_name; + //put the static data elements here, that are common across all + //the walkers. + +}; + +#endif //$wf_caps\_DATA_H_INCLUDED +//------------------------------------------------------------------------ +"; + +$sourcefile=" +//-------------------------------------------------------------------------- +// $wf_name.cpp +// +// +#include \"$wf_name.h\" +#include \"qmc_io.h\" +#include \"Qmc_std.h\" +#include \"Sample_point.h\" + +/* +Size any arrays from the input section. +*/ +void $wf_name\::read(vector & words, unsigned int & pos, + Program_options & options) { +} + + +/* +Calculation methods. The only absolutely necessary one is the Lap methods; +all the others are by default hardwired into that one. However, you should +at the very least write a value-only calculation, which drastically +improves the efficiency of pseudopotential calculations. +*/ +//------------------------------------------------------------------------ + +void $wf_name\::calcVal(System & system, Sample_point & sample) { + doublevar val; + for(int e=0; e< sample.size(); e++) { + updateVal(system, sample, e, val); + } +} + +//------------------------------------------------------------------------ + +void $wf_name\::updateVal(System & system, Sample_point & sample,int e, doublevar & val) { + assert(dataptr != NULL); +} + +//------------------------------------------------------------------------ + +void $wf_name\::rejectVal(int e) { +} + +//------------------------------------------------------------------------ + +void $wf_name\::getVal(int e, doublevar & val) { +} + +//---------------------------------------------------------------------------- + +void $wf_name\::calcGrad(System & system, Sample_point & sample) { + Array1 grad(4); + for(int e=0; e< sample.size(); e++) { + updateGrad(system, sample, e, grad); + } +} + +void $wf_name\::updateGrad(System & system, Sample_point & sample,int e, Array1 & newgrad){ + assert(newgrad.GetDim(0) >= 4); + Array1 temp(5); + updateLap(system, sample, e, temp); + for(int i=0; i< 4; i++) { + newgrad(i)=temp(i); + } +} +void $wf_name\::rejectGrad(int e){ + rejectLap(e); +} +void $wf_name\::getGrad(int e, Array1 & grad) { + assert(grad.GetDim(0) >= 4); + Array1 temp(5); + getLap(e, temp); + for(int i=0; i< 4; i++) { + grad(i)=temp(i); + } +} + +void $wf_name\::calcForceBias(System & system, Sample_point & sample) { + Array1 bias(4); + for(int e=0; e< sample.size(); e++) { + updateForceBias(system, sample, e, bias); + } +} +void $wf_name\::updateForceBias(System & system, Sample_point & sample,int e, Array1 & newbias) { + updateGrad(system, sample, e, newbias); +} +void $wf_name\::rejectForceBias(int e) { + rejectGrad(e); +} +void $wf_name\::getForceBias(int e, Array1 & bias) { + getGrad(e, bias); +} + +//------------------------------------------------------------------------ + +void $wf_name\::calcLap(System & system, Sample_point & sample) { + Array1 lap(5); + for(int e=0; e< sample.size(); e++) { + updateLap(system, sample, e, lap); + } +} + +//------------------------------------------------------------------------ + +void $wf_name\::rejectLap(int e) { + assert(dataptr != NULL); +} + +//------------------------------------------------------------------------- + +void $wf_name\::getLap(int e, Array1 & lap) { + assert(lap.GetDim(0) >= 5); + assert(dataptr != NULL); +} + +//------------------------------------------------------------------------- + + +void $wf_name\::updateLap( + System & system, + Sample_point & sample, + int e, + //! & newlap +) { + assert( newlap.GetDim(0) >= 5); + assert(dataptr != NULL); +} + +//------------------------------------------------------------------------- +"; + +$datasourcefile=" +//------------------------------------------------------------------------ +//$wf_name\_data.cpp + +#include \"Qmc_std.h\" +#include \"qmc_io.h\" +#include \"$wf_name\_data.h\" +#include \"Program_options.h\" + +/*! +*/ +void $wf_name\_data::read(vector & words, unsigned int & pos, + Program_options & options) +{ +} + +void $wf_name\_data::getVarParms(Array1 & parms) { +} + +void $wf_name\_data::setVarParms(Array1 & parms) { +} + +int $wf_name\_data::nparms() { +} + +int $wf_name\_data::showinfo(ostream & os) { +} + +//------------------------------------------------------------------------ +"; + +open(OUTPUT, ">$wf_name.h"); +print OUTPUT $headerfile; +close(OUTPUT); + +open(OUTPUT, ">$wf_name\_data.h"); +print OUTPUT $dataheaderfile; +close(OUTPUT); + +open(OUTPUT, ">$wf_name.cpp"); +print OUTPUT $sourcefile; +close(OUTPUT); + +open(OUTPUT, ">$wf_name\_data.cpp"); +print OUTPUT $datasourcefile; +close(OUTPUT); diff --git a/src/basis_function/Basis_function.cpp b/src/basis_function/Basis_function.cpp new file mode 100644 index 00000000..9783d13d --- /dev/null +++ b/src/basis_function/Basis_function.cpp @@ -0,0 +1,79 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ + + +#include "Basis_function.h" +#include "qmc_io.h" +#include "Cubic_spline.h" +#include "Pade_function.h" +#include "Poly_pade_function.h" +#include "Gaussian_function.h" +#include "Exponent_cusp.h" +#include "Cutoff_cusp.h" +#include "Planewave_function.h" +#include "Rgaussian_function.h" +#include "Gen_pade_function.h" +#include "Step_function.h" + +int allocate(vector & basistext, Basis_function * & bptr) +{ + assert( bptr == NULL ); + unsigned int pos=0; + string type; + readnext(basistext, pos, type); + if(caseless_eq(type ,"AOSPLINE")) + bptr= new Cubic_spline; + else if(caseless_eq(type, "PADE")) + bptr= new Pade_function; + else if(caseless_eq(type, "POLYPADE")) + bptr= new Poly_pade_function; + else if(caseless_eq(type, "GAUSSIAN")) + bptr= new Gaussian_function; + else if(caseless_eq(type,"EXPONENTIAL_CUSP")) + bptr= new Exponent_cusp; + else if(caseless_eq(type,"CUTOFF_CUSP")) + bptr=new Cutoff_cusp; + else if(caseless_eq(type,"PLANEWAVE")) + bptr=new Planewave_function; + else if(caseless_eq(type,"RGAUSSIAN")) + bptr=new Rgaussian_function; + else if(caseless_eq(type,"GENPADE")) + bptr=new Gen_pade_function; + else if(caseless_eq(type,"STEP")) + bptr=new Step_function; + else + error("Didn't understand the basis section type ", type, + " in basis section ", basistext[0]); + + bptr->read(basistext, pos); + return 1; + +} + +int deallocate(Basis_function * & bptr) +{ + if(bptr == NULL) + return 0; + + delete bptr; + bptr=NULL; + return 1; +} +//-------------------------------------------------------------------------- diff --git a/src/basis_function/Basis_function.h b/src/basis_function/Basis_function.h new file mode 100644 index 00000000..1a5a9aa6 --- /dev/null +++ b/src/basis_function/Basis_function.h @@ -0,0 +1,161 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ + +#ifndef BASIS_FUNCTION_H_INCLUDED +#define BASIS_FUNCTION_H_INCLUDED + +#include "Array.h" +#include "Qmc_std.h" + +/*! +This class represents a basis set around a single center. +*/ +class Basis_function +{ +public: + + + virtual ~Basis_function() + {} + + /*! + \brief + Return only the value of the function in symvals + */ + virtual void calcVal(const Array1 & r, + //!< in form r, r^2, x, y, z + Array1 & symvals, + //!< The values and derivatives of the basis function + const int startfill=0 + //!< The place in the array to start the fill + )=0; + + /*! + \brief + Returns the value and derivatives of the basis functions in the + form [function, [val, df/dx, df/dy, df/dz, \f$\nabla^2f \f$] ] + */ + virtual void calcLap( + const Array1 & r, + //!< in form r, r^2, x, y, z + Array2 & symvals, + //!< The values and derivatives of the basis function + const int startfill=0 + //!< The place in the array to start the fill + ) =0; + + + virtual void calcHessian(const Array1 & r, + Array2 & symvals, + //!< (func, [val,grad,d2f/dx2,d2f/dy2,d2f/dz2 + //,d2f/dxdy,d2f/dxdz,d2f/dydz]) (nfunc,10) + const int startfill=0 + ) { + error("This function doesn't support Hessians"); + } + + + virtual int read( + vector & words, + //!< The words from the basis section that will create this basis function + unsigned int & pos + //!< The current position in the words(should be obseleted, since one section -> one set); will be incremented as the Basis_function reads the words. + )=0; + + /*! + A debugging function so we can pull in the spline coefficients + from old code. Don't use it unless you know what you're + doing. + */ + virtual void raw_input(ifstream & )=0; + + /*! + \brief + Return the number of functions that this represents + */ + virtual int nfunc()=0; + + /*! + \brief + Return the label of the center that this function is around + */ + virtual string label()=0; + + /*! + \brief + Return the cutoff of a given function, at which point it is + safe to assume the function and its derivatives are zero. + */ + virtual doublevar cutoff(int )=0; + + /*! + \brief + Show some summary information for the output file. Return + one on success. + */ + virtual int showinfo(string & indent, ostream & os) + { + os << indent + << "Showing basis function info..this basis function doesn't" + " have the showinfo function\n"; + return 1; + } + + /*! + \brief + Write a valid input section for rereading later. Note that + this also serves as some documentation for the section. + */ + virtual int writeinput(string &, ostream &)=0; + + /*! + \brief + put the set of variational parameters into the argument + */ + virtual void getVarParms(Array1 & parms) { + parms.Resize(0); + } + + /*! + \brief + After changing the variational parameters, set them within + the basis function. + + NB: the argument of this function must be exactly the same + length as getVarParms() + */ + virtual void setVarParms(Array1 & parms) { + assert(parms.GetDim(0)==0); + } + + /*! + \brief + Number of parameters this function has. + */ + virtual int nparms() { + return 0; + } +}; + +int allocate(vector & basistext, Basis_function * & bptr); +int deallocate(Basis_function * & bptr); + +#endif //BASIS_FUNCTION_H_INCLUDED +//-------------------------------------------------------------------------- diff --git a/src/basis_function/Cubic_spline.h b/src/basis_function/Cubic_spline.h new file mode 100644 index 00000000..2c59ceba --- /dev/null +++ b/src/basis_function/Cubic_spline.h @@ -0,0 +1,154 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ + +#ifndef CUBIC_SPLINE_H_INCLUDED +#define CUBIC_SPLINE_H_INCLUDED + +#include "Basis_function.h" +#include "Spline_fitter.h" + +/*! +This class represents a 1-D cubic spline interpolation. It is meant +to be used for the radial part of an atomic orbital, and will return +symmetry-adjusted values for the calculation methods. + +*/ +class Cubic_spline: public Basis_function +{ +private: + + //Overall symmetry type of a spline + enum symmetry_type { sym_S, sym_P, sym_6D, sym_10F, sym_5D, sym_7F, sym_15G }; + + //symmetry type of the expansion(all functions.) + enum indiv_symm_type { + isym_S, isym_Px, isym_Py, isym_Pz, + isym_Dxx, isym_Dyy, isym_Dzz, isym_Dxy, isym_Dxz, isym_Dyz, + isym_Dz2r2, isym_Dx2y2, + isym_Fxxx, isym_Fyyy, isym_Fzzz, isym_Fxxy, isym_Fxxz, + isym_Fyyx, isym_Fyyz, isym_Fzzx, isym_Fzzy, isym_Fxyz, + isym_Gxxxx, isym_Gyyyy, isym_Gzzzz, isym_Gxxxy, isym_Gxxxz, + isym_Gyyyx, isym_Gyyyz, isym_Gzzzx, isym_Gzzzy, isym_Gxxyy, + isym_Gxxzz, isym_Gyyzz, isym_Gxxyz, isym_Gyyxz, isym_Gzzxy +}; + + Array1 symmetry; + //!< angular momentum(s=0, p=1, d=2, etc) + + Array1 indiv_symmetry; + //!< The orbital expansion of each function(S, Px, Py, etc..) + + Array1 nfuncspline; + //!< Number of functions represented by each spline + + doublevar threshold; + //!< the upper limit of the spline + + int nsplines; + //!< Number of splines this object represents + + double requested_cutoff; + //!< If the user asked for a cutoff, this will have it. + + vector < vector < doublevar > > exponent; + //!< Save the exponents for a gaussian expansion to print again + + vector < vector < doublevar > > coefficient; + //!< Save the coefficients to reprint + + Array1 rcut; + //!< actual cutoff for each function + + int nfunctions; + //! splines; + + void findCutoffs(); + + /*! + Read the spline fit points. Only supports S type functions for the moment. + \todo + Make this work for all symmetries. This requires an input spec change + */ + int readspline(vector & words); +public: + + Cubic_spline() + {} + ~Cubic_spline() + {} + + //----------------------------------------------------- + + int showinfo(string & indent, ostream & os); + int writeinput(string &, ostream &); + + virtual int read( + vector & words, + //!< The words from the basis section that will create this basis function + unsigned int & pos + //!< The current position in the words(important if one basis section makes several functions); will be incremented as the Basis_function reads the words. + ); + + + int readbasis(vector & words, unsigned int & pos, + Array1 & parms) ; + + + int nfunc(); + doublevar cutoff(int); + virtual string label() + { + return atomname; + } + void raw_input(ifstream & input); + + void calcVal(const Array1 & r, + Array1 & symvals, + const int startfill=0); + + /*! + All returned values are of the form \f$f(r), + \frac{1}{r}\frac{df(r)}{dr}, \frac{d^2f(r)}{dr^2} \f$. + */ + void calcLap( + const Array1 & r, + //!< in form r, r^2, x, y, z + Array2 & symvals, + //!< The values of the spline propogated through symmetry. For example, a p state would be a 3x5 matrix, and an s state a 1x5. + const int startfill=0 + ); + + + virtual void calcHessian(const Array1 & r, + Array2 & symvals, + //!< (func, [val,grad,d2f/dx2,d2f/dy2,d2f/dz2 + //,d2f/dxdy,d2f/dxdz,d2f/dydz]) (nfunc,10) + const int startfill=0 + ); +}; + +#endif // CUBIC_SPLINE_H_INCLUDED +//-------------------------------------------------------------------------- diff --git a/src/basis_function/Cubic_spline_build.cpp b/src/basis_function/Cubic_spline_build.cpp new file mode 100644 index 00000000..e243c343 --- /dev/null +++ b/src/basis_function/Cubic_spline_build.cpp @@ -0,0 +1,618 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ + +#include "Qmc_std.h" +#include "qmc_io.h" +#include +#include "Cubic_spline.h" +//------------------------------------------------------------------------- +int Cubic_spline::read( + vector & words, + unsigned int & pos +) +{ + + Array1 basisparms(4); + atomname=words[0]; + basisparms(0)=.02; //spacing + basisparms(1)=2500; //number of points + basisparms(2)=1e31; + basisparms(3)=1e31; + if(!readvalue(words, pos=0, norm_type, "NORMTYPE")) { + norm_type="GAMESSNORM"; + } + + if(haskeyword(words, pos=0, "NORENORMALIZE")) { + renormalize=false; + } + else { + renormalize=true; + } + + doublevar cutmax; + if(readvalue(words, pos=0, cutmax, "CUTOFF")) { + requested_cutoff=cutmax; + } + else { + requested_cutoff=-1; + } + + + vector basisspec; + string read_file; //read positions from a file + if(readsection(words,pos=0, basisspec, "GAMESS")) + { + unsigned int newpos=0; + return readbasis(basisspec, newpos, basisparms); + } + else { + pos=0; + if(readspline(words)) { + return 1; + } + else { + error("couldn't find proper basis section in AOSPLINE. " + "Try GAMESS { .. }."); + return 0; + } + } + + //We assume that all splines use the same interval, + //which saves a few floating divisions, so check to make + //sure the assumption is good. + for(int i=0; i< splines.GetDim(0); i++) { + if(!splines(0).match(splines(i))) + error("spline ", i, " doesn't match the first one "); + } +} + + +//------------------------------------------------------------------------- +int Cubic_spline::readspline(vector & words) { + unsigned int pos=0; + vector > splinefits; + vector onesection; + while(readsection(words, pos, onesection, "SPLINE")) { + splinefits.push_back(onesection); + } + if(splinefits.size()==0) { + return 0; + } + + nsplines=splinefits.size(); + splines.Resize(nsplines); + symmetry.Resize(nsplines); + symmetry=sym_S; + nfuncspline.Resize(nsplines); + + indiv_symmetry.Resize(nsplines); + indiv_symmetry=isym_S; + nfuncspline=1; + nfunctions=nsplines; + for(int s=0; s< nsplines; s++) { + splines(s).readspline(splinefits[s]); + } + + findCutoffs(); + return 1; +} +//------------------------------------------------------------------------- +void Cubic_spline::raw_input(ifstream & input) +{ + + splines.Resize(nsplines); + for(int s=0; s< nsplines; s++) { + splines(s).raw_input(input); + } +} + + +//------------------------------------------------------------- + + + +int Cubic_spline::nfunc() +{ + + int totf=0; //running total of number of functions. + //return number of functions with symmetry + + for(int i=0; i< nsplines; i++) + { + switch(symmetry(i)) + { + case sym_S: + totf+= 1; + break; + case sym_P: + totf+= 3; + break; + case sym_5D: + totf+=5; + break; + case sym_6D: + totf+= 6; + break; + case sym_7F: + totf+=7; + break; + case sym_10F: + totf+= 10; + break; + case sym_15G: + totf+=15; + break; + default: + cout << "Bad symmetry in Cubic_spline::nfunc()\n"; + cout << symmetry(i) << endl; + return 0; + } + } + return totf; +} + +//---------------------------------------------------------------------- + +doublevar Cubic_spline::cutoff(int n){ + assert(n & words,unsigned int & pos, + Array1 & parms){ + + doublevar spacing=parms(0); + int n= (int) parms(1); + double yp1=parms(2); + double ypn=parms(3); + int symmtype=0; + + if(parms.GetDim(0) > 4) + symmtype=(int) parms(4); + + assert(symmtype==0 || symmtype==1); + + string symm; + int ngauss; + + vector symmetry_temp; + + for(unsigned int p=pos; p exp(ngauss); + vector c(ngauss); + if(p+ngauss*3 >= words.size()) + { + error("Unexpected end of GAMESS section. Count is wrong."); + } + for(int i=0; i y(n); + Array1 x(n); + splines.Resize(nsplines); + symmetry.Resize(nsplines); + for(int i=0; i< nsplines; i++) { + symmetry(i)=symmetry_temp[i]; + } + + + const double normtol=1e-5; //tolerance for the normalization of the basis fn + for(int funcNum=0; funcNum normtol){ + //debug_write(cout, "Normalizing basis function, sum: ", sum, "\n"); + for(int j=0; j 0) { + const double smooth=1.2; + const double cutmax=requested_cutoff-1e-6; + const double cutmin=cutmax-smooth; + for(int j=0; j< n; j++) { + if(x(j) > cutmin) { + if(x(j) > cutmax) { //if we're beyond the cutoff completely + y(j)=0; + } + else { //if we're in the smooth cutoff region + double zz=(x(j)-cutmin)/smooth; + y(j) *= (1-zz*zz*zz*(6*zz*zz-15*zz+10)); + } + } + } + } + + + //--Estimate the derivatives on the boundaries + yp1=(y(1)-y(0))/spacing; + ypn=(y(n-1) - y(n-2) ) /spacing; + splines(funcNum).splinefit(x,y,yp1, ypn); + } + nfunctions=nfunc(); + + //cout << "symmetries " << endl; + + //--------------------------------------------- + //Assign the individual symmetries for GAMESS + indiv_symmetry.Resize(nfunctions); + nfuncspline.Resize(nsplines); + int totfunc=0; + for(int funcNum=0; funcNum < nsplines; funcNum++){ + //cout << "funcNum " << funcNum << endl; + //cout << "totfunc " << totfunc << endl; + switch(symmetry(funcNum)) + { + case sym_S: + nfuncspline(funcNum)=1; + indiv_symmetry(totfunc++)=isym_S; + break; + case sym_P: + nfuncspline(funcNum)=3; + indiv_symmetry(totfunc++)=isym_Px; + indiv_symmetry(totfunc++)=isym_Py; + indiv_symmetry(totfunc++)=isym_Pz; + break; + case sym_5D: + nfuncspline(funcNum)=5; //Crystal ordering + indiv_symmetry(totfunc++)=isym_Dz2r2; + indiv_symmetry(totfunc++)=isym_Dxz; + indiv_symmetry(totfunc++)=isym_Dyz; + indiv_symmetry(totfunc++)=isym_Dx2y2; + indiv_symmetry(totfunc++)=isym_Dxy; + break; + case sym_6D: + nfuncspline(funcNum)=6; + indiv_symmetry(totfunc++)=isym_Dxx; + indiv_symmetry(totfunc++)=isym_Dyy; + indiv_symmetry(totfunc++)=isym_Dzz; + indiv_symmetry(totfunc++)=isym_Dxy; + indiv_symmetry(totfunc++)=isym_Dxz; + indiv_symmetry(totfunc++)=isym_Dyz; + break; + case sym_7F: + error("Need to write an ordering for 7F functions" + " in Cubic_spline::build"); + case sym_10F: + nfuncspline(funcNum)=10; + indiv_symmetry(totfunc++)=isym_Fxxx; + indiv_symmetry(totfunc++)=isym_Fyyy; + indiv_symmetry(totfunc++)=isym_Fzzz; + indiv_symmetry(totfunc++)=isym_Fxxy; + indiv_symmetry(totfunc++)=isym_Fxxz; + indiv_symmetry(totfunc++)=isym_Fyyx; + indiv_symmetry(totfunc++)=isym_Fyyz; + indiv_symmetry(totfunc++)=isym_Fzzx; + indiv_symmetry(totfunc++)=isym_Fzzy; + indiv_symmetry(totfunc++)=isym_Fxyz; + break; + case sym_15G: + nfuncspline(funcNum)=15; + indiv_symmetry(totfunc++)=isym_Gxxxx; + indiv_symmetry(totfunc++)=isym_Gyyyy; + indiv_symmetry(totfunc++)=isym_Gzzzz; + indiv_symmetry(totfunc++)=isym_Gxxxy; + indiv_symmetry(totfunc++)=isym_Gxxxz; + indiv_symmetry(totfunc++)=isym_Gyyyx; + indiv_symmetry(totfunc++)=isym_Gyyyz; + indiv_symmetry(totfunc++)=isym_Gzzzx; + indiv_symmetry(totfunc++)=isym_Gzzzy; + indiv_symmetry(totfunc++)=isym_Gxxyy; + indiv_symmetry(totfunc++)=isym_Gxxzz; + indiv_symmetry(totfunc++)=isym_Gyyzz; + indiv_symmetry(totfunc++)=isym_Gxxyz; + indiv_symmetry(totfunc++)=isym_Gyyxz; + indiv_symmetry(totfunc++)=isym_Gzzxy; + break; + } + } + // cout << "done symmetries" << endl; + //------- + + findCutoffs(); + //cout << "done" << endl; + + //return and store number of functions with symmetry + return nfunctions; +} + +//---------------------------------------------------------------------- + +int Cubic_spline::showinfo(string & indent, ostream & os) +{ + os << indent << "Cubic spline for " << atomname << endl; + os << indent << nsplines << " radial functions\n"; + + os << indent << setw(10) << "function" << setw(10) << "symmetry" + << setw(10) << "cutoff" << endl; + int totfunc=0; + for(int i=0; i< nsplines; i++) { + os << indent << setw(10) << i << setw(10) << symmetry(i) + << setw(10) << rcut(totfunc) << endl; + totfunc+=nfuncspline(i); + } + + return 1; +} + +//---------------------------------------------------------------------- + +int Cubic_spline::writeinput(string & indent, ostream & os) +{ + os << indent << atomname << endl; + os << indent << "AOSPLINE \n"; + os << indent << "NORMTYPE " << norm_type << endl; + if(renormalize==false) { + os << indent << "NORENORMALIZE\n"; + } + if(requested_cutoff > 0 ) { + os << indent << "CUTOFF " << requested_cutoff << endl; + } + os << indent << "GAMESS { \n"; + for(int funcNum=0; funcNum & r, + Array1 & symvals, + const int startfill) +{ + + if(r(0) >= threshold) + { + int end=startfill+nfunctions; + for(int i=startfill; i< end; i++) + { + symvals(i)=0; + } + } + else { + + int interval=splines(0).getInterval(r(0)); + doublevar v, v2, v3, v4; + doublevar temp; + + int totf=startfill; + for(int i=0; i & r, + //!< in form r, r^2, x, y, z + Array2 & symvals, + //!< The values of the spline propogated through symmetry. For example, a p state would be a 3x3 matrix, and an s state a 1x3. + const int startfill +) +{ + + assert(r.GetDim(0) >= 5); + //cout << "spline interval " << interval << " r " << r(0) << endl; + if(r(0) >= threshold) + { + int end=startfill+nfunctions; + for(int i=startfill; i< end; i++) + { + for(int d=0; d< 5; d++) + { + symvals(i,d)=0; + } + } + } + else + { + //cout << "calculating spline\n"; + //int interval=(int)(r(0)/spacing); + //doublevar height=r(0)-interval*spacing; + register doublevar rdp, v, h, v2, v3, v4, u2, v2u2; + register doublevar func, fdir, f2dir; + //doublevar funct[3]; + int totf=startfill; + //if( !(interval*spacing <= r(0))) { + // cout << "interval " << interval << "\nspacing " << spacing + // << "\nr(0) " << r(0) << endl; + //} + assert(r(0) < threshold); + assert(symvals.GetDim(0) >= nfunctions); + //assert(interval*spacing <=r(0)); + //assert((interval+1)*spacing >= r(0)); + //assert(height & r, + Array2 & symvals, + const int startfill) { + assert(r.GetDim(0) >= 5); + assert(symvals.GetDim(1)==10); + assert(symvals.GetDim(0)>= startfill+nfunctions); + //cout << "spline interval " << interval << " r " << r(0) << endl; + if(r(0) >= threshold) + { + int end=startfill+nfunctions; + for(int i=startfill; i< end; i++) + { + for(int d=0; d< 10; d++) + { + symvals(i,d)=0; + } + } + } + else + { + register doublevar rdp, v, h, v2, v3, v4, u2; + register doublevar func, fdir, f2dir; + int totf=startfill; + int interval=splines(0).getInterval(r(0)); + doublevar ovr2=1.0/r(1); + doublevar x2r2=r(2)*r(2)*ovr2; + doublevar y2r2=r(3)*r(3)*ovr2; + doublevar z2r2=r(4)*r(4)*ovr2; + doublevar xyr2=r(2)*r(3)*ovr2; + doublevar xzr2=r(2)*r(4)*ovr2; + doublevar yzr2=r(3)*r(4)*ovr2; + doublevar x=r(2),y=r(3),z=r(4); + + for(int i=0; i & words, + unsigned int & pos) +{ + //cout << "gauss read " << endl; + unsigned int startpos=pos; + + centername=words[0]; + + vector alphatxt; + + + if(!readvalue(words, pos, cusp, "CUSP")) { + error("Need CUSP section in Cutoff_cusp"); + } + + pos=startpos; + if(!readvalue(words, pos, gamma, "GAMMA") ) { + error("Need GAMMA in Cutoff_cusp"); + } + pos=startpos; + if(!readvalue(words, pos, rcut, "CUTOFF") ) { + error("Need CUTOFF in Cutoff_cusp"); + } + + if(rcut < 0) { + error("Cutoff must be greater than zero in Cutoff_cusp. I read ", rcut); + } + pade0=1./(3.+gamma); + + return 0; +} + +void Cutoff_cusp::getVarParms(Array1 & parms) { + //cout << "getVarParms " << endl; + parms.Resize(1); + parms(0)=log(gamma); + //cout << "parms out " << parms(0) << endl; +} + +void Cutoff_cusp::setVarParms(Array1 & parms) { + + assert(parms.GetDim(0)==1); + + gamma=exp(parms(0)); + pade0=1./(3+gamma); + //cout << "parms in " << parms(0) << endl; +} + +int Cutoff_cusp::nfunc() +{ + return 1; +} + +int Cutoff_cusp::showinfo(string & indent, ostream & os) +{ + os << indent << "Cutoff cusp\n"; + os << indent << "Gamma " << gamma; + os << " Cusp " << cusp << endl; + return 1; +} + +int Cutoff_cusp::writeinput(string & indent, ostream & os) +{ + os << indent << centername << endl; + os << indent << "CUTOFF_CUSP\n"; + os << indent << "GAMMA " << gamma << endl; + os << indent << "CUSP " << cusp << endl; + os << indent << "CUTOFF " << rcut << endl; + return 1; +} + +void Cutoff_cusp::raw_input(ifstream & input) +{error("Raw input not supported by Cutoff_cusp");} + +void Cutoff_cusp::calcVal(const Array1 & r, + Array1 & symvals, + const int startfill) +{ + assert(r.GetDim(0) >= 5); + assert(symvals.GetDim(0) >= 1+startfill); + if(r(0) < rcut) { + doublevar zz=r(0)/rcut; + doublevar zz2=zz*zz; + doublevar pp=zz-zz2+zz*zz2/3; + doublevar pade=1./(1+gamma*pp); + symvals(startfill)=cusp*rcut*(pp*pade-pade0); + } + else { + symvals(startfill)=0; + } + +} + +void Cutoff_cusp::calcLap( + const Array1 & r, + Array2 & symvals, + const int startfill +) +{ + assert(r.GetDim(0) >=5); + assert(symvals.GetDim(0) >= 1+startfill); + assert(symvals.GetDim(1) >= 5); + if(r(0) < rcut) { + doublevar zz=r(0)/rcut; + doublevar zz2=zz*zz; + doublevar pp=zz-zz2+zz*zz2/3; + doublevar pade=1./(1+gamma*pp); + symvals(startfill,0)=cusp*rcut*(pp*pade-pade0); + doublevar pade2=pade*pade; + doublevar ppd=1.-2.*zz+zz2; + doublevar ppdd=-2.+2.*zz; + doublevar dadr=ppd*pade2/r(0); + doublevar dadr2=ppdd*pade2/rcut + -2.*gamma*ppd*ppd*pade2*pade/rcut + +2.*dadr; + + for(int i=1; i< 4; i++) { + symvals(startfill, i)=cusp*dadr*r(i+1); + } + symvals(startfill, 4)=cusp*dadr2; + } + else { + for(int i=0; i< 5; i++) + symvals(startfill, i)=0; + } +} + +//------------------------------------------------------------------------ diff --git a/src/basis_function/Cutoff_cusp.h b/src/basis_function/Cutoff_cusp.h new file mode 100644 index 00000000..53f42009 --- /dev/null +++ b/src/basis_function/Cutoff_cusp.h @@ -0,0 +1,88 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ + +#ifndef CUTOFF_CUSP_H_INCLUDED +#define CUTOFF_CUSP_H_INCLUDED + +#include "Basis_function.h" + +/*! + +*/ +class Cutoff_cusp: public Basis_function +{ +public: + + + //----------------------------------------------------- + + + virtual int read( + vector & words, + //!< The words from the basis section that will create this basis function + unsigned int & pos + + ); + + + + + int nfunc(); + virtual string label() + { + return centername; + } + doublevar cutoff(int ) + { + return rcut; + } + + int showinfo(string & indent, ostream & os); + int writeinput(string &, ostream &); + + void raw_input(ifstream & input); + + void calcVal(const Array1 & r, + Array1 & symvals, + const int startfill=0); + + void calcLap( + const Array1 & r, + Array2 & symvals, + const int startfill=0 + ); + + virtual void getVarParms(Array1 & parms); + virtual void setVarParms(Array1 & parms); + virtual int nparms() { + return 1; + } + +private: + + doublevar rcut; + string centername; + doublevar gamma; + doublevar cusp; + doublevar pade0; +}; + +#endif // CUTOFF_CUSP_H_INCLUDED +//-------------------------------------------------------------------------- diff --git a/src/basis_function/Exponent_cusp.cpp b/src/basis_function/Exponent_cusp.cpp new file mode 100644 index 00000000..c7f26d54 --- /dev/null +++ b/src/basis_function/Exponent_cusp.cpp @@ -0,0 +1,120 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ + +#include "Exponent_cusp.h" +#include "qmc_io.h" + +/* + +*/ +int Exponent_cusp::read( + vector & words, + unsigned int & pos) +{ + //cout << "gauss read " << endl; + unsigned int startpos=pos; + + centername=words[0]; + + vector alphatxt; + + + if(!readvalue(words, pos, cusp, "CUSP")) { + error("Need CUSP section in Exponent_cusp"); + } + pos=startpos; + + if(!readvalue(words, pos, gamma, "GAMMA") ) { + error("Need GAMMA in Exponent_cusp"); + } + rcut=1e99; + + + return 0; +} + +void Exponent_cusp::getVarParms(Array1 & parms) { + //cout << "getVarParms " << endl; + parms.Resize(1); + parms(0)=log(gamma); + //cout << "parms out " << parms(0) << endl; +} + +void Exponent_cusp::setVarParms(Array1 & parms) { + + assert(parms.GetDim(0)==1); + + gamma=exp(parms(0)); + //cout << "parms in " << parms(0) << endl; +} + +int Exponent_cusp::nfunc() +{ + return 1; +} + +int Exponent_cusp::showinfo(string & indent, ostream & os) +{ + os << indent << "Exponential cusp\n"; + os << indent << "Gamma " << gamma; + os << " Cusp " << cusp << endl; + return 1; +} + +int Exponent_cusp::writeinput(string & indent, ostream & os) +{ + os << indent << centername << endl; + os << indent << "EXPONENTIAL_CUSP\n"; + os << indent << "GAMMA " << gamma << endl; + os << indent << "CUSP " << cusp << endl; + return 1; +} + +void Exponent_cusp::raw_input(ifstream & input) +{error("Raw input not supported by Exponent_cusp");} + +void Exponent_cusp::calcVal(const Array1 & r, + Array1 & symvals, + const int startfill) +{ + //cout << "calcVal " << endl; + int index=startfill; + doublevar reducedexp=min(gamma*r(0), (doublevar) 22.0); + + symvals(index)=-cusp*exp(-reducedexp)/gamma; + +} + +void Exponent_cusp::calcLap( + const Array1 & r, + Array2 & symvals, + const int startfill +) +{ + doublevar reducedexp=min(gamma*r(0), (doublevar) 22.0); + doublevar exponent=cusp*exp(-reducedexp); + symvals(startfill,0)=-exponent/gamma; + for(int d=1; d< 4; d++) { + symvals(startfill, d)=exponent*r(d+1)/r(0); + } + symvals(startfill, 4)=(2/r(0)-gamma)*exponent; +} + +//------------------------------------------------------------------------ diff --git a/src/basis_function/Exponent_cusp.h b/src/basis_function/Exponent_cusp.h new file mode 100644 index 00000000..dc4b256d --- /dev/null +++ b/src/basis_function/Exponent_cusp.h @@ -0,0 +1,87 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ + +#ifndef EXPONENT_CUSP_H_INCLUDED +#define EXPONENT_CUSP_H_INCLUDED + +#include "Basis_function.h" + +/*! + +*/ +class Exponent_cusp: public Basis_function +{ +public: + + + //----------------------------------------------------- + + + virtual int read( + vector & words, + //!< The words from the basis section that will create this basis function + unsigned int & pos + + ); + + + + + int nfunc(); + virtual string label() + { + return centername; + } + doublevar cutoff(int ) + { + return rcut; + } + + int showinfo(string & indent, ostream & os); + int writeinput(string &, ostream &); + + void raw_input(ifstream & input); + + void calcVal(const Array1 & r, + Array1 & symvals, + const int startfill=0); + + void calcLap( + const Array1 & r, + Array2 & symvals, + const int startfill=0 + ); + + virtual void getVarParms(Array1 & parms); + virtual void setVarParms(Array1 & parms); + virtual int nparms() { + return 1; + } + +private: + + doublevar rcut; + string centername; + doublevar gamma; + doublevar cusp; +}; + +#endif // EXPONENT_CUSP_H_INCLUDED +//-------------------------------------------------------------------------- diff --git a/src/basis_function/Gaussian_function.cpp b/src/basis_function/Gaussian_function.cpp new file mode 100644 index 00000000..a68d6fc2 --- /dev/null +++ b/src/basis_function/Gaussian_function.cpp @@ -0,0 +1,217 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ + +#include "Gaussian_function.h" +#include "qmc_io.h" + +/* + +*/ +int Gaussian_function::read( + vector & words, + unsigned int & pos) +{ + //cout << "gauss read " << endl; + unsigned int startpos=pos; + + centername=words[0]; + + vector alphatxt; + + + if(!readsection(words, pos, alphatxt, "ALPHA")) { + error("Need ALPHA section in Gaussian_function"); + } + pos=startpos; + + if(!readvalue(words, pos, rcut, "CUTOFF") ) { + rcut=1e99; + } + + if(!readvalue(words, pos, cut_smooth, "SMOOTHING")) { + cut_smooth=1.2; + } + rcut_start=rcut-cut_smooth; + + + nmax=alphatxt.size(); + alpha.Resize(nmax); + for(int i=0; i< nmax; i++) { + alpha(i)=atof(alphatxt[i].c_str()); + //cout << "alpha(i) " << alpha(i) << " " << alphatxt[i]<< endl; + if( alpha(i) <= 0) { + error("Alpha must be greater than zero in Gaussian function."); + } + } + + //cout << "done " << endl; + return 0; +} + +void Gaussian_function::getVarParms(Array1 & parms) { + //cout << "getVarParms " << endl; + parms.Resize(nmax); + for(int i=0; i< nmax; i++) { + parms(i)=log(alpha(i)); + } + //cout << "done" << endl; +} + +void Gaussian_function::setVarParms(Array1 & parms) { + //cout << "setVArParms " << endl; + assert(parms.GetDim(0)==nmax); + + for(int i=0; i< nmax; i++) { + alpha(i)=exp(parms(i)); + } + //cout << "done" << endl; +} + +int Gaussian_function::nfunc() +{ + return nmax; +} + +int Gaussian_function::showinfo(string & indent, ostream & os) +{ + os << indent << "Gaussian function\n"; + os << indent << "Number of functions " << nmax << endl; + os << indent << "Alpha "; + for(int i=0; i< nmax; i++) os << alpha(i) << " "; + os << endl; + return 1; +} + +int Gaussian_function::writeinput(string & indent, ostream & os) +{ + os << indent << centername << endl; + os << indent << "GAUSSIAN\n"; + os << indent << "CUTOFF " << rcut << endl; + os << indent << "SMOOTHING " << cut_smooth << endl; + os << indent << "ALPHA { "; + for(int i=0; i< nmax; i++) { + os << alpha(i) << " "; + } + os << " } \n"; + return 1; +} + +void Gaussian_function::raw_input(ifstream & input) +{error("Raw input not supported by Gaussian_function");} + +void Gaussian_function::calcVal(const Array1 & r, + Array1 & symvals, + const int startfill) +{ + //cout << "calcVal " << endl; + int index=startfill; + + if(r(0) > rcut) { + for(int i=0; i< nmax; i++) { + symvals(index++) = 0; + } + } + else if(r(0) > rcut_start) { + for(int i=0; i< nmax; i++) { + doublevar norm=sqrt(alpha(i)/pi); + doublevar z=(r(0)-rcut_start)/cut_smooth; //cut_smooth=SMOOTHING rcut_start=CUTOFF-SMOOTHING + symvals(index++) = norm*exp(-alpha(i)*r(1))*(1-z*z*z*(6*z*z-15*z+10)); + } + } + else { + for(int i=0; i< nmax; i++) + { + doublevar norm=sqrt(alpha(i)/pi); + symvals(index++)=norm*exp(-alpha(i)*r(1)); + } + } + //cout << "done" << endl; + +} + +void Gaussian_function::calcLap( + const Array1 & r, + Array2 & symvals, + const int startfill +) +{ + //cout << "calcLap " << endl; + int index=startfill; + doublevar exponent, dadr, d2adr2; + if(r(0) > rcut) { + for(int i=0; i< nmax; i++) { + for(int d=0; d< 5; d++) { + symvals(index,d)=0; + } + index++; + } + } + else if(r(0) > rcut_start) { + doublevar f, dfdr, d2fdr2; //cutoff function + for(int i=0; i< nmax; i++) { + doublevar norm=sqrt(alpha(i)/pi); + exponent=exp(-alpha(i)*r(1)); + dadr=-2*alpha(i)*exponent; + d2adr2=(4*alpha(i)*alpha(i)*r(1)-6*alpha(i))*exponent; + + //find cutoff function + doublevar z=(r(0)-rcut_start)/cut_smooth; + f=(1-z*z*z*(6*z*z-15*z+10)); + dfdr=z*z*30*(2*z-z*z-1)/(cut_smooth*r(0)); + d2fdr2=z*(180*z-120*z*z-60)/(cut_smooth*cut_smooth); + + symvals(index,0)=norm*f*exponent; + //doublevar dotproduct=0; + doublevar r_derivative=f*dadr+exponent*dfdr; + for(int j=1; j<4; j++) { + symvals(index,j)=norm*(r_derivative)*r(j+1); + //dotproduct+=dadr*dfdr*r(j+1)*r(j+1); + } + symvals(index,4)=norm*(f*d2adr2+2*dadr*dfdr*r(1)+exponent*d2fdr2+2*r_derivative); + + + index++; + } + } + else { + for(int i=0; i< nmax; i++) + { + doublevar norm=sqrt(alpha(i)/pi); + exponent=exp(-alpha(i)*r(1)); + symvals(index,0)=norm*exponent; + + dadr=-2*alpha(i)*exponent; + + d2adr2=(4*alpha(i)*alpha(i)*r(1)-6*alpha(i))*exponent; + + + for(int j=1; j<4; j++) + { + symvals(index,j)=norm*dadr*r(j+1); + } + symvals(index,4)=norm*d2adr2; + index++; + } + } + + //cout << "done" << endl; +} + +//------------------------------------------------------------------------ diff --git a/src/basis_function/Gaussian_function.h b/src/basis_function/Gaussian_function.h new file mode 100644 index 00000000..131e7c74 --- /dev/null +++ b/src/basis_function/Gaussian_function.h @@ -0,0 +1,93 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ + +#ifndef GAUSSIAN_FUNCTION_H_INCLUDED +#define GAUSSIAN_FUNCTION_H_INCLUDED + +#include "Basis_function.h" + +/*! + +*/ +class Gaussian_function: public Basis_function +{ +public: + + Gaussian_function() + {} + ~Gaussian_function() + {} + + //----------------------------------------------------- + + + virtual int read( + vector & words, + //!< The words from the basis section that will create this basis function + unsigned int & pos + //!< The current position in the words(important if one basis section makes several functions); will be incremented as the Basis_function reads the words. + ); + + + + + int nfunc(); + virtual string label() + { + return centername; + } + doublevar cutoff(int ) + { + return rcut; + } + + int showinfo(string & indent, ostream & os); + int writeinput(string &, ostream &); + + void raw_input(ifstream & input); + + void calcVal(const Array1 & r, + Array1 & symvals, + const int startfill=0); + + void calcLap( + const Array1 & r, + Array2 & symvals, + const int startfill=0 + ); + + virtual void getVarParms(Array1 & parms); + virtual void setVarParms(Array1 & parms); + virtual int nparms() { + return nmax; + } + +private: + + doublevar rcut; + doublevar rcut_start; //Start of the cutoff function + doublevar cut_smooth; //Smoothing for cutoff + Array1 alpha; + int nmax; + string centername; +}; + +#endif // GAUSSIAN_FUNCTION_H_INCLUDED +//-------------------------------------------------------------------------- diff --git a/src/basis_function/Gen_pade_function.cpp b/src/basis_function/Gen_pade_function.cpp new file mode 100644 index 00000000..8e2e0fbb --- /dev/null +++ b/src/basis_function/Gen_pade_function.cpp @@ -0,0 +1,252 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ + +#include "Gen_pade_function.h" +#include "qmc_io.h" + +/* + +*/ +int Gen_pade_function::read( + vector & words, + unsigned int & pos +) +{ + + cout << "creating genpade" << endl; + unsigned int startpos=pos; + centername=words[0]; + rcut=10; //shouldn't be used at the moment. + + + vector alphatxt; + if(readsection(words, pos=startpos, alphatxt, "ALPHA")) { + nmax=alphatxt.size(); + alpha.Resize(nmax); + for(int i=0; i< nmax; i++) + { + alpha(i)=atof(alphatxt[i].c_str()); + } + } + else { + error("Need ALPHA in GENPADE function"); + } + + symmetry.Resize(nmax); + vector symmtxt; + totfunc=0; + if(readsection(words, pos=startpos, symmtxt, "SYMMETRY")) { + if(symmtxt.size() != alphatxt.size()) { + error("SYMMETRY and ALPHA must have the same size in GENPADE"); + } + for(int i=0; i< nmax; i++) { + if(symmtxt[i]=="S") { + symmetry(i)=0; + totfunc++; + } + else if(symmtxt[i]=="P") { + totfunc+=3; + symmetry(i)=1; + } + else + error("Unknown symmetry in SYMMETRY of GENPADE: ", symmtxt[i]); + } + } + else { + symmetry=0; + totfunc=nmax; + } + + return 1; +} + +//---------------------------------------------------------------------- + +void Gen_pade_function::getVarParms(Array1 & parms) { + parms.Resize(nmax); + for(int i=0; i< nmax; i++) { + parms(i)=log(alpha(i)); + } +} + +//---------------------------------------------------------------------- + +void Gen_pade_function::setVarParms(Array1 & parms) { + assert(parms.GetDim(0)==nmax); + + for(int i=0; i< nmax; i++) { + alpha(i)=exp(parms(i)); + } + +} + +//---------------------------------------------------------------------- + +int Gen_pade_function::nfunc() +{ + return totfunc; +} + +//---------------------------------------------------------------------- + +int Gen_pade_function::showinfo(string & indent, ostream & os) +{ + os << indent << "Generalized Pade function\n"; + os << indent << "Number of functions " << nmax << endl; + return 1; +} + +//---------------------------------------------------------------------- + +int Gen_pade_function::writeinput(string & indent, ostream & os) +{ + os << indent << centername << endl; + os << indent << "GENPADE\n"; + os << indent << "ALPHA { "; + for(int i=0; i< nmax; i++) { + os << alpha(i) << " "; + } + os << " }\n"; + + os << indent << "SYMMETRY { "; + for(int i=0; i< nmax; i++ ) { + if(symmetry(i)==0) + os << "S "; + else if(symmetry(i)==1) + os << "P "; + else error("unknown symmetry in Gen_function::writeinput"); + } + os << " }\n"; + return 1; +} + +//---------------------------------------------------------------------- + +void Gen_pade_function::raw_input(ifstream & input) +{} + + +//---------------------------------------------------------------------- + +void Gen_pade_function::calcVal(const Array1 & r, + Array1 & symvals, + const int startfill) +{ + + //cout << "calcVal " << endl; + + doublevar pade; // + + + int index=startfill; + doublevar f; + for(int i=0; i< nmax; i++) + { + pade=alpha(i)/(1.+alpha(i)*r(0)); + f=pade*pade*r(1); + switch(symmetry(i)) { + case 0: + symvals(index++)=f; + break; + case 1: + symvals(index++)=f*r(2); + symvals(index++)=f*r(3); + symvals(index++)=f*r(4); + break; + default: + error("unknown symmetry in Gen_pade_function::calcVal"); + } + + } + + + //cout << "done" << endl; +} + +//---------------------------------------------------------------------- + +void Gen_pade_function::calcLap( + const Array1 & r, + Array2 & symvals, + const int startfill +) +{ + + doublevar pade, // + app, //alpha(i)*pade*pade + dadr, //the first derivative wrt r + d2adr2; //laplacian of the radial part(d2f/dr2 + 2/r df/dr) + doublevar f; + int index=startfill; + for(int i=0; i< nmax; i++) + { + pade=1.0/(1.+alpha(i)*r(0)); + app=alpha(i)*alpha(i)*pade*pade; + dadr=app*pade; + dadr+=dadr; + d2adr2=3.0*dadr*pade; + f=app*r(1); + + + switch(symmetry(i)) { + case 0: + symvals(index,0)=f; + for(int j=1; j<4; j++) + { + symvals(index,j)=dadr*r(j+1); + } + symvals(index,4)=d2adr2; + index++; + break; + case 1: + doublevar rdp; + + symvals(index,0)=f*r(2); //px + rdp=dadr*r(2); + symvals(index,1)=rdp*r(2)+f; + symvals(index,2)=rdp*r(3); + symvals(index,3)=rdp*r(4); + symvals(index,4)=d2adr2*r(2)+2.*rdp; + index++; + + symvals(index,0)=f*r(3); //py + rdp=dadr*r(3); + symvals(index,1)=rdp*r(2); + symvals(index,2)=rdp*r(3)+f; + symvals(index,3)=rdp*r(4); + symvals(index,4)=d2adr2*r(3)+2.*rdp; + index++; + + symvals(index,0)=f*r(4); //pz + rdp=dadr*r(4); + symvals(index,1)=rdp*r(2); + symvals(index,2)=rdp*r(3); + symvals(index,3)=rdp*r(4)+f; + symvals(index,4)=d2adr2*r(4)+2.*rdp; + index++; + break; + default: + error("unknown symmetry in Gen_pade_function::calcLap: ", symmetry(i)); + } + } + +} + +//------------------------------------------------------------------------ diff --git a/src/basis_function/Gen_pade_function.h b/src/basis_function/Gen_pade_function.h new file mode 100644 index 00000000..44b26af9 --- /dev/null +++ b/src/basis_function/Gen_pade_function.h @@ -0,0 +1,114 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ + +#ifndef GEN_PADE_FUNCTION_H_INCLUDED +#define GEN_PADE_FUNCTION_H_INCLUDED + +#include "Basis_function.h" +/*! + +\brief +Generalized Pade function, which has P and S symmetry orbitals + +Function of the form: +\f[ +a_n(r) = \left( \frac{\alpha_nr}{1+\alpha_nr} \right)^2 +\f] +where \f$ \alpha_n = \alpha_0 / 2^{k}, 0 < n < nmax \f$ + +

    Keywords

    + + Required + +ALPHA - list of alpha's in the above equation + +NFUNC - Number of functions to create + + Optional + +SYMMETRY - list of symmetries for the alpha's ( S or P ) + +*/ + +class Gen_pade_function: public Basis_function +{ +public: + + Gen_pade_function() + {} + ~Gen_pade_function() + {} + + //----------------------------------------------------- + + + virtual int read( + vector & words, + //!< The words from the basis section that will create this basis function + unsigned int & pos + //!< The current position in the words(important if one basis section makes several functions); will be incremented as the Basis_function reads the words. + ); + + + + + int nfunc(); + virtual string label() + { + return centername; + } + doublevar cutoff(int ) + { + return 1e99; + } + + int showinfo(string & indent, ostream & os); + int writeinput(string &, ostream &); + + void raw_input(ifstream & input); + + void calcVal(const Array1 & r, + Array1 & symvals, + const int startfill=0); + + + void calcLap( + const Array1 & r, + Array2 & symvals, + const int startfill=0 + ); + + virtual void getVarParms(Array1 & parms); + virtual void setVarParms(Array1 & parms); + virtual int nparms() { + return nmax; + } + +private: + doublevar rcut; + Array1 alpha; + int nmax; + string centername; + int totfunc; + Array1 symmetry; //!< nmax elements, 0-S, 1-P +}; + +#endif // GEN_PADE_FUNCTION_H_INCLUDED +//-------------------------------------------------------------------------- diff --git a/src/basis_function/Pade_function.cpp b/src/basis_function/Pade_function.cpp new file mode 100644 index 00000000..b21b2926 --- /dev/null +++ b/src/basis_function/Pade_function.cpp @@ -0,0 +1,186 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ + +#include "Pade_function.h" +#include "qmc_io.h" + +/* + +*/ +int Pade_function::read( + vector & words, + unsigned int & pos +) +{ + + unsigned int startpos=pos; + centername=words[0]; + rcut=10; //shouldn't be used at the moment. + + if(!readvalue(words, pos=startpos, nmax, "NFUNC")) { + error("Need NMAX in PADE function"); + } + alpha.Resize(nmax); + + + if(readvalue(words, pos=startpos, alpha0, "ALPHA0")) { + for(int i=0; i< nmax; i++) + { + alpha(i)=alpha0/pow(2.0, i); + } + } + else { + error("Need ALPHA0 in PADE function"); + } + + return 0; +} + +void Pade_function::getVarParms(Array1 & parms) { + parms.Resize(1); + parms(0)=log(alpha0); +} + +void Pade_function::setVarParms(Array1 & parms) { + assert(parms.GetDim(0)==1); + + alpha0=exp(parms(0)); + for(int i=0; i< nmax; i++) { + alpha(i)=alpha0/pow(2.0,i); + } + +} + +int Pade_function::nfunc() +{ + return nmax; +} + +int Pade_function::showinfo(string & indent, ostream & os) +{ + os << indent << "Pade function\n"; + os << indent << "Number of functions " << nmax << endl; + os << indent << "Alpha_0 " << alpha(0) << endl; + return 1; +} + +int Pade_function::writeinput(string & indent, ostream & os) +{ + os << indent << centername << endl; + os << indent << "PADE\n"; + os << indent << "NFUNC " << nmax << endl; + os << indent << "ALPHA0 " << alpha(0) << endl; + return 1; +} + +void Pade_function::raw_input(ifstream & input) +{} + +void Pade_function::calcVal(const Array1 & r, + Array1 & symvals, + const int startfill) +{ + //Removing the cutoff radius for the moment + //cout << "Calculating Pade Function\n"; + //if( r(0) > rcut) { + //symvals=0; + //} + //else { + //if(startfill != 1) cout << "wrong startfill" << endl; + doublevar pade; // + + + int index=startfill; + for(int i=0; i< nmax; i++) + { + //This can probably be optimized with a little effort. + //cout << "i=" << i << endl; + //cout << "alpha " << alpha(i) << endl; + pade=alpha(i)/(1.+alpha(i)*r(0)); + symvals(index++)=pade*pade*r(1); + } + + //cout << "Leaving Pade function\n"; + + //for(int i=0; i< symvals.GetDim(1); i++) { + // cout << "val:symvals " << i << symvals(i) << endl; + //} + +} + +void Pade_function::calcLap( + const Array1 & r, + Array2 & symvals, + const int startfill +) +{ + + //if( r(0) > rcut) { + // symvals=0; + // } + //else { + //if(startfill != 1) cout << "wrong startfill" << endl; + doublevar pade, // + app, //alpha(i)*pade*pade + dadr, //the first derivative wrt r + d2adr2; //second derivative wrt r + //symvals.Resize(nmax+1, 5); + //symvals(0,0)=1; + //for(int d=1; d< 5; d++) { + // symvals(0,d)=0; + //} + int index=startfill; + for(int i=0; i< nmax; i++) + { + //This can probably be optimized with a little effort. + //cout << "i=" << i << endl; + //cout << "alpha " << alpha(i) << endl; + pade=1.0/(1.+alpha(i)*r(0)); + app=alpha(i)*alpha(i)*pade*pade; + symvals(index,0)=app*r(1); + + dadr=app*pade; + dadr+=dadr; + + d2adr2=3.0*dadr*pade; + + //cout << "a/b_m " << symvals(i+1,0) << endl; + //cout << "a/b_md " << dadr << endl; + //cout << "d2adr2 " << d2adr2 << endl; + for(int j=1; j<4; j++) + { + symvals(index,j)=dadr*r(j+1); + } + symvals(index,4)=d2adr2; + index++; + } + //for(int i=0; i< symvals.GetDim(1); i++) { + // for(int d=0; d< 5; d++) { + // cout << "lap:symvals(" << i<<"," << d << ") " + // << symvals(i,d) << endl; + // } + //} + + //} + + +} + +//------------------------------------------------------------------------ diff --git a/src/basis_function/Pade_function.h b/src/basis_function/Pade_function.h new file mode 100644 index 00000000..f52b6f6e --- /dev/null +++ b/src/basis_function/Pade_function.h @@ -0,0 +1,92 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ + +#ifndef PADE_FUNCTION_H_INCLUDED +#define PADE_FUNCTION_H_INCLUDED + +#include "Basis_function.h" +/*! + +*/ + +class Pade_function: public Basis_function +{ +public: + + Pade_function() + {} + ~Pade_function() + {} + + //----------------------------------------------------- + + + virtual int read( + vector & words, + //!< The words from the basis section that will create this basis function + unsigned int & pos + //!< The current position in the words(important if one basis section makes several functions); will be incremented as the Basis_function reads the words. + ); + + + + + int nfunc(); + virtual string label() + { + return centername; + } + doublevar cutoff(int ) + { + return 1e99; + } + + int showinfo(string & indent, ostream & os); + int writeinput(string &, ostream &); + + void raw_input(ifstream & input); + + void calcVal(const Array1 & r, + Array1 & symvals, + const int startfill=0); + + + void calcLap( + const Array1 & r, + Array2 & symvals, + const int startfill=0 + ); + + virtual void getVarParms(Array1 & parms); + virtual void setVarParms(Array1 & parms); + virtual int nparms() { + return 1; + } + +private: + doublevar alpha0; + doublevar rcut; + Array1 alpha; + int nmax; + string centername; +}; + +#endif // PADE_FUNCTION_H_INCLUDED +//-------------------------------------------------------------------------- diff --git a/src/basis_function/Planewave_function.cpp b/src/basis_function/Planewave_function.cpp new file mode 100644 index 00000000..13a5373a --- /dev/null +++ b/src/basis_function/Planewave_function.cpp @@ -0,0 +1,168 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ + +#include "Planewave_function.h" +#include "qmc_io.h" + +/*! + Note: We may need to change this to read directly from a file, for memory + constraints.. +*/ +int Planewave_function::read( + vector & words, + unsigned int & pos) +{ + //cout << "making planewave basis " << endl; + unsigned int startpos=pos; + + centername=words[0]; + + pos=startpos; + vector gvectxt; + if(!readsection(words, pos, gvectxt, "GVECTOR")) { + error("Need GVECTOR in PLANEWAVE input"); + } + if(gvectxt.size() % 3 != 0) { + error("Bad count on GVECTOR." + " There must be sets of three numbers."); + } + nmax=gvectxt.size()/3; + //cout << nmax << " g-vectors " << endl; + g_vector.Resize(nmax, 3); + int counter=0; + for(int i=0; i< nmax; i++) { + for(int d=0; d< 3; d++) { + g_vector(i,d)=atof(gvectxt[counter].c_str()); + counter++; + } + } + //cout << "done " << endl; + return 0; +} + +void Planewave_function::getVarParms(Array1 & parms) { + //cout << "getVarParms " << endl; + parms.Resize(0); +} + +void Planewave_function::setVarParms(Array1 & parms) { + //cout << "setVArParms " << endl; + assert(parms.GetDim(0)==0); +} + +int Planewave_function::nfunc() +{ + //cout << "Planewave::nfunc() " << nmax << endl; + return 2*nmax; +} + +int Planewave_function::showinfo(string & indent, ostream & os) +{ + os << indent << "Planewave function\n"; + os << indent << nmax << " plane waves" << endl; + return 1; +} + +int Planewave_function::writeinput(string & indent, ostream & os) +{ + os << indent << centername << endl; + os << indent << "PLANEWAVE\n"; + os << indent << "GVECTOR { \n"; + for(int i=0; i< nmax; i++) { + os << indent << " " << g_vector(i,0) << " " << g_vector(i,1) + << " " << g_vector(i,2) << endl; + } + os << indent << "}" << endl; + return 1; +} + +void Planewave_function::raw_input(ifstream & input) +{error("Raw input not supported by Planewave_function");} + +void Planewave_function::calcVal(const Array1 & r, + Array1 & symvals, + const int startfill) +{ + //cout << "calcVal " << endl; + assert(r.GetDim(0) >= 5); + assert(symvals.GetDim(0) >= nmax*2+startfill); + int index=startfill; + doublevar gdotr, t_cos, t_sin; + for(int i=0; i< nmax; i++) { + gdotr=g_vector(i,0)*r(2)+g_vector(i,1)*r(3)+g_vector(i,2)*r(4); +#ifdef __USE_GNU + sincos(gdotr, &t_sin, &t_cos); +#else + t_cos=cos(gdotr); + t_sin=sin(gdotr); +#endif + symvals(index++)=t_cos; + symvals(index++)=t_sin; + } + //cout << "done" << endl; +} + +void Planewave_function::calcLap( + const Array1 & r, + Array2 & symvals, + const int startfill +) +{ + //cout << "calcLap " << endl; + assert(r.GetDim(0) >= 5); + assert(symvals.GetDim(0) >= nmax*2+startfill); + assert(symvals.GetDim(1) >= 5); + + int index=startfill; + doublevar gdotr, t_cos, t_sin; + doublevar gsquared; + for(int fn=0; fn< nmax; fn++) { + gdotr=g_vector(fn,0)*r(2)+g_vector(fn,1)*r(3)+g_vector(fn,2)*r(4); + + //Should probably store this one.. + gsquared=g_vector(fn,0)*g_vector(fn,0) + +g_vector(fn,1)*g_vector(fn,1) + +g_vector(fn,2)*g_vector(fn,2); +#ifdef __USE_GNU + sincos(gdotr, &t_sin, &t_cos); +#else + t_cos=cos(gdotr); + t_sin=sin(gdotr); +#endif + //cos function + symvals(index, 0)=t_cos; + for(int i=1; i< 4; i++) { + symvals(index, i)=-g_vector(fn, i-1)*t_sin; + } + symvals(index, 4)=-gsquared*t_cos; + index++; + + //sin function + symvals(index, 0)=t_sin; + for(int i=1; i< 4; i++) { + symvals(index, i)=g_vector(fn,i-1)*t_cos; + } + symvals(index, 4)=-gsquared*t_sin; + index++; + } + //cout << "done" << endl; +} + +//------------------------------------------------------------------------ diff --git a/src/basis_function/Planewave_function.h b/src/basis_function/Planewave_function.h new file mode 100644 index 00000000..5e0b73b9 --- /dev/null +++ b/src/basis_function/Planewave_function.h @@ -0,0 +1,92 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ + +#ifndef PLANEWAVE_FUNCTION_H_INCLUDED +#define PLANEWAVE_FUNCTION_H_INCLUDED + +#include "Basis_function.h" + +/*! + +Interleaves cos(gr) and sin(gr) for a number of g's. + +*/ +class Planewave_function: public Basis_function +{ +public: + + Planewave_function() + {} + ~Planewave_function() + {} + + //----------------------------------------------------- + + + virtual int read( + vector & words, + //!< The words from the basis section that will create this basis function + unsigned int & pos + //!< The current position in the words(important if one basis section makes several functions); will be incremented as the Basis_function reads the words. + ); + + + + + int nfunc(); + virtual string label() + { + return centername; + } + doublevar cutoff(int ) + { + return 1e99; + } + + int showinfo(string & indent, ostream & os); + int writeinput(string &, ostream &); + + void raw_input(ifstream & input); + + void calcVal(const Array1 & r, + Array1 & symvals, + const int startfill=0); + + void calcLap( + const Array1 & r, + Array2 & symvals, + const int startfill=0 + ); + + virtual void getVarParms(Array1 & parms); + virtual void setVarParms(Array1 & parms); + virtual int nparms() { + return 0; + } + +private: + + Array2 g_vector; + int nmax; + string centername; +}; + +#endif // PLANEWAVE_FUNCTION_H_INCLUDED +//-------------------------------------------------------------------------- diff --git a/src/basis_function/Poly_pade_function.cpp b/src/basis_function/Poly_pade_function.cpp new file mode 100644 index 00000000..0a9145d2 --- /dev/null +++ b/src/basis_function/Poly_pade_function.cpp @@ -0,0 +1,239 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ + +#include "Poly_pade_function.h" +#include "qmc_io.h" + +/* + +*/ +int Poly_pade_function::read( + vector & words, + unsigned int & pos +) +{ + + unsigned int startpos=pos; + centername=words[0]; + doublevar beta0; + pos=startpos; + if(!readvalue(words, pos, rcut, "RCUT")) + { +// rcut=10; + error("Need RCUT in POLYPADE"); + } + pos=startpos; + + vector betatxt; + if(readsection(words, pos, betatxt, "BETA")) + { + + cout << "BETA has been replaced with BETA0/NFUNC." << endl; + if(betatxt.size()==1) { + cout << "You can replace BETA { " << betatxt[0] << " } "; + cout << " with BETA0 " << betatxt[0] << " NFUNC 1 " << endl; + + } + else { + cout << "there are several betas, which actually doesn't make sense." + << endl; + } + + error("done"); + //beta.Resize(betatxt.size()); + //nmax=betatxt.size(); + //for(int i=0; i< nmax; i++) + //{ + // beta(i)=atof(betatxt[i].c_str()); + // if(beta(i) <= -1) + // { + // error("In POLYPADE, beta must be greater than -1, but I read ", + // beta(i)); + // } + //} + } + + if(readvalue(words, pos=0, beta0, "BETA0")) { + if(!readvalue(words, pos=0, nmax, "NFUNC")) { + error("Need NFUNC with BETA0 in POLY_PADE"); + } + beta.Resize(nmax); + beta(0)=beta0; + double beta1=log(beta0+1.00001); + for(int i=1; i< nmax; i++) { + beta(i)=exp(beta1+1.6*i)-1; + } + } + else { + error("Couldn't find BETA in POLY_PADE function " ); + } + + return 0; +} + +void Poly_pade_function::getVarParms(Array1 & parms) { + parms.Resize(1); + parms(0)=log(beta(0)+.9999999); + +/* + int parmmax=nparms(); + parms.Resize(parmmax); + for(int i=0; i< parmmax; i++) { + parms(i)=log(beta(i)+1.0 ); + } +*/ +} +void Poly_pade_function::setVarParms(Array1 & parms) { + assert(parms.GetDim(0)==1); + double beta0=exp(parms(0))-.9999999; + beta(0)=beta0; + + double beta1=log(beta0+1.00001); + for(int i=1; i< nmax; i++) { + beta(i)=exp(beta1+1.6*i)-1; + //cout << "betas " << beta(i) << endl; + } +} + + +int Poly_pade_function::nfunc() +{ + return nmax; +} + +int Poly_pade_function::showinfo(string & indent, ostream & os) +{ + os << indent << "Poly_pade function\n"; + os << indent << "beta : "; + for(int i=0; i< nmax; i++) + os << beta(i) << " "; + os << endl; + os << indent << "cutoff distance : " << rcut << endl; + return 1; +} + +int Poly_pade_function::writeinput(string & indent, ostream & os) +{ + os << indent << centername << endl; + os << indent << "POLYPADE\n"; + os << indent << "RCUT " << rcut << endl; + //os << indent << "BETA { "; + //for(int i=0; i< nmax; i++) + //{ + // os << beta(i) << " "; + //} + //os << " }\n"; + os << indent << "BETA0 " << beta(0) << endl; + os << indent << "NFUNC " << nmax << endl; + return 1; +} + +void Poly_pade_function::raw_input(ifstream & input) +{ + error("raw_input doesn't work for Poly_pade function"); +} + +void Poly_pade_function::calcVal(const Array1 & r, + Array1 & symvals, + const int startfill) +{ + //cout << "Calculating Poly_pade Function\n"; + if( r(0) > rcut) + { + int end=startfill+nmax; + for(int i=startfill; i< end; i++) + { + symvals(i)=0; + } + } + else + { + doublevar zz=r(0)/rcut; //reduced radius + doublevar zz2=zz*zz; //zz squared + doublevar zpp=zz2*(6.-8.*zz+3.*zz2); + doublevar zpp1=1-zpp; + doublevar zpade,crs; + int index=startfill; + for(int i=0; i< nmax; i++) + { + zpade=1./(1+beta(i)*zpp); + crs=zpp1*zpade; + symvals(index)=crs; + } + } +} + +void Poly_pade_function::calcLap( + const Array1 & r, + Array2 & symvals, + const int startfill +) +{ + + //cout << "Calculating Poly_pade Function\n"; + if( r(0) >= rcut) + { + //cout << "cutting off " << r(0) << endl; + int end=startfill+nmax; + for(int i=startfill; i< end; i++) + { + for(int d=0; d<5; d++) + { + symvals(i,d)=0; + } + } + } + else + { + doublevar zz=r(0)/rcut; //reduced radius + doublevar zz2=zz*zz; //zz squared + doublevar zpp=zz2*(6.-8.*zz+3.*zz2); + doublevar zpp1=1-zpp; + doublevar zppd=12.*zz*(1.-2.*zz+zz2); + doublevar zppdd2=6.-24.*zz+18*zz2; //dzpp/dzz^2 divided by two + doublevar zpade, zpade2, crs, crsd, crsdd2; + int index=startfill; + //cout << "-----------\n"; + //cout << this << " r(0) " << r(0) << endl; + for(int i=0; i< nmax; i++) + { + //cout << "beta " << beta(i) << endl; + zpade=1./(1+beta(i)*zpp); + zpade2=zpade*zpade; + + crs=zpp1*zpade; + crsd=-zppd*zpade2*(beta(i)+1)/(r(0)*rcut); + crsdd2=-zpade2*(zppdd2-beta(i)*zppd*zppd*zpade) + *(beta(i)+1)/(rcut*rcut); //d^2a/dr^2 divided by 2 + //cout << "crs " << crs << " crsd " << crsd + // << " crsdd2 " << crsdd2 << endl; + symvals(index,0)=crs; + for(int d=1; d< 4; d++) + { + symvals(index,d)=crsd*r(d+1); + } + symvals(index,4)=2*(crsdd2+crsd); + //cout << " laplacian times onehalf " << 2*(crsdd2+crsd) << endl; + index++; + } + } +} + +//------------------------------------------------------------------------ diff --git a/src/basis_function/Poly_pade_function.h b/src/basis_function/Poly_pade_function.h new file mode 100644 index 00000000..5e382e96 --- /dev/null +++ b/src/basis_function/Poly_pade_function.h @@ -0,0 +1,87 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ + +#ifndef POLY_PADE_FUNCTION_H_INCLUDED +#define POLY_PADE_FUNCTION_H_INCLUDED + +#include "Basis_function.h" + +/*! + +*/ +class Poly_pade_function: public Basis_function +{ +public: + + Poly_pade_function() + {} + ~Poly_pade_function() + {} + + //----------------------------------------------------- + + + virtual int read( + vector & words, + unsigned int & pos + ); + + + int nfunc(); + virtual string label() + { + return centername; + } + doublevar cutoff(int ) + { + return rcut; + } + + int showinfo(string & indent, ostream & os); + int writeinput(string &, ostream &); + + void raw_input(ifstream & input); + + void calcVal(const Array1 & r, + Array1 & symvals, + const int startfill=0); + + void calcLap( + const Array1 & r, + Array2 & symvals, + const int startfill=0 + ); + + virtual void getVarParms(Array1 & parms); + virtual void setVarParms(Array1 & parms); + virtual int nparms() { + return 1; + } + +private: + doublevar alpha0; + doublevar rcut; + Array1 beta; //curvature parameter + int nmax; + string centername; +}; + +#endif // POLY_PADE_FUNCTION_H_INCLUDED +//-------------------------------------------------------------------------- diff --git a/src/basis_function/Rgaussian_function.cpp b/src/basis_function/Rgaussian_function.cpp new file mode 100644 index 00000000..1705603e --- /dev/null +++ b/src/basis_function/Rgaussian_function.cpp @@ -0,0 +1,249 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ + +#include "Rgaussian_function.h" +#include "qmc_io.h" + +int Rgaussian_function::read( + vector & words, + unsigned int & pos) +{ + //cout << "gauss read " << endl; + unsigned int startpos=pos; + + centername=words[0]; + + + rcut=1e99; + vector < vector > exptemp; + vector < vector > coefftemp; + vector < vector > radtemp; + vector oldqmctxt; + + int maxL=0, maxExpansion=0; + if(readsection(words, pos=0, oldqmctxt, "OLDQMC")) { + double zeff; + int nlval; //number of l values that we'll read in + if(oldqmctxt.size() < 2) + error("badly formed OLDQMC section: size less than 2"); + int it=0; //position iterator + zeff=atof(oldqmctxt[it++].c_str()); + nlval=atoi(oldqmctxt[it++].c_str()); + + if(maxL < nlval) maxL=nlval; + Array1 nPerL(nlval); //number per l-value + + for(int l=0; l < nlval; l++) { + nPerL(l)=atoi(oldqmctxt[it++].c_str()); + if(maxExpansion < nPerL(l)) + maxExpansion=nPerL(l); + } + for(int l=0; l < nlval; l++) { + vector radtempl; + vector exptempl; + vector coefftempl; + + for(int j=0; j< nPerL(l); j++) { + doublevar temp; + temp=atof(oldqmctxt[it++].c_str()); + temp-=2; + radtempl.push_back(temp); + temp=atof(oldqmctxt[it++].c_str()); + exptempl.push_back(temp); + + temp=atof(oldqmctxt[it++].c_str()); + coefftempl.push_back(temp); + } + radtemp.push_back(radtempl); + exptemp.push_back(exptempl); + coefftemp.push_back(coefftempl); + } + } + else { + error("Try OLDQMC in RGAUSSIAN."); + } + + gaussexp.Resize(maxL, maxExpansion); + gausscoeff.Resize(maxL, maxExpansion); + radiusexp.Resize(maxL, maxExpansion); + numExpansion.Resize(maxL); + nmax=radtemp.size(); + + //cout << "maxL " << maxL << " maxExpansion " << maxExpansion << endl; + + assert( radtemp.size() == exptemp.size() ); + + + for(int l=0; l< nmax; l++) + { + + numExpansion(l) = radtemp[l].size(); + + for(int e=0; e< numExpansion(l); e++) + { + gaussexp(l, e) = exptemp[l][e]; + gausscoeff(l, e) = coefftemp[l][e]; + radiusexp(l, e) = radtemp[l][e]; + } + } + return 1; +} + +void Rgaussian_function::getVarParms(Array1 & parms) { + //cout << "getVarParms " << endl; + parms.Resize(nparms()); + + int count=0; + for(int l=0; l < nmax; l++) { + for(int e=0; e< numExpansion(l); e++) { + parms(count++)=log(gaussexp(l,e)); + //parms(count++)=gausscoeff(l,e); + } + } +} + +void Rgaussian_function::setVarParms(Array1 & parms) { + //cout << "setVArParms " << endl; + assert(parms.GetDim(0)==nparms()); + int count=0; + for(int l=0; l < nmax; l++) { + for(int e=0; e< numExpansion(l); e++) { + gaussexp(l,e)=exp(parms(count++)); + //gausscoeff(l,e)=parms(count++); + } + } +} + +int Rgaussian_function::nfunc() +{ + return nmax; +} + +int Rgaussian_function::showinfo(string & indent, ostream & os) +{ + os << indent << "R^n *Gaussian" << endl; + + for(int i=0; i< nmax; i++) { + os << indent << "Expansion " << i << endl; + os << indent << setw(10) << "coeff" + << setw(10) << "n" << setw(10) << "exponent" << endl; + for(int j=0; j< numExpansion(i); j++) { + os << indent << setw(10) << gausscoeff(i,j) + << setw(10) << radiusexp(i,j) + << setw(10) << gaussexp(i,j) << endl; + } + } + return 1; +} + +int Rgaussian_function::writeinput(string & indent, ostream & os) +{ + os << indent << centername << endl; + os << indent << "RGAUSSIAN\n"; + os << indent << "OLDQMC { \n"; + os << indent << " 0. " << nmax << endl; + os << indent << " "; + for(int i=0; i< nmax; i++) os << numExpansion(i) << " "; + os << endl; + for (int i=0; i< nmax; i++) { + for(int j=0; j< numExpansion(i); j++) { + os << indent << " " + << " " << radiusexp(i,j)+2 + << " " << gaussexp(i,j) + << " " << gausscoeff(i,j) << endl; + } + } + os << indent << "}\n"; + return 1; +} + +void Rgaussian_function::raw_input(ifstream & input) +{error("Raw input not supported by Rgaussian_function");} + +void Rgaussian_function::calcVal(const Array1 & r, + Array1 & symvals, + const int startfill) +{ + //cout << "Rgaussian::calcVal " << endl; + assert(symvals.GetDim(0) >= nmax+startfill); + assert(r.GetDim(0) >= 5); + doublevar exponent; + //cout << "v_l for l=" << l << " atom=" << at << endl; + int index=startfill; + + for(int i=0; i< nmax; i++) { + doublevar v_l=0; + for(int j=0; j< numExpansion(i); j++) { + exponent=gaussexp(i, j)*r(1); + exponent=min(exponent,(doublevar) 60.0); + v_l+= gausscoeff(i, j) + *pow(r(0), radiusexp(i, j) ) + *exp(-exponent); + } + symvals(index++) = v_l; + } + //cout << "done" << endl; +} + +void Rgaussian_function::calcLap( + const Array1 & r, + Array2 & symvals, + const int startfill){ + + assert(symvals.GetDim(0) >= nmax+startfill); + assert(r.GetDim(0) >= 5); + doublevar exponent; + //cout << "v_l for l=" << l << " atom=" << at << endl; + int index=startfill; + + for(int i=0; i< nmax; i++) { + doublevar v_l=0, dv_l=0, d2v_l=0; + + for(int j=0; j< numExpansion(i); j++) { + exponent=gaussexp(i, j)*r(1); + exponent=min(exponent,(doublevar) 60.0); + exponent=exp(-exponent); + doublevar n=radiusexp(i,j); + v_l+= gausscoeff(i, j) + *pow(r(0),n ) + *exponent; + dv_l+=gausscoeff(i,j)*exponent*pow(r(0), n-1)*( n + -2*r(1)*gaussexp(i,j)); + + //note that the laplacian is untested.. + d2v_l+=gausscoeff(i,j)*pow(r(0), n-2)*( n*(n-1)-2*gaussexp(i,j)*n*r(1) + -2*(n+1)*gaussexp(i,j)*r(1) + +4*gaussexp(i,j)*gaussexp(i,j) + *r(1)*r(1))*exponent; + + } + dv_l/=r(0); + + symvals(index,0) = v_l; + symvals(index,1) = dv_l*r(2); + symvals(index,2) = dv_l*r(3); + symvals(index,3) = dv_l*r(4); + symvals(index,4) = d2v_l+2*dv_l; + index++; + } + +} + +//------------------------------------------------------------------------ diff --git a/src/basis_function/Rgaussian_function.h b/src/basis_function/Rgaussian_function.h new file mode 100644 index 00000000..a40919d9 --- /dev/null +++ b/src/basis_function/Rgaussian_function.h @@ -0,0 +1,100 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ + +#ifndef RGAUSSIAN_FUNCTION_H_INCLUDED +#define RGAUSSIAN_FUNCTION_H_INCLUDED + +#include "Basis_function.h" + +/*! + + +*/ +class Rgaussian_function: public Basis_function +{ +public: + + Rgaussian_function() + {} + ~Rgaussian_function() + {} + + //----------------------------------------------------- + + + virtual int read( + vector & words, + //!< The words from the basis section that will create this basis function + unsigned int & pos + //!< The current position in the words(important if one basis section makes several functions); will be incremented as the Basis_function reads the words. + ); + + + + + int nfunc(); + virtual string label() + { + return centername; + } + doublevar cutoff(int ) + { + return rcut; + } + + int showinfo(string & indent, ostream & os); + int writeinput(string &, ostream &); + + void raw_input(ifstream & input); + + void calcVal(const Array1 & r, + Array1 & symvals, + const int startfill=0); + + void calcLap( + const Array1 & r, + Array2 & symvals, + const int startfill=0 + ); + + virtual void getVarParms(Array1 & parms); + virtual void setVarParms(Array1 & parms); + virtual int nparms() { + int np=0; + for(int l=0; l< nmax; l++) { + np+=numExpansion(l); + } + + return np; + } + +private: + + doublevar rcut; + Array2 gaussexp; + Array2 gausscoeff; + Array2 radiusexp; + Array1 numExpansion; + int nmax; + string centername; +}; + +#endif // RGAUSSIAN_FUNCTION_H_INCLUDED +//-------------------------------------------------------------------------- diff --git a/src/basis_function/Spline_fitter.cpp b/src/basis_function/Spline_fitter.cpp new file mode 100644 index 00000000..cda68269 --- /dev/null +++ b/src/basis_function/Spline_fitter.cpp @@ -0,0 +1,333 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ + +#include "Spline_fitter.h" + +void Spline_fitter::raw_input(ifstream & input) +{ + + int m; + doublevar dummy; + input >> m >> spacing >> threshold; + coeff.Resize(m,4); + + for(int k=0; k> dummy; + for(int i=0; i<4; i++) { + input >> dummy; + //if(fabs(dummy-coeff(s,k,i)) > 1e-4) { + // cout << "big diff in spline "<< s + // << " k= " << k << " i= " << i << endl; + // cout << "read " << dummy << " calculated " << coeff(s,k,i) + // < & words) { + + int n=(words.size()-1)/2; + if(n < 4) { + error("Not enough points to fit a spline."); + } + + coeff.Resize( n, 4); + + //cout << "fitting spline " << s << endl; + Array1 x(n), y(n); + //cout << "number of points I expect: " << 2*n+1 << " number found " << splinefits[s].size() + //<< endl; + + int counter=1; + for(int i=0; i < n; i++) { + x(i)=atof(words[counter++].c_str()); + y(i)=atof(words[counter++].c_str()); + } + + spacing=x(1)-x(0); + //cout << "spacing " << spacing << endl; + //Check that the points are monotonically increasing with equal spacing + //This is mostly needed for the evaluation routine. + for(int i=1; i< n; i++) { + if(fabs(x(i)-x(i-1)-spacing) > 1e-10) { + error("I need equal spacing for all the spline points."); + } + } + + threshold=x(n-1); + + //--Estimate the derivatives on the boundaries + doublevar yp1=(y(1)-y(0))/spacing; + doublevar ypn=(y(n-1) - y(n-2) ) /spacing; + splinefit(x, y, yp1, ypn); + + return 1; +} + +//---------------------------------------------------------------------- + + +doublevar Spline_fitter::findCutoff() { + const doublevar step=0.5; + doublevar cutoff_threshold=1e-10; + + int n=coeff.GetDim(0); + doublevar max=0; + for(int i=0; i< n; i++) { + if(fabs(coeff(i,0)) > max) + max=fabs(coeff(i,0)); + } + + cutoff_threshold*=max; + + + for(doublevar x=threshold-step; x >=0; x-=step) { + int interval=getInterval(x); + doublevar height=x-interval*spacing; + doublevar test= coeff(interval,0)+height*(coeff(interval,1) + +height*(coeff(interval,2) + +height*coeff(interval,3))); + if(fabs(test) > cutoff_threshold) { + //cout << "cutoff " << x+step << endl; + return x+step; + } + } + return 0; +} + +//---------------------------------------------------------------------- + + +void Spline_fitter::splinefit(Array1 & x, Array1 & y, + double yp1, double ypn) +{ + //following stolen from Numerical Recipes, more or less + + assert(x.GetDim(0)==y.GetDim(0)); + + int n=x.GetDim(0); + coeff.Resize(n,4); + + spacing=x(1)-x(0); + threshold=x(n-1)+spacing; + + Array1 y2(n), u(n); + doublevar sig, p, qn, un, hi; + + if(yp1 > .99e30) { + y2(0)=0; + u(0)=0; + } + else { + y2(0)=-.5; + u(0)=(3./(x(1)-x(0)))*((y(1)-y(0))/(x(1)-x(0))-yp1); + } + + for(int i=1; i.99e30) + { + qn=0; + un=0; + } + else + { + qn=.5; + un=(3./(x(n-1)-x(n-2)))*(ypn-(y(n-1)-y(n-2))/(x(n-1)-x(n-2))); + } + + y2(n-1)=(un-qn*u(n-2))/(qn*y2(n-2)+1.); + + for(int k=n-2; k>=0; k--) + { + y2(k)=y2(k)*y2(k+1)+u(k); + } + + for(int i=0; i=0; x-=step) { + int interval=getInterval(x); + doublevar height=x-pos(interval); + doublevar test= coeff(interval,0)+height*(coeff(interval,1) + +height*(coeff(interval,2) + +height*coeff(interval,3))); + if(fabs(test) > cutoff_threshold) { + //cout << "cutoff " << x+step << endl; + return x+step; + } + } + return 0; +} + +//---------------------------------------------------------------------- + + +void Spline_fitter_nonuniform::splinefit(Array1 & x, + Array1 & y, + double yp1, double ypn) +{ + //following stolen from Numerical Recipes, more or less + + assert(x.GetDim(0)==y.GetDim(0)); + + int n=x.GetDim(0); + coeff.Resize(n,4); + pos=x; + + + threshold=x(n-1); + + Array1 y2(n), u(n); + doublevar sig, p, qn, un, hi; + + if(yp1 > .99e30) { + y2(0)=0; + u(0)=0; + } + else { + y2(0)=-.5; + u(0)=(3./(x(1)-x(0)))*((y(1)-y(0))/(x(1)-x(0))-yp1); + } + + for(int i=1; i.99e30) + { + qn=0; + un=0; + } + else + { + qn=.5; + un=(3./(x(n-1)-x(n-2)))*(ypn-(y(n-1)-y(n-2))/(x(n-1)-x(n-2))); + } + + y2(n-1)=(un-qn*u(n-2))/(qn*y2(n-2)+1.); + + for(int k=n-2; k>=0; k--) + { + y2(k)=y2(k)*y2(k+1)+u(k); + } + + for(int i=0; i& x, + //!< x interpolation points + Array1 & y, + //!< f(x) interpolation points + double yp1, + //!< df/dx at x_0 + double ypn + //!< df/dx at x_n, with n=number of points + ); + + void raw_input(ifstream & input); + + int getInterval(doublevar r) { + int interval=int(r/spacing); + assert(r < threshold); + assert(interval*spacing <=r); + assert((interval+1)*spacing >= r); + return interval; + } + + doublevar getVal(doublevar r, int i) { + doublevar height=r-i*spacing; + return coeff(i,0)+height*(coeff(i,1) + +height*(coeff(i,2) + +height*coeff(i,3))); + } + + + void getDers(doublevar r, int i, + doublevar & func, doublevar & fdir, + doublevar & f2dir) { + //int i=int(r/spacing); + doublevar height=r-i*spacing; + func=coeff(i,0)+height*(coeff(i,1) + +height*(coeff(i,2) + +height*coeff(i,3))); + + fdir=(coeff(i,1)+height*(2*coeff(i,2) + +height*(3*coeff(i,3))))/r; + + f2dir=2*coeff(i,2)+6*height*coeff(i,3); + } + + int readspline(vector & words); + + + /*! + \brief + Whether this spline matches another.. + */ + int match(Spline_fitter & s) { + + //cout << "spacing " << spacing << " s " << s.spacing << endl; + //cout << "threshold " << threshold << " s " << s.threshold << endl; + if(fabs(spacing-s.spacing) > 1e-8) + return 0; + if(fabs(threshold-s.threshold) > 1e-8) + return 0; + + + return 1; + } + + private: + doublevar spacing; + doublevar threshold; + Array2 coeff; +}; + + +//---------------------------------------------------------------------- + +class Spline_fitter_nonuniform { + public: + + doublevar findCutoff(); + void splinefit( + Array1 & x, + //!< x interpolation points + Array1 & y, + //!< f(x) interpolation points + double yp1, + //!< df/dx at x_0 + double ypn + //!< df/dx at x_n, with n=number of points + ); + + + int getInterval(doublevar r); + + + doublevar getVal(doublevar r, int i) { + doublevar height=r-pos(i); + return coeff(i,0)+height*(coeff(i,1) + +height*(coeff(i,2) + +height*coeff(i,3))); + } + + + void getDers(doublevar r, int i, + doublevar & func, doublevar & fdir, + doublevar & f2dir) { + //int i=int(r/spacing); + doublevar height=r-pos(i); + func=coeff(i,0)+height*(coeff(i,1) + +height*(coeff(i,2) + +height*coeff(i,3))); + + fdir=(coeff(i,1)+height*(2*coeff(i,2) + +height*(3*coeff(i,3))))/r; + + f2dir=2*coeff(i,2)+6*height*coeff(i,3); + } + + int readspline(vector & words); + + + /*! + \brief + Whether this spline matches another.. + */ + int match(Spline_fitter_nonuniform & s) { + return 1; + } + + private: + doublevar threshold; + Array1 pos; + Array2 coeff; +}; + +#endif //SPLINE_FITTER_H_INCLUDED diff --git a/src/basis_function/Step_function.cpp b/src/basis_function/Step_function.cpp new file mode 100644 index 00000000..041b4a14 --- /dev/null +++ b/src/basis_function/Step_function.cpp @@ -0,0 +1,103 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ + +#include "Step_function.h" +#include "qmc_io.h" + +/* + +*/ +int Step_function::read( + vector & words, + unsigned int & pos) +{ + + + centername=words[0]; + + + if(!readvalue(words, pos=0, rcut, "CUTOFF") ) { + error("Need CUTOFF in step_function"); + } + + return 1; +} + +void Step_function::getVarParms(Array1 & parms) { + //cout << "getVarParms " << endl; + parms.Resize(0); +} + +void Step_function::setVarParms(Array1 & parms) { + assert(parms.GetDim(0)==0); +} + +int Step_function::nfunc() +{ + return 1; +} + +int Step_function::showinfo(string & indent, ostream & os) +{ + os << indent << "Step function\n"; + os << indent << "Cutoff " << rcut << endl; + + return 1; +} + +int Step_function::writeinput(string & indent, ostream & os) +{ + os << indent << centername << endl; + os << indent << "STEP\n"; + os << indent << "CUTOFF " << rcut << endl; + return 1; +} + +void Step_function::raw_input(ifstream & input) +{error("Raw input not supported by Step_function");} + +void Step_function::calcVal(const Array1 & r, + Array1 & symvals, + const int startfill) +{ + //cout << "calcVal " << endl; + if(r(0) < rcut) + symvals(startfill)=1; + else + symvals(startfill)=0; +} + +void Step_function::calcLap( + const Array1 & r, + Array2 & symvals, + const int startfill +) +{ + if(r(0) < rcut) + symvals(startfill,0)=1; + else + symvals(startfill,0)=0; + + for(int d=1; d< 5; d++) + symvals(startfill, d)=0; + +} + +//------------------------------------------------------------------------ diff --git a/src/basis_function/Step_function.h b/src/basis_function/Step_function.h new file mode 100644 index 00000000..2d4e8708 --- /dev/null +++ b/src/basis_function/Step_function.h @@ -0,0 +1,98 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ + +#ifndef STEP_FUNCTION_H_INCLUDED +#define STEP_FUNCTION_H_INCLUDED + +#include "Basis_function.h" + +/*! + +\brief +unit step function + +

    Keywords

    + + Required + +CUTOFF - point at which the function becomes zero + +*/ +class Step_function: public Basis_function +{ +public: + + Step_function() + {} + ~Step_function() + {} + + //----------------------------------------------------- + + + virtual int read( + vector & words, + //!< The words from the basis section that will create this basis function + unsigned int & pos + //!< The current position in the words(important if one basis section makes several functions); will be incremented as the Basis_function reads the words. + ); + + + + + int nfunc(); + virtual string label() + { + return centername; + } + doublevar cutoff(int ) + { + return rcut; + } + + int showinfo(string & indent, ostream & os); + int writeinput(string &, ostream &); + + void raw_input(ifstream & input); + + void calcVal(const Array1 & r, + Array1 & symvals, + const int startfill=0); + + void calcLap( + const Array1 & r, + Array2 & symvals, + const int startfill=0 + ); + + virtual void getVarParms(Array1 & parms); + virtual void setVarParms(Array1 & parms); + virtual int nparms() { + return 0; + } + +private: + + doublevar rcut; + string centername; +}; + +#endif // STEP_FUNCTION_H_INCLUDED +//-------------------------------------------------------------------------- diff --git a/src/basis_function/make.include b/src/basis_function/make.include new file mode 100644 index 00000000..27826497 --- /dev/null +++ b/src/basis_function/make.include @@ -0,0 +1,18 @@ + +MY_SOURCES:= Basis_function.cpp \ + Cubic_spline_build.cpp \ + Cubic_spline_calc.cpp \ + Cutoff_cusp.cpp \ + Exponent_cusp.cpp \ + Gaussian_function.cpp \ + Gen_pade_function.cpp \ + Pade_function.cpp \ + Planewave_function.cpp \ + Poly_pade_function.cpp \ + Rgaussian_function.cpp \ + Spline_fitter.cpp \ + Step_function.cpp + + +SOURCES:= $(SOURCES) $(addprefix basis_function/,$(MY_SOURCES)) + diff --git a/src/macopt/macopt.cpp b/src/macopt/macopt.cpp new file mode 100644 index 00000000..e5896c55 --- /dev/null +++ b/src/macopt/macopt.cpp @@ -0,0 +1,455 @@ + +/* macopt library release 1.1 gradient-based optimizer + + Copyright (c) 2002 David J.C. MacKay and Steve Waterhouse + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + GNU licenses are here : + http://www.gnu.org/licenses/licenses.html + + Author contact details are here : + http://www.inference.phy.cam.ac.uk/mackay/c/macopt.html mackay@mrao.cam.ac.uk +*/ +#include "r.h" +#include "macopt.h" + +/* + + http://www.inference.phy.cam.ac.uk/mackay/c/macopt.html mackay@mrao.cam.ac.uk + + Please do not use macopt without understanding a little about how it works; + there are some control parameters which the user MUST set! + + David MacKay's optimizer, based on conjugate gradient ideas, + but using bracketing of the zero of the inner product + + (gradient).(line_search_direction) + + to do the line minimization. Only derivative calculations are required. + The length of the first step in the line search (often set to "1.0" + in other code) is adapted here so that, if 0.00001 is a better step size, + it soon cottons on to that and saves ~log(10000) bracketing operations. + The result is that (with rich set to 0) the program can use + as few as 2 derivatives per line search. (If rich is set to 1, it does + an extra derivative calculation at the beginning of each line search + making a minimum of 3 per line search. Set rich=0 if you think + that the surface is locally quite quadratic.) If the program does average + 2 derivatives per line search then it must be superior to most cg methods + including use of Rbackprop (which costs 2 derivatives straight off) + + A possible modification: where the function can be returned at same + time as the dfunction --- there is nothing clever to do with the + value, but it could be used as a sanity check and a convergence criterion. + + See http://131.111.48.24/mackay/c/macopt.html for further discussion. + + NB: The value of "tol" is totally arbitrary and must be set by + you to a value that works well for your problem. + It depends completely on the typical value of the gradient / step size. + + Tol specifies a magnitude of gradient at which a halt is called. + or a step size. + + This program MINIMIZES a function. + + + ********************************************** + + Modified and converted to C++ class by Steve Waterhouse 8th April + 1997. + + ********************************************** + +*/ + +Macopt::Macopt(int n, + int _verbose, + double _tolerance, + int _itmax, + int _rich) : + a_n(n), + a_tol(_tolerance), + a_itmax(_itmax), + a_rich(_rich), + a_verbose(_verbose) +{ + a_g = new double[n+1] ; + a_h = new double[n+1] ; + a_xi = new double[n+1] ; + a_pt = new double[n+1] ; /* scratch vector for sole use of macprod */ + a_gx = new double[n+1] ; /* scratch gradients */ + a_gy = new double[n+1] ; /* used by maclinmin and macprod */ + /* if verbose = 1 then there is one report for each + line minimization. + if verbose = 2 then there is an additional + report for + each step of the line minimization. + if verbose = 3 then extra debugging + routines kick in. + */ + + a_end_if_small_step = 0 ; /* Change this to 0/1 if you prefer */ + a_stepmax = 0.5 ; + + a_grad_tol_tiny = 1e-16 ; /* Probably not worth fiddling with */ + a_step_tol_tiny = 0.0 ; /* Probably not worth fiddling with */ + a_linmin_maxits = 20 ; /* Probably not worth fiddling with */ + a_lastx = 0.2 ; /* only has a transient effect originally 0.01 */ + a_lastx_default = 0.2 ; /* -- defines typical distance in parameter + space at which the line minimum is expected; + both these should be set. the default is + consulted if something goes badly wrong and + a reset is demanded. */ + +/* don't fiddle with the following, unless you really mean it */ + a_linmin_g1 = 2.0 ; + a_linmin_g2 = 1.25 ; + a_linmin_g3 = 0.5 ; + a_restart = 0 ; +} +Macopt::~Macopt() {} + +void Macopt::macoptII + (double *p, /* starting vector */ + int n /* number of dimensions */ + ) +{ + int j ; + double gg , gam , dgg ; + double *g , *h , *xi ; + int end_if_small_grad = 1 - a_end_if_small_step ; + double step , tmpd ; + + /* A total of 7 double * 1..n are used by this optimizer. + p is provided when the optimizer is called + pt is used by the line minimizer as the temporary vector. + this could be cut out with minor rewriting, using p alone + g, h and xi are used by the cg method as in NR - could one of these + be cut out? + the line minimizer uses an extra gx and gy to evaluate two gradients. + */ + + g = a_g ; + h = a_h ; + xi = a_xi ; + + dfunc( p , xi ); + + macopt_restart ( 1 ) ; + + for ( a_its = 1 ; a_its <= a_itmax ; a_its ++ ) { + + for ( gg = 0.0 , j = 1 ; j <= n ; j ++ ) + gg += g[j]*g[j]; /* find the magnitude of the old gradient */ + a_gtyp = sqrt ( gg / (double)(n) ) ; + + iteration_print(xi[0],gg,a_tol,a_its); + //if ( a_verbose > 0 ) + // printf ( "mac_it %d of %d : gg = %6.3g tol = %6.3g: ", a_its , a_itmax , gg , a_tol ) ; + + if ( ( end_if_small_grad && ( gg <= a_tol ) ) + || ( gg <= a_grad_tol_tiny ) ) { + // macopt_free ( a ) ; + if ( a_verbose > 0 ) printf ("\n"); + return; + } + + step = maclinminII ( p ) ; + + if ( a_restart == 0 ) { + if ( a_verbose > 1 ) printf (" (step %9.5g)",step); + if ( a_verbose > 0 ) printf ("\n"); + if ( ( a_end_if_small_step && ( step <= a_tol ) ) + || ( step <= a_step_tol_tiny ) ) { + // macopt_free ( a ) ; + return; + } + } + + /* if we are feeling rich, evaluate the gradient at the new + `minimum'. alternatively, linmin has already estimated this + gradient by linear combination of the last two evaluations and + left it in xi */ + if ( a_rich || a_restart ) { + dfunc( p , xi ) ; + } + if ( a_restart ) { + if(a_verbose > 0) + fprintf(stderr,"Restarting macopt\n" ) ; + macopt_restart ( 0 ) ; + /* this is not quite right + should distinguish whether there was an overrun indicating that the + value of lastx needs to be bigger / smaller; + in which case resetting lastx to default value may be a bad idea, + giving an endless loop of resets + */ + } else { + dgg=0.0; + for ( j = 1 ; j <= n ; j ++ ) { + dgg += ( xi[j] + g[j] ) * xi[j] ; + } + gam = dgg / gg ; + for ( tmpd = 0.0 , j = 1 ; j <= n ; j ++ ) { + g[j] = -xi[j]; /* g stores (-) the most recent gradient */ + xi[j] = h[j] = g[j] + gam * h[j] ; + /* h stores xi, the current line direction */ + /* check that the inner product of gradient and line search is < 0 */ + tmpd -= xi[j] * g[j] ; + } + g[0]=xi[0]; //LKW: remember the value + + if ( tmpd > 0.0 || a_verbose > 2 ) { + fprintf(stderr,"new line search has inner prod %9.4g\n", tmpd ) ; + } + if ( tmpd > 0.0 ) { + if ( a_rich == 0 ) { + fprintf (stderr, "Setting rich to 1; " ) ; + a_rich = 1 ; + } + a_restart = 2 ; /* signifies that g[j] = -xi[j] is already done */ + if(a_verbose > 0) + fprintf(stderr,"Restarting macopt (2)\n" ) ; + macopt_restart ( 0 ) ; + } + } + } + if(a_verbose> 0) + fprintf(stderr,"Reached iteration limit in macopt; continuing.\n"); + // macopt_free ( a ) ; + return; +} /* NB this leaves the best value of p in the p vector, but + the function has not been evaluated there if rich=0 */ + +void Macopt::iteration_print(double val, double gg, double tol, int it) { + if ( a_verbose > 0 ) + printf ( "mac_it %d : gg = %6.3g tol = %6.3g val = %6.3g : \n", it , gg , tol, val ) ; + +} + +/* maclinmin. + Method: + evaluate gradient at a sequence of points and calculate the inner + product with the line search direction. Continue until a + bracketing is achieved ( i.e a change in sign ). */ +double Macopt::maclinminII +( + double *p + ) +{ + int n = a_n ; + + double x , y ; + double s , t , m ; + int its = 1 , i ; + double step , tmpd ; + double *gx = a_gx , *gy = a_gy ; + + /* at x=0, the gradient (uphill) satisfies s < 0 */ + if ( a_verbose > 2 ) { /* check this is true: (no need to do this really + as it is already checked at the end of the main + loop of macopt) */ +/* +#define TESTS 5 + x = a_lastx / a_gtyp ; + fprintf (stderr, "inner product at:\n" ) ; + for ( i = -TESTS ; i <= TESTS ; i += 2 ) { + step = x * 2.0 * (double) i / (double) TESTS ; + fprintf (stderr, "%9.5g %9.5g\n" , step , + tmpd = macprodII ( p , gy , step ) ) ; + } +*/ + fprintf (stderr, "inner product at 0 = %9.4g\n" , + tmpd = macprodII ( p , gy , 0.0 ) ) ; + if ( tmpd > 0.0 ) { + a_restart = 1 ; + return 0.0 ; + } + } + + x = a_lastx / a_gtyp ; + s = macprodII ( p , gx , x ) ; + + if ( s < 0 ) { /* we need to go further */ + do { + y = x * a_linmin_g1 ; + t = macprodII ( p , gy , y ) ; + if ( a_verbose > 1 ) + printf ("s = %6.3g: t = %6.3g; x = %6.3g y = %6.3g\n",s, t , x , y ); + if ( t >= 0.0 ) break ; + x = y ; s = t ; a_gunused = gx ; gx = gy ; gy = a_gunused ; + its++ ; + /* replaces: for ( i = 1 ; i <= n ; i ++ ) gx[i] = gy[i] ; */ + } + while ( its <= a_linmin_maxits ) ; + } else if ( s > 0 ) { /* need to step back inside interval */ + do { + y = x * a_linmin_g3 ; + t = macprodII ( p , gy , y ) ; + if ( a_verbose > 1 ) + printf ("s = %6.3g: t = %6.3g; x = %6.3g y = %6.3g\n",s, t , x , y ); + if ( t <= 0.0 ) break ; + x = y ; s = t ; a_gunused = gx ; gx = gy ; gy = a_gunused ; + its ++ ; + } while ( its <= a_linmin_maxits ) ; + } else { /* hole in one s = 0.0 */ + t = 1.0 ; y = x; + } + + if ( its > a_linmin_maxits ) { + fprintf (stderr, "Warning! maclinmin overran" ); +/* this can happen where the function goes \_ and doesn't buck up + again; it also happens if the initial `gradient' does not satisfy + gradient.`gradient' > 0, so that there is no minimum in the supposed + downhill direction. I don't know if this actually happens... If it + does then I guess a_rich should be 1. + + If the overrun is because too big a step was taken then + the interpolation should be made between zero and the most + recent measurement. + + If the overrun is because too small a step was taken then + the best place to go is the most distant point. + I will assume that this doesn't happen for the moment. + + Also need to check up what happens to t and s in the case of overrun. + And gx and gy. + + Maybe sort this out when writing a macopt that makes use of the gradient + at zero? +*/ + fprintf (stderr, "- inner product at 0 = %9.4g\n" , + tmpd = macprodII ( p , gy , 0.0 ) ) ; + if ( tmpd > 0 && a_rich == 0 ) { + fprintf (stderr, "setting rich to 1\n" ) ; a_rich = 1 ; + } + if ( tmpd > 0 ) a_restart = 1 ; + } + + /* Linear interpolate between the last two. + This assumes that x and y do bracket. */ + if ( s < 0.0 ) s = - s ; + if ( t < 0.0 ) t = - t ; + m = ( s + t ) ; + s /= m ; t /= m ; + + m = s * y + t * x ; + /* evaluate the step length, not that it necessarily means anything */ + for ( step = 0.0 , i = 1 ; i <= n ; i ++ ) { + tmpd = m * a_xi[i] ; + p[i] += tmpd ; /* this is the point where the parameter vector steps */ + step += fabs ( tmpd ) ; + a_xi[i] = s * gy[i] + t * gx[i] ; +/* send back the estimated gradient in xi (NB not like linmin) */ + } + //LKW: also keep track of the value and print out the step sizes + //This is probably an overestimate, but it shouldn't matter much + a_xi[0]=s*gy[0]+t*gx[0]; a_lastx = m * a_linmin_g2 * a_gtyp ; + if(a_verbose >=1) printf("Setting step size to %6.3g\n", a_lastx); + //---done LKW modifications + + return ( step / (double) ( n ) ) ; +} + +double Macopt::macprodII +( + double *p , double *gy , double y + +) { + double *pt = a_pt ; + double *xi = a_xi ; + /* finds pt = p + y xi and gets gy there, + returning gy . xi */ + int n = a_n ; + + int i; + double s = 0.0 ; + + for ( i = 1 ; i <= n ; i ++ ) + pt[i] = p[i] + y * xi[i] ; + + dfunc( pt , gy ) ; + + for ( i = 1 ; i <= n ; i ++ ) + s += gy[i] * xi[i] ; + + return s ; +} + +void Macopt::macopt_restart ( int start ) +/* if start == 1 then this is the start of a fresh macopt, not a restart */ +{ + int j , n=a_n ; + double *g, *h, *xi ; + g = a_g ; h = a_h ; xi = a_xi ; + + if ( start == 0 ) a_lastx = a_lastx_default ; + /* it is assumed that dfunc( p , xi ) ; has happened */ + for ( j = 1 ; j <= n ; j ++ ) { + if ( a_restart != 2 ) g[j] = -xi[j] ; + xi[j] = h[j] = g[j] ; + } + g[0]=h[0]=xi[0]; //LKW: save the value + a_restart = 0 ; +} + +void Macopt::maccheckgrad +/* Examines objective function and d_objective function to see if + they agree for a step of size epsilon */ + (double *p, + int n, + double epsilon, + int stopat /* stop at this component. If 0, do the lot. */ +) +{ + int j; + double f1; + double *g,*h; + double tmpp ; + + f1 = func(p); + // printf("f1 = %f\n", f1); + + h = new double[n+1]; + g = new double[n+1]; + + dfunc(p, g); + + if ( stopat <= 0 || stopat > n ) stopat = n ; + + printf("Testing gradient evaluation\n"); + printf(" analytic 1st_diffs difference\n"); + for ( j = 1 ; j <= stopat ; j ++ ) { + tmpp = p[j] ; + p[j] += epsilon ; + h[j] = func(p) - f1 ; + // printf("h = %f\n", h[j]); + p[j] = tmpp ; + + printf("%2d %9.5g %9.5g %9.5g\n" , j , g[j] , h[j]/epsilon , g[j] - h[j]/epsilon ); + fflush(stdout) ; + } + free(h); + free(g); + // free_dvector(h,1,n); + // free_dvector(g,1,n); + printf(" -------- ---------\n"); +} + +/* + +Last modified: Tue Dec 17 17:49:44 1996 + +*/ diff --git a/src/macopt/macopt.h b/src/macopt/macopt.h new file mode 100644 index 00000000..8e939d08 --- /dev/null +++ b/src/macopt/macopt.h @@ -0,0 +1,98 @@ + +/* macopt library release 1.1 gradient-based optimizer + + Copyright (c) 2002 David J.C. MacKay and Steve Waterhouse + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + GNU licenses are here : + http://www.gnu.org/licenses/licenses.html + + Author contact details are here : + http://www.inference.phy.cam.ac.uk/mackay/c/macopt.html mackay@mrao.cam.ac.uk +*/ +#ifndef MACOPT_H +#define MACOPT_H + +class Macopt +{ +public: + + Macopt(int _n, + int _verbose = 0, + double _tolerance = 0.001, + int _itmax = 100, + int _rich = 1); + virtual ~Macopt(); + void macoptII(double *p, int dim ); + void maccheckgrad(double *p, + int n, + double epsilon, + int stopat); +protected: + virtual double func(double* _p) = 0; + virtual double dfunc(double* _p, double* _xi) = 0; //returns the value.. + virtual void iteration_print(double val, double gg, double tol, int it); + int a_n; /* dimension of parameter space */ +private: + double maclinminII(double *p); + double macprodII (double * , double * , double ) ; + void macopt_restart ( int ) ; + +private: + + double a_tol ; /* convergence declared when the gradient vector is smaller + in magnitude than this, or when the mean absolute + step is less than this (see above) */ + double a_grad_tol_tiny ; /* if gradient is less than this, we definitely + stop, even if we are not using a gradient + tolerance */ + double a_step_tol_tiny ; /* if step is less than this, we stop, even if + we are not using a step tolerance */ + int a_end_if_small_step ; /* defines the role of tol -- alternative is + end_on_small_grad */ + int a_its ; /* number of its */ + int a_itmax ; /* max */ + int a_rich ; /* whether to do the extra gradient evaluation at the beginning + of each new line min */ + int a_verbose ; + double a_stepmax ; /* largest step permitted (not used in macopt) */ + + int a_linmin_maxits ; /* in maclinmin */ + double a_linmin_g1 ; /* factors for growing and shrinking the interval */ + double a_linmin_g2 ; + double a_linmin_g3 ; + double a_lastx ; /* keeps track of typical step length */ + double a_lastx_default ; /* if maclinmin is reset, lastx is set to this */ + +/* These should not be touched by the user. They are handy pointers for macopt + to use +*/ + double a_gtyp ; /* stores the rms gradient for linmin */ + double *a_pt , *a_gx , *a_gy , *a_gunused ; + double *a_xi , *a_g , *a_h ; + + int a_restart ; /* whether to restart macopt - fresh cg directions */ + +/* a_lastx :--- 1.0 might make general sense, (cf N.R.) + but the best setting of all is to have + a prior idea of the eigenvalues. If + the objective function is equal to sum of N + terms then set this to 1/N, for example + Err on the small side to be conservative. */ +}; + +#endif + diff --git a/src/macopt/make.include b/src/macopt/make.include new file mode 100644 index 00000000..df2e34df --- /dev/null +++ b/src/macopt/make.include @@ -0,0 +1,10 @@ + +MY_SOURCES:= \ + macopt.cpp \ + nrutil.cpp \ + r.cpp + + +SOURCES:= $(SOURCES) $(addprefix macopt/,$(MY_SOURCES)) + + diff --git a/src/macopt/nrutil.cpp b/src/macopt/nrutil.cpp new file mode 100644 index 00000000..e5537744 --- /dev/null +++ b/src/macopt/nrutil.cpp @@ -0,0 +1,225 @@ + +/* nrutil.cc - supplied by the Numerical Recipes folks Press et al ; + minor modifications made by David MacKay. + Copyright remains with the Numerical Recipes authors */ + +#include +#include +#include "nrutil.h" + +void nrerror(const char error_text[]) +{ + fprintf(stderr,"Numerical Recipes run-time error...\n"); + fprintf(stderr,"%s\n",error_text); + fprintf(stderr,"...now exiting to system...\n"); + exit(1); +} + + + +float *vector(int nl,int nh) +{ + float *v; + + v=(float *)malloc((unsigned) (nh-nl+1)*sizeof(float)); + if (!v) nrerror("allocation failure in vector()"); + return v-nl; +} + +int *ivector(int nl,int nh) +{ + int *v; + + v=(int *)malloc((unsigned) (nh-nl+1)*sizeof(int)); + if (!v) nrerror("allocation failure in ivector()"); + return v-nl; +} + +unsigned char *cvector(int nl,int nh) +{ + unsigned char *v; + + v=(unsigned char *)malloc((unsigned) (nh-nl+1)*sizeof(unsigned char)); + if (!v) nrerror("allocation failure in ivector()"); + return v-nl; +} + +double *dvector(int nl,int nh) +{ + double *v; + + v=(double *)malloc((unsigned) (nh-nl+1)*sizeof(double)); + if (!v) nrerror("allocation failure in dvector()"); + return v-nl; +} + + + +float **matrix(int nrl,int nrh,int ncl,int nch) +{ + int i; + float **m; + + m=(float **) malloc((unsigned) (nrh-nrl+1)*sizeof(float*)); + if (!m) nrerror("allocation failure 1 in matrix()"); + m -= nrl; + + for(i=nrl;i<=nrh;i++) { + m[i]=(float *) malloc((unsigned) (nch-ncl+1)*sizeof(float)); + if (!m[i]) nrerror("allocation failure 2 in matrix()"); + m[i] -= ncl; + } + return m; +} + +double **dmatrix(int nrl,int nrh,int ncl,int nch) +{ + int i; + double **m; + + m=(double **) malloc((unsigned) (nrh-nrl+1)*sizeof(double*)); + if (!m) nrerror("allocation failure 1 in dmatrix()"); + m -= nrl; + + for(i=nrl;i<=nrh;i++) { + m[i]=(double *) malloc((unsigned) (nch-ncl+1)*sizeof(double)); + if (!m[i]) nrerror("allocation failure 2 in dmatrix()"); + m[i] -= ncl; + } + return m; +} + +int **imatrix(int nrl,int nrh,int ncl,int nch) +{ + int i,**m; + + m=(int **)malloc((unsigned) (nrh-nrl+1)*sizeof(int*)); + if (!m) nrerror("allocation failure 1 in imatrix()"); + m -= nrl; + + for(i=nrl;i<=nrh;i++) { + m[i]=(int *)malloc((unsigned) (nch-ncl+1)*sizeof(int)); + if (!m[i]) nrerror("allocation failure 2 in imatrix()"); + m[i] -= ncl; + } + return m; +} + +unsigned char **cmatrix(int nrl,int nrh,int ncl,int nch) +{ + int i; + unsigned char **m; + + m=(unsigned char **)malloc((unsigned) (nrh-nrl+1)*sizeof(unsigned char*)); + if (!m) nrerror("allocation failure 1 in cmatrix()"); + m -= nrl; + + for(i=nrl;i<=nrh;i++) { + m[i]=(unsigned char *)malloc((unsigned) (nch-ncl+1)*sizeof(unsigned char)); + if (!m[i]) nrerror("allocation failure 2 in cmatrix()"); + m[i] -= ncl; + } + return m; +} + +float **submatrix(float **a, + int oldrl,int oldrh,int oldcl,int oldch, + int newrl,int newcl) +{ + int i,j; + float **m; + + m=(float **) malloc((unsigned) (oldrh-oldrl+1)*sizeof(float*)); + if (!m) nrerror("allocation failure in submatrix()"); + m -= newrl; + + for(i=oldrl,j=newrl;i<=oldrh;i++,j++) m[j]=a[i]+oldcl-newcl; + + return m; +} + + +/* +void free_vector(float *v,int nl,int nh) +{ + free((char*) (v+nl)); +} +*/ + +void free_cvector(unsigned char *v,int nl,int nh) +{ + free((char*) (v+nl)); +} + +void free_ivector(int *v,int nl,int nh) +{ + free((char*) (v+nl)); +} + +void free_dvector(double *v,int nl,int nh) +{ + free((char*) (v+nl)); +} + + +void free_matrix(float **m,int nrl,int nrh,int ncl,int nch) +{ + int i; + + for(i=nrh;i>=nrl;i--) free((char*) (m[i]+ncl)); + free((char*) (m+nrl)); +} + +void free_dmatrix(double **m,int nrl,int nrh,int ncl,int nch) +{ + int i; + + for(i=nrh;i>=nrl;i--) free((char*) (m[i]+ncl)); + free((char*) (m+nrl)); +} + +void free_cmatrix(unsigned char **m,int nrl,int nrh,int ncl,int nch) +{ + int i; + + for(i=nrh;i>=nrl;i--) free((char*) (m[i]+ncl)); + free((char*) (m+nrl)); +} + +void free_imatrix(int **m,int nrl,int nrh,int ncl,int nch) +{ + int i; + + for(i=nrh;i>=nrl;i--) free((char*) (m[i]+ncl)); + free((char*) (m+nrl)); +} + + + +void free_submatrix(float **b,int nrl,int nrh,int ncl,int nch) +{ + free((char*) (b+nrl)); +} + + + +float **convert_matrix(float *a,int nrl,int nrh,int ncl,int nch) +{ + int i,j,nrow,ncol; + float **m; + + nrow=nrh-nrl+1; + ncol=nch-ncl+1; + m = (float **) malloc((unsigned) (nrow)*sizeof(float*)); + if (!m) nrerror("allocation failure in convert_matrix()"); + m -= nrl; + for(i=0,j=nrl;i<=nrow-1;i++,j++) m[j]=a+ncol*i-ncl; + return m; +} + + + +void free_convert_matrix(float **b,int nrl,int nrh,int ncl,int nch) +{ + free((char*) (b+nrl)); +} diff --git a/src/macopt/nrutil.h b/src/macopt/nrutil.h new file mode 100644 index 00000000..66ee06ff --- /dev/null +++ b/src/macopt/nrutil.h @@ -0,0 +1,47 @@ + +/* nrutil.h - supplied by the Numerical Recipes folks Press et al ; + minor modifications made by David MacKay. + Copyright remains with the Numerical Recipes authors */ + +/* #include "dbmalloc/malloc.h" */ + +/* #include "smartall.h" This piece of shit didn't work for me */ +/* + These are the NR routines (modified by me) that are in the + file nrutil.c + + Other NR routines are specified in mynr.h + See also macopt.h +*/ + +#ifdef __cplusplus +extern "C" { /* I really dislike this - iwj. */ +#endif + +float *vector(int,int); +float **matrix(int,int,int,int); +float **convert_matrix(float *,int,int,int,int); +double *dvector(int,int); +double **dmatrix(int,int,int,int); +int *ivector(int,int); +int **imatrix(int,int,int,int); +unsigned char *cvector(int,int); +unsigned char **cmatrix(int,int,int,int); +float **submatrix(float **,int,int,int,int,int,int); +/* +void free_vector(float *,int,int); +*/ +void free_dvector(double *,int,int); +void free_cvector(unsigned char *,int,int); +void free_cmatrix(unsigned char **,int,int,int,int); +void free_ivector(int *,int,int); +void free_matrix(float **,int,int,int,int); +void free_dmatrix(double **, int,int,int,int); +void free_imatrix(int **,int,int,int,int); +void free_submatrix(float **,int,int,int,int); +void free_convert_matrix(float **,int,int,int,int); +void nrerror( const char * ); + +#ifdef __cplusplus +} +#endif diff --git a/src/macopt/r.cpp b/src/macopt/r.cpp new file mode 100644 index 00000000..26960195 --- /dev/null +++ b/src/macopt/r.cpp @@ -0,0 +1,1257 @@ + +/* r.c assorted minor subroutines library release 1.1 + + Copyright (c) 2002 David J.C. MacKay + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + GNU licenses are here : + http://www.gnu.org/licenses/licenses.html + + Author contact details are here : + http://www.inference.phy.cam.ac.uk/mackay/c/macopt.html mackay@mrao.cam.ac.uk +*/ +/* My routines */ + +#include "r.h" +#include "rand.h" + +/* input */ + +void inputf( float *pointer ) +{ + int junk ; + scanf( "%f" , pointer ) ; + junk = getchar( ) ; +} +void inputd( double *pointer ) +{ + int junk ; + scanf( "%lf" , pointer ) ; + junk = getchar( ) ; +} +void inputc( unsigned char *pointer ) +{ + int junk ; + scanf( "%c" , pointer ) ; + junk = getchar( ) ; +} +void inputi( int *pointer ) +{ + int junk ; + scanf( "%d" , pointer ) ; + junk = getchar( ) ; +} + +void inputrf( float *pointer ) +{ + int junk ; + scanf( "%f" , pointer ) ; + do{}while( ( junk = getchar( ) ) != 10 ) ; +} +void inputrd( double *pointer ) +{ + int junk ; + scanf( "%lf" , pointer ) ; + do{}while( ( junk = getchar( ) ) != 10 ) ; +} +void inputrc( unsigned char *pointer ) +{ + int junk ; + scanf( "%c" , pointer ) ; + do{}while( ( junk = getchar( ) ) != 10 ) ; +} +void inputri( int *pointer ) +{ + int junk ; + scanf( "%d" , pointer ) ; + do{}while( ( junk = getchar( ) ) != 10 ) ; +} + +void clearscan( ) +{ + int junk ; + do{}while( ( junk = getchar( ) ) != 10 ) ; +} + +void typeindvector( double *w , int l , int h ) +{ + int i ; + + printf( "Please enter %d components \n" , h-l+1 ) ; + for ( i = l ;i<= h ;i++ ) + scanf( "%lf" , &w[i] ) ; + clearscan( ) ; +} + +void constantdmatrix ( double **w , int l1 , int h1 , int l2, int h2 , + double c ) +{ + int i , j ; + + for ( i = l1 ; i <= h1 ; i++ ) + for ( j = l2 ; j <= h2 ; j++ ) + w[i][j] = c ; +} + +void set_dvector_const( double *w , int l , int h , double c ) +{ + int i ; + + for ( i = l ; i<= h ;i++ ) + w[i] = c ; +} + +void set_dvector_c_dvector( double *w , int l , int h , double c , double *v ) +{ + int i ; + + for ( i = l ; i<= h ;i++ ) + w[i] = c * v[i] ; +} + +void set_ivector_const( int *w , int l , int h , int c ) +{ + int i ; + + for ( i = l ; i<= h ;i++ ) + w[i] = c ; +} + +void typeindmatrix ( double **b , int l1 , int h1 , int l2 , int h2 ) +{ + int i , j ; + + printf( "please type matrix\n" ) ; + for ( i = l1 ; i<= h1-1 ; i++ ) + for ( j = l2 ; j<= h2 ; j++ ) + inputd( &b[i][j] ) ; /* This is all a trick to obtain clearscan at the last read-in */ + for ( j = l2 ; j<= h2-1 ; j++ ) + inputd( &b[i][j] ) ; + inputrd( &b[i][j] ) ; +} + +void typeincmatrix ( unsigned char **b , int l1 , int h1 , int l2 , int h2 ) +{ + int i , j , t ; + + printf( "please type matrix\n" ) ; + for ( i = l1 ; i<= h1-1 ; i++ ) + for ( j = l2 ; j<= h2 ; j++ ) { + inputi( &t ) ; b[i][j] = (unsigned char) t ; + } + for ( j = l2 ; j<= h2-1 ; j++ ) { + inputi( &t ) ; b[i][j] = (unsigned char) t ; + } + inputri( &t ) ; b[i][j] = (unsigned char) t ; +} + +int ***imatrix3( int l1 , int h1 , int l2 , int h2 , int l3 , int h3 ) +{ + int ***c ; + int s1 , i ; + + s1 = h1-l1+1 ; + + c = ( int *** )malloc( ( unsigned ) s1*sizeof( int ** ) ) - l1 ; + for ( i = l1 ;i<= h1 ;i++ ) + c[i] = imatrix( l2 , h2 , l3 , h3 ) ; + return c ; +} + +double ***dmatrix3( int l1 , int h1 , int l2 , int h2 , int l3 , int h3 ) +{ + double ***c; + int s1,i; + + s1=h1-l1+1; + + c=(double ***) malloc((unsigned) s1*sizeof(double **)) - l1; + for (i=l1;i<=h1;i++) + c[i]=dmatrix(l2,h2,l3,h3); + return c; +} + +long int ***limatrix3( int l1 , int h1 , int l2 , int h2 , int l3 , int h3 ) +{ + long int ***c ; + int s1 , i ; + + s1 = h1-l1+1 ; + + c = ( long int *** )malloc( ( unsigned ) s1*sizeof( long int ** ) ) - l1 ; + for ( i = l1 ;i<= h1 ;i++ ) + c[i] = limatrix( l2 , h2 , l3 , h3 ) ; + return c ; +} + +long int **limatrix( int nrl , int nrh , int ncl , int nch ) +{ + int i ; + long int **m ; + + m=( long int ** )malloc( ( unsigned ) ( nrh-nrl+1 )*sizeof( long int* ) ) ; + if ( !m ) nrerror( "allocation failure 1 in limatrix( )" ) ; + m -= nrl ; + + for( i=nrl ;i<=nrh ;i++ ) { + m[i]=( long int * )malloc( ( unsigned ) ( nch-ncl+1 )*sizeof( long int ) ) ; + if ( !m[i] ) nrerror( "allocation failure 2 in limatrix( )" ) ; + m[i] -= ncl ; + } + return m ; +} + +int ipower( int a , int b ) +{ + int i=1; + + for(;b>0;b--) + i*=a; + return(i); +} + +double readindmatrix +( + double **b , + int l1, + int h1, + int l2, + int h2, + char *file +) +{ + int i, j; + FILE *fp; + double sumd=0.0; + + fp = fopen( file, "r" ); + if( !fp ) fprintf( stderr, "No such file: %s\n", file ), exit(0); + + printf( "reading in matrix from %s\n",file ); + for (i=l1; i<=h1; i++){ + for (j=l2; j<=h2; j++){ + fscanf(fp,"%lf ",&b[i][j]); + sumd += b[i][j]; + } + } + fclose( fp ); + printf( "matrix in\n" ); + return(sumd); +} + +int readinimatrix +( + int **b , + int l1, + int h1, + int l2, + int h2, + char *file +) +{ + int status = 0; + FILE *fp; + + fp = fopen( file, "r" ); + if( !fp ) fprintf( stderr, "No such file: %s\n", file ), exit(0); + + printf( "reading in matrix from %s\n",file ); + status = fread_imatrix ( b , l1 , h1 , l2 , h2 , fp ) ; + + fclose( fp ); + return status ; +} + +int fread_imatrix +( + int **b , + int l1, + int h1, + int l2, + int h2, + FILE *fp +) +{ + int i, j , status = 0; + + for (i=l1; i<=h1; i++){ + for (j=l2; j<=h2; j++){ + if ( fscanf(fp,"%d ",&b[i][j]) == EOF ) { + status -- ; + break; + } + } + if ( status < 0 ) break ; + } + if ( status == 0 ) fprintf( stderr , "%d * %d int matrix in\n" , h1 , h2 ); + else fprintf( stderr, + "Warning: readinimatrix failed at component %d\n",i); + return status ; +} + +void readinlumatrix +( + double **b, + int *indx, + int n, + char *file +) +{ + int i, j , status = 0 ; + FILE *fp; + + fp = fopen( file, "r" ); + if( !fp ) fprintf( stderr, "No such file: %s\n", file ), exit(0); + + printf( "reading in matrix\n" ); + for (i=1; i<=n; i++){ + for (j=1; j<=n; j++){ + if ( fscanf(fp,"%lf ",&b[i][j]) == EOF ) { + status = -1 ; + break ; + } + } + } + if ( status == 0 ) { + for (i=1; i<=n; i++){ + if ( fscanf(fp,"%d ",&indx[i]) == EOF ) { + status = -1 ; + break ; + } + } + } + fclose( fp ); + if ( status == 0 ) printf( "lu matrix in\n" ); + else fprintf( stderr, + "Warning: readinlumatrix failed at component %d\n",i); +} + +void readindvector(double *w, int lo, int hi, char *file) +{ + int i, status = 0 ; + FILE *fp; + + fp = fopen( file, "r" ); + if( !fp ) fprintf( stderr, "No such file: %s\n", file ), exit(0); + + for (i=lo;i<=hi;i++) { + if ( fscanf(fp,"%lf ",&w[i]) == EOF ) { + status = -1 ; + break ; + } + } + fclose( fp ); + if ( status < 0 ) + fprintf( stderr, + "Warning: readindvector failed at component %d\n",i); +} + +int readdvector(double *w, int lo, int hi, char *file) +{ + int i, status = 0 ; + FILE *fp; + + fp = fopen( file, "r" ); + if( !fp ) { + fprintf( stderr, "No such file: %s\n", file ) ; + status -- ; + } + else { + for ( i = lo ; i <= hi ; i ++ ) { + if ( fscanf ( fp , "%lf " , &w[i] ) == EOF ) { + status = -1 ; + break ; + } + } + fclose( fp ); + if ( status < 0 ) + fprintf( stderr, + "Warning: readdvector failed at component %d\n",i); + } + return status ; +} + +int writedvector ( double *w, int lo, int hi, char *file) +{ + int i, status = 0 ; + FILE *fp; + + fp = fopen( file, "w" ); + if( !fp ) { + fprintf( stderr, "writedvector---No such file: %s\n", file ) ; + status -- ; + } + else { + for ( i = lo ; i <= hi ; i ++ ) { + fprintf ( fp , "%g " , w[i] ) ; + } + fclose( fp ); + } + return status ; +} + +int writedmatrix ( + double **m, + int l1, + int h1, + int l2, + int h2, + char *file +) +{ + int status = 0 ; + FILE *fp; + int i,j; + + fp = fopen( file, "w" ); + if( !fp ) { + fprintf( stderr, "writedmatrix---No such file: %s\n", file ) ; + status -- ; + } + else { + for (i=l1; i<=h1; i++){ + for (j=l2; j<=h2; j++) + fprintf ( fp , "%g " , m[i][j] ) ; + + fprintf ( fp , "\n" ) ; + } + fclose( fp ); + } + return status ; +} + +void readinivector(int *w, int lo, int hi, char *file) +{ + int status = 0 ; + FILE *fp; + + fp = fopen( file, "r" ); + if( !fp ) fprintf( stderr, "No such file: %s\n", file ), exit(0); + + status = fread_ivector ( w , lo , hi , fp ) ; + + fclose( fp ); +} + +int fread_ivector(int *w, int lo, int hi, FILE *fp ) +{ + int i, status = 0 ; + + for (i=lo;i<=hi;i++) { + if ( fscanf(fp,"%d ",&w[i]) == EOF ) { + status = -1 ; + break ; + } + } + +/* if ( status < 0 ) + fprintf( stderr, + "Warning: fread_ivector failed at component %d\n",i); +*/ + return status ; +} + +int fread_dvector( double *w, int lo, int hi, FILE *fp ) +{ + int i, status = 0 ; + + for (i=lo;i<=hi;i++) { + if ( fscanf(fp,"%lf ",&w[i]) == EOF ) { + status = -1 ; + break ; + } + } + +/* if ( status < 0 ) + fprintf( stderr, + "Warning: fread_dvector failed at component %d\n",i); +*/ + return status ; +} + +int fread_cvector(unsigned char *w, int lo, int hi, FILE *fp ) +{ + int i, status = 0 , bit ; + + for (i=lo;i<=hi;i++) { + if ( fscanf(fp,"%d", &bit ) == EOF ) { + status = -1 ; + break ; + } + w[i] = (unsigned char) bit ; + } + +/* if ( status < 0 ) + fprintf( stderr, + "Warning: fread_cvector failed at component %d\n",i); +*/ + return status ; +} + +void printoutimatrix +( + int **m, + int l1, + int h1, + int l2, + int h2 +) +{ + write_imatrix ( stdout , m , l1 , h1 , l2 , h2 ) ; +} + +void write_imatrix +( + FILE *fp , + int **m, + int l1, + int h1, + int l2, + int h2 +) +{ + int i,j; + + for (i=l1; i<=h1; i++){ + for (j=l2; j<=h2; j++) + fprintf( fp , "%d ",m[i][j]); + fprintf(fp , "\n"); + } +} + +void write_imatrix2 +( + FILE *fp , + int **m, + int l1, + int h1, + int l2, + int h2 +) +{ + int i,j; + + for (i=l1; i<=h1; i++){ + for (j=l2; j<=h2; j++) + fprintf( fp , "%+2d ",m[i][j]); + fprintf(fp , "\n"); + } +} + + +void allocate_cm_inversion +( unsigned char **mo, + int l, + int N, + unsigned char **mi, + cm_inversion *p +) +{ + int i,j ; + + p->l = l ; p->N = N ; p->mo = mo ; p->mi = mi ; + p->m = cmatrix ( l , N , l , N ) ; + p->mt=(unsigned char **)malloc((unsigned) (N-l+1)*sizeof(unsigned char*)); + p->mt -= l ; + p->perm = ivector ( l , N ) ; + p->iperm = ivector ( l , N ) ; + p->i = l ; + for (i=l; i<=N; i++){ + p->perm[i] = l-1 ; /* deliberately off scale */ + p->iperm[i] = l-1 ; + for (j=l; j<=N; j++) { + mi[i][j] = 0 ; + p->m[i][j] = mo[i][j] ; + } + mi[i][i] = 1 ; + } +} + +void print_cm_inversion +( cm_inversion *p +) +{ +/* printf( "mo:\n" ) ; + printoutcmatrix ( p->mo , p->l , p->N , p->l , p->N ) ; */ + printf( "m:\n" ) ; + printoutcmatrix ( p->m , p->l , p->N , p->l , p->N ) ; + printf( "mi:\n" ) ; + printoutcmatrix ( p->mi , p->l , p->N , p->l , p->N ) ; + printf( "i = %d\n" , p->i ) ; + printf( "perm:\n" ) ; + printoutivector ( p->perm , p->l , p->N ) ; + printf( "iperm:\n" ) ; + printoutivector ( p->iperm , p->l , p->N ) ; + pause_for_return () ; +} + +void free_cm_inversion +( cm_inversion *p +) +{ + free_ivector ( p->perm , p->l , p->N ) ; + free_ivector ( p->iperm , p->l , p->N ) ; + free_cmatrix ( p->m , p->l , p->N , p->l , p->N ) ; + free( ( char * ) ( p->mt + p->l ) ) ; +} + +/* invert_cmatrix attempts to invert p->m, or to continue to invert it, + starting from the state indicated by i,j,perm,etc. + if invert_cmatrix succeeds it returns 1, else 0, with p->i + recording the row at which non-full-rank was detected . +*/ +int invert_cmatrix +( + cm_inversion *p +) +{ + int j , done , i2 , k ; + unsigned char *irow ; + + for ( ; p->i <= p->N ; p->i ++ ) { + irow = p->m[p->i] ; + /* search for a 1 in this row */ + for ( j = p->l , done = 0 ; j <= p->N ; j++ ) { + if ( irow[j] && /* if we find a 1 and */ + p->perm[j] < p->l ) { /* if j is not already on the list */ + p->perm[j] = p->i ; + p->iperm[p->i] = j ; + done = 1 ; + break ; /* break out of j loop */ + } + } + if ( !done ) { + return ( 0 ) ; + break ; + } + else { /* search for 1s in subsequent rows. */ + for ( i2 = p->i + 1 ; i2 <= p->N ; i2 ++ ) { + if ( p->m[i2][j] ) { + for ( k = p->l ; k <= p->N ; k ++ ) { + p->m[i2][k] ^= irow[k] ; + p->mi[i2][k] ^= p->mi[p->i][k] ; + } + } + } + } + } + /* at this point, if done==1 then m contains a (permuted) upper + triangular matrix and mi contains a (permuted) lower triangular + matrix. + */ +/* printf ("lu decomposition achieved\n" ) ; */ +/* print_cm_inversion ( p ) ; */ +/* printf ("now working back\n" ) ; */ + done = invert_utriangularc ( p ) ; + /* finally, undo the permutation - make mi[l] = mi[perm[l]] etc. */ + undo_cm_perm ( p ) ; + return ( done ) ; +} + +void undo_cm_perm ( cm_inversion *p ) { + int i , pi ; + + for ( i = p->N ; i >= p->l ; i-- ) { + p->mt[i] = p->mi[i] ; /* copy all columns */ + } + for ( i = p->N ; i >= p->l ; i-- ) { /* reallocate them */ + pi = p->perm[i] ; + if ( ( pi >= p->l ) && ( pi <= p->N ) ) + p->mi[i] = p->mt[pi] ; + else { + fprintf ( stderr , "error in undo_cm_perm, perm[%d] = %d\n" , i , + pi ) ; + exit ( 0 ) ; + } + } +} + +/* invert_ltriangularc takes p->m and p->mi + and applies a series of row sums to both + such that p->m becomes the identity. + If p->mi started out as the identity, it becomes the inverse + of p->m; otherwise it becomes (that inverse)*(whatever it was before) */ +int invert_utriangularc +( cm_inversion *p ) { + int i , vj , j , k ; + + for ( i = p->N ; i >= p->l ; i-- ) { + for ( vj = i + 1 ; vj <= p->N ; vj++ ) { /* virtual j */ + j = p->iperm[vj] ; + if (!( ( j >= p->l ) && ( j <= p->N ) )) + { + fprintf ( stderr , "error in invert_utriangularc, iperm[%d] = %d\n" , + vj , j ) ; + exit ( 0 ) ; + } + if ( p->m[i][j] ) { + for ( k = p->l ; k <= p->N ; k ++ ) { + p->m[i][k] ^= p->m[vj][k] ; + p->mi[i][k] ^= p->mi[vj][k] ; + } +/* printf("%d,%d -> \n",i,j); + print_cm_inversion ( p ) ; */ + } + } + } + return 1 ; /* inverse has been evaluated */ +} + + +int modify_cmatrix_row ( cm_inversion *p ) { + /* proceed along the current row seeking an available j */ + unsigned char *irow ; + int j , done = 0 ; + + irow = p->m[p->i] ; + /* search for a 1 in this row */ + for ( j = p->l ; done == 0 && j <= p->N ; j++ ) { + if ( p->perm[j] < p->l ) { /* if j is not already on the list */ + irow[j] = 1 ; + p->mo[p->i][j] ^= 1 ; /* modify original matrix */ + done = 1 ; + } + } + return ( done ) ; /* if done == 0 then this + routine has failed to + find a j; an unexpected + outcome */ +} + +/* + pbm format is + P1 + 30 90 + (30 rows with 90 cols) + + which gives (under xv) a picture + with 90 rows and 30 cols. + + So in fact rows and columns are interchanged +*/ +void cmatrix2pbm +( + unsigned char **m, + int l1, + int h1, + int l2, + int h2, + FILE *fp +) +{ + int i,j; + + fprintf( fp , "P1\n%d %d\n" , h1 - l1 + 1 , h2 - l2 + 1 ) ; + for (i=l1; i<=h1; i++){ + for (j=l2; j<=h2; j++) + fprintf( fp , "%d ",m[i][j]); + fprintf( fp , "\n"); + } +} + +void printoutcmatrix +( + unsigned char **m, + int l1, + int h1, + int l2, + int h2 +) +{ + int i,j; + + for (i=l1; i<=h1; i++){ + if ( !(i%10) ) printf ( "| " ) ; + else printf ( " " ) ; + } + printf("\n"); + for (i=l1; i<=h1; i++){ + for (j=l2; j<=h2; j++) + printf("%d ",m[i][j]); + printf("\n"); + } +} + +void printoutcmatrix1 +( + unsigned char **m, + int l1, + int h1, + int l2, + int h2 +) +{ + int i,j; + + for (i=l1; i<=h1; i++){ + for (j=l2; j<=h2; j++) + if ( m[i][j] ) printf("1") ; else printf(" ") ; + printf("\n"); + } +} + +void printoutivector +( + int *m, + int l1, + int h1 +) +{ + int i; + + for (i=l1; i<=h1; i++) + printf( "%d " , m[i] ); + printf("\n"); +} + +void write_ivector +( + FILE *fp, + int *m, + int l1, + int h1 +) +{ + int i; + + for (i=l1; i<=h1; i++) + fprintf( fp , "%d " , m[i] ); + fprintf( fp , "\n"); +} + +void write_cvector +( + FILE *fp , + unsigned char *m, + int l1, + int h1 +) +{ + int i; + + for (i=l1; i<=h1; i++) + fprintf( fp , "%d\n" , m[i] ); +/* fprintf( fp ,"\n"); */ +} + +void printoutcvector +( + unsigned char *m, + int l1, + int h1 +) +{ + int i; + + for (i=l1; i<=h1; i++) + printf( "%d " , m[i] ); + printf("\n"); +} + +void printoutcvector1 +( + unsigned char *m, + int l1, + int h1 +) +{ + int i; + + printf("|"); + for (i=l1; i<=h1; i++) + if ( m[i] ) printf( "1" ) ; else printf( " " ); + printf("|\n"); +} + +void printoutdmatrix +( + double **m, + int l1, + int h1, + int l2, + int h2, + int style +) +{ + int i,j; + + for (i=l1; i<=h1; i++){ + for (j=l2; j<=h2; j++) + pd(m[i][j],style); + printf("\n"); + } +} + +void printoutdmatrix3 +( + double ***m, + int l1, + int h1, + int l2, + int h2, + int l3, + int h3, + int style +) +{ + int i,j,k; + + for (i=l1; i<=h1; i++){ + for (j=l2; j<=h2; j++) { + for (k=l3; k<=h3; k++) + pd(m[i][j][k],style); + printf("\n"); + } + printf("\n"); + } +} + +void pd +( + double w, + int p +) /* prints a single double with a specified number of digits */ +{ + switch(p){ + case(0): /* Don't print */ + break; + case(-1): /* Standard format */ + printf("%g ",w); + break; + case(1): + printf("%1.0f ",w); + break; + case(100): + printf("%1.0f ",w*10); + break; + case(11): + if (w==1.0)printf("%1.0f ",w); + else printf(" "); + break; + case(10): /* 0/1 <- -1/1 */ + printf("%1.0f ",(double)(w+1.0)*0.5); + break; + case(2): + printf("%2.0f ",w); + break; + case(29): + printf("%2f ",w); + break; + case(21): + printf("%2.1f ",w); + break; + case(20): + printf("%2.0f ",w); + break; + case(200): + printf("%2.0f",w*100); + break; + case(3): + printf("%3.1f ",w); + break; + case(39): + printf("%3f ",w); + break; + case(30): + printf("%3.0f ",w); + break; + case(300): + printf("%3.0f ",w*1000); + break; + case(31): + printf("%3.1f ",w); + break; + case(32): + printf("%3.2f ",w); + break; + case(4): + printf("%4.1f ",w); + break; + case(49): + printf("%4f ",w); + break; + case(40): + printf("%4.0f ",w); + break; + case(400): + printf("%4.0f ",w*10000); + break; + case(41): + printf("%4.1f ",w); + break; + case(43): + printf("%4.3f ",w); + break; + case(42): + printf("%4.2f ",w); + break; + case(52): + printf("%5.2f ",w); + break; + case(53): + printf("%5.3f ",w); + break; + case(54): + printf("%5.4f ",w); + break; + case(50): + printf("%5.0f ",w); + break; + case(500): /* for probabilities */ + printf("%5.0f ",w*100000); + break; + case(60): + printf("%6.0f ",w); + break; + case(62): + printf("%6.2f ",w); + break; + case(63): + printf("%6.3f ",w); + break; + case(64): + printf("%6.4f ",w); + break; + case(72): + printf("%7.2f ",w); + break; + case(74): + printf("%7.4g ",w); + break; + case(84): + printf("%8.4g ",w); + break; + case(94): + printf("%+9.4g ",w); + break; + case(76): + printf("%7.6f ",w); + break; + case(5): + printf("%5g ",w); + break; + case(6): + printf("%6g ",w); + break; + case(600): + printf("%6.0f ",w*1000000); + break; + case(7): + printf("%7g ",w); + break; + case(700): + printf("%7.0f ",w*10000000); + break; + default: + printf("Error in pd rule \n"); + break; + } +} + +void pdv +( + double *w, int m, int n, int p + ) /* prints dvector without newline, with specified number of digits */ +{ + int i; + for(i=m;i<=n;i++) + pd(w[i],p); +} + + +void pause_for_return() +{ + int c; + + printf( "press return to continue" ); + do{}while((c=getchar())!=10); +} + +double gammln( + double xx +) +{ + double x,tmp,ser; + static double cof[6]={76.18009173,-86.50532033,24.01409822, + -1.231739516,0.120858003e-2,-0.536382e-5}; + int j; + + x=xx-1.0; + tmp=x+5.5; + tmp -= (x+0.5)*log(tmp); + ser=1.0; + for (j=0;j<=5;j++) { + x += 1.0; + ser += cof[j]/x; + } + return -tmp+log(2.50662827465*ser); +} + +int find_rank ( double act , double *v , int lo , int hi ) { + /* given an ordered list v[lo] < v[lo+1] < ... < v[hi], + and assuming that act > v[lo], the task is to return + the ranking of act, i.e. the integer place where it will push + in. For example, if we find act < v[lo+1], the answer is lo. + If act > v[hi], answer is hi. + Note no comparison with v[lo] should occur, we already know it's + bigger. + */ + + int query ; + + if ( lo > hi ) { + fprintf ( stderr , "Eek, lo > hi ???\n" ) ; + exit ( 0 ) ; + } + if ( lo == hi ) { /* we are done */ + return ( lo ) ; + } + else { + query = lo + ( hi + 1 - lo ) / 2 ; + if ( query == lo ) { + fprintf ( stderr , "Eek, query == lo ???\n" ) ; + exit ( 0 ) ; + } + else if ( act > v[query] ) { + return ( find_rank ( act , v , query , hi ) ) ; + } + else { + return ( find_rank ( act , v , lo , query - 1 ) ) ; + } + } +} + +int dotprod_mod2 ( int *a , int *b , int lo , int hi ) { + int i , ans = 0 ; + for ( i = lo ; i <= hi ; i ++ ) { + ans ^= a[i] * b[i] ; + } + return ans ; +} +int idotprod ( int *a , int *b , int lo , int hi ) { + int i , ans = 0 ; + for ( i = lo ; i <= hi ; i ++ ) { + ans += a[i] * b[i] ; + } + return ans ; +} + +unsigned char cdotprod_mod2 ( unsigned char *a , unsigned char *b , int lo , int hi ) { + unsigned char ans = 0 ; + int i ; + for ( i = lo ; i <= hi ; i ++ ) { + ans ^= a[i] & b[i] ; + } + return ans ; +} + +void mult_cms +( unsigned char **A , unsigned char **B , unsigned char **C , int l , int N ) { + int i , j , k ; + unsigned char a ; + + for ( i = l ; i <= N ; i ++ ) { + for ( k = l ; k <= N ; k ++ ) { + a = 0 ; + for ( j = l ; j <= N ; j ++ ) { + a ^= A[i][j] & B[j][k] ; + } + C[i][k] = a ; + } + } +} + +void mult_cm_cv +( unsigned char **A , unsigned char *b , unsigned char *c , int l , int N ) { + int i , j ; + unsigned char a ; + + for ( i = l ; i <= N ; i ++ ) { + a = 0 ; + for ( j = l ; j <= N ; j ++ ) { + a ^= A[i][j] & b[j]; + } + c[i] = a ; + } +} + +int cdotprod ( unsigned char *a , unsigned char *b , int lo , int hi ) { + int i , ans = 0 ; + for ( i = lo ; i <= hi ; i ++ ) { + ans += a[i] & b[i] ; + } + return ans ; +} + +/* For useful routines for dealing with triangular char matrices and + with lists of matrices of the form + U = 10 + 11 + (just one off diagonal 1) + see + ~/code/old/mnc.c.940106 +*/ + + +#define MBIG 1000000000 +#define MSEED 161803398 +#define MZ 0 +#define FAC (1.0/MBIG) + +float ran3( + int *idum +) +{ + static int inext,inextp; + static long ma[56]; + static int iff=0; + long mj,mk; + int i,ii,k; + + if (*idum < 0 || iff == 0) { + iff=1; + mj=MSEED-(*idum < 0 ? -*idum : *idum); + mj %= MBIG; + ma[55]=mj; + mk=1; + for (i=1;i<=54;i++) { + ii=(21*i) % 55; + ma[ii]=mk; + mk=mj-mk; + if (mk < MZ) mk += MBIG; + mj=ma[ii]; + } + for (k=1;k<=4;k++) + for (i=1;i<=55;i++) { + ma[i] -= ma[1+(i+30) % 55]; + if (ma[i] < MZ) ma[i] += MBIG; + } + inext=0; + inextp=31; + *idum=1; + } + if (++inext == 56) inext=1; + if (++inextp == 56) inextp=1; + mj=ma[inext]-ma[inextp]; + if (mj < MZ) mj += MBIG; + ma[inext]=mj; + return mj*FAC; +} + +#undef MBIG +#undef MSEED +#undef MZ +#undef FAC diff --git a/src/macopt/r.h b/src/macopt/r.h new file mode 100644 index 00000000..c8b41733 --- /dev/null +++ b/src/macopt/r.h @@ -0,0 +1,181 @@ + +/* r.h header for assorted minor subroutines library release 1.1 + + Copyright (c) 2002 David J.C. MacKay + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + GNU licenses are here : + http://www.gnu.org/licenses/licenses.html + + Author contact details are here : + http://www.inference.phy.cam.ac.uk/mackay/c/macopt.html mackay@mrao.cam.ac.uk +*/ +/* ANSI Version 1 */ +/* 9 6 92 */ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include +#include +#include +#include "nrutil.h" + +#ifndef INT +#define INT( a ) ( ( ( a ) > 0.0 ) ? ( (int) ( (a)+0.5 ) ) : ( (int) ( (a)-0.5 ) ) ) +#endif +#ifndef MIN +#define MIN( a , b ) ( ( a ) < ( b ) ? ( a ) : ( b ) ) +#endif +#ifndef MAX +#define MAX( a , b ) ( ( a ) > ( b ) ? ( a ) : ( b ) ) +#endif +#ifndef PI +#define PI 3.1415926535 +#endif +#ifndef STPI +#define STPI 2.50663 /* sqrt ( 2*PI ) */ +#endif +#ifndef LTPI +#define LTPI 1.83788 /* log ( 2*PI ) */ +#endif +#ifndef FLUSH +#define FLUSH fflush( stdout ) ; +#endif +#define fnewline fprintf( fp , "\n" ) +#define junkstring fscanf( fp , "%s" , junk ) +#define FNEWLINE fprintf( fp , "\n" ) +#define JUNKSTRING fscanf( fp , "%s" , junk ) + +/* list of functions that should be accepted from maths library */ + +/* +void srandom ( long ) ; +int random ( void ) ; + +double drand48( ) ; +void srand48( long ) ; +int abs( int ) ; +double fabs( double ) ; +double exp( double ) ; +double sqrt( double ) ; +*/ + +#ifndef BELL +#define BELL '\007' +#endif +#ifndef ALERT +#define ALERT '\a' /* these are integers with the relevant values */ +#endif + +/* routines in ansi/r.c */ + +typedef struct { + unsigned char **m ; /* the matrix (this copy gets munged */ + unsigned char **mo; /* original copy -- unchanged, except by the + modify_cmatrix_row function */ + unsigned char **mi; /* stores the inverse */ + unsigned char **mt; /* used to assist in undoing permutation */ + int *perm ; /* the permutation */ + int *iperm ; /* and its inverse */ + int i ; /* what row we have got up to in the LU decomposition */ + int l , N ; /* e.g. 1 , N */ +} cm_inversion ; + + +double ***fancy_dmatrix3( int , int , int , int , int * , int * ) ; +double **fancy_dmatrix2( int , int , int * , int * ) ; +void enterdmatrix ( double ** , int * , int * , int * , int * ) ; +double random_1( void ) ; +void randomise( long ) ; +void randomdmatrix( double ** , int , int , int , int , int , double ) ; +void IJdmatrix( double ** , int , int , int , int , double , double ) ; +void constantdmatrix( double ** , int , int , int , int , double ) ; +double readindmatrix ( double ** , int , int , int , int , char * ) ; +int readinimatrix ( int ** , int , int , int , int , char * ) ; +int fread_imatrix ( int ** , int , int , int , int , FILE * ) ; +void readinlumatrix ( double ** , int * , int , char * ) ; +void readindvector ( double * , int , int , char * ) ; +int readdvector ( double * , int , int , char * ) ; +int writedvector ( double * , int , int , char * ) ; +void readinivector ( int * , int , int , char * ) ; +int fread_ivector ( int * , int , int , FILE * ) ; +int fread_cvector ( unsigned char * , int , int , FILE * ) ; +int fread_dvector ( double * , int , int , FILE * ) ; +void inputf( float * ) ; +void inputd( double * ) ; +void inputi( int * ) ; +void inputc( unsigned char * ) ; +void inputrc( unsigned char * ) ; +void inputrf( float * ) ; +void inputrd( double * ) ; +void inputri( int * ) ; +void clearscan( void ) ; +void typeindvector( double * , int , int ) ; +void set_dvector_const( double * , int , int , double ) ; +void set_dvector_c_dvector ( double * , int , int , double , double * ) ; +void set_ivector_const( int * , int , int , int ) ; +void typeindmatrix ( double ** , int , int , int , int ) ; +void typeincmatrix ( unsigned char ** , int , int , int , int ) ; +int ***imatrix3( int , int , int , int , int , int ) ; +long int ***limatrix3( int , int , int , int , int , int ) ; +long int **limatrix( int , int , int , int ) ; +int ipower( int , int ) ; + +double ***dmatrix3( int , int , int , int , int , int ) ; +void printoutimatrix ( int **, int , int , int , int ) ; +void write_imatrix ( FILE * , int **, int , int , int , int ) ; +void write_imatrix2 ( FILE * , int **, int , int , int , int ) ; +void cmatrix2pbm ( unsigned char **, int , int , int , int , FILE *) ; +void print_cm_inversion ( cm_inversion *) ; +void free_cm_inversion ( cm_inversion *) ; +void undo_cm_perm ( cm_inversion *) ; +int invert_cmatrix( cm_inversion *) ; +int modify_cmatrix_row ( cm_inversion * ) ; +int invert_utriangularc ( cm_inversion * ) ; +void allocate_cm_inversion ( unsigned char **, int , int , unsigned char **, + cm_inversion *) ; +void printoutcmatrix ( unsigned char **, int ,int , int , int ) ; +void printoutcmatrix1 ( unsigned char **, int ,int , int , int ) ; +void printoutivector ( int * , int , int ) ; +void write_ivector ( FILE * , int * , int , int ) ; +void write_cvector ( FILE * , unsigned char * , int , int ) ; +void printoutcvector ( unsigned char *, int , int ) ; +void printoutcvector1 ( unsigned char *, int , int ) ; +void printoutdmatrix ( double **, int ,int , int , int , int ) ; +int writedmatrix ( double **, int ,int , int , int , char * ) ; +void printoutdmatrix3 ( double ***, int ,int ,int ,int , int , int , int ) ; +void pd( double , int ) ; +void pdv( double * , int, int, int ) ; +void pause_for_return( void ) ; +double gammln ( double ) ; +int find_rank ( double , double * , int , int ) ; +int dotprod_mod2 ( int * , int * , int , int ) ; +int idotprod ( int * , int * , int , int ) ; +unsigned char cdotprod_mod2 ( unsigned char * , unsigned char * , int , int ) ; +void mult_cms ( unsigned char ** , unsigned char ** , unsigned char ** , + int , int ) ; +void mult_cm_cv ( unsigned char ** , unsigned char * , unsigned char * , + int , int ) ; +int cdotprod ( unsigned char * , unsigned char * , int , int ) ; +float ran3(int*) ; + +#ifdef __cplusplus +} +#endif diff --git a/src/macopt/rand.h b/src/macopt/rand.h new file mode 100644 index 00000000..047db27d --- /dev/null +++ b/src/macopt/rand.h @@ -0,0 +1,27 @@ + +/* RAND.H - Random number generators. */ +/* Copyright (c) 1992 by Radford M. Neal */ + +/* SET RANDOM NUMBER SEED. */ + +#define ran_seed(s) srandom(s) + +/* GENERATE RANDOM NUMBERS. */ + +#define ranf() \ + ((double)random()/(1.0+(double)0x7fffffff)) /* Uniform from interval [0,1) */ + +#define ranu() \ + ((1.0+(double)random())/(2.0+(double)0x7fffffff)) /* Uniform from (0,1) */ + +#define rani(n) \ + ( (int) (ranf()*(n)) ) /* Uniform from 0, 1, ..., (n-1) */ + +#define rann() \ + (cos(2.0*3.141592654*ranf()) * sqrt(-2.0*log(1.0-ranf()))) /* From standard Norml */ + +#define rane() \ + (-log(ranu())) /* From exponential */ + +#define ranc() \ + (tan(3.141592654*(ranu()-0.5))) /* From Cauchy */ diff --git a/src/make.include b/src/make.include new file mode 100644 index 00000000..9febef09 --- /dev/null +++ b/src/make.include @@ -0,0 +1,8 @@ +INCLUDEPATH:=-I$(DVLPATH)/basis_function \ + -I$(DVLPATH)/macopt \ + -I$(DVLPATH)/method \ + -I$(DVLPATH)/orbitals \ + -I$(DVLPATH)/program_utils\ + -I$(DVLPATH)/properties \ + -I$(DVLPATH)/system \ + -I$(DVLPATH)/wavefunction diff --git a/src/make.rules b/src/make.rules new file mode 100644 index 00000000..92d449ba --- /dev/null +++ b/src/make.rules @@ -0,0 +1,78 @@ + +$(OBJPATH)/%.o:basis_function/%.cpp + @echo ________________________________________________________________ + @echo Compiling $< + [ -e $(DVLPATH)/obj ] || mkdir $(DVLPATH)/obj + [ -e $(OBJPATH) ] || mkdir $(OBJPATH) + $(CXX) -c $(DEBUG) $(CXXFLAGS) $(BLAS_INCLUDE) $(CPPFLAGS) -o $@ $< + +$(OBJPATH)/%.o:macopt/%.cpp + @echo ________________________________________________________________ + @echo Compiling $< + [ -e $(DVLPATH)/obj ] || mkdir $(DVLPATH)/obj + [ -e $(OBJPATH) ] || mkdir $(OBJPATH) + $(CXX) -c $(DEBUG) $(CXXFLAGS) $(BLAS_INCLUDE) $(CPPFLAGS) -o $@ $< + +$(OBJPATH)/%.o:method/%.cpp + @echo ________________________________________________________________ + @echo Compiling $< + [ -e $(DVLPATH)/obj ] || mkdir $(DVLPATH)/obj + [ -e $(OBJPATH) ] || mkdir $(OBJPATH) + $(CXX) -c $(DEBUG) $(CXXFLAGS) $(BLAS_INCLUDE) $(CPPFLAGS) -o $@ $< + +$(OBJPATH)/%.o:orbitals/%.cpp + @echo ________________________________________________________________ + @echo Compiling $< + [ -e $(DVLPATH)/obj ] || mkdir $(DVLPATH)/obj + [ -e $(OBJPATH) ] || mkdir $(OBJPATH) + $(CXX) -c $(DEBUG) $(CXXFLAGS) $(BLAS_INCLUDE) $(CPPFLAGS) -o $@ $< + +$(OBJPATH)/%.o:program_utils/%.cpp + @echo ________________________________________________________________ + @echo Compiling $< + [ -e $(DVLPATH)/obj ] || mkdir $(DVLPATH)/obj + [ -e $(OBJPATH) ] || mkdir $(OBJPATH) + $(CXX) -c $(DEBUG) $(CXXFLAGS) $(BLAS_INCLUDE) $(CPPFLAGS) -o $@ $< + +$(OBJPATH)/%.o:properties/%.cpp + @echo ________________________________________________________________ + @echo Compiling $< + [ -e $(DVLPATH)/obj ] || mkdir $(DVLPATH)/obj + [ -e $(OBJPATH) ] || mkdir $(OBJPATH) + $(CXX) -c $(DEBUG) $(CXXFLAGS) $(BLAS_INCLUDE) $(CPPFLAGS) -o $@ $< + +$(OBJPATH)/%.o:system/%.cpp + @echo ________________________________________________________________ + @echo Compiling $< + [ -e $(DVLPATH)/obj ] || mkdir $(DVLPATH)/obj + [ -e $(OBJPATH) ] || mkdir $(OBJPATH) + $(CXX) -c $(DEBUG) $(CXXFLAGS) $(BLAS_INCLUDE) $(CPPFLAGS) -o $@ $< + +$(OBJPATH)/%.o:wavefunction/%.cpp + @echo ________________________________________________________________ + @echo Compiling $< + [ -e $(DVLPATH)/obj ] || mkdir $(DVLPATH)/obj + [ -e $(OBJPATH) ] || mkdir $(OBJPATH) + $(CXX) -c $(DEBUG) $(CXXFLAGS) $(BLAS_INCLUDE) $(CPPFLAGS) -o $@ $< + +$(OBJPATH)/%.o:pw2lcao/%.cpp + @echo ________________________________________________________________ + @echo Compiling $< + [ -e $(DVLPATH)/obj ] || mkdir $(DVLPATH)/obj + [ -e $(OBJPATH) ] || mkdir $(OBJPATH) + $(CXX) -c $(DEBUG) $(CXXFLAGS) $(BLAS_INCLUDE) $(CPPFLAGS) -o $@ $< + +astyle: + @echo ________________________________________________________________ + @echo Pretty-printing the source... + astyle -s2 $(SRCPATH)/*.cpp $(INCLUDEPATH)/*.h + +$(DEPENDFILE) depend:$(SOURCES) + @echo ________________________________________________________________ + @echo Creating dependencies + [ -e $(DVLPATH)/obj ] || mkdir $(DVLPATH)/obj + [ -e $(OBJPATH) ] || mkdir $(OBJPATH) + set -e; $(DEPENDMAKER) $(addprefix $(SRCPATH)/,$(SOURCES)) \ + | sed 's/\(.*\)\.o[ :]*/$(subst /,\/,$(OBJPATH))\/\1.o $(subst .,\.,$(subst/,\/,$(DEPENDFILE))) : /g'\ + > $(DEPENDFILE) + diff --git a/src/make/AIX-mpi.mk b/src/make/AIX-mpi.mk new file mode 100644 index 00000000..b010979b --- /dev/null +++ b/src/make/AIX-mpi.mk @@ -0,0 +1,8 @@ +CXX:=mpCC +CXXFLAGS:= -DUSE_MPI -q64 -qrtti $(INCLUDEPATH) -O3 -qstrict +DEBUG:= -DNDEBUG -DDEBUG_WRITE +LDFLAGS:= + + +DEPENDMAKER:=g++ -MM $(INCLUDEPATH) + diff --git a/src/make/AIX.mk b/src/make/AIX.mk new file mode 100644 index 00000000..8f0c3126 --- /dev/null +++ b/src/make/AIX.mk @@ -0,0 +1,9 @@ +CXX:=xlC +CXXFLAGS:= -qrtti -q64 -qarch=pwr4 $(INCLUDEPATH) -O3 -qstrict +DEBUG:= -DNDEBUG +LDFLAGS:= + +###################################################################### +# This is the invokation to generate dependencies +DEPENDMAKER:=g++ -MM $(INCLUDEPATH) + diff --git a/src/make/CRAY.mk b/src/make/CRAY.mk new file mode 100644 index 00000000..73755585 --- /dev/null +++ b/src/make/CRAY.mk @@ -0,0 +1,2 @@ +CXX:=CC +CXXFLAGS:=-h new_for_init -O2 -D__STL_NO_EXCEPTION_HEADER diff --git a/src/make/CYGWIN_NT-5.1.mk b/src/make/CYGWIN_NT-5.1.mk new file mode 100644 index 00000000..d28a70c1 --- /dev/null +++ b/src/make/CYGWIN_NT-5.1.mk @@ -0,0 +1,13 @@ +###################################################################### +# Compiler definitions for Linux systems +# all compiler specific information should be declared here +CXX:=g++ +CXXFLAGS:= -O2 -I$(INCLUDEPATH) +DEBUG:=-Wall -DNDEBUG -DNO_RANGE_CHECKING -pg + + +###################################################################### +# This is the invokation to generate dependencies +DEPENDMAKER:=g++ -MM -I $(INCLUDEPATH) + + diff --git a/src/make/DEFAULT.mk b/src/make/DEFAULT.mk new file mode 100644 index 00000000..f9a4ddec --- /dev/null +++ b/src/make/DEFAULT.mk @@ -0,0 +1,2 @@ +CXX:=c++ +CXXFLAGS:=-O -D__STL_NO_EXCEPTION_HEADER diff --git a/src/make/Darwin.mk b/src/make/Darwin.mk new file mode 100644 index 00000000..ce4d6db5 --- /dev/null +++ b/src/make/Darwin.mk @@ -0,0 +1,30 @@ +###################################################################### +# Compiler definitions for Linux systems +# all compiler specific information should be declared here + +CXX:=g++ + +CXXFLAGS := -O3 \ + -funroll-loops -ffast-math \ + $(INCLUDEPATH) -fomit-frame-pointer +#CXXFLAGS := -O2 -I$(INCLUDEPATH) +DEBUG:= -Wall -DNO_RANGE_CHECKING -DNDEBUG -DDEBUG_WRITE +LDFLAGS:= + +###################################################################### +# This is the invokation to generate dependencies +DEPENDMAKER:=g++ -MM $(INCLUDEPATH) + +###################################################################### +# example of changing options based upon processor type: +# if compiling on 386, don't use 486 extensions + +#ifeq ("i386",$(shell uname -m')) +# CXXFLAGS+=-mno-486 +#endif +#ifeq ("i486",$(shell uname -m)) +# CXXFLAGS+=-m486 +#endif +#ifeq ("i586",$(shell uname -m)) +# CXXFLAGS+=-m586 # if only gcc supported this... +#endif diff --git a/src/make/IRIX64.mk b/src/make/IRIX64.mk new file mode 100644 index 00000000..0f3da489 --- /dev/null +++ b/src/make/IRIX64.mk @@ -0,0 +1,9 @@ +CXX:=KCC +CXXFLAGS:= -I$(INCLUDEPATH) -O3 +LDFLAGS:= -lm + +#We can also use SGI's compiler, although it's more or less inferior to +#either KCC or gcc. +#CXX:=CC +#CXXFLAGS:= -LANG:std -I$(INCLUDEPATH) -O2 +#LDFLAGS := -lm diff --git a/src/make/Linux-3.2-debug.mk b/src/make/Linux-3.2-debug.mk new file mode 100644 index 00000000..cb313a34 --- /dev/null +++ b/src/make/Linux-3.2-debug.mk @@ -0,0 +1,30 @@ +###################################################################### +# Compiler definitions for Linux systems +# all compiler specific information should be declared here +CXX:=g++ + +CXXFLAGS:= -O2 $(INCLUDEPATH) +DEBUG := -Wall -DRANGE_CHECKING -DDEBUG_WRITE -g +#DEBUG:= -Wall -DNO_RANGE_CHECKING -DDEBUG_WRITE +#DEBUG:= -Wall -DNO_RANGE_CHECKING -DNDEBUG -DDEBUG_WRITE +#DEBUG:=-Wall -DNDEBUG -DNO_RANGE_CHECKING -DDEBUG_WRITE -pg +#LDFLAGS:=-L/usr/pgi/linux86/lib -lm -lstd +#LDFLAGS := -static + +###################################################################### +# This is the invokation to generate dependencies +DEPENDMAKER:=g++ -MM $(INCLUDEPATH) + +###################################################################### +# example of changing options based upon processor type: +# if compiling on 386, don't use 486 extensions + +#ifeq ("i386",$(shell uname -m')) +# CXXFLAGS+=-mno-486 +#endif +#ifeq ("i486",$(shell uname -m)) +# CXXFLAGS+=-m486 +#endif +#ifeq ("i586",$(shell uname -m)) +# CXXFLAGS+=-m586 # if only gcc supported this... +#endif diff --git a/src/make/Linux-3.2-profile.mk b/src/make/Linux-3.2-profile.mk new file mode 100644 index 00000000..f514a266 --- /dev/null +++ b/src/make/Linux-3.2-profile.mk @@ -0,0 +1,46 @@ +###################################################################### +# Compiler definitions for Linux systems +# all compiler specific information should be declared here + +#CXX:=g++-3.3 +CXX := g++ +CXXFLAGS := -O3 \ + -funroll-loops -ffast-math \ + $(INCLUDEPATH) + + +#CXXFLAGS:= -O2 $(INCLUDEPATH) + +#CXXFLAGS+= -DUSE_LAPACK -DUSE_BLAS + +#LAPACK_LIBS := -L/home/apps/ATLAS/lib/Linux_ATHLONSSE1 -llapack -lf77blas -lcblas -latlas -static +#LAPACK_INCLUDE := -I/home/apps/ATLAS/include +# +#BLAS_LIBS := $(LAPACK_LIBS) +#BLAS_INCLUDE := $(LAPACK_INCLUDE) + + +#DEBUG := -Wall -DRANGE_CHECKING -DDEBUG_WRITE +#DEBUG:= -Wall -DNO_RANGE_CHECKING -DDEBUG_WRITE +#DEBUG:= -Wall -DNO_RANGE_CHECKING -DNDEBUG -DDEBUG_WRITE -D__USE_GNU +DEBUG:=-Wall -DNDEBUG -DNO_RANGE_CHECKING -DDEBUG_WRITE -D__USE_GNU -pg +#LDFLAGS:=-L/usr/pgi/linux86/lib -lm -lstd +#LDFLAGS := -static + +###################################################################### +# This is the invokation to generate dependencies +DEPENDMAKER:=g++ -MM $(INCLUDEPATH) + +###################################################################### +# example of changing options based upon processor type: +# if compiling on 386, don't use 486 extensions + +#ifeq ("i386",$(shell uname -m')) +# CXXFLAGS+=-mno-486 +#endif +#ifeq ("i486",$(shell uname -m)) +# CXXFLAGS+=-m486 +#endif +#ifeq ("i586",$(shell uname -m)) +# CXXFLAGS+=-m586 # if only gcc supported this... +#endif diff --git a/src/make/Linux-3.2.mk b/src/make/Linux-3.2.mk new file mode 100644 index 00000000..3cc31b7a --- /dev/null +++ b/src/make/Linux-3.2.mk @@ -0,0 +1,42 @@ +###################################################################### +# Compiler definitions for Linux systems +# all compiler specific information should be declared here + +CXX:=g++-3.3 +CXXFLAGS := -O3 \ + -funroll-loops -ffast-math \ + -I$(INCLUDEPATH) -fomit-frame-pointer + +CXXFLAGS+= -DUSE_LAPACK -DUSE_BLAS + +LAPACK_LIBS := -L/home/apps/ATLAS/lib/Linux_ATHLONSSE1 -llapack -lf77blas -lcblas -latlas -static +LAPACK_INCLUDE := -I/home/apps/ATLAS/include + +BLAS_LIBS := $(LAPACK_LIBS) +BLAS_INCLUDE := $(LAPACK_INCLUDE) + +#CXXFLAGS:= -O2 -I$(INCLUDEPATH) +#DEBUG := -Wall -DRANGE_CHECKING -DDEBUG_WRITE +#DEBUG:= -Wall -DNO_RANGE_CHECKING -DDEBUG_WRITE +DEBUG:= -Wall -DNO_RANGE_CHECKING -DNDEBUG -D__USE_GNU +#DEBUG:=-Wall -DNDEBUG -DNO_RANGE_CHECKING -DDEBUG_WRITE -D__USE_GNU -pg +#LDFLAGS:=-L/usr/pgi/linux86/lib -lm -lstd +#LDFLAGS := -static + +###################################################################### +# This is the invokation to generate dependencies +DEPENDMAKER:=g++ -MM -I $(INCLUDEPATH) + +###################################################################### +# example of changing options based upon processor type: +# if compiling on 386, don't use 486 extensions + +#ifeq ("i386",$(shell uname -m')) +# CXXFLAGS+=-mno-486 +#endif +#ifeq ("i486",$(shell uname -m)) +# CXXFLAGS+=-m486 +#endif +#ifeq ("i586",$(shell uname -m)) +# CXXFLAGS+=-m586 # if only gcc supported this... +#endif diff --git a/src/make/Linux-chmpi.mk b/src/make/Linux-chmpi.mk new file mode 100644 index 00000000..96b84d3e --- /dev/null +++ b/src/make/Linux-chmpi.mk @@ -0,0 +1,39 @@ +###################################################################### +# Compiler definitions for Linux systems +# all compiler specific information should be declared here +CXX:=mpiCC + +MPIDIRECTORY:=/opt/mpich/ethernet/gcc/ + +CXXFLAGS:= -O3 -fomit-frame-pointer -funroll-loops -ffast-math +CXXFLAGS += -DUSE_MPI ${INCLUDEPATH} + +#LAPACK_LIBS := -L/usr/lib -lgslcblas +#LAPACK_INCLUDE := "" + +#BLAS_LIBS := $(LAPACK_LIBS) +#BLAS_INCLUDE := $(LAPACK_INCLUDE) + + +#DEBUG := -Wall -DRANGE_CHECKING -DDEBUG_WRITE +DEBUG:= -Wall -DNO_RANGE_CHECKING -DNDEBUG +#DEBUG:=-Wall -DNDEBUG -DNO_RANGE_CHECKING -pg +LDFLAGS := "" + + +###################################################################### +# This is the invokation to generate dependencies +DEPENDMAKER:=g++ -MM $(INCLUDEPATH) + +###################################################################### +# example of changing options based upon processor type: +# if compiling on 386, don't use 486 extensions +#ifeq ("i386",$(shell uname -m')) +# CXXFLAGS+=-mno-486 +#endif +#ifeq ("i486",$(shell uname -m)) +# CXXFLAGS+=-m486 +#endif +#ifeq ("i586",$(shell uname -m)) +# CXXFLAGS+=-m586 # if only gcc supported this... +#endif diff --git a/src/make/Linux-denmpi.mk b/src/make/Linux-denmpi.mk new file mode 100644 index 00000000..7034d178 --- /dev/null +++ b/src/make/Linux-denmpi.mk @@ -0,0 +1,44 @@ +###################################################################### +# Compiler definitions for Linux systems +# all compiler specific information should be declared here +CXX:=g++ + +MPIDIRECTORY:=/opt/mpich/gnu_unshared + +CXXFLAGS:= -O3 -fomit-frame-pointer -funroll-loops -ffast-math + + + +#CXXFLAGS:= -O2 +CXXFLAGS += -DUSE_MPI -DUSE_STDARG -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_UNISTD_H=1 \ + -DHAVE_STDARG_H=1 -DUSE_STDARG=1 -DMALLOC_RET_VOID=1 -I$(MPIDIRECTORY)/include \ + $(INCLUDEPATH) + +#CXXFLAGS+= -DUSE_LAPACK -DUSE_BLAS + +#LAPACK_LIBS := -L/usr/lib -llapack -lf77blas -lcblas -latlas + +#BLAS_LIBS := $(LAPACK_LIBS) + +#DEBUG := -Wall -DRANGE_CHECKING -DDEBUG_WRITE +DEBUG:= -Wall -DNO_RANGE_CHECKING -DNDEBUG -DDEBUG_WRITE +#DEBUG:=-Wall -DNDEBUG -DNO_RANGE_CHECKING -pg +LDFLAGS := -L$(MPIDIRECTORY)/lib -lmpich -static + + +###################################################################### +# This is the invokation to generate dependencies +DEPENDMAKER:=g++ -MM $(INCLUDEPATH) + +###################################################################### +# example of changing options based upon processor type: +# if compiling on 386, don't use 486 extensions +#ifeq ("i386",$(shell uname -m')) +# CXXFLAGS+=-mno-486 +#endif +#ifeq ("i486",$(shell uname -m)) +# CXXFLAGS+=-m486 +#endif +#ifeq ("i586",$(shell uname -m)) +# CXXFLAGS+=-m586 # if only gcc supported this... +#endif diff --git a/src/make/Linux-icc.mk b/src/make/Linux-icc.mk new file mode 100644 index 00000000..659fb272 --- /dev/null +++ b/src/make/Linux-icc.mk @@ -0,0 +1,36 @@ +###################################################################### +# Compiler definitions for Linux systems +# all compiler specific information should be declared here +#also try -O3 -xW -tpp7 -ipo -ipo_obj +#CXX:=g++-3.3 +CXX:=icpc +#CXX:=/home/apps/intel/compiler80/bin/icc +#CXXFLAGS := -O3 \ + -axW -ip \ + -I$(INCLUDEPATH) +CXXFLAGS := -O3 -fno-alias -xW -vec_report3 -I$(INCLUDEPATH) + +#DEBUG := -Wall -DRANGE_CHECKING -DDEBUG_WRITE +DEBUG:= -DNO_RANGE_CHECKING -DNDEBUG -DDEBUG_WRITE +#DEBUG:=-Wall -DNDEBUG -DNO_RANGE_CHECKING -DDEBUG_WRITE -pg +#LDFLAGS:=-L/usr/pgi/linux86/lib -lm -lstd +#LDFLAGS := -lpthread -i_dynamic + + +###################################################################### +# This is the invokation to generate dependencies +DEPENDMAKER:=g++ -MM -I $(INCLUDEPATH) + +###################################################################### +# example of changing options based upon processor type: +# if compiling on 386, don't use 486 extensions + +#ifeq ("i386",$(shell uname -m')) +# CXXFLAGS+=-mno-486 +#endif +#ifeq ("i486",$(shell uname -m)) +# CXXFLAGS+=-m486 +#endif +#ifeq ("i586",$(shell uname -m)) +# CXXFLAGS+=-m586 # if only gcc supported this... +#endif diff --git a/src/make/Linux-iccpar.mk b/src/make/Linux-iccpar.mk new file mode 100644 index 00000000..e097c884 --- /dev/null +++ b/src/make/Linux-iccpar.mk @@ -0,0 +1,22 @@ +###################################################################### +# Compiler definitions for Linux systems +# all compiler specific information should be declared here +#CXX:=g++-3.3 + +#CXX:=icpc +CXX:=/home/apps/intel/compiler80/bin/icc +CXXFLAGS := -O3 \ + -axW -ip -DUSE_MPI \ + -DUSE_STDARG -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_UNISTD_H=1 \ + -DHAVE_STDARG_H=1 -DUSE_STDARG=1 -DMALLOC_RET_VOID=1 -I/home/apps/mpich-1.2.4/include \ + -I$(INCLUDEPATH) + +#DEBUG := -Wall -DRANGE_CHECKING -DDEBUG_WRITE +DEBUG:= -DNO_RANGE_CHECKING -DNDEBUG +#DEBUG:=-Wall -DNDEBUG -DNO_RANGE_CHECKING -DDEBUG_WRITE -pg +#LDFLAGS := -lpthread -i_dynamic +LDFLAGS := -static -L/home/apps/mpich-1.2.5/lib -lmpich +###################################################################### +# This is the invokation to generate dependencies +DEPENDMAKER:=g++ -MM -I $(INCLUDEPATH) + diff --git a/src/make/Linux-intel.mk b/src/make/Linux-intel.mk new file mode 100644 index 00000000..70bc4b99 --- /dev/null +++ b/src/make/Linux-intel.mk @@ -0,0 +1,9 @@ +CXX:=ecpc +CXXFLAGS:= -O2 -Ob2 -mcpu=itanium -I$(INCLUDEPATH) +#DEBUG:= -DRANGE_CHECKING #-DNDEBUG +DEBUG:= -DNO_RANGE_CHECKING -DNDEBUG +LDFLAGS:= "" +###################################################################### +# This is the invokation to generate dependencies +DEPENDMAKER:=g++ -MM -I $(INCLUDEPATH) + diff --git a/src/make/Linux-itmpi.mk b/src/make/Linux-itmpi.mk new file mode 100644 index 00000000..7ddba3d8 --- /dev/null +++ b/src/make/Linux-itmpi.mk @@ -0,0 +1,31 @@ +###################################################################### +# Compiler definitions for Linux systems +# all compiler specific information should be declared here +CXX:=g++ +CXXFLAGS:= -O2 -funroll-loops -ffast-math -I$(INCLUDEPATH) -DUSE_MPI \ + -I/usr/local/vmi/mpich/include +#CXX:=pgCC +#CXXFLAGS:= -O2 --no_exceptions -I$(INCLUDEPATH) +#DEBUG := -Wall -DRANGE_CHECKING +DEBUG:= -Wall -DNO_RANGE_CHECKING -DNDEBUG +#DEBUG:=-Wall -DNDEBUG -DNO_RANGE_CHECKING -pg +#LDFLAGS:=-L/usr/pgi/linux86/lib -lm -lstd +LDFLAGS:=-L/usr/local/vmi/mpich/lib/gcc -lmpich -lvmi -ldl -lpthread + + +###################################################################### +# This is the invokation to generate dependencies +DEPENDMAKER:=g++ -MM -I $(INCLUDEPATH) + +###################################################################### +# example of changing options based upon processor type: +# if compiling on 386, don't use 486 extensions +#ifeq ("i386",$(shell uname -m')) +# CXXFLAGS+=-mno-486 +#endif +#ifeq ("i486",$(shell uname -m)) +# CXXFLAGS+=-m486 +#endif +#ifeq ("i586",$(shell uname -m)) +# CXXFLAGS+=-m586 # if only gcc supported this... +#endif diff --git a/src/make/Linux-mcr.mk b/src/make/Linux-mcr.mk new file mode 100644 index 00000000..f4a7243b --- /dev/null +++ b/src/make/Linux-mcr.mk @@ -0,0 +1,43 @@ +###################################################################### +# Compiler definitions for Linux systems +# all compiler specific information should be declared here +#CXX:=g++-3.3 +CXX:=mpiicpc + +CXXFLAGS := -O3 -axW -ip -unroll -fno-alias $(INCLUDEPATH) +CXXFLAGS+= -DUSE_LAPACK -DUSE_MPI -DUSE_BLAS + +BLAS_LIBS := -L/usr/local/intel/mkl/lib/32 -lmkl -lguide -lpthread +BLAS_INCLUDE := -I/usr/local/intel/mkl/include + +LAPACK_LIBS := $(BLAS_LIBS) -lmkl_ia32 -lmkl_lapack64 -lmkl +LAPACK_INCLUDE := $(BLAS_INCLUDE) + + +#CXXFLAGS := -O2 -I$(INCLUDEPATH) -DUSE_MPI + +#CXX := mpiCC +#CXXFLAGS:= -O3 -fomit-frame-pointer -funroll-loops -ffast-math -I$(INCLUDEPATH) -DUSE_MPI +#CXXFLAGS:= -O2 --no_exceptions -I$(INCLUDEPATH) +#DEBUG := -Wall -DRANGE_CHECKING +DEBUG:= -DNO_RANGE_CHECKING -DNDEBUG +#DEBUG:=-Wall -DNDEBUG -DNO_RANGE_CHECKING -pg +#LDFLAGS := -L/home/apps/mpich-1.2.5/lib -lpmpich++ -lmpich + + +###################################################################### +# This is the invokation to generate dependencies +DEPENDMAKER:=g++ -MM $(INCLUDEPATH) + +###################################################################### +# example of changing options based upon processor type: +# if compiling on 386, don't use 486 extensions +#ifeq ("i386",$(shell uname -m')) +# CXXFLAGS+=-mno-486 +#endif +#ifeq ("i486",$(shell uname -m)) +# CXXFLAGS+=-m486 +#endif +#ifeq ("i586",$(shell uname -m)) +# CXXFLAGS+=-m586 # if only gcc supported this... +#endif diff --git a/src/make/Linux-mpi.mk b/src/make/Linux-mpi.mk new file mode 100644 index 00000000..e42eb77a --- /dev/null +++ b/src/make/Linux-mpi.mk @@ -0,0 +1,32 @@ +###################################################################### +# Compiler definitions for Linux systems +# all compiler specific information should be declared here +CXX:=mpiCC + + +#CXXFLAGS:= -O3 -fomit-frame-pointer -funroll-loops -ffast-math +CXXFLAGS := -O2 -fomit-frame-pointer -funroll-loops -ffast-math +CXXFLAGS += -DUSE_MPI $(INCLUDEPATH) + +#DEBUG := -Wall -DRANGE_CHECKING -DDEBUG_WRITE +DEBUG:= -Wall -DNO_RANGE_CHECKING -DNDEBUG +#DEBUG:=-Wall -DNDEBUG -DNO_RANGE_CHECKING -pg +LDFLAGS := -static + + +###################################################################### +# This is the invokation to generate dependencies +DEPENDMAKER:=g++ -MM $(INCLUDEPATH) + +###################################################################### +# example of changing options based upon processor type: +# if compiling on 386, don't use 486 extensions +#ifeq ("i386",$(shell uname -m')) +# CXXFLAGS+=-mno-486 +#endif +#ifeq ("i486",$(shell uname -m)) +# CXXFLAGS+=-m486 +#endif +#ifeq ("i586",$(shell uname -m)) +# CXXFLAGS+=-m586 # if only gcc supported this... +#endif diff --git a/src/make/Linux.mk b/src/make/Linux.mk new file mode 100644 index 00000000..759b1e6c --- /dev/null +++ b/src/make/Linux.mk @@ -0,0 +1,31 @@ +###################################################################### +# Compiler definitions for Linux systems +# all compiler specific information should be declared here + +CXX:=g++ +CXX_SERIAL:=g++ + +CXXFLAGS := -O3 \ + -funroll-loops -ffast-math \ + $(INCLUDEPATH) -fomit-frame-pointer +#CXXFLAGS := -O2 -I$(INCLUDEPATH) +DEBUG:= -Wall -DNO_RANGE_CHECKING -DNDEBUG -D__USE_GNU -DDEBUG_WRITE +LDFLAGS:= + +###################################################################### +# This is the invokation to generate dependencies +DEPENDMAKER:=g++ -MM $(INCLUDEPATH) + +###################################################################### +# example of changing options based upon processor type: +# if compiling on 386, don't use 486 extensions + +#ifeq ("i386",$(shell uname -m')) +# CXXFLAGS+=-mno-486 +#endif +#ifeq ("i486",$(shell uname -m)) +# CXXFLAGS+=-m486 +#endif +#ifeq ("i586",$(shell uname -m)) +# CXXFLAGS+=-m586 # if only gcc supported this... +#endif diff --git a/src/make/OSF1-mpi.mk b/src/make/OSF1-mpi.mk new file mode 100644 index 00000000..70832773 --- /dev/null +++ b/src/make/OSF1-mpi.mk @@ -0,0 +1,13 @@ +###################################################################### +# Compiler definitions for Linux systems +# all compiler specific information should be declared here +CXX:=cxx +CXXFLAGS:= -DUSE_MPI -ieee -underflow_to_zero -fast -I$(INCLUDEPATH) +DEBUG:= -DNO_RANGE_CHECKING -DNDEBUG # -DDEBUG_WRITE +LDFLAGS:= -lmpi -lm +#LDFLAGS:= -lm + +###################################################################### +# This is the invokation to generate dependencies +DEPENDMAKER:=c++ -MM -I $(INCLUDEPATH) + diff --git a/src/make/OSF1.mk b/src/make/OSF1.mk new file mode 100644 index 00000000..ffafd23e --- /dev/null +++ b/src/make/OSF1.mk @@ -0,0 +1,12 @@ +###################################################################### +# Compiler definitions for Linux systems +# all compiler specific information should be declared here +CXX:=cxx +CXXFLAGS:= -ieee -underflow_to_zero -fast -I$(INCLUDEPATH) +DEBUG:= -DNO_RANGE_CHECKING -DNDEBUG # -DDEBUG_WRITE +LDFLAGS:= -lm + +###################################################################### +# This is the invokation to generate dependencies +DEPENDMAKER:=c++ -MM -I $(INCLUDEPATH) + diff --git a/src/make/auva.mk b/src/make/auva.mk new file mode 100644 index 00000000..fe127930 --- /dev/null +++ b/src/make/auva.mk @@ -0,0 +1,40 @@ +###################################################################### +# Compiler definitions for Linux systems +# all compiler specific information should be declared here +CXX:=/share/apps/mpich-1.2.7/bin/mpiCC +#CXX:=/opt/mpich/gnu/bin/mpiCC + + +CXXFLAGS:= -O3 -fomit-frame-pointer -funroll-loops -ffast-math +CXXFLAGS += -DUSE_MPI -DUSE_BLAS -DUSE_LAPACK ${INCLUDEPATH} + +LAPACK_LIBS := -L/share/apps/ATLAS/lib/Linux_HAMMER64SSE3_2 -llapack -lf77blas -lcblas -latlas +LAPACK_INCLUDE := -I/share/apps/ATLAS/include + +BLAS_LIBS := $(LAPACK_LIBS) +BLAS_INCLUDE := $(LAPACK_INCLUDE) + + + +#DEBUG := -Wall -DRANGE_CHECKING -DDEBUG_WRITE +DEBUG:= -Wall -DNO_RANGE_CHECKING -DNDEBUG +#DEBUG:=-Wall -DNDEBUG -DNO_RANGE_CHECKING -pg +LDFLAGS := -static + + +###################################################################### +# This is the invokation to generate dependencies +DEPENDMAKER:=g++ -MM $(INCLUDEPATH) + +###################################################################### +# example of changing options based upon processor type: +# if compiling on 386, don't use 486 extensions +#ifeq ("i386",$(shell uname -m')) +# CXXFLAGS+=-mno-486 +#endif +#ifeq ("i486",$(shell uname -m)) +# CXXFLAGS+=-m486 +#endif +#ifeq ("i586",$(shell uname -m)) +# CXXFLAGS+=-m586 # if only gcc supported this... +#endif diff --git a/src/make/mint.mk b/src/make/mint.mk new file mode 100644 index 00000000..c3ffb9fa --- /dev/null +++ b/src/make/mint.mk @@ -0,0 +1,39 @@ +###################################################################### +# Compiler definitions for Linux systems +# all compiler specific information should be declared here +CXX:=/opt/mpich/mpich-1.2.7/bin/mpiCC + + +CXXFLAGS:= -O3 -fomit-frame-pointer -funroll-loops -ffast-math +CXXFLAGS += -DUSE_MPI -DUSE_BLAS -DUSE_LAPACK ${INCLUDEPATH} + +LAPACK_LIBS := -L/share/apps/ATLAS/lib/Linux_HAMMER64SSE3_2 -llapack -lf77blas -lcblas -latlas +LAPACK_INCLUDE := -I/share/apps/ATLAS/include + +BLAS_LIBS := $(LAPACK_LIBS) +BLAS_INCLUDE := $(LAPACK_INCLUDE) + + + +#DEBUG := -Wall -DRANGE_CHECKING -DDEBUG_WRITE +DEBUG:= -Wall -DNO_RANGE_CHECKING -DNDEBUG +#DEBUG:=-Wall -DNDEBUG -DNO_RANGE_CHECKING -pg +LDFLAGS := -static + + +###################################################################### +# This is the invokation to generate dependencies +DEPENDMAKER:=g++ -MM $(INCLUDEPATH) + +###################################################################### +# example of changing options based upon processor type: +# if compiling on 386, don't use 486 extensions +#ifeq ("i386",$(shell uname -m')) +# CXXFLAGS+=-mno-486 +#endif +#ifeq ("i486",$(shell uname -m)) +# CXXFLAGS+=-m486 +#endif +#ifeq ("i586",$(shell uname -m)) +# CXXFLAGS+=-m586 # if only gcc supported this... +#endif diff --git a/src/make/thunder-gcc.mk b/src/make/thunder-gcc.mk new file mode 100644 index 00000000..6d8b925a --- /dev/null +++ b/src/make/thunder-gcc.mk @@ -0,0 +1,42 @@ +###################################################################### +# Compiler definitions for Linux systems +# all compiler specific information should be declared here + +CXX:=mpiCC +CXXFLAGS := -O3 \ + -funroll-loops -ffast-math \ + $(INCLUDEPATH) -fomit-frame-pointer + +CXXFLAGS+= -DUSE_LAPACK -DUSE_BLAS -DUSE_MPI + +BLAS_LIBS := -L/usr/local/intel/mkl/lib/64 -lmkl +BLAS_INCLUDE := -I/usr/local/intel/mkl/include + +LAPACK_LIBS := $(BLAS_LIBS) -lmkl_lapack -lmkl_lapack64 +LAPACK_INCLUDE := $(BLAS_INCLUDE) + + +#CXXFLAGS:= -O2 -I$(INCLUDEPATH) +#DEBUG := -Wall -DRANGE_CHECKING -DDEBUG_WRITE +#DEBUG:= -Wall -DNO_RANGE_CHECKING -DDEBUG_WRITE +DEBUG:= -Wall -DNO_RANGE_CHECKING -DNDEBUG -D__USE_GNU +#DEBUG:=-Wall -DNDEBUG -DNO_RANGE_CHECKING -DDEBUG_WRITE -D__USE_GNU -pg +#LDFLAGS := -static + +###################################################################### +# This is the invokation to generate dependencies +DEPENDMAKER:=g++ -MM -I $(INCLUDEPATH) + +###################################################################### +# example of changing options based upon processor type: +# if compiling on 386, don't use 486 extensions + +#ifeq ("i386",$(shell uname -m')) +# CXXFLAGS+=-mno-486 +#endif +#ifeq ("i486",$(shell uname -m)) +# CXXFLAGS+=-m486 +#endif +#ifeq ("i586",$(shell uname -m)) +# CXXFLAGS+=-m586 # if only gcc supported this... +#endif diff --git a/src/make/tungsten.mk b/src/make/tungsten.mk new file mode 100644 index 00000000..af701fcc --- /dev/null +++ b/src/make/tungsten.mk @@ -0,0 +1,36 @@ +###################################################################### +# Compiler definitions for Linux systems +# all compiler specific information should be declared here +CXX:=cmpic++ + +CXXFLAGS:= -gnu -O3 -fomit-frame-pointer -funroll-loops -ffast-math +#CXXFLAGS:= -O3 -axW -unroll -fno-alias +CXXFLAGS += -DUSE_MPI -DUSE_BLAS ${INCLUDEPATH} + +#LAPACK_LIBS := -L/usr/lib -lgslcblas +#LAPACK_INCLUDE := "" + +BLAS_LIBS := -L${MKL_HOME}/lib/32 -lmkl -lguide -lpthread +#BLAS_INCLUDE := "" + + +DEBUG:= -DNO_RANGE_CHECKING -DNDEBUG +#LDFLAGS := "" + + +###################################################################### +# This is the invokation to generate dependencies +DEPENDMAKER:=g++ -MM $(INCLUDEPATH) + +###################################################################### +# example of changing options based upon processor type: +# if compiling on 386, don't use 486 extensions +#ifeq ("i386",$(shell uname -m')) +# CXXFLAGS+=-mno-486 +#endif +#ifeq ("i486",$(shell uname -m)) +# CXXFLAGS+=-m486 +#endif +#ifeq ("i586",$(shell uname -m)) +# CXXFLAGS+=-m586 # if only gcc supported this... +#endif diff --git a/src/method/Dmc_method.cpp b/src/method/Dmc_method.cpp new file mode 100644 index 00000000..d51c132d --- /dev/null +++ b/src/method/Dmc_method.cpp @@ -0,0 +1,1234 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ + + + +#include "Dmc_method.h" +#include "qmc_io.h" +#include "ulec.h" +#include "Program_options.h" +#include "average.h" + + +void Dmc_method::read(vector words, + unsigned int & pos, + Program_options & options) +{ + ndim=3; + + have_read_options=1; + + vector offsetwords; + + //required options + + + if(!readvalue(words, pos=0, nblock, "NBLOCK")) + error("Need NBLOCK in METHOD section"); + + if(!readvalue(words, pos=0, nconfig, "NCONFIG")) + error("Need NCONFIG in METHOD section"); + + if(!readvalue(words, pos=0, nstep, "NSTEP")) + error("Need NSTEP in METHOD section"); + + if(!readvalue(words, pos=0, timestep, "TIMESTEP")) + error("Need TIMESTEP in METHOD section"); + + if(readvalue(words, pos=0, readconfig, "READCONFIG")) + canonical_filename(readconfig); + else + error("Must give READCONFIG for DMC"); + + //optional options + + if(!readvalue(words, pos=0, eref, "EREF")) + eref=0.0; + + if(haskeyword(words, pos=0, "CDMC")) do_cdmc=1; + else do_cdmc=0; + + + if(!readvalue(words, pos=0, nhist, "CORR_HIST")) + nhist=-1; + + if(readvalue(words, pos=0, storeconfig, "STORECONFIG")) + canonical_filename(storeconfig); + + if(!readvalue(words, pos=0, log_label, "LABEL")) + log_label="dmc"; + + if(!readvalue(words, pos=0, start_feedback, "START_FEEDBACK")) + start_feedback=1; + + if(readvalue(words, pos=0, feedback_interval, "FEEDBACK_INTERVAL")) { + if(feedback_interval < 1) + error("FEEDBACK_INTERVAL must be greater than or equal to 1"); + } + else feedback_interval=5; + + if(!readvalue(words, pos=0, feedback, "FEEDBACK")) + feedback=1.0; + + if(!readvalue(words, pos=0, branch_start_cutoff, "BRANCH_START_CUTOFF")) + branch_start_cutoff=10; + + + branch_stop_cutoff=branch_start_cutoff*1.5; + + + vector proptxt; + if(readsection(words, pos=0, proptxt, "PROPERTIES")) + // myprop.read(proptxt, options.systemtext[0], options.twftext[0]); + mygather.read(proptxt); + + vector tmp_dens; + pos=0; + while(readsection(words, pos, tmp_dens, "DENSITY")) { + dens_words.push_back(tmp_dens); + } + + + vector dynamics_words; + if(!readsection(words, pos=0, dynamics_words, "DYNAMICS") ) + dynamics_words.push_back("SPLIT"); + + allocate(dynamics_words, dyngen); + dyngen->enforceNodes(1); + +} + +//---------------------------------------------------------------------- + +int Dmc_method::generateVariables(Program_options & options) { + + if(!have_read_options) + error("need to call Dmc_method::read before generateVariables"); + if(have_allocated_variables) + error("already allocated variables in Dmc_method"); + + have_allocated_variables=1; + allocate(options.systemtext[0], mysys); + mysys->generatePseudo(options.pseudotext, mypseudo); + allocate(options.twftext[0], mysys, mywfdata); + + densplt.Resize(dens_words.size()); + for(int i=0; i< densplt.GetDim(0); i++) { + allocate(dens_words[i], mysys, options.runid,densplt(i)); + } + return 1; +} + +//---------------------------------------------------------------------- + + + +int Dmc_method::allocateIntermediateVariables(System * sys, + Wavefunction_data * wfdata) { + if(wf) delete wf; + wf=NULL; + if(sample) delete sample; + sample=NULL; + nelectrons=sys->nelectrons(0)+sys->nelectrons(1); + wfdata->generateWavefunction(wf); + sys->generateSample(sample); + sample->attachObserver(wf); + nwf=wf->nfunc(); + + if(wf->nfunc() >1) + error("DMC doesn't support more than one guiding wave function"); + + guidingwf=new Primary; + + pts.Resize(nconfig); + for(int i=0; i < nconfig; i++) { + pts(i).age.Resize(nelectrons); + pts(i).age=0; + } + + return 1; +} + +//---------------------------------------------------------------------- + +int Dmc_method::showinfo(ostream & os) +{ + + if(have_allocated_variables) { + mysys->showinfo(os); + mypseudo->showinfo(os); + mywfdata->showinfo(os); + } + os << "###########################################################\n"; + os << "Diffusion Monte Carlo: $Date: 2006/12/05 00:17:04 $\n"; + os << "Number of processors " << mpi_info.nprocs << endl; + os << "Blocks: " << nblock << endl; + os << "Steps per block: " << nstep << endl; + os << "Timestep: " << timestep << endl; + string indent=" "; + + dyngen->showinfo(indent, os); + + os << "###########################################################" << endl; + return 1; +} + +//---------------------------------------------------------------------- + +void Dmc_method::find_cutoffs() { + doublevar eaverage=0; + + doublevar totweight=0; + for(int i=0; i< nconfig; i++) { + //eaverage+=(prop.trace(step,i).energy(w)+offset(w)) + // *guidingwf->getOperatorWeight(prop.trace(step,i).wf_val,w); + eaverage+=pts(i).prop.energy(0)*pts(i).weight; + totweight+=pts(i).weight; + //cout << "en " << pts(i).prop.energy(0) << endl; + } + //cout << mpi_info.node << "par sum " << nconfig << endl; + totweight=parallel_sum(totweight); + //cout << mpi_info.node << "eaverage " << endl; + eaverage=parallel_sum(eaverage)/totweight; + + eref=eaverage; + single_write(cout, " setting eref= ", eref, "\n"); + int totconf=parallel_sum(nconfig); + doublevar eaverage2=0; + for(int i=0; i < nconfig; i++){ + doublevar effenergy=pts[i].prop.energy(0); + eaverage2+=(effenergy-eaverage) + *(effenergy-eaverage); + } + + eaverage2=parallel_sum(eaverage2)/totconf; + + //The variance of the starting distribution. + doublevar sigmac=sqrt(eaverage2); + + branchcut_start=branch_start_cutoff*sigmac; //start of cutoff region for branching + branchcut_stop=branch_stop_cutoff*sigmac; //end of cutoff region + + single_write(cout, " start branch cut at ", branchcut_start, "\n"); + single_write(cout, " stop branch cut at ", branchcut_stop, "\n"); + + +} + +//---------------------------------------------------------------------- + +void Dmc_method::run(Program_options & options, ostream & output) { + if(!have_allocated_variables) + error("Must generate variables to use Dmc_method::run"); + string logfile=options.runid+".log"; + + if(mpi_info.node==0 ) { + ofstream logout(logfile.c_str(), ios::app); + logout << "#-------------------------------------------------\n"; + logout << "#DMC run: timestep " << timestep + << endl; + logout << "#-------------------------------------------------\n\n\n"; + logout.close(); + } + + myprop.setLog(logfile, log_label); + runWithVariables(myprop, mysys, mywfdata, mypseudo,output); +} + +//---------------------------------------------------------------------- + +/*! + + */ +void Dmc_method::runWithVariables(Properties_manager & prop, + System * sys, + Wavefunction_data * wfdata, + Pseudopotential * pseudo, + ostream & output) +{ + + allocateIntermediateVariables(sys, wfdata); + if(!wfdata->supports(laplacian_update)) + error("DMC doesn't support all-electron moves..please" + " change your wave function to use the new Jastrow"); + + cout.precision(15); + output.precision(10); + + aux_converge=1; + + prop.setSize(wf->nfunc(), nblock, nstep, nconfig, sys, + wfdata, mygather.nAux(), aux_converge); + + restorecheckpoint(readconfig, sys, wfdata, pseudo); + + + int naux=mygather.nAux(); + + nhist=1; + if(naux >0 && nhist <0) nhist=100; + //Array1 limits(aux_converge); + + + doublevar teff=timestep; + Array1 aux_timestep(naux,teff); + + for(int block=0; block < nblock; block++) { + + int totkilled=0; + int totbranch=0; + int totpoints=0; + for(int step=0; step < nstep; ) { + int npsteps=min(feedback_interval, nstep-step); + + Dynamics_info dinfo; + doublevar acsum=0; + doublevar deltar2=0; + Array1 aux_rf_diffusion(naux,0.0); + Array1 epos(3); + + doublevar avg_acceptance=0; + + doublevar rf_diffusion=0; //diffusion rate without rejection + + + for(int walker=0; walker < nconfig; walker++) { + + + pts(walker).config_pos.restorePos(sample); + wf->updateLap(wfdata, sample); + + //------Do several steps without branching + for(int p=0; p < npsteps; p++) { + pseudo->randomize(); + + for(int e=0; e< nelectrons; e++) { + int acc; + acc=dyngen->sample(e, sample, wf, wfdata, guidingwf, + dinfo, timestep); + + if(dinfo.accepted) + deltar2+=dinfo.diffusion_rate/(nconfig*nelectrons*npsteps); + + Array1 aux_dinfo(naux); + mygather.getGreensFunctions(dyngen, dinfo, e,sample, guidingwf, + timestep, aux_dinfo, 0); + + if(dinfo.accepted) { + rf_diffusion+=dinfo.diffusion_rate/(nconfig*nelectrons*npsteps); + for(int i=0; i< naux; i++) + aux_rf_diffusion(i)+= + aux_dinfo(i).diffusion_rate/(nconfig*nelectrons*npsteps); + + pts(walker).age(e)=0; + } + else { + pts(walker).age(e)++; + } + avg_acceptance+=dinfo.acceptance/(nconfig*nelectrons*npsteps); + + if(acc>0) acsum++; + } + + totpoints++; + Properties_point pt; + + mygather.gatherData(pt, pseudo, sys, wfdata, wf, + sample, guidingwf, aux_converge,0); + + Dmc_history new_hist; + new_hist.main_en=pts(walker).prop.energy(0); + new_hist.aux_en=pts(walker).prop.aux_energy; + //cout << " main en " << pts(walker).prop.energy(0) << endl; + //cout << " aux en " << pts(walker).prop.aux_energy(0,0) << endl; + pts(walker).past_energies.push_front(new_hist); + deque & past(pts(walker).past_energies); + if(past.size() > nhist) + past.erase(past.begin()+nhist, past.end()); + + pts(walker).prop=pt; + pts(walker).weight*=getWeight(pts(walker),teff,etrial); + //getauxweight + if(pts(walker).ignore_walker) { + pts(walker).ignore_walker=0; + pts(walker).weight=1; + pts(walker).prop.count=0; + } + pts(walker).prop.weight=pts(walker).weight; + getAuxWeight(pts(walker), teff, aux_timestep,pts(walker).prop.aux_weight); + for(int a=0; a< naux; a++) pts(walker).prop.aux_weight(a,0)*=pts(walker).weight; + //This is somewhat inaccurate..will need to change it later + //For the moment, the autocorrelation will be slightly + //underestimated + pts(walker).prop.parent=walker; + pts(walker).prop.nchildren=1; + pts(walker).prop.children(0)=walker; + + prop.insertPoint(step+p, walker, pts(walker).prop); + for(int i=0; i< densplt.GetDim(0); i++) + densplt(i)->accumulate(sample,pts(walker).prop.weight(0)); + } + + pts(walker).config_pos.savePos(sample); + } + //---Finished moving all walkers + + //-----------Find the effective timesteps(of main and aux walks) + doublevar accept_ratio=acsum/(nconfig*nelectrons*npsteps); + teff=timestep*accept_ratio; //deltar2/rf_diffusion; + for(int i=0; i< naux; i++) { + aux_timestep(i)=teff*(aux_rf_diffusion(i)/rf_diffusion); + } + + updateEtrial(feedback); + + step+=npsteps; + + int nkilled=calcBranch(); + totkilled+=nkilled; + totbranch+=nkilled; + } + + ///----Finished block + + savecheckpoint(storeconfig,sample); + + prop.endBlock(); + + for(int i=0; i< densplt.GetDim(0); i++) + densplt(i)->write(); + //loadbalance(); //not needed with global branching + + + totbranch=parallel_sum(totbranch); + totkilled=parallel_sum(totkilled); + totpoints=parallel_sum(totpoints); + + Properties_final_average finavg; + prop.getFinal(finavg); + eref=finavg.avg(Properties_types::total_energy,0); + updateEtrial(feedback); + + doublevar maxage=0; + doublevar avgage=0; + for(int w=0;w < nconfig; w++) { + for(int e=0; e< nelectrons; e++) { + if(maxage" << int(100.0*doublevar(block+1)/doublevar(nblock)) + << " Diffusion Monte Carlo" << endl; + cout << "=RAPPTURE-PROGRESS=>" << int(100.0*doublevar(block+1)/doublevar(nblock)) + << " Diffusion Monte Carlo" << endl; + rapout.close(); + } + output << "***" << endl; + output << "Block " << block + << " etrial " << etrial << endl; + output << "maximum age " << maxage + << " average age " << avgage << endl; + dyngen->showStats(output); + + prop.printBlockSummary(output); + + output << "Branched " + << totbranch << " times. So a branch every " + << doublevar(totpoints)/doublevar(totbranch) + << " steps " << endl; + } + + dyngen->resetStats(); + + } + + if(output) { + output << "\n ----------Finished DMC------------\n\n"; + prop.printSummary(output); + } + wfdata->clearObserver(); + deallocateIntermediateVariables(); +} + + +//---------------------------------------------------------------------- + + +void Dmc_method::savecheckpoint(string & filename, + Sample_point * config) { + if(filename=="") return; + ofstream checkfile(filename.c_str()); + if(!checkfile) error("Couldn't open", filename ); + checkfile.precision(15); + + long int is1, is2; + rng.getseed(is1, is2); + checkfile << "RANDNUM " << is1 << " " << is2 << endl; + + checkfile.precision(15); + for(int i=0; i< nconfig; i++) { + Dmc_point & mypt(pts(i)); + checkfile << "SAMPLE_POINT { \n"; + mypt.config_pos.restorePos(config); + write_config(checkfile, config); + checkfile << " DMC { \n"; + checkfile << "DMCWEIGHT " << mypt.weight << endl; + checkfile << "VALEN " << nwf << endl; + for(int w=0; w< nwf; w++) { + checkfile << mypt.prop.wf_val.phase(w,0) << " " + << mypt.prop.wf_val.amp(w,0) << " " + << mypt.prop.energy(w) + << endl; + } + + checkfile << " } \n"; + checkfile << "}\n\n"; + } + + checkfile.close(); +} + + +//---------------------------------------------------------------------- + + + +void Dmc_method::restorecheckpoint(string & filename, System * sys, + Wavefunction_data * wfdata, + Pseudopotential * pseudo) { + + + ifstream checkfile(filename.c_str()); + if(!checkfile) + error("Couldn't open ", filename); + long int is1, is2; + string dummy; + checkfile >> dummy; + if(dummy != "RANDNUM") error("Expected RANDNUM in checkfile"); + checkfile >> is1 >> is2; + rng.seed(is1, is2); + + Array1 value_temp(nconfig); + Array2 energy_temp(nconfig, nwf); + + + int ncread=0; //Number of configs read + int nwread=0; //number of weights read + while(checkfile >> dummy && + ( ncread < nconfig && nwread < nconfig) ) { + + + if(read_config(dummy, checkfile, sample)) { + pts(ncread++).config_pos.savePos(sample); + + } + + if(dummy=="DMC") { + checkfile >> dummy; + if(dummy != "{") error("Need a { after DMC"); + checkfile >> dummy >> pts(nwread).weight; + if(dummy != "DMCWEIGHT") { + error("expected DMCWEIGHT, got ", dummy); + } + int nwf_temp; + checkfile >> dummy >> nwf_temp; + if(dummy != "VALEN") { + error("expected VALEN, got ", dummy); + } + if(nwf_temp != nwf) { + error("Wrong number of wavefunctions in the checkpoint file"); + } + + //Retrieve the old values and energies from the file + value_temp(nwread).Resize(nwf, 2); + + for(int w=0; w< nwf; w++) { + checkfile >> value_temp(nwread).phase(w,0) + >> value_temp(nwread).amp(w,0) + >> energy_temp(nwread,w); + } + nwread++; + + } + + } + + //cout << "ncread " << ncread << " nwread " << nwread << endl; + if(nconfig!=ncread) { + error("nconfig doesn't match the number of walkers in the config file"); + } + + for(int walker=0; walker < nconfig; walker++) { + pts(walker).config_pos.restorePos(sample); + mygather.gatherData(pts(walker).prop, pseudo, sys, + wfdata, wf, sample, + guidingwf); + } + find_cutoffs(); + + updateEtrial(start_feedback); + + if(do_cdmc) { + if(ncread!=nwread) { + cout << "WARNING! do_cdmc and ncread!=nwread " << endl; + } + cdmcReWeight(energy_temp, value_temp); + } + + +} + + +//---------------------------------------------------------------------- + +void Dmc_method::cdmcReWeight(Array2 & energy_temp, + Array1 < Wf_return > & value_temp + ) { + //The following is for C-DMC(from Jeff) It shouldn't + //do anything unless the atomic coordinates have moved + //It's commented out for the moment from the rewrite. + //It's viewed as experimental code, so watch out! + + //Get the energies for the old ionic configurations and + //this configuration + /* + Array1 effenergy_temp(nconfig, 0.0); + Array1 effoldenergy(nconfig,0.0); + + for(int i=0; i< nconfig; i++) { + for(int w=0; w< nwf; w++) { + effenergy_temp(i)+=(energy_temp(i,w)+offset(w)) + *guidingwf->getOperatorWeight(value_temp(i),w); + + doublevar olden=trace[0][i].energy(w); + effoldenergy(i)+=(olden+offset(w)) + *guidingwf->getOperatorWeight(trace[0][i].wf_val, w); + } + } + + + + doublevar average_temp, variance_temp; + + average(0, nconfig, effenergy_temp, + dmcweight, average_temp, variance_temp, 1); + + doublevar sigma_temp; + if(variance_temp >0) { + sigma_temp=sqrt(variance_temp); + } + else { + sigma_temp=0; + error("negative variance when reading in weights"); + } + + debug_write(cout, "average_temp ", average_temp, "\n"); + debug_write(cout, "sigma_temp ", sigma_temp, "\n"); + + //Reweight and check whether we had a sign flip + //(overlap will be either positive or negative + + if(do_cdmc) { + doublevar norm1=0, norm2=0; + for(int i=0; i< nconfig; i++) { + //norm1+=exp(prop.trace(0,i).wf_val(0,1)*2.0); + norm1+=exp(trace[0][i].wf_val.amp(0,0)*2.0); + + norm2+=exp(2.0*value_temp(i).amp(0,0)); + } + + int totconfig=parallel_sum(nconfig); + norm1=parallel_sum(norm1)/totconfig; + norm2=parallel_sum(norm2)/totconfig; + + //Removed the normalization(norm2/norm1), because it causes problems + //for bigger systems + + doublevar overlap=0; + for(int i=0; i < nconfig; i++) { + doublevar ratio; + ratio=guidingwf->getTrialRatio(trace[0][i].wf_val, value_temp(i)); + overlap+=ratio/nconfig; //check if there's an overall sign change + + //cout << "walker " << i << " new val " << trace[0][i].wf_val(0,1) + // << " old one " << value_temp(i)(0,1) << endl; + + dmcweight(i)*= ratio*ratio// *norm2/norm1 + *exp(-(effoldenergy(i)-effenergy_temp(i))*timestep/2); + } + + single_write(cout, "overlap between old and new ", overlap); + doublevar average_old=0.0, diff_sigma=0.0; + + for(int w=0; w< nconfig; w++) { + average_old+=effoldenergy(w)/nconfig; + diff_sigma+=(effoldenergy(w)-effenergy_temp(w))*(effoldenergy(w)-effenergy_temp(w))/nconfig; + } + //cout << "difference " << average_temp-average_old <<" +/- " << diff_sigma/nconfig << endl; + + //We ignore walkers that either a)cross a node, or + //b) are outside of 10 sigmas(for the first move) + //ofstream diffout("diff_en.dat"); + int ncross=0, nsigma=0; + for(int i=0; i< nconfig; i++) { + doublevar ratio; + ratio=guidingwf->getTrialRatio(trace[0][i].wf_val, value_temp(i)); + //cout << "ratio " << i << " " << ratio << endl; + if(ratio*overlap < 0) { + debug_write(cout, "crossed node ", i , "\n"); + ncross++; + trace[0][i].count=0; + dmcweight(i)=1; + ignore_walker(i)=1; + } + else if(fabs(effenergy_temp(i)-average_temp) > 10*sigma_temp) { + debug_write(cout, "walker out of 10 sigmas ", i, "\n"); + + nsigma++; + trace[0][i].count=0; + dmcweight(i)=1; + ignore_walker(i)=1; + } + // diffout << i << " " << effenergy_temp(i)-effoldenergy(i) << endl; + } + //diffout.close(); + + single_write(cout, "nsigma ", parallel_sum(nsigma)); + single_write(cout, " ncross ", parallel_sum(ncross), "\n"); + + } + + */ + + +} + + +//---------------------------------------------------------------------- + +void Dmc_method::updateEtrial(doublevar feed) { + + doublevar totweight=0; + for(int walker=0; walker < nconfig; walker++) + totweight+=pts(walker).weight; + + etrial=eref-feed*log(totweight/double(nconfig)); + +#ifdef USE_MPI + doublevar mpitot=0; + MPI_Allreduce(&totweight,&mpitot, 1, + MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); + etrial=eref-feed*log(mpitot/double(mpi_info.nprocs*nconfig)); +#endif + + //cout << "etrial " << etrial << " total weight " << totweight << endl; + +} + +//---------------------------------------------------------------------- + +doublevar Dmc_method::getWeight(Dmc_point & pt, + doublevar teff, doublevar etr) { + doublevar teffac=teff/2.0; + + doublevar effenergy=0, effoldenergy=0; + + effenergy=pt.prop.energy(0); + effoldenergy=pt.past_energies[0].main_en; + + doublevar fbet=max(etr-effenergy, etr-effoldenergy); + + if(fbet > branchcut_stop) { + teffac=0; + } + else if(fbet > branchcut_start) { + teffac=teffac*(1.-(fbet-branchcut_start) + /(branchcut_stop-branchcut_start)); + } + + + doublevar return_weight=exp(teffac*(etr*2-effenergy-effoldenergy)); + + return return_weight; +} + +//---------------------------------------------------------------------- + + +void Dmc_method::getAuxWeight(Dmc_point & pt, + doublevar teff, + Array1 & aux_teff, + Array2 & aux_weight) { + + + int naux=pt.prop.aux_energy.GetDim(0); + + aux_weight.Resize(naux,1); + for(int a=0; a< naux; a++) { + doublevar w=1; + w*=pt.prop.aux_jacobian(a); + doublevar ratio=guidingwf->getTrialRatio(pt.prop.aux_wf_val(a), + pt.prop.wf_val); + w*= ratio*ratio; + + w*=exp(-.5*(aux_teff(a)*pt.prop.aux_energy(a,0)-teff*pt.prop.energy(0))); + for(deque::iterator i=pt.past_energies.begin(); + i!=pt.past_energies.end()-1; i++) { + w*=exp(-(aux_teff(a)*i->aux_en(a,0)-teff*i->main_en)); + } + Dmc_history & last(*(pt.past_energies.end()-1)); + w*=exp(-(aux_teff(a)*last.aux_en(a,0)-teff*last.main_en)); + aux_weight(a,0)=w; + } + +} + +//---------------------------------------------------------------------- + +struct Queue_element { + int from_node; + int to_node; + Queue_element() { } + Queue_element(int from, int to) { from_node=from; to_node=to; } +}; + +struct Walker_sort { + int node; + int index; //on the node + int branch; //how many copies to make + doublevar weight; +}; + + + +int Dmc_method::calcBranch() { + int totwalkers=mpi_info.nprocs*nconfig; + Array1 weights(totwalkers); + Array1 my_weights(nconfig); + + for(int walker=0; walker < nconfig; walker++) + my_weights(walker)=pts(walker).weight; +#ifdef USE_MPI + MPI_Allgather(my_weights.v,nconfig, MPI_DOUBLE, weights.v,nconfig,MPI_DOUBLE, MPI_COMM_WORLD); +#else + weights=my_weights; +#endif + Array1 my_branch(nconfig); + Array1 nwalkers(mpi_info.nprocs); + nwalkers=0; + int root=0; + if(mpi_info.node==root) { //this if/else clause may be refactored out + + Array1 branch(totwalkers); + //----Find which walkers branch/die + //we do it on one node since otherwise we'll have different random numbers! + //we'll assign the weight for each copy that will be produced + //this is the core of the branching algorithm.. + //my homegrown algo, based on Umrigar, Nightingale, and Runge + branch=-1; + const doublevar split_threshold=1.8; + for(int w=0; w< totwalkers; w++) { + if(weights(w) > split_threshold && branch(w)==-1) { + //find branching partner + doublevar smallestwt=100; + int smallest=-1; + for(int w2=0; w2 < totwalkers; w2++) { + if(branch(w2)==-1 && w2!= w && weights(w2) < smallestwt) { + smallest=w2; + smallestwt=weights(w2); + } + } + if(smallest != -1) { + doublevar weight1=weights(w)/(weights(w)+weights(smallest)); + if(weight1+rng.ulec() >= 1.0) { + branch(w)=2; + branch(smallest)=0; + weights(w)+=weights(smallest); + weights(w)/=2.0; + } + else { + branch(w)=0; + branch(smallest)=2; + weights(smallest)+=weights(w); + weights(smallest)/=2.0; + } + } + } + } + for(int w=0; w< totwalkers; w++) { + if(branch(w)==-1) branch(w)=1; + } + //----end homegrown algo + //count how many walkers each node will have + //without balancing + int walk=0; + for(int n=0; n< mpi_info.nprocs; n++) { + for(int i=0; i< nconfig; i++) { + nwalkers(n)+=branch(walk); + walk++; + } + //cout << "nwalkers " << n << " " << nwalkers(n) << endl; + } + //now send nwalkers and which to branch to all processors + for(int i=0; i< nconfig; i++) { + my_branch(i)=branch(i); + my_weights(i)=weights(i); + } +#ifdef USE_MPI + MPI_Bcast(nwalkers.v, mpi_info.nprocs, MPI_INT, mpi_info.node, MPI_COMM_WORLD); + for(int i=1; i< mpi_info.nprocs; i++) { + MPI_Send(branch.v+i*nconfig,nconfig,MPI_INT,i,0,MPI_COMM_WORLD); + MPI_Send(weights.v+i*nconfig, nconfig, MPI_DOUBLE, i,0,MPI_COMM_WORLD); + } +#endif + + } + else { +#ifdef USE_MPI + MPI_Bcast(nwalkers.v, mpi_info.nprocs, MPI_INT, root, MPI_COMM_WORLD); + MPI_Status status; + MPI_Recv(my_branch.v,nconfig, MPI_INT,root,0,MPI_COMM_WORLD, &status); + MPI_Recv(my_weights.v,nconfig, MPI_DOUBLE,root,0,MPI_COMM_WORLD, &status); +#endif + } + //--end if/else clause + + for(int i=0; i< nconfig; i++) { + pts(i).weight=my_weights(i); + } + + //Now we all have my_branch and nwalkers..we need to figure out who + //needs to send walkers to whom--after this, nwalkers should be a flat array equal to + //nconfig(so don't try to use it for anything useful afterwards) + vector send_queue; + int curr_needs_walker=0; + int nnwalkers=nwalkers(mpi_info.node); //remember how many total we should have + for(int i=0; i< mpi_info.nprocs; i++) { + while(nwalkers(i) > nconfig) { + if(nwalkers(curr_needs_walker) < nconfig) { + nwalkers(curr_needs_walker)++; + nwalkers(i)--; + send_queue.push_back(Queue_element(i,curr_needs_walker)); + //cout << mpi_info.node << ":nwalkers " << nwalkers(i) << " " << nwalkers(curr_needs_walker) << endl; + //cout << mpi_info.node << ":send " << i << " " << curr_needs_walker << endl; + } + else { + curr_needs_walker++; + } + } + } + + for(int i=0; i< mpi_info.nprocs; i++) assert(nwalkers(i)==nconfig); + int killsize=0; + for(int i=0; i< nconfig; i++) { + //cout << mpi_info.node << ":branch " << i << " " << my_branch(i) << " weight " << pts(i).weight << endl; + if(my_branch(i)==0) killsize++; + } + //cout << mpi_info.node << ": send queue= " << send_queue.size() << endl; + //now do branching for the walkers that we get to keep + Array1 savepts=pts; + int curr=0; //what walker we're currently copying from + int curr_copy=0; //what walker we're currently copying to + while(curr_copy < min(nnwalkers,nconfig)) { + if(my_branch(curr)>0) { + //cout << mpi_info.node << ": copying " << curr << " to " << curr_copy << " branch " << my_branch(curr) << endl; + my_branch(curr)--; + pts(curr_copy)=savepts(curr); + //pts(curr_copy).weight=1; + curr_copy++; + } + else curr++; + } + + //Finally, send or receive spillover walkers + if(nnwalkers > nconfig) { + vector::iterator queue_pos=send_queue.begin(); + while(curr < nconfig) { + if(my_branch(curr) > 0) { + my_branch(curr)--; + while(queue_pos->from_node != mpi_info.node) { + queue_pos++; + } + //cout << mpi_info.node << ":curr " << curr << " my_branch " << my_branch(curr) << endl; + //cout << mpi_info.node << ":sending " << queue_pos->from_node << " to " << queue_pos->to_node << endl; + savepts(curr).mpiSend(queue_pos->to_node); + queue_pos++; + } + else curr++; + } + + } + else { //if nnwalkers == nconfig, then this will just get skipped immediately + vector ::iterator queue_pos=send_queue.begin(); + while(curr_copy < nconfig) { + while(queue_pos->to_node != mpi_info.node) queue_pos++; + //cout << mpi_info.node <<":receiving from " << queue_pos->from_node << " to " << curr_copy << endl; + pts(curr_copy).mpiReceive(queue_pos->from_node); + //pts(curr_copy).weight=1; + curr_copy++; + queue_pos++; + } + } + return killsize; + //exit(0); +} +/* +int Dmc_method::calcBranch() { + + Array1 branch(nconfig); + branch=0; + + //Array1 killwalkers(nconfig); + //killwalkers=0; + int killsize=0; + //branchout << "********branching step " << bstep++ << endl; + + branch=-1; + for(int walker=0; walker < nconfig; walker++) { + const doublevar split_threshold=1.8; + if(pts(walker).weight > split_threshold + && branch(walker)==-1) { + //branchout << "should branch " << walker << " weight " << dmcweight(walker) << endl; + doublevar smallestgr=100; + int smallest=-1; + for(int walker2=0; walker2 < nconfig; walker2++) { + if(branch(walker2)==-1 && walker2!=walker) { + if(pts(walker2).weight < smallestgr) { + smallestgr=pts(walker2).weight; + smallest=walker2; + } + } + } + if(smallest!=-1) { + //cout << "combining " << walker << " and " + // << smallest << " (weight= " << dmcweight(smallest) << endl; + doublevar weight1=pts(walker).weight + /(pts(walker).weight+pts(smallest).weight); + + if(weight1+rng.ulec() >=1.0) { + branch(walker)=2; + branch(smallest)=0; + pts(walker).weight+=pts(smallest).weight; + pts(walker).weight/=2; + } + else { + branch(walker)=0; + branch(smallest)=2; + pts(smallest).weight+=pts(walker).weight; + pts(smallest).weight/=2; + } + killsize++; + } + } + } + + for(int walker=0; walker < nconfig; walker++) { + if(branch(walker)==-1) + branch(walker)=1; + } + + int newnconfig=0; + for(int walker=0; walker < nconfig; walker++) { + newnconfig+=branch(walker); + } + + if(newnconfig != nconfig) + error("Error in branching..newnconfig != nconfig"); + + + Array1 newpts; + newpts=pts; + + int counter=0; + for(int walker=0; walker < nconfig; walker++) { + for(int i=0; i< branch(walker); i++) { + assert(counter < newnconfig); + pts(counter)=newpts(walker); + //pts(walker).prop.children(pts[walker].prop.nchildren++)=counter; + counter++; + } + } + + assert(counter == newnconfig); + //Finally, reset nconfig + nconfig=newnconfig; + return killsize; +} +*/ +//---------------------------------------------------------------------- + + +#include +struct procwt { + doublevar totwt; + int procnum; +}; +bool operator<(const procwt & p1,const procwt & p2) { + return p1.totwt < p2.totwt; +} + +void Dmc_method::loadbalance() { +#ifdef USE_MPI + //string ldout="load"; + //canonical_filename(ldout); + //ofstream loadout(ldout.c_str(),ios::app); + //ostream & loadout(cout); + + doublevar totwt=0; + for(int i=0; i< nconfig; i++) + totwt+=pts(i).weight; + + double * weights=new double[mpi_info.nprocs]; + MPI_Allgather(&totwt, 1, MPI_DOUBLE, weights, 1, MPI_DOUBLE, + MPI_COMM_WORLD); + + vector procs(mpi_info.nprocs); + int nprocs=mpi_info.nprocs; + for(int i=0; i< nprocs; i++) { + procs[i].totwt=weights[i]; + procs[i].procnum=i; + } + sort(procs.begin(), procs.end()); + + int myplace=-1; + for(int i=0; i< nprocs; i++) + if(procs[i].procnum==mpi_info.node) { + myplace=i; + break; + } + assert(myplace != -1); + + //Find the biggest and smallest weights + //on this processor + int big=-1, small=-1; + doublevar bigw=-1, smallw=1000; + for(int i=0; i< nconfig; i++) { + if(pts(i).weight > bigw) { + bigw=pts(i).weight; + big=i; + } + if(pts(i).weight < smallw) { + smallw=pts(i).weight; + small=i; + } + } + + //loadout << mpi_info.node << " here " << myplace << endl; +//MPI_Barrier(MPI_COMM_WORLD); + + int mate=0; + if(myplace > nprocs/2) { + mate=procs[nprocs-myplace-1].procnum; + pts[big].mpiSend(mate); + //loadout << "sent " << endl; + pts(big).mpiReceive(mate); + } + else if(nprocs-myplace-1 > nprocs/2) { + mate=procs[nprocs-myplace-1].procnum; + Dmc_point tmp_pt; + tmp_pt.mpiReceive(mate); + pts(small).mpiSend(mate); + pts(small)=tmp_pt; + + } + + + delete [] weights; + + +#endif +} + +//---------------------------------------------------------------------- + + +void Dmc_point::mpiSend(int node) { +#ifdef USE_MPI + prop.mpiSend(node); + config_pos.mpiSend(node); + int n=past_energies.size(); + MPI_Send(&n,1, MPI_INT,node,0,MPI_COMM_WORLD); + for(deque::iterator i=past_energies.begin(); + i!= past_energies.end(); i++) { + i->mpiSend(node); + } + + MPI_Send(&weight,1,MPI_DOUBLE,node,0,MPI_COMM_WORLD); + MPI_Send(&ignore_walker,1, MPI_INT,node,0,MPI_COMM_WORLD); + + int nelectrons=age.GetDim(0); + MPI_Send(&nelectrons,1, MPI_INT,node,0,MPI_COMM_WORLD); + MPI_Send(age.v,nelectrons, MPI_DOUBLE, node,0,MPI_COMM_WORLD); +#endif +} + +void Dmc_point::mpiReceive(int node) { +#ifdef USE_MPI + prop.mpiReceive(node); + config_pos.mpiReceive(node); + int n; + MPI_Status status; + MPI_Recv(&n,1,MPI_INT,node,0,MPI_COMM_WORLD, &status); + Dmc_history tmp_hist; + past_energies.clear(); + for(int i=0; i< n; i++) { + tmp_hist.mpiReceive(node); + past_energies.push_back(tmp_hist); + } + MPI_Recv(&weight,1,MPI_DOUBLE,node,0,MPI_COMM_WORLD, &status); + MPI_Recv(&ignore_walker,1,MPI_INT,node,0,MPI_COMM_WORLD, &status); + + int nelectrons; + MPI_Recv(&nelectrons,1,MPI_INT,node,0,MPI_COMM_WORLD,&status); + age.Resize(nelectrons); + MPI_Recv(age.v,nelectrons,MPI_DOUBLE, node,0,MPI_COMM_WORLD,&status); +#endif +} + +void Dmc_history::mpiSend(int node) { +#ifdef USE_MPI + MPI_Send(&main_en,1,MPI_DOUBLE,node,0,MPI_COMM_WORLD); + int n1=aux_en.GetDim(0); + int n2=aux_en.GetDim(1); + MPI_Send(&n1,1,MPI_INT,node,0,MPI_COMM_WORLD); + MPI_Send(&n2,1,MPI_INT,node,0,MPI_COMM_WORLD); + MPI_Send(aux_en.v,n1*n2,MPI_DOUBLE,node,0,MPI_COMM_WORLD); +#endif +} + +void Dmc_history::mpiReceive(int node) { +#ifdef USE_MPI + MPI_Status status; + int n1,n2; + MPI_Recv(&main_en,1,MPI_DOUBLE,node,0,MPI_COMM_WORLD,&status); + MPI_Recv(&n1,1,MPI_INT,node,0,MPI_COMM_WORLD,&status); + MPI_Recv(&n2,1,MPI_INT,node,0,MPI_COMM_WORLD,&status); + aux_en.Resize(n1,n2); + MPI_Recv(aux_en.v,n1*n2,MPI_DOUBLE,node,0,MPI_COMM_WORLD,&status); +#endif +} diff --git a/src/method/Dmc_method.h b/src/method/Dmc_method.h new file mode 100644 index 00000000..cb4c2593 --- /dev/null +++ b/src/method/Dmc_method.h @@ -0,0 +1,207 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ + + +#ifndef DMC_METHOD_H_INCLUDED +#define DMC_METHOD_H_INCLUDED + +#include "Qmc_std.h" +#include "Qmc_method.h" +#include "Wavefunction.h" +#include "Wavefunction_data.h" +#include "Sample_point.h" +#include "Guiding_function.h" +#include "Pseudopotential.h" +#include "System.h" +#include "Split_sample.h" +#include "Properties.h" +#include + +class Program_options; + +struct Dmc_history { + doublevar main_en; + Array2 aux_en; + void mpiSend(int node); + + void mpiReceive(int node); + +}; + +struct Dmc_point { + Properties_point prop; + deque past_energies; + doublevar weight; + int ignore_walker; + Config_save_point config_pos; + Array1 age; //!< age of each electron + Dmc_point() { + weight=1; + ignore_walker=0; + } + void mpiSend(int node); + void mpiReceive(int node); + +}; + + +class Dmc_method : public Qmc_avg_method +{ +public: + + + void read(vector words, + unsigned int & pos, + Program_options & options); + int generateVariables(Program_options & options); + void run(Program_options & options, ostream & output); + + virtual void runWithVariables(Properties_manager & prop, + System * sys, + Wavefunction_data * wfdata, + Pseudopotential * psp, + ostream & output); + + + Dmc_method() { + have_read_options=0; + have_allocated_variables=0; + + wf=NULL; + mypseudo=NULL; + mysys=NULL; + mywfdata=NULL; + guidingwf=NULL; + dyngen=NULL; + sample=NULL; + + } + ~Dmc_method() + { + if(have_allocated_variables) { + if(mypseudo) delete mypseudo; + if(mysys) delete mysys; + deallocate(mywfdata); + + } + if(guidingwf) delete guidingwf; + if(dyngen) delete dyngen; + for(int i=0; i< densplt.GetDim(0); i++) { + if(densplt(i)) delete densplt(i); + } + } + + + int showinfo(ostream & os); + private: + + Properties_manager myprop; + Properties_gather mygather; + + + + int allocateIntermediateVariables(System * , Wavefunction_data *); + void deallocateIntermediateVariables() { + if(sample) delete sample; + sample=NULL; + deallocate(wf); + wf=NULL; + + + } + + void savecheckpoint(string & filename, Sample_point *); + void restorecheckpoint(string & filename, System * sys, + Wavefunction_data * wfdata,Pseudopotential * pseudo); + void cdmcReWeight(Array2 & energy_temp, + Array1 < Wf_return> & value_temp); + + doublevar getWeight(Dmc_point & pt, + doublevar teff, doublevar etr); + + void getAuxWeight(Dmc_point & pt, + doublevar teff, + Array1 & aux_teff, + Array2 & aux_weight); + + int calcBranch(); + void find_cutoffs(); + void loadbalance(); + void updateEtrial(doublevar feedback); + + + int have_allocated_variables; + int have_read_options; + int do_cdmc; + + int aux_converge; //!< Number of projection lengths at which to evaluate correlated sampling + + int nblock, nstep; + doublevar eref; //!< reference energy-best guess at dmc energy + doublevar etrial; //!< current trial energy + doublevar timestep; + string readconfig, storeconfig; + string log_label; + + int nconfig; + + int nelectrons; + int ndim; + int nwf; + + doublevar feedback; + int feedback_interval; + doublevar start_feedback; + + int nhist; //!< amount of history to go back when doing correlated sampling + + Dynamics_generator * dyngen; + + Dmc_guiding_function * guidingwf; + Array1 sum_proportions; + string guidetype; + + + //If a walker happens to have a very low energy, we will cut + //it off smoothly with these points + doublevar branchcut_start, branchcut_stop; + + //these times the standard deviation are branchcut_start, branchcut_stop + doublevar branch_start_cutoff, branch_stop_cutoff; + + System * mysys; + Pseudopotential * mypseudo; + Sample_point * sample; + Wavefunction * wf; + Wavefunction_data * mywfdata; + + Array1 pts; + + + Array1 < Local_density_accumulator *> densplt; + vector > dens_words; + +}; + + + + +#endif //DMC_METHOD_H_INCLUDED +//------------------------------------------------------------------------ diff --git a/src/method/Force_fitter.cpp b/src/method/Force_fitter.cpp new file mode 100644 index 00000000..196eda0a --- /dev/null +++ b/src/method/Force_fitter.cpp @@ -0,0 +1,73 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ + +#include "Force_fitter.h" +#include "MatrixAlgebra.h" + +void Force_fitter::setup(doublevar maxcut, int nexpansion ) { + m=2; + cut=maxcut; + nexp=nexpansion; + coeff.Resize(nexp); + Array2 S(nexp, nexp); + Array1 h(nexp); + for(int i=0; i< nexp; i++) { + for(int j=0; j< nexp; j++) { + S(i,j)=pow(cut,m+i+j+1)/(m+i+j+1); + } + h(i)=pow(cut,i+1)/(i+1); + } + + Array2 Sinv(nexp, nexp); + InvertMatrix(S, Sinv, nexp); + + coeff=0; + for(int i=0; i< nexp; i++) + for(int j=0;j< nexp;j++) + coeff(i)+=Sinv(i,j)*h(j); +} + + +void Force_fitter::fit_force(Array1 & r, + Array1 & bare_force, + Array1 & fit_force) { + int ndim=bare_force.GetDim(0); + + fit_force=bare_force; return; + + fit_force.Resize(ndim); + fit_force=0; + + if(r(0) < cut) { + for(int d=0; d< ndim; d++) { + doublevar basis=0; + for(int i=0; i< nexp; i++) { + basis+=coeff(i)*pow(r(0),i+m); + } + fit_force(d)=bare_force(d)*basis; + } + } + else { + fit_force=bare_force; + } + + +} + diff --git a/src/method/Force_fitter.h b/src/method/Force_fitter.h new file mode 100644 index 00000000..09e76b71 --- /dev/null +++ b/src/method/Force_fitter.h @@ -0,0 +1,46 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ + +#ifndef FORCE_FITTER_H_INCLUDED +#define FORCE_FITTER_H_INCLUDED + + +#include "Qmc_std.h" + +class Force_fitter { + public: + void setup(doublevar cut, int nexpansion ); + + doublevar cutoff() { return cut;} + void fit_force(Array1 & r, Array1 & bare_force, + Array1 & fit_force); + + + + private: + int m;//the base expansion + doublevar cut; + int nexp; + Array1 coeff; + +}; + + +#endif //FORCE_FITTER_H_INCLUDED diff --git a/src/method/Levenberg_Marquardt.cpp b/src/method/Levenberg_Marquardt.cpp new file mode 100644 index 00000000..efc92d28 --- /dev/null +++ b/src/method/Levenberg_Marquardt.cpp @@ -0,0 +1,331 @@ +/* + +Copyright (C) 2007 Michal Bajdich + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ +#include "Optimize_method2.h" +#include "Array.h" +#include "MatrixAlgebra.h" + +void Optimize_method2::wf_printout(int iter, doublevar value, doublevar energy, doublevar variance, int min_nconfig, + doublevar mu, ostream & output){ + if (output){ + string indent=""; + ofstream wfoutput(wfoutputfile.c_str()); + wfoutput.precision(15); + wfdata->writeinput(indent,wfoutput); + wfoutput.close(); + + if (use_extended_output){ + char strbuff[40]; + sprintf(strbuff, "%d", iter); + string wfoutputfile2=wfoutputfile+"_"+strbuff; + ofstream wfoutput2(wfoutputfile2.c_str()); + wfoutput2.precision(15); + wfdata->writeinput(indent,wfoutput2); + wfoutput2.close(); + } + output << "iteration # " << iter; + switch(min_function) + { + case min_variance: + output <<" dispersion= " << sqrt(fabs(value)) << " energy= " << energy + <<" nconfig "<< min_nconfig << " damping "< & function_hessian, ostream & output){ + int dim=function_hessian.GetDim(0); + Array1 eigenvals(dim); + Array2 eigenvecs(dim,dim); + Jacobi(function_hessian, eigenvals, eigenvecs); + if(output){ + cout << "EigenValues of Hessian are: "< & parms, int nparms_start, int nparms_end, + Array1 & delta, + int & min_nconfig, int iter_min, + const int itmax, int & iter, ostream & output) +{ + doublevar EPSILON=1e-12; + doublevar ONE_THIRD=0.3333333334; + doublevar LM_INIT_MU=1e-01; + doublevar LM_STOP_THRESH=1e-6; + doublevar LM_STOP_THRESH2=1e-10; + + int m=parms.GetSize(); + int m_part=nparms_end-nparms_start; + + Array1 grad(m_part); //gradient + Array2 hessian(m_part,m_part), hessian_inverse(m_part,m_part); //hessian and its inverse + Array1 Dp(m_part); //change of parms + Array1 diag_hess(m_part); //diagonal of hessian + Array1 pDp(m_part); //partial new parms + Array1 pDp_full(m); //full new parms + + + doublevar mu=0.0; //damping constant + doublevar tmp; // mainly used in matrix & vector multiplications + doublevar grad_inf;// + doublevar p_L2, Dp_L2, dF, dL; + doublevar tau, eps1, eps2, eps2_sq; + int nu=2, nu2, stop; + + doublevar value, energy, variance; + + tau=LM_INIT_MU; + eps1=LM_STOP_THRESH; + eps2=LM_STOP_THRESH2; + eps2_sq=eps2*eps2; + stop=0; + iter=0; + int startfull=0; + int counter1=0; + + func_val(m, parms, value, energy, variance, min_nconfig, output); + + if(use_weights) + eref=energy; + + wf_printout(iter, value, energy, variance, min_nconfig, mu, output); + + for(int k=0; k< itmax && !stop; ++k){ + if(wfdata->supports(parameter_derivatives)) + func_hessian_rev_analytical(parms, nparms_start, nparms_end, hessian, grad, energy, delta, min_nconfig, output); + else + func_hessian_rev(parms, nparms_start, nparms_end, hessian, grad, energy, delta, min_nconfig, output); + + make_posite_definite2(hessian, output); + + p_L2=grad_inf=0.0; + for(int i=0; itmp) tmp=diag_hess(i); //find max diagonal element + // if(diag_jacTjac[i]= nparms_start && i=(p_L2+eps2)/(EPSILON*EPSILON)){ // almost singular + if (output) + cout <<"almost singular, stop"<0.0 && dF>0.0 ){ // reduction in error, increment is accepted + if (output) + cout << "reduction in error, increment is accepted"<=ONE_THIRD)? tmp : ONE_THIRD ); + nu=2; + break; + } + else + if ( startfull<0 && abs(dF)< abs(value*0.001) ){ + if (output) + cout << "no reduction in error, but increment is accepted, keeping the same damping"<=itmax) { + stop=3; + if (output) + cout << "Too many iterations in Levenberg-Marquardt routine"< words, + unsigned int & pos, + Program_options & options) +{ + + pos=0; + if(!readvalue(words, pos=0, nconfig, "NCONFIG")) + { + error("Need NCONFIG in METHOD section"); + } + pos=0; + if(!readvalue(words,pos, iterations, "ITERATIONS")) + { + error("Need ITERATIONS in METHOD section"); + } + pos=0; + if(readvalue(words,pos, eref, "EREF")){ + eref_exists=1; + } + else{ + eref_exists=0; + eref=0; + } + + //Optional options + pos=0; + if( ! readvalue(words, pos, pseudostore, "PSEUDOTEMP") ) + { + pseudostore=options.runid+".pseudo"; + } + canonical_filename(pseudostore); + + if(! readvalue(words, pos=0, wfoutputfile, "WFOUTPUT") ) + { + wfoutputfile=options.runid+".wfout"; + } + else { use_weights=0; } + if(haskeyword(words, pos=0, "EXTENDED_WFOUTPUT") ) + { + use_extended_output=1; + } + else { use_extended_output=0; } + + if(!readvalue(words, pos=0, vmc_nblocks, "VMC_NBLOCK") ) + { + vmc_nblocks=1; + } + if(!readvalue(words,pos=0, mixing, "MIXING")) + { + mixing=0.95; + } + if(haskeyword(words, pos=0, "USE_WEIGHTS") ) + { + use_weights=1; + } + else { use_weights=0; } + if(haskeyword(words, pos=0, "USE_HESSIAN_PLUS_TYPE") ) + { + plus_version_of_hessian_of_energy=1; + } + else { plus_version_of_hessian_of_energy=0; } + + if(haskeyword(words, pos=0, "CORRELATED_SAMPLING") ) + { + use_correlated_sampling=1; + } + else { use_correlated_sampling=0; } + + string functiontype_str; + pos=0; + if(readvalue(words, pos, functiontype_str, "MINFUNCTION")) + { + if(functiontype_str== "VARIANCE") + { + min_function=min_variance; + //cout <<"Are you sure you want to use weights for variance optimization?"<generatePseudo(options.pseudotext, pseudo); + sample=NULL; + wf=NULL; + sysprop->generateSample(sample); + wfdata=NULL; + debug_write(cout, "wfdata allocate\n"); + allocate(options.twftext[0], sysprop, wfdata); + wfdata->generateWavefunction(wf); + sample->attachObserver(wf); + //--Read configurations + readcheck(readconfig); +} + +void Newton_opt_method::readcheck(string & readconfig) { + int configsread=0; + int nwread=0; + config_pos.Resize(nconfig); + dmc_weight.Resize(nconfig); + dmc_weight=1.0; + if(readconfig !="") { + ifstream checkfile(readconfig.c_str()); + if(!checkfile) + error("Couldn't open ", readconfig); + + long int is1, is2; + string dummy; + checkfile >> dummy; + if(dummy != "RANDNUM") error("Expected RANDNUM in checkfile"); + checkfile >> is1 >> is2; + + while(checkfile >>dummy && configsread < nconfig && nwread < nconfig) { + if(read_config(dummy, checkfile, sample)) { + config_pos(configsread++).savePos(sample); + } + if(dummy=="DMC") { + checkfile >> dummy; + if(dummy != "{") error("Need a { after DMC"); + checkfile >> dummy >> dmc_weight(nwread); + if(dummy != "DMCWEIGHT") { + error("expected DMCWEIGHT, got ", dummy); + } + int nwf_temp; + checkfile >> dummy >> nwf_temp; + if(dummy != "VALEN") { + error("expected VALEN, got ", dummy); + } + //if(nwf_temp != nwf) { + // error("Wrong number of wavefunctions in the checkpoint file"); + nwread++; + } + } + checkfile.close(); + } + + if(readconfig ==""){ + error("No file name given for READCONFIG ", readconfig); + } + + if(configsread < nconfig) + { + nconfig=configsread; + cout << "processor " << mpi_info.node << " : " + << "WARNING: Didn't find enough configurations in the " + << "file. Running optimization with only " << nconfig + << " sample points." << endl; + } +} + + +void Newton_opt_method::generate_all_quanities(Array1 & parms, + Array1 & delta, + Array1 & local_energy, + Array1 < Array1 > & local_energy_gradient, + Array1 < Array1 > & wf_gradient, + Array1 < Array2 > & wf_hessian + ){ + Array1 kinetic(nfunctions), nonloc(nfunctions); + Array1 Psi(nparms); + doublevar energy; + doublevar psi; + Wf_return wfval(nfunctions,2); + Parm_deriv_return derivatives; + derivatives.nparms_start=0; + derivatives.nparms_end=nparms; + if(min_function!=min_variance){ + derivatives.need_hessian=1; + } + FILE * pseudoout; + FILE * pseudoin; + doublevar ln_wf_value, sign_wf_value; + + for(int walker=0; walker < nconfig; walker++) { + wfdata->setVarParms(parms); + pseudoout=fopen(pseudostore.c_str(), "w"); + if(!pseudoout) { + error("couldn't open pseudopotential temporary file ", pseudostore, + " for writing."); + } + config_pos(walker).restorePos(sample); + wf->updateLap(wfdata, sample); + wf->getVal(wfdata, 0, wfval); + ln_wf_value=wfval.amp(0,0); + sign_wf_value=wfval.sign(0); + calcpot(walker)=sysprop->calcLoc(sample); + pseudo->initializeStatic(wfdata, sample, wf, pseudoout); + wf->notify(sample_static,0); + fclose(pseudoout); + + if(wfdata->supports(parameter_derivatives)){ + wf->getParmDeriv(wfdata, sample, derivatives); + wf_gradient(walker)=derivatives.gradient; + wf_hessian(walker)=derivatives.hessian; + //for(int m=0;m0){ + parms(i-1)+=delta(i-1); + wfdata->setVarParms(parms); + } + + wf->updateLap(wfdata, sample); + sysprop->calcKinetic(wfdata, sample, wf, kinetic); + pseudoin=fopen(pseudostore.c_str(), "r"); + pseudo->calcNonlocWithFile(wfdata, sample, wf,nonloc, pseudoin); + fclose(pseudoin); + energy=kinetic(0)+calcpot(walker)+nonloc(0); + if(i==0) + local_energy(walker)=energy; + else + local_energy_gradient(walker)(i-1)=(energy-local_energy(walker))/delta(i-1); + if(i>0) + parms(i-1)-=delta(i-1); + } + } + else{ + + for (int i=0;i<=nparms;i++){ + if (i>0) + parms(i-1)+=delta(i-1); + for (int j=i;j<=nparms;j++){ + if (j>0) + parms(j-1)+=delta(j-1); + wfdata->setVarParms(parms); + + if(i==0){ + wf->updateLap(wfdata, sample); + wf->getVal(wfdata, 0, wfval); + + sysprop->calcKinetic(wfdata, sample, wf, kinetic); + pseudoin=fopen(pseudostore.c_str(), "r"); + pseudo->calcNonlocWithFile(wfdata, sample, wf,nonloc, pseudoin); + fclose(pseudoin); + energy=kinetic(0)+calcpot(walker)+nonloc(0); + if(j==0){ + local_energy(walker)=energy; + } + else{ + Psi(j-1)=wfval.sign(0)*sign_wf_value*exp(wfval.amp(0,0)-ln_wf_value); + local_energy_gradient(walker)(j-1)=(energy-local_energy(walker))/delta(j-1); + wf_gradient(walker)(j-1)=(Psi(j-1)-1)/delta(j-1); + } + }// i>0 j>=i calculation of double index quantities + else { + wf->updateVal(wfdata, sample); + wf->getVal(wfdata, 0, wfval); + psi=wfval.sign(0)*sign_wf_value*exp(wfval.amp(0,0)-ln_wf_value); + wf_hessian(walker)(i-1,j-1)=(psi-Psi(i-1)-Psi(j-1)+1)/(delta(i-1)*delta(j-1)); + //cout<< wf_hessian(walker)(i-1,j-1)<< " "; + } + if (j>0) + parms(j-1)-=delta(j-1); + }//j loop + //cout <0) + parms(i-1)-=delta(i-1); + }//i loop + }//end of else (wfdata->supports(parameter_derivatives)) + wf->notify(sample_dynamic,0); + }//walker loop +} + + +void Newton_opt_method::calculate_first_averages(Array1 & parms, + Array1 & local_energy, + Array1 < Array1 > local_energy_gradient, + Array1 < Array1 > wf_gradient, + doublevar & energy_mean, + doublevar & function_mean_est, + doublevar & energy_mean_est, + doublevar & variance_mean_est, + Array1 & wf_gradient_mean, + Array1 & local_energy_gradient_mean, + Array1 & energy_gradient_mean + ){ + Array1 wf_grad_sum(nparms); + Array1 local_energy_grad_sum(nparms); + Array1 energy_grad_sum(nparms); + wf_grad_sum=0; + local_energy_grad_sum=0; + energy_grad_sum=0; + doublevar energy_sum=0; + doublevar variance_sum=0; + doublevar weightsum=0; + doublevar energy,weight; + for(int walker=0; walker < nconfig; walker++){ + energy=local_energy(walker); + weight=dmc_weight(walker); + energy_sum+=energy*weight; + variance_sum+=(energy-eref)*(energy-eref)*weight; + for(int i=0;i & parms, + Array1 & local_energy, + Array1 < Array1 > local_energy_gradient, + Array1 < Array1 > wf_gradient, + Array1 < Array2 > wf_hessian, + doublevar & energy_mean, + Array1 & wf_gradient_mean, + Array1 & local_energy_gradient_mean, + Array1 & energy_gradient_mean, + Array1 & variance_grad_mean, + Array2 & hess1_eng_mean, + Array2 & hess2_eng_mean, + Array2 & hess3_1eng_mean, + Array2 & hess3_2eng_mean, + Array2 & hess1_var_mean + ){ + + Array1 variance_grad(nparms); + Array2 hess1_eng(nparms,nparms); + Array2 hess2_eng(nparms,nparms); + Array2 hess3_1eng(nparms,nparms); + Array2 hess3_2eng(nparms,nparms); + Array2 hess1_var(nparms,nparms); + variance_grad=0; + hess1_eng=hess2_eng=hess3_1eng=hess3_2eng=hess1_var=0; + doublevar weightsum=0; + doublevar energy,weight; + for(int walker=0; walker < nconfig; walker++){ + energy=local_energy(walker); + weight=dmc_weight(walker); + for(int i=0;i & energy_gradient_mean, + Array1 & variance_grad_mean, + Array1 & grad_var + ){ + for (int i=0;i & wf_gradient_mean, + Array1 & local_energy_gradient_mean, + Array2 & hess1_eng_mean, + Array2 & hess2_eng_mean, + Array2 & hess3_1eng_mean, + Array2 & hess3_2eng_mean, + Array2 & hess1_var_mean, + Array2 & hessian + ){ + doublevar h_tmp, h_tmp2, h_tmp3; + //if( mpi_info.node==0 ){ + // cout << "Our hessian matrix"< & function_hessian){ + int dim=function_hessian.GetDim(0); + Array1 eigenvals(dim); + Array2 eigenvecs(dim,dim); + Jacobi(function_hessian, eigenvals, eigenvecs); + if( mpi_info.node==0 ){ + cout << "Eigen-values of hessian are: "< & function_gradient, Array2 & function_hessian, + doublevar & damping, Array1 & parms, Array1 & newparms){ + doublevar tmp; + int dim=function_hessian.GetDim(0); + Array2 hessian_inverse(dim,dim); + Array2 hessian(dim,dim); + hessian=function_hessian; + for(int i=0; i & parms, string & wfoutputfile, Wavefunction_data * wfdata){ + if( mpi_info.node==0 ){ + string indent=""; + wfdata->setVarParms(parms); + wfdata->renormalize(); + ofstream wfoutput(wfoutputfile.c_str()); + wfoutput.precision(15); + wfdata->writeinput(indent,wfoutput); + wfoutput.close(); + } +} + +void Newton_opt_method::Get_correlated_energies_and_variances(Array1 < Array1 > & parms, + int & iter, + Array1 & y, + Array1 & energies, + Array1 & variancies, + ostream & output, + Program_options & options + ){ + + int size=y.GetSize(); + char strbuff[40]; + int ii=0; + vector < vector > aux_wftext(size-1); + for(int i=0;i total_mc_words; + char strbuff2[40]; + sprintf(strbuff2, "%d", nconfig); + total_mc_words=mc_words; + total_mc_words.insert(total_mc_words.begin(),storeconfig_non_cannonical); + total_mc_words.insert(total_mc_words.begin(),"STORECONFIG"); + total_mc_words.insert(total_mc_words.begin(),storeconfig_non_cannonical); + total_mc_words.insert(total_mc_words.begin(),"READCONFIG"); + total_mc_words.insert(total_mc_words.begin(),strbuff2); + total_mc_words.insert(total_mc_words.begin(),"NCONFIG"); + total_mc_words.insert(total_mc_words.begin(),mc_words[0]); + total_mc_words.push_back("PROPERTIES") ; + total_mc_words.push_back("{"); + for(unsigned int i=0;ishowinfo(output); + string logfile=options.runid+".log"; + char strbuff3[40]; + sprintf(strbuff3, "%d", iter); + string log_label="mc_with2_aux_func_"; + log_label+=strbuff3; + myprop.setLog(logfile, log_label); + ofstream logout; + if(mpi_info.node==0 ) { + logout.open(logfile.c_str(), ios::app); + logout << "#-------------------------------------------------\n"; + logout << "#"<runWithVariables(myprop, + sysprop, + wfdata, + pseudo, + output); + if(mpi_info.node==0 ) { + logout.close(); + } + + Properties_final_average finavg; + myprop.getFinal(finavg); + Array1 rescaled_eng(size); + + wfdata->attachObserver(wf); + + energies(1)=finavg.avg(Properties_types::total_energy,0); + variancies(1)=finavg.avgvar(Properties_types::total_energy,0); + rescaled_eng(1)=energies(1); + if( mpi_info.node==0 ) + cout <<"reference energy "<1) + error("Not supported yet"); + doublevar diffrence; + doublevar diffrence_err; + for(int i=0; i< naux; i++) { + for(int w=0; w< n_cvg; w++) { + if(i==0) + ii=i; + else + ii=i+1; + energies(ii)=finavg.aux_energy(i,w); + variancies(ii)=finavg.aux_energyvar(i,w); + diffrence=finavg.aux_diff(i,w)/finavg.aux_size(i); + diffrence_err=sqrt(finavg.aux_differr(i,w)/finavg.aux_size(i)); + if( mpi_info.node==0 ) + cout <<"energy_aux"< abs(diffrence)){ + if( mpi_info.node==0 ){ + cout <<" WARNING: Newton_opt_method::Get_correlated_energies_and_variances: could not get accurate energy diffrences from correlated run"< & parms, + int & iter, + string log_label, + ostream & output, + Program_options & options, + doublevar & function, + doublevar & energy, + doublevar & energy_err, + doublevar & variance + ){ + wfdata->setVarParms(parms); + wfdata->renormalize(); + char strbuff[40], strbuff_vmc[40]; + sprintf(strbuff, "%d", nconfig); + sprintf(strbuff_vmc, "%d", vmc_nblocks); + vector vmc_words; + vmc_words.push_back("VMC"); + vmc_words.push_back("NBLOCK"); + vmc_words.push_back(strbuff_vmc); + vmc_words.push_back("NCONFIG"); + vmc_words.push_back(strbuff); + if(mc_words[0]=="DMC"){ + vmc_words.push_back("NSTEP"); + vmc_words.push_back("10"); + vmc_words.push_back("TIMESTEP"); + vmc_words.push_back("1"); + } + vmc_words.push_back("READCONFIG"); + if(iter<0) + vmc_words.push_back(readconfig_non_cannonical); + else + vmc_words.push_back(storeconfig_non_cannonical); + vmc_words.push_back("STORECONFIG"); + vmc_words.push_back(storeconfig_non_cannonical); + for(unsigned int i=1;irunWithVariables(myprop, + sysprop, + wfdata, + pseudo, + output); + if(mpi_info.node==0 ) { + logout.close(); + } + Properties_final_average finavg; + myprop.getFinal(finavg); + energy=finavg.avg(Properties_types::total_energy,0); + variance=finavg.avgvar(Properties_types::total_energy,0); + energy_err=sqrt(finavg.err(Properties_types::total_energy,0)); + switch(min_function) + { + case min_energy: + function=energy; + break; + case min_variance: + function=variance; + break; + case min_mixed: + function=mixing*energy+(1-mixing)*variance; + break; + } + wfdata->attachObserver(wf); + + if(mc_words[0]=="DMC"){ + vector dmc_words; + dmc_words.push_back("DMC"); + dmc_words.push_back("NBLOCK"); + dmc_words.push_back(strbuff_vmc); + dmc_words.push_back("NCONFIG"); + dmc_words.push_back(strbuff); + dmc_words.push_back("READCONFIG"); + dmc_words.push_back(storeconfig_non_cannonical); + dmc_words.push_back("STORECONFIG"); + dmc_words.push_back(storeconfig_non_cannonical); + for(unsigned int i=1;irunWithVariables(myprop, + sysprop, + wfdata, + pseudo, + output); + if(mpi_info.node==0 ) { + logout.close(); + } + Properties_final_average finavg2; + myprop.getFinal(finavg2); + energy=finavg2.avg(Properties_types::total_energy,0); + variance=finavg2.avgvar(Properties_types::total_energy,0); + energy_err=sqrt(finavg2.err(Properties_types::total_energy,0)); + switch(min_function) + { + case min_energy: + function=energy; + break; + case min_variance: + function=variance; + break; + case min_mixed: + function=mixing*energy+(1-mixing)*variance; + break; + } + wfdata->attachObserver(wf); + } +} + +doublevar parabola(doublevar x, Array1 & c){ + return c(2)*x*x+c(1)*x+c(0); +} + +void fit_to_polynomial(Array1 & y, + Array1 & x, + Array1 & cof){ + int k,j,i; + doublevar phi,ff,b; + + int n=x.GetSize(); + Array1 s(n); + for (i=0;i0;k--) + phi=k*s[k]+x[j]*phi; + ff=y[j]/phi; + b=1.0; + for (k=n-1;k>=0;k--) { + cof[k] += b*ff; + b=s[k]+x[j]*b; + } + } +} + +doublevar parabola_min(Array1 & y, + Array1 & x, + doublevar & minimalvalue + ){ + Array1 c(y.GetSize()); + doublevar min=0; + + if(y(1)0){ + min=-c(1)/(2*c(2)); + minimalvalue=parabola(min,c); + } + else + error("error in parabola_min routine"); + } + else{ + min=x(2); + minimalvalue=y(2); + } + } + else{ + if(y(2) & y, + Array1 & x, + doublevar & pos + ){ + Array1 c(y.GetSize()); + fit_to_polynomial(y,x,c); + //if( mpi_info.node==0 ) + // cout <<"energy/variance fit"< & parms, int iter, + doublevar & value, + doublevar & energy, + doublevar & energy_err, + doublevar & variance, int min_nconfig, + doublevar mu, ostream & output){ + wfdata->setVarParms(parms); + wfdata->renormalize(); + int field=output.precision()+2; + if( mpi_info.node==0 ){ + if (use_extended_output){ + output <writeinput(indent,wfoutput2); + wfoutput2.close(); + } + output << "iteration # " << setw(3)< & gradient, + Array2 & hessian, + int & iter, + Array1 & parms, + doublevar & function_mean, + doublevar & energy_mean, + doublevar & energy_mean_err, + doublevar & variance_mean, + int & nu, + doublevar & damping, + ostream & vmcoutput, + ostream & output, + Program_options & options + ){ + doublevar tau=0.01; + doublevar dL; + int nu2; + doublevar ONE_THIRD=0.3333333334; + doublevar LM_STOP_THRESH=1e-6; + doublevar LM_STOP_THRESH2=1e-10; + doublevar EPSILON=1e-12; + doublevar eps1=LM_STOP_THRESH; + doublevar eps2=LM_STOP_THRESH2; + doublevar tmp; + int dim=parms.GetSize(); + Array1 parms_new(dim); + doublevar dF=0; + doublevar function_mean_new, energy_mean_new, energy_mean_err_new, variance_mean_new; + int flag; + + if(iter==1 || use_correlated_sampling){ + nu=2; + tmp=0.0; + for(int i=0; itmp) tmp=hessian(i,i); //find max diagonal element + // if(function_hessian(i,i) > tmpparms(3); + Array1 mu(3), mulog(3); + Array1 y(3), energies(3), variances(3); + mu(0)=damping/multyplier; + mulog(0)=log(mu(0)); + for(int i=0;i0){ + mu(i)=multyplier*mu(i-1); + multyplier*=multyplier; + //mulog(i)=log(multyplier)+mulog(i-1); + } + //mu(i)=exp(mulog(i)); + mulog(i)=log(mu(i)); + tmpparms(i).Resize(nparms); + newton_step(gradient, hessian, mu(i), parms, tmpparms(i)); + } + Get_correlated_energies_and_variances(tmpparms, iter, y, energies, variances, vmcoutput, options); + for(int i=0;i Dp(dim); + doublevar Dp_L2=0; + doublevar grad_inf=0; + doublevar p_L2=0; + for(int i=0; i=(p_L2+eps2)/(EPSILON*EPSILON)){ // almost singular + if(mpi_info.node==0 ) + cout <<"almost singular, stop"<0.0 && dF>0.0 ){ + if(mpi_info.node==0 ) + cout << "reduction in error, step is accepted"<=ONE_THIRD)? tmp : ONE_THIRD ); + nu=2; + flag=0; + break; + } + else if(dL> -5.0*abs(energy_mean_err_new) && dF>-5.0*abs(energy_mean_err_new)){ + if(mpi_info.node==0 ) + cout << "No reduction in error, but step is accepted"<showinfo(os); + os << endl << endl; + os << " Wavefunction " << endl; + wfdata->showinfo(os); + os << endl << endl; + pseudo->showinfo(os); + os << endl << endl; + os << "-----------------------------" << endl; + os << "Wave function optimization " << endl; + os << "Number of configurations : " << nconfig << endl; + os << "Iterations : " << iterations << endl; + os << "nparms " << wfdata->nparms() << endl; + os << "Reference energy : " << eref << endl; + os << "Minimization function : "; + switch(min_function) { + case min_variance: + os << "Variance \n"; + break; + case min_energy: + os << "Energy\n"; + break; + case min_mixed: + os << "Mixed energy and variance\n"; + break; + default: + os << "Unknown--add to showinfo()\n"; + } + + if(use_weights) + os << "Reweighting using correlated sampling " << endl; + os << "----------------------------" << endl; + + + return 1; +} + +void Newton_opt_method::run(Program_options & options, ostream & output) +{ + output.precision(10); + nparms=wfdata->nparms(); //Number of variables + if(nparms<= 0 ) error("There appear to be no parameters to optimize!"); + Array1 delta(nparms); + delta=0.0001; //decent value fo finite differences + Array1 parms(nparms); + Array1 local_energy(nconfig); + Array1 < Array1 > local_energy_gradient(nconfig); + Array1 < Array1 > wf_gradient; + Array1 < Array2 > wf_hessian; + calcpot.Resize(nconfig); + wf_gradient.Resize(nconfig); + wf_hessian.Resize(nconfig); + + for(int walker=0;walkergetVarParms(parms); + nfunctions=wf->nfunc(); + + + Array1 wf_gradient_mean(nparms); + Array1 local_energy_gradient_mean(nparms); + Array1 energy_gradient_mean(nparms); + Array1 variance_gradient_mean(nparms); + Array2 hess1_eng_mean(nparms,nparms), + hess2_eng_mean(nparms,nparms), + hess3_1eng_mean(nparms,nparms), + hess3_2eng_mean(nparms,nparms), + hess1_var_mean(nparms,nparms); + + Array2 function_hessian(nparms,nparms); + Array1 function_gradient(nparms); + + doublevar damping; + int nu=2; + Array1 bestparms(nparms); + doublevar bestdamping=0; + doublevar energy_mean; + doublevar energy_mean_err=0; + doublevar energy_mean_fit=0; + doublevar energy_mean_est=0; + doublevar variance_mean_fit=0; + doublevar variance_mean=0; + doublevar variance_mean_est=0; + doublevar function_mean=0; + doublevar function_mean_fit=0; + doublevar function_mean_est=0; + string vmcout=options.runid+"_mc.o"; + ofstream vmcoutput; + if( mpi_info.node==0 ) + vmcoutput.open(vmcout.c_str()); + doublevar best_function, best_energy, best_energy_err, best_variance; + best_function=best_energy=best_energy_err=best_variance=0; + int iter_best=0; + + //start iterations + int iter=0; + if( mpi_info.node==0 ) + cout <<"start iterations"< words, + unsigned int & pos, + Program_options & options); + + void readcheck(string & readconfig); + + void run(Program_options & options, ostream & output); + ~Newton_opt_method() + { + if(pseudo) delete pseudo; + if(sysprop) delete sysprop; + + deallocate(wfdata); + deallocate(wf); + delete sample; + } + + int showinfo(ostream & os); +private: + void generate_all_quanities (Array1 & parms, + Array1 & delta, + Array1 & local_energy, + Array1 < Array1 > & local_energy_gradient, + Array1 < Array1 > & wf_gradient, + Array1 < Array2 > & wf_hessian + ); + + + void calculate_first_averages(Array1 & parms, + Array1 & local_energy, + Array1 < Array1 > local_energy_gradient, + Array1 < Array1 > wf_gradient, + doublevar & function_mean, + doublevar & function_mean_est, + doublevar & energy_mean_est, + doublevar & variance_mean_est, + Array1 & wf_gradient_mean, + Array1 & local_energy_gradient_mean, + Array1 & energy_gradient_mean + ); + + void calculate_second_averages(Array1 & parms, + Array1 & local_energy, + Array1 < Array1 > local_energy_gradient, + Array1 < Array1 > wf_gradient, + Array1 < Array2 > wf_hessian, + doublevar & energy_mean, + Array1 & wf_gradient_mean, + Array1 & local_energy_gradient_mean, + Array1 & energy_gradient_mean, + Array1 & variance_grad_mean, + Array2 & hess1_eng_mean, + Array2 & hess2_eng_mean, + Array2 & hess3_1eng_mean, + Array2 & hess3_2eng_mean, + Array2 & hess1_var_mean + ); + + void build_gradient(Array1 & energy_gradient_mean, + Array1 & variance_grad_mean, + Array1 & grad_var + ); + + void build_hessian(Array1 & wf_gradient_mean, + Array1 & local_energy_gradient_mean, + Array2 & hess1_eng_mean, + Array2 & hess2_eng_mean, + Array2 & hess3_1eng_mean, + Array2 & hess3_2eng_mean, + Array2 & hess1_var_mean, + Array2 & hessian + ); + + void Get_correlated_energies_and_variances(Array1 < Array1 > & parms, + int & iter, + Array1 & y, + Array1 & energies, + Array1 & variances, + ostream & output, + Program_options & options); + void adjust_distribution(Array1 & parms, + int & iter, + string log_label, + ostream & output, + Program_options & options, + doublevar & vmc_function, + doublevar & vmc_energy, + doublevar & vmc_energy_err, + doublevar & vmc_variance + ); + + void wf_printout(Array1 & parms, int iter, doublevar & value, doublevar & energy, doublevar & energy_err, doublevar & variance, int nconfig, doublevar mu, + ostream & output); + + int Levenberg_marquad(Array1 & gradient, + Array2 & hessian, + int & iter, + Array1 & parms, + doublevar & function_mean, + doublevar & energy_mean, + doublevar & energy_mean_err, + doublevar & variance_mean, + int & nu, + doublevar & damping, + ostream & vmcoutput, + ostream & output, + Program_options & options); + + doublevar eref; //!< reference energy for variance minimization + int eref_exists; //!< whether the reference energy for variance minimization was supplied + int nconfig; //!< Number of configurations(walkers) + int vmc_nblocks; //!< Number of blocks in vmc for distribution adjustment + int iterations; //!< Number of times that the variance can be called. The variance routine is called about once per parameter per iteration + int nfunctions; //!< Number of wavefunctions we have. + enum min_function_type { min_variance, min_energy, min_mixed } min_function; + int use_weights; //!< Whether to use weights in the correlated sampling + doublevar mixing; //!< mixing weight for energy component in mixed minimization (0.95 default) + int plus_version_of_hessian_of_energy; + int use_correlated_sampling; + + string readconfig; + string readconfig_non_cannonical; + string storeconfig; + string storeconfig_non_cannonical; + vector mc_words; + + int nparms; + Array1 calcpot; + string pseudostore; //!< Where to put the temporary pseudo file + string wfoutputfile;//!< Where to put the wavefunction output + Primary guide_wf; //!< Guiding function + + int use_extended_output; //!< Whether to print out wavefunction at every iter. of min + System * sysprop; + Sample_point * sample; + Array1 config_pos; + Array1 dmc_weight; + Wavefunction * wf; + Wavefunction_data * wfdata; + Pseudopotential * pseudo; + Qmc_avg_method * avg_method; + Properties_manager myprop; + + +}; + +#endif //NEWTON_OPT_METHOD_H_INCLUDED +//------------------------------------------------------------------------ diff --git a/src/method/Nodes_method.cpp b/src/method/Nodes_method.cpp new file mode 100644 index 00000000..a9662861 --- /dev/null +++ b/src/method/Nodes_method.cpp @@ -0,0 +1,536 @@ +/* + +Copyright (C) 2007 Michal Bajdich + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ + +#include "Nodes_method.h" +#include "qmc_io.h" +#include "System.h" +#include "Program_options.h" +/*! +Read the "words" from the method section in the input file +via doinput() parsing, and store section information in private +variables isoses, resolution, and minmax. +Set up MO_matrix and Sample_point objects for wavefunction from input +*/ +void Nodes_method::read(vector words, + unsigned int & pos, + Program_options & options) +{ + pos=0; //always start from first word + doublevar Tres; + vector Torbs; + vector Tminmax; + vector orbtext; + vector Tdxyz; + + + allocate(options.systemtext[0], sysprop); + sysprop->generateSample(mywalker); + + allocate(options.twftext[0], sysprop, wfdata); + wfdata->generateWavefunction(wf); + + mywalker->attachObserver(wf); + + pos=0; + if(readsection(words,pos=0,Torbs,"CONTOURS")){ + // error("Need CONTOURS in METHOD section"); + plots.Resize(Torbs.size()); + for(unsigned int i=0; ielectronSize()); + for(int i=0; i> dummy; + if(dummy != "RANDNUM") error("Expected RANDNUM in checkfile"); + checkfile >> is1 >> is2; + //rng.seed(is1, is2); + while(checkfile >>dummy ) { + read_config(dummy, checkfile, mywalker); + } + checkfile.close(); + } + else { + mywalker->randomGuess(); + debug_write(cout, 0, " configs read ", 1, + " configs randomly generated \n"); + } + + + pos=0; + doublemove=false; + if( readsection(words,pos,Tdxyz,"DOUBLEMOVES")){ + doublemove=true; + if(plots.GetSize()%2) + error("Needs pairs of countours for doublemoves"); + unsigned int dummy=3*plots.GetSize()/2; + if(Tdxyz.size()!=dummy) + error("DOUBLEMOVES needs 3 x # of vectors values"); + dxyz.Resize(plots.GetSize()/2,3); + for(int i=0; i xyz(3), xyz2(3), + resolution_array(3); //position of electron "in" MO + Array1 D_array1(3); //dummy array1 + Array2 oldpos(mywalker->electronSize(),3); + Array1 tmp(3); + D_array1=0; //sets all 3 components to 0. use as counter for gridpoints + + + D_array1(0)=roundoff((minmax(1)-minmax(0))/resolution); + D_array1(1)=roundoff((minmax(3)-minmax(2))/resolution); + D_array1(2)=roundoff((minmax(5)-minmax(4))/resolution); + + resolution_array(0)=(minmax(1)-minmax(0))/(D_array1(0)-1); + resolution_array(1)=(minmax(3)-minmax(2))/(D_array1(1)-1); + resolution_array(2)=(minmax(5)-minmax(4))/(D_array1(2)-1); + + Array2 grid(plots.GetSize(),D_array1(0)*D_array1(1)*D_array1(2)); + Wf_return wfvals(wf->nfunc(), 2); //where wfval fist index labels + //wf number ie. ground state + // excited state and so on, and second label is for two values, sign and log(wf). + + //scan electron positions + cout << "Using this electron positions:"<electronSize(); i++){ + mywalker->getElectronPos(i, tmp); + cout.precision(5); + cout.width(8); + cout < atomlabels; + sysprop->getAtomicLabels(atomlabels); + os<electronSize()<nelectrons(0); + //cout << "Up electrons "< pos(3); + mywalker->getIonPos(i, pos); + os<electronSize(); j++){ + if (jgetElectronPos(j, pos); + os<<" "<< oldpos(j,0)<<" "< oldpos(3) + + + + for(int i=0; igetElectronPos(plots(i), oldpos); + mywalker->setElectronPos(plots(i)-1,xyz); //move elec#plots(i) to point specified by xyz + wf->updateVal(wfdata, mywalker); //update wfdata + wf->getVal(wfdata, 0, wfvals); //get wf value + grid(i,count)=wfvals.sign(0)*exp(wfvals.amp(0,0)); + //grid(i,count)=exp(2.0*wfvals(0,1));//!square of wavefunction + if (grid(i,count)>max_value) max_value=grid(i,count); + if (grid(i,count)setElectronPos(plots(i)-1, oldpos(plots(i)-1)); + } + + + //Loop through and generate plot files for each orbital requested + if(plots.GetSize()<=0) + error("Number of requested plots is not a positive number"); + cout<<"saving data for "<nIons(); + os << " " << natoms+ mywalker->electronSize()-1 << " " << minmax(0) << " " + << minmax(2) << " " << minmax(4) << endl; + os << D_array1(0) << " " << resolution_array(0) << " 0.0000 0.0000" << endl; + os << D_array1(1) << " 0.0000 " << resolution_array(1) << " 0.0000" << endl; + os << D_array1(2) << " 0.0000 0.0000 " << resolution_array(2) << endl; + Array1 pos(3); + for(int at=0; at< natoms; at++) { + mywalker->getIonPos(at,pos); + os << " " << mywalker->getIonCharge(at) << " 0.0000 " << pos(0) + <<" " << pos(1) << " " << pos(2) << endl; + } + for(int j=0; jelectronSize(); j++){ + if (j!=plots(i)-1){ + if (j "Orbital/density surface" + //number of grid points for x, y, & z direction + os < pos(3); + sysprop->getAtomicLabels(atomlabels); + os<electronSize()-1 <getIonPos(j, pos); + os<electronSize(); j++){ + if (j!=plots(i)-1){ + if (jgetElectronPos(j, pos); + os<<" "<< oldpos(j,0)<<" "< oldpos(3) + cout.width(3); + cout <<"============================="<getElectronPos(plots(i), oldpos); + mywalker->setElectronPos(plots(i)-1,xyz);//move elec#plots(i) + //to point specified by xyz + mywalker->setElectronPos(plots(i+1)-1,xyz2);//move elec#plots(i) + //to point specified by xyz + wf->updateVal(wfdata, mywalker); //update wfdata + wf->getVal(wfdata, 0, wfvals); //get wf value + grid(i,count)=wfvals.sign(0)*exp(wfvals.amp(0,0)); + //grid(i,count)=exp(2.0*wfvals(0,1));//!square of wavefunction + // cout << "grid " << grid(i,count)<< " " << xyz(0) << endl; + if (grid(i,count)>max_value) max_value=grid(i,count); + if (grid(i,count)setElectronPos(plots(i)-1, oldpos(plots(i)-1)); + mywalker->setElectronPos(plots(i+1)-1, oldpos(plots(i+1)-1)); + } + + //Loop through and generate plot files for each orbital requested + if(plots.GetSize()<=0) + error("Number of requested plots is not a positive number"); + cout<<"saving data for "<nIons(); + os << " " << natoms + mywalker->electronSize()-2 << " " << minmax(0) << " " + << minmax(2) << " " << minmax(4) << endl; + os << D_array1(0) << " " << resolution_array(0) << " 0.0000 0.0000" << endl; + os << D_array1(1) << " 0.0000 " << resolution_array(1) << " 0.0000" << endl; + os << D_array1(2) << " 0.0000 0.0000 " << resolution_array(2) << endl; + Array1 pos(3); + for(int at=0; at< natoms; at++) { + mywalker->getIonPos(at,pos); + os << " " << mywalker->getIonCharge(at) << " 0.0000 " << pos(0) + <<" " << pos(1) << " " << pos(2) << endl; + } + for(int j=0; jelectronSize(); j++){ + if ((j!=plots(i)-1)&&(j!=plots(i+1)-1)){ + if (j "Orbital/density surface" + //number of grid points for x, y, & z direction + os < pos(3); + sysprop->getAtomicLabels(atomlabels); + os<electronSize()-2 <getIonPos(j, pos); + os<electronSize(); j++){ + if ((j!=plots(i)-1)&&(j!=plots(i+1)-1)){ + if (jgetElectronPos(j, pos); + os<<" "<< oldpos(j,0)<<" "<showinfo(os); + os << endl << endl; + os << " Wavefunction " + << endl << endl; + wfdata->showinfo(os); + os<<"#############Nodes_method#################\n"; + if (doublemove) + os <<"Doing doublemoves with"< words, + unsigned int & pos, + Program_options & options); + void run(Program_options & options, ostream & output); + int showinfo(ostream & os); + Nodes_method() { + mywalker=NULL; + wfdata=NULL; + wf=NULL; + sysprop=NULL; + } + ~Nodes_method() + { + if(mywalker != NULL) delete mywalker; + deallocate(wf); + deallocate(wfdata); + // for(int i=0; i< nconfigsread; i++) { delete electrons(i); } + } + +private: + Array1 plots; //3D projections of WF for particular e's to be made + Array1 minmax; //xmin xmax ymin ymax zmin zmax + Array2 dxyz;//shift of second electron to be moved + bool doublemove; //switch for doublemove part + doublevar resolution; //grid coarsness: 10=coarser 0.1=finer + string readconfig; + int nconfigsread; + System * sysprop; + Array1 tmp_configs; + Wavefunction * wf; + Wavefunction_data * wfdata; + Sample_point * mywalker; //a single configuration/walker + + +}; + +#endif //NODES_METHOD_H_INCLUDED +//------------------------------------------------------------------------ diff --git a/src/method/Optimize_method.cpp b/src/method/Optimize_method.cpp new file mode 100644 index 00000000..b100a6c9 --- /dev/null +++ b/src/method/Optimize_method.cpp @@ -0,0 +1,559 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ +#include "Optimize_method.h" +#include "qmc_io.h" +#include "Program_options.h" +#include "System.h" +void Optimize_method::read(vector words, + unsigned int & pos, + Program_options & options) +{ + + pos=0; + if(!readvalue(words, pos=0, nconfig, "NCONFIG")) + { + error("Need NCONFIG in METHOD section"); + } + pos=0; + + pos=0; + if(!readvalue(words,pos, eref, "EREF")) + guess_eref=1; + else guess_eref=0; + + + //Optional options + + if(!readvalue(words,pos=0, iterations, "ITERATIONS")) + iterations=30; + + + pos=0; + if( ! readvalue(words, pos=0, pseudostore, "PSEUDOTEMP") ) + pseudostore=options.runid+".pseudo"; + canonical_filename(pseudostore); + + if(! readvalue(words, pos=0, wfoutputfile, "WFOUTPUT") ) + wfoutputfile=options.runid+".wfout"; + + if(haskeyword(words, pos=0, "USE_WEIGHTS") ) + { + use_weights=1; + } + else { use_weights=0; } + if(haskeyword(words, pos=0, "EXTENDED_WFOUTPUT") ) + { + use_extended_output=1; + } + else { use_extended_output=0; } + if(!readvalue(words,pos=0, mixing, "MIXING")) + { + mixing=0.95; + } + + string functiontype_str; + pos=0; + if(readvalue(words, pos, functiontype_str, "MINFUNCTION")) + { + if(functiontype_str== "VARIANCE") + { + min_function=min_variance; + } + else if(functiontype_str=="ABSOLUTE") + { + min_function=min_abs; + } + else if(functiontype_str=="LORENTZ") + { + min_function=min_lorentz; + } + else if(functiontype_str=="ENERGY") { + min_function=min_energy; + } + else if(functiontype_str=="MIXED") { + min_function=min_mixed; + } + else + { + error("I don't know ", functiontype_str, " for MINFUNCTION."); + } + } + else + { + min_function=min_variance; + } + + string readconfig; + if(!readvalue(words, pos=0, readconfig, "READCONFIG")) + error("READCONFIG required for OPTIMIZE method!"); + canonical_filename(readconfig); + + string oldreadconfig; + if(readvalue(words, pos=0, oldreadconfig, "OLDREADCONFIG")) + canonical_filename(oldreadconfig); + + + //--Set up variables + sysprop=NULL; + allocate(options.systemtext[0], sysprop); + sysprop->notify(sample_static,0); + sysprop->generatePseudo(options.pseudotext, pseudo); + + electrons.Resize(nconfig); + electrons=NULL; + wf.Resize(nconfig); + wf=NULL; + + + for(int i=0; i< nconfig; i++) + { + electrons(i)=NULL; + sysprop->generateSample(electrons(i)); + } + + + int configsread=0; + if(readconfig !="") { + ifstream checkfile(readconfig.c_str()); + if(!checkfile) + error("Couldn't open ", readconfig); + + long int is1, is2; + string dummy; + checkfile >> dummy; + if(dummy != "RANDNUM") error("Expected RANDNUM in checkfile"); + checkfile >> is1 >> is2; + + + while(checkfile >>dummy && configsread < nconfig) { + if(read_config(dummy, checkfile, electrons(configsread))) + configsread++; + } + checkfile.close(); + } + + if(readconfig =="") { + ifstream configin(oldreadconfig.c_str()); + if(!configin) + error("Couldn't open ", oldreadconfig); + configsread=read_array(electrons, configin); + configin.close(); + } + + if(configsread < nconfig) + { + nconfig=configsread; + cout << "processor " << mpi_info.node << " : " + << "WARNING: Didn't find enough configurations in the " + << "file. Running optimization with only " << nconfig + << " sample points." << endl; + } + + + debug_write(cout, "wfdata allocate\n"); + wfdata=NULL; + allocate(options.twftext[0], sysprop, wfdata); + + if(wfdata->nparms() <= 0 ) + error("There appear to be no parameters to optimize!"); + +} + +int Optimize_method::showinfo(ostream & os) +{ + os << " System " << endl; + sysprop->showinfo(os); + os << endl << endl; + os << " Wavefunction " << endl; + wfdata->showinfo(os); + os << endl << endl; + pseudo->showinfo(os); + os << endl << endl; + os << "-----------------------------" << endl; + os << "Wave function optimization: version $Date: 2006/12/07 23:31:45 $ " << endl; + + os << "Number of configurations : " << nconfig*mpi_info.nprocs << endl; + os << "Maximum iterations: " << iterations + << endl; + os << "nparms " << wfdata->nparms() << endl; + os << "Minimization function : "; + switch(min_function) { + case min_variance: + os << "Variance \n"; + break; + case min_abs: + os << "Absolute value\n"; + break; + case min_lorentz: + os << "Lorentz\n"; + break; + case min_energy: + os << "Energy\n"; + break; + case min_mixed: + os << "Mixed energy and variance\n"; + break; + default: + os << "Unknown--add to showinfo()\n"; + } + + if(use_weights) + os << "Reweighting using correlated sampling " << endl; + os << "----------------------------" << endl; + + + return 1; +} + +/*! +*/ +void Optimize_method::run(Program_options & options, ostream & output) +{ + int nparms=wfdata->nparms(); //Number of variables + + Array1 x(nparms+1); //Parameters + double f=0; //Best value of the function + + //This was stuff for va10a, but we should probably remove it. + //Array1 g(nparms+1); //Storage for the derivative + //Array1 h(nparms*(nparms+1)/2+1); //Storage for the Hessian + //Array1 a(3*nparms+1); //working space for va10a + //double dfn=-0.5; //estimate of likely reduction in f(x)(order of mag) + //dfn >0 : likely reduction + //==0 : minimum value of F has been set in f + // < 0 : a multiple |dfn| of the mod of init function + // will be taken as estimate of likely reduction + //Array1 xm(nparms+1); //indication of the magnitude of x + //double eps=0.00001; //Accuracy required in x(i)=eps*xm(i) + //int mode=1; //type of storage in H. makes va10a make the estimate + //int maxfn=iterations; //Maximum number of function calls + //int iprint=1; //Printing occurs every iprint iterations + //int iexit=-1;//reason for exiting: + // 0: estimate of hessian isn't positive definite + // 1: Normal exit + // 2: error because of rounding or eps is too small + // or truncation error is too big + // 3: funct has been called maxfn times + + //if(min_function==min_energy || min_function==min_mixed ) { + // dfn=-.01; + // f=1.1*eref; //I don't think this is important(it gets overwritten later) + //} + + + Array1 temp_parms(nparms); + wfdata->getVarParms(temp_parms); + lastparms.Resize(nparms); + lastparms=temp_parms; + cout.precision(16); + + + + //cout << "pseudopotential " << endl; + + FILE * pseudoout; + pseudoout=fopen(pseudostore.c_str(), "w"); + if(!pseudoout) { + error("couldn't open pseudopotential temporary file ", pseudostore, + " for writing."); + } + + + //Here we save the original values (in case we do weighted correlated sampling) + // and save the values for pseudopotential evaluation. + orig_vals.Resize(nconfig); + for(int walker=0; walker < nconfig; walker++) { + wfdata->generateWavefunction(wf(walker)); + nfunctions=wf(walker)->nfunc(); + orig_vals(walker).Resize(nfunctions, 2); + + electrons(walker)->attachObserver(wf(walker)); + wf(walker)->updateLap(wfdata, electrons(walker)); + + wf(walker)->getVal(wfdata, 0, orig_vals(walker)); + + pseudo->initializeStatic(wfdata, electrons(walker), wf(walker), pseudoout); + wf(walker)->notify(sample_static,0); + } + + fclose(pseudoout); + nfunctions=wf(0)->nfunc(); + + local_energy.Resize(nconfig); + for(int i=0; i< nconfig; i++) + local_energy(i)=sysprop->calcLoc(electrons(i)); + + //More va10a stuff + for(int i=0; i< nparms; i++) { + x(i+1)=temp_parms(i); + // g(i+1)=0; + // xm(i+1)=1.0; + } + + //cout << "starting minimization: "<renormalize(); + string indentation=""; + ofstream wfoutput(wfoutputfile.c_str()); + wfoutput.precision(15); + wfdata->writeinput(indentation,wfoutput); + wfoutput.close(); + } +#ifdef USE_MPI + MPI_Barrier(MPI_COMM_WORLD); +#endif + + //Put the wave function into options.trialfunc so further methods can use it. + ifstream wfinput(wfoutputfile.c_str()); + options.twftext[0].clear(); + parsefile(wfinput, options.twftext[0]); + wfinput.close(); +} + + +//---------------------------------------------------------------------- + +/*! +\bug +When optimizing with weights, we need to renormalize the function every +time; otherwise the weights blow up. + +This also returns the average energy.. + */ +doublevar Optimize_method::variance(int n, Array1 & parms, double & val, int check) +{ + + int nparms=wfdata->nparms(); + Array1 temp_parms(nparms); + + //single_write(cout ,"parms\n"); + for(int i=0; i< nparms; i++) + { + temp_parms(i)=parms(i+1); + + //single_write(cout,i+1, " " ,temp_parms(i),"\n"); + //if(temp_parms(i) != lastparms(i)) { + // cout << "parm " << i << " changed " << lastparms(i) + // << " to " << temp_parms(i) << endl; + // lastparms(i)=temp_parms(i); + //} + + } + + Wf_return wfval(nfunctions,2); + + wfdata->setVarParms(temp_parms); + + Array1 variance(nfunctions); + variance=0; + Array1 weightsum(nfunctions); + weightsum=0; + Array1 kinetic(nfunctions), nonloc(nfunctions); + + + //Pseudopotential file + FILE * pseudoin; + pseudoin=fopen(pseudostore.c_str(), "r"); + + doublevar avgen=0; + doublevar avgkin=0; + doublevar avgpot=0; + doublevar avgnon=0; + //cout << "loop " << endl; + for(int walker=0; walker< nconfig; walker++) + { + //cout << "updateLap " << endl; + wf(walker)->updateLap(wfdata, electrons(walker)); + //cout << "calcKinetic " << endl; + sysprop->calcKinetic(wfdata, electrons(walker), wf(walker), kinetic); + //cout << "coulpot " << endl; + doublevar coulpot=local_energy(walker); + //cout << "pseudopotential " << endl; + pseudo->calcNonlocWithFile(wfdata, electrons(walker), wf(walker), + nonloc, pseudoin); + //cout << "getVal " << endl; + wf(walker)->getVal(wfdata, 0, wfval); + //cout << "done calc " << endl; + for(int w=0; w< nfunctions; w++) + { + + doublevar energy=kinetic(w) + coulpot+ nonloc(w); + //single_write(cout ,"walker " ,walker ," value " ,wfval(w,0)); + //single_write(cout, "value " ,wfval.amp(w,0) ,"\n"); + //single_write(cout, "kinetic ", kinetic(0), "\n"); + //single_write(cout, "coulomb ", coulpot, "\n"); + //single_write(cout, "nonloc ", nonloc(0), "\n"); + //single_write(cout, "energy " , energy, "\n"); + avgkin+=kinetic(w); + avgpot+=coulpot; + avgnon+=nonloc(w); + avgen+=energy; + doublevar reweight=1.0; + if(use_weights) { + reweight=exp(2*(wfval.amp(w,0)-orig_vals(walker).amp(w,0))); + } + doublevar weight=reweight*guide_wf.getWeight(wfval,wfval, w); + switch(min_function) { + case min_variance: + variance(w)+=(energy-eref)*(energy-eref)*weight; + break; + case min_abs: + variance(w)+=fabs(energy-eref)*weight; + break; + case min_lorentz: + variance(w)+=log(1+(energy-eref)*(energy-eref)/2)*weight; + break; + case min_energy: + variance(w)+=energy*weight; + break; + case min_mixed: + variance(w)+=(mixing*energy+(1.0-mixing)*(energy-eref)*(energy-eref))*weight; + break; + default: + error("Optimize_method::variance() : min_function has a very strange value"); + } + //cout << "variance " << variance(w) << endl; + weightsum(w)+=weight; + } + } + + //cout << "Average energy " << avgen/nconfig + // << " kinetic " << avgkin/nconfig + // << " nonloc " << avgnon/nconfig + // << " potential " << avgpot/nconfig + // << endl; + + fclose(pseudoin); + + + + doublevar weight_tot=parallel_sum(weightsum(0)); + doublevar var_tot=parallel_sum(variance(0)); + doublevar en_tot=parallel_sum(avgen); + + val=var_tot/weight_tot; + + if(check) { + if(fabs(weightsum(0)) < 1e-14) + error("sum of weights is ", weightsum(0), " this is way too small"); + if(val > 1e14) + error("variance is too large: ", val ); + } + + + return en_tot/weight_tot; + +} +//------------------------------------------------------------------------ + + +void Optimize_method::iteration_print(double f, double gg, double tol, int itn, ostream & output) { + if(output) + { + string indent=""; + ofstream wfoutput(wfoutputfile.c_str()); + wfoutput.precision(15); + wfdata->writeinput(indent,wfoutput); + wfoutput.close(); + + if (use_extended_output){ + char strbuff[40]; + sprintf(strbuff, "%d", itn); + string wfoutputfile2=wfoutputfile+"_"+strbuff; + ofstream wfoutput2(wfoutputfile2.c_str()); + wfoutput2.precision(15); + wfdata->writeinput(indent,wfoutput2); + wfoutput2.close(); + } + + output << "iteration # " << itn; + if(min_function==min_energy) + output << " energy= " << f; + else if (min_function==min_mixed) + output << " mix of energy and variance= " << f; + else + output << " dispersion= " << sqrt(fabs(f)) ; + output << endl << " average gradient: " << gg << " tolerance " << tol; + output << endl; + if(global_options::rappture) { + ofstream rapout("rappture.log"); + rapout << "=RAPPTURE-PROGRESS=>" << int(100.0*doublevar(itn+1)/doublevar(iterations) ) + << " Optimizing wave function (percentage is worst-case)" << endl; + cout << "=RAPPTURE-PROGRESS=>" << int(100.0*doublevar(itn+1)/doublevar(iterations) ) + << " Optimizing wave function (percentage is worst-case)" << endl; + rapout.close(); + } + } + +} + +//------------------------------------------------------------------------ +//######################################################################## + +double Optimize_fn::func(double * _p) { + Array1 temp_parms(param_n+1); + for(int i=0; i< param_n+1; i++) + temp_parms[i]=_p[i]; + double val; + opt_method->variance(param_n,temp_parms,val); + //cout << "val " << val << endl; + return val; +} + +double Optimize_fn::dfunc(double * _p, double * _g) { + int m=param_n+1; + double base=func(_p); + double step=1e-4; + for(int i=1; i< m; i++) { + _p[i]+=step; + double nwfunc=func(_p); + _p[i]-=step; + _g[i]=(nwfunc-base)/step; +// cout << _g[i] << " "; + } + _g[0]=base; + return base; +// cout << endl; +} diff --git a/src/method/Optimize_method.h b/src/method/Optimize_method.h new file mode 100644 index 00000000..22249f76 --- /dev/null +++ b/src/method/Optimize_method.h @@ -0,0 +1,118 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ + +#ifndef OPTIMIZE_METHOD_H_INCLUDED +#define OPTIMIZE_METHOD_H_INCLUDED + +#include "Qmc_std.h" +#include "Qmc_method.h" +#include "Wavefunction.h" +#include "Wavefunction_data.h" +#include "Sample_point.h" +#include "Guiding_function.h" +#include "System.h" +#include "Pseudopotential.h" +class Program_options; + +/*! +\brief +Optimize the wavefunction parameters with a given configuration. +Keyword: OPTIMIZE + +*/ +class Optimize_method : public Qmc_method +{ +public: + void read(vector words, + unsigned int & pos, + Program_options & options); + void run(Program_options & options, ostream & output); + ~Optimize_method() + { + if(pseudo) delete pseudo; + if(sysprop) delete sysprop; + + deallocate(wfdata); + for(int i=0; i< nconfig; i++) + { + deallocate(wf(i)); + delete electrons(i); + } + + } + + int showinfo(ostream & os); + doublevar variance(int n, Array1 & parms, double & val, + int check=1 //!< =1: make sure weights and variance make sense, =0: don't + ); + void iteration_print(double f, double gg, double tol, int itn, ostream & output); + +private: + + + doublevar eref; //!< reference energy + int nconfig; //!< Number of configurations(walkers) + int iterations; //!< Number of optimization steps to take + int nfunctions; //!< Number of wavefunctions we have. + enum min_function_type { min_variance, min_abs, min_lorentz, min_energy, min_mixed } min_function; + int use_weights; //!< Whether to use weights in the correlated sampling + int guess_eref; //!< whether to guess eref from the incoming walker distribution + + Array1 orig_vals; //!< Original wave function values before opt + string pseudostore; //!< Where to put the temporary pseudo file + string wfoutputfile;//!< Where to put the wavefunction output + Primary guide_wf; //!< Guiding function + Array1 local_energy; //!< local energy(that doesn't change when we optimize + Array1 lastparms; + doublevar mixing; //!< mixing weight for energy component in mixed minimization (0.95 default) + int use_extended_output; //!< Whether to print out wavefunction at every iter. of min + System * sysprop; + Array1 electrons; + Array1 wf; + Wavefunction_data * wfdata; + Pseudopotential * pseudo; +}; + + +#include "macopt.h" +//Interface to the macopt functions +class Optimize_fn:public Macopt { +public: + Optimize_fn(int _n,int _verbose, double _tol, + int _itmax,int _rich):Macopt(_n,_verbose,_tol,_itmax,_rich) { + param_n=_n; opt_method=NULL; output=NULL; + } + ~Optimize_fn(){ }; + double func(double * _p); + double dfunc(double * _p, double * _g); + int param_n; + void iteration_print(double f, double gg, double tol, int itn) { + assert(opt_method!=NULL); + assert(output != NULL); + opt_method->iteration_print(f,gg,tol,itn,*output); + } + + Optimize_method * opt_method; + ostream * output; //link to the output stream we should be using. +}; + + +#endif //OPTIMIZE_METHOD_H_INCLUDED +//------------------------------------------------------------------------ diff --git a/src/method/Optimize_method2.cpp b/src/method/Optimize_method2.cpp new file mode 100644 index 00000000..a7638326 --- /dev/null +++ b/src/method/Optimize_method2.cpp @@ -0,0 +1,1221 @@ +/* + +Copyright (C) 2007 Michal Bajdich + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ + +#include "Optimize_method2.h" +#include "qmc_io.h" +#include "Program_options.h" +#include "System.h" +void Optimize_method2::read(vector words, + unsigned int & pos, + Program_options & options) +{ + + pos=0; + if(!readvalue(words, pos=0, nconfig, "NCONFIG")) + { + error("Need NCONFIG in METHOD section"); + } + pos=0; + if(!readvalue(words,pos, iterations, "ITERATIONS")) + { + error("Need ITERATIONS in METHOD section"); + } + //Optional options + pos=0; + if(readvalue(words,pos, eref, "EREF")){ + eref_exists=1; + } + else{ + eref_exists=0; + eref=0; + } + pos=0; + if(!readvalue(words, pos, pseudostore, "PSEUDOTEMP") ) + { + pseudostore=options.runid+".pseudo"; + } + canonical_filename(pseudostore); + + if(!readvalue(words, pos=0, wfoutputfile, "WFOUTPUT") ) + { + wfoutputfile=options.runid+".wfout"; + } + else { use_weights=0; } + if(haskeyword(words, pos=0, "EXTENDED_WFOUTPUT") ) + { + use_extended_output=1; + } + else { use_extended_output=0; } + + if(!readvalue(words,pos=0, mixing, "MIXING")) + { + mixing=0.95; + } + if(haskeyword(words, pos=0, "USE_WEIGHTS") ) + { + use_weights=1; + } + else { use_weights=0; } + + if(!readvalue(words,pos=0, iter_min_read, "NFIXED_ITERATIONS")) + { + iter_min_read=4; + } + if(!readvalue(words,pos=0, multiply, "MULTIPLICATIVE_FACTOR")) + { + multiply=2; + } + + + string functiontype_str; + pos=0; + if(readvalue(words, pos, functiontype_str, "MINFUNCTION")) + { + if(functiontype_str== "VARIANCE") + { + min_function=min_variance; + //cout <<"Are you sure you want to use weights for variance optimization?"<notify(sample_static,0); + sysprop->generatePseudo(options.pseudotext, pseudo); + + electrons.Resize(nconfig); + electrons=NULL; + wf.Resize(nconfig); + wf=NULL; + + + for(int i=0; i< nconfig; i++) + { + electrons(i)=NULL; + sysprop->generateSample(electrons(i)); + } + + + int configsread=0; + if(readconfig !="") { + ifstream checkfile(readconfig.c_str()); + if(!checkfile) + error("Couldn't open ", readconfig); + + long int is1, is2; + string dummy; + checkfile >> dummy; + if(dummy != "RANDNUM") error("Expected RANDNUM in checkfile"); + checkfile >> is1 >> is2; + + + while(checkfile >>dummy && configsread < nconfig) { + if(read_config(dummy, checkfile, electrons(configsread))) + configsread++; + } + checkfile.close(); + } + + if(readconfig =="") { + ifstream configin(oldreadconfig.c_str()); + if(!configin) + error("Couldn't open ", oldreadconfig); + configsread=read_array(electrons, configin); + configin.close(); + } + + if(configsread < nconfig) + { + nconfig=configsread; + cout << "processor " << mpi_info.node << " : " + << "WARNING: Didn't find enough configurations in the " + << "file. \n Running optimization with only " << nconfig + << " sample points." << endl; + } + + + debug_write(cout, "wfdata allocate\n"); + wfdata=NULL; + allocate(options.twftext[0], sysprop, wfdata); + if(!readvalue(words,pos=0, maxnparmsatonce, "MAXNPARMS_AT_ONCE")) + { + maxnparmsatonce=wfdata->nparms(); + } + + if(!readvalue(words,pos=0, min_nconfig_read, "START_NCONFIG")) + { + min_nconfig_read=nconfig; + } + else + if( min_nconfig_read > nconfig ){ + cout << "Number of starting configurations is higher than all configurations!"<nconfig "<showinfo(os); + os << endl << endl; + os << " Wavefunction " << endl; + wfdata->showinfo(os); + os << endl << endl; + pseudo->showinfo(os); + os << endl << endl; + os << "-----------------------------" << endl; + os << "Wave function optimization " << endl; + os << "Number of configurations : " << nconfig << endl; + os << "Iterations : " << iterations << endl; + os << "Number of starting configurations : " << min_nconfig_read << endl; + os << "Number of fixed iterations : " << iter_min_read << endl; + os << "Maximum number of parameters done at once : " << maxnparmsatonce<nparms() << endl; + if(eref_exists && !use_weights) + os << "Reference energy : " << eref << endl; + else + os << "Reference energy : energy in each iteration" << endl; + os << "Minimization function : "; + switch(min_function) { + case min_variance: + os << "Variance \n"; + break; + case min_energy: + os << "Energy\n"; + break; + case min_mixed: + os << "Mixed energy and variance\n"; + break; + default: + os << "Unknown--add to showinfo()\n"; + } + + if(use_weights) + os << "Reweighting using correlated sampling " << endl; + os << "----------------------------" << endl; + + + return 1; +} + +/*! +*/ +void Optimize_method2::run(Program_options & options, ostream & output) +{ + int nparms=wfdata->nparms(); //Number of variables + + + Array1 delta(nparms); + Array1 grad(nparms); //Storage for the derivative + double value, energy, variance; //Best value of the function + Array1 temp_parms(nparms); + + wfdata->getVarParms(temp_parms); + lastparms.Resize(nparms); + lastparms=temp_parms; + cout.precision(16); + + + if(nparms<= 0 ) error("There appear to be no parameters to optimize!"); + + FILE * pseudoout; + pseudoout=fopen(pseudostore.c_str(), "w"); + if(!pseudoout) { + error("couldn't open pseudopotential temporary file ", pseudostore, + " for writing."); + } + + doublevar sum_tmp=0.0; + orig_vals.Resize(nconfig); + + for(int walker=0; walker < nconfig; walker++) { + wfdata->generateWavefunction(wf(walker)); + nfunctions=wf(walker)->nfunc(); + orig_vals(walker).Resize(nfunctions, 2); + + electrons(walker)->attachObserver(wf(walker)); + wf(walker)->updateLap(wfdata, electrons(walker)); + wf(walker)->getVal(wfdata, 0, orig_vals(walker)); + sum_tmp+=orig_vals(walker).amp(0,0); + + pseudo->initializeStatic(wfdata, electrons(walker), wf(walker), pseudoout); + wf(walker)->notify(sample_static,0); + } + + //cout << "Sum of orig_vals ln(psi)/nconfig = "< nparms) + nparms_end=nparms; + if(output) + cout << "nparms_start "<renormalize(); + //wfdata->showinfo(output); + string indentation=""; + ofstream wfoutput(wfoutputfile.c_str()); + wfoutput.precision(15); + wfdata->writeinput(indentation,wfoutput); + wfoutput.close(); + } +#ifdef USE_MPI + MPI_Barrier(MPI_COMM_WORLD); +#endif + + //Put the wave function into options.trialfunc so further methods can use it. + ifstream wfinput(wfoutputfile.c_str()); + options.twftext[0].clear(); + parsefile(wfinput, options.twftext[0]); + wfinput.close(); +} + + + + +//---------------------------------------------------------------------- + +void Optimize_method2::func_val(int n, const Array1 & parms, double & val, double & energy_mean, double & variance, + int & min_nconfig,ostream & output) +{ + + int nparms=wfdata->nparms(); + Array1 temp_parms(nparms); + + // setting up parameters + for(int i=0; i< nparms; i++){ + temp_parms(i)=parms(i); + } + + Wf_return wfval(nfunctions,2); + wfdata->setVarParms(temp_parms); + + doublevar sum_tmp=0.0; + for(int walker=0; walker< min_nconfig; walker++){ + wf(walker)->updateVal(wfdata, electrons(walker)); + wf(walker)->getVal(wfdata, 0, wfval); + sum_tmp+=wfval.amp(0,0); + } + + doublevar ln_norm_new_vals=parallel_sum(sum_tmp/min_nconfig)/parallel_sum(1); + + //if(output) + //cout << "Func_val: Aver. Sum of ln(psi)/min_nconfig= "< kinetic(nfunctions), nonloc(nfunctions); + + + //Pseudopotential file + FILE * pseudoin; + pseudoin=fopen(pseudostore.c_str(), "r"); + + // cout << "loop over walkers " << endl; + doublevar weight_max=1; + for(int walker=0; walker< min_nconfig; walker++) + { + // cout << "walker "<updateLap(wfdata, electrons(walker)); + //cout << "calcKinetic " << endl; + sysprop->calcKinetic(wfdata, electrons(walker), wf(walker), kinetic); + //cout << "coulpot " << endl; + doublevar coulpot=local_energy(walker); + //cout << "pseudopotential " << endl; + pseudo->calcNonlocWithFile(wfdata, electrons(walker), wf(walker), + nonloc, pseudoin); + //cout << "getVal " << endl; + wf(walker)->getVal(wfdata, 0, wfval); + //cout << "done calc " << endl; + doublevar energy=kinetic(0) + coulpot+ nonloc(0); + doublevar reweight=1.0; + if(use_weights) { + //cout << "new wf " << wfval.amp(0,0) + // << " old wf " << orig_vals(walker).amp(0,0) << endl; + reweight=exp(2*(wfval.amp(0,0)-orig_vals(walker).amp(0,0)-ln_norm_new_vals+ln_norm_orig_vals)); + //reweight=2.0*reweight/(1+reweight); + } + doublevar weight=reweight; + variance_sum+=(energy-eref)*(energy-eref)*weight; + energy_sum+=energy*weight; + weightsum+=weight; + if(use_weights){ + //if(weight <0 ) + // error("I have a negative weight") + if(weight > weight_max) + weight_max=weight; + } + + + } + fclose(pseudoin); + + if(use_weights){ + doublevar average_weight=weightsum/min_nconfig; + //cout << "Average weight= "< 1e14) + error("variance is too large: ", variance ); + energy_mean=parallel_sum(energy_sum)/weight_sum; + switch(min_function) + { + case min_variance: + val=variance; + + break; + case min_energy: + val=energy_mean; + break; + case min_mixed: + val=mixing*energy_mean+(1-mixing)*variance; + break; + default: + error("Optimize_method::variance() : min_function has a very strange value"); + } +} + +//------------------------------------------------------------------------------- +/*! +\bug +When optimizing with weights, we need to renormalize the function every +time; otherwise the weights blow up. + */ + +void Optimize_method2::energy_grad(Array1 & parms, int nparms_start, int nparms_end, Array1 & grad, doublevar & energy_mean, + Array1 & delta, int & min_nconfig, ostream & output) +{ + //cout << "Start: Optimize_method2::energy_grad"<nparms(); + int nparms=nparms_end-nparms_start; + //cout << "nparms_full "<< nparms_full<<" nparms "< temp_parms(nparms_full); + Wf_return wfval(nfunctions,2); + Array1 kinetic(nfunctions), nonloc(nfunctions); + Array1 grad_var(nparms); + Array1 weightsum(nparms); + Array1 ddelta(nparms_full); + Array2 psi0(nconfig,2); + Array1 e_local0(nconfig); + doublevar e_local, psi; + grad_var=0; + weightsum=0; + + // setting up parameters + for(int i=0; i< nparms_full; i++){ + temp_parms(i)=parms(i); + ddelta(i)=delta(i); + } + + for (int i=0;i<=nparms;i++){ + if (i>0){ + temp_parms(i-1+nparms_start)+=ddelta(i-1+nparms_start); + } + wfdata->setVarParms(temp_parms); + doublevar sum_tmp=0.0; + for(int walker=0; walker< min_nconfig; walker++){ + wf(walker)->updateVal(wfdata, electrons(walker)); + wf(walker)->getVal(wfdata, 0, wfval); + sum_tmp+=wfval.amp(0,0); + } + doublevar ln_norm_new_vals=parallel_sum(sum_tmp/min_nconfig)/parallel_sum(1); + + //if(output && i==0) + //cout << "(energy grad)Aver. Sum of ln(psi)/min_nconfig= "<updateLap(wfdata, electrons(walker)); + //cout << "calcKinetic " << endl; + sysprop->calcKinetic(wfdata, electrons(walker), wf(walker), kinetic); + //cout << "coulpot " << endl; + doublevar coulpot=local_energy(walker); + //cout << "pseudopotential " << endl; + pseudo->calcNonlocWithFile(wfdata, electrons(walker), wf(walker), + nonloc, pseudoin); + //cout << "getVal " << endl; + //wf(walker)->getVal(wfdata, 0, wfval); + + wf(walker)->getVal(wfdata, 0, wfval); + if (i==0) { + e_local0(walker)=kinetic(0) + coulpot+ nonloc(0); + // cout <<"&& "< 0) + temp_parms(i-1+nparms_start)-=ddelta(i-1+nparms_start); + } + + //if (output) + // cout <<"Calculated Energy gradient: "< 1e14) + error("gradient is too large: ", grad(i) ); + } + + //if (output) + // cout < & parms, int nparms_start, int nparms_end, Array2 & hessian, + Array1 & grad_var_tmp, doublevar & energy_mean, + Array1 & delta, int & min_nconfig, ostream & output) +{ + // cout <<"node "<< mpi_info.node << " Start: Optimize_method2::func_hessian"<nparms(); + int nparms=nparms_end-nparms_start; + + Array1 temp_parms(nparms_full); + Array1 grad_eng_tmp(nparms); + + if (min_function==min_variance || min_function==min_mixed){ + energy_grad(parms, nparms_start, nparms_end, grad_eng_tmp, energy_mean, delta, min_nconfig, output); + } + + // setting up parameters + for(int i=0; i< nparms_full; i++){ + temp_parms(i)=parms(i); + } + Wf_return wfval(nfunctions,2); + Array1 kinetic(nfunctions), nonloc(nfunctions); + Array2 hess1_eng(nparms,nparms); + Array2 hess2_eng(nparms,nparms); + Array2 hess3_1eng(nparms,nparms); + Array2 hess3_2eng(nparms,nparms); + Array2 hess(nparms,nparms); + Array1 grad_wf(nparms); + Array1 grad_e_local(nparms); + Array1 grad_var(nparms); + Array1 grad_eng(nparms); + Array1 grad_wf_tmp(nparms); + Array1 grad_e_local_tmp(nparms); + // Array1 grad_eng_tmp(nparms); + Array1 < Array2 > Psi(nparms+1); + Array1 < Array1 > e_local(nparms+1); + Array2 Weightsum(nparms,nparms); + Array1 weightsum(nparms); + hess1_eng=hess2_eng=hess3_1eng=hess3_2eng=hess=0.0; + grad_wf=grad_e_local=grad_var=grad_eng=0; + weightsum=0; + Weightsum=0; + + doublevar reweight,psi,weight;; + Array1 ddelta(nparms); + doublevar sum_of_weights; + + + Array1 < Array1 > e_local_gradient(nparms); + Array1 < Array1 > wf_gradient(nparms); + for(int i=0;i<=nparms;i++){ + if (i0){ + temp_parms(i-1+nparms_start)+=ddelta(i-1); + } + for (int j=i;j<=nparms;j++){ + if (j>0){ + temp_parms(j-1+nparms_start)+=ddelta(j-1); + } + //set new parameters + wfdata->setVarParms(temp_parms); + doublevar sum_tmp=0.0; + for(int walker=0; walker< min_nconfig; walker++){ + wf(walker)->updateVal(wfdata, electrons(walker)); + wf(walker)->getVal(wfdata, 0, wfval); + sum_tmp+=wfval.amp(0,0); + } + doublevar ln_norm_new_vals=parallel_sum(sum_tmp/min_nconfig)/parallel_sum(1); + //cout << "(hess) Sum of ln(psi)/min_nconfig= "<updateLap(wfdata, electrons(walker)); + //cout << "calcKinetic " << endl; + sysprop->calcKinetic(wfdata, electrons(walker), wf(walker), kinetic); + //cout << "coulpot " << endl; + doublevar coulpot=local_energy(walker); + //cout << "pseudopotential " << endl; + pseudo->calcNonlocWithFile(wfdata, electrons(walker), wf(walker), + nonloc, pseudoin); + wf(walker)->getVal(wfdata, 0, wfval); + reweight=1.0; + if(use_weights) { + reweight=exp(2*(wfval.amp(0,0)-orig_vals(walker).amp(0,0)-ln_norm_new_vals+ln_norm_orig_vals)); + } + weight=reweight; + e_local(j)(walker)=kinetic(0) + coulpot+ nonloc(0); + + //if j=0 we store Psi0(walker)) + if(j==0){ + Psi(0)(walker,0)=wfval.sign(0); + Psi(0)(walker,1)=wfval.amp(0,0); + } + //if j>0 we calc. averages of single index quantities + else { + //cout <<"j>0 we calc. averages of single index quantities"<0 j>=i calculation of double index quantities + else { + if(i==1 && walker==0 ){ + if(j==1) + if (output) + cout << "Gradients of: minimized quantity, vmc energy, wavefunction and local energy"<updateVal(wfdata, electrons(walker)); + wf(walker)->getVal(wfdata, 0, wfval); + reweight=1.0; + if(use_weights) { + reweight=exp(2*(wfval.amp(0,0)-orig_vals(walker).amp(0,0)-ln_norm_new_vals+ln_norm_orig_vals)); + } + weight=reweight; + doublevar hessian_wf; + //doublevar e_local_grad_i=(e_local(i)(walker)-e_local(0)(walker))/ddelta(i-1); + //doublevar e_local_grad_j=(e_local(j)(walker)-e_local(0)(walker))/ddelta(j-1); + //doublevar wf_grad_i=(Psi(i)(walker,1)- 1)/(ddelta(i-1)); + //doublevar wf_grad_j=(Psi(i)(walker,1)- 1)/(ddelta(j-1)); + switch(min_function) + { + case min_energy: + psi=wfval.sign(0)*Psi(0)(walker,0)*exp(wfval.amp(0,0)-Psi(0)(walker,1)); + hessian_wf=(psi-Psi(i)(walker,1)-Psi(j)(walker,1)+1)/(ddelta(i-1)*ddelta(j-1)); + //cout << psi << " "<0 j>=i + }//end of loop over walkers + + fclose(pseudoin); + + if (j>0){ + // cout <<"["<< temp_parms(j-1)-parms(j-1) << "] "; + temp_parms(j-1+nparms_start)-=ddelta(j-1); + } + + }//end of loop over j + //cout <0) + temp_parms(i-1+nparms_start)-=ddelta(i-1); + }//end of loop over i + //cout < & parms, int nparms_start, int nparms_end, + Array1 & grad, Array1 & grad_wf, doublevar & energy_mean, + Array1 & delta, int & min_nconfig, ostream & output) +{ + //cout << "Start: Optimize_method2::func_grad"<nparms(); + int nparms=nparms_end-nparms_start; + + Array1 temp_parms(nparms_full); + Wf_return wfval(nfunctions,2); + Parm_deriv_return derivatives; + derivatives.nparms_start=nparms_start; + derivatives.nparms_end=nparms_end; + + Array1 kinetic(nfunctions), nonloc(nfunctions); + Array1 grad_var(nparms); + Array1 grad_wf_tmp(nparms); + doublevar weightsum; + doublevar e_local; + grad_var=0; + grad_wf_tmp=0; + weightsum=0; + + // setting up parameters + for(int i=0; i< nparms_full; i++){ + temp_parms(i)=parms(i); + } + + wfdata->setVarParms(temp_parms); + doublevar sum_tmp=0.0; + weight.Resize(min_nconfig); + + for(int walker=0; walker< min_nconfig; walker++){ + wf(walker)->updateVal(wfdata, electrons(walker)); + wf(walker)->getVal(wfdata, 0, wfval); + sum_tmp+=wfval.amp(0,0); + } + doublevar ln_norm_new_values=parallel_sum(sum_tmp/min_nconfig)/parallel_sum(1); + //cout << "(energy grad)Sum of ln(psi)/min_nconfig= "<updateLap(wfdata, electrons(walker)); + //cout << "calcKinetic " << endl; + sysprop->calcKinetic(wfdata, electrons(walker), wf(walker), kinetic); + //cout << "coulpot " << endl; + doublevar coulpot=local_energy(walker); + //cout << "pseudopotential " << endl; + pseudo->calcNonlocWithFile(wfdata, electrons(walker), wf(walker),nonloc, pseudoin); + //cout << "getVal " << endl; + wf(walker)->getVal(wfdata, 0, wfval); + // cout <<"&& "<getParmDeriv(wfdata, electrons(walker), derivatives); + e_local=kinetic(0) + coulpot+ nonloc(0); + doublevar reweight=1.0; + if(use_weights) { + reweight=exp(2*(wfval.amp(0,0)-orig_vals(walker).amp(0,0)-ln_norm_new_values+ln_norm_orig_vals)); + } + weight(walker)=reweight; + for(int i=0; i< nparms; i++){ + //be carefull how you get grad for partial number of parms. + grad_var(i)+=2.0*derivatives.gradient(i)*(e_local-eref)*weight(walker); + grad_wf_tmp(i)+=derivatives.gradient(i)*weight(walker); + } + weightsum+=weight(walker); + } + fclose(pseudoin); + + + //if (output) + // cout <<"Calculated Energy gradient and WF's gradient: "< 1e14) + error("gradient is too large: ", grad(i) ); + } + + //if (output) + //cout < & parms, int nparms_start, int nparms_end, Array2 & hessian, + Array1 & grad_var, doublevar & energy_mean, + Array1 & delta, int & min_nconfig, ostream & output) +{ + // cout <<"node "<< mpi_info.node << " Start: Optimize_method2::func_hessian"<nparms(); + int nparms=nparms_end-nparms_start; + + Array1 temp_parms(nparms_full); + Array1 grad_eng(nparms); + Array1 grad_wf(nparms); + + //get energy and wf's gradient + energy_grad_analytical(parms, nparms_start, nparms_end, grad_eng, grad_wf, energy_mean, delta, min_nconfig, output); + + // setting up parameters + for(int i=0; i< nparms_full; i++){ + temp_parms(i)=parms(i); + } + Wf_return wfval(nfunctions,2); + Parm_deriv_return wfders; + wfders.nparms_start=nparms_start; + wfders.nparms_end=nparms_end; + + + if(min_function!=min_variance){ + wfders.need_hessian=1; + } + + Array1 kinetic(nfunctions), nonloc(nfunctions); + Array2 hess1_eng(nparms,nparms); + Array2 hess2_eng(nparms,nparms); + Array2 hess3_1eng(nparms,nparms); + Array2 hess3_2eng(nparms,nparms); + Array2 hess1_var(nparms,nparms); + + //Array1 < Array2 > hessian_wf; + //Array1 < Array1 > gradient_wf; + Array1 grad_e_local(nparms); + Array1 grad_var_tmp(nparms); + Array1 grad_e_local_tmp(nparms); + + Array1 < Array1 > e_local(nparms+1); + doublevar weightsum; + + //setting everything to zero + hess1_eng=hess2_eng=hess3_1eng=hess3_2eng=hess1_var=0.0; + grad_e_local_tmp=grad_var_tmp=0; + weightsum=0; + + Array1 ddelta(nparms); + doublevar sum_of_weights=0; + + //set variables + Array1 < Array1 > e_local_gradient(nparms); + for(int i=0;i<=nparms;i++){ + if (i0){ + temp_parms(i-1+nparms_start)+=ddelta(i-1); + } + wfdata->setVarParms(temp_parms); + FILE * pseudoin; + pseudoin=fopen(pseudostore.c_str(), "r"); + for(int walker=0; walker< min_nconfig; walker++){ + //cout << "updateLap " << endl; + wf(walker)->updateLap(wfdata, electrons(walker)); + //cout << "calcKinetic " << endl; + sysprop->calcKinetic(wfdata, electrons(walker), wf(walker), kinetic); + //cout << "coulpot " << endl; + doublevar coulpot=local_energy(walker); + //cout << "pseudopotential " << endl; + pseudo->calcNonlocWithFile(wfdata, electrons(walker), wf(walker),nonloc, pseudoin); + //cout << "getVal " << endl; + // wf(walker)->getVal(wfdata, 0, wfval); + // cout <<"&& "<0) + e_local_gradient(i-1)(walker)=(e_local(i)(walker)-e_local(0)(walker))/ddelta(i-1); + } + fclose(pseudoin); + //if (output) + // cout <<"#"; + if (i>0){ + temp_parms(i-1+nparms_start)-=ddelta(i-1); + } + } + if (output) + cout <setVarParms(temp_parms); + for(int walker=0; walker< min_nconfig; walker++){ + //cout << "updateVal " << endl; + wf(walker)->updateVal(wfdata, electrons(walker)); + //cout << "getParmDeriv " << endl; + wf(walker)->getParmDeriv(wfdata, electrons(walker), wfders); + for (int i=0;i words, + unsigned int & pos, + Program_options & options); + void run(Program_options & options, ostream & output); + ~Optimize_method2() + { + if(pseudo) delete pseudo; + if(sysprop) delete sysprop; + + deallocate(wfdata); + for(int i=0; i< nconfig; i++) + { + deallocate(wf(i)); + delete electrons(i); + } + + } + + int showinfo(ostream & os); +private: + void func_val(int n, const Array1 & parms, double & val, double & energy, double & variance, + int & min_nconfig, ostream & output); + + void energy_grad(Array1 & parms, int nparms_start, int nparms_end, Array1 & grad, doublevar & ereff, + Array1 & delta, int & min_nconfig, ostream & output); + + void func_hessian_rev(Array1 & parms, int nparms_start, int nparms_end, Array2 & hessian, + Array1 & grad_var_tmp, doublevar & ereff, + Array1 & delta, int & min_nconfig, ostream & output); + + void energy_grad_analytical(Array1 & parms, int nparms_start, int nparms_end, Array1 & grad, + Array1 & grad_wf, doublevar & energy_mean, + Array1 & delta, int & min_nconfig, ostream & output); + void func_hessian_rev_analytical(Array1 & parms, int nparms_start, int nparms_end, Array2 & hessian, + Array1 & grad_var, doublevar & energy_mean, + Array1 & delta, int & min_nconfig, ostream & output); + int LEVMAR_DER(Array1 & parms, int nparms_start, int nparms_end, Array1 & delta, + int & min_nconfig, int iter_min, + const int itmax, int & iter, ostream & output); + + void wf_printout(int iter, doublevar value, doublevar energy, doublevar variance, int nconfig, doublevar mu, + ostream & output); + doublevar eref; //!< reference energy for variance minimization + int eref_exists; //!< whether the reference energy for variance minimization was supplied + int nconfig; //!< Number of configurations(walkers) + int iterations; //!< Number of times that the variance can be called. The variance routine is called about once per parameter per iteration + int nfunctions; //!< Number of wavefunctions we have. + enum min_function_type { min_variance, min_energy, min_mixed } min_function; + int use_weights; //!< Whether to use weights in the correlated sampling + + Array1 orig_vals; //!< Original wave function values before opt + doublevar ln_norm_orig_vals; + string pseudostore; //!< Where to put the temporary pseudo file + string wfoutputfile;//!< Where to put the wavefunction output + Primary guide_wf; //!< Guiding function + Array1 local_energy; //!< local energy(that doesn't change when we optimize + Array1 lastparms; + doublevar mixing; //!< mixing weight for energy component in mixed minimization (0.95 default) + int use_extended_output; //!< Whether to print out wavefunction at every iter. of min + // int use_analytical_grad_and_hess; //!< Whether to use analytical gradient and hessian of WF with parms + int iter_min_read;//!< number of iterations before the dumping is being decreased + int min_nconfig_read;//!< starting number of configuration used + int multiply;//!< by home much do I increase the nconfig + int maxnparmsatonce; //!< maximum parameters optimized at once + Array1 weight; //weights for each walker in optimization + System * sysprop; + Array1 electrons; + Array1 wf; + Wavefunction_data * wfdata; + Pseudopotential * pseudo; +}; + +#endif //OPTIMIZE_METHOD2_H_INCLUDED +//------------------------------------------------------------------------ diff --git a/src/method/Plot_method.cpp b/src/method/Plot_method.cpp new file mode 100644 index 00000000..bc47f292 --- /dev/null +++ b/src/method/Plot_method.cpp @@ -0,0 +1,261 @@ +/* + +Copyright (C) 2007 Zachary Helms + with further modifications by Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ + +#include "Plot_method.h" +#include "qmc_io.h" +#include "System.h" +#include "Program_options.h" +/*! +Read the "words" from the method section in the input file +via doinput() parsing, and store section information in private +variables orbs, resolution, and minmax. +Set up MO_matrix and Sample_point objects for wavefunction from input +*/ +void Plot_method::read(vector words, + unsigned int & pos, + Program_options & options) +{ + pos=0; //always start from first word + vector Torbs; + vector Tminmax; + vector orbtext; + + + if(!readsection(words, pos=0, orbtext, "ORBITALS")) + error("Need ORBITALS in PLOT section"); + + if(! readvalue(words,pos=0,resolution,"RESOLUTION")) + resolution=.2; + + if(! readsection(words,pos=0,Tminmax,"MINMAX")) + error("Need MINMAX in METHOD section"); + if(Tminmax.size() != 6) + error("MINMAX needs 6 values"); + minmax.Resize(6); + for(unsigned int i=0; i maxorb) maxorb=orbs(i); + } + } + else { + int totmo=mymomat->getNmo(); + orbs.Resize(totmo); + for(int i=0; i< totmo; i++) { + orbs(i)=i+1; + } + } + if(maxorb > mymomat->getNmo()) { + error("Too high orbital requested in PLOTORBITALS. Try increasing " + "NORB in the ORBITALS section."); + } + + Array1 > orblist(1); + orblist(0).Resize(orbs.GetDim(0)); + for(int i=0; i< orbs.GetDim(0); i++) { + //cout << "i " << i << endl; + //cout << "orbs " << orbs(i) << endl; + orblist(0)(i)=orbs(i)-1; + } + + mymomat->buildLists(orblist); + + mywalker=NULL; + sysprop->generateSample(mywalker); + mymovals.Resize(mymomat->getNmo(),5); +} + +/*! + +*/ +void Plot_method::run(Program_options & options, ostream & output) { + ofstream os; //for writing to *.plt files + unsigned int electron=0; //# of the electron that will move through grid + string pltfile; //name of plotfile being written + Array1 xyz(3),resolution_array(3); //position of electron "in" MO + Array1 D_array1(3); //dummy array1 + D_array1=0; //sets all 3 components to 0. use as counter for gridpoints + + D_array1(0)=roundoff((minmax(1)-minmax(0))/resolution); + D_array1(1)=roundoff((minmax(3)-minmax(2))/resolution); + D_array1(2)=roundoff((minmax(5)-minmax(4))/resolution); + + resolution_array(0)=(minmax(1)-minmax(0))/(D_array1(0)-1); + resolution_array(1)=(minmax(3)-minmax(2))/(D_array1(1)-1); + resolution_array(2)=(minmax(5)-minmax(4))/(D_array1(2)-1); + + int npts=D_array1(0)*D_array1(1)*D_array1(2); + Array2 grid(orbs.GetSize(),npts); + Array1 density(npts); + //generate .xyz file for gOpenMol to view coordinates + pltfile=options.runid + ".xyz"; + os.open(pltfile.c_str()); + write_xyz(sysprop,os); + os.close(); + + + //calculate value of each molecular orbital at each grid point and store in an Array1 + // grid values with x=fastest running variable, and z=slowest + cout<<"calculating "<setElectronPos(electron,xyz); //move elec#1 to point specified by xyz + mymomat->updateVal(mywalker,electron,0,mymovals); //recalculate MO value for elec#1 + density(count)=0; + for(int i=0; i "Orbital/density surface" + //number of grid points for x, y, & z direction + os <nIons(); + os << " " << natoms << " " << minmax(0) << " " + << minmax(2) << " " << minmax(4) << endl; + os << D_array1(0) << " " << resolution_array(0) << " 0.0000 0.0000" << endl; + os << D_array1(1) << " 0.0000 " << resolution_array(1) << " 0.0000" << endl; + os << D_array1(2) << " 0.0000 0.0000 " << resolution_array(2) << endl; + Array1 pos(3); + for(int at=0; at< natoms; at++) { + mywalker->getIonPos(at,pos); + os << " " << mywalker->getIonCharge(at) << " 0.0000 " << pos(0) + <<" " << pos(1) << " " << pos(2) << endl; + } + + for(int j=0; j< npts; j++) { + os << grid(i,j) << " "; + if(j%6 ==5) os << endl; + } + os << endl; + os.close(); + + } + } + + + string cubename=options.runid+".dens.cube"; + os.open(cubename.c_str()); + os << "GOS plot output\n"; + os << "Electron density" << endl; + int natoms=sysprop->nIons(); + os << " " << natoms << " " << minmax(0) << " " + << minmax(2) << " " << minmax(4) << endl; + os << D_array1(0) << " " << resolution_array(0) << " 0.0000 0.0000" << endl; + os << D_array1(1) << " 0.0000 " << resolution_array(1) << " 0.0000" << endl; + os << D_array1(2) << " 0.0000 0.0000 " << resolution_array(2) << endl; + Array1 pos(3); + for(int at=0; at< natoms; at++) { + mywalker->getIonPos(at,pos); + os << " " << mywalker->getIonCharge(at) << " 0.0000 " << pos(0) + <<" " << pos(1) << " " << pos(2) << endl; + } + + for(int j=0; j< npts; j++) { + os << density(j) << " "; + if(j%6 ==5) os << endl; + } + os << endl; + os.close(); + +} + + +/*! +Print information about private variables {orbs,resolution,minmax} +*/ +int Plot_method::showinfo(ostream & os) +{ + os<<"#############Plot_method#################\n"; + os<<"orbs="< +#include +#include +#include +#include "Qmc_method.h" +#include "qmc_io.h" +#include "Array.h" +#include "MO_matrix.h" +#include "Sample_point.h" +class System; +class Wavefunction; +class Program_options; + +/*! +\brief +Generate a grid of sample points of MO functions. Keyword PLOT +in METHOD section + + the PLOT method generates a .xyz file that can be imported by gOpenMOl + and "formatted" .plt files that need to be "unformatted" + using gOpenMol's "Pltfile (conversion)" utility + + +

    Options

    + Required + + ORBITALS A list of the orbitals to be plotted + + RESOLUTION Grid coarsness. for example 0.1(fine) or 10(coarse) + + MINMAX list of 6 numbers: xmin xmax ymin ymax zmin zmax + + + + Optional + + PRINT_DERIVATIVES also print the gradient and laplacian of the molecular orbitals + + PLOTORBITALS A list of orbitals to print. default: all of them + + +for example:
    +
    +METHOD {
    + PLOT
    +
    + PLOTORBITALS { 5 6 }
    + RESOLUTION 0.5
    + MINMAX { -10 10 -10 10 -10 10 }
    + ORBITALS{
    +  INCLUDE n2.basis
    +  NMO 5
    +  ORBFILE n2.orb
    +  CENTERS { USEATOMS }
    + }
    +}
    +
    +
    + + */ +class Plot_method : public Qmc_method +{ +public: + void read(vector words, + unsigned int & pos, + Program_options & options); + void run(Program_options & options, ostream & output); + int showinfo(ostream & os); + Plot_method():mymomat(NULL), mywalker(NULL) {} + ~Plot_method() + { + if(mymomat!=NULL) delete mymomat; + if(mywalker != NULL) delete mywalker; + //deallocate(wf); + //deallocate(wfdata); + //for(int i=0; i< nconfig; i++) { delete electrons(i); } + } + +private: + Array1 orbs; //orbital #'s to be plotted + Array1 minmax; //xmin xmax ymin ymax zmin zmax + doublevar resolution; //grid coarsness: 10=coarser 0.1=finer + MO_matrix * mymomat; //will hold MO information + Sample_point * mywalker; //a single configuration/walker + Array2 mymovals; //(i,j) where i=MO#, j=0 default (for now) + System * sysprop; + int print_derivatives; +}; + +#endif //PLOT_METHOD_H_INCLUDED +//------------------------------------------------------------------------ diff --git a/src/method/Postprocess_method.cpp b/src/method/Postprocess_method.cpp new file mode 100644 index 00000000..70acf355 --- /dev/null +++ b/src/method/Postprocess_method.cpp @@ -0,0 +1,225 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ + +#include "Postprocess_method.h" +#include "qmc_io.h" +#include "System.h" +#include "Program_options.h" +#include "Sample_point.h" +#include "ulec.h" + +/*! +Read the "words" from the method section in the input file +via doinput() parsing, and store section information in private +variables orbs, resolution, and minmax. +Set up MO_matrix and Sample_point objects for wavefunction from input +*/ +void Postprocess_method::read(vector words, + unsigned int & pos, + Program_options & options) +{ + sys=NULL; + allocate(options.systemtext[0], sys); + sample=NULL; + sys->generateSample(sample); + + if(!readvalue(words, pos=0, configfile, "READCONFIG")) + error("Need READCONFIG in Postprocess"); + + canonical_filename(configfile); +} + +class Postprocess_accumulator { +public: + Postprocess_accumulator(System * sys) { + npoints=0; + nelectrons=sys->nelectrons(0)+sys->nelectrons(1); + + vector cvg_tmp; + for(double i=1; i <= nelectrons; i++) + cvg_tmp.push_back(i); + + + cvg.Resize(cvg_tmp.size()); + for(int i=0; i< cvg.GetDim(0); i++) cvg(i)=cvg_tmp[i]; + + + sys->getAtomicLabels(atom_names); + + zpol_cvg_avg.Resize(cvg.GetDim(0),3); + zpol_cvg_var.Resize(cvg.GetDim(0),3); + zpol_cvg_avg=0; + zpol_cvg_var=0; + + zpol_single.Resize(3); + zpol_single_var.Resize(3); + zpol_single=dcomplex(0.0,0.0);zpol_single_var=dcomplex(0.0,0.0); + } + + + //-------------------------------------------------- + void accumulate(System * sys, Sample_point * sample) { + + + int nelectrons=sample->electronSize(); + Array2 gvec; + //Array2 latvec; + Array1 pos(3); + sys->getRecipLattice(gvec); + //sys->getBounds(latvec); + + dcomplex zpol; + Array1 sum(3,0.0); + for(int e=0; e< nelectrons; e++) { + sample->getElectronPos(e,pos); + for(int i=0; i< 3; i++) { + for(int d=0; d< 3; d++) + sum(i)+=gvec(i,d)*pos(d); + } + } + + + for(int j=0; j< cvg.GetDim(0); j++) { + for(int i=0; i< 3; i++) { + double temp_sum=sum(i); + zpol=dcomplex(cos(2*pi*temp_sum/doublevar(cvg(j))), + sin(2*pi*temp_sum/doublevar(cvg(j)))); + + dcomplex old_av=zpol_cvg_avg(j,i); + dcomplex new_av=old_av+(zpol-old_av)/doublevar(npoints+1); + dcomplex old_var=zpol_cvg_var(j,i); + dcomplex new_var=old_var; + if(npoints>1) + new_var=dcomplex(doublevar(1-1.0/npoints)*old_var.real() + +doublevar(npoints+1)*(new_av.real()-old_av.real()) + *(new_av.real()-old_av.real()), + doublevar(1-1.0/npoints)*old_var.imag() + +doublevar(npoints+1)*(new_av.imag()-old_av.imag()) + *(new_av.imag()-old_av.imag())); + zpol_cvg_avg(j,i)=new_av; + zpol_cvg_var(j,i)=new_var; + + } + } + + + for(int i=0; i< 3; i++) { + zpol=dcomplex(0.0,0.0); + for(int e=0; e< nelectrons; e++) { + doublevar ov=0; + for(int d=0; d< 3; d++) { + ov+=gvec(i,d)*pos(d); + } + zpol+=dcomplex(cos(2*pi*ov),sin(2*pi*ov)); + dcomplex old_av=zpol_single(i); + dcomplex new_av=old_av+(zpol-old_av)/doublevar(npoints+1); + dcomplex old_var=zpol_single_var(i); + dcomplex new_var=old_var; + if(npoints>1) + new_var=dcomplex(doublevar(1-1.0/npoints)*old_var.real() + +doublevar(npoints+1)*(new_av.real()-old_av.real()) + *(new_av.real()-old_av.real()), + doublevar(1-1.0/npoints)*old_var.imag() + +doublevar(npoints+1)*(new_av.imag()-old_av.imag()) + *(new_av.imag()-old_av.imag())); + zpol_single(i)=new_av; + zpol_single_var(i)=new_var; + } + } + npoints++; + } + + //---------------------------------------- + void printout(ostream & os) { + + os << "Single-point zpol " << endl; + for(int d=0; d< 3; d++) { + os << "sing " << d<< " " < zpol_cvg_avg; //!< n-body zpol + Array2 zpol_cvg_var; + Array1 cvg; + + Array1 atomcharges; + vector atom_names; + + + Array1 zpol_single; //!< single-body zpol + Array1 zpol_single_var; +}; + +//---------------------------------------------------------------------- + +void Postprocess_method::run(Program_options & options, ostream & output) { + + ifstream checkfile(configfile.c_str()); + if(!checkfile) error("Couldn't open ", configfile); + string dummy; + int nread=0; + Postprocess_accumulator accumulator(sys); + while(checkfile >> dummy) { + if(read_config(dummy, checkfile,sample)) { + accumulator.accumulate(sys,sample); + nread++; + if(nread%1000==0) output << nread << " configs read" << endl; + } + } + checkfile.close(); + accumulator.printout(output); + + +} + + +/*! + +*/ +int Postprocess_method::showinfo(ostream & os) +{ + os<<"#############Postprocess_method#################\n"; + sys->showinfo(os); + + return 1; +} diff --git a/src/method/Postprocess_method.h b/src/method/Postprocess_method.h new file mode 100644 index 00000000..5c763fdc --- /dev/null +++ b/src/method/Postprocess_method.h @@ -0,0 +1,62 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ + + +#ifndef POSTPROCESS_METHOD_H_INCLUDED +#define POSTPROCESS_METHOD_H_INCLUDED + +#include +#include +#include +#include +#include "Qmc_method.h" +#include "qmc_io.h" +#include "Array.h" +#include "MO_matrix.h" +#include "Sample_point.h" +class System; +class Wavefunction; +class Program_options; + +/*! + */ +class Postprocess_method : public Qmc_method +{ +public: + void read(vector words, + unsigned int & pos, + Program_options & options); + void run(Program_options & options, ostream & output); + int showinfo(ostream & os); + Postprocess_method():sample(NULL),sys(NULL) {} + ~Postprocess_method() + { + if(sample != NULL) delete sample; + if(sys != NULL) delete sys; + } + +private: + Sample_point * sample; //a single configuration/walker + System * sys; + string configfile; +}; + +#endif //POSTPROCESS_METHOD_H_INCLUDED +//------------------------------------------------------------------------ diff --git a/src/method/Qmc_method.cpp b/src/method/Qmc_method.cpp new file mode 100644 index 00000000..ea0cda2a --- /dev/null +++ b/src/method/Qmc_method.cpp @@ -0,0 +1,109 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ +#include "Qmc_method.h" +#include "Vmc_method.h" +#include "Optimize_method.h" +#include "Optimize_method2.h" +#include "Newton_opt_method.h" +#include "Dmc_method.h" +#include "Test_method.h" +#include "Plot_method.h" +#include "Nodes_method.h" +#include "Reptation_method.h" +#include "Postprocess_method.h" + +int allocate(vector & words, + Program_options & options, + Qmc_method * & methptr) +{ + assert(methptr == NULL); + + if(caseless_eq(words[0],"VMC")) + methptr=new Vmc_method; + + else if(caseless_eq(words[0],"OPTIMIZE")) + methptr=new Optimize_method; + + else if(caseless_eq(words[0],"OPTIMIZE2")) + methptr=new Optimize_method2; + + else if(caseless_eq(words[0],"NEWTON_OPT")) + methptr=new Newton_opt_method; + + else if(caseless_eq(words[0],"DMC")) + methptr=new Dmc_method; + + else if(caseless_eq(words[0],"TEST")) + methptr=new Test_method; + + else if(caseless_eq(words[0],"PLOT")) + methptr=new Plot_method; + + else if(caseless_eq(words[0],"NODES")) + methptr=new Nodes_method; + + else if(caseless_eq(words[0],"REPTATION")) + methptr=new Reptation_method; + + else if(caseless_eq(words[0],"POSTPROCESS")) + methptr=new Postprocess_method; + else + error("Error parsing the method section; unknown keyword ", + words[0]); + + + unsigned int pos=1; + + methptr->read(words,pos,options); + return 1; +} + +int allocate(vector & words, + Program_options & options, + Qmc_avg_method * & methptr) +{ + assert(methptr == NULL); + if(words[0] == "VMC") { + methptr=new Vmc_method; + } + else if(words[0] == "DMC") { + methptr=new Dmc_method; + } + else error(" ",words[0], " is not a valid averaging method"); + + unsigned int pos=1; + + methptr->read(words,pos,options); + return 1; +} + + + + +int deallocate(Qmc_method * & methptr) +{ + if(methptr == NULL) + return 0; + + delete methptr; + + methptr=NULL; + return 1; +} diff --git a/src/method/Qmc_method.h b/src/method/Qmc_method.h new file mode 100644 index 00000000..0c3cefbb --- /dev/null +++ b/src/method/Qmc_method.h @@ -0,0 +1,111 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ + + +#ifndef QMC_METHOD_H_INCLUDED +#define QMC_METHOD_H_INCLUDED + +#include "Qmc_std.h" +class Program_options; + +class Qmc_method +{ +public: + + /*! + Read the input section from words. + */ + virtual void read(vector words, + unsigned int & pos, + Program_options & options)=0; + + /*! + Generate any large temporary variables needed for a run(some classes provide + an interface for using prepared data) + */ + virtual int generateVariables(Program_options & options) {return 1 ; } + + /*! + Do the calculation, spooling output to output. + */ + virtual void run(Program_options & options, ostream & output)=0; + + /*! + Print some information about the calculation setup to os. + */ + virtual int showinfo(ostream & os) + { + os << "A Qmc_method hasn't instantiated showinfo\n"; + return 1; + } + + + virtual ~Qmc_method() + {} +} +; + + +class Properties_manager; +class System; +class Wavefunction_data; +class Pseudopotential; + +class Qmc_avg_method: public Qmc_method +{ +public: + + virtual void read(vector words, + unsigned int & pos, + Program_options & options)=0; + virtual int generateVariables(Program_options & options) {return 1 ; } + + virtual void run(Program_options & options, ostream & output)=0; + + virtual void runWithVariables(Properties_manager & prop, + System * sys, + Wavefunction_data * wfdata, + Pseudopotential *, + ostream & output)=0; + + virtual int showinfo(ostream & os) + { + os << "A Qmc_method hasn't instantiated showinfo\n"; + return 1; + } + + + virtual ~Qmc_avg_method() + {} +} +; + + +int allocate(vector & words, + Program_options & options, + Qmc_method * & methptr); +int allocate(vector & words, + Program_options & options, + Qmc_avg_method *& methptr); + +int deallocate(Qmc_method * & methptr); + +#endif //QMC_METHOD_H_INCLUDED +//------------------------------------------------------------------------ diff --git a/src/method/Reptation_method.cpp b/src/method/Reptation_method.cpp new file mode 100644 index 00000000..2a48dc3f --- /dev/null +++ b/src/method/Reptation_method.cpp @@ -0,0 +1,1020 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ + + +#include "Reptation_method.h" +#include "qmc_io.h" +#include "ulec.h" +#include +#include "Program_options.h" +#include "System.h" +#include "Split_sample.h" +#include "Properties.h" + + + +//---------------------------------------------------------------------- + + +struct Reptile_point { + + Reptile_point() { + age=0; + } + Properties_point prop; + + Array1 < Array1 > electronpos; + Array2 deriv; + + doublevar age; + doublevar branching; //!< branching weight + Array1 aux_branching; + + Array2 drift; + Array1 < Array2 > aux_drift; + Array1 < Array2 > aux_positions; + + + //-------------------------------------------------- + void savePos(Sample_point * sample) { + int nelectrons=sample->electronSize(); + electronpos.Resize(nelectrons); + for(int i=0; i< nelectrons; i++) { + electronpos(i).Resize(3); + sample->getElectronPos(i,electronpos(i)); + } + } + //-------------------------------------------------- + + void restorePos(Sample_point * sample) { + int nelectrons=sample->electronSize(); + assert(nelectrons==electronpos.GetDim(0)); + for(int i=0; i< nelectrons; i++) + sample->setElectronPos(i,electronpos(i)); + } + + //-------------------------------------------------- + void write(string & indent, ostream & os) { + int nelectrons=electronpos.GetDim(0); + int naux=aux_branching.GetDim(0); + os << "naux " << naux << endl; + os << indent << "age " << age << endl; + os << indent << "branching " << branching << endl; + os << indent << "aux_branching "; + for(int a=0; a< naux; a++) + os << aux_branching(a) << " "; + os << endl; + + + os << indent << "numElectrons " << nelectrons << endl; + for(int e=0; e< nelectrons; e++) { + os << indent; + for(int d=0; d< 3; d++) + os << electronpos(e)(d) << " "; + os << endl; + } + os << indent << "drift " << endl; + for(int e=0; e< nelectrons; e++) { + os << indent; + for(int d=0; d< 3; d++) + os << drift(e,d) << " "; + os << endl; + } + + for(int a=0; a< naux; a++) { + os << indent << "aux_position" << endl; + for(int e=0; e< nelectrons; e++) { + os << indent; + for(int d=0; d< 3; d++) + os << aux_positions(a)(e,d) << " "; + os << endl; + } + os << indent << "aux_drift" << endl; + for(int e=0; e< nelectrons; e++) { + os << indent; + for(int d=0; d< 3; d++) + os << aux_drift(a)(e,d) << " "; + os << endl; + } + } + + + if(deriv.GetDim(0) > 0) { + error("don't support derivative saving"); + } + string indent2=indent+" "; + os << indent << "Properties_point {" << endl; + prop.write(indent2,os); + os << indent << "}" << endl; + + } + //-------------------------------------------------- + void read(istream & is) { + string dummy; int nelectrons; + const char *errmsg="misformatting in checkpoint read"; + int naux; + is >> dummy >> naux; + if(dummy != "naux") error(errmsg); + + is >> dummy >> age; + if(dummy != "age") error(errmsg); + is >> dummy >> branching; + if(dummy != "branching") + error("expected branching, got ", dummy, " This probably means that your" + " config files are too old. Sorry!"); + is >> dummy; + if(dummy!="aux_branching") + error(errmsg); + aux_branching.Resize(naux); + for(int a=0; a< naux; a++) { + is >> aux_branching(a); + } + is >> dummy >> nelectrons; + if(dummy!="numElectrons") error(errmsg); + + electronpos.Resize(nelectrons); + for(int e=0; e < nelectrons; e++) { + read_array(is, 3, electronpos(e)); + } + + is >> dummy; + if(dummy!="drift") error(errmsg); + drift.Resize(nelectrons,3); + for(int e=0; e< nelectrons; e++) { + for(int d=0; d< 3; d++) { + is >> drift(e,d); + } + } + + aux_positions.Resize(naux); + aux_drift.Resize(naux); + for(int a=0; a< naux; a++) { + is >> dummy; + if(dummy != "aux_position") error(errmsg); + aux_positions(a).Resize(nelectrons,3); + aux_drift(a).Resize(nelectrons,3); + for(int e=0; e< nelectrons; e++) { + for(int d=0; d< 3; d++) + is >> aux_positions(a)(e,d); + } + is >> dummy; + if(dummy != "aux_drift") error(errmsg); + for(int e=0; e< nelectrons; e++) { + for(int d=0; d< 3; d++) + is >> aux_drift(a)(e,d) ; + } + + } + + is >> dummy; + if(dummy!="Properties_point") error(errmsg); + is >> dummy; + prop.read(is); + is >> dummy; + } + //-------------------------------------------------- + +}; + +//--------------------------------------------------------------------- + +#include "Force_fitter.h" + +void getDerivative(Pseudopotential * psp, System *sys , + Wavefunction_data *wfdata, + Wavefunction * wf, Sample_point * sample, + Array2 & deriv) { + + Force_fitter f_fit; + f_fit.setup(1.0,15); + + + deriv=0; + //psp->getLocalDerivative(sample,f_fit, deriv); + Array1 totalv(wf->nfunc()); + psp->calcNonloc(wfdata,sample, wf, f_fit, totalv,deriv); + Array1 locder(3); + + int nions=sys->nIons(); + for(int at=0; at < nions; at++) { + sys->locDerivative(at, sample,f_fit, locder); + for(int d=0; d< 3;d++) + deriv(at,d)+=locder(d); + } + +} + + +//---------------------------------------------------------------------- + + +void Reptation_method::read(vector words, + unsigned int & pos, + Program_options & options) +{ + + have_read_options=1; + + if(!readvalue(words, pos=0, nblock, "NBLOCK")) + error("Need NBLOCK in RETPTATION section"); + + if(!readvalue(words, pos=0, nstep, "NSTEP")) + error("Need NSTEP in REPTATION section"); + + if(!readvalue(words, pos=0, timestep, "TIMESTEP")) + error("Need TIMESTEP in REPTATION section"); + + if(!readvalue(words, pos=0, reptile_length, "LENGTH")) + error("Need LENGTH in REPTATION"); + + + if(!readvalue(words, pos=0, readconfig, "READCONFIG")) + error("Need READCONFIG in REPTATION"); + canonical_filename(readconfig); + + + + //------------------optional stuff + + vector proptxt; + if(readsection(words, pos=0, proptxt, "PROPERTIES")) + mygather.read(proptxt); + + if(!readvalue(words, pos=0, log_label, "LABEL")) + log_label="rmc"; + + if(readvalue(words, pos=0, storeconfig, "STORECONFIG")) + canonical_filename(storeconfig); + + if(readvalue(words, pos=0, center_trace, "CENTER_TRACE")) + canonical_filename(center_trace); + + if(!readvalue(words, pos=0, trace_wait, "TRACE_WAIT")) + trace_wait=int(.3/timestep)+1; + + + vector dynamics_words; + if(!readsection(words, pos=0, dynamics_words, "DYNAMICS") ) + dynamics_words.push_back("SPLIT"); + + allocate(dynamics_words, sampler); + + + vector tmp_dens; + pos=0; + while(readsection(words, pos, tmp_dens, "DENSITY")) { + dens_words.push_back(tmp_dens); + } + + //EXPERIMENTAL stuff! + calc_full_gf=haskeyword(words,pos=0,"FULL_GF"); + calc_hf_derivatives=haskeyword(words,pos=0,"HF_DERIVATIVES"); + sampler->enforceNodes(1); + + guidewf=new Primary; +} + + +//---------------------------------------------------------------------- + +int Reptation_method::generateVariables(Program_options & options) { + + + if(!have_read_options) { + error("Need to call Reptation_method::read() before generateVariables()"); + } + have_generated_variables=1; + + debug_write(cout, "properties\n"); + allocate(options.systemtext[0], sys ); + allocate(options.twftext[0], sys, mywfdata); + debug_write(cout, "Pseudopotential\n"); + + sys->generatePseudo(options.pseudotext, pseudo); + + densplt.Resize(dens_words.size()); + for(int i=0; i< densplt.GetDim(0); i++) { + allocate(dens_words[i], sys, options.runid,densplt(i)); + } + + + return 1; +} + + +//---------------------------------------------------------------------- + +int Reptation_method::allocateIntermediateVariables(System * locsys, + Wavefunction_data * locwfdata) { + + + //----------------------------------- + //Sample point initialization + debug_write(cout, "electrons\n"); + + sample=NULL; + locsys->generateSample(sample); + + wf=NULL; + locwfdata->generateWavefunction(wf); + sample->attachObserver(wf); + + + return 1; +} + +//---------------------------------------------------------------------- + +int Reptation_method::deallocateIntermediateVariables() { + + if(wf) delete wf; + if(sample) delete sample; + wf=NULL; + sample=NULL; + return 1; +} + +//---------------------------------------------------------------------- + +int Reptation_method::showinfo(ostream & os) { + + if(os){ + if(have_generated_variables) { + sys->showinfo(os); + os << endl << endl; + os << " Wavefunction " + << endl << endl; + mywfdata->showinfo(os); + pseudo->showinfo(os); + os << endl; + } + os << "Reptation settings:\n"; + os << "Number of processors: " << mpi_info.nprocs << endl; + os << "Blocks: " << nblock << endl; + os << "Steps per block: " << nstep << endl; + os << "Timestep: " << timestep << endl; + os << "Reptile size: " << reptile_length << endl; + string indent=" "; + os << "Dynamics generator:" << endl; + sampler->showinfo(indent, os); + os << endl; + return 1; + } + else + return 0; +} + +//---------------------------------------------------------------------- + + + +int Reptation_method::readcheck(string & filename, + int & direction, + deque & reptile) { + int configsread=0; + + if(filename == "") return 0; + + ifstream checkfile(filename.c_str()); + if(!checkfile) + error("Couldn't open config file ", filename); + + long int is1, is2; + string dummy; + checkfile >> dummy; + if(dummy != "RANDNUM") error("Expected RANDNUM in checkfile"); + checkfile >> is1 >> is2; + rng.seed(is1, is2); + + + while(checkfile >>dummy) { + + //------------------------------------------------------ + //Start from a (single) VMC configuration + if(dummy=="SAMPLE_POINT") { + while(checkfile >> dummy) + if(read_config(dummy, checkfile, sample)) + configsread++; + if(configsread < 1) + error("Need at least one configuration to start reptation"); + checkfile.close(); + return 0; + } + + //------------------------------------------------------ + //Read in the reptile if we're restarting from a previous RMC run + else if(dummy=="REPTILE") { + //cout << "reading reptile" << endl; + checkfile >> dummy; + if(dummy != "{") error("expected {, got ", dummy); + + checkfile >> dummy; + if(dummy != "direction") error("expected direction, got ",dummy); + checkfile >> direction; + + checkfile >> dummy; + if(dummy != "length") error("expected length, got ", dummy); + int length; + checkfile >> length; + if(length != reptile_length) + error("can't use a reptile of different length.."); + //cout << "reptile direction " << direction + // << " length " << length << endl; + Reptile_point pt; + for(int i=0; i< length; i++) { + + checkfile >> dummy; + if(dummy != "Reptile_point") error("expected Reptile_point, got ",dummy); + checkfile >> dummy; //open brace; + pt.read(checkfile); + checkfile >> dummy; //close brace + if(dummy != "}") error("expected }, got ", dummy); + reptile.push_back(pt); + } + return 1; + } + } + return 0; +} + +//---------------------------------------------------------------------- + +void Reptation_method::storecheck(int direction, + deque & reptile, + string & filename) { + if(filename=="") return; + ofstream checkfile(filename.c_str()); + if(!checkfile) error("Couldn't open ", filename); + checkfile.precision(15); + + long int is1, is2; + rng.getseed(is1, is2); + checkfile << "RANDNUM " << is1 << " " << is2 << endl; + checkfile << "REPTILE { " << endl; + checkfile << "direction " << direction << endl; + checkfile << "length " << reptile.size() << endl; + string indent=" "; + for(deque::iterator i=reptile.begin(); + i!=reptile.end(); i++) { + checkfile << "Reptile_point { \n"; + i->write(indent,checkfile); + checkfile << "} " << endl; + } + + checkfile << "}\n"; + + checkfile.close(); +} + + +//---------------------------------------------------------------------- + +void Reptation_method::run(Program_options & options, ostream & output) { + if(!have_generated_variables) + error("Must generate variables to use Reptation_method::run"); + + string logfile=options.runid+".log"; + + if(mpi_info.node==0 ) { + ofstream logout(logfile.c_str(), ios::app); + logout << "#-------------------------------------------------\n"; + logout << "#Reptation run: timestep " << timestep + << " steps " << nstep << endl; + logout << "#-------------------------------------------------\n\n\n"; + logout.close(); + } + + Properties_manager myprop; + myprop.setLog(logfile, log_label); + runWithVariables(myprop, sys, mywfdata, pseudo,output); +} + + +//---------------------------------------------------------------------- + + +void Reptation_method::get_avg(deque & reptile, + Properties_point & pt) { + int size=reptile.size(); + int nwf=reptile[0].prop.kinetic.GetDim(0); + int naux=reptile[0].prop.aux_energy.GetDim(0); + if(nwf >1) error("nwf > 0 not supported yet"); + + pt.setSize(nwf, naux,2); + + + + + Reptile_point & last(reptile[size-1]); + + //How to do averaging at either end. Not doing this right + //now because of correlated sampling..if we really want energies, + //usually DMC is a better choice. + pt=last.prop; + Reptile_point & first(reptile[0]); + //pt.kinetic(0)=.5*(first.prop.kinetic(0)+last.prop.kinetic(0)); + //pt.nonlocal(0)=.5*(first.prop.nonlocal(0)+last.prop.nonlocal(0)); + //pt.potential(0)=.5*(first.prop.potential(0) + last.prop.potential(0)); + pt.count=1; + pt.weight=1; + + //for(int a=0; a< naux; a++) { + // for(int i=0; i< 2; i++) + // pt.aux_energy(a,i)=.5*(first.prop.aux_energy(a,i) + // +last.prop.aux_energy(a,i)); + //} + + pt.aux_weight.Resize(naux,2); + pt.aux_weight=1.0; + for(deque::iterator r=reptile.begin()+1; + r!=reptile.end(); r++) { + for(int a=0; a< naux; a++) { + doublevar branch_part=exp(r->aux_branching(a)-r->branching); + pt.aux_weight(a,0)*=branch_part; + doublevar dyn_part=exp(r->prop.aux_gf_weight(a)-r->prop.gf_weight); + pt.aux_weight(a,1)*=branch_part*dyn_part*r->prop.aux_jacobian(a); + } + } + for(int a=0; a< naux; a++) { + doublevar first_ratio=guidewf->getTrialRatio(first.prop.aux_wf_val(a), + first.prop.wf_val); + doublevar last_ratio=guidewf->getTrialRatio(last.prop.aux_wf_val(a), + last.prop.wf_val); + pt.aux_weight(a,0)*=last_ratio*last_ratio*last.prop.aux_jacobian(a); + + pt.aux_weight(a,1)*=first_ratio*last_ratio*first.prop.aux_jacobian(a); + } +} + + +//--------------------------------------------------------------------- + +void Reptation_method::get_center_avg(deque & reptile, + Properties_point & pt) { + int nwf=reptile[0].prop.kinetic.GetDim(0); + int size=reptile.size(); + //if(naux >0) error("naux > 0 not supported yet."); + if(nwf >1) error("nwf > 0 not supported yet"); + + pt.setSize(nwf, 0); + int num=size/2+1; + pt=reptile[num].prop; + + pt.count=1; + + pt.weight=1; +} + +//---------------------------------------------------------------------- + + +doublevar Reptation_method::slither(int direction, + deque & reptile, + Properties_gather & mygather, + Reptile_point & pt, + doublevar & main_diffusion, + Array1 & aux_diffusion) { + + Dynamics_info dinfo; + int nelectrons=sample->electronSize(); + int naux=mygather.nAux(); + Array1 aux_dinfo(naux); + main_diffusion=0; + aux_diffusion.Resize(naux); aux_diffusion=0; + pt.prop.gf_weight=1; + pt.prop.aux_gf_weight.Resize(naux); + pt.prop.aux_gf_weight=1; + + for(int e=0; esample(e,sample, wf, + mywfdata, guidewf, dinfo, timestep); + + } + //Update all the quantities we want + mygather.extendedGather(pt.prop, pseudo, sys, mywfdata, wf, + sample, guidewf, n_aux_cvg,0,pt.drift, + pt.aux_drift, pt.aux_positions); + + Array1 tmpdft(3); + for(int e=0;e < nelectrons; e++) { + for(int d=0;d < 3; d++) tmpdft(d)=pt.drift(e,d); + limDrift(tmpdft,timestep, drift_cyrus); + for(int d=0;d < 3; d++) pt.drift(e,d)=tmpdft(d); + for(int a=0; a< naux; a++) { + for(int d=0; d< 3; d++) tmpdft(d)=pt.aux_drift(a)(e,d); + limDrift(tmpdft,timestep, drift_cyrus); + for(int d=0; d< 3; d++) pt.aux_drift(a)(e,d)=tmpdft(d); + } + } + + if(calc_hf_derivatives) + getDerivative(pseudo, sys, mywfdata, wf, sample, pt.deriv); + + pt.savePos(sample); + + + doublevar nen=pt.prop.energy(0); + doublevar olden=0.0; + deque::iterator last_point; + if(reptile.size() >0) { + if(direction==1 ) + last_point=(reptile.end()-1); + else + last_point=reptile.begin(); + olden=last_point->prop.energy(0); + + for(int e=0; e< nelectrons; e++) { + for(int d=0;d < 3; d++) { + doublevar y=pt.electronpos(e)(d); + doublevar x=last_point->electronpos(e)(d); + if(fabs(y-x) > 1e-15) { + doublevar dry=pt.drift(e,d); + doublevar drx=last_point->drift(e,d); + + pt.prop.gf_weight+=(x-y)*(x-y) + +(x-y)*(drx-dry) + +.5*(drx*drx+dry*dry); + + main_diffusion+=(y-x-drx)*(y-x-drx); + } + } + } + pt.prop.gf_weight=-pt.prop.gf_weight/(2*timestep); + for(int a=0; a< naux; a++) { + for(int e=0; e< nelectrons; e++) { + for(int d=0;d < 3; d++) { + doublevar y=pt.aux_positions(a)(e,d); + doublevar x=last_point->aux_positions(a)(e,d); + if(fabs(y-x)> 1e-15) { + doublevar dry=pt.aux_drift(a)(e,d); + doublevar drx=last_point->aux_drift(a)(e,d); + pt.prop.aux_gf_weight(a)+=(x-y)*(x-y) + +(x-y)*(drx-dry) + +.5*(drx*drx+dry*dry); + aux_diffusion(a)+=(y-x-drx)*(y-x-drx); + } + } + } + pt.prop.aux_gf_weight(a)*= -1.0/(2*aux_timestep(a)); + } + } + //Cutting off the energy + doublevar fbet=max(eref-nen,eref-olden); + doublevar cutoff=1; + if(fbet > 1.5*energy_cutoff) + cutoff=0; + else if(fbet > energy_cutoff) + cutoff*=(1.-(fbet-energy_cutoff)/(.5*energy_cutoff)); + + pt.branching=-0.5*timestep*cutoff*(olden+nen); + + pt.aux_branching.Resize(naux); + pt.aux_branching=0.0; + if(reptile.size()>0) { + for(int a=0; a< naux; a++) + pt.aux_branching(a)=-0.5*aux_timestep(a)*cutoff + *(pt.prop.aux_energy(a,0)+last_point->prop.aux_energy(a,0)); + } + + + //Acceptance.. + doublevar lost_branching=0; + if(reptile.size()>0) { + if(direction==1 ) + lost_branching=(reptile.begin()+1)->branching; + else + lost_branching=(reptile.end()-1)->branching; + } + doublevar accept=exp(pt.branching-lost_branching); + + if(pt.prop.wf_val.amp(0,0) < -1e12 ) { + cout << "rejecting based on wf value" << endl; + accept=0; + } + + return accept; +} + + +//---------------------------------------------------------------------- + +/*! + +*/ +void Reptation_method::runWithVariables(Properties_manager & prop, + System * sys, + Wavefunction_data * wfdata, + Pseudopotential * psp, + ostream & output) +{ + + + + int nelectrons=sys->nelectrons(0)+sys->nelectrons(1); + allocateIntermediateVariables(sys, wfdata); + + n_aux_cvg=1; + if(calc_full_gf) + n_aux_cvg=2;//0 is cyrus reweighting and 1 is full green's function + + + prop.setSize(wf->nfunc(), nblock, nstep, 1, + sys, wfdata, mygather.nAux(),n_aux_cvg); + + aux_timestep.Resize(mygather.nAux()); + aux_timestep=timestep; + Properties_manager prop_center; + string logfile, label_temp; + prop.getLog(logfile, label_temp); + label_temp+="_cen"; + prop_center.setLog(logfile, label_temp); + + prop_center.setSize(wf->nfunc(), nblock, nstep, 1, sys, + wfdata,0); + + + + cout.precision(10); + output.precision(10); + + Sample_point * center_samp(NULL); + sys->generateSample(center_samp); + + + deque reptile; + int direction=1; + Reptile_point pt; + Dynamics_info dinfo; + int naux=mygather.nAux(); + //Generate a new reptile if we're starting from + // a single VMC point. + if(!readcheck(readconfig, direction, reptile)) { + + wf->notify(all_electrons_move, 0); + wf->updateLap(wfdata, sample); + mygather.updateAuxFunctions(sample); + + for(int i=0; i< reptile_length; i++) { + doublevar main_diffusion; + Array1 aux_diffusion; + slither(direction,reptile, mygather,pt,main_diffusion, + aux_diffusion); + reptile.push_back(pt); + } + } + + + + assert(reptile.size()==reptile_length); + //Branch limiting variables + //we start off with no limiting, and establish the parameters after the + //first block. This seems to be reasonably stable, since it's mostly + //to keep the reptile from getting stuck. + eref=0; + energy_cutoff=1e16; + + //--------begin averaging.. + + Array3 derivatives_block(nblock, sys->nIons(), 3); + + for(int block=0; block< nblock; block++) { + + //clock_t block_start_time=clock(); + doublevar avg_age=0; + doublevar max_age=0; + + doublevar main_diff=0; + Array1 aux_diff(naux, 0.0); + double ntry=0, naccept=0; + double nbounce=0; + Array2 derivatives_step(sys->nIons(), 3,0.0); + + //Control variable that will be set to one when + //we change direction, which signals to recalculate + //the wave function + int recalc=1; + + for(int step=0; step< nstep; step++) { + psp->randomize(); + + + if(recalc) { + if(direction==1) + reptile[reptile_length-1].restorePos(sample); + else + reptile[0].restorePos(sample); + + mygather.updateAuxFunctions(sample); + } + + + doublevar main_diffusion; Array1 aux_diffusion; + doublevar accept=slither(direction, reptile,mygather, pt, + main_diffusion, aux_diffusion); + + ntry++; + if(accept+rng.ulec() > 1.0) { + recalc=0; + naccept++; + main_diff+=main_diffusion; + for(int a=0; a< naux; a++) + aux_diff(a)+=aux_diffusion(a); + if(direction==1) { + reptile.pop_front(); + reptile.push_back(pt); + } + else { + reptile.pop_back(); + reptile[0].prop.aux_gf_weight=pt.prop.aux_gf_weight; + reptile[0].prop.gf_weight=pt.prop.gf_weight; + reptile[0].branching=pt.branching; + reptile[0].aux_branching=pt.aux_branching; + reptile.push_front(pt); + } + } + else { + recalc=1; + direction*=-1; + nbounce++; + } + + for(deque::iterator i=reptile.begin(); + i!=reptile.end(); i++) { + i->age++; + avg_age+=i->age/reptile_length; + if(i->age > max_age) max_age=i->age; + } + + + Properties_point avgpt; + get_avg(reptile, avgpt); + avgpt.parent=0; avgpt.nchildren=1; //just one walker + avgpt.children(0)=0; + prop.insertPoint(step, 0, avgpt); + + int cpt=reptile_length/2+1; + Properties_point centpt; + get_center_avg(reptile, centpt); + centpt.parent=0; centpt.nchildren=1; + centpt.children(0)=0; + prop_center.insertPoint(step, 0, centpt); + + + reptile[cpt].restorePos(center_samp); + for(int i=0; i< densplt.GetDim(0); i++) + densplt(i)->accumulate(center_samp,1.0); + + + if(center_trace != "" + && (block*nstep+step)%trace_wait==0) { + ofstream checkfile(center_trace.c_str(), ios::app); + if(!checkfile)error("Couldn't open ", center_trace); + checkfile << "SAMPLE_POINT { \n"; + write_config(checkfile, sample); + checkfile << "}\n\n"; + } + + if(calc_hf_derivatives) { + + for(int i=0; i< sys->nIons(); i++) { + for(int d=0; d< 3; d++) { + derivatives_step(i,d)+=reptile[cpt].deriv(i,d); + } + } + } + + } //step + + + prop.endBlock(); + prop_center.endBlock(); + double ntot=parallel_sum(nstep); + if(calc_hf_derivatives) { + for(int i=0; i< sys->nIons(); i++) { + for(int d=0; d< 3; d++) { + derivatives_block(block, i,d) + =parallel_sum(derivatives_step(i,d))/ntot; + } + } + } + + Properties_block lastblock; + prop.getLastBlock(lastblock); + eref=lastblock.avg(Properties_types::total_energy,0); + energy_cutoff=10*sqrt(lastblock.var(Properties_types::total_energy,0)); + + + nbounce=parallel_sum(nbounce); + naccept=parallel_sum(naccept); + ntry=parallel_sum(ntry); + avg_age=parallel_sum(avg_age); + + for(int i=0; i< densplt.GetDim(0); i++) + densplt(i)->write(); + + storecheck(direction, reptile, storeconfig); + main_diff=parallel_sum(main_diff); + for(int a=0; a< naux; a++) { + aux_diff(a)=parallel_sum(aux_diff(a)); + aux_timestep(a)=timestep*main_diff/aux_diff(a); + } + if(output) { + output << "****Block " << block + << " acceptance " << naccept/ntry + << " average distance before bounce " << ntot/nbounce + << endl; + output << "average age " << avg_age/ntot + << " max age " << max_age << endl; + output << "eref " << eref << " cutoff " << energy_cutoff << endl; + output << "Green's function sampler:" << endl; + sampler->showStats(output); + prop.printBlockSummary(output); + if(calc_hf_derivatives) { + for(int i=0; i< sys->nIons(); i++) { + output << "derivative" << i << " : "; + for(int d=0; d < 3; d++) { + output << derivatives_block(block,i,d) << " "; + } + output << endl; + } + } + output << "Center averaging: " << endl; + prop_center.printBlockSummary(output); + } + sampler->resetStats(); + + //clock_t block_end_time=clock(); + + //cout << mpi_info.node << ":CPU block time " + //// << double(block_end_time-block_start_time)/double(CLOCKS_PER_SEC) + // << endl; + + } //block + + + if(output) { + output << "############## Reptation Done ################\n"; + output << "End averages " << endl; + prop.printSummary(output); + output << "Center averages " << endl; + prop_center.printSummary(output); + + if(calc_hf_derivatives) { + Array2 derivative_avg(sys->nIons(), 3, 0.0); + Array2 derivative_err(sys->nIons(), 3, 0.0); + for(int block=0; block < nblock; block++) { + for(int i=0; i< sys->nIons(); i++) { + for(int d=0; d< 3; d++) { + derivative_avg(i,d)+=derivatives_block(block, i,d)/nblock; + } + } + } + for(int block=0; block < nblock; block++) { + for(int i=0; i< sys->nIons(); i++) { + for(int d=0; d< 3; d++) { + derivative_err(i,d)+=(derivative_avg(i,d)-derivatives_block(block,i,d)) + *(derivative_avg(i,d)-derivatives_block(block,i,d))/(nblock*(nblock-1)); + } + } + } + + output << "derivatives " << endl; + for(int i=0; i < sys->nIons(); i++) { + output << "atom" << setw(4) << i << " : "; + for(int d=0; d< 3; d++) + output << derivative_avg(i,d) << " "; + output << endl; + output << "err "; + for(int d=0; d< 3; d++) + output << sqrt(derivative_err(i,d)) << " "; + output << endl; + } + + } + } + + + delete center_samp; + wfdata->clearObserver(); + deallocateIntermediateVariables(); +} + +//------------------------------------------------------------------------ + diff --git a/src/method/Reptation_method.h b/src/method/Reptation_method.h new file mode 100644 index 00000000..6ac13bd9 --- /dev/null +++ b/src/method/Reptation_method.h @@ -0,0 +1,156 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ + + +#ifndef REPTATION_METHOD_H_INCLUDED +#define REPTATION_METHOD_H_INCLUDED + +#include "Qmc_std.h" +#include "Qmc_method.h" +#include "Wavefunction.h" +#include "Wavefunction_data.h" +#include "Sample_point.h" +#include "Guiding_function.h" +#include "System.h" +#include "Pseudopotential.h" +#include "Split_sample.h" +#include "Space_warper.h" +class Program_options; +#include "Properties.h" +#include + +struct Reptile_point; + +/*! +\brief +Evaluates the expectation value \f$ <\Psi|H|\Psi>/<\Psi|\Psi> \f$ +stochastically. Keyword: REPTATION +*/ +class Reptation_method : public Qmc_avg_method +{ +public: + + Reptation_method() { + have_read_options=0; + have_generated_variables=0; + have_attached_variables=0; + sys=NULL; + mywfdata=NULL; + guidewf=NULL; + pseudo=NULL; + wf=NULL; + } + void read(vector words, + unsigned int & pos, + Program_options & options); + void run(Program_options & options, ostream & output); + + int showinfo(ostream & os); + + int generateVariables(Program_options & options); + + virtual void runWithVariables(Properties_manager & prop, + System * sys, + Wavefunction_data * wfdata, + Pseudopotential * psp, + ostream & output); + + ~Reptation_method() + { + + if(have_generated_variables) { + if(sys) delete sys; + if(mywfdata) delete mywfdata; + if(pseudo) delete pseudo; + } + + if(guidewf) delete guidewf; + + for(int i=0; i< densplt.GetDim(0); i++) { + if(densplt(i)) delete densplt(i); + } + + } + +private: + int allocateIntermediateVariables(System * , Wavefunction_data *); + int deallocateIntermediateVariables(); + + //return 1 if we read an entire reptile, 0 if not + int readcheck(string & , int & direction, deque & reptile); + void storecheck(int direction, deque & reptile,string &); + + doublevar getAcceptance(deque & reptile, + Reptile_point & pt, int direction); + doublevar slither(int direction, + deque & reptile, + Properties_gather & mygather, + Reptile_point & pt, + doublevar & main_diffusion, + Array1 & aux_diffusion); + + void get_avg(deque & reptile, + Properties_point & pt); + void get_center_avg(deque & reptile, + Properties_point & pt); + int have_read_options; + int have_generated_variables; + int have_attached_variables; + + int calc_hf_derivatives;//!< Hellmann-Feynman derivatives + int calc_full_gf; + + string center_trace; + int trace_wait; + + + doublevar energy_cutoff; //!< when to cut off the branching term + doublevar eref; //!< reference energy + + + + int nblock; + int nstep; + int n_aux_cvg; + string readconfig; + string log_label; + string storeconfig; + doublevar timestep; + Array1 aux_timestep; + int reptile_length; + + Properties_gather mygather; + Dynamics_generator * sampler; + Guiding_function * guidewf; + Pseudopotential * pseudo; + System * sys; + Sample_point * sample; + Wavefunction * wf; + Wavefunction_data * mywfdata; + + + Array1 < Local_density_accumulator *> densplt; + vector > dens_words; + + +}; + +#endif //REPTATION_METHOD_H_INCLUDED +//------------------------------------------------------------------------ diff --git a/src/method/Split_sample.cpp b/src/method/Split_sample.cpp new file mode 100644 index 00000000..42e1f885 --- /dev/null +++ b/src/method/Split_sample.cpp @@ -0,0 +1,1059 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ + +#include "Split_sample.h" +#include "qmc_io.h" + +int allocate(vector & words, Dynamics_generator *& sam) { + if(caseless_eq(words[0],"SPLIT")) + sam=new Split_sampler; + else if(caseless_eq(words[0],"RUNGE")) + sam=new SRK_dmc; + else if(caseless_eq(words[0],"UNR")) + sam=new UNR_sampler; + else + error("unknown type of sampler: ", words[0]); + + sam->read(words); + return 1; +} + +//---------------------------------------------------------------------- + +void limDrift(Array1 & drift, doublevar tau, drift_type dtype) +{ + doublevar drift2=0; + doublevar drifta=0; + + + if(dtype==drift_cutoff) { + const doublevar drmax=4; + + for(int d=0; d<3; d++) + drift2+=drift(d)*drift(d); + + drifta=drmax/max( (doublevar) sqrt(drift2), drmax); + //cout << "drifta " << drifta*tau << endl; + for(int d=0; d<3; d++) { + drift(d)*= tau*drifta; + } + } + else if(dtype==drift_cyrus) { + + const doublevar acyrus=0.25; + + doublevar tau2=tau*2.; + + for(int d=0; d<3; d++) + { + drift2+=drift(d)*drift(d); + } + + drift2*=acyrus; + if(drift2 > 1e-16) + drifta=(sqrt(1.+tau2*drift2)-1)/(drift2); + else drifta=0.0; + + //cout << "drifta " << drifta << endl; + for(int d=0; d<3; d++) + drift(d)*=drifta; + + } + else { + error("Unknown drift_type in limDrift"); + } + +} + +//------------------------------------------------------------------- + +/*! +returns the exponent of the transition probability for +going from point1 to point2 + */ +doublevar Split_sampler::transition_prob(int point1, int point2, + doublevar timestep, + drift_type dtype) { + doublevar prob=0; + Array1 drift(3); + //cout << "transition probability" << endl; + + drift=trace(point1).drift; + + limDrift(drift, timestep, dtype); + + for(int d=0; d< 3; d++) { + + prob-=(trace(point2).pos(d)-trace(point1).pos(d)-drift(d)) + *(trace(point2).pos(d)-trace(point1).pos(d)-drift(d)); + } + prob/=(2.0*timestep); + + return prob; +} + +doublevar transition_prob(Point & point1, Point & point2, + doublevar timestep, drift_type dtype) { + doublevar prob=0; + Array1 drift(3); + //cout << "transition probability" << endl; + + drift=point1.drift; + + + limDrift(drift, timestep, dtype); + + for(int d=0; d< 3; d++) { + prob-=(point2.pos(d)-point1.pos(d)-drift(d)) + *(point2.pos(d)-point1.pos(d)-drift(d)); + } + prob/=(2.0*timestep); + return prob; +} + +//--------------------------------------------------------------------- + + +doublevar runge_kutta_resamp(Point & p1, Point & p2, + doublevar timestep, drift_type dtype, + int ndim=3) { + Array1 dr1(3), dr2(3); + dr1=p1.drift; dr2=p2.drift; + + limDrift(dr1, timestep, dtype); + limDrift(dr2, timestep, dtype); + Array1 avg(3); + for(int d=0; d< 3; d++) { + avg(d)=(dr1(d)+dr2(d))/2.0; + } + doublevar green_forward=0; + for(int d=0; d< ndim; d++) { + green_forward+=(p2.pos(d)-p1.pos(d)-avg(d))*(p2.pos(d)-p1.pos(d)-avg(d)); + //green_forward+=(p2.pos(d)-p1.pos(d))*(p2.pos(d)-p1.pos(d))+avg(d)*avg(d); + } + return -green_forward/(2*timestep); +} + + +doublevar runge_kutta_symm(Point & p1, Point & p2, + doublevar timestep, drift_type dtype, + int ndim=3) { + Array1 dr1(3), dr2(3); + dr1=p1.drift; dr2=p2.drift; + + limDrift(dr1, timestep, dtype); + limDrift(dr2, timestep, dtype); + Array1 avg(3); + for(int d=0; d< 3; d++) { + avg(d)=(dr1(d)+dr2(d))/2.0; + } + //limDrift(avg,timestep, dtype); + doublevar green_forward=0; + for(int d=0; d< ndim; d++) { + //green_forward+=(p2.pos(d)-p1.pos(d)-avg(d))*(p2.pos(d)-p1.pos(d)-avg(d)); + green_forward+=(p2.pos(d)-p1.pos(d))*(p2.pos(d)-p1.pos(d))+avg(d)*avg(d); + } + return -green_forward/(2*timestep); +} + + +doublevar linear_symm(Point & p1, Point & p2, + doublevar timestep, drift_type dtype, + int ndim=3) { + Array1 dr1(3), dr2(3); + dr1=p1.drift; dr2=p2.drift; + + limDrift(dr1, timestep,dtype); + limDrift(dr2, timestep, dtype); + + doublevar green_forward=0; + for(int d=0; d< ndim; d++) { + + green_forward+=(p2.pos(d)-p1.pos(d))*(p2.pos(d)-p1.pos(d)) + +(p2.pos(d)-p1.pos(d))*(dr2(d)-dr1(d)) + +.5*(dr2(d)*dr2(d)+dr1(d)*dr1(d)); + + // Runge-kutta move + //doublevar tmp=p2.pos(d)-p1.pos(d)-.5*(dr2(d)+dr1(d)); + //green_forward+=tmp*tmp; + //green_forward+=(p2.pos(d)-p1.pos(d))*(p2.pos(d)-p1.pos(d)) + // +.25*(dr2(d)+dr1(d))*(dr2(d)+dr1(d)); + } + return -green_forward/(2*timestep); +} + +//---------------------------------------------------------------------- + +void Split_sampler::read(vector & words) { + unsigned int pos=0; + + readvalue(words, pos=0, divide_, "DIVIDER"); + if(haskeyword(words, pos=0, "RESTRICT_NODES")) + restrict_nodes=1; + + int depth; + if(readvalue(words, pos=0, depth, "DEPTH")) + setRecursionDepth(depth); + + string drifttype; + if(readvalue(words, pos=0, drifttype, "DRIFT_TYPE")) { + if(drifttype=="CYRUS") + setDriftType(drift_cyrus); + else if(drifttype=="CUTOFF") + setDriftType(drift_cutoff); + else error("Didn't understand DRIFT_TYPE ", drifttype); + } + + +} + + +doublevar Dynamics_generator::greenFunction(Sample_point * sample, Wavefunction * wf, + Wavefunction_data * wfdata, + Guiding_function * guidingwf, + int e, + Array1 & newpos, + doublevar timestep, + Dynamics_info & info, Dynamics_info & oldinfo) { + + //cout << "auxillary " << endl; + drift_type dtype=drift_cyrus; + assert(newpos.GetDim(0) >= 3); + wf->updateLap(wfdata, sample); + Point p1; p1.lap.Resize(wf->nfunc(), 5); + p1.sign=sample->overallSign(); + int ndim=sample->ndim(); + + sample->getElectronPos(e,p1.pos); + wf->getLap(wfdata, e, p1.lap); + guidingwf->getLap(p1.lap, p1.drift); + + + for(int d=0; d< ndim; d++) + p1.translation(d)=newpos(d)-p1.pos(d); + + sample->translateElectron(e,p1.translation); + wf->updateLap(wfdata, sample); + Point p2; p2.lap.Resize(wf->nfunc(), 5); + p2.sign=sample->overallSign(); + p2.pos=newpos; + wf->getLap(wfdata, e, p2.lap); + guidingwf->getLap(p2.lap, p2.drift); + + + info.green_forward=exp(::transition_prob(p1, p2, timestep, dtype)); + info.green_backward=::transition_prob(p2,p1, timestep, dtype); + info.symm_gf=exp(linear_symm(p1, p2, timestep, dtype)); + + //cout << "gf:elec " << e << " new wfval " << p2.lap.amp(0,0) << endl; + info.diffuse_start=p1.drift; + limDrift(info.diffuse_start, timestep, dtype); + for(int d=0; d< ndim; d++) { + //cout << "secondary drift " << info.drift_pos(d) << endl; + info.diffuse_start(d)+=p1.pos(d); + } + info.diffuse_end=newpos; + info.orig_pos=p1.pos; + info.new_pos=newpos; + info.diffusion_rate=0; + for(int d=0; d< ndim; d++) + info.diffusion_rate+=(info.diffuse_end(d)-info.diffuse_start(d)) + *(info.diffuse_end(d)-info.diffuse_start(d)); + + info.acceptance=min(1.0, (exp(info.green_backward)/info.green_forward) + *guidingwf->getTrialRatio(p2.lap, p1.lap) + *guidingwf->getTrialRatio(p2.lap, p1.lap)); + + + //trying a better gf + //info.green_forward*=info.acceptance;///oldinfo.acceptance; + //-------- + + + info.accepted=0; + doublevar ratio=guidingwf->getTrialRatio(p1.lap,p2.lap)*p1.sign*p2.sign; + if(ratio < 0) cout << "crossed node " << endl; + + return info.acceptance; +} + + +//---------------------------------------------------------------------- +/*! +From x to y in the trace + */ +doublevar Split_sampler::get_acceptance(Guiding_function * guidingwf, + int x, int y) { + //indent = indent + " "; + + doublevar ratio=guidingwf->getTrialRatio(trace(y).lap, + trace(x).lap)*trace(x).sign + *trace(y).sign; + + if(restrict_nodes && ratio < 0) return 0; + + ratio=ratio*ratio; + //cout << indent << "*********" << endl; + //cout << indent << "ratio x " << x << " y " << y << " : " << ratio << endl; + + int dir=1; + if(y-x < 0) { + dir=-1; + } + + + doublevar prob_transition=0; //exponent of transition probability + //We use the current move as well(thus y+1 or x-1) + for(int i=x+dir; i != y+dir; i+= dir ) { + int dist=abs(x-i); + //cout << indent << "transition from " << y << " to " << y-dir*dist + // << " and " << x << " to " << x+dir*dist << " using " << dist + // << " (timestep " << timesteps(dist) + // << endl; + + doublevar num=transition_prob(y,y-dir*dist,timesteps(dist), dtype); + doublevar den=transition_prob(x,x+dir*dist,timesteps(dist), dtype); + prob_transition+=num-den; + //cout << indent << "num " << num << " den " << den << " num-den " << num-den << endl; + } + + doublevar reject_prob_den=1; //denominator(forward rejections) + doublevar reject_prob_num=1; //numerator(backward rejection) + for(int i=x+dir; i != y; i+=dir) { + int dist=abs(x-i); + //cout << indent << "->acceptance from " << y << " to " << y-dir*dist + // << endl; + reject_prob_num*=1-get_acceptance(guidingwf, y, y-dir*dist); + //cout << indent << "->over " << x << " to " << x+dir*dist << endl; + reject_prob_den*=1-get_acceptance(guidingwf, x,x+dir*dist); + } + + doublevar acc=0; + + const doublevar tiny=1e-10; + if(fabs(reject_prob_den) < tiny) { + if(fabs(reject_prob_num) < tiny) acc=0; + else { + //If we have a zero on the denominator, we know that + //alpha(y->x)=1/alpha(x->y) must be zero, so therefore the acceptance is 1 + acc=1; + //cout << indent << "warn:denominator zero : " << reject_prob_den << " num " + // << reject_prob_num << endl; + //error("problem in split_sample; denominator zero"); + } + } + else { + //cout << indent << "prob_transition " << prob_transition + // << " " << reject_prob_num << " " << reject_prob_den << endl; + acc=ratio*exp(prob_transition)*reject_prob_num/reject_prob_den; + } + //cout << indent << "acceptance " << acc << endl; + //indent.erase(indent.end()-1); + //indent.erase(indent.end()-1); + + return min(1.0,acc); + +} + +#include "ulec.h" +#include "Wavefunction_data.h" + + +//---------------------------------------------------------------------- +int Split_sampler::split_driver(int e, + Sample_point * sample, + Wavefunction * wf, + Wavefunction_data * wfdata, + Guiding_function * guidingwf, + int depth, + Dynamics_info & info, + doublevar & efftimestep) { + + //cout << "primary " << endl; + assert(trace.GetDim(0) >= depth); + assert(recursion_depth_ <= timesteps.GetDim(0)); + + if(depth > recursion_depth_) return 0; + + Array1 c_olddrift(3); + Array1 c_newdrift(3); + + c_olddrift=trace(0).drift; + limDrift(c_olddrift, timesteps(depth), dtype); + + int ndim=sample->ndim(); + + //cout << "drift " << c_olddrift(0) << " " + // << c_olddrift(1) << " " << c_olddrift(2) << endl; + //info.drift_pos.Resize(3); + + for(int d=0; d< ndim; d++) { + trace(depth).gauss(d)=rng.gasdev(); + trace(depth).translation(d)=trace(depth).gauss(d)*sqrt(timesteps(depth)) + + c_olddrift(d); + trace(depth).pos(d)=trace(0).pos(d) + + trace(depth).translation(d); + + + } + + doublevar diffusion_rate=0; + for(int d=0; d< ndim; d++) + diffusion_rate+=trace(depth).gauss(d)*timesteps(depth)*trace(depth).gauss(d);; + + + sample->translateElectron(e, trace(depth).translation); + trace(depth).sign=sample->overallSign(); + + if(wfdata->supports(laplacian_update) ) { + wf->updateLap(wfdata, sample); + wf->getLap(wfdata, e, trace(depth).lap); + } + else { + wf->updateForceBias(wfdata, sample); + wf->getForceBias(wfdata, e, trace(depth).lap); + } + + guidingwf->getLap(trace(depth).lap, trace(depth).drift); + + //indent=""; + //cout << "#######################acceptance for " << depth << endl; + doublevar acc=get_acceptance(guidingwf, 0,depth); + //cout << "acceptance for " << depth << " : " << acc << endl; + + info.green_forward=exp(transition_prob(0,depth,timesteps(depth), dtype)); + //cout << "green_forward " << info.green_forward << endl; + info.green_backward=exp(transition_prob(depth,0,timesteps(depth),dtype)); + info.diffusion_rate=diffusion_rate; + info.acceptance=acc; + info.orig_pos=trace(0).pos; + info.diffuse_start.Resize(3); + for(int d=0; d< ndim; d++) + info.diffuse_start(d)=trace(0).pos(d)+c_olddrift(d); + info.diffuse_end=trace(depth).pos; + info.new_pos=trace(depth).pos; + info.gauss=trace(depth).gauss; + + info.symm_gf=exp(linear_symm(trace(0), trace(depth), timesteps(depth), dtype)); + info.resample_gf=info.symm_gf; + //trying a better gf + //info.green_forward*=info.acceptance; + //-------- + + + if (acc+rng.ulec() > 1.0) { + info.accepted=1; + return depth; + } + else { + info.accepted=0; + + Array1 rev(3,0.0); + for(int d=0; d< 3; d++) rev(d)=-trace(depth).translation(d); + sample->translateElectron(e,rev); + + depth++; + + return split_driver(e,sample, wf, wfdata, guidingwf, + depth, info, efftimestep); + } + +} + + +//---------------------------------------------------------------------- + +int Split_sampler::sample(int e, + Sample_point * sample, + Wavefunction * wf, + Wavefunction_data * wfdata, + Guiding_function * guidingwf, + Dynamics_info & info, + doublevar & efftimestep) { + + if(! wfStore.isInitialized()) + wfStore.initialize(sample, wf); + + wf->updateLap(wfdata, sample); + wfStore.saveUpdate(sample, wf, e); + trace.Resize(recursion_depth_+1); + + for(int i=0; i < recursion_depth_+1; i++) { + trace(i).lap.Resize(wf->nfunc(), 5); + } + + timesteps.Resize(recursion_depth_+1); + timesteps=efftimestep; + + + for(int i=2; i< recursion_depth_+1; i++) { + timesteps(i)=efftimestep/pow(divide_,i-1); + } + + int depth=0; + + sample->getElectronPos(e,trace(depth).pos); + wf->getLap(wfdata, e, trace(depth).lap); + trace(depth).sign=sample->overallSign(); + + guidingwf->getLap(trace(depth).lap, trace(depth).drift); + depth++; + + + int acc=split_driver(e, sample, wf, wfdata, guidingwf, depth, + info, efftimestep); + + if(acc > 0) { + acceptances(acc-1)++; + for(int i=0; i< acc; i++) { + tries(i)++; + } + } + else { + for(int i=0; i< recursion_depth_; i++) { + tries(i)++; + } + } + + if(!acc) { + wfStore.restoreUpdate(sample, wf, e); + } + //cout << "-----------split done" << endl; + return acc; +} + + +//---------------------------------------------------------------------- + + +void Split_sampler::showStats(ostream & os) { + doublevar totacc=0; + for(int i=0; i< recursion_depth_; i++) { + totacc+=acceptances(i); + } + + os << "Total acceptance " << totacc/tries(0) << endl; + for(int i=0; i< recursion_depth_; i++) { + os << "accept_level" << i << " " << acceptances(i)/tries(i) + << " tries " << tries(i) << endl; + } +} + +//---------------------------------------------------------------------- + + +void Split_sampler::resetStats() { + acceptances=0; + tries=0; +} +//---------------------------------------------------------------------- +//###################################################################### + +void UNR_sampler::showStats(ostream & os) { + os << "acceptance " << acceptance/tries << endl; +} + +void UNR_sampler::resetStats() { + acceptance=0; + tries=0; +} + + +void UNR_sampler::getDriftEtc(Point & pt, Sample_point * sample, + doublevar tstep, int e, + doublevar & exponent, + //!< exponent at which to do an exponential move + doublevar & probability, + //!< probability to do an exponential move + Array1 & rnuc + //!< distance array for closest ion + ) { + Array1 z(5); + Array1 dist(5); + int closest_ion=-1; + z(0)=1e8; + int nions=sample->ionSize(); + sample->updateEIDist(); + for(int at=0; at< nions; at++) { + sample->getEIDist(e,at,dist); + if(dist(0) < z(0)) { + z=dist; + closest_ion=at; + } + } + + assert(closest_ion!=-1); + doublevar charge=sample->getIonCharge(closest_ion); + rnuc.Resize(3); + //Here we back out the nucleus position from the distance, + //which is the best way to do it for periodic systems. + //There may be a small bug here if the periodic cell is really + //small and we can traverse it in one step..there may be extra + //rejections. It shouldn't generally be a concern, though. + for(int d=0; d< 3; d++) { + rnuc(d)=pt.pos(d)-z(d+2); + } + + //the exponent for the exponential moves + exponent=sqrt(charge*charge+1/tstep); + + doublevar vhatdotzhat=0; + doublevar driftmag=0; + for(int d=0; d< 3; d++) driftmag+=pt.drift(d)*pt.drift(d); + driftmag=sqrt(driftmag); + for(int d=0;d < 3; d++) { + vhatdotzhat+=z(d+2)*pt.drift(d)/(driftmag*z(0)); + //cout << "vhat " << vhatdotzhat << endl; + } + + //magic numbers!! taken from UNR as usual + doublevar a=.5*(1+vhatdotzhat) + +charge*charge*z(0)*z(0)/(10*(4+charge*charge*z(0)*z(0))); + + doublevar prefac=(-1+sqrt(1+2*a*driftmag*driftmag*tstep)) + /(a*driftmag*driftmag*tstep); + + driftmag=0; + for(int d=0;d < 3; d++) { + pt.drift(d)*=prefac; + driftmag+=pt.drift(d)*pt.drift(d); + } + driftmag=sqrt(driftmag); + + doublevar vz=vhatdotzhat*driftmag; + Array1 rho(3); + rho=0; + doublevar rhomag=0; + for(int d=0; d< 3; d++) { + rho(d)=pt.drift(d)-vz*z(d+2)/z(0); + rhomag+=rho(d)*rho(d); + } + rhomag=sqrt(rhomag); + doublevar zpp=max(z(0)+vz*tstep,0.0); + doublevar rhoscale=2*tstep*zpp/(z(0)+zpp); + for(int d=0;d < 3; d++) { + pt.drift(d)=rnuc(d)+rhoscale*rho(d)+zpp*z(d+2)/z(0); + } + + probability=0.5*erfc((z(0)+vz*tstep)/sqrt(2*tstep)); + +} + +//---------------------------------------------------------------------- + +doublevar UNRgreenfunc(Point & pt1, Point & pt2, + doublevar tstep, + doublevar exponent, doublevar prob, + Array1 & rnuc) { + assert(rnuc.GetDim(0)==3); + doublevar gaussmov=0; + doublevar expmov=0; + for(int d=0; d< 3; d++) { + gaussmov+=(pt2.pos(d)-pt1.drift(d))*(pt2.pos(d)-pt1.drift(d)); + expmov+=(pt2.pos(d)-rnuc(d))*(pt2.pos(d)-rnuc(d)); + //cout << "rnuc " << rnuc(d) << " pt2 " << pt2.pos(d) << " pt1 " << pt1.drift(d) << endl; + } + doublevar gaussnorm=sqrt(8*pi*pi*pi*tstep*tstep*tstep); + gaussnorm=1/gaussnorm; + + + return prob*exponent*exponent*exponent*exp(-2*exponent*sqrt(expmov))/pi + + (1-prob)*exp(-gaussmov/(2*tstep))*gaussnorm; +} +//---------------------------------------------------------------------- + +int UNR_sampler::sample(int e, Sample_point * sample, + Wavefunction * wf, Wavefunction_data * wfdata, + Guiding_function * guidewf, + Dynamics_info & info, + doublevar & tstep) { + + tries++; + Point p1; p1.lap.Resize(wf->nfunc(), 5); + + wf->updateLap(wfdata, sample); + sample->getElectronPos(e,p1.pos); + wf->getLap(wfdata, e, p1.lap); + p1.sign=sample->overallSign(); + guidewf->getLap(p1.lap, p1.drift); + + //Starting determination of move.. + //using (close to) the notation of UNR + Array1 rnuc(3); + doublevar prob,exponent; + + //cout << "p1.drift "; write_array(cout,p1.drift); cout << endl; + getDriftEtc(p1,sample,tstep,e, exponent,prob,rnuc); + + //cout << "p1.pos "; + //write_array(cout, p1.pos); + //cout << endl; + //cout << "p1.drift "; write_array(cout,p1.drift); cout << endl; + + + Point p2; p2.lap.Resize(wf->nfunc(),5); + //cout << "prob " << prob << endl; + if(prob+rng.ulec() > 1.0) { + //cout << "doing exponential move "<< endl; + doublevar r=ranr2exponential()/(2*exponent); + doublevar theta=rancos(); + doublevar phi=2*pi*rng.ulec(); + p2.pos=rnuc; + p2.pos(0)+=r*sin(theta)*cos(phi); + p2.pos(1)+=r*sin(theta)*sin(phi); + p2.pos(2)+=r*cos(theta); + + } + else { + //cout << " do a gaussian move." << endl; + for(int d=0; d< 3; d++) { + p2.pos(d)=p1.drift(d)+sqrt(tstep)*rng.gasdev(); + } + } + + //cout << "p2.pos "; write_array(cout,p2.pos); cout << endl; + + Array1 translate(3); + for(int d=0; d< 3; d++) translate(d)=p2.pos(d)-p1.pos(d); + sample->translateElectron(e,translate); + wf->updateLap(wfdata, sample); + wf->getLap(wfdata, e, p2.lap); + p2.sign=sample->overallSign(); + guidewf->getLap(p2.lap, p2.drift); + + Array1 rnucp(3); + doublevar probp,exponentp; + getDriftEtc(p2,sample,tstep,e,exponentp,probp,rnucp); + + //cout << "p2.drift "; write_array(cout,p2.drift); cout << endl; + + + doublevar ratio=guidewf->getTrialRatio(p2.lap,p1.lap) + *p2.sign*p1.sign; + + doublevar acc=ratio*ratio*UNRgreenfunc(p2,p1,tstep,exponentp,probp,rnucp) + /UNRgreenfunc(p1,p2,tstep,exponent,prob,rnuc); + + //cout << "forward " << UNRgreenfunc(p2,p1,tstep,exponentp,probp,rnucp) << endl; + //cout << "acceptance " << acc << " ratio " << ratio + // << "forward " << UNRgreenfunc(p2,p1,tstep,exponentp,probp,rnucp) + // << " backward " << UNRgreenfunc(p1,p2,tstep,exponent,prob,rnuc) << endl; + + if(restrict_nodes && ratio < 0) { + //cout << "stopping nodal crossing " << endl; + acc=0; + } + + //cout << "acceptance " << acc << endl; + //cout <<"##############################\n"; + + info.diffusion_rate=0; + for(int d=0;d < 3; d++) { + info.diffusion_rate+=(p2.pos(d)-p1.drift(d))*(p2.pos(d)-p1.drift(d))*tstep; + } + info.acceptance=acc; + info.orig_pos=p1.pos; + info.diffuse_start=p1.drift; + info.diffuse_end=p2.pos; + info.new_pos=p2.pos; + + if(acc+rng.ulec()>1.0) { + info.accepted=1; + acceptance++; + return 1; + } + else { + sample->setElectronPos(e,p1.pos); + info.accepted=0; + return 0; + } + + +} + +//---------------------------------------------------------------------- +//###################################################################### +void SRK_dmc::read(vector & words) { + unsigned int pos=0; + if(haskeyword(words, pos=0, "RESAMPLE")) + resample=1; + else resample=0; + + readvalue(words, pos=0, resample_tol, "RESAMPLE_TOL"); + + string drifttype; + if(readvalue(words, pos=0, drifttype, "DRIFT_TYPE")) { + if(drifttype=="CYRUS") + setDriftType(drift_cyrus); + else if(drifttype=="CUTOFF") + setDriftType(drift_cutoff); + else error("Didn't understand DRIFT_TYPE ", drifttype); + } + + +} + + + + +doublevar SRK_dmc::greenFunction(Sample_point * sample, Wavefunction * wf, + Wavefunction_data * wfdata, + Guiding_function * guidingwf, + int e, + Array1 & newpos, + doublevar timestep, + Dynamics_info & info, Dynamics_info & oldinfo) { + + //cout << "auxillary " << endl; + //drift_type dtype=drift_cyrus; + assert(newpos.GetDim(0) >= 3); + wf->updateLap(wfdata, sample); + Point p1; p1.lap.Resize(wf->nfunc(), 5); + p1.sign=sample->overallSign(); + int ndim=sample->ndim(); + + sample->getElectronPos(e,p1.pos); + wf->getLap(wfdata, e, p1.lap); + guidingwf->getLap(p1.lap, p1.drift); + + + for(int d=0; d< ndim; d++) + p1.translation(d)=newpos(d)-p1.pos(d); + + sample->translateElectron(e,p1.translation); + wf->updateLap(wfdata, sample); + Point p2; p2.lap.Resize(wf->nfunc(), 5); + p2.sign=sample->overallSign(); + p2.pos=newpos; + wf->getLap(wfdata, e, p2.lap); + guidingwf->getLap(p2.lap, p2.drift); + + + info.green_forward=exp(runge_kutta_resamp(p1, p2, timestep, dtype)); + + info.symm_gf=exp(runge_kutta_symm(p1, p2, timestep, dtype)); + info.green_backward=exp(transition_prob(p2,p1, timestep, dtype)); + + //cout << "gf:elec " << e << " new wfval " << p2.lap.amp(0,0) << endl; + info.diffuse_start=p1.drift; + limDrift(info.diffuse_start, timestep, dtype); + for(int d=0; d< ndim; d++) { + //cout << "secondary drift " << info.drift_pos(d) << endl; + info.diffuse_start(d)+=p1.pos(d); + } + info.diffuse_end=newpos; + info.orig_pos=p1.pos; + info.new_pos=newpos; + info.diffusion_rate=0; + for(int d=0; d< ndim; d++) + info.diffusion_rate+=(info.diffuse_end(d)-info.diffuse_start(d)) + *(info.diffuse_end(d)-info.diffuse_start(d)); + + info.acceptance=min(1.0, (exp(info.green_backward)/info.green_forward) + *guidingwf->getTrialRatio(p2.lap, p1.lap) + *guidingwf->getTrialRatio(p2.lap, p1.lap)); + info.accepted=0; + doublevar ratio=guidingwf->getTrialRatio(p1.lap,p2.lap)*p1.sign*p2.sign; + if(ratio < 0) cout << "crossed node " << endl; + + return info.acceptance; +} + +//---------------------------------------------------------- + +int SRK_dmc::rk_step(int e, + Sample_point * sample, + Wavefunction * wf, + Wavefunction_data * wfdata, + Guiding_function * guidingwf, + Dynamics_info & info, + doublevar & timestep, Array1 & trace + ) { + + + //drift_type dtype=drift_cyrus; + assert(trace.GetDim(0)==3); + + Array1 c_olddrift=trace(0).drift; + limDrift(c_olddrift,timestep, dtype); + int ndim=sample->ndim(); + + for(int d=0; d< ndim; d++) { + trace(1).translation(d)=trace(0).gauss(d)*sqrt(timestep) + + c_olddrift(d); + trace(1).pos(d)=trace(0).pos(d) + + trace(1).translation(d); + } + + info.diffusion_rate=0; + for(int d=0; d< ndim; d++) + info.diffusion_rate+=trace(0).gauss(d)*timestep*trace(0).gauss(d);; + + sample->translateElectron(e, trace(1).translation); + trace(1).sign=sample->overallSign(); + wf->updateLap(wfdata, sample); + wf->getLap(wfdata, e, trace(1).lap); + guidingwf->getLap(trace(1).lap, trace(1).drift); + Array1 c_newdrift=trace(1).drift; + limDrift(c_newdrift,timestep, dtype); + + for(int d=0; d< 3; d++) { + trace(2).gauss(d)=trace(0).gauss(d); + trace(2).translation(d)=.5*(c_newdrift(d)+c_olddrift(d)) + +trace(0).gauss(d)*sqrt(timestep)-trace(1).translation(d); + trace(2).pos(d)=trace(1).pos(d)+trace(2).translation(d); + } + + sample->translateElectron(e,trace(2).translation); + trace(2).sign=sample->overallSign(); + wf->updateLap(wfdata, sample); + wf->getLap(wfdata, e, trace(2).lap); + guidingwf->getLap(trace(2).lap, trace(2).drift); + + info.symm_gf=exp(runge_kutta_symm(trace(0), trace(2), timestep, dtype)); + info.resample_gf=exp(runge_kutta_resamp(trace(0), trace(2), timestep, dtype)); + info.green_forward=exp(-info.diffusion_rate/(2*timestep)); + //cout << "symm " << info.symm_gf << " forward " << info.green_forward + // << " ratio " << info.symm_gf/info.green_forward << endl; + info.green_backward=transition_prob(trace(2),trace(0),timestep,dtype); + info.acceptance=1.0; + info.orig_pos=trace(0).pos; + info.new_pos=trace(2).pos; + + return 1; + + } + + +//---------------------------------------------------------------------- + +int SRK_dmc::sample(int e, + Sample_point * sample, + Wavefunction * wf, + Wavefunction_data * wfdata, + Guiding_function * guidingwf, + Dynamics_info & info, + doublevar & timestep + ) { + + //drift_type dtype=drift_cyrus; + tries++; + int ntrace=40; + Array1 trace(ntrace); + for(int i=0; i < ntrace; i++) { + trace(i).lap.Resize(wf->nfunc(), 5); + } + for(int d=0; d< 3; d++) { + trace(0).gauss(d)=rng.gasdev(); + } + + + wf->updateLap(wfdata, sample); + sample->getElectronPos(e,trace(0).pos); + wf->getLap(wfdata, e, trace(0).lap); + trace(0).sign=sample->overallSign(); + guidingwf->getLap(trace(0).lap, trace(0).drift); + + //cout << "initial rk step " << endl; + rk_step(e,sample, wf, wfdata, guidingwf, info, timestep, trace); + + /* + int pos=3; + Array1 err(ntrace,0.0); + err(2)=fabs(info.resample_gf/info.green_forward -1); + while(resample && + fabs(info.resample_gf/info.green_forward-1) > resample_tol && + pos < ntrace) { + //cout << "big error " << info.symm_gf/info.green_forward << endl; + Array1 newdrift(3), orig_drift(3); + orig_drift=trace(0).drift; + newdrift=trace(pos-1).drift; + limDrift(orig_drift, timestep, dtype); + limDrift(newdrift, timestep, dtype); + for(int d=0; d< 3; d++) { + trace(pos).gauss(d)=trace(0).gauss(d); + trace(pos).translation(d)=.5*(newdrift(d)+orig_drift(d)) + +trace(0).gauss(d)*sqrt(timestep);//-trace(pos-1).translation(d); + trace(pos).pos(d)=trace(0).pos(d)+trace(pos).translation(d); + } + + sample->setElectronPos(e,trace(pos).pos); + trace(pos).sign=sample->overallSign(); + wf->updateLap(wfdata, sample); + wf->getLap(wfdata, e, trace(pos).lap); + guidingwf->getLap(trace(pos).lap, trace(pos).drift); + + info.symm_gf=exp(runge_kutta_symm(trace(0), trace(pos), timestep, dtype)); + info.resample_gf=exp(runge_kutta_resamp(trace(0), trace(pos), + timestep, dtype)); + info.new_pos=trace(pos).pos; + + err(pos)=fabs(info.resample_gf/info.green_forward-1); + pos++; + } + + if(pos==ntrace) { + nbottom++; + int bestindex=2; doublevar bestratio=err(bestindex); + for(int i=2; i < ntrace; i++) { + if(err(i) < bestratio) { bestindex=i; bestratio=err(i); } + } + if(bestindex!=pos-1) { + //cout << " large remaining error "; write_array(cout, err); cout << endl; + //cout << "best index " << bestindex << endl; + + + info.symm_gf=exp(runge_kutta_symm(trace(0), trace(bestindex), + timestep, dtype)); + info.resample_gf=exp(runge_kutta_resamp(trace(0), trace(bestindex), + timestep, dtype)); + info.new_pos=trace(bestindex).pos; + sample->setElectronPos(e,trace(bestindex).pos); + pos=bestindex+1; + } + } + */ + //if(pos > 3) cout << "final ratio " << info.symm_gf/info.green_forward << endl; + + doublevar ratio=guidingwf->getTrialRatio(trace(2).lap, + trace(0).lap) + *trace(0).sign*trace(2).sign; + + + info.diffuse_start.Resize(3); + for(int d=0; d< 3; d++) + info.diffuse_start(d)=trace(2).pos(d)-sqrt(timestep)*trace(0).gauss(d); + + info.diffuse_end=trace(2).pos; + + //retries+=pos-3; + if(ratio < 0) { + //cout << "rejecting node crossing " << endl; + info.accepted=0; + sample->setElectronPos(e, trace(0).pos); + wf->updateLap(wfdata, sample); + return 0; + } + acceptances++; + info.accepted=1; + return 1; +} + + diff --git a/src/method/Split_sample.h b/src/method/Split_sample.h new file mode 100644 index 00000000..af066aa2 --- /dev/null +++ b/src/method/Split_sample.h @@ -0,0 +1,329 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ + + +#ifndef SPLIT_SAMPLE_H_INCLUDED +#define SPLIT_SAMPLE_H_INCLUDED + +#include "Qmc_std.h" +#include "Wavefunction.h" +#include "System.h" +#include "Sample_point.h" +#include "Guiding_function.h" +struct Point { + Array1 drift; //!< total drift(deterministic move) + Array1 pos; + doublevar sign; //!< sign from the sample_point + Wf_return lap; + Array1 gauss; //!< gaussian part that generated this move + Array1 translation; //!< total translation of the move + + Point() { + drift.Resize(3); + pos.Resize(3); + gauss.Resize(3); + translation.Resize(3); + translation=0; + gauss=0; + pos=0; drift=0; + } +}; + +enum drift_type {drift_cutoff, drift_cyrus}; + +struct Dynamics_info { + doublevar green_forward; + doublevar green_backward; + Array1 orig_pos; + Array1 gauss; //!< gaussian random numbers used for the move + Array1 new_pos; + Array1 diffuse_start; //!< position of start of diffusion + Array1 diffuse_end; //!< position of end of diffusion + doublevar acceptance; + int accepted; + //Array2 newlap; + doublevar diffusion_rate; + + doublevar symm_gf; //!< ratio versus symmetrized green's function + doublevar resample_gf; //!< green's function that we want to resample + Dynamics_info() { + symm_gf=1; + } +}; + + +class Dynamics_generator { + public: + virtual void read(vector & words)=0; + virtual int sample(int e, + Sample_point * sample, + Wavefunction * wf, + Wavefunction_data * wfdata, + Guiding_function * guidewf, + Dynamics_info & info, + doublevar & efftimestep + )=0; + + + //returns the acceptance ratio + virtual doublevar greenFunction(Sample_point * sample, Wavefunction * wf, + Wavefunction_data * wfdata, Guiding_function * guidewf, + int e, + Array1 & newpos, doublevar timestep, + Dynamics_info & info, Dynamics_info & oldinfo); + + virtual void enforceNodes(int i) { + assert(i==0 || i==1); + restrict_nodes=i; + }; + + virtual int showinfo(string & indent, ostream & os)=0; + virtual void showStats(ostream & os)=0; + virtual void resetStats()=0; + + + virtual ~Dynamics_generator() {} + protected: + int restrict_nodes; +}; + + +/*! +\todo +Make this average the acceptance ratio over all processors + + */ +class Split_sampler:public Dynamics_generator { + public: + + Split_sampler() { + divide_=1.0; + recursion_depth_=1; + restrict_nodes=0; + dtype=drift_cyrus; + //drift_2pt=0; + + acceptances.Resize(recursion_depth_); + tries.Resize(recursion_depth_); + acceptances=0; + tries=0; + } + + void read(vector & words); + + void setDriftType(drift_type dtype_) { + dtype=dtype_; + } + + int showinfo(string & indent, ostream & os) { + os << indent << "recursion depth " << recursion_depth_ << endl; + os << indent << "timestep divider " << divide_ << endl; + if(restrict_nodes) os << indent << "restricting node crossings" << endl; + os << indent << "drift type " << dtype << endl; + return 1; + } + + void setDivider(doublevar divide) { + divide_=divide; + } + + void setRecursionDepth(int depth) { + recursion_depth_=depth; + acceptances.Resize(recursion_depth_); + tries.Resize(recursion_depth_); + acceptances=0; + tries=0; + } + + int getRecursionDepth() { + return recursion_depth_; + } + + /*! + Returns the step that was accepted, or 0 if + there was a rejection. + */ + int sample(int e, + Sample_point * sample, + Wavefunction * wf, + Wavefunction_data * wfdata, + Guiding_function * guidewf, + Dynamics_info & info, + doublevar & efftimestep + ); + int split_driver(int e, + Sample_point * sample, + Wavefunction * wf, + Wavefunction_data * wfdata, + Guiding_function * guidewf, + int depth, + Dynamics_info & info, + doublevar & efftimestep); + + //virtual doublevar greenFunction(Sample_point * sample, Wavefunction * wf, + // Wavefunction_data * wfdata, Guiding_function * guidewf, + // int e, + // Array1 & newpos, doublevar timestep, + // Dynamics_info & info); + + doublevar get_acceptance(Guiding_function * guidingwf, int x, int y); + + void showStats(ostream & os); + void resetStats(); + private: + + doublevar transition_prob(int point1, int point2, + doublevar timestep, + drift_type dtype); + + drift_type dtype; + Array1 trace; + Array1 timesteps; + int recursion_depth_; + doublevar divide_; + + Array1 acceptances; + Array1 tries; + + string indent; //for debugging.. + Storage_container wfStore; +}; + + +doublevar transition_prob(Point & point1, Point & point2, + doublevar timestep, + drift_type dtype); + + +/*! +sampler from Umrigar, Nightingale, and Runge. +JCP 99 2865 (1993) + */ +class UNR_sampler:public Dynamics_generator { + public: + + UNR_sampler() { + restrict_nodes=0; + acceptance=0; + tries=0; + } + + void read(vector & words) {} + + void setDriftType(drift_type dtype_) { + } + + int showinfo(string & indent, ostream & os) { + os << "UNR sampler " << endl; + if(restrict_nodes) os << indent << "restricting node crossings" << endl; + return 1; + } + + void getDriftEtc(Point & pt, Sample_point * sample, + doublevar tstep, int e, + doublevar & exponent, //!< exponent at which to do an exponential move + doublevar & probability,//!< probability to do an exponential move + Array1 & rnuc //! & words); + virtual doublevar greenFunction(Sample_point * sample, Wavefunction * wf, + Wavefunction_data * wfdata, Guiding_function * guidewf, + int e, Array1 & newpos, doublevar timestep, + Dynamics_info & info, Dynamics_info & oldinfo); + + int showinfo(string & indent, ostream & os) { + os << indent << "Stochastic Runge-Kutta algorithm (PRA 45 600) " << endl; + return 1; + } + void setDriftType(drift_type dtype_) { + dtype=dtype_; + } + + void showStats(ostream & os) { + os << "acceptance " << acceptances/tries << " average retries " << doublevar(retries)/doublevar(tries) << endl; + os << "nbottom " << nbottom << endl; + } + void resetStats() { + acceptances=0; tries=0; + retries=0; nbottom=0; + } + private: + int rk_step(int e, Sample_point * sample, + Wavefunction * wf,Wavefunction_data * wfdata, + Guiding_function * guidingwf, Dynamics_info & info, + doublevar & timestep, Array1 & trace); + //Array1 trace; + doublevar acceptances; + long int tries; + long int retries; + long int nbottom; //!< number of times we bottom out with the retries + int resample; //!< whether to try to improve the approximation to the symmetric green's function + doublevar resample_tol; //!< tolerance for the ratio of green_symm/green_forward + + drift_type dtype; + + +}; + + + +int allocate(vector & words, Dynamics_generator *& sam); +void limDrift(Array1 & drift, doublevar tau, drift_type dtype); + + +#endif //SPLIT_SAMPLE_H_INCLUDED + +//---------------------------------------------------------------------- + + diff --git a/src/method/Test_method.cpp b/src/method/Test_method.cpp new file mode 100644 index 00000000..84447f84 --- /dev/null +++ b/src/method/Test_method.cpp @@ -0,0 +1,417 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ + +#include "Test_method.h" +#include "qmc_io.h" +#include "Program_options.h" +#include "System.h" +#include "Basis_function.h" +void Test_method::read(vector words, + unsigned int & pos, + Program_options & options) +{ + + + //--Set up variables + + + readvalue(words, pos=0, readconfig, "READCONFIG"); + canonical_filename(readconfig); + + sysprop=NULL; + allocate(options.systemtext[0], sysprop); + + nelectrons=sysprop->nelectrons(0)+sysprop->nelectrons(1); + + + wfdata=NULL; + if(options.twftext.size() > 0) { + cout << "wfdata allocate" << endl; + allocate(options.twftext[0], sysprop, wfdata); + } + + sysprop->generatePseudo(options.pseudotext, psp); + + vector btxt; + basis=NULL; + if(readsection(words, pos=0, btxt, "BASIS")) { + allocate(btxt,basis); + } + + vector backtxt; + + if(haskeyword(words, pos=0, "PLOT_EE_CUSP")) + plot_cusp=1; + else + plot_cusp=0; + + vector derstxt; + if(readsection(words, pos=0, derstxt, "TEST_PARMS_DERS")){ + parms_ders=1; + if(haskeyword(derstxt, pos=0, "HESSIAN")) + testhessian=1; + else + testhessian=0; + if(!readvalue(derstxt, pos=0, nparms_start, "NPARMS_START")) + nparms_start=0; + if(!readvalue(derstxt, pos=0, nparms_end, "NPARMS_END")) + nparms_end=wfdata->nparms(); + if(nparms_start>=wfdata->nparms() || nparms_end > wfdata->nparms()) + error("Invalid NPARMS_START/NPARMS_END supplied"); + } + else{ + parms_ders=0; + testhessian=0; + } + + cout << "done setup " << endl; +} + +int Test_method::showinfo(ostream & os) +{ + os << "#############Testing#################\n"; + wfdata->showinfo(os); + //sysprop->showinfo(os); + + return 1; +} + + +#include "Split_sample.h" +#include "Guiding_function.h" + + +void check_numbers(doublevar num1,doublevar num2, ostream & os, + doublevar tol=1e-5) { + string ok="OK"; + + //make sure you are not divinding by zero + //doublevar tol2=tol*tol; + doublevar norm=num2; + if(fabs(norm) tol) ok="FAILED"; + os << num1 << " " << num2 << " " << ok << endl; +} + +/*! + +*/ +void Test_method::run(Program_options & options, ostream & output) +{ + + cout << "in run " << endl; + + cout.precision(15); + + + Wavefunction * mywf=NULL; + Sample_point * sample=NULL; + + wfdata->generateWavefunction(mywf); + sysprop->generateSample(sample); + + if(readconfig!="") { + ifstream checkfile(readconfig.c_str()); + if(!checkfile) + error("Couldn't open ", readconfig); + string dummy; + while(checkfile >> dummy) { + if(read_config(dummy, checkfile, sample)) break; + } + } + + sample->attachObserver(mywf); + Array1 first_calc(nelectrons); + cout <<"**********updateLap " << endl; + mywf->updateLap(wfdata, sample); + cout << "******done " << endl; + string indent=""; + for(int i=0; i< nelectrons; i++) { + first_calc(i).Resize(mywf->nfunc(),5); + mywf->getLap(wfdata,i, first_calc(i)); + //first_calc(i).write(indent,cout); + } + + cout << "#############checking derivatives" << endl; + + const doublevar del=1e-6; + Array1 epos(3); + Array1 new_epos(3); + Wf_return test_wf(mywf->nfunc(), 5); + for(int e=0; e < nelectrons; e++) { + cout << "#######################\n"; + cout << "####electron " << e << " #####" << endl; + cout << "#######################\n"; + sample->getElectronPos(e,epos); + doublevar lap=0; + for(int d=0;d < 3; d++) { + new_epos=epos; + new_epos(d)+=del; + sample->setElectronPos(e, new_epos); + //mywf->notify(all_electrons_move,0); + mywf->updateLap(wfdata, sample); + mywf->getLap(wfdata,e,test_wf); + //mywf->updateVal(wfdata, sample); + //mywf->getVal(wfdata,e,test_wf); + doublevar ratio=exp(test_wf.amp(0,0)-first_calc(0).amp(0,0)); + doublevar derivative=(ratio-1)/del; + lap+=(test_wf.amp(0,d+1)*ratio-first_calc(e).amp(0,d+1))/del; + check_numbers(derivative,first_calc(e).amp(0,d+1),cout); + } + cout << "laplacian " << endl; + check_numbers(lap,first_calc(e).amp(0,4),cout); + sample->setElectronPos(e,epos); + mywf->updateVal(wfdata, sample); + } + + + + if(basis!=NULL) { + Array2 finite_der(basis->nfunc(),3,0.0); + Array3 finite_hessian(basis->nfunc(),3,3,0.0); + Array2 hessian(basis->nfunc(),10); + Array2 tmp_hess(basis->nfunc(),10); + sample->updateEIDist(); + Array1 dist(5); + sample->getEIDist(0,0,dist); + basis->calcHessian(dist,hessian); + Array1 epos(3); + Array1 npos(3); + sample->getElectronPos(0,epos); + for(int d=0; d< 3; d++) { + npos=epos; + npos(d)+=del; + sample->setElectronPos(0,npos); + sample->updateEIDist(); + sample->getEIDist(0,0,dist); + basis->calcHessian(dist,tmp_hess); + for(int f=0; f< basis->nfunc(); f++) { + + finite_der(f,d)=(tmp_hess(f,0)-hessian(f,0))/del; + for(int d1=0; d1 < 3; d1++) { + finite_hessian(f,d,d1)=(tmp_hess(f,d1+1)-hessian(f,d1+1))/del; + } + } + } + + for(int f=0; f< basis->nfunc(); f++) { + cout << "val " << hessian(f,0) << endl; + cout << "analytic finite diff\n"; + check_numbers(hessian(f,1),finite_der(f,0),cout); + check_numbers(hessian(f,2),finite_der(f,1),cout); + check_numbers(hessian(f,3),finite_der(f,2),cout); + check_numbers(hessian(f,4),finite_hessian(f,0,0), cout); + check_numbers(hessian(f,5),finite_hessian(f,1,1), cout); + check_numbers(hessian(f,6),finite_hessian(f,2,2), cout); + check_numbers(hessian(f,7),finite_hessian(f,0,1), cout); + check_numbers(hessian(f,8),finite_hessian(f,0,2), cout); + check_numbers(hessian(f,9),finite_hessian(f,1,2), cout); + } + + } + + + + if(plot_cusp){ + plotCusp(mywf, sample); + } + + if(parms_ders){ + testParmDeriv(mywf, sample); + } + + + + + delete mywf; mywf=NULL; + delete sample; + sample=NULL; + if(basis) delete basis; +} + + + +void Test_method::testParmDeriv(Wavefunction * mywf, Sample_point * sample){ + int nparms=nparms_end-nparms_start; + cout <<"#######################################################\n"; + cout <<" Checking ParmDeriv for "<nfunc(), 5); + Wf_return test_wfval(mywf->nfunc(), 5); + Parm_deriv_return wfders; + if(testhessian) + wfders.need_hessian=1; + else + wfders.need_hessian=0; + wfders.nparms_start=nparms_start; + wfders.nparms_end=nparms_end; + Parm_deriv_return wfders_tmp; + wfders_tmp.need_hessian=0; + wfders_tmp.nparms_start=nparms_start; + wfders_tmp.nparms_end=nparms_end; + + mywf->updateVal(wfdata, sample); + mywf->getVal(wfdata, 0, test_wfval); + mywf->getParmDeriv(wfdata, sample, wfders); + Array1 Psi(nparms); + Array1 temp_parms(nparms),orig_parms(nparms); + wfdata->getVarParms(temp_parms); + for (int i=0;isetVarParms(temp_parms); + mywf->updateVal(wfdata, sample); + mywf->getVal(wfdata, 0, wfval); + mywf->getParmDeriv(wfdata, sample, wfders_tmp); + doublevar psi=wfval.sign(0)*test_wfval.sign(0)*exp(wfval.amp(0,0)-test_wfval.amp(0,0)); + Psi(i)=psi; + doublevar derivative=(psi-1)/del; + cout <<" derivative check for "<setVarParms(temp_parms); + mywf->updateVal(wfdata, sample); + mywf->getVal(wfdata, 0, wfval); + doublevar psi=wfval.sign(0)*test_wfval.sign(0)*exp(wfval.amp(0,0)-test_wfval.amp(0,0)); + doublevar hessian_wf=(psi-Psi(i)-Psi(j)+1)/(del*del); + check_numbers(hessian_wf,wfders.hessian(i,j),cout); + temp_parms(j+nparms_start)-=del; + } + temp_parms(i+nparms_start)-=del; + }//end of loop over i + } + */ + +} + + + + +//---------------------------------------------------------------------- + +void Test_method::plotCusp(Wavefunction * mywf, Sample_point * sample){ + + Array1 < Array1 >orig_walker(nelectrons); + for(int e=0; e < nelectrons; e++){ + orig_walker(e).Resize(3); + sample->getElectronPos(e,orig_walker(e)); + } + ofstream cusp("cusp_r_12.dat"); + int nsteps=500; + cusp << "#### Cusp plot: r_12 , phi(r_12), 1/2(lap(r_1)+lap(r_2)) -1/r_12" <nfunc(), 5); + Wf_return test_wf1(mywf->nfunc(), 5); + Array1 new_pos(3), old_pos(3); + sample->getElectronPos(1,old_pos); + new_pos=old_pos; + new_pos(0)+=nsteps*ndel; + old_pos(0)-=nsteps*ndel; + sample->setElectronPos(0,new_pos); + sample->setElectronPos(1,old_pos); + for(int f=0;fgetElectronPos(0,new_pos); + new_pos(0)-=ndel; + sample->getElectronPos(1,old_pos); + old_pos(0)+=ndel; + sample->setElectronPos(0,new_pos); + sample->setElectronPos(1,old_pos); + mywf->updateLap(wfdata, sample); + mywf->getLap(wfdata,0,test_wf); + mywf->getLap(wfdata,1,test_wf1); + doublevar distance=new_pos(0)-old_pos(0); + if(fabs(distance)>0) + cusp << distance << " "<setElectronPos(e,orig_walker(e)); + } + sample->getElectronPos(0,old_pos); + ofstream cusp2("cusp_r_1N.dat"); + cusp2 << "#### Cusp plot: r_1N , phi(r_1N), 1/2(lap(r_1)+lap(r_N)) -1/r_1N" <setElectronPos(0,new_pos); + sample->setElectronPos(nelectrons-1,old_pos); + for(int f=0;fgetElectronPos(0,new_pos); + new_pos(0)-=ndel; + sample->getElectronPos(nelectrons-1,old_pos); + old_pos(0)+=ndel; + sample->setElectronPos(0,new_pos); + sample->setElectronPos(nelectrons-1,old_pos); + mywf->updateLap(wfdata, sample); + mywf->getLap(wfdata,0,test_wf); + mywf->getLap(wfdata,nelectrons-1,test_wf1); + doublevar distance=new_pos(0)-old_pos(0); + if(fabs(distance)>0) + cusp2 << distance << " "<setElectronPos(e,orig_walker(e)); + } + +} + +//---------------------------------------------------------------------- diff --git a/src/method/Test_method.h b/src/method/Test_method.h new file mode 100644 index 00000000..01dda460 --- /dev/null +++ b/src/method/Test_method.h @@ -0,0 +1,78 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + with modifications by Michal Bajdich + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ + + +#ifndef TEST_METHOD_H_INCLUDED +#define TEST_METHOD_H_INCLUDED + +#include "Qmc_std.h" +#include "Qmc_method.h" +#include "Wavefunction.h" +#include "Wavefunction_data.h" +#include "Sample_point.h" +#include "Guiding_function.h" +class Program_options; +class Basis_function; +#include "System.h" +/*! +\brief +Do some tests. Used mostly as a development tool. Keyword: TEST + + */ +class Test_method : public Qmc_method +{ +public: + void read(vector words, + unsigned int & pos, + Program_options & options); + void run(Program_options & options, ostream & output); + ~Test_method() + { + + deallocate(wfdata); + if(sysprop) delete sysprop; + } + + int showinfo(ostream & os); + private: + void plotCusp(Wavefunction * mywf, Sample_point * sample); + void testParmDeriv(Wavefunction * mywf, Sample_point * sample); + int nelectrons; //!< Number of electrons + int nconfig; //!< Number of configurations(walkers) + int nfunctions; //!< Number of wavefunctions we have. + string wfoutputfile; + System * sysprop; + string readconfig; + + Wavefunction_data * wfdata; + Pseudopotential * psp; + Basis_function * basis; + + int test_backflow; + int plot_cusp; + int parms_ders; + int testhessian; + int nparms_start; + int nparms_end; +}; + +#endif //TEST_METHOD_H_INCLUDED +//------------------------------------------------------------------------ diff --git a/src/method/Vmc_method.cpp b/src/method/Vmc_method.cpp new file mode 100644 index 00000000..05ca9f6a --- /dev/null +++ b/src/method/Vmc_method.cpp @@ -0,0 +1,488 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ + +#include "Vmc_method.h" +#include "qmc_io.h" +#include "ulec.h" +#include +#include "Program_options.h" +#include "System.h" +#include "Split_sample.h" +#include "Properties.h" + +//---------------------------------------------------------------------- + +void Vmc_method::read(vector words, + unsigned int & pos, + Program_options & options) +{ + + have_read_options=1; + + ndim=3; + + if(!readvalue(words, pos=0, nblock, "NBLOCK")) + error("Need NBLOCK in VMC section"); + if(!readvalue(words, pos=0, nconfig, "NCONFIG")) + error("Need NCONFIG in METHOD section."); + if(!readvalue(words, pos=0, nstep, "NSTEP")) + error("Need NSTEP in VMC section"); + if(!readvalue(words, pos=0, timestep, "TIMESTEP")) + error("Need TIMESTEP in VMC section"); + + //optional options + eref=0; + readvalue(words, pos=0, eref, "EREF"); + + if(!readvalue(words, pos=0, ndecorr, "NDECORR")) + ndecorr=2; + + if(haskeyword(words,pos=0, "OLDSTORECONFIG")) + error("OLDSTORECONFIG is out of date. Use the new configurations"); + + if(readvalue(words, pos=0, storeconfig, "STORECONFIG")) + canonical_filename(storeconfig); + + if(haskeyword(words, pos=0,"OLDREADCONFIG")) + error("OLDREADCONFIG is out of date. Use the new configurations"); + if(readvalue(words, pos=0, readconfig, "READCONFIG")) + canonical_filename(readconfig); + + pos=0; + if(readvalue(words,pos, pathfile, "PATHFILE")) + { + canonical_filename(pathfile); + } + + if(!readvalue(words, pos=0, log_label, "LABEL")) + log_label="vmc"; + + + vector proptxt; + if(readsection(words, pos=0, proptxt, "PROPERTIES")) + mygather.read(proptxt); + //myprop.read(proptxt, options.systemtext[0], options.twftext[0]); + + + vector dynsec; + if(!readsection(words, pos=0, dynsec, "DYNAMICS")) + dynsec.push_back("SPLIT"); + + allocate(dynsec, sampler); + + vector tmp_dens; + pos=0; + while(readsection(words, pos, tmp_dens, "DENSITY")) { + dens_words.push_back(tmp_dens); + } + + if(readvalue(words, pos=0, config_trace, "CONFIG_TRACE")) + canonical_filename(config_trace); + + + pos=0; + if(readvalue(words, pos, guidetype, "GUIDETYPE")) + { + if(guidetype=="SUMSQUARES") + { + guidewf=new Vmc_sum_squares; + } + else if(guidetype=="FIRST") { + guidewf=new Primary; + } + else + { + error("I don't understand ", guidetype, " after GUIDETYPE."); + } + } + else + { + guidetype="SUMSQUARES"; + guidewf=new Vmc_sum_squares; + } + + print_wf_vals=0; + if(haskeyword(words, pos=0, "PRINT_WF_VALS")) { + print_wf_vals=1; + cout << " enabling wf printing " << endl; + } + + +} + + +//---------------------------------------------------------------------- + +int Vmc_method::generateVariables(Program_options & options) { + + + if(!have_read_options) { + error("Need to call Vmc_method::read() before generateVariables()"); + } + have_generated_variables=1; + + debug_write(cout, "System\n"); + allocate(options.systemtext[0], sysprop ); + debug_write(cout, "Wave function\n"); + if(options.twftext.size() < 1) + error("Need TRIALFUNC section for VMC"); + allocate(options.twftext[0], sysprop, mywfdata); + debug_write(cout, "Pseudopotential\n"); + sysprop->generatePseudo(options.pseudotext, pseudo); + + densplt.Resize(dens_words.size()); + for(int i=0; i< densplt.GetDim(0); i++) { + allocate(dens_words[i], sysprop, options.runid,densplt(i)); + } + + + return 1; +} + + +//---------------------------------------------------------------------- + +int Vmc_method::allocateIntermediateVariables(System * locsys, + Wavefunction_data * locwfdata) { + + debug_write(cout, "temporary variables\n"); + locsys->generateSample(sample); + locwfdata->generateWavefunction(wf); + sample->attachObserver(wf); + + return 1; +} + +//---------------------------------------------------------------------- + +int Vmc_method::deallocateIntermediateVariables() { + if(wf) delete wf; + //for(int i=0; i showinfo(os); + os << endl << endl; + os << " Wavefunction " + << endl << endl; + mywfdata->showinfo(os); + pseudo->showinfo(os); + os << endl; + } + os << "Variational Monte Carlo: $Date: 2006/12/05 00:17:04 $\n"; + os << "Configurations per processor: " << nconfig << endl; + os << "Number of processors: " << mpi_info.nprocs << endl; + os << "Total configurations: " << nconfig*mpi_info.nprocs << endl; + os << "Blocks: " << nblock << endl; + os << "Steps per block: " << nstep << endl; + os << "Number of decorrelation steps: " << ndecorr << endl; + os << "Timestep: " << timestep << endl; + os << "Guiding wavefunction: " << guidetype << endl; + string indent=" "; + sampler->showinfo(indent, os); + + os << endl; + return 1; + } + else + return 0; +} + +//---------------------------------------------------------------------- + +void Vmc_method::readcheck(string & filename) { + int configsread=0; + + config_pos.Resize(nconfig); + + if(filename != "") { + + ifstream checkfile(filename.c_str()); + if(!checkfile) + error("Couldn't open ", filename); + + long int is1, is2; + string dummy; + checkfile >> dummy; + if(dummy != "RANDNUM") error("Expected RANDNUM in checkfile"); + checkfile >> is1 >> is2; + //rng.seed(is1, is2); + + + while(checkfile >>dummy && configsread < nconfig) { + //if(read_config(dummy, checkfile, electrons(configsread))) + // configsread++; + if(read_config(dummy, checkfile, sample)) { + config_pos(configsread++).savePos(sample); + } + + } + checkfile.close(); + } + + for(int i=configsread; i< nconfig; i++) { + //electrons(i)->randomGuess(); + sample->randomGuess(); + config_pos(i).savePos(sample); + } + debug_write(cout, configsread, " configs read ", nconfig-configsread, + " configs randomly generated \n"); +} + +//---------------------------------------------------------------------- + +void Vmc_method::storecheck(string & filename, int append) { + if(filename=="") return; + + ofstream checkfile; + if(append) checkfile.open(filename.c_str(), ios::app); + else checkfile.open(filename.c_str()); + if(!checkfile) error("Couldn't open ", filename); + checkfile.precision(15); + + long int is1, is2; + rng.getseed(is1, is2); + checkfile << "RANDNUM " << is1 << " " << is2 << endl; + for(int i=0; i< nconfig; i++) { + checkfile << "SAMPLE_POINT { \n"; + //write_config(checkfile, electrons(i)); + config_pos(i).restorePos(sample); + write_config(checkfile, sample); + checkfile << "}\n\n"; + } + + checkfile.close(); + +} + + +//---------------------------------------------------------------------- + +void Vmc_method::run(Program_options & options, ostream & output) { + if(!have_generated_variables) + error("Must generate variables to use Vmc_method::run"); + + string logfile=options.runid+".log"; + + if(mpi_info.node==0 ) { + ofstream logout(logfile.c_str(), ios::app); + logout << "#-------------------------------------------------\n"; + logout << "#VMC run: timestep " << timestep + << " nconfig " << mpi_info.nprocs*nconfig + << " steps " << nstep << endl; + logout << "#-------------------------------------------------\n\n\n"; + logout.close(); + } + + myprop.setLog(logfile, log_label); + runWithVariables(myprop, sysprop, mywfdata, pseudo,output); +} + + +/*! + +*/ +void Vmc_method::runWithVariables(Properties_manager & prop, + System * sys, + Wavefunction_data * wfdata, + Pseudopotential * psp, + ostream & output) +{ + + nelectrons=sys->nelectrons(0)+sys->nelectrons(1); + + + allocateIntermediateVariables(sys, wfdata); + readcheck(readconfig); + + cout.precision(10); + + if(output) output << "Entering VMC" << endl; + + prop.setSize(wf->nfunc(), nblock, nstep, nconfig, sys, wfdata, + mygather.nAux()); + mygather.squareWeight(1); + + output.precision(10); + ofstream path; + if(pathfile != "") { + if(output) { + cout << "Going to write path to " << pathfile << endl; + } + path.open(pathfile.c_str()); + path.precision(15); + } + + //our averaging variables + Array1 avglifetime(nblock); + unsigned int maxlife=0; + avglifetime=0; + Array2 age(nconfig, nelectrons); + age=0; + Array1 diffusion_rate(nblock,0.0); + + + for(int block=0; block< nblock; block++) { + int nwf_guide=wf->nfunc(); + Dynamics_info dinfo; + + for(int walker=0; walkernotify(all_electrons_move,0); + + wf->updateLap(wfdata, sample); + + if(print_wf_vals) { + Wf_return wfval(nwf_guide,2); + wf->getVal(wfdata,0, wfval); + cout << "node " << mpi_info.node << "amp " << wfval.amp(0,0) << endl; + } + + for(int step=0; step< nstep; step++) { + Array1 rotx(3), roty(3), rotz(3); + generate_random_rotation(rotx, roty, rotz); + psp->rotateQuadrature(rotx, roty, rotz); + + //------------------------------------------ + + Array1 oldpos(3); + Array1 newpos(3); + for(int decorr=0; decorr< ndecorr; decorr++) { + + for(int e=0; egetElectronPos(e,oldpos); + + int acc=sampler->sample(e,sample, wf, + wfdata, guidewf,dinfo, timestep); + sample->getElectronPos(e,newpos); + + for(int d=0; d< 3; d++) { + diffusion_rate(block)+=(newpos(d)-oldpos(d)) + *(newpos(d)-oldpos(d)); + } + + + if(acc>0) { + age(walker, e)=0; + } + else { + age(walker,e)++; + if(age(walker,e) > maxlife) maxlife=age(walker,e); + } + avglifetime(block)+=age(walker, e); + } //electron + } //decorrelation + + + Properties_point pt; + mygather.gatherData(pt, psp, sys, wfdata, wf, + sample, guidewf); + + for(int i=0; i< densplt.GetDim(0); i++) + densplt(i)->accumulate(sample,1.0); + + pt.parent=walker; + pt.nchildren=1; pt.children(0)=1; + prop.insertPoint(step, walker, pt); + + //This may screw up if we have >1 walker! + if(config_trace!="" && block >0) { + if(nconfig !=1) error("trace only works with nconfig=1"); + config_pos(walker).savePos(sample); + storecheck(config_trace,1); + } + + } //step + + config_pos(walker).savePos(sample); + + } //walker + + prop.endBlock(); + storecheck(storeconfig); + for(int i=0; i< densplt.GetDim(0); i++) + densplt(i)->write(); + + + + //Output for the block + if(output) { + if(global_options::rappture ) { + ofstream rapout("rappture.log"); + rapout << "=RAPPTURE-PROGRESS=>" << int(100.0*doublevar(block+1)/doublevar(nblock)) + << " Sampling wave function" << endl; + cout << "=RAPPTURE-PROGRESS=>" << int(100.0*doublevar(block+1)/doublevar(nblock)) + << " Sampling wave function" << endl; + rapout.close(); + } + output << "****Block " << block + << " avg life " << avglifetime(block)/(nstep*nconfig*ndecorr*nelectrons) + << " max life " << double(maxlife)/double(ndecorr) + << endl; + + sampler->showStats(output); + sampler->resetStats(); + prop.printBlockSummary(output); + output << endl; + } + } //blocks done + + + + if(output) { + output << "-----------------Run Ended------------\n" << endl; + + prop.printSummary(output); + output << endl; + output << "Maximum lifetime " << double(maxlife)/double(ndecorr) + << " steps "<< endl; + doublevar avglife=0; + for(int b=0; b< nblock; b++) { + avglife+=avglifetime(b)/(nblock*nstep*nconfig*ndecorr*ndecorr*nelectrons); + } + + output << "Average lifetime : " << avglife << " steps " << endl; + output << "VMC Done. \n"; + } + + path.close(); + + wfdata->clearObserver(); + deallocateIntermediateVariables(); +} + +//------------------------------------------------------------------------ + diff --git a/src/method/Vmc_method.h b/src/method/Vmc_method.h new file mode 100644 index 00000000..0d70ac6f --- /dev/null +++ b/src/method/Vmc_method.h @@ -0,0 +1,152 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ + +#ifndef VMC_METHOD_H_INCLUDED +#define VMC_METHOD_H_INCLUDED + +#include "Qmc_std.h" +#include "Qmc_method.h" +#include "Wavefunction.h" +#include "Wavefunction_data.h" +#include "Sample_point.h" +#include "Guiding_function.h" +#include "System.h" +#include "Pseudopotential.h" +#include "Split_sample.h" +#include "Space_warper.h" +class Program_options; +#include "Properties.h" + +/*! +\brief +Evaluates the expectation value \f$ <\Psi|H|\Psi>/<\Psi|\Psi> \f$ +stochastically. Keyword: VMC +*/ +class Vmc_method : public Qmc_avg_method +{ +public: + + Vmc_method() { + have_read_options=0; + have_generated_variables=0; + have_attached_variables=0; + sysprop=NULL; + mywfdata=NULL; + guidewf=NULL; + pseudo=NULL; + wf=NULL; + sample=NULL; + sampler=NULL; + } + void read(vector words, + unsigned int & pos, + Program_options & options); + void run(Program_options & options, ostream & output); + + int showinfo(ostream & os); + + int generateVariables(Program_options & options); + + virtual void runWithVariables(Properties_manager & prop, + System * sys, + Wavefunction_data * wfdata, + Pseudopotential * psp, + ostream & output); + + ~Vmc_method() + { + + if(have_generated_variables) { + if(sysprop) delete sysprop; + if(mywfdata) delete mywfdata; + if(pseudo) delete pseudo; + } + + if(guidewf) delete guidewf; + if(sampler) delete sampler; + + for(int i=0; i< densplt.GetDim(0); i++) { + if(densplt(i)) delete densplt(i); + } + + + } + +private: + int allocateIntermediateVariables(System * , Wavefunction_data *); + int deallocateIntermediateVariables(); + void readcheck(string & ); + void storecheck(string &, int append=0); + int have_read_options; + int have_generated_variables; + int have_attached_variables; + + Dynamics_generator * sampler; + // Split_sampler split; + + + int nblock; + int nstep; + int nconfig; + int ndecorr; + doublevar eref; + string storeconfig; + string readconfig; + string pathfile; + string log_label; + + //string oldstoreconfig; + //string oldreadconfig; + + doublevar timestep; + int nelectrons; + + int ndim; + int print_wf_vals; //!< whether or not to put the values of the wavefunction to cout + + string config_trace; //!< where to lay down a trace of configurations + + + string guidetype; + + Guiding_function * guidewf; + + Pseudopotential * pseudo; + System * sysprop; + //Array1 electrons; + Sample_point * sample; + Array1 config_pos; + + Wavefunction * wf; + Wavefunction_data * mywfdata; + + Properties_manager myprop; + + Properties_gather mygather; + + + Array1 < Local_density_accumulator *> densplt; + vector > dens_words; + + +}; + +#endif //VMC_METHOD_H_INCLUDED +//------------------------------------------------------------------------ diff --git a/src/method/make.include b/src/method/make.include new file mode 100644 index 00000000..6c060b7a --- /dev/null +++ b/src/method/make.include @@ -0,0 +1,21 @@ + +MY_SOURCES:= \ + Dmc_method.cpp \ + Force_fitter.cpp \ + Levenberg_Marquardt.cpp \ + Nodes_method.cpp \ + Newton_opt_method.cpp \ + Optimize_method2.cpp \ + Optimize_method.cpp \ + Plot_method.cpp \ + Postprocess_method.cpp \ + Qmc_method.cpp \ + Reptation_method.cpp \ + Split_sample.cpp \ + Test_method.cpp \ + Vmc_method.cpp + + +SOURCES:= $(SOURCES) $(addprefix method/,$(MY_SOURCES)) + + diff --git a/src/orbitals/Center_set.cpp b/src/orbitals/Center_set.cpp new file mode 100644 index 00000000..02fb4ead --- /dev/null +++ b/src/orbitals/Center_set.cpp @@ -0,0 +1,219 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ + +#include "Center_set.h" +#include "qmc_io.h" +#include "Basis_function.h" +#include "Sample_point.h" + +//---------------------------------------------------------------------- + +void Center_set::writeinput(string & indent, ostream & os) +{ + if(usingatoms) + { + os << indent << "USEATOMS\n"; + } + else if(usingsampcenters) + { + os << indent << "USEGLOBAL\n"; + } + else + { + os << indent << "READ " << centerfile << endl; + } +} + +/*! +\todo +Allow center specification inline in the input file, rather than +having to read an external file. + */ +void Center_set::read(vector & words, unsigned int pos, + System * sys) +{ + + usingsampcenters=usingatoms=0; + int nelectrons=sys->nelectrons(0)+sys->nelectrons(1); + unsigned int startpos=pos; + + if(readvalue(words,pos, centerfile, "READ")) + { + + readcenterfile(centerfile); + } + else + { + + pos=startpos; + if(haskeyword(words, pos,"USEATOMS")) + { + //cout << "using atoms " << endl; + usingatoms=1; + sys->getAtomicLabels(labels); + ncenters=labels.size(); + //cout << "ncenters " << ncenters << endl; + } + else if(haskeyword(words, pos=0, "USEGLOBAL")) + { + usingsampcenters=1; + sys->getCenterLabels(labels); + ncenters=labels.size(); + + //cout << ncenters << " centers from system " << endl; + } + else + { + error("Couldn't find anything in center section"); + } + + } + + if(usingsampcenters) { + sys->getEquivalentCenters(equiv_centers, ncenters_atom, centers_displacement); + } + else { + equiv_centers.Resize(ncenters,1); + ncenters_atom.Resize(ncenters); + centers_displacement.Resize(ncenters,3); + centers_displacement=0; + for(int cen=0; cen< ncenters; cen++) { + equiv_centers(cen,0)=cen; + ncenters_atom(cen)=1; + } + } + + + edist.Resize(nelectrons,ncenters, 5); + nbasis.Resize(ncenters); + nbasis=0; +} + +//------------------------------------------------------------ + +void Center_set::assignBasis(Array1 basisfunc) +{ + int totbasis=basisfunc.GetDim(0); + basis.Resize(ncenters, totbasis); + + for(int i=0; i< ncenters; i++) + { + int found=0; + for(int j=0; j < totbasis; j++) + { + if(basisfunc(j)->label() == labels[i]) + { + appendbasis(j,i); + found=1; + //break; + } + + } + if(!found) + { + cout << "\n****WARNING*****\n" + << "Couldn't find basis for atom " << labels[i] + << endl; + } + } +} + + +//------------------------------------------------------------ + +void Center_set::updateDistance(int e, Sample_point * sample) +{ + if(usingatoms) + { + Array1 R(5); + sample->updateEIDist(); + for(int i=0; i< ncenters; i++ ) + { + sample->getEIDist(e, i, R); + for(int d=0; d< 5; d++) + { + edist(e,i,d)=R(d); + } + } + } + else if(usingsampcenters) { + Array1 R(5); + sample->updateECDist(); + for(int i=0; i< ncenters; i++ ) + { + sample->getECDist(e, i, R); + for(int d=0; d< 5; d++) + { + edist(e,i,d)=R(d); + } + } + } + else + { + Array1 r(3); + sample->getElectronPos(e, r); + for(int i=0; i< ncenters; i++) + { + edist(e,i,1)=0; + for(int d=0; d< 3; d++) + { + edist(e,i,d+2)=r(d)-position(i,d); + //cout << "positions " << position(i,d) << " dist " << edist(e,i,d+2) << endl; + edist(e,i,1)+=edist(e,i,d+2)*edist(e,i,d+2); + } + } + for(int i=0; i< ncenters; i++) + { + edist(e,i,0)=sqrt(edist(e,i,1)); + } + + } +} + +/*! +Uses flat file of form: +ncenters +Label x y z +Label x y z +... + */ +void Center_set::readcenterfile(string & filename) +{ + assert(!usingatoms); + ifstream centin(filename.c_str()); + if(!centin) error("Couldn't open ", filename); + centin >> ncenters; + position.Resize(ncenters,3); + string labeltemp; + for(int i=0; i< ncenters; i++) + { + centin >> labeltemp; + labels.push_back(labeltemp); + for(int d=0; d< 3; d++) + { + centin >> position(i,d); + } + } + centin.close(); +} + + + +//-------------------------------------------------------------------------- diff --git a/src/orbitals/Center_set.h b/src/orbitals/Center_set.h new file mode 100644 index 00000000..f9bda72a --- /dev/null +++ b/src/orbitals/Center_set.h @@ -0,0 +1,139 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ + +#ifndef CENTER_SET_H_INCLUDED +#define CENTER_SET_H_INCLUDED +#include "Array.h" +#include "System.h" +class Basis_function; +class Sample_point; +/*! +\brief +Holds a set of centers for basis function evaluation. + +Input specification: + +Required one of: + + USEATOMS : Sets the centers to the positions of the +atoms given in a System + +--or-- + + READ : takes a single string as argument, attempts to +read center positions from there. The format is: + +ncenters
    +label1 x1 y1 z1
    +label2 x2 y2 z2
    +.
    +.
    +.
    + +*/ +class Center_set +{ +public: + + Array2 basis; + //!< Holds the index of the basis functions associated with each particle, of form (particle, function on that particle) + + Array1 nbasis; + //!< Number of basis functions on each particle + + Center_set() + { usingatoms=0;} + + void read(vector & words, unsigned int pos, + System * sys); + void assignBasis(Array1 ); + + void updateDistance(int, Sample_point *); + void getDistance(const int e, const int cent, + Array1 & distance) + { + assert(e< edist.GetDim(0)); + assert(cent < ncenters); + assert(distance.GetDim(0) >=5); + for(int d=0; d< 5; d++) + { + distance(d)=edist(e,cent,d); + } + } + + + void writeinput(string &, ostream & ); + + void Resize(int mdim, int mpar) + { + //r.Resize(mdim, mpar); + nbasis.Resize(mpar); + } + + + int size() const + { + return nbasis.GetDim(0); + } + + void readcenterfile(string &); + //------------------------------------------------------------ + //Basis function methods + + void initbasis(int m) + { + basis.Resize(nbasis.GetDim(0),m); + nbasis=0; + } + + + //assigns a basis function to a specific particle in the + //set + void assignbasis(int b, int n, int m) + { + basis(n,m)=b; + if(nbasis(n) < m) + nbasis(n)=m; + } + void appendbasis(int b,int n) + { + nbasis(n)++; + basis(n,nbasis(n)-1)=b; + } + + Array2 equiv_centers; //!< for a given atom, what centers correspond to it + Array1 ncenters_atom; //!< number of centers on a given atom + Array2 centers_displacement; //!< displacement vector of a center(for periodic systems and k-points) +private: + string centerfile; + int ncenters; + int usingatoms; + int usingsampcenters; + Array2 position; + Array3 edist; + + vector labels; + + +}; + +#endif //CENTER_SET_H_INCLUDED + +//-------------------------------------------------------------------------- diff --git a/src/orbitals/MO_1d.cpp b/src/orbitals/MO_1d.cpp new file mode 100644 index 00000000..1f944e4f --- /dev/null +++ b/src/orbitals/MO_1d.cpp @@ -0,0 +1,176 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ + +#include "MO_1d.h" +#include "qmc_io.h" + +void MO_1d::buildLists(Array1 < Array1 > & occupations) { + moLists=occupations; +} + +int MO_1d::showinfo(ostream & os) { + os << "MO_1D" << endl; + os << nmo << " MO's from " << readfile << endl; + return 1; +} + +int MO_1d::writeinput(string & indent, ostream & os) { + os << endl; + os << indent << "MO_1D" << endl; + os << indent << "NMO " << nmo << endl; + os << indent << "MESH_FILE " << readfile << endl; + os << indent << "NPOINTS " << npoints << endl; + return 1; + +} + +//---------------------------------------------------------------------- + +void MO_1d::read(vector & words, unsigned int & startpos, + System * sys) { + + if(!readvalue(words, startpos=0, nmo, "NMO")) + error("Need NMO in MO_1D"); + + splines.Resize(nmo, 2);//one each for real and complex + + //Read the wave function file directly + if(!readvalue(words, startpos=0, readfile, "MESH_FILE")) + error("Need MESH_FILE in MO_1D"); + + int n; + if(!readvalue(words, startpos=0, n, "NPOINTS")) + error("Need NPOINTS IN MO_1D"); + + doublevar magnify; + if(!readvalue(words, startpos=0, magnify, "MAGNIFY")) + magnify=1; + + npoints=n; + + Array1 x(n), y(n), yc(n); + ifstream is(readfile.c_str()); + + if(!is) error("Couldn't open ", readfile); + + int mo=0; + string dumline; + while(mo < nmo && is) { + + //is.ignore(180, '\n'); + //is.ignore(180, '\n'); + getline(is, dumline); + getline(is, dumline); + doublevar dummy; + + doublevar max=0; + for(int i=0; i< n; i++) { + is >> dummy >> x(i) >> y(i) >> yc(i); + if(max < fabs(y(i))) + max=fabs(y(i)); + } + + max*=.1; + for(int i=0; i< n; i++) { + y(i)*=magnify/max; + yc(i)*=magnify/max; + } + + is.ignore(180,'\n'); + doublevar yp1=(y(1)-y(0))/(x(1)-x(0)); + doublevar ypn=(y(n-1)-y(n-2))/(x(n-1)-x(n-2)); + splines(mo,0).splinefit(x,y,yp1, ypn); + + yp1=(yc(1)-yc(0))/(x(1)-x(0)); + ypn=(yc(n-1)-yc(n-2))/(x(n-1)-x(n-2)); + splines(mo,1).splinefit(x,yc,yp1, ypn); + mo++; + } + + for(int i=0; i< nmo; i++) { + for(int j=0; j< 2; j++) { + if(!splines(0,0).match(splines(i,j))) { + error("Spline ", i, " doesn't match 0 "); + } + } + } + + //if(mpi_info.node==0 && 0) { + // for(int i=0; i< nmo; i++) { + // string spline="spline"; + // append_number(spline, i); + // spline+=".dat"; + // ofstream splnout(spline.c_str()); + // for(doublevar r=x(0); r< x(n-1); r+=.005) { +// int interval=splines(0,0).getInterval(r); +// splnout << r << " " << splines(i,0).getVal(r,interval) << " " +// << splines(i,1).getVal(r,interval) +// << endl; +// } +// splnout.close(); +// } +// } + +} + + +//---------------------------------------------------------------------- +void MO_1d::updateVal(Sample_point * sample,int e, int listnum, + Array2 & newvals) { + + Array1 r(3); + sample->getElectronPos(e,r); + doublevar x=r(0); + + int interval=splines(0,0).getInterval(x); + + int nmo_list=moLists(listnum).GetDim(0); + for(int m=0; m< nmo_list; m++) { + int mo=moLists(listnum)(m); + newvals(m,0)=dcomplex(splines(mo,0).getVal(x,interval), + splines(mo,1).getVal(x,interval) ); + } + +} + +//---------------------------------------------------------------------- +void MO_1d::updateLap(Sample_point * sample,int e,int listnum, + Array2 & newvals) { + + Array1 r(3); + sample->getElectronPos(e,r); + doublevar x=r(0); + + int interval=splines(0,0).getInterval(x); + + int nmo_list=moLists(listnum).GetDim(0); + doublevar f,fdir, f2dir, fi, fidir, fi2dir; + for(int m=0; m< nmo_list; m++) { + int mo=moLists(listnum)(m); + splines(mo,0).getDers(x,interval, f,fdir, f2dir); + splines(mo,1).getDers(x,interval, fi, fidir, fi2dir); + newvals(m,0)=dcomplex(f,fi); + newvals(m,1)=x*dcomplex(fdir, fidir); + newvals(m,2)=newvals(m,3)=0; + newvals(m,4)=dcomplex(f2dir, fi2dir); + } +} + +//---------------------------------------------------------------------- diff --git a/src/orbitals/MO_1d.h b/src/orbitals/MO_1d.h new file mode 100644 index 00000000..a07cc393 --- /dev/null +++ b/src/orbitals/MO_1d.h @@ -0,0 +1,53 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ + +#ifndef MO_1D_H_INCLUDED +#define MO_1D_H_INCLUDED + +#include "MO_matrix.h" +#include "Spline_fitter.h" + +class MO_1d : public Complex_MO_matrix { + public: + + virtual void buildLists(Array1 > & occupations); + + virtual int getNmo() { return nmo; } + virtual int showinfo(ostream & os); + virtual int writeinput(string &, ostream &); + virtual void read(vector & words, unsigned int & startpos, + System * sys); + + virtual void updateVal(Sample_point * sample,int e, int listnum, + Array2 & newvals); + + virtual void updateLap(Sample_point * sample,int e,int listnum, + Array2 & newvals); + + + private: + int nmo; + Array1 < Array1 > moLists; + Array2 splines; + int npoints; + string readfile; +}; + +#endif //MO_1D_H_INCLUDED diff --git a/src/orbitals/MO_matrix.cpp b/src/orbitals/MO_matrix.cpp new file mode 100644 index 00000000..7f22a012 --- /dev/null +++ b/src/orbitals/MO_matrix.cpp @@ -0,0 +1,401 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ + +#include "Qmc_std.h" +#include "MO_matrix.h" +#include "MO_matrix_cutoff.h" +#include "MO_matrix_standard.h" +#include "Sample_point.h" +#include "qmc_io.h" +#include "MO_1d.h" +#include "MO_matrix_blas.h" + + + + + +int allocate(vector & words, System * sys, MO_matrix *& moptr) { + assert(moptr==NULL); + + if(words[0]=="CUTOFF_MO") + moptr=new MO_matrix_cutoff; + else if(words[0] =="STANDARD_MO") + moptr=new MO_matrix_standard; + else if(words[0]=="BLAS_MO") + moptr=new MO_matrix_blas; + else { + cout << "****WARNING***** Assuming you want a cutoff MO." + " In the future, you'll need to specify.\n"; + moptr=new MO_matrix_cutoff; + } + + unsigned int pos=0; + moptr->read(words,pos, sys); + return 1; +} + +int allocate(vector & words, System * sys, + Complex_MO_matrix *& moptr) { + if(words[0]=="MO_1D") + moptr=new MO_1d; + else + error("Unknown complex MO: ", words[0]); + + unsigned int pos=0; + moptr->read(words, pos, sys); + return 1; +} + + +//---------------------------------------------------------------------- +/*! + + */ +void rotate_orb(istream & orbin, ostream & orbout, + Array2 & rotation, + Array1 & moList, int nfunctions) { + int nmo_write=moList.GetDim(0); + assert(nmo_write==rotation.GetDim(1)); + assert(nmo_write==rotation.GetDim(0)); + if(!orbin) error("couldn't open orb input file"); + if(!orbout) error("couldn't open orb output file"); + + + + Array2 rotated_mo(nmo_write, nfunctions); + + string dummy; + while (orbin >> dummy) { + if(dummy=="COEFFICIENTS") break; + } + if(!orbin) error("rotate_orb::Didn't find COEFFICIENTS in orbin"); + int nmo_read=0; + for(int i=0; i< nmo_write; i++) { + if(moList(i) > nmo_read) nmo_read=moList(i); + } + nmo_read++; + + //cout << "nmo_write " << nmo_write << " nmo_read " << nmo_read << endl; + + Array2 moCoeff(nmo_read, nfunctions); + + //bug here. + for(int mo=0; mo < nmo_read; mo++) { + for(int f=0; f< nfunctions; f++) { + if(!(orbin >> moCoeff(mo,f))) error("rotate_orb::orb file ended before I expected."); + } + } + + debug_write(cout,"rotating mo's \n"); + rotated_mo=0; + for(int m=0; m< nmo_write; m++) { + + for(int f=0; f< nfunctions; f++) { + for(int m2=0; m2 < nmo_write; m2++) { + int mo=moList(m2); + // cout << "m " << m << " f " << f << " m2 " << m2 << endl; + rotated_mo(m, f)+=rotation(m,m2)*moCoeff(mo,f); + } + } + } + + debug_write(cout,"outputing mo's \n"); + for(int m=0; m < nmo_write; m++) { + int counter2=1; + for(int f=0; f< nfunctions; f++) { + orbout << rotated_mo(m, f) << " "; + if(counter2 % 5 ==0) orbout << endl; + counter2++; + } + orbout << endl; + } + + +} + +//---------------------------------------------------------------------- + +/*! + +*/ +void MO_matrix::read(vector & words, + unsigned int & startpos, + System * sys) +{ + + + unsigned int pos=startpos; + + if(!readvalue(words, pos, nmo, "NMO")) + { + error("Need NMO in molecular orbital section"); + } + + if(nmo > 40000) + error("You have entered more than 40,000 for NMO. This seems a bit big; we most likely" + " can't handle it."); + + + pos=0; + if(!readvalue(words, pos, magnification_factor, "MAGNIFY")) { + magnification_factor=1; + } + + + //Basis functions + vector > basistext; + vector < string > basissec; + pos=0; + while( readsection(words, pos, basissec, "BASIS") != 0) + { + basistext.insert(basistext.end(), basissec); + } + basis.Resize(basistext.size()); + basis=NULL; + + if(basistext.size() == 0 ) + { + error("Didn't find a BASIS section"); + } + for(unsigned int i=0; ikpoint(kpoint); + /* + vector kpt; + if(readsection(words, pos=0, kpt, "KPOINT")) { + if(kpt.size()!=3) error("KPOINT must be a section of size 3"); + kpoint.Resize(3); + for(int i=0; i< 3; i++) + kpoint(i)=atof(kpt[i].c_str()); + } + else { + kpoint.Resize(3); + kpoint=0; + } + */ + + //OLDSOFILE is for compatibility to the old qmc f90 + //version, which stores the spline coefficients in + //a bit of a strange format. You still have to + //put in the regular input, since the SO file doesn't + //contain the symmetry information. + pos=0; + if(readvalue(words, pos, oldsofile, "OLDSOFILE")) + { + ifstream sofile(oldsofile.c_str()); + if(sofile) + { + single_write(cout, + "Overwriting the basis functions with the information ", + "from ",oldsofile, "\n"); + int dummy; + sofile >> dummy; + for(unsigned int i=0; iraw_input(sofile); + } + sofile.close(); + } + + else + { + error("Didn't find compatibility SO file in ", oldsofile); + } + } + + + //------------------------------Centers + vector centertext; + pos=startpos; + if(readsection(words, pos, centertext, "CENTERS")) + {} + else + { + single_write(cout, "Defaulting to using the atoms as centers\n"); + string temp="USEATOMS"; + centertext.push_back(temp); + } + + + unsigned int newpos=0; + centers.read(centertext, newpos, sys); + centers.assignBasis(basis); + + //cout << "number of centers " << centers.size() << endl; + totbasis=0; + maxbasis=0; + for(int i=0; i< centers.size(); i++) + { + int basiscent=0; + for(int j=0; j< centers.nbasis(i); j++) + { + basiscent+=basis(centers.basis(i,j))->nfunc(); + //cout << "basiscent " << basiscent << endl; + } + totbasis+=basiscent; + if(maxbasis < basiscent) + maxbasis=basiscent; + } + + //cout << "maxbasis " << maxbasis << endl; + //single_write(cout, nmo, " molecular orbitals requested.\n"); + + pos=0; + if(! readvalue(words, pos, orbfile, "ORBFILE")) + { + error("Must specify ORBFILE for MO matrix"); + } + init(); + +} + +//------------------------------------------------------------------------------------------ + + +/*! +foo.readorb(input stream) + Gets the coefficients and sets everything up from a formatted + input file(ORB). The file should look like:
    + MO# AO#(for center) Center# Coeff#
    + for all MO's, then a listing of the coefficients in sequential order + + All the listings for a given MO must be in one block. + +\todo +Check the sums of functions versus how many we think should +be there, and make sure everything adds up correctly. + +*/ +int readorb(istream & input, Center_set & centers, + int nmo, int maxbasis, Array1 & kpoint, Array3 & coeffmat, + Array1 & coeff + ) +{ + + int center; + int max=0; + int mo=0; + int molast=0; + int fn; + + //cout << "readorb" << endl; + int ncenters=centers.ncenters_atom.GetDim(0); + + coeffmat.Resize(nmo, centers.size(), maxbasis); + //cout << "nmo " << nmo << " ncenters " + // << centers.size() << " maxbasis " << maxbasis << endl; + coeffmat=-1; + + string dummy; + input >> mo; + + + for(int i=0; i< nmo; i++) + { + int firstDone=0; + while(1) + { + if(firstDone) + { + if(!(input >> dummy)) error("Unexpected end of orbital file\n"); + mo=atoi(dummy.c_str()); + } + + + if(mo != molast+1 && firstDone) + { + break; + } + mo-=1; + + + if(mo != i) + { + cout << "mo " << mo << " i " << i << " dummy " << dummy << endl; + error("Bad formatting in the orb file, or not enough mo's there."); + } + + if(!input) cout << " here" << endl; + + input >> fn; + if(fn > maxbasis) error("Function in orb file greater than maximum number" + "of basis functions", fn); + fn-=1; + input >> center; + if(center > centers.equiv_centers.GetDim(0) ) + error("Center number in orb file greater than maximum number ", + centers.equiv_centers.GetDim(0)); + center-=1; + + int coeffnum; + + + input >> coeffnum; + + if(max < coeffnum) max=coeffnum; + coeffnum-=1; + + if(coeffnum < 0) + error("Coefficient pointer less than one in orb file"); + + //loop through equivalent centers.. + + if(center > ncenters) error("center number too high in orb file: ", center+1); + //cout << " mo " << mo << " cen " << center << " fn " << fn << endl; + + for(int c=0; c < centers.ncenters_atom(center); c++) { + int cen2=centers.equiv_centers(center, c); + coeffmat(mo, cen2, fn)=coeffnum; + } + + firstDone=1; + molast=mo; + + } + } + + //Find the coefficients section. + while(dummy!="COEFFICIENTS") + { + if(!(input >> dummy)) + error("Couldn't find COEFFICIENTS section in the orb file.\n"); + } + + //cout << "half " << endl; + + coeff.Resize(max); + //coeff=1e99; + for(int i=0; i> dummy; + //cout << dummy << endl; + if(!(input >> coeff(i))) + error("Didn't find all the MO coefficients I should've"); + } + + //cout << "done readorb" << endl; + + return max; +} + +//---------------------------------------------------------------------- diff --git a/src/orbitals/MO_matrix.h b/src/orbitals/MO_matrix.h new file mode 100644 index 00000000..11846228 --- /dev/null +++ b/src/orbitals/MO_matrix.h @@ -0,0 +1,239 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ + +#ifndef MO_MATRIX_H_INCLUDED +#define MO_MATRIX_H_INCLUDED + +#include "Array.h" +#include "Qmc_std.h" +#include "Basis_function.h" +#include "Center_set.h" + +class System; +class Sample_point; + +class General_MO_matrix { + public: + /*! + Build several sets of MO's to be evaluated in updateVal and updateLap. + Each element in occupations should be a list of the MO's that should + be evaluated. For example, one can create a list of spin up and spin + down MO's, and only evaluate up when an up electron is moved. + */ + virtual void buildLists(Array1 > & occupations)=0; + + /*! + get the number of molecular orbitals + */ + virtual int getNmo()=0; + virtual int showinfo(ostream & os)=0; + virtual int writeinput(string &, ostream &)=0; + virtual void read(vector & words, unsigned int & startpos, + System * sys)=0; + + virtual ~General_MO_matrix() { } + +}; + +//---------------------------------------------------------------------- + +class Complex_MO_matrix : public General_MO_matrix { + public: + /*! + Build several sets of MO's to be evaluated in updateVal and updateLap. + Each element in occupations should be a list of the MO's that should + be evaluated. For example, one can create a list of spin up and spin + down MO's, and only evaluate up when an up electron is moved. + */ + virtual void buildLists(Array1 > & occupations)=0; + + /*! + get the number of molecular orbitals + */ + virtual int getNmo()=0; + virtual int showinfo(ostream & os)=0; + virtual int writeinput(string &, ostream &)=0; + virtual void read(vector & words, unsigned int & startpos, + System * sys)=0; + virtual void updateVal( + Sample_point * sample, + int e, + //!< electron number + int listnum, + Array2 & newvals + //!< The return: in form (MO) + )=0; + + virtual void updateLap( + Sample_point * sample, + int e, + //!< electron number + int listnum, + //!< Choose the list that was built in buildLists + Array2 & newvals + //!< The return: in form ([value gradient lap], MO) + )=0; + + + virtual ~Complex_MO_matrix() { } + +}; + +//---------------------------------------------------------------------- + +/*! +\brief +MO_matrix is a class to hold everything necessary to calculate the +molecular orbitals for a situation. + +*/ +class MO_matrix: public General_MO_matrix +{ +protected: + Center_set centers; + Array1 basis; + int nmo; + doublevar magnification_factor; + string orbfile; + int totbasis; + int maxbasis; + virtual void init()=0; + + string oldsofile; + + Array1 kpoint; //!< the k-point of the orbitals in fractional units(1 0 0) is X, etc.. + //Array1 mo_counter;//!< Count how many basis functions are evaluated per MO + //unsigned int n_calls; //!< number of calls +public: + + /*! + Build several sets of MO's to be evaluated in updateVal and updateLap. + Each element in occupations should be a list of the MO's that should + be evaluated. For example, one can create a list of spin up and spin + down MO's, and only evaluate up when an up electron is moved. + */ + virtual void buildLists(Array1 > & occupations)=0; + + + virtual void setOrbfile(string & x) { + orbfile=x; + } + /*! + get the number of molecular orbitals + */ + int getNmo() { + return nmo; + } + + virtual int showinfo(ostream & os)=0; + + virtual int writeinput(string &, ostream &)=0; + + + virtual void read(vector & words, unsigned int & startpos, + System * sys); + + //! Takes an ORB file and inserts all the coefficients. + // virtual int readorb(istream &, Array3 &, Array1 & ); + + + virtual void writeorb(ostream &, Array2 & rotation, Array1 &)=0; + + /*! + Get the molecular orbital coefficients + */ + virtual void getMoCoeff(Array2 & coeff)=0; + + /*! + + */ + virtual void setMoCoeff(Array2 & coeff)=0; + virtual int nMoCoeff()=0; + + + virtual void updateVal( + Sample_point * sample, + int e, + //!< electron number + int listnum, + Array2 & newvals + //!< The return: in form (MO) + )=0; + + virtual void getBasisVal( + Sample_point * sample, + int e, + //!< electron number + Array1 & newvals + )=0; + + virtual void updateLap( + Sample_point * sample, + int e, + //!< electron number + int listnum, + //!< Choose the list that was built in buildLists + Array2 & newvals + //!< The return: in form (MO,[value gradient lap]) + )=0; + + virtual void updateHessian(Sample_point * sample, + int e, + int listnum, + Array2 & newvals + //!< in form (MO, [value gradient, dxx,dyy,dzz,dxy,dxz,dyz]) + ) { + error("this MO_matrix doesn't support Hessians"); + } + + MO_matrix() + {} + + virtual ~MO_matrix() + { + //doublevar totcalls=0; + //for(int i=0; i< nmo; i++) { + // cout << "mo_counter " << mo_counter(i)/n_calls << endl; + // totcalls+=mo_counter(i)/n_calls; + //} + //cout << " average # of basis functions evaluated " << totcalls/nmo << endl; + for(int i=0; i< basis.GetDim(0); i++) + deallocate(basis(i)); + } + +}; + +//---------------------------------------------------------------------------- + + +int allocate(vector & words, System * sys, MO_matrix *& moptr); +int allocate(vector & words, System * sys, + Complex_MO_matrix *& moptr); +void rotate_orb(istream & orbin, ostream & orbout, + Array2 & rotation, + Array1 & moList, int nfunctions); + +int readorb(istream & input, Center_set & centers, + int nmo, int maxbasis, Array1 & kpoint, + Array3 & coeffmat, Array1 & coeff); + +#endif // MO_MATRIX_H_INCLUDED + +//---------------------------------------------------------------------------- diff --git a/src/orbitals/MO_matrix_blas.cpp b/src/orbitals/MO_matrix_blas.cpp new file mode 100644 index 00000000..e1833153 --- /dev/null +++ b/src/orbitals/MO_matrix_blas.cpp @@ -0,0 +1,362 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ + +#include "Qmc_std.h" +#include "MO_matrix_blas.h" +#include "Sample_point.h" +#include "qmc_io.h" + + + +inline void output_array(Array2 & arr) { + for(int i=0; i< arr.GetDim(0); i++) { + for(int j=0; j < arr.GetDim(1); j++) { + cout << arr(i,j) << " "; + } + cout << endl; + } +} + +void MO_matrix_blas::init() { + + + //mo_counter.Resize(nmo); + //mo_counter=0.0; + //n_calls=0; + + //Determine where to cut off the basis functions + + cutoff.Resize(totbasis); + int basiscounter=0; + for(int i=0; i< centers.size(); i++) + { + for(int j=0; j< centers.nbasis(i); j++) + { + Basis_function* tempbasis=basis(centers.basis(i,j)); + for(int n=0; n< tempbasis->nfunc(); n++) + { + //cout << "cutoff " << endl; + cutoff(basiscounter)=tempbasis->cutoff(n); + //cout << "rcut(" << basiscounter << ") " + // << cutoff(basiscounter) << endl; + basiscounter++; + } + } + } + + obj_cutoff.Resize(basis.GetDim(0)); + for(int b=0; b< basis.GetDim(0); b++) { + int nf=basis(b)->nfunc(); + doublevar maxcut=basis(b)->cutoff(0); + for(int n=1; n< nf; n++) { + doublevar cut=basis(b)->cutoff(n); + if(cut > maxcut) maxcut=cut; + } + obj_cutoff(b)=maxcut; + } + + + nfunctions.Resize(basis.GetDim(0)); + for(int b=0; b< basis.GetDim(0); b++) { + nfunctions(b)=basis(b)->nfunc(); + } + + + moCoeff.Resize(totbasis, nmo); + + + ifstream ORB(orbfile.c_str()); + if(!ORB) error("couldn't find orb file ", orbfile); + + Array3 coeffmat; + Array1 coeff; + readorb(ORB,centers, nmo, maxbasis, kpoint,coeffmat, coeff); + string in; + ORB.close(); + + //Find the cutoffs + + int totfunc=0; + + for(int ion=0; ionnfunc(); + + for(int i=0; i & rotation, Array1 &moList) { + + + int nmo_write=moList.GetDim(0); + assert(rotation.GetDim(0)==nmo_write); + assert(rotation.GetDim(1)==nmo_write); + os.precision(15); + int counter=0; + for(int m=0; m < nmo_write; m++) { + int mo=moList(m); + for(int ion=0; ionnfunc(); + + for(int i=0; i > & occupations) +{ + int numlists=occupations.GetDim(0); + moCoeff_list.Resize(numlists); + for(int lis=0; lis < numlists; lis++) { + int nmo_list=occupations(lis).GetDim(0); + moCoeff_list(lis).Resize(totbasis, nmo_list); + for(int i=0; i < nmo_list; i++) { + int mo=occupations(lis)(i); + for(int bas=0; bas < totbasis; bas++) { + moCoeff_list(lis)(bas,i)=moCoeff(bas,mo); + } + } + } +} + + +//---------------------------------------------------------------------- + +int MO_matrix_blas::showinfo(ostream & os) +{ + os << "Blas MO " << endl; + os << "Number of molecular orbitals: " << nmo << endl; + string indent=" "; + os << "Basis functions: \n"; + for(int i=0; i< basis.GetDim(0); i++) + { + basis(i)->showinfo(indent, os); + } + return 1; +} + +int MO_matrix_blas::writeinput(string & indent, ostream & os) +{ + os << indent << "BLAS_MO" << endl; + os << indent << "NMO " << nmo << endl; + os << indent << "ORBFILE " << orbfile << endl; + os << indent << "MAGNIFY " << magnification_factor << endl; + string indent2=indent+" "; + for(int i=0; i< basis.GetDim(0); i++) + { + os << indent << "BASIS { " << endl; + basis(i)->writeinput(indent2, os); + os << indent << "}" << endl; + } + + os << indent << "CENTERS { " << endl; + centers.writeinput(indent2, os); + os << indent << "}" << endl; + return 1; +} +//------------------------------------------------------------------------ + +void MO_matrix_blas::updateVal(Sample_point * sample, + int e, int listnum, Array2 & newvals) { + +#ifdef USE_BLAS + int centermax=centers.size(); + + assert(e < sample->electronSize()); + assert(newvals.GetDim(1) >=5); + + + Array1 R(5); + static Array1 symmvals_temp(maxbasis); + static Array1 newvals_T; + Array2 & moCoefftmp(moCoeff_list(listnum)); + int nmo_list=moCoefftmp.GetDim(1); + newvals_T.Resize(nmo_list); + newvals_T=0.0; + + int b; + int totfunc=0; + + centers.updateDistance(e, sample); + + for(int ion=0; ion < centermax; ion++) { + centers.getDistance(e, ion, R); + for(int n=0; n< centers.nbasis(ion); n++) { + b=centers.basis(ion, n); + if(R(0) < obj_cutoff(b)) { + + basis(b)->calcVal(R, symmvals_temp); + int imax=nfunctions(b); + for(int i=0; i< imax; i++) { + if(R(0) < cutoff(totfunc)) { + cblas_daxpy(nmo_list,symmvals_temp(i), + moCoefftmp.v+totfunc*nmo_list,1, + newvals_T.v,1); + } + totfunc++; + } + } + else { + totfunc+=nfunctions(b); + } + } + } + + + for(int m=0; m < nmo_list; m++) { + newvals(m,0)=newvals_T(m); + + } +#else + error("BLAS libraries not compiled in, so you cannot use BLAS_MO"); +#endif + + +} + +//------------------------------------------------------------------------ + + +/*! +*/ + + + +void MO_matrix_blas::updateLap( + Sample_point * sample, + int e, + int listnum, + Array2 & newvals) { + +#ifdef USE_BLAS + int centermax=centers.size(); + + assert(e < sample->electronSize()); + assert(newvals.GetDim(1) >=5); + + + Array1 R(5); + static Array2 symmvals_temp(maxbasis,5); + static Array2 newvals_T; + Array2 & moCoefftmp(moCoeff_list(listnum)); + int nmo_list=moCoefftmp.GetDim(1); + newvals_T.Resize(5, nmo_list); + newvals_T=0.0; + + int b; + int totfunc=0; + + centers.updateDistance(e, sample); + + + for(int ion=0; ion < centermax; ion++) { + + centers.getDistance(e, ion, R); + for(int n=0; n< centers.nbasis(ion); n++) { + b=centers.basis(ion, n); + if(R(0) < obj_cutoff(b)) { + + basis(b)->calcLap(R, symmvals_temp); + + int imax=nfunctions(b); + for(int i=0; i< imax; i++) { + if(R(0) < cutoff(totfunc)) { + for(int j=0; j< 5; j++) { + + cblas_daxpy(nmo_list,symmvals_temp(i,j), + moCoefftmp.v+totfunc*nmo_list,1, + newvals_T.v+j*nmo_list,1); + } + } + totfunc++; + } + } + else { + totfunc+=nfunctions(b); + } + } + } + + + for(int m=0; m < nmo_list; m++) { + for(int j=0; j< 5; j++) { + newvals(m,j)=newvals_T(j,m); + } + } + +#else + error("BLAS libraries not compiled in, so you cannot use BLAS_MO"); +#endif + +} + +//-------------------------------------------------------------------------- diff --git a/src/orbitals/MO_matrix_blas.h b/src/orbitals/MO_matrix_blas.h new file mode 100644 index 00000000..0dcf996b --- /dev/null +++ b/src/orbitals/MO_matrix_blas.h @@ -0,0 +1,132 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ + + +#ifndef MO_MATRIX_BLAS_H_INCLUDED +#define MO_MATRIX_BLAS_H_INCLUDED + +#include "Array.h" +#include "Qmc_std.h" +#include "Basis_function.h" +#include "Center_set.h" +#include "MO_matrix.h" + +class System; +class Sample_point; +//---------------------------------------------------------------------------- + +class MO_matrix_blas: public MO_matrix +{ +protected: + void init(); +private: + + Array1 > moCoeff_list; + Array2 moCoeff; + + Array1 obj_cutoff; //!< cutoff for each basis object + Array1 cutoff; //!< Cutoff for individual basis functions + Array1 nfunctions; //!< number of functions in each basis + +public: + + /*! + Build several sets of MO's to be evaluated in updateVal and updateLap. + Each element in occupations should be a list of the MO's that should + be evaluated. For example, one can create a list of spin up and spin + down MO's, and only evaluate up when an up electron is moved. + */ + virtual void buildLists(Array1 > & occupations); + + /*! + get the number of molecular orbitals + */ + //virtual int getNmo() + //{ + // return nmo; + //} + + virtual int showinfo(ostream & os); + + virtual int writeinput(string &, ostream &); + + + //virtual void read(vector & words, unsigned int & startpos, System * sys); + + //! Takes an ORB file and inserts all the coefficients. + //virtual int readorb(istream &); + + + virtual void writeorb(ostream &, Array2 & rotation, Array1 &); + + virtual void getMoCoeff(Array2 & coeff) { + error("Blas_Mo doesn't support optimization yet"); + } + + /*! + + */ + virtual void setMoCoeff(Array2 & coeff) { + error("Blas MO doesn't support optimization yet"); + } + + virtual int nMoCoeff() { + error("Need to implement MO_matrix_blas::nMoCoeff()"); + return 0; + } + + + virtual void updateVal( + Sample_point * sample, + int e, + //!< electron number + int listnum, + Array2 & newvals + //!< The return: in form (MO) + ); + + virtual void getBasisVal( + Sample_point * sample, + int e, + Array1 & newvals + ){ + error("Need to implement MO_matrix_blas::getBasisVal()"); + } + + virtual void updateLap( + Sample_point * sample, + int e, + //!< electron number + int listnum, + //!< Choose the list that was built in buildLists + Array2 & newvals + //!< The return: in form ([value gradient lap], MO) + ); + + MO_matrix_blas() + {} + +}; + + + +#endif // MO_MATRIX_BLAS_H_INCLUDED + +//-------------------------------------------------------------------------- diff --git a/src/orbitals/MO_matrix_cutoff.cpp b/src/orbitals/MO_matrix_cutoff.cpp new file mode 100644 index 00000000..348ad0a4 --- /dev/null +++ b/src/orbitals/MO_matrix_cutoff.cpp @@ -0,0 +1,572 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ + +#include "Qmc_std.h" +#include "MO_matrix_cutoff.h" +#include "Sample_point.h" +#include "qmc_io.h" + + + +void MO_matrix_cutoff::init() { + + + //mo_counter.Resize(nmo); + //mo_counter=0.0; + //n_calls=0; + + //Determine where to cut off the basis functions + + cutoff.Resize(totbasis); + int basiscounter=0; + for(int i=0; i< centers.size(); i++) + { + for(int j=0; j< centers.nbasis(i); j++) + { + Basis_function* tempbasis=basis(centers.basis(i,j)); + for(int n=0; n< tempbasis->nfunc(); n++) + { + //cout << "cutoff " << endl; + cutoff(basiscounter)=tempbasis->cutoff(n); + //cout << "rcut(" << basiscounter << ") " + // << cutoff(basiscounter) << endl; + basiscounter++; + } + } + } + + obj_cutoff.Resize(basis.GetDim(0)); + for(int b=0; b< basis.GetDim(0); b++) { + int nf=basis(b)->nfunc(); + doublevar maxcut=basis(b)->cutoff(0); + for(int n=1; n< nf; n++) { + doublevar cut=basis(b)->cutoff(n); + if(cut > maxcut) maxcut=cut; + } + obj_cutoff(b)=maxcut; + } + + + nfunctions.Resize(basis.GetDim(0)); + for(int b=0; b< basis.GetDim(0); b++) { + nfunctions(b)=basis(b)->nfunc(); + } + + //-- + + nbasis.Resize(nmo); + mofill.Resize(nmo, totbasis); + moCoeff2.Resize(nmo, totbasis); + + + //basismo.Resize(totbasis); + //moCoeff.Resize(totbasis, nmo); + //basisfill.Resize(totbasis, nmo); + + + + //--- + + + ifstream ORB(orbfile.c_str()); + + if(!ORB) + { + error("couldn't find orb file ", orbfile); + } + + Array3 coeffmat; + Array1 coeff; + + readorb(ORB,centers, nmo, maxbasis,kpoint, coeffmat, coeff); + string in; + ORB.close(); + + + //Find the cutoffs + + int totfunc=0; + nbasis=0; + //basismo=0; + const doublevar threshold=1e-6; + for(int ion=0; ionnfunc(); + + for(int i=0; i threshold) { + mofill(mo, nbasis(mo))=totfunc; + moCoeff2(mo, nbasis(mo))=kptfac*magnification_factor*temp; + nbasis(mo)++; + + //basisfill(totfunc, basismo(totfunc))=mo; + //moCoeff(totfunc, basismo(totfunc))=multfac*temp; + //basismo(totfunc)++; + + } + + }//mo + f++; //keep a total of functions on center + totfunc++; + } //i + + + } //n + } //ion + + /* + single_write(cout, "total MO's ", nmo, "\n"); + for(int basis=0; basis < totfunc; basis++) { + single_write(cout, "basismo(", basis, ") "); + single_write(cout, basismo(basis), "\n"); + } + */ + + + //single_write(cout, "total functions ", totfunc, "\n") ; + //for(int mo=0; mo < nmo; mo++) { + // single_write(cout,"nbasis(",mo, ") "); + // single_write(cout, nbasis(mo),"\n"); + //} + +} + +//--------------------------------------------------------------------------------------------- + +void MO_matrix_cutoff::writeorb(ostream & os, Array2 & rotation, Array1 &moList) { + + + int nmo_write=moList.GetDim(0); + assert(rotation.GetDim(0)==nmo_write); + assert(rotation.GetDim(1)==nmo_write); + os.precision(15); + int counter=0; + for(int m=0; m < nmo_write; m++) { + int mo=moList(m); + for(int ion=0; ionnfunc(); + + for(int i=0; i > & occupations) +{ + int numlists=occupations.GetDim(0); + basisfill_list.Resize(numlists); + moCoeff_list.Resize(numlists); + basismo_list.Resize(numlists); + for(int lis=0; lis < numlists; lis++) + { + int nmo_list=occupations(lis).GetDim(0); + basisfill_list(lis).Resize(totbasis, nmo_list); + moCoeff_list(lis).Resize(totbasis, nmo_list); + basismo_list(lis).Resize(totbasis); + basismo_list(lis)=0; + for(int i=0; i < nmo_list; i++) + { + int mo=occupations(lis)(i); + for(int bas=0; bas < nbasis(mo); bas++) + { + int func=mofill(mo, bas); + + //basisfill_list(lis)(func, basismo_list(lis)(func))=mo; + basisfill_list(lis)(func, basismo_list(lis)(func))=i; + moCoeff_list(lis)(func, basismo_list(lis)(func))=moCoeff2(mo, bas); + //cout << "basisfill_list " << 2 << " f " + // << func << " mo " << mo; + //cout << " basis coeff " << moCoeff2(mo, bas) << endl; + //cout << "real basisfill " << basisfill(func, basismo_list(lis)(func)) + // << " coeff " << moCoeff(func, basismo_list(lis)(func)) << endl; + basismo_list(lis)(func)++; + } + } + } +} + + +//---------------------------------------------------------------------- + +int MO_matrix_cutoff::showinfo(ostream & os) +{ + os << "Cutoff MO " << endl; + os << "Number of molecular orbitals: " << nmo << endl; + string indent=" "; + os << "Basis functions: \n"; + for(int i=0; i< basis.GetDim(0); i++) + { + basis(i)->showinfo(indent, os); + } + return 1; +} + +int MO_matrix_cutoff::writeinput(string & indent, ostream & os) +{ + os << indent << "CUTOFF_MO" << endl; + os << indent << "NMO " << nmo << endl; + os << indent << "ORBFILE " << orbfile << endl; + if(oldsofile!="") + os << indent << "OLDSOFILE " << oldsofile << endl; + os << indent << "MAGNIFY " << magnification_factor << endl; + string indent2=indent+" "; + for(int i=0; i< basis.GetDim(0); i++) + { + os << indent << "BASIS { " << endl; + basis(i)->writeinput(indent2, os); + os << indent << "}" << endl; + } + + os << indent << "CENTERS { " << endl; + centers.writeinput(indent2, os); + os << indent << "}" << endl; + return 1; +} +//------------------------------------------------------------------------ + +void MO_matrix_cutoff::updateVal( + Sample_point * sample, + int e, + int listnum, + //! & occupation, + //! & newvals + //!< The return: in form (MO, val) +) +{ + //cout << "updateVal " << listnum << endl; + int centermax=centers.size(); + //int momax=occupation.GetDim(0); + static Array1 R(5); + //static Array1 symmvals(totbasis); + static Array1 symmvals_temp(maxbasis); + + //Make references for easier access to the list variables. + Array1 & basismotmp(basismo_list(listnum)); + Array2 & basisfilltmp(basisfill_list(listnum)); + Array2 & moCoefftmp(moCoeff_list(listnum)); + assert(newvals.GetDim(1) >= 1); + + newvals=0; + Basis_function * tempbasis; + + //int fn; + doublevar c; + int mo=0; + int scalebasis=basisfill_list(listnum).GetDim(1); + int totfunc=0; + int b; //basis + + centers.updateDistance(e, sample); + //int retscale=newvals.GetDim(1); + for(int ion=0; ion < centermax; ion++) + { + //sample->getECDist(e, ion, R); + centers.getDistance(e,ion,R); + for(int n=0; n< centers.nbasis(ion); n++) + { + b=centers.basis(ion,n); + tempbasis=basis(b); + if(obj_cutoff(b) > R(0)) { + tempbasis->calcVal(R, symmvals_temp); + int imax=nfunctions(b); + for(int i=0; i< imax; i++) + { + //cout << "i " << i << endl; + int reducedbasis=scalebasis*totfunc; + if(R(0) < cutoff(totfunc)) + { + // cout << "basmo " << basismotmp.v[totfunc] << endl; + for(int basmo=0; basmo < basismotmp.v[totfunc]; basmo++) + { + //mo=basisfill(totfunc, basmo); + //c=moCoeff(totfunc, basmo); + //cout << "basisfill reducedbasis "<< reducedbasis + // << " basmo " << basmo << endl; + mo=basisfilltmp.v[reducedbasis+basmo]; + //cout << "mocoeff (mo=" << mo << endl; + //mo_counter(mo)++; + + c=moCoefftmp.v[reducedbasis+basmo]; + newvals(mo, 0)+=c*symmvals_temp(i); + //newvals.v[retscale*mo]+=c*symmvals_temp.v[i]; + + } + } + totfunc++; + } + } + else { + totfunc+=nfunctions(b); + } + } + } + //n_calls++; + // cout << "done updateVal " << endl; +} + +//------------------------------------------------------------------------ +inline void output_array(Array2 & arr) { + for(int i=0; i< arr.GetDim(0); i++) { + for(int j=0; j < arr.GetDim(1); j++) { + cout << arr(i,j) << " "; + } + cout << endl; + } +} + +/*! +*/ + +void MO_matrix_cutoff::updateLap( + Sample_point * sample, + int e, + int listnum, + //const Array1 & occupation, + //! & newvals + //!< The return: in form (MO, [val, grad, lap]) +) +{ + + //cout << "updateLap" << endl; + int centermax=centers.size(); + //int momax=occupation.GetDim(0); + newvals=0; + //assert(momax <= nmo); + assert(e < sample->electronSize()); + assert(newvals.GetDim(1) >=5); + + // cout << "array " << endl; + Array1 fval(3); + Array1 R(5); + // cout << "symvals " << endl; + static Array2 symmvals_temp(maxbasis,5); + + //cout << "arrayref " << endl; + //References to make the code easier to read and slightly faster. + Array1 & basismotmp(basismo_list(listnum)); + Array2 & basisfilltmp(basisfill_list(listnum)); + Array2 & moCoefftmp(moCoeff_list(listnum)); + + Basis_function * tempbasis; + + doublevar c; + int scaleval=0, scalesymm=0; + int mo=0; + int scalebasis=basisfilltmp.GetDim(1); + centers.updateDistance(e, sample); + int totfunc=0; + int b; + for(int ion=0; ion < centermax; ion++) + { + centers.getDistance(e, ion, R); + //cout << "R " << R(0) << endl; + for(int n=0; n< centers.nbasis(ion); n++) + { + b=centers.basis(ion, n); + tempbasis=basis(b); + if(R(0) < obj_cutoff(b)) { + tempbasis->calcLap(R, symmvals_temp); + + //cout << "symmvals: " << endl; + //output_array(symmvals_temp); + + + int imax=nfunctions(b); + for(int i=0; i< imax; i++) + { + //cout << "i " << i << endl; + + int reducedbasis=scalebasis*totfunc; + scalesymm=i*5; + //if(e==60) cout << "R " << R(0) << " cutoff " << cutoff(totfunc) << endl; + if(R(0) < cutoff(totfunc)) + { + //cout << "*****" << endl; + //cout << "center " << ion << endl; + //cout << "distance " << R(0) << endl; + //cout << "function " << symmvals_temp(i,0) << endl; + + //cout << "newvals before " << totfunc << endl; + //output_array(newvals); + //cout << "coefficients " << endl; + for(int basmo=0; basmo < basismotmp.v[totfunc]; basmo++) + { + //mo=basisfill(basis, basmo); + //c=moCoeff(basis, basmo); + + mo=basisfilltmp.v[reducedbasis+basmo]; + c=moCoefftmp.v[reducedbasis+basmo]; + //cout << c << " "; + + //mo_counter(mo)++; + + scaleval=mo*5; + //cout << "coeff " << c << endl; + //cout << "reducedbasis " << reducedbasis << endl; + // cout << mo << " " << basmo << " " << c << endl; + + + for(int j=0; j< 5; j++) + { + //newvals(mo,j)+=c*symmvals(fn,j); + newvals.v[scaleval+j]+=c*symmvals_temp.v[scalesymm+j]; + //cout << "newvals(" << mo << "," << j << ") " << newvals(mo,j) << endl; + //cout << "symmvals(" << j << ") " << symmvals(fn,j) << endl; + } + } + //cout << endl; + + } + + totfunc++; + } + } + else { + totfunc+=nfunctions(b); + } + } + } + + + //n_calls++; + + //cout << "newvals " << endl; + //output_array(newvals); + +} + +//-------------------------------------------------------------------------- + +void MO_matrix_cutoff::updateHessian( + Sample_point * sample, + int e, + int listnum, + //const Array1 & occupation, + //! & newvals + //!< The return: in form (MO, [val, grad, dxx,dyy,...]) +) +{ + + int centermax=centers.size(); + newvals=0; + assert(e < sample->electronSize()); + assert(newvals.GetDim(1)==10); + + + Array1 fval(3); + Array1 R(5); + static Array2 symmvals_temp(maxbasis,10); + + //References to make the code easier to read and slightly faster. + Array1 & basismotmp(basismo_list(listnum)); + Array2 & basisfilltmp(basisfill_list(listnum)); + Array2 & moCoefftmp(moCoeff_list(listnum)); + + Basis_function * tempbasis; + + doublevar c; + int scaleval=0, scalesymm=0; + int mo=0; + int scalebasis=basisfilltmp.GetDim(1); + centers.updateDistance(e, sample); + int totfunc=0; + int b; + for(int ion=0; ion < centermax; ion++) { + centers.getDistance(e, ion, R); + for(int n=0; n< centers.nbasis(ion); n++) { + b=centers.basis(ion, n); + tempbasis=basis(b); + if(R(0) < obj_cutoff(b)) { + tempbasis->calcHessian(R, symmvals_temp); + + int imax=nfunctions(b); + for(int i=0; i< imax; i++) { + int reducedbasis=scalebasis*totfunc; + scalesymm=i*10; + if(R(0) < cutoff(totfunc)) { + for(int basmo=0; basmo < basismotmp.v[totfunc]; basmo++) { + mo=basisfilltmp.v[reducedbasis+basmo]; + c=moCoefftmp.v[reducedbasis+basmo]; + scaleval=mo*10; + for(int j=0; j< 10; j++) { + newvals.v[scaleval+j]+=c*symmvals_temp.v[scalesymm+j]; + } + } + } + + totfunc++; + } + } + else { + totfunc+=nfunctions(b); + } + } + } +} + +//-------------------------------------------------------------------------- diff --git a/src/orbitals/MO_matrix_cutoff.h b/src/orbitals/MO_matrix_cutoff.h new file mode 100644 index 00000000..2637c9cf --- /dev/null +++ b/src/orbitals/MO_matrix_cutoff.h @@ -0,0 +1,149 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ + +#ifndef MO_MATRIX_CUTOFF_H_INCLUDED +#define MO_MATRIX_CUTOFF_H_INCLUDED + +#include "Array.h" +#include "Qmc_std.h" +#include "Basis_function.h" +#include "Center_set.h" +#include "MO_matrix.h" + +class System; +class Sample_point; +//---------------------------------------------------------------------------- + +class MO_matrix_cutoff: public MO_matrix +{ +protected: + void init(); +private: + //Center_set centers; + //Array1 basis; + //int nmo; + //int totbasis; + //int maxbasis; + // doublevar magnification_factor; + //string orbfile; + Array2 mofill; + Array2 moCoeff2; + Array1 nbasis; + + Array1 obj_cutoff; //!< cutoff for each basis object + Array1 cutoff; //!< Cutoff for individual basis functions + Array1 nfunctions; //!< number of functions in each basis + //Array1 basismo; + //Array2 moCoeff; + //Array2 basisfill; + + Array1 < Array2 > basisfill_list; + Array1 < Array2 > moCoeff_list; + Array1 < Array1 > basismo_list; + + + +public: + + /*! + Build several sets of MO's to be evaluated in updateVal and updateLap. + Each element in occupations should be a list of the MO's that should + be evaluated. For example, one can create a list of spin up and spin + down MO's, and only evaluate up when an up electron is moved. + */ + virtual void buildLists(Array1 > & occupations); + + /*! + get the number of molecular orbitals + */ + //virtual int getNmo() + //{ + // return nmo; + //} + + virtual int showinfo(ostream & os); + + virtual int writeinput(string &, ostream &); + + + //virtual void read(vector & words, unsigned int & startpos, System * sys); + + //! Takes an ORB file and inserts all the coefficients. + //virtual int readorb(istream &); + + + virtual void writeorb(ostream &, Array2 & rotation, Array1 &); + + virtual void getMoCoeff(Array2 & coeff) { + error("Cutoff_Mo doesn't support optimization yet"); + } + + /*! + + */ + virtual void setMoCoeff(Array2 & coeff) { + error("Cutoff MO doesn't support optimization yet"); + } + + virtual int nMoCoeff() { + error("Need to implement MO_matrix_cutoff::nMoCoeff()"); + return 0; + } + + + virtual void updateVal( + Sample_point * sample, + int e, + //!< electron number + int listnum, + Array2 & newvals + //!< The return: in form (MO) + ); + + virtual void getBasisVal( + Sample_point * sample, + int e, + Array1 & newvals + ){ + error("Need to implement MO_matrix_cutoff::getBasisVal()"); + } + + virtual void updateLap( + Sample_point * sample, + int e, + int listnum, + Array2 & newvals + ); + virtual void updateHessian(Sample_point * sample, + int e, + int listnum, + Array2 & newvals + //!< in form ([value gradient, dxx,dyy,dzz,dxy,dxz,dyz], MO) + ); + MO_matrix_cutoff() + {} + +}; + + + +#endif // MO_MATRIX_CUTOFF_H_INCLUDED + +//-------------------------------------------------------------------------- diff --git a/src/orbitals/MO_matrix_standard.cpp b/src/orbitals/MO_matrix_standard.cpp new file mode 100644 index 00000000..bbd0ebf6 --- /dev/null +++ b/src/orbitals/MO_matrix_standard.cpp @@ -0,0 +1,332 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ + +#include "Qmc_std.h" +#include "MO_matrix_standard.h" +#include "Sample_point.h" +#include "qmc_io.h" + + + +void MO_matrix_standard::init() { + moCoeff.Resize(nmo, totbasis); + + single_write(cout, "Standard MO\n"); + ifstream ORB(orbfile.c_str()); + if(!ORB) + { + error("couldn't find orb file ", orbfile); + } + + single_write(cout,"Reading orbitals from ",orbfile, "\n"); + Array3 coeffmat; + Array1 coeff; + int tempint=readorb(ORB,centers,nmo, maxbasis,kpoint, coeffmat, coeff); + ORB.close(); + single_write(cout, tempint," unique MO coefficients found.\n\n"); + + //Fill moCoeff + + int totfunc=0; + for(int ion=0; ionnfunc(); + + for(int i=0; i & rotation, + Array1 &moList) { + + int nmo_write=moList.GetDim(0); + assert(rotation.GetDim(0)==nmo_write); + assert(rotation.GetDim(1)==nmo_write); + cout << "nmo_write " << nmo_write << endl; + + int counter=0; + for(int m=0; m < nmo_write; m++) { + int mo=moList(m); + for(int ion=0; ionnfunc(); + + for(int i=0; i rotated_mo(nmo_write, totbasis); + rotated_mo=0; + for(int m=0; m< nmo_write; m++) { + for(int m2=0; m2 < nmo_write; m2++) { + for(int f=0; f< totbasis; f++) { + rotated_mo(m, f)+=rotation(m,m2)*moCoeff(m2,f); + } + } + } + + int counter2=1; + for(int m=0; m < nmo_write; m++) { + for(int f=0; f< totbasis; f++) { + os << rotated_mo(m, f) << " "; + if(counter2 % 5 ==0) os << endl; + } + } + +} +//--------------------------------------------------------------------- + +void MO_matrix_standard::buildLists(Array1 < Array1 > & occupations) { + int numlists=occupations.GetDim(0); + moLists.Resize(numlists); + for(int lis=0; lis < numlists; lis++) { + int nmo_list=occupations(lis).GetDim(0); + moLists(lis).Resize(nmo_list); + for(int mo=0; mo < nmo_list; mo++) { + moLists(lis)(mo)=occupations(lis)(mo); + } + } +} + + +//---------------------------------------------------------------------- + +int MO_matrix_standard::showinfo(ostream & os) +{ + os << "Standard molecular orbital\n"; + string indent=" "; + os << "Basis functions: \n"; + for(int i=0; i< basis.GetDim(0); i++) { + basis(i)->showinfo(indent, os); + } + + os << "Number of molecular orbitals: " << nmo << endl; + + return 1; +} + +int MO_matrix_standard::writeinput(string & indent, ostream & os) +{ + os << indent << "STANDARD_MO" << endl; + os << indent << "NMO " << nmo << endl; + os << indent << "ORBFILE " << orbfile << endl; + os << indent << "MAGNIFY " << magnification_factor << endl; + string indent2=indent+" "; + for(int i=0; i< basis.GetDim(0); i++) { + os << indent << "BASIS { " << endl; + basis(i)->writeinput(indent2, os); + os << indent << "}" << endl; + } + + os << indent << "CENTERS { " << endl; + centers.writeinput(indent2, os); + os << indent << "}" << endl; + return 1; +} +//------------------------------------------------------------------------ + +void MO_matrix_standard::updateVal(Sample_point * sample, int e, + int listnum, + //! & newvals + //!< The return: in form (MO, val) +) { + + Array1 basisvals(totbasis); + int centermax=centers.size(); + centers.updateDistance(e, sample); + Basis_function * tempbasis; + Array1 R(5); + int currfunc=0; + newvals=0; + for(int ion=0; ion < centermax; ion++) { + centers.getDistance(e, ion, R); + for(int n=0; n< centers.nbasis(ion); n++) + { + + tempbasis=basis(centers.basis(ion,n)); + tempbasis->calcVal(R, basisvals, currfunc); + currfunc+=tempbasis->nfunc(); + } + } + + int nmo_list=moLists(listnum).GetDim(0); + //int valscale=newvals.GetDim(1); + int mocoeffscale=moCoeff.GetDim(1); + doublevar * tempnewvals=new doublevar[moCoeff.GetDim(0)]; + for(int m=0; m < nmo_list; m++) { + int mo=moLists(listnum)(m); + int effmo=mo*mocoeffscale; + //int effm=m*valscale; + tempnewvals[m]=0; + for(int f=0; f< totbasis; f++) { + //c=moCoeff(mo,f); + //newvals(m,0)+=c*basisvals(f); + //newvals.v[effm]+=moCoeff.v[effmo+f]*basisvals.v[f]; + tempnewvals[m]+=moCoeff.v[effmo+f]*basisvals.v[f]; + } + } + + int nfill=moCoeff.GetDim(0); + for(int m=0; m & newvals + ) { + + newvals.Resize(totbasis); + int centermax=centers.size(); + centers.updateDistance(e, sample); + Basis_function * tempbasis; + Array1 R(5); + int currfunc=0; + newvals=0; + for(int ion=0; ion < centermax; ion++) { + centers.getDistance(e, ion, R); + for(int n=0; n< centers.nbasis(ion); n++) + { + + tempbasis=basis(centers.basis(ion,n)); + tempbasis->calcVal(R, newvals, currfunc); + currfunc+=tempbasis->nfunc(); + } + } +} + +//------------------------------------------------------------------------ + + +/*! +*/ + +void MO_matrix_standard::updateLap( + Sample_point * sample, int e, int listnum, + Array2 & newvals + //!< The return: in form (MO, [val, grad, lap]) +){ + Array2 basisvals(totbasis, 5); + int centermax=centers.size(); + centers.updateDistance(e, sample); + Basis_function * tempbasis; + Array1 R(5); + int currfunc=0; + newvals=0; + //cout << "centermax " << centermax << endl; + for(int ion=0; ion < centermax; ion++) { + centers.getDistance(e, ion, R); + //cout << "nbasis " << centers.nbasis(ion) << endl; + for(int n=0; n< centers.nbasis(ion); n++) + { + + tempbasis=basis(centers.basis(ion,n)); + tempbasis->calcLap(R, basisvals, currfunc); + currfunc+=tempbasis->nfunc(); + } + } + + doublevar c; + int nmo_list=moLists(listnum).GetDim(0); + int valscale=newvals.GetDim(1); + int basisscale=basisvals.GetDim(1); + int mocoeffscale=moCoeff.GetDim(1); + for(int m=0; m < nmo_list; m++) { + int mo=moLists(listnum)(m); + int effmo=mo*mocoeffscale; + int effm=m*valscale; + int efff; + for(int f=0; f< totbasis; f++) { + //c=moCoeff(mo,f); + //cout << " c " << c << endl; + c=moCoeff.v[effmo+f]; + //cout << "c2 " << c << endl; + efff=f*basisscale; + for(int d=0; d< 5; d++) { + //cout << "basisvals " << basisvals(f,d) << endl; + //cout << "basisvals2 " << basisvals.v[efff+d] << endl; + // + //newvals(m,d)+=c*basisvals(f,d); + //newvals.v[effm+d]+=c*basisvals(f,d); + newvals.v[effm+d]+=c*basisvals.v[efff+d]; + } + } + } +} + +//-------------------------------------------------------------------------- diff --git a/src/orbitals/MO_matrix_standard.h b/src/orbitals/MO_matrix_standard.h new file mode 100644 index 00000000..ac8dec16 --- /dev/null +++ b/src/orbitals/MO_matrix_standard.h @@ -0,0 +1,114 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ + +#ifndef MO_MATRIX_STANDARD_H_INCLUDED +#define MO_MATRIX_STANDARD_H_INCLUDED + +#include "Array.h" +#include "Qmc_std.h" +#include "Basis_function.h" +#include "Center_set.h" +#include "MO_matrix.h" + +class System; +class Sample_point; +//---------------------------------------------------------------------------- + +class MO_matrix_standard: public MO_matrix +{ +protected: + void init(); +private: + Array2 moCoeff; + Array1 < Array1 > moLists; +public: + + /*! + Build several sets of MO's to be evaluated in updateVal and updateLap. + Each element in occupations should be a list of the MO's that should + be evaluated. For example, one can create a list of spin up and spin + down MO's, and only evaluate up when an up electron is moved. + */ + virtual void buildLists(Array1 > & occupations); + + + virtual int showinfo(ostream & os); + + virtual int writeinput(string &, ostream &); + + + + virtual void writeorb(ostream &, Array2 & rotation, + Array1 &); + + + virtual void getMoCoeff(Array2 & coeff) { + array_cp(coeff, moCoeff); + } + + /*! + + */ + virtual void setMoCoeff(Array2 & coeff) { + assert(coeff.GetDim(0)==moCoeff.GetDim(0)); + assert(coeff.GetDim(1)==moCoeff.GetDim(1)); + array_cp(moCoeff, coeff); + } + + virtual int nMoCoeff() { + return moCoeff.GetDim(0)*moCoeff.GetDim(1); + } + + + virtual void updateVal( + Sample_point * sample, + int e, + //!< electron number + int listnum, + Array2 & newvals + //!< The return: in form (MO) + ); + + virtual void getBasisVal( + Sample_point * sample, + int e, + Array1 & newvals + ); + + virtual void updateLap( + Sample_point * sample, + int e, + //!< electron number + int listnum, + //!< Choose the list that was built in buildLists + Array2 & newvals + //!< The return: in form ([value gradient lap], MO) + ); + + MO_matrix_standard() + {} + +}; + + + +#endif // MO_MATRIX_STANDARD_H_INCLUDED + +//-------------------------------------------------------------------------- diff --git a/src/orbitals/make.include b/src/orbitals/make.include new file mode 100644 index 00000000..b94673f4 --- /dev/null +++ b/src/orbitals/make.include @@ -0,0 +1,12 @@ + +MY_SOURCES:= Center_set.cpp \ + MO_1d.cpp \ + MO_matrix_blas.cpp \ + MO_matrix.cpp \ + MO_matrix_cutoff.cpp \ + MO_matrix_standard.cpp + + +SOURCES:= $(SOURCES) $(addprefix orbitals/,$(MY_SOURCES)) + + diff --git a/src/program_utils/Array.h b/src/program_utils/Array.h new file mode 100644 index 00000000..4a08a506 --- /dev/null +++ b/src/program_utils/Array.h @@ -0,0 +1,862 @@ +/* + +Copyright (C) 2007 Burkhard Militzer + LKW--Changed RANGE_CHECKING conditional to whether or not we _call_ the + limits functions, not what the functions do. The other way seemed to + confuse some complilers, notably Red Hat's gcc 2.96. + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ + + +#ifndef ARRAY_H_INCLUDED +#define ARRAY_H_INCLUDED +#include "Qmc_std.h" +/** These are templates for matrices. We define Array1, Array2, and + Array3, for 1, 2, and 3 dimensional arrays. */ + +/** We define a virtual base class Array so that all templated matrices + can be handled by the same function call. + All Array classes have variables rank and a method GetDims() that + returns a constant int pointer to the size of each dimension. + An additional feature is that all Array objects can read their elements + from an input file, i.e., cin >> mat;, which streams cin to each + element in order of storage. +*/ + +template +class Array +{ //virtual base class for all matrices +public: + friend istream& operator >>(istream& is, Array& mat) + { + mat.Read(is); + return is; + }; + friend ifstream& operator >>(ifstream& is, Array& mat) + { + mat.Read(is); + return is; + }; + virtual void Read(istream& is)=0; + virtual int GetSize() const =0; + virtual int GetRank() const =0; + virtual int* GetDims() const =0; //return array of the dimensions. + virtual int GetDim( const int d) const =0; //return one dimension. + virtual ~Array() + {} + ; +}; + +// Limits is an inline function that checks indices +inline void Limits(const int n, const int max) +{ +#ifdef RANGE_CHECKING + if ((n<0) || (n>=max)) + { + // error("Array Error: Index out of range ",n,max); + cerr << "Array error: Index out of range: 0<= " + << n << " < " << max << "\n" ; + Terminate(); + } +#endif // RANGE_CHECKING +} + +// Limits is an inline function that checks indices +// n==max is allowed +inline void LimitsInclusive(const int n, const int max) +{ +#ifdef RANGE_CHECKING + if ((n<0) || (n>max)) + { + // error("Array Error: Index out of range ",n,max); + cerr << "Array error: Upper limit for index out of range: 0<= " + << n << " <= " << max << "\n" ; + Terminate(); + } +#endif // RANGE_CHECKING +} + +inline void EqualLimits(const int max1, const int max2) +{ +#ifdef RANGE_CHECKING + if (max1!=max2) + { + cerr << "Array copy error: array sizes not equal:" + << max1 << "," << max2 << endl; + Terminate(); + } +#endif // RANGE_CHECKING +} + +inline void BiggerLimit(const int lower, const int upper) +{ +#ifdef RANGE_CHECKING + if (lower>=upper) + { + cerr << "Sub-array limits error: lower limit not lower " + << lower << "," << upper << endl; + Terminate(); + } +#endif // RANGE_CHECKING +} + + +// Array1 can accessed by () or []. [] keeps +// compatibility with form the STL +// Read is empty function since many elements do not provide +// the << operator +template +class Array1 : public Array +{ +public: + int size,mSize; + const int rank; + T* v; + bool b; + Array1():size(0),mSize(0),rank(1),v(0),b(true) + {} + ; + + + void clear() { + if(v && b) delete [] v; + size=0; + mSize=0; + v=NULL; + b=true; + } + + // Make a copy of the array and copy elements + Array1(const Array1& a):size(a.size),mSize(a.mSize), rank(1),v(new T[mSize]),b(a.b) { + //cout << "1"; + //cout << " Copying array1 size=" + //<< size << "mSize=" << mSize << " " << b << endl; + for(int i=0;imSize) + { + if (v) + delete[] v; + v = new T[n]; +#ifdef NO_EXCEPTIONS + if(v==NULL) error("Couldn't allocate Array"); +#endif + + mSize=n; + } + size = n; + } + + void Set(const T x) + { // Set all elements, equivalent to + for(int i=0;imSize) + { + T* vv = new T[n]; + for(int i=0;imSize) + { + T* vv = new T[n]; +#ifdef NO_EXCEPTIONS + if(vv==NULL) error("Couldn't allocate storage to resize array"); +#endif + for(int i=0;i0) os << ","; + os << a[i]; + } + os << ")"; + return os; + } + */ +}; + + +template < class T> +void write_array(ostream & os, const Array1 & a) { + int size=a.GetDim(0); + for(int i=0; i < size; i++) { + os << a(i) << " "; + } +} + +template +void read_array(istream & is, int n, Array1 & a) { + a.Resize(n); + for(int i=0; i< n; i++) + is >> a(i); +} + +//##################################################################### + +template +class Array2 : public Array +{ +public: + int step1; + int size,mSize; + const int rank; + int dim[2]; + T* v; + bool b; + Array2():step1(0),size(0),mSize(0),rank(2),v(0),b(true) + { + dim[0]=dim[1]=0; + }; + + void clear() { + if(v && b) delete [] v; + size=0; + mSize=0; + step1=0; + dim[0]=dim[1]=0; + v=NULL; + b=true; + } + + + // Create without initialization + Array2(int n1, int n2): + step1(n2), + size(n1*n2), + mSize(size), + rank(2), + v(new T[size]), + b(true) + { + + dim[0] = n1; + step1=dim[1]=n2; +#ifdef NO_EXCEPTIONS + if(v==NULL) error("Couldn't allocate Array"); +#endif + // cout << " Array [" << n1 << "," << n2 << "] of size " + // << size << " x " << sizeof(T) << " allocated.\n"; + } + // Create with initialization + Array2(int n1, int n2, const T vv):size(0),mSize(0),rank(2),v(0),b(true) + { + + Resize(n1,n2); + for(int i=0;i requires making a copy !!! + Array1 operator() (const int n1) + { + // cout << "Reference sub-array\n"; + #ifdef RANGE_CHECKING + Limits(n1,dim[0]); + #endif + return Array1 (dim[1],v+n1*step1); + } + + // Create a sub-array Array1(n1,n21.. operator() (const int n1, const int n21, const int n22) + { + // cout << "Reference sub-array\n"; +#ifdef RANGE_CHECKING + Limits(n1,dim[0]); + Limits(n21,dim[1]); + LimitsInclusive(n22,dim[1]); + BiggerLimit(n21,n22); +#endif + return Array1 (n22-n21,v+n1*step1+n21); + }; + + // Copy array like 1D + + Array2 & operator=(const Array2 & x) { + + Resize(x.dim[0],x.dim[1]); + for(int i=0;imSize) + { + if (v) + delete[] v; + v = new T[nn]; +#ifdef NO_EXCEPTIONS + if(v==NULL) error("Couldn't allocate Array"); +#endif + mSize=nn; + // cout << "Resizing 2d array (" << dim[0] << "," << dim[1] << ")->(" + // << n1 << "," << n2 << ")\n"; + } + size=nn; + dim[0] = n1; + dim[1] = n2; + step1 = dim[1]; + } + + + + void CopyResize(int n1, int n2) + { + if (!b) + error ("Cannot resize sub-array"); + int nn= n1*n2; + if ((n1!=dim[0]) || (nn>mSize)) + { + T* vv=new T[nn]; +#ifdef NO_EXCEPTIONS + if(vv==NULL) error("Couldn't allocate Array"); +#endif + for(int i1=0;i10) { os << ","; } + os << a(i,j); + } + os << ")\n"; + } + os << ")\n"; + return os; + } + */ +}; + + +template < class T> +void write_array(ostream & os, const Array2 & a) { + int size1=a.GetDim(0); int size2=a.GetDim(1); + for(int i=0; i < size1; i++) { + for(int j=0; j< size2; j++) + os << a(i,j) << " "; + os << endl; + } +} + +template +void read_array(istream & is, int n, int m, Array2 & a) { + a.Resize(n,m); + for(int i=0; i< n; i++) + for(int j=0; j< m; j++) + is >> a(i,j); + +} +//##################################################################### + +template +class Array3 : public Array +{ +public: + int step1, step2; + int size; + const int rank; + int dim[3]; + T* v; + bool b; + Array3():step1(0),step2(0),size(0),rank(3),v(0),b(true) + { + dim[0]=dim[1]=dim[2]=0; + } + + void clear() { + if(v && b) delete [] v; + size=0; + step1=step2=0; + dim[0]=dim[1]=dim[2]=0; + v=NULL; + b=true; + } + + + ~Array3() + { + if (v && b) + delete[] v; + //if(!b) cout << "didn't delete sub-array" << endl; + } + + Array3(int n1, int n2, int n3): // Create without initialization + step1(n2*n3), + step2(n3), + size(n1*step1), + rank(3), + v(new T[size]), + b(true) + { +#ifdef NO_EXCEPTIONS + if(v==NULL) error("Couldn't allocate Array"); +#endif + dim[0] = n1; + dim[1] = n2; + dim[2] = n3; + } + + Array3(int n1, int n2, int n3, const T vv):size(0),rank(3),v(0), b(true) + { // Create with initialization + Resize(n1,n2,n3); + for(int i=0;i operator() (const int n1,const int n2) + { // Access 1D sub-array + // cout << "Reference sub-array\n"; +#ifdef RANGE_CHECKING + Limits(n1,dim[0]); + Limits(n2,dim[1]); +#endif + return Array1 (dim[2],v+n1*step1+n2*step2); + }; + + Array2 operator + () (const int n1) + { // Access 2D sub-array + // cout << "Reference sub-array\n"; +#ifdef RANGE_CHECKING + Limits(n1,dim[0]); +#endif + return Array2 (dim[1],dim[2],v+n1*step1); + }; + + /* + T* operator() (const int n1, const int n2) { // Access sub-array + Limits(n1,dim[0]); Limits(n2,dim[1]); + return v+n1*step1+n2*step2; + } + */ + + + Array3 operator=(const Array3 & x) + { // Copy array like 1D + Resize(x.dim[0],x.dim[1],x.dim[2]); +//#ifdef RANGE_CHECKING +// assert(x.dim[0]=dim[0]); +// assert(x.dim[1]=dim[1]); +// assert(x.dim[2]=dim[2]); +//#endif + //cout << "3"; + for(int i=0;i= 0); + if (sizen>size) + { + if (v) + delete[] v; + size=sizen; + v = new T[size]; +#ifdef NO_EXCEPTIONS + if(v==NULL) error("Couldn't allocate Array"); +#endif + } + dim[0] = n1; + dim[1] = n2; + dim[2] = n3; + step2=dim[2]; + step1 = dim[1]*(step2); + } + + virtual int GetDim(const int d) const + { +#ifdef RANGE_CHECKING + Limits(d,rank); +#endif + return dim[d]; + } + virtual int* GetDims() const + { + return (int*)dim; + } + virtual int GetRank() const + { + return rank; + } + virtual int GetSize() const + { + return size; + } + inline int Size() const + { + return size; + } + + virtual void Read(istream& is) + { + double dummy; + is >> dummy; + error("Cannot read standard Array3\nNeed specialization of template"); + } +}; + + + +template < class T > +inline void array_cp(Array1 & x, const Array1 & y) { + x.Resize(y.GetDim(0)); + x=y; +} + +template < class T > +inline void array_cp(Array2 & x, const Array2 & y) { + x.Resize(y.GetDim(0), y.GetDim(1)); + x=y; +} + + + +#endif // ARRAY_H_INCLUDED +//-------------------------------------------------------------------------- diff --git a/src/program_utils/Array45.h b/src/program_utils/Array45.h new file mode 100644 index 00000000..4fb42cfe --- /dev/null +++ b/src/program_utils/Array45.h @@ -0,0 +1,352 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + extension of Arrays written by Burkhard Militzer + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ +//-------------------------------------------------------------------------- +// include/Array45.h +// +// +#ifndef ARRAY45_H_INCLUDED +#define ARRAY45_H_INCLUDED + +//This is somewhat hacked. Use with caution. +#include "Array.h" + +template +class Array4 : public Array +{ +public: + int step1, step2, step3; + int size; + const int rank; + int dim[4]; + T* v; + + Array4():step1(0),step2(0),step3(0),size(0),rank(4),v(0) + { + dim[0]=dim[1]=dim[2]=dim[3]=0; + } + + ~Array4() + { + if (v) + delete[] v; + } + + Array4(int n1, int n2, int n3, int n4): // Create without initialization + step1(n2*n3*n4), + step2(n3*n4), + step3(n4), + size(n1*step1), + rank(4), + v(new T[size]) + { + dim[0] = n1; + dim[1] = n2; + dim[2] = n3; + dim[3]=n4; + } + + Array4(int n1, int n2, int n3, int n4, const T vv):size(0),rank(4),v(0) + { // Create with initialization + Resize(n1,n2,n3,n4); + for(int i=0;i operator() (const int n1,const int n2, const int n3) + { // Access 1D sub-array + // cout << "Reference sub-array\n"; + Limits(n1,dim[0]); + Limits(n2,dim[1]); + Limits(n3,dim[2]); + return Array1 (dim[2],v+n1*step1+n2*step2+n3*step3); + }; + + Array2 operator + () (const int n1, const int n2) + { // Access 2D sub-array + // cout << "Reference sub-array\n"; + Limits(n1,dim[0]); + Limits(n2,dim[1]); + return Array2 (dim[1],dim[2],v+n1*step1); + }; + + Array3 operator + () (const int n1) + { // Access 3D sub-array + // cout << "Reference sub-array\n"; + Limits(n1,dim[0]); + return Array3 (dim[1],dim[2],dim[3],v+n1*step1); + }; +*/ + + /* + T* operator() (const int n1, const int n2) { // Access sub-array + Limits(n1,dim[0]); Limits(n2,dim[1]); + return v+n1*step1+n2*step2; + } + */ + + Array4 operator=(const Array4 x) + { // Copy array like 1D + Resize(x.dim[0],x.dim[1],x.dim[2],x.dim[3]); + for(int i=0;isize) + { + if (v) + delete[] v; + size=sizen; + v = new T[size]; + } + dim[0] = n1; + dim[1] = n2; + dim[2] = n3; + dim[3]=n4; + step3=n4; + step2=step3*n3; + step1=step2*n2; + } + + virtual int GetDim(const int d) const + { + Limits(d,rank); + return dim[d]; + } + virtual int* GetDims() const + { + return (int*)dim; + } + virtual int GetRank() const + { + return rank; + } + inline int GetSize() const + { + return size; + } + inline int Size() const + { + return size; + } + virtual void Read(istream& is) + { + error("Cannot read standard Array4\nNeed specialization of template"); + } +}; + +template +class Array5 : public Array +{ +public: + int step1, step2, step3, step4; + int size; + const int rank; + int dim[5]; + T* v; + + Array5():step1(0),step2(0),step3(0),step4(0),size(0),rank(4),v(0) + { + dim[0]=dim[1]=dim[2]=dim[3]=0; + } + + ~Array5() + { + if (v) + delete[] v; + } + + Array5(int n1, int n2, int n3, int n4, int n5): // Create without initialization + step1(n2*n3*n4*n5), + step2(n3*n4*n5), + step3(n4*n5), + step4(n5), + size(n1*step1), + rank(5), + v(new T[size]) + { + dim[0] = n1; + dim[1] = n2; + dim[2] = n3; + dim[3]=n4; + dim[4]=n5; + } + + Array5(int n1, int n2, int n3, int n4, int n5, const T vv):size(0),rank(5),v(0) + { // Create with initialization + Resize(n1,n2,n3,n4,n5); + for(int i=0;i operator() (const int n1,const int n2, const int n3, const int n4) + { // Access 1D sub-array + // cout << "Reference sub-array\n"; + Limits(n1,dim[0]); + Limits(n2,dim[1]); + Limits(n3,dim[2]); + Limits(n4, dim[3]); + return Array1 (dim[4],v+n1*step1+n2*step2+n3*step3+n4*step4); + }; + + Array2 operator + () (const int n1, const int n2, const int n3) + { // Access 2D sub-array + // cout << "Reference sub-array\n"; + Limits(n1,dim[0]); + Limits(n2,dim[1]); + Limits(n3,dim[2]); + return Array2 (dim[3],dim[4],v+n1*step1+n2*step2+n3*step3); + }; + + Array3 operator() (const int n1, const int n2) + { + Limits(n1, dim[0]); + Limits(n2, dim[1]); + return Array3 (dim[2], dim[3], dim[4], v+n1*step1+n2*step2); + } + + /* + T* operator() (const int n1, const int n2) { // Access sub-array + Limits(n1,dim[0]); Limits(n2,dim[1]); + return v+n1*step1+n2*step2; + } + */ + + Array5 operator=(const Array5 x) + { // Copy array like 1D + Resize(x.dim[0],x.dim[1],x.dim[2],x.dim[3], x.dim[4]); + for(int i=0;isize) + { + if (v) + delete[] v; + size=sizen; + v = new T[size]; + } + dim[0] = n1; + dim[1] = n2; + dim[2] = n3; + dim[3]=n4; + dim[4]=n5; + step4=n5; + step3=step4*n4; + step2=step3*n3; + step1 = step2*n2; + } + + virtual int GetDim(const int d) const + { + Limits(d,rank); + return dim[d]; + } + virtual int* GetDims() const + { + return (int*)dim; + } + virtual int GetRank() const + { + return rank; + } + virtual int GetSize() const + { + return size; + } + inline int Size() const + { + return size; + } + virtual void Read(istream& is) + { + error("Cannot read standard Array5\nNeed specialization of template"); + } +}; + + +#endif // ARRAY45_H_INCLUDED +//-------------------------------------------------------------------------- diff --git a/src/program_utils/MatrixAlgebra.h b/src/program_utils/MatrixAlgebra.h new file mode 100644 index 00000000..44e40c73 --- /dev/null +++ b/src/program_utils/MatrixAlgebra.h @@ -0,0 +1,91 @@ +/* + +Copyright (C) 2007 Burkhard Militzer + with some modifications by Lucas K. Wagner + and extensions to Pfaffian algebra by Michal Bajdich + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ +#ifndef MATRIXALGEBRA_H_INCLUDED +#define MATRIXALGEBRA_H_INCLUDED + +#include "Array.h" +#include "Qmc_std.h" + +doublevar Determinant(const Array2 & a, const int n); +dcomplex Determinant(const Array2 & a, const int n); + +void MultiplyMatrices(const Array2 & a, const Array2 & b, + Array2 & c, int n); + +void InvertMatrix(const Array2 & a, Array2 & a1, const int n); +doublevar InverseUpdateRow(Array2 & a1, const Array2 & a, + const int lRow, const int n); +doublevar InverseUpdateRow(Array2 & a1, const Array1 & newRow, + const int lRow, const int n); +doublevar InverseUpdateColumn(Array2 & a1, const Array2 & a, + const int lCol, const int n); +doublevar InverseUpdateColumn(Array2 & a1, const Array1 & newCol, + const int lCol, const int n); + +void TransposeMatrix(Array2 & a, const int n); +doublevar TransposeInverseMatrix(const Array2 & a, Array2 & a1, const int n); +doublevar TransposeInverseUpdateRow(Array2 & a1, const Array2 & a, + const int lCol, const int n); +doublevar TransposeInverseUpdateColumn(Array2 & a1, const Array2 & a, + const int lRow, const int n); +doublevar Pfaffian_nopivot(const Array2 & a); + +doublevar Pfaffian_partialpivot(const Array2 & a); + +doublevar UpdateInversePfaffianMatrix(Array2 & a, Array1 & row, + Array1 & column, int n); +doublevar GetUpdatedPfaffianValue(Array2 & in, + Array1 & row, + int e); +doublevar PfaffianInverseMatrix(const Array2 & a, Array2 & a1); + + +inline doublevar cabs(dcomplex & a) { + return sqrt(a.real()*a.real()+a.imag()*a.imag()); +} + +int ludcmp(Array2 & a, const int n, Array1 & indx, + doublevar & d); +void lubksb(Array2 & a, int n, Array1 & indx, + Array1 & b); +void Jacobi(const Array2 < doublevar > & Ain, Array1 < doublevar> & evals, Array2 < doublevar> & evecs); + +//---------------------------------------------------------------------- +//complex versions of determinant stuff + +int ludcmp(Array2 & a, const int n, + Array1 & indx, doublevar & d); +void lubksb(Array2 < dcomplex > & a, int n, + Array1 & indx, Array1 & b); + +dcomplex +TransposeInverseMatrix(const Array2 & a, + Array2 & a1, + const int n); +dcomplex +InverseUpdateColumn(Array2 & a1, + const Array1 & newCol, + const int lCol, const int n); +void Jacobi(const Array2 < dcomplex > & Ain, Array1 & evals, Array2 < dcomplex > & evecs); + +#endif // MATRIXALGEBRA_H_INCLUDED +//-------------------------------------------------------------------------- diff --git a/src/program_utils/MatrixAlgebrac.cpp b/src/program_utils/MatrixAlgebrac.cpp new file mode 100644 index 00000000..df930ae7 --- /dev/null +++ b/src/program_utils/MatrixAlgebrac.cpp @@ -0,0 +1,1423 @@ +/* + +Copyright (C) 2007 Burkhard Militzer + with modifications by Lucas K. Wagner + and extensions to Pfaffian algebra by Michal Bajdich + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ +//-------------------------------------------------------------------------- +// src/MatrixAlgebrac.cpp +// +// +// Matrix operations +// +// Burkhard Militzer Urbana 4-1-99 +// +#include +#include "Array.h" +#include "Qmc_std.h" +#include "MatrixAlgebra.h" + +const doublevar TINY=1.0e-20; + +Array2 tmp2; +Array1 tmp11,tmp12; +Array1 itmp1; + +// LU decomposition of matrix a, which is overwritten +//Modified to return 1 if successful, 0 if not. +int ludcmp(Array2 & a, const int n, Array1 & indx, doublevar & d) +{ + // cout << "ludcmp" << endl; + Array1 & vv(tmp11); + vv.Resize(n); + + //cout << "start " << endl; + d=1.0; + for (int i=0;i big) big=temp; + doublevar temp=fabs(a(i,j)); + if(temp>big) + big=temp; + } + if (big == 0.0) + return 0;//error("Singular matrix in routine ludcmp"); + vv[i]=1.0/big; + } + + //cout << "middle " << endl; + for (int j=0;j= big) { + doublevar dum=vv[i]*fabs(sum); + if(dum >=big) + { + big=dum; + imax=i; + } + } + //cout << "3 " << endl; + if (j != imax) + { + for (int k=0;k & a, int n, Array1 & indx, Array1 & b) +{ + int ii(-1); + for (int i=0;i=0) + for (int j=ii;j=0;--i) + { + doublevar sum(b[i]); + for (int j=i+1;j & a, Array2 & a1, const int n) +{ + Array2 & temp(tmp2); + temp.Resize(n,n); + Array1 & indx(itmp1); + indx.Resize(n); + doublevar d; + + // a(i,j) first index i is row index (convention) + // elements of column vectors are stored contiguous in memory in C style arrays + // a(i) refers to a column vector + + // calculate the inverse of the transposed matrix because this + // allows to pass a column vector to lubksb() instead of a row + + // put the transposed matrix in temp + for(int i=0;i yy;//(a1(j)); + yy.refer(a1(j)); + lubksb(temp,n,indx,yy); + } +} + + +int InvertPfaffianMatrix(const Array2 & a, Array2 & a1, const int n) +{ + Array2 & temp(tmp2); + temp.Resize(n,n); + Array1 & indx(itmp1); + indx.Resize(n); + doublevar d; + + // a(i,j) first index i is row index (convention) + // elements of column vectors are stored contiguous in memory in C style arrays + // a(i) refers to a column vector + + // calculate the inverse of the transposed matrix because this + // allows to pass a column vector to lubksb() instead of a row + + // put the transposed matrix in temp + for(int i=0;i yy;//(a1(j)); + yy.refer(a1(j)); + lubksb(temp,n,indx,yy); + } + return 1; +} + + + +// Calculate the transpose inverse of matrix a +// and return the determinant +doublevar TransposeInverseMatrix(const Array2 & a, Array2 & a1, const int n) +{ + Array2 &temp(tmp2); + temp.Resize(n,n); + Array1 & indx(itmp1); + indx.Resize(n); + doublevar d; + + // a(i,j) first index i is row index (convention) + // elements of column vectors are stored contiguous in memory in C style arrays + // a(i) refers to a column vector + + // calculate the inverse of the transposed matrix because this + // allows to pass a column vector to lubksb() instead of a row + + // put the transposed matrix in temp + //cout << "temp " << endl; + for(int i=0;i yy;//(a1(j)); + yy.refer(a1(j)); + lubksb(temp,n,indx,yy); + } + + //cout << "determinant" << endl; + // return the determinante as well + for(int j=0;j & a, const int n) +{ + Array2 & temp(tmp2); + temp.Resize(n,n); + Array1 & indx(itmp1); + indx.Resize(n); + doublevar d; + + // a(i,j) first index i is row index (convention) + // elements of column vectors are stored contiguous in memory in C style arrays + // a(i) refers to a column vector + + // calculate the inverse of the transposed matrix because this + // allows to pass a column vector to lubksb() instead of a row + + // put the transposed matrix in temp + for(int i=0;i & a, const int n) +{ + Array2 temp(n,n); + temp.Resize(n,n); + Array1 & indx(itmp1); + indx.Resize(n); + dcomplex d; + + // a(i,j) first index i is row index (convention) + // elements of column vectors are stored contiguous in memory in C style arrays + // a(i) refers to a column vector + + // calculate the inverse of the transposed matrix because this + // allows to pass a column vector to lubksb() instead of a row + + // put the transposed matrix in temp + for(int i=0;i & a, const int n) +{ + for(int i=0;i & a, const Array2 & b, + Array2 & c, int n) +{ + for(int i=0;i & a1, const Array2 & a, + const int lRow, const int n) +{ + Array1 & tmpColL(tmp11); + tmpColL.Resize(n); + Array1 & prod(tmp12); + prod.Resize(n); + + doublevar f=0.0; + for(int i=0;i & a1, const Array1 & newRow, + const int lRow, const int n) +{ + Array1 & tmpColL(tmp11); + tmpColL.Resize(n); + Array1 & prod(tmp12); + prod.Resize(n); + + doublevar f=0.0; + for(int i=0;i & a1, const Array2 & a, + const int lCol, const int n) +{ + Array1 & tmpColL(tmp11); + tmpColL.Resize(n); + Array1 & prod(tmp12); + prod.Resize(n); + + doublevar f=0.0; + for(int i=0;i & a1, const Array1 & newCol, + const int lCol, const int n) +{ + Array1 & tmpColL(tmp11); + tmpColL.Resize(n); + Array1 & prod(tmp12); + prod.Resize(n); + + doublevar f=0.0; + +#ifdef USE_BLAS + int a1size=a1.GetDim(1); + + doublevar * a1col=a1.v+lCol*a1size; + + f=cblas_ddot(n,a1col, 1, newCol.v, 1); + f=-1.0/f; + + cblas_dcopy(n,a1col,1,tmpColL.v,1); + + cblas_dgemv(CblasRowMajor,CblasNoTrans,n,n, + 1.0,a1.v,a1size, + newCol.v,1, + 0.0,prod.v,1); + + cblas_dscal(n,f,prod.v,1); + + cblas_dger(CblasRowMajor, n,n,1.0, + prod.v,1, + tmpColL.v,1, + a1.v,a1size); + f=-f; + cblas_dcopy(n,tmpColL.v,1,a1col,1); + cblas_dscal(n,f,a1col,1); + +#else + + for(int i=0;i & a1, const Array2 & a, + const int lCol, const int n) +{ + Array1 & tmpColL(tmp11); + tmpColL.Resize(n); + Array1 & prod(tmp12); + prod.Resize(n); + + doublevar f=0.0; + for(int i=0;i & a1, const Array2 & a, + const int lRow, const int n) +{ + Array1 & tmpColL(tmp11); + tmpColL.Resize(n); + Array1 & prod(tmp12); + prod.Resize(n); + + doublevar f=0.0; + for(int i=0;i & in){ + // calculate the pfaffian of skew-symmetric matrix + // no pivoting + assert(in.dim[0]==in.dim[1]); + if (in.dim[0]%2!=0) return 0.0; + int n=in.dim[0]/2; + Array2 tmp(2*n,2*n); + doublevar PF=1.0; + doublevar fac; + for (int i=0;i<2*n;i=i++) + for (int l=0;l<2*n;l++) + tmp(i,l)=in(i,l); + + + for (int i=0;i<2*n;i=i+2){ + for (int j=i+2;j<2*n;j++){ + fac=-tmp(i,j)/tmp(i,i+1); + for (int k=i+1;k<2*n;k++){ + tmp(k,j)=tmp(k,j)+fac*tmp(k,i+1); + tmp(j,k)=tmp(j,k)+fac*tmp(i+1,k); + } + } + PF=PF*tmp(i,i+1); + } + return PF; +} + + + +int RowPivoting(Array2 & tmp, int i, int n){ + doublevar big; + doublevar temp; + doublevar TINY=1e-20; + Array1 backup(2*n) ; + int d=1; + int k=0; + big=0.0; + for (int j=i+1;j<2*n;j++){ + temp=fabs(tmp(i,j)); + if(temp > big){ + big=temp; + k=j; + // cout <<"found one"; + } + } + if (big & in){ + //cout << "Pfaffian_partialpivot start"< tmp(2*n,2*n); + doublevar PF=1.0; + doublevar fac; + for (int i=0;i<2*n;i++) + for (int l=0;l<2*n;l++) + tmp(i,l)=in(i,l); + + + + + int d=1; + for (int i=0;i<2*n;i=i+2){ + //for given row look for pivoting element + //exchange if needed + d*=RowPivoting(tmp, i, n); + // printout_matrix(tmp); + + for (int j=i+2;j<2*n;j++){ + fac=-tmp(i,j)/tmp(i,i+1); + for (int k=i+1;k<2*n;k++){ + tmp(k,j)=tmp(k,j)+fac*tmp(k,i+1); + tmp(j,k)=tmp(j,k)+fac*tmp(i+1,k); + } + } + PF=PF*tmp(i,i+1); + } + //cout << "Pfaffian_partialpivot end"< & in, + Array1 & row, + Array1 & column, + int e) +{ + //update row and collum of skew-symmetric inverse matrix + assert(in.dim[0]==in.dim[1]); + int n=in.dim[0]/2; + + assert(e<=2*n); + + for (int i=0;i<2*n;i++){ + column(i)=0.0; + for (int j=0;j<2*n;j++) + column(i)+=row(j)*in(j,i); + } + + //to avoid the catastrophe in later division + if (column(e)==0) + column(e)=1e-20; + + for(int i=0;i<2*n;i++){ + if (i==e){ + in(i,i)=0.0; + } + else { + in(e,i)=+in(e,i)/column(e); + in(i,e)=-in(e,i); + } + } + + for(int j=0;j<2*n;j++){ + if (j!=e){ + for (int k=0;k<2*n;k++){ + if (k==j) { + in(k,k)=0.0; + } + else { + in(k,j)-=column(j)*in(k,e); + in(j,k)=-in(k,j); + } + } + } + } + + /* + for (int i=0;i<2*n;i++){ + for (int j=0;j<2*n;j++) + cout << in(i,j)<< " "; + cout < & in, + Array1 & row, + int e) +{ + //update row and collum of skew-symmetric inverse matrix + assert(in.dim[0]==in.dim[1]); + int n=in.dim[0]/2; + + assert(e<=2*n); + + doublevar new_val_tmp=0.0; + for (int j=0;j<2*n;j++) + new_val_tmp+=row(j)*in(j,e); + + + return new_val_tmp; +} + + +/* +doublevar UpdateInversePfaffianMatrix(Array2 & in, + Array1 & row, + Array1 & column, + int ii) +{ + //update row and collum of skew-symmetric matrix + assert(in.dim[0]==in.dim[1]); + int n=in.dim[0]/2; + + for (int i=0;i<2*n;i++){ + column(i)=0.0; + for (int j=0;j<2*n;j++) + column(i)+=row(j)*in(j,i); + } + + if (fabs(column(ii))<1e-10) { + cout <<"Ratio of pfaffians is essentially zero!!!\n"; + return 0.0; + } + else { + + for(int i=0;i<2*n;i++){ + in(ii,i)=-in(ii,i)/column(ii); + in(i,ii)=-in(i,ii)/column(ii); + } + + for(int j=0;j<2*n;j++){ + if (j!=ii){ + for (int k=0;k<2*n;k++){ + in(j,k)=in(j,k)+column(j)*in(ii,k); + in(k,j)=in(k,j)+column(j)*in(k,ii); + } + } + } + return column(ii); + } +} +*/ + + +doublevar PfaffianInverseMatrix(const Array2 & a, Array2 & a1){ + if(!InvertPfaffianMatrix(a,a1,a.dim[0])) + return 0.0; + else + return Pfaffian_partialpivot(a); +} + + + +//---------------------------------------------------------------------- + +int ludcmp(Array2 > & a, const int n, + Array1 & indx, doublevar & d) +{ + + const doublevar TINY=1.0e-20; + // cout << "ludcmp" << endl; + Array1 vv(n); + + //cout << "start " << endl; + d=1.0; + for (int i=0;i big) big=temp; + doublevar temp=cabs(a(i,j)); + if(temp>big) + big=temp; + } + if (big == 0.0) + return 0;//error("Singular matrix in routine ludcmp"); + vv[i]=1.0/big; + } + + //cout << "middle " << endl; + for (int j=0;j sum=a(i,j); + for (int k=0;k sum=a(i,j); + for (int k=0;k= big) { + doublevar dum=vv[i]*cabs(sum); + if(dum >=big) + { + big=dum; + imax=i; + } + } + //cout << "3 " << endl; + if (j != imax) + { + for (int k=0;k dum(a(imax,k)); + a(imax,k)=a(j,k); + a(j,k)=dum; + } + d = -d; + vv[imax]=vv[j]; + } + indx[j]=imax; + if (a(j,j) == 0.0) + { + a(j,j)=TINY; + //Write(n); + for (int q=0;q dum=1.0/(a(j,j)); + for (int i=j+1;i > & a, int n, + Array1 & indx, Array1 > & b) { + int ii(-1); + for (int i=0;i sum(b[ip]); + b[ip]=b[i]; + if (ii>=0) + for (int j=ii;j=0;--i) + { + complex < doublevar > sum(b[i]); + for (int j=i+1;j +TransposeInverseMatrix(const Array2 < complex > & a, + Array2 < complex > & a1, + const int n) +{ + Array2 > temp(n,n); + Array1 indx(n); + doublevar d; + + // a(i,j) first index i is row index (convention) + // elements of column vectors are stored contiguous in memory in C style arrays + // a(i) refers to a column vector + + // calculate the inverse of the transposed matrix because this + // allows to pass a column vector to lubksb() instead of a row + + // put the transposed matrix in temp + //cout << "temp " << endl; + for(int i=0;i (0.0,0.0); + } + a1(i,i)=complex (1.0,0.0); + } + + //cout << "ludcmp" << endl; + //if the matrix is singular, the determinant is zero. + if(ludcmp(temp,n,indx,d)==0) + return 0; + + //cout << "lubksb" << endl; + + for(int j=0;j > yy;//(a1(j)); + yy.refer(a1(j)); + lubksb(temp,n,indx,yy); + } + + + complex det(d,0); + for(int j=0;j +InverseUpdateColumn(Array2 > & a1, + const Array1 > & newCol, + const int lCol, const int n) +{ + Array1 > tmpColL(n); + Array1 > prod(n); + + complex f=0.0; + for(int i=0;i & p(prod[i]); + for(int j=0;j & Ain, Array1 & evals, Array2 & evecs){ + const int n = Ain.dim[0]; + Array2 < dcomplex > Ain_complex(n,n); + Array2 evecs_complex(n,n); + for (int i=0; i < n; i++) + for (int j=0; j < n; j++) { + Ain_complex(i,j)=dcomplex(Ain(i,j),0.0); + } + Jacobi(Ain_complex, evals, evecs_complex); + for (int i=0; i < n; i++) + for (int j=0; j < n; j++){ + evecs(i,j)=real(evecs_complex(i,j)); + } +} + + +void Jacobi(const Array2 < dcomplex > & Ain, Array1 & evals, Array2 < dcomplex > & evecs) +{ + //assert(Ain.nr == Ain.nc); + //assert(Ain.hermitian); + + const int n = Ain.dim[0]; + + int p,q; + doublevar fabsApq,fabsApp,fabsAqq; + doublevar a,c,blen,sitheta; + dcomplex b; + doublevar t,zeta; + doublevar alpha,stau; + dcomplex beta,betastar; + dcomplex zp,zq; + + const int MAXSWEEP=100; + + /* local copy to work on */ + Array2 < dcomplex > A(n,n); + + /* Copy Ain to A */ + for (int i=0; i < n; i++) + for (int j=0; j < n; j++) { + A(i,j) = Ain(i,j); + //cout << A(i,j).imag()<= maxoffdiag) { + maxoffdiag = temp; + p = i; + q = j; + } + } + if (maxoffdiag == 0.0) break; + // If we're done to machine precision, go home! + fabsApp = fabs(real(A(p,p)))+fabs(imag(A(p,p))); + fabsAqq = fabs(real(A(q,q)))+fabs(imag(A(q,q))); + if ( (maxoffdiag+fabsApp==fabsApp) && (maxoffdiag+fabsAqq==fabsAqq) ) + break; + + // set threshold + doublevar thresh = 0.0; + if (sweep < 5) thresh = 0.4*S/(n*n); + + // Loop over off diagonal terms of A in upper triangle: p < q + for (int p=0; p < n; p++) + for (int q=p+1; q < n; q++) { + // If A(p,q) is too small compared to A(p,p) and A(q,q), + // skip the rotation + fabsApq = fabs(real(A(p,q)))+fabs(imag(A(p,q))); + fabsApp = fabs(real(A(p,p)))+fabs(imag(A(p,p))); + fabsAqq = fabs(real(A(q,q)))+fabs(imag(A(q,q))); + if ( (fabsApq+fabsApp==fabsApp) && (fabsApq+fabsAqq==fabsAqq) ) + continue; + + // If A(p,q) is smaller than the threshold, then also skip + // the rotation + if (fabsApq <= thresh) + continue; + + // the 2x2 matrix we diagonalize is [ [a b] ; [conj(b) a] ] + a = real(A(p,p)); + c = real(A(q,q)); + b = A(p,q); + blen = abs(b); + zeta = (c-a)/(2.0*blen); + + // t = sgn(zeta)/(|zeta|+sqrt(zeta^2+1)), but if zeta is too + // huge, then we set t = 1/(2*zeta) + if ( fabs(zeta)>1.0e200 ) + t = 1/(2.0*zeta); + else { + t = 1.0/(fabs(zeta)+sqrt(zeta*zeta+1.0)); + if (zeta<0.0) t = -t; + } + + /* The matrix we use to diagonalize the 2x2 block above is + * [ [alpha beta] ; [-conj(beta) alpha] ] + * where alpha is real and positive and alpha = cos(theta) + * and beta = sin(theta)*b/|b|. + * The angle theta is chosen to diagonalize the 2x2 block. + * The relevant formula are sin(theta)=cos(theta)*t and + * cos(theta)=1/sqrt(1+t^2). + * stau = (1-alpha) cleverly written. */ + alpha = 1.0/sqrt(t*t+1.0); + sitheta = t*alpha; + stau = sitheta*sitheta/(1.0+alpha); + beta = b*sitheta/blen; + betastar = conj(beta); + + /* Now we update the elements of A: */ + /* This involves chaning the p'th and q'th column of A */ + for (int i=0; i < n; i++) { + if (i==p) { + A(i,p) -= blen*t; + A(i,q) = 0.0; + } + else if (i==q) { + A(i,p) = 0.0; + A(i,q) += blen*t; + } + else { + zp = A(i,p); + zq = A(i,q); + A(i,p) -= stau*zp + betastar*zq; + A(i,q) += beta*zp - stau*zq; + A(p,i) = conj(A(i,p)); + A(q,i) = conj(A(i,q)); + } + } + /* + for (int i=0; i < n; i++){ + for (int j=i; j < n; j++) { + if(fabs(A(i,j).real())>1e-6) + cout << A(i,j).real()<<" "; + else + cout <<"0 "; + } + cout << endl; + } + */ + + /* Now we must update the eigenvector matrix with this + * rotation: evecs <- evecs*P_pq. + * Update p'th and q'th column of evecs */ + for (int i=0; i < n; i++) { + zp = evecs(i,p); + zq = evecs(i,q); + evecs(i,p) = alpha*zp - betastar*zq; + evecs(i,q) = beta*zp + alpha*zq; + } + } /* (p,q) rotation loop */ + } /* end of sweep loop */ + + if (sweep == MAXSWEEP) { + cout << endl <<"Warning: Jacobi() needs more than "< list(n); + for (int i=0; i < n; i++) + list[i] = i; + + for (int i=1; i < n; i++) { + const double temp = evals[i]; + int j; + for (j=i-1; j>=0 && evals[j] coor; + //!< Coordinates of the atom + string name; + //!< An identifier that's used to match with pseudopotentials, basis sets, etc + doublevar charge; + //!< atomic number minus psp removed elecs + + void reset() + { + coor[0]=0; + coor[1]=0; + coor[2]=0; + name=" "; + charge=0; + } + Atom() + { + coor.resize(3); + reset(); + } + +}; + + +/*! +This class is designed to hold all the options given by the user as they +were given, so that various parts of the program can read the options. +*/ +class Program_options +{ +public: + + string runid; + //!< name of the run + + vector < vector < string > > methodtext; + //! > pseudotext; + vector > systemtext; + //!< SYSTEM text + vector < vector > twftext; + //!< TRIALFUNC text. Since there could be several sections, this is a vector. + int verbose; + //!< Possibly: 0-minimal output, 1-medium output, 2-debug output + + Program_options() + { + verbose=0; + } +}; + + +#endif //PROGRAM_OPTIONS_H_INCLUDED +//-------------------------------------------------------------------------- diff --git a/src/program_utils/Qmc_std.cpp b/src/program_utils/Qmc_std.cpp new file mode 100644 index 00000000..0a702a3c --- /dev/null +++ b/src/program_utils/Qmc_std.cpp @@ -0,0 +1,148 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ + + +#include "Qmc_std.h" + +namespace global_options { + int rappture=0; +} + +mpi_info_struct mpi_info; + +int parallel_sum(int inp) { +#ifdef USE_MPI + int ret; + MPI_Allreduce(&inp, &ret, 1,MPI_INT, MPI_SUM, MPI_COMM_WORLD); + return ret; +#endif + return inp; +} + +doublevar parallel_sum(doublevar inp) { +#ifdef USE_MPI + doublevar ret; + MPI_Allreduce(&inp, &ret, 1,MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); + return ret; +#endif + return inp; +} + + +dcomplex parallel_sum(dcomplex inp) { +#ifdef USE_MPI + doublevar real, imag, dum; + dum=inp.real(); + MPI_Allreduce(&dum, &real,1, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); + dum=inp.imag(); + MPI_Allreduce(&dum, &imag,1, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); + return dcomplex(real, imag); +#endif + return inp; +} + + +int MPI_Send_complex(dcomplex & c, int node) { +#ifdef USE_MPI + doublevar tmp=c.real(); + MPI_Send(&tmp, 1, MPI_DOUBLE, node, 0, MPI_COMM_WORLD); + tmp=c.imag(); + MPI_Send(&tmp, 1, MPI_DOUBLE, node, 0, MPI_COMM_WORLD); +#endif + return 1; +} +int MPI_Recv_complex(dcomplex & c , int node) { +#ifdef USE_MPI + doublevar real, imag; + MPI_Status status; + MPI_Recv(&real, 1, MPI_DOUBLE, node, 0, MPI_COMM_WORLD, &status); + MPI_Recv(&imag, 1, MPI_DOUBLE, node, 0, MPI_COMM_WORLD, &status); + c=dcomplex(real, imag); +#endif + return 1; +} + + + +//---------------------------------------------------------------------- + +void wait_turn() { +#ifdef USE_MPI + if(mpi_info.node==0) return; + else { + int rec=0; + int recnode=mpi_info.node-1; + MPI_Status status; + MPI_Recv(&rec, 1, MPI_INT, recnode, 0, MPI_COMM_WORLD, & status); + } +#endif +} + +void finish_turn() { +#ifdef USE_MPI + int node=mpi_info.node+1; + if(node < mpi_info.nprocs) { + int send=1; + MPI_Send(&send, 1, MPI_INT, node, 0, MPI_COMM_WORLD); + } +#endif +} + +//---------------------------------------------------------------------- + + +//This works for unix, at least. May not be completely portable +//to windows..can remove it if it isn't. +#include +int qmcgethostname(char * name, size_t size) +{ + return gethostname(name, size); +} + +//---------------------------------------------------------------------- + +void Terminate() +{ +#ifdef USE_MPI + cout << "Node " << mpi_info.node << " terminating " << endl; +#endif + +#ifndef NO_EXCEPTIONS + Qmc_error err_obj; + throw err_obj; +#else + cerr <<"Exiting now\n"; +#ifdef USE_MPI + MPI_Abort(MPI_COMM_WORLD, 75); +#endif + + exit(1); +#endif +} + + +//---------------------------------------------------------------------- +int roundoff(double x) +{ + double y; + y=floor(x); + if (x>=y+0.5) return int(y+1); + else return int(y); +} diff --git a/src/program_utils/Qmc_std.h b/src/program_utils/Qmc_std.h new file mode 100644 index 00000000..a12cafa9 --- /dev/null +++ b/src/program_utils/Qmc_std.h @@ -0,0 +1,203 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ + +#ifndef QMC_STD_INCLUDED +#define QMC_STD_INCLUDED + +#ifdef USE_MPI +#include "mpi.h" +#endif + +#include +#include +#include +#include +#include + +#ifdef USE_BLAS +extern "C" { +#include "cblas.h" +} +#endif + +using namespace std; + + +class mpi_info_struct +{ +public: + mpi_info_struct() + { + node=0; + nprocs=1; + } + int node; + int nprocs; +}; +extern mpi_info_struct mpi_info; + +typedef double doublevar; +typedef complex dcomplex; +int parallel_sum(int inp); +doublevar parallel_sum(doublevar inp); +dcomplex parallel_sum(dcomplex inp); +int MPI_Send_complex(dcomplex & , int node); +int MPI_Recv_complex(dcomplex &, int node); + +const doublevar zero_exp=-1e3; //!< effective zero for an exponent + + +namespace global_options { + extern int rappture; +} + +class Program_options; + +int qmcgethostname(char *, size_t); + + +class Qmc_error { + +}; + + +//put wait_turn() and finish_turn() around a block +//to make the processes go in order from 0,..,n-1 +//Useful for I/O through NFS servers(especially writing configs) +void wait_turn(); +void finish_turn(); + + + +template +void exchange(T & a, T & b) { + T tmp; + tmp=a; + a=b; + b=tmp; +} + + +#include +#include +#include + + +#include +using namespace std; + +#ifndef pi +const double pi=3.1415926535897932385; +#endif + +//-------------------------------------------------------------------------- +// include/Burk_standard.h +// +// +// Standard definitions and functions +// +// Burkhard Militzer Urbana 4-9-99 +// edited by Lucas Wagner, NCSU, 2002 + + +inline double sign(double x) +{ + return (x>0.0) ? 1.0 : ((x<0.0) ? -1.0 : 0.0); +} + +inline int sign(int x) +{ + return (x>0) ? 1 : ((x<0) ? -1 : 0); +} + +void Terminate(); + +inline void error(const char* m) +{ + cout<<"Error " << m << "\n"; + Terminate(); +} + +template +inline +void error(const char* m, const T& n) +{ + cout.precision(16); + cout<<"Error "<< m << n <<"\n"; + Terminate(); +} + +template +inline +void error(const char* m, const T& t, const U& u) +{ + cout.precision(16); + cout<<"Error "<< m << t << u <<"\n"; + Terminate(); +} + +template +inline +void error(const char* m, const T& t, const U& u, const V& v) +{ + cout.precision(16); + cout<<"Error "<< m << t << u << v <<"\n"; + Terminate(); +} + +template +inline +void error(const char* m, const T& t, const U& u, const V& v, const W& w) +{ + cout.precision(16); + cout<<"Error "<< m << t << u << v << w << "\n"; + Terminate(); +} + +int roundoff(double x); + + +/*! +This is a slightly tricky bit that I'd like to get rid of if possible. +When we have separate data and calculator wavefunction objects, the +calculator needs to use a pointer to the derived class to access the +data members of the data class, but of course the higher level parts +of the program shouldn't know about it. So we have to recast the +base pointer to a derived pointer. +*/ +template +void recast(T * & baseptr, U * & derivedptr) +{ + derivedptr = dynamic_cast (baseptr); + if(derivedptr == 0) + { + error("Died while attempting to downcast a variable. There's probably" + "something wrong with the code. Make sure you're using recast() on" + "a pointer to a base class and a derived pointer, and that everything" + "is getting generated correctly."); + } +} + +#include "Array.h" + + +#endif //QMC_STD_INCLUDED + +//-------------------------------------------------------------------------- diff --git a/src/program_utils/average.cpp b/src/program_utils/average.cpp new file mode 100644 index 00000000..217f72db --- /dev/null +++ b/src/program_utils/average.cpp @@ -0,0 +1,382 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ + +#include "average.h" +#include "qmc_io.h" + + + + +/* +Averaging without weights. + */ +void average(int start, int end, + Array2 & vals, + Array1 & average, + Array1 & variance, + int paravg + ) +{ + + int navg=vals.GetDim(0); //number of averaging variables + int npoints=end-start;//vals.GetDim(1); //Number of points + + assert(vals.GetDim(1) >= npoints); + + average.Resize(navg); + variance.Resize(navg); + + average=0; + variance=0; + int totpoints=0; + + +#ifdef USE_MPI + + if(paravg) + { + MPI_Allreduce(&npoints, &totpoints, 1, + MPI_INT, MPI_SUM, MPI_COMM_WORLD); + } + else + { + totpoints=npoints; + } +#else + totpoints=npoints; +#endif + //---------------------------------------- + //take average + for(int n=0; n< navg; n++) + { + doublevar average_temp=0; + for(int point=start; point < end; point++) + { + average_temp+=vals(n,point); + } + +#ifdef USE_MPI + if(paravg) + { + MPI_Allreduce(&average_temp, &(average(n)), 1, + MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); + } + else + { + average(n)=average_temp; + } +#else + average(n)=average_temp; +#endif + + average(n)/=totpoints; + } + //---------------------------------------- + //get variance + for(int n=0; n< navg; n++) + { + doublevar variance_temp=0; + for(int point=start; point < end; point++) + { + variance_temp+= + (vals(n,point)-average(n)) + *(vals(n,point)-average(n)); + } + +#ifdef USE_MPI + if(paravg) + { + MPI_Allreduce(&variance_temp, &(variance(n)), 1, + MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); + } + else + { + variance(n)=variance_temp; + } +#else + variance(n)=variance_temp; +#endif + + variance(n)/=totpoints; + } +} + +//---------------------------------------------------------------------- +void average(int start, int end, + Array1 & vals, Array1 & weights, + doublevar & average, doublevar & variance, + int paravg + ) +{ + + //int npoints=end-start; + + assert(end-start<= weights.GetDim(0)); + assert(end-start <= vals.GetDim(0)); + + + average=0; + variance=0; + + doublevar weightsum; //sum of weights + doublevar negweightsum; //sum of negative weights + negweightsum=0; + weightsum=0; + //take average + doublevar weight_temp=0; + doublevar avg_temp=0; + doublevar negweight_temp=0; + for(int point=start; point < end; point++) + { + weight_temp+=weights(point); + avg_temp+=vals(point)*weights(point); + if(weights(point) < 0) + { + negweight_temp+=weights(point); + } + } +#ifdef USE_MPI + if(paravg) + { + + MPI_Allreduce(&weight_temp, &(weightsum), 1, + MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); + MPI_Allreduce(&avg_temp, &(average), 1, + MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); + MPI_Allreduce(&negweight_temp, &(negweightsum), 1, + MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); + + average/=weightsum; + } + else + { + negweightsum=negweight_temp; + weightsum=weight_temp; + average=avg_temp/weight_temp; + } +#else + negweightsum=negweight_temp; + weightsum=weight_temp; + average=avg_temp/weight_temp; +#endif + //cout << "weightsum(" << n << ") " << weightsum(n) << endl; + //average(n)/=weightsum(n); + if(mpi_info.node ==0 ) + { + if( negweightsum/weightsum > 1e-10) + debug_write(cout, "negative proportion of weight : ", + fabs(negweightsum/weightsum), "\n"); + if(fabs(negweightsum/weightsum) > .5) { + cout << "Warning! Negative proportion of weight is " + << fabs(negweightsum/weightsum) << endl; + } + if(weightsum==0) + cout << "WARNING: sum of weights for is zero!" << endl; + } + + + //get variance + doublevar var_temp=0; + for(int point=start; point < end; point++) + { + var_temp+= + (vals(point)-average) + *(vals(point)-average)*weights(point); + } +#ifdef USE_MPI + if(paravg) + { + MPI_Allreduce(&var_temp, &(variance), 1, + MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); + //cout << mpi_info.node << " var_temp " << var_temp << endl; + //cout << mpi_info.node << " variance " << variance(n) << endl; + } + else + { + variance=var_temp; + } +#else + variance=var_temp; +#endif + //cout << "variance(" << n << ") " << variance(n) << endl; + variance/=weightsum; + +} + +//---------------------------------------------------------------------- + +/* +Averaging with weights + */ +void average(int start, int end, + Array2 & vals, Array2 & weights, + Array1 & average, Array1 & variance, + int paravg + ) +{ + int navg=vals.GetDim(0); //number of averaging variables + //int npoints=end-start; + assert(navg==weights.GetDim(0)); + + assert(end-start<= weights.GetDim(1)); + assert(end-start <= vals.GetDim(1)); + + average.Resize(navg); + variance.Resize(navg); + average=0; + variance=0; + + Array1 weightsum(navg); //sum of weights + Array1 negweightsum(navg); //sum of negative weights + negweightsum=0; + weightsum=0; + //take average + for(int n=0; n< navg; n++) + { + doublevar weight_temp=0; + doublevar avg_temp=0; + doublevar negweight_temp=0; + for(int point=start; point < end; point++) + { + weight_temp+=weights(n,point); + avg_temp+=vals(n,point)*weights(n,point); + if(weights(n,point) < 0) + { + negweight_temp+=weights(n,point); + } + } +#ifdef USE_MPI + if(paravg) + { + + MPI_Allreduce(&weight_temp, &(weightsum(n)), 1, + MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); + MPI_Allreduce(&avg_temp, &(average(n)), 1, + MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); + MPI_Allreduce(&negweight_temp, &(negweightsum(n)), 1, + MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); + + average(n)/=weightsum(n); + } + else + { + negweightsum(n)=negweight_temp; + weightsum(n)=weight_temp; + average(n)=avg_temp/weight_temp; + } +#else + negweightsum(n)=negweight_temp; + weightsum(n)=weight_temp; + average(n)=avg_temp/weight_temp; +#endif + //cout << "weightsum(" << n << ") " << weightsum(n) << endl; + //average(n)/=weightsum(n); + if(mpi_info.node ==0 ) + { + doublevar negprop=fabs(negweightsum(n)/weightsum(n)); + if(negprop > 1e-10) { + debug_write(cout , "negative proportion of weight for " , n , " : "); + debug_write(cout, negprop, "\n"); + } + if(negprop > .5) { + cout << "Warning! Negative proportion of weight for " << n + << " is " << negprop << endl; + } + if(weightsum(n)==0) + cout << "WARNING: sum of weights for " << n << " is zero!" << endl; + } + } + + //get variance + + for(int n=0; n< navg; n++) + { + doublevar var_temp=0; + for(int point=start; point < end; point++) + { + var_temp+= + (vals(n,point)-average(n)) + *(vals(n,point)-average(n))*weights(n,point); + } +#ifdef USE_MPI + if(paravg) + { + MPI_Allreduce(&var_temp, &(variance(n)), 1, + MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); + //cout << mpi_info.node << " var_temp " << var_temp << endl; + //cout << mpi_info.node << " variance " << variance(n) << endl; + } + else + { + variance(n)=var_temp; + } +#else + variance(n)=var_temp; +#endif + //cout << "variance(" << n << ") " << variance(n) << endl; + variance(n)/=weightsum(n); + + } + +} + + + +//---------------------------------------------------------------------- + +void autocorrelation(int start, + int end, + const Array2 & vals, //!< values + const Array1 & avg, + const Array1 & var, //!< variance + Array2 & autocorr, //!< autocorrelation in (wf,n-1 steps) + int depth, + int paravg //!< sync across processes + ) { + int nwf=vals.GetDim(0); + assert(end-start >0); + assert(end-start <= vals.GetDim(1)); + //int depth=4; + autocorr.Resize(nwf, depth); + autocorr=0; + for(int w=0; w< nwf; w++) { + for(int d=1; d< depth+1; d++) { + int npoints=end-start-d; + + for(int i=start; i< end-d; i++) { + autocorr(w,d-1)+=(vals(w,i)-avg(w))*(vals(w,i+d)-avg(w)); + } + + if(paravg) { + npoints=parallel_sum(npoints); + autocorr(w,d-1)=parallel_sum(autocorr(w,d-1)); + } + autocorr(w,d-1)/=npoints; + + } + + for(int d=0; d< depth; d++) { + + autocorr(w,d)/= sqrt(var(w)*var(w)); + } + } +} + +//---------------------------------------------------------------------- diff --git a/src/program_utils/average.h b/src/program_utils/average.h new file mode 100644 index 00000000..f60c270e --- /dev/null +++ b/src/program_utils/average.h @@ -0,0 +1,79 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ + +#include "Array.h" +#include "Qmc_std.h" + + + +/*! +\brief +Averaging with weights + */ +void average(int start, //! &, //!< values to average, points second index + Array2 &, //!< weights to average, points second index + Array1 &, //!< return average + Array1 &, //!< return variance + int paravg=0 //!< whether to sync across process or not + ); + +/*! +\brief + Averaging with weights for a single vector + */ +void average(int start, + int end, + Array1 &, + Array1 &, + doublevar & avg, + doublevar & var, + int paravg=0 + ); + +/*! +\brief +Averaging without weights + */ +void average(int start, + int end, + Array2 & , //! & , //!< average + Array1 &, //!< variance + int paravg=0 //!< sync across processes + ); + +/*! +\brief +Get autocorrelation time of a vector + + */ +void autocorrelation(int start, + int end, + const Array2 &, //!< values + const Array1 &, //!< average in + const Array1 &, //!< variance in + Array2 &, //!< autocorrelation in (wf,n-1 steps) + int autocorr_depth, + int paravg=0 //!< sync across processes +); + +//---------------------------------------------------------------------- diff --git a/src/program_utils/cblas.h b/src/program_utils/cblas.h new file mode 100644 index 00000000..071b337b --- /dev/null +++ b/src/program_utils/cblas.h @@ -0,0 +1,615 @@ +/* + +Taken from ATLAS library + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ +#ifndef CBLAS_H + +#ifndef CBLAS_ENUM_DEFINED_H + #define CBLAS_ENUM_DEFINED_H + enum CBLAS_ORDER {CblasRowMajor=101, CblasColMajor=102 }; + enum CBLAS_TRANSPOSE {CblasNoTrans=111, CblasTrans=112, CblasConjTrans=113, + AtlasConj=114}; + enum CBLAS_UPLO {CblasUpper=121, CblasLower=122}; + enum CBLAS_DIAG {CblasNonUnit=131, CblasUnit=132}; + enum CBLAS_SIDE {CblasLeft=141, CblasRight=142}; +#endif + +#ifndef CBLAS_ENUM_ONLY +#define CBLAS_H +#define CBLAS_INDEX int + +int cblas_errprn(int ierr, int info, char *form, ...); + +/* + * =========================================================================== + * Prototypes for level 1 BLAS functions (complex are recast as routines) + * =========================================================================== + */ +float cblas_sdsdot(const int N, const float alpha, const float *X, + const int incX, const float *Y, const int incY); +double cblas_dsdot(const int N, const float *X, const int incX, const float *Y, + const int incY); +float cblas_sdot(const int N, const float *X, const int incX, + const float *Y, const int incY); +double cblas_ddot(const int N, const double *X, const int incX, + const double *Y, const int incY); +/* + * Functions having prefixes Z and C only + */ +void cblas_cdotu_sub(const int N, const void *X, const int incX, + const void *Y, const int incY, void *dotu); +void cblas_cdotc_sub(const int N, const void *X, const int incX, + const void *Y, const int incY, void *dotc); + +void cblas_zdotu_sub(const int N, const void *X, const int incX, + const void *Y, const int incY, void *dotu); +void cblas_zdotc_sub(const int N, const void *X, const int incX, + const void *Y, const int incY, void *dotc); + + +/* + * Functions having prefixes S D SC DZ + */ +float cblas_snrm2(const int N, const float *X, const int incX); +float cblas_sasum(const int N, const float *X, const int incX); + +double cblas_dnrm2(const int N, const double *X, const int incX); +double cblas_dasum(const int N, const double *X, const int incX); + +float cblas_scnrm2(const int N, const void *X, const int incX); +float cblas_scasum(const int N, const void *X, const int incX); + +double cblas_dznrm2(const int N, const void *X, const int incX); +double cblas_dzasum(const int N, const void *X, const int incX); + + +/* + * Functions having standard 4 prefixes (S D C Z) + */ +CBLAS_INDEX cblas_isamax(const int N, const float *X, const int incX); +CBLAS_INDEX cblas_idamax(const int N, const double *X, const int incX); +CBLAS_INDEX cblas_icamax(const int N, const void *X, const int incX); +CBLAS_INDEX cblas_izamax(const int N, const void *X, const int incX); + +/* + * =========================================================================== + * Prototypes for level 1 BLAS routines + * =========================================================================== + */ + +/* + * Routines with standard 4 prefixes (s, d, c, z) + */ +void cblas_sswap(const int N, float *X, const int incX, + float *Y, const int incY); +void cblas_scopy(const int N, const float *X, const int incX, + float *Y, const int incY); +void cblas_saxpy(const int N, const float alpha, const float *X, + const int incX, float *Y, const int incY); +void catlas_saxpby(const int N, const float alpha, const float *X, + const int incX, const float beta, float *Y, const int incY); +void catlas_sset + (const int N, const float alpha, float *X, const int incX); + +void cblas_dswap(const int N, double *X, const int incX, + double *Y, const int incY); +void cblas_dcopy(const int N, const double *X, const int incX, + double *Y, const int incY); +void cblas_daxpy(const int N, const double alpha, const double *X, + const int incX, double *Y, const int incY); +void catlas_daxpby(const int N, const double alpha, const double *X, + const int incX, const double beta, double *Y, const int incY); +void catlas_dset + (const int N, const double alpha, double *X, const int incX); + +void cblas_cswap(const int N, void *X, const int incX, + void *Y, const int incY); +void cblas_ccopy(const int N, const void *X, const int incX, + void *Y, const int incY); +void cblas_caxpy(const int N, const void *alpha, const void *X, + const int incX, void *Y, const int incY); +void catlas_caxpby(const int N, const void *alpha, const void *X, + const int incX, const void *beta, void *Y, const int incY); +void catlas_cset + (const int N, const void *alpha, void *X, const int incX); + +void cblas_zswap(const int N, void *X, const int incX, + void *Y, const int incY); +void cblas_zcopy(const int N, const void *X, const int incX, + void *Y, const int incY); +void cblas_zaxpy(const int N, const void *alpha, const void *X, + const int incX, void *Y, const int incY); +void catlas_zaxpby(const int N, const void *alpha, const void *X, + const int incX, const void *beta, void *Y, const int incY); +void catlas_zset + (const int N, const void *alpha, void *X, const int incX); + + +/* + * Routines with S and D prefix only + */ +void cblas_srotg(float *a, float *b, float *c, float *s); +void cblas_srotmg(float *d1, float *d2, float *b1, const float b2, float *P); +void cblas_srot(const int N, float *X, const int incX, + float *Y, const int incY, const float c, const float s); +void cblas_srotm(const int N, float *X, const int incX, + float *Y, const int incY, const float *P); + +void cblas_drotg(double *a, double *b, double *c, double *s); +void cblas_drotmg(double *d1, double *d2, double *b1, const double b2, double *P); +void cblas_drot(const int N, double *X, const int incX, + double *Y, const int incY, const double c, const double s); +void cblas_drotm(const int N, double *X, const int incX, + double *Y, const int incY, const double *P); + + +/* + * Routines with S D C Z CS and ZD prefixes + */ +void cblas_sscal(const int N, const float alpha, float *X, const int incX); +void cblas_dscal(const int N, const double alpha, double *X, const int incX); +void cblas_cscal(const int N, const void *alpha, void *X, const int incX); +void cblas_zscal(const int N, const void *alpha, void *X, const int incX); +void cblas_csscal(const int N, const float alpha, void *X, const int incX); +void cblas_zdscal(const int N, const double alpha, void *X, const int incX); + +/* + * Extra reference routines provided by ATLAS, but not mandated by the standard + */ +void cblas_crotg(void *a, void *b, void *c, void *s); +void cblas_zrotg(void *a, void *b, void *c, void *s); +void cblas_csrot(const int N, void *X, const int incX, void *Y, const int incY, + const float c, const float s); +void cblas_zdrot(const int N, void *X, const int incX, void *Y, const int incY, + const double c, const double s); + +/* + * =========================================================================== + * Prototypes for level 2 BLAS + * =========================================================================== + */ + +/* + * Routines with standard 4 prefixes (S, D, C, Z) + */ +void cblas_sgemv(const enum CBLAS_ORDER Order, + const enum CBLAS_TRANSPOSE TransA, const int M, const int N, + const float alpha, const float *A, const int lda, + const float *X, const int incX, const float beta, + float *Y, const int incY); +void cblas_sgbmv(const enum CBLAS_ORDER Order, + const enum CBLAS_TRANSPOSE TransA, const int M, const int N, + const int KL, const int KU, const float alpha, + const float *A, const int lda, const float *X, + const int incX, const float beta, float *Y, const int incY); +void cblas_strmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const float *A, const int lda, + float *X, const int incX); +void cblas_stbmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const int K, const float *A, const int lda, + float *X, const int incX); +void cblas_stpmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const float *Ap, float *X, const int incX); +void cblas_strsv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const float *A, const int lda, float *X, + const int incX); +void cblas_stbsv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const int K, const float *A, const int lda, + float *X, const int incX); +void cblas_stpsv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const float *Ap, float *X, const int incX); + +void cblas_dgemv(const enum CBLAS_ORDER Order, + const enum CBLAS_TRANSPOSE TransA, const int M, const int N, + const double alpha, const double *A, const int lda, + const double *X, const int incX, const double beta, + double *Y, const int incY); +void cblas_dgbmv(const enum CBLAS_ORDER Order, + const enum CBLAS_TRANSPOSE TransA, const int M, const int N, + const int KL, const int KU, const double alpha, + const double *A, const int lda, const double *X, + const int incX, const double beta, double *Y, const int incY); +void cblas_dtrmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const double *A, const int lda, + double *X, const int incX); +void cblas_dtbmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const int K, const double *A, const int lda, + double *X, const int incX); +void cblas_dtpmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const double *Ap, double *X, const int incX); +void cblas_dtrsv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const double *A, const int lda, double *X, + const int incX); +void cblas_dtbsv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const int K, const double *A, const int lda, + double *X, const int incX); +void cblas_dtpsv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const double *Ap, double *X, const int incX); + +void cblas_cgemv(const enum CBLAS_ORDER Order, + const enum CBLAS_TRANSPOSE TransA, const int M, const int N, + const void *alpha, const void *A, const int lda, + const void *X, const int incX, const void *beta, + void *Y, const int incY); +void cblas_cgbmv(const enum CBLAS_ORDER Order, + const enum CBLAS_TRANSPOSE TransA, const int M, const int N, + const int KL, const int KU, const void *alpha, + const void *A, const int lda, const void *X, + const int incX, const void *beta, void *Y, const int incY); +void cblas_ctrmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const void *A, const int lda, + void *X, const int incX); +void cblas_ctbmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const int K, const void *A, const int lda, + void *X, const int incX); +void cblas_ctpmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const void *Ap, void *X, const int incX); +void cblas_ctrsv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const void *A, const int lda, void *X, + const int incX); +void cblas_ctbsv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const int K, const void *A, const int lda, + void *X, const int incX); +void cblas_ctpsv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const void *Ap, void *X, const int incX); + +void cblas_zgemv(const enum CBLAS_ORDER Order, + const enum CBLAS_TRANSPOSE TransA, const int M, const int N, + const void *alpha, const void *A, const int lda, + const void *X, const int incX, const void *beta, + void *Y, const int incY); +void cblas_zgbmv(const enum CBLAS_ORDER Order, + const enum CBLAS_TRANSPOSE TransA, const int M, const int N, + const int KL, const int KU, const void *alpha, + const void *A, const int lda, const void *X, + const int incX, const void *beta, void *Y, const int incY); +void cblas_ztrmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const void *A, const int lda, + void *X, const int incX); +void cblas_ztbmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const int K, const void *A, const int lda, + void *X, const int incX); +void cblas_ztpmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const void *Ap, void *X, const int incX); +void cblas_ztrsv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const void *A, const int lda, void *X, + const int incX); +void cblas_ztbsv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const int K, const void *A, const int lda, + void *X, const int incX); +void cblas_ztpsv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE TransA, const enum CBLAS_DIAG Diag, + const int N, const void *Ap, void *X, const int incX); + + +/* + * Routines with S and D prefixes only + */ +void cblas_ssymv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const int N, const float alpha, const float *A, + const int lda, const float *X, const int incX, + const float beta, float *Y, const int incY); +void cblas_ssbmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const int N, const int K, const float alpha, const float *A, + const int lda, const float *X, const int incX, + const float beta, float *Y, const int incY); +void cblas_sspmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const int N, const float alpha, const float *Ap, + const float *X, const int incX, + const float beta, float *Y, const int incY); +void cblas_sger(const enum CBLAS_ORDER Order, const int M, const int N, + const float alpha, const float *X, const int incX, + const float *Y, const int incY, float *A, const int lda); +void cblas_ssyr(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const int N, const float alpha, const float *X, + const int incX, float *A, const int lda); +void cblas_sspr(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const int N, const float alpha, const float *X, + const int incX, float *Ap); +void cblas_ssyr2(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const int N, const float alpha, const float *X, + const int incX, const float *Y, const int incY, float *A, + const int lda); +void cblas_sspr2(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const int N, const float alpha, const float *X, + const int incX, const float *Y, const int incY, float *A); + +void cblas_dsymv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const int N, const double alpha, const double *A, + const int lda, const double *X, const int incX, + const double beta, double *Y, const int incY); +void cblas_dsbmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const int N, const int K, const double alpha, const double *A, + const int lda, const double *X, const int incX, + const double beta, double *Y, const int incY); +void cblas_dspmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const int N, const double alpha, const double *Ap, + const double *X, const int incX, + const double beta, double *Y, const int incY); +void cblas_dger(const enum CBLAS_ORDER Order, const int M, const int N, + const double alpha, const double *X, const int incX, + const double *Y, const int incY, double *A, const int lda); +void cblas_dsyr(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const int N, const double alpha, const double *X, + const int incX, double *A, const int lda); +void cblas_dspr(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const int N, const double alpha, const double *X, + const int incX, double *Ap); +void cblas_dsyr2(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const int N, const double alpha, const double *X, + const int incX, const double *Y, const int incY, double *A, + const int lda); +void cblas_dspr2(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const int N, const double alpha, const double *X, + const int incX, const double *Y, const int incY, double *A); + + +/* + * Routines with C and Z prefixes only + */ +void cblas_chemv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const int N, const void *alpha, const void *A, + const int lda, const void *X, const int incX, + const void *beta, void *Y, const int incY); +void cblas_chbmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const int N, const int K, const void *alpha, const void *A, + const int lda, const void *X, const int incX, + const void *beta, void *Y, const int incY); +void cblas_chpmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const int N, const void *alpha, const void *Ap, + const void *X, const int incX, + const void *beta, void *Y, const int incY); +void cblas_cgeru(const enum CBLAS_ORDER Order, const int M, const int N, + const void *alpha, const void *X, const int incX, + const void *Y, const int incY, void *A, const int lda); +void cblas_cgerc(const enum CBLAS_ORDER Order, const int M, const int N, + const void *alpha, const void *X, const int incX, + const void *Y, const int incY, void *A, const int lda); +void cblas_cher(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const int N, const float alpha, const void *X, const int incX, + void *A, const int lda); +void cblas_chpr(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const int N, const float alpha, const void *X, + const int incX, void *A); +void cblas_cher2(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const int N, + const void *alpha, const void *X, const int incX, + const void *Y, const int incY, void *A, const int lda); +void cblas_chpr2(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const int N, + const void *alpha, const void *X, const int incX, + const void *Y, const int incY, void *Ap); + +void cblas_zhemv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const int N, const void *alpha, const void *A, + const int lda, const void *X, const int incX, + const void *beta, void *Y, const int incY); +void cblas_zhbmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const int N, const int K, const void *alpha, const void *A, + const int lda, const void *X, const int incX, + const void *beta, void *Y, const int incY); +void cblas_zhpmv(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const int N, const void *alpha, const void *Ap, + const void *X, const int incX, + const void *beta, void *Y, const int incY); +void cblas_zgeru(const enum CBLAS_ORDER Order, const int M, const int N, + const void *alpha, const void *X, const int incX, + const void *Y, const int incY, void *A, const int lda); +void cblas_zgerc(const enum CBLAS_ORDER Order, const int M, const int N, + const void *alpha, const void *X, const int incX, + const void *Y, const int incY, void *A, const int lda); +void cblas_zher(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const int N, const double alpha, const void *X, const int incX, + void *A, const int lda); +void cblas_zhpr(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const int N, const double alpha, const void *X, + const int incX, void *A); +void cblas_zher2(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const int N, + const void *alpha, const void *X, const int incX, + const void *Y, const int incY, void *A, const int lda); +void cblas_zhpr2(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, const int N, + const void *alpha, const void *X, const int incX, + const void *Y, const int incY, void *Ap); + +/* + * =========================================================================== + * Prototypes for level 3 BLAS + * =========================================================================== + */ + +/* + * Routines with standard 4 prefixes (S, D, C, Z) + */ +void cblas_sgemm(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA, + const enum CBLAS_TRANSPOSE TransB, const int M, const int N, + const int K, const float alpha, const float *A, + const int lda, const float *B, const int ldb, + const float beta, float *C, const int ldc); +void cblas_ssymm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, + const enum CBLAS_UPLO Uplo, const int M, const int N, + const float alpha, const float *A, const int lda, + const float *B, const int ldb, const float beta, + float *C, const int ldc); +void cblas_ssyrk(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE Trans, const int N, const int K, + const float alpha, const float *A, const int lda, + const float beta, float *C, const int ldc); +void cblas_ssyr2k(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE Trans, const int N, const int K, + const float alpha, const float *A, const int lda, + const float *B, const int ldb, const float beta, + float *C, const int ldc); +void cblas_strmm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, + const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, + const enum CBLAS_DIAG Diag, const int M, const int N, + const float alpha, const float *A, const int lda, + float *B, const int ldb); +void cblas_strsm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, + const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, + const enum CBLAS_DIAG Diag, const int M, const int N, + const float alpha, const float *A, const int lda, + float *B, const int ldb); + +void cblas_dgemm(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA, + const enum CBLAS_TRANSPOSE TransB, const int M, const int N, + const int K, const double alpha, const double *A, + const int lda, const double *B, const int ldb, + const double beta, double *C, const int ldc); +void cblas_dsymm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, + const enum CBLAS_UPLO Uplo, const int M, const int N, + const double alpha, const double *A, const int lda, + const double *B, const int ldb, const double beta, + double *C, const int ldc); +void cblas_dsyrk(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE Trans, const int N, const int K, + const double alpha, const double *A, const int lda, + const double beta, double *C, const int ldc); +void cblas_dsyr2k(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE Trans, const int N, const int K, + const double alpha, const double *A, const int lda, + const double *B, const int ldb, const double beta, + double *C, const int ldc); +void cblas_dtrmm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, + const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, + const enum CBLAS_DIAG Diag, const int M, const int N, + const double alpha, const double *A, const int lda, + double *B, const int ldb); +void cblas_dtrsm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, + const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, + const enum CBLAS_DIAG Diag, const int M, const int N, + const double alpha, const double *A, const int lda, + double *B, const int ldb); + +void cblas_cgemm(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA, + const enum CBLAS_TRANSPOSE TransB, const int M, const int N, + const int K, const void *alpha, const void *A, + const int lda, const void *B, const int ldb, + const void *beta, void *C, const int ldc); +void cblas_csymm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, + const enum CBLAS_UPLO Uplo, const int M, const int N, + const void *alpha, const void *A, const int lda, + const void *B, const int ldb, const void *beta, + void *C, const int ldc); +void cblas_csyrk(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE Trans, const int N, const int K, + const void *alpha, const void *A, const int lda, + const void *beta, void *C, const int ldc); +void cblas_csyr2k(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE Trans, const int N, const int K, + const void *alpha, const void *A, const int lda, + const void *B, const int ldb, const void *beta, + void *C, const int ldc); +void cblas_ctrmm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, + const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, + const enum CBLAS_DIAG Diag, const int M, const int N, + const void *alpha, const void *A, const int lda, + void *B, const int ldb); +void cblas_ctrsm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, + const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, + const enum CBLAS_DIAG Diag, const int M, const int N, + const void *alpha, const void *A, const int lda, + void *B, const int ldb); + +void cblas_zgemm(const enum CBLAS_ORDER Order, const enum CBLAS_TRANSPOSE TransA, + const enum CBLAS_TRANSPOSE TransB, const int M, const int N, + const int K, const void *alpha, const void *A, + const int lda, const void *B, const int ldb, + const void *beta, void *C, const int ldc); +void cblas_zsymm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, + const enum CBLAS_UPLO Uplo, const int M, const int N, + const void *alpha, const void *A, const int lda, + const void *B, const int ldb, const void *beta, + void *C, const int ldc); +void cblas_zsyrk(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE Trans, const int N, const int K, + const void *alpha, const void *A, const int lda, + const void *beta, void *C, const int ldc); +void cblas_zsyr2k(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE Trans, const int N, const int K, + const void *alpha, const void *A, const int lda, + const void *B, const int ldb, const void *beta, + void *C, const int ldc); +void cblas_ztrmm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, + const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, + const enum CBLAS_DIAG Diag, const int M, const int N, + const void *alpha, const void *A, const int lda, + void *B, const int ldb); +void cblas_ztrsm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, + const enum CBLAS_UPLO Uplo, const enum CBLAS_TRANSPOSE TransA, + const enum CBLAS_DIAG Diag, const int M, const int N, + const void *alpha, const void *A, const int lda, + void *B, const int ldb); + + +/* + * Routines with prefixes C and Z only + */ +void cblas_chemm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, + const enum CBLAS_UPLO Uplo, const int M, const int N, + const void *alpha, const void *A, const int lda, + const void *B, const int ldb, const void *beta, + void *C, const int ldc); +void cblas_cherk(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE Trans, const int N, const int K, + const float alpha, const void *A, const int lda, + const float beta, void *C, const int ldc); +void cblas_cher2k(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE Trans, const int N, const int K, + const void *alpha, const void *A, const int lda, + const void *B, const int ldb, const float beta, + void *C, const int ldc); +void cblas_zhemm(const enum CBLAS_ORDER Order, const enum CBLAS_SIDE Side, + const enum CBLAS_UPLO Uplo, const int M, const int N, + const void *alpha, const void *A, const int lda, + const void *B, const int ldb, const void *beta, + void *C, const int ldc); +void cblas_zherk(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE Trans, const int N, const int K, + const double alpha, const void *A, const int lda, + const double beta, void *C, const int ldc); +void cblas_zher2k(const enum CBLAS_ORDER Order, const enum CBLAS_UPLO Uplo, + const enum CBLAS_TRANSPOSE Trans, const int N, const int K, + const void *alpha, const void *A, const int lda, + const void *B, const int ldb, const double beta, + void *C, const int ldc); + +int cblas_errprn(int ierr, int info, char *form, ...); + +#endif /* end #ifdef CBLAS_ENUM_ONLY */ +#endif diff --git a/src/program_utils/gosling.make b/src/program_utils/gosling.make new file mode 100644 index 00000000..e69de29b diff --git a/src/program_utils/jeep_utils.cpp b/src/program_utils/jeep_utils.cpp new file mode 100644 index 00000000..bdd91a6d --- /dev/null +++ b/src/program_utils/jeep_utils.cpp @@ -0,0 +1,442 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ +//---------------------------------------------------------------------- + +#include "jeep_utils.h" +#include "qmc_io.h" + +//---------------------------------------------------------------------- + +void get_grid_from_plot(istream & plotfile, + Array3 & grid, + Array1 & box_size, + Array1 & origin ) { + Array1 padding(3), startfill(3); + padding=0;startfill=0; + get_grid_from_plot(plotfile, grid, box_size, origin, padding, startfill); +} + + +void get_grid_from_plot(istream & plotfile, + Array3 & grid, + Array1 & box_size, + Array1 & origin, + Array1 & padding, + Array1 & startfill) { + + Array1 npoints(3); + box_size.Resize(3); + origin.Resize(3); + + + int nfunctions; + get_global_header(plotfile, nfunctions); + Array1 start(3); + Array1 end(3); + + for(int function=0; function < nfunctions; function++) { + + get_function_header(plotfile, npoints, box_size, origin); + + if(function==0) { + grid.Resize(npoints(0)+padding(0), npoints(1)+padding(1), npoints(2)+padding(2)); + grid=0; + } + + for(int i=0; i< 3; i++) { + start(i)=startfill(i); + end(i)=npoints(i)+startfill(i); + assert(end(i) <= npoints(i)+padding(i)); + } + + for(int x=start(0); x < end(0); x++) { + for(int y=start(0); y < end(0); y++) { + for(int z=start(0); z < end(0); z++) { + doublevar mo_val; + + if(!(plotfile >> mo_val)) { + error("error reading plot file"); + } + + + if(function==0) { + } + else if(function==1) { + mo_val=-mo_val; + } + else { + error("too many functions.."); + } + grid(x,y,z)+= mo_val; + + + } + } + } + + } +} + +//---------------------------------------------------------------------- + +void get_function_header(istream & plotfile, + Array1 & npoints, + Array1 & box_size, + Array1 & origin) { + + + plotfile >> origin(0) >> origin(1) >> origin(2); + plotfile.ignore(180, '\n'); + plotfile >> box_size(0) >> box_size(1) >> box_size(2); + plotfile.ignore(180, '\n'); + plotfile.ignore(180, '\n'); + plotfile.ignore(180, '\n'); + plotfile >> npoints(0) >> npoints(1) >> npoints(2); + plotfile.ignore(180, '\n'); + /* + cout << "origin "; + for(int i=0; i< 3; i++) cout << origin(i) << " " ; + cout << endl; + + cout << "box_size "; + for(int i=0; i< 3; i++) cout << box_size(i) << " "; + cout << endl; + + cout << "npoints "; + for(int i=0; i< 3; i++) cout << npoints(i) << " "; + cout << endl; + */ + + +} + +//---------------------------------------------------------------------- + +void get_global_header(istream & plotfile, int & nfunctions) { + + for(int i=0; i< 8; i++) plotfile.ignore(180, '\n'); + int natoms; + plotfile >> natoms; plotfile.ignore(180, '\n'); + //cout << "natoms " << natoms << endl; + for(int i=0; i< natoms; i++) plotfile.ignore(180, '\n'); + + plotfile >> nfunctions; + //cout << "found " << nfunctions << " functions " << endl; + plotfile.ignore(180, '\n'); //nfunctions + +} + +//---------------------------------------------------------------------- + +doublevar get_cutoff_radius(Array3 & grid, Array1 & box_size, + Array1 & origin, Array1 & center) { + + assert(box_size.GetDim(0)==3); + assert(origin.GetDim(0)==3); + assert(center.GetDim(0)==3); + + Array1 npoints(3); + for(int i=0; i< 3; i++) npoints(i)=grid.GetDim(i); + + Array2 latVec(3,3); + for(int i=0; i< 3; i++) + for(int j=0; j< 3; j++) latVec(i,j)=0; + + for(int i=0; i< 3; i++) latVec(i,i)=box_size(i); + + int nnorm=6; + Array1 norm_radius(nnorm); + norm_radius(0)=3.0; + norm_radius(1)=4.0; + norm_radius(2)=5.0; + norm_radius(3)=7.0; + norm_radius(4)=11.0; + norm_radius(5)=6.0; + + Array1 partial_norm(nnorm); + partial_norm=0; + + doublevar tot_norm=0; + + Array1 pos(3); + + + doublevar delta0=box_size(0)/(npoints(0)-1); + doublevar delta1=box_size(1)/(npoints(1)-1); + doublevar delta2=box_size(2)/(npoints(2)-1); + doublevar mo_val; + doublevar norm; + doublevar threshold=1e-15; + for(int x=0; x< npoints(0); x++) { + cout << "."; cout.flush(); + pos(0)=origin(0)+delta0*x; + for(int y=0; y< npoints(1); y++) { + pos(1)=origin(1)+delta1*y; + for(int z=0; z< npoints(2); z++) { + pos(2)=origin(2)+delta2*z; + mo_val=grid(x,y,z); + norm=mo_val*mo_val; + if(norm> threshold) { + doublevar dist=get_periodic_distance(pos, center, latVec); + //cout << "dist " << dist << endl; + tot_norm+=norm; + for(int i=0; i< nnorm; i++) { + //cout << "norm_radius " << norm_radius(i) << endl; + if(dist < norm_radius(i)) { + //cout << "included " << endl; + partial_norm(i)+=norm; + } + } + } + } + } + } + + cout << endl; + doublevar min_radius=box_size(0); + + cout << "total norm " << tot_norm << endl; + for(int i=0; i < nnorm; i++) { + doublevar percent=partial_norm(i)/tot_norm; + cout << "radius " << norm_radius(i) << " fraction of norm " << percent << endl; + if(percent > .996 && min_radius > norm_radius(i) ) min_radius=norm_radius(i); + } + cout << "choosing cutoff of " << min_radius << endl; + return min_radius; +} + +//---------------------------------------------------------------------- + + +void get_wannier_centers(istream & is, Array2 & centers) { + + vector < vector < doublevar> > centers_temp; + + string dummy; + vector temp_vec; + temp_vec.resize(3); + while(is >> dummy) { + if( dummy == "MLWF") { + centers_temp.clear(); + is.ignore(180, '\n'); + is.ignore(180, '\n'); + is >> dummy; + while(dummy == "&&") { + is >> dummy; + is >> temp_vec[0] >> temp_vec[1] >> temp_vec[2]; + is.ignore(180, '\n'); + is >> dummy; + centers_temp.push_back(temp_vec); + } + + } + } + + int ncenters=centers_temp.size(); + centers.Resize(ncenters, 3); + for(int i=0; i< ncenters; i++) { + cout << "wannier center " << i << " "; + for(int d=0; d< 3; d++) { + centers(i,d)=centers_temp[i][d]; + cout << centers(i,d) << " "; + } + cout << endl; + } + +} + + +//---------------------------------------------------------------------- + +doublevar get_periodic_distance(const Array1 & r1, + const Array1 & r2, + const Array2 & latVec) { + assert(r1.GetDim(0)==3); + assert(r2.GetDim(0)==3); + assert(latVec.GetDim(0)==3); + assert(latVec.GetDim(1)==3); + + Array1 delta_r(3); + Array1 delta_r2(3); + + for(int d=0; d< 3; d++) { + delta_r(d)=r2(d)-r1(d); + } + int nlatvec=1; + + doublevar r=1e99; + for(int kk=-nlatvec; kk <=nlatvec; kk++) { + for(int jj=-nlatvec; jj <=nlatvec; jj++) { + for(int ii=-nlatvec; ii <=nlatvec; ii++) { + for(int d=0; d< 3; d++) { + delta_r2(d)=delta_r(d)+kk*latVec(0,d)+jj*latVec(1,d)+ii*latVec(2,d); + } + r=min(sqrt(delta_r2(0)*delta_r2(0)+ + delta_r2(1)*delta_r2(1)+ + delta_r2(2)*delta_r2(2)), r); + } + } + } + + return r; +} + +//---------------------------------------------------------------------- + +//---------------------------------------------------------------------- +#include "jeep_utils.h" + +/* + (format comment copied from T. Ogitsu and B. Militzer) +Jeep wf format + +spin up data + +int = 0 +int nst +double[nst] = occ[n], n=0, .. , nst-1 --number of electrons in each orbital +int ngw +complex[nst*ngw] = wf(t) +complex[nst*ngw] = wf(t-dt) + +next lines only if nspin == 2: + +spin down data + +int = 0 +int nst +double[nst] = occ[n], n=0, .. , nst-1 +int ngw +complex[nst*ngw] = wf(t) +complex[nst*ngw] = wf(t-dt) + +*/ +int read_int(FILE * file) { + int i; + fread(&i, sizeof(int), 1, file); + return i; +} + +double read_double(FILE * file) { + double f; + fread(&f, sizeof(double), 1, file); + return f; +} + +void skip(FILE * file, const int bytes) { + int pos=ftell(file); + fseek(file, pos+bytes, SEEK_SET); +} + +void get_jeep_header(FILE * wfin, int & nst, int & ngw, Array1 & occupation) { + int test=read_int(wfin); + if(test != 0) error("First int in wf file should be zero"); + nst=read_int(wfin); + occupation.Resize(nst); + for(int i=0; i< nst; i++) occupation(i)=read_double(wfin); + ngw=read_int(wfin); +} + +//---------------------------------------------------------------------- + +void summarize_jeep_wf(string & filename, int & nst, int & ngw, + Array1 & mo_places) { + + FILE * wffile= fopen(filename.c_str(), "r"); + if(wffile==0) { + cout << "Couldn't open " << filename << endl; + exit(1); + } + + int startpos=ftell(wffile); + fseek(wffile, 0L, SEEK_END); + int size=ftell(wffile); + fseek(wffile, startpos, SEEK_SET); + + int test=read_int(wffile); //should be zero + nst=read_int(wffile); + + for(int i=0; i< nst; i++ ) + read_double(wffile); //clear out the occupation; we don't need it + + ngw=read_int(wffile); + + int size_of_mo=2*ngw*sizeof(double); + int nskip=4*nst*ngw*sizeof(double); + //cout << "nskip " << nskip << " size " << size << endl; + skip(wffile, nskip); + int pos=ftell(wffile); + //cout << "position " << pos << endl; + + if(pos==size) { + fclose(wffile); + mo_places.Resize(nst); + int start=3*sizeof(int)+nst*sizeof(double); + for(int i=0; i< nst; i++) { + mo_places(i)=start+i*size_of_mo; + } + return; + } + + if(pos > size) { + cout << "WARNING: count seems off in wf file " << endl; + } + + + + //if we're this far, then there's a second spin + test=read_int(wffile); + assert(test==0); + int nst2=read_int(wffile); + + mo_places.Resize(nst+nst2); + int start=3*sizeof(int)+nst*sizeof(double); + int start2=3*sizeof(int)+nst2*sizeof(double); + for(int i=0; i< nst; i++) { + mo_places(i)=start+i*size_of_mo; + //cout << "mo_places " << mo_places(i) << endl; + } + for(int i=nst; i< nst+nst2; i++) { + mo_places(i)=start //first header + + nst*size_of_mo //the second wf of spin 0 + + start2 //second header + + i*size_of_mo; //first wf of spin 0+current mo + //cout << "mo_places " << mo_places(i) << endl; + } + + nst+=nst2; + + fclose(wffile); + return; + +} + + +//---------------------------------------------------------------------- + +void get_next_pw_mo(FILE * wfin, int ngw, Array2 & coeff) { + coeff.Resize(ngw,2); + for(int j=0; j < ngw; j++) { + coeff(j,0)=read_double(wfin); + coeff(j,1)=read_double(wfin); + } +} + + diff --git a/src/program_utils/jeep_utils.h b/src/program_utils/jeep_utils.h new file mode 100644 index 00000000..803a7a6a --- /dev/null +++ b/src/program_utils/jeep_utils.h @@ -0,0 +1,79 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ + + +#ifndef JEEP_UTILS_H_INCLUDED +#define JEEP_UTILS_H_INCLUDED +#include "Qmc_std.h" +using namespace std; + +void get_grid_from_plot(istream & plotfile, + Array3 & grid, + Array1 & box_size, + Array1 & origin); + +void get_grid_from_plot(istream & plotfile, + Array3 & grid, + Array1 & box_size, + Array1 & origin, + Array1 & padding, Array1 & startfill); + + +void get_function_header(istream & plotfile, + Array1 & npoints, + Array1 & box_size, + Array1 & origin); + +void get_global_header(istream & plotfile, int & nfunctions); + +doublevar get_cutoff_radius(Array3 & grid, Array1 & box_size, + Array1 & origin, Array1 & center); + +void get_wannier_centers(istream & is, Array2 & centers); + +doublevar get_periodic_distance(const Array1 & r1, + const Array1 & r2, + const Array2 & latVec); + + +/*! + Get the information contained in the header of the JEEP file. + */ +void get_jeep_header(FILE * wfin, int & nst, int & ngw, Array1 & occupation); + +/*! + Read the next molecular orbital into the coefficient array; + returns in the form (g-vector, [real, imaginary]) + */ +void get_next_pw_mo(FILE * wfin, int ngw, Array2 & coeff); + + +/*! + Index the places where the molecular orbitals start in the + JEEP wavefunction file. + */ +void summarize_jeep_wf(string & filename, int & nst, int & ngw, + Array1 & mo_places //!< location in file where each mo is + ); + +#endif //JEEP_UTILS_H_INCLUDED + + +//---------------------------------------------------------------------- diff --git a/src/program_utils/make.include b/src/program_utils/make.include new file mode 100644 index 00000000..77a8469b --- /dev/null +++ b/src/program_utils/make.include @@ -0,0 +1,14 @@ + +MY_SOURCES:= average.cpp \ + jeep_utils.cpp \ + MatrixAlgebrac.cpp \ + ooqmc.cpp \ + qmc_io.cpp \ + Qmc_std.cpp \ + ulec.cpp + + +SOURCES:= $(SOURCES) $(addprefix program_utils/,$(MY_SOURCES)) + + + diff --git a/src/program_utils/ooqmc.cpp b/src/program_utils/ooqmc.cpp new file mode 100644 index 00000000..b4dc3ab1 --- /dev/null +++ b/src/program_utils/ooqmc.cpp @@ -0,0 +1,288 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ + + +#include "Qmc_std.h" +#include "Program_options.h" +#include "Qmc_method.h" +#include "qmc_io.h" +#include +#include "ulec.h" +#include + +using namespace std; + + +/*! +Sorts the text in the ifstream and puts the corresponding +values into options. +*/ +void doinput(Program_options & options, + ifstream & inputfile); + +/*! +Decides where we want to go.. We'll assume that the first +argument is the file name of the input file. + +\todo +I'd like to have it so that the input errors are accumulated +and then printed out after it's attempted to allocate everything. +Would be a nice feature. Could be done through exceptions. + +*/ +int main(int argc, char* argv[]) +{ +#ifdef USE_MPI + MPI_Init(&argc, &argv); + MPI_Comm_size(MPI_COMM_WORLD, &(mpi_info.nprocs)); + MPI_Comm_rank(MPI_COMM_WORLD, &(mpi_info.node)); + //cout << "processor " << mpi_info.node << " alive " << endl; +#endif + + Program_options options; + ifstream inputfile; + string outputfile; + for(int i=1; i< argc-1; i++) { + string arg(argv[i]); + if(caseless_eq(arg,"-rappture")) global_options::rappture=1; + } + if(argc >= 2) + { + inputfile.open(argv[argc-1]); + options.runid=argv[argc-1]; + outputfile=argv[argc-1]; + outputfile+=".o"; + } + else + { + error("usage: ", argv[0], " filename"); + } + if(!inputfile) + { + error("Couldn't open ", argv[1]); + } + + + ofstream output; + if(mpi_info.node==0) + { + debug_write(cout, "output to ", outputfile, "\n"); + output.open(outputfile.c_str()); + } + + time_t starttime; + time(&starttime); + const size_t buflen=80; + char hostname[buflen]; + qmcgethostname(hostname, buflen); + cout << "node " << mpi_info.node << " alive on " << hostname << endl; + if(output) + { + output << "------------------------------------------------\n"; + output << "Quantum Walk development version\n"; + output << "Solving Schroedinger's equation using our feet!\n"; + output << "Primary author : Lucas K Wagner\n"; + output << "Contributions from : Zack Helms, Michal Bajdich\n"; + output << "Mental Magic from : Lubos Mitas \n"; + output << "Written at North Carolina State University \n"; + output << "------------------------------------------------\n"; + output << "Running on " << hostname + << endl << ctime(&starttime) << endl; + } + + doinput(options, inputfile); + inputfile.close(); + +#ifdef USE_MPI + long int is1, is2; + rng.getseed(is1, is2); + rng.seed(123754*mpi_info.node+is1, 234456*mpi_info.node+is2); + rng.getseed(is1, is2); +#endif + + Qmc_method * method=NULL; + for(unsigned int i=0; i< options.methodtext.size(); i++) + { + +#ifndef NO_EXCEPTIONS + try { +#endif + + allocate(options.methodtext[i], options, method); + method->generateVariables(options); + method->showinfo(output); + time_t methodstart; + time(&methodstart); + //clock_t run_start=clock(); + method->run(options, output); + //clock_t run_end=clock(); + time_t endtime; + time(&endtime); + if(output) + { + //On Linux, this method overflows after only about an hour, so it's fairly useless. + //Better to use difftime so the results are credible. + //output << "CPU time for run only: " << double(run_end-run_start)/double(CLOCKS_PER_SEC) << endl; + output << "Wall time for this method: " << difftime(endtime, methodstart) << " seconds." << endl; + output << "Total wall time so far: " << difftime(endtime, starttime) << " seconds." << endl; + } + deallocate(method); +#ifdef USE_MPI + MPI_Barrier(MPI_COMM_WORLD); +#endif + +#ifndef NO_EXCEPTIONS + } + catch(bad_alloc) { + error("Had an allocation error and couldn't handle it. Perhaps the run is too large."); +#ifdef USE_MPI + MPI_Abort(MPI_COMM_WORLD, 1); +#endif + } + catch(Qmc_error err) { + cout << "Caught qmc_error" << endl; +#ifdef USE_MPI + MPI_Abort(MPI_COMM_WORLD, 1); +#endif + break; + } + catch(...) { + cout << "caught a general exception " << endl; +#ifdef USE_MPI + MPI_Abort(MPI_COMM_WORLD, 1); +#endif + } + +#endif + + + + } + if(output) + { + output.close(); + } + +#ifdef USE_MPI + MPI_Finalize(); +#endif + +} + +//-------------------------------------------------------------------------- + +void doinput(Program_options & options, + ifstream & inputfile + ) +{ + + //Atom tempatom; + //string temp; + vector words; + words.reserve(50); + + //cout << "parsefile\n"; + + parsefile(inputfile, words); + //cout << "parse done\n"; + + checkbrackets(words); + + + unsigned int pos=0; + vector atomsec; + if(readsection(words, pos, atomsec, "ATOM") != 0) { + error("There shouldn't be an ATOM section in the global space any " + "more. Please put them in the SYSTEM section."); + } + + + + + //cout << "atoms done\n"; + //Normal sections that will be parsed by the instantiated + //class + + vector < string > pseudosec; + pos=0; + while( readsection(words, pos, pseudosec, "PSEUDO") != 0) { + options.pseudotext.push_back(pseudosec); + } + + + vector < string > wfsec; + pos=0; + while( readsection(words, pos, wfsec, "TRIALFUNC") != 0) + { + options.twftext.insert(options.twftext.end(), wfsec); + } + + vector syssec; + pos=0; + while(readsection(words, pos, syssec, "SYSTEM") != 0) + { + options.systemtext.push_back(syssec); + } + if(options.systemtext.size()==0) + { + error("missing system section. Try SYSTEM { MOLECULE } or similar"); + } + //cout << "bah " << endl; + + vector methsec; + pos=0; + while( readsection(words, pos, methsec, "METHOD") != 0 ) + { + options.methodtext.push_back(methsec); + } + + //cout << "reads done" << endl;; + + vector spinsec; + pos=0; + if(readsection(words, pos, spinsec, "NSPIN")) + { + error("Please put NSPIN in the SYSTEM section, not in the global space."); + } + + + + //Set the random seed if specified + pos=0; + vector randnum; + if(readsection(words, pos, randnum, "RANDOMSEED")) { + if(randnum.size() != 2) { + error("RANDOMSEED needs two numbers"); + } + long int is1=atoi(randnum[0].c_str()); + long int is2=atoi(randnum[1].c_str()); + rng.seed(is1, is2); + } + else { + rng.seed(12345, 98234 ); + } + + pos=0; + readvalue(words, pos, options.runid, "RUNID"); + + //cout << "doinput done\n"; + +} +//-------------------------------------------------------------------------- diff --git a/src/program_utils/qmc_io.cpp b/src/program_utils/qmc_io.cpp new file mode 100644 index 00000000..1ae1707d --- /dev/null +++ b/src/program_utils/qmc_io.cpp @@ -0,0 +1,361 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ + +#include "qmc_io.h" + +//--------------------------------------------------------------------- + +int caseless_eq(const string & s1, const string & s2) { + if(s1.size()!=s2.size()) return 0; + + string::const_iterator i1=s1.begin(); + string::const_iterator i2=s2.begin(); + //cout << s1 << " " << s2 << endl; + while( (i1!=s1.end()) && (i2 != s2.end()) ) { + //cout << *i1 << " " << *i2 << endl; + if( toupper(*i1) != toupper(*i2)) + return 0; + i1++; i2++; + } + + return 1; +} + + +void canonical_filename(string & str) +{ +#ifdef USE_MPI + char strbuff[40]; + sprintf(strbuff, "%d", mpi_info.node); + str+="_"; + str+=strbuff; +#endif +} +void canonical_filename(string & str, int num) +{ +#ifdef USE_MPI + char strbuff[40]; + sprintf(strbuff, "%d", num); + str+="_"; + str+=strbuff; +#endif +} + +void append_number(string & str, int num) +{ + char strbuff[40]; + sprintf(strbuff, "%d", num); + str+=strbuff; +} + + + +int haskeyword(vector & input, unsigned int & pos, + const char * valuename) +{ + int level=0; //how many brackets we've descended into. + + for(; pos< input.size(); pos++) + { + if(input[pos]==startsec) + { + level++; + } + else if(input[pos]==endsec) + { + level--; + } + + if(level < 0) + { + pos++; + return 0; + } + + if(level==0 && caseless_eq(input[pos], valuename))//input[pos]==valuename) + { + return 1; + } + } + //if we get here, we didn't find a value + return 0; +} + + +void readnext(vector & s,unsigned int & i, int & t) +{ + if( i >= s.size() ) + { + error("Unexpected end of file at ",s[i]); + } + //cout << "readnext:\n"; + //cout << s[i+1] << endl; + t = atoi(s[++i].c_str()); + //cout << t << endl; +} + +void readnext(vector & s,unsigned int & i, doublevar & t) +{ + if( i >= s.size() ) + { + error("Unexpected end of file at ",s[i]); + } + //cout << "readnext:\n"; + //cout << s[i+1] << endl; + t = atof(s[++i].c_str()); + //cout << t << endl; +} + +void readnext(vector & s,unsigned int & i, string & t) +{ + if( i+1 >= s.size() ) + { + + error("Unexpected end of section at ",s[i]); + } + //cout << "readnext:\n"; + //cout << s[i+1] << endl; + t = s[++i].c_str(); + //cout << t << endl; +} + +//---------------------------------------------------------------------- +/*! +Puts the next section after pos with name sectionname +into section. Stays within the same level that we started; +if the section is ended before finding anything, we return +0. +*/ +int readsection(vector & input, + unsigned int & pos, + vector & section, + const char * sectionname) +{ + string temp; + section.erase(section.begin(), section.end()); + int level=0; + string name(sectionname); + //cout << "searching for " << name << endl; + //for(int i=0; i< input.size(); i++) + // cout << input[i] << endl; + //cout << "____________________________________" << endl; + + for(; pos< input.size(); pos++) + { + if(input[pos]==startsec) + { + level++; + } + else if(input[pos]==endsec) + { + level--; + } + + if(level < 0) + { + pos++; + return 0; + } + //if(input[pos]==sectionname && level == 0) + //if(level==0) cout << "looking at " << input[pos] + // << " : " << caseless_eq(input[pos], name) + // << endl; + if(level==0 && caseless_eq(input[pos], name)) + { + int nsec=0; + pos++; //check for a section start + if(pos >= input.size()) + error("Section starter ", + sectionname, " but nothing following it."); + if(input[pos] != startsec) + error("You must follow ", sectionname, + "with a ", startsec); + pos++; + int begin=pos; + for(; pos < input.size(); pos++) { + if(input[pos]==startsec) nsec++; + if(input[pos]==endsec) nsec--; + if(nsec < 0) { break;} + //section.push_back(input[pos]); + } + pos++; //step past the end + int end=pos; + section.insert(section.end(), + input.begin()+begin, + input.begin()+end-1); + //input.erase(input.begin()+begin-2, input.begin()+end); + //for(int i=0; i< section.size(); i++) + // cout << section[i] << " "; + //cout << endl; + //cout << "---------------input left " << endl; + //for(int i=0; i< input.size(); i++) + // cout << input[i] << " "; + //cout << endl; + + + /* + readnext(input, pos, temp); + if(temp != startsec) + { + error("You must follow ", sectionname, "with a ", startsec); + } + while(pos < input.size() ) + { + readnext(input, pos, temp); + + if(temp == startsec) + { + nsec++; + } + + if(temp == endsec) + { + nsec--; + } + + if(nsec<0) + { + pos++; + break; + } + section.insert(section.end(), temp); + + } + */ + return 1; + } + } + //if we get here, we didn't find a section. + return 0; +} + +//---------------------------------------------------------------------- + +/*! +\bug +When you have a section completely in one block in characters +(ie {1}), it does not realize that the start and end are there, +and chaos ensues. + + */ +void parsefile(ifstream & inputfile, vector & words) +{ + string temp; + vector tempwords; + while(inputfile >> temp) + { + string temp2, temp3; + unsigned int pos; + + //Ignore comments + pos=temp.find(comment); + if( pos < temp.size() ) + { + temp.erase(pos,temp.size()-pos); + inputfile.ignore(800, '\n'); + } + + //Put start section markers in their own word + pos = temp.find(startsec); + if( pos < temp.size() ) + { + temp.erase(pos,startsec.size()); + temp2=startsec; + temp3.append(temp, pos, temp.size()); + temp.erase(pos, temp.size()-pos); + } + + //Put any end section markers in their + //own word + pos = temp.find(endsec); + if( pos < temp.size() ) + { + temp.erase(pos,endsec.size()); + temp2=endsec; + temp3.append(temp, pos, temp.size()); + temp.erase(pos, temp.size()-pos); + } + + if( ! temp.empty() ) + tempwords.push_back(temp); + if( ! temp2.empty() ) + tempwords.push_back(temp2); + if( ! temp3.empty() ) + tempwords.push_back(temp3); + } + + // Include any include files(It's recursive here..) + for(unsigned int i=0; i < tempwords.size(); i++) + { + if(caseless_eq(tempwords[i],"INCLUDE")) + { + ifstream includefile(tempwords[i+1].c_str()); + vector includewords; + if(!includefile) + { + error("couldn't open ", tempwords[i+1]); + } + parsefile(includefile, includewords); + for(unsigned int j=0; j< includewords.size(); j++) + { + words.push_back(includewords[j]); + } + includefile.close(); + i++; + } + else + { + words.push_back(tempwords[i]); + } + } + + +} + + +//---------------------------------------------------------------------- + + + +int checkbrackets(vector & words) +{ + int size=words.size(); + int nopen=0; + int nclose=0; + for(int i=0; i< size; i++) + { + if(words[i]==startsec) + { + nopen++; + } + else if(words[i]==endsec) + { + nclose++; + } + } + if(nopen!=nclose) { + single_write(cout, "you have unbalance brackets: ", nopen, " open "); + single_write(cout, " and ", nclose, " close\n"); + error("The open and close brackets don't match."); + } + return 1; +} + +//---------------------------------------------------------------------- diff --git a/src/program_utils/qmc_io.h b/src/program_utils/qmc_io.h new file mode 100644 index 00000000..bf3fa655 --- /dev/null +++ b/src/program_utils/qmc_io.h @@ -0,0 +1,363 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ + +#ifndef QMC_IO_H_INCLUDED +#define QMC_IO_H_INCLUDED + + +#include "Qmc_std.h" +#include + +const string startsec="{"; +const string endsec="}"; +const string comment="#"; + + +int caseless_eq(const string & , const string & ); + + + +/*! +This function reads the next word out of a vector of strings, doing error +correction and converting to int, double, or string, depending on what +you give it. If stringstreams worked, it could be a template, which would +work with everything. @see readnext +*/ +void readnext(vector & s,unsigned int & i, int & t); +void readnext(vector & s,unsigned int & i, doublevar & t); +void readnext(vector & s,unsigned int & i, string & t); + +/*! +Starting from pos, finds the next instance of sectionname +at the same logical +level(will not descend into {}'s) and puts the entire thing +into section + +\todo +Perhaps we should have this and the other read functions remove +the keyword and values from the input. That way, we wouldn't have +to deal with pos, and we could check to make sure the input was +completely used. + + */ +int readsection(vector & input, + unsigned int & pos, + vector & section, + const char * sectionname); + +/*! +Starting from pos, finds the next instance of valuename, and +puts the next word into value. Uses readnext to do so, so +it supports every type that readnext is overloaded to +support. + */ +template +int readvalue(vector & input, + unsigned int & pos, + T & value, + const char * valuename) +{ + int level=0; //how many brackets we've descended into. + + string name(valuename); + for(; pos< input.size(); pos++) + { + if(input[pos]==startsec) + { + level++; + } + else if(input[pos]==endsec) + { + level--; + } + + if(level < 0) + { + pos++; + return 0; + } + + if(level==0 && caseless_eq(input[pos],valuename)) //input[pos]==valuename) + { + readnext(input, pos, value); + + //input.erase(input.begin()+pos-1,input.begin()+ pos+1); + //pos-=2; + return 1; + } + } + //if we get here, we didn't find a value + return 0; +} + +/*! + Search for a keyword and return whether it's in the level +or not. + */ +int haskeyword(vector & input, unsigned int & pos, + const char * valuename); + + +/*! +Separates the given file into words, removing comments and +including any include files. + */ +void parsefile(ifstream & inputfile, vector & words); +/*! + Count the number of brackets in the words, and make sure that +they add up correctly. + */ +int checkbrackets(vector & words); + +/*! +Writes an array of objects to a stream, provided they have +a rawOutput function. + */ +template +void write_array(int nfill, Array1 & array, ostream & os) +{ + //cout << "write_array " << endl; + if(!os) error("bad output stream in write_array"); + if(nfill > array.GetDim(0) ) + { + error("While writing an array in write_array, nfill is ", nfill, + "and the array size is ", array.GetDim(0)); + } + os << "Array " << startsec <<" " << nfill << endl; + + for(int i=0; i< nfill; i++) + { + //cout << " i " << i << endl; + array(i)->rawOutput(os); + } + os << " "<< endsec << " \n"; +} + + +/*! + + */ +template +int read_array(Array1 & array, istream & is) +{ + string text; + //cout << "****Entering read_array\n"; + int numobjects; + is >> text; + if(text != "Array") + error("expected Array, got ", text); + //cout << "first read " << text << endl; + is >> text >> numobjects; + if(text != startsec) + error("expected ", startsec, " got ", text); + + if(numobjects > array.GetDim(0)) + { + cout << "WARNING: in read_array, the number of objects in the file" + " is greater than the number of objects passed. In file: " << + numobjects << " passed: " << array.GetDim(0) << endl; + } + + numobjects=min(numobjects, array.GetDim(0)); + + for(int i=0; i< numobjects; i++) + { + array(i)->rawInput(is); + } + + //now find the end of the array. + int numsec=0; + + while(is >> text) + { + if(text == startsec) + { + numsec++; + } + else if(text==endsec) + { + numsec--; + } + + if(numsec < 0) + { + return numobjects; + } + } + error("Reached the end of file without finding closing bracket."); + return 0; +} + + + + +/*! +Modifies the name of a file for parallel runs. We should +always use this when writing to a file; otherwise, there +will be collisions.(or use single_write) + */ +void canonical_filename(string & ); +void canonical_filename(string &, int num); + +void append_number(string &, int num); + +/*! + + */ +template +void single_write(ostream & os, const T & t) +{ +#ifdef USE_MPI + if(mpi_info.node==0) + { +#endif + os << t; +#ifdef USE_MPI + } +#endif + os.flush(); +} +template +void single_write(ostream & os, const T & t, const U & u) +{ +#ifdef USE_MPI + if(mpi_info.node==0) + { +#endif + os << t << u; +#ifdef USE_MPI + } +#endif + os.flush(); +} + +template +void single_write(ostream & os, const T & t, const U & u, const V & v) +{ +#ifdef USE_MPI + if(mpi_info.node==0) + { +#endif + os << t << u << v; +#ifdef USE_MPI + } +#endif + os.flush(); +} + +template +void single_write(ostream & os, const T & t, + const U & u, const V & v, const W & w) +{ +#ifdef USE_MPI + if(mpi_info.node==0) + { +#endif + os << t << u << v << w; +#ifdef USE_MPI + } +#endif + os.flush(); +} + +//---------------------------------------------------------------------- + +template +void debug_write(ostream & os, const T & t) +{ +#ifdef DEBUG_WRITE +#ifdef USE_MPI + os << mpi_info.node << ": "; +#endif + + os << t; + os.flush(); +#endif +} +template +void debug_write(ostream & os, const T & t, const U & u) +{ +#ifdef DEBUG_WRITE +#ifdef USE_MPI + os << mpi_info.node << ": "; +#endif + + os << t << u; + os.flush(); +#endif +} + +template +void debug_write(ostream & os, const T & t, const U & u, const V & v) +{ +#ifdef DEBUG_WRITE +#ifdef USE_MPI + os << mpi_info.node << ": "; +#endif + + os << t << u << v; + os.flush(); +#endif +} + +template +void debug_write(ostream & os, const T & t, + const U & u, const V & v, const W & w) +{ +#ifdef DEBUG_WRITE +#ifdef USE_MPI + os << mpi_info.node << ": "; +#endif + + os << t << u << v << w; + os.flush(); +#endif +} + +//#include +/* Unfortunately, some gcc libraries don't support this yet, +but it should be very nice when they do.. +template +void readnext(vector & s,unsigned int & i, T & t) { + stringstream sstemp; + + if( i >= s.size() ) { + cout << "Error! Unexpected end of file at " << s[i] << endl; + Terminate(); + } + cout << "readnext:\n"; + cout << s[i+1] << endl; + sstemp << s[++i]; + sstemp >> t; + cout << t << endl; +} + +template void read(string & s, T & t) { + stringstream sstemp; + sstemp << s; + sstemp >> t; +} +*/ + + + +#endif //QMC_IO_H_INCLUDED + +//-------------------------------------------------------------------------- diff --git a/src/program_utils/ulec.cpp b/src/program_utils/ulec.cpp new file mode 100644 index 00000000..48a53af0 --- /dev/null +++ b/src/program_utils/ulec.cpp @@ -0,0 +1,130 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ + +#include "ulec.h" + +Random_generator rng; + + +double unif() +{ + static int ix=1234567; + int k1=ix/127773; + ix=16807*(ix-k1*127773)-k1*2836; + if(ix < 0) + ix+=2147483647; + return 4.656612875e-10 * ix; +} + + +doublevar ranr2exponential() { + while(1) { + doublevar ex=-log(rng.ulec())/.4; + //cout << "ex " << ex << " prob " << (.5/.8)*ex*ex*exp(-ex+0.4*ex) << endl; + if(rng.ulec()< (.5/.8)*ex*ex*exp(-ex+0.4*ex) ) { + //cout << "acc " << endl; + return ex; + } + } +} + +doublevar rancos() { + return acos(1-2*rng.ulec()); +} + +//---------------------------------------------------------------------- + +void generate_random_rotation(Array1 & x, + Array1 & y, + Array1 & z) { + doublevar usum, u2,uu,yu2,yu1, zz1, yy3, zz2, u1, zz3, yu3, zu2,zu1, zu3, + cfi, sthet, sfi, yy2, yy1, xsum, theta, xsum2; + assert(x.GetDim(0)==3); + assert(y.GetDim(0)==3); + assert(z.GetDim(0)==3); + + do + { + x(0)=1.-2.*unif(); + x(1)=1.-2.*unif(); + xsum=(x(0)*x(0)+x(1)*x(1)); + } + while (xsum >= 1.); + + //cout << "xsum " << xsum << endl; + + xsum2=2.*sqrt(fabs(1.-xsum)); + x(0)=x(0)*xsum2; + x(1)=x(1)*xsum2; + x(2)=1.-2.*xsum; + + theta=acos(x(2)); + sthet=sin(theta); + if (sthet < 1.e-05) + { + cfi=1.; + sfi=0.; + x(0)=0; + x(1)=0.; + x(2)=1; + sthet=0.; + } + else + { + cfi=x(0)/sthet; + sfi=x(1)/sthet; + } + + yy1=x(2)*cfi; + yy2=x(2)*sfi; + yy3=-sthet; + zz1=-sfi; + zz2=cfi; + zz3=0.; + do + { + u1=unif()*2.-1.; + u2=unif()*2.-1.; + usum=u1*u1+u2*u2; + } + while(usum >= 1.0); + + //cout << "usum " << usum << endl; + + uu=sqrt(usum); + u1=u1/uu; + u2=u2/uu; + yu1=yy1*u1; + yu2=yy2*u1; + yu3=yy3*u1; + zu1=zz1*u2; + zu2=zz2*u2; + zu3=zz3*u2; + y(0)=yy1*u1+zz1*u2; + y(1)=yy2*u1+zz2*u2; + y(2)=yy3*u1+zz3*u2; + z(0)=yy1*u2-zz1*u1; + z(1)=yy2*u2-zz2*u1; + z(2)=yy3*u2-zz3*u1; + + +} + +//---------------------------------------------------------------------- diff --git a/src/program_utils/ulec.h b/src/program_utils/ulec.h new file mode 100644 index 00000000..bda7b3cc --- /dev/null +++ b/src/program_utils/ulec.h @@ -0,0 +1,137 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ + +#ifndef ULEC_H_INCLUDED +#define ULEC_H_INCLUDED + +#include "Qmc_std.h" + + +/*! + +*/ +class Random_generator +{ +public: + Random_generator() + { + is1=12345; + is2=56789; + iset=0; + gset=.1; + } + + void seed(long int is1_,long int is2_) + { + if(is1_==0 || is2_==0) + error("Seed is zero!", is1_, " ", is2_); + is1=is1_; + is2=is2_; + } + + + void getseed(long int & is1_, long int & is2_) { + is1_=is1; + is2_=is2; + } + + /*! + uniform random number generator (combined type) + + P. L'Ecuyer, Commun. ACM, 31(1988)742 + + portable (32 bits arithmetics) + */ + double ulec() + { + long int k,iz; + k=is1/53668; + is1=is1-k*53668; + is1=40014*is1-k*12211; + if (is1<0) + is1 +=2147483563; + k=is2/52774; + is2=is2-k*52774; + is2=40692*is2-k*3791; + if (is2<0) + is2 +=2147483399; + iz=is1-is2; + if (iz<0) + iz +=2147483562; + + + //cout << "random number " << 4.656613057e-10*iz << endl; + return (4.656613057e-10*iz); + } + + /*! + Gaussian distributed random number + */ + double gasdev() + { + + if (iset ==0) + { + doublevar v1, v2, r, fac; + do + { + v1=2.*ulec() -1.; + v2=2.*ulec() -1.; + r=v1*v1 + v2*v2; + } + while ( r >= 1. || r == 0.); + fac=sqrt(-2.*log(r)/r); + gset=v1*fac; + iset=1; + //if(mpi_info.node==0) cout << "gasdev " << v2*fac << endl; + return v2*fac; + } + else + { + iset=0; + //if(mpi_info.node==0) cout << "gasdev " << gset << endl; + return gset; + } + } + +private: + long int is1; + long int is2; + int iset; + double gset; + +}; + +/*! +This is one of the few times that we actually +_want_ a global variable... +*/ +extern Random_generator rng; + +double unif(); + +void generate_random_rotation(Array1 & x, Array1 & y, + Array1 & z); + +doublevar ranr2exponential(); +doublevar rancos(); + +#endif // ULEC_H_INCLUDED +//-------------------------------------------------------------------------- diff --git a/src/program_utils/vecmath.h b/src/program_utils/vecmath.h new file mode 100644 index 00000000..dfdd48b8 --- /dev/null +++ b/src/program_utils/vecmath.h @@ -0,0 +1,109 @@ +/* + A vector library for the Arrays + Note: Some of these return arrays, so they're slow..don't use them + in speed-sensitive routines! + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ +#ifndef VECMATH_H_INCLUDED +#define VECMATH_H_INCLUDED + +#include "Array.h" +#include +/*! + */ + +inline void cross(const Array1 & a, const Array1 & b, Array1 & c) { + assert(a.GetDim(0)==3); + assert(b.GetDim(0)==3); + assert(c.GetDim(0)==3); + c(0)=(a[1]*b[2]-a[2]*b[1]); + c(1)=(a[2]*b[0]-a[0]*b[2]); + c(2)=(a[0]*b[1]-a[1]*b[0]); +} + +inline double dot(const Array1 & a,const Array1 & b) { + assert(a.GetDim(0)==3); + assert(b.GetDim(0)==3); + return a[0]*b[0]+a[1]*b[1]+a[2]*b[2]; +} + +inline double length_vec(const Array1 & a) { + assert(a.GetDim(0)==3); + return sqrt(a[0]*a[0]+a[1]*a[1]+a[2]*a[2]); +} + +inline Array1 operator+(const Array1 & a, + const Array1 & b) { + assert(a.GetDim(0)==3); + assert(b.GetDim(0)==3); + Array1 c(3); + for(int i=0; i< 3; i++) { + c(i)=(a[i]+b[i]); + } + return c; +} + +inline double distance_vec(const Array1 & a, + const Array1 & b) { + assert(a.GetDim(0)==3); + assert(b.GetDim(0)==3); + return sqrt( + (a[0]-b[0])*(a[0]-b[0]) + +(a[1]-b[1])*(a[1]-b[1]) + +(a[2]-b[2])*(a[2]-b[2])); +} + +inline Array1 operator-(const Array1 & a, + const Array1 & b) { + assert(a.GetDim(0)==3); + assert(b.GetDim(0)==3); + Array1 c; + for(int i=0; i< 3; i++) { + c(i)=a[i]-b[i]; + } + return c; +} + +inline Array1 operator*(const Array1 & v,const int & i) { + assert(v.GetDim(0)==3); + Array1 c(3); + for(int i=0; i< 3; i++) c(i)=(i*v[i]); + return c; +} + + +//projection of a onto b (returns a dot b/abs(b)) +inline double projection(const Array1 & a,const Array1 & b) { + assert(a.GetDim(0)==3); + assert(b.GetDim(0)==3); + double c; + c=dot(a,b); + double bsize=dot(b,b); + return c/sqrt(bsize); +} + + + + + + +#endif //VECMATH_H_INCLUDED + +//---------------------------------------------------------------------- + diff --git a/src/properties/Properties.cpp b/src/properties/Properties.cpp new file mode 100644 index 00000000..8faee9f0 --- /dev/null +++ b/src/properties/Properties.cpp @@ -0,0 +1,1218 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ +#include "Properties.h" + +#include "qmc_io.h" +#include "Wavefunction_data.h" +#include "ulec.h" + +//###################################################################### + +void allocate(vector & words, System * sys, string & runid, + Local_density_accumulator *& denspt) { + if(words.size() < 1) error("empty density section"); + if(caseless_eq(words[0], "DENSITY")) + denspt=new One_particle_density; + else if(caseless_eq(words[0], "SK")) + denspt=new Structure_factor; + else if(caseless_eq(words[0], "LM")) + denspt=new Local_moments; + else if(caseless_eq(words[0],"POL")) + denspt=new Polarization; + else if(caseless_eq(words[0],"GR")) + denspt=new Electron_correlation; + else + error("Didn't understand density keyword",words[0]); + denspt->init(words, sys, runid); +} +//###################################################################### + + +void One_particle_density::init(vector & words, System * sys, + string & runid) { + int ndim=sys->ndim(); + norm=50; + outputfile=runid+".cube"; + nup=sys->nelectrons(0); + unsigned int pos=0; + + readvalue(words, pos=0, outputfile,"OUTPUTFILE"); + + min_.Resize(ndim); max.Resize(ndim); + Array2 latvec; + if(sys->getBounds(latvec)) { + //assume origin is zero for the moment + min_=0; max=0; + for(int d=0; d< ndim; d++) { + for(int i=0; i< ndim; i++) { + if(latvec(i,d)>0) max(d)+=latvec(i,d); + if(latvec(i,d)<0) min_(d)+=latvec(i,d); + } + } + } + else { + for(int d=0; d< ndim; d++) { + min_(d)=-3; max(d)=3; + } + } + vector mintxt; + if(readsection(words, pos=0, mintxt, "MIN")) { + if(mintxt.size()!=3) error("MIN must have exactly 3 elements"); + for(int d=0;d < 3; d++) { + min_(d)=atof(mintxt[d].c_str()); + } + } + + vector maxtxt; + if(readsection(words, pos=0, maxtxt, "MAX")) { + if(maxtxt.size()!=3) error("MAX must have exactly 3 elements"); + for(int d=0;d < 3; d++) { + max(d)=atof(maxtxt[d].c_str()); + } + } + + + if(!readvalue(words, pos=0, resolution, "RESOLUTION")) + resolution=.1; + + + start_electron=0; + end_electron=sys->nelectrons(0)+sys->nelectrons(1); + if(haskeyword(words, pos=0, "UP")) + end_electron=sys->nelectrons(0); + + if(haskeyword(words,pos=0, "DOWN")) + start_electron=sys->nelectrons(0); + + if(end_electron==start_electron) + error("In one-particle density, UP and DOWN are incompatible"); + + npoints.Resize(3); + npoints=1; + for(int d=0; d < ndim; d++) { + npoints(d)=int((max(d)-min_(d))/resolution)+1; + } + + bin.Resize(npoints(0), npoints(1), npoints(2)); + bin=0; + nsample=0; + + + int nions=sys->nIons(); + atominfo.Resize(nions, 4); + Array1 ionpos(3); + for(int i=0; i< nions; i++) { + sys->getIonPos(i,ionpos); + for(int d=0; d< 3; d++) { + atominfo(i,d+1)=ionpos(d); + } + atominfo(i,0)=sys->getIonCharge(i); + } + + //try to recover the previous run's density + ifstream is(outputfile.c_str()); + if(is) { + string dummy; + //each processor gets an equal share, since we gather them when + //we write the file + is >> dummy >> dummy >> nsample; + nsample /= (mpi_info.nprocs); + is.ignore(180, '\n'); //finish first line + is.ignore(180, '\n'); + doublevar dum; + is >> dum; + if(dum != nions) error("different number of ions in previous density file"); + for(int d=0; d< 3; d++) { + is >> dum; + if(fabs(dum-min_(d)) > 1e-4 )error("different min in density file"); + } + for(int d=0; d< 3; d++) { + is >> dum; + if(fabs(dum-npoints(d))> 1e-4) + error("different number of points in density file"); + for(int i=0; i< d; i++) + is >> dum; + is >> dum; + if(fabs(dum-resolution) > 1e-4) + error("different resolution in density file"); + is.ignore(180, '\n'); + } + for(int at=0; at< nions; at++) + is.ignore(180, '\n'); + for(int x=0; x < npoints(0); x++) { + for(int y=0; y < npoints(1); y++) { + for(int z=0; z< npoints(2); z++) { + is >> bin(x,y,z); + + bin(x,y,z)*=nsample/(norm); + } + } + } + + is.close(); + } + +} + +//---------------------------------------------------------------------- + +void One_particle_density::accumulate(Sample_point * sample, double weight) { + + //int nelectrons=sample->electronSize(); + Array1 place(3); + Array1 epos(3); + for(int e=start_electron; e< end_electron; e++) { + sample->getElectronPos(e,epos); + int use=1; + for(int d=0; d< 3; d++) { + place(d)=int( (epos(d)-min_(d))/resolution+0.5); + if(place(d) <0 || place(d) >= npoints(d)) + use=0; + } + if(use) { + nsample+=weight; + bin(place(0), place(1), place(2))+=weight; + } + } +} + +//void One_particle_density::accumulate(Array1 < Array1 > & epos) { + // int nelectrons=epos.GetDim(0); +// Array1 place(3); +// for(int e=start_electron; e< end_electron; e++) { +// int use=1; +// for(int d=0; d< 3; d++) { +// place(d)=int( (epos(e)(d)-min_(d))/resolution+0.5); +// if(place(d) <0 || place(d) >= npoints(d)) +// use=0; +// } +// if(use) { +// nsample++; +// bin(place(0), place(1), place(2))++; +// } +// } + +//} + +//---------------------------------------------------------------------- + +void One_particle_density::write() { +#ifdef USE_MPI + Array3 bin_tmp(npoints(0), npoints(1), npoints(2)); + bin_tmp=0; + + //MPI defaults to at max 4MB send queue(at least in the P4 communicator), + //so we should split the array up into chunks of about 2MB, which is about + //260,000 doubles, to be safe. This can be avoided by setting P4_GLOBMEMSIZE + //to some large value, but it's really annoying to do that, and there's no + //huge performance benefit. + + + int n=npoints(0)*npoints(1)*npoints(2); + double * ptr=bin.v; + double * ptr2=bin_tmp.v; + double * last=bin.v+n; + int interval=260000; + + while(ptr & bin_tmp(bin); + doublevar nsample_tmp=nsample; +#endif + + if(mpi_info.node==0) { + ofstream os(outputfile.c_str()); + os << "QWalk: nsamples " << nsample_tmp << "\n"; + os << "Electron density" << endl; + + int nions=atominfo.GetDim(0); + os << " " << nions << " " << min_(0) << " " + << min_(1) << " " << min_(2) << endl; + os << npoints(0) << " " << resolution << " 0.0000 0.0000" << endl; + os << npoints(1) << " 0.0000 " << resolution << " 0.0000" << endl; + os << npoints(2) << " 0.0000 0.0000 " << resolution<< endl; + + for(int at=0; at < nions; at++) { + os << " " << atominfo(at,0) << " 0.0000 " << atominfo(at,1) + << " " << atominfo(at,2) << " " << atominfo(at,3) << endl; + } + + int counter=0; + for(int x=0; x < npoints(0); x++) { + for(int y=0; y < npoints(1); y++) { + for(int z=0; z< npoints(2); z++) { + os << norm*bin_tmp(x,y,z)/nsample_tmp << " "; + if((counter++)%6==5) os << endl; + } + } + } + os << endl; + os.close(); + } + + +} + +//---------------------------------------------------------------------- +//###################################################################### + +void Electron_correlation::init(vector & words, System * sys, + string & runid) { + outputfile=runid+".gr"; + resolution=.1; + doublevar range=10.0; + npoints=int(range/resolution); + gr_up.Resize(npoints); gr_down.Resize(npoints); + gr_unlike.Resize(npoints); + gr_up=0.0; gr_down=0.0; gr_unlike=0.0; + nsample_up=nsample_down=nsample_unlike=0; + nup=sys->nelectrons(0); + + ifstream is(outputfile.c_str()); + if(is) { + is.ignore(180,'\n'); //we currently can't set npoints & resolution + string dum; + is >> dum; + is >> nsample_up >> nsample_down >> nsample_unlike; + nsample_up/=mpi_info.nprocs; + nsample_down/=mpi_info.nprocs; + nsample_unlike/=mpi_info.nprocs; + is.ignore(180,'\n'); //finish line + is.ignore(180,'\n'); //info line + double ddum; + for(int i=0; i< npoints; i++) { + is >> ddum >> gr_up(i) >> gr_down(i) >> gr_unlike(i); + gr_up(i)*=nsample_up; + gr_down(i)*=nsample_down; + gr_unlike(i)*=nsample_unlike; + } + + is.close(); + } +} + +//---------------------------------------------------------------------- + + +void Electron_correlation::accumulate(Sample_point * sample, double weight) { + //cout << "acc " << endl; + int nelectrons=sample->electronSize(); + int nions=sample->ionSize(); + sample->updateEEDist(); + sample->updateEIDist(); + Array1 dist(5); + Array1 dist_ion(5); + for(int e=0; e< nup; e++) { + + for(int e2=e+1; e2 < nup; e2++) { + sample->getEEDist(e,e2,dist); + int place=int(dist(0)/resolution); + if(place < npoints) { + gr_up(place)+=weight/(4*pi*resolution*dist(1)); + nsample_up+=weight; + } + } + //cout << "unlike " << endl; + //unlike spins + for(int e2=nup; e2 < nelectrons; e2++) { + + sample->getEEDist(e,e2,dist); + int place=int(dist(0)/resolution); + if(place < npoints) { + gr_unlike(place)+=weight/(4*pi*resolution*dist(1)); + nsample_unlike+=weight; + } + } + } + //cout << "down " << endl; + + //like down spins + for(int e=nup; e < nelectrons; e++) { + for(int e2=e+1; e2< nelectrons; e2++) { + sample->getEEDist(e,e2,dist); + int place=int(dist(0)/resolution); + if(place < npoints) { + gr_down(place) += weight/(4*pi*resolution*dist(1)); + nsample_down+=weight; + } + } + } + //cout << "done " << endl; +} + +//---------------------------------------------------------------------- + + +void Electron_correlation::write() { + doublevar n_up_tmp=parallel_sum(nsample_up); + doublevar n_down_tmp=parallel_sum(nsample_down); + doublevar n_unlike_tmp=parallel_sum(nsample_unlike); + +#ifdef USE_MPI + Array1 down_tmp(npoints),up_tmp(npoints),unlike_tmp(npoints); + MPI_Reduce(gr_down.v,down_tmp.v,npoints,MPI_DOUBLE, MPI_SUM, 0,MPI_COMM_WORLD); + MPI_Reduce(gr_up.v,up_tmp.v,npoints,MPI_DOUBLE, MPI_SUM, 0,MPI_COMM_WORLD); + MPI_Reduce(gr_unlike.v,unlike_tmp.v,npoints,MPI_DOUBLE, MPI_SUM, 0,MPI_COMM_WORLD); + +#else + + Array1 & down_tmp(gr_down); + Array1 & up_tmp(gr_up); + Array1 & unlike_tmp(gr_unlike); +#endif + + if(mpi_info.node==0) { + ofstream os(outputfile.c_str()); + os << "#npoints " << npoints << " resolution " << resolution << endl; + os << "#weights " << n_up_tmp << " " << n_down_tmp << " " << n_unlike_tmp << endl; + os << "#r g(r)(spin up) g(r)(spin down) g(r)(unlike spins) \n"; + for(int i=0; i< npoints; i++) { + os << (i+.5)*resolution << " " << up_tmp(i)/n_up_tmp + << " " << down_tmp(i)/n_down_tmp << " " << unlike_tmp(i)/n_unlike_tmp + << endl; + } + } + +} + +//###################################################################### +void Structure_factor::init(vector & words, System * sys, + string & runid) { + + single_write(cout, "Structure factor calculation!"); + outputfile=runid+".sk"; + + nsample=0; + wnsample=0.0; + unsigned int pos=0; + if(!readvalue(words, pos=0, np_side, "NGRID")) + np_side=5; + + npoints=np_side*np_side*np_side; + grid.Resize(npoints); + grid=0.0; + + vector gvec_sec; + if(readsection(words, pos=0, gvec_sec, "GVEC")) { + int count=0; + gvec.Resize(3,3); + for(int i=0; i< 3; i++) { + for(int j=0; j< 3; j++) { + gvec(i,j)=atof(gvec_sec[count++].c_str()); + } + } + } + else { + if(!sys->getRecipLattice(gvec)) + error("You don't have a periodic cell and you haven't specified GVEC for S(k)"); + } + + kpts.Resize(npoints, 3); + kpts=0; + int c=0; + for(int ix=0; ix < np_side; ix++) { + for(int iy=0; iy < np_side; iy++) { + for(int iz=0; iz < np_side; iz++) { + for(int i=0; i< 3; i++) + kpts(c,i)+=2*pi*(gvec(0,i)*ix+gvec(1,i)*iy+gvec(2,i)*iz); + c++; + } + } + } +} + +//---------------------------------------------------------------------- + +void Structure_factor::accumulate(Sample_point * sample, doublevar weight) { + nelectrons=sample->electronSize(); + + Array1 pos(3); + Array1 k(3); + + for(int p=0; p < npoints; p++) { + doublevar sum_cos=0, sum_sin=0; + + for(int e=0; e< nelectrons; e++) { + sample->getElectronPos(e,pos); + doublevar dot=0; + for(int d=0; d< 3; d++) dot+=pos(d)*kpts(p,d); + sum_cos+=cos(dot); + sum_sin+=sin(dot); + } + grid(p)+=weight*(sum_cos*sum_cos+sum_sin*sum_sin); + + } + nsample+=1; + wnsample+=weight; +} + +//---------------------------------------------------------------------- + +void Structure_factor::write() { + int nsample_tmp=parallel_sum(nsample); + doublevar wnsample_tmp=parallel_sum(wnsample); +#ifdef USE_MPI + Array1 grid_tmp(npoints); + grid_tmp=0; + MPI_Reduce(grid.v, grid_tmp.v, npoints, MPI_DOUBLE,MPI_SUM, + 0,MPI_COMM_WORLD); +#else + Array1 & grid_tmp(grid); + +#endif + + if(mpi_info.node==0) { + ofstream out(outputfile.c_str()); + out << "#nsamples " << nsample_tmp << " (" + << wnsample_tmp << " weighted)" << endl; + out << "#k s(k) kx ky kz" << endl; + + for(int i=0; i< npoints; i++) { + doublevar sk=grid_tmp(i)/wnsample_tmp; + doublevar r=0; + for(int d=0; d< 3; d++) r+=kpts(i,d)*kpts(i,d); + r=sqrt(r); + out << r << " " << sk/nelectrons << " " + << kpts(i,0) << " " << kpts(i,1) << " " << kpts(i,2) << endl; + } + } +} +//###################################################################### + + +//###################################################################### +void Local_moments::init(vector & words, System * sys, + string & runid) { + + single_write(cout, "Local moments will be calculated.\n"); + outputfile=runid+".lm"; + + nup=sys->nelectrons(0); + nelectrons=nup+sys->nelectrons(1); + natoms=sys->nIons(); + + moment.Resize(natoms+1); // last atom is interstitial + moment=0; + charge.Resize(natoms+1); + charge=0; + rMT.Resize(natoms+1); + rMT=-1; + sys->getAtomicLabels(atomnames); + if ( words.size() == 1 ) { + single_write(cout,"No muffin-tin radii given.\n"); + } else if ( 2*(words.size()/2) == words.size() ) { + single_write(cout,"Malformed muffin-tin radii data.\n"); + } else { + // let's try to decode the input + int npair=(words.size()-1)/2; + for (int pair=0; pair < npair; pair++ ) { + for (unsigned int i=0; i < atomnames.size(); i++) { + if ( caseless_eq(words[2*pair+1],atomnames[i]) ) { + sscanf(words[2*pair+2].c_str(),"%lf",&(rMT(i))); + } + } + } + } + single_write(cout,"Muffin-tin radii:\n"); + for (unsigned int i=0; i < atomnames.size(); i++) { + if ( rMT(i) > 0 ) { + single_write(cout,atomnames[i]," ",rMT(i),"\n"); + } else { + rMT(i)=2; + single_write(cout,atomnames[i]," ",rMT(i)," (default used)\n"); + } + } + atomnames.push_back("interst."); + + nblock=0; + nsample=0; + wnsample=0.0; + +} + +//---------------------------------------------------------------------- + +void Local_moments::accumulate(Sample_point * sample, doublevar weight) { + + Array1 dist(5); + + sample->updateEIDist(); + + for(int e=0; egetEIDist(e,i,dist); + // zero element of dist is norm, second is norm^2 + if ( dist(0) < rMT(i) ) { + moment(i)+=weight; + charge(i)+=weight; + interstitial=false; + } + } + if ( interstitial ) { + moment(natoms)+=weight; + charge(natoms)+=weight; + } + } + + for(int e=nup; egetEIDist(e,i,dist); + if ( dist(0) < rMT(i) ) { + moment(i)-=weight; + charge(i)+=weight; + interstitial=false; + } + } + if ( interstitial ) { + moment(natoms)-=weight; + charge(natoms)+=weight; + } + } + + nsample+=1; + wnsample+=weight; + +} + +//---------------------------------------------------------------------- + +void Local_moments::write() { + + nblock+=1; + LM_storage this_block; + this_block.allocate(natoms+1); // last atom is interstitial + this_block.nsample=parallel_sum(nsample); + this_block.wnsample=parallel_sum(wnsample); + +#ifdef USE_MPI + MPI_Reduce(moment.v, this_block.moment.v, natoms+1, MPI_DOUBLE,MPI_SUM, + 0,MPI_COMM_WORLD); + MPI_Reduce(charge.v, this_block.charge.v, natoms+1, MPI_DOUBLE,MPI_SUM, + 0,MPI_COMM_WORLD); +#else + this_block.moment=moment; + this_block.charge=charge; +#endif + + if(mpi_info.node==0) { + + blocks.push_back(this_block); + + int nsample_tmp=0; + doublevar wnsample_tmp=0.0; + for ( list ::const_iterator block = blocks.begin(); + block != blocks.end(); block++ ) { + nsample_tmp+=block->nsample; + wnsample_tmp+=block->wnsample; + } + + ofstream out(outputfile.c_str()); + out << "No. samples: " << nsample_tmp << " (" + << wnsample_tmp << " weighted)" << endl; + out << "No. blocks: " << nblock << endl << endl; + out << " atom(rMT) moment charge" << endl; + out.flags(ios::fixed); + + for(int i=0; i::const_iterator block = blocks.begin(); + block != blocks.end(); block++ ) { + m_av += block->moment(i)/block->wnsample; + ch_av+= block->charge(i)/block->wnsample; + } + m_av =m_av/nblock; + ch_av=ch_av/nblock; + // variance + doublevar m_var=0, ch_var=0; + if ( nblock > 1 ) { + for ( list ::const_iterator block = blocks.begin(); + block != blocks.end(); block++ ) { + m_var += (block->moment(i)/block->wnsample-m_av) + *(block->moment(i)/block->wnsample-m_av); + ch_var+= (block->charge(i)/block->wnsample-ch_av) + *(block->charge(i)/block->wnsample-ch_av); + } + m_var =m_var/(nblock-1)/nblock; + ch_var=ch_var/(nblock-1)/nblock; + } + // write out (at last!) + out.precision(2); + out << setw(8) << atomnames[i]; + if ( i < natoms ) { + out << "(" << setw(4) << rMT(i) << ")" ; + } else { + out << " " ; + } + out.precision(5); + out << " " << setw(8) << m_av << " +/- " << setw(8) << sqrt(m_var) + << " " << setw(8) << ch_av << " +/- " << setw(8) << sqrt(ch_var) + << endl; + } + + } // if(mpi_info.node==0) + + // reset per-block quantities + nsample=0; + wnsample=0.0; + moment=0; + charge=0; + +} +//###################################################################### + +void Polarization::init(vector & words, System * sys, string & runid) { + outputfile=runid+".pol"; + if(!sys->getRecipLattice(gvec)) + error("There must be a reciprocal lattice for polarization to work"); + ncvg=6; + single_pol_cvg.Resize(ncvg,3); + manye_pol_cvg.Resize(ncvg,3); + single_pol_cvg=dcomplex(0.0,0.0); + manye_pol_cvg=dcomplex(0.0,0.0); + nsample=0; +} + +//------------------------------------------------------------------------ + + +void Polarization::accumulate(Sample_point * sample, doublevar weight) { + int nelectrons=sample->electronSize(); + Array1 sum(3,0.0); + Array1 pos(3); + for(int e=0; e< nelectrons; e++) { + sample->getElectronPos(e,pos); + for(int i=0; i< 3; i++) { + doublevar tmp=0; + for(int d=0; d< 3; d++) { + tmp+=gvec(i,d)*pos(d); + } + sum(i)+=tmp; + for(int n=0; n< ncvg; n++) { + int nf=n+1; + single_pol_cvg(n,i)+=weight*dcomplex(cos(nf*2*pi*tmp),sin(nf*2*pi*tmp))/doublevar(nelectrons); + } + } + } + + for(int n=0; n < ncvg; n++) { + for(int i=0; i< 3; i++) { + int nf=n+1; + manye_pol_cvg(n,i)+=weight*dcomplex(cos(nf*2*pi*sum(i)),sin(nf*2*pi*sum(i))); + } + } + nsample+=weight; + +} + +//------------------------------------------------------------------------ + +void Polarization::write() { + for(int n=0; n < ncvg; n++) { + for(int i=0; i< 3; i++) { + single_pol_cvg(n,i)=parallel_sum(single_pol_cvg(n,i)); + manye_pol_cvg(n,i)=parallel_sum(manye_pol_cvg(n,i)); + } + } + nsample=parallel_sum(nsample); + + if(mpi_info.node==0) { + + ofstream out(outputfile.c_str(), ios::app); + out.precision(15); + + for(int n=0; n< ncvg; n++) { + for(int i=0; i< 3; i++) { + out << single_pol_cvg(n,i).real()/nsample << " " << single_pol_cvg(n,i).imag()/nsample << " "; + } + for(int i=0; i< 3; i++) { + out << manye_pol_cvg(n,i).real()/nsample << " " << manye_pol_cvg(n,i).imag()/nsample << " "; + } + } + out << endl; + out.close(); + + } + nsample=0; + single_pol_cvg=dcomplex(0.0,0.0); + manye_pol_cvg=dcomplex(0.0,0.0); +} + + + +//###################################################################### + +//-------------------------------------------------- + +Properties_manager::Properties_manager() { + nwf=1; + maxchildren=3; + start_avg_step=0; + current_block=0; + autocorr_depth=0; + num_aux_converge=1; + naux=0; + max_autocorr_depth=10; + log_file=""; + //maxhist=0; +} + +//-------------------------------------------------- + +Properties_manager::~Properties_manager() { +} + +//-------------------------------------------------- + +void Properties_manager::read(vector & words, + vector & systxt, + vector & wftxt) { + + if(block_avg.GetDim(0) > 0) + error("Must call Properties_manager::read before Properties_manager::setSize()"); + + unsigned int pos=0; + + readvalue(words, pos=0, max_autocorr_depth, "MAX_AUTOCORR"); + +} + + +//-------------------------------------------------- + +void Properties_manager::setSize(int nwf_, int nblocks, int nsteps, + int maxwalkers, + System * sys, + Wavefunction_data * wfdata, int naux_, + int n_aux_cvg) { + assert(nblocks >= 0 ); + assert(nsteps >= 0); + assert(maxwalkers >= 0); + assert(nwf_ > 0); + nwf=nwf_; + + current_block=0; + naux=naux_; + num_aux_converge=n_aux_cvg; + + block_avg.Resize(nblocks); + for(int i=0; i< nblocks; i++) { + block_avg(i).setSize(nwf, naux, n_aux_cvg); + block_avg(i).aux_size=1; + } + + autocorr_depth=min(nsteps-1, max_autocorr_depth); + trace.Resize(nsteps, maxwalkers); +} + +//-------------------------------------------------- + + + + +void Properties_manager::insertPoint(int step, + int walker, + const Properties_point & pt) { + assert(walker < trace.GetDim(1)); + assert(step < trace.GetDim(0)); + //cout << "insertpt " << pt.z_pol(0) << endl; + trace(step, walker)=pt; + if(step >= 1 && pt.parent < 0) { + error("Problem in insertPoint; parent not set"); + } +} + + +//-------------------------------------------------- + + +/*! +find the energy autocorrelation. In general, we have a directed +graph, so let's start at the bottom and follow parents up. +*/ +void Properties_manager::autocorrelation(Array2 & autocorr, + Array2 & aux_autocorr, + int depth) { + + using namespace Properties_types; + assert(depth >= 0); + int nsteps=trace.GetDim(0); + int nwalkers=trace.GetDim(1); + int nwf=trace(0,0).kinetic.GetDim(0); + autocorr.Resize(nwf, depth); + autocorr=0; + aux_autocorr.Resize(naux, depth); + aux_autocorr=0; + + + + for(int d=1; d< depth+1; d++) { + int npts=0; + for(int step=d+start_avg_step; step < nsteps; step++) { + for(int walker=0; walker < nwalkers; walker++) { + if(trace(step, walker).count) { + + //Here we trace back up to the dth ancestor of the walker + int parent=trace(step, walker).parent; + for(int d1=1; d1 < d; d1++) { + //if(trace(step-d1, parent).parent <0) { + // cout << "step " << step << " d1 " << d1 << "parent " << parent + // << endl; + //} + assert(trace(step-d1, parent).parent >= 0); + + parent=trace(step-d1, parent).parent; + } + + if(trace(step-d, parent).count) { + npts++; + + + for(int w=0; w< nwf; w++) { + doublevar en=trace(step, walker).energy(w); + doublevar enp=trace(step-d, parent).energy(w); + + //doublevar wt_av=block_avg(current_block).weight(w); + //doublevar wt=trace(step, walker).weight(w); + //doublevar pwt=trace(step, walker).weight(w); + doublevar av=block_avg(current_block).avg(total_energy,w); + + autocorr(w,d-1)+=(en-av)*(enp-av); + } + + for(int i=0; i< naux; i++) { + doublevar avdiff=block_avg(current_block).aux_energy(i,0) + -block_avg(current_block).avg(total_energy,0); + //doublevar av_auxwt=block_avg(current_block).aux_weight(i,0); + //doublevar av_wt=block_avg(current_block).weight(0); + doublevar diff=trace(step, walker).aux_energy(i,0) + -trace(step, walker).energy(0); + doublevar pdiff=trace(step-d, parent).aux_energy(i,0) + -trace(step-d, parent).energy(0); + aux_autocorr(i,d-1)+=(diff-avdiff)*(pdiff-avdiff); + + } + + } + } + } + } + + npts=parallel_sum(npts); + for(int w=0; w< nwf; w++) { + autocorr(w,d-1)=parallel_sum(autocorr(w,d-1)); + autocorr(w,d-1)/=npts; + } + for(int i=0; i< naux; i++) { + aux_autocorr(i,d-1)=parallel_sum(aux_autocorr(i,d-1)); + aux_autocorr(i,d-1)/=(npts*block_avg(current_block).aux_diffvar(i,0)); + } + } + for(int w=0; w< nwf; w++) { + for(int d=0; d< depth; d++) { + autocorr(w,d)/= block_avg(current_block).var(total_energy,w); + } + } + +} + + +//-------------------------------------------------- + +/*! +\todo +Use the recurrence relations from +http://mathworld.wolfram.com/SampleVarianceComputation.html +to remove the extraneous trace in Properties_manager.. + */ + +void Properties_manager::endBlock() { + using namespace Properties_types; + + + int nwalkers=trace.GetDim(1); + int n_cvg=num_aux_converge; + + int nsteps=trace.GetDim(0); + int totpts=0; + for(int w=0; w< nwf; w++) { + doublevar totweight=0; + doublevar avgkin=0; + doublevar avgpot=0; + doublevar avgnonloc=0; + doublevar avgen=0; + Array2 auxen(naux, n_cvg,0.0); + Array2 auxwt(naux,n_cvg,0.0); + Array2 auxdiff(naux,n_cvg, 0.0); + int npts=0; + for(int step=start_avg_step; step < nsteps; step++) { + for(int walker=0; walker < nwalkers; walker++) { + if(trace(step, walker).count) { + npts++; + doublevar wt=trace(step,walker).weight(w); + totweight+=wt; + for(int i=0; i< naux; i++) { + for(int c=0; c< n_cvg; c++) + auxwt(i,c)+=trace(step, walker).aux_weight(i,c); + } + } + } + } + //cout << " totpts " << endl; + totpts=parallel_sum(npts); + //cout << "donepsum" << endl; + Array2 aux_wt_sum(naux, n_cvg); + for(int i=0; i < naux; i++) + for(int c=0; c< n_cvg; c++) + aux_wt_sum(i,c)=parallel_sum(auxwt(i,c))/totpts; + doublevar weight_sum=parallel_sum(totweight)/totpts; + doublevar sum_inv=1.0/weight_sum; + Array1 z_pol(3, dcomplex(0.0, 0.0)); + Array2 aux_z_pol(naux, 3, dcomplex(0.0, 0.0)); + + + for(int step=start_avg_step; step < nsteps; step++) { + for(int walker=0; walker < nwalkers; walker++) { + if(trace(step, walker).count) { + doublevar wt=trace(step,walker).weight(w); + avgkin+=trace(step,walker).kinetic(w)*wt; + avgpot+=trace(step, walker).potential(w)*wt; + avgnonloc+=trace(step, walker).nonlocal(w)*wt; + avgen+=(trace(step, walker).kinetic(w) + +trace(step, walker).potential(w) + +trace(step, walker).nonlocal(w))*wt; + for(int d=0; d< 3; d++) + z_pol(d)+=trace(step, walker).z_pol(d)*wt; + for(int i=0; i< naux; i++) { + //the convention(in RMC and VMC) is that the last + //converge point is the 'pure' estimator + int last=n_cvg-1; + doublevar aux_wt=trace(step,walker).aux_weight(i,last) + /(aux_wt_sum(i,last)*totpts); + for(int d=0; d< 3; d++) + aux_z_pol(i,d)+=trace(step,walker).aux_z_pol(i,d)*aux_wt; + + for(int c=0; c< n_cvg; c++) { + auxen(i,c)+=trace(step, walker).aux_energy(i,c) + *trace(step, walker).aux_weight(i,c)/(aux_wt_sum(i,c)*totpts); + auxdiff(i,c)+=trace(step,walker).aux_energy(i,c) + *trace(step,walker).aux_weight(i,c)/aux_wt_sum(i,c) + -trace(step,walker).energy(w)*wt*sum_inv; + } + + } + } + } + } + + weight_sum*=totpts; + + block_avg(current_block).totweight=weight_sum; + + block_avg(current_block).avg(kinetic,w)=parallel_sum(avgkin)/weight_sum; + block_avg(current_block).avg(potential,w)=parallel_sum(avgpot)/weight_sum; + block_avg(current_block).avg(nonlocal,w)=parallel_sum(avgnonloc)/weight_sum; + block_avg(current_block).avg(total_energy,w)=parallel_sum(avgen)/weight_sum; + block_avg(current_block).avg(weight,w)=weight_sum/totpts; + for(int d=0;d < 3; d++) { + block_avg(current_block).z_pol(d)=parallel_sum(z_pol(d))/weight_sum; + } + for(int i=0; i< naux; i++) { + for(int d=0;d < 3; d++) + block_avg(current_block).aux_z_pol(i,d)=parallel_sum(aux_z_pol(i,d)); + for(int c=0; c< n_cvg; c++) { + aux_wt_sum(i,c)*=totpts; + block_avg(current_block).aux_energy(i,c)=parallel_sum(auxen(i,c)); + block_avg(current_block).aux_weight(i,c)=aux_wt_sum(i,c)/totpts; + block_avg(current_block).aux_diff(i,c)=parallel_sum(auxdiff(i,c))/totpts; + } + } + //cout << mpi_info.node << ":npoints" << npts << endl; + + + //Variance + doublevar varkin=0, varpot=0, varnonloc=0, varen=0; + doublevar varweight=0; + + Array2 auxvaren(naux,n_cvg, 0.0); + Array2 auxvarwt(naux,n_cvg, 0.0); + + for(int step=start_avg_step; step < nsteps; step++) { + for(int walker=0; walker < nwalkers; walker++) { + if(trace(step, walker).count) { + doublevar kin=trace(step, walker).kinetic(w); + doublevar pot=trace(step, walker).potential(w); + doublevar nonloc=trace(step, walker).nonlocal(w); + doublevar en=kin+pot+nonloc; + + doublevar wt=trace(step, walker).weight(w); + + varkin+=(kin-block_avg(current_block).avg(kinetic,w)) + *(kin-block_avg(current_block).avg(kinetic,w))*wt; + varpot+=(pot-block_avg(current_block).avg(potential,w)) + *(pot-block_avg(current_block).avg(potential,w))*wt; + varnonloc+=(nonloc-block_avg(current_block).avg(nonlocal,w)) + *(nonloc-block_avg(current_block).avg(nonlocal,w))*wt; + varen+=(en-block_avg(current_block).avg(total_energy,w)) + *(en-block_avg(current_block).avg(total_energy,w))*wt; + + varweight+=(wt-block_avg(current_block).avg(weight,w)) + *(wt-block_avg(current_block).avg(weight,w)); + + + for(int i=0; i< naux; i++) { + for(int c=0; c< n_cvg; c++) { + auxvarwt(i,c)+=(trace(step, walker).aux_weight(i,c) + -block_avg(current_block).aux_weight(i,c)) + *(trace(step, walker).aux_weight(i,c) + -block_avg(current_block).aux_weight(i,c)); + auxvaren(i,c)+=(trace(step, walker).aux_energy(i,c) + -block_avg(current_block).aux_energy(i,c)) + *(trace(step, walker).aux_energy(i,c) + -block_avg(current_block).aux_energy(i,c)) + *trace(step, walker).aux_weight(i,c); + } + } + + } + } + } + block_avg(current_block).var(kinetic,w)= parallel_sum(varkin)/weight_sum; + block_avg(current_block).var(potential,w)=parallel_sum(varpot)/weight_sum; + block_avg(current_block).var(nonlocal, w)=parallel_sum(varnonloc)/weight_sum; + block_avg(current_block).var(total_energy, w)=parallel_sum(varen)/weight_sum; + block_avg(current_block).var(weight,w)=parallel_sum(varweight)/totpts; + + for(int i=0; i< naux; i++) { + for(int c=0; c< n_cvg; c++) { + block_avg(current_block).aux_energyvar(i,c) + =parallel_sum(auxvaren(i,c))/aux_wt_sum(i,c); + block_avg(current_block).aux_weightvar(i,c) + =parallel_sum(auxvarwt(i,c))/totpts; + } + } + + Array2 auxvardiff(naux,n_cvg, 0.0); + for(int step=start_avg_step; step < nsteps; step++) { + for(int walker=0; walker < nwalkers; walker++) { + if(trace(step, walker).count) { + for(int i=0; i< naux; i++) { + for(int c=0; c< n_cvg; c++) { + doublevar avdiff=block_avg(current_block).aux_energy(i,c) + -block_avg(current_block).avg(total_energy,0); + doublevar diff=trace(step, walker).aux_energy(i,c) + -trace(step, walker).energy(0); + auxvardiff(i,c)+=(diff-avdiff)*(diff-avdiff); + } + } + } + } + } + + for(int i=0; i< naux; i++) { + for(int c=0; c< n_cvg; c++) { + block_avg(current_block).aux_diffvar(i,c) + =parallel_sum(auxvardiff(i,c))/totpts; + } + } + + + } + + + + + + //cout << "autocorrelation " << endl; + if(naux==1 && n_cvg==2) { + + doublevar weight_corr=0; + for(int step=start_avg_step; step < nsteps; step++) { + for(int walker=0; walker < nwalkers; walker++) { + if(trace(step, walker).count) { + + weight_corr+=(trace(step,walker).aux_weight(0,0)- + block_avg(current_block).aux_weight(0,0)) + *(trace(step,walker).aux_weight(0,0)- + block_avg(current_block).aux_weight(0,0)); + } + } + } + + block_avg(current_block).aux_weight_correlation= + parallel_sum(weight_corr)/ + (totpts*sqrt(block_avg(current_block).aux_weightvar(0,0) + *block_avg(current_block).aux_weightvar(0,1))); + } + + autocorrelation(block_avg(current_block).autocorr, + block_avg(current_block).aux_autocorr, + autocorr_depth); + + //cout << "writing block " << endl; + if(mpi_info.node==0 && log_file != "") { + ofstream logout(log_file.c_str(), ios::app); + logout.precision(16); + logout << "block { " << endl; + string indent=" "; + block_avg(current_block).storeToLog(indent, logout, log_label); + logout << "} " << endl << endl; + logout.close(); + } + current_block++; + for(int step=0; step < nsteps; step++) + for(int walker=0; walker < nwalkers; walker++) + trace(step, walker).reset(); + + //cout << "average " << endl; + final_avg.blockReduce(block_avg, 0, current_block,1); + //cout << "done" << endl; +} + + + +//-------------------------------------------------- + + + + +void Properties_manager::printBlockSummary(ostream & os) { + assert(current_block > 0); + block_avg(current_block-1).printBlockSummary(os); +} + +//-------------------------------------------------- + + +void Properties_manager::printSummary(ostream & os) { + final_avg.showSummary(os); +} + +//-------------------------------------------------- diff --git a/src/properties/Properties.h b/src/properties/Properties.h new file mode 100644 index 00000000..1f23cb18 --- /dev/null +++ b/src/properties/Properties.h @@ -0,0 +1,272 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ +#ifndef PROPERTIES_H_INCLUDED +#define PROPERTIES_H_INCLUDED +#include "Qmc_std.h" +#include "System.h" +#include "Wavefunction.h" +#include "Guiding_function.h" +#include "Properties_point.h" +#include "Properties_block.h" +#include "Properties_average.h" +#include "Properties_gather.h" +#include + + +//-------------------------------------------------- + + +/*! + + + */ + +class Properties_manager { + public: + + + Properties_manager(); + ~Properties_manager(); + void read(vector & words, + vector & systxt, + vector < string> & wftxt); + + void setSize(int nwf_, int nblocks, int nsteps, int maxwalkers, System *, + Wavefunction_data *,int naux_,int n_aux_cvg=1); + void setFirstStep(int s) { + start_avg_step=s; + int nsteps=trace.GetDim(0); + + if(nsteps-start_avg_step-2 < autocorr_depth) + autocorr_depth=nsteps-start_avg_step-2; + } + + void setLog(string & file, string & label) { + log_file=file; + log_label=label; + } + + void getLog(string & file, string & label) { + file=log_file; + label=log_label; + } + + void insertPoint(int step, + int walker, + const Properties_point & pt); + + void endBlock(); + + + void printBlockSummary(ostream & os); + void printSummary(ostream & os); + + void getFinal(Properties_final_average & final) { + final=final_avg; + } + + void getLastBlock(Properties_block & block) { + assert(current_block > 0); + block=block_avg(current_block-1); + } + + + + + + private: + void autocorrelation(Array2 &,Array2 & , int); + Array2 < Properties_point > trace; + //control + int start_avg_step; + + int max_autocorr_depth; + + string log_file; + string log_label; + + + //Limits + int nwf; //!< the number of wave functions we can have in the primary walk + int maxchildren; //!< maximum number of children a walker can have + int autocorr_depth; + int num_aux_converge; //! aux_size; //!< size of the distortion + + //Averaging + int current_block; + Array1 < Properties_block > block_avg; + Properties_block local_sum; + + Properties_final_average final_avg; + + + +}; + +//--------------------------------------------------------------------- + +class Local_density_accumulator { + public: + virtual void init(vector & , System *, string & runid)=0; + virtual void accumulate(Sample_point *, doublevar weight)=0; + /*! + Write out the density. Note that when running in parallel, this + must be called by all processes! + */ + virtual void write()=0; + virtual ~Local_density_accumulator() { } +}; + +class One_particle_density:public Local_density_accumulator { + public: + void init(vector & , System *, string & runid); + void accumulate(Sample_point *, doublevar weight); + + /*! + Write out the density. Note that when running in parallel, this + must be called by all processes! + */ + void write(); + + protected: + Array3 bin; //!< count of hits + Array1 min_; //!< min position + Array1 max; //!< max position + Array1 npoints; + doublevar resolution; + doublevar nsample; //double because we can have weights + int nup; + string outputfile; + Array2 atominfo;//!< (ion#, [charge, x,y,z]) + doublevar norm; //!< renormalization for the density output + + int start_electron; //!< which electrons to average over(for spin density) + int end_electron; +}; + + +/*! + */ + +class Electron_correlation: public Local_density_accumulator { +public: + virtual void init(vector & , System *, string & runid); + virtual void accumulate(Sample_point *, doublevar weight); + virtual void write(); +private: + string outputfile; + Array1 gr_up, gr_down, gr_unlike; + doublevar resolution; + int npoints; + doublevar nsample_up, nsample_down, nsample_unlike; + int nup; +}; + + + +class Structure_factor:public Local_density_accumulator { + public: + virtual void init(vector & , System *, string & runid); + virtual void accumulate(Sample_point *, doublevar weight); + virtual void write(); + protected: + string outputfile; + int nsample; + doublevar wnsample; + int nelectrons; + int npoints; + int np_side; //!< number of points on the side + + Array1 grid; + Array2 gvec; + Array2 kpts; + +}; + + +class LM_storage { + public: + Array1 moment; + Array1 charge; + int nsample; + doublevar wnsample; + + void allocate(int natoms) { + moment.Resize(natoms); + moment=0; + charge.Resize(natoms); + charge=0; + } +}; + +class Local_moments:public Local_density_accumulator { + public: + virtual void init(vector & , System *, string & runid); + virtual void accumulate(Sample_point *, doublevar weight); + virtual void write(); + protected: + string outputfile; + int nsample; // samples in a block + doublevar wnsample; // weighted sample count in a block + int nblock; + int nelectrons; + int nup; // number of up electrons + int natoms; + + Array1 rMT; // muffin-tin radius + Array1 moment; // hit-up - hit-down in MT sphere + Array1 charge; // hit count into MT sphere + vector atomnames; + list blocks; + +}; + + +class Polarization:public Local_density_accumulator { +public: + virtual void init(vector & , System *, string & runid); + virtual void accumulate(Sample_point *, doublevar weight); + /*! + Write out the density. Note that when running in parallel, this + must be called by all processes! + */ + virtual void write(); +private: + string outputfile; + Array2 single_pol_cvg; + Array2 gvec; + Array2 manye_pol_cvg; + doublevar nsample; + int ncvg; +}; + + + +void allocate(vector & words, System * sys, string & runid, + Local_density_accumulator *& denspt); + +//--------------------------------------------------------------------- + + +#endif //PROPERTIES_H_INCLUDED +//---------------------------------------------------------------------- diff --git a/src/properties/Properties_average.cpp b/src/properties/Properties_average.cpp new file mode 100644 index 00000000..11af71f0 --- /dev/null +++ b/src/properties/Properties_average.cpp @@ -0,0 +1,446 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ +#include "Properties_average.h" + + +void label_print(ostream & os,string label, Array1 & val, + Array1 & variance) { + int pres=os.precision(); + for(int w=0; w< val.GetDim(0); w++) { + os << label << w << setw(pres+5) << val(w) + << " dis " << setw(pres+5) << sqrt(variance(w)) + << endl; + } +} + + +//###################################################################### + +void Properties_final_average::setSize(int nwf, int naux, int n_cvg) { + + using namespace Properties_types; + + avg.Resize(NUM_QUANTITIES, nwf); + err.Resize(NUM_QUANTITIES, nwf); + avgvar.Resize(NUM_QUANTITIES, nwf); + avg=0.0; err=0.0; + avgvar=0.0; + + diff_energy.Resize(nwf); + diff_energyerr.Resize(nwf); + aux_energy.Resize(naux, n_cvg); + aux_energyerr.Resize(naux, n_cvg); + aux_energyvar.Resize(naux, n_cvg); + + aux_diff.Resize(naux, n_cvg); + aux_differr.Resize(naux, n_cvg); + z_pol.Resize(3); + z_pol_err.Resize(3); + z_pol=dcomplex(0.0,0.0); z_pol_err=dcomplex(0.0, 0.0); + + aux_z_poldiff.Resize(naux,3); + aux_z_poldiff_err.Resize(naux,3); + + avgvar=0.0; + aux_energy=0; aux_energyerr=0; aux_diff=0; aux_differr=0; aux_energyvar=0; + + aux_z_poldiff=dcomplex(0.0,0.0); + aux_z_poldiff_err=dcomplex(0.0,0.0); +} + +//---------------------------------------------------------------------- + +void Properties_final_average::blockReduce(Array1 & block_avg, + int start_block, int end_block, + int find_equil) { + + using namespace Properties_types; + assert(end_block > start_block); + + int nwf=block_avg(start_block).avg.GetDim(1); + int naux=block_avg(start_block).aux_energy.GetDim(0); + int n_cvg=block_avg(start_block).aux_energy.GetDim(1); + setSize(nwf, naux, n_cvg); + + //avgvar=0.0; + //aux_energy=0; aux_energyerr=0; aux_diff=0; aux_differr=0; + //z_pol=dcomplex(0.0,0.0); z_pol_err=dcomplex(0.0, 0.0); + + int autocorr_depth=block_avg(start_block).autocorr.GetDim(1); + autocorr.Resize(nwf, autocorr_depth); autocorr=0; + autocorrerr.Resize(nwf, autocorr_depth); autocorrerr=0; + + aux_autocorr.Resize(naux, autocorr_depth); aux_autocorr=0; + aux_autocorrerr.Resize(naux, autocorr_depth); aux_autocorrerr=0; + + aux_size.Resize(naux); + aux_size=block_avg(start_block).aux_size; + + int nblock=end_block-start_block; + + //Stealing Jeff's algorithm for finding the throw-away blocks: + //average over the last 4/5 of the blocks, and find the block + //with energy within the standard deviation of that average.. + threw_out=0; + //if we don't have more than five blocks, there aren't enough to determine + //equilibrium + + if(nblock > 5 && find_equil) { + doublevar tmpavg=0; + int fkstart=start_block+nblock/5; + for(int block=fkstart; block < end_block; block++) { + tmpavg+=block_avg(block).avg(total_energy,0)/(end_block-fkstart); + } + doublevar tmpvar=0; + for(int block=fkstart; block < end_block; block++) { + tmpvar+=(block_avg(block).avg(total_energy,0)-tmpavg) + *(block_avg(block).avg(total_energy,0)-tmpavg)/(end_block-fkstart); + } + tmpvar=sqrt(tmpvar); + //cout << "tmpavg " << tmpavg << " tmpvar " << tmpvar << endl; + for(int block=start_block; block < end_block; block++) { + if(fabs(block_avg(block).avg(total_energy,0)-tmpavg) < tmpvar) { + threw_out=block-start_block; + start_block=block; + nblock=end_block-start_block; + break; + } + } + } + + + + //cout << "summing weights" << endl; + totweight=0; + for(int block=start_block; block < end_block; block++) { + totweight+=block_avg(block).totweight; + } + + + for(int block=start_block; block < end_block; block++) { + doublevar thisweight=block_avg(block).totweight/totweight; + for(int w=0; w< nwf; w++) { + for(int d=0; d< 3; d++) + z_pol(d)+=block_avg(block).z_pol(d)*thisweight; + for(int i=0; i< NUM_QUANTITIES; i++) { + avg(i,w)+=block_avg(block).avg(i,w)*thisweight; + avgvar(i,w)+=block_avg(block).var(i,w)*thisweight; + } + + for(int i=0; i< autocorr_depth; i++) { + autocorr(w,i)+=block_avg(block).autocorr(w,i)*thisweight; + } + if(w > 0) + diff_energy(w)+=(block_avg(block).avg(total_energy,w) + -block_avg(block).avg(total_energy,0))*thisweight; + + + } + + + for(int i=0; i< naux; i++) { + for(int d=0;d < 3; d++) + aux_z_poldiff(i,d)+=(block_avg(block).aux_z_pol(i,d)- + block_avg(block).z_pol(d))*thisweight; + for(int w=0; w< n_cvg; w++) { + aux_diff(i,w)+=block_avg(block).aux_diff(i,w)*thisweight; + aux_energy(i,w)+=block_avg(block).aux_energy(i,w)*thisweight; + aux_energyvar(i,w)+=block_avg(block).aux_energyvar(i,w)*thisweight; + } + } + } + + //int n2=nblock*nblock; + for(int block=start_block; block < end_block; block++) { + //doublevar wt=block_avg(block).totweight/totweight; + doublevar thisweight=block_avg(block).totweight/(nblock*totweight); + + for(int d=0; d< 3;d++) { + doublevar realdiff=block_avg(block).z_pol(d).real()-z_pol(d).real(); + doublevar imagdiff=block_avg(block).z_pol(d).imag()-z_pol(d).imag(); + z_pol_err(d)+=dcomplex(realdiff*realdiff, imagdiff*imagdiff)*thisweight; + } + for(int w=0; w< nwf; w++) { + for(int i=0; i< NUM_QUANTITIES; i++) { + err(i,w)+=(block_avg(block).avg(i,w)-avg(i,w)) + *(block_avg(block).avg(i,w)-avg(i,w))*thisweight; + } + + for(int i=0; i< autocorr_depth; i++) { + autocorrerr(w,i)+=(block_avg(block).autocorr(w,i)-autocorr(w,i)) + *(block_avg(block).autocorr(w,i)-autocorr(w,i))*thisweight; + } + if(w > 0) { + doublevar ediff=block_avg(block).avg(total_energy,w) + -block_avg(block).avg(total_energy,0); + diff_energyerr(w)+=(ediff-diff_energy(w))*(ediff-diff_energy(w))*thisweight; + } + + + } + + for(int i=0; i< naux; i++) { + for(int d=0; d< 3; d++) { + dcomplex diff=(block_avg(block).aux_z_pol(i,d)- + block_avg(block).z_pol(d)-aux_z_poldiff(i,d)); + aux_z_poldiff_err(i,d)+=dcomplex(diff.real()*diff.real(), + diff.imag()*diff.imag())*thisweight; + } + for(int w=0; w< n_cvg; w++) { + doublevar diff=block_avg(block).aux_diff(i,w); + aux_differr(i,w)+=(diff-aux_diff(i,w))*(diff-aux_diff(i,w))*thisweight; + aux_energyerr(i,w)=(block_avg(block).aux_energy(i,w)-aux_energy(i,w)) + *(block_avg(block).aux_energy(i,w)-aux_energy(i,w))*thisweight; + } + } + } + +} + +//---------------------------------------------------------------------- + +void Properties_final_average::averageReduce(Array1 & final_avg, + int start, int end) { + + using namespace Properties_types; + assert(end > start); + + int nwf=final_avg(start).avg.GetDim(1); + int naux=final_avg(start).aux_energy.GetDim(0); + int n_cvg=final_avg(start).aux_diff.GetDim(1); + //cout << " n_cvg " << n_cvg << endl; + //cout << " first avg " << endl; + + setSize(nwf, naux, n_cvg); + + avgvar=0.0; + aux_energy=0; aux_energyerr=0; aux_diff=0; aux_differr=0; + z_pol=dcomplex(0.0,0.0); z_pol_err=dcomplex(0.0, 0.0); + int autocorr_depth=final_avg(start).autocorr.GetDim(1); + autocorr.Resize(nwf, autocorr_depth); autocorr=0; + autocorrerr.Resize(nwf, autocorr_depth); autocorrerr=0; + + aux_autocorr.Resize(naux, autocorr_depth); aux_autocorr=0; + aux_autocorrerr.Resize(naux, autocorr_depth); aux_autocorrerr=0; + + aux_size.Resize(naux); + aux_size=final_avg(start).aux_size; + + int nblock=end-start; + + //cout << "summing weights" << endl; + + totweight=0; + for(int block=start; block < end; block++) { + totweight+=final_avg(block).totweight; + for(int w=0; w< nwf; w++) { + for(int d=0; d< 3; d++) + z_pol(d)+=dcomplex(final_avg(block).z_pol(d).real()/nblock, + final_avg(block).z_pol(d).imag()/nblock); + for(int i=0; i< NUM_QUANTITIES; i++) { + avg(i,w)+=final_avg(block).avg(i,w)/nblock; + avgvar(i,w)+=final_avg(block).avgvar(i,w)/nblock; + } + + for(int i=0; i< autocorr_depth; i++) { + autocorr(w,i)+=final_avg(block).autocorr(w,i)/nblock; + } + if(w > 0) + diff_energy(w)+=(final_avg(block).avg(total_energy,w) + -final_avg(block).avg(total_energy,0))/nblock; + + + } + + + for(int i=0; i< naux; i++) { + for(int w=0; w< n_cvg; w++) + aux_diff(i,w)+=final_avg(block).aux_diff(i,w)/nblock; + } + } + + + int n2=nblock*nblock; + for(int block=start; block < end; block++) { + doublevar thisweight=1.0/n2; + + for(int d=0; d< 3;d++) { + z_pol_err(d)+=final_avg(block).z_pol_err(d)*thisweight; + } + for(int w=0; w< nwf; w++) { + for(int i=0; i< NUM_QUANTITIES; i++) { + err(i,w)+=final_avg(block).err(i,w)*thisweight; + } + + for(int i=0; i< autocorr_depth; i++) { + autocorrerr(w,i)+=final_avg(block).autocorrerr(w,i)*thisweight; + } + if(w > 0) { + diff_energyerr(w)+=final_avg(block).diff_energyerr(w)*thisweight; + } + + + } + + for(int i=0; i< naux; i++) { + for(int w=0; w< n_cvg; w++) { + aux_differr(i,w)+=final_avg(block).aux_differr(i,w)*thisweight; + } + } + } + +} + +//-------------------------------------------------- + +#include "qmc_io.h" + +//assuming that the imaginary and real parts are uncorrelated; +//probably not a great approximation, but can fix this later. +//We also return the bias from a nonlinear function. This should +//scale like 1/M, where M is the number of sample points, but +//is definitely necessary to have under control + +void complex_angle(dcomplex & val, dcomplex & err, + double & angle, double & bias, double & angle_err) { + doublevar ratio=val.imag()/val.real(); + doublevar sigma_ratio=err.imag()*err.imag()/(val.real()*val.real()) + +val.imag()*val.imag()*err.real()*err.real()/(pow(val.real(),4)); + + doublevar atander=1/(1+ratio*ratio); //first derivative of atan func + doublevar atander2=-2*ratio*atander*atander; //second derivative + + bias=.5*atander2*sigma_ratio; + angle_err=fabs(atander)*sqrt(sigma_ratio); + + angle=atan(fabs(ratio)); + if(val.real() <0 && val.imag() >=0) + angle=pi-angle; + else if(val.real() >=0 && val.imag() <0) + angle=2*pi-angle; + else if(val.real() <0 && val.imag() <0) + angle+=pi; + +} + +//---------------------------------------------------------------------- + +void Properties_final_average::showSummary(ostream & os) { + int nwf=avg.GetDim(1); + int naux=aux_energy.GetDim(0); + int autocorr_depth=autocorr.GetDim(1); + os << "Threw out the first " << threw_out << " blocks in the averaging." + << endl; + + if(show_autocorr) { + os << "Autocorrelation of energy " << endl; + for(int i=0; i< autocorr_depth; i++) { + os << " en_ac_d" << i << " " << autocorr(0,i) + << " +/- " << sqrt(autocorrerr(0,i)) << endl; + } + + os << endl << endl; + } + + using namespace Properties_types; + + doublevar indep_points=sqrt(avgvar(0,0))/sqrt(err(0,0)); + int field=os.precision()+5; + for(int w=0; w< nwf; w++) { + for(int i=0; i < NUM_QUANTITIES; i++) { + string tmp=names[i]; + append_number(tmp, w); + os << setw(15)<< left < 1) { + os << "Energy differences " << endl; + for(int w =1; w < nwf; w++) + os << " diff_" << w << "-0 " << diff_energy(w) + << " +/- " << sqrt(diff_energyerr(w)) << endl; + } + + for(int d=0; d< 3; d++) { + dcomplex err=dcomplex(sqrt(z_pol_err(d).real()), sqrt(z_pol_err(d).imag())); + if(fabs(z_pol(d).imag()) < 1e-8) + os << "dipole_moment" << d << " " << z_pol(d).real() + << " +/- " << err.real() << endl; + else + os << "z_pol" << d << " " << z_pol(d).real()<< " + i " << z_pol(d).imag() + << " +/- " << err.real() << " + i " << err.imag() << endl; + + + + + } + + + + if(naux > 0) + os << endl << endl << "Auxillary differences " << endl; + assert(aux_size.GetDim(0)==naux); + int n_cvg=aux_diff.GetDim(1); + for(int i=0; i< naux; i++) { + for(int w=0; w< n_cvg; w++) { + os << "final_auxdiff" << i << "-" << w << " " + << aux_diff(i,w)/aux_size(i) << " +/- " + << sqrt(aux_differr(i,w))/aux_size(i) + << " (sigma " << sqrt(aux_differr(i,w))*indep_points << " ) " + << endl; + } + } + os << endl; + + + doublevar totpoints=indep_points*indep_points; + os << "approximate number of independent points: " + << totpoints << endl; + if(totpoints> totweight) { + os << "Warning! The estimated number of independent points is \n" + " _greater_ than the points in the log file. Error bars are \n" + "probably unreliable!\n"; + } + + +} + + + +void Properties_final_average::twoPointForces(Array2 & forces + ) { + int nwf=avg.GetDim(1); + int naux=aux_energy.GetDim(0); + + if(naux%2!=0) + error("there can't be two-point forces, since" + " there's an odd number of differences"); + + forces.Resize(naux/2, 2); + for(int i=0; i < naux; i+=2) { + assert(aux_size(i)==aux_size(i+1)); + forces(i/2,0)=(aux_diff(i,0)-aux_diff(i+1,0))/(aux_size(i)*2); + forces(i/2,1)=sqrt( (aux_differr(i,0)+aux_differr(i+1,0))/4)/aux_size(i); + } +} diff --git a/src/properties/Properties_average.h b/src/properties/Properties_average.h new file mode 100644 index 00000000..347a81b3 --- /dev/null +++ b/src/properties/Properties_average.h @@ -0,0 +1,90 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ +#ifndef PROPERTIES_AVERAGE_INCLUDED +#define PROPERTIES_AVERAGE_INCLUDED +#include "Qmc_std.h" +#include "Properties_block.h" +#include + + +struct Properties_final_average { + + Properties_final_average():show_autocorr(0) {} + void setSize(int nwf, int naux, int n_cvg=1); + + + void blockReduce(Array1 & block_avg, + int start_block, int end_block, + int find_equil=0); + + void averageReduce(Array1 & avg, + int start, int end); + + + void twoPointForces(Array2 & forces); + + void showSummary(ostream & os); + + void showAutocorr(int i) { + assert(i==0 || i==1); + show_autocorr=i; + } + + int threw_out; + + doublevar totweight; + + Array2 avg; + Array2 err; + + Array2 avgvar; //!< average variances + + + Array1 diff_energy; + Array1 diff_energyerr; + + Array1 z_pol; + Array1 z_pol_err; + + Array2 autocorr; //autocorrelation of energy + Array2 autocorrerr; + + Array2 aux_energy; + Array2 aux_energyerr; + Array2 aux_energyvar; + + Array2 aux_diff; + Array2 aux_differr; + + Array2 aux_autocorr; + Array2 aux_autocorrerr; + + Array2 aux_z_poldiff; + Array2 aux_z_poldiff_err; + + Array1 aux_size; + + private: + int show_autocorr; + + +}; + +#endif diff --git a/src/properties/Properties_block.cpp b/src/properties/Properties_block.cpp new file mode 100644 index 00000000..3ff55b83 --- /dev/null +++ b/src/properties/Properties_block.cpp @@ -0,0 +1,363 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ +#include "Properties_block.h" +#include +#include "qmc_io.h" + +namespace Properties_types { +const char* names[]={"total_energy", + "kinetic", + "potential", + "nonlocal", + "weight"}; +}; + +void print_array_sec(ostream & os, string & indent, + const char * label, Array1 arr) { + os << indent << label << " { "; + for(int i=0; i< arr.GetDim(0); i++) { + os << arr(i) << " "; + } + os << "} " << endl; +} + + +void read_array(vector & words, unsigned int pos, + Array1 & array, const char * label) { + vector section; + readsection(words, pos, section, label); + array.Resize(section.size()); + int ns=section.size(); + for(int i=0; i< ns; i++) array(i)=atof(section[i].c_str()); +} + +int read_into_array(vector & words, unsigned int pos, + Array2 & array, const char * label, int place) { + vector section; + if(!readsection(words, pos, section, label)) return 0; + if(array.GetDim(1) < int(section.size()) ) + error("In read_into_array, the section array is too large"); + if(array.GetDim(0) < int(place)) + error("in read_into array, place is too large"); + + int ns=section.size(); + for(int i=0; i< ns; i++) array(place,i)=atof(section[i].c_str()); + return 1; +} + +void Properties_block::storeToLog(string & indent, ostream & os, + string & label) { + + using namespace Properties_types; + + int nwf=avg.GetDim(1); + int naux=aux_energy.GetDim(0); + //int autocorr_depth=autocorr.GetDim(1); + + os << indent << "label " << label << endl; + os << indent << "totweight " << totweight << endl; + os << indent << "nautocorr " << autocorr.GetDim(1) << endl; + print_array_sec(os, indent, "total_energy", avg(total_energy)); + print_array_sec(os, indent, "total_energyvar", var(total_energy)); + print_array_sec(os, indent, "weight", avg(weight)); + print_array_sec(os, indent, "weightvar", var(weight)); + print_array_sec(os, indent, "kinetic_energy",avg(kinetic) ); + print_array_sec(os, indent, "kinetic_energyvar", var(kinetic)); + print_array_sec(os, indent, "potential_energy", avg(potential)); + print_array_sec(os, indent, "potential_energyvar", var(potential)); + print_array_sec(os, indent, "nonlocal_energy", avg(nonlocal)); + print_array_sec(os, indent, "nonlocal_energyvar", var(nonlocal)); + + os << "z_pol { "; + for(int d=0; d< 3; d++) os << z_pol(d).real() << " " << z_pol(d).imag() << " "; + os << " } \n"; + + string indent2=indent+" "; + for(int i=0; i< naux; i++) { + os << indent << "aux_function { " << endl; + os << indent2 << "aux_size " << aux_size(i) << endl; + int n_cvg=aux_diff.GetDim(1); + os << indent2 << "nconverge " << n_cvg << endl; + print_array_sec(os, indent2, "aux_energy", aux_energy(i)); + print_array_sec(os, indent2, "aux_energyvar", aux_energyvar(i)); + Array1 aux_diff_tmp(n_cvg), diffvar(n_cvg); + + + + for(int w=0; w< n_cvg; w++) { + aux_diff_tmp(w)=//(aux_energy(i,w)-avg(total_energy,w))/aux_size(i); + aux_diff(i,w)/aux_size(i); + diffvar(w)=aux_diffvar(i,w)/aux_size(i); + } + print_array_sec(os, indent2, "aux_diff", aux_diff_tmp); + print_array_sec(os, indent2, "aux_diffvar", diffvar); + print_array_sec(os, indent2, "aux_weight", aux_weight(i)); + print_array_sec(os, indent2, "aux_weightvar", aux_weightvar(i)); + print_array_sec(os, indent2, "aux_autocorr", aux_autocorr(i)); + os << "aux_z_pol { "; + for(int d=0; d< 3; d++) os << aux_z_pol(i,d).real() << " " + << aux_z_pol(i,d).imag() << " " ; + os << " } \n"; + + os << indent << "}" << endl; + } + + print_array_sec(os, indent, "autocorr_energy", autocorr(0)); + if(fabs(aux_weight_correlation) > 1e-10) + os << indent << "aux_weight_correlation " << aux_weight_correlation + << endl; +} + +//---------------------------------------------------------------------- + +void Properties_block::restoreFromLog(vector & words) { + + vector tmp; + vector > auxtext; + int nwf, naux; + unsigned int pos=0; + using namespace Properties_types; + + if(!readsection(words, pos=0,tmp, "total_energy")) + error("error reading total_energy from log file"); + nwf=tmp.size(); + + + + + pos=0; + while(readsection(words, pos, tmp, "aux_function")) + auxtext.push_back(tmp); + naux=auxtext.size(); + int n_cvg=1; + if(naux > 0) { + readvalue(auxtext[0], pos=0, n_cvg, "NCONVERGE"); + } + + setSize(nwf, naux, n_cvg); + + if(!readvalue(words, pos=0, totweight, "totweight")) + totweight=1; + + read_into_array(words, pos=0, avg, "total_energy", total_energy); + read_into_array(words, pos=0, var, "total_energyvar", total_energy); + read_into_array(words, pos=0, avg, "weight", weight); + read_into_array(words, pos=0, var, "weightvar", weight); + read_into_array(words, pos=0, avg, "kinetic_energy", kinetic); + read_into_array(words, pos=0, var, "kinetic_energyvar", kinetic); + read_into_array(words, pos=0, avg, "potential_energy", potential); + read_into_array(words, pos=0, var, "potential_energyvar", potential); + read_into_array(words, pos=0, avg, "nonlocal_energy", nonlocal); + read_into_array(words, pos=0, var, "nonlocal_energyvar", nonlocal); + + vector zwords; + if(readsection(words, pos=0, zwords, "z_pol")) { + int count=0; + int max=zwords.size()/2; + for(int d=0; d< max; d++) { + z_pol(d)=dcomplex(atof(zwords[count].c_str()), atof(zwords[count+1].c_str())); + count+=2; + } + } + + + int nautocorr=0; + if(!readvalue(words, pos=0, nautocorr, "nautocorr")) + error("No nautocorr in log file"); + if(nautocorr<0) nautocorr=0; + + autocorr.Resize(1,nautocorr); + read_into_array(words, pos=0, autocorr, "autocorr_energy",0); + + aux_autocorr.Resize(naux, nautocorr); + + for(int i=0; i< naux; i++) { + readvalue(auxtext[i], pos=0, aux_size(i), "aux_size"); + read_into_array(auxtext[i], pos=0, aux_energy, "aux_energy", i); + read_into_array(auxtext[i], pos=0, aux_energyvar, "aux_energyvar",i); + if(!read_into_array(auxtext[i], pos=0, aux_diff, "aux_diff", i)) { + for(int w=0; w< n_cvg; w++) + aux_diff(i,w)=(aux_energy(i,w)-avg(total_energy,w))/aux_size(i); + } + Array1 diffvar(n_cvg); + read_array(auxtext[i], pos=0, diffvar, "aux_diffvar"); + for(int w=0; w< n_cvg; w++) { + aux_diff(i,w)*=aux_size(i); + aux_diffvar(i,w)=diffvar(w)*aux_size(i); + } + + read_into_array(auxtext[i], pos=0, aux_weight, "aux_weight", i); + read_into_array(auxtext[i], pos=0, aux_weightvar, "aux_weightvar", i); + read_into_array(auxtext[i], pos=0, aux_autocorr, "aux_autocorr", i); + + vector zwords; + if(readsection(auxtext[i], pos=0, zwords, "aux_z_pol")) { + int count=0; + int max=zwords.size()/2; + for(int d=0; d< max; d++) { + aux_z_pol(i,d)=dcomplex(atof(zwords[count].c_str()), + atof(zwords[count+1].c_str())); + count+=2; + } + } + } + + +} + + +//---------------------------------------------------------------------- +void Properties_block::printBlockSummary(ostream & os) { + int nwf=avg.GetDim(1); + int naux=aux_energy.GetDim(0); + + using namespace Properties_types; + int nprops=4; + if(nwf>1) nprops++; + + assert(Properties_types::NUM_QUANTITIES >=5); + os.setf(ios::showpoint); + + int field=os.precision()+10; + int field1=4; + + + os << setw(field1) << " "; + for(int p=0; p < nprops; p++) + os << setw(field) << Properties_types::names[p]; + os << endl; + for(int w=0; w< nwf; w++) { + os << setw(field1) << "##" << w; + for(int p=0; p< nprops; p++) + os << setw(field) << avg(p,w); + os << " (value)" << endl; + os << setw(field1) << "&&" << w; + for(int p=0; p< nprops; p++) + os << setw(field) << sqrt(var(p,w)); + os << " (sigma)" << endl; + } + + + if(naux > 0) { + os << "\nAuxillary functions : " << endl; + + os << setw(field1) << " " + << setw(field) << "energy" + << setw(field) << "difference" + << setw(field) << "weight" << endl; + } + int n_cvg=aux_diff.GetDim(1); + for(int i=0; i< naux; i++) { + + for(int w=0; w< n_cvg; w++) { + os << setw(field1) << "%%" << i << "-" << w + << setw(field) << aux_energy(i,w) + << setw(field) << aux_diff(i,w)/aux_size(i) //(aux_energy(i,w)-avg(total_energy,w))/aux_size(i) + << setw(field) << aux_weight(i,w) + << " (value)" << endl; + + os << setw(field1) << "$$" << i << "-" << w + << setw(field) << sqrt(aux_energyvar(i,w)) + << setw(field) << sqrt(aux_diffvar(i,w))/aux_size(i) + << setw(field) << sqrt(aux_weightvar(i,w)) + << " (sigma)" << endl; + } + } + + os.unsetf(ios::showpoint); +} + +//---------------------------------------------------------------------- + +void Properties_block::reduceBlocks(Array1 & blocks, + int start, int end) { + int nblocks=end-start; + assert(nblocks >0); + using namespace Properties_types; + + int nwf=blocks(0).avg.GetDim(1); + int naux=blocks(0).aux_energy.GetDim(0); + int n_cvg=blocks(0).aux_diff.GetDim(1); + setSize(nwf, naux, n_cvg); + + avg=0.0; var=0.0; + aux_energy=0; aux_weight=0; aux_energyvar=0; aux_weightvar=0; + aux_diffvar=0; aux_size=0; aux_diff=0; + int nautocorr=blocks(0).autocorr.GetDim(1); + autocorr.Resize(1,nautocorr); + autocorr=0.0; + totweight=0.0; + + for(int a=0; a< naux; a++) { + aux_size(a)=blocks(start).aux_size(a); + } + + for(int b=start; b< end; b++) { + totweight+=blocks(b).totweight; + + for(int a=0; a< nautocorr; a++) { + autocorr(0,a)+=blocks(b).autocorr(0,a)/nblocks; + } + for(int d=0; d< 3;d++) + z_pol(d)+=blocks(b).z_pol(d)/doublevar(nblocks); + + for(int p=0; p < NUM_QUANTITIES; p++) { + for(int w=0; w< nwf; w++) { + avg(p,w)+=blocks(b).avg(p,w)/nblocks; + var(p,w)+=blocks(b).var(p,w)*blocks(b).var(p,w); + } + } + + for(int a=0; a< naux; a++) { + for(int d=0; d< 3; d++) { + aux_z_pol(a,d)+=blocks(b).aux_z_pol(a,d)/doublevar(nblocks); + } + for(int w=0; w< n_cvg; w++) { + aux_energy(a,w)+=blocks(b).aux_energy(a,w)/nblocks; + aux_weight(a,w)+=blocks(b).aux_weight(a,w)/nblocks; + aux_energyvar(a,w)+=blocks(b).aux_energyvar(a,w) + *blocks(b).aux_energyvar(a,w); + aux_weightvar(a,w)+=blocks(b).aux_weightvar(a,w) + *blocks(b).aux_weightvar(a,w); + aux_diff(a,w)+=blocks(b).aux_diff(a,w)/nblocks; + aux_diffvar(a,w)+=blocks(b).aux_diffvar(a,w) + *blocks(b).aux_diffvar(a,w); + } + } + } + + + for(int p=0; p< NUM_QUANTITIES; p++) { + for(int w=0; w< nwf; w++) { + var(p,w)=sqrt(var(p,w))/nblocks; + } + } + + for(int a=0; a< naux; a++) { + for(int w=0; w< n_cvg; w++) { + aux_energyvar(a,w)=sqrt(aux_energyvar(a,w))/nblocks; + aux_weightvar(a,w)=sqrt(aux_weightvar(a,w))/nblocks; + aux_diffvar(a,w)=sqrt(aux_diffvar(a,w))/nblocks; + } + } + + + +} diff --git a/src/properties/Properties_block.h b/src/properties/Properties_block.h new file mode 100644 index 00000000..2e1a3bcc --- /dev/null +++ b/src/properties/Properties_block.h @@ -0,0 +1,108 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ +#ifndef PROPERTIES_BLOCK_INCLUDED +#define PROPERTIES_BLOCK_INCLUDED +#include "Qmc_std.h" + +namespace Properties_types { +enum quantities {total_energy, + kinetic, + potential, + nonlocal, + weight, + NUM_QUANTITIES }; +extern const char* names[]; +//const char * names[]={"total_energy", +// "kinetic", +// "potential", +// "nonlocal", +// "weight"}; + +}; + + + + +/*! + The average over a block. + */ +struct Properties_block { + + + + void setSize(int nwf, int naux, int n_aux_cvg=1) { + using namespace Properties_types; + + avg.Resize(NUM_QUANTITIES, nwf); + var.Resize(NUM_QUANTITIES, nwf); + + totweight=0; + + aux_energy.Resize(naux, n_aux_cvg); + aux_weight.Resize(naux, n_aux_cvg); + aux_energyvar.Resize(naux, n_aux_cvg); + aux_weightvar.Resize(naux, n_aux_cvg); + aux_diff.Resize(naux, n_aux_cvg); + aux_diffvar.Resize(naux, n_aux_cvg); + + aux_size.Resize(naux); + aux_size=1; + z_pol.Resize(3); + aux_z_pol.Resize(naux, 3); + aux_weight_correlation=0; + } + + void storeToLog(string & indent, ostream & os, string & label); + void restoreFromLog(vector & words); + void printBlockSummary(ostream & os); + void reduceBlocks(Array1 & blocks, + int start, int end); + + + doublevar totweight; + Array2 avg; + Array2 var; + + + Array2 autocorr; //autocorrelation of energy + + Array2 aux_energy; + Array2 aux_weight; + Array2 aux_energyvar; + Array2 aux_weightvar; + + Array2 aux_diff; + Array2 aux_diffvar; + Array1 aux_size; + + Array2 aux_autocorr; + + Array1 z_pol; + + Array2 aux_z_pol; + + doublevar aux_weight_correlation; + +}; + + + + +#endif //PROPERTIES_BLOCK_INCLUDED diff --git a/src/properties/Properties_gather.cpp b/src/properties/Properties_gather.cpp new file mode 100644 index 00000000..c2b0e536 --- /dev/null +++ b/src/properties/Properties_gather.cpp @@ -0,0 +1,417 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ +#include "Properties_gather.h" +#include "ulec.h" +#include "qmc_io.h" +#include "Wavefunction_data.h" +//---------------------------------------------------------------------- + +Properties_gather::~Properties_gather() { + int naux=aux_sys.GetDim(0); + for(int i=0; i< naux; i++) { + if(aux_sys(i)) delete aux_sys(i); + if(aux_wf(i)) delete aux_wf(i); + if(aux_wfdata(i)) delete aux_wfdata(i); + if(aux_sample(i)) delete aux_sample(i); + } +} + +//---------------------------------------------------------------------- + +void Properties_gather::read(vector < string> & words) { + + unsigned int pos=0; + + vector < vector < string> > aux_systxt; + vector < vector < string > > aux_wftxt; + vector < string> tmp, tmp2; + + pos=0; + while(readsection(words, pos, tmp, "AUX_SYS")) { + unsigned int pos2=0; + if(readsection(tmp, pos2, tmp2, "SYSTEM")) + aux_systxt.push_back(tmp2); + else + aux_systxt.push_back(tmp); + } + + pos=0; + while(readsection(words, pos, tmp, "AUX_WF")) + aux_wftxt.push_back(tmp); + + + if(aux_systxt.size() != aux_wftxt.size()) + error("the number of AUX_SYS and AUX_WF must be the same in properties"); + + vector warpsec; + if(readsection(words, pos=0, warpsec,"WARPER")) { + warper.read(warpsec); + } + + if(haskeyword(words, pos=0, "NOWARP")) + warper.set_warp(0); + + zpol_manye=0; + if(haskeyword(words, pos=0, "ZPOL_manye")) + zpol_manye=1; + + + int naux=aux_systxt.size(); + + aux_wfdata.Resize(naux); + aux_sys.Resize(naux); + aux_wf.Resize(naux); + aux_sample.Resize(naux); + + aux_wfdata=NULL; aux_sys=NULL; + aux_wf=NULL; aux_sample=NULL; + + for(int i=0; i < naux; i++) { + allocate(aux_systxt[i], aux_sys(i)); + allocate(aux_wftxt[i], aux_sys(i), aux_wfdata(i)); + aux_sys(i)->generateSample(aux_sample(i)); + aux_wfdata(i)->generateWavefunction(aux_wf(i)); + aux_sample(i)->attachObserver(aux_wf(i)); + } + + +} + + +//---------------------------------------------------------------------- +#include "Split_sample.h" + +void Properties_gather::updateAuxFunctions(Sample_point * sample) { + int naux=aux_sys.GetDim(0); + Array1 pos(3); doublevar jacobian; + + Array1 ref_pos(3); + for(int i=0; i< naux; i++) { + for(int e=0; e < sample->electronSize() ; e++) { + sample->getElectronPos(e,ref_pos); + warper.space_warp(sample, aux_sample(i), e,ref_pos,pos, jacobian); + aux_sample(i)->setElectronPos(e,pos); + } + aux_wf(i)->notify(all_electrons_move, 0); + aux_wf(i)->updateLap(aux_wfdata(i), aux_sample(i)); + } +} + + +void Properties_gather::getGreensFunctions(Dynamics_generator * dyngen, + Dynamics_info & dinfo, + int e, Sample_point * sample, + Guiding_function * guide, + doublevar timestep, + Array1 & aux_dinfo, + int eval_gf) { + doublevar jacobian; + //Array1 pos(3); + int naux=aux_sys.GetDim(0); + //gf.Resize(naux); + + //Array1 ref_pos(3); + aux_dinfo.Resize(naux); + for(int i=0; i< naux; i++) { + + Wavefunction_data * usewfdata=NULL; + if(aux_wfdata(i)==NULL) + error("bad assumption in Properties_gather::getGreensFunctions"); + else usewfdata=aux_wfdata(i); + int ndim=aux_sys(i)->ndim(); + + Array1 test_pos(3); + aux_sample(i)->getElectronPos(e,test_pos); + + Array1 new_pos(3); + warper.space_warp(sample, aux_sample(i), e,dinfo.new_pos, new_pos, jacobian); + + Array1 ref_pos(3); + warper.space_warp(sample, aux_sample(i), e,dinfo.orig_pos, ref_pos, jacobian); + + + if(dinfo.accepted && eval_gf) { + //cout << "moving " << e << " to " << new_pos(0) << endl; + + dyngen->greenFunction(aux_sample(i), aux_wf(i), usewfdata, + guide,e, new_pos, timestep, aux_dinfo(i), dinfo); + + } + else { //cout << "not moving " << e<< " at " << test_pos(0) << endl; + aux_dinfo(i).green_forward=1;} + + + aux_dinfo(i).accepted=dinfo.accepted; + + Array1 diffuse_start(3), diffuse_end(3); + warper.space_warp(sample, aux_sample(i), e,dinfo.diffuse_start, diffuse_start, jacobian); + warper.space_warp(sample, aux_sample(i), e,dinfo.diffuse_end, diffuse_end, jacobian); + aux_dinfo(i).diffusion_rate=0; + for(int d=0; d< ndim; d++) + aux_dinfo(i).diffusion_rate+=(diffuse_end(d)-diffuse_start(d)) + *(diffuse_end(d)-diffuse_start(d)); + + } + +} + +//---------------------------------------------------------------------- +#include "Force_fitter.h" + +void getZpol(System * sys, Sample_point * sample, Array1 & zpol, + int zpol_manye) { + + int nelectrons=sample->electronSize(); + Array2 gvec; + Array1 pos(3); + zpol.Resize(3); + + if(sys->getRecipLattice(gvec)) { + zpol=dcomplex(0.0,0.0); + if(zpol_manye) { + Array1 sum(3,0.0); + //See Souza et al. PRB v 62 pp 1666 + //We're using the relation given in section + //VII.B + for(int e=0; e< nelectrons; e++) { + sample->getElectronPos(e,pos); + for(int i=0; i< 3; i++) { + for(int d=0; d< 3; d++) { + sum(i)+=gvec(i,d)*pos(d); + } + } + } + + //cout << "pos " << pos(2) << " sum " << sum(2) << endl; + for(int i=0; i< 3; i++) { + zpol(i)=dcomplex(cos(2*pi*sum(i)),sin(2*pi*sum(i))); + } + } + else { + sys->getPrimRecipLattice(gvec); + for(int e=0; e< nelectrons; e++) { + sample->getElectronPos(e,pos); + for(int i=0; i< 3; i++) { + doublevar tmp=0; + for(int d=0; d< 3; d++) { + tmp+=gvec(i,d)*pos(d); + } + zpol(i)+=dcomplex(cos(2*pi*tmp),sin(2*pi*tmp))/doublevar(nelectrons); + } + } + } + + } + else { + Array1 sum(3,0.0); + for(int e=0; e< nelectrons; e++) { + sample->getElectronPos(e,pos); + for(int d=0; d< 3; d++) { + sum(d)-=pos(d); + } + } + int nions=sample->ionSize(); + for(int at=0; at < nions; at++) { + sample->getIonPos(at,pos); + doublevar charge=sample->getIonCharge(at); + for(int d=0; d< 3; d++) { + sum(d)+=charge*pos(d); + } + } + for(int d=0; d< 3; d++) + zpol(d)=dcomplex(sum(d),0.0); + } + +} + +/*! + + */ + +void Properties_gather::extendedGather(Properties_point & myprop, + Pseudopotential * psp, + System * sys, + Wavefunction_data * wfdata, + Wavefunction * wf, + Sample_point * sample, + Guiding_function * guide, int n_converge, + int aux_updated, + Array2 & drift, + Array1 < Array2 > & aux_drift +, + Array1 > & aux_positions) { + int nwf=wf->nfunc(); + int naux=aux_sys.GetDim(0); + + //updated all the aux wfs, etc. + gatherData(myprop, psp, sys, wfdata, wf, sample, guide, n_converge, + aux_updated); + Wf_return temp(nwf,5); + + int nelectrons=sample->electronSize(); + drift.Resize(nelectrons,3); + for(int e=0; e< nelectrons; e++) { + wf->getLap(wfdata, e, temp); + for(int d=0; d< 3; d++) { + drift(e,d)=temp.amp(0,d+1); + } + } + aux_drift.Resize(naux); + aux_positions.Resize(naux); + Array1 apos(3); + for(int a=0; a< naux; a++) { + aux_positions(a).Resize(nelectrons,3); + aux_drift(a).Resize(nelectrons,3); + for(int e=0;e < nelectrons; e++) { + aux_sample(a)->getElectronPos(e,apos); + aux_wf(a)->getLap(aux_wfdata(a),e,temp); + for(int d=0; d< 3; d++) { + aux_positions(a)(e,d)=apos(d); + aux_drift(a)(e,d)=temp.amp(0,d+1); + } + } + } +} + + +void Properties_gather::gatherData(Properties_point & myprop, + Pseudopotential * psp, + System * sys, + Wavefunction_data * wfdata, + Wavefunction * wf, + Sample_point * sample, + Guiding_function * guide, int n_converge, + int aux_updated) { + Force_fitter force_fitter; + force_fitter.setup(1.0,5); + + int nwf=wf->nfunc(); + int naux=aux_sys.GetDim(0); + + myprop.setSize(nwf, naux, n_converge); + + + Array2 deriv_temp; //We'll just toss the derivative.. + + wf->updateLap(wfdata, sample); + wf->getVal(wfdata, 0, myprop.wf_val); + + sys->calcKinetic(wfdata, sample, wf, myprop.kinetic); + myprop.potential=sys->calcLoc(sample); + + for(int w=0; w< nwf; w++) { + myprop.weight(w)=guide->getWeight(myprop.wf_val, + myprop.wf_val, w); + if(square_weight) + myprop.weight(w)*=myprop.weight(w); + + } + + int nrandvar=psp->nTest(); + Array1 rand_num(nrandvar); + for(int i=0; i< nrandvar; i++) + rand_num(i)=rng.ulec(); + + psp->calcNonlocWithTest(wfdata, sample, wf,force_fitter, + rand_num, myprop.nonlocal, + deriv_temp); + + + getZpol(sys, sample, myprop.z_pol, zpol_manye); + + + //Collect auxillary points + + Array1 a_kin(nwf); + Array1 a_nonloc(nwf); + doublevar a_loc; + int nelectrons=sys->nelectrons(0)+sys->nelectrons(1); + Array1 pos(3); + + + + + + //cout << "----------------------Auxillary points " << endl; + + for(int i=0; i< naux; i++) { + Wavefunction_data * usewfdata; + if(aux_wfdata(i)==NULL) usewfdata=wfdata; + else usewfdata=aux_wfdata(i); + + doublevar tot_jacob=1; + Array1 ref_drift(3), aux_drift(3); + Array1 ref_pos(3), orig_pos(3); + + for(int e=0;e< nelectrons; e++) { + doublevar jacobian=1; + sample->getElectronPos(e,ref_pos); + aux_sample(i)->getElectronPos(e,orig_pos); + warper.space_warp(sample, aux_sample(i), + e,ref_pos, pos, jacobian); + tot_jacob*=jacobian; + + if(!aux_updated) + aux_sample(i)->setElectronPos(e,pos); + + //for(int d=0; d< 3; d++) + // cout << "e=" << e << " diff " << pos(d) << " " << orig_pos(d) << endl; + } + if(!aux_updated) { + aux_wf(i)->notify(all_electrons_move, 0); + aux_wf(i)->updateLap(usewfdata, aux_sample(i)); + } + aux_wf(i)->getVal(usewfdata, 0, myprop.aux_wf_val(i)); + //cout << "pg: new wfval " << myprop.aux_wf_val(i).amp(0,0) << endl; + aux_sys(i)->calcKinetic(usewfdata, aux_sample(i), + aux_wf(i), a_kin); + psp->calcNonlocWithTest(usewfdata, aux_sample(i), + aux_wf(i), force_fitter, + rand_num, a_nonloc, deriv_temp); + a_loc=aux_sys(i)->calcLoc(aux_sample(i)); + + + myprop.aux_jacobian(i)=tot_jacob; + + Array1 z_pol_tmp(3); + getZpol(aux_sys(i), aux_sample(i),z_pol_tmp, zpol_manye); + for(int d=0; d< 3; d++) + myprop.aux_z_pol(i,d)=z_pol_tmp(d); + + for(int w=0; w< n_converge; w++) { + myprop.aux_energy(i,w)=a_kin(0)+a_nonloc(0)+a_loc; + myprop.aux_weight(i,w)=guide->getWeight(myprop.aux_wf_val(i), + myprop.wf_val, 0); + myprop.aux_weight(i,w)*=myprop.aux_weight(i,w); + myprop.aux_weight(i,w)*=tot_jacob; + } + } + + //for(int i=0; i< naux; i++) { + // cout << "aux en " << myprop.aux_energy(i,0) + // << " weight " << myprop.aux_weight(i,0) + // << " val " << myprop.aux_wf_val(i).amp(0,0) + // << " jacobian " << myprop.aux_jacobian(i) << endl; + //} + + myprop.count=1; + + +} diff --git a/src/properties/Properties_gather.h b/src/properties/Properties_gather.h new file mode 100644 index 00000000..67c2019b --- /dev/null +++ b/src/properties/Properties_gather.h @@ -0,0 +1,100 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ +//---------------------------------------------------------------------- +//include/Properties_gather.h + +#ifndef PROPERTIES_GATHER_H_INCLUDED +#define PROPERTIES_GATHER_H_INCLUDED + +#include "Space_warper.h" +#include "Wavefunction.h" +#include "System.h" +#include "Sample_point.h" +#include "Properties_point.h" +#include "Pseudopotential.h" +#include "Guiding_function.h" +class Dynamics_generator; +class Dynamics_info; + +class Properties_gather { + public: + + Properties_gather() { + square_weight=0; + zpol_manye=0; + } + + ~Properties_gather(); + void read(vector & words); + + void gatherData(Properties_point &, + Pseudopotential *, System *, Wavefunction_data *, + Wavefunction *, Sample_point *, Guiding_function *, int n_converge=1, + int aux_updated=0); + void extendedGather(Properties_point & myprop, + Pseudopotential * psp, + System * sys, + Wavefunction_data * wfdata, + Wavefunction * wf, + Sample_point * sample, + Guiding_function * guide, int n_converge, + int aux_updated, + Array2 & drift, + Array1 < Array2 > & aux_drift, + Array1 > & aux_positions); + + + void updateAuxFunctions(Sample_point * sample); + + void getGreensFunctions(Dynamics_generator * dyngen, + Dynamics_info & dinfo, + int e, Sample_point * sample, + Guiding_function * guide, + doublevar timestep, + Array1 & aux_dinfo, int eval_gf=1); + + int nAux() { + return aux_sys.GetDim(0); + } + + void squareWeight(int s) { + assert(s==0 || s==1); + square_weight=s; + } + + private: + + int square_weight; + int zpol_manye; //whether to use the many-electron operator for the position + + //Auxillary wave function data + Space_warper warper; + Array1 aux_sys; + Array1 aux_wfdata; + Array1 aux_wf; + Array1 aux_sample; + + +}; + + +#endif //PROPERTIES_GATHER_H_INCLUDED + +//---------------------------------------------------------------------- diff --git a/src/properties/Properties_point.cpp b/src/properties/Properties_point.cpp new file mode 100644 index 00000000..8ee149b3 --- /dev/null +++ b/src/properties/Properties_point.cpp @@ -0,0 +1,278 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ +#include "Properties_point.h" + +void Properties_point::setSize(int nwf, + int n_aux, int n_aux_cvg) { + + + kinetic.Resize(1); + potential.Resize(nwf); + nonlocal.Resize(nwf); + weight.Resize(nwf); + wf_val.Resize(nwf, 1); + + moved=0; + weight=1; + count=0; + + aux_energy.Resize(n_aux, n_aux_cvg); + aux_weight.Resize(n_aux, n_aux_cvg); + aux_energy=0; + aux_weight=0; + + aux_jacobian.Resize(n_aux); + aux_wf_val.Resize(n_aux); + for(int i=0; i< n_aux; i++) { + aux_wf_val(i).Resize(nwf,1); + } + aux_gf_weight.Resize(n_aux); + z_pol.Resize(3); + + aux_z_pol.Resize(n_aux,3); +} + + +//--------------------------------------------------------------------- + +void Properties_point::mpiSend(int node) { +#ifdef USE_MPI + int nwf=kinetic.GetDim(0); + int naux=aux_energy.GetDim(0); + int n_aux_cvg=aux_energy.GetDim(1); + //cout << mpi_info.node << " " << nwf << " " << naux << endl; + + MPI_Send(&nwf, 1, MPI_INT, node, 0, MPI_COMM_WORLD); + MPI_Send(&naux, 1, MPI_INT, node, 0, MPI_COMM_WORLD); + MPI_Send(&n_aux_cvg, 1, MPI_INT, node, 0, MPI_COMM_WORLD); + + MPI_Send(children.v, children.GetDim(0), MPI_INT, + node, 0,MPI_COMM_WORLD); + MPI_Send(&nchildren, 1, MPI_INT, node, 0, MPI_COMM_WORLD); + MPI_Send(&parent, 1, MPI_INT, node, 0, MPI_COMM_WORLD); + MPI_Send(&count, 1, MPI_INT, node, 0, MPI_COMM_WORLD); + MPI_Send(kinetic.v, kinetic.GetDim(0), MPI_DOUBLE, + node, 0, MPI_COMM_WORLD); + MPI_Send(potential.v, potential.GetDim(0), MPI_DOUBLE, + node, 0, MPI_COMM_WORLD); + MPI_Send(nonlocal.v, nonlocal.GetDim(0), MPI_DOUBLE, + node, 0, MPI_COMM_WORLD); + MPI_Send(weight.v, weight.GetDim(0), MPI_DOUBLE, node, + 0, MPI_COMM_WORLD); + MPI_Send(wf_val.amp.v, wf_val.amp.GetDim(0)*wf_val.amp.GetDim(1), + MPI_DOUBLE, node, 0, MPI_COMM_WORLD); + MPI_Send(wf_val.phase.v, wf_val.phase.GetDim(0)*wf_val.phase.GetDim(1), + MPI_DOUBLE, node, 0, MPI_COMM_WORLD); + + // cout << mpi_info.node << ":sending aux_energy " << endl; + MPI_Send(&gf_weight, 1, MPI_DOUBLE, node, 0, MPI_COMM_WORLD); + MPI_Send(aux_energy.v, aux_energy.GetDim(0)*aux_energy.GetDim(1), + MPI_DOUBLE, node, 0, MPI_COMM_WORLD); + MPI_Send(aux_weight.v, aux_weight.GetDim(0)*aux_weight.GetDim(1), + MPI_DOUBLE, node, 0, MPI_COMM_WORLD); + MPI_Send(aux_gf_weight.v, aux_gf_weight.GetDim(0), + MPI_DOUBLE, node, 0, MPI_COMM_WORLD); + MPI_Send(aux_jacobian.v, aux_jacobian.GetDim(0), MPI_DOUBLE, + node, 0, MPI_COMM_WORLD); + for(int i=0; i< naux; i++) { + aux_wf_val(i).mpiSend(node); + } + + + for(int d=0; d< 3; d++) + MPI_Send_complex(z_pol(d), node); + + for(int a=0; a< naux; a++) + for(int d=0; d< 3; d++) + MPI_Send_complex(aux_z_pol(a,d),node); + +#else + error("Properties_point::mpi_send: not using MPI," + " this is most likely a bug"); +#endif +} + +//-------------------------------------------------- + + +void Properties_point::mpiReceive(int node) { +#ifdef USE_MPI + MPI_Status status; + + int naux, nwf; + int n_aux_cvg; + MPI_Recv(&nwf, 1, MPI_INT, node, 0, MPI_COMM_WORLD, &status); + MPI_Recv(&naux, 1, MPI_INT, node, 0, MPI_COMM_WORLD, &status); + MPI_Recv(&n_aux_cvg, 1, MPI_INT, node, 0, MPI_COMM_WORLD, &status); + //cout << mpi_info.node << " " << nwf << " " << naux << endl; + + setSize(nwf, naux, n_aux_cvg); + MPI_Recv(children.v, children.GetDim(0), MPI_INT, + node, 0,MPI_COMM_WORLD, &status); + MPI_Recv(&nchildren, 1, MPI_INT, node, 0, MPI_COMM_WORLD, &status); + MPI_Recv(&parent, 1, MPI_INT, node, 0, MPI_COMM_WORLD, &status); + + MPI_Recv(&count, 1, MPI_INT, node, 0, MPI_COMM_WORLD, &status); + MPI_Recv(kinetic.v, kinetic.GetDim(0), MPI_DOUBLE, + node, 0, MPI_COMM_WORLD, & status); + MPI_Recv(potential.v, potential.GetDim(0), MPI_DOUBLE, + node, 0, MPI_COMM_WORLD, & status); + + MPI_Recv(nonlocal.v, nonlocal.GetDim(0), MPI_DOUBLE, + node, 0, MPI_COMM_WORLD, & status); + MPI_Recv(weight.v, weight.GetDim(0), MPI_DOUBLE, node, + 0, MPI_COMM_WORLD, & status); + MPI_Recv(wf_val.amp.v, wf_val.amp.GetDim(0)*wf_val.amp.GetDim(1), + MPI_DOUBLE,node, 0, MPI_COMM_WORLD, & status); + MPI_Recv(wf_val.phase.v, wf_val.phase.GetDim(0)*wf_val.phase.GetDim(1), + MPI_DOUBLE,node, 0, MPI_COMM_WORLD, & status); + + MPI_Recv(&gf_weight, 1, MPI_DOUBLE, node, 0, MPI_COMM_WORLD, & status); + MPI_Recv(aux_energy.v, aux_energy.GetDim(0)*aux_energy.GetDim(1), + MPI_DOUBLE, node, 0, MPI_COMM_WORLD, & status); + MPI_Recv(aux_weight.v, aux_weight.GetDim(0)*aux_weight.GetDim(1), + MPI_DOUBLE, node, 0, MPI_COMM_WORLD, & status); + MPI_Recv(aux_gf_weight.v, aux_gf_weight.GetDim(0), + MPI_DOUBLE, node, 0, MPI_COMM_WORLD, & status); + MPI_Recv(aux_jacobian.v, aux_jacobian.GetDim(0), + MPI_DOUBLE, node, 0, MPI_COMM_WORLD, & status); + for(int i=0; i< naux; i++) { + aux_wf_val(i).mpiRecieve(node); + } + + + for(int d=0; d< 3; d++) + MPI_Recv_complex(z_pol(d), node); + + for(int a=0; a< naux; a++) + for(int d=0; d< 3; d++) + MPI_Recv_complex(aux_z_pol(a,d), node); + +#else + + error("Properties_point::mpiRecieve: not using MPI," + " this is most likely a bug"); +#endif +} + +//---------------------------------------------------------------------- + + +void Properties_point::read(istream & is) { + int nwf, naux, n_aux_cvg; + string dummy; + const string errmsg="Properties error in checkpoint read"; + is >> dummy >> nwf; + if(dummy != "nwf") error("expected nwf, got ", dummy); + is >> dummy >> naux; + is >> dummy >> n_aux_cvg; + setSize(nwf, naux, n_aux_cvg); + //is >> dummy >> nchildren; + //read_array(is,nchildren, children); + //is >> dummy >> parent; + //is >> dummy >> moved; + //is >> dummy >> count; + is >> dummy; + read_array(is, nwf, kinetic); + is >> dummy; + read_array(is,nwf, potential); + is >> dummy; + read_array(is, nwf, nonlocal); + is >> dummy; + read_array(is, nwf, weight); + is >> dummy >> dummy; //Wf_val { + wf_val.read(is); + is >> dummy; //} + + is >> dummy; //z_pol + read_array(is, 3, z_pol); + if(naux > 0) { + is >> dummy; //aux_energy + read_array(is, naux, n_aux_cvg, aux_energy); + is >> dummy; //aux_weight + read_array(is, naux, n_aux_cvg, aux_weight); + is >> dummy; //aux_jacobian + read_array(is, naux, aux_jacobian); + for(int a=0; a< naux; a++) { + is >> dummy >> dummy; //aux_wf_val { + aux_wf_val(a).read(is); + is >> dummy; // } + } + is >> dummy >> gf_weight; + is >> dummy; //aux_gf_weight + read_array(is, naux, aux_gf_weight); + + basic_istream::pos_type place=is.tellg(); + is >> dummy; // aux_z_pol + if(dummy != "aux_z_pol") is.seekg(place); + else read_array(is, naux, 3, aux_z_pol); + } + +} + +//---------------------------------------------------------------------- + + +void Properties_point::write(string & indent, ostream & os) { + int nwf=kinetic.GetDim(0); + int naux=aux_energy.GetDim(0); + int n_aux_cvg=aux_energy.GetDim(1); + os << indent << "nwf " << nwf << endl; + os << indent << "naux " << naux << endl; + os << indent << "n_aux_cvg " << n_aux_cvg << endl; + + os << indent << "kinetic "; + write_array(os, kinetic); + os << endl << indent << "potential "; + write_array(os, potential); + os << endl << indent << "nonlocal "; + write_array(os, nonlocal); + os << endl << indent << "weight "; + write_array(os, weight); + os << endl; + + os << indent << "Wf_val { \n"; + string indent2=indent+" "; + wf_val.write(indent2, os); + os << indent << "}\n"; + + + os << indent << " z_pol "; write_array(os, z_pol); os << endl; + + if(naux > 0) { + os << indent << " aux_energy "; write_array(os, aux_energy); os << endl; + os << indent << " aux_weight "; write_array(os, aux_weight); os << endl; + os << indent << " aux_jacobian "; write_array(os, aux_jacobian); os << endl; + + for(int a=0; a< naux; a++) { + os << indent << "aux_wf_val { \n"; + aux_wf_val(a).write(indent2, os); + os << indent << "}\n"; + } + + os << indent << "gf_weight " << gf_weight << endl; + os << indent << "aux_gf_weight "; write_array(os,aux_gf_weight); os << endl; + os << indent << "aux_z_pol " ; write_array(os, aux_z_pol); os << endl; + + } + +} + +//---------------------------------------------------------------------- diff --git a/src/properties/Properties_point.h b/src/properties/Properties_point.h new file mode 100644 index 00000000..c264699f --- /dev/null +++ b/src/properties/Properties_point.h @@ -0,0 +1,104 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ +#ifndef PROPERTIES_POINT_INCLUDED +#define PROPERTIES_POINT_INCLUDED + +#include "Qmc_std.h" +#include "Wavefunction.h" + +/*! + All relevant quantities at one point + */ +struct Properties_point { + + Properties_point() { + //There are some possible problems with hard-coding maxchildren, + //but the only branching algorithm is DMC, and the way it is at + //the time of writing, one can only branch once per step, so + //it should really be safe at maxchildren=2. Maybe we should + //use a vector instead; need to check memory usage. + maxchildren=3; + children.Resize(maxchildren); + reset(); + } + void setSize(int nwf, int n_aux, int n_aux_cvg=1 //Number of convergence steps + ); + + void reset() { + nchildren=0; + parent=-1; + moved=0; + weight=0; + count=0; + + } + + + void mpiSend(int node); + + void mpiReceive(int node); + + void write(string & indent, ostream & os); + void read(istream & is); + + + doublevar energy(int w) { + return kinetic(w)+potential(w)+nonlocal(w); + } + + + int nchildren; + int parent; + Array1 children; + int moved; //whether we moved or not from this point + + int count; //whether to count this point or not + + //Properties to track + Array1 kinetic; + Array1 potential; + Array1 nonlocal; + + Array1 weight; //!< averaging weight + Wf_return wf_val; //!< wavefunction value + + Array1 z_pol; //!< =exp(i G dot sum x_j) + + Array2 aux_energy; + Array2 aux_weight; + + Array1 aux_jacobian; + Array1 aux_wf_val; + Array2 aux_z_pol; + + + doublevar gf_weight; //weight of green's function between this and the last point(used in DMC) + Array1 aux_gf_weight; + + private: + int maxchildren; + + +}; + + + + +#endif //PROPERTIES_POINT_INCLUDED diff --git a/src/properties/Space_warper.cpp b/src/properties/Space_warper.cpp new file mode 100644 index 00000000..c56c4f4a --- /dev/null +++ b/src/properties/Space_warper.cpp @@ -0,0 +1,224 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ +//---------------------------------------------------------------------- + +#include "Space_warper.h" + +#include "MatrixAlgebra.h" +#include "Sample_point.h" +#include "qmc_io.h" + +Space_warper::Space_warper() { + weight_basis=NULL; + vector basistxt; + basistxt.push_back("NULL"); + basistxt.push_back("POLYPADE"); + basistxt.push_back("RCUT"); + basistxt.push_back("2.0"); + basistxt.push_back("BETA0"); + basistxt.push_back("-.9"); + basistxt.push_back("NFUNC"); + basistxt.push_back("1"); + allocate(basistxt, weight_basis); + warp_on=1; + ex=1; +} + +void Space_warper::read(vector & words) { + unsigned int pos=0; + readvalue(words, pos=0, ex, "EXPONENT"); +} + + +//---------------------------------------------------------------------- +void transformation_matrix (const Array2 &ellePrime, + const Array2 &elle, + Array2 &ratio) { + + assert(elle.GetDim(0)==elle.GetDim(1)==3); + assert(ellePrime.GetDim(0)==ellePrime.GetDim(1)==3); + ratio.Resize(3,3); + Array2 elleInverse(3,3,0.0); + + InvertMatrix(elle, elleInverse, 3); + MultiplyMatrices(ellePrime, elleInverse, ratio, 3); + +} + +//---------------------------------------------------------------------- +int Space_warper::space_warp (Sample_point * refsample, Sample_point * sample, + int e, Array1 & R_old, + Array1 & R_new, + doublevar & jacobian ) { + + int natoms=refsample->ionSize(); + int moved=0; + refsample->updateEIDist(); + Array1 dist(5); + + Array2 jacob_matrix(3,3); + jacob_matrix=0; + assert(R_old.GetDim(0)==3); + R_new.Resize(3); + R_new=R_old; + + + if(!warp_on) + { jacobian=1; return 0; } + + //Here we stretch or shrink the cell appropriately to match the + //different lattice parameters. This is a guaranteed way to + //make sure the two spaces actually have a 1-1 relationship in a PBC calculation. + Array2 reflatvec; + Array1 reforigin; + if(refsample->getBounds(reflatvec, reforigin)) { + Array2 latvec; + Array1 origin; + sample->getBounds(latvec, origin); + assert(reflatvec.GetDim(0)==3 && reflatvec.GetDim(1)==3 && reforigin.GetDim(0)==3); + assert(latvec.GetDim(0)==3 && latvec.GetDim(1)==3 && origin.GetDim(0)==3); + + transformation_matrix(latvec, reflatvec, jacob_matrix); + R_new=0; + //cout << " jacobian " << endl; + for(int i=0; i< 3; i++) { + for(int j=0; j< 3; j++) { + R_new(i)+=jacob_matrix(i,j)*R_old(j); + //cout << jacob_matrix(i,j) << " "; + } + //cout << endl; + } + + //cout << "rnew rold \n"; + //for(int i=0; i< 3; i++) cout << R_new(i) <<" " << R_old(i) << endl; + //cout << endl; + jacobian=Determinant(jacob_matrix,3); + return 1; + } + + + //If it is not a periodic calculation, then space-warp using + //either a general basis function or the 1/r warping suggested + //by Filippi and Umrigar(using 1/r by default because the full + //estimator works better with it) + + //doublevar cutoff=weight_basis->cutoff(0); + doublevar cutoff=1e99; + + //Array2 basisval(1,5); + + Array1 displace(3, 0.0); + //if(0) { + doublevar norm=0; + Array1 der_norm(3,0.0); + Array1 weights(natoms,0.0); + Array2 weight_der(natoms, 3,0.0); + Array2 deltar(natoms, 3,0.0); + + Array1 oldrefpos(3); + refsample->getElectronPos(e,oldrefpos); + + + + + if(natoms >0) { + refsample->setElectronPosNoNotify(e,R_old); + refsample->updateEIDist(); + } + + for(int at=0; at < natoms; at++) { + + refsample->getEIDist(e,at, dist); + //cout << "atom " << at << "dist " << dist(0) << endl; + if(dist(0) < cutoff) { + //if(moved==1) cout << "Warning--warped twice " << endl; + + moved=1; + Array1 refionpos(3); + refsample->getIonPos(at, refionpos); + Array1 newionpos(3); + sample->getIonPos(at, newionpos); + + //weight_basis->calcLap(dist, basisval); + doublevar z=1.0;//refsample->getIonCharge(at); + + + + //doublevar func=z/(dist(1)*dist(1)); + //doublevar func=z/(dist(1)); + doublevar func=z/(pow(dist(0),ex)); + //doublevar func=basisval(0,0); + norm+=func; + + for(int d=0; d< 3; d++) { + displace(d) += func*(newionpos(d)-refionpos(d)); + } + + weights(at)=func; + for(int d=0; d< 3; d++) { + deltar(at,d)=newionpos(d)-refionpos(d); + //weight_der(at,d)= -4*z*dist(d+2)/(dist(1)*dist(1)*dist(1)); + weight_der(at,d)= -ex*z*dist(d+2)/pow(dist(0),ex+2); + //weight_der(at,d)=basisval(0,d+1); + } + for(int d=0; d< 3; d++) der_norm(d)+=weight_der(at,d); + } + } + + + if(natoms >0) { + refsample->setElectronPosNoNotify(e,oldrefpos); + refsample->updateEIDist(); + } + + //cout << "norm " << norm << endl; + if(moved && norm > 1e-14) { + for(int d=0; d< 3; d++) { + R_new(d)+=displace(d)/norm; + } + + jacob_matrix=0; + for(int i=0; i< 3; i++) + for(int j=0; j< 3; j++) + for(int at=0; at < natoms; at++) { + jacob_matrix(i,j)+=deltar(at,i)*(weight_der(at,j)/norm + -weights(at)*der_norm(j)/(norm*norm)); + //cout << " at " << at << "der " << weight_der(at,j) << " weights " + // << weights(at) << " der_norm " << der_norm(j) + // << endl; + } + } + //} + + + for(int i=0; i< 3; i++) jacob_matrix(i,i)+=1; + + //cout << "jacobian matrix " << endl; + //for(int i=0; i< 3; i++) { + // for(int j=0; j< 3; j++) + // cout << jacob_matrix(i,j) << " "; + // cout << endl; + //} + jacobian=Determinant(jacob_matrix, 3); + //cout << "jacobian " << jacobian << endl; + return moved; +} + +//---------------------------------------------------------------------- diff --git a/src/properties/Space_warper.h b/src/properties/Space_warper.h new file mode 100644 index 00000000..523def73 --- /dev/null +++ b/src/properties/Space_warper.h @@ -0,0 +1,55 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ + +#ifndef SPACE_WARPER_H_INCLUDED +#define SPACE_WARPER_H_INCLUDED + +#include "Qmc_std.h" +#include "Basis_function.h" +class Sample_point; + +class Space_warper { +public: + Space_warper(); + + ~Space_warper() { + //if(weight_basis) delete weight_basis; + } + + void set_warp(int warp) { + assert(warp==0 || warp==1); + warp_on=warp; + } + + void read(vector & words); + int space_warp(Sample_point * refsample, + Sample_point * sample, + int e, Array1 & R_old, + Array1 & R_new, + doublevar & jacobian ); +private: + Basis_function * weight_basis; + int warp_on; + int ex; //!< exponent of warping transformation +}; + +#endif //SPACE_WARPER_H_INCLUDED + +//---------------------------------------------------------------------- diff --git a/src/properties/gosling.cpp b/src/properties/gosling.cpp new file mode 100644 index 00000000..2e420b94 --- /dev/null +++ b/src/properties/gosling.cpp @@ -0,0 +1,335 @@ +/* + +Copyright (C) 2007 Lucas K. Wagner + +This program is free software; you can redistribute it and/or modify +it under 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. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +*/ +#include "Qmc_std.h" +#include "Properties_block.h" +#include "qmc_io.h" +#include "Properties_average.h" +#include +#include + +using namespace Properties_types; +//---------------------------------------------------------------------- + +void getBlocks(vector & words, vector & labels, + Array1 < Array1 < Properties_block> > & allblocks) { + + vector < vector < string> > blocktext; + vector tmp; + unsigned int pos=0; + while(readsection(words, pos, tmp, "BLOCK")) + blocktext.push_back(tmp); + + int nblock=blocktext.size(); + //cout << blocktext.size() << " blocks \n"; + + //vector labels; + vector belong_to; + vector lab_nb; //number of blocks that belong to each label + string label; + for(int b=0; b< nblock; b++) { + + if(!readvalue(blocktext[b], pos=0, label, "LABEL")) + error("didn't find label in the file"); + vector::iterator place=find(labels.begin(), labels.end(), label); + belong_to.push_back(place-labels.begin()); + if(place==labels.end()) { + labels.push_back(label); + lab_nb.push_back(1); + } + else lab_nb[belong_to[b]]++; + } + + int nlabels=labels.size(); + //cout << nlabels << " labels" << endl; + //for(int i=0; i< nlabels; i++) { + // cout << labels[i] << " " << lab_nb[i] << endl; + //} + + allblocks.Resize(nlabels); + for(int i=0; i< nlabels; i++) { + allblocks(i).Resize(lab_nb[i]); + } + Array1 nb_read(nlabels, 0); + for(int b=0; b< nblock; b++) { + int lab=belong_to[b]; + int i=nb_read(lab); + nb_read(lab)++; + allblocks(lab)(i).restoreFromLog(blocktext[b]); + } +} + +//---------------------------------------------------------------------- + +void output_trace(vector & labels, + Array1 < Array1 > & allblocks) { + int nlabels=labels.size(); + for(int i=0; i< nlabels; i++) { + string nm=labels[i]+".trace"; + ofstream tr(nm.c_str()); + tr.precision(15); + for(int b=0; b< allblocks(i).GetDim(0); b++) { + tr << allblocks(i)(b).avg(total_energy,0) << endl; + } + } +} + +//---------------------------------------------------------------------- + +void output_trace_force(vector & labels, + Array1 < Array1 > & allblocks) { + int nlabels=labels.size(); + + for(int i=0; i< nlabels; i++) { + int naux=allblocks(i)(0).aux_energy.GetDim(0); + int n_cvg=allblocks(i)(0).aux_energy.GetDim(1); + for(int a=0; a< naux; a++) { + for(int n=0; n< n_cvg; n++) { + string nm=labels[i]+"f"; + append_number(nm,a); + nm+="-"; append_number(nm,n); + nm+=".trace"; + ofstream tr(nm.c_str()); + tr.precision(15); + for(int b=0; b< allblocks(i).GetDim(0); b++) { + tr << (allblocks(i)(b).aux_energy(a,n)-allblocks(i)(b).avg(total_energy,0)) + /allblocks(i)(b).aux_size(a) << endl; + } + } + } + } + +} +//---------------------------------------------------------------------- + +int reblock_average(Array1 & orig_block, int reblock, int equil, + Properties_final_average & avg) { + int nblock=orig_block.GetDim(0); + if(reblock > nblock) + return 0; + + int neffblock=0; + Array1 reblocks; + + reblocks.Resize(nblock/reblock); + int start=nblock%reblock; + int count=0; + for(int i=start; i< nblock; i+=reblock) { + int top=min(i+reblock, nblock); + reblocks(count++).reduceBlocks(orig_block, i, top); + } + neffblock=nblock/reblock; + avg.blockReduce(reblocks, 0, nblock/reblock, equil); + + return neffblock; +} + +//---------------------------------------------------------------------- + +struct Gosling_options { + string label; + int tot_energy; + int trace; + int equil; + int show_autocorr; + int two_pt_forces; + int trace_force; + int reblock; + vector filenames; + Gosling_options() { + tot_energy=0; + trace=0; + equil=1; + show_autocorr=0; + two_pt_forces=0; + trace_force=0; + reblock=1; + } +}; + +//---------------------------------------------------------------------- + +void get_options(int argc, char ** argv, + Gosling_options & options) { + + + for(int i=1; i< argc; i++) { + if(!strcmp(argv[i], "-label") && argc > i+1) { + options.label=argv[++i]; + } + else if(!strcmp(argv[i], "-tot_energy")) + options.tot_energy=1; + else if(!strcmp(argv[i], "-trace")) + options.trace=1; + else if(!strcmp(argv[i], "-no_equil")) + options.equil=0; + else if(!strcmp(argv[i], "-show_autocorr")) + options.show_autocorr=1; + else if(!strcmp(argv[i], "-two_point_forces")) + options.two_pt_forces=1; + else if(!strcmp(argv[i], "-trace_force")) + options.trace_force=1; + else if(!strcmp(argv[i], "-reblock") && argc > i+1) + options.reblock=atoi(argv[++i]); + else if(!strcmp(argv[i], "-h")) { + cout << "usage: gosling " << endl + << "-label