Skip to content

Commit

Permalink
improve initializes in C
Browse files Browse the repository at this point in the history
  • Loading branch information
kongdd committed Feb 21, 2024
1 parent 0ded862 commit 38d81bf
Show file tree
Hide file tree
Showing 5 changed files with 359 additions and 349 deletions.
177 changes: 90 additions & 87 deletions src/vic/drivers/shared_all/src/initialize_energy.c
Original file line number Diff line number Diff line change
Expand Up @@ -26,96 +26,99 @@

#include <vic_driver_shared_all.h>

void initialize_energy1(energy_bal_struct *energy) {
extern option_struct options;
size_t index;

// Prognostic states
energy->AlbedoLake = 0.0;
energy->AlbedoOver = 0.0;
energy->AlbedoUnder = 0.0;
energy->Cs[0] = 0.0;
energy->Cs[1] = 0.0;
energy->frozen = false;
energy->kappa[0] = 0.0;
energy->kappa[1] = 0.0;
energy->Nfrost = 0;
energy->Nthaw = 0;
energy->T1_index = 0;
energy->Tcanopy = 0;
energy->Tcanopy_fbflag = false;
energy->Tcanopy_fbcount = 0;
energy->Tfoliage = 0.0;
energy->Tfoliage_fbflag = false;
energy->Tfoliage_fbcount = 0;
energy->Tsurf = 0.0;
energy->Tsurf_fbflag = false;
energy->Tsurf_fbcount = 0;
energy->unfrozen = 0.0;

for (index = 0; index < options.Nnode - 1; index++) {
energy->Cs_node[index] = 0.0;
energy->ice[index] = 0.0;
energy->kappa_node[index] = 0.0;
energy->moist[index] = 0.0;
energy->T[index] = 0.0;
energy->T_fbflag[index] = false;
energy->T_fbcount[index] = 0;
}
for (index = 0; index < MAX_FRONTS - 1; index++) {
energy->fdepth[index] = 0.0;
energy->tdepth[index] = 0.0;
}
// Fluxes
energy->advected_sensible = 0.0;
energy->advection = 0.0;
energy->AtmosError = 0.0;
energy->AtmosLatent = 0.0;
energy->AtmosLatentSub = 0.0;
energy->AtmosSensible = 0.0;
energy->canopy_advection = 0.0;
energy->canopy_latent = 0.0;
energy->canopy_latent_sub = 0.0;
energy->canopy_refreeze = 0.0;
energy->canopy_sensible = 0.0;
energy->deltaCC = 0.0;
energy->deltaH = 0.0;
energy->error = 0.0;
energy->fusion = 0.0;
energy->grnd_flux = 0.0;
energy->latent = 0.0;
energy->latent_sub = 0.0;
energy->longwave = 0.0;
energy->LongOverIn = 0.0;
energy->LongUnderIn = 0.0;
energy->LongUnderOut = 0.0;
energy->melt_energy = 0.0;
energy->NetLongAtmos = 0.0;
energy->NetLongOver = 0.0;
energy->NetLongUnder = 0.0;
energy->NetShortAtmos = 0.0;
energy->NetShortGrnd = 0.0;
energy->NetShortOver = 0.0;
energy->NetShortUnder = 0.0;
energy->out_long_canopy = 0.0;
energy->out_long_surface = 0.0;
energy->refreeze_energy = 0.0;
energy->sensible = 0.0;
energy->shortwave = 0.0;
energy->ShortOverIn = 0.0;
energy->ShortUnderIn = 0.0;
energy->snow_flux = 0.0;
}

/******************************************************************************
* @brief Initialize energy structure.
*****************************************************************************/
void
initialize_energy(energy_bal_struct **energy,
size_t Nveg)
{
extern option_struct options;

size_t band;
size_t index;
size_t veg;
void initialize_energy(energy_bal_struct **energy,
size_t Nveg) {
extern option_struct options;
size_t veg, band;

// initialize miscellaneous energy balance terms
for (veg = 0; veg <= Nveg; veg++) {
for (band = 0; band < options.SNOW_BAND; band++) {
// Prognostic states
energy[veg][band].AlbedoLake = 0.0;
energy[veg][band].AlbedoOver = 0.0;
energy[veg][band].AlbedoUnder = 0.0;
energy[veg][band].Cs[0] = 0.0;
energy[veg][band].Cs[1] = 0.0;
energy[veg][band].frozen = false;
energy[veg][band].kappa[0] = 0.0;
energy[veg][band].kappa[1] = 0.0;
energy[veg][band].Nfrost = 0;
energy[veg][band].Nthaw = 0;
energy[veg][band].T1_index = 0;
energy[veg][band].Tcanopy = 0;
energy[veg][band].Tcanopy_fbflag = false;
energy[veg][band].Tcanopy_fbcount = 0;
energy[veg][band].Tfoliage = 0.0;
energy[veg][band].Tfoliage_fbflag = false;
energy[veg][band].Tfoliage_fbcount = 0;
energy[veg][band].Tsurf = 0.0;
energy[veg][band].Tsurf_fbflag = false;
energy[veg][band].Tsurf_fbcount = 0;
energy[veg][band].unfrozen = 0.0;
for (index = 0; index < options.Nnode - 1; index++) {
energy[veg][band].Cs_node[index] = 0.0;
energy[veg][band].ice[index] = 0.0;
energy[veg][band].kappa_node[index] = 0.0;
energy[veg][band].moist[index] = 0.0;
energy[veg][band].T[index] = 0.0;
energy[veg][band].T_fbflag[index] = false;
energy[veg][band].T_fbcount[index] = 0;
}
for (index = 0; index < MAX_FRONTS - 1; index++) {
energy[veg][band].fdepth[index] = 0.0;
energy[veg][band].tdepth[index] = 0.0;
}
// Fluxes
energy[veg][band].advected_sensible = 0.0;
energy[veg][band].advection = 0.0;
energy[veg][band].AtmosError = 0.0;
energy[veg][band].AtmosLatent = 0.0;
energy[veg][band].AtmosLatentSub = 0.0;
energy[veg][band].AtmosSensible = 0.0;
energy[veg][band].canopy_advection = 0.0;
energy[veg][band].canopy_latent = 0.0;
energy[veg][band].canopy_latent_sub = 0.0;
energy[veg][band].canopy_refreeze = 0.0;
energy[veg][band].canopy_sensible = 0.0;
energy[veg][band].deltaCC = 0.0;
energy[veg][band].deltaH = 0.0;
energy[veg][band].error = 0.0;
energy[veg][band].fusion = 0.0;
energy[veg][band].grnd_flux = 0.0;
energy[veg][band].latent = 0.0;
energy[veg][band].latent_sub = 0.0;
energy[veg][band].longwave = 0.0;
energy[veg][band].LongOverIn = 0.0;
energy[veg][band].LongUnderIn = 0.0;
energy[veg][band].LongUnderOut = 0.0;
energy[veg][band].melt_energy = 0.0;
energy[veg][band].NetLongAtmos = 0.0;
energy[veg][band].NetLongOver = 0.0;
energy[veg][band].NetLongUnder = 0.0;
energy[veg][band].NetShortAtmos = 0.0;
energy[veg][band].NetShortGrnd = 0.0;
energy[veg][band].NetShortOver = 0.0;
energy[veg][band].NetShortUnder = 0.0;
energy[veg][band].out_long_canopy = 0.0;
energy[veg][band].out_long_surface = 0.0;
energy[veg][band].refreeze_energy = 0.0;
energy[veg][band].sensible = 0.0;
energy[veg][band].shortwave = 0.0;
energy[veg][band].ShortOverIn = 0.0;
energy[veg][band].ShortUnderIn = 0.0;
energy[veg][band].snow_flux = 0.0;
}
// initialize miscellaneous energy balance terms
for (veg = 0; veg <= Nveg; veg++) {
for (band = 0; band < options.SNOW_BAND; band++) {
initialize_energy1(&energy[veg][band]);
}
}
}
87 changes: 45 additions & 42 deletions src/vic/drivers/shared_all/src/initialize_snow.c
Original file line number Diff line number Diff line change
Expand Up @@ -26,51 +26,54 @@

#include <vic_driver_shared_all.h>

void initialize_snow1(snow_data_struct *snow) {
// Prognostic states
snow->albedo = 0.0;
snow->canopy_albedo = 0.0;
snow->coldcontent = 0.0;
snow->coverage = 0.0;
snow->density = 0.0;
snow->depth = 0.0;
snow->last_snow = 0;
snow->max_snow_depth = 0.0;
snow->MELTING = false;
snow->pack_temp = 0.0;
snow->pack_water = 0.0;
snow->snow = false;
snow->snow_canopy = 0.0;
snow->store_coverage = 0.0;
snow->store_snow = false;
snow->store_swq = 0.0;
snow->surf_temp = 0.0;
snow->surf_temp_fbcount = 0;
snow->surf_temp_fbflag = false;
snow->surf_water = 0.0;
snow->swq = 0.0;
snow->snow_distrib_slope = 0.0;
snow->tmp_int_storage = 0.0;

// Fluxes
snow->blowing_flux = 0.0;
snow->canopy_vapor_flux = 0.0;
snow->mass_error = 0.0;
snow->melt = 0.0;
snow->Qnet = 0.0;
snow->surface_flux = 0.0;
snow->transport = 0.0;
snow->vapor_flux = 0.0;
}

/******************************************************************************
* @brief Initialize the snow variable arrays for each new grid cell.
*****************************************************************************/
void
initialize_snow(snow_data_struct **snow,
size_t veg_num)
{
extern option_struct options;
size_t i, j;
void initialize_snow(snow_data_struct **snow,
size_t veg_num) {
extern option_struct options;
size_t i, j;

for (i = 0; i <= veg_num; i++) {
for (j = 0; j < options.SNOW_BAND; j++) {
// Prognostic states
snow[i][j].albedo = 0.0;
snow[i][j].canopy_albedo = 0.0;
snow[i][j].coldcontent = 0.0;
snow[i][j].coverage = 0.0;
snow[i][j].density = 0.0;
snow[i][j].depth = 0.0;
snow[i][j].last_snow = 0;
snow[i][j].max_snow_depth = 0.0;
snow[i][j].MELTING = false;
snow[i][j].pack_temp = 0.0;
snow[i][j].pack_water = 0.0;
snow[i][j].snow = false;
snow[i][j].snow_canopy = 0.0;
snow[i][j].store_coverage = 0.0;
snow[i][j].store_snow = false;
snow[i][j].store_swq = 0.0;
snow[i][j].surf_temp = 0.0;
snow[i][j].surf_temp_fbcount = 0;
snow[i][j].surf_temp_fbflag = false;
snow[i][j].surf_water = 0.0;
snow[i][j].swq = 0.0;
snow[i][j].snow_distrib_slope = 0.0;
snow[i][j].tmp_int_storage = 0.0;
// Fluxes
snow[i][j].blowing_flux = 0.0;
snow[i][j].canopy_vapor_flux = 0.0;
snow[i][j].mass_error = 0.0;
snow[i][j].melt = 0.0;
snow[i][j].Qnet = 0.0;
snow[i][j].surface_flux = 0.0;
snow[i][j].transport = 0.0;
snow[i][j].vapor_flux = 0.0;
}
for (i = 0; i <= veg_num; i++) {
for (j = 0; j < options.SNOW_BAND; j++) {
initialize_snow1(&snow[i][j]);
}
}
}
94 changes: 50 additions & 44 deletions src/vic/drivers/shared_all/src/initialize_soil.c
Original file line number Diff line number Diff line change
Expand Up @@ -26,54 +26,60 @@

#include <vic_driver_shared_all.h>

initialize_soil1(cell_data_struct *cell) {
extern option_struct options;

size_t lindex, frost_area;

// Prognostic states
cell->aero_resist[0] = 0.0;
cell->aero_resist[1] = 0.0;
cell->CLitter = 0.0;
cell->CInter = 0.0;
cell->CSlow = 0.0;

for (lindex = 0; lindex < options.Nlayer; lindex++) {
cell->layer[lindex].Cs = 0.0;
cell->layer[lindex].T = 0.0;
for (frost_area = 0; frost_area < options.Nfrost; frost_area++) {
cell->layer[lindex].ice[frost_area] = 0.0;
}
cell->layer[lindex].kappa = 0.0;
cell->layer[lindex].moist = 0.0;
cell->layer[lindex].phi = 0.0;
}

cell->rootmoist = 0.0;
cell->wetness = 0.0;
// Fluxes
cell->pot_evap = 0.0;
cell->baseflow = 0.0;
cell->runoff = 0.0;
cell->inflow = 0.0;
cell->RhLitter = 0.0;
cell->RhLitter2Atm = 0.0;
cell->RhInter = 0.0;
cell->RhSlow = 0.0;
cell->RhTot = 0.0;
for (lindex = 0; lindex < options.Nlayer; lindex++) {
cell->layer[lindex].esoil = 0.0;
cell->layer[lindex].transp = 0.0;
cell->layer[lindex].evap = 0.0;
}
}

/******************************************************************************
* @brief This routine initializes the soil variable arrays for each new
* grid cell.
*****************************************************************************/
void
initialize_soil(cell_data_struct **cell,
size_t veg_num)
{
extern option_struct options;

size_t veg, band, lindex, frost_area;
void initialize_soil(cell_data_struct **cell,
size_t veg_num) {
extern option_struct options;
size_t veg, band;

for (veg = 0; veg <= veg_num; veg++) {
for (band = 0; band < options.SNOW_BAND; band++) {
// Prognostic states
cell[veg][band].aero_resist[0] = 0.0;
cell[veg][band].aero_resist[1] = 0.0;
cell[veg][band].CLitter = 0.0;
cell[veg][band].CInter = 0.0;
cell[veg][band].CSlow = 0.0;
for (lindex = 0; lindex < options.Nlayer; lindex++) {
cell[veg][band].layer[lindex].Cs = 0.0;
cell[veg][band].layer[lindex].T = 0.0;
for (frost_area = 0; frost_area < options.Nfrost;
frost_area++) {
cell[veg][band].layer[lindex].ice[frost_area] = 0.0;
}
cell[veg][band].layer[lindex].kappa = 0.0;
cell[veg][band].layer[lindex].moist = 0.0;
cell[veg][band].layer[lindex].phi = 0.0;
}
cell[veg][band].rootmoist = 0.0;
cell[veg][band].wetness = 0.0;
// Fluxes
cell[veg][band].pot_evap = 0.0;
cell[veg][band].baseflow = 0.0;
cell[veg][band].runoff = 0.0;
cell[veg][band].inflow = 0.0;
cell[veg][band].RhLitter = 0.0;
cell[veg][band].RhLitter2Atm = 0.0;
cell[veg][band].RhInter = 0.0;
cell[veg][band].RhSlow = 0.0;
cell[veg][band].RhTot = 0.0;
for (lindex = 0; lindex < options.Nlayer; lindex++) {
cell[veg][band].layer[lindex].esoil = 0.0;
cell[veg][band].layer[lindex].transp = 0.0;
cell[veg][band].layer[lindex].evap = 0.0;
}
}
for (veg = 0; veg <= veg_num; veg++) {
for (band = 0; band < options.SNOW_BAND; band++) {
initialize_soil1(&cell[veg][band]);
}
}
}
Loading

0 comments on commit 38d81bf

Please sign in to comment.