Ignore:
Timestamp:
Oct 30, 2023, 5:37:00 PM (7 months ago)
Author:
Laurent Fairhead
Message:

Merge of ACC branch with 4740 revision from trunk

Location:
LMDZ6/branches/Portage_acc
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/branches/Portage_acc

  • LMDZ6/branches/Portage_acc/libf/phylmd/ecrad/radiation_scheme.F90

    r4584 r4743  
    99!             3. Configuration a partir de namelist
    1010!             4. frac_std = 0.75     
     11! Juillet 2023 :
     12!             
    1113! ============================================================================
    1214
     
    1416! Inputs
    1517     & (KIDIA, KFDIA, KLON, KLEV, KAEROSOL, NSW, &
    16      &  IDAY, TIME, &
     18     &  namelist_file, ok_3Deffect, IDAY, TIME, &
    1719     &  PSOLAR_IRRADIANCE, &
    1820     &  PMU0, PTEMPERATURE_SKIN, &
     
    8082USE PARKIND1 , ONLY : JPIM, JPRB
    8183USE YOMHOOK  , ONLY : LHOOK, DR_HOOK
    82 ! AI ATTENTION module propre a ifs commentes
    83 !USE YOERAD   , ONLY : YRERAD
    84 USE RADIATION_SETUP, ONLY : SETUP_RADIATION_SCHEME, rad_config, &
    85 !USE RADIATION_SETUP, ONLY : &
    86      &  NWEIGHT_UV,  IBAND_UV,  WEIGHT_UV, &
    87      &  NWEIGHT_PAR, IBAND_PAR, WEIGHT_PAR, &
    88      &  ITYPE_TROP_BG_AER,  TROP_BG_AER_MASS_EXT, &
    89      &  ITYPE_STRAT_BG_AER, STRAT_BG_AER_MASS_EXT, ISolverSpartacus
    90 ! Commentes : jour, date de la simulation
    91 !USE YOMRIP0  , ONLY : NINDAT
    92 !USE YOMCT3   , ONLY : NSTEP
    93 !USE YOMRIP   , ONLY : YRRIP
     84USE RADIATION_SETUP
    9485USE YOMCST   , ONLY : RSIGMA ! Stefan-Boltzmann constant
     86USE RADIATION_SETUP, ONLY : SETUP_RADIATION_SCHEME, &
     87                         &  config_type, driver_config_type, &
     88                         &  NWEIGHT_UV,  IBAND_UV,  WEIGHT_UV, &
     89                         &  NWEIGHT_PAR, IBAND_PAR, WEIGHT_PAR, &
     90                         &  ITYPE_TROP_BG_AER,  TROP_BG_AER_MASS_EXT, &
     91                         &  ITYPE_STRAT_BG_AER, STRAT_BG_AER_MASS_EXT, &
     92                         &  ISolverSpartacus
    9593
    9694! Modules from radiation library
     
    105103
    106104USE mod_phys_lmdz_para
    107 USE setup_config_from_lmdz,   ONLY : driver_config_type
    108105
    109106IMPLICIT NONE
     
    142139!REAL(KIND=JPRB),   INTENT(IN) :: PLAND_SEA_MASK(KLON)
    143140
    144 ! *** Variables on full levels
    145 !REAL(KIND=JPRB),   INTENT(IN) :: PPRESSURE(KLON,KLEV)    ! (Pa)
    146 !REAL(KIND=JPRB),   INTENT(IN) :: PTEMPERATURE(KLON,KLEV) ! (K)
    147141! *** Variables on half levels
    148142REAL(KIND=JPRB),   INTENT(IN) :: PPRESSURE_H(KLON,KLEV+1)    ! (Pa)
     
    201195REAL(KIND=JPRB),  INTENT(OUT) :: PFLUX_LW_UP_CLEAR(KLON,KLEV+1)
    202196
    203 ! *** Surface flux components (W m-2)
    204 ! AI ATTENTION
    205 !REAL(KIND=JPRB),  INTENT(OUT) :: PFLUX_SW_DN_SURF(KLON)
    206 !REAL(KIND=JPRB),  INTENT(OUT) :: PFLUX_LW_DN_SURF(KLON)
    207 !REAL(KIND=JPRB),  INTENT(OUT) :: PFLUX_SW_DN_CLEAR_SURF(KLON)
    208 !REAL(KIND=JPRB),  INTENT(OUT) :: PFLUX_LW_DN_CLEAR_SURF(KLON)
    209 !REAL(KIND=JPRB),  INTENT(OUT) :: PFLUX_SW_UP_SURF(KLON)
    210 !REAL(KIND=JPRB),  INTENT(OUT) :: PFLUX_LW_UP_SURF(KLON)
    211 !REAL(KIND=JPRB),  INTENT(OUT) :: PFLUX_SW_UP_CLEAR_SURF(KLON)
    212 !REAL(KIND=JPRB),  INTENT(OUT) :: PFLUX_LW_UP_CLEAR_SURF(KLON)
    213 
    214197! Direct component of surface flux into horizontal plane
    215198REAL(KIND=JPRB),  INTENT(OUT) :: PFLUX_DIR(KLON)
     
    222205REAL(KIND=JPRB),  INTENT(OUT) :: PFLUX_PAR(KLON)
    223206REAL(KIND=JPRB),  INTENT(OUT) :: PFLUX_PAR_CLEAR(KLON)
    224 
    225 ! *** Other single-level diagnostics
    226 ! Top-of-atmosphere incident solar flux (W m-2)
    227 ! AI ATTENTION
    228 !REAL(KIND=JPRB),  INTENT(OUT) :: PFLUX_SW_DN_TOA(KLON)
    229 !REAL(KIND=JPRB),  INTENT(OUT) :: PFLUX_SW_UP_TOA(KLON)
    230 !REAL(KIND=JPRB),  INTENT(OUT) :: PFLUX_LW_DN_TOA(KLON)
    231 !REAL(KIND=JPRB),  INTENT(OUT) :: PFLUX_LW_UP_TOA(KLON)
    232207
    233208! Diagnosed longwave surface emissivity across the whole spectrum
     
    250225! LOCAL VARIABLES
    251226! AI ATTENTION
    252 !type(config_type)         :: rad_config
     227type(config_type),save         :: rad_config
     228!!$OMP THREADPRIVATE(rad_config)
     229type(driver_config_type),save  :: driver_config
     230!!$OMP THREADPRIVATE(driver_config)
     231!type(config_type)        :: rad_config
     232!type(driver_config_type)  :: driver_config
    253233TYPE(single_level_type)   :: single_level
    254234TYPE(thermodynamics_type) :: thermodynamics
     
    272252!REAL(KIND=JPRB)           :: ZDECORR_LEN_RATIO = 0.5_jprb
    273253
    274 !AI mai 2023
    275 ! A mettre dans namelist
    276 !real(jprb) :: high_inv_effective_size
    277 !real(jprb) :: middle_inv_effective_size
    278 !real(jprb) :: low_inv_effective_size
    279 
    280 !real(jprb) :: cloud_inhom_separation_factor
    281 !real(jprb) :: cloud_separation_scale_surface
    282 !real(jprb) :: cloud_separation_scale_toa
    283 !real(jprb) :: cloud_separation_scale_power
    284 
    285254! The surface net longwave flux if the surface was a black body, used
    286255! to compute the effective broadband surface emissivity
     
    301270INTEGER, PARAMETER :: NAERMACC = 1
    302271
    303 ! AI ATTENTION
    304 ! A mettre dans namelist
    305 !real(jprb), parameter    :: frac_std = 0.75
    306 
    307272! Name of file names specified on command line
    308 character(len=512) :: file_name
     273character(len=512) :: namelist_file
    309274
    310275logical :: loutput=.true.
    311276logical :: lprint_input=.false.
    312 logical :: lprint_config=.false.
     277logical :: lprint_config=.true.
    313278logical, save :: debut_ecrad=.true.
    314279!$OMP THREADPRIVATE(debut_ecrad)
    315 
    316 type(driver_config_type) :: driver_config
    317 ! Import time functions for iseed calculation
    318 ! AI ATTENTION propre a ifs
    319 !#include "fcttim.func.h"
    320 !#include "liquid_effective_radius.intfb.h"
    321 !#include "ice_effective_radius.intfb.h"
    322 !#include "cloud_overlap_decorr_len.intfb.h"
    323 !#include "satur.intfb.h"
    324 
    325 ! Verifier les inputs
    326 print*,'=============== dans radiation_scheme : ==================='
    327 if (lprint_input) then
    328   print*,'********** Verification des entrees *************'
    329   print*,'KIDIA, KFDIA, KLON, KLEV, KAEROSOL, NSW =', &
    330         KIDIA, KFDIA, KLON, KLEV, KAEROSOL, NSW
    331   print*,'IDAY, TIME =', IDAY, TIME
    332   print*,'PSOLAR_IRRADIANCE =', PSOLAR_IRRADIANCE
    333   print*,'PMU0 =', PMU0
    334   print*,'PTEMPERATURE_SKIN =',PTEMPERATURE_SKIN
    335   print*,'PEMIS, PEMIS_WINDOW =', PEMIS, PEMIS_WINDOW
    336   print*,'PGELAM, PGEMU =', PGELAM, PGEMU
    337   print*,'PPRESSURE_H =', PPRESSURE_H
    338   print*,'PTEMPERATURE_H =', PTEMPERATURE_H
    339   print*,'PQ =', PQ
    340   print*,'PQSAT=',PQSAT
    341   print*,'PCO2, PCH4, PN2O, PNO2, PCFC11, PCFC12, PHCFC22, PCCL4 =', &
    342         PCO2, PCH4, PN2O, PNO2, PCFC11, PCFC12, PHCFC22, PCCL4
    343   print*,'PO3 =',PO3
    344   print*,'PCLOUD_FRAC, PQ_LIQUID, PQ_ICE, PQ_SNOW =', &
    345         PCLOUD_FRAC, PQ_LIQUID, PQ_ICE, PQ_SNOW
    346   print*,'ZRE_LIQUID_UM, ZRE_ICE_UM =', &
    347         ZRE_LIQUID_UM, ZRE_ICE_UM
    348   print*,'PAEROSOL_OLD, PAEROSOL =', PAEROSOL_OLD, PAEROSOL
     280integer, save :: itap_ecrad=1
     281logical :: ok_3Deffect
     282
     283IF (LHOOK) CALL DR_HOOK('RADIATION_SCHEME',0,ZHOOK_HANDLE)
     284
     285! A.I juillet 2023 :
     286! Initialisation dans radiation_setup au 1er passage dans Ecrad
     287!$OMP MASTER
     288if (.not.ok_3Deffect) then
     289  if (debut_ecrad) then
     290   call SETUP_RADIATION_SCHEME(loutput,namelist_file,rad_config,driver_config)
     291   debut_ecrad=.false.
     292  endif
     293else
     294   call SETUP_RADIATION_SCHEME(loutput,namelist_file,rad_config,driver_config)
    349295endif
    350 
    351 IF (LHOOK) CALL DR_HOOK('RADIATION_SCHEME',0,ZHOOK_HANDLE)
    352 print*,'Entree dans radiation_scheme'
    353 
    354 !$OMP MASTER
    355 if (debut_ecrad) then
    356 ! AI appel radiation_setup
    357 call SETUP_RADIATION_SCHEME(loutput)
    358 ! Read "radiation_driver" namelist into radiation driver config type
    359   file_name="namelist_ecrad"
    360 call driver_config%read(file_name)
    361 
    362 if (rad_config%i_solver_sw == ISolverSPARTACUS &
    363       & .or.   rad_config%i_solver_lw == ISolverSPARTACUS) then
    364        print*,'Solveur SW: ', rad_config%i_solver_sw
    365        print*,'Solveur LW: ', rad_config%i_solver_lw
    366    if (driver_config%ok_effective_size) then
    367        print*,'low_inv_effective_size = ',driver_config%low_inv_effective_size
    368        print*,'middle_inv_effective_size = ',driver_config%middle_inv_effective_size
    369        print*,'high_inv_effective_size = ',driver_config%high_inv_effective_size
    370    else if (driver_config%ok_separation) then   
    371        print*,'cloud_separation_scale_surface =',driver_config%cloud_separation_scale_surface
    372        print*,'cloud_separation_scale_toa =',driver_config%cloud_separation_scale_toa
    373        print*,'cloud_separation_scale_power =',driver_config%cloud_separation_scale_power
    374        print*,'cloud_inhom_separation_factor =',driver_config%cloud_inhom_separation_factor
    375    endif   
    376 endif   
    377 
    378  if (lprint_config) then
    379   print*,'************* Parametres de configuration  ********************'
    380   print*,'rad_config%iverbosesetup = ',rad_config%iverbosesetup
    381   print*,'rad_config%iverbose = ',rad_config%iverbose
    382   print*,'rad_config%directory_name =', rad_config%directory_name
    383   print*,'rad_config%do_lw_derivatives =',rad_config%do_lw_derivatives
    384   print*,'rad_config%do_surface_sw_spectral_flux =', &
    385         rad_config%do_surface_sw_spectral_flux
    386   print*,'rad_config%do_setup_ifsrrtm =', rad_config%do_setup_ifsrrtm
    387   print*,'rad_config%i_liq_model =',rad_config%i_liq_model
    388   print*,'rad_config%i_ice_model =',rad_config%i_ice_model
    389   print*,'rad_config%i_overlap_scheme =', rad_config%i_overlap_scheme
    390   print*,'rad_config%use_aerosols = ', rad_config%use_aerosols
    391   print*,'rad_config%n_aerosol_types = ', rad_config%n_aerosol_types
    392   print*,'rad_config%i_solver_lw =',rad_config%i_solver_lw
    393   print*,'rad_config%i_solver_sw =',rad_config%i_solver_sw
    394   print*,'rad_config%do_3d_effects =', rad_config%do_3d_effects
    395   print*,'rad_config%do_sw_delta_scaling_with_gases =', &
    396        rad_config%do_sw_delta_scaling_with_gases
    397   print*,'rad_config%do_lw_aerosol_scattering =', &
    398        rad_config%do_lw_aerosol_scattering
    399   print*,'rad_config%i_albedo_from_band_sw = ', &
    400        rad_config%i_albedo_from_band_sw
    401   print*,'n_bands_lw =', rad_config%n_bands_lw
    402   print*,'rad_config%i_emiss_from_band_lw =', rad_config%i_emiss_from_band_lw
    403  endif
    404  debut_ecrad=.false.
    405 endif
    406296!$OMP END MASTER
    407297!$OMP BARRIER
    408298! Fin partie initialisation et configuration
    409299
    410 ! AI : allocation des tableaux pour chaque partie (thermo, ...)
    411 !      passage des champs LMDZ aux structures Ecrad
    412 !      calculs Ecrad
     300!AI juillet 2023 : verif des param de config :
     301if (lprint_config) then
     302! IF (is_master) THEN       
     303   print*,'Parametres de configuration de ecrad, etape ',itap_ecrad     
     304   print*,'Entree dans radiation_scheme'
     305   print*,'ok_3Deffect = ',ok_3Deffect
     306   print*,'Fichier namelist = ',namelist_file
     307
     308   print*,'do_sw, do_lw, do_sw_direct, do_3d_effects = ', &
     309           rad_config%do_sw, rad_config%do_lw, rad_config%do_sw_direct, rad_config%do_3d_effects
     310   print*,'do_lw_side_emissivity, do_clear, do_save_radiative_properties = ', &
     311           rad_config%do_lw_side_emissivity, rad_config%do_clear, rad_config%do_save_radiative_properties
     312!   print*,'sw_entrapment_name, sw_encroachment_name = ', &
     313!           rad_config%sw_entrapment_name, rad_config%sw_encroachment_name
     314   print*,'do_3d_lw_multilayer_effects, do_fu_lw_ice_optics_bug = ', &
     315           rad_config%do_3d_lw_multilayer_effects, rad_config%do_fu_lw_ice_optics_bug
     316   print*,'do_save_spectral_flux, do_save_gpoint_flux = ', &
     317           rad_config%do_save_spectral_flux, rad_config%do_save_gpoint_flux
     318   print*,'do_surface_sw_spectral_flux, do_lw_derivatives = ', &
     319           rad_config%do_surface_sw_spectral_flux, rad_config%do_lw_derivatives
     320   print*,'do_lw_aerosol_scattering, do_lw_cloud_scattering = ', &
     321           rad_config%do_lw_aerosol_scattering, rad_config%do_lw_cloud_scattering
     322   print*, 'nregions, i_gas_model = ', &
     323           rad_config%nregions, rad_config%i_gas_model
     324!   print*, 'ice_optics_override_file_name, liq_optics_override_file_name = ', &
     325!           rad_config%ice_optics_override_file_name, rad_config%liq_optics_override_file_name
     326!   print*, 'aerosol_optics_override_file_name, cloud_pdf_override_file_name = ', &
     327!           rad_config%aerosol_optics_override_file_name, rad_config%cloud_pdf_override_file_name
     328!   print*, 'gas_optics_sw_override_file_name, gas_optics_lw_override_file_name = ', &
     329!           rad_config%gas_optics_sw_override_file_name, rad_config%gas_optics_lw_override_file_name
     330   print*, 'i_liq_model, i_ice_model, max_3d_transfer_rate = ', &
     331           rad_config%i_liq_model, rad_config%i_ice_model, rad_config%max_3d_transfer_rate
     332   print*, 'min_cloud_effective_size, overhang_factor = ', &
     333           rad_config%min_cloud_effective_size, rad_config%overhang_factor
     334   print*, 'use_canopy_full_spectrum_sw, use_canopy_full_spectrum_lw = ', &
     335           rad_config%use_canopy_full_spectrum_sw, rad_config%use_canopy_full_spectrum_lw
     336   print*, 'do_canopy_fluxes_sw, do_canopy_fluxes_lw = ', &
     337           rad_config%do_canopy_fluxes_sw, rad_config%do_canopy_fluxes_lw
     338   print*, 'do_canopy_gases_sw, do_canopy_gases_lw = ', &
     339           rad_config%do_canopy_gases_sw, rad_config%do_canopy_gases_lw
     340   print*, 'use_general_cloud_optics, use_general_aerosol_optics = ', &
     341           rad_config%use_general_cloud_optics, rad_config%use_general_aerosol_optics
     342   print*, 'do_sw_delta_scaling_with_gases, i_overlap_scheme = ', &
     343           rad_config%do_sw_delta_scaling_with_gases, rad_config%i_overlap_scheme
     344   print*, 'i_solver_sw, i_solver_sw, use_beta_overlap, use_vectorizable_generator = ', &
     345           rad_config%i_solver_sw, rad_config%i_solver_lw, &
     346           rad_config%use_beta_overlap, rad_config%use_vectorizable_generator
     347   print*, 'use_expm_everywhere, iverbose, iverbosesetup = ', &
     348           rad_config%use_expm_everywhere, rad_config%iverbose, rad_config%iverbosesetup
     349   print*, 'cloud_inhom_decorr_scaling, cloud_fraction_threshold = ', &
     350           rad_config%cloud_inhom_decorr_scaling, rad_config%cloud_fraction_threshold
     351   print*, 'clear_to_thick_fraction, max_gas_od_3d, max_cloud_od = ', &
     352           rad_config%clear_to_thick_fraction, rad_config%max_gas_od_3d, rad_config%max_cloud_od
     353   print*, 'cloud_mixing_ratio_threshold, overhead_sun_factor =', &
     354           rad_config%cloud_mixing_ratio_threshold, rad_config%overhead_sun_factor
     355   print*, 'n_aerosol_types, i_aerosol_type_map, use_aerosols = ', &
     356           rad_config%n_aerosol_types, rad_config%i_aerosol_type_map, rad_config%use_aerosols
     357   print*, 'mono_lw_wavelength, mono_lw_total_od, mono_sw_total_od = ', &
     358           rad_config%mono_lw_wavelength, rad_config%mono_lw_total_od,rad_config% mono_sw_total_od
     359   print*, 'mono_lw_single_scattering_albedo, mono_sw_single_scattering_albedo = ', &
     360           rad_config%mono_lw_single_scattering_albedo, rad_config%mono_sw_single_scattering_albedo
     361   print*, 'mono_lw_asymmetry_factor, mono_sw_asymmetry_factor = ', &
     362           rad_config%mono_lw_asymmetry_factor, rad_config%mono_sw_asymmetry_factor
     363   print*, 'i_cloud_pdf_shape = ', &
     364           rad_config%i_cloud_pdf_shape
     365!           cloud_type_name, use_thick_cloud_spectral_averaging = ', &
     366!           rad_config%i_cloud_pdf_shape, rad_config%cloud_type_name, &
     367!           rad_config%use_thick_cloud_spectral_averaging
     368   print*, 'do_nearest_spectral_sw_albedo, do_nearest_spectral_lw_emiss = ', &
     369           rad_config%do_nearest_spectral_sw_albedo, rad_config%do_nearest_spectral_lw_emiss
     370   print*, 'sw_albedo_wavelength_bound, lw_emiss_wavelength_bound = ', &
     371           rad_config%sw_albedo_wavelength_bound, rad_config%lw_emiss_wavelength_bound
     372   print*, 'i_sw_albedo_index, i_lw_emiss_index = ', &
     373           rad_config%i_sw_albedo_index, rad_config%i_lw_emiss_index
     374   print*, 'do_cloud_aerosol_per_lw_g_point = ', &
     375           rad_config%do_cloud_aerosol_per_lw_g_point
     376   print*, 'do_cloud_aerosol_per_sw_g_point, do_weighted_surface_mapping = ', &
     377           rad_config%do_cloud_aerosol_per_sw_g_point, rad_config%do_weighted_surface_mapping
     378   print*, 'n_bands_sw, n_bands_lw, n_g_sw, n_g_lw = ', &
     379           rad_config%n_bands_sw, rad_config%n_bands_lw, rad_config%n_g_sw, rad_config%n_g_lw
     380
     381           itap_ecrad=itap_ecrad+1
     382!   ENDIF         
     383endif           
     384
    413385! AI ATTENTION
    414386! Allocate memory in radiation objects
Note: See TracChangeset for help on using the changeset viewer.