1 |
C $Header: /u/gcmpack/MITgcm/pkg/thsice/thsice_check.F,v 1.9 2015/07/29 00:48:24 jmc Exp $ |
2 |
C $Name: $ |
3 |
|
4 |
#include "THSICE_OPTIONS.h" |
5 |
|
6 |
CBOP |
7 |
C !ROUTINE: THSICE_CHECK |
8 |
C !INTERFACE: |
9 |
|
10 |
SUBROUTINE THSICE_CHECK( myThid ) |
11 |
|
12 |
C !DESCRIPTION: \bv |
13 |
C *==========================================================* |
14 |
C | S/R THSICE_CHECK |
15 |
C | o Check parameters and other package dependences |
16 |
C *==========================================================* |
17 |
C \ev |
18 |
|
19 |
C !USES: |
20 |
IMPLICIT NONE |
21 |
|
22 |
C == Global variables === |
23 |
#include "SIZE.h" |
24 |
#include "EEPARAMS.h" |
25 |
#include "PARAMS.h" |
26 |
#include "THSICE_SIZE.h" |
27 |
#include "THSICE_PARAMS.h" |
28 |
|
29 |
C !INPUT/OUTPUT PARAMETERS: |
30 |
C myThid :: my Thread Id number |
31 |
INTEGER myThid |
32 |
|
33 |
C !LOCAL VARIABLES: |
34 |
C msgBuf :: Informational/error message buffer |
35 |
CHARACTER*(MAX_LEN_MBUF) msgBuf |
36 |
INTEGER errCount |
37 |
CEOP |
38 |
|
39 |
_BEGIN_MASTER(myThid) |
40 |
errCount = 0 |
41 |
|
42 |
WRITE(msgBuf,'(A)') 'THSICE_CHECK: #define THSICE' |
43 |
CALL PRINT_MESSAGE( msgBuf, standardMessageUnit, |
44 |
& SQUEEZE_RIGHT, myThid ) |
45 |
|
46 |
C-- Check parameter consistency: |
47 |
IF ( .NOT.( thSIce_skipThermo .OR. useBulkForce .OR. useEXF |
48 |
& .OR. useAIM .OR. useCheapAML .OR. useATM2d ) ) THEN |
49 |
C- need some form of ATM-surface pkg to provide Air-Ice surf fluxes |
50 |
WRITE(msgBuf,'(2A)') |
51 |
& 'THSICE_CHECK: needs some PKG (EXF,Bulk-Force,AIM,CheapAML)' |
52 |
CALL PRINT_ERROR( msgBuf, myThid ) |
53 |
WRITE(msgBuf,'(2A)') |
54 |
& 'THSICE_CHECK: to provide Air-Ice surface fluxes for THSICE' |
55 |
CALL PRINT_ERROR( msgBuf, myThid ) |
56 |
errCount = errCount + 1 |
57 |
ENDIF |
58 |
IF ( thSIceAdvScheme.EQ.0 .AND. thSIce_diffK.NE.0. ) THEN |
59 |
WRITE(msgBuf,'(2A)') |
60 |
& 'THSICE_CHECK: to use thSIce_diffK, needs to select', |
61 |
& ' one advection scheme (thSIceAdvScheme<>0)' |
62 |
CALL PRINT_ERROR( msgBuf, myThid ) |
63 |
errCount = errCount + 1 |
64 |
ENDIF |
65 |
#ifndef ALLOW_GENERIC_ADVDIFF |
66 |
IF ( thSIceAdvScheme.NE.0 ) THEN |
67 |
WRITE(msgBuf,'(2A)') 'THSICE_CHECK: Need to compile ', |
68 |
& '"generic_advdiff" pkg in order to use thSIceAdvScheme' |
69 |
CALL PRINT_ERROR( msgBuf, myThid ) |
70 |
errCount = errCount + 1 |
71 |
ENDIF |
72 |
#endif /* ndef ALLOW_GENERIC_ADVDIFF */ |
73 |
|
74 |
IF ( thSIceBalanceAtmFW.NE.0 ) THEN |
75 |
#ifndef ALLOW_BALANCE_FLUXES |
76 |
WRITE(msgBuf,'(2A)') 'THSICE_CHECK: needs to have ', |
77 |
& 'ALLOW_BALANCE_FLUXES defined to use thSIceBalanceAtmFW' |
78 |
CALL PRINT_ERROR( msgBuf, myThid ) |
79 |
errCount = errCount + 1 |
80 |
#endif |
81 |
IF ( balanceEmPmR ) THEN |
82 |
WRITE(msgBuf,'(2A)') 'THSICE_CHECK: cannot use', |
83 |
& ' both balanceEmPmR and thSIceBalanceAtmFW' |
84 |
CALL PRINT_ERROR( msgBuf, myThid ) |
85 |
errCount = errCount + 1 |
86 |
ENDIF |
87 |
ENDIF |
88 |
|
89 |
#ifdef ALLOW_AUTODIFF |
90 |
IF ( nitMaxTsf .GT. MaxTsf ) THEN |
91 |
WRITE(msgBuf,'(2A)') |
92 |
& 'THSICE_CHECK: Need to set MaxTsf >= nitMaxTsf for TAF' |
93 |
CALL PRINT_ERROR( msgBuf, myThid ) |
94 |
errCount = errCount + 1 |
95 |
ENDIF |
96 |
# ifdef ALLOW_DBUG_THSICE |
97 |
WRITE(msgBuf,'(2A)') |
98 |
& 'THSICE_CHECK: cannot compile AD-code with ALLOW_DBUG_THSICE' |
99 |
CALL PRINT_ERROR( msgBuf, myThid ) |
100 |
errCount = errCount + 1 |
101 |
# endif |
102 |
#endif /* ALLOW_AUTODIFF */ |
103 |
|
104 |
#ifdef OLD_THSICE_CALL_SEQUENCE |
105 |
WRITE(msgBuf,'(2A)') '** WARNING ** THSICE_CHECK: ', |
106 |
& 'OLD_THSICE_CALL_SEQUENCE code no longer maintained' |
107 |
CALL PRINT_MESSAGE( msgBuf, errorMessageUnit, |
108 |
& SQUEEZE_RIGHT, myThid ) |
109 |
WRITE(msgBuf,'(2A)') '** WARNING ** THSICE_CHECK: ', |
110 |
& 'option and related code will be removed after chkpt-64e' |
111 |
CALL PRINT_MESSAGE( msgBuf, errorMessageUnit, |
112 |
& SQUEEZE_RIGHT, myThid ) |
113 |
#endif /* OLD_THSICE_CALL_SEQUENCE */ |
114 |
|
115 |
IF ( useAIM .AND. .NOT.( stepFwd_oceMxL .OR. useCoupler ) |
116 |
& .AND. tauRelax_MxL.NE. -1. _d 0 ) THEN |
117 |
C- with pkg/aim, usual way to use pkg/thsice is to step-forward Mixed-Layer |
118 |
C (stepFwd_oceMxL=T); otherwise, need to be sure SST are set, e.g. by AIM |
119 |
C when setting tauRelax_MxL=-1 ; add a warning if this is not the case |
120 |
WRITE(msgBuf,'(2A)') '** WARNING ** THSICE_CHECK: ', |
121 |
& 'SST are not stepped forward (stepFwd_oceMx=F)' |
122 |
CALL PRINT_MESSAGE( msgBuf, errorMessageUnit, |
123 |
& SQUEEZE_RIGHT, myThid ) |
124 |
WRITE(msgBuf,'(2A)') '** WARNING ** THSICE_CHECK: ', |
125 |
& 'nor set (from files) by pkg/aim (tauRelax_MxL<>-1)' |
126 |
c & 'nor copied from pkg/aim SST (tauRelax_MxL<>-1.)' |
127 |
CALL PRINT_MESSAGE( msgBuf, errorMessageUnit, |
128 |
& SQUEEZE_RIGHT, myThid ) |
129 |
ENDIF |
130 |
|
131 |
IF ( errCount.GE.1 ) THEN |
132 |
WRITE(msgBuf,'(A,I3,A)') |
133 |
& 'THSICE_CHECK: detected', errCount,' fatal error(s)' |
134 |
CALL PRINT_ERROR( msgBuf, myThid ) |
135 |
CALL ALL_PROC_DIE( 0 ) |
136 |
STOP 'ABNORMAL END: S/R THSICE_CHECK' |
137 |
ENDIF |
138 |
|
139 |
_END_MASTER(myThid) |
140 |
|
141 |
RETURN |
142 |
END |