Added a stripped down MPI version of standalone: standalone_mpi. In fact, it's more like a pure simulation module since I've dropped real-time rendering and other old parts that do not work with MPI without heavy modifications. The most important functionalities in addition to simulation have already been adapted to work with MPI (samples/benchmark and samples/mpi) so there's no need to re-create them in standalone_mpi. The current version of standalone_mpi is able to run a basic simulation and I get an agreement with non-mpi and mpi versions after 100 timesteps. There's also draft that's a direct adaptation of what's currently in standalone/simulation.cc (it should be 100% equivalent), but it's currently commented out as I haven't done extensive tests with it.
This commit is contained in:
60
samples/standalone_mpi/host_forcing.h
Normal file
60
samples/standalone_mpi/host_forcing.h
Normal file
@@ -0,0 +1,60 @@
|
||||
|
||||
/*
|
||||
Copyright (C) 2014-2020, Johannes Pekkila, Miikka Vaisala.
|
||||
|
||||
This file is part of Astaroth.
|
||||
|
||||
Astaroth 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.
|
||||
|
||||
Astaroth 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 Astaroth. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file
|
||||
* \brief Brief info.
|
||||
*
|
||||
* Detailed info.
|
||||
*
|
||||
*/
|
||||
#pragma once
|
||||
#include "astaroth.h"
|
||||
|
||||
AcReal get_random_number_01();
|
||||
|
||||
AcReal3 helical_forcing_k_generator(const AcReal kmax, const AcReal kmin);
|
||||
|
||||
void helical_forcing_e_generator(AcReal3* e_force, const AcReal3 k_force);
|
||||
|
||||
void helical_forcing_special_vector(AcReal3* ff_hel_re, AcReal3* ff_hel_im, const AcReal3 k_force,
|
||||
const AcReal3 e_force, const AcReal relhel);
|
||||
|
||||
/** Tool for loading forcing vector information into the device memory
|
||||
// DEPRECATED in favour of loadForcingParams
|
||||
*/
|
||||
void DEPRECATED_acForcingVec(const AcReal forcing_magnitude, const AcReal3 k_force,
|
||||
const AcReal3 ff_hel_re, const AcReal3 ff_hel_im,
|
||||
const AcReal forcing_phase, const AcReal kaver);
|
||||
|
||||
typedef struct {
|
||||
AcReal magnitude;
|
||||
AcReal3 k_force;
|
||||
AcReal3 ff_hel_re;
|
||||
AcReal3 ff_hel_im;
|
||||
AcReal phase;
|
||||
AcReal kaver;
|
||||
} ForcingParams;
|
||||
|
||||
void loadForcingParamsToGrid(const ForcingParams& forcing_params);
|
||||
|
||||
void loadForcingParamsToHost(const ForcingParams& forcing_params, AcMesh* mesh);
|
||||
|
||||
ForcingParams generateForcingParams(const AcMeshInfo& mesh_info);
|
Reference in New Issue
Block a user