/[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.6 - (hide annotations) (download)
Fri Jun 26 23:10:10 2009 UTC (14 years, 11 months ago) by jahn
Branch: MAIN
CVS Tags: checkpoint62, checkpoint61v, checkpoint61w, checkpoint61t, checkpoint61u, checkpoint61s, checkpoint61z, checkpoint61x, checkpoint61y
Changes since 1.5: +12 -2 lines
add package longstep

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

  ViewVC Help
Powered by ViewVC 1.1.22