development of the regional arctic climate system model (racm) ---
DESCRIPTION
Development of the Regional Arctic Climate System Model (RACM) ---. Initial Implementation of VIC within CCSM4. Chunmei Zhu and Dennis P. Lettenmaier. Department of Civil and Environmental Engineering University of Washington December, 2008. - PowerPoint PPT PresentationTRANSCRIPT
Development of the Regional Arctic Climate System Model (RACM) ---
Initial Implementation of VIC within CCSM4
Department of Civil and Environmental Engineering University of Washington
December, 2008
Chunmei Zhu and Dennis P. Lettenmaier
Model features:
• multiple vegetation classes in each cell;
• energy and water budget closure at each time step;
• subgrid infiltration and runoff variability;
• and non-linear baseflow generation.
The VIC (Liang et al, 1994;1996) model is a grid-based land surface scheme designed both for inclusion in GCMs, and for use as a stand-alone macro-
scale hydrological model.
Hydrological Model ---
driverProvides the main VIC driver calling sequence
Coupler Receive
If (dorecv) then call csm_recv()
Get atmospheric state and fluxes from flux coupler
Coupler SendIf (dosend) call csm_send()
Send fields to flux coupler
VIC and flux coupler exchange the fields at hourly VIC running time step
Currently get atmospheric state and fluxes from met file: VICMET.INPUT
VICMODELProvide forcings to drive VIC model, and feedback the boundary conditions.
Project Progress --- •Jan 2008 – June 2008 : Working on connecting VIC with CPL6
• July 2007 – Sep 2007: working on connecting VIC with CPL7 in CCSM4_0618
• Oct. 2: RACM teleconference
• Oct. 2007 – Nov. 15, 2007: finishing the coding of replacing CLM with VIC in CCSM4_0618
• Nov. 15 - : updated the CCSM4_0618 to CCSM4_alpha38 (thanks for the help of Maslowski, Gabriele to obtain the code)
Project Progress ---
Finished the coding and compiling of VIC in CCSM4_alpha38 .
Now is debuging under F configuration (ATM/LND).
Current Status
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
Future Plan
VIC Offline Hydrologocal Simulations of the Terrestrial Arctic Regime (1979-1999)
Pan-Arctic Drainage Basins / mask file
(Su et al, 2005)
Input forcing ---
CCSM CPL7 – VIC land Surface Model
• In CCSM4, the communication process is separated from the component integration process. All communication processes are taken over by Cpl7 and the components runs by themselves. So our coding work is mainly to replace the CLM with VIC. We expect most of coding doesn’t involve the Cpl7.
• Extract VIC part in MM5-VIC coupling system to replace CLM because VIC in MM5 is in image mode.
• Current VIC doesn’t have the capacity for parallel running.
• VIC runs at hourly time step. The coupling interval is hourly too. VIC produces its own output at hourly time step.
• The current VIC version in MM5 is VIC4.0.4. We plan to update the VIC to newer version (VIC4.1.0) after the coupling finished
component exporting fields to CPL
Importing fields from CPL for LND
preparing fields for LND on CPL
a2x_ax
x2l_ll
a2x_aa
CPLIDMap
Rearrange
CPLLNDID
CPLATMID
Rearrange
X2l_lx
From He’ JuanXiong
LAND
Data flow of the coupling process in LND component
export data: l2x_ll
x2l_ll
atm_a2l
clm_a2l
call lnd_import_mct
call clm_mapa2l
import data : x2l_ll
atm_l2a
l2x_ll
call clm_mapl2a
call lnd_export_mct
clm_l2a
Initialization CLM Land Component
Lnd_init_mct
Clm_init0
Initialize clump and processor decomposition Read land grid set ldomain =~ adomain
Clm_init1Initialize time constant variablesRead Initial dataInitialize time variant data for initial runInitialize accumulation variables
Clm_init2
Initialize surface albedoDetermine gridcell averaged properties to send to atm
If (iamin_LNDID .and. lnd_present) then call
Run CLM Land Model
Lnd_run_mctIf (lnd_present .and. lndrun_alarm .and. iamin_LNDIND) then call
DO: Loop over time steps in coupling interval
ENDDO
Clm_run1 Clm_run2Land model run1 phaseDetermine gridcell averaged properties to sent to atm
Write outputWrite restart/initial files routing
CLM_INIT0
Module modified:
DecompInit_glcp Initialize clump and processor decomposition
To remove the landunit, column, pft subgrid features in CLM
Module removed:
UrbanInput
Pftconrd
Surfrd
Initialize urban model input
Read list of PFTs
Read surface dataset
CLM_INIT1
Subroutines added:
Allomem (from MM5-VIC)Initialize VIC run control variables, allocate memory to DIST_PRCP_STRUCT
Inivic (from MM5-VIC)Read in initial atmos fluxes, soil, veg., snowband param, initial conditions (by offline VIC running), pass them into DIST_PRCP_STRUCT
Modules modified:
InitGridCellsMod.F90Initialize sub-grid mapping for each land grid cellTo remove the subgrid features in CLMModules to be removed:
InitClmtype
DGVMEcosystemDynini
EcosystemDyiniDustini
UrbanInitTimeConstInitTimeConst
Rtmini InitAccFlds CNiniTimeVar
Pftdyn_init Ndepdyn_init InitCASAPhenology
CLM_INIT2
Module modified:
Clm_map2gcell Determine gridcell averaged properties to send to atm
To remove the subgrid features in CLM
Module removed:
InitSurfAlbInitialize albedo
VIC has its own albedo initialization based on vegetation type
CLM_RUN1 --- Driver1
DO: Loop over clumps
DO: Loop over local gridcells
ENDDO
ENDDO
VICMODEL
Provide forcings to drive VIC model, and feedback the boundary conditions.
CLM_RUN2 --- Driver2
Rout surface and subsurface runoff into rivers
ROUT
Implement VIC routing model
into RACM
! land -> atmosphere state variables structure
type lnd2atm_type real(r8), pointer :: t_rad(:) !radiative temperature (Kelvin) real(r8), pointer :: t_ref2m(:) !2m surface air temperature (Kelvin) real(r8), pointer :: q_ref2m(:) !2m 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) 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 HF (W/m**2) [+ to atm] real(r8), pointer :: eflx_sh_tot(:) !total sensible HF (W/m**2) [+ to atm] real(r8), pointer :: eflx_lwrad_out(:) !IR (longwave) radiation (W/m**2) real(r8), pointer :: qflx_evap_tot(:)!qflx_evap(_soi + _veg) + qflx_tran_veg real(r8), pointer :: fsa(:) !solar rad absorbed (total) (W/m**2) real(r8), pointer :: nee(:) !net CO2 flux (kg C/m**2/s) [+ to atm] #if (defined DUST || defined PROGSSLT ) real(r8), pointer :: ram1(:) !aerodynamical resistance (s/m) real(r8), pointer :: fv(:) !friction velocity (m/s) (for dust model) #endif #if (defined DUST ) real(r8), pointer :: flxdst(:,:) !dust flux (size bins) #endif end type lnd2atm_type
VIC output variables to CPL*clm_l2a%albd(g,1) = clm_l2a%albd(g,2) = clm_l2a%albd(g,2) = clm_l2a
%albd(g,2) = out_data ->albedo
clm_l2a%qflx_evap_tot = out_data->evap
* clm_l2a%taux = clm_l2a%tauy = out_data->wind * 1.3 * out_data->wind * ( 0.6 + 0.07 * out_data->wind ) / 1000
clm_l2a%fsa = out_data->net_short
clm_l2a%eflx_lwrad_out = out_data->rad_temp * out_data->rad_temp * out_data->rad_temp * out_data->rad_temp * 5.67 / 100000000
clm_l2a%eflx_lh_tot = out_data->latent
clm_l2a%eflx_sh_tot = out_data->sensible
clm_l2a%q_ref2m = out_data->surf_humid
clm_l2a%t_ref2m = out_data->surf_temp
clm_l2a%t_rad = out_data->rad_temp
clm_l2a%h2osno = out_data->snow_depth[0]/100
! atmosphere -> land variables structuretype atm2lnd_type real(r8), pointer :: forc_t(:) !atmospheric temperature (Kelvin) real(r8), pointer :: forc_u(:) !atm wind speed, east direction (m/s) real(r8), pointer :: forc_v(:) !atm wind speed, north direction (m/s) real(r8), pointer :: forc_wind(:) !atmospheric wind speed real(r8), pointer :: forc_q(:) !atmospheric specific humidity (kg/kg) real(r8), pointer :: forc_hgt(:) !atmospheric reference height (m) real(r8), pointer :: forc_hgt_u(:) !obs height of wind [m] (new) real(r8), pointer :: forc_hgt_t(:) !obs height of temperature [m] (new) real(r8), pointer :: forc_hgt_q(:) !obs height of humidity [m] (new) real(r8), pointer :: forc_pbot(:) !atmospheric pressure (Pa) real(r8), pointer :: forc_th(:) !atm potential temperature (Kelvin) real(r8), pointer :: forc_vp(:) !atmospheric vapor pressure (Pa) real(r8), pointer :: forc_rho(:) !density (kg/m**3) !KO real(r8), pointer :: forc_rh(:) !atmospheric relative humidity (%) !KO real(r8), pointer :: forc_psrf(:) !surface pressure (Pa) real(r8), pointer :: forc_pco2(:) !CO2 partial pressure (Pa) real(r8), pointer :: forc_lwrad(:) !downwrd IR longwave radiation (W/m**2) real(r8), pointer :: forc_solad(:,:) !direct beam radiation (numrad) !(vis=forc_sols , nir=forc_soll ) real(r8), pointer :: forc_solai(:,:) !diffuse radiation (numrad) !(vis=forc_solsd, nir=forc_solld) real(r8), pointer :: forc_solar(:) !incident solar radiation real(r8), pointer :: forc_rain(:) !rain rate [mm/s] real(r8), pointer :: forc_snow(:) !snow rate [mm/s] real(r8), pointer :: forc_ndep(:) !nitrogen deposition rate (gN/m2/s) !KO real(r8), pointer :: rainf(:) !ALMA rain+snow [mm/s] !KO ! 4/14/05: PET ! Adding isotope code real(r8), pointer :: forc_pc13o2(:) !C13O2 partial pressure (Pa) real(r8), pointer :: forc_po2(:) !O2 partial pressure (Pa)
end type atm2lnd_type
Modified Modules and Subroutines
MM5-VIC
wrf_allomem.c allocate memory to DIST_PRCP_STRUCT
wrf_init_global_vic.c Initialize VIC run control variables
wrf_initialize_vic_model.c Read in initial atmos fluxes, soil, veg., snowband param, initial conditions (by offline VIC running), pass them into DIST_PRCP_STRUCT
wrf_vic_band.c Perform VIC calling for each cell
wrf_vic_interface.c Provide forcings to drive VIC model, and feedback the boundary conditions.
Land Surface model in CCSM
Modified Modules and Subroutines
clm_map2gcell
( clm_atmlnd.F90 )
Determine gridcell averaged properties to send to atm. To remove the subgrid features in CLM.
clm_compMod.F90 Remove original CLM albedo initialization
controlMod.F90
Initialize CLM run control variables. Output two more running date variables (start_ymd, start_tod)
decompMod.F90 Land surface descomposition into a clumped data structure. To remove subgrid features in CLM
decompInitMod.F90
Initialize clump and processor decomposition. To remove the landunit, column, pft subgrid features in CLM
driver.F90 The main CLM driver calling module. To replace CLM driver calling subroutines with VIC subroutines.
initGridCellsMod.F90 Initialize sub-grid mapping for each land grid cell.To remove the subgrid features in CLM
initializeMod.F90 Perform land model initialization. To replace CLM initialization subroutines with VIC ones.
Target to finish debugging VIC in CCSM4 system under F configuration by the end of January, 2009
Future Work Schedule
Target to finish testing the coupled system by compare 2 simulation runs (offline VIC running and coupled VIC running with CPL7) by March, 2009
Target to finish routing model implementation in
CCSM4 system by May, 2009