File indexing completed on 2018-06-09 05:09:49 UTC
view on githubraw file Latest commit 46918f1b on 2018-06-01 20:55:34 UTC
c17bf9e7ce Jean*0001 #include "GAD_OPTIONS.h"
0002
0003
e663d180db Jean*0004
c17bf9e7ce Jean*0005
e663d180db Jean*0006 SUBROUTINE GAD_INIT_FIXED( myThid )
1b5fb69d21 Ed H*0007
0008
0009
c17bf9e7ce Jean*0010
0011
0012 IMPLICIT NONE
0013
0014 #include "SIZE.h"
0015 #include "EEPARAMS.h"
0016 #include "PARAMS.h"
0017 #include "GAD.h"
0018
0019
0020
65d3db6a48 Jean*0021
c17bf9e7ce Jean*0022 INTEGER myThid
0023
0024
26e9727e55 Jean*0025
a9f828d17c Jean*0026 INTEGER GAD_ADVSCHEME_GET
0027 EXTERNAL GAD_ADVSCHEME_GET
26e9727e55 Jean*0028
0029
c17bf9e7ce Jean*0030
26e9727e55 Jean*0031
c17bf9e7ce Jean*0032 CHARACTER*(MAX_LEN_MBUF) msgBuf
a9f828d17c Jean*0033 INTEGER errCode, n, minSize
c17bf9e7ce Jean*0034
0035
0036
9b8b001637 Jean*0037 _BEGIN_MASTER(myThid)
0038
26e9727e55 Jean*0039
a9f828d17c Jean*0040 CALL GAD_ADVSCHEME_INIT( myThid )
0041
0042
0043 errCode = 0
0044 CALL GAD_ADVSCHEME_SET( ENUM_UPWIND_1RST , 1, errCode, myThid )
0045 CALL GAD_ADVSCHEME_SET( ENUM_CENTERED_2ND , 1, errCode, myThid )
0046 CALL GAD_ADVSCHEME_SET( ENUM_UPWIND_3RD , 2, errCode, myThid )
0047 CALL GAD_ADVSCHEME_SET( ENUM_CENTERED_4TH , 2, errCode, myThid )
0048 CALL GAD_ADVSCHEME_SET( ENUM_DST2 , 1, errCode, myThid )
0049 CALL GAD_ADVSCHEME_SET( ENUM_FLUX_LIMIT , 2, errCode, myThid )
0050 CALL GAD_ADVSCHEME_SET( ENUM_DST3 , 2, errCode, myThid )
0051 CALL GAD_ADVSCHEME_SET( ENUM_DST3_FLUX_LIMIT,2, errCode, myThid )
0052 CALL GAD_ADVSCHEME_SET( ENUM_OS7MP , 4, errCode, myThid )
0053 CALL GAD_ADVSCHEME_SET( ENUM_SOM_PRATHER , 1, errCode, myThid )
0054 CALL GAD_ADVSCHEME_SET( ENUM_SOM_LIMITER , 1, errCode, myThid )
8e4c181d69 Jean*0055 CALL GAD_ADVSCHEME_SET( ENUM_PPM_NULL_LIMIT, 3, errCode, myThid )
0056 CALL GAD_ADVSCHEME_SET( ENUM_PPM_MONO_LIMIT, 3, errCode, myThid )
0057 CALL GAD_ADVSCHEME_SET( ENUM_PPM_WENO_LIMIT, 3, errCode, myThid )
0058 CALL GAD_ADVSCHEME_SET( ENUM_PQM_NULL_LIMIT, 4, errCode, myThid )
0059 CALL GAD_ADVSCHEME_SET( ENUM_PQM_MONO_LIMIT, 4, errCode, myThid )
0060 CALL GAD_ADVSCHEME_SET( ENUM_PQM_WENO_LIMIT, 4, errCode, myThid )
a9f828d17c Jean*0061 IF ( errCode.GT.0 ) THEN
26e9727e55 Jean*0062 WRITE(msgBuf,'(A)')
a9f828d17c Jean*0063 & 'GAD_INIT_FIXED: Invalid Advection-Scheme Number setting'
26e9727e55 Jean*0064 CALL PRINT_ERROR( msgBuf, myThid )
0065 STOP 'ABNORMAL END: S/R GAD_INIT_FIXED'
0066 ENDIF
a9f828d17c Jean*0067
26e9727e55 Jean*0068
0069 GAD_OlMinSize(1) = 0
0070 GAD_OlMinSize(2) = 0
0071 GAD_OlMinSize(3) = 1
0072
0073
65d3db6a48 Jean*0074 DO n=1,nSOM
0075 somSfx(n) = ' '
0076 IF (n.EQ.1) somSfx(n) = '_x'
0077 IF (n.EQ.2) somSfx(n) = '_y'
0078 IF (n.EQ.3) somSfx(n) = '_z'
0079 IF (n.EQ.4) somSfx(n) = 'xx'
0080 IF (n.EQ.5) somSfx(n) = 'yy'
0081 IF (n.EQ.6) somSfx(n) = 'zz'
0082 IF (n.EQ.7) somSfx(n) = 'xy'
0083 IF (n.EQ.8) somSfx(n) = 'xz'
0084 IF (n.EQ.9) somSfx(n) = 'yz'
0085 ENDDO
0086
26e9727e55 Jean*0087
a9f828d17c Jean*0088 n = GAD_ADVSCHEME_GET( tempAdvScheme )
0089 IF ( n.LT.0 ) THEN
6433d105a5 Jean*0090 WRITE(msgBuf,'(2A,I6)') 'GAD_INIT_FIXED: ',
0091 & 'invalid Temp. advection scheme number=', tempAdvScheme
26e9727e55 Jean*0092 CALL PRINT_ERROR( msgBuf, myThid )
0093 STOP 'ABNORMAL END: S/R GAD_INIT_FIXED'
0094 ENDIF
a9f828d17c Jean*0095 n = GAD_ADVSCHEME_GET( tempVertAdvScheme )
0096 IF ( n.LT.0 ) THEN
6433d105a5 Jean*0097 WRITE(msgBuf,'(2A,I6)') 'GAD_INIT_FIXED: ',
0098 & 'invalid Temp. Vert. Adv.scheme number=', tempVertAdvScheme
26e9727e55 Jean*0099 CALL PRINT_ERROR( msgBuf, myThid )
0100 STOP 'ABNORMAL END: S/R GAD_INIT_FIXED'
0101 ENDIF
a9f828d17c Jean*0102 n = GAD_ADVSCHEME_GET( saltAdvScheme )
0103 IF ( n.LT.0 ) THEN
6433d105a5 Jean*0104 WRITE(msgBuf,'(2A,I6)') 'GAD_INIT_FIXED: ',
0105 & 'invalid Salt. advection scheme number=', saltAdvScheme
26e9727e55 Jean*0106 CALL PRINT_ERROR( msgBuf, myThid )
0107 STOP 'ABNORMAL END: S/R GAD_INIT_FIXED'
0108 ENDIF
a9f828d17c Jean*0109 n = GAD_ADVSCHEME_GET( saltVertAdvScheme )
0110 IF ( n.LT.0 ) THEN
6433d105a5 Jean*0111 WRITE(msgBuf,'(2A,I6)') 'GAD_INIT_FIXED: ',
0112 & 'invalid Salt. Vert. Adv.scheme number=', saltVertAdvScheme
26e9727e55 Jean*0113 CALL PRINT_ERROR( msgBuf, myThid )
0114 STOP 'ABNORMAL END: S/R GAD_INIT_FIXED'
0115 ENDIF
0116
d7ce0d34f8 Jean*0117
0118 tempSOM_Advection = tempAdvScheme.GE.ENUM_SOM_PRATHER
0119 & .AND. tempAdvScheme.LE.ENUM_SOM_LIMITER
0120 tempSOM_Advection = tempSOM_Advection .AND. tempAdvection
0121 saltSOM_Advection = saltAdvScheme.GE.ENUM_SOM_PRATHER
0122 & .AND. saltAdvScheme.LE.ENUM_SOM_LIMITER
0123 saltSOM_Advection = saltSOM_Advection .AND. saltAdvection
0124
1edeb03c55 Jean*0125
ee8b46da18 Jean*0126 tempMultiDimAdvec = multiDimAdvection .AND. tempAdvection
0127 saltMultiDimAdvec = multiDimAdvection .AND. saltAdvection
c17bf9e7ce Jean*0128 IF ( tempAdvScheme.EQ.ENUM_CENTERED_2ND
0129 & .OR.tempAdvScheme.EQ.ENUM_UPWIND_3RD
0130 & .OR.tempAdvScheme.EQ.ENUM_CENTERED_4TH ) THEN
1bb133c00c Jean*0131 tempMultiDimAdvec = .FALSE.
c17bf9e7ce Jean*0132 ENDIF
0133 IF ( saltAdvScheme.EQ.ENUM_CENTERED_2ND
0134 & .OR.saltAdvScheme.EQ.ENUM_UPWIND_3RD
0135 & .OR.saltAdvScheme.EQ.ENUM_CENTERED_4TH ) THEN
1bb133c00c Jean*0136 saltMultiDimAdvec = .FALSE.
c17bf9e7ce Jean*0137 ENDIF
0138
1edeb03c55 Jean*0139
0140 useMultiDimAdvec = useMultiDimAdvec.OR.tempMultiDimAdvec
0141 useMultiDimAdvec = useMultiDimAdvec.OR.saltMultiDimAdvec
0142
c17bf9e7ce Jean*0143
1bb133c00c Jean*0144 AdamsBashforthGt = .FALSE.
0145 AdamsBashforthGs = .FALSE.
0146 AdamsBashforth_T = .FALSE.
0147 AdamsBashforth_S = .FALSE.
c17bf9e7ce Jean*0148 IF ( tempAdvScheme.EQ.ENUM_CENTERED_2ND
0149 & .OR.tempAdvScheme.EQ.ENUM_UPWIND_3RD
0150 & .OR.tempAdvScheme.EQ.ENUM_CENTERED_4TH ) THEN
1bb133c00c Jean*0151 AdamsBashforthGt = tempStepping
c17bf9e7ce Jean*0152 ENDIF
0153 IF ( saltAdvScheme.EQ.ENUM_CENTERED_2ND
0154 & .OR.saltAdvScheme.EQ.ENUM_UPWIND_3RD
0155 & .OR.saltAdvScheme.EQ.ENUM_CENTERED_4TH ) THEN
1bb133c00c Jean*0156 AdamsBashforthGs = saltStepping
c17bf9e7ce Jean*0157 ENDIF
6433d105a5 Jean*0158 IF ( .NOT.doAB_onGtGs ) THEN
1bb133c00c Jean*0159 AdamsBashforth_T = AdamsBashforthGt
0160 AdamsBashforth_S = AdamsBashforthGs
0161 AdamsBashforthGt = .FALSE.
0162 AdamsBashforthGs = .FALSE.
0163 ENDIF
0164
998cbd211e Oliv*0165 #ifdef GAD_SMOLARKIEWICZ_HACK
0166 SmolarkiewiczMaxFrac = 1. _d 0
0167 #endif
0168
26e9727e55 Jean*0169
0170 IF ( tempAdvection ) THEN
a9f828d17c Jean*0171 minSize = GAD_ADVSCHEME_GET( tempAdvScheme )
0172 GAD_OlMinSize(1) = MAX( GAD_OlMinSize(1), minSize )
26e9727e55 Jean*0173 ENDIF
0174 IF ( saltAdvection ) THEN
a9f828d17c Jean*0175 minSize = GAD_ADVSCHEME_GET( saltAdvScheme )
0176 GAD_OlMinSize(1) = MAX( GAD_OlMinSize(1), minSize )
26e9727e55 Jean*0177 ENDIF
0178 IF ( useCubedSphereExchange .AND. useMultiDimAdvec ) THEN
6433d105a5 Jean*0179
26e9727e55 Jean*0180 GAD_OlMinSize(3) = MAX( GAD_OlMinSize(3), 2 )
0181 ENDIF
0182 WRITE(msgBuf,'(A,9I3)')
0183 & 'GAD_INIT_FIXED: GAD_OlMinSize=', GAD_OlMinSize
0184 CALL PRINT_MESSAGE(msgBuf,standardMessageUnit,SQUEEZE_RIGHT,1)
0185
9b8b001637 Jean*0186 _END_MASTER(myThid)
0187
c17bf9e7ce Jean*0188
0189
81c8d7b9aa Jean*0190 #ifdef ALLOW_DIAGNOSTICS
0191 IF ( useDiagnostics ) THEN
0192
0193 CALL GAD_DIAGNOSTICS_INIT( myThid )
0194 ENDIF
0195 #endif /* ALLOW_DIAGNOSTICS */
0196
0197
0198
c17bf9e7ce Jean*0199
0200 _BEGIN_MASTER(myThid)
0201
0202 WRITE(msgBuf,'(A)') ' '
0203 CALL PRINT_MESSAGE(msgBuf,standardMessageUnit,SQUEEZE_RIGHT,1)
0204 WRITE(msgBuf,'(A)') '// ==================================='
0205 CALL PRINT_MESSAGE(msgBuf,standardMessageUnit,SQUEEZE_RIGHT,1)
0206 WRITE(msgBuf,'(A)')'// GAD parameters :'
0207 CALL PRINT_MESSAGE(msgBuf,standardMessageUnit,SQUEEZE_RIGHT,1)
0208 WRITE(msgBuf,'(A)') '// ==================================='
0209 CALL PRINT_MESSAGE(msgBuf,standardMessageUnit,SQUEEZE_RIGHT,1)
0210
0211 CALL WRITE_0D_I( tempAdvScheme, INDEX_NONE,
0212 & 'tempAdvScheme =',
1bb133c00c Jean*0213 & ' /* Temp. Horiz.Advection scheme selector */')
49efc6c1e0 Jean*0214 CALL WRITE_0D_I( tempVertAdvScheme, INDEX_NONE,
0215 & 'tempVertAdvScheme =',
1bb133c00c Jean*0216 & ' /* Temp. Vert. Advection scheme selector */')
c17bf9e7ce Jean*0217 CALL WRITE_0D_L( tempMultiDimAdvec, INDEX_NONE,
0218 & 'tempMultiDimAdvec =',
0219 & ' /* use Muti-Dim Advec method for Temp */')
d7ce0d34f8 Jean*0220 CALL WRITE_0D_L( tempSOM_Advection, INDEX_NONE,
0221 & 'tempSOM_Advection =',
0222 & ' /* use 2nd Order Moment Advection for Temp */')
1bb133c00c Jean*0223 CALL WRITE_0D_L( AdamsBashforthGt, INDEX_NONE,
0224 & 'AdamsBashforthGt =',
d7ce0d34f8 Jean*0225 & ' /* apply Adams-Bashforth extrapolation on Gt */')
1bb133c00c Jean*0226 CALL WRITE_0D_L( AdamsBashforth_T, INDEX_NONE,
0227 & 'AdamsBashforth_T =',
d7ce0d34f8 Jean*0228 & ' /* apply Adams-Bashforth extrapolation on Temp */')
46918f1b26 Jean*0229 #ifdef GAD_SMOLARKIEWICZ_HACK
0230 CALL WRITE_0D_L( temp_stayPositive, INDEX_NONE,
0231 & 'temp_stayPositive =',
0232 & ' /* use Smolarkiewicz Hack for Temperature */')
0233 #endif
c17bf9e7ce Jean*0234
0235 CALL WRITE_0D_I( saltAdvScheme, INDEX_NONE,
0236 & 'saltAdvScheme =',
1bb133c00c Jean*0237 & ' /* Salt. Horiz.advection scheme selector */')
49efc6c1e0 Jean*0238 CALL WRITE_0D_I( saltVertAdvScheme, INDEX_NONE,
0239 & 'saltVertAdvScheme =',
1bb133c00c Jean*0240 & ' /* Salt. Vert. Advection scheme selector */')
c17bf9e7ce Jean*0241 CALL WRITE_0D_L( saltMultiDimAdvec, INDEX_NONE,
0242 & 'saltMultiDimAdvec =',
0243 & ' /* use Muti-Dim Advec method for Salt */')
d7ce0d34f8 Jean*0244 CALL WRITE_0D_L( saltSOM_Advection, INDEX_NONE,
0245 & 'saltSOM_Advection =',
0246 & ' /* use 2nd Order Moment Advection for Salt */')
1bb133c00c Jean*0247 CALL WRITE_0D_L( AdamsBashforthGs, INDEX_NONE,
0248 & 'AdamsBashforthGs =',
d7ce0d34f8 Jean*0249 & ' /* apply Adams-Bashforth extrapolation on Gs */')
1bb133c00c Jean*0250 CALL WRITE_0D_L( AdamsBashforth_S, INDEX_NONE,
0251 & 'AdamsBashforth_S =',
d7ce0d34f8 Jean*0252 & ' /* apply Adams-Bashforth extrapolation on Salt */')
998cbd211e Oliv*0253 #ifdef GAD_SMOLARKIEWICZ_HACK
46918f1b26 Jean*0254 CALL WRITE_0D_L( salt_stayPositive, INDEX_NONE,
0255 & 'salt_stayPositive =',
0256 & ' /* use Smolarkiewicz Hack for Salinity */')
0257 #endif
0258
0259 #ifdef GAD_SMOLARKIEWICZ_HACK
4da4b49499 Jean*0260 CALL WRITE_0D_RL( SmolarkiewiczMaxFrac, INDEX_NONE,
998cbd211e Oliv*0261 & 'SmolarkiewiczMaxFrac =',
0262 & ' /* maximal fraction of tracer to flow out of a cell */')
0263 #endif
c17bf9e7ce Jean*0264 WRITE(msgBuf,'(A)') '// ==================================='
0265 CALL PRINT_MESSAGE(msgBuf,standardMessageUnit,SQUEEZE_RIGHT,1)
0266
965ef81639 Jean*0267
0268
c17bf9e7ce Jean*0269 _END_MASTER(myThid)
0270 _BARRIER
0271
0272 RETURN
0273 END