/[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.5 - (hide annotations) (download)
Mon Nov 5 18:48:04 2007 UTC (16 years, 6 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint60, checkpoint61, checkpoint59q, checkpoint59p, checkpoint59r, checkpoint59m, checkpoint59l, checkpoint59o, checkpoint59n, checkpoint59k, checkpoint59j, checkpoint61f, checkpoint61g, checkpoint61d, checkpoint61e, checkpoint61b, checkpoint61c, checkpoint61a, checkpoint61n, checkpoint61o, checkpoint61l, checkpoint61m, checkpoint61j, checkpoint61k, checkpoint61h, checkpoint61i, checkpoint61r, checkpoint61p, checkpoint61q
Changes since 1.4: +9 -8 lines
split PTRACERS.h in 2 header files: PTRACERS_FIELDS.h & PTRACERS_PARAMS.h

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

  ViewVC Help
Powered by ViewVC 1.1.22