/[MITgcm]/MITgcm/pkg/ptracers/ptracers_implicit.F
ViewVC logotype

Annotation of /MITgcm/pkg/ptracers/ptracers_implicit.F

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


Revision 1.9 - (hide annotations) (download)
Thu Dec 1 14:27:53 2011 UTC (12 years, 6 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint63h, checkpoint63i, checkpoint63j, checkpoint63g
Changes since 1.8: +16 -13 lines
add argument recip_hFac and pass it to vertical implicit solver S/R.

1 jmc 1.9 C $Header: /u/gcmpack/MITgcm/pkg/ptracers/ptracers_implicit.F,v 1.8 2010/11/14 23:32:15 jmc Exp $
2 jmc 1.1 C $Name: $
3    
4     #include "PTRACERS_OPTIONS.h"
5    
6     CBOP
7     C !ROUTINE: PTRACERS_IMPLICIT
8    
9     C !INTERFACE: ==========================================================
10 jmc 1.5 SUBROUTINE PTRACERS_IMPLICIT(
11 jmc 1.1 U kappaRk,
12 jmc 1.9 I recip_hFac,
13 jmc 1.1 I bi, bj, myTime, myIter, myThid )
14    
15     C !DESCRIPTION:
16     C Calls the implicit vertical advection/diffusion routine
17     C for each passive tracer.
18 jmc 1.8 C And apply open boundary conditions for each passive tracer
19     C Note: would be better to apply OBC in a dedicated S/R ;
20     C can be done here assuming no other contribution modify passive
21     C tracer after implicit vertical diffus/advect is applied.
22 jmc 1.1
23     C !USES: ===============================================================
24     IMPLICIT NONE
25     #include "SIZE.h"
26     #include "EEPARAMS.h"
27 jahn 1.6 #ifdef ALLOW_LONGSTEP
28     #include "LONGSTEP_PARAMS.h"
29     #include "LONGSTEP.h"
30     #endif
31 jmc 1.1 #include "PTRACERS_SIZE.h"
32 jmc 1.5 #include "PTRACERS_PARAMS.h"
33     #include "PTRACERS_FIELDS.h"
34 jmc 1.1 #include "PARAMS.h"
35     #include "GRID.h"
36     #include "GAD.h"
37     #include "DYNVARS.h"
38     #ifdef ALLOW_AUTODIFF_TAMC
39     # include "tamc.h"
40     # include "tamc_keys.h"
41     #endif
42    
43     C !INPUT PARAMETERS: ===================================================
44 jmc 1.9 C recip_hFac :: Inverse of cell open-depth factor
45     C bi,bj :: tile indices
46     C myTime :: time in simulation
47     C myIter :: iteration number in simulation
48     C myThid :: thread number
49     _RS recip_hFac(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
50 jmc 1.1 INTEGER bi,bj
51     _RL myTime
52     INTEGER myIter
53     INTEGER myThid
54    
55     C !OUTPUT PARAMETERS: ==================================================
56 jmc 1.9 C KappaRk :: vertical diffusion coefficient
57     _RL kappaRk(1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
58 jmc 1.1
59     #ifdef ALLOW_PTRACERS
60    
61     C !LOCAL VARIABLES: ====================================================
62     C iTracer :: tracer index
63     INTEGER iTracer
64     INTEGER iMin,iMax,jMin,jMax
65     INTEGER GAD_TR
66     CEOP
67    
68     iMin=0
69     iMax=sNx+1
70     jMin=0
71     jMax=sNy+1
72    
73     C Loop over tracers
74     DO iTracer=1,PTRACERS_numInUse
75    
76     #ifdef ALLOW_AUTODIFF_TAMC
77     act0 = iTracer - 1
78     max0 = PTRACERS_num
79     act1 = bi - myBxLo(myThid)
80     max1 = myBxHi(myThid) - myBxLo(myThid) + 1
81     act2 = bj - myByLo(myThid)
82     max2 = myByHi(myThid) - myByLo(myThid) + 1
83     act3 = myThid - 1
84     max3 = nTx*nTy
85     act4 = ikey_dynamics - 1
86 jmc 1.5 iptrkey = (act0 + 1)
87 jmc 1.1 & + act1*max0
88     & + act2*max0*max1
89     & + act3*max0*max1*max2
90     & + act4*max0*max1*max2*max3
91     #endif /* ALLOW_AUTODIFF_TAMC */
92    
93     GAD_TR = GAD_TR1 + iTracer - 1
94     IF ( implicitDiffusion ) THEN
95     CALL CALC_3D_DIFFUSIVITY(
96     I bi,bj,iMin,iMax,jMin,jMax,
97     I GAD_TR,
98     I PTRACERS_useGMRedi(iTracer),PTRACERS_useKPP(iTracer),
99     O kappaRk,
100     I myThid)
101     ENDIF
102    
103     #ifdef ALLOW_AUTODIFF_TAMC
104 jmc 1.5 CADJ STORE kappaRk(:,:,:) = comlev1_bibj_ptracers,
105 heimbach 1.3 CADJ & key=iptrkey, byte=isbyte
106 jmc 1.5 CADJ STORE gPtr(:,:,:,bi,bj,iTracer) = comlev1_bibj_ptracers,
107 jmc 1.1 CADJ & key=iptrkey, byte=isbyte
108     #endif /* ALLOW_AUTODIFF_TAMC */
109    
110     #ifdef INCLUDE_IMPLVERTADV_CODE
111 jmc 1.2 IF ( PTRACERS_ImplVertAdv(iTracer) ) THEN
112 jmc 1.1
113     CALL GAD_IMPLICIT_R(
114 jmc 1.5 I PTRACERS_ImplVertAdv(iTracer),
115 jmc 1.1 I PTRACERS_advScheme(iTracer), GAD_TR,
116 jmc 1.9 I PTRACERS_dTLev, kappaRk, recip_hFac,
117 jahn 1.6 #ifdef ALLOW_LONGSTEP
118     I LS_wVel,
119     #else
120     I wVel,
121     #endif
122 jmc 1.9 I pTracer(1-OLx,1-OLy,1,1,1,iTracer),
123     U gPtr(1-OLx,1-OLy,1,1,1,iTracer),
124 jmc 1.1 I bi, bj, myTime, myIter, myThid )
125    
126     ELSEIF ( implicitDiffusion ) THEN
127     #else /* INCLUDE_IMPLVERTADV_CODE */
128     IF ( implicitDiffusion ) THEN
129     #endif /* INCLUDE_IMPLVERTADV_CODE */
130    
131     CALL IMPLDIFF(
132     I bi, bj, iMin, iMax, jMin, jMax,
133 jmc 1.9 I GAD_TR, kappaRk, recip_hFac,
134     U gPtr(1-OLx,1-OLy,1,1,1,iTracer),
135 jmc 1.1 I myThid )
136 jmc 1.8 ENDIF
137 jmc 1.1
138 jmc 1.7 #ifdef ALLOW_OBCS
139 jmc 1.8 C-- Apply open boundary conditions
140 mlosch 1.4 IF ( useOBCS ) THEN
141 jmc 1.5 CALL OBCS_APPLY_PTRACER(
142 jmc 1.8 I bi, bj, 0, iTracer,
143 jmc 1.9 U gPtr(1-OLx,1-OLy,1,bi,bj,iTracer),
144 mlosch 1.4 I myThid )
145     ENDIF
146 jmc 1.7 #endif /* ALLOW_OBCS */
147 mlosch 1.4
148 jmc 1.1 C End of tracer loop
149     ENDDO
150    
151     #endif /* ALLOW_PTRACERS */
152    
153     RETURN
154     END

  ViewVC Help
Powered by ViewVC 1.1.22