Skip to content

Commit 8d4e492

Browse files
authored
Merge pull request #15 from pkestene/refactor/four_quadrants
Refactor/four quadrants add 3d
2 parents 50da6f6 + 20a8c82 commit 8d4e492

File tree

10 files changed

+1039
-549
lines changed

10 files changed

+1039
-549
lines changed

settings/test_four_quadrant_2D.ini

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ y=0.8
3838
outputDir=./
3939
outputPrefix=test_four_quadrant_2D
4040
outputVtkAscii=false
41+
hdf5_enabled=yes
4142

4243
[other]
4344
implementationVersion=0

settings/test_four_quadrant_3D.ini

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
[run]
2+
solver_name=Hydro_Muscl_3D
3+
tEnd=0.5
4+
nStepmax=500
5+
nOutput=10
6+
7+
[mesh]
8+
nx=48
9+
ny=48
10+
nz=48
11+
12+
xmin=0.0
13+
xmax=1.0
14+
15+
ymin=0.0
16+
ymax=1.0
17+
18+
zmin=0.0
19+
zmax=1.0
20+
21+
boundary_type_xmin=2
22+
boundary_type_xmax=2
23+
24+
boundary_type_ymin=2
25+
boundary_type_ymax=2
26+
27+
boundary_type_zmin=2
28+
boundary_type_zmax=2
29+
30+
[hydro]
31+
gamma0=1.666
32+
cfl=0.8
33+
niter_riemann=10
34+
iorder=2
35+
slope_type=2
36+
problem=four_quadrant
37+
riemann=hllc
38+
39+
[riemann2d]
40+
config_number=2
41+
x=0.8
42+
y=0.8
43+
z=0.8
44+
45+
[output]
46+
outputDir=./
47+
outputPrefix=test_four_quadrant_3D
48+
outputVtkAscii=false
49+
hdf5_enabled=yes
50+
51+
[other]
52+
implementationVersion=0

src/muscl/HydroInitFunctors2D.h

Lines changed: 41 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -452,37 +452,36 @@ class InitFourQuadrantFunctor2D : public HydroBaseFunctor2D
452452
{
453453

454454
public:
455-
InitFourQuadrantFunctor2D(HydroParams params,
456-
DataArray2d Udata,
457-
int configNumber,
458-
HydroState U0,
459-
HydroState U1,
460-
HydroState U2,
461-
HydroState U3,
462-
real_t xt,
463-
real_t yt)
455+
using HydroState_t = RiemannConfig<2>::HydroState_t;
456+
using HydroStates_t = RiemannConfig<2>::HydroStates_t;
457+
458+
InitFourQuadrantFunctor2D(HydroParams params,
459+
DataArray2d Udata,
460+
HydroStates_t Us,
461+
real_t xt,
462+
real_t yt)
464463
: HydroBaseFunctor2D(params)
465464
, Udata(Udata)
466-
, U0(U0)
467-
, U1(U1)
468-
, U2(U2)
469-
, U3(U3)
465+
, Us(Us)
470466
, xt(xt)
471467
, yt(yt){};
472468

473469
// static method which does it all: create and execute functor
474470
static void
475-
apply(HydroParams params,
476-
DataArray2d Udata,
477-
int configNumber,
478-
HydroState U0,
479-
HydroState U1,
480-
HydroState U2,
481-
HydroState U3,
482-
real_t xt,
483-
real_t yt)
471+
apply(ConfigMap const & configMap, HydroParams params, DataArray2d Udata)
484472
{
485-
InitFourQuadrantFunctor2D functor(params, Udata, configNumber, U0, U1, U2, U3, xt, yt);
473+
int configNumber = configMap.getInteger("riemann2d", "config_number", 0);
474+
real_t xt = configMap.getFloat("riemann2d", "x", 0.8);
475+
real_t yt = configMap.getFloat("riemann2d", "y", 0.8);
476+
477+
auto Us = getRiemannConfig2d(configNumber);
478+
479+
primToCons<2>(Us[0], params.settings.gamma0);
480+
primToCons<2>(Us[1], params.settings.gamma0);
481+
primToCons<2>(Us[2], params.settings.gamma0);
482+
primToCons<2>(Us[3], params.settings.gamma0);
483+
484+
InitFourQuadrantFunctor2D functor(params, Udata, Us, xt, yt);
486485
Kokkos::parallel_for(
487486
"InitFourQuadrantFunctor2D",
488487
Kokkos::MDRangePolicy<Kokkos::Rank<2>>({ 0, 0 }, { params.isize, params.jsize }),
@@ -520,45 +519,45 @@ class InitFourQuadrantFunctor2D : public HydroBaseFunctor2D
520519
if (y < yt)
521520
{
522521
// quarter 2
523-
Udata(i, j, ID) = U2[ID];
524-
Udata(i, j, IP) = U2[IP];
525-
Udata(i, j, IU) = U2[IU];
526-
Udata(i, j, IV) = U2[IV];
522+
Udata(i, j, ID) = Us[2][ID];
523+
Udata(i, j, IP) = Us[2][IP];
524+
Udata(i, j, IU) = Us[2][IU];
525+
Udata(i, j, IV) = Us[2][IV];
527526
}
528527
else
529528
{
530529
// quarter 1
531-
Udata(i, j, ID) = U1[ID];
532-
Udata(i, j, IP) = U1[IP];
533-
Udata(i, j, IU) = U1[IU];
534-
Udata(i, j, IV) = U1[IV];
530+
Udata(i, j, ID) = Us[1][ID];
531+
Udata(i, j, IP) = Us[1][IP];
532+
Udata(i, j, IU) = Us[1][IU];
533+
Udata(i, j, IV) = Us[1][IV];
535534
}
536535
}
537536
else
538537
{
539538
if (y < yt)
540539
{
541540
// quarter 3
542-
Udata(i, j, ID) = U3[ID];
543-
Udata(i, j, IP) = U3[IP];
544-
Udata(i, j, IU) = U3[IU];
545-
Udata(i, j, IV) = U3[IV];
541+
Udata(i, j, ID) = Us[3][ID];
542+
Udata(i, j, IP) = Us[3][IP];
543+
Udata(i, j, IU) = Us[3][IU];
544+
Udata(i, j, IV) = Us[3][IV];
546545
}
547546
else
548547
{
549548
// quarter 0
550-
Udata(i, j, ID) = U0[ID];
551-
Udata(i, j, IP) = U0[IP];
552-
Udata(i, j, IU) = U0[IU];
553-
Udata(i, j, IV) = U0[IV];
549+
Udata(i, j, ID) = Us[0][ID];
550+
Udata(i, j, IP) = Us[0][IP];
551+
Udata(i, j, IU) = Us[0][IU];
552+
Udata(i, j, IV) = Us[0][IV];
554553
}
555554
}
556555

557556
} // end operator ()
558557

559-
DataArray2d Udata;
560-
HydroState2d U0, U1, U2, U3;
561-
real_t xt, yt;
558+
DataArray2d Udata;
559+
HydroStates_t Us;
560+
real_t xt, yt;
562561

563562
}; // InitFourQuadrantFunctor2D
564563

src/muscl/HydroInitFunctors3D.h

Lines changed: 181 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -535,6 +535,187 @@ class InitGreshoVortexFunctor3D : public HydroBaseFunctor3D
535535

536536
}; // InitGreshoVortexFunctor3D
537537

538+
/*************************************************/
539+
/*************************************************/
540+
/*************************************************/
541+
class InitFourQuadrantFunctor3D : public HydroBaseFunctor3D
542+
{
543+
544+
public:
545+
using HydroState_t = RiemannConfig<3>::HydroState_t;
546+
using HydroStates_t = RiemannConfig<3>::HydroStates_t;
547+
548+
InitFourQuadrantFunctor3D(HydroParams params,
549+
DataArray3d Udata,
550+
HydroStates_t Us,
551+
real_t xt,
552+
real_t yt,
553+
real_t zt)
554+
: HydroBaseFunctor3D(params)
555+
, Udata(Udata)
556+
, Us(Us)
557+
, xt(xt)
558+
, yt(yt)
559+
, zt(zt){};
560+
561+
// static method which does it all: create and execute functor
562+
static void
563+
apply(ConfigMap const & configMap, HydroParams params, DataArray3d Udata)
564+
{
565+
int configNumber = configMap.getInteger("riemann2d", "config_number", 0);
566+
real_t xt = configMap.getFloat("riemann2d", "x", 0.8);
567+
real_t yt = configMap.getFloat("riemann2d", "y", 0.8);
568+
real_t zt = configMap.getFloat("riemann2d", "z", 0.8);
569+
570+
auto Us = getRiemannConfig3d(configNumber);
571+
572+
primToCons<3>(Us[0], params.settings.gamma0);
573+
primToCons<3>(Us[1], params.settings.gamma0);
574+
primToCons<3>(Us[2], params.settings.gamma0);
575+
primToCons<3>(Us[3], params.settings.gamma0);
576+
primToCons<3>(Us[4], params.settings.gamma0);
577+
primToCons<3>(Us[5], params.settings.gamma0);
578+
primToCons<3>(Us[6], params.settings.gamma0);
579+
primToCons<3>(Us[7], params.settings.gamma0);
580+
581+
InitFourQuadrantFunctor3D functor(params, Udata, Us, xt, yt, zt);
582+
Kokkos::parallel_for("InitFourQuadrantFunctor3D",
583+
Kokkos::MDRangePolicy<Kokkos::Rank<3>>(
584+
{ 0, 0, 0 }, { params.isize, params.jsize, params.ksize }),
585+
functor);
586+
}
587+
588+
KOKKOS_INLINE_FUNCTION
589+
void
590+
operator()(const int & i, const int & j, const int & k) const
591+
{
592+
593+
const int ghostWidth = params.ghostWidth;
594+
595+
#ifdef EULER_KOKKOS_USE_MPI
596+
const int i_mpi = params.myMpiPos[IX];
597+
const int j_mpi = params.myMpiPos[IY];
598+
const int k_mpi = params.myMpiPos[IZ];
599+
#else
600+
const int i_mpi = 0;
601+
const int j_mpi = 0;
602+
const int k_mpi = 0;
603+
#endif
604+
605+
const int nx = params.nx;
606+
const int ny = params.ny;
607+
const int nz = params.nz;
608+
609+
const real_t xmin = params.xmin;
610+
const real_t ymin = params.ymin;
611+
const real_t zmin = params.zmin;
612+
const real_t dx = params.dx;
613+
const real_t dy = params.dy;
614+
const real_t dz = params.dz;
615+
616+
real_t x = xmin + dx / 2 + (i + nx * i_mpi - ghostWidth) * dx;
617+
real_t y = ymin + dy / 2 + (j + ny * j_mpi - ghostWidth) * dy;
618+
real_t z = zmin + dz / 2 + (k + nz * k_mpi - ghostWidth) * dz;
619+
620+
if (x < xt)
621+
{
622+
if (y < yt)
623+
{
624+
if (z < zt)
625+
{
626+
// region 2
627+
Udata(i, j, k, ID) = Us[2][ID];
628+
Udata(i, j, k, IP) = Us[2][IP];
629+
Udata(i, j, k, IU) = Us[2][IU];
630+
Udata(i, j, k, IV) = Us[2][IV];
631+
Udata(i, j, k, IW) = Us[2][IW];
632+
}
633+
else
634+
{
635+
// region 6
636+
Udata(i, j, k, ID) = Us[6][ID];
637+
Udata(i, j, k, IP) = Us[6][IP];
638+
Udata(i, j, k, IU) = Us[6][IU];
639+
Udata(i, j, k, IV) = Us[6][IV];
640+
Udata(i, j, k, IW) = Us[6][IW];
641+
}
642+
}
643+
else
644+
{
645+
if (z < zt)
646+
{
647+
// region 1
648+
Udata(i, j, k, ID) = Us[1][ID];
649+
Udata(i, j, k, IP) = Us[1][IP];
650+
Udata(i, j, k, IU) = Us[1][IU];
651+
Udata(i, j, k, IV) = Us[1][IV];
652+
Udata(i, j, k, IW) = Us[1][IW];
653+
}
654+
else
655+
{
656+
// region 5
657+
Udata(i, j, k, ID) = Us[5][ID];
658+
Udata(i, j, k, IP) = Us[5][IP];
659+
Udata(i, j, k, IU) = Us[5][IU];
660+
Udata(i, j, k, IV) = Us[5][IV];
661+
Udata(i, j, k, IW) = Us[5][IW];
662+
}
663+
}
664+
}
665+
else
666+
{
667+
if (y < yt)
668+
{
669+
if (z < zt)
670+
{
671+
// region 3
672+
Udata(i, j, k, ID) = Us[3][ID];
673+
Udata(i, j, k, IP) = Us[3][IP];
674+
Udata(i, j, k, IU) = Us[3][IU];
675+
Udata(i, j, k, IV) = Us[3][IV];
676+
Udata(i, j, k, IW) = Us[3][IW];
677+
}
678+
else
679+
{
680+
// region 7
681+
Udata(i, j, k, ID) = Us[7][ID];
682+
Udata(i, j, k, IP) = Us[7][IP];
683+
Udata(i, j, k, IU) = Us[7][IU];
684+
Udata(i, j, k, IV) = Us[7][IV];
685+
Udata(i, j, k, IW) = Us[7][IW];
686+
}
687+
}
688+
else
689+
{
690+
if (z < zt)
691+
{
692+
// region 0
693+
Udata(i, j, k, ID) = Us[0][ID];
694+
Udata(i, j, k, IP) = Us[0][IP];
695+
Udata(i, j, k, IU) = Us[0][IU];
696+
Udata(i, j, k, IV) = Us[0][IV];
697+
Udata(i, j, k, IW) = Us[0][IW];
698+
}
699+
else
700+
{
701+
// region 4
702+
Udata(i, j, k, ID) = Us[4][ID];
703+
Udata(i, j, k, IP) = Us[4][IP];
704+
Udata(i, j, k, IU) = Us[4][IU];
705+
Udata(i, j, k, IV) = Us[4][IV];
706+
Udata(i, j, k, IW) = Us[4][IW];
707+
}
708+
}
709+
}
710+
711+
} // end operator ()
712+
713+
DataArray3d Udata;
714+
HydroStates_t Us;
715+
real_t xt, yt, zt;
716+
717+
}; // InitFourQuadrantFunctor3D
718+
538719
/*************************************************/
539720
/*************************************************/
540721
/*************************************************/

0 commit comments

Comments
 (0)