/[MITgcm]/MITgcm/pkg/generic_advdiff/gad_biharm_r.F
ViewVC logotype

Contents of /MITgcm/pkg/generic_advdiff/gad_biharm_r.F

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.1 - (show annotations) (download)
Fri Jun 15 13:26:20 2012 UTC (11 years, 10 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint64y, checkpoint64x, checkpoint64z, checkpoint64o, checkpoint64a, checkpoint63r, checkpoint64q, checkpoint64p, checkpoint64s, checkpoint64r, checkpoint64u, checkpoint64t, checkpoint64w, checkpoint64v, checkpoint64n, checkpoint64b, checkpoint64e, checkpoint63q, checkpoint64d, checkpoint64c, checkpoint64g, checkpoint64f, checkpoint65b, checkpoint65a, checkpoint64i, checkpoint63o, checkpoint63p, checkpoint64h, checkpoint63s, checkpoint64k, checkpoint64, checkpoint65, checkpoint64j, checkpoint64m, checkpoint64l
add subroutine to compute (& add) vertical flux for biharmonic diffusion

1 C $Header: /u/gcmpack/MITgcm/pkg/generic_advdiff/gad_biharm_y.F,v 1.4 2006/12/05 05:26:46 jmc Exp $
2 C $Name: $
3
4 #include "GAD_OPTIONS.h"
5
6 CBOP
7 C !ROUTINE: GAD_BIHARM_R
8
9 C !INTERFACE: ==========================================================
10 SUBROUTINE GAD_BIHARM_R(
11 I bi, bj, k,
12 I diffKr4, tracer,
13 U d4f,
14 I myThid )
15
16 C !DESCRIPTION:
17 C Calculates the vertical flux due to bi-harmonic diffusion of a tracer.
18 C \begin{equation*}
19 C F^r_{diff} = \kappa_4 \partial_r ( \partial^2 / \partial_r^2 \theta )
20 C \end{equation*}
21
22 C !USES: ===============================================================
23 IMPLICIT NONE
24 #include "SIZE.h"
25 #include "EEPARAMS.h"
26 #include "PARAMS.h"
27 #include "GRID.h"
28
29 C !INPUT PARAMETERS: ===================================================
30 C bi,bj :: tile indices
31 C k :: vertical level
32 C diffKr4 :: vertical bi-harmonic diffusivity
33 C tracer :: tracer field
34 C myThid :: my thread Id number
35 INTEGER bi, bj, k
36 _RL diffKr4(Nr)
37 _RL tracer (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr,nSx,nSy)
38 INTEGER myThid
39
40 C !OUTPUT PARAMETERS: ==================================================
41 C dfy :: vertical diffusive flux
42 _RL d4f (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
43
44 C !LOCAL VARIABLES: ====================================================
45 C i,j,n :: loop indices
46 C del2T :: vertical 2nd derivative of tracer
47 C gradR :: vertical 1rst derivative of tracer (*rkSign)
48 INTEGER i, j, n
49 INTEGER kl, km, kp
50 _RL del2T(1-OLx:sNx+OLx,1-OLy:sNy+OLy,1:2)
51 _RL gradR(1-OLx:sNx+OLx,1-OLy:sNy+OLy,1:3)
52 _RL tmpFac
53 CEOP
54
55 IF ( k.GE.2 ) THEN
56
57 C Calculate vertical gradient @ interface k-1, k & k+1 (n=1:3)
58 DO n=1,3
59 km = k+n-3
60 kl = k+n-2
61 IF ( km.LT.1 .OR. kl.GT.Nr ) THEN
62 DO j=1-OLy,sNy+OLy
63 DO i=1-OLx,sNx+OLx
64 gradR(i,j,n) = 0.
65 ENDDO
66 ENDDO
67 ELSE
68 tmpFac = recip_drC(kl)*deepFac2F(kl)*rhoFacF(kl)
69 DO j=1-OLy,sNy+OLy
70 DO i=1-OLx,sNx+OLx
71 gradR(i,j,n) = ( tracer(i,j,kl,bi,bj)-tracer(i,j,km,bi,bj) )
72 & *tmpFac*maskC(i,j,kl,bi,bj)*maskC(i,j,km,bi,bj)
73 ENDDO
74 ENDDO
75 ENDIF
76 ENDDO
77
78 C Calculate vertical 2nd derivative @ level k-1 & k (n=1:2)
79 DO n=1,2
80 kl = k+n-2
81 kp = k+n-1
82 tmpFac = recip_drF(kl)*recip_deepFac2C(kl)*recip_rhoFacC(kl)
83 DO j=1-OLy,sNy+OLy
84 DO i=1-OLx,sNx+OLx
85 del2T(i,j,n) = ( gradR(i,j,n+1)-gradR(i,j,n) )
86 & *_recip_hFacC(i,j,kl,bi,bj)
87 ENDDO
88 ENDDO
89 ENDDO
90
91 C Add bi-harmonic flux (gradient of 2nd derivative)
92 tmpFac = rkSign*recip_drC(k)*deepFac2F(k)*rhoFacF(k)
93 DO j=1-OLy,sNy+OLy
94 DO i=1-OLx,sNx+OLx
95 d4f(i,j) = d4f(i,j)
96 & + diffKr4(k)*( del2T(i,j,2)-del2T(i,j,1) )
97 & *tmpFac*_rA(i,j,bi,bj)
98 ENDDO
99 ENDDO
100
101 ENDIF
102
103 RETURN
104 END

  ViewVC Help
Powered by ViewVC 1.1.22