Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/gfdlmpv3 (ready for review) #195

Open
wants to merge 46 commits into
base: ufs/dev
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 44 commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
404f961
deleted gfdl mp v1 files
RuiyuSun Jan 22, 2024
737f62a
removed the gfdlmp v1 files in the GFDL directory and moved them to v…
RuiyuSun Jan 22, 2024
57655a6
make a change in CMakeLists.txt corresponging to the moving of GFLDMP…
RuiyuSun Jan 29, 2024
ec416f7
removed GFDL directory but added GFDL_2019_v1 for GFDLMP v1 and moved…
RuiyuSun Feb 1, 2024
4026f1a
re-organized GFDLMP v1 and add v3
RuiyuSun Feb 1, 2024
23ef3b4
add GFDLMP v3
RuiyuSun Feb 1, 2024
26ac3dd
remove comment and previous tests
RuiyuSun Feb 2, 2024
deeb2cf
remove previous comments
RuiyuSun Feb 7, 2024
f61341c
remove comments in module_gfdl_cld_mp.F90
RuiyuSun Feb 7, 2024
3e31927
correct a bug
RuiyuSun Feb 7, 2024
3194de9
Merge branch 'ufs/dev' of https://github.com/ufs-community/ccpp-physi…
dustinswales Mar 18, 2024
47b8af3
refactor gfdlmp. work in progress
dustinswales Mar 19, 2024
b33604d
Some more changes
dustinswales Mar 20, 2024
3d75ef8
Merge branch 'ufs/dev' of https://github.com/ufs-community/ccpp-physi…
dustinswales Mar 20, 2024
a04c4e7
Merge branch 'ufs/dev' of https://github.com/ufs-community/ccpp-physi…
dustinswales Apr 3, 2024
c776501
Additional cleanup
dustinswales Apr 3, 2024
d65198c
Revert some changes
dustinswales Apr 3, 2024
a378a60
Revert some more changes
dustinswales Apr 3, 2024
ecc0692
Revert some even more changes
dustinswales Apr 3, 2024
4e83fde
Remove reference to gfdlmp_v3 switch in scheme file
dustinswales Apr 4, 2024
bdd4452
Some housekeeping
dustinswales Apr 12, 2024
153c9a1
Some more changes
dustinswales Apr 12, 2024
8b2d73e
Some reorg
dustinswales Apr 12, 2024
8aee3da
Some more cleanup. Nearly done
dustinswales Apr 22, 2024
3115d2c
Move gfdlmp init call to fv_sat_adj init().
dustinswales May 23, 2024
174f598
Merge branch 'ufs/dev' of https://github.com/ufs-community/ccpp-physi…
dustinswales May 23, 2024
5c43e68
Revert "Move gfdlmp init call to fv_sat_adj init()."
dustinswales May 23, 2024
45e99c9
Revert mp init move.
dustinswales May 23, 2024
ec5fcbd
Some more changes.
dustinswales Aug 26, 2024
b740df0
Merge branch 'ufs/dev' of https://github.com/ufs-community/ccpp-physi…
dustinswales Aug 26, 2024
aa23540
Some more changes.
dustinswales Oct 22, 2024
c9d4dca
Merge branch 'ufs/dev' of https://github.com/ufs-community/ccpp-physi…
dustinswales Oct 22, 2024
ec60776
Some of the last changes
dustinswales Nov 7, 2024
c05ed51
More changes!
dustinswales Nov 7, 2024
f7d8dbe
Final updates
dustinswales Nov 13, 2024
ab9aa26
Merge branch 'ufs/dev' of https://github.com/ufs-community/ccpp-physi…
dustinswales Nov 13, 2024
e9159cf
Cleanup module
dustinswales Nov 14, 2024
82e87e9
More changes...
dustinswales Nov 18, 2024
768161a
Bug fix
dustinswales Nov 18, 2024
b67bdbe
Thats it!
dustinswales Nov 18, 2024
a352eb3
Merge branch 'ufs/dev' of https://github.com/ufs-community/ccpp-physi…
dustinswales Nov 18, 2024
96e5198
Bug fix from GNU compile
dustinswales Nov 19, 2024
7496933
Doh!
dustinswales Nov 21, 2024
945bd99
Merge branch 'ufs/dev' of https://github.com/ufs-community/ccpp-physi…
dustinswales Dec 16, 2024
d797cdd
Merge branch 'ufs/dev' of https://github.com/ufs-community/ccpp-physi…
dustinswales Jan 24, 2025
b43e52d
Address reviewers comments
dustinswales Jan 24, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions CODEOWNERS
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,10 @@ physics/GWD/unified_ugwp* @md
physics/MP/Ferrier_Aligo/module_MP_FER_HIRES.* @ericaligo-NOAA @grantfirl @rhaesung @Qingfu-Liu @dustinswales
physics/MP/Ferrier_Aligo/mp_fer_hires.* @ericaligo-NOAA @grantfirl @rhaesung @Qingfu-Liu @dustinswales
physics/MP/GFDL/GFDL_parse_tracers.F90 @grantfirl @rhaesung @Qingfu-Liu @dustinswales
physics/MP/GFDL/gfdl_cloud_microphys.* @RuiyuSun @grantfirl @rhaesung @Qingfu-Liu @dustinswales
physics/MP/GFDL/module_gfdl_cloud_microphys.* @RuiyuSun @grantfirl @rhaesung @Qingfu-Liu @dustinswales
physics/MP/GFDL/v1_2019/gfdl_cloud_microphys.* @RuiyuSun @grantfirl @rhaesung @Qingfu-Liu @dustinswales
physics/MP/GFDL/v1_2019/gfdl_cloud_microphys_mod.* @RuiyuSun @grantfirl @rhaesung @Qingfu-Liu @dustinswales
physics/MP/GFDL/v3_2022/gfdl_cloud_microphys_v3.* @RuiyuSun @grantfirl @rhaesung @Qingfu-Liu @dustinswales
physics/MP/GFDL/v3_2022/gfdl_cloud_microphys_v3_mod.* @RuiyuSun @grantfirl @rhaesung @Qingfu-Liu @dustinswales
physics/MP/GFDL/fv_sat_adj.* @RuiyuSun @grantfirl @rhaesung @Qingfu-Liu @dustinswales
physics/MP/GFDL/multi_gases.F90 @RuiyuSun @grantfirl @rhaesung @Qingfu-Liu @dustinswales
physics/MP/Morrison_Gettelman/aer_cloud.F @AnningCheng-NOAA @andrewgettelman @grantfirl @rhaesung @Qingfu-Liu @dustinswales
Expand Down
11 changes: 6 additions & 5 deletions physics/MP/GFDL/fv_sat_adj.F90
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ module fv_sat_adj
! <td>is_master</td>
! </tr>
! <tr>
! <td>gfdl_cloud_microphys_mod</td>
! <td>module_gfdl_param</td>
! <td>ql_gen, qi_gen, qi0_max, ql_mlt, ql0_max, qi_lim, qs_mlt,
! tau_r2g, tau_smlt, tau_i2s, tau_v2l, tau_l2v, tau_imlt, tau_l2r,
! rad_rain, rad_snow, rad_graupel, dw_ocean, dw_land, tintqs</td>
Expand All @@ -61,10 +61,11 @@ module fv_sat_adj
cp_air => con_cp_dyn
! *DH
use machine, only: kind_grid, kind_dyn
use gfdl_cloud_microphys_mod, only: ql_gen, qi_gen, qi0_max, ql_mlt, ql0_max, qi_lim, qs_mlt
use gfdl_cloud_microphys_mod, only: icloud_f, sat_adj0, t_sub, cld_min
use gfdl_cloud_microphys_mod, only: tau_r2g, tau_smlt, tau_i2s, tau_v2l, tau_l2v, tau_imlt, tau_l2r
use gfdl_cloud_microphys_mod, only: rad_rain, rad_snow, rad_graupel, dw_ocean, dw_land, tintqs
use module_gfdlmp_param, only: ql_gen, qi_gen, qi0_max, ql_mlt, ql0_max, qi_lim, qs_mlt
use module_gfdlmp_param, only: icloud_f, sat_adj0, t_sub, cld_min
use module_gfdlmp_param, only: tau_r2g, tau_smlt, tau_i2s, tau_v2l, tau_l2v, tau_imlt, tau_l2r
use module_gfdlmp_param, only: rad_rain, rad_snow, rad_graupel, dw_ocean, dw_land, tintqs

