Loading src/Benchmarks/HeatEquationGrid/Base/HeatmapSolver.h +10 −5 Original line number Diff line number Diff line Loading @@ -19,7 +19,7 @@ public: public: const int xSize, ySize; const Real xDomainSize, yDomainSize; const Real sigma; const Real alpha, beta, gamma; const Real timeStep, finalTime; const bool outputData; const bool verbose; Loading @@ -27,13 +27,13 @@ public: Parameters(const TNL::Config::ParameterContainer ¶meters); Parameters(const int xSize, const int ySize, const Real xDomainSize, const Real yDomainSize, const Real sigma, const Real alpha, const Real beta, const Real gamma, const Real timeStep, const Real finalTime, const bool outputData, const bool verbose): xSize(xSize), ySize(ySize), xDomainSize(xDomainSize), yDomainSize(yDomainSize), sigma(sigma), alpha(alpha), beta(beta), gamma(gamma), timeStep(timeStep), finalTime(finalTime), outputData(outputData), verbose(verbose) {} Loading Loading @@ -66,7 +66,10 @@ TNL::Config::ConfigDescription HeatmapSolver<Real>::Parameters::makeInputConfig( config.addEntry<Real>("domain-x-size", "Domain size along x-axis.", 4.0); config.addEntry<Real>("domain-y-size", "Domain size along y-axis.", 4.0); config.addEntry<Real>("sigma", "Sigma in exponential initial condition.", 0.5); config.addDelimiter( "Initial condition settings ( (x^2/alpha + y^2/beta) + gamma)):" ); config.addEntry< double >( "alpha", "Alpha value in initial condition", -0.05 ); config.addEntry< double >( "beta", "Beta value in initial condition", -0.05 ); config.addEntry< double >( "gamma", "Gamma key in initial condition", 15 ); config.addEntry<Real>("time-step", "Time step. By default it is proportional to one over space step square.", 0.000005); config.addEntry<Real>("final-time", "Final time of the simulation.", 0.36); Loading @@ -80,7 +83,9 @@ HeatmapSolver<Real>::Parameters::Parameters(const TNL::Config::ParameterContaine ySize(parameters.getParameter<int>("grid-y-size")), xDomainSize(parameters.getParameter<Real>("domain-x-size")), yDomainSize(parameters.getParameter<Real>("domain-y-size")), sigma(parameters.getParameter<Real>("sigma")), alpha(parameters.getParameter<Real>("alpha")), beta(parameters.getParameter<Real>("beta")), gamma(parameters.getParameter<Real>("gamma")), timeStep(parameters.getParameter<Real>("time-step")), finalTime(parameters.getParameter<Real>("final-time")), outputData(parameters.getParameter<bool>("outputData")), Loading src/Benchmarks/HeatEquationGrid/Base/HeatmapSolverBenchmark.h +9 −2 Original line number Diff line number Diff line Loading @@ -67,6 +67,11 @@ TNL::Config::ConfigDescription HeatmapSolverBenchmark::makeInputConfig() { config.addEntry<double>("domain-x-size", "Domain size along x-axis.", 2.0); config.addEntry<double>("domain-y-size", "Domain size along y-axis.", 2.0); config.addDelimiter( "Initial condition settings ( (x^2/alpha + y^2/beta) + gamma)):" ); config.addEntry< double >( "alpha", "Alpha value in initial condition", -0.05 ); config.addEntry< double >( "beta", "Beta value in initial condition", -0.05 ); config.addEntry< double >( "gamma", "Gamma key in initial condition", 15 ); config.addEntry<double>("sigma", "Sigma in exponential initial condition.", 1.0); config.addEntry<double>("time-step", "Time step. By default it is proportional to one over space step square.", 0.000001); Loading Loading @@ -100,7 +105,9 @@ void HeatmapSolverBenchmark::runBenchmark(TNL::Benchmarks::Benchmark<>& benchmar const TNL::Config::ParameterContainer& parameters) const { Real xDomainSize = parameters.getParameter<Real>("domain-x-size"); Real yDomainSize = parameters.getParameter<Real>("domain-y-size"); Real sigma = parameters.getParameter<Real>("sigma"); Real alpha = parameters.getParameter<Real>("alpha"); Real beta = parameters.getParameter<Real>("beta"); Real gamma = parameters.getParameter<Real>("gamma"); Real timeStep = parameters.getParameter<Real>("time-step"); Real finalTime = parameters.getParameter<Real>("final-time"); Loading @@ -120,7 +127,7 @@ void HeatmapSolverBenchmark::runBenchmark(TNL::Benchmarks::Benchmark<>& benchmar benchmark.setDatasetSize(xSize * ySize); auto lambda = [=]() { typename HeatmapSolver<Real>::Parameters params(xSize, ySize, xDomainSize, yDomainSize, sigma, timeStep, finalTime, false, false); typename HeatmapSolver<Real>::Parameters params(xSize, ySize, xDomainSize, yDomainSize, alpha, beta, gamma, timeStep, finalTime, false, false); exec<Real, Device>(params); }; Loading src/Benchmarks/HeatEquationGrid/HeatmapNDimGrid/implementation.h +5 −2 Original line number Diff line number Diff line Loading @@ -365,7 +365,10 @@ bool HeatmapSolver<Real>::solve(const HeatmapSolver<Real>::Parameters ¶ms) c auto timestep = params.timeStep ? params.timeStep : std::min(hx * hx, hy * hy); auto xDomainSize = params.xDomainSize; auto yDomainSize = params.yDomainSize; auto sigma = params.sigma; auto alpha = params.alpha; auto beta = params.beta; auto gamma = params.gamma; TNL::Containers::Array<Real, Device> ux(entitiesCount), // data at step u aux(entitiesCount);// data at step u + 1 Loading @@ -383,7 +386,7 @@ bool HeatmapSolver<Real>::solve(const HeatmapSolver<Real>::Parameters ¶ms) c auto x = position[0] * hx - xDomainSize / 2; auto y = position[1] * hx - yDomainSize / 2; uxView[index] = exp(sigma * (x * x + y * y)); uxView[index] = TNL::max((x * x / alpha) + (y * y / beta) + gamma, 0); }; const Container<2, bool> direction{ false, false }; Loading src/Benchmarks/HeatEquationGrid/HeatmapParallelFor/implementation.h +5 −2 Original line number Diff line number Diff line Loading @@ -51,7 +51,10 @@ bool HeatmapSolver<Real>::solve(const HeatmapSolver<Real>::Parameters ¶ms) c auto xSize = params.xSize; auto xDomainSize = params.xDomainSize; auto yDomainSize = params.yDomainSize; auto sigma = params.sigma; auto alpha = params.alpha; auto beta = params.beta; auto gamma = params.gamma; auto init = [=] __cuda_callable__(int i, int j) mutable { Loading @@ -60,7 +63,7 @@ bool HeatmapSolver<Real>::solve(const HeatmapSolver<Real>::Parameters ¶ms) c auto x = i * hx - xDomainSize / 2.; auto y = j * hy - yDomainSize / 2.; uxView[index] = exp(sigma * (x * x + y * y)); uxView[index] = TNL::max((x * x / alpha) + (y * y / beta) + gamma, 0); }; TNL::Algorithms::ParallelFor2D<Device>::exec(1, 1, params.xSize - 1, params.ySize - 1, init); Loading src/Benchmarks/HeatEquationGrid/HeatmapTNLGrid/implementation.h +5 −2 Original line number Diff line number Diff line Loading @@ -37,7 +37,10 @@ bool HeatmapSolver<Real>::solve(const HeatmapSolver<Real>::Parameters& params) c auto xDomainSize = params.xDomainSize; auto yDomainSize = params.yDomainSize; auto sigma = params.sigma; auto alpha = params.alpha; auto beta = params.beta; auto gamma = params.gamma; auto init = [=] __cuda_callable__(const typename Grid2D::EntityType<0> &entity) mutable { auto index = entity.getIndex(); Loading @@ -45,7 +48,7 @@ bool HeatmapSolver<Real>::solve(const HeatmapSolver<Real>::Parameters& params) c auto x = entity.getCoordinates().x() * hx - xDomainSize / 2.; auto y = entity.getCoordinates().y() * hy - yDomainSize / 2.; uxView[index] = exp(sigma * (x * x + y * y)); uxView[index] = TNL::max((x * x / alpha) + (y * y / beta) + gamma, 0); }; grid.template forInterior<0>(init); Loading Loading
src/Benchmarks/HeatEquationGrid/Base/HeatmapSolver.h +10 −5 Original line number Diff line number Diff line Loading @@ -19,7 +19,7 @@ public: public: const int xSize, ySize; const Real xDomainSize, yDomainSize; const Real sigma; const Real alpha, beta, gamma; const Real timeStep, finalTime; const bool outputData; const bool verbose; Loading @@ -27,13 +27,13 @@ public: Parameters(const TNL::Config::ParameterContainer ¶meters); Parameters(const int xSize, const int ySize, const Real xDomainSize, const Real yDomainSize, const Real sigma, const Real alpha, const Real beta, const Real gamma, const Real timeStep, const Real finalTime, const bool outputData, const bool verbose): xSize(xSize), ySize(ySize), xDomainSize(xDomainSize), yDomainSize(yDomainSize), sigma(sigma), alpha(alpha), beta(beta), gamma(gamma), timeStep(timeStep), finalTime(finalTime), outputData(outputData), verbose(verbose) {} Loading Loading @@ -66,7 +66,10 @@ TNL::Config::ConfigDescription HeatmapSolver<Real>::Parameters::makeInputConfig( config.addEntry<Real>("domain-x-size", "Domain size along x-axis.", 4.0); config.addEntry<Real>("domain-y-size", "Domain size along y-axis.", 4.0); config.addEntry<Real>("sigma", "Sigma in exponential initial condition.", 0.5); config.addDelimiter( "Initial condition settings ( (x^2/alpha + y^2/beta) + gamma)):" ); config.addEntry< double >( "alpha", "Alpha value in initial condition", -0.05 ); config.addEntry< double >( "beta", "Beta value in initial condition", -0.05 ); config.addEntry< double >( "gamma", "Gamma key in initial condition", 15 ); config.addEntry<Real>("time-step", "Time step. By default it is proportional to one over space step square.", 0.000005); config.addEntry<Real>("final-time", "Final time of the simulation.", 0.36); Loading @@ -80,7 +83,9 @@ HeatmapSolver<Real>::Parameters::Parameters(const TNL::Config::ParameterContaine ySize(parameters.getParameter<int>("grid-y-size")), xDomainSize(parameters.getParameter<Real>("domain-x-size")), yDomainSize(parameters.getParameter<Real>("domain-y-size")), sigma(parameters.getParameter<Real>("sigma")), alpha(parameters.getParameter<Real>("alpha")), beta(parameters.getParameter<Real>("beta")), gamma(parameters.getParameter<Real>("gamma")), timeStep(parameters.getParameter<Real>("time-step")), finalTime(parameters.getParameter<Real>("final-time")), outputData(parameters.getParameter<bool>("outputData")), Loading
src/Benchmarks/HeatEquationGrid/Base/HeatmapSolverBenchmark.h +9 −2 Original line number Diff line number Diff line Loading @@ -67,6 +67,11 @@ TNL::Config::ConfigDescription HeatmapSolverBenchmark::makeInputConfig() { config.addEntry<double>("domain-x-size", "Domain size along x-axis.", 2.0); config.addEntry<double>("domain-y-size", "Domain size along y-axis.", 2.0); config.addDelimiter( "Initial condition settings ( (x^2/alpha + y^2/beta) + gamma)):" ); config.addEntry< double >( "alpha", "Alpha value in initial condition", -0.05 ); config.addEntry< double >( "beta", "Beta value in initial condition", -0.05 ); config.addEntry< double >( "gamma", "Gamma key in initial condition", 15 ); config.addEntry<double>("sigma", "Sigma in exponential initial condition.", 1.0); config.addEntry<double>("time-step", "Time step. By default it is proportional to one over space step square.", 0.000001); Loading Loading @@ -100,7 +105,9 @@ void HeatmapSolverBenchmark::runBenchmark(TNL::Benchmarks::Benchmark<>& benchmar const TNL::Config::ParameterContainer& parameters) const { Real xDomainSize = parameters.getParameter<Real>("domain-x-size"); Real yDomainSize = parameters.getParameter<Real>("domain-y-size"); Real sigma = parameters.getParameter<Real>("sigma"); Real alpha = parameters.getParameter<Real>("alpha"); Real beta = parameters.getParameter<Real>("beta"); Real gamma = parameters.getParameter<Real>("gamma"); Real timeStep = parameters.getParameter<Real>("time-step"); Real finalTime = parameters.getParameter<Real>("final-time"); Loading @@ -120,7 +127,7 @@ void HeatmapSolverBenchmark::runBenchmark(TNL::Benchmarks::Benchmark<>& benchmar benchmark.setDatasetSize(xSize * ySize); auto lambda = [=]() { typename HeatmapSolver<Real>::Parameters params(xSize, ySize, xDomainSize, yDomainSize, sigma, timeStep, finalTime, false, false); typename HeatmapSolver<Real>::Parameters params(xSize, ySize, xDomainSize, yDomainSize, alpha, beta, gamma, timeStep, finalTime, false, false); exec<Real, Device>(params); }; Loading
src/Benchmarks/HeatEquationGrid/HeatmapNDimGrid/implementation.h +5 −2 Original line number Diff line number Diff line Loading @@ -365,7 +365,10 @@ bool HeatmapSolver<Real>::solve(const HeatmapSolver<Real>::Parameters ¶ms) c auto timestep = params.timeStep ? params.timeStep : std::min(hx * hx, hy * hy); auto xDomainSize = params.xDomainSize; auto yDomainSize = params.yDomainSize; auto sigma = params.sigma; auto alpha = params.alpha; auto beta = params.beta; auto gamma = params.gamma; TNL::Containers::Array<Real, Device> ux(entitiesCount), // data at step u aux(entitiesCount);// data at step u + 1 Loading @@ -383,7 +386,7 @@ bool HeatmapSolver<Real>::solve(const HeatmapSolver<Real>::Parameters ¶ms) c auto x = position[0] * hx - xDomainSize / 2; auto y = position[1] * hx - yDomainSize / 2; uxView[index] = exp(sigma * (x * x + y * y)); uxView[index] = TNL::max((x * x / alpha) + (y * y / beta) + gamma, 0); }; const Container<2, bool> direction{ false, false }; Loading
src/Benchmarks/HeatEquationGrid/HeatmapParallelFor/implementation.h +5 −2 Original line number Diff line number Diff line Loading @@ -51,7 +51,10 @@ bool HeatmapSolver<Real>::solve(const HeatmapSolver<Real>::Parameters ¶ms) c auto xSize = params.xSize; auto xDomainSize = params.xDomainSize; auto yDomainSize = params.yDomainSize; auto sigma = params.sigma; auto alpha = params.alpha; auto beta = params.beta; auto gamma = params.gamma; auto init = [=] __cuda_callable__(int i, int j) mutable { Loading @@ -60,7 +63,7 @@ bool HeatmapSolver<Real>::solve(const HeatmapSolver<Real>::Parameters ¶ms) c auto x = i * hx - xDomainSize / 2.; auto y = j * hy - yDomainSize / 2.; uxView[index] = exp(sigma * (x * x + y * y)); uxView[index] = TNL::max((x * x / alpha) + (y * y / beta) + gamma, 0); }; TNL::Algorithms::ParallelFor2D<Device>::exec(1, 1, params.xSize - 1, params.ySize - 1, init); Loading
src/Benchmarks/HeatEquationGrid/HeatmapTNLGrid/implementation.h +5 −2 Original line number Diff line number Diff line Loading @@ -37,7 +37,10 @@ bool HeatmapSolver<Real>::solve(const HeatmapSolver<Real>::Parameters& params) c auto xDomainSize = params.xDomainSize; auto yDomainSize = params.yDomainSize; auto sigma = params.sigma; auto alpha = params.alpha; auto beta = params.beta; auto gamma = params.gamma; auto init = [=] __cuda_callable__(const typename Grid2D::EntityType<0> &entity) mutable { auto index = entity.getIndex(); Loading @@ -45,7 +48,7 @@ bool HeatmapSolver<Real>::solve(const HeatmapSolver<Real>::Parameters& params) c auto x = entity.getCoordinates().x() * hx - xDomainSize / 2.; auto y = entity.getCoordinates().y() * hy - yDomainSize / 2.; uxView[index] = exp(sigma * (x * x + y * y)); uxView[index] = TNL::max((x * x / alpha) + (y * y / beta) + gamma, 0); }; grid.template forInterior<0>(init); Loading