小编Mge*_*etz的帖子

如何使用PETSc可扩展非线性方程求解器设置三维有限元求解器?

在3.3他们有一个炉排新闻 - 在GPU上仅使用PETC SNES进行FEM解决的一个例子.我是PETSc的新手并且有一个问题 - 我需要在3d空间中创建一个球体并对其施加力...所以我需要一个三维有限元模块(如果可能的话,在GPU上,我的情况下不需要MPI).然而,当我看到他们提供的简单例子时,我有点伤痕累累:

static const char help[] = "Testbed for FEM operations on the GPU.\n\n";

#include<petscdmplex.h>
#include<petscsnes.h>

#define NUM_FIELDS 1
PetscInt spatialDim = 0;

typedef enum {LAPLACIAN = 0, ELASTICITY} OpType;

typedef struct {
  PetscFEM      fem;               /* REQUIRED to use DMPlexComputeResidualFEM() */
  DM            dm;                /* The solution DM */
  PetscInt      debug;             /* The debugging level */
  PetscMPIInt   rank;              /* The process rank */
  PetscMPIInt   numProcs;          /* The number of processes */
  PetscInt …
Run Code Online (Sandbox Code Playgroud)

c 3d petsc

5
推荐指数
1
解决办法
1040
查看次数

嵌套循环,内循环并行化,重用线程

免责声明:以下示例只是一个快速了解问题的虚拟示例.如果您正在考虑现实问题,请考虑任何动态编程.

问题: 我们有一个n*m矩阵,我们想要复制上一行中的元素,如下面的代码所示:

for (i = 1; i < n; i++)
    for (j = 0; j < m; j++)
        x[i][j] = x[i-1][j];
Run Code Online (Sandbox Code Playgroud)

方法: 必须按顺序执行外循环迭代,它们将按顺序执行.内环可以并行化.我们希望最小化创建和杀死线程的开销,因此我们只想创建一次线程团队,但是,这似乎是OpenMP中不可能完成的任务.

#pragma omp parallel private(j)
{
   for (i = 1; i < n; i++)
   {   
      #pragma omp for scheduled(dynamic)
      for (j = 0; j < m; j++)
         x[i][j] = x[i-1][j];
   }
}
Run Code Online (Sandbox Code Playgroud)

当我们ordered在外部循环上应用选项时,代码将以顺序方式执行,因此不会有性能提升.我正在寻找上述场景的解决方案,即使我不得不使用一些解决方法.

我正在添加我的实际代码.这实际上比seq慢.版.请查阅:

/* load input */
for (i = 1; i <= n; i++)
    scanf ("%d %d", &in[i][W], &in[i][V]);

/* init */
for …
Run Code Online (Sandbox Code Playgroud)

c optimization multithreading gcc openmp

5
推荐指数
1
解决办法
525
查看次数

tvOS的游戏中心没有出现

我目前在我的iOS目标中使用Game Center,但没有在tvOS目标中工作.

我已经添加了Leaderboard图像并将标识符放在Xcode中:

在此输入图像描述

这是我用来调出排行榜并启动播放器的课程.它叫做GameKitHelper.swift:

import UIKit
import Foundation
import GameKit

let PresentAuthenticationViewController = "PresentAuthenticationViewController"

class GameKitHelper: NSObject {

  static let sharedInstance = GameKitHelper()


  var authenticationViewController: UIViewController?
  var gameCenterEnabled = false

  func authenticateLocalPlayer() {

    //1
    let localPlayer = GKLocalPlayer()
    localPlayer.authenticateHandler = {(viewController, error) in

        if viewController != nil {
            //2
            self.authenticationViewController = viewController

                 NSNotificationCenter.defaultCenter().postNotificationName(PresentAuthenticationViewController, object: self)
        } 
    else if error == nil {
            //3
            self.gameCenterEnabled = true
        }
    }

 }

 func reportAchievements(achievements: [GKAchievement], errorHandler: ((NSError?)->Void)? = nil) {
    guard gameCenterEnabled else …
Run Code Online (Sandbox Code Playgroud)

game-center sprite-kit swift tvos

5
推荐指数
1
解决办法
295
查看次数

Fread 字节数限制

fread一次可以读取的字节数是否有限制?或者我可以读取任何尺寸的我想要充入我的指针?例如,我可以使用 fread 读取一次 50MB 的文件并将其装入字符指针吗?

c++ memory size fread

4
推荐指数
1
解决办法
5771
查看次数

"import std;"的目的 在C++中

我在cppdepend网站上看到了以下一小段代码.

import std; // Module import directive.
int main() 
{
    std::cout<<"Hello World\n";
}
Run Code Online (Sandbox Code Playgroud)

那么,import std;C++ 的目的是什么?如何使用import std;而不是using namespace std;在C++中?

我试图在G ++编译器中编译程序,但是我收到了一个错误.

c++ c++-modules

4
推荐指数
1
解决办法
802
查看次数

Boost :: variant与无序映射

有人可以告诉我,我如何获得boost :: Variant处理无序地图?

typedef boost::variant<long, string, double> lut_value;

unordered_map<lut_value, short> table;

我认为有一个用于boost :: variant的哈希函数,对吗?

编译器说:

./src/lookup/HashMap.o:在函数`std :: __ detail :: _ Hash_code_base中,std :: allocator>,double,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_ ,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail: :variant :: void_,boost :: detail :: variant :: void_,boost :: detail :: variant :: void_,boost :: detail …

boost unordered-map boost-variant c++11

3
推荐指数
1
解决办法
1531
查看次数

限制访问功能

我有一个带有函数的泛型类,我想在编译时将其限制为浮点类型的实例.如下例所示:

template <typename T>
class ClassName
{
    // instance variables, etc..

    void some_method()
    {
        // do stuff, but only for floating point types
    }
}
Run Code Online (Sandbox Code Playgroud)

如何让编译器拒绝some_method用于非浮点类型的ClassName?

我一直在看SFINAE,但我根本无法让它工作,所以经过几个小时的失败后,我正在寻求你的帮助.

谢谢 :)

c++ traits type-traits c++11

3
推荐指数
2
解决办法
285
查看次数

C++ 中的 Fortran 多维数组

我试图在 C++ Fortran 互操作程序中将多维 Fortran 数组传递给 C++ 程序。我对如何将数组从 Fortran 传递到 C++ 有一个基本的想法;您将数组的位置从 Fortran 传递给 C++。然后 C++ 采用扁平数组,你必须做一些代数计算才能找到给定多维数组中的元素。

我能够在标量数组上成功测试这个想法。在 C++ 中找出元素的索引并不难,因为它是从 Fortran 索引线性映射到 C++ 的,偏移量为 -1。Fortran 和 C++ 的示例代码是:

! Fortran main program
program fprogram

integer :: i
real*8 :: array(2)

array(1) = 1.0
array(2) = 2.0

! call cpp function
call cppfuncarray(array, 2)
write(*,*) array

end program
Run Code Online (Sandbox Code Playgroud)
! Fortran main program
program fprogram

integer :: i
real*8 :: array(2)

array(1) = 1.0
array(2) = 2.0

! call cpp function
call …
Run Code Online (Sandbox Code Playgroud)

c++ arrays fortran multidimensional-array fortran90

3
推荐指数
1
解决办法
2929
查看次数

在 c# asp.net 中获取列表框的选定值

在我的 ascx 中,我有一个列表框控件定义为:

<asp:ListBox id="Listbox1" rows="1" runat="server" AutoPostBack="True" OnSelectedIndexChanged="btn_click" />
Run Code Online (Sandbox Code Playgroud)

在我的 ascx.cs 中,我使用以下内容填充列表框:

Listbox1.Items.Add(new ListItem("textVar", "valueVar"));
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用以下方法读取选定的值:

label1.Text = Listbox1.SelectedValue.ToString();
Run Code Online (Sandbox Code Playgroud)

但这会导致 Label1.Text 中出现空字符串。有任何想法吗?我还是 .NET 和 C# 的新手,所以如果这是基本的,我深表歉意。似乎它应该是一件简单的事情任何帮助将不胜感激。

.net c# asp.net listbox

2
推荐指数
1
解决办法
8983
查看次数

布尔变量的线程同步

可以说我在一个类中有2个Thread方法A.其中一个线程一直在运行,并且正在检查是否设置了成员变量.如果此成员变量设置为true,则应启动另一个线程.第二个线程mThread2通过检查变量来自行停止mRunThread2.

现在的问题是:是否需要对布尔变量进行互斥?写入变量需要多个汇编指令,所以在这一点上我需要同步.

class A {
public:
    A() : mRunThread1(true) {
        mThread1 = std::thread(&A::DoWork1(), this);
    }

    ~A() {
        mRunThread1 = false;
    }

    void Start2() { mRunThread2 = true; }
    void Stop2()  { mRunThread2 = false; }

private:

    bool        mRunThread1;
    bool        mRunThread2;
    std::thread mThread1;
    std::thread mThread2;

    void DoWork1() {
        while (mRunThread1) {
            bool lastState = false;
            if (mRunThread2 && !lastState) {
                if (mThread2.joinable()) mThread2.join();
                mThread2 = std::thread(&A::DoWork2(), this);
            }
            lastState = mRunThread2;
        }
    }

    void DoWork2() …
Run Code Online (Sandbox Code Playgroud)

c++ multithreading

2
推荐指数
1
解决办法
510
查看次数