Ignore:
Timestamp:
Dec 6, 2022, 12:01:16 AM (22 months ago)
Author:
lguez
Message:

Sync latest trunk changes to Ocean_skin

Location:
LMDZ6/branches/Ocean_skin
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/branches/Ocean_skin

  • LMDZ6/branches/Ocean_skin/libf/phylmd/radlwsw_m.F90

    r4013 r4368  
    4040   toplwad_aero, sollwad_aero,&
    4141   toplwai_aero, sollwai_aero, &
    42    toplwad0_aero, sollwad0_aero,&
     42   toplwad0_aero, sollwad0_aero, &
    4343!-end
    4444   ZLWFT0_i, ZFLDN0, ZFLUP0,&
     
    4848  USE DIMPHY
    4949  USE assert_m, ONLY : assert
    50   USE infotrac_phy, ONLY : type_trac
     50  USE infotrac_phy, ONLY : types_trac
    5151  USE write_field_phy
    5252
     
    224224  REAL,    INTENT(in)  :: piz_aero_sw_rrtm(KLON,KLEV,2,NSW)                 ! aerosol optical properties RRTM
    225225  REAL,    INTENT(in)  :: cg_aero_sw_rrtm(KLON,KLEV,2,NSW)                  ! aerosol optical properties RRTM
     226! AI
    226227!--OB fin
    227228
     
    309310  REAL(KIND=8) ZGELAM(klon), &              ! longitudes en rad
    310311               ZGEMU(klon)                  ! sin(latitude)
    311   REAL(KIND=8) ZCO2(klon,klev), &           ! CO2 mass mixing ratios on full levels
    312                ZCH4(klon,klev), &           ! CH4 mass mixing ratios on full levels
    313                ZN2O(klon,klev), &           ! N2O mass mixing ratios on full levels
    314                ZNO2(klon,klev), &           ! NO2 mass mixing ratios on full levels
    315                ZCFC11(klon,klev), &         ! CFC11
    316                ZCFC12(klon,klev), &         ! CFC12
    317                ZHCFC22(klon,klev), &        ! HCFC22
    318                ZCCL4(klon,klev)           ! CCL4
    319 !               ZO3_DP(klon,klev), ZO3_DP_i(klon,klev)            ! Ozone
     312  REAL(KIND=8) ZCO2, &           ! CO2 mass mixing ratios on full levels
     313               ZCH4, &           ! CH4 mass mixing ratios on full levels
     314               ZN2O, &           ! N2O mass mixing ratios on full levels
     315               ZNO2, &           ! NO2 mass mixing ratios on full levels
     316               ZCFC11, &         ! CFC11
     317               ZCFC12, &         ! CFC12
     318               ZHCFC22, &        ! HCFC22
     319               ZCCL4, &          ! CCL4
     320               ZO2               ! O2
     321
    320322  REAL(KIND=8) ZQ_RAIN(klon,klev), &        ! Rain cloud mass mixing ratio (kg/kg) ?
    321323               ZQ_SNOW(klon,klev)           ! Snow cloud mass mixing ratio (kg/kg) ?
     
    334336  REAL(KIND=8) ZSWDIFFUSEBAND(klon,NSW), &  ! SW DN flux in diffuse albedo band
    335337               ZSWDIRECTBAND(klon,NSW)      ! SW DN flux in direct albedo band
     338  REAL(KIND=8) SOLARIRAD
     339  REAL(KIND=8) seuilmach
     340! AI 10 mars 22 : Pour les tests Offline
     341  logical   :: lldebug_for_offline = .false.
     342  REAL(KIND=8) solaire_off(klon), &
     343               ZCO2_off(klon,klev), &
     344               ZCH4_off(klon,klev), &           ! CH4 mass mixing ratios on full levels
     345               ZN2O_off(klon,klev), &           ! N2O mass mixing ratios on full levels
     346               ZNO2_off(klon,klev), &           ! NO2 mass mixing ratios on full levels
     347               ZCFC11_off(klon,klev), &         ! CFC11
     348               ZCFC12_off(klon,klev), &         ! CFC12
     349               ZHCFC22_off(klon,klev), &        ! HCFC22
     350               ZCCL4_off(klon,klev), &          ! CCL4
     351               ZO2_off(klon,klev)               ! O2#endif
    336352#endif
    337353!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     
    486502
    487503  !
     504! AI 02.2021
     505#ifdef CPP_ECRAD
     506  ZEMIS = 1.0
     507  ZEMISW = 1.0
     508  ZGELAM = longitude
     509  ZGEMU = sin(latitude)
     510  ZCO2 = RCO2
     511  ZCH4 = RCH4
     512  ZN2O = RN2O
     513  ZNO2 = 0.0
     514  ZCFC11 = RCFC11
     515  ZCFC12 = RCFC12
     516  ZHCFC22 = 0.0
     517  ZO2 = 0.0
     518  ZCCL4 = 0.0
     519  ZQ_RAIN = 0.0
     520  ZQ_SNOW = 0.0
     521  ZAEROSOL_OLD = 0.0
     522  ZAEROSOL = 0.0
     523  seuilmach=tiny(seuilmach)
     524#endif
     525
    488526  !-------------------------------------------
    489527  nb_gr = KLON / kdlon
     
    512550  PSCT = solaire/zdist/zdist
    513551
    514   IF (type_trac == 'repr') THEN
     552  IF (ANY(types_trac == 'repr')) THEN
    515553#ifdef REPROBUS
    516554    IF (iflag_rrtm==0) THEN
     
    596634    ENDDO
    597635
    598     IF (type_trac == 'repr') THEN
     636    IF (ANY(types_trac == 'repr')) THEN
    599637#ifdef REPROBUS
    600638       ndimozon = size(wo, 3)
     
    627665      ENDDO
    628666    ENDDO
    629 !
    630 ! AI 02.2021
    631 #ifdef CPP_ECRAD
    632   ZEMIS = 1.0
    633   ZEMISW = 1.0
    634   ZGELAM = longitude
    635   ZGEMU = sin(latitude)
    636   ZCO2 = RCO2
    637   ZCH4 = RCH4
    638   ZN2O = RN2O
    639   ZNO2 = 0.0
    640   ZCFC11 = RCFC11
    641   ZCFC12 = RCFC12
    642   ZHCFC22 = 0.0
    643   ZCCL4 = 0.0
    644   ZQ_RAIN = 0.0
    645   ZQ_SNOW = 0.0
    646   ZAEROSOL_OLD = 0.0
    647   ZAEROSOL = 0.0
    648 #endif
    649667!
    650668!===== iflag_rrtm ================================================
     
    11651183!      DO i = 1, kdlon
    11661184!      DO k = 1, kflev
     1185!      DO kk= 1, naero_tot
    11671186!      DO kk=1, NSW
    11681187!
     
    11741193!      PPIZA_NAT(i,kflev+1-k,kk)=piz_aero_sw_rrtm(i,k,1,kk)
    11751194!      PCGA_NAT(i,kflev+1-k,kk)=cg_aero_sw_rrtm(i,k,1,kk)
     1195!       ZAEROSOL(i,kflev+1-k,kk)=m_allaer(i,k,kk)
    11761196!
    11771197!      ENDDO
     
    12241244            flwc_i(1:klon,k)    =flwc(1:klon,klev+1-k)
    12251245            fiwc_i(1:klon,k)    =fiwc(1:klon,klev+1-k)
    1226             ref_liq_i(1:klon,k) =ref_liq(1:klon,klev+1-k)
    1227             ref_ice_i(1:klon,k) =ref_ice(1:klon,klev+1-k)
     1246            ref_liq_i(1:klon,k) =ref_liq(1:klon,klev+1-k)*1.0e-6
     1247            ref_ice_i(1:klon,k) =ref_ice(1:klon,klev+1-k)*1.0e-6
    12281248!-OB
    12291249            ref_liq_pi_i(1:klon,k) =ref_liq_pi(1:klon,klev+1-k)
     
    12371257!            ENDDO
    12381258         ENDDO
    1239 ! AI 02.2021
     1259
     1260! AI 11.2021
    12401261! Calcul de ZTH_i (temp aux interfaces 1:klev+1)
     1262! IFS currently sets the half-level temperature at the surface to be
     1263! equal to the skin temperature. The radiation scheme takes as input
     1264! only the half-level temperatures and assumes the Planck function to
     1265! vary linearly in optical depth between half levels. In the lowest
     1266! atmospheric layer, where the atmospheric temperature can be much
     1267! cooler than the skin temperature, this can lead to significant
     1268! differences between the effective temperature of this lowest layer
     1269! and the true value in the model.
     1270! We may approximate the temperature profile in the lowest model level
     1271! as piecewise linear between the top of the layer T[k-1/2], the
     1272! centre of the layer T[k] and the base of the layer Tskin.  The mean
     1273! temperature of the layer is then 0.25*T[k-1/2] + 0.5*T[k] +
     1274! 0.25*Tskin, which can be achieved by setting the atmospheric
     1275! temperature at the half-level corresponding to the surface as
     1276! follows:
     1277! AI ATTENTION fais dans interface radlw
     1278!thermodynamics%temperature_hl(KIDIA:KFDIA,KLEV+1) &
     1279!     &  = PTEMPERATURE(KIDIA:KFDIA,KLEV) &
     1280!     &  + 0.5_JPRB * (PTEMPERATURE_H(KIDIA:KFDIA,KLEV+1) &
     1281!     &               -PTEMPERATURE_H(KIDIA:KFDIA,KLEV))
     1282
    12411283         DO K=2,KLEV
    1242             ZTH_i(:,K)=&
    1243               & (t_i(:,K-1)*pplay_i(:,K-1)*(pplay_i(:,K)-paprs_i(:,K))&
    1244               & +t_i(:,K)*pplay_i(:,K)*(paprs_i(:,K)-pplay_i(:,K-1)))&
    1245               & *(1.0/(paprs_i(:,K)*(pplay_i(:,K)-pplay_i(:,K-1))))
     1284          DO i = 1, kdlon
     1285            ZTH_i(i,K)=&
     1286              & (t_i(i,K-1)*pplay_i(i,K-1)*(pplay_i(i,K)-paprs_i(i,K))&
     1287              & +t_i(i,K)*pplay_i(i,K)*(paprs_i(i,K)-pplay_i(i,K-1)))&
     1288              & *(1.0/(paprs_i(i,K)*(pplay_i(i,K)-pplay_i(i,K-1))))
     1289           ENDDO
    12461290         ENDDO
    1247             ZTH_i(:,KLEV+1)=tsol(:)
    1248             ZTH_i(:,1)=t_i(:,1)-pplay_i(:,1)*(t_i(:,1)-ZTH_i(:,2))&
    1249                       & /(pplay_i(:,1)-paprs_i(:,2))
     1291         DO i = 1, kdlon
     1292! Sommet
     1293            ZTH_i(i,1)=t_i(i,1)-pplay_i(i,1)*(t_i(i,1)-ZTH_i(i,2))&
     1294                      & /(pplay_i(i,1)-paprs_i(i,2))
     1295! Vers le sol
     1296            ZTH_i(i,KLEV+1)=t_i(i,KLEV) + 0.5 * &
     1297                            (tsol(i) - ZTH_i(i,KLEV))
     1298         ENDDO
     1299
    12501300
    12511301      print *,'RADLWSW: avant RADIATION_SCHEME '
    1252       IF (lldebug) THEN
     1302   
     1303! AI mars 2022
     1304    SOLARIRAD = solaire/zdist/zdist
     1305!! diagnos pour la comparaison a la version offline
     1306!!! - Gas en VMR pour offline et MMR pour online
     1307!!! - on utilise pour solarirrad une valeur constante
     1308    if (lldebug_for_offline) then
     1309       SOLARIRAD = 1366.0896
     1310       ZCH4_off = CH4_ppb*1e-9
     1311       ZN2O_off = N2O_ppb*1e-9
     1312       ZNO2_off = 0.0
     1313       ZCFC11_off = CFC11_ppt*1e-12
     1314       ZCFC12_off = CFC12_ppt*1e-12
     1315       ZHCFC22_off = 0.0
     1316       ZCCL4_off = 0.0
     1317       ZO2_off = 0.0
     1318       ZCO2_off = co2_ppm*1e-6
     1319
    12531320        CALL writefield_phy('rmu0',rmu0,1)
    12541321        CALL writefield_phy('tsol',tsol,1)
    12551322        CALL writefield_phy('emissiv_out',ZEMIS,1)
    1256         CALL writefield_phy('emissiv_in',ZEMISW,1)
    1257         CALL writefield_phy('pctsrf_ter',pctsrf(:,is_ter),1)
    1258         CALL writefield_phy('pctsrf_oce',pctsrf(:,is_oce),1)
    1259         CALL writefield_phy('ZGELAM',ZGELAM,1)
    1260         CALL writefield_phy('ZGEMU',ZGEMU,1)
    1261         CALL writefield_phy('zmasq',zmasq,1)
    12621323        CALL writefield_phy('paprs_i',paprs_i,klev+1)
    1263         CALL writefield_phy('pplay_i',pplay_i,klev)
    1264         CALL writefield_phy('t_i',t_i,klev)
    12651324        CALL writefield_phy('ZTH_i',ZTH_i,klev+1)
    12661325        CALL writefield_phy('cldfra_i',cldfra_i,klev)
    1267         CALL writefield_phy('paer_i',PAER_i,klev)
    12681326        CALL writefield_phy('q_i',q_i,klev)
    12691327        CALL writefield_phy('fiwc_i',fiwc_i,klev)
     
    12711329        CALL writefield_phy('palbd_new',PALBD_NEW,NSW)
    12721330        CALL writefield_phy('palbp_new',PALBP_NEW,NSW)
    1273 !        CALL writefield_phy('ZO3_DP',ZO3_DP,klev)
    1274       ENDIF
     1331        CALL writefield_phy('POZON',POZON_i(:,:,1),klev)
     1332        CALL writefield_phy('ZCO2',ZCO2_off,klev)
     1333        CALL writefield_phy('ZCH4',ZCH4_off,klev)
     1334        CALL writefield_phy('ZN2O',ZN2O_off,klev)
     1335        CALL writefield_phy('ZO2',ZO2_off,klev)
     1336        CALL writefield_phy('ZNO2',ZNO2_off,klev)
     1337        CALL writefield_phy('ZCFC11',ZCFC11_off,klev)
     1338        CALL writefield_phy('ZCFC12',ZCFC12_off,klev)
     1339        CALL writefield_phy('ZHCFC22',ZHCFC22_off,klev)
     1340        CALL writefield_phy('ZCCL4',ZCCL4_off,klev)
     1341        CALL writefield_phy('ref_liq_i',ref_liq_i,klev)
     1342        CALL writefield_phy('ref_ice_i',ref_ice_i,klev)
     1343      endif
     1344! lldebug_for_offline
    12751345 
    12761346      CALL RADIATION_SCHEME &
     
    12781348! ??? naero_tot
    12791349      & day_cur, current_time, &
    1280 !      & solaire, &
    1281       & PSCT, &
    1282       & rmu0, tsol, PALBD_NEW,PALBP_NEW, &   
    1283 !       PEMIS_WINDOW (???), &
     1350      & SOLARIRAD, &
     1351      & rmu0, tsol, &
     1352!       Albedo diffuse et directe
     1353      & PALBD_NEW,PALBP_NEW, &   
     1354!       Emessivite : PEMIS_WINDOW (???), &
    12841355      & ZEMIS, ZEMISW, &
    12851356!       PCCN_LAND, PCCN_SEA, & ???
     
    12921363      & paprs_i, ZTH_i, q_i, qsat_i, &
    12931364!       Gas
    1294        & ZCO2, ZCH4, ZN2O, ZNO2, ZCFC11, ZCFC12, ZHCFC22, ZCCL4, POZON_i(:,:,1), &
     1365       & ZCO2, ZCH4, ZN2O, ZNO2, ZCFC11, ZCFC12, ZHCFC22, &
     1366       & ZCCL4, POZON_i(:,:,1), ZO2, &
    12951367!       nuages :
    12961368      & cldfra_i, flwc_i, fiwc_i, ZQ_RAIN, ZQ_SNOW, & 
     
    13151387      print *,'========= RADLWSW: apres RADIATION_SCHEME ==================== '
    13161388
    1317       IF (lldebug) THEN
    1318         CALL writefield_phy('zlwft_i',ZLWFT_i,klev+1)
    1319         CALL writefield_phy('zlwft0_ii',ZLWFT0_ii,klev+1)
    1320         CALL writefield_phy('zswft_i',ZSWFT_i,klev+1)
    1321         CALL writefield_phy('zswft0_i',ZSWFT0_ii,klev+1)
    1322         CALL writefield_phy('zfsdwn_i',ZFSDWN_i,klev+1)
    1323         CALL writefield_phy('zflux2_i',ZFLUX_i(:,2,:),klev+1)
    1324         CALL writefield_phy('zfcdwn_i',ZFCDWN_i,klev+1)
    1325         CALL writefield_phy('zfluc2_i',ZFLUC_i(:,2,:),klev+1)
    1326         CALL writefield_phy('psfswdir',PSFSWDIR,6)
    1327         CALL writefield_phy('psfswdif',PSFSWDIF,6)
    1328         CALL writefield_phy('zflux1_i',ZFLUX_i(:,1,:),klev+1)
    1329         CALL writefield_phy('zfluc1_i',ZFLUC_i(:,1,:),klev+1)
    1330         CALL writefield_phy('zfsup_i',ZFSUP_i,klev+1)
    1331         CALL writefield_phy('zfcup_i',ZFCUP_i,klev+1)
    1332       ENDIF
     1389     if (lldebug_for_offline) then
     1390        CALL writefield_phy('FLUX_LW',ZLWFT_i,klev+1)
     1391        CALL writefield_phy('FLUX_LW_CLEAR',ZLWFT0_ii,klev+1)
     1392        CALL writefield_phy('FLUX_SW',ZSWFT_i,klev+1)
     1393        CALL writefield_phy('FLUX_SW_CLEAR',ZSWFT0_ii,klev+1)
     1394        CALL writefield_phy('FLUX_DN_SW',ZFSDWN_i,klev+1)
     1395        CALL writefield_phy('FLUX_DN_LW',ZFLUX_i(:,2,:),klev+1)
     1396        CALL writefield_phy('FLUX_DN_SW_CLEAR',ZFCDWN_i,klev+1)
     1397        CALL writefield_phy('FLUX_DN_LW_CLEAR',ZFLUC_i(:,2,:),klev+1)
     1398        CALL writefield_phy('PSFSWDIR',PSFSWDIR,6)
     1399        CALL writefield_phy('PSFSWDIF',PSFSWDIF,6)
     1400        CALL writefield_phy('FLUX_UP_LW',ZFLUX_i(:,1,:),klev+1)
     1401        CALL writefield_phy('FLUX_UP_LW_CLEAR',ZFLUC_i(:,1,:),klev+1)
     1402        CALL writefield_phy('FLUX_UP_SW',ZFSUP_i,klev+1)
     1403        CALL writefield_phy('FLUX_UP_SW_CLEAR',ZFCUP_i,klev+1)
     1404      endif
     1405
    13331406! ---------
    13341407! On retablit l'ordre des niveaux lmd pour les tableaux de sortie
     
    13961469      !--fraction of diffuse radiation in surface SW downward radiation
    13971470      DO i = 1, kdlon
    1398        IF (fract(i).GT.0.0) THEN
    13991471         zdir=SUM(PSFSWDIR(i,:))
    14001472         zdif=SUM(PSFSWDIF(i,:))
     1473       IF (fract(i).GT.0.0.and.(zdir+zdif).gt.seuilmach) THEN
    14011474         zsolswfdiff(i) = zdif/(zdir+zdif)
    14021475       ELSE  !--night
Note: See TracChangeset for help on using the changeset viewer.