Effective Monomial Symmetrization Approach (EMSA) Program

This is the page for the Monomial Symmetrization Approach for permutationally invariant polynomial basis for molecular energy surface fitting for the following paper:
References:
  1. Permutationally Invariant Polynomial Basis for Molecular Energy Surface Fitting via Monomial Symmetrization
    Zhen Xie and Joel M. Bowman
    J. Chem. Theory Comput., 6(1), 26-34, 2010. [DOI] [PDF]
At this time, both binary executable and source codes are available.
Executable(Linux 32 bit)
Source Code

After downloading and extracting the tarball, the program can be run simply as
  ./msa 3 1 6
for a molecule A3B1 with max degree 6.

There are five output files generated by the program "msa", they are
  1. MOL_3_1_6.BAS
  2. MOL_3_1_6.FOC
  3. MOL_3_1_6.MAP
  4. MOL_3_1_6.MONO
  5. MOL_3_1_6.POLY
Among all the five files, only "MOL_3_1_6.MONO" and "MOL_3_1_6.POLY" will be used to for the actual invariant polynomial basis decomposition, and the following ready to use FORTRAN 90 module bemsa31_6.f90 (automatically generated using a PERL script based on MOL_3_1_6.MONO and MOL_3_1_6.POLY files) for molecule A3B is based on these two files. This module mainly contains two subroutines as following:
  1. emsav
      function emsav(x,c) result(v)
        implicit none
        real(wp),dimension(1:6)::x
        real(wp),dimension(0:195)::c
        real(wp)::v
        ! ::::::::::::::::::::
        real(wp),dimension(0:195)::p
        
        call bemsav(x,p)
        v = dot_product(p,c)
        
        return
      end function emsav
    
    this is the function to evaluate the potential energy function given the molecule configuration x and the fitted coefficients c

  2. bemsav
      subroutine bemsav(x,p)
        implicit none
        real(wp),dimension(1:6),intent(in)::x
        real(wp),dimension(0:195),intent(out)::p
        ! ::::::::::::::::::::
        real(wp),dimension(0:32)::m
        
        call evmono(x,m)
        call evpoly(m,p)
        
        return
      end subroutine bemsav
    
    this is the subroutine to evaluate all the basis function values given the molecule configurationx.
If you have generate the .mono and .poly files using the above code and want to generate the FORTRAN 90 module as bemsa31_6.f90, please contact me along with the .MONO and .POLY file.

prgram to generate all the permuted monomials for a molecule (SMSA)

This program is explained as follow, and can be downloaded here.
// ====================================================================== //
// this is the C++ code to generate all the possible permuted monomials   //
// for a given specifiled molecule.				          //
//								          //
// A molecule such as A3B2 could be feed to the program as simply 3 2,    //
// basically, what the program does is generate all the bond lengths      //
// for this molecules, and act all the possible permutations on it. the   //
// final results would be a permutation of a general monomial [abc...];   //
//								          //
// Here is a simple example runing the program for molecule A3B2,         //
// 								          //
// $./smsa -g 2 3 2                                                       // 
//									  // 
//  MOLECULE : [(123)(45)]                                                //  
//  ATOM PAIR: |12|13|14|15|23|24|25|34|35|45|				  // 
//  BOND INDX: | 0| 1| 2| 3| 4| 5| 6| 7| 8| 9|				  // 
// [P 01234]: |A 12345|B 0123456789|M [abcdefghij]			  // 
// [P 02134]: |A 13245|B 1023478569|M [bacdehifgj]			  // 
// [P 10234]: |A 21345|B 0456123789|M [aefgbcdhij]			  // 
// [P 12034]: |A 31245|B 1478023569|M [eafgbhicdj]			  // 
// [P 20134]: |A 23145|B 4056178239|M [behiacdfgj]			  // 
// [P 21034]: |A 32145|B 4178056239|M [ebhiafgcdj]			  // 
// [P 01243]: |A 12354|B 0132465879|M [abdcegfihj]			  // 
// [P 02143]: |A 13254|B 1032487659|M [badceihgfj]			  // 
// [P 10243]: |A 21354|B 0465132879|M [aegfbdcihj]			  // 
// [P 12043]: |A 31254|B 1487032659|M [eagfbihdcj]			  // 
// [P 20143]: |A 23154|B 4065187329|M [beihadcgfj]			  // 
// [P 21043]: |A 32154|B 4187065329|M [ebihagfdcj]                        // 
//								          //
// the simplest way to run the program is just type                       //
// ./smsa -g [#groups] [size of group A] [size of group B] ...            //
// for a general molecule A3B2, there are two atom groups (A and B),      //
// and there are three A atoms and 2 B atoms.                             //
// as for the output                                                      //
// P shows the permutation ((index starts from 0)                         //
// A shows the permuted atom sequence                                     //
// B shows the permuted bond length variable sequence                     //
// M shows the monomial                                                   //
// check the source code for more details                                 //
// ====================================================================== //

Zhen Xie
Argonne National Laboratory
[email protected] or [email protected]
last update: Tue May 11 22:52:13 CDT 2010