/[MITgcm]/MITgcm/pkg/ptracers/ptracers_init_fixed.F
ViewVC logotype

Contents of /MITgcm/pkg/ptracers/ptracers_init_fixed.F

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


Revision 1.13 - (show annotations) (download)
Mon Aug 18 14:34:27 2014 UTC (9 years, 10 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint65j, checkpoint65k, checkpoint65h, checkpoint65i, checkpoint65l, checkpoint65c, checkpoint65f, checkpoint65g, checkpoint65d, checkpoint65e
Changes since 1.12: +6 -1 lines
- implement Adams-Bashforth on pTracers (instead of on tracer tendency),
  switched on by setting PTRACERS_doAB_onGpTr=F (default set to doAB_onGtGs).

1 C $Header: /u/gcmpack/MITgcm/pkg/ptracers/ptracers_init_fixed.F,v 1.12 2014/08/05 01:51:29 jmc Exp $
2 C $Name: $
3
4 #include "PTRACERS_OPTIONS.h"
5
6 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
7 CBOP
8 C !ROUTINE: PTRACERS_INIT_FIXED
9
10 C !INTERFACE:
11 SUBROUTINE PTRACERS_INIT_FIXED( myThid )
12
13 C !DESCRIPTION:
14 C Initialize PTRACERS constant
15
16 C !USES:
17 #include "PTRACERS_MOD.h"
18 IMPLICIT NONE
19 #include "SIZE.h"
20 #include "EEPARAMS.h"
21 #include "PARAMS.h"
22 #include "PTRACERS_SIZE.h"
23 #include "PTRACERS_PARAMS.h"
24 #include "GAD.h"
25
26 C !INPUT PARAMETERS:
27 INTEGER myThid
28 CEOP
29
30 #ifdef ALLOW_PTRACERS
31 C !FUNCTIONS
32 INTEGER GAD_ADVSCHEME_GET
33 EXTERNAL GAD_ADVSCHEME_GET
34
35 C !LOCAL VARIABLES:
36 C iTracer :: tracer index
37 C errCount :: error counter
38 C tracMinSize :: overlap minimum size for ptracers advection
39 C msgBuf :: Informational/error message buffer
40 INTEGER iTracer
41 INTEGER errCount
42 INTEGER tracMinSize, minSize
43 LOGICAL updateMinSize
44 CHARACTER*(MAX_LEN_MBUF) msgBuf
45
46 _BEGIN_MASTER( myThid )
47 errCount = 0
48
49 C Initialise internal parameter in common block:
50 DO iTracer = 1, PTRACERS_num
51 PTRACERS_MultiDimAdv(iTracer) = multiDimAdvection
52 PTRACERS_SOM_Advection(iTracer)= .FALSE.
53 PTRACERS_AdamsBashGtr(iTracer) = .FALSE.
54 PTRACERS_AdamsBash_Tr(iTracer) = .FALSE.
55 ENDDO
56
57 C-- Loop over tracers
58 tracMinSize = 0
59 DO iTracer = 1, PTRACERS_numInUse
60
61 C- Check for valid advection-scheme number
62 minSize = GAD_ADVSCHEME_GET( PTRACERS_advScheme(iTracer) )
63 IF ( minSize.LT.0 ) THEN
64 WRITE(msgBuf,'(2A,I6)') 'PTRACERS_INIT_FIXED: ',
65 & 'invalid Adv. Scheme number=', PTRACERS_advScheme(iTracer)
66 CALL PRINT_ERROR( msgBuf, myThid )
67 WRITE(msgBuf,'(2A,I6)') 'PTRACERS_INIT_FIXED: ',
68 & 'for tracer #', iTracer
69 CALL PRINT_ERROR( msgBuf, myThid )
70 errCount = errCount + 1
71 ENDIF
72 C Overlap minimum size consistent with ptracers advection
73 tracMinSize = MAX( tracMinSize, minSize )
74
75 IF (
76 & PTRACERS_advScheme(iTracer).EQ.ENUM_CENTERED_2ND .OR.
77 & PTRACERS_advScheme(iTracer).EQ.ENUM_UPWIND_3RD .OR.
78 & PTRACERS_advScheme(iTracer).EQ.ENUM_CENTERED_4TH
79 & ) PTRACERS_MultiDimAdv(iTracer) = .FALSE.
80 useMultiDimAdvec = useMultiDimAdvec
81 & .OR. PTRACERS_MultiDimAdv(iTracer)
82 PTRACERS_AdamsBashGtr(iTracer) =
83 & PTRACERS_advScheme(iTracer).EQ.ENUM_CENTERED_2ND .OR.
84 & PTRACERS_advScheme(iTracer).EQ.ENUM_UPWIND_3RD .OR.
85 & PTRACERS_advScheme(iTracer).EQ.ENUM_CENTERED_4TH
86 IF ( .NOT.PTRACERS_doAB_onGpTr ) THEN
87 PTRACERS_AdamsBash_Tr(iTracer) = PTRACERS_AdamsBashGtr(iTracer)
88 PTRACERS_AdamsBashGtr(iTracer) = .FALSE.
89 ENDIF
90
91 PTRACERS_SOM_Advection(iTracer) =
92 & PTRACERS_advScheme(iTracer).GE.ENUM_SOM_PRATHER
93 & .AND. PTRACERS_advScheme(iTracer).LE.ENUM_SOM_LIMITER
94 #ifndef PTRACERS_ALLOW_DYN_STATE
95 IF ( PTRACERS_SOM_Advection(iTracer) ) THEN
96 WRITE(msgBuf,'(2A)') 'PTRACERS_INIT_FIXED: ',
97 & 'trying to use 2nd.Order-Moment Advection without'
98 CALL PRINT_ERROR( msgBuf, myThid )
99 WRITE(msgBuf,'(2A)') 'PTRACERS_INIT_FIXED: ',
100 & 'dynamical internal state data structures compiled'
101 CALL PRINT_ERROR( msgBuf, myThid )
102 WRITE(msgBuf,'(2A)') 'PTRACERS_INIT_FIXED: ',
103 & 'Re-compile with: #define PTRACERS_ALLOW_DYN_STATE'
104 CALL PRINT_ERROR( msgBuf, myThid )
105 errCount = errCount + 1
106 ENDIF
107 #endif /* ndef PTRACERS_ALLOW_DYN_STATE */
108
109 C-- end of Tracer loop
110 ENDDO
111
112 C-- Update Overlap minimum size according to tracer advection
113 updateMinSize = GAD_OlMinSize(1).LT.tracMinSize
114 GAD_OlMinSize(1) = MAX( GAD_OlMinSize(1), tracMinSize )
115 C- Constraint on size of the overlap (after updating "useMultiDimAdvec"):
116 IF ( useCubedSphereExchange .AND. useMultiDimAdvec ) THEN
117 C- multi-dim-advection on CS-grid requires to double the size of OLx,OLy
118 updateMinSize = updateMinSize .OR. ( GAD_OlMinSize(3).LT.2 )
119 GAD_OlMinSize(3) = MAX( GAD_OlMinSize(3), 2 )
120 ENDIF
121 IF ( updateMinSize ) THEN
122 WRITE(msgBuf,'(2A,9I3)') 'PTRACERS_INIT_FIXED: ',
123 & 'updated GAD_OlMinSize=', GAD_OlMinSize
124 CALL PRINT_MESSAGE( msgBuf, standardMessageUnit,
125 & SQUEEZE_RIGHT, myThid )
126 ENDIF
127
128 #ifdef PTRACERS_ALLOW_DYN_STATE
129 CALL PTRACERS_INIT_FIXED_DYNAMIC( PtrISt,
130 & PTRACERS_numInUse,
131 & PTRACERS_SOM_Advection,
132 & sNx, sNy, Nr, OLx, OLy,
133 & nSx, nSy, nSOM,
134 & myThid )
135 #endif
136
137 C-- Stop if any error was found:
138 IF ( errCount .GE. 1 ) THEN
139 WRITE(msgBuf,'(A,I3,A)')
140 & 'S/R PTRACERS_INIT_FIXED: detected', errCount,' fatal error(s)'
141 CALL PRINT_ERROR( msgBuf, myThid )
142 CALL ALL_PROC_DIE( 0 )
143 STOP 'ABNORMAL END: S/R PTRACERS_INIT_FIXED'
144 ENDIF
145
146 _END_MASTER( myThid )
147 _BARRIER
148
149 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
150
151 #ifdef ALLOW_MNC
152 IF (useMNC) THEN
153 C Initialize the MNC variable types for PTRACERS
154 CALL PTRACERS_MNC_INIT( myThid )
155 ENDIF
156 #endif
157
158 #ifdef ALLOW_DIAGNOSTICS
159 IF ( useDiagnostics ) THEN
160 CALL PTRACERS_DIAGNOSTICS_INIT( myThid )
161 ENDIF
162 #endif
163
164 #endif /* ALLOW_PTRACERS */
165
166 RETURN
167 END

  ViewVC Help
Powered by ViewVC 1.1.22