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

Contents 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 - (show 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 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
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 #ifdef ALLOW_AUTODIFF_TAMC
24 # include "EEPARAMS.h"
25 # include "tamc.h"
26 # include "tamc_keys.h"
27 #endif
28
29 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 #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 _RL hFacZOpen
55 #endif /* ALLOW_DEPTH_CONTROL */
56 CEOP
57
58 #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 C-- Calculate open water fraction at vorticity points
75
76 #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 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 #endif /* ALLOW_DEPTH_CONTROL */
173
174 RETURN
175 END

  ViewVC Help
Powered by ViewVC 1.1.22