Changeset 2210
- Timestamp:
- 2010-10-12T11:54:28+02:00 (14 years ago)
- Location:
- branches/dev_r2174_DCY/NEMO/OPA_SRC/SBC
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/dev_r2174_DCY/NEMO/OPA_SRC/SBC/sbcblk_core.F90
r2188 r2210 177 177 ENDIF 178 178 179 CALL fld_read( kt, nn_fsbc, sf ) ! input fields provided at the current time-step 180 181 IF( ln_dm2dc ) CALL sbc_dcy ( kt , sf(jp_qsr)%fnow ) ! modify now Qsr to include the diurnal cycle 179 CALL fld_read( kt, nn_fsbc, sf ) ! input fields provided at the current time-step 182 180 183 181 #if defined key_lim3 … … 185 183 #endif 186 184 ! ! surface ocean fluxes computed with CLIO bulk formulea 187 IF( MOD( kt - 1, nn_fsbc ) == 0 ) CALL blk_oce_core( sf, sst_m, ssu_m, ssv_m )185 IF( MOD( kt - 1, nn_fsbc ) == 0 ) CALL blk_oce_core( kt, sf, sst_m, ssu_m, ssv_m ) 188 186 ! 189 187 END SUBROUTINE sbc_blk_core 190 188 191 189 192 SUBROUTINE blk_oce_core( sf, pst, pu, pv )190 SUBROUTINE blk_oce_core( kt, sf, pst, pu, pv ) 193 191 !!--------------------------------------------------------------------- 194 192 !! *** ROUTINE blk_core *** … … 211 209 !! ** Nota : sf has to be a dummy argument for AGRIF on NEC 212 210 !!--------------------------------------------------------------------- 211 INTEGER , INTENT(in) :: kt ! ocean time step 213 212 TYPE(fld), INTENT(in), DIMENSION(:) :: sf ! input data 214 213 REAL(wp), INTENT(in), DIMENSION(jpi,jpj) :: pst ! surface temperature [Celcius] … … 264 263 ! ----------------------------------------------------------------------------- ! 265 264 265 IF( ln_dm2dc ) THEN ; qsr(:,:) = sbc_dcy( kt, sf(jp_qsr)%fnow ) ! modify now Qsr to include the diurnal cycle 266 ELSE ; qsr(:,:) = sf(jp_qsr)%fnow(:,:) 267 ENDIF 266 268 ! ocean albedo assumed to be 0.066 267 !CDIR COLLAPSE 268 qsr (:,:) = ( 1. - 0.066 ) * sf(jp_qsr)%fnow(:,:) * tmask(:,:,1) ! Short Wave 269 qsr (:,:) = ( 1. - 0.066 ) * qsr(:,:) * tmask(:,:,1) ! Short Wave 269 270 !CDIR COLLAPSE 270 271 zqlw(:,:) = ( sf(jp_qlw)%fnow(:,:) - Stef * zst(:,:)*zst(:,:)*zst(:,:)*zst(:,:) ) * tmask(:,:,1) ! Long Wave -
branches/dev_r2174_DCY/NEMO/OPA_SRC/SBC/sbcdcy.F90
r2188 r2210 16 16 USE phycst ! ocean physics 17 17 USE dom_oce ! ocean space and time domain 18 USE sbc_oce ! Surface boundary condition: ocean fields 18 19 USE in_out_manager ! I/O manager 19 20 … … 23 24 REAL(wp), DIMENSION(jpi,jpj) :: raa , rbb , rcc , rab ! parameters used to compute the diurnal cycle 24 25 REAL(wp), DIMENSION(jpi,jpj) :: rtmd, rdawn, rdusk, rscal ! - - - - - 25 REAL(wp), DIMENSION(jpi,jpj) :: qsr_daily ! to hold daily mean QSR26 26 27 27 PUBLIC sbc_dcy ! routine called by sbc … … 34 34 CONTAINS 35 35 36 SUBROUTINE sbc_dcy( kt, pqsr)36 FUNCTION sbc_dcy( kt, pqsrin ) RESULT( zqsrout ) 37 37 !!---------------------------------------------------------------------- 38 38 !! *** ROUTINE sbc_dcy *** … … 48 48 !! Part 1: a diurnally forced OGCM. Climate Dynamics 29:6, 575-590. 49 49 !!---------------------------------------------------------------------- 50 INTEGER, INTENT(in ) :: kt ! ocean time-step index51 REAL(wp), DIMENSION(jpi,jpj), INTENT(in out) :: pqsr ! QSR flux with diurnal cycle52 !! 53 INTEGER :: ji, jj ! dummy loop indices50 INTEGER, INTENT(in ) :: kt ! ocean time-step index 51 REAL(wp), DIMENSION(jpi,jpj), INTENT(in ) :: pqsrin ! input daily QSR flux 52 !! 53 INTEGER :: ji, jj ! dummy loop indices 54 54 REAL(wp) :: ztwopi, zinvtwopi, zconvrad 55 55 REAL(wp) :: zlo, zup, zlousd, zupusd 56 REAL(wp) :: zdsws, zdecrad, ztx 56 REAL(wp) :: zdsws, zdecrad, ztx, zsin, zcos 57 57 REAL(wp) :: ztmp, ztmp1, ztmp2, ztest 58 REAL(wp), DIMENSION(jpi,jpj) :: zqsrout ! output QSR flux with diurnal cycle 58 59 !---------------------------statement functions------------------------ 59 REAL(wp) :: fintegral, pt1, pt2, paaa, pbbb, pccc ! dummy statement function arguments60 REAL(wp) :: fintegral, pt1, pt2, paaa, pbbb, pccc ! dummy statement function arguments 60 61 fintegral( pt1, pt2, paaa, pbbb, pccc ) = & 61 62 & paaa * pt2 + zinvtwopi * pbbb * SIN(pccc + ztwopi * pt2) & … … 70 71 71 72 ! When are we during the day (from 0 to 1) 72 zlo = MOD( rdt / rday * REAL( kt-nit000, wp ), 1.)73 zup = zlo + rdt/ rday73 zlo = ( REAL(nsec_day, wp) - 0.5 * rdttra(1) ) / rday 74 zup = zlo + ( REAL(nn_fsbc, wp) * rdttra(1) ) / rday 74 75 75 76 ! … … 99 100 nday_qsr = nday 100 101 ! number of days since the previous winter solstice (supposed to be always 21 December) 101 zdsws = 11 + nday_year102 zdsws = REAL(11 + nday_year, wp) 102 103 ! declination of the earths orbit 103 104 zdecrad = (-23.5 * zconvrad) * COS( zdsws * ztwopi / REAL(nyear_len(1),wp) ) 104 ! save the daily QSR for nest hours of the day105 qsr_daily(:,:) = pqsr(:,:)106 105 ! Compute A and B needed to compute the time integral of the diurnal cycle 107 106 107 zsin = SIN( zdecrad ) ; zcos = COS( zdecrad ) 108 108 DO jj = 1, jpj 109 109 DO ji = 1, jpi 110 110 ztmp = zconvrad * gphit(ji,jj) 111 raa(ji,jj) = SIN( ztmp ) * SIN( zdecrad )112 rbb(ji,jj) = COS( ztmp ) * COS( zdecrad )111 raa(ji,jj) = SIN( ztmp ) * zsin 112 rbb(ji,jj) = COS( ztmp ) * zcos 113 113 END DO 114 114 END DO … … 166 166 END DO 167 167 ! 168 ztmp = rday / rdt168 ztmp = rday / ( rdttra(1) * REAL(nn_fsbc, wp) ) 169 169 rscal(:,:) = rscal(:,:) * ztmp 170 170 … … 184 184 zupusd = MAX(zupusd, zlo) 185 185 ztmp = fintegral(zlousd, zupusd, raa(ji,jj), rbb(ji,jj), rcc(ji,jj)) 186 pqsr(ji,jj) = qsr_daily(ji,jj) * ztmp * rscal(ji,jj)186 zqsrout(ji,jj) = pqsrin(ji,jj) * ztmp * rscal(ji,jj) 187 187 ! 188 188 ELSE ! day time in two parts … … 194 194 ztmp2 = fintegral(zlousd, zupusd, raa(ji,jj), rbb(ji,jj), rcc(ji,jj)) 195 195 ztmp = ztmp1 + ztmp2 196 pqsr(ji,jj) = qsr_daily(ji,jj) * ztmp * rscal(ji,jj)196 zqsrout(ji,jj) = pqsrin(ji,jj) * ztmp * rscal(ji,jj) 197 197 ENDIF 198 198 ELSE ! 24h light or 24h night 199 199 ! 200 IF( raa(ji,jj) > rbb(ji,jj) ) THEN ! 24h day200 IF( raa(ji,jj) > rbb(ji,jj) ) THEN ! 24h day 201 201 ztmp = fintegral(zlo, zup, raa(ji,jj), rbb(ji,jj), rcc(ji,jj)) 202 pqsr(ji,jj) = qsr_daily(ji,jj) * ztmp * rscal(ji,jj)202 zqsrout(ji,jj) = pqsrin(ji,jj) * ztmp * rscal(ji,jj) 203 203 ! 204 204 ELSE ! No day 205 pqsr(ji,jj) = 0.e0205 zqsrout(ji,jj) = 0.e0 206 206 ENDIF 207 207 ENDIF … … 209 209 END DO 210 210 ! 211 END SUBROUTINEsbc_dcy211 END FUNCTION sbc_dcy 212 212 213 213 !!====================================================================== -
branches/dev_r2174_DCY/NEMO/OPA_SRC/SBC/sbcflx.F90
r2188 r2210 123 123 ENDIF 124 124 125 CALL fld_read( kt, nn_fsbc, sf ) ! input fields provided at the current time-step 126 127 IF( ln_dm2dc ) CALL sbc_dcy( kt , sf(jp_qsr)%fnow ) ! modify now Qsr to include the diurnal cycle 128 129 IF( MOD( kt-1, nn_fsbc ) == 0 ) THEN ! update ocean fluxes at each SBC frequency 125 CALL fld_read( kt, nn_fsbc, sf ) ! input fields provided at the current time-step 126 127 IF( MOD( kt-1, nn_fsbc ) == 0 ) THEN ! update ocean fluxes at each SBC frequency 128 IF( ln_dm2dc ) THEN ; qsr(:,:) = sbc_dcy( kt, sf(jp_qsr)%fnow ) ! modify now Qsr to include the diurnal cycle 129 ELSE ; qsr(:,:) = sf(jp_qsr)%fnow(:,:) 130 ENDIF 130 131 !CDIR COLLAPSE 131 132 DO jj = 1, jpj ! set the ocean fluxes from read fields … … 133 134 utau(ji,jj) = sf(jp_utau)%fnow(ji,jj) 134 135 vtau(ji,jj) = sf(jp_vtau)%fnow(ji,jj) 135 qns (ji,jj) = sf(jp_qtot)%fnow(ji,jj) - sf(jp_qsr)%fnow(ji,jj) 136 qsr (ji,jj) = sf(jp_qsr )%fnow(ji,jj) 136 qns (ji,jj) = sf(jp_qtot)%fnow(ji,jj) - qsr(ji,jj) 137 137 emp (ji,jj) = sf(jp_emp )%fnow(ji,jj) 138 138 END DO
Note: See TracChangeset
for help on using the changeset viewer.