/[MITgcm]/MITgcm_contrib/jscott/pkg_atm2d/read_atmos.F
ViewVC logotype

Annotation of /MITgcm_contrib/jscott/pkg_atm2d/read_atmos.F

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.1 - (hide annotations) (download)
Fri Aug 11 18:55:50 2006 UTC (18 years, 11 months ago) by jscott
Branch: MAIN
new 2d atm package

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    

  ViewVC Help
Powered by ViewVC 1.1.22