Page 99 - 《应用声学》2023年第1期
P. 99

第 42 卷 第 1 期       周益清等: 三维声传播模型 BELLHOP3D 的信息传递接口并行优化                                       95


             其中,c 即 c(x, z, y) 是声速;(x, y, z) 即 (x(s), y(s),     ㇍⌋1 ˙ᛡBELLHOP3Dᝠካܦԍ
             z(s)) 是射线轨迹;(ξ, η, ζ) 即 (ξ(s), η(s), ζ(s)) 是射      䗉ޛ: ๒ภဗܒˁሏஙηৌ(*.env *.bty ኎ᣥК஡͈)
             线方位角。                                              䗉࠰: ܦԍ P (Ntheta, NRz, NRr)
                                                                 1: function BellhopCoreSerial
                 BELLHOP3D中包含几种不同的几何波束。波
                                                                 2:  P(Ntheta, NRz, NRr) ← 0
             束宽度与射线管成比例伸缩,波束围绕中心射线构                              3:  for ibeta=1, Nbeta do
                                                                 4:    for ialpha=1, Nalpha do
             造,并根据以声线为中心的坐标(s, m, n)定义,这里                        5:      function Influence3DGeoGaussianCart
                                                                 6:        for ir=1, NRr do
             s是沿声线的弧长,(m, n)是从场点到中心声线的法                          7:          for itheta=1, Ntheta do
             向距离,最小波束宽度为一个波长。其中,帽形波束                             8:            for iz=1, NRz do
                                                                 9:               ᝠካAmp
             可以表示为                                              10:               P(itheta,iz,ir)←P(itheta,iz,ir) + Amp
                                                                11:            end for
                  u hat (s, m, n)                               12:          end for
                     1    iωτ(s)  [L 1 (s) − n] [L 2 (s) − m]   13:        end for
               = √        e                         ,   (7)     14:      end function
                    |Q(s)|           L 1 (s)L 2 (s)             15:    end for
             其 中, L 1 和 L 2 是 射 线 管 的 宽 度, |n| < L 1 且          16:  end for
                                                                17:  return P
             |m| < L 2 ,这意味着波束在射线管外消失。                          18: end function
                 使用高斯波束通常可以获得更高的精度。各点
             的声场是附近多个波束的贡献之和,而不仅仅是帽

             形波束提供的两个波束。这种对多个波束的积分可                            2 BELLHOP3D并行算法
             以平滑焦散,还可以将能量泄漏到阴影区域。几何
                                                                   使用 MPI 对 BELLHOP3D 进行并行优化。开
             高斯波束的公式为
                                                               设 nprocs 个进程,让它们同时读取输入文件中的环
                                      1    iωτ(s)
                u Gaussian (s, m, n) = √  e                    境信息,然后将不同的方位角分配给不同的进程,
                                     |Q(s)|
                                                
                                       2
                                [     ] [      ] 2             即,将对 ibeta 的循环分配给 nprocs 个进程,每个进
                                   n        m
                                                
                                                
                                                
                             1 L 1 (s)   L 2 (s)             程处理约 Nbeta/nprocs 个方位角的声线。将最后
                     × exp  −                       .   (8)
                           2      L 1 (s)L 2 (s)             的结果归约求和到 0 号进程的 rdcP 变量,然后写入
                                                
                                                
                                                
                                                               输出文件。
             由于高斯波束精度更高,所以在后续的数值实验中                                并行算法如下所示:
             使用高斯波束进行计算。                                        ㇍⌋2 ࣳᛡBELLHOP3Dᝠካܦԍ
             1.3 离散剖分与实现过程                                      䗉ޛ: ๒ภဗܒˁሏஙηৌ(*.env *.bty ኎ᣥК஡͈)ὊMPIᤉሮηৌ
                                                                䗉࠰: ॆጞර֗ܦԍrdcP(Ntheta, NRz, NRr)
                 BELLHOP3D 可以自行设定声源发射的俯仰                         1: function BellhopCoreParallel
                                                                 2:  P(Ntheta, NRz, NRr) ← 0
             角 α 和方位角 β 的范围以及相应的数量 Nalpha 和                      3:  rdcP(Ntheta, NRz, NRr) ← 0
                                                                 4:  for iloop=1, ceil(Nbeta/nprocs) do
             Nbeta,接收点的柱坐标 (r, θ, z) 的范围和离散点                     5:    ibetaº (iloop-1)* nprocs+myrank+1
             数 NRr、Ntheta 和 NRz。在程序中主要使用 BELL-                          (FORTRAN༯ѓՖ1ष൓)
                                                                 6:    for ialpha=1, Nalpha do
             HOPCORE 函数进行计算,按照 Nbeta、Nalpha、                     7:      function Influence3DGeoGaussianCart
                                                                 8:        for ir=1, NRr do
             NRr、Ntheta、NRz 的顺序循环计算每一条声线在                        9:          for itheta=1, Ntheta do
             接收点的声压Amp,然后求和得到对应接收点的总                            10:            for iz=1, NRz do
                                                                11:              ᝠካ Amp
             声压P。                                               12:               P(itheta,iz,ir)←P(itheta,iz,ir) + Amp
                                                                13:            end for
                 需要指出,BELLHOP3D针对N × 2D和3D的                     14:          end for
                                                                15:        end for
             各种不同模式的计算都包含在方位角 ibeta 的循环                         16:      end function
             中(代码中有关 AzimuthalAngle的循环),因此本方                    17:    end for
                                                                18:  end for
             法对各种计算模式都实现了并行,本文仅以全三维                             19:  rank0: rdcP ← MPIREDUCE(P)
                                                                20:  return rdcP
             的高斯波束为例。具体算法如下:                                    21: end function
   94   95   96   97   98   99   100   101   102   103   104