Example #1
0
    /// <summary>
    /// 计算光合速率(umol·m^-2·s^-1)
    /// </summary>
    /// <param name="PAR">光合有效辐射(umol·m^-2·s^-1)</param>
    /// <param name="type">环境因素(正常 or 缺氮 or 缺磷 or 缺钾)</param>
    /// <returns>光合速率(umol·m^-2·s^-1)</returns>
    public static double PhotosyntheticRate(double PAR, LightResponseType type = LightResponseType.NORMAL)
    {
        switch (type)
        {
        case LightResponseType.NORMAL: return(PhotosyntheticRate_Normal(PAR));

        case LightResponseType.N_LACK: return(PhotosyntheticRate_LackOfN(PAR));

        case LightResponseType.P_LACK: return(PhotosyntheticRate_LackOfP(PAR));

        case LightResponseType.K_LACK: return(PhotosyntheticRate_LackOfK(PAR));

        default: return(PhotosyntheticRate_Normal(PAR));
        }
    }
    /// <summary>
    /// 计算一定时间内一定面积累积的生物量(ug)
    /// </summary>
    /// <param name="duration">持续时间(s)</param>
    /// <param name="type">环境因素(正常 or 缺氮 or 缺磷 or 缺钾)</param>
    /// <returns>累积生物量(ug)</returns>
    public static double CumulativeBiomass(TreeModel treeModel, int duration, LightResponseType type = LightResponseType.NORMAL)
    {
        double CO2Absorption = 0.0;

        List <OrganIndex> organIndexes = treeModel.OrganIndexes;

        foreach (OrganIndex organIndex in organIndexes)
        {
            if (organIndex.Type != OrganType.Leaf)
            {
                continue;
            }

            /*
             * 叶片已经开始衰老
             * 不能进行光合作用
             */
            if (organIndex.Age > 12)
            {
                continue;
            }

            /*
             * 光合有效辐射,单位umol·m^-2·s^-1
             * 作用:用于计算光合速率
             */
            double PAR = PARRecption((organIndex as LeafIndex));

            /*
             * 光合速率,单位 umol·m^-2·s^-1
             * 作用:用于计算二氧化碳吸收量
             */
            double photosyntheticRate = LightResponse.PhotosyntheticRate(PAR, type);

            /*
             * 二氧化碳吸收量 单位 微克(ug)
             * 计算公式: 摩尔质量 * 光合速率 * 持续时间 * 面积
             * 作用:用于计算生物量
             */
            CO2Absorption += 44 * photosyntheticRate * duration * (organIndex as LeafIndex).LeafArea;
        }

        /*
         * 二氧化碳吸收量转换为生物量
         */
        return(CO2Absorption * 30.0 / 44.0);
    }
Example #3
0
    /// <summary>
    /// 深拷贝
    /// </summary>
    /// <param name="envirParams"></param>
    public void DepthCopy(EnvironmentParams envirParams)
    {
        DailyMaxTemperature = envirParams.DailyMaxTemperature;
        DailyMinTemperature = envirParams.DailyMinTemperature;

        DailyMaxRelativeHumidity = envirParams.DailyMaxRelativeHumidity;
        DailyMinRelativeHumidity = envirParams.DailyMinRelativeHumidity;

        WaterContent    = envirParams.WaterContent;
        NutrientType    = envirParams.NutrientType;
        TemperatureType = envirParams.TemperatureType;
        SunshineType    = envirParams.SunshineType;


        WindSpeed = envirParams.WindSpeed;

        HaveInsects = envirParams.HaveInsects;

        PhotosyntheticModel = envirParams.PhotosyntheticModel;

        ChangeDay = envirParams.ChangeDay;
    }
Example #4
0
    public static double BiomassCal(TreeModel treeModel)
    {
        double biomass = Normal(treeModel);

        LightResponseType type = treeModel.EnvironmentParams.NutrientType;

        switch (type)
        {
        case LightResponseType.N_LACK: biomass *= 0.8; break;

        case LightResponseType.P_LACK: biomass *= 0.75; break;

        case LightResponseType.K_LACK: biomass *= 0.94; break;

        case LightResponseType.ALL_LACK: biomass *= 0.65; break;
        }

        if (treeModel.EnvironmentParams.HaveInsects)
        {
            biomass = BiomassUnderInsected(treeModel, biomass);
        }

        return(biomass);
    }
Example #5
0
    /// <summary>
    /// 计算一段时间内的光合速率(umol·m^-2·s^-1)
    /// </summary>
    /// <param name="type">环境因素(正常 or 缺氮 or 缺磷 or 缺钾)</param>
    public static double PhotosyntheticRate(TreeModel treeModel, LightResponseType type = LightResponseType.NORMAL)
    {
        double PAR = FunctionSim.PARRecption_Mean(treeModel);

        return(PhotosyntheticRate(PAR, type));
    }