Transcript Slide 1

Climate System Component Studies via
One-way Coupling Experiments
VIC Offline Simulations of the Pan-Arctic Domain
Chunmei Zhu
Dennis Lettenmaier
RACM Workshop
University of Colorado
May 15, 2008
VIC Offline Streamflow Simulations of the
Terrestrial Arctic Regime (1979-1999)
(Su et al, 2005)
Pan-Arctic Drainage Basins / mask file
Arctic River Network over 100km grid system
Streamflow observations,
satellite-based snow cover
extent, observed dates of
lake freeze-up and breakup, and sited monitored
summer permafrost
maximum active layer
thickness were used to
evaluate various simulated
hydrologic variables.
Lena
Aldan at Verhoyanski Perevoz (Area:696000.00 km2)
Mean monthly hydrograph (1979-1999)
Aldan at Verhoyanski Perevoz (Area:696000.00 km2)
Lena at Kusur (Area:2430000.00 km2)
Observed
Lena at Kusur
Simulated
Mean monthly
fraction
of areawith
covered
by
Mean
number
of days
snow
snow
1980-1999
Lena
Lena
Mackenzie
Mackenzie
Ob
Ob
Yenisei
Yenisei
Yukon
Yukon
Observed
Comparison of Julian day of lake freeze-up and break-up
The VIC model was
able to reproduce
the hydrologic
processes in the
Arctic region.
Development of the Regional Arctic Climate
System Model (RACM) ---
Initial Implementation of VIC within WRF
Department of Civil and Environmental Engineering
University of Washington
May, 2008
WRF couples with VIC through
CCSM Coupler (CPL6)
• Using coupler allows different configurations for
different component models. For example, VIC can
run (hourly) at different time step with WRF (in
seconds).
• Coupling through CPL6 maintains the
component codes in close to their original forms,
which takes much less recoding work than
subroutinized coupling.
• Componentized coupling through coupler
presenting opportunities for concurrent execution of
components, but subroutinized coupling severely
limits these opportunities.
• Coupling through CPL6 has the potential cost of
some execution efficiency. However, component
models typically exchange a small amount of data at
coupling intervals (hourly) which is much longer than
simulation time step (in seconds for WRF).
CCSM Flux Coupler – CLM land Surface Model
Program_csm.F90
Driver for CLM as the
land component of CCSM
csm_setup
Initialize MPI
communication groups
for component models
(MPH_processors_map.in)
initialize
Initialize land model
Initialize communication
with flux coupler
DO: time stepping loop
driver
Land surface model driver
END DO
initialize
Control_init
Initialize run control variables
Timemgr_init
Initialize time manager
Csm_recvgrid
Get grid and land mask back from flux coupler
mksrfdat
InitDecomp
Csm_initialize
initAccClmtype
Csm_sendalb
Make surface boundary data
Initialize clump and processor decomposition
Initialize flux coupler communication
Initialize time-varying data
Send first land model data to flux coupler
driver
Provides the main CLM driver calling sequence
Coupler Receive
Csm_dosndrcv (doalb)
If (dorecv) then
call csm_recv()
Determine if information should be
sent/received to/from flux coupler
Get atmospheric state and fluxes
from flux coupler (only when the atm
does a solar radiation computation)
Coupler Send
If (csm_doflxave)
call csm_flxave()
If (dosend) call
csm_send()
Average fluxes over interval
between the send and receive calls
Send fields to flux coupler (only
when the time steps before the
atm does a solar radiation
computation)
! land -> atmosphere state variables structure
!---------------------------------------------------type lnd2atm_state_type
real(r8), pointer :: t_rad(:)
!radiative temperature (Kelvin)
real(r8), pointer :: t_ref2m(:)
!2 m height surface air temperature (Kelvin)
real(r8), pointer :: q_ref2m(:)
!2 m height surface specific humidity (kg/kg)
real(r8), pointer :: h2osno(:)
!snow water (mm H2O)
real(r8), pointer :: albd(:,:)
!(numrad) surface albedo (direct)
real(r8), pointer :: albi(:,:)
!(numrad) surface albedo (diffuse)
end type lnd2atm_state_type
!----------------------------------------------------
! land -> atmosphere flux variables structure
!---------------------------------------------------type lnd2atm_flux_type
real(r8), pointer :: taux(:)
!wind stress: e-w (kg/m/s**2)
real(r8), pointer :: tauy(:)
!wind stress: n-s (kg/m/s**2)
real(r8), pointer :: eflx_lh_tot(:)
!total latent heat flux (W/m8*2) [+ to atm]
real(r8), pointer :: eflx_sh_tot(:)
!total sensible heat flux (W/m**2) [+ to atm]
real(r8), pointer :: eflx_lwrad_out(:)
!emitted infrared (longwave) radiation (W/m**2)
real(r8), pointer :: qflx_evap_tot(:)
!qflx_evap_soi + qflx_evap_veg + qflx_tran_veg
real(r8), pointer :: fsa(:)
!solar radiation absorbed (total) (W/m**2)
end type lnd2atm_flux_type
! atmosphere -> land state variables structure
!---------------------------------------------------type atm2lnd_state_type
forc_t(:)
!atmospheric temperature (Kelvin)
forc_u(:)
!atmospheric wind speed in east direction (m/s)
forc_v(:)
!atmospheric wind speed in north direction (m/s)
forc_wind(:) !atmospheric wind speed
forc_q(:)
!atmospheric specific humidity (kg/kg)
forc_hgt(:) !atmospheric reference height (m)
forc_hgt_u(:) !observational height of wind [m] (new)
forc_hgt_t(:) !observational height of temperature [m] (new)
forc_hgt_q(:) !observational height of humidity [m] (new)
forc_pbot(:) !atmospheric pressure (Pa)
forc_th(:)
!atmospheric potential temperature (Kelvin)
forc_vp(:)
!atmospheric vapor pressure (Pa)
forc_rho(:) !density (kg/m**3)
forc_co2(:) !atmospheric CO2 concentration (Pa)
forc_o2(:)
!atmospheric O2 concentration (Pa)
forc_psrf(:) !surface pressure (Pa)
end type atm2lnd_state_type
! atmosphere -> land flux variables structure
!---------------------------------------------------type atm2lnd_flux_type
forc_lwrad(:)
!downward infrared (longwave) radiation (W/m**2)
forc_solad(:,:)
!direct beam radiation (vis=forc_sols , nir=forc_soll ) (numrad)
forc_solai(:,:)
!diffuse radiation (vis=forc_solsd, nir=forc_solld) (numrad)
forc_solar(:)
!incident solar radiation
forc_rain(:)
!rain rate [mm/s]
forc_snow(:)
!snow rate [mm/s]
end type atm2lnd_flux_type
CCSM Flux Coupler – VIC land Surface Model
• Extract VIC part in MM5-VIC coupling system to be connected
with flux coupler because VIC in MM5 is in image mode.
• Connecting and coding CPL6 and VIC in current CCSM system
coding structure. Current VIC doesn’t have the capacity for
parallel running.
• VIC and flux coupler exchange the fields at hourly VIC running
time step. This allows WRF and VIC running at different time
step.
• The current VIC version in MM5 is VIC4.0.4. We plan to update
the VIC to newer version after the coupling finished
CCSM Flux Coupler – VIC land Surface Model
Program_vic.F90
Driver for VIC as the
land component of RACM
racm_setup
Initialize MPI
communication groups
for flux coupler
(MPH_processors_map.in)
initialize
Initialize VIC land model
Initialize communication
with flux coupler
DO: time stepping loop
driver
Land surface model driver
END DO
initialize
Control_init
Initialize run control variables (start_ymd etc.)
Allomem (from MM5-VIC)
Timemgr_init
Csm_recvgrid
Inivic (from MM5-VIC)
Initialize VIC run control variables,
allocate memory to DIST_PRCP_STRUCT
Initialize time manager
Get grid and land mask back from
input grid file : LANDGRID.INPUT
Read in initial atmos fluxes, soil, veg.,
snowband param, initial conditions (by
offline VIC running), pass them into
DIST_PRCP_STRUCT
InitDecomp
Initialize clump and processor decomposition
Csm_initialize
Send first comtrol data to flux coupler.
Initialize flux coupler communication
Csm_sendalb
Send first land model data to flux coupler
driver
Provides the main VIC driver calling sequence
Coupler Receive
If (dorecv) then
call csm_recv()
VICMODEL
VIC and flux coupler exchange the fields
at hourly VIC running time step
Get atmospheric state and fluxes
from flux coupler
Currently get atmospheric state and
fluxes from met file: VICMET.INPUT
Provide forcings to drive VIC model,
and feedback the boundary conditions.
Coupler Send
If (dosend) call
csm_send()
Send fields to flux coupler
! atmosphere -> land state variables structure
!---------------------------------------------------type atm2lnd_state_type
forc_wind(:) !atmospheric wind speed
forc_hgt_t(:) !observational height of temperature [m] (new)
forc_pbot(:) !atmospheric pressure (Pa)
forc_vp(:)
!atmospheric vapor pressure (Pa)
forc_rho(:) !density (kg/m**3)
end type atm2lnd_state_type
! atmosphere -> land flux variables structure
!---------------------------------------------------type atm2lnd_flux_type
forc_lwrad(:)
!downward infrared (longwave) radiation (W/m**2)
forc_solar(:)
!incident solar radiation
forc_rain(:)
!rain rate [mm/s]
end type atm2lnd_flux_type
Gridcell Type Structure
•
•
•
•
•
•
•
•
•
•
•
•
•
•
type gridcell_type
! topological mapping functionality
integer , pointer :: itype(:)
!gridcell type
real(r8), pointer :: area(:)
!total land area for this gridcell (km^2)
real(r8), pointer :: wtglob(:)
!weight for this gridcell relative to global area (0-1)
integer , pointer :: ixy(:)
!xy lon index
integer , pointer :: jxy(:)
!xy lat index
integer , pointer :: snindex(:) !corresponding gridcell index in s->n and east->west order
real(r8), pointer :: lat(:)
!latitude (radians)
real(r8), pointer :: lon(:)
!longitude (radians)
real(r8), pointer :: latdeg(:)
!latitude (degrees)
real(r8), pointer :: londeg(:)
!longitude (degrees)
real(r8), pointer :: landfrac(:)
!fractional land for this gridcell
•
•
•
! state variables defined at the gridcell level
type(atm2lnd_state_type) :: a2ls !atmospheric state variables required by the land
type(lnd2atm_state_type) :: l2as !land state variables required by the atmosphere
•
•
•
! flux variables defined at the gridcell level
type(atm2lnd_flux_type) :: a2lf
!atmospheric flux variables required by the land
type(lnd2atm_flux_type) :: l2af
!land flux variables required by the atmosphere
•
end type gridcell_type
cpl_fields_c2l_fields
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
integer(IN),parameter,public :: cpl_fields_c2l_total = 8
character(*), parameter,public :: cpl_fields_c2l_states = &
&'Sa_w&
&:Sa_tbot&
&:Sa_dens&
&:Sa_pbot&
&:Sa_pslvp'
character(*), parameter,public :: cpl_fields_c2l_fluxes = &
&'Faxa_lwdn&
&:Faxa_swdn&
&:Faxa_rain'
!----- atm states ----integer(IN),parameter,public
integer(IN),parameter,public
integer(IN),parameter,public
integer(IN),parameter,public
integer(IN),parameter,public
!----- computed by atm ----integer(IN),parameter,public
integer(IN),parameter,public
integer(IN),parameter,public
:: cpl_fields_c2l_w = 1 ! bottom atm level wind peed
:: cpl_fields_c2l_tbot = 2 ! bottom atm level temp
:: cpl_fields_c2l_dens = 3 ! bottom atm level air dens
:: cpl_fields_c2l_pbot = 4 ! sea level atm pressure
:: cpl_fields_c2l_pslvp = 5 ! sea level vapor pressure
:: cpl_fields_c2l_lwdn = 6 ! downward longwave heat flux
:: cpl_fields_c2l_swdn = 7 ! downward shortwave heat flux
:: cpl_fields_c2l_rain = 8 ! precip
Modified Modules and Subroutines
Coupler Flux Coupler
cpl_contract_mod.F90
cpl_interface_mod.F90
cpl_fields_mod.F90
MM5-VIC
wrf_allomem.c
wrf_init_global_vic.c
wrf_initialize_vic_model.c
wrf_vic_band.c
wrf_vic_interface.c
wrf_close_files.c
Land Surface model in CCSM
clm_csmMod.F90
clmtype.F90
decompMod.F90
driver.F90
initGridCellsMod.F90
initializeMod.F90
lnd2atmMod.F90
program_csm.F90
Progress
The coding and compiling have been
finished now.
Future Plan
Testing the coupled system in ARSC:
I input forcing + offline VIC
II input forcing + coupler + coupled VIC
We can compare these 2 simulation runs to
examine the coding accuracy