Commit e085da79 authored by Yury Hayeu's avatar Yury Hayeu Committed by Tomáš Oberhuber
Browse files

Change initial condition of heat map solvers

parent 3604c10e
Loading
Loading
Loading
Loading
+10 −5
Original line number Diff line number Diff line
@@ -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;
@@ -27,13 +27,13 @@ public:
      Parameters(const TNL::Config::ParameterContainer &parameters);
      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) {}

@@ -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);
@@ -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")),
+9 −2
Original line number Diff line number Diff line
@@ -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);
@@ -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");

@@ -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);
         };
+5 −2
Original line number Diff line number Diff line
@@ -365,7 +365,10 @@ bool HeatmapSolver<Real>::solve(const HeatmapSolver<Real>::Parameters &params) 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
@@ -383,7 +386,7 @@ bool HeatmapSolver<Real>::solve(const HeatmapSolver<Real>::Parameters &params) 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 };
+5 −2
Original line number Diff line number Diff line
@@ -51,7 +51,10 @@ bool HeatmapSolver<Real>::solve(const HeatmapSolver<Real>::Parameters &params) 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
   {
@@ -60,7 +63,7 @@ bool HeatmapSolver<Real>::solve(const HeatmapSolver<Real>::Parameters &params) 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);
+5 −2
Original line number Diff line number Diff line
@@ -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();
@@ -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