[MITgcm-support] Bryan-Lewis vertical diffusivity for passive tracers

David Wang climater at gmail.com
Mon Sep 14 12:07:33 EDT 2009


Hi Martin,

Thank you very much for your clear explanation. I now understand the flow.
Since I have no non-BL79 background vertical diffusivity (diffKzT and
diffKzS unset in "data", nor will PTRACERS_diffKr in "data.ptracers"), I
suppose passive tracers will take exactly the same values of vertical
diffusivity as salinity, which is what I intend. I'm glad there is no code
tweak necessary.

Though I want to be clarified on one point in your explanation, which I
write between your lines.

Regards,
David

On Mon, Sep 14, 2009 at 3:15 AM, Martin Losch <Martin.Losch at awi.de> wrote:

> Hi David,
>
> I agree that it is a little confusing. To me it looks like the trick is
> that calc_3d_diffusivity is called twice.
> 1. in kpp_calc, where is sets (let's stick with salinity) KPPdiffKzS (the
> "background diffusivity", which includes BL79), in the next step KPPdiffKzS
> is used to compute to compute vddiff (in kppmix). vddiff(:,::,2) is the full
> kpp diffusivity for salinity (including the background diffusivity, ie.also
> BL79) and is then copied to KPPdiffKzS; again, below the actively mixed
> layer, KPPdiffKzS has not changed (no contribution from KPP) and is the
> background diffiusivity.
>
Apparently there is still KPP contribution to KPPdiffKzS below the mixed
layer (or KPP surface boundary layer), which comes from Ri number dependent
shear instability in the interior.


> 2. in thermodynamics calc_3d_diffusivity is called to copy KPPdiffKzS to
> the work array kappaKr, which accumulates all contributions to the vertical
> diffusivity (also e.g. the GMredi contribution). implicity diffusion is
> applied with kappaKr
>
> for passive tracers it's the same, except that kpp does not compute
> anything for ptracers, but just uses the salinity diffusivity (whether
> that's correct is not clear to me, but it's plausible: why should, say
> nitrate be mixed by turbulence any differently from salinity), so that the
> non-BL79 part of the background diffusivity is removed (-diffKrS) and
> replaced by the corresponding part for the ptracer (+PTRACERS_diffKrNr). It
> appears a little inconsistent, that you can have different background
> diffusivities for salinity and a passive tracer (keep in mind that these are
> not the molecular diffusivities, where it would be necessary), but that the
> BL79 diffusivities are the same (they are of the same "quality" as diffKrS,
> ie, some prescribed diffusivities based on sparse observations(?) and some
> plausibility considerations).
>
> So in the end, as far as I can see, BL79 is already implemented for
> ptracers; the BL79 contribution to vertical diffusivity is just hardwired to
> the same values as for temperature and salinity.
>
> Martin
>
>
>
> On Sep 14, 2009, at 1:24 AM, David Wang wrote:
>
>  Hi there,
>>
>> I have been using Bryan and Lewis (1979) type spatially varying vertical
>> diffusivity together with pkg/kpp and pkg/gmredi for both potential
>> temperature and salinity in my model runs. Now I need to put in some passive
>> tracers (with pkg/ptracers) of the same vertical diffusivity. I wasn't sure
>> if passive tracers simply inherit that from potential temperature and
>> salinity or not. So I looked into the code, but was left confused even for
>> the treatment of active tracers.
>>
>> The key routine to calculate vertical diffusivity with implicitDiffusion
>> on, I believe, is calc_3d_diffusivity.F. In this routine, Bryan-Lewis
>> diffusivity and pkg/kpp are apparently mutually exclusive, as Bryan-Lewis
>> parameters contribute KappaRTr only when trUseKPP is false. This routine is
>> called by both model/src/thermodynamics.F and pkg/kpp/kpp_calc.F. In the
>> former,
>>
>>          CALL CALC_3D_DIFFUSIVITY(
>>     I         bi,bj,iMin,iMax,jMin,jMax,
>>     I         GAD_TEMPERATURE, useGMredi, useKPP,
>>     O         kappaRk,
>>     I         myThid)
>>
>> which, since useKPP is true, ignores the Bryan-Lewis contribution, but
>> take the kpp contribution (CALL KPP_CALC_DIFF_T); while in the latter,
>>
>>      CALL CALC_3D_DIFFUSIVITY(
>>     I        bi,bj,1-Olx,sNx+OLx,1-Oly,sNy+OLy,
>>     I        GAD_SALINITY, .FALSE., .FALSE.,
>>     O        KPPdiffKzS(1-Olx,1-Oly,1,bi,bj),
>>     I        myThid)
>>
>> which, since the flag is hard-coded false, takes the Bryan-Lewis
>> contribution, but ignores the kpp contribution.
>>
>> Now it's unclear to me how different contributions to the total vertical
>> diffusivity add up (even though for the kpp model output, I believe the
>> model correctly adds the kpp contribution upon the Bryan-Lewis background
>> values). Without this understanding, I'm not sure I can implement
>> Bryan-Lewis diffusivity for passive tracers if it's not readily available.
>>
>> Any clarification and explanation appreciated!
>>
>> David
>>
>>
>>
>>
>> --
>> turn and live.
>> _______________________________________________
>> MITgcm-support mailing list
>> MITgcm-support at mitgcm.org
>> http://mitgcm.org/mailman/listinfo/mitgcm-support
>>
>
> _______________________________________________
> MITgcm-support mailing list
> MITgcm-support at mitgcm.org
> http://mitgcm.org/mailman/listinfo/mitgcm-support
>



-- 
turn and live.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mitgcm.org/pipermail/mitgcm-support/attachments/20090914/6d1fbeb6/attachment.htm>


More information about the MITgcm-support mailing list