1 |
C $Header: $ |
2 |
C $Name: $ |
3 |
|
4 |
#include "ctrparam.h" |
5 |
#include "ATM2D_OPTIONS.h" |
6 |
|
7 |
C !INTERFACE: |
8 |
SUBROUTINE READ_ATMOS(inMonth,myThid ) |
9 |
C *==========================================================* |
10 |
C | o Takes atmos data on atmos grid, converts to ocean | |
11 |
C | model units, and combines the polar cap atmos cell | |
12 |
C | with its neighbor to the north or south. | |
13 |
C *==========================================================* |
14 |
IMPLICIT NONE |
15 |
|
16 |
C === Global Atmos/Ocean/Seaice Interface Variables === |
17 |
#include "ATMSIZE.h" |
18 |
#include "AGRID.h" |
19 |
#include "SIZE.h" |
20 |
#include "EEPARAMS.h" |
21 |
#include "PARAMS.h" |
22 |
#include "ATM2D_VARS.h" |
23 |
|
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. _d 0 ! -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. _d 0 ! -devidtgeq(j_atm)/secDay1000 |
72 |
atm_dLdt_ocnq(j_atm) = -devodtgeq(j_atm)/secDay1000 |
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 - 1013.25 |
78 |
atm_pco2(j_atm) = co24ocean(j_atm) |
79 |
|
80 |
ENDDO |
81 |
|
82 |
IF (cflan(2).NE.1. _d 0) |
83 |
& CALL COMBINE_ENDS(endwgt1,endwgt2,1,2,rsumwgt) |
84 |
IF (cflan(jm0-1).NE.1. _d 0) |
85 |
& CALL COMBINE_ENDS(endwgt1,endwgt2,jm0,jm0-1,rsumwgt) |
86 |
|
87 |
RETURN |
88 |
END |
89 |
|
90 |
C-------------------------------------------------------------------------- |
91 |
#include "ctrparam.h" |
92 |
#include "ATM2D_OPTIONS.h" |
93 |
|
94 |
|
95 |
SUBROUTINE COMBINE_ENDS(a1,a2,ind1,ind2,rsuma) |
96 |
C *==========================================================* |
97 |
C | Subroutine used to combine the atmos model data points at| |
98 |
C | the poles with their neighboring value, area weighted. | |
99 |
C | The calcuated new value is overwritten into ind2. | |
100 |
C *==========================================================* |
101 |
IMPLICIT NONE |
102 |
|
103 |
|
104 |
C === Global Atmos/Ocean/Seaice Interface Variables === |
105 |
#include "ATMSIZE.h" |
106 |
#include "AGRID.h" |
107 |
#include "SIZE.h" |
108 |
#include "EEPARAMS.h" |
109 |
#include "ATM2D_VARS.h" |
110 |
|
111 |
C !INPUT/OUTPUT PARAMETERS: |
112 |
C === Routine arguments === |
113 |
C a1 - weighting of first index |
114 |
C a2 - weighting of second index |
115 |
C ind1 - first index into atmos data array |
116 |
C ind2 - first index into atmos data array |
117 |
C rsuma - recip of sum of ind1+ind2 |
118 |
_RL a1 |
119 |
_RL a2 |
120 |
INTEGER ind1 |
121 |
INTEGER ind2 |
122 |
_RL rsuma |
123 |
|
124 |
C LOCAL VARIABLES: |
125 |
|
126 |
C atm_tauu(ind2)= (a1*atm_tauu(ind1) + a2*atm_tauu(ind2))*rsuma |
127 |
C atm_tauv(ind2)= (a1*atm_tauv(ind1) + a2*atm_tauv(ind2))*rsuma |
128 |
C Tau variables not combined - zero at atm pole point |
129 |
|
130 |
atm_tair(ind2)= (a1*atm_tair(ind1) + a2*atm_tair(ind2))*rsuma |
131 |
atm_precip(ind2)= (a1*atm_precip(ind1) + |
132 |
& a2*atm_precip(ind2))*rsuma |
133 |
atm_runoff(ind2)= atm_runoff(ind1)+ atm_runoff(ind2) |
134 |
atm_evap_ice(ind2)= (a1*atm_evap_ice(ind1) + |
135 |
& a2*atm_evap_ice(ind2))*rsuma |
136 |
atm_evap_ocn(ind2)= (a1*atm_evap_ocn(ind1) + |
137 |
& a2*atm_evap_ocn(ind2))*rsuma |
138 |
atm_qnet_ice(ind2)= (a1*atm_qnet_ice(ind1)+ |
139 |
& a2*atm_qnet_ice(ind2))*rsuma |
140 |
atm_qnet_ocn(ind2)= (a1*atm_qnet_ocn(ind1) + |
141 |
& a2*atm_qnet_ocn(ind2))*rsuma |
142 |
atm_dFdt_ice(ind2)= (a1*atm_dFdt_ice(ind1)+ |
143 |
& a2*atm_dFdt_ice(ind2))*rsuma |
144 |
atm_dFdt_ocn(ind2)= (a1*atm_dFdt_ocn(ind1)+ |
145 |
& a2*atm_dFdt_ocn(ind2))*rsuma |
146 |
atm_dLdt_ice(ind2)= (a1*atm_dLdt_ice(ind1)+ |
147 |
& a2*atm_dLdt_ice(ind2))*rsuma |
148 |
atm_dLdt_ocn(ind2)= (a1*atm_dLdt_ocn(ind1)+ |
149 |
& a2*atm_dLdt_ocn(ind2))*rsuma |
150 |
atm_dFdt_iceq(ind2)= (a1*atm_dFdt_iceq(ind1)+ |
151 |
& a2*atm_dFdt_iceq(ind2))*rsuma |
152 |
atm_dFdt_ocnq(ind2)= (a1*atm_dFdt_ocnq(ind1)+ |
153 |
& a2*atm_dFdt_ocnq(ind2))*rsuma |
154 |
atm_dLdt_iceq(ind2)= (a1*atm_dLdt_iceq(ind1)+ |
155 |
& a2*atm_dLdt_iceq(ind2))*rsuma |
156 |
atm_dLdt_ocnq(ind2)= (a1*atm_dLdt_ocnq(ind1)+ |
157 |
& a2*atm_dLdt_ocnq(ind2))*rsuma |
158 |
atm_solarinc(ind2)= (a1*atm_solarinc(ind1) + |
159 |
& a2*atm_solarinc(ind2))*rsuma |
160 |
atm_solar_ocn(ind2)= (a1*atm_solar_ocn(ind1)+ |
161 |
& a2*atm_solar_ocn(ind2))*rsuma |
162 |
atm_solar_ice(ind2)= (a1*atm_solar_ice(ind1)+ |
163 |
& a2*atm_solar_ice(ind2))*rsuma |
164 |
atm_windspeed(ind2)= (a1*atm_windspeed(ind1) + |
165 |
& a2*atm_windspeed(ind2))*rsuma |
166 |
atm_slp(ind2)= (a1*atm_slp(ind1) + a2*atm_slp(ind2))*rsuma |
167 |
atm_pco2(ind2)= (a1*atm_pco2(ind1)+a2*atm_pco2(ind2))*rsuma |
168 |
|
169 |
RETURN |
170 |
END |
171 |
|
172 |
|
173 |
|
174 |
|
175 |
|