220 likes | 381 Views
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.
E N D
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
Hydrological Model --- • 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.
Project Progress --- • Jan 2008 – June 2008 : Working on connecting VIC with CPL6 driver Provides the main VIC driver calling sequence Coupler Receive VIC and flux coupler exchange the fields at hourly VIC running time step Get atmospheric state and fluxes from flux coupler If (dorecv) then call csm_recv() Currently get atmospheric state and fluxes from met file: VICMET.INPUT Provide forcings to drive VIC model, and feedback the boundary conditions. VICMODEL Coupler Send If (dosend) call csm_send() Send fields to flux coupler
Project Progress --- • 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)
Current Status Finished the coding and compiling of VIC in CCSM4_alpha38 . Now is debuging under F configuration (ATM/LND). 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
Input forcing --- VIC Offline Hydrologocal Simulations of the Terrestrial Arctic Regime (1979-1999) (Su et al, 2005) Pan-Arctic Drainage Basins / mask file
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
CPLATMID a2x_aa component exporting fields to CPL Rearrange a2x_ax Map CPLID preparing fields for LND on CPL X2l_lx Rearrange x2l_ll Importing fields from CPL for LND CPLLNDID LAND From He’ JuanXiong
x2l_ll call lnd_import_mct atm_a2l call clm_mapa2l clm_a2l clm_l2a callclm_mapl2a atm_l2a call lnd_export_mct l2x_ll Data flow of the coupling process in LND component export data: l2x_ll import data :x2l_ll
Initialization CLM Land Component If (iamin_LNDID .and. lnd_present) then call Lnd_init_mct Clm_init0 Clm_init1 Clm_init2 Initialize time constant variables Read Initial data Initialize time variant data for initial run Initialize accumulation variables Initialize clump and processor decomposition Read land grid set ldomain =~ adomain Initialize surface albedo Determine gridcell averaged properties to send to atm
Run CLM Land Model If (lnd_present .and. lndrun_alarm .and. iamin_LNDIND) then call Lnd_run_mct DO: Loop over time steps in coupling interval Clm_run1 Clm_run2 Land model run1 phase Determine gridcell averaged properties to sent to atm Write output Write restart/initial files routing ENDDO
CLM_INIT0 Module modified: DecompInit_glcp Initialize clump and processor decomposition To remove the landunit, column, pft subgrid features in CLM Module removed: UrbanInput Initialize urban model input Pftconrd Read list of PFTs Surfrd Read surface dataset
CLM_INIT1 Initialize VIC run control variables, allocate memory to DIST_PRCP_STRUCT Allomem (from MM5-VIC) Subroutines added: Read in initial atmos fluxes, soil, veg., snowband param, initial conditions (by offline VIC running), pass them into DIST_PRCP_STRUCT Inivic (from MM5-VIC) Modules modified: Initialize sub-grid mapping for each land grid cell To remove the subgrid features in CLM InitGridCellsMod.F90 Modules to be removed: InitClmtype EcosystemDyini UrbanInitTimeConst Dustini InitTimeConst DGVMEcosystemDynini InitAccFlds CNiniTimeVar Rtmini InitCASAPhenology Ndepdyn_init Pftdyn_init
CLM_INIT2 Module modified: Determine gridcell averaged properties to send to atm Clm_map2gcell To remove the subgrid features in CLM Module removed: Initialize albedo InitSurfAlb VIC has its own albedo initialization based on vegetation type
CLM_RUN1 --- Driver1 DO: Loop over clumps DO:Loop over local gridcells VICMODEL Provide forcings to drive VIC model, and feedback the boundary conditions. ENDDO ENDDO
CLM_RUN2 --- Driver2 Implement VIC routing model into RACM ROUT Rout surface and subsurface runoff into rivers
!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_typereal(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
Modified Modules and Subroutines Land Surface model in CCSM
Future Work Schedule Target to finish debugging VIC in CCSM4 system under F configuration by the end of January, 2009 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