Skip to content

Commit

Permalink
Merge pull request #10 from AstroBarker/refactor_state
Browse files Browse the repository at this point in the history
Refactor state
  • Loading branch information
AstroBarker authored Jan 28, 2024
2 parents de1af7b + 89c49e5 commit 26f102e
Show file tree
Hide file tree
Showing 9 changed files with 136 additions and 23 deletions.
2 changes: 2 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,7 @@ include_directories("src/LinAlg")
include_directories("src/EoS")
include_directories("src/BC")
include_directories("src/IO")
include_directories("src/state")
include_directories("src/Timestepper")

include_directories(athelas PUBLIC
Expand All @@ -110,6 +111,7 @@ set( ATHELAS_SOURCES
"src/Limiters/SlopeLimiter.cpp"
"src/Limiters/BoundEnforcingLimiter.cpp"
"src/Limiters/SlopeLimiter_Utilities.cpp"
"src/state/state.cpp"
"src/Timestepper/Timestepper.cpp" )

add_library(libathelas ${ATHELAS_SOURCES})
Expand Down
38 changes: 22 additions & 16 deletions src/Driver.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
#include "IOLibrary.hpp"
#include "Fluid_Discretization.hpp"
#include "FluidUtilities.hpp"
#include "state.hpp"
#include "Timestepper.hpp"
#include "Error.hpp"
#include "ProblemIn.hpp"
Expand Down Expand Up @@ -67,23 +68,24 @@ int main( int argc, char *argv[] )
GridStructure Grid( &pin );

// --- Create the data structures ---
View3D uCF( "uCF", 3, nX + 2 * nGuard, order ); // conserved fluid
View3D uCR( "uCF", 2, nX + 2 * nGuard, order ); // conserved radiation
View3D uPF( "uPF", 3, nX + 2 * nGuard, nNodes ); // primitive fluid
const int nCF = 3;
const int nPF = 3;
const int nAF = 1;
const int nCR = 2;
State state( nCF, nCR, nPF, nAF, nX, nGuard, nNodes, order );

IdealGas eos( gamma_ideal );

if ( not Restart )
{
// --- Initialize fields ---
InitializeFields( uCF, uPF, uCR, &Grid, order, ProblemName );
InitializeFields( &state, &Grid, ProblemName );

ApplyBC( uCF, &Grid, order, BC );
ApplyBC( state.Get_uCF( ), &Grid, order, BC );
}
// WriteState( uCF, uPF, Grid, ProblemName, 0.0, order, 0 );

// --- Datastructure for modal basis ---
ModalBasis Basis( pin.Basis, uPF, &Grid, order, nNodes, nX, nGuard );
ModalBasis Basis( pin.Basis, state.Get_uPF( ), &Grid, order, nNodes, nX, nGuard );

WriteBasis( &Basis, nGuard, Grid.Get_ihi( ), nNodes, order, ProblemName );

Expand All @@ -94,10 +96,12 @@ int main( int argc, char *argv[] )
SlopeLimiter S_Limiter( &Grid, &pin );

// --- Limit the initial conditions ---
S_Limiter.ApplySlopeLimiter( uCF, &Grid, &Basis );
S_Limiter.ApplySlopeLimiter( state.Get_uCF( ), &Grid, &Basis );

// -- print run parameters ---
// -- print run parameters and initial condition ---
PrintSimulationParameters( Grid, &pin, CFL );
WriteState( &state, Grid, &S_Limiter,
ProblemName, t, order, 0 );

// --- Timer ---
Kokkos::Timer timer;
Expand All @@ -111,7 +115,7 @@ int main( int argc, char *argv[] )
while ( t < t_end && iStep >= 0 )
{

dt = ComputeTimestep_Fluid( uCF, &Grid, &eos, CFL );
dt = ComputeTimestep_Fluid( state.Get_uCF( ), &Grid, &eos, CFL );

if ( t + dt > t_end )
{
Expand All @@ -123,16 +127,17 @@ int main( int argc, char *argv[] )
std::printf( " ~ %d \t %.5e \t %.5e\n", iStep, t, dt );
}

SSPRK.UpdateFluid( Compute_Increment_Explicit, dt, uCF, uCR, Grid,
&Basis, &eos, &S_Limiter, opts );
SSPRK.UpdateFluid( Compute_Increment_Explicit, dt, &state,
Grid, &Basis, &eos, &S_Limiter,
opts );

t += dt;

// Write state
if ( iStep % i_write == 0 )
{
WriteState( uCF, uPF, Grid, &S_Limiter, ProblemName, t, order,
i_out );
WriteState( &state, Grid, &S_Limiter,
ProblemName, t, order, i_out );
i_out += 1;
}

Expand All @@ -142,8 +147,9 @@ int main( int argc, char *argv[] )
// --- Finalize timer ---
Real time = timer.seconds( );
std::printf( " ~ Done! Elapsed time: %f seconds.\n", time );
ApplyBC( uCF, &Grid, order, BC );
WriteState( uCF, uPF, Grid, &S_Limiter, ProblemName, t, order, -1 );
ApplyBC( state.Get_uCF( ), &Grid, order, BC );
WriteState( &state, Grid, &S_Limiter,
ProblemName, t, order, -1 );
}
Kokkos::finalize( );

Expand Down
13 changes: 11 additions & 2 deletions src/IO/IOLibrary.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,10 @@ void PrintSimulationParameters( GridStructure Grid, ProblemIn *pin, const Real C
const UInt nX = Grid.Get_nElements( );
const UInt nNodes = Grid.Get_nNodes( );

std::printf( " ~ --- Physics Parameters --- \n" );
std::printf( " ~ Radiation : %d\n", pin->do_rad );
std::printf( "\n" );

std::printf( " ~ --- Order Parameters --- \n" );
std::printf( " ~ Basis : %d ( 0 : Legendre, 1: Taylor )\n", pin->Basis );
std::printf( " ~ Spatial Order : %d\n", pin->pOrder );
Expand Down Expand Up @@ -72,13 +76,18 @@ void PrintSimulationParameters( GridStructure Grid, ProblemIn *pin, const Real C
std::printf( "\n" );
}

// TODO: add Time
void WriteState( Kokkos::View<Real ***> uCF, Kokkos::View<Real ***> uPF,
/**
* Write simulation output to disk
**/
void WriteState( State *state,
GridStructure Grid, SlopeLimiter *SL,
const std::string ProblemName, Real time,
UInt order, int i_write )
{

View3D uCF = state->Get_uCF( );
View3D uPF = state->Get_uPF( );

std::string fn = "athelas_";
auto i_str = std::to_string( i_write );
int n_pad;
Expand Down
3 changes: 2 additions & 1 deletion src/IO/IOLibrary.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

#include "Abstractions.hpp"
#include "ProblemIn.hpp"
#include "state.hpp"

struct GridType
{
Expand All @@ -16,7 +17,7 @@ struct DataType
Real x{ };
};

void WriteState( Kokkos::View<Real ***> uCF, Kokkos::View<Real ***> uPF,
void WriteState( State *state,
GridStructure Grid, SlopeLimiter *SL,
const std::string ProblemName, Real time,
UInt order, int i_write );
Expand Down
10 changes: 8 additions & 2 deletions src/PGen/Initialization.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
#include "Error.hpp"
#include "Grid.hpp"
#include "Initialization.hpp"
#include "state.hpp"

#define GAMMA 1.4

Expand All @@ -19,8 +20,8 @@
* TODO: For now I initialize constant on each cell. Is there a better way?
* TODO: iNodeX and order separation
**/
void InitializeFields( View3D uCF, View3D uPF, View3D uCR,
GridStructure *Grid, const UInt pOrder,
void InitializeFields( State *state,
GridStructure *Grid,
const std::string ProblemName )
{

Expand All @@ -34,6 +35,11 @@ void InitializeFields( View3D uCF, View3D uPF, View3D uCR,

const unsigned int iPF_D = 0;

View3D uCF = state->Get_uCF( );
View3D uPF = state->Get_uPF( );
View3D uCR = state->Get_uCR( );
const UInt pOrder = state->Get_pOrder( );

if ( ProblemName == "Sod" )
{
const Real V0 = 0.0;
Expand Down
5 changes: 4 additions & 1 deletion src/Timestepper/Timestepper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -213,14 +213,17 @@ void TimeStepper::InitializeTimestepper( )
* Update Solution with SSPRK methods
**/
void TimeStepper::UpdateFluid( UpdateFunc ComputeIncrement, const Real dt,
View3D U, View3D uCR, GridStructure &Grid,
State *state, GridStructure &Grid,
ModalBasis *Basis, EOS *eos,
SlopeLimiter *S_Limiter, const Options opts )
{

const auto &order = Basis->Get_Order( );
const auto &ihi = Grid.Get_ihi( );

auto U = state->Get_uCF( );
auto uCR = state->Get_uCR( );

unsigned short int i;

Kokkos::parallel_for(
Expand Down
3 changes: 2 additions & 1 deletion src/Timestepper/Timestepper.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@

#include "Abstractions.hpp"
#include "ProblemIn.hpp"
#include "state.hpp"

typedef void ( *UpdateFunc )( const View3D, const View3D,
GridStructure &,
Expand All @@ -30,7 +31,7 @@ class TimeStepper
void InitializeTimestepper( );

void UpdateFluid( UpdateFunc ComputeIncrement, const Real dt,
View3D uCF, View3D uCR, GridStructure &Grid,
State *state, GridStructure &Grid,
ModalBasis *Basis, EOS *eos, SlopeLimiter *S_Limiter,
const Options opts );

Expand Down
34 changes: 34 additions & 0 deletions src/state/state.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
/**
* File : state.cpp
* --------------
*
* Author : Brandon L. Barker
* Purpose : Class for holding the state data.
*
* TODO: separate pOrder_fluid and pOrder_rad
**/

#include "Constants.hpp"
#include "state.hpp"

State::State( const int nCF_, const int nCR_, const int nPF_,
const int nAF_, const int nX_, const int nG_,
const int nNodes_, const int pOrder_ )
: nCF( nCF_ ), nCR( nCR_ ), nPF( nPF_ ), nAF( nAF_ ), pOrder( pOrder_ ),
uCF( "uCF", nCF_, nX_ + 2 * nG_, pOrder_ ),
uPF( "uPF", nPF_, nX_ + 2 * nG_, nNodes_ ),
uAF( "uAF", nAF_, nX_ + 2 * nG_, nNodes_ ),
uCR( "uCR", nCR_, nX_ + 2 * nG_, pOrder_ ) {}

// num var accessors
int State::Get_nCF( ) const { return this->nCF; }
int State::Get_nPF( ) const { return this->nPF; }
int State::Get_nAF( ) const { return this->nAF; }
int State::Get_nCR( ) const { return this->nCR; }
int State::Get_pOrder( ) const { return this->pOrder; }

// view accessors
View3D State::Get_uCF( ) const { return this->uCF; }
View3D State::Get_uPF( ) const { return this->uPF; }
View3D State::Get_uAF( ) const { return this->uAF; }
View3D State::Get_uCR( ) const { return this->uCR; }
51 changes: 51 additions & 0 deletions src/state/state.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
#ifndef STATE_HPP_
#define STATE_HPP_

/**
* File : state.hpp
* --------------
*
* Author : Brandon L. Barker
* Purpose : Class for holding the state data.
*
* TODO: pull in eos
*
**/

#include "Kokkos_Core.hpp"

#include "Abstractions.hpp"
#include "Error.hpp"


class State
{
public:
State( const int nCF_, const int nCR_, const int nPF_, const int nAF_,
const int nX_, const int nG_, const int nNodes_, const int pOrder_ );

int Get_nCF( ) const;
int Get_nCR( ) const;
int Get_nPF( ) const;
int Get_nAF( ) const;
int Get_pOrder( ) const;

View3D Get_uCF( ) const;
View3D Get_uPF( ) const;
View3D Get_uAF( ) const;
View3D Get_uCR( ) const;

private:
int nCF;
int nCR;
int nPF;
int nAF;
int pOrder;

View3D uCF; // Conserved fluid
View3D uPF; // primitive fluid
View3D uAF; // auxiliary fluid
View3D uCR; // conserved radiation
};

#endif // STATE_HPP_

0 comments on commit 26f102e

Please sign in to comment.