-
Notifications
You must be signed in to change notification settings - Fork 237
/
pp81_readparms.F
127 lines (109 loc) · 3.62 KB
/
pp81_readparms.F
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#include "PP81_OPTIONS.h"
CBOP
C !ROUTINE: PP81_READPARMS
C !INTERFACE: ==========================================================
SUBROUTINE PP81_READPARMS( myThid )
C !DESCRIPTION:
C Initialize PP81 parameters, read in data.pp81
C !USES: ===============================================================
IMPLICIT NONE
#include "SIZE.h"
#include "EEPARAMS.h"
#include "PP81.h"
#include "PARAMS.h"
C !INPUT PARAMETERS: ===================================================
C myThid :: thread number
INTEGER myThid
C !OUTPUT PARAMETERS: ==================================================
C none
#ifdef ALLOW_PP81
C !LOCAL VARIABLES: ====================================================
C iUnit :: unit number for I/O
C msgBuf :: message buffer
INTEGER iUnit
CHARACTER*(MAX_LEN_MBUF) msgBuf
CEOP
NAMELIST /PP81_PARM01/
& PPnRi,
& PPviscMin,
& PPdiffMin,
& PPviscMax,
& PPnu0,
& PPalpha,
& PPdumpFreq,
& PPMixingMaps,
& PPwriteState
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
IF ( .NOT.usePP81 ) THEN
C- pkg PP81 is not used
_BEGIN_MASTER(myThid)
C- Track pkg activation status:
PP81isON = .FALSE.
C print a (weak) warning if data.pp81 is found
CALL PACKAGES_UNUSED_MSG( 'usePP81', ' ', ' ' )
_END_MASTER(myThid)
RETURN
ENDIF
C This routine has been called by the main model so we set our
C internal flag to indicate we are in business
PP81isON = .TRUE.
C Set defaults values for parameters in PP81.h
PPnRi = 2
PPviscMin = 0. _d 0
PPdiffMin = 0. _d 0
PPviscMax = 1. _d 0
PPnu0 = 1. _d -02
PPalpha = 5. _d 0
RiLimit = UNSET_RL
PPdumpFreq = dumpFreq
PPMixingMaps = .FALSE.
PPwriteState = .FALSE.
C Open and read the data.pp81 file
_BEGIN_MASTER(myThid)
WRITE(msgBuf,'(A)') ' PP81_READPARMS: opening data.pp81'
CALL PRINT_MESSAGE(msgBuf, standardMessageUnit,
& SQUEEZE_RIGHT , 1)
CALL OPEN_COPY_DATA_FILE(
I 'data.pp81', 'PP81_READPARMS',
O iUnit,
I myThid )
READ(UNIT=iUnit,NML=PP81_PARM01)
WRITE(msgBuf,'(A)')
& ' PP81_READPARMS: finished reading data.pp81'
CALL PRINT_MESSAGE(msgBuf, standardMessageUnit,
& SQUEEZE_RIGHT , 1)
C Close the open data file
#ifdef SINGLE_DISK_IO
CLOSE(iUnit)
#else
CLOSE(iUnit,STATUS='DELETE')
#endif /* SINGLE_DISK_IO */
_END_MASTER(myThid)
C Everyone else must wait for the parameters to be loaded
_BARRIER
C Now set-up any remaining parameters that result from the input parameters
IF ( PPviscMax .LE. 0. ) THEN
WRITE(msgBuf,'(A)') 'PPviscMax must be greater than zero'
CALL PRINT_ERROR( msgBuf , 1)
STOP 'ABNORMAL END: S/R PP81_READPARMS'
ENDIF
IF ( PPalpha .EQ. 0. ) THEN
WRITE(msgBuf,'(A)') 'PPalpha must not be zero'
CALL PRINT_ERROR( msgBuf , 1)
STOP 'ABNORMAL END: S/R PP81_READPARMS'
ENDIF
IF ( PPnRi .EQ. 0 ) THEN
WRITE(msgBuf,'(A)') 'PPnRi must not be zero'
CALL PRINT_ERROR( msgBuf , 1)
STOP 'ABNORMAL END: S/R PP81_READPARMS'
ENDIF
IF ( RiLimit .EQ. UNSET_RL ) THEN
RiLimit = PPnRi
RiLimit = (
& ((PPnu0+viscArNr(1))/PPviscMax)**(1. _d 0/RiLimit)
& -1. _d 0
& )/PPalpha
ENDIF
#endif /* ALLOW_PP81 */
RETURN
END