/[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.2 - (show annotations) (download)
Mon Aug 18 12:22:46 2014 UTC (9 years, 8 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint66g, checkpoint66f, checkpoint66e, checkpoint66d, checkpoint66c, checkpoint66b, checkpoint66a, checkpoint66o, checkpoint66n, checkpoint66m, checkpoint66l, checkpoint66k, checkpoint66j, checkpoint66i, checkpoint66h, checkpoint65z, checkpoint65x, checkpoint65y, checkpoint65r, checkpoint65s, checkpoint65p, checkpoint65q, checkpoint65v, checkpoint65w, checkpoint65t, checkpoint65u, checkpoint65j, checkpoint65k, checkpoint65h, checkpoint65i, checkpoint65n, checkpoint65o, checkpoint65l, checkpoint65m, checkpoint65c, checkpoint65f, checkpoint65g, checkpoint65d, checkpoint65e, HEAD
Changes since 1.1: +3 -3 lines
- change Tracer argument (drop bi,bj indices) in S/R GAD_CALC_RHS,
  GAD_C2_ADV_R, GAD_U3_ADV_R, GAD_C4_ADV_R, GAD_DIFF_R, GAD_BIHARM_R
  + also in GMREDI_X/Y/RTRANSPORT ; and update corresponding calls in
  S/R temp/salt/ptracers_integrate.F

1 C $Header: /u/gcmpack/MITgcm/pkg/generic_advdiff/gad_biharm_r.F,v 1.1 2012/06/15 13:26:20 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)
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)-tracer(i,j,km) )
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