Changeset 3989 for LMDZ6/trunk/libf


Ignore:
Timestamp:
Oct 10, 2021, 9:18:17 AM (3 years ago)
Author:
oboucher
Message:

addition of flag_volc_surfstrat required for VOLMIP
This flag can select either surface or the atmospheric effects of volcanic aerosols to separate the effects.

Location:
LMDZ6/trunk/libf
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/trunk/libf/dynphy_lonlat/phylmd/etat0phys_netcdf.F90

    r3868 r3989  
    119119  INTEGER :: flag_aerosol
    120120  INTEGER :: flag_aerosol_strat
     121  INTEGER :: flag_volc_surfstrat
    121122  LOGICAL :: flag_aer_feedback
    122123  LOGICAL :: flag_bc_internal_mixture
     
    138139                   iflag_cldcon,                                        &
    139140                   iflag_ratqs,ratqsbas,ratqshaut,tau_ratqs,            &
    140                    ok_ade, ok_aie, ok_alw, ok_cdnc, ok_volcan,          &
    141                    aerosol_couple,                                      &
    142                    chemistry_couple, flag_aerosol, flag_aerosol_strat,  &
    143                    flag_aer_feedback,                                   &
    144                    flag_bc_internal_mixture, bl95_b0, bl95_b1, &
     141                   ok_ade, ok_aie, ok_alw, ok_cdnc, ok_volcan, flag_volc_surfstrat,     &
     142                   aerosol_couple, chemistry_couple, flag_aerosol, flag_aerosol_strat,  &
     143                   flag_aer_feedback, flag_bc_internal_mixture, bl95_b0, bl95_b1,       &
    145144                   read_climoz, alp_offset)
    146145  CALL phys_state_var_init(read_climoz)
  • LMDZ6/trunk/libf/phylmd/conf_phys_m.F90

    r3974 r3989  
    1717       iflag_cld_th, &
    1818       iflag_ratqs,ratqsbas,ratqshaut,tau_ratqs, &
    19        ok_ade, ok_aie, ok_alw, ok_cdnc, ok_volcan, aerosol_couple, chemistry_couple, &
    20        flag_aerosol, flag_aerosol_strat, flag_aer_feedback, &
     19       ok_ade, ok_aie, ok_alw, ok_cdnc, ok_volcan, flag_volc_surfstrat, aerosol_couple, &
     20       chemistry_couple, flag_aerosol, flag_aerosol_strat, flag_aer_feedback, &
    2121       flag_bc_internal_mixture, bl95_b0, bl95_b1,&
    2222       read_climoz, &
     
    6767    ! bl95_b*: parameters in the formula to link CDNC to aerosol mass conc
    6868    ! ok_volcan: activate volcanic diags (SW heat & LW cool rate, SW & LW flux)
     69    ! flag_volc_surfstrat: VolMIP flag, activate forcing surface cooling rate (=1), strato heating rate (=2) or nothing (=0, default)
    6970    !
    7071
     
    7980    INTEGER              :: flag_aerosol
    8081    INTEGER              :: flag_aerosol_strat
     82    INTEGER              :: flag_volc_surfstrat
    8183    LOGICAL              :: flag_aer_feedback
    8284    LOGICAL              :: flag_bc_internal_mixture
     
    107109    INTEGER, SAVE       :: flag_aerosol_omp
    108110    INTEGER, SAVE       :: flag_aerosol_strat_omp
     111    INTEGER, SAVE       :: flag_volc_surfstrat_omp
    109112    LOGICAL, SAVE       :: flag_aer_feedback_omp
    110113    LOGICAL, SAVE       :: flag_bc_internal_mixture_omp
     
    553556
    554557    !
     558    !Config Key  = flag_volc_surfstrat
     559    !Config Desc = impose cooling rate at the surface (=1),
     560    !              heating rate in the strato (=2), or nothing (=0)
     561    !Config Def  = 0
     562    !Config Help = Used in radlwsw_m.F
     563    !
     564    flag_volc_surfstrat_omp = 0 ! NL: SURFSTRAT
     565    CALL getin('flag_volc_surfstrat', flag_volc_surfstrat_omp)
     566
     567    !
    555568    !Config Key  = aerosol_couple
    556569    !Config Desc = read aerosol in file or calcul by inca
     
    24942507    ok_cdnc = ok_cdnc_omp
    24952508    ok_volcan = ok_volcan_omp
     2509    flag_volc_surfstrat = flag_volc_surfstrat_omp
    24962510    aerosol_couple = aerosol_couple_omp
    24972511    chemistry_couple = chemistry_couple_omp
    2498     flag_aerosol=flag_aerosol_omp
    2499     flag_aerosol_strat=flag_aerosol_strat_omp
    2500     flag_aer_feedback=flag_aer_feedback_omp
     2512    flag_aerosol = flag_aerosol_omp
     2513    flag_aerosol_strat = flag_aerosol_strat_omp
     2514    flag_aer_feedback = flag_aer_feedback_omp
    25012515    flag_bc_internal_mixture=flag_bc_internal_mixture_omp
    25022516    aer_type = aer_type_omp
     
    27232737       CALL abort_physic('conf_phys', 'flag_bc_internal_mixture can only be activated with flag_aerosol=6',1)
    27242738    ENDIF
     2739
     2740    ! test sur flag_volc_surfstrat
     2741    IF (flag_volc_surfstrat.LT.0.OR.flag_volc_surfstrat.GT.2) THEN
     2742       CALL abort_physic('conf_phys', 'flag_volc_surfstrat can only be 0 1 or 2',1)
     2743    ENDIF
     2744    IF ((.NOT.ok_volcan.OR..NOT.ok_ade.OR..NOT.ok_aie).AND.flag_volc_surfstrat.GT.0) THEN
     2745       CALL abort_physic('conf_phys', 'ok_ade, ok_aie, ok_volcan need to be activated if flag_volc_surfstrat is 1 or 2',1)
     2746    ENDIF
    27252747
    27262748    ! Test on carbon cycle
     
    28452867    WRITE(lunout,*) ' ok_ade = ',ok_ade
    28462868    WRITE(lunout,*) ' ok_volcan = ',ok_volcan
     2869    WRITE(lunout,*) ' flag_volc_surfstrat = ',flag_volc_surfstrat
    28472870    WRITE(lunout,*) ' ok_aie = ',ok_aie
    28482871    WRITE(lunout,*) ' ok_alw = ',ok_alw
  • LMDZ6/trunk/libf/phylmd/physiq_mod.F90

    r3988 r3989  
    355355    LOGICAL, SAVE :: ok_volcan ! pour activer les diagnostics volcaniques
    356356    !$OMP THREADPRIVATE(ok_volcan)
     357    INTEGER, SAVE :: flag_volc_surfstrat ! pour imposer le cool/heat rate à la surf ou dans la strato
     358    !$OMP THREADPRIVATE(flag_volc_surfstrat)
    357359    LOGICAL ok_cvl  ! pour activer le nouveau driver pour convection KE
    358360    PARAMETER (ok_cvl=.TRUE.)
     
    12591261            fact_cldcon, facttemps,ok_newmicro,iflag_radia, &
    12601262            iflag_cld_th,iflag_ratqs,ratqsbas,ratqshaut,tau_ratqs, &
    1261             ok_ade, ok_aie, ok_alw, ok_cdnc, ok_volcan, aerosol_couple, &
    1262             chemistry_couple, &
    1263             flag_aerosol, flag_aerosol_strat, flag_aer_feedback, &
     1263            ok_ade, ok_aie, ok_alw, ok_cdnc, ok_volcan, flag_volc_surfstrat, aerosol_couple, &
     1264            chemistry_couple, flag_aerosol, flag_aerosol_strat, flag_aer_feedback, &
    12641265            flag_bc_internal_mixture, bl95_b0, bl95_b1, &
    12651266                                ! nv flags pour la convection et les
     
    17941795
    17951796       WRITE(lunout,*)"Clef pour la convection, iflag_con=", iflag_con
    1796        WRITE(lunout,*)"Clef pour le driver de la convection, ok_cvl=", &
    1797             ok_cvl
     1797       WRITE(lunout,*)"Clef pour le driver de la convection, ok_cvl=", ok_cvl
    17981798       !
    17991799       !KE43
     
    19631963       CALL bcast(dryaod_diag)
    19641964       CALL bcast(ok_4xCO2atm)
    1965        WRITE (lunout,*)'ok_4xCO2atm= ',swaero_diag, swaerofree_diag, dryaod_diag, ok_4xCO2atm
    19661965#endif
    19671966       !
     
    41914190               t_seri,q_seri,wo, &
    41924191               cldfrarad, cldemirad, cldtaurad, &
    4193                ok_ade.OR.flag_aerosol_strat.GT.0, ok_aie,  ok_volcan, &
    4194                flag_aerosol, &
    4195                flag_aerosol_strat, flag_aer_feedback, &
     4192               ok_ade.OR.flag_aerosol_strat.GT.0, ok_aie,  ok_volcan, flag_volc_surfstrat, &
     4193               flag_aerosol, flag_aerosol_strat, flag_aer_feedback, &
    41964194               tau_aero, piz_aero, cg_aero, &
    41974195               tau_aero_sw_rrtm, piz_aero_sw_rrtm, cg_aero_sw_rrtm, &
     
    42664264                     t_seri,q_seri,wo, &
    42674265                     cldfrarad, cldemirad, cldtaurad, &
    4268                      ok_ade.OR.flag_aerosol_strat.GT.0, ok_aie,  ok_volcan, &
    4269                      flag_aerosol, &
    4270                      flag_aerosol_strat, flag_aer_feedback, &
     4266                     ok_ade.OR.flag_aerosol_strat.GT.0, ok_aie,  ok_volcan, flag_volc_surfstrat, &
     4267                     flag_aerosol, flag_aerosol_strat, flag_aer_feedback, &
    42714268                     tau_aero, piz_aero, cg_aero, &
    42724269                     tau_aero_sw_rrtm, piz_aero_sw_rrtm, cg_aero_sw_rrtm, &
  • LMDZ6/trunk/libf/phylmd/radlwsw_m.F90

    r3954 r3989  
    1616   t,q,wo,&
    1717   cldfra, cldemi, cldtaupd,&
    18    ok_ade, ok_aie, ok_volcan, flag_aerosol,&
     18   ok_ade, ok_aie, ok_volcan, flag_volc_surfstrat, flag_aerosol,&
    1919   flag_aerosol_strat, flag_aer_feedback, &
    2020   tau_aero, piz_aero, cg_aero,&
     
    107107  ! ok_aie--- input-L- apply the Aerosol Indirect Effect or not?
    108108  ! ok_volcan input-L- activate volcanic diags (SW heat & LW cool rate, SW & LW flux)
     109  ! flag_volc_surfstrat input-I- activate volcanic surf cooling or strato heating (or nothing)
    109110  ! flag_aerosol input-I- aerosol flag from 0 to 6
    110111  ! flag_aerosol_strat input-I- use stratospheric aerosols flag (0, 1, 2)
     
    210211  LOGICAL, INTENT(in)  :: ok_ade, ok_aie                                 ! switches whether to use aerosol direct (indirect) effects or not
    211212  LOGICAL, INTENT(in)  :: ok_volcan                                      ! produce volcanic diags (SW/LW heat flux and rate)
     213  INTEGER, INTENT(in)  :: flag_volc_surfstrat                            ! allow to impose volcanic cooling rate at surf or heating in strato
    212214  LOGICAL              :: lldebug=.false.
    213215  INTEGER, INTENT(in)  :: flag_aerosol                                   ! takes value 0 (no aerosol) or 1 to 6 (aerosols)
     
    365367  REAL(KIND=8) ztopswaiaero(kdlon), zsolswaiaero(kdlon)     ! dito, indirect
    366368!--NL
    367   REAL(KIND=8) zswadaero(kdlon,kflev+1)                       ! SW Aerosol direct forcing
    368   REAL(KIND=8) zlwadaero(kdlon,kflev+1)                       ! LW Aerosol direct forcing
     369  REAL(KIND=8) zswadaero(kdlon,kflev+1)                     ! SW Aerosol direct forcing
     370  REAL(KIND=8) zlwadaero(kdlon,kflev+1)                     ! LW Aerosol direct forcing
     371  REAL(KIND=8) volmip_solsw(kdlon)                          ! SW clear sky in the case of VOLMIP
    369372!-LW by CK
    370373  REAL(KIND=8) ztoplwadaero(kdlon), zsollwadaero(kdlon)     ! LW Aerosol direct forcing at TOAand surface
     
    948951         ZTOPLWAIAERO,ZSOLLWAIAERO, &
    949952         ZLWADAERO, & !--NL
     953         volmip_solsw, flag_volc_surfstrat, & !--VOLMIP
    950954         ok_ade, ok_aie, ok_volcan, flag_aerosol,flag_aerosol_strat, flag_aer_feedback) ! flags aerosols
    951955
     
    10941098      ENDDO
    10951099!     print*,'OK2'
     1100
     1101!--add VOLMIP (surf cool or strat heat activate)
     1102      IF (flag_volc_surfstrat > 0) THEN
     1103         DO i = 1, kdlon
     1104            zsolsw(i)    = volmip_solsw(i)*fract(i)
     1105         ENDDO
     1106      ENDIF
    10961107
    10971108! extrait de SW_AR4
  • LMDZ6/trunk/libf/phylmd/rrtm/recmwf_aero.F90

    r3479 r3989  
    3636 & PTOPLWAIAERO,PSOLLWAIAERO,&
    3737 & PLWADAERO,& !--NL
     38!--ajout volmip
     39 & volmip_solsw, flag_volc_surfstrat,&
    3840!..end
    3941 & ok_ade, ok_aie, ok_volcan, flag_aerosol,flag_aerosol_strat,&
     
    259261REAL(KIND=JPRB)   ,INTENT(OUT)   :: PFLCCDN(KPROMA,KLEV+1) ! LW clear sky clean (no aerosol) flux down
    260262REAL(KIND=JPRB)   ,INTENT(OUT)   :: PFLCCUP(KPROMA,KLEV+1) ! LW clear sky clean (no aerosol) flux up
     263!--ajout VOLMIP
     264REAL(KIND=JPRB)   ,INTENT(OUT)   :: volmip_solsw(KPROMA) ! SW clear sky in the case of VOLMIP
     265INTEGER, INTENT(IN)              :: flag_volc_surfstrat !--VOlMIP Modif
    261266
    262267!     ==== COMPUTED IN RADITE ===
     
    795800ENDIF
    796801
     802!--VolMIP Strat/Surf
     803!--only ok_ade + ok_aie case treated
     804IF (ok_ade.AND.ok_aie.AND.ok_volcan) THEN
     805   !--in this case the fluxes used for the heating rates come from case 4 but SW surface radiation is kept from case 2
     806   IF (flag_volc_surfstrat.EQ.2) THEN ! STRAT HEATING
     807      volmip_solsw(:)= ZFSDN_AERO(:,1,2)-ZFSUP_AERO(:,1,2)
     808   ELSEIF (flag_volc_surfstrat.EQ.1) THEN ! SURF COOLING
     809      !--in this case the fluxes used for the heating rates come from case 2 but SW surface radiation is kept from case 4
     810      PFSUP(:,:) =    ZFSUP_AERO(:,:,2)
     811      PFSDN(:,:) =    ZFSDN_AERO(:,:,2)
     812      PFSCUP(:,:) =   ZFSUP0_AERO(:,:,2)
     813      PFSCDN(:,:) =   ZFSDN0_AERO(:,:,2)
     814      PFLUX(:,1,:) =  LWUP_AERO(:,:,2)
     815      PFLUX(:,2,:) =  LWDN_AERO(:,:,2)
     816      PFLUC(:,1,:) =  LWDN0_AERO(:,:,2)
     817      PFLUC(:,2,:) =  LWDN0_AERO(:,:,2)
     818      volmip_solsw(:)= ZFSDN_AERO(:,1,4)-ZFSUP_AERO(:,1,4)
     819   ENDIF
     820ENDIF
     821!--End VolMIP Strat/Surf
     822
    797823IF (swaerofree_diag) THEN
    798824! copy shortwave clear-sky clean (no aerosol) case
  • LMDZ6/trunk/libf/phylmdiso/physiq_mod.F90

    r3949 r3989  
    426426    LOGICAL, SAVE :: ok_volcan ! pour activer les diagnostics volcaniques
    427427    !$OMP THREADPRIVATE(ok_volcan)
     428    INTEGER, SAVE :: flag_volc_surfstrat ! pour imposer le cool/heat rate à la surf/strato
     429    !$OMP THREADPRIVATE(flag_volc_surfstrat)
    428430    LOGICAL ok_cvl  ! pour activer le nouveau driver pour convection KE
    429431    PARAMETER (ok_cvl=.TRUE.)
     
    13611363            fact_cldcon, facttemps,ok_newmicro,iflag_radia, &
    13621364            iflag_cld_th,iflag_ratqs,ratqsbas,ratqshaut,tau_ratqs, &
    1363             ok_ade, ok_aie, ok_alw, ok_cdnc, ok_volcan, aerosol_couple, &
    1364             chemistry_couple, &
    1365             flag_aerosol, flag_aerosol_strat, flag_aer_feedback, &
     1365            ok_ade, ok_aie, ok_alw, ok_cdnc, ok_volcan, flag_volc_surfstrat, aerosol_couple, &
     1366            chemistry_couple, flag_aerosol, flag_aerosol_strat, flag_aer_feedback, &
    13661367            flag_bc_internal_mixture, bl95_b0, bl95_b1, &
    13671368                                ! nv flags pour la convection et les
     
    54545455               t_seri,q_seri,wo, &
    54555456               cldfrarad, cldemirad, cldtaurad, &
    5456                ok_ade.OR.flag_aerosol_strat.GT.0, ok_aie,  ok_volcan, &
    5457                flag_aerosol, &
    5458                flag_aerosol_strat, flag_aer_feedback, &
     5457               ok_ade.OR.flag_aerosol_strat.GT.0, ok_aie,  ok_volcan, flag_volc_surfstrat, &
     5458               flag_aerosol, flag_aerosol_strat, flag_aer_feedback, &
    54595459               tau_aero, piz_aero, cg_aero, &
    54605460               tau_aero_sw_rrtm, piz_aero_sw_rrtm, cg_aero_sw_rrtm, &
     
    55415541                     t_seri,q_seri,wo, &
    55425542                     cldfrarad, cldemirad, cldtaurad, &
    5543                      ok_ade.OR.flag_aerosol_strat.GT.0, ok_aie,  ok_volcan, &
    5544                      flag_aerosol, &
    5545                      flag_aerosol_strat, flag_aer_feedback, &
     5543                     ok_ade.OR.flag_aerosol_strat.GT.0, ok_aie,  ok_volcan, flag_volc_surfstrat, &
     5544                     flag_aerosol, flag_aerosol_strat, flag_aer_feedback, &
    55465545                     tau_aero, piz_aero, cg_aero, &
    55475546                     tau_aero_sw_rrtm, piz_aero_sw_rrtm, cg_aero_sw_rrtm, &
Note: See TracChangeset for help on using the changeset viewer.