/[MITgcm]/MITgcm/model/src/post_cg3d.F
ViewVC logotype

Contents of /MITgcm/model/src/post_cg3d.F

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


Revision 1.1 - (show annotations) (download)
Fri Dec 11 04:31:31 2009 UTC (14 years, 5 months ago) by jmc
Branch: MAIN
new S/R carved out of solve_for_pressure.F and called before & after CG3D

1 C $Header: /u/gcmpack/MITgcm/model/src/solve_for_pressure.F,v 1.72 2009/11/30 19:20:07 jmc Exp $
2 C $Name: $
3
4 #include "PACKAGES_CONFIG.h"
5 #include "CPP_OPTIONS.h"
6
7 CBOP
8 C !ROUTINE: POST_CG3D
9 C !INTERFACE:
10 SUBROUTINE POST_CG3D(
11 I zeroPsNH, zeroMeanPnh,
12 I myTime, myIter, myThid )
13
14 C !DESCRIPTION:
15 C Called from SOLVE_FOR_PRESSURE, after 3-D solver (cg3d):
16 C Finish computation of Non-hydrostatic pressure from 3-D solver solution
17
18 C !USES:
19 IMPLICIT NONE
20 C == Global variables
21 #include "SIZE.h"
22 #include "EEPARAMS.h"
23 #include "PARAMS.h"
24 #include "GRID.h"
25 #include "SURFACE.h"
26 c#include "FFIELDS.h"
27 #include "DYNVARS.h"
28 #ifdef ALLOW_NONHYDROSTATIC
29 #include "NH_VARS.h"
30 #endif
31
32 C === Functions ====
33 c LOGICAL DIFFERENT_MULTIPLE
34 c EXTERNAL DIFFERENT_MULTIPLE
35
36 C !INPUT/OUTPUT PARAMETERS:
37 C == Routine arguments ==
38 C zeroPsNH :: account for Hyd.component of cg3d_x by updating NH & Surf.Press
39 C zeroMeanPnh :: account for Hyd.component of cg3d_x by updating NH & Surf.Press
40 C myTime :: Current time in simulation
41 C myIter :: Current iteration number in simulation
42 C myThid :: My Thread Id. number
43 LOGICAL zeroPsNH, zeroMeanPnh
44 _RL myTime
45 INTEGER myIter
46 INTEGER myThid
47
48 #ifdef ALLOW_NONHYDROSTATIC
49 C !LOCAL VARIABLES:
50 C == Local variables ==
51 INTEGER i,j,k,bi,bj
52 INTEGER ks
53 c INTEGER ioUnit
54 c CHARACTER*10 sufx
55 c CHARACTER*(MAX_LEN_MBUF) msgBuf
56 _RL tmpVar(1-Olx:sNx+Olx,1-Oly:sNy+Oly)
57 CEOP
58
59 c IF ( use3Dsolver ) THEN
60 C-- Update surface pressure (account for NH-p @ surface level) and NH pressure:
61 IF ( zeroPsNH .OR. zeroMeanPnh ) THEN
62 DO bj=myByLo(myThid),myByHi(myThid)
63 DO bi=myBxLo(myThid),myBxHi(myThid)
64
65 IF ( zeroPsNH .AND. usingZCoords ) THEN
66 C- Z coordinate: assume surface @ level k=1
67 DO j=1-OLy,sNy+OLy
68 DO i=1-OLx,sNx+OLx
69 tmpVar(i,j) = phi_nh(i,j,1,bi,bj)
70 ENDDO
71 ENDDO
72 ELSEIF ( zeroPsNH ) THEN
73 C- Other than Z coordinate: no assumption on surface level index
74 DO j=1-OLy,sNy+OLy
75 DO i=1-OLx,sNx+OLx
76 ks = ksurfC(i,j,bi,bj)
77 IF ( ks.LE.Nr ) THEN
78 tmpVar(i,j) = phi_nh(i,j,ks,bi,bj)
79 ELSE
80 tmpVar(i,j) = 0.
81 ENDIF
82 ENDDO
83 ENDDO
84 #ifdef NONLIN_FRSURF
85 ELSE
86 C zeroMeanPnh : transfert vertical average of P_NH to EtaN
87 DO j=1-OLy,sNy+OLy
88 DO i=1-OLx,sNx+OLx
89 tmpVar(i,j) = 0.
90 ENDDO
91 ENDDO
92 DO k=1,Nr
93 DO j=1-OLy,sNy+OLy
94 DO i=1-OLx,sNx+OLx
95 tmpVar(i,j) = tmpVar(i,j)
96 & + phi_nh(i,j,k,bi,bj)*drF(k)*h0FacC(i,j,k,bi,bj)
97 ENDDO
98 ENDDO
99 ENDDO
100 DO j=1-OLy,sNy+OLy
101 DO i=1-OLx,sNx+OLx
102 tmpVar(i,j) = tmpVar(i,j)*recip_Rcol(i,j,bi,bj)
103 ENDDO
104 ENDDO
105 #endif /* NONLIN_FRSURF */
106 ENDIF
107 DO k=1,Nr
108 DO j=1-OLy,sNy+OLy
109 DO i=1-OLx,sNx+OLx
110 phi_nh(i,j,k,bi,bj) = ( phi_nh(i,j,k,bi,bj)
111 & - tmpVar(i,j)
112 & )*maskC(i,j,k,bi,bj)
113 ENDDO
114 ENDDO
115 ENDDO
116 DO j=1-OLy,sNy+OLy
117 DO i=1-OLx,sNx+OLx
118 etaN(i,j,bi,bj) = etaN(i,j,bi,bj)
119 & + recip_Bo(i,j,bi,bj)*tmpVar(i,j)
120 ENDDO
121 ENDDO
122
123 ENDDO
124 ENDDO
125 ENDIF
126
127 c ENDIF
128 #endif /* ALLOW_NONHYDROSTATIC */
129
130 RETURN
131 END

  ViewVC Help
Powered by ViewVC 1.1.22