#ifdef MULTI_GASES
use ccpp_multi_gases_mod, only: multi_gases_init, &
multi_gases_finalize, &
Expand Down
4 changes: 2 additions & 2 deletions physics/MP/GFDL/fv_sat_adj.meta
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
name = fv_sat_adj
type = scheme
dependencies = ../../hooks/machine.F,../../hooks/physcons.F90
dependencies = module_gfdl_cloud_microphys.F90,multi_gases.F90
dependencies = ../module_mp_radar.F90
dependencies = ../multi_gases.F90,../module_mp_radar.F90
dependencies = module_gfdlmp_param.F90

########################################################################
[ccpp-arg-table]
Expand Down
413 changes: 413 additions & 0 deletions physics/MP/GFDL/module_gfdlmp_param.F90

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@
module gfdl_cloud_microphys

use gfdl_cloud_microphys_mod, only: gfdl_cloud_microphys_mod_init, &
gfdl_cloud_microphys_mod_driver, &
gfdl_cloud_microphys_mod_end, &
cloud_diagnosis
gfdl_cloud_microphys_mod_driver, &
gfdl_cloud_microphys_mod_end, &
cloud_diagnosis

implicit none

Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
[ccpp-table-properties]
name = gfdl_cloud_microphys
type = scheme
dependencies = ../../hooks/machine.F
dependencies = ../module_mp_radar.F90
dependencies = module_gfdl_cloud_microphys.F90
dependencies = ../../../hooks/machine.F
dependencies = ../../module_mp_radar.F90
dependencies = gfdl_cloud_microphys_mod.F90
dependencies = ../module_gfdlmp_param.F90

