Ask Your Question

positive definite tracer advection schemes

asked 2022-05-20 19:18:08 +0200

Hello CROCO users,

I have a question about the advection schemes for tracers (e.g., temperature, salinity, passive tracer). In my simulation of a buoyancy-driven plume rising from a bottom heat source, I found that the concentration of the passive tracer I added to mark the plume fluid shows bogus negative values near the center of the source (see first image below). The same thing occurs in temperature (i.e., negative temperature anomaly at the source). Also, the negative minimum appears to grow with time (see second image below). I suspect these negative values are artifacts due to advection schemes. I am using WENO5 for trancers and TVD for velocities. The chosen cpp options are below:

define TS_HADV_WENO5

408 # define TS_VADV_WENO5 409 # define BIO_HADV_WENO5 410 # define UV_HADV_TVD 411 # define UV_VADV_TVD 412 # define W_HADV_TVD 413 # define W_VADV_TVD

I would like to know if there is a positive definite and monotonic scheme for tracers I can use other than WENO5.

I would appreciate if anyone can provide suggestions on diagnosing this issue.

Thanks! Guangyu!

image description image description

edit retag flag offensive close merge delete

4 answers

Sort by ยป oldest newest most voted

answered 2022-06-05 07:48:56 +0200

Try the following modifications.

in compute_vert_tracer_fluxes.h (WENO5 code), replace :

        FC(i,  1)=We(i,j,  1)*(        0.5*t(i,j,  1,nadv,itrc)
 &                       +0.58333333333333*t(i,j,  2,nadv,itrc)
 &                       -0.08333333333333*t(i,j,  3,nadv,itrc)
 &                                                            )
        FC(i,N-1)=We(i,j,N-1)*(        0.5*t(i,j,N  ,nadv,itrc)
 &                       +0.58333333333333*t(i,j,N-1,nadv,itrc)
 &                       -0.08333333333333*t(i,j,N-2,nadv,itrc)
 &                                                            )


        FC(i,1  )=We(i,j,1  )*flux1( t(i,j,1  ,nadv,itrc),
 &                                   t(i,j,2  ,nadv,itrc), We(i,j,1  ), 1.)

        FC(i,N-1)=We(i,j,N-1)*flux1( t(i,j,N-1,nadv,itrc),
 &                                   t(i,j,N  ,nadv,itrc), We(i,j,N-1), 1.)

Also, for the same points (1, N-1). In w_vadv_order5.h:


        FC(i,1)=We_r(i,1)*FLUX2( wz(i,j,1  ,nrhs),
 &                               wz(i,j,0  ,nrhs), We_r(i,1), 1.)

        FC(i,N)=We_r(i,N)*FLUX2( wz(i,j,N  ,nrhs),
 &                               wz(i,j,N-1,nrhs), We_r(i,N), 1.)


        FC(i,1)=We_r(i,1)*FLUX2( wz(i,j,0  ,nrhs),
 &                               wz(i,j,1  ,nrhs), We_r(i,1), 1.)

        FC(i,N)=We_r(i,N)*FLUX2( wz(i,j,N-1,nrhs),
 &                               wz(i,j,N  ,nrhs), We_r(i,N), 1.)
edit flag offensive delete link more


Hi Patrick, thanks a lot for sending me the revised code. I have implemented it and am now waiting for the test run to finish. It is very encouraging that the simulation has now gone past the previous time step when negative temperature anomalies appeared without showing any sign of that artifact.

xupeng66 gravatar imagexupeng66 ( 2022-06-05 23:36:56 +0200 )edit

answered 2022-06-06 16:45:13 +0200

I am happy to report back that this problem has been solved after implementing the changes in 'comput_ver_tracer_fluxes' and 'w_vadv_order5' as suggested by Patrick. Many thanks!!!

edit flag offensive delete link more

answered 2022-06-02 21:05:45 +0200

WENO5 is not the problem per se, but this scheme must be degraded near the bottom because the stencil is reduced there. The problem may simply be that the low-order scheme used at the first temperature point is not monotonic. We can try a first-order upwind scheme (in compute_vert_tracer_fluxes.h) to check this idea (there is a WENO3 scheme at the second point which seems to work well).

edit flag offensive delete link more


Many thanks for the suggestion, Patrick. I am wondering if you could help revise the source code in 'compute_ver_tracer_fluxes.h' to implement first-order upwind scheme for the second sigma layer? I will try to do it myself but more instructions will be much appreciated.

xupeng66 gravatar imagexupeng66 ( 2022-06-02 23:11:57 +0200 )edit

answered 2022-06-02 17:40:29 +0200

Hi Guangyu, I also had a similar problem and I am curious to know if your issue has been resolved yet?

edit flag offensive delete link more


Hi Qinyue, It is unclear to me what is causing this issue. But I found that the artifacts in temperature tended to appear when the source heat flux was relatively large. So it appeared that these artifacts occur when there are large spatial gradients in temperature.

xupeng66 gravatar imagexupeng66 ( 2022-06-02 18:59:50 +0200 )edit
Login/Signup to Answer

Question Tools

1 follower


Asked: 2022-05-20 19:18:08 +0200

Seen: 85 times

Last updated: Jun 06