/[MITgcm]/MITgcm/pkg/mom_common/mom_calc_hfacz.F
ViewVC logotype

Annotation of /MITgcm/pkg/mom_common/mom_calc_hfacz.F

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


Revision 1.2 - (hide annotations) (download)
Wed Jun 7 01:55:14 2006 UTC (17 years, 11 months ago) by heimbach
Branch: MAIN
CVS Tags: checkpoint58h_post, checkpoint58i_post
Changes since 1.1: +110 -2 lines
Modifications for bottom topography control
o replace hFacC by _hFacC at various places
o replace ALLOW_HFACC_CONTROL by ALLOW_DEPTH_CONTROL
o add non-self-adjoint cg2d_nsa
o update autodiff support routines
o re-initialise hfac after ctrl_depth_ini
o works for 5x5 box, doesnt work for global_ocean.90x40x15

1 heimbach 1.2 C $Header: /u/gcmpack/MITgcm/pkg/mom_common/mom_calc_hfacz.F,v 1.1 2004/05/14 17:43:11 adcroft Exp $
2     C $Name: $
3 adcroft 1.1
4     #include "MOM_COMMON_OPTIONS.h"
5    
6     CBOP
7     C !ROUTINE: MOM_CALC_HFACZ
8    
9     C !INTERFACE: ==========================================================
10     SUBROUTINE MOM_CALC_HFACZ(
11     I bi,bj,k,
12     O hFacZ,r_hFacZ,
13     I myThid)
14    
15     C !DESCRIPTION:
16     C Calculates the fractional thickness at vorticity points
17    
18     C !USES: ===============================================================
19     IMPLICIT NONE
20     #include "SIZE.h"
21     #include "GRID.h"
22    
23 heimbach 1.2 #ifdef ALLOW_AUTODIFF_TAMC
24     # include "EEPARAMS.h"
25     # include "tamc.h"
26     # include "tamc_keys.h"
27     #endif
28    
29 adcroft 1.1 C !INPUT PARAMETERS: ===================================================
30     C bi,bj :: tile indices
31     C k :: vertical level
32     C myThid :: thread number
33     INTEGER bi,bj,k
34     INTEGER myThid
35    
36     C !OUTPUT PARAMETERS: ==================================================
37     C hFacZ :: fractional thickness at vorticity points
38     C r_hFacZ :: reciprocal
39     _RS hFacZ(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
40     _RS r_hFacZ(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
41    
42     C !LOCAL VARIABLES: ====================================================
43     C i,j :: loop indices
44     INTEGER I,J
45 heimbach 1.2 #ifdef ALLOW_DEPTH_CONTROL
46     _RL hFacZOpen(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
47     _RL hFacZOpenI(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
48     _RL hFacZOpenJ(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
49     # ifdef USE_SMOOTH_MIN
50     _RS smoothMin_R4
51     EXTERNAL smoothMin_R4
52     # endif /* USE_SMOOTH_MIN */
53     #else
54 adcroft 1.1 _RL hFacZOpen
55 heimbach 1.2 #endif /* ALLOW_DEPTH_CONTROL */
56 adcroft 1.1 CEOP
57    
58 heimbach 1.2 #ifdef ALLOW_AUTODIFF_TAMC
59     #ifdef ALLOW_DEPTH_CONTROL
60     act1 = bi - myBxLo(myThid)
61     max1 = myBxHi(myThid) - myBxLo(myThid) + 1
62     act2 = bj - myByLo(myThid)
63     max2 = myByHi(myThid) - myByLo(myThid) + 1
64     act3 = myThid - 1
65     max3 = nTx*nTy
66     act4 = ikey_dynamics - 1
67     ikey = (act1 + 1) + act2*max1
68     & + act3*max1*max2
69     & + act4*max1*max2*max3
70     kkey = (ikey-1)*Nr + k
71     #endif /* ALLOW_DEPTH_CONTROL */
72     #endif /* ALLOW_AUTODIFF_TAMC */
73    
74 adcroft 1.1 C-- Calculate open water fraction at vorticity points
75    
76 heimbach 1.2 #ifdef ALLOW_DEPTH_CONTROL
77     DO j=1-Oly,sNy+Oly
78     DO i=1-Olx,sNx+Olx
79     hFacZ(i,j) =0.
80     r_hFacZ(i,j) =0.
81     hFacZOpen(i,j) =0.
82     hFacZOpenJ(i,j)=0.
83     hFacZOpenJ(i,j)=0.
84     ENDDO
85     ENDDO
86    
87     #ifdef ALLOW_AUTODIFF_TAMC
88     CADJ STORE hFacZ(:,:) = comlev1_bibj_k , key=kkey, byte=isbyte
89     CADJ STORE r_hFacZ(:,:) = comlev1_bibj_k , key=kkey, byte=isbyte
90     #endif /* ALLOW_AUTODIFF_TAMC */
91     DO j=2-Oly,sNy+Oly
92     DO i=2-Olx,sNx+Olx
93     hFacZOpenJ(i,j)=
94     #ifdef USE_SMOOTH_MIN
95     & smoothMin_R4(_hFacW(i ,j ,k,bi,bj),
96     #else
97     & MIN(_hFacW(i ,j ,k,bi,bj),
98     #endif /* USE_SMOOTH_MIN */
99     & _hFacW(i ,j-1,k,bi,bj))
100     & *maskW(i,j,k,bi,bj)*maskW(i,j-1,k,bi,bj)
101     hFacZOpenI(i,j)=
102     #ifdef USE_SMOOTH_MIN
103     & smoothMin_R4(_hFacS(i ,j ,k,bi,bj),
104     #else
105     & MIN(_hFacS(i ,j ,k,bi,bj),
106     #endif /* USE_SMOOTH_MIN */
107     & _hFacS(i-1,j ,k,bi,bj))
108     & *maskS(i,j,k,bi,bj)*maskS(i-1,j,k,bi,bj)
109     ENDDO
110     ENDDO
111     #ifdef ALLOW_AUTODIFF_TAMC
112     #ifdef ALLOW_DEPTH_CONTROL
113     CADJ STORE hFacZOpenI(:,:) = comlev1_bibj_k , key=kkey, byte=isbyte
114     CADJ STORE hFacZOpenJ(:,:) = comlev1_bibj_k , key=kkey, byte=isbyte
115     #endif /* ALLOW_DEPTH_CONTROL */
116     #endif /* ALLOW_AUTODIFF_TAMC */
117     DO j=2-Oly,sNy+Oly
118     DO i=2-Olx,sNx+Olx
119     hFacZ(i,j) =
120     #ifdef USE_SMOOTH_MIN
121     & smoothMin_R4(hFacZOpenI(i,j),hFacZOpenJ(i,j))
122     #else
123     & MIN(hFacZOpenI(i,j),hFacZOpenJ(i,j))
124     #endif /* USE_SMOOTH_MIN */
125     & *maskW(i,j,k,bi,bj)*maskW(i,j-1,k,bi,bj)
126     & *maskS(i,j,k,bi,bj)*maskS(i-1,j,k,bi,bj)
127     ENDDO
128     ENDDO
129     #ifdef ALLOW_AUTODIFF_TAMC
130     #ifdef ALLOW_DEPTH_CONTROL
131     CADJ STORE hFacZ(:,:) = comlev1_bibj_k , key=kkey, byte=isbyte
132     #endif /* ALLOW_DEPTH_CONTROL */
133     #endif /* ALLOW_AUTODIFF_TAMC */
134     DO j=2-Oly,sNy+Oly
135     DO i=2-Olx,sNx+Olx
136     IF (hFacZ(i,j).EQ.0.) THEN
137     r_hFacZ(i,j)=0.
138     ELSE
139     r_hFacZ(i,j)=1./hFacZ(i,j)
140     ENDIF
141     ENDDO
142     ENDDO
143     #ifdef ALLOW_AUTODIFF_TAMC
144     #ifdef ALLOW_DEPTH_CONTROL
145     CADJ STORE r_hFacZ(:,:) = comlev1_bibj_k , key=kkey, byte=isbyte
146     #endif /* ALLOW_DEPTH_CONTROL */
147     #endif /* ALLOW_AUTODIFF_TAMC */
148    
149     #else /* not ALLOW_DEPTH_CONTROL */
150    
151 adcroft 1.1 DO i=1-Olx,sNx+Olx
152     hFacZ(i,1-Oly)=0.
153     r_hFacZ(i,1-Oly)=0.
154     ENDDO
155    
156     DO j=2-Oly,sNy+Oly
157     hFacZ(1-Olx,j)=0.
158     r_hFacZ(1-Olx,j)=0.
159     DO i=2-Olx,sNx+Olx
160     hFacZOpen=min(_hFacW(i,j,k,bi,bj),
161     & _hFacW(i,j-1,k,bi,bj))
162     hFacZOpen=min(_hFacS(i,j,k,bi,bj),hFacZOpen)
163     hFacZOpen=min(_hFacS(i-1,j,k,bi,bj),hFacZOpen)
164     hFacZ(i,j)=hFacZOpen
165     IF (hFacZ(i,j).EQ.0.) THEN
166     r_hFacZ(i,j)=0.
167     ELSE
168     r_hFacZ(i,j)=1./hFacZ(i,j)
169     ENDIF
170     ENDDO
171     ENDDO
172 heimbach 1.2 #endif /* ALLOW_DEPTH_CONTROL */
173 adcroft 1.1
174     RETURN
175     END

  ViewVC Help
Powered by ViewVC 1.1.22