- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试使用 openmp 来并行化我的代码。当我使用恒定步长时一切正常,但是当我使用自适应步进器运行相同的代码时,我会收到我不理解的错误。
以下是代码的基本部分:
using namespace std;
using namespace boost::numeric::odeint;
const int jmax = 10;
typedef double value_type;
typedef boost::array<value_type ,2*(jmax+1) > state_type;
//The step function
void rhs( const state_type A , state_type &dAdt , const value_type t )
{
value_type RHStemp0;
value_type RHStemp1;
//We will write the RHS of the equations a big sum
#pragma omp parallel for schedule(runtime)
for(int j = 0; j < jmax+1 ; j++ ) //Real part
{
RHStemp0 = value_type(0.0);
RHStemp1 = value_type(0.0);
for (int k = 0; k< jmax+1 ;k++)
{
for (int l = max(0,j+k-jmax); l < 1 + min(jmax,j+k);l++)
{
RHStemp0 = RHStemp0 + S[j*SIZE_S*SIZE_S + k*SIZE_S + l]*(-A[k+jmax+1]*A[l]*A[j+k-l] + A[k]*A[l+jmax+1]*A[j+k-l]
+ A[k]*A[l]*A[j+k-l+jmax+1] +A[k+jmax+1]*A[l+jmax+1]*A[j+k-l+jmax+1]);
RHStemp1 = RHStemp1 + S[j*SIZE_S*SIZE_S + k*SIZE_S + l]*(A[k]*A[l]*A[j+k-l] - A[k]*A[l+jmax+1]*A[j+k-l+jmax+1]
+ A[k+jmax+1]*A[l]*A[j+k-l+jmax+1] +A[k+jmax+1]*A[l+jmax+1]*A[j+k-l]);
}
}
dAdt[j] = (-1/(value_type((2*(2*j+3)))))*RHStemp0;
dAdt[j+jmax+1] = (1/(value_type((2*(2*j+3)))))*RHStemp1;
}
int main()
{
const state_type initial = loadInitialData(); //Initial condition
omp_set_num_threads(jmax+1);
int chunk_size = jmax/omp_get_max_threads();
omp_set_schedule( omp_sched_dynamic, chunk_size );
//I define my controlled error steppers
typedef runge_kutta_fehlberg78< state_type , value_type ,
state_type , value_type,openmp_range_algebra> error_stepper_type;
typedef controlled_runge_kutta< error_stepper_type > controlled_stepper_type;
controlled_stepper_type controlled_stepper;
int steps = integrate_adaptive( controlled_stepper ,rhs ,
initial, TINITIAL , TFINAL,INITIAL_STEP , push_back_state_and_time( A_vec , times ) );
}
我没有显示所有变量的定义,但我怀疑它们是问题所在,因为如果我只是从 error_stepper_type 的定义中删除 openmp_range_algebra 选项,它就可以正常工作。如果我使用具有恒定步进器大小的 openmp_range_algebra,这也很好用,例如 4 阶的 Runge Kutta。
但是,使用这段代码我得到以下错误:
invalid conversion from 'boost::range_iterator<const boost::array<double, 22ull>, void>::type {aka const double*}' to 'boost::range_iterator<boost::array<double, 22ull>, void>::type {aka double*}' [-fpermissive]|
所以看起来我试图分配一些常量。此错误出现在文件 openmp_range_algebra.hpp 中,代码如下:
template< class S >
static typename norm_result_type< S >::type norm_inf( const S &s )
{
using std::max;
using std::abs;
typedef typename norm_result_type< S >::type result_type;
result_type init = static_cast< result_type >( 0 );
const size_t len = boost::size(s);
typename boost::range_iterator<S>::type beg = boost::begin(s);
#pragma omp parallel for reduction(max: init) schedule(dynamic)
for( size_t i = 0 ; i < len ; ++i )
init = max( init , abs( beg[i] ) );
return init;
}
我希望我已经足够清楚了,我只是希望能够在我的并行化代码中使用自适应步进器。
非常感谢您的帮助。
最佳答案
这是 odeint 中的一个错误,我已经在 github 上提交了它:https://github.com/headmyshoulder/odeint-v2/issues/166我会尽快修复它。感谢发帖。
编辑:已修复,您的程序现在应该可以编译了。另外,我更改了一个示例以使用自适应步进器: https://github.com/headmyshoulder/odeint-v2/blob/master/examples/openmp/lorenz_ensemble_simple.cpp
关于c++ - 将 openmp 与 odeint 和自适应步长一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30820955/
我不知道如何创建这样的元素,以便点之间的距离始终适应屏幕尺寸。 这是我的代码的结果: .line-list { display: flex; justify-content: space-be
最终用户的 paypal 自适应支付流程有点奇怪。 而不是像 paypal express 流程那样工作: 用户完成结帐过程 用户前往 paypal 以授权付款 用户被重定向回网站以确认付款 通知从网
我在我们的游戏网站上添加了一个响应式 Google 广告,这是一个简单的基于静态 bootstrap 的网站: http://dealoround.com这将解决 https://mrcsabatot
简短的问题 使用 routes.resetConfig(newRouteArray) 切换路线的/或更好的方法有什么区别? 对比 在 resize 事件上重新加载 Angular 应用程序并根据屏幕宽
我在尝试仅使用纯 JS 制作自适应 slider 时遇到一些问题。 任务是: 在移动设备中, slider 仅显示文本信息或大幻灯片的一小部分 当宽度增加(通过媒体查询)时, slider 会变大并显
我刚刚创建了一个表单类类型,它有一个选择类型,其中 choice_list 必须根据登录的用户角色进行更改,因此表单类类型需要访问当前用户角色,然后根据它更改 choice_list。 有人能指出一种
我刚刚创建了一个表单类类型,它有一个选择类型,其中 choice_list 必须根据登录的用户角色进行更改,因此表单类类型需要访问当前用户角色,然后根据它更改 choice_list。 有人能指出一种
引入自适应 Autosar 的主要动机是什么? Information provided by Autosar consortium is "AP provides mainly high-perfo
我是 Collection View 和自动布局的新手,我在让单元格大小适应模拟器中的各种设备时遇到了问题。我正在使用流式布局,并在尺寸检查器中设置尺寸。我提供的图像显示了我需要单元格在所有设备上的外
我在使用自适应布局的网站上工作,这意味着网站会适应用户屏幕宽度。有三张图片说明了我的想法,图片显示了浏览器窗口从宽到窄调整大小的三个步骤。 宽屏紫色区域贴在页面左侧,绿色区域适合屏幕的其余部分。 中等
目前我在 flexbox 中有三列(目前在 Plunkr 中的情况)。 当屏幕变小时,我希望第二列位于其他两列之上(Plunkr 中的理想情况)。 我在 https://plnkr.co/edit/Z
我试图让 svg 根据屏幕尺寸显示不同的图像,因此较小的设备显示较小的图像。例如,如果我想要一个覆盖整个 svg 区域的背景图像,就像这样: #t
这是我们的 jQuery 代码: $(document).ready(function(){ $(window).on("load resize", function(){ i
我正在尝试使用 this gem 用于使用 paypal 自适应支付,它需要 development: environment: "sandbox" username: "sandbox_userna
首先,我对 paypal 自适应支付有点陌生,直到现在我只使用 REST api。 在实现自适应支付时,我无法理解应用程序的完整流程。 在 REST api 中,我将用户导航到他付款的 paypal
我有一个具有聊天功能的应用程序,其中 UITextview 用于输入消息。 UITextview 高度必须是动态的(如果用户输入消息,高度必须根据文本长度更改,直到特定高度)。 我怎样才能做到这一点?
我有一个表设置了一个自动递增的 ID。假设我有 ID 1、2、3、4 和 5。当我删除 ID 号 3 时,我希望 ID 4 降为 3,ID 5 降为 4。 这可能吗?这是怎么做到的? 最佳答案 我想你
我有一个幻灯片,其中包含许多不同纵横比的图片。我希望图像在幻灯片中居中。我该怎么做,或者更好的是,我如何自动调整 slider 的大小? 最佳答案 解决中心问题 .bx-wrapper img {
我有一个想要实现的特定布局,但我不知道如何让它在多种屏幕尺寸上稳健地工作。 关键思想是 TextViews 中的信息很重要,而 ImageView 是装饰性的。我希望根据用户屏幕尺寸(最大尺寸)调整
我在响应式网站 ( http://goo.gl/asEovC ) 上运行了来自 labnol.org 的代码: ad = document.getElementById('google-a
我是一名优秀的程序员,十分优秀!