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

Annotation 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 - (hide annotations) (download)
Mon Aug 18 12:22:46 2014 UTC (9 years, 9 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 jmc 1.2 C $Header: /u/gcmpack/MITgcm/pkg/generic_advdiff/gad_biharm_r.F,v 1.1 2012/06/15 13:26:20 jmc Exp $
2 jmc 1.1 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 jmc 1.2 _RL tracer (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
38 jmc 1.1 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 jmc 1.2 gradR(i,j,n) = ( tracer(i,j,kl)-tracer(i,j,km) )
72 jmc 1.1 & *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