#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) 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 atm_pco2(j_atm) = co24ocean(j_atm)*1. _d -6 ENDDO a1=sin(atm_yG(2)*deg2rad) a2=sin(atm_yG(jm0-2)*deg2rad) - a1 a1=a1 + 1. _d 0 IF (cflan(2) .NE. 1. _d 0) CALL COMBINE_ENDS(a1,a2,1,2) a1=sin(atm_yG(jm0-1)*deg2rad) a2=a1-sin(atm_yG(jm0-2)*deg2rad) a1=1. _d 0 - a1 IF (cflan(jm0-1) .NE. 1. _d 0) CALL COMBINE_ENDS(a1,a2,jm0,jm0-1) C PRINT *,'***read_atmos: tauu',tauu(JBUGJ+1) C PRINT *,'***read_atmos: atm_tauu',atm_tauu(JBUGJ+1) C PRINT *,'***read_atmos: atm_precip',atm_precip(JBUGJ+1) C PRINT *,'***read_atmos: atm_runoff',atm_runoff(JBUGJ+1) C PRINT *,'***read_atmos: atm_evap_ocn',atm_evap_ocn(JBUGJ+1) C PRINT *,'***read_atmos: atm_qnet_ocn',atm_qnet_ocn(JBUGJ+1) C PRINT *,'***read_atmos: atm_dFdt_ocn',atm_dFdt_ocn(JBUGJ+1) C PRINT *,'***read_atmos: atm_slp',atm_slp C PRINT *,'***read_atmos: atm_pco2',atm_pco2 RETURN END C-------------------------------------------------------------------------- #include "ctrparam.h" #include "ATM2D_OPTIONS.h" SUBROUTINE COMBINE_ENDS(a1,a2,ind1,ind2 ) 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 _RL a1 _RL a2 INTEGER ind1 INTEGER ind2 C LOCAL VARIABLES: _RL rsuma rsuma=1. _d 0/(a1+a2) 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