# positive definite tracer advection schemes

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:

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!

edit retag close merge delete

Sort by » oldest newest most voted

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)
&                                                            )
&                                                            )


by

        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.)



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

replace:

        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.)


by:

        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.)

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.

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

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!!!

more

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).

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.

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

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

more