REMORA
Regional Modeling of Oceans Refined Adaptively
Loading...
Searching...
No Matches
REMORA_apply_clim_nudg.cpp
Go to the documentation of this file.
1#include <REMORA.H>
2
3using namespace amrex;
4
5/**
6 * @param[in ] bx box to apply climatology on
7 * @param[in ] ioff offset in x-direction
8 * @param[in ] joff offset in y-direction
9 * @param[inout] var variable to update
10 * @param[in ] var_old variable to compare against for nudging
11 * @param[in ] var_clim climatology value to nudge towards
12 * @param[in ] clim_coeff nudging time scale (1/s)
13 * @param[in ] Hz vertical cell height
14 * @param[in ] pm 1/dx
15 * @param[in ] pn 1/dy
16 * @param[in ] dt_lev time step
17 */
18void
20 int ioff, int joff,
21 const Array4<Real >& var,
22 const Array4<Real const>& var_old,
23 const Array4<Real const>& var_clim,
24 const Array4<Real const>& clim_coeff,
25 const Array4<Real const>& Hz,
26 const Array4<Real const>& pm,
27 const Array4<Real const>& pn,
28 const Real dt_lev)
29{
30 ParallelFor(bx, [=] AMREX_GPU_DEVICE (int i, int j, int k)
31 {
32 Real cff = 0.5_rt * (clim_coeff(i-ioff,j-joff,k) + clim_coeff(i,j,k));
33 if (ioff==1 || joff==1) {
34 Real om = 2.0_rt / (pm(i-ioff,j-joff,0)+pm(i,j,0));
35 Real on = 2.0_rt / (pn(i-ioff,j-joff,0)+pn(i,j,0));
36 cff *= 0.5_rt * (Hz(i-ioff,j-joff,k) + Hz(i,j,k)) * om * on;
37 } else {
38 cff *= dt_lev;
39 }
40 var(i,j,k) += cff * (var_clim(i,j,k) - var_old(i,j,k));
41 });
42}
void apply_clim_nudg(const amrex::Box &bx, int ioff, int joff, const amrex::Array4< amrex::Real > &var, const amrex::Array4< amrex::Real const > &var_old, const amrex::Array4< amrex::Real const > &var_clim, const amrex::Array4< amrex::Real const > &clim_coeff, const amrex::Array4< amrex::Real const > &Hz, const amrex::Array4< amrex::Real const > &pm, const amrex::Array4< amrex::Real const > &pn, const amrex::Real dt_lev=amrex::Real(0.0))
Apply climatology nudging.