def term_setup(self): """Setup function that makes sure all keywords are properly defined and defaulted. """ # check coefficient if not 'coeff' in self.term: self.term['coeff'] = 1.0 # check units if not 'units' in self.term: self.term['units'] = 'au' # do unit conversions for the coefficients self.term['units'] = self.term['units'].lower() self.term['coeff'] *= units.convert_to(self.term['units']) # default electronic operator to 1 if not 'elop' in self.term: self.term['elop'] = '1' if 'modes' in self.term: # if there are modes make sure it's a list if not isinstance(self.term['modes'], list): self.term['modes'] = [self.term['modes']] if not isinstance(self.term['ops'], list): self.term['ops'] = [self.term['ops']]
minv = 1.43e-3 E0 = 0.0 E1 = 2.00 W0 = 2.3 W1 = 1.50 lamda = 0.19 hterms = [] # electronic energy shifts hterms.append({'coeff': E0+0.5*W0, 'units': 'ev', 'elop': '0,0'}) hterms.append({'coeff': E1-0.5*W1, 'units': 'ev', 'elop': '1,1'}) ## coupling mode harmonic oscillator potential hterms.append({'coeff': wc, 'units': 'ev', 'modes': 0, 'ops': 'KE'}) hterms.append({'coeff': 0.5*wc, 'units': 'ev', 'modes': 0, 'ops': 'q^2'}) hterms.append({'coeff': kappa1, 'units': 'ev', 'modes': 0, 'elop': '1,1', 'ops': 'q'}) hterms.append({'coeff': lamda, 'units': 'ev', 'modes': 0, 'elop': 'sx', 'ops': 'q'}) # torsional mode plane wave potential hterms.append({'coeff': -0.5*minv, 'units': 'ev', 'modes': 1, 'ops': 'KE'}) hterms.append({'coeff': -0.5*W0, 'units': 'ev', 'modes': 1, 'elop': '0,0', 'ops': 'cos'}) hterms.append({'coeff': 0.5*W1, 'units': 'ev', 'modes': 1, 'elop': '1,1', 'ops': 'cos'}) ham = Hamiltonian(nmodes, hterms, pbfs=pbfs) dt = 1.0 times = np.arange(0.0,4000.,dt)*units.convert_to('fs') #wf = vmfpropagate(times, ham, pbfs, wf, 'rhodopsin_diabatic_pops_test.txt') #wf = vmfpropagate(times, ham, pbfs, wf, 'rhodopsin_diabatic_pops.txt') #wf = vmfpropagate(times, ham, pbfs, wf, 'rhodopsin_diabatic_pops_small.txt') wf = vmfpropagate(times, ham, pbfs, wf, 'rhodopsin_diabatic_pops_really_small.txt')