/[MITgcm]/MITgcm/pkg/kpp/kpp_check.F
ViewVC logotype

Annotation of /MITgcm/pkg/kpp/kpp_check.F

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


Revision 1.11 - (hide annotations) (download)
Thu Oct 19 00:33:27 2017 UTC (6 years, 6 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint66o, checkpoint66n, checkpoint66m, checkpoint66l, HEAD
Changes since 1.10: +99 -2 lines
report value of KPP parameters

1 jmc 1.11 C $Header: /u/gcmpack/MITgcm/pkg/kpp/kpp_check.F,v 1.10 2012/07/07 22:23:46 jmc Exp $
2 jmc 1.5 C $Name: $
3 heimbach 1.1 #include "KPP_OPTIONS.h"
4    
5     SUBROUTINE KPP_CHECK( myThid )
6 jmc 1.10
7     C *==========================================================*
8     C | SUBROUTINE KPP_CHECK
9     C | o Validate basic package setup and inter-package
10     C | dependencies.
11     C *==========================================================*
12    
13 heimbach 1.1 IMPLICIT NONE
14    
15     C === Global variables ===
16     #include "SIZE.h"
17     #include "EEPARAMS.h"
18     #include "PARAMS.h"
19 jmc 1.7 #include "KPP_PARAMS.h"
20 heimbach 1.1
21     C === Routine arguments ===
22 jmc 1.10 C myThid :: my Thread Id Number
23 heimbach 1.1 INTEGER myThid
24    
25     #ifdef ALLOW_KPP
26     C === Local variables ===
27 jmc 1.10 C msgBuf :: Informational/error message buffer
28 heimbach 1.1 CHARACTER*(MAX_LEN_MBUF) msgBuf
29    
30 jmc 1.10 _BEGIN_MASTER(myThid)
31    
32 heimbach 1.1 WRITE(msgBuf,'(A)') 'KPP_CHECK: #define ALLOW_KPP'
33     CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
34 jmc 1.11 & SQUEEZE_RIGHT, myThid )
35    
36     C-- Print out KPP parameters:
37     CALL WRITE_0D_RL( kpp_freq, INDEX_NONE, ' kpp_freq =',
38     & ' /* frequency of KPP calculation */')
39    
40     CALL WRITE_0D_L( KPP_ghatUseTotalDiffus, INDEX_NONE,
41     & 'KPP_ghatUseTotalDiffus=',
42     & ' /* non-local term fct of total diffus */')
43     CALL WRITE_0D_L( KPPuseDoubleDiff, INDEX_NONE,
44     & 'KPPuseDoubleDiff =', ' /* include double diffusive contrib */')
45     CALL WRITE_0D_L( LimitHblStable, INDEX_NONE,
46     & 'LimitHblStable =', ' /* limits depth of hbl if stable cond.*/')
47     CALL WRITE_0D_RL( minKPPhbl, INDEX_NONE, ' minKPPhbl =',
48     & ' /* minimum KPPhbl value [m] */')
49     CALL WRITE_0D_RL( epsln, INDEX_NONE, ' epsln =',
50     & ' /* constant [-] */')
51     CALL WRITE_0D_RL( phepsi, INDEX_NONE, ' phepsi =',
52     & ' /* constant [-] */')
53     CALL WRITE_0D_RL( epsilon, INDEX_NONE, ' epsilon =',
54     & ' /* constant [-] */')
55     CALL WRITE_0D_RL( vonk, INDEX_NONE, ' vonk =',
56     & ' /* Von Karmans constant [-] */')
57     CALL WRITE_0D_RL( dB_dz, INDEX_NONE, ' dB_dz =',
58     & ' /* maximum N^2 in mixed layer [s^-2] */')
59     CALL WRITE_0D_RL( conc1, INDEX_NONE, ' conc1 =',
60     & ' /* scalar constant [-] */')
61     CALL WRITE_0D_RL( conam, INDEX_NONE, ' conam =',
62     & ' /* scalar constant [-] */')
63     CALL WRITE_0D_RL( concm, INDEX_NONE, ' concm =',
64     & ' /* scalar constant [-] */')
65     CALL WRITE_0D_RL( conc2, INDEX_NONE, ' conc2 =',
66     & ' /* scalar constant [-] */')
67     CALL WRITE_0D_RL( conas, INDEX_NONE, ' conas =',
68     & ' /* scalar constant [-] */')
69     CALL WRITE_0D_RL( concs, INDEX_NONE, ' concs =',
70     & ' /* scalar constant [-] */')
71     CALL WRITE_0D_RL( conc3, INDEX_NONE, ' conc3 =',
72     & ' /* scalar constant [-] */')
73     CALL WRITE_0D_RL( zetam, INDEX_NONE, ' zetam =',
74     & ' /* scalar constant [-] */')
75     CALL WRITE_0D_RL( zetas, INDEX_NONE, ' zetas =',
76     & ' /* scalar constant [-] */')
77     CALL WRITE_0D_RL( Ricr, INDEX_NONE, ' Ricr =',
78     & ' /* critical bulk Richardson Number [-] */')
79     CALL WRITE_0D_RL( cekman, INDEX_NONE, ' cekman =',
80     & ' /* coeff for Ekman depth [-] */')
81     CALL WRITE_0D_RL( cmonob, INDEX_NONE, ' cmonob =',
82     & ' /* coeff for Monin-Obukhov depth [-] */')
83     CALL WRITE_0D_RL( concv, INDEX_NONE, ' concv =',
84     & ' /* buoyancy freq ratio [-] */')
85     CALL WRITE_0D_RL( hbf, INDEX_NONE, ' hbf =',
86     & ' /* solar radiation depth ratio [-] */')
87     CALL WRITE_0D_RL( zmin, INDEX_NONE, ' zmin =',
88     & ' /* minimum for zehat in table [m3/s3] */')
89     CALL WRITE_0D_RL( zmax, INDEX_NONE, ' zmax =',
90     & ' /* maximum for zehat in table [m3/s3] */')
91     CALL WRITE_0D_RL( umin, INDEX_NONE, ' umin =',
92     & ' /* minimum for ustar in table [m/s] */')
93     CALL WRITE_0D_RL( umax, INDEX_NONE, ' umax =',
94     & ' /* maximum for ustar in table [m/s] */')
95     CALL WRITE_0D_I( num_v_smooth_Ri, INDEX_NONE,
96     & 'num_v_smooth_Ri =', ' /* number of vertical smoothing */')
97     CALL WRITE_0D_RL( Riinfty, INDEX_NONE, ' Riinfty =',
98     & ' /* shear instability Ri number limit [-] */')
99     CALL WRITE_0D_RL( BVSQcon, INDEX_NONE, ' BVSQcon =',
100     & ' /* Brunt-Vaisala squared (=N^2) [s^-2] */')
101     CALL WRITE_0D_RL( difm0, INDEX_NONE, ' difm0 =',
102     & ' /* max viscosity from shear instab. [m2/s] */')
103     CALL WRITE_0D_RL( difs0, INDEX_NONE, ' difs0 =',
104     & ' /* max diffusiv. from shear instab. [m2/s] */')
105     CALL WRITE_0D_RL( dift0, INDEX_NONE, ' dift0 =',
106     & ' /* max diffusiv. from shear instab. [m2/s] */')
107     CALL WRITE_0D_RL( difmcon, INDEX_NONE, ' difmcon =',
108     & ' /* convective viscosity [m2/s] */')
109     CALL WRITE_0D_RL( difscon, INDEX_NONE, ' difscon =',
110     & ' /* convective diffusiv. [m2/s] */')
111     CALL WRITE_0D_RL( diftcon, INDEX_NONE, ' diftcon =',
112     & ' /* convective diffusiv. [m2/s] */')
113     CALL WRITE_0D_RL( Rrho0, INDEX_NONE, ' Rrho0 =',
114     & ' /* double diffusion density ratio [-] */')
115     CALL WRITE_0D_RL( dsfmax, INDEX_NONE, ' dsfmax =',
116     & ' /* max diffusiv. for salt fingering [m2/s] */')
117     CALL WRITE_0D_RL( cstar, INDEX_NONE, ' cstar =',
118     & ' /* coeff for non-locak transport [-] */')
119     C--
120     CALL WRITE_0D_L( KPPwriteState, INDEX_NONE,
121     & 'KPPwriteState =', ' /* write KPP fields to file */')
122     CALL WRITE_0D_RL( kpp_dumpFreq, INDEX_NONE, ' kpp_dumpFreq =',
123     & ' /* dump freq of KPP output */')
124     CALL WRITE_0D_RL( kpp_taveFreq, INDEX_NONE, ' kpp_taveFreq =',
125     & ' /* time-averaging freq of KPP output */')
126    
127     C-- Check parameters:
128 heimbach 1.1
129     C KPP needs convection turned off (will be packaged later)
130     IF (cAdjFreq.NE.0. .OR.
131     & ivdc_kappa.NE.0.) THEN
132     WRITE(msgBuf,'(A)') 'Some form of convection has been enabled'
133 jmc 1.7 CALL PRINT_ERROR( msgBuf , myThid )
134 heimbach 1.1 STOP 'ABNORMAL END: S/R KPP_CHECK'
135     ENDIF
136    
137     C KPP needs implicit vertical diffusion and viscosity
138     IF (.NOT.implicitDiffusion ) THEN
139     WRITE(msgBuf,'(A)') 'KPP needs implicitDiffusion to be enabled'
140 jmc 1.7 CALL PRINT_ERROR( msgBuf , myThid )
141 heimbach 1.1 STOP 'ABNORMAL END: S/R KPP_CHECK'
142     ENDIF
143 stephd 1.8 IF ( .NOT.implicitViscosity .AND. momStepping ) THEN
144 heimbach 1.1 WRITE(msgBuf,'(A)') 'KPP needs implicitViscosity to be enabled'
145 jmc 1.7 CALL PRINT_ERROR( msgBuf , myThid )
146 heimbach 1.1 STOP 'ABNORMAL END: S/R KPP_CHECK'
147     ENDIF
148    
149     C Shortwave heating should be defined with KPP
150     #ifndef SHORTWAVE_HEATING
151     WRITE(msgBuf,'(A)') 'KPP needs CPP flag SHORTWAVE_HEATING enabled'
152 jmc 1.7 CALL PRINT_ERROR( msgBuf , myThid )
153 heimbach 1.1 STOP 'ABNORMAL END: S/R KPP_CHECK'
154     #endif /* SHORTWAVE_HEATING */
155    
156 heimbach 1.2 C Check that overlap region is adequate.
157     C When horizontal smoothing is turned on,
158     C KPP_CALC computes vertical viscosity and diffusivity for region
159     C (-2:sNx+3,-2:sNy+3) as required by CALC_DIFFUSIVITY and requires
160 jmc 1.5 C values of uVel, vVel, surfaceForcingU, surfaceForcingV in the
161 heimbach 1.2 C region (-2:sNx+4,-2:sNy+4).
162     C Hence overlap region needs to be set OLx=4, OLy=4.
163 dimitri 1.6 #if defined(KPP_SMOOTH_SHSQ) || defined(KPP_SMOOTH_DVSQ)
164     # define KPP_NEEDS_OVERLAP_4
165     #endif
166     #if defined(KPP_SMOOTH_DBLOC) || defined(KPP_SMOOTH_DENS)
167     # define KPP_NEEDS_OVERLAP_4
168     #endif
169     #ifdef KPP_NEEDS_OVERLAP_4
170 heimbach 1.3 #ifdef KPP_REACTIVATE_OL4
171 heimbach 1.2 IF (OLx.LT.4 .OR. OLy.LT.4) THEN
172     WRITE(msgBuf,'(A)') 'KPP horizontal smoothing requires OLx=OLy=4'
173 jmc 1.7 CALL PRINT_ERROR( msgBuf , myThid )
174 heimbach 1.2 STOP 'ABNORMAL END: S/R KPP_CHECK'
175     ENDIF
176 heimbach 1.3 #endif
177 heimbach 1.2 #endif
178    
179 mlosch 1.9 #ifdef EXCLUDE_KPP_DOUBLEDIFF
180     IF ( KPPuseDoubleDiff ) THEN
181     WRITE(msgBuf,'(A,A)') 'KPPuseDoubleDiff=.TRUE. requires ',
182     & 'that EXCLUDE_KPP_DOUBLEDIFF is undefined'
183     CALL PRINT_ERROR( msgBuf , myThid )
184     STOP 'ABNORMAL END: S/R KPP_CHECK'
185     ENDIF
186     #endif /* EXCLUDE_KPP_DOUBLEDIFF */
187    
188 jmc 1.11 WRITE(msgBuf,'(A)') ' '
189     CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
190     & SQUEEZE_RIGHT, myThid )
191    
192 jmc 1.10 _END_MASTER(myThid)
193    
194 heimbach 1.1 #endif /* ALLOW_KPP */
195 jmc 1.7 RETURN
196     END

  ViewVC Help
Powered by ViewVC 1.1.22