Компьютерное моделирование процессов оптической накачки в реакциях фотоиндуцированного переноса электрона
Дипломная работа - Компьютеры, программирование
Другие дипломы по предмету Компьютеры, программирование
ics of Excited Donor-Acceptor Complexes // J. Phys. Chem. A 2008, 112, 594-601 p.
. Risken H. The Fokker-Planck equation: Methods of solurion and applications. - Berlin: Springer-Verlag, 1989. - 475 p.
. Serguei V. Feskov, Anna O. Kichigina, Anatoly I. Ivanov. Kinetics of Nonequilibrium Electron Transfer in PhotoexcitedRuthenium(II)-Cobalt(III) Complexes // J. Phys. Chem. - 2011.-115 1462-1471.
. Roman G. Fedunov, Serguei V. Feskov, Anatoly I. Ivanov, Olivier Nicolet, Stephane Page`s, Eric Vauthey. Effect of the excitation pulse carrier frequency on the ultrafast charge recombination dynamics of donor-acceptor complexes: Stochastic simulations and experiments // Journal of chemical physics. - 2004. - 20 August. - N 8. -3643-3656 p.
. Pages S., Lang B., Vauthey E. Ultrafast spectroscopic investigation of the charge recombination dynamics of ion pairs // J. Phys. Chem. A. - 2004. - V.108. -549-557 p.
. Ivanov A.I., Potovoi V.V. Theory of non-thermal electron transfer // Chem. Phys. - 1999. - V. 247. - N. 2. - 245-259.
Приложение А
Фрагмент исходного кода программы QM2L:
TImagingPoint::TImagingPoint(void)
{_x = prev_x = parameters->q0;(parameters->dq> 1.e-6)_x = prev_x += parameters->dq*RandG(0, 1);
_quantum = 0;= gr_term;_time = aux->start_time;_excited = false;
//exc_sum = 1.0;
}
::ProceedInterval(void)
{double A = profiles->x_limit1;double B = profiles->x_limit2;double C = SF_size/(B-A);T = state->current_time + parameters->save_interval;
(internal_time< T)
{index = round((cur_x-A)*C);= aux->step_profile[index];(internal_time + dt> T)= T - internal_time + 1.0e-9;(dt);_time+=dt;
}
}
void TImagingPoint::DoFullStep(double dt)
{
// ============ оптическая накачка системы ===============(!is_excited)(dt);
// ========= диффузия вдоль координаты реакции ===========
DoQStep(dt);
// ============= колебательнаярелаксация ================(parameters->is_relaxation)(term == gr_term)(v_quantum != 0)(isVRelax(dt))_quantum--;
// =========== пропускаемобратныепереходы ==============(!parameters->is_reversible)(term == gr_term) return;
// ======== электронные переходы между термами ===========(isSurfaceHop(dt))
{(term == ct_term)
{= gr_term;>num_hops_all[forw]++;(v_quantum==aux->strongest_sink)>num_hops_central[forw]++;
}
{= ct_term;_quantum = 0;>num_hops_all[back]++;(v_quantum==aux->strongest_sink)>num_hops_central[back]++;
}
}
}
void TImagingPoint::DoExcite(double dt)
{A = -log(1.0-parameters->pump_depth);= parameters->lambda_lf*fabs(aux->saddle_x[0]-cur_x);= parameters->tau_exc*(dU - parameters->omega_exc)/hbar;= exp(-2*dE*dE);arg_1 = (internal_time -
parameters->t_exc)/M_SQRT2/parameters->tau_exc;erf_1 = erf(arg_1);arg_2 = (internal_time +
dt - parameters->t_exc)/M_SQRT2/parameters->tau_exc;erf_2 = erf(arg_2);action = 0.5*Sw*A*(erf_2-erf_1);p = exp(-action);
//exc_sum *= p;r = uniform_random();(r>p)
{_excited = true;= ct_term;
}
}
void TImagingPoint::DoQStep(double dt)
{K1 = exp(-dt/parameters->tau_l);K2 = sqrt( aux->disp_x*(1.0-K1*K1) );_x = cur_x;(term == gr_term)_x = prev_x*K1 + RandG(0,1)*K2; //gaussian_random()_x = 2. + (prev_x-2.)*K1 + RandG(0,1)*K2;
}
::isSurfaceHop(double dt)
{(int quantum = 0; quantum num_hf_terms; quantum++)
{((cur_x-aux->saddle_x[quantum])*(prev_x-aux->saddle_x[quantum])<0.)
{((term == gr_term)&&(quantum != v_quantum)) continue;
v = fabs(cur_x-prev_x)/dt;exponent = aux->k0[quantum]/v;p = exp(-exponent);
(term == ct_term)
{>num_cross_all[forw]++;(quantum==aux->strongest_sink)
{>num_cross_central[forw]++;>average_p[forw] =
state->average_p[forw]*(state->num_cross_central[forw]-1.0)
/ (double)state->num_cross_central[forw] +
p/(double)state->num_cross_central[forw];
}
}
{>num_cross_all[back]++;(quantum==aux->strongest_sink)
{>num_cross_central[back]++;>average_p[back] = state->average_p[back]*
(state->num_cross_central[back]-1.0)
/ (double)state->num_cross_central[back] +
p/(double)state->num_cross_central[back];
}
}
r1 = uniform_random();(r1>p)
{_quantum = quantum;true;
}
}
}false;
}
::isVRelax(double dt)
{(5.*parameters->tau_vps);;
}