コード例 #1
0
 def uz_mult(self,):
     # Loop the receivers
     self.uz_s = []
     uz_rec = np.zeros((self.receivers.coord.shape[0], len(self.controls.freq)), dtype = complex)
     for jrec, r_coord in enumerate(self.receivers.coord):
         for jel, el in enumerate(self.theta):
             material_m = PorousAbsorber(self.air, self.controls)
             material_m.miki(resistivity=self.material.resistivity)
             material_m.layer_over_rigid(thickness = self.material.thickness, theta = el)
             for jf, k0 in enumerate(self.controls.k0):
                 kx, ky, kz = sph2cart(k0, np.pi/2-el, self.phi[jel])
                 k_veci = np.array([kx, ky, kz])
                 k_vecr = np.array([kx, ky, -kz])
                 uz_rec[jrec, jf] += (kz/k0) * (np.exp(1j * np.dot(k_veci, r_coord)) -\
                 material_m.Vp[jf] * np.exp(1j * np.dot(k_vecr, r_coord)))
     self.uz_s.append(uz_rec)
コード例 #2
0
 def p_fps(self,):
     # Loop the receivers
     self.pres_s = []
     pres_rec = np.zeros((self.receivers.coord.shape[0], len(self.controls.freq)), dtype = complex)
     for jrec, r_coord in enumerate(self.receivers.coord):
         # r = np.linalg.norm(r_coord) # distance source-receiver
         for jf, k0 in enumerate(self.controls.k0):
             # kx = k0 * np.cos(self.phi) * np.sin(self.theta)
             # ky = k0 * np.sin(self.phi) * np.sin(self.theta)
             # kz = k0 * np.cos(self.theta)
             kx, ky, kz = sph2cart(k0, np.pi/2-self.theta, self.phi)
             k_veci = np.array([-kx, -ky, -kz])
             k_vecr = np.array([-kx, -ky, kz])
             # print('Incident wave: ({})'.format(k_veci/k0))
             # print('Reflected wave: ({})'.format(k_vecr/k0))
             pres_rec[jrec, jf] = np.exp(-1j * np.dot(k_veci, r_coord)) +\
                 self.material.Vp[jf] * np.exp(-1j * np.dot(k_vecr, r_coord))
     self.pres_s.append(pres_rec)
コード例 #3
0
 def uz_fps(self,):
     # Loop the receivers
     self.uz_s = []
     uz_rec = np.zeros((self.receivers.coord.shape[0], len(self.controls.freq)), dtype = complex)
     for jrec, r_coord in enumerate(self.receivers.coord):
         # r = np.linalg.norm(r_coord) # distance source-receiver
         for jf, k0 in enumerate(self.controls.k0):
             # kx = k0 * np.cos(self.phi) * np.sin(self.theta)
             # ky = k0 * np.sin(self.phi) * np.sin(self.theta)
             # kz = k0 * np.cos(self.theta)
             kx, ky, kz = sph2cart(k0, np.pi/2-self.theta, self.phi)
             k_veci = np.array([kx, ky, -kz])
             k_vecr = np.array([kx, ky, kz])
             uz_rec[jrec, jf] = (-kz/k0) * (np.exp(-1j * np.dot(k_veci, r_coord)) -\
                 self.material.Vp[jf] * np.exp(-1j * np.dot(k_vecr, r_coord)))
             # uz_rec[jrec, jf] = (kz/k0) *(np.exp(1j * k_vec[2] * r_coord[2]) -\
             #     self.material.Vp[jf] * np.exp(-1j * k_vec[2] * r_coord[2]))*\
             #     (np.exp(1j * k_vec[0] * r_coord[0]))*\
             #     (np.exp(1j * k_vec[1] * r_coord[1]))
     self.uz_s.append(uz_rec)
コード例 #4
0
 def pev_fps(self, kx_e = [0], ky_e = [0], Ae = [0]):
     '''
     Method calculates the pressure field due to a propagating incident, a progating reflected
     and a set of evanescent plane waves specified by the vectors kx_e, ky_e and Ae
     '''
     # Loop the receivers
     self.pres_s = []
     pres_rec = np.zeros((self.receivers.coord.shape[0], len(self.controls.freq)), dtype = complex)
     for jrec, r_coord in enumerate(self.receivers.coord):
         # r = np.linalg.norm(r_coord) # distance source-receiver
         for jf, k0 in enumerate(self.controls.k0):
             # Calculate propagating wave-numbers
             kx, ky, kz = sph2cart(k0, np.pi/2-self.theta, self.phi)
             k_veci_p = np.array([kx, ky, kz])
             k_vecr_p = np.array([kx, ky, -kz])
             # Evanescent wave-numbers
             kz_e = (kx_e**2 + ky_e**2 - k0**2)**0.5
             p_ev = np.sum(Ae * (np.exp(-kz_e * r_coord[2])) * (np.exp(1j * (kx_e * r_coord[0] + ky_e * r_coord[1]))))
             pres_rec[jrec, jf] = np.exp(1j * np.dot(k_veci_p, r_coord)) +\
                 self.material.Vp[jf] * np.exp(1j * np.dot(k_vecr_p, r_coord)) + p_ev
     self.pres_s.append(pres_rec)
コード例 #5
0
    def arc(self, radii=20.0, n_recs=36):
        """" Initializes a receiver arc.

        The method will overwrite self.coord to be a matrix where each line
        gives a 3D coordinate for each receiver

        Inputs:
            radii - radius of the receiver
            n_recs - number of receivers in the arc

        Parameters
        ----------
            radii : float
                radius of the arc of receivers
            n_recs : int
                number of receivers in the arc
        """
        # angles
        thetas = np.linspace(0, np.pi, n_recs)
        # initialize receiver list in memory
        self.coord = np.zeros((n_recs, 3), dtype=np.float32)
        self.coord[:, 0], self.coord[:, 1], self.coord[:, 2] =\
            sph2cart(radii, thetas, 0)