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