########################################################################
[ccpp-arg-table]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,22 @@ module gfdl_cloud_microphys_mod
! use fms_mod, only: write_version_number, open_namelist_file, &
! check_nml_error, file_exist, close_file

! -----------------------------------------------------------------------
use module_mp_radar
use module_gfdlmp_param, only: read_gfdlmp_nml, mp_time, t_min, t_sub, &
tau_r2g, tau_smlt, tau_g2r, dw_land, dw_ocean, vi_fac, vr_fac, &
vs_fac, vg_fac, ql_mlt, do_qa, fix_negative, vi_max, vs_max, &
vg_max, vr_max, qs_mlt, qs0_crt, qi_gen, ql0_max, qi0_max, &
qi0_crt, qr0_crt, fast_sat_adj, rh_inc, rh_ins, rh_inr, const_vi, &
const_vs, const_vg, const_vr, use_ccn, rthresh, ccn_l, ccn_o, &
qc_crt, tau_g2v, tau_v2g, sat_adj0, c_piacr, tau_imlt, tau_v2l, &
tau_l2v, tau_i2s, tau_l2r, qi_lim, ql_gen, c_paut, c_psaci, &
c_pgacs, z_slope_liq, z_slope_ice, prog_ccn, c_cracw, alin, clin, &
tice, rad_snow, rad_graupel, rad_rain, cld_min, use_ppm, &
mono_prof, do_sedi_heat, sedi_transport, do_sedi_w, de_ice, &
icloud_f, irain_f, mp_print, reiflag, rewmin, rewmax, reimin, &
reimax, rermin, rermax, resmin, resmax, regmin, regmax, tintqs, &
do_hail

implicit none

Expand Down Expand Up @@ -145,21 +160,7 @@ module gfdl_cloud_microphys_mod
real :: lv00 !< the same as lv0, except that cp_vap can be cp_vap or cv_vap

! cloud microphysics switchers

integer :: icloud_f = 0 !< cloud scheme
integer :: irain_f = 0 !< cloud water to rain auto conversion scheme

