SEIMS icon indicating copy to clipboard operation
SEIMS copied to clipboard

Changes of field version / field版本的修改

Open qualitydog opened this issue 5 years ago • 0 comments

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
        }
    }

qualitydog avatar Dec 16 '18 13:12 qualitydog