/[MITgcm]/MITgcm_contrib/cam_devel/sigma_testing/code-sigma/update_r_star.F
ViewVC logotype

Annotation of /MITgcm_contrib/cam_devel/sigma_testing/code-sigma/update_r_star.F

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


Revision 1.1 - (hide annotations) (download)
Wed Jan 6 04:31:15 2010 UTC (15 years, 7 months ago) by cnh
Branch: MAIN
CVS Tags: HEAD
start some cam work

1 cnh 1.1 C $Header: /u/gcmpack/MITgcm/model/src/update_r_star.F,v 1.7 2008/08/12 22:42:33 jmc Exp $
2     C $Name: $
3    
4     #include "PACKAGES_CONFIG.h"
5     #include "CPP_OPTIONS.h"
6    
7     CBOP
8     C !ROUTINE: UPDATE_R_STAR
9     C !INTERFACE:
10     SUBROUTINE UPDATE_R_STAR( myTime, myIter, myThid )
11     C !DESCRIPTION: \bv
12     C *==========================================================*
13     C | SUBROUTINE UPDATE_R_STAR
14     C | o Update the thickness fractions (hFacC,W,S)
15     C | according to the surface r-position = Non-Linear FrSurf
16     C *==========================================================*
17     C \ev
18    
19     C !USES:
20     IMPLICIT NONE
21     C == Global variables
22     #include "SIZE.h"
23     #include "EEPARAMS.h"
24     #include "PARAMS.h"
25     c #include "DYNVARS.h"
26     #include "GRID.h"
27     #include "SURFACE.h"
28     #ifdef ALLOW_AUTODIFF_TAMC
29     # include "tamc.h"
30     # include "tamc_keys.h"
31     #endif
32    
33     C !INPUT/OUTPUT PARAMETERS:
34     C == Routine arguments ==
35     C myTime - Current time in simulation
36     C myIter - Current iteration number in simulation
37     C myThid - Thread number for this instance of the routine.
38     _RL myTime
39     INTEGER myIter
40     INTEGER myThid
41    
42     C !LOCAL VARIABLES:
43     #ifdef NONLIN_FRSURF
44     C Local variables
45     C i,j,k,bi,bj - loop counter
46     INTEGER i,j,k,bi,bj
47     CEOP
48    
49     DO bj=myByLo(myThid), myByHi(myThid)
50     DO bi=myBxLo(myThid), myBxHi(myThid)
51    
52     #ifdef ALLOW_AUTODIFF_TAMC
53     act1 = bi - myBxLo(myThid)
54     max1 = myBxHi(myThid) - myBxLo(myThid) + 1
55     act2 = bj - myByLo(myThid)
56     max2 = myByHi(myThid) - myByLo(myThid) + 1
57     act3 = myThid - 1
58     max3 = nTx*nTy
59     act4 = ikey_dynamics - 1
60     idynkey = (act1 + 1) + act2*max1
61     & + act3*max1*max2
62     & + act4*max1*max2*max3
63     #endif /* ALLOW_AUTODIFF_TAMC */
64    
65     C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
66    
67     #ifdef ALLOW_OBCS
68     # ifdef ALLOW_AUTODIFF_TAMC
69     CADJ STORE rStarFacC(:,:,bi,bj) =
70     CADJ & comlev1_bibj, key = idynkey, byte = isbyte
71     CADJ STORE rStarFacS(:,:,bi,bj) =
72     CADJ & comlev1_bibj, key = idynkey, byte = isbyte
73     CADJ STORE rStarFacW(:,:,bi,bj) =
74     CADJ & comlev1_bibj, key = idynkey, byte = isbyte
75     # endif /* ALLOW_AUTODIFF_TAMC */
76     C-- Apply OBC to rStar_Factor_W,S before updating hFacW,S
77     IF (useOBCS) THEN
78     CALL OBCS_APPLY_R_STAR(
79     I bi, bj,
80     U rStarFacC, rStarFacW, rStarFacS,
81     I myTime, myIter, myThid )
82     ENDIF
83     #endif /* ALLOW_OBCS */
84    
85     DO k=1,Nr
86     DO j=1-Oly,sNy+Oly
87     DO i=1-Olx,sNx+Olx
88     # ifndef DISABLE_RSTAR_CODE
89     C-- Update the fractional thickness hFacC , hFacW & hFacS (& "recip_hFac") :
90     hFacC(i,j,k,bi,bj) = h0FacC(i,j,k,bi,bj)
91     & *rStarFacC(i,j,bi,bj)
92     hFacW(i,j,k,bi,bj) = h0FacW(i,j,k,bi,bj)
93     & *rStarFacW(i,j,bi,bj)
94     hFacS(i,j,k,bi,bj) = h0FacS(i,j,k,bi,bj)
95     & *rStarFacS(i,j,bi,bj)
96     #endif
97     C
98     #ifdef USE_MASK_AND_NO_IF
99     recip_hFacC(i,j,k,bi,bj) = maskC(i,j,k,bi,bj)
100     & / ( _hFacC(i,j,k,bi,bj) + (1.-maskC(i,j,k,bi,bj)) )
101     recip_hFacW(i,j,k,bi,bj) = maskW(i,j,k,bi,bj)
102     & / ( _hFacW(i,j,k,bi,bj) + (1.-maskW(i,j,k,bi,bj)) )
103     recip_hFacS(i,j,k,bi,bj) = maskS(i,j,k,bi,bj)
104     & / ( _hFacS(i,j,k,bi,bj) + (1.-maskS(i,j,k,bi,bj)) )
105     #else
106     IF (maskC(i,j,k,bi,bj).NE.0.)
107     & recip_hFacC(i,j,k,bi,bj) = 1. _d 0 / _hFacC(i,j,k,bi,bj)
108     IF (maskW(i,j,k,bi,bj).NE.0.)
109     & recip_hFacW(i,j,k,bi,bj) = 1. _d 0 / _hFacW(i,j,k,bi,bj)
110     IF (maskS(i,j,k,bi,bj).NE.0.)
111     & recip_hFacS(i,j,k,bi,bj) = 1. _d 0 / _hFacS(i,j,k,bi,bj)
112     #endif
113     ENDDO
114     ENDDO
115     ENDDO
116    
117     C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
118    
119     C- end bi,bj loop
120     ENDDO
121     ENDDO
122    
123     c _EXCH_XYZ_RS( hFacC, myThid )
124     c _EXCH_XYZ_RS( recip_hFacC, myThid )
125     c CALL EXCH_UV_XYZ_RS(hFacW,hFacS,.FALSE.,myThid)
126     c CALL EXCH_UV_XYZ_RS(recip_hFacW,recip_hFacS,.FALSE.,myThid)
127    
128     C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
129     #endif /* NONLIN_FRSURF */
130    
131     CcnhSigmaCodeTestingBegin
132     C call routine to set hFac so that hFac[CWS].*drF(K) will
133     C equal sigma based spacing for that location.
134     C 1 - rW(i,j,k,bi,bj) = sigmaF(k)*depth(i,j,k,bi,bj)
135     C dF(i,j,k,bi,bj) = rW(i,j,k,bi,bj)-rW(i,j,k+1,bi,bj)
136     C hFacC(i,j,k,bi,bj)=dF(i,j,k,bi,bj)/drF(K)
137     CALL SIGMA_TESTING_SET_HFACS( myThid )
138     CcnhSigmaCodeTestingEnd
139    
140     RETURN
141     END

  ViewVC Help
Powered by ViewVC 1.1.22