logical :: de_ice = .false. !< to prevent excessive build - up of cloud ice from external sources
logical :: sedi_transport = .true. !< transport of momentum in sedimentation
logical :: do_sedi_w = .false. !< transport of vertical motion in sedimentation
logical :: do_sedi_heat = .true. !< transport of heat in sedimentation
logical :: prog_ccn = .false. !< do prognostic ccn (yi ming's method)
logical :: do_qa = .true. !< do inline cloud fraction
logical :: rad_snow = .true. !< consider snow in cloud fraciton calculation
logical :: rad_graupel = .true. !< consider graupel in cloud fraction calculation
logical :: rad_rain = .true. !< consider rain in cloud fraction calculation
logical :: fix_negative = .false. !< fix negative water species
logical :: do_setup = .true. !< setup constants and parameters
logical :: do_setup = .true. !< setup constants and parameters
logical :: p_nonhydro = .false. !< perform hydrosatic adjustment on air density

real, allocatable :: table (:), table2 (:), table3 (:), tablew (:)
Expand All @@ -182,171 +183,9 @@ module gfdl_cloud_microphys_mod
! qs0_crt = 0.6e-3
! c_psaci = 0.1
! c_pgacs = 0.1

! -----------------------------------------------------------------------
! namelist parameters
! -----------------------------------------------------------------------

real :: cld_min = 0.05 !< minimum cloud fraction
real :: tice = 273.16 !< set tice = 165. to trun off ice - phase phys (kessler emulator)

real :: t_min = 178. !< min temp to freeze - dry all water vapor
real :: t_sub = 184. !< min temp for sublimation of cloud ice
real :: mp_time = 150. !< maximum micro - physics time step (sec)

! relative humidity increment

real :: rh_inc = 0.25 !< rh increment for complete evaporation of cloud water and cloud ice
real :: rh_inr = 0.25 !< rh increment for minimum evaporation of rain
real :: rh_ins = 0.25 !< rh increment for sublimation of snow

! conversion time scale

real :: tau_r2g = 900. !< rain freezing during fast_sat
real :: tau_smlt = 900. !< snow melting
real :: tau_g2r = 600. !< graupel melting to rain
real :: tau_imlt = 600. !< cloud ice melting
real :: tau_i2s = 1000. !< cloud ice to snow auto-conversion
real :: tau_l2r = 900. !< cloud water to rain auto-conversion
real :: tau_v2l = 150. !< water vapor to cloud water (condensation)
real :: tau_l2v = 300. !< cloud water to water vapor (evaporation)
real :: tau_g2v = 900. !< graupel sublimation
real :: tau_v2g = 21600. !< graupel deposition -- make it a slow process

! horizontal subgrid variability

real :: dw_land = 0.20 !< base value for subgrid deviation / variability over land
real :: dw_ocean = 0.10 !< base value for ocean

! prescribed ccn

real :: ccn_o = 90. !< ccn over ocean (cm^ - 3)
real :: ccn_l = 270. !< ccn over land (cm^ - 3)

real :: rthresh = 10.0e-6 !< critical cloud drop radius (micro m)

! -----------------------------------------------------------------------
! wrf / wsm6 scheme: qi_gen = 4.92e-11 * (1.e3 * exp (0.1 * tmp)) ** 1.33
! optimized: qi_gen = 4.92e-11 * exp (1.33 * log (1.e3 * exp (0.1 * tmp)))
! qi_gen ~ 4.808e-7 at 0 c; 1.818e-6 at - 10 c, 9.82679e-5 at - 40c
! the following value is constructed such that qc_crt = 0 at zero c and @ - 10c matches
! wrf / wsm6 ice initiation scheme; qi_crt = qi_gen * min (qi_lim, 0.1 * tmp) / den
! -----------------------------------------------------------------------

real :: sat_adj0 = 0.90 !< adjustment factor (0: no, 1: full) during fast_sat_adj

real :: qc_crt = 5.0e-8 !< mini condensate mixing ratio to allow partial cloudiness

real :: qi_lim = 1. !< cloud ice limiter to prevent large ice build up

real :: ql_mlt = 2.0e-3 !< max value of cloud water allowed from melted cloud ice
real :: qs_mlt = 1.0e-6 !< max cloud water due to snow melt

real :: ql_gen = 1.0e-3 !< max cloud water generation during remapping step if fast_sat_adj = .t.
real :: qi_gen = 1.82e-6 !< max cloud ice generation during remapping step

! cloud condensate upper bounds: "safety valves" for ql & qi

real :: ql0_max = 2.0e-3 !< max cloud water value (auto converted to rain)
real :: qi0_max = 1.0e-4 !< max cloud ice value (by other sources)

real :: qi0_crt = 1.0e-4 !< cloud ice to snow autoconversion threshold (was 1.e-4);
!! qi0_crt is highly dependent on horizontal resolution
real :: qr0_crt = 1.0e-4 !< rain to snow or graupel/hail threshold
! lfo used * mixing ratio * = 1.e-4 (hail in lfo)
real :: qs0_crt = 1.0e-3 !< snow to graupel density threshold (0.6e-3 in purdue lin scheme)

real :: c_paut = 0.55 !< autoconversion cloud water to rain (use 0.5 to reduce autoconversion)
real :: c_psaci = 0.02 !< accretion: cloud ice to snow (was 0.1 in zetac)
real :: c_piacr = 5.0 !< accretion: rain to ice:
real :: c_cracw = 0.9 !< rain accretion efficiency
real :: c_pgacs = 2.0e-3 !< snow to graupel "accretion" eff. (was 0.1 in zetac)

! decreasing clin to reduce csacw (so as to reduce cloud water --- > snow)

real :: alin = 842.0 !< "a" in lin1983
real :: clin = 4.8 !< "c" in lin 1983, 4.8 -- > 6. (to ehance ql -- > qs)

! fall velocity tuning constants:

logical :: const_vi = .false. !< if .t. the constants are specified by v * _fac
logical :: const_vs = .false. !< if .t. the constants are specified by v * _fac
logical :: const_vg = .false. !< if .t. the constants are specified by v * _fac
logical :: const_vr = .false. !< if .t. the constants are specified by v * _fac

! good values:

real :: vi_fac = 1. !< if const_vi: 1 / 3
real :: vs_fac = 1. !< if const_vs: 1.
real :: vg_fac = 1. !< if const_vg: 2.
real :: vr_fac = 1. !< if const_vr: 4.

! upper bounds of fall speed (with variable speed option)

real :: vi_max = 0.5 !< max fall speed for ice
real :: vs_max = 5.0 !< max fall speed for snow
real :: vg_max = 8.0 !< max fall speed for graupel
real :: vr_max = 12. !< max fall speed for rain

! cloud microphysics switchers

logical :: fast_sat_adj = .false. !< has fast saturation adjustments
logical :: z_slope_liq = .true. !< use linear mono slope for autocconversions
logical :: z_slope_ice = .false. !< use linear mono slope for autocconversions
logical :: use_ccn = .false. !< must be true when prog_ccn is false
logical :: use_ppm = .false. !< use ppm fall scheme
logical :: mono_prof = .true. !< perform terminal fall with mono ppm scheme
logical :: mp_print = .false. !< cloud microphysics debugging printout
logical :: do_hail = .false. !< use hail parameters instead of graupel

! real :: global_area = - 1.


real :: log_10, tice0, t_wfr

integer :: reiflag = 1
! 1: Heymsfield and Mcfarquhar, 1996
! 2: Wyser, 1998

logical :: tintqs = .false. !< use temperature in the saturation mixing in PDF

real :: rewmin = 5.0, rewmax = 10.0
real :: reimin = 10.0, reimax = 150.0
real :: rermin = 10.0, rermax = 10000.0
real :: resmin = 150.0, resmax = 10000.0
real :: regmin = 300.0, regmax = 10000.0

! -----------------------------------------------------------------------
! namelist
! -----------------------------------------------------------------------

namelist / gfdl_cloud_microphysics_nml / &
mp_time, t_min, t_sub, tau_r2g, tau_smlt, tau_g2r, dw_land, dw_ocean, &
vi_fac, vr_fac, vs_fac, vg_fac, ql_mlt, do_qa, fix_negative, vi_max, &
vs_max, vg_max, vr_max, qs_mlt, qs0_crt, qi_gen, ql0_max, qi0_max, &
qi0_crt, qr0_crt, fast_sat_adj, rh_inc, rh_ins, rh_inr, const_vi, &
const_vs, const_vg, const_vr, use_ccn, rthresh, ccn_l, ccn_o, qc_crt, &
tau_g2v, tau_v2g, sat_adj0, c_piacr, tau_imlt, tau_v2l, tau_l2v, &
tau_i2s, tau_l2r, qi_lim, ql_gen, c_paut, c_psaci, c_pgacs, &
z_slope_liq, z_slope_ice, prog_ccn, c_cracw, alin, clin, tice, &
rad_snow, rad_graupel, rad_rain, cld_min, use_ppm, mono_prof, &
do_sedi_heat, sedi_transport, do_sedi_w, de_ice, icloud_f, irain_f, &
mp_print, reiflag, rewmin, rewmax, reimin, reimax, rermin, rermax, &
resmin, resmax, regmin, regmax, tintqs, do_hail

public &
mp_time, t_min, t_sub, tau_r2g, tau_smlt, tau_g2r, dw_land, dw_ocean, &
vi_fac, vr_fac, vs_fac, vg_fac, ql_mlt, do_qa, fix_negative, vi_max, &
vs_max, vg_max, vr_max, qs_mlt, qs0_crt, qi_gen, ql0_max, qi0_max, &
qi0_crt, qr0_crt, fast_sat_adj, rh_inc, rh_ins, rh_inr, const_vi, &
const_vs, const_vg, const_vr, use_ccn, rthresh, ccn_l, ccn_o, qc_crt, &
tau_g2v, tau_v2g, sat_adj0, c_piacr, tau_imlt, tau_v2l, tau_l2v, &
tau_i2s, tau_l2r, qi_lim, ql_gen, c_paut, c_psaci, c_pgacs, &
z_slope_liq, z_slope_ice, prog_ccn, c_cracw, alin, clin, tice, &
rad_snow, rad_graupel, rad_rain, cld_min, use_ppm, mono_prof, &
do_sedi_heat, sedi_transport, do_sedi_w, de_ice, icloud_f, irain_f, &
mp_print, reiflag, rewmin, rewmax, reimin, reimax, rermin, rermax, &
resmin, resmax, regmin, regmax, tintqs, do_hail

contains

! -----------------------------------------------------------------------
Expand Down Expand Up @@ -3595,30 +3434,20 @@ subroutine gfdl_cloud_microphys_mod_init (me, master, nlunit, input_nml_file, lo
errflg = 0
errmsg = ''

#ifdef INTERNAL_FILE_NML
read (input_nml_file, nml = gfdl_cloud_microphysics_nml)
#else
inquire (file = trim (fn_nml), exist = exists)
if (.not. exists) then
write (6, *) 'gfdl - mp :: namelist file: ', trim (fn_nml), ' does not exist'
errflg = 1
errmsg = 'ERROR(gfdl_cloud_microphys_mod_init): namelist file '//trim (fn_nml)//' does not exist'
return
else
open (unit = nlunit, file = fn_nml, action = 'read' , status = 'old', iostat = ios)
endif
rewind (nlunit)
read (nlunit, nml = gfdl_cloud_microphysics_nml)
close (nlunit)
#endif
! -----------------------------------------------------------------------
! Read namelist
! -----------------------------------------------------------------------
call read_gfdlmp_nml(errmsg = errmsg, errflg = errflg, unit = nlunit, &
input_nml_file = input_nml_file, fn_nml = fn_nml, version=1, &
iostat = ios)

! write version number and namelist to log file
if (me == master) then
write (logunit, *) " ================================================================== "
write (logunit, *) "gfdl_cloud_microphys_mod"
write (logunit, nml = gfdl_cloud_microphysics_nml)
write (logunit, *) "gfdl_cloud_microphysics_nml"
endif

!
if (do_setup) then
call setup_con
call setupm
Expand Down
Loading