You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							56 lines
						
					
					
						
							1.2 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							56 lines
						
					
					
						
							1.2 KiB
						
					
					
				
								#include <iostream>
							 | 
						|
								#include <Eigen/Core>
							 | 
						|
								
							 | 
						|
								using namespace Eigen;
							 | 
						|
								
							 | 
						|
								#ifndef SCALAR
							 | 
						|
								#define SCALAR float
							 | 
						|
								#endif
							 | 
						|
								
							 | 
						|
								#ifndef SIZE
							 | 
						|
								#define SIZE 10000
							 | 
						|
								#endif
							 | 
						|
								
							 | 
						|
								#ifndef REPEAT
							 | 
						|
								#define REPEAT 10000
							 | 
						|
								#endif
							 | 
						|
								
							 | 
						|
								typedef Matrix<SCALAR, Eigen::Dynamic, 1> Vec;
							 | 
						|
								
							 | 
						|
								using namespace std;
							 | 
						|
								
							 | 
						|
								SCALAR E_VDW(const Vec &interactions1, const Vec &interactions2)
							 | 
						|
								{
							 | 
						|
								  return (interactions2.cwise()/interactions1)
							 | 
						|
								         .cwise().cube()
							 | 
						|
								         .cwise().square()
							 | 
						|
								         .cwise().square()
							 | 
						|
								         .sum();
							 | 
						|
								}
							 | 
						|
								
							 | 
						|
								int main() 
							 | 
						|
								{
							 | 
						|
								  //
							 | 
						|
								  //          1   2   3   4  ... (interactions)
							 | 
						|
								  // ka       .   .   .   .  ...
							 | 
						|
								  // rab      .   .   .   .  ...
							 | 
						|
								  // energy   .   .   .   .  ...
							 | 
						|
								  // ...     ... ... ... ... ...
							 | 
						|
								  // (variables
							 | 
						|
								  //    for
							 | 
						|
								  // interaction)
							 | 
						|
								  //
							 | 
						|
								  Vec interactions1(SIZE), interactions2(SIZE); // SIZE is the number of vdw interactions in our system
							 | 
						|
								  // SetupCalculations()
							 | 
						|
								  SCALAR rab = 1.0;  
							 | 
						|
								  interactions1.setConstant(2.4);
							 | 
						|
								  interactions2.setConstant(rab);
							 | 
						|
								  
							 | 
						|
								  // Energy()
							 | 
						|
								  SCALAR energy = 0.0;
							 | 
						|
								  for (unsigned int i = 0; i<REPEAT; ++i) {
							 | 
						|
								    energy += E_VDW(interactions1, interactions2);
							 | 
						|
								    energy *= 1 + 1e-20 * i; // prevent compiler from optimizing the loop
							 | 
						|
								  }
							 | 
						|
								  cout << "energy = " << energy << endl;
							 | 
						|
								}
							 |