VirtualFluids 0.2.0
Parallel CFD LBM Solver
Loading...
Searching...
No Matches
PostProcessingStrategyL2NormTest.cpp
Go to the documentation of this file.
1//=======================================================================================
2// ____ ____ __ ______ __________ __ __ __ __
3// \ \ | | | | | _ \ |___ ___| | | | | / \ | |
4// \ \ | | | | | |_) | | | | | | | / \ | |
5// \ \ | | | | | _ / | | | | | | / /\ \ | |
6// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____
7// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______|
8// \ \ | | ________________________________________________________________
9// \ \ | | | ______________________________________________________________|
10// \ \| | | | __ __ __ __ ______ _______
11// \ | | |_____ | | | | | | | | | _ \ / _____)
12// \ | | _____| | | | | | | | | | | \ \ \_______
13// \ | | | | |_____ | \_/ | | | | |_/ / _____ |
14// \ _____| |__| |________| \_______/ |__| |______/ (_______/
15//
16// This file is part of VirtualFluids. VirtualFluids is free software: you can
17// redistribute it and/or modify it under the terms of the GNU General Public
18// License as published by the Free Software Foundation, either version 3 of
19// the License, or (at your option) any later version.
20//
21// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
22// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
23// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
24// for more details.
25//
26// SPDX-License-Identifier: GPL-3.0-or-later
27// SPDX-FileCopyrightText: Copyright © VirtualFluids Project contributors, see AUTHORS.md in root folder
28//
32//=======================================================================================
34
36
39
42
43std::shared_ptr<L2NormPostProcessingStrategy> L2NormPostProcessingStrategy::getNewInstance(std::shared_ptr<SimulationResults> simResult, std::shared_ptr<AnalyticalResults> analyticalResult, std::shared_ptr<L2NormTestParameterStruct> testPara, std::shared_ptr<L2NormCalculatorFactory> factory, std::vector<std::string> dataToCalcTests)
44{
45 return std::shared_ptr<L2NormPostProcessingStrategy>(new L2NormPostProcessingStrategy(simResult, analyticalResult, testPara, factory, dataToCalcTests));
46}
47
48L2NormPostProcessingStrategy::L2NormPostProcessingStrategy(std::shared_ptr<SimulationResults> simResult, std::shared_ptr<AnalyticalResults> analyticalResult, std::shared_ptr<L2NormTestParameterStruct> testPara, std::shared_ptr<L2NormCalculatorFactory> factory, std::vector<std::string> dataToCalcTests)
49 : PostProcessingStrategyImp(simResult), analyticalResult(analyticalResult), dataToCalculate(dataToCalcTests)
50{
51 isEvaluated = false;
52 basicTimeStep = testPara->basicTimeStep;
53 divergentTimeStep = testPara->divergentTimeStep;
54 normalizeData = testPara->normalizeData;
55
56 l2NormBasic.resize(dataToCalculate.size());
57 l2NormDivergent.resize(dataToCalculate.size());
58 for (int i = 0; i < l2NormBasic.size(); i++) {
59 l2NormBasic.at(i).resize(normalizeData.size());
60 l2NormDivergent.at(i).resize(normalizeData.size());
61 }
62
63 for (int i = 0; i < normalizeData.size(); i++)
64 l2Normcalculator.push_back(factory->makeL2NormCalculator(normalizeData.at(i)));
65}
66
68{
69 if (!isEvaluated) {
70 analyticalResult->calc(simResult);
71 int bS = calcTimeStepInResults(basicTimeStep);
72 int dS = calcTimeStepInResults(divergentTimeStep);
73
74 for (int i = 0; i < dataToCalculate.size(); i++) {
75 for (int j = 0; j < normalizeData.size(); j++) {
76 if (dataToCalculate.at(i) == "Vx") {
77 l2NormBasic.at(i).at(j) = l2Normcalculator.at(j)->calc(analyticalResult->getVx().at(bS), simResult->getVx().at(bS), simResult->getLevels().at(bS), analyticalResult->getNumberOfXNodes(), analyticalResult->getNumberOfZNodes(), analyticalResult->getL0());
78 l2NormDivergent.at(i).at(j) = l2Normcalculator.at(j)->calc(analyticalResult->getVx().at(dS), simResult->getVx().at(dS), simResult->getLevels().at(dS), analyticalResult->getNumberOfXNodes(), analyticalResult->getNumberOfZNodes(), analyticalResult->getL0());
79 }
80 if (dataToCalculate.at(i) == "Vy") {
81 l2NormBasic.at(i).at(j) = l2Normcalculator.at(j)->calc(analyticalResult->getVy().at(bS), simResult->getVy().at(bS), simResult->getLevels().at(bS), analyticalResult->getNumberOfXNodes(), analyticalResult->getNumberOfZNodes(), analyticalResult->getL0());
82 l2NormDivergent.at(i).at(j) = l2Normcalculator.at(j)->calc(analyticalResult->getVy().at(dS), simResult->getVy().at(dS), simResult->getLevels().at(dS), analyticalResult->getNumberOfXNodes(), analyticalResult->getNumberOfZNodes(), analyticalResult->getL0());
83 }
84 if (dataToCalculate.at(i) == "Vz") {
85 l2NormBasic.at(i).at(j) = l2Normcalculator.at(j)->calc(analyticalResult->getVz().at(bS), simResult->getVz().at(bS), simResult->getLevels().at(bS), analyticalResult->getNumberOfXNodes(), analyticalResult->getNumberOfZNodes(), analyticalResult->getL0());
86 l2NormDivergent.at(i).at(j) = l2Normcalculator.at(j)->calc(analyticalResult->getVz().at(dS), simResult->getVz().at(dS), simResult->getLevels().at(dS), analyticalResult->getNumberOfXNodes(), analyticalResult->getNumberOfZNodes(), analyticalResult->getL0());
87 }
88 if (dataToCalculate.at(i) == "Press") {
89 l2NormBasic.at(i).at(j) = l2Normcalculator.at(j)->calc(analyticalResult->getPress().at(bS), simResult->getPress().at(bS), simResult->getLevels().at(bS), analyticalResult->getNumberOfXNodes(), analyticalResult->getNumberOfZNodes(), analyticalResult->getL0());
90 l2NormDivergent.at(i).at(j) = l2Normcalculator.at(j)->calc(analyticalResult->getPress().at(dS), simResult->getPress().at(dS), simResult->getLevels().at(dS), analyticalResult->getNumberOfXNodes(), analyticalResult->getNumberOfZNodes(), analyticalResult->getL0());
91 }
92 if (dataToCalculate.at(i) == "Rho") {
93 l2NormBasic.at(i).at(j) = l2Normcalculator.at(j)->calc(analyticalResult->getRho().at(bS), simResult->getRho().at(bS), simResult->getLevels().at(bS), analyticalResult->getNumberOfXNodes(), analyticalResult->getNumberOfZNodes(), analyticalResult->getL0());
94 l2NormDivergent.at(i).at(j) = l2Normcalculator.at(j)->calc(analyticalResult->getRho().at(dS), simResult->getRho().at(dS), simResult->getLevels().at(dS), analyticalResult->getNumberOfXNodes(), analyticalResult->getNumberOfZNodes(), analyticalResult->getL0());
95 }
96 }
97 }
98 isEvaluated = true;
99 }
100}
101
102std::vector<double> L2NormPostProcessingStrategy::getL2Norm(std::string aDataToCalc, std::string aNormalizeData)
103{
104 for (int i = 0; i < dataToCalculate.size(); i++) {
105 for (int j = 0; j < normalizeData.size(); j++) {
106 if (aDataToCalc == dataToCalculate.at(i) && aNormalizeData == normalizeData.at(j)) {
107 std::vector<double> v;
108 v.push_back(l2NormBasic.at(i).at(j));
109 v.push_back(l2NormDivergent.at(i).at(j));
110 return v;
111 }
112 }
113 }
114
115 return std::vector<double>();
116}
117
119{
120 for (int i = 0; i < normalizeData.size(); i++) {
121 if (aNormalizeData == normalizeData.at(i))
122 return l2Normcalculator.at(i)->getErrorMessage();
123 }
124
125 return std::string();
126}
127
std::shared_ptr< SimulationResults > simResult
std::string getErrorMessage(std::string aNormalizeData)
std::vector< double > getL2Norm(std::string dataToCalc, std::string normalizeData)
static std::shared_ptr< L2NormPostProcessingStrategy > getNewInstance(std::shared_ptr< SimulationResults > simResult, std::shared_ptr< AnalyticalResults > analyticalResult, std::shared_ptr< L2NormTestParameterStruct > testPara, std::shared_ptr< L2NormCalculatorFactory > factory, std::vector< std::string > dataToCalcTests)
int calcTimeStepInResults(unsigned int timeStep)
std::shared_ptr< T > SPtr