-
Soeren Peters authoredSoeren Peters authored
BasicCalculator.h 3.56 KiB
//=======================================================================================
// ____ ____ __ ______ __________ __ __ __ __
// \ \ | | | | | _ \ |___ ___| | | | | / \ | |
// \ \ | | | | | |_) | | | | | | | / \ | |
// \ \ | | | | | _ / | | | | | | / /\ \ | |
// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____
// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______|
// \ \ | | ________________________________________________________________
// \ \ | | | ______________________________________________________________|
// \ \| | | | __ __ __ __ ______ _______
// \ | | |_____ | | | | | | | | | _ \ / _____)
// \ | | _____| | | | | | | | | | | \ \ \_______
// \ | | | | |_____ | \_/ | | | | |_/ / _____ |
// \ _____| |__| |________| \_______/ |__| |______/ (_______/
//
// This file is part of VirtualFluids. VirtualFluids is free software: you can
// redistribute it and/or modify it under the terms of the GNU General Public
// License as published by the Free Software Foundation, either version 3 of
// the License, or (at your option) any later version.
//
// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with VirtualFluids (see COPYING.txt). If not, see <http://www.gnu.org/licenses/>.
//
//! \file BasicCalculator.h
//! \ingroup Grid
//! \author Konstantin Kutscher
//=======================================================================================
#ifndef BasicCalculator_h__
#define BasicCalculator_h__
#include "Calculator.h"
class Block3DConnector;
//! \class BasicCalculator
//! \brief Class implements basic functionality with MPI + OpenMP parallelization for main calculation loop
//! \author Konstantin Kutscher
class BasicCalculator : public Calculator
{
public:
BasicCalculator(SPtr<Grid3D> grid, SPtr<UbScheduler> additionalGhostLayerUpdateScheduler, int numberOfTimeSteps);
virtual ~BasicCalculator();
virtual void calculate();
protected:
void calculateBlocks(int startLevel, int maxInitLevel, int calcStep);
void swapDistributions(int startLevel, int maxInitLevel);
void exchangeBlockData(int startLevel, int maxInitLevel);
void connectorsPrepareLocal(std::vector< SPtr<Block3DConnector> >& connectors);
void connectorsSendLocal(std::vector< SPtr<Block3DConnector> >& connectors);
void connectorsReceiveLocal(std::vector< SPtr<Block3DConnector> >& connectors);
void connectorsPrepareRemote(std::vector< SPtr<Block3DConnector> >& connectors);
void connectorsSendRemote(std::vector< SPtr<Block3DConnector> >& connectors);
void connectorsReceiveRemote(std::vector< SPtr<Block3DConnector> >& connectors);
void interpolation(int startLevel, int maxInitLevel);
void applyPreCollisionBC(int startLevel, int maxInitLevel);
void applyPostCollisionBC(int startLevel, int maxInitLevel);
private:
};
#endif // BasicCalculator_h__