MCPcopy Create free account
hub / github.com/AMReX-Astro/Castro / ca_derpi

Function ca_derpi

Exec/gravity_tests/hydrostatic_adjust/Problem_Derive.cpp:11–87  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

9using RealVector = amrex::Gpu::ManagedVector<amrex::Real>;
10
11void ca_derpi(const Box& bx, FArrayBox& derfab, int dcomp, int /*ncomp*/,
12 const FArrayBox& datfab, const Geometry& geomdata,
13 Real /*time*/, const int* /*bcrec*/, int /*level*/)
14{
15
16 // derive the dynamic pressure
17
18 const auto dx = geomdata.CellSizeArray();
19 const auto problo = geomdata.ProbLoArray();
20
21 auto const dat = datfab.array();
22 auto const der = derfab.array();
23
24 amrex::ParallelFor(bx,
25 [=] AMREX_GPU_HOST_DEVICE (int i, int j, int k)
26 {
27
28 Real x = problo[0] + dx[0] * (static_cast<Real>(i) + 0.5_rt) - problem::center[0];
29
30 Real y = 0.0;
31#if AMREX_SPACEDIM >= 2
32 y = problo[1] + dx[1] * (static_cast<Real>(j) + 0.5_rt) - problem::center[1];
33#endif
34
35 Real z = 0.0;
36#if AMREX_SPACEDIM == 3
37 z = problo[2] + dx[2] * (static_cast<Real>(k) + 0.5_rt) - problem::center[2];
38#endif
39
40#if AMREX_SPACEDIM == 1
41 Real dist = x;
42#elif AMREX_SPACEDIM == 2
43 Real dist = std::sqrt(x*x + y*y);
44#else
45 Real dist = std::sqrt(x*x + y*y + z*z);
46#endif
47
48 Real rhoInv = 1.0_rt / dat(i,j,k,URHO);
49 Real e = dat(i,j,k,UEINT) * rhoInv;
50 Real temp = dat(i,j,k,UTEMP);
51
52 eos_t eos_state;
53
54 for (int n = 0; n < NumSpec; n++) {
55 eos_state.xn[n] = dat(i,j,k,UFS+n) / dat(i,j,k,URHO);
56 }
57#if NAUX_NET > 0
58 for (int n = 0; n < NumAux; n++) {
59 eos_state.aux[n] = dat(i,j,k,UFX+n) / dat(i,j,k,URHO);
60 }
61#endif
62
63 // Protect against negative internal energy
64
65 if (e <= 0.0_rt) {
66 eos_state.rho = dat(i,j,k,URHO);
67 eos_state.T = temp;
68

Callers

nothing calls this directly

Calls 1

interpolateFunction · 0.85

Tested by

no test coverage detected