C $Header: /u/gcmpack/MITgcm/pkg/atm2d/read_atmos.F,v 1.8 2007/10/08 23:48:28 jmc Exp $ C $Name: $ #include "ctrparam.h" #include "ATM2D_OPTIONS.h" C !INTERFACE: SUBROUTINE READ_ATMOS(inMonth,myThid ) C *==========================================================* C | o Takes atmos data on atmos grid, converts to ocean | C | model units, and combines the polar cap atmos cell | C | with its neighbor to the north or south. | C *==========================================================* IMPLICIT NONE C === Global Atmos/Ocean/Seaice Interface Variables === #include "ATMSIZE.h" #include "AGRID.h" #include "SIZE.h" #include "EEPARAMS.h" #include "PARAMS.h" #include "ATM2D_VARS.h" _RL secDay1000 PARAMETER (secDay1000= 86400000.D0) C !INPUT/OUTPUT PARAMETERS: C === Routine arguments === C inMonth - current month (or forcing period) C myThid - Thread no. that called this routine. INTEGER inMonth INTEGER myThid C LOCAL VARIABLES: _RL a1,a2 INTEGER j_atm C Keep track of (raw) atmos variables for diagnostics DO j_atm=1,jm0 sum_tauu_ta(j_atm,inMonth)= sum_tauu_ta(j_atm,inMonth) + & tauu(j_atm)*dtatmo sum_tauv_ta(j_atm,inMonth)= sum_tauv_ta(j_atm,inMonth) + & tauv(j_atm)*dtatmo sum_wsocean_ta(j_atm,inMonth)= sum_wsocean_ta(j_atm,inMonth) + & wsocean(j_atm)*dtatmo sum_ps4ocean_ta(j_atm,inMonth)= sum_ps4ocean_ta(j_atm,inMonth) + & ps4ocean(j_atm)*dtatmo ENDDO C C put atmospheric data onto local arrays and convert units for ocean model C DO j_atm=1,jm0 atm_tauu(j_atm) = tauu(j_atm) atm_tauv(j_atm) = tauv(j_atm) atm_tair(j_atm) = tempr(j_atm) atm_precip(j_atm) = -precip(j_atm)/secDay1000 atm_runoff(j_atm) = -arunoff(j_atm)/secDay1000 atm_evap_ice(j_atm) = -evai(j_atm)/secDay1000 atm_evap_ocn(j_atm) = -evao(j_atm)/secDay1000 atm_qnet_ice(j_atm) = -hfluxi(j_atm) atm_qnet_ocn(j_atm) = -hfluxo(j_atm) atm_dFdt_ice(j_atm) = -dhfidtg(j_atm) atm_dFdt_ocn(j_atm) = -dhfodtg(j_atm) C Ice feels evap from model, no change with temperature atm_dLdt_ice(j_atm) = 0. _d 0 ! -devidtg(j_atm)/secDay1000 atm_dLdt_ocn(j_atm) = -devodtg(j_atm)/secDay1000 atm_dFdt_iceq(j_atm) = -dhfidtgeq(j_atm) atm_dFdt_ocnq(j_atm) = -dhfodtgeq(j_atm) atm_dLdt_iceq(j_atm) = 0. _d 0 ! -devidtgeq(j_atm)/secDay1000 atm_dLdt_ocnq(j_atm) = -devodtgeq(j_atm)/secDay1000 atm_solarinc(j_atm) = solarinc_ice(j_atm) atm_solar_ocn(j_atm) = solarnet_ocean(j_atm) atm_solar_ice(j_atm) = solarnet_ice(j_atm) atm_windspeed(j_atm) = wsocean(j_atm) atm_slp(j_atm) = ps4ocean(j_atm)*1013.25/984.0 - 1013.25 atm_pco2(j_atm) = co24ocean(j_atm) ENDDO IF (cflan(2).NE.1. _d 0) & CALL COMBINE_ENDS(endwgt1,endwgt2,1,2,rsumwgt) IF (cflan(jm0-1).NE.1. _d 0) & CALL COMBINE_ENDS(endwgt1,endwgt2,jm0,jm0-1,rsumwgt) RETURN END C-------------------------------------------------------------------------- #include "ctrparam.h" #include "ATM2D_OPTIONS.h" SUBROUTINE COMBINE_ENDS(a1,a2,ind1,ind2,rsuma) C *==========================================================* C | Subroutine used to combine the atmos model data points at| C | the poles with their neighboring value, area weighted. | C | The calcuated new value is overwritten into ind2. | C *==========================================================* IMPLICIT NONE C === Global Atmos/Ocean/Seaice Interface Variables === #include "ATMSIZE.h" #include "AGRID.h" #include "SIZE.h" #include "EEPARAMS.h" #include "ATM2D_VARS.h" C !INPUT/OUTPUT PARAMETERS: C === Routine arguments === C a1 - weighting of first index C a2 - weighting of second index C ind1 - first index into atmos data array C ind2 - first index into atmos data array C rsuma - recip of sum of ind1+ind2 _RL a1 _RL a2 INTEGER ind1 INTEGER ind2 _RL rsuma C LOCAL VARIABLES: C atm_tauu(ind2)= (a1*atm_tauu(ind1) + a2*atm_tauu(ind2))*rsuma C atm_tauv(ind2)= (a1*atm_tauv(ind1) + a2*atm_tauv(ind2))*rsuma C Tau variables not combined - zero at atm pole point atm_tair(ind2)= (a1*atm_tair(ind1) + a2*atm_tair(ind2))*rsuma atm_precip(ind2)= (a1*atm_precip(ind1) + & a2*atm_precip(ind2))*rsuma atm_runoff(ind2)= atm_runoff(ind1)+ atm_runoff(ind2) atm_evap_ice(ind2)= (a1*atm_evap_ice(ind1) + & a2*atm_evap_ice(ind2))*rsuma atm_evap_ocn(ind2)= (a1*atm_evap_ocn(ind1) + & a2*atm_evap_ocn(ind2))*rsuma atm_qnet_ice(ind2)= (a1*atm_qnet_ice(ind1)+ & a2*atm_qnet_ice(ind2))*rsuma atm_qnet_ocn(ind2)= (a1*atm_qnet_ocn(ind1) + & a2*atm_qnet_ocn(ind2))*rsuma atm_dFdt_ice(ind2)= (a1*atm_dFdt_ice(ind1)+ & a2*atm_dFdt_ice(ind2))*rsuma atm_dFdt_ocn(ind2)= (a1*atm_dFdt_ocn(ind1)+ & a2*atm_dFdt_ocn(ind2))*rsuma atm_dLdt_ice(ind2)= (a1*atm_dLdt_ice(ind1)+ & a2*atm_dLdt_ice(ind2))*rsuma atm_dLdt_ocn(ind2)= (a1*atm_dLdt_ocn(ind1)+ & a2*atm_dLdt_ocn(ind2))*rsuma atm_dFdt_iceq(ind2)= (a1*atm_dFdt_iceq(ind1)+ & a2*atm_dFdt_iceq(ind2))*rsuma atm_dFdt_ocnq(ind2)= (a1*atm_dFdt_ocnq(ind1)+ & a2*atm_dFdt_ocnq(ind2))*rsuma atm_dLdt_iceq(ind2)= (a1*atm_dLdt_iceq(ind1)+ & a2*atm_dLdt_iceq(ind2))*rsuma atm_dLdt_ocnq(ind2)= (a1*atm_dLdt_ocnq(ind1)+ & a2*atm_dLdt_ocnq(ind2))*rsuma atm_solarinc(ind2)= (a1*atm_solarinc(ind1) + & a2*atm_solarinc(ind2))*rsuma atm_solar_ocn(ind2)= (a1*atm_solar_ocn(ind1)+ & a2*atm_solar_ocn(ind2))*rsuma atm_solar_ice(ind2)= (a1*atm_solar_ice(ind1)+ & a2*atm_solar_ice(ind2))*rsuma atm_windspeed(ind2)= (a1*atm_windspeed(ind1) + & a2*atm_windspeed(ind2))*rsuma atm_slp(ind2)= (a1*atm_slp(ind1) + a2*atm_slp(ind2))*rsuma atm_pco2(ind2)= (a1*atm_pco2(ind1)+a2*atm_pco2(ind2))*rsuma RETURN END