relax_one Function

private pure function relax_one(hTr_cur, tgt, strength, d, band, dt) result(res)

Cosine-ramp implicit relaxation of one cell toward tgt. decay = exp(-strength*alpha*dt), alpha the cosine ramp at band position d; result = hTr_curdecay + tgt(1-decay). Funnels through relax_toward for the shared core algebra (§3.1 / step 10 “one home” — the map-driven kernels derive decay from a per-cell Idamp instead of this band/strength ramp, but both land on the same cur*decay + tgt*(1-decay) update).

Arguments

Type IntentOptional Attributes Name
real(kind=wp), intent(in) :: hTr_cur
real(kind=wp), intent(in) :: tgt
real(kind=wp), intent(in) :: strength
integer, intent(in) :: d
integer, intent(in) :: band
real(kind=wp), intent(in) :: dt

Return Value real(kind=wp)


Calls

proc~~relax_one~~CallsGraph proc~relax_one relax_one proc~relax_toward relax_toward proc~relax_one->proc~relax_toward

Called by

proc~~relax_one~~CalledByGraph proc~relax_one relax_one proc~relax_band_x_impl relax_band_x_impl proc~relax_band_x_impl->proc~relax_one proc~relax_band_y_impl relax_band_y_impl proc~relax_band_y_impl->proc~relax_one proc~sponge_relax_band_x_tracer sponge_relax_band_x_tracer proc~sponge_relax_band_x_tracer->proc~relax_band_x_impl proc~sponge_relax_band_y_tracer sponge_relax_band_y_tracer proc~sponge_relax_band_y_tracer->proc~relax_band_y_impl proc~ocean_sponge_apply_tracers ocean_sponge_apply_tracers proc~ocean_sponge_apply_tracers->proc~sponge_relax_band_x_tracer proc~ocean_sponge_apply_tracers->proc~sponge_relax_band_y_tracer proc~run_stage_split run_stage_split proc~run_stage_split->proc~ocean_sponge_apply_tracers proc~ocean_dyn_step_split ocean_dyn_step_split proc~ocean_dyn_step_split->proc~run_stage_split

Variables

Type Visibility Attributes Name Initial
real(kind=wp), private, parameter :: PI = acos(-1.0_wp)
real(kind=wp), private :: alpha
real(kind=wp), private :: decay

Source Code

   pure real(wp) function relax_one(hTr_cur, tgt, strength, d, band, dt) result(res)
      !! Cosine-ramp implicit relaxation of one cell toward `tgt`.
      !! `decay = exp(-strength*alpha*dt)`, alpha the cosine ramp at band
      !! position `d`; result = hTr_cur*decay + tgt*(1-decay). Funnels
      !! through `relax_toward` for the shared core algebra (§3.1 / step 10
      !! "one home" — the map-driven kernels derive `decay` from a per-cell
      !! `Idamp` instead of this band/strength ramp, but both land on the
      !! same `cur*decay + tgt*(1-decay)` update).
      !$acc routine seq
      real(wp), intent(in) :: hTr_cur, tgt, strength, dt
      integer, intent(in) :: d, band
      real(wp) :: alpha, decay
      real(wp), parameter :: PI = acos(-1.0_wp)
      alpha = 0.5_wp*(1.0_wp + cos(PI*real(d, wp)/real(band, wp)))
      decay = exp(-strength*alpha*dt)
      res = relax_toward(hTr_cur, tgt, decay)
   end function relax_one