chore: remove legacy tests
This commit is contained in:
parent
28cb5416f5
commit
d436811e1c
@ -1,182 +0,0 @@
|
|||||||
using BenchmarkTools
|
|
||||||
using ClusterManagers
|
|
||||||
using CSV
|
|
||||||
using DataFrames
|
|
||||||
using Distributed
|
|
||||||
using Statistics
|
|
||||||
|
|
||||||
include("../TUG/src/TUG.jl")
|
|
||||||
using .TUG
|
|
||||||
|
|
||||||
# 1. Environment Setup
|
|
||||||
function setup_environment(num_procs::Int)
|
|
||||||
if num_procs > 0
|
|
||||||
if haskey(ENV, "SLURM_JOB_ID")
|
|
||||||
# Add SLURM processes
|
|
||||||
added_procs = addprocs(SlurmManager(num_procs), exclusive="")
|
|
||||||
else
|
|
||||||
# Add local processes
|
|
||||||
added_procs = addprocs(num_procs)
|
|
||||||
end
|
|
||||||
|
|
||||||
# Use remotecall to include TUG on each new worker
|
|
||||||
for proc in added_procs
|
|
||||||
remotecall_wait(include, proc, "../TUG/src/TUG.jl")
|
|
||||||
remotecall_wait(eval, proc, :(using .TUG))
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# 2. Test Case Definitions
|
|
||||||
function testBTCS100()::Tuple{Grid,Boundary}
|
|
||||||
rows::Int = 1024
|
|
||||||
cols::Int = 1000
|
|
||||||
|
|
||||||
alphaX = fill(1.25, rows, cols)
|
|
||||||
alphaY = fill(1.1, rows, cols)
|
|
||||||
alphaX[1:100, :] .= 0.5
|
|
||||||
alphaX[101:200, :] .= 0.8
|
|
||||||
alphaY[:, 1:200] .= 0.6
|
|
||||||
alphaY[:, 201:400] .= 0.9
|
|
||||||
grid::Grid = Grid{Float64}(rows, cols, alphaX, alphaY)
|
|
||||||
|
|
||||||
concentrations = fill(0.5, rows, cols)
|
|
||||||
concentrations[11, 11] = 15000
|
|
||||||
concentrations[1015, 991] = 7500
|
|
||||||
concentrations[11, 991] = 7500
|
|
||||||
concentrations[1015, 11] = 7500
|
|
||||||
setConcentrations!(grid, concentrations)
|
|
||||||
|
|
||||||
bc::Boundary = Boundary(grid)
|
|
||||||
setBoundarySideClosed!(bc, LEFT)
|
|
||||||
setBoundarySideClosed!(bc, RIGHT)
|
|
||||||
setBoundarySideClosed!(bc, TOP)
|
|
||||||
setBoundarySideClosed!(bc, BOTTOM)
|
|
||||||
|
|
||||||
return grid, bc
|
|
||||||
end
|
|
||||||
|
|
||||||
function testBTCS200()::Tuple{Grid,Boundary}
|
|
||||||
rows::Int = 2027
|
|
||||||
cols::Int = 1999
|
|
||||||
|
|
||||||
alphaX = [sin(i / 100) * cos(j / 100) for i in 1:rows, j in 1:cols]
|
|
||||||
alphaY = [cos(i / 100) * sin(j / 100) for i in 1:rows, j in 1:cols]
|
|
||||||
|
|
||||||
grid::Grid = Grid{Float64}(rows, cols, alphaX, alphaY)
|
|
||||||
|
|
||||||
concentrations = [i * j / 1e2 for i in 1:rows, j in 1:cols]
|
|
||||||
concentrations[11, 11] = 15000
|
|
||||||
concentrations[2021, 1995] = 7500
|
|
||||||
concentrations[11, 1995] = 7500
|
|
||||||
concentrations[2021, 11] = 7500
|
|
||||||
setConcentrations!(grid, concentrations)
|
|
||||||
|
|
||||||
bc::Boundary = Boundary(grid)
|
|
||||||
setBoundarySideClosed!(bc, LEFT)
|
|
||||||
setBoundarySideConstant!(bc, RIGHT, 1.5)
|
|
||||||
setBoundarySideClosed!(bc, TOP)
|
|
||||||
setBoundarySideConstant!(bc, BOTTOM, 0.75)
|
|
||||||
|
|
||||||
return grid, bc
|
|
||||||
end
|
|
||||||
|
|
||||||
function testFTCS500()::Tuple{Grid,Boundary}
|
|
||||||
rows::Int = 2000
|
|
||||||
cols::Int = 2000
|
|
||||||
|
|
||||||
alphaX = [sin(i / 100) * cos(j / 100) + 1 for i in 1:rows, j in 1:cols]
|
|
||||||
alphaY = [cos(i / 100) * sin(j / 100) + 1 for i in 1:rows, j in 1:cols]
|
|
||||||
|
|
||||||
grid::Grid = Grid{Float64}(rows, cols, alphaX, alphaY)
|
|
||||||
|
|
||||||
concentrations = [(i * j) / 1e6 for i in 1:rows, j in 1:cols]
|
|
||||||
concentrations[1001, 1001] = 2000
|
|
||||||
setConcentrations!(grid, concentrations)
|
|
||||||
|
|
||||||
bc::Boundary = Boundary(grid)
|
|
||||||
setBoundarySideClosed!(bc, LEFT)
|
|
||||||
setBoundarySideClosed!(bc, RIGHT)
|
|
||||||
setBoundarySideClosed!(bc, TOP)
|
|
||||||
setBoundarySideConstant!(bc, BOTTOM, 0.75)
|
|
||||||
|
|
||||||
return grid, bc
|
|
||||||
end
|
|
||||||
|
|
||||||
# 3. Simulation Runners
|
|
||||||
function run_static_simulation(grid::Grid, bc::Boundary, method, steps::Int, dt::Float64)
|
|
||||||
simulation = Simulation(grid, bc, method, steps, dt, CONSOLE_OUTPUT_OFF, CSV_OUTPUT_OFF)
|
|
||||||
TUG.run(simulation)
|
|
||||||
end
|
|
||||||
|
|
||||||
function run_dynamic_simulation(grid::Grid, bc::Boundary, method, steps::Int, dt::Float64, num_procs::Int)
|
|
||||||
setup_environment(num_procs)
|
|
||||||
|
|
||||||
simulation = DynamicSimulation(grid, bc, method, dt)
|
|
||||||
createGrid(simulation)
|
|
||||||
for _ in 1:steps
|
|
||||||
next(simulation)
|
|
||||||
end
|
|
||||||
|
|
||||||
if num_procs > 0
|
|
||||||
rmprocs(workers())
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# 4. Performance Metrics
|
|
||||||
function measure_performance(test_case_function, method, steps::Int, dt::Float64, num_procs::Int, dynamic::Bool=false)
|
|
||||||
grid, bc = test_case_function()
|
|
||||||
|
|
||||||
if dynamic
|
|
||||||
simulation_run = @benchmark run_dynamic_simulation($grid, $bc, $method, $steps, $dt, $num_procs)
|
|
||||||
else
|
|
||||||
simulation_run = @benchmark run_static_simulation($grid, $bc, $method, $steps, $dt)
|
|
||||||
end
|
|
||||||
|
|
||||||
time_measurement = mean(simulation_run).time / 1e9
|
|
||||||
memory_measurement = mean(simulation_run).memory / 1e6
|
|
||||||
|
|
||||||
return (time=time_measurement, memory=memory_measurement)
|
|
||||||
end
|
|
||||||
|
|
||||||
# 5. Benchmarking and Comparison
|
|
||||||
function benchmark_test_case(test_case_function, method, steps::Int, dt::Float64, is_distributed::Bool, num_procs::Int)
|
|
||||||
performance_metrics = measure_performance(test_case_function, method, steps, dt, num_procs, is_distributed)
|
|
||||||
return performance_metrics
|
|
||||||
end
|
|
||||||
|
|
||||||
# 6. Reporting
|
|
||||||
function report_results(results)
|
|
||||||
for result in results
|
|
||||||
println("Test Case: $(result.test_case)$(result.is_distributed ? ", Procs: $(result.num_procs)" : ""), Time: $(result.time) s, Memory: $(result.memory) MB")
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# 7. Cleanup
|
|
||||||
function cleanup()
|
|
||||||
for filename in readdir()
|
|
||||||
if occursin(".csv", filename)
|
|
||||||
rm(filename, force=true)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# Main Function
|
|
||||||
function main()
|
|
||||||
test_cases = [(testBTCS100, BTCS, 100, 0.01), (testBTCS200, BTCS, 200, 0.005), (testFTCS500, FTCS, 500, 0.005)]
|
|
||||||
configurations = [(false, 0), (true, 0), (true, 1), (true, 2)] # Non-distributed, distributed with 1 and 2 additional procs
|
|
||||||
|
|
||||||
results = []
|
|
||||||
|
|
||||||
for (test_case, method, steps, dt) in test_cases
|
|
||||||
for (is_distributed, num_procs) in configurations
|
|
||||||
performance_metrics = benchmark_test_case(test_case, method, steps, dt, is_distributed, num_procs)
|
|
||||||
push!(results, (test_case=test_case, method=method, is_distributed=is_distributed, num_procs=num_procs, time=performance_metrics.time, memory=performance_metrics.memory))
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
cleanup()
|
|
||||||
report_results(results)
|
|
||||||
end
|
|
||||||
|
|
||||||
main()
|
|
||||||
@ -1,82 +0,0 @@
|
|||||||
import argparse
|
|
||||||
import csv
|
|
||||||
import sys
|
|
||||||
|
|
||||||
|
|
||||||
def read_matrices_from_csv(file_path):
|
|
||||||
with open(file_path, newline='') as csvfile:
|
|
||||||
reader = csv.reader(csvfile, delimiter=' ', skipinitialspace=True)
|
|
||||||
matrices, matrix, line_numbers = [], [], []
|
|
||||||
line_number = 0
|
|
||||||
|
|
||||||
for row in reader:
|
|
||||||
line_number += 1
|
|
||||||
if row:
|
|
||||||
matrix.append([float(item) for item in row])
|
|
||||||
line_numbers.append(line_number)
|
|
||||||
else:
|
|
||||||
if matrix:
|
|
||||||
matrices.append((matrix, line_numbers))
|
|
||||||
matrix, line_numbers = [], []
|
|
||||||
|
|
||||||
if matrix: # Add the last matrix if there's no blank line at the end
|
|
||||||
matrices.append((matrix, line_numbers))
|
|
||||||
|
|
||||||
return matrices
|
|
||||||
|
|
||||||
def compare_matrices(matrix_a_tuple, matrix_b_tuple, tolerance=0.01):
|
|
||||||
data_a, line_numbers_a = matrix_a_tuple
|
|
||||||
data_b, line_numbers_b = matrix_b_tuple
|
|
||||||
max_diff = 0
|
|
||||||
|
|
||||||
if len(data_a) != len(data_b):
|
|
||||||
return False, f"Matrix size mismatch: Matrix A has {len(data_a)} rows, Matrix B has {len(data_b)} rows.", None, None, max_diff
|
|
||||||
|
|
||||||
for row_index, (row_a, row_b, line_num_a, line_num_b) in enumerate(zip(data_a, data_b, line_numbers_a, line_numbers_b)):
|
|
||||||
if len(row_a) != len(row_b):
|
|
||||||
return False, f"Row size mismatch at line {line_num_a} (File A) and line {line_num_b} (File B).", line_num_a, line_num_b, max_diff
|
|
||||||
|
|
||||||
for col_index, (elem_a, elem_b) in enumerate(zip(row_a, row_b)):
|
|
||||||
if abs(elem_a - elem_b) > max_diff:
|
|
||||||
max_diff = abs(elem_a - elem_b)
|
|
||||||
if abs(elem_a - elem_b) > tolerance:
|
|
||||||
return False, f"Mismatch at line {line_num_a}, column {col_index+1} (File A) vs line {line_num_b}, column {col_index+1} (File B):\nA({elem_a}) vs B({elem_b}).", line_num_a, line_num_b, max_diff
|
|
||||||
|
|
||||||
return True, "Matrices are equal.", None, None, max_diff
|
|
||||||
|
|
||||||
def compare_csv_files(file_path1, file_path2, tolerance=0):
|
|
||||||
matrices1 = read_matrices_from_csv(file_path1)
|
|
||||||
matrices2 = read_matrices_from_csv(file_path2)
|
|
||||||
max_difference = 0
|
|
||||||
|
|
||||||
if len(matrices1) != len(matrices2):
|
|
||||||
return False, "Number of matrices in files do not match.", None, None, max_difference
|
|
||||||
|
|
||||||
for index, (matrix_a_tuple, matrix_b_tuple) in enumerate(zip(matrices1, matrices2)):
|
|
||||||
equal, message, line_num_a, line_num_b, max_diff = compare_matrices(matrix_a_tuple, matrix_b_tuple, tolerance)
|
|
||||||
if max_diff > max_difference:
|
|
||||||
max_difference = max_diff
|
|
||||||
if not equal:
|
|
||||||
return False, f"In Matrix pair {index}: {message}", line_num_a, line_num_b, max_difference
|
|
||||||
|
|
||||||
return True, "All matrices are equal.", None, None, max_difference
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
parser = argparse.ArgumentParser(description='Compare two CSV files containing matrices.')
|
|
||||||
parser.add_argument('file_a', help='Path to File A')
|
|
||||||
parser.add_argument('file_b', help='Path to File B')
|
|
||||||
parser.add_argument('--tolerance', type=float, default=0, help='Tolerance for comparison (default: 0)')
|
|
||||||
parser.add_argument('--silent', action='store_true', help='Run in silent mode without printing details')
|
|
||||||
args = parser.parse_args()
|
|
||||||
|
|
||||||
are_equal, message, line_num_a, line_num_b, max_difference = compare_csv_files(args.file_a, args.file_b, args.tolerance)
|
|
||||||
|
|
||||||
if not args.silent:
|
|
||||||
print(message)
|
|
||||||
|
|
||||||
if not are_equal:
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
||||||
@ -1,47 +0,0 @@
|
|||||||
#include <Eigen/Eigen>
|
|
||||||
#include <tug/Simulation.hpp>
|
|
||||||
#include <chrono>
|
|
||||||
#include <iostream>
|
|
||||||
|
|
||||||
using namespace Eigen;
|
|
||||||
using namespace tug;
|
|
||||||
using namespace std::chrono;
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
// **** GRID ****
|
|
||||||
int rows = 100;
|
|
||||||
int cols = 100;
|
|
||||||
Grid64 grid(rows, cols);
|
|
||||||
|
|
||||||
MatrixXd concentrations = MatrixXd::Constant(rows, cols, 0);
|
|
||||||
concentrations(10, 10) = 2000;
|
|
||||||
concentrations(90, 90) = 2000;
|
|
||||||
grid.setConcentrations(concentrations);
|
|
||||||
|
|
||||||
MatrixXd alphax = MatrixXd::Constant(rows, cols, 1);
|
|
||||||
MatrixXd alphay = MatrixXd::Constant(rows, cols, 1);
|
|
||||||
grid.setAlpha(alphax, alphay);
|
|
||||||
|
|
||||||
// **** BOUNDARY ****
|
|
||||||
Boundary bc = Boundary(grid);
|
|
||||||
bc.setBoundarySideConstant(BC_SIDE_LEFT, 1);
|
|
||||||
bc.setBoundarySideConstant(BC_SIDE_RIGHT, 1);
|
|
||||||
bc.setBoundarySideConstant(BC_SIDE_TOP, 0);
|
|
||||||
bc.setBoundarySideConstant(BC_SIDE_BOTTOM, 2);
|
|
||||||
|
|
||||||
// **** SIMULATION ****
|
|
||||||
Simulation simulation = Simulation(grid, bc);
|
|
||||||
simulation.setTimestep(0.05);
|
|
||||||
simulation.setIterations(1000);
|
|
||||||
simulation.setOutputCSV(CSV_OUTPUT_ON);
|
|
||||||
simulation.setOutputConsole(CONSOLE_OUTPUT_OFF);
|
|
||||||
|
|
||||||
// **** RUN SIMULATION ****
|
|
||||||
auto start = high_resolution_clock::now();
|
|
||||||
simulation.run();
|
|
||||||
auto stop = high_resolution_clock::now();
|
|
||||||
|
|
||||||
auto duration = duration_cast<nanoseconds>(stop - start);
|
|
||||||
std::cout << duration.count() << std::endl;
|
|
||||||
}
|
|
||||||
@ -1,53 +0,0 @@
|
|||||||
#include <Eigen/Eigen>
|
|
||||||
#include <tug/Simulation.hpp>
|
|
||||||
#include <chrono>
|
|
||||||
#include <iostream>
|
|
||||||
|
|
||||||
using namespace Eigen;
|
|
||||||
using namespace tug;
|
|
||||||
using namespace std::chrono;
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
// **** GRID ****
|
|
||||||
int rows = 1024;
|
|
||||||
int cols = 1000;
|
|
||||||
Grid64 grid(rows, cols);
|
|
||||||
|
|
||||||
MatrixXd concentrations = MatrixXd::Constant(rows, cols, 0.5);
|
|
||||||
concentrations(10, 10) = 15000;
|
|
||||||
concentrations(1014, 990) = 7500;
|
|
||||||
concentrations(10, 990) = 7500;
|
|
||||||
concentrations(1014, 10) = 7500;
|
|
||||||
grid.setConcentrations(concentrations);
|
|
||||||
|
|
||||||
MatrixXd alphax = MatrixXd::Constant(rows, cols, 1.25);
|
|
||||||
MatrixXd alphay = MatrixXd::Constant(rows, cols, 1.1);
|
|
||||||
alphax.block(0, 0, 100, cols) = MatrixXd::Constant(100, cols, 0.5);
|
|
||||||
alphax.block(100, 0, 100, cols) = MatrixXd::Constant(100, cols, 0.8);
|
|
||||||
alphay.block(0, 0, rows, 200) = MatrixXd::Constant(rows, 200, 0.6);
|
|
||||||
alphay.block(0, 200, rows, 200) = MatrixXd::Constant(rows, 200, 0.9);
|
|
||||||
grid.setAlpha(alphax, alphay);
|
|
||||||
|
|
||||||
// **** BOUNDARY ****
|
|
||||||
Boundary bc = Boundary(grid);
|
|
||||||
bc.setBoundarySideClosed(BC_SIDE_LEFT);
|
|
||||||
bc.setBoundarySideClosed(BC_SIDE_RIGHT);
|
|
||||||
bc.setBoundarySideClosed(BC_SIDE_TOP);
|
|
||||||
bc.setBoundarySideClosed(BC_SIDE_BOTTOM);
|
|
||||||
|
|
||||||
// **** SIMULATION ****
|
|
||||||
Simulation simulation = Simulation(grid, bc);
|
|
||||||
simulation.setTimestep(0.01);
|
|
||||||
simulation.setIterations(100);
|
|
||||||
simulation.setOutputCSV(CSV_OUTPUT_ON);
|
|
||||||
simulation.setOutputConsole(CONSOLE_OUTPUT_OFF);
|
|
||||||
|
|
||||||
// **** RUN SIMULATION ****
|
|
||||||
auto start = high_resolution_clock::now();
|
|
||||||
simulation.run();
|
|
||||||
auto stop = high_resolution_clock::now();
|
|
||||||
|
|
||||||
auto duration = duration_cast<nanoseconds>(stop - start);
|
|
||||||
std::cout << duration.count() << std::endl;
|
|
||||||
}
|
|
||||||
@ -1,42 +0,0 @@
|
|||||||
#include <Eigen/Eigen>
|
|
||||||
#include <tug/Simulation.hpp>
|
|
||||||
#include <chrono>
|
|
||||||
#include <iostream>
|
|
||||||
|
|
||||||
using namespace Eigen;
|
|
||||||
using namespace tug;
|
|
||||||
using namespace std::chrono;
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
// **** GRID ****
|
|
||||||
int cells = 20;
|
|
||||||
Grid64 grid(cells);
|
|
||||||
|
|
||||||
MatrixXd concentrations = MatrixXd::Constant(1, cells, 0);
|
|
||||||
concentrations(0, 0) = 2000;
|
|
||||||
grid.setConcentrations(concentrations);
|
|
||||||
|
|
||||||
MatrixXd alpha = MatrixXd::Constant(1, cells, 1);
|
|
||||||
grid.setAlpha(alpha);
|
|
||||||
|
|
||||||
// **** BOUNDARY ****
|
|
||||||
Boundary bc = Boundary(grid);
|
|
||||||
bc.setBoundarySideConstant(BC_SIDE_LEFT, 0);
|
|
||||||
bc.setBoundarySideConstant(BC_SIDE_RIGHT, 0);
|
|
||||||
|
|
||||||
// **** SIMULATION ****
|
|
||||||
Simulation simulation = Simulation(grid, bc);
|
|
||||||
simulation.setTimestep(0.1);
|
|
||||||
simulation.setIterations(100);
|
|
||||||
simulation.setOutputCSV(CSV_OUTPUT_ON);
|
|
||||||
simulation.setOutputConsole(CONSOLE_OUTPUT_OFF);
|
|
||||||
|
|
||||||
// **** RUN SIMULATION ****
|
|
||||||
auto start = high_resolution_clock::now();
|
|
||||||
simulation.run();
|
|
||||||
auto stop = high_resolution_clock::now();
|
|
||||||
|
|
||||||
auto duration = duration_cast<seconds>(stop - start);
|
|
||||||
std::cout << duration.count() << std::endl;
|
|
||||||
}
|
|
||||||
@ -1,44 +0,0 @@
|
|||||||
#include <Eigen/Eigen>
|
|
||||||
#include <tug/Simulation.hpp>
|
|
||||||
#include <chrono>
|
|
||||||
#include <iostream>
|
|
||||||
|
|
||||||
using namespace Eigen;
|
|
||||||
using namespace tug;
|
|
||||||
using namespace std::chrono;
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
// **** GRID ****
|
|
||||||
int cells = 45;
|
|
||||||
Grid64 grid(cells);
|
|
||||||
|
|
||||||
MatrixXd concentrations = MatrixXd::Constant(1, cells, 10);
|
|
||||||
concentrations(0, 5) = 2000;
|
|
||||||
grid.setConcentrations(concentrations);
|
|
||||||
|
|
||||||
MatrixXd alpha = MatrixXd::Constant(1, cells, 1);
|
|
||||||
alpha.block(0, 0, 1, 15) = MatrixXd::Constant(1, 15, 0.5);
|
|
||||||
alpha.block(0, 30, 1, 15) = MatrixXd::Constant(1, 15, 1.5);
|
|
||||||
grid.setAlpha(alpha);
|
|
||||||
|
|
||||||
// **** BOUNDARY ****
|
|
||||||
Boundary bc = Boundary(grid);
|
|
||||||
bc.setBoundarySideClosed(BC_SIDE_LEFT);
|
|
||||||
bc.setBoundarySideClosed(BC_SIDE_RIGHT);
|
|
||||||
|
|
||||||
// **** SIMULATION ****
|
|
||||||
Simulation simulation = Simulation(grid, bc);
|
|
||||||
simulation.setTimestep(1.23);
|
|
||||||
simulation.setIterations(75000);
|
|
||||||
simulation.setOutputCSV(CSV_OUTPUT_ON);
|
|
||||||
simulation.setOutputConsole(CONSOLE_OUTPUT_OFF);
|
|
||||||
|
|
||||||
// **** RUN SIMULATION ****
|
|
||||||
auto start = high_resolution_clock::now();
|
|
||||||
simulation.run();
|
|
||||||
auto stop = high_resolution_clock::now();
|
|
||||||
|
|
||||||
auto duration = duration_cast<nanoseconds>(stop - start);
|
|
||||||
std::cout << duration.count() << std::endl;
|
|
||||||
}
|
|
||||||
@ -1,66 +0,0 @@
|
|||||||
#include <Eigen/Eigen>
|
|
||||||
#include <tug/Simulation.hpp>
|
|
||||||
#include <chrono>
|
|
||||||
#include <iostream>
|
|
||||||
#include <cmath>
|
|
||||||
|
|
||||||
using namespace Eigen;
|
|
||||||
using namespace tug;
|
|
||||||
using namespace std::chrono;
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
// **** GRID ****
|
|
||||||
int rows = 2027;
|
|
||||||
int cols = 1999;
|
|
||||||
Grid64 grid(rows, cols);
|
|
||||||
|
|
||||||
MatrixXd concentrations(rows, cols);
|
|
||||||
for (int i = 0; i < rows; ++i)
|
|
||||||
{
|
|
||||||
for (int j = 0; j < cols; ++j)
|
|
||||||
{
|
|
||||||
concentrations(i, j) = static_cast<double>((i + 1) * (j + 1)) / 1e2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
concentrations(10, 10) = 15000;
|
|
||||||
concentrations(2020, 1994) = 7500;
|
|
||||||
concentrations(10, 1994) = 7500;
|
|
||||||
concentrations(2020, 10) = 7500;
|
|
||||||
grid.setConcentrations(concentrations);
|
|
||||||
|
|
||||||
// Complex alpha patterns
|
|
||||||
MatrixXd alphax = MatrixXd(rows, cols);
|
|
||||||
MatrixXd alphay = MatrixXd(rows, cols);
|
|
||||||
for (int i = 0; i < rows; ++i)
|
|
||||||
{
|
|
||||||
for (int j = 0; j < cols; ++j)
|
|
||||||
{
|
|
||||||
alphax(i, j) = std::sin((i + 1) / 100.0) * std::cos((j + 1) / 100.0);
|
|
||||||
alphay(i, j) = std::cos((i + 1) / 100.0) * std::sin((j + 1) / 100.0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
grid.setAlpha(alphax, alphay);
|
|
||||||
|
|
||||||
// **** BOUNDARY ****
|
|
||||||
Boundary bc = Boundary(grid);
|
|
||||||
bc.setBoundarySideClosed(BC_SIDE_LEFT);
|
|
||||||
bc.setBoundarySideConstant(BC_SIDE_RIGHT, 1.5);
|
|
||||||
bc.setBoundarySideClosed(BC_SIDE_TOP);
|
|
||||||
bc.setBoundarySideConstant(BC_SIDE_BOTTOM, 0.75);
|
|
||||||
|
|
||||||
// **** SIMULATION ****
|
|
||||||
Simulation simulation = Simulation(grid, bc);
|
|
||||||
simulation.setTimestep(0.005);
|
|
||||||
simulation.setIterations(200);
|
|
||||||
simulation.setOutputCSV(CSV_OUTPUT_ON);
|
|
||||||
simulation.setOutputConsole(CONSOLE_OUTPUT_OFF);
|
|
||||||
|
|
||||||
// **** RUN SIMULATION ****
|
|
||||||
auto start = high_resolution_clock::now();
|
|
||||||
simulation.run();
|
|
||||||
auto stop = high_resolution_clock::now();
|
|
||||||
|
|
||||||
auto duration = duration_cast<nanoseconds>(stop - start);
|
|
||||||
std::cout << duration.count() << std::endl;
|
|
||||||
}
|
|
||||||
@ -1,46 +0,0 @@
|
|||||||
#include <Eigen/Eigen>
|
|
||||||
#include <tug/Simulation.hpp>
|
|
||||||
#include <chrono>
|
|
||||||
#include <iostream>
|
|
||||||
|
|
||||||
using namespace Eigen;
|
|
||||||
using namespace tug;
|
|
||||||
using namespace std::chrono;
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
// **** GRID ****
|
|
||||||
int rows = 20;
|
|
||||||
int cols = 20;
|
|
||||||
Grid64 grid(rows, cols);
|
|
||||||
|
|
||||||
MatrixXd concentrations = MatrixXd::Constant(rows, cols, 0);
|
|
||||||
concentrations(10, 10) = 2000;
|
|
||||||
grid.setConcentrations(concentrations);
|
|
||||||
|
|
||||||
MatrixXd alphax = MatrixXd::Constant(rows, cols, 1);
|
|
||||||
MatrixXd alphay = MatrixXd::Constant(rows, cols, 1);
|
|
||||||
grid.setAlpha(alphax, alphay);
|
|
||||||
|
|
||||||
// **** BOUNDARY ****
|
|
||||||
Boundary bc = Boundary(grid);
|
|
||||||
bc.setBoundarySideClosed(BC_SIDE_LEFT);
|
|
||||||
bc.setBoundarySideClosed(BC_SIDE_RIGHT);
|
|
||||||
bc.setBoundarySideClosed(BC_SIDE_TOP);
|
|
||||||
bc.setBoundarySideClosed(BC_SIDE_BOTTOM);
|
|
||||||
|
|
||||||
// **** SIMULATION ****
|
|
||||||
Simulation simulation = Simulation(grid, bc);
|
|
||||||
simulation.setTimestep(0.1);
|
|
||||||
simulation.setIterations(500);
|
|
||||||
simulation.setOutputCSV(CSV_OUTPUT_ON);
|
|
||||||
simulation.setOutputConsole(CONSOLE_OUTPUT_OFF);
|
|
||||||
|
|
||||||
// **** RUN SIMULATION ****
|
|
||||||
auto start = high_resolution_clock::now();
|
|
||||||
simulation.run();
|
|
||||||
auto stop = high_resolution_clock::now();
|
|
||||||
|
|
||||||
auto duration = duration_cast<nanoseconds>(stop - start);
|
|
||||||
std::cout << duration.count() << std::endl;
|
|
||||||
}
|
|
||||||
@ -1,54 +0,0 @@
|
|||||||
#include <Eigen/Eigen>
|
|
||||||
#include <tug/Simulation.hpp>
|
|
||||||
#include <chrono>
|
|
||||||
#include <iostream>
|
|
||||||
|
|
||||||
using namespace Eigen;
|
|
||||||
using namespace tug;
|
|
||||||
using namespace std::chrono;
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
// **** GRID ****
|
|
||||||
int rows = 450;
|
|
||||||
int cols = 670;
|
|
||||||
Grid64 grid(rows, cols);
|
|
||||||
|
|
||||||
MatrixXd concentrations = MatrixXd::Constant(rows, cols, 0);
|
|
||||||
concentrations(10, 10) = 1500;
|
|
||||||
concentrations(440, 660) = 750;
|
|
||||||
concentrations(440, 10) = 750;
|
|
||||||
concentrations(10, 660) = 750;
|
|
||||||
concentrations(220, 335) = 1500;
|
|
||||||
grid.setConcentrations(concentrations);
|
|
||||||
|
|
||||||
MatrixXd alphax = MatrixXd::Constant(rows, cols, 1);
|
|
||||||
MatrixXd alphay = MatrixXd::Constant(rows, cols, 1);
|
|
||||||
alphax.block(0, 0, 100, cols) = MatrixXd::Constant(100, cols, 0.5);
|
|
||||||
alphax.block(100, 0, 100, cols) = MatrixXd::Constant(100, cols, 0.8);
|
|
||||||
alphay.block(0, 0, rows, 200) = MatrixXd::Constant(rows, 200, 0.6);
|
|
||||||
alphay.block(0, 200, rows, 200) = MatrixXd::Constant(rows, 200, 0.9);
|
|
||||||
grid.setAlpha(alphax, alphay);
|
|
||||||
|
|
||||||
// **** BOUNDARY ****
|
|
||||||
Boundary bc = Boundary(grid);
|
|
||||||
bc.setBoundarySideClosed(BC_SIDE_LEFT);
|
|
||||||
bc.setBoundarySideClosed(BC_SIDE_RIGHT);
|
|
||||||
bc.setBoundarySideClosed(BC_SIDE_TOP);
|
|
||||||
bc.setBoundarySideClosed(BC_SIDE_BOTTOM);
|
|
||||||
|
|
||||||
// **** SIMULATION ****
|
|
||||||
Simulation simulation = Simulation(grid, bc);
|
|
||||||
simulation.setTimestep(0.2);
|
|
||||||
simulation.setIterations(750);
|
|
||||||
simulation.setOutputCSV(CSV_OUTPUT_ON);
|
|
||||||
simulation.setOutputConsole(CONSOLE_OUTPUT_OFF);
|
|
||||||
|
|
||||||
// **** RUN SIMULATION ****
|
|
||||||
auto start = high_resolution_clock::now();
|
|
||||||
simulation.run();
|
|
||||||
auto stop = high_resolution_clock::now();
|
|
||||||
|
|
||||||
auto duration = duration_cast<nanoseconds>(stop - start);
|
|
||||||
std::cout << duration.count() << std::endl;
|
|
||||||
}
|
|
||||||
@ -1,53 +0,0 @@
|
|||||||
#include <Eigen/Eigen>
|
|
||||||
#include <tug/Simulation.hpp>
|
|
||||||
#include <chrono>
|
|
||||||
#include <iostream>
|
|
||||||
|
|
||||||
using namespace Eigen;
|
|
||||||
using namespace tug;
|
|
||||||
using namespace std::chrono;
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
// **** GRID ****
|
|
||||||
int rows = 1024;
|
|
||||||
int cols = 1000;
|
|
||||||
Grid64 grid(rows, cols);
|
|
||||||
|
|
||||||
MatrixXd concentrations = MatrixXd::Constant(rows, cols, 0.5);
|
|
||||||
concentrations(10, 10) = 15000;
|
|
||||||
concentrations(1014, 990) = 7500;
|
|
||||||
concentrations(10, 990) = 7500;
|
|
||||||
concentrations(1014, 10) = 7500;
|
|
||||||
grid.setConcentrations(concentrations);
|
|
||||||
|
|
||||||
MatrixXd alphax = MatrixXd::Constant(rows, cols, 1.25);
|
|
||||||
MatrixXd alphay = MatrixXd::Constant(rows, cols, 1.1);
|
|
||||||
alphax.block(0, 0, 100, cols) = MatrixXd::Constant(100, cols, 0.5);
|
|
||||||
alphax.block(100, 0, 100, cols) = MatrixXd::Constant(100, cols, 0.8);
|
|
||||||
alphay.block(0, 0, rows, 200) = MatrixXd::Constant(rows, 200, 0.6);
|
|
||||||
alphay.block(0, 200, rows, 200) = MatrixXd::Constant(rows, 200, 0.9);
|
|
||||||
grid.setAlpha(alphax, alphay);
|
|
||||||
|
|
||||||
// **** BOUNDARY ****
|
|
||||||
Boundary bc = Boundary(grid);
|
|
||||||
bc.setBoundarySideClosed(BC_SIDE_LEFT);
|
|
||||||
bc.setBoundarySideClosed(BC_SIDE_RIGHT);
|
|
||||||
bc.setBoundarySideClosed(BC_SIDE_TOP);
|
|
||||||
bc.setBoundarySideClosed(BC_SIDE_BOTTOM);
|
|
||||||
|
|
||||||
// **** SIMULATION ****
|
|
||||||
Simulation simulation = Simulation<double, tug::FTCS_APPROACH>(grid, bc);
|
|
||||||
simulation.setTimestep(0.01);
|
|
||||||
simulation.setIterations(100);
|
|
||||||
simulation.setOutputCSV(CSV_OUTPUT_ON);
|
|
||||||
simulation.setOutputConsole(CONSOLE_OUTPUT_OFF);
|
|
||||||
|
|
||||||
// **** RUN SIMULATION ****
|
|
||||||
auto start = high_resolution_clock::now();
|
|
||||||
simulation.run();
|
|
||||||
auto stop = high_resolution_clock::now();
|
|
||||||
|
|
||||||
auto duration = duration_cast<nanoseconds>(stop - start);
|
|
||||||
std::cout << duration.count() << std::endl;
|
|
||||||
}
|
|
||||||
@ -1,42 +0,0 @@
|
|||||||
#include <Eigen/Eigen>
|
|
||||||
#include <tug/Simulation.hpp>
|
|
||||||
#include <chrono>
|
|
||||||
#include <iostream>
|
|
||||||
|
|
||||||
using namespace Eigen;
|
|
||||||
using namespace tug;
|
|
||||||
using namespace std::chrono;
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
// **** GRID ****
|
|
||||||
int cells = 20;
|
|
||||||
Grid64 grid(cells);
|
|
||||||
|
|
||||||
MatrixXd concentrations = MatrixXd::Constant(1, cells, 0);
|
|
||||||
concentrations(0, 0) = 2000;
|
|
||||||
grid.setConcentrations(concentrations);
|
|
||||||
|
|
||||||
MatrixXd alpha = MatrixXd::Constant(1, cells, 1);
|
|
||||||
grid.setAlpha(alpha);
|
|
||||||
|
|
||||||
// **** BOUNDARY ****
|
|
||||||
Boundary bc = Boundary(grid);
|
|
||||||
bc.setBoundarySideConstant(BC_SIDE_LEFT, 0);
|
|
||||||
bc.setBoundarySideConstant(BC_SIDE_RIGHT, 0);
|
|
||||||
|
|
||||||
// **** SIMULATION ****
|
|
||||||
Simulation simulation = Simulation<double, tug::FTCS_APPROACH>(grid, bc);
|
|
||||||
simulation.setTimestep(0.001);
|
|
||||||
simulation.setIterations(7000);
|
|
||||||
simulation.setOutputCSV(CSV_OUTPUT_ON);
|
|
||||||
simulation.setOutputConsole(CONSOLE_OUTPUT_OFF);
|
|
||||||
|
|
||||||
// **** RUN SIMULATION ****
|
|
||||||
auto start = high_resolution_clock::now();
|
|
||||||
simulation.run();
|
|
||||||
auto stop = high_resolution_clock::now();
|
|
||||||
|
|
||||||
auto duration = duration_cast<seconds>(stop - start);
|
|
||||||
std::cout << duration.count() << std::endl;
|
|
||||||
}
|
|
||||||
@ -1,63 +0,0 @@
|
|||||||
#include <Eigen/Eigen>
|
|
||||||
#include <tug/Simulation.hpp>
|
|
||||||
#include <chrono>
|
|
||||||
#include <iostream>
|
|
||||||
#include <cmath>
|
|
||||||
|
|
||||||
using namespace Eigen;
|
|
||||||
using namespace tug;
|
|
||||||
using namespace std::chrono;
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
// **** GRID ****
|
|
||||||
int rows = 2000;
|
|
||||||
int cols = 2000;
|
|
||||||
Grid64 grid(rows, cols);
|
|
||||||
|
|
||||||
MatrixXd concentrations(rows, cols);
|
|
||||||
for (int i = 0; i < rows; ++i)
|
|
||||||
{
|
|
||||||
for (int j = 0; j < cols; ++j)
|
|
||||||
{
|
|
||||||
concentrations(i, j) = static_cast<double>(((i + 1) * (j + 1)) / 1e6);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
concentrations(1000, 1000) = 2000;
|
|
||||||
grid.setConcentrations(concentrations);
|
|
||||||
|
|
||||||
// Complex alpha patterns
|
|
||||||
MatrixXd alphax = MatrixXd(rows, cols);
|
|
||||||
MatrixXd alphay = MatrixXd(rows, cols);
|
|
||||||
for (int i = 0; i < rows; ++i)
|
|
||||||
{
|
|
||||||
for (int j = 0; j < cols; ++j)
|
|
||||||
{
|
|
||||||
alphax(i, j) = std::sin((i + 1) / 100.0) * std::cos((j + 1) / 100.0) + 1;
|
|
||||||
alphay(i, j) = std::cos((i + 1) / 100.0) * std::sin((j + 1) / 100.0) + 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
grid.setAlpha(alphax, alphay);
|
|
||||||
|
|
||||||
// **** BOUNDARY ****
|
|
||||||
Boundary bc = Boundary(grid);
|
|
||||||
bc.setBoundarySideClosed(BC_SIDE_LEFT);
|
|
||||||
bc.setBoundarySideClosed(BC_SIDE_RIGHT);
|
|
||||||
bc.setBoundarySideClosed(BC_SIDE_TOP);
|
|
||||||
bc.setBoundarySideConstant(BC_SIDE_BOTTOM, 0.75);
|
|
||||||
|
|
||||||
// **** SIMULATION ****
|
|
||||||
Simulation simulation = Simulation<double, tug::FTCS_APPROACH>(grid, bc);
|
|
||||||
simulation.setTimestep(0.005);
|
|
||||||
simulation.setIterations(500);
|
|
||||||
simulation.setOutputCSV(CSV_OUTPUT_ON);
|
|
||||||
simulation.setOutputConsole(CONSOLE_OUTPUT_OFF);
|
|
||||||
|
|
||||||
// **** RUN SIMULATION ****
|
|
||||||
auto start = high_resolution_clock::now();
|
|
||||||
simulation.run();
|
|
||||||
auto stop = high_resolution_clock::now();
|
|
||||||
|
|
||||||
auto duration = duration_cast<nanoseconds>(stop - start);
|
|
||||||
std::cout << duration.count() << std::endl;
|
|
||||||
}
|
|
||||||
@ -1,46 +0,0 @@
|
|||||||
#include <Eigen/Eigen>
|
|
||||||
#include <tug/Simulation.hpp>
|
|
||||||
#include <chrono>
|
|
||||||
#include <iostream>
|
|
||||||
|
|
||||||
using namespace Eigen;
|
|
||||||
using namespace tug;
|
|
||||||
using namespace std::chrono;
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
// **** GRID ****
|
|
||||||
int rows = 20;
|
|
||||||
int cols = 20;
|
|
||||||
Grid64 grid(rows, cols);
|
|
||||||
|
|
||||||
MatrixXd concentrations = MatrixXd::Constant(rows, cols, 0);
|
|
||||||
concentrations(10, 10) = 2000;
|
|
||||||
grid.setConcentrations(concentrations);
|
|
||||||
|
|
||||||
MatrixXd alphax = MatrixXd::Constant(rows, cols, 1);
|
|
||||||
MatrixXd alphay = MatrixXd::Constant(rows, cols, 1);
|
|
||||||
grid.setAlpha(alphax, alphay);
|
|
||||||
|
|
||||||
// **** BOUNDARY ****
|
|
||||||
Boundary bc = Boundary(grid);
|
|
||||||
bc.setBoundarySideClosed(BC_SIDE_LEFT);
|
|
||||||
bc.setBoundarySideClosed(BC_SIDE_RIGHT);
|
|
||||||
bc.setBoundarySideClosed(BC_SIDE_TOP);
|
|
||||||
bc.setBoundarySideClosed(BC_SIDE_BOTTOM);
|
|
||||||
|
|
||||||
// **** SIMULATION ****
|
|
||||||
Simulation simulation = Simulation<double, tug::FTCS_APPROACH>(grid, bc);
|
|
||||||
simulation.setTimestep(0.1);
|
|
||||||
simulation.setIterations(500);
|
|
||||||
simulation.setOutputCSV(CSV_OUTPUT_ON);
|
|
||||||
simulation.setOutputConsole(CONSOLE_OUTPUT_OFF);
|
|
||||||
|
|
||||||
// **** RUN SIMULATION ****
|
|
||||||
auto start = high_resolution_clock::now();
|
|
||||||
simulation.run();
|
|
||||||
auto stop = high_resolution_clock::now();
|
|
||||||
|
|
||||||
auto duration = duration_cast<nanoseconds>(stop - start);
|
|
||||||
std::cout << duration.count() << std::endl;
|
|
||||||
}
|
|
||||||
@ -1,54 +0,0 @@
|
|||||||
#include <Eigen/Eigen>
|
|
||||||
#include <tug/Simulation.hpp>
|
|
||||||
#include <chrono>
|
|
||||||
#include <iostream>
|
|
||||||
|
|
||||||
using namespace Eigen;
|
|
||||||
using namespace tug;
|
|
||||||
using namespace std::chrono;
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
// **** GRID ****
|
|
||||||
int rows = 450;
|
|
||||||
int cols = 670;
|
|
||||||
Grid64 grid(rows, cols);
|
|
||||||
|
|
||||||
MatrixXd concentrations = MatrixXd::Constant(rows, cols, 0);
|
|
||||||
concentrations(10, 10) = 1500;
|
|
||||||
concentrations(440, 660) = 750;
|
|
||||||
concentrations(440, 10) = 750;
|
|
||||||
concentrations(10, 660) = 750;
|
|
||||||
concentrations(220, 335) = 1500;
|
|
||||||
grid.setConcentrations(concentrations);
|
|
||||||
|
|
||||||
MatrixXd alphax = MatrixXd::Constant(rows, cols, 1);
|
|
||||||
MatrixXd alphay = MatrixXd::Constant(rows, cols, 1);
|
|
||||||
alphax.block(0, 0, 100, cols) = MatrixXd::Constant(100, cols, 0.5);
|
|
||||||
alphax.block(100, 0, 100, cols) = MatrixXd::Constant(100, cols, 0.8);
|
|
||||||
alphay.block(0, 0, rows, 200) = MatrixXd::Constant(rows, 200, 0.6);
|
|
||||||
alphay.block(0, 200, rows, 200) = MatrixXd::Constant(rows, 200, 0.9);
|
|
||||||
grid.setAlpha(alphax, alphay);
|
|
||||||
|
|
||||||
// **** BOUNDARY ****
|
|
||||||
Boundary bc = Boundary(grid);
|
|
||||||
bc.setBoundarySideClosed(BC_SIDE_LEFT);
|
|
||||||
bc.setBoundarySideClosed(BC_SIDE_RIGHT);
|
|
||||||
bc.setBoundarySideClosed(BC_SIDE_TOP);
|
|
||||||
bc.setBoundarySideClosed(BC_SIDE_BOTTOM);
|
|
||||||
|
|
||||||
// **** SIMULATION ****
|
|
||||||
Simulation simulation = Simulation<double, tug::FTCS_APPROACH>(grid, bc);
|
|
||||||
simulation.setTimestep(0.2);
|
|
||||||
simulation.setIterations(750);
|
|
||||||
simulation.setOutputCSV(CSV_OUTPUT_ON);
|
|
||||||
simulation.setOutputConsole(CONSOLE_OUTPUT_OFF);
|
|
||||||
|
|
||||||
// **** RUN SIMULATION ****
|
|
||||||
auto start = high_resolution_clock::now();
|
|
||||||
simulation.run();
|
|
||||||
auto stop = high_resolution_clock::now();
|
|
||||||
|
|
||||||
auto duration = duration_cast<nanoseconds>(stop - start);
|
|
||||||
std::cout << duration.count() << std::endl;
|
|
||||||
}
|
|
||||||
@ -1,50 +0,0 @@
|
|||||||
#include <Eigen/Eigen>
|
|
||||||
#include <tug/Simulation.hpp>
|
|
||||||
#include <chrono>
|
|
||||||
#include <iostream>
|
|
||||||
|
|
||||||
using namespace Eigen;
|
|
||||||
using namespace tug;
|
|
||||||
using namespace std::chrono;
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
// **** GRID ****
|
|
||||||
int rows = 500;
|
|
||||||
int cols = 500;
|
|
||||||
Grid64 grid(rows, cols);
|
|
||||||
|
|
||||||
MatrixXd concentrations = MatrixXd::Constant(rows, cols, 0);
|
|
||||||
concentrations.block(50, 50, 100, 100) = MatrixXd::Constant(100, 100, 1500);
|
|
||||||
concentrations.block(350, 350, 100, 100) = MatrixXd::Constant(100, 100, 1200);
|
|
||||||
concentrations(250, 250) = 2000;
|
|
||||||
grid.setConcentrations(concentrations);
|
|
||||||
|
|
||||||
MatrixXd alphax = MatrixXd::Constant(rows, cols, 0.7);
|
|
||||||
MatrixXd alphay = MatrixXd::Constant(rows, cols, 0.7);
|
|
||||||
alphax.block(200, 200, 100, 100) = MatrixXd::Constant(100, 100, 0.4);
|
|
||||||
alphay.block(200, 200, 100, 100) = MatrixXd::Constant(100, 100, 0.4);
|
|
||||||
grid.setAlpha(alphax, alphay);
|
|
||||||
|
|
||||||
// **** BOUNDARY ****
|
|
||||||
Boundary bc = Boundary(grid);
|
|
||||||
bc.setBoundarySideClosed(BC_SIDE_LEFT);
|
|
||||||
bc.setBoundarySideClosed(BC_SIDE_RIGHT);
|
|
||||||
bc.setBoundarySideClosed(BC_SIDE_TOP);
|
|
||||||
bc.setBoundarySideClosed(BC_SIDE_BOTTOM);
|
|
||||||
|
|
||||||
// **** SIMULATION ****
|
|
||||||
Simulation simulation = Simulation<double, tug::FTCS_APPROACH>(grid, bc);
|
|
||||||
simulation.setTimestep(2.5);
|
|
||||||
simulation.setIterations(300);
|
|
||||||
simulation.setOutputCSV(CSV_OUTPUT_ON);
|
|
||||||
simulation.setOutputConsole(CONSOLE_OUTPUT_OFF);
|
|
||||||
|
|
||||||
// **** RUN SIMULATION ****
|
|
||||||
auto start = high_resolution_clock::now();
|
|
||||||
simulation.run();
|
|
||||||
auto stop = high_resolution_clock::now();
|
|
||||||
|
|
||||||
auto duration = duration_cast<nanoseconds>(stop - start);
|
|
||||||
std::cout << "Simulation Time (nanoseconds): " << duration.count() << std::endl;
|
|
||||||
}
|
|
||||||
@ -1,36 +0,0 @@
|
|||||||
include("../../TUG/src/TUG.jl")
|
|
||||||
using .TUG
|
|
||||||
|
|
||||||
function main()
|
|
||||||
# **** GRID ****
|
|
||||||
rows::Int = 100
|
|
||||||
cols::Int = 100
|
|
||||||
|
|
||||||
alphaX = fill(1.0, rows, cols)
|
|
||||||
alphaY = fill(1.0, rows, cols)
|
|
||||||
grid::Grid = Grid{Float64}(rows, cols, alphaX, alphaY)
|
|
||||||
|
|
||||||
concentrations = fill(0.0, rows, cols)
|
|
||||||
concentrations[11, 11] = 2000
|
|
||||||
concentrations[91, 91] = 2000
|
|
||||||
setConcentrations!(grid, concentrations)
|
|
||||||
|
|
||||||
# **** BOUNDARY ****
|
|
||||||
bc::Boundary = Boundary(grid)
|
|
||||||
setBoundarySideConstant!(bc, LEFT, 1.0)
|
|
||||||
setBoundarySideConstant!(bc, RIGHT, 1.0)
|
|
||||||
setBoundarySideConstant!(bc, TOP, 0.0)
|
|
||||||
setBoundarySideConstant!(bc, BOTTOM, 2.0)
|
|
||||||
|
|
||||||
# **** SIMULATION ****
|
|
||||||
simulation::Simulation = Simulation(grid, bc)
|
|
||||||
simulation = setTimestep(simulation, 0.05)
|
|
||||||
simulation = setIterations(simulation, 1000)
|
|
||||||
simulation = setOutputConsole(simulation, CONSOLE_OUTPUT_OFF)
|
|
||||||
simulation = setOutputCSV(simulation, CSV_OUTPUT_ON)
|
|
||||||
|
|
||||||
# **** RUN SIMULATION ****
|
|
||||||
print((@elapsed TUG.run(simulation)) * 1e9)
|
|
||||||
end
|
|
||||||
|
|
||||||
main()
|
|
||||||
@ -1,42 +0,0 @@
|
|||||||
include("../../TUG/src/TUG.jl")
|
|
||||||
using .TUG
|
|
||||||
|
|
||||||
function main()
|
|
||||||
# **** GRID ****
|
|
||||||
rows::Int = 1024
|
|
||||||
cols::Int = 1000
|
|
||||||
|
|
||||||
alphaX = fill(1.25, rows, cols)
|
|
||||||
alphaY = fill(1.1, rows, cols)
|
|
||||||
alphaX[1:100, :] .= 0.5
|
|
||||||
alphaX[101:200, :] .= 0.8
|
|
||||||
alphaY[:, 1:200] .= 0.6
|
|
||||||
alphaY[:, 201:400] .= 0.9
|
|
||||||
grid::Grid = Grid{Float64}(rows, cols, alphaX, alphaY)
|
|
||||||
|
|
||||||
concentrations = fill(0.5, rows, cols)
|
|
||||||
concentrations[11, 11] = 15000
|
|
||||||
concentrations[1015, 991] = 7500
|
|
||||||
concentrations[11, 991] = 7500
|
|
||||||
concentrations[1015, 11] = 7500
|
|
||||||
setConcentrations!(grid, concentrations)
|
|
||||||
|
|
||||||
# **** BOUNDARY ****
|
|
||||||
bc::Boundary = Boundary(grid)
|
|
||||||
setBoundarySideClosed!(bc, LEFT)
|
|
||||||
setBoundarySideClosed!(bc, RIGHT)
|
|
||||||
setBoundarySideClosed!(bc, TOP)
|
|
||||||
setBoundarySideClosed!(bc, BOTTOM)
|
|
||||||
|
|
||||||
# **** SIMULATION ****
|
|
||||||
simulation::Simulation = Simulation(grid, bc)
|
|
||||||
simulation = setTimestep(simulation, 0.01)
|
|
||||||
simulation = setIterations(simulation, 100)
|
|
||||||
simulation = setOutputConsole(simulation, CONSOLE_OUTPUT_OFF)
|
|
||||||
simulation = setOutputCSV(simulation, CSV_OUTPUT_ON)
|
|
||||||
|
|
||||||
# **** RUN SIMULATION ****
|
|
||||||
print((@elapsed TUG.run(simulation)) * 1e9)
|
|
||||||
end
|
|
||||||
|
|
||||||
main()
|
|
||||||
@ -1,31 +0,0 @@
|
|||||||
include("../../TUG/src/TUG.jl")
|
|
||||||
using .TUG
|
|
||||||
|
|
||||||
function main()
|
|
||||||
# **** GRID ****
|
|
||||||
cells::Int = 20
|
|
||||||
|
|
||||||
alpha = fill(1.0, 1, cells)
|
|
||||||
grid::Grid = Grid{Float64}(cells, alpha)
|
|
||||||
|
|
||||||
concentrations = fill(0.0, 1, cells)
|
|
||||||
concentrations[1] = 2000
|
|
||||||
setConcentrations!(grid, concentrations)
|
|
||||||
|
|
||||||
# **** BOUNDARY ****
|
|
||||||
bc::Boundary = Boundary(grid)
|
|
||||||
setBoundarySideConstant!(bc, LEFT, 0.0)
|
|
||||||
setBoundarySideConstant!(bc, RIGHT, 0.0)
|
|
||||||
|
|
||||||
# **** SIMULATION ****
|
|
||||||
simulation::Simulation = Simulation(grid, bc)
|
|
||||||
simulation = setTimestep(simulation, 0.1)
|
|
||||||
simulation = setIterations(simulation, 100)
|
|
||||||
simulation = setOutputConsole(simulation, CONSOLE_OUTPUT_OFF)
|
|
||||||
simulation = setOutputCSV(simulation, CSV_OUTPUT_ON)
|
|
||||||
|
|
||||||
# **** RUN SIMULATION ****
|
|
||||||
print((@elapsed TUG.run(simulation)) * 1e9)
|
|
||||||
end
|
|
||||||
|
|
||||||
main()
|
|
||||||
@ -1,33 +0,0 @@
|
|||||||
include("../../TUG/src/TUG.jl")
|
|
||||||
using .TUG
|
|
||||||
|
|
||||||
function main()
|
|
||||||
# **** GRID ****
|
|
||||||
cells::Int = 45
|
|
||||||
|
|
||||||
alpha = fill(1.0, 1, cells)
|
|
||||||
alpha[1:15] .= 0.5
|
|
||||||
alpha[31:45] .= 1.5
|
|
||||||
grid::Grid = Grid{Float64}(cells, alpha)
|
|
||||||
|
|
||||||
concentrations = fill(10.0, 1, cells)
|
|
||||||
concentrations[6] = 2000
|
|
||||||
setConcentrations!(grid, concentrations)
|
|
||||||
|
|
||||||
# **** BOUNDARY ****
|
|
||||||
bc::Boundary = Boundary(grid)
|
|
||||||
setBoundarySideClosed!(bc, LEFT)
|
|
||||||
setBoundarySideClosed!(bc, RIGHT)
|
|
||||||
|
|
||||||
# **** SIMULATION ****
|
|
||||||
simulation::Simulation = Simulation(grid, bc)
|
|
||||||
simulation = setTimestep(simulation, 1.23)
|
|
||||||
simulation = setIterations(simulation, 75000)
|
|
||||||
simulation = setOutputConsole(simulation, CONSOLE_OUTPUT_OFF)
|
|
||||||
simulation = setOutputCSV(simulation, CSV_OUTPUT_ON)
|
|
||||||
|
|
||||||
# **** RUN SIMULATION ****
|
|
||||||
print((@elapsed TUG.run(simulation)) * 1e9)
|
|
||||||
end
|
|
||||||
|
|
||||||
main()
|
|
||||||
@ -1,39 +0,0 @@
|
|||||||
include("../../TUG/src/TUG.jl")
|
|
||||||
using .TUG
|
|
||||||
|
|
||||||
function main()
|
|
||||||
# **** GRID ****
|
|
||||||
rows::Int = 2027
|
|
||||||
cols::Int = 1999
|
|
||||||
|
|
||||||
alphaX = [sin(i / 100) * cos(j / 100) for i in 1:rows, j in 1:cols]
|
|
||||||
alphaY = [cos(i / 100) * sin(j / 100) for i in 1:rows, j in 1:cols]
|
|
||||||
|
|
||||||
grid::Grid = Grid{Float64}(rows, cols, alphaX, alphaY)
|
|
||||||
|
|
||||||
concentrations = [i * j / 1e2 for i in 1:rows, j in 1:cols]
|
|
||||||
concentrations[11, 11] = 15000
|
|
||||||
concentrations[2021, 1995] = 7500
|
|
||||||
concentrations[11, 1995] = 7500
|
|
||||||
concentrations[2021, 11] = 7500
|
|
||||||
setConcentrations!(grid, concentrations)
|
|
||||||
|
|
||||||
# **** BOUNDARY ****
|
|
||||||
bc::Boundary = Boundary(grid)
|
|
||||||
setBoundarySideClosed!(bc, LEFT)
|
|
||||||
setBoundarySideConstant!(bc, RIGHT, 1.5)
|
|
||||||
setBoundarySideClosed!(bc, TOP)
|
|
||||||
setBoundarySideConstant!(bc, BOTTOM, 0.75)
|
|
||||||
|
|
||||||
# **** SIMULATION ****
|
|
||||||
simulation::Simulation = Simulation(grid, bc)
|
|
||||||
simulation = setTimestep(simulation, 0.005)
|
|
||||||
simulation = setIterations(simulation, 200)
|
|
||||||
simulation = setOutputConsole(simulation, CONSOLE_OUTPUT_OFF)
|
|
||||||
simulation = setOutputCSV(simulation, CSV_OUTPUT_ON)
|
|
||||||
|
|
||||||
# **** RUN SIMULATION ****
|
|
||||||
print((@elapsed TUG.run(simulation)) * 1e9)
|
|
||||||
end
|
|
||||||
|
|
||||||
main()
|
|
||||||
@ -1,35 +0,0 @@
|
|||||||
include("../../TUG/src/TUG.jl")
|
|
||||||
using .TUG
|
|
||||||
|
|
||||||
function main()
|
|
||||||
# **** GRID ****
|
|
||||||
rows::Int = 20
|
|
||||||
cols::Int = 20
|
|
||||||
|
|
||||||
alphaX = fill(1.0, rows, cols)
|
|
||||||
alphaY = fill(1.0, rows, cols)
|
|
||||||
grid::Grid = Grid{Float64}(rows, cols, alphaX, alphaY)
|
|
||||||
|
|
||||||
concentrations = fill(0.0, rows, cols)
|
|
||||||
concentrations[11, 11] = 2000
|
|
||||||
setConcentrations!(grid, concentrations)
|
|
||||||
|
|
||||||
# **** BOUNDARY ****
|
|
||||||
bc::Boundary = Boundary(grid)
|
|
||||||
setBoundarySideClosed!(bc, LEFT)
|
|
||||||
setBoundarySideClosed!(bc, RIGHT)
|
|
||||||
setBoundarySideClosed!(bc, TOP)
|
|
||||||
setBoundarySideClosed!(bc, BOTTOM)
|
|
||||||
|
|
||||||
# **** SIMULATION ****
|
|
||||||
simulation::Simulation = Simulation(grid, bc)
|
|
||||||
simulation = setTimestep(simulation, 0.1)
|
|
||||||
simulation = setIterations(simulation, 500)
|
|
||||||
simulation = setOutputConsole(simulation, CONSOLE_OUTPUT_OFF)
|
|
||||||
simulation = setOutputCSV(simulation, CSV_OUTPUT_ON)
|
|
||||||
|
|
||||||
# **** RUN SIMULATION ****
|
|
||||||
print((@elapsed TUG.run(simulation)) * 1e9)
|
|
||||||
end
|
|
||||||
|
|
||||||
main()
|
|
||||||
@ -1,43 +0,0 @@
|
|||||||
include("../../TUG/src/TUG.jl")
|
|
||||||
using .TUG
|
|
||||||
|
|
||||||
function main()
|
|
||||||
# **** GRID ****
|
|
||||||
rows::Int = 450
|
|
||||||
cols::Int = 670
|
|
||||||
|
|
||||||
alphaX = fill(1.0, rows, cols)
|
|
||||||
alphaY = fill(1.0, rows, cols)
|
|
||||||
alphaX[1:100, :] .= 0.5
|
|
||||||
alphaX[101:200, :] .= 0.8
|
|
||||||
alphaY[:, 1:200] .= 0.6
|
|
||||||
alphaY[:, 201:400] .= 0.9
|
|
||||||
grid::Grid = Grid{Float64}(rows, cols, alphaX, alphaY)
|
|
||||||
|
|
||||||
concentrations = fill(0.0, rows, cols)
|
|
||||||
concentrations[11, 11] = 1500
|
|
||||||
concentrations[441, 661] = 750
|
|
||||||
concentrations[441, 11] = 750
|
|
||||||
concentrations[11, 661] = 750
|
|
||||||
concentrations[221, 336] = 1500
|
|
||||||
setConcentrations!(grid, concentrations)
|
|
||||||
|
|
||||||
# **** BOUNDARY ****
|
|
||||||
bc::Boundary = Boundary(grid)
|
|
||||||
setBoundarySideClosed!(bc, LEFT)
|
|
||||||
setBoundarySideClosed!(bc, RIGHT)
|
|
||||||
setBoundarySideClosed!(bc, TOP)
|
|
||||||
setBoundarySideClosed!(bc, BOTTOM)
|
|
||||||
|
|
||||||
# **** SIMULATION ****
|
|
||||||
simulation::Simulation = Simulation(grid, bc)
|
|
||||||
simulation = setTimestep(simulation, 0.2)
|
|
||||||
simulation = setIterations(simulation, 750)
|
|
||||||
simulation = setOutputConsole(simulation, CONSOLE_OUTPUT_OFF)
|
|
||||||
simulation = setOutputCSV(simulation, CSV_OUTPUT_ON)
|
|
||||||
|
|
||||||
# **** RUN SIMULATION ****
|
|
||||||
print((@elapsed TUG.run(simulation)) * 1e9)
|
|
||||||
end
|
|
||||||
|
|
||||||
main()
|
|
||||||
@ -1,42 +0,0 @@
|
|||||||
include("../../TUG/src/TUG.jl")
|
|
||||||
using .TUG
|
|
||||||
|
|
||||||
function main()
|
|
||||||
# **** GRID ****
|
|
||||||
rows::Int = 1024
|
|
||||||
cols::Int = 1000
|
|
||||||
|
|
||||||
alphaX = fill(1.25, rows, cols)
|
|
||||||
alphaY = fill(1.1, rows, cols)
|
|
||||||
alphaX[1:100, :] .= 0.5
|
|
||||||
alphaX[101:200, :] .= 0.8
|
|
||||||
alphaY[:, 1:200] .= 0.6
|
|
||||||
alphaY[:, 201:400] .= 0.9
|
|
||||||
grid::Grid = Grid{Float64}(rows, cols, alphaX, alphaY)
|
|
||||||
|
|
||||||
concentrations = fill(0.5, rows, cols)
|
|
||||||
concentrations[11, 11] = 15000
|
|
||||||
concentrations[1015, 991] = 7500
|
|
||||||
concentrations[11, 991] = 7500
|
|
||||||
concentrations[1015, 11] = 7500
|
|
||||||
setConcentrations!(grid, concentrations)
|
|
||||||
|
|
||||||
# **** BOUNDARY ****
|
|
||||||
bc::Boundary = Boundary(grid)
|
|
||||||
setBoundarySideClosed!(bc, LEFT)
|
|
||||||
setBoundarySideClosed!(bc, RIGHT)
|
|
||||||
setBoundarySideClosed!(bc, TOP)
|
|
||||||
setBoundarySideClosed!(bc, BOTTOM)
|
|
||||||
|
|
||||||
# **** SIMULATION ****
|
|
||||||
simulation::Simulation = Simulation(grid, bc, FTCS)
|
|
||||||
simulation = setTimestep(simulation, 0.01)
|
|
||||||
simulation = setIterations(simulation, 100)
|
|
||||||
simulation = setOutputConsole(simulation, CONSOLE_OUTPUT_OFF)
|
|
||||||
simulation = setOutputCSV(simulation, CSV_OUTPUT_ON)
|
|
||||||
|
|
||||||
# **** RUN SIMULATION ****
|
|
||||||
print((@elapsed TUG.run(simulation)) * 1e9)
|
|
||||||
end
|
|
||||||
|
|
||||||
main()
|
|
||||||
@ -1,31 +0,0 @@
|
|||||||
include("../../TUG/src/TUG.jl")
|
|
||||||
using .TUG
|
|
||||||
|
|
||||||
function main()
|
|
||||||
# **** GRID ****
|
|
||||||
cells::Int = 20
|
|
||||||
|
|
||||||
alpha = fill(1.0, 1, cells)
|
|
||||||
grid::Grid = Grid{Float64}(cells, alpha)
|
|
||||||
|
|
||||||
concentrations = fill(0.0, 1, cells)
|
|
||||||
concentrations[1] = 2000
|
|
||||||
setConcentrations!(grid, concentrations)
|
|
||||||
|
|
||||||
# **** BOUNDARY ****
|
|
||||||
bc::Boundary = Boundary(grid)
|
|
||||||
setBoundarySideConstant!(bc, LEFT, 0.0)
|
|
||||||
setBoundarySideConstant!(bc, RIGHT, 0.0)
|
|
||||||
|
|
||||||
# **** SIMULATION ****
|
|
||||||
simulation::Simulation = Simulation(grid, bc, FTCS)
|
|
||||||
simulation = setTimestep(simulation, 0.001)
|
|
||||||
simulation = setIterations(simulation, 7000)
|
|
||||||
simulation = setOutputConsole(simulation, CONSOLE_OUTPUT_OFF)
|
|
||||||
simulation = setOutputCSV(simulation, CSV_OUTPUT_ON)
|
|
||||||
|
|
||||||
# **** RUN SIMULATION ****
|
|
||||||
print((@elapsed TUG.run(simulation)) * 1e9)
|
|
||||||
end
|
|
||||||
|
|
||||||
main()
|
|
||||||
@ -1,36 +0,0 @@
|
|||||||
include("../../TUG/src/TUG.jl")
|
|
||||||
using .TUG
|
|
||||||
|
|
||||||
function main()
|
|
||||||
# **** GRID ****
|
|
||||||
rows::Int = 2000
|
|
||||||
cols::Int = 2000
|
|
||||||
|
|
||||||
alphaX = [sin(i / 100) * cos(j / 100) + 1 for i in 1:rows, j in 1:cols]
|
|
||||||
alphaY = [cos(i / 100) * sin(j / 100) + 1 for i in 1:rows, j in 1:cols]
|
|
||||||
|
|
||||||
grid::Grid = Grid{Float64}(rows, cols, alphaX, alphaY)
|
|
||||||
|
|
||||||
concentrations = [(i * j) / 1e6 for i in 1:rows, j in 1:cols]
|
|
||||||
concentrations[1001, 1001] = 2000
|
|
||||||
setConcentrations!(grid, concentrations)
|
|
||||||
|
|
||||||
# **** BOUNDARY ****
|
|
||||||
bc::Boundary = Boundary(grid)
|
|
||||||
setBoundarySideClosed!(bc, LEFT)
|
|
||||||
setBoundarySideClosed!(bc, RIGHT)
|
|
||||||
setBoundarySideClosed!(bc, TOP)
|
|
||||||
setBoundarySideConstant!(bc, BOTTOM, 0.75)
|
|
||||||
|
|
||||||
# **** SIMULATION ****
|
|
||||||
simulation::Simulation = Simulation(grid, bc, FTCS)
|
|
||||||
simulation = setTimestep(simulation, 0.005)
|
|
||||||
simulation = setIterations(simulation, 500)
|
|
||||||
simulation = setOutputConsole(simulation, CONSOLE_OUTPUT_OFF)
|
|
||||||
simulation = setOutputCSV(simulation, CSV_OUTPUT_ON)
|
|
||||||
|
|
||||||
# **** RUN SIMULATION ****
|
|
||||||
print((@elapsed TUG.run(simulation)) * 1e9)
|
|
||||||
end
|
|
||||||
|
|
||||||
main()
|
|
||||||
@ -1,35 +0,0 @@
|
|||||||
include("../../TUG/src/TUG.jl")
|
|
||||||
using .TUG
|
|
||||||
|
|
||||||
function main()
|
|
||||||
# **** GRID ****
|
|
||||||
rows::Int = 20
|
|
||||||
cols::Int = 20
|
|
||||||
|
|
||||||
alphaX = fill(1.0, rows, cols)
|
|
||||||
alphaY = fill(1.0, rows, cols)
|
|
||||||
grid::Grid = Grid{Float64}(rows, cols, alphaX, alphaY)
|
|
||||||
|
|
||||||
concentrations = fill(0.0, rows, cols)
|
|
||||||
concentrations[11, 11] = 2000
|
|
||||||
setConcentrations!(grid, concentrations)
|
|
||||||
|
|
||||||
# **** BOUNDARY ****
|
|
||||||
bc::Boundary = Boundary(grid)
|
|
||||||
setBoundarySideClosed!(bc, LEFT)
|
|
||||||
setBoundarySideClosed!(bc, RIGHT)
|
|
||||||
setBoundarySideClosed!(bc, TOP)
|
|
||||||
setBoundarySideClosed!(bc, BOTTOM)
|
|
||||||
|
|
||||||
# **** SIMULATION ****
|
|
||||||
simulation::Simulation = Simulation(grid, bc, FTCS)
|
|
||||||
simulation = setTimestep(simulation, 0.1)
|
|
||||||
simulation = setIterations(simulation, 500)
|
|
||||||
simulation = setOutputConsole(simulation, CONSOLE_OUTPUT_OFF)
|
|
||||||
simulation = setOutputCSV(simulation, CSV_OUTPUT_ON)
|
|
||||||
|
|
||||||
# **** RUN SIMULATION ****
|
|
||||||
print((@elapsed TUG.run(simulation)) * 1e9)
|
|
||||||
end
|
|
||||||
|
|
||||||
main()
|
|
||||||
@ -1,43 +0,0 @@
|
|||||||
include("../../TUG/src/TUG.jl")
|
|
||||||
using .TUG
|
|
||||||
|
|
||||||
function main()
|
|
||||||
# **** GRID ****
|
|
||||||
rows::Int = 450
|
|
||||||
cols::Int = 670
|
|
||||||
|
|
||||||
alphaX = fill(1.0, rows, cols)
|
|
||||||
alphaY = fill(1.0, rows, cols)
|
|
||||||
alphaX[1:100, :] .= 0.5
|
|
||||||
alphaX[101:200, :] .= 0.8
|
|
||||||
alphaY[:, 1:200] .= 0.6
|
|
||||||
alphaY[:, 201:400] .= 0.9
|
|
||||||
grid::Grid = Grid{Float64}(rows, cols, alphaX, alphaY)
|
|
||||||
|
|
||||||
concentrations = fill(0.0, rows, cols)
|
|
||||||
concentrations[11, 11] = 1500
|
|
||||||
concentrations[441, 661] = 750
|
|
||||||
concentrations[441, 11] = 750
|
|
||||||
concentrations[11, 661] = 750
|
|
||||||
concentrations[221, 336] = 1500
|
|
||||||
setConcentrations!(grid, concentrations)
|
|
||||||
|
|
||||||
# **** BOUNDARY ****
|
|
||||||
bc::Boundary = Boundary(grid)
|
|
||||||
setBoundarySideClosed!(bc, LEFT)
|
|
||||||
setBoundarySideClosed!(bc, RIGHT)
|
|
||||||
setBoundarySideClosed!(bc, TOP)
|
|
||||||
setBoundarySideClosed!(bc, BOTTOM)
|
|
||||||
|
|
||||||
# **** SIMULATION ****
|
|
||||||
simulation::Simulation = Simulation(grid, bc, FTCS)
|
|
||||||
simulation = setTimestep(simulation, 0.2)
|
|
||||||
simulation = setIterations(simulation, 750)
|
|
||||||
simulation = setOutputConsole(simulation, CONSOLE_OUTPUT_OFF)
|
|
||||||
simulation = setOutputCSV(simulation, CSV_OUTPUT_ON)
|
|
||||||
|
|
||||||
# **** RUN SIMULATION ****
|
|
||||||
print((@elapsed TUG.run(simulation)) * 1e9)
|
|
||||||
end
|
|
||||||
|
|
||||||
main()
|
|
||||||
@ -1,40 +0,0 @@
|
|||||||
include("../../TUG/src/TUG.jl")
|
|
||||||
using .TUG
|
|
||||||
|
|
||||||
function main()
|
|
||||||
# **** GRID ****
|
|
||||||
rows::Int = 500
|
|
||||||
cols::Int = 500
|
|
||||||
|
|
||||||
alphaX = fill(0.7, rows, cols)
|
|
||||||
alphaY = fill(0.7, rows, cols)
|
|
||||||
alphaX[201:300, 201:300] .= 0.4
|
|
||||||
alphaY[201:300, 201:300] .= 0.4
|
|
||||||
grid::Grid = Grid{Float64}(rows, cols, alphaX, alphaY)
|
|
||||||
|
|
||||||
concentrations = fill(0.0, rows, cols)
|
|
||||||
concentrations[51:150, 51:150] .= 1500
|
|
||||||
concentrations[351:450, 351:450] .= 1200
|
|
||||||
concentrations[251, 251] = 2000
|
|
||||||
setConcentrations!(grid, concentrations)
|
|
||||||
|
|
||||||
# **** BOUNDARY ****
|
|
||||||
bc::Boundary = Boundary(grid)
|
|
||||||
setBoundarySideClosed!(bc, LEFT)
|
|
||||||
setBoundarySideClosed!(bc, RIGHT)
|
|
||||||
setBoundarySideClosed!(bc, TOP)
|
|
||||||
setBoundarySideClosed!(bc, BOTTOM)
|
|
||||||
|
|
||||||
# **** SIMULATION ****
|
|
||||||
simulation::Simulation = Simulation(grid, bc, FTCS)
|
|
||||||
simulation = setTimestep(simulation, 2.5)
|
|
||||||
simulation = setIterations(simulation, 300)
|
|
||||||
simulation = setOutputConsole(simulation, CONSOLE_OUTPUT_OFF)
|
|
||||||
simulation = setOutputCSV(simulation, CSV_OUTPUT_ON)
|
|
||||||
|
|
||||||
# **** RUN SIMULATION ****
|
|
||||||
elapsed_time_ns = (@elapsed TUG.run(simulation)) * 1e9
|
|
||||||
println("Simulation Time (nanoseconds): ", elapsed_time_ns)
|
|
||||||
end
|
|
||||||
|
|
||||||
main()
|
|
||||||
@ -1,154 +0,0 @@
|
|||||||
import argparse
|
|
||||||
import os
|
|
||||||
import statistics
|
|
||||||
import subprocess
|
|
||||||
import time
|
|
||||||
|
|
||||||
from compare_csv import compare_csv_files
|
|
||||||
|
|
||||||
# ANSI color codes
|
|
||||||
RED = '\033[0;31m'
|
|
||||||
GREEN = '\033[0;32m'
|
|
||||||
NC = '\033[0m' # No Color
|
|
||||||
|
|
||||||
def remove_non_empty_dir(path):
|
|
||||||
if os.path.exists(path):
|
|
||||||
for root, dirs, files in os.walk(path, topdown=False):
|
|
||||||
for name in files:
|
|
||||||
os.remove(os.path.join(root, name))
|
|
||||||
for name in dirs:
|
|
||||||
os.rmdir(os.path.join(root, name))
|
|
||||||
os.rmdir(path)
|
|
||||||
|
|
||||||
def get_max_name_length(directory):
|
|
||||||
max_length = 0
|
|
||||||
for file in os.listdir(directory):
|
|
||||||
if file.endswith('.csv'):
|
|
||||||
name_length = len(os.path.splitext(file)[0])
|
|
||||||
if name_length > max_length:
|
|
||||||
max_length = name_length
|
|
||||||
return max_length
|
|
||||||
|
|
||||||
def format_difference(diff):
|
|
||||||
threshold = 1e-5
|
|
||||||
if diff != 0:
|
|
||||||
if abs(diff) < threshold:
|
|
||||||
return '{:.2e}'.format(diff).rjust(6) # Scientific notation for small values
|
|
||||||
else:
|
|
||||||
return '{:.3f}'.format(diff).rjust(6) # Fixed-point notation for larger values
|
|
||||||
else:
|
|
||||||
return '0'.rjust(6)
|
|
||||||
|
|
||||||
def run_benchmark(command, runs, precompile=False):
|
|
||||||
times = []
|
|
||||||
for _ in range(runs):
|
|
||||||
start_time = time.perf_counter()
|
|
||||||
output = subprocess.run(command, capture_output=True, text=True)
|
|
||||||
elapsed = time.perf_counter() - start_time
|
|
||||||
if precompile:
|
|
||||||
out = output.stdout.splitlines()[-1] # Take the second to last line if there are new line symbols
|
|
||||||
times.append(float(out)*1e-9) # Convert from nanoseconds to seconds
|
|
||||||
else:
|
|
||||||
times.append(elapsed)
|
|
||||||
|
|
||||||
avg_time = sum(times) / len(times)
|
|
||||||
min_time = min(times)
|
|
||||||
max_time = max(times)
|
|
||||||
std_dev = statistics.stdev(times) if len(times) > 1 else 0
|
|
||||||
|
|
||||||
return avg_time, min_time, max_time, std_dev
|
|
||||||
|
|
||||||
def main(tolerance, runs, silent, no_clean, precompile):
|
|
||||||
BENCHMARK_DIR = "./cpp_bench"
|
|
||||||
JULIA_DIR = "./julia_bench"
|
|
||||||
COMPILER = "g++"
|
|
||||||
CFLAGS = ["-O3", "-fopenmp", "-I", "../../include/", "-I", "/usr/include/eigen3"]
|
|
||||||
BIN_DIR = "./cpp_bin_temp"
|
|
||||||
OUTPUT_DIR = "./csv_temp"
|
|
||||||
|
|
||||||
# Clean up and create directories
|
|
||||||
for dir_path in [BIN_DIR, OUTPUT_DIR]:
|
|
||||||
remove_non_empty_dir(dir_path)
|
|
||||||
os.makedirs(dir_path)
|
|
||||||
|
|
||||||
for file in os.listdir('.'):
|
|
||||||
if file.endswith('.csv'):
|
|
||||||
os.remove(file)
|
|
||||||
|
|
||||||
# Compile and run C++ benchmarks
|
|
||||||
if not silent: print("----- Running C++ Benchmarks -----")
|
|
||||||
cpp_times = {}
|
|
||||||
for benchmark in os.listdir(BENCHMARK_DIR):
|
|
||||||
if benchmark.endswith(".cpp"):
|
|
||||||
name = os.path.splitext(benchmark)[0]
|
|
||||||
if not silent: print(f"Compiling {name}...", end="", flush=True)
|
|
||||||
subprocess.run([COMPILER, *CFLAGS, "-o", f"{BIN_DIR}/{name}", f"{BENCHMARK_DIR}/{benchmark}"])
|
|
||||||
if not silent: print(" Running...", end="", flush=True)
|
|
||||||
cpp_times[name] = run_benchmark([f"./{BIN_DIR}/{name}"], runs, precompile)
|
|
||||||
if not silent: print(" Done.", flush=True)
|
|
||||||
|
|
||||||
# Move CSV files to output directory
|
|
||||||
for file in os.listdir('.'):
|
|
||||||
if file.endswith('.csv'):
|
|
||||||
os.rename(file, f"{OUTPUT_DIR}/{file}")
|
|
||||||
|
|
||||||
max_name_length = get_max_name_length(OUTPUT_DIR)
|
|
||||||
|
|
||||||
# Run Julia benchmarks and compare
|
|
||||||
if not silent: print("\n----- Running Julia Benchmarks -----")
|
|
||||||
results_dict = {}
|
|
||||||
pass_all = True
|
|
||||||
julia_times = {}
|
|
||||||
for csv_file in sorted(os.listdir(OUTPUT_DIR), key=lambda x: os.path.splitext(x)[0]):
|
|
||||||
name = os.path.splitext(csv_file)[0]
|
|
||||||
padded_name = name.ljust(max_name_length)
|
|
||||||
if os.path.exists(f"{JULIA_DIR}/{name}.jl"):
|
|
||||||
if not silent: print(f"Running {name}...", end="", flush=True)
|
|
||||||
julia_times[name] = run_benchmark(["julia", f"{JULIA_DIR}/{name}.jl"], runs, precompile)
|
|
||||||
|
|
||||||
if os.path.exists(f"./{name}.csv"):
|
|
||||||
are_equal, _, _, _, max_diff = compare_csv_files(f"./{name}.csv", f"{OUTPUT_DIR}/{csv_file}", tolerance)
|
|
||||||
formatted_diff = format_difference(max_diff)
|
|
||||||
cpp_time = '{:.4f}s'.format(cpp_times[name][0]).rjust(8)
|
|
||||||
julia_time = '{:.4f}s'.format(julia_times[name][0]).rjust(8)
|
|
||||||
result = f"{padded_name}: {'Success' if are_equal else 'Failure'} (Max Diff: {formatted_diff}, C++: {cpp_time}, Julia: {julia_time})"
|
|
||||||
result_color = GREEN if are_equal else RED
|
|
||||||
results_dict[name] = f"{result_color}{result}{NC}"
|
|
||||||
if not are_equal:
|
|
||||||
pass_all = False
|
|
||||||
|
|
||||||
else:
|
|
||||||
results_dict[name] = f"{RED}{padded_name}: No Julia output{NC}"
|
|
||||||
pass_all = False
|
|
||||||
if not silent: print(" Done.", flush=True)
|
|
||||||
|
|
||||||
|
|
||||||
# Clean up
|
|
||||||
if not no_clean:
|
|
||||||
remove_non_empty_dir(BIN_DIR)
|
|
||||||
remove_non_empty_dir(OUTPUT_DIR)
|
|
||||||
|
|
||||||
for file in os.listdir('.'):
|
|
||||||
if file.endswith('.csv'):
|
|
||||||
os.remove(file)
|
|
||||||
|
|
||||||
# Print results
|
|
||||||
if not silent: print("\n----- Benchmark Results -----")
|
|
||||||
print(f"Parameters: Tolerance = {tolerance}, Runs = {runs}, Precompile = {precompile}")
|
|
||||||
for name in sorted(results_dict):
|
|
||||||
print(results_dict[name])
|
|
||||||
if pass_all:
|
|
||||||
print(f"\n{GREEN}All benchmarks and comparisons passed.{NC}")
|
|
||||||
else:
|
|
||||||
print(f"\n{RED}Some benchmarks or comparisons failed.{NC}")
|
|
||||||
exit(1)
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
parser = argparse.ArgumentParser(description='Benchmark and Compare Script')
|
|
||||||
parser.add_argument('--tolerance', type=float, default=0, help='Tolerance for CSV comparison')
|
|
||||||
parser.add_argument('--runs', type=int, default=1, help='Number of benchmark runs')
|
|
||||||
parser.add_argument('--silent', action='store_true', help='Run in silent mode without printing details')
|
|
||||||
parser.add_argument('--no-clean', action='store_true', help='Do not clean up temporary files')
|
|
||||||
parser.add_argument('--precompile', action='store_true', help='Use precompiling for Julia benchmarks and rely on benchmark script for timing')
|
|
||||||
args = parser.parse_args()
|
|
||||||
main(args.tolerance, args.runs, args.silent, args.no_clean, args.precompile)
|
|
||||||
Loading…
x
Reference in New Issue
Block a user