如何采用View Factor模型建模双面PV系统并计算总地面辐照度及背面辐照度
利用View Factor模型建模双面光伏系统并计算辐照度
核心概念
视角因子(View Factor,又称形状因子)用于描述一个表面发射的辐射能中,直接到达另一表面的比例。在双面光伏系统中,我们需要计算组件正/背面与天空、地面、相邻组件之间的视角因子,以此量化不同表面间的辐射交换关系。
建模步骤
1. 定义系统几何与环境参数
先明确所有关键参数:
- 光伏组件:尺寸(长、宽)、安装倾斜角、离地高度、表面反射率
- 阵列布局:行距、列距(多排场景)
- 环境参数:地面反照率、太阳位置(时角、天顶角)、直射辐照度(DNI)、散射辐照度(DHI)
2. 划分表面单元
将系统拆分为可计算视角因子的简单面元:
- 组件拆分为正面、背面两个独立面元
- 地面按组件投影区域、行间区域拆分(多排场景)
- 天空可简化为一个半球面元,或拆分不同天区的面元以提升计算精度
3. 计算视角因子
根据场景复杂度选择计算方法:
- 解析法:适用于简单几何(如平行矩形、垂直矩形),可采用交叉线法(Crossed Strings Method)或现成解析公式。利用视角因子的互易性($F_{ij} \times A_i = F_{ji} \times A_j$)验证计算结果的正确性。
- 数值法:适用于复杂阵列或非规则安装,常用蒙特卡洛法:随机从源面元发射射线,统计落到目标面元的比例,射线数量越多结果越精确。
- 需覆盖所有辐射交换路径:组件↔天空、组件↔地面、组件↔相邻组件。
总地面辐照度计算
地面总辐照度由三部分组成:
- 直射辐照度:$G_{dir, ground} = DNI \times \cos(\theta_z)$,其中$\theta_z$为太阳天顶角(水平地面时,地面法线与太阳入射方向的夹角)
- 散射辐照度:直接取水平散射辐照度$DHI$
- 反射辐照度:来自周围光伏组件或建筑的反射,计算公式为:$G_{ref, ground} = \sum (G_{module, total} \times \rho_{module} \times F_{module-ground})$,其中$G_{module, total}$是组件接收的总辐照度,$\rho_{module}$是组件反射率,$F_{module-ground}$是组件到地面的视角因子
总地面辐照度:$G_{ground, total} = G_{dir, ground} + DHI + G_{ref, ground}$
组件背面辐照度计算
组件背面的辐照度来自天空散射、地面反射、相邻组件反射三部分:
- 天空散射贡献:$G_{back, sky} = DHI \times F_{back-sky}$,其中$F_{back-sky}$是组件背面与天空的视角因子
- 地面反射贡献:$G_{back, ground} = G_{ground, total} \times \rho_{ground} \times F_{back-ground}$,其中$\rho_{ground}$是地面反照率,$F_{back-ground}$是组件背面与地面的视角因子
- 相邻组件反射贡献:$G_{back, module} = \sum (G_{neighbor, total} \times \rho_{module} \times F_{back-neighbor})$,其中$G_{neighbor, total}$是相邻组件接收的总辐照度,$F_{back-neighbor}$是组件背面与相邻组件的视角因子
总背面辐照度:$G_{back, total} = G_{back, sky} + G_{back, ground} + G_{back, module}$
简化场景示例
假设单排水平安装的双面组件,忽略相邻组件影响:
- 计算组件背面与天空的视角因子$F_{back-sky}$(可通过解析公式或蒙特卡洛法得到)
- 利用视角因子的完整性(所有方向的视角因子和为1),得到$F_{back-ground} = 1 - F_{back-sky}$
- 地面总辐照度$G_{ground, total} = DNI \times \cos(\theta_z) + DHI$
- 组件背面辐照度$G_{back, total} = DHI \times F_{back-sky} + G_{ground, total} \times \rho_{ground} \times F_{back-ground}$
蒙特卡洛法计算视角因子伪代码
import random import math def ray_intersects_rect(ray_origin, ray_dir, rect_points): # 实现射线与矩形面元的相交检测逻辑 # rect_points为矩形的四个顶点坐标 # 返回True/False表示是否相交 pass def calculate_view_factor(source_area, target_area, source_points, target_points): total_rays = 100000 hit_count = 0 for _ in range(total_rays): # 随机选择源面元上的点 x, y, z = random.choice(source_points) # 随机生成半球方向的射线 theta = random.uniform(0, math.pi/2) phi = random.uniform(0, 2 * math.pi) dx = math.sin(theta) * math.cos(phi) dy = math.sin(theta) * math.sin(phi) dz = math.cos(theta) # 检测射线是否击中目标面元 if ray_intersects_rect((x,y,z), (dx,dy,dz), target_points): hit_count += 1 # 返回视角因子 return hit_count / total_rays
内容的提问来源于stack exchange,提问作者girl of data
相关产品推荐
相关产品推荐

