代码拉取完成,页面将自动刷新
#include <OpFlow>
using namespace OpFlow;
int main() {
using Mesh = CartesianMesh<Meta::int_<1>>;
using Field = CartesianField<Real, Mesh>;
auto mesh = MeshBuilder<Mesh>().newMesh(101).setMeshOfDim(0, 0., 1.).build();
auto u = ExprBuilder<Field>()
.setMesh(mesh)
.setName("u")
.setBC(0, DimPos::start, BCType::Dirc, 0.)
.setBC(0, DimPos::end, BCType::Dirc, 0.)
.setLoc(LocOnMesh::Corner)
.build();
u.initBy([](auto&& i) { return 0.2 <= i[0] && i[0] <= 0.4 ? 1.0 : 0.0; });
const Real dt = 0.5e-2;
const Real c = 1.0;
Utils::TecplotASCIIStream uf("u.tec");
auto t0 = std::chrono::system_clock::now();
for (auto i = 0; i < 100; ++i) {
OP_INFO("Current step {}", i);
// Scheme 1: 1st order upwind scheme
u = u - dt * c * dx<D1FirstOrderBiasedDownwind>(u);
// Scheme 2: 5th order WENO (3rd order at jump) scheme, use 1st order upwind at boundary
// u = u - dt * c * d1<DecableOp<D1WENO53Downwind<0>, D1FirstOrderBiasedDownwind<0>>>(u);
uf << Utils::TimeStamp(i * dt) << u;
}
auto t1 = std::chrono::system_clock::now();
OP_INFO("Elapsed time: {}ms", std::chrono::duration_cast<std::chrono::milliseconds>(t1 - t0).count());
return 0;
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。