设置如下算例。
分两步,第一步是setup,第二步是solve。第一步的目的就是得到P等。
setup
entry point:
aggregation.py L212 in smoothed_aggregation_solver
将用户参数装填到每个层级里
例如strength就是一个list
最外层放入B和A和BH
开始循环(_extend_hierarchy)
_extend_hierarchy
aggregation L297
计算SOC(strength of connection)矩阵。跳转后与ruge_stuben的完全一样,故此处我们略去。
进行standard_aggregation(核心!)
standard_aggregation
aggregate.py(注意非aggregation.py) L12
做一些准备。例如index_type=int
num_rows=矩阵大小
Cpts[i] = root node of aggregate i
Tj
amg_core.standard_aggregation是核心
实际计算
返回Tj, Cpts, num_aggregates
后续的一些处理。基本上就是all nodes aggregated 那个情况。
返回到_extend_hierachy
这里注意AggOp只取了第一个返回值。即那个只有01的矩阵。
AggOp有N行(N为未知数个数),aggregate列(也就是团聚个数)。
每行仅有一个1。
总共加起来有N个1。它的值只有0和1。
如下图,涂绿色的是1,其余是0。
然后通过AggOp建立T。T就是试验性的P。和P唯一差别就是还没有smooth。
fit_candidate
in aggregation/tentative.py L9
此步目的为建立试验性的延拓算子T
最后 smooth P
smooth之后不再是每行只有一个1,而是原本的1被拆分为几个小数,且含有负数。
_extend_hierarchy结束
全流程结束。