ROMS
Loading...
Searching...
No Matches
bvf_mix_mod Module Reference

Functions/Subroutines

subroutine, public bvf_mix (ng, tile)
 
subroutine bvf_mix_tile (ng, tile, lbi, ubi, lbj, ubj, imins, imaxs, jmins, jmaxs, bvf, akt, akv)
 

Function/Subroutine Documentation

◆ bvf_mix()

subroutine, public bvf_mix_mod::bvf_mix ( integer, intent(in) ng,
integer, intent(in) tile )

Definition at line 27 of file bvf_mix.F.

28!***********************************************************************
29!
30 USE mod_param
31 USE mod_mixing
32!
33! Imported variable declarations.
34!
35 integer, intent(in) :: ng, tile
36!
37! Local variable declarations.
38!
39# include "tile.h"
40!
41 CALL bvf_mix_tile (ng, tile, &
42 & lbi, ubi, lbj, ubj, &
43 & imins, imaxs, jmins, jmaxs, &
44 & mixing(ng) % bvf, &
45 & mixing(ng) % AKt, &
46 & mixing(ng) % AKv)
47 RETURN
type(t_mixing), dimension(:), allocatable mixing
Definition mod_mixing.F:399

References bvf_mix_tile(), and mod_mixing::mixing.

Referenced by main3d().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ bvf_mix_tile()

subroutine bvf_mix_mod::bvf_mix_tile ( integer, intent(in) ng,
integer, intent(in) tile,
integer, intent(in) lbi,
integer, intent(in) ubi,
integer, intent(in) lbj,
integer, intent(in) ubj,
integer, intent(in) imins,
integer, intent(in) imaxs,
integer, intent(in) jmins,
integer, intent(in) jmaxs,
real(r8), dimension(lbi:,lbj:,0:), intent(in) bvf,
real(r8), dimension(lbi:,lbj:,0:,:), intent(out) akt,
real(r8), dimension(lbi:,lbj:,0:), intent(out) akv )
private

Definition at line 51 of file bvf_mix.F.

55!***********************************************************************
56!
57 USE mod_param
58 USE mod_scalars
59!
61# ifdef DISTRIBUTE
63# endif
64!
65! Imported variable declarations.
66!
67 integer, intent(in) :: ng, tile
68 integer, intent(in) :: LBi, UBi, LBj, UBj
69 integer, intent(in) :: IminS, ImaxS, JminS, JmaxS
70!
71# ifdef ASSUMED_SHAPE
72 real(r8), intent(in) :: bvf(LBi:,LBj:,0:)
73 real(r8), intent(out) :: Akt(LBi:,LBj:,0:,:)
74 real(r8), intent(out) :: Akv(LBi:,LBj:,0:)
75# else
76 real(r8), intent(in) :: bvf(LBi:UBi,LBj:UBj,0:N(ng))
77 real(r8), intent(out) :: Akt(LBi:UBi,LBj:UBj,0:N(ng),NAT)
78 real(r8), intent(out) :: Akv(LBi:UBi,LBj:UBj,0:N(ng))
79# endif
80!
81! Local variable declarations.
82!
83 integer :: i, itrc, j, k
84
85 real(r8) :: cff
86
87# include "set_bounds.h"
88!
89!-----------------------------------------------------------------------
90! Set tracer diffusivity as function of the Brunt-vaisala frequency.
91! Set vertical viscosity to its background value.
92!-----------------------------------------------------------------------
93!
94 DO k=1,n(ng)-1
95 DO j=jstr,jend
96 DO i=istr,iend
97 akv(i,j,k)=akv_bak(ng)
98 IF (bvf(i,j,k).lt.0.0_r8) THEN
99 akv(i,j,k)=bvf_nu0c
100 akt(i,j,k,itemp)=bvf_nu0c
101# ifdef SALINITY
102 akt(i,j,k,isalt)=bvf_nu0c
103# endif
104 ELSE IF (bvf(i,j,k).eq.0.0_r8) THEN
105 akv(i,j,k)=akv_bak(ng)
106 akt(i,j,k,itemp)=akt_bak(itemp,ng)
107# ifdef SALINITY
108 akt(i,j,k,isalt)=akt_bak(isalt,ng)
109# endif
110 ELSE
111 cff=bvf_nu0/sqrt(bvf(i,j,k))
112 akt(i,j,k,itemp)=min(bvf_numax,max(bvf_numin,cff))
113 akv(i,j,k)=akt(i,j,k,itemp)
114# ifdef SALINITY
115 akt(i,j,k,isalt)=akt(i,j,k,itemp)
116# endif
117 END IF
118 END DO
119 END DO
120 END DO
121!
122!-----------------------------------------------------------------------
123! Exchange boundary data.
124!-----------------------------------------------------------------------
125!
126 IF (ewperiodic(ng).or.nsperiodic(ng)) THEN
127 CALL exchange_w3d_tile (ng, tile, &
128 & lbi, ubi, lbj, ubj, 0, n(ng), &
129 & akv)
130 DO itrc=1,nat
131 CALL exchange_w3d_tile (ng, tile, &
132 & lbi, ubi, lbj, ubj, 0, n(ng), &
133 & akt(:,:,:,itrc))
134 END DO
135 END IF
136
137# ifdef DISTRIBUTE
138 CALL mp_exchange3d (ng, tile, inlm, 1, &
139 & lbi, ubi, lbj, ubj, 0, n(ng), &
140 & nghostpoints, &
141 & ewperiodic(ng), nsperiodic(ng), &
142 & akv)
143 CALL mp_exchange4d (ng, tile, inlm, 1, &
144 & lbi, ubi, lbj, ubj, 0, n(ng), 1, nat, &
145 & nghostpoints, &
146 & ewperiodic(ng), nsperiodic(ng), &
147 & akt)
148# endif
149
150 RETURN
subroutine exchange_w3d_tile(ng, tile, lbi, ubi, lbj, ubj, lbk, ubk, a)
integer nat
Definition mod_param.F:499
integer, parameter inlm
Definition mod_param.F:662
integer, dimension(:), allocatable n
Definition mod_param.F:479
integer nghostpoints
Definition mod_param.F:710
real(r8) bvf_numax
logical, dimension(:), allocatable ewperiodic
logical, dimension(:), allocatable nsperiodic
real(r8) bvf_numin
real(r8) bvf_nu0c
integer isalt
real(r8), dimension(:,:), allocatable akt_bak
real(r8), dimension(:), allocatable akv_bak
integer itemp
real(r8) bvf_nu0
subroutine mp_exchange4d(ng, tile, model, nvar, lbi, ubi, lbj, ubj, lbk, ubk, lbt, ubt, nghost, ew_periodic, ns_periodic, a, b, c)
subroutine mp_exchange3d(ng, tile, model, nvar, lbi, ubi, lbj, ubj, lbk, ubk, nghost, ew_periodic, ns_periodic, a, b, c, d)

References mod_scalars::akt_bak, mod_scalars::akv_bak, mod_scalars::bvf_nu0, mod_scalars::bvf_nu0c, mod_scalars::bvf_numax, mod_scalars::bvf_numin, mod_scalars::ewperiodic, exchange_3d_mod::exchange_w3d_tile(), mod_param::inlm, mod_scalars::isalt, mod_scalars::itemp, mp_exchange_mod::mp_exchange3d(), mp_exchange_mod::mp_exchange4d(), mod_param::nghostpoints, and mod_scalars::nsperiodic.

Referenced by bvf_mix().

Here is the call graph for this function:
Here is the caller graph for this function: