SEIMS
SEIMS copied to clipboard
Changes of field version / field版本的修改
Field版本目前的修改
1 模型输出的修改
主要是在data模块增加了id=9999的情况,在河道汇流、泥沙模块也有增加了对id=9999的输出处理。如泥沙模块:
for (int i = 0; i < nReaches; i++) {
int reachIndex = it->second[i]; // index in the array, which is equal to reach ID
if (m_inputSubbsnID == 0 || m_inputSubbsnID == reachIndex || m_inputSubbsnID == 9999)
// for OpenMP version, all reaches will be executed,
// for MPI version, only the current reach will be executed.
SedChannelRouting(reachIndex);
2 去掉壤中流模块
因为壤中流相对较少,军志老师先把它去掉了(运行的时候不加载该模块)。对SSR_DA模块输出的重要参数VAR_SSUR(subsurface runoff)对SOL_WB模块做了注释,而对其他两个模块NutrSED和NutrMV暂时没有做处理。
3 修改cellwidth
修改了地下水模块(GWA_RE)和侵蚀模块(SERO_MUSLE)两个模块的cellwidth,换成了地块的面积,增加了GetUnitArea方法。
如在侵蚀模块,原来的面积:(可用搜索功能查找cellwidth以便查看修改的部分
)
if (FloatEqual(m_cellAreaKM, NODATA_VALUE)) {
m_cellAreaKM = m_cellWth * m_cellWth * 0.000001f;
m_cellAreaKM1 = 3.79f * pow(m_cellAreaKM, 0.7f);
m_cellAreaKM2 = 0.903f * pow(m_cellAreaKM, 0.017f);
}
改为:
m_cellAreaKM = GetUnitArea(i) * 0.000001f;
m_cellAreaKM1 = 3.79f * pow(m_cellAreaKM, 0.7f);
m_cellAreaKM2 = 0.903f * pow(m_cellAreaKM, 0.017f);
地下水模块也涉及到面积权重的处理:
perco /= sum_area; // curCellsNum; // mean mm
fPET /= sum_area; // curCellsNum;
revap /= sum_area; // curCellsNum;
4 IUH_OL模块的修改
坡面汇流模块(IUH_OL)增加了水塘的影响,field版本主要有两点修改:
(1)IUH参数认为是每个单元一天之内就到了河流,所以其IUH均为1,1,1;
(2)如果流路中存在水塘的单元认为是先流入水塘,水塘满了再流入下游水塘或者河流,新增加了两个参数,一个是每个单元的下游是河流还是水塘(VAR_FLOWPOND),另一个是水塘上下游的拓扑排序(VAR_PONDSORT)。
这一部分应为检查的重点。主要的修改是在line64,90,15
例如以下为跳过水塘:
#pragma omp for
for (int i = 0; i < m_nCells; i++) {
if (m_inputSubbsnID == 9999){ // field version
// skip ponds in this step and process them later
if (FloatEqual(CVT_INT(m_landUse[i]), LANDUSE_ID_POND)) { continue; }
// judge whether the overland flow of one cell flow to a river or a pond
if (m_flowPond[i] < 0) // to river
{
tmp_qsSub[CVT_INT(m_subbsnID[i])] += m_cellFlow[i][0]; //get new value
m_OL_Flow[i] = m_cellFlow[i][0];
m_OL_Flow[i] = m_OL_Flow[i] * m_TimeStep * 1000.f / GetUnitArea(i); // m3/s -> mm
}
else // to pond, add to down pond flow
{
m_cellFlow[CVT_INT(m_flowPond[i])][0] += m_cellFlow[i][0];
// if a field flow to pond, should update its m_OL_Flow???
// m_OL_Flow[i] = m_cellFlow[i][0];
// m_OL_Flow[i] = m_OL_Flow[i] * m_TimeStep * 1000.f / GetUnitArea(i); // m3/s -> mm
}
}
else { // raster version
tmp_qsSub[CVT_INT(m_subbsnID[i])] += m_cellFlow[i][0]; //get new value
m_OL_Flow[i] = m_cellFlow[i][0];
m_OL_Flow[i] = m_OL_Flow[i] * m_TimeStep * 1000.f / GetUnitArea(i); // m3/s -> mm
}
}