REMORA
Regional Modeling of Oceans Refined Adaptively
Loading...
Searching...
No Matches
REMORA_Derive.cpp
Go to the documentation of this file.
1#include "REMORA_Derive.H"
3
4using namespace amrex;
5
6namespace derived {
7
8void
10 const amrex::Box& /*bx*/,
11 amrex::FArrayBox& /*derfab*/,
12 int /*dcomp*/,
13 int /*ncomp*/,
14 const amrex::FArrayBox& /*datfab*/,
15 const amrex::Array4<const amrex::Real>& /*pm*/,
16 const amrex::Array4<const amrex::Real>& /*pn*/,
17 const amrex::Geometry& /*geomdata*/,
18 amrex::Real /*time*/,
19 const int* /*bcrec*/,
20 const int /*level*/)
21{
22 // This routine does nothing -- we use it as a placeholder.
23}
24
25/*
26 * \brief Function to calculate vorticity for derived field output
27 *
28 * @param[in ] bx box to calculate on
29 * @param[ out] derfab derived field output
30 * @param[in ] dcomp component to store derived field
31 * @param[in ] ncomp number of components
32 * @param[in ] datfab velocity to be used to calculate derived field
33 * @param[in ] pm 1/dx
34 * @param[in ] pn 1/dy
35 * @param[in ] geomdata geometry data
36 * @param[in ] time current time
37 * @param[in ] bcrec BC info
38 * @param[in ] level current level
39 */
40void
42 const amrex::Box& bx,
43 amrex::FArrayBox& derfab,
44 int dcomp,
45 int ncomp,
46 const amrex::FArrayBox& datfab,
47 const amrex::Array4<const amrex::Real>& pm,
48 const amrex::Array4<const amrex::Real>& pn,
49 const amrex::Geometry& /*geomdata*/,
50 amrex::Real /*time*/,
51 const int* /*bcrec*/,
52 const int /*level*/)
53{
54 AMREX_ALWAYS_ASSERT(ncomp == 1);
55
56 auto const dat = datfab.array(); // cell-centered velocity
57 auto tfab = derfab.array(); // cell-centered vorticity
58
59 ParallelFor(bx, [=] AMREX_GPU_DEVICE(int i, int j, int k) noexcept
60 {
61 Real d2x = 0.5_rt / pm(i-1,j, 0) + 1.0_rt / pm(i,j,0) + 0.5_rt / pm(i+1,j,0);
62 Real d2y = 0.5_rt / pn(i, j-1,0) + 1.0_rt / pm(i,j,0) + 0.5_rt / pm(i,j+1,0);
63 tfab(i,j,k,dcomp) = (dat(i+1,j,k,1) - dat(i-1,j,k,1)) / (d2x) // dv/dx
64 - (dat(i,j+1,k,0) - dat(i,j-1,k,0)) / (d2y); // du/dy
65 });
66}
67}
68
void remora_dernull(const amrex::Box &, amrex::FArrayBox &, int, int, const amrex::FArrayBox &, const amrex::Array4< const amrex::Real > &, const amrex::Array4< const amrex::Real > &, const amrex::Geometry &, amrex::Real, const int *, const int)
void remora_dervort(const amrex::Box &bx, amrex::FArrayBox &derfab, int dcomp, int ncomp, const amrex::FArrayBox &datfab, const amrex::Array4< const amrex::Real > &pm, const amrex::Array4< const amrex::Real > &pn, const amrex::Geometry &, amrex::Real, const int *, const int)