1 |
jscott |
1.1 |
#include "ctrparam.h" |
2 |
|
|
#include "ATM2D_OPTIONS.h" |
3 |
|
|
|
4 |
|
|
C !INTERFACE: |
5 |
|
|
SUBROUTINE READ_ATMOS(inMonth,myThid ) |
6 |
|
|
C *==========================================================* |
7 |
|
|
C | o Takes atmos data on atmos grid, converts to ocean | |
8 |
|
|
C | model units, and combines the polar cap atmos cell | |
9 |
|
|
C | with its neighbor to the north or south. | |
10 |
|
|
C *==========================================================* |
11 |
|
|
IMPLICIT NONE |
12 |
|
|
|
13 |
|
|
C === Global Atmos/Ocean/Seaice Interface Variables === |
14 |
|
|
#include "ATMSIZE.h" |
15 |
|
|
#include "AGRID.COM" |
16 |
|
|
#include "SIZE.h" |
17 |
|
|
#include "EEPARAMS.h" |
18 |
|
|
#include "ATM2D_VARS.h" |
19 |
|
|
|
20 |
|
|
_RL PI |
21 |
|
|
PARAMETER ( PI = 3.14159265358979323844D0 ) |
22 |
|
|
_RL deg2rad |
23 |
|
|
PARAMETER ( deg2rad = 2.D0*PI/360.D0 ) |
24 |
|
|
_RL secDay1000 |
25 |
|
|
PARAMETER (secDay1000= 86400000.D0) |
26 |
|
|
|
27 |
|
|
C !INPUT/OUTPUT PARAMETERS: |
28 |
|
|
C === Routine arguments === |
29 |
|
|
C inMonth - current month (or forcing period) |
30 |
|
|
C myThid - Thread no. that called this routine. |
31 |
|
|
INTEGER inMonth |
32 |
|
|
INTEGER myThid |
33 |
|
|
|
34 |
|
|
C LOCAL VARIABLES: |
35 |
|
|
_RL a1,a2 |
36 |
|
|
INTEGER j_atm |
37 |
|
|
|
38 |
|
|
C Keep track of (raw) atmos variables for diagnostics |
39 |
|
|
DO j_atm=1,jm0 |
40 |
|
|
sum_tauu_ta(j_atm,inMonth)= sum_tauu_ta(j_atm,inMonth) + |
41 |
|
|
& tauu(j_atm)*dtatmo |
42 |
|
|
sum_tauv_ta(j_atm,inMonth)= sum_tauv_ta(j_atm,inMonth) + |
43 |
|
|
& tauv(j_atm)*dtatmo |
44 |
|
|
sum_wsocean_ta(j_atm,inMonth)= sum_wsocean_ta(j_atm,inMonth) + |
45 |
|
|
& wsocean(j_atm)*dtatmo |
46 |
|
|
sum_ps4ocean_ta(j_atm,inMonth)= sum_ps4ocean_ta(j_atm,inMonth) + |
47 |
|
|
& ps4ocean(j_atm)*dtatmo |
48 |
|
|
ENDDO |
49 |
|
|
|
50 |
|
|
C |
51 |
|
|
C put atmospheric data onto local arrays and convert units for ocean model |
52 |
|
|
C |
53 |
|
|
DO j_atm=1,jm0 |
54 |
|
|
|
55 |
|
|
atm_tauu(j_atm) = tauu(j_atm) |
56 |
|
|
atm_tauv(j_atm) = tauv(j_atm) |
57 |
|
|
atm_tair(j_atm) = tempr(j_atm) |
58 |
|
|
atm_precip(j_atm) = -precip(j_atm)/secDay1000 |
59 |
|
|
atm_runoff(j_atm) = -arunoff(j_atm)/secDay1000 |
60 |
|
|
atm_evap_ice(j_atm) = -evai(j_atm)/secDay1000 |
61 |
|
|
atm_evap_ocn(j_atm) = -evao(j_atm)/secDay1000 |
62 |
|
|
atm_qnet_ice(j_atm) = -hfluxi(j_atm) |
63 |
|
|
atm_qnet_ocn(j_atm) = -hfluxo(j_atm) |
64 |
|
|
atm_dFdt_ice(j_atm) = -dhfidtg(j_atm) |
65 |
|
|
atm_dFdt_ocn(j_atm) = -dhfodtg(j_atm) |
66 |
|
|
C Ice feels evap from model, no change with temperature |
67 |
|
|
atm_dLdt_ice(j_atm) = 0.D0 ! -devidtg(j_atm)/secDay1000 |
68 |
|
|
atm_dLdt_ocn(j_atm) = -devodtg(j_atm)/secDay1000 |
69 |
|
|
atm_dFdt_iceq(j_atm) = -dhfidtgeq(j_atm) |
70 |
|
|
atm_dFdt_ocnq(j_atm) = -dhfodtgeq(j_atm) |
71 |
|
|
atm_dLdt_iceq(j_atm) =0.D0 ! -devidtgeq(j_atm)/secDay1000 |
72 |
|
|
atm_dLdt_ocnq(j_atm) = -devodtgeq(j_atm) |
73 |
|
|
atm_solarinc(j_atm) = -solarinc_ice(j_atm) |
74 |
|
|
atm_solar_ocn(j_atm) = solarnet_ocean(j_atm) |
75 |
|
|
atm_solar_ice(j_atm) = solarnet_ice(j_atm) |
76 |
|
|
atm_windspeed(j_atm) = wsocean(j_atm) |
77 |
|
|
atm_slp(j_atm) = ps4ocean(j_atm)*1013.25/984.0 |
78 |
|
|
atm_pco2(j_atm) = co24ocean(j_atm)*1.D-6 |
79 |
|
|
|
80 |
|
|
ENDDO |
81 |
|
|
|
82 |
|
|
a1=sin(atm_yG(2)*deg2rad) |
83 |
|
|
a2=sin(atm_yG(jm0-2)*deg2rad) - a1 |
84 |
|
|
a1=a1 + 1.D0 |
85 |
|
|
IF (cflan(2).ne.1.d0) CALL COMBINE_ENDS(a1,a2,1,2) |
86 |
|
|
|
87 |
|
|
a1=sin(atm_yG(jm0-1)*deg2rad) |
88 |
|
|
a2=a1-sin(atm_yG(jm0-2)*deg2rad) |
89 |
|
|
a1=1.D0 - a1 |
90 |
|
|
IF (cflan(jm0-1).ne.1.d0) CALL COMBINE_ENDS(a1,a2,jm0,jm0-1) |
91 |
|
|
|
92 |
|
|
C PRINT *,'***read_atmos: tauu',tauu(JBUGJ+1) |
93 |
|
|
C PRINT *,'***read_atmos: atm_tauu',atm_tauu(JBUGJ+1) |
94 |
|
|
C PRINT *,'***read_atmos: atm_precip',atm_precip(JBUGJ+1) |
95 |
|
|
C PRINT *,'***read_atmos: atm_runoff',atm_runoff(JBUGJ+1) |
96 |
|
|
C PRINT *,'***read_atmos: atm_evap_ocn',atm_evap_ocn(JBUGJ+1) |
97 |
|
|
C PRINT *,'***read_atmos: atm_qnet_ocn',atm_qnet_ocn(JBUGJ+1) |
98 |
|
|
C PRINT *,'***read_atmos: atm_dFdt_ocn',atm_dFdt_ocn(JBUGJ+1) |
99 |
|
|
C PRINT *,'***read_atmos: atm_slp',atm_slp |
100 |
|
|
C PRINT *,'***read_atmos: atm_pco2',atm_pco2 |
101 |
|
|
|
102 |
|
|
RETURN |
103 |
|
|
END |
104 |
|
|
|
105 |
|
|
C-------------------------------------------------------------------------- |
106 |
|
|
#include "ctrparam.h" |
107 |
|
|
#include "ATM2D_OPTIONS.h" |
108 |
|
|
|
109 |
|
|
|
110 |
|
|
SUBROUTINE COMBINE_ENDS(a1,a2,ind1,ind2 ) |
111 |
|
|
C *==========================================================* |
112 |
|
|
C | Subroutine used to combine the atmos model data points at| |
113 |
|
|
C | the poles with their neighboring value, area weighted. | |
114 |
|
|
C | The calcuated new value is overwritten into ind2. | |
115 |
|
|
C *==========================================================* |
116 |
|
|
IMPLICIT NONE |
117 |
|
|
|
118 |
|
|
|
119 |
|
|
C === Global Atmos/Ocean/Seaice Interface Variables === |
120 |
|
|
#include "ATMSIZE.h" |
121 |
|
|
#include "AGRID.COM" |
122 |
|
|
#include "SIZE.h" |
123 |
|
|
#include "EEPARAMS.h" |
124 |
|
|
#include "ATM2D_VARS.h" |
125 |
|
|
|
126 |
|
|
C !INPUT/OUTPUT PARAMETERS: |
127 |
|
|
C === Routine arguments === |
128 |
|
|
C a1 - weighting of first index |
129 |
|
|
C a2 - weighting of second index |
130 |
|
|
C ind1 - first index into atmos data array |
131 |
|
|
C ind2 - first index into atmos data array |
132 |
|
|
_RL a1 |
133 |
|
|
_RL a2 |
134 |
|
|
INTEGER ind1 |
135 |
|
|
INTEGER ind2 |
136 |
|
|
|
137 |
|
|
C LOCAL VARIABLES: |
138 |
|
|
_RL rsuma |
139 |
|
|
|
140 |
|
|
rsuma=1.d0/(a1+a2) |
141 |
|
|
|
142 |
|
|
C atm_tauu(ind2)= (a1*atm_tauu(ind1) + a2*atm_tauu(ind2))*rsuma |
143 |
|
|
C atm_tauv(ind2)= (a1*atm_tauv(ind1) + a2*atm_tauv(ind2))*rsuma |
144 |
|
|
C Tau variables not combined - zero at atm pole point |
145 |
|
|
|
146 |
|
|
atm_tair(ind2)= (a1*atm_tair(ind1) + a2*atm_tair(ind2))*rsuma |
147 |
|
|
atm_precip(ind2)= (a1*atm_precip(ind1) + |
148 |
|
|
& a2*atm_precip(ind2))*rsuma |
149 |
|
|
atm_runoff(ind2)= atm_runoff(ind1)+ atm_runoff(ind2) |
150 |
|
|
atm_evap_ice(ind2)= (a1*atm_evap_ice(ind1) + |
151 |
|
|
& a2*atm_evap_ice(ind2))*rsuma |
152 |
|
|
atm_evap_ocn(ind2)= (a1*atm_evap_ocn(ind1) + |
153 |
|
|
& a2*atm_evap_ocn(ind2))*rsuma |
154 |
|
|
atm_qnet_ice(ind2)= (a1*atm_qnet_ice(ind1)+ |
155 |
|
|
& a2*atm_qnet_ice(ind2))*rsuma |
156 |
|
|
atm_qnet_ocn(ind2)= (a1*atm_qnet_ocn(ind1) + |
157 |
|
|
& a2*atm_qnet_ocn(ind2))*rsuma |
158 |
|
|
atm_dFdt_ice(ind2)= (a1*atm_dFdt_ice(ind1)+ |
159 |
|
|
& a2*atm_dFdt_ice(ind2))*rsuma |
160 |
|
|
atm_dFdt_ocn(ind2)= (a1*atm_dFdt_ocn(ind1)+ |
161 |
|
|
& a2*atm_dFdt_ocn(ind2))*rsuma |
162 |
|
|
atm_dLdt_ice(ind2)= (a1*atm_dLdt_ice(ind1)+ |
163 |
|
|
& a2*atm_dLdt_ice(ind2))*rsuma |
164 |
|
|
atm_dLdt_ocn(ind2)= (a1*atm_dLdt_ocn(ind1)+ |
165 |
|
|
& a2*atm_dLdt_ocn(ind2))*rsuma |
166 |
|
|
atm_dFdt_iceq(ind2)= (a1*atm_dFdt_iceq(ind1)+ |
167 |
|
|
& a2*atm_dFdt_iceq(ind2))*rsuma |
168 |
|
|
atm_dFdt_ocnq(ind2)= (a1*atm_dFdt_ocnq(ind1)+ |
169 |
|
|
& a2*atm_dFdt_ocnq(ind2))*rsuma |
170 |
|
|
atm_dLdt_iceq(ind2)= (a1*atm_dLdt_iceq(ind1)+ |
171 |
|
|
& a2*atm_dLdt_iceq(ind2))*rsuma |
172 |
|
|
atm_dLdt_ocnq(ind2)= (a1*atm_dLdt_ocnq(ind1)+ |
173 |
|
|
& a2*atm_dLdt_ocnq(ind2))*rsuma |
174 |
|
|
atm_solarinc(ind2)= (a1*atm_solarinc(ind1) + |
175 |
|
|
& a2*atm_solarinc(ind2))*rsuma |
176 |
|
|
atm_solar_ocn(ind2)= (a1*atm_solar_ocn(ind1)+ |
177 |
|
|
& a2*atm_solar_ocn(ind2))*rsuma |
178 |
|
|
atm_solar_ice(ind2)= (a1*atm_solar_ice(ind1)+ |
179 |
|
|
& a2*atm_solar_ice(ind2))*rsuma |
180 |
|
|
atm_windspeed(ind2)= (a1*atm_windspeed(ind1) + |
181 |
|
|
& a2*atm_windspeed(ind2))*rsuma |
182 |
|
|
atm_slp(ind2)= (a1*atm_slp(ind1) + a2*atm_slp(ind2))*rsuma |
183 |
|
|
atm_pco2(ind2)= (a1*atm_pco2(ind1)+a2*atm_pco2(ind2))*rsuma |
184 |
|
|
|
185 |
|
|
RETURN |
186 |
|
|
END |
187 |
|
|
|
188 |
|
|
|
189 |
|
|
|
190 |
|
|
|
191 |
|
|
|