Tag: ode

如何访问和打印在MPI工作人员中分发的完整向量?

如何从MPI中的单个线程访问全局向量? 我正在使用一个库 – 特别是一个ODE求解器库 – 名为CVODE(SUNDIALS的一部分)。 该库与MPI一起使用,因此多个线程并行运行。 它们都运行相同的代码。 每个线程将一个数据“旁边”发送给它。 但我希望其中一个线程(rank = 0)在某些点打印出数据的状态。 该库包含函数,以便每个线程可以访问自己的数据( 本地向量 )。 但是没有方法可以访问全局向量。 我需要在特定时间输出所有方程的值。 为此,我需要访问全局向量。 任何人都知道如何获取MPI向量中的所有数据(如果可能,使用CVODE)? 例如,这是我的代码,每个线程运行 for (iout=1, tout=T1; iout <= NOUT; iout++, tout += DTOUT) { flag = CVode(cvode_mem, tout, u, &t, CV_NORMAL); if(check_flag(&flag, "CVode", 1, my_pe)) break; if (my_pe == 0) PrintData(t, u); } … static void PrintData(realtype t, […]

使用GSL的双摆解决方案

我正在学习使用GSL来解决ODE问题。 我想用GSL ODE函数解决双摆问题。 我决定使用这个等式: (来源: http : //www.physics.usyd.edu.au/~wheat/dpend_html/ ) 我的代码: #include #include #include “gsl/gsl_errno.h” #include “gsl/gsl_matrix.h” #include “gsl/gsl_odeiv2.h” #include “constants.h” double L1; double L2; double M1; double M2; double T_START; double T_END; double S1_ANGLE; double S2_ANGLE; double V1_INIT; double V2_INIT; int func(double t, const double y[], double f[], void *params) { /* * y[0] = […]