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"
2#include "REMORA_Constants.H"
4
5using namespace amrex;
6
7namespace derived {
8
9void
11 const amrex::Box& /*bx*/,
12 amrex::FArrayBox& /*derfab*/,
13 int /*dcomp*/,
14 int /*ncomp*/,
15 const amrex::FArrayBox& /*datfab*/,
16 const amrex::Array4<const amrex::Real>& /*pm*/,
17 const amrex::Array4<const amrex::Real>& /*pn*/,
18 const amrex::Array4<const amrex::Real>& /*maskr*/,
19 const amrex::Geometry& /*geomdata*/,
20 amrex::Real /*time*/,
21 const int* /*bcrec*/,
22 const int /*level*/)
23{
24 // This routine does nothing -- we use it as a placeholder.
25}
26
27/*
28 * \brief Function to calculate vorticity for derived field output
29 *
30 * @param[in ] bx box to calculate on
31 * @param[ out] derfab derived field output
32 * @param[in ] dcomp component to store derived field
33 * @param[in ] ncomp number of components
34 * @param[in ] datfab velocity to be used to calculate derived field
35 * @param[in ] pm 1/dx
36 * @param[in ] pn 1/dy
37 * @param[in ] geomdata geometry data
38 * @param[in ] time current time
39 * @param[in ] bcrec BC info
40 * @param[in ] level current level
41 */
42void
44 const amrex::Box& bx,
45 amrex::FArrayBox& derfab,
46 int dcomp,
47 int ncomp,
48 const amrex::FArrayBox& datfab,
49 const amrex::Array4<const amrex::Real>& pm,
50 const amrex::Array4<const amrex::Real>& pn,
51 const amrex::Array4<const amrex::Real>& /*maskr*/,
52 const amrex::Geometry& /*geomdata*/,
53 amrex::Real /*time*/,
54 const int* /*bcrec*/,
55 const int /*level*/)
56{
57 AMREX_ALWAYS_ASSERT(ncomp == 1);
58
59 auto const dat = datfab.array(); // cell-centered velocity
60 auto tfab = derfab.array(); // cell-centered vorticity
61
62 ParallelFor(bx, [=] AMREX_GPU_DEVICE(int i, int j, int k) noexcept
63 {
64 Real d2x = Real(0.5) / pm(i-1,j, 0) + one / pm(i,j,0) + Real(0.5) / pm(i+1,j,0);
65 Real d2y = Real(0.5) / pn(i, j-1,0) + one / pn(i,j,0) + Real(0.5) / pn(i,j+1,0);
66 tfab(i,j,k,dcomp) = (dat(i+1,j,k,1) - dat(i-1,j,k,1)) / (d2x) // dv/dx
67 - (dat(i,j+1,k,0) - dat(i,j-1,k,0)) / (d2y); // du/dy
68 /*TODO: Add masking to vorticity. Need to calculate psi mask first.*/
69 });
70}
71}
72
constexpr amrex::Real one
AMREX_ALWAYS_ASSERT(!NSPeriodic||!EWPeriodic)
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::Array4< const amrex::Real > &, const amrex::Geometry &, amrex::Real, const int *, const int)
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::Array4< const amrex::Real > &, const amrex::Geometry &, amrex::Real, const int *, const int)