1 |
|
2 |
#include "ctrparam.h" |
3 |
|
4 |
! ========================================================== |
5 |
! |
6 |
! UTIL.F: Some utility functions for the climate model. |
7 |
! |
8 |
! ---------------------------------------------------------- |
9 |
! |
10 |
! Revision History: |
11 |
! |
12 |
! When Who What |
13 |
! ----- ---------- ------- |
14 |
! 080200 Chien Wang repack based on CliChem3 & M24x11, |
15 |
! and add cpp. |
16 |
! |
17 |
! ========================================================== |
18 |
|
19 |
C CMS SYSTEM ROUTINES EMULATION FOR IBM RS/6000 |
20 |
C |
21 |
SUBROUTINE CLOCKS(IHSC) |
22 |
C THIS VERSION OF CLOCKS RETURNS PROCESS TIME OF USER AND |
23 |
C SYSTEM TIME OF CHILD PROCESSES |
24 |
C NOTE: MCLOCK IS REALLY IN HUNDREDTHS OF A SECOND, NOT SIXTIETHS. |
25 |
CCC IHSC=-MCLOCK() |
26 |
logical first |
27 |
real *4 zero,a |
28 |
data first /.true./ |
29 |
if(first) then |
30 |
zero=0.0 |
31 |
a=secnds(zero) |
32 |
first=.false. |
33 |
end if |
34 |
IHSC=100*secnds(a) |
35 |
c IHSC=0. |
36 |
RETURN |
37 |
END |
38 |
FUNCTION THBAR (X,Y) |
39 |
REAL A,B,C,D,E,F,G,Q,AL |
40 |
CC DOUBLE PRECISION A,B,C,D,E,F,G,Q,AL |
41 |
DATA A,B,C,D,E,F,G/113.4977618974100,438.5012518098521, |
42 |
* 88.49964112645850,-11.50111432385882, |
43 |
* 30.00033943846368,299.9975118132485,299.9994728900967/ |
44 |
Q=X/Y |
45 |
AL=(A+Q*(B+Q*(C+Q*(D+Q))))/(E+Q*(F+G*Q)) |
46 |
THBAR=X*AL |
47 |
RETURN |
48 |
END |
49 |
! |
50 |
FUNCTION EXPBYK (X) |
51 |
EXPBYK=X**.286 |
52 |
RETURN |
53 |
END |
54 |
! |
55 |
FUNCTION EXPBYKOLD (X) |
56 |
C EXPBYK=X**.286 |
57 |
c DOUBLE PRECISION A(7),B(7),C(7),D(7),E(7),F(7),G(7),H(7) |
58 |
REAL A(7),B(7),C(7),D(7),E(7),F(7),G(7),H(7) |
59 |
c DOUBLE PRECISION TOP, BOT |
60 |
C |
61 |
DATA A(1) /.3910084705257427D12/ |
62 |
DATA B(1) /.1323236271112985D11/ |
63 |
DATA C(1) /.4866245535199495D8/ |
64 |
DATA D(1) /.2825751070482957D5/ |
65 |
DATA E(1) /.2021679763023094D12/ |
66 |
DATA F(1) /.3219813576002469D10/ |
67 |
DATA G(1) /.7026939414893149D7/ |
68 |
DATA H(1) /.2245905505347945D4/ |
69 |
CUT1 DC E'.272E3' |
70 |
DATA A(2) /.1527376839478999D10/ |
71 |
DATA B(2) /.2067556673365934D9/ |
72 |
DATA C(2) /.3041403459557123D7/ |
73 |
DATA D(2) /.7064377675658254D4/ |
74 |
DATA E(2) /.1173982318753656D10/ |
75 |
DATA F(2) /.7478937617614235D8/ |
76 |
DATA G(2) /.6528830353471617D6/ |
77 |
DATA H(2) /.8346812273642854D3/ |
78 |
CUT2 DC E'.68E2' |
79 |
DATA A(3) /.5966315773653637D7/ |
80 |
DATA B(3) /.3230557302541690D7/ |
81 |
DATA C(3) /.1900877162187466D6/ |
82 |
DATA D(3) /.1766094418795829D4/ |
83 |
DATA E(3) /.6817273980203066D7/ |
84 |
DATA F(3) /.1737197094305671D7/ |
85 |
DATA G(3) /.6066030070508742D5/ |
86 |
DATA H(3) /.3102057273820339D3/ |
87 |
CUT3 DC E'.17E2' |
88 |
DATA A(4) /.2330592097816283D5/ |
89 |
DATA B(4) /.5047745784578189D5/ |
90 |
DATA C(4) /.1188048226473864D5/ |
91 |
DATA D(4) /.4415236046666724D3/ |
92 |
DATA E(4) /.3958766989520573D5/ |
93 |
DATA F(4) /.4035136939373286D5/ |
94 |
DATA G(4) /.5636035678286606D4/ |
95 |
DATA H(4) /.1152866390241182D3/ |
96 |
CUT4 DC E'.425E1' |
97 |
DATA A(5) /.9103875388060500D2/ |
98 |
DATA B(5) /.7887102788893237D3/ |
99 |
DATA C(5) /.7425301414937417D3/ |
100 |
DATA D(5) /.1103809011715425D3/ |
101 |
DATA E(5) /.2298842049606823D3/ |
102 |
DATA F(5) /.9372759240517918D3/ |
103 |
DATA G(5) /.5236521711877195D3/ |
104 |
DATA H(5) /.4284578897126435D2/ |
105 |
CUT5 DC E'.10625E1' |
106 |
DATA A(6) /.3556201323540056D0/ |
107 |
DATA B(6) /.1232359810733637D2/ |
108 |
DATA C(6) /.4640813384330962D2/ |
109 |
DATA D(6) /.2759522529901992D2/ |
110 |
DATA E(6) /.1334929482333115D1/ |
111 |
DATA F(6) /.2177091313247190D2/ |
112 |
DATA G(6) /.4865327546221521D2/ |
113 |
DATA H(6) /.1592345521834502D2/ |
114 |
CUT6 DC E'.265625E0' |
115 |
DATA A(7) /.1389141141676475D-2/ |
116 |
DATA B(7) /.1925562204367069D0/ |
117 |
DATA C(7) /.2900508365211162D1/ |
118 |
DATA D(7) /.6898806323349460D1/ |
119 |
DATA E(7) /.7751888493733211D-2/ |
120 |
DATA F(7) /.5056917033590845D0/ |
121 |
DATA G(7) /.4520445715351951D1/ |
122 |
DATA H(7) /.5917884392240980D1/ |
123 |
C |
124 |
C |
125 |
IF(X.LT.272.) GO TO 10 |
126 |
K=1 |
127 |
GO TO 100 |
128 |
10 IF(X.LT.68.) GO TO 20 |
129 |
K=2 |
130 |
GO TO 100 |
131 |
20 IF(X.LT.17.) GO TO 30 |
132 |
K=3 |
133 |
GO TO 100 |
134 |
30 IF(X.LT.4.25) GO TO 40 |
135 |
K=4 |
136 |
GO TO 100 |
137 |
40 IF(X.LT.1.0625) GO TO 50 |
138 |
K=5 |
139 |
GO TO 100 |
140 |
50 IF(X.LT.0.265625) GO TO 60 |
141 |
K=6 |
142 |
GO TO 100 |
143 |
60 K=7 |
144 |
C |
145 |
100 CONTINUE |
146 |
IF(X.LT.272. .AND. X.GE.68.) K=2 |
147 |
IF(X.LT.68. .AND. X.GE.17.) K=3 |
148 |
IF(X.LT.17. .AND. X.GE.4.25) K=4 |
149 |
IF(X.LT.4.25 .AND. X.GE.1.0625) K=5 |
150 |
IF(X.LT.1.0625 .AND. X.GE.0.265625) K=6 |
151 |
IF(X.LT.0.265625) K=7 |
152 |
C |
153 |
TOP = X |
154 |
BOT = H(K) |
155 |
TOP = TOP + D(K) |
156 |
BOT = BOT * X |
157 |
TOP = TOP * X |
158 |
BOT = BOT + G(K) |
159 |
TOP = TOP + C(K) |
160 |
BOT = BOT * X |
161 |
TOP = TOP * X |
162 |
BOT = BOT + F(K) |
163 |
TOP = TOP + B(K) |
164 |
BOT = BOT * X |
165 |
TOP = TOP * X |
166 |
BOT = BOT + E(K) |
167 |
TOP = TOP + A(K) |
168 |
C |
169 |
TOP = TOP / BOT |
170 |
EXPBYK = TOP |
171 |
RETURN |
172 |
END |
173 |
C SUBROUTINE READT (IUNIT,NSKIP,AIN,LENGTH,AOUT,IPOS) |
174 |
C**** |
175 |
C**** READ IN TITLE & REAL*4 ARRAY |
176 |
C**** |
177 |
C REAL*4 AIN(LENGTH),X |
178 |
C REAL*4 AOUT(LENGTH) |
179 |
C CHARACTER*80 TITLE |
180 |
C DO 10 N=1,IPOS-1 |
181 |
C 10 READ (IUNIT,END=920) |
182 |
C READ (IUNIT,ERR=910,END=920,NUM=LEN) TITLE,(X,N=1,NSKIP),AIN |
183 |
C IF(LEN.LT.4*(20+NSKIP+LENGTH)) GO TO 930 |
184 |
C DO 100 N=1,LENGTH |
185 |
C 100 AOUT(N)=AIN(N) |
186 |
C WRITE(6,'('' Read from Unit '',I2,'':'',A80)') IUNIT,TITLE |
187 |
C RETURN |
188 |
C 910 WRITE(6,*) 'READ ERROR ON UNIT',IUNIT |
189 |
C STOP 'READ ERROR' |
190 |
C 920 WRITE(6,*) 'END OF FILE ENCOUNTERED ON UNIT',IUNIT |
191 |
C STOP 'NO DATA TO READ' |
192 |
C 930 WRITE(6,*) LEN/4,' RATHER THAN',20+NSKIP+LENGTH,' WORDS ON UNIT', |
193 |
C * IUNIT |
194 |
C STOP 'NOT ENOUGH DATA FOUND' |
195 |
C END |