From 74b66a2395e441958658c921e394591ecfb77ce8 Mon Sep 17 00:00:00 2001 From: Craig Warren Date: Mon, 13 Dec 2021 16:01:31 +0000 Subject: [PATCH] Update copyright to 2021 --- CREDITS | 2 +- gprMax/constants.pxd | 2 +- gprMax/constants.py | 2 +- gprMax/cython/fields_updates_dispersive.pyx | 1049 +++++++++++++++++ gprMax/fields_outputs.py | 2 +- gprMax/fields_updates_ext.pyx | 2 +- gprMax/fields_updates_gpu.py | 2 +- gprMax/fractals.py | 2 +- gprMax/fractals_generate_ext.pyx | 2 +- gprMax/geometry_outputs.py | 2 +- gprMax/geometry_outputs_ext.pyx | 2 +- gprMax/geometry_primitives_ext.pyx | 2 +- gprMax/gprMax.py | 2 +- gprMax/grid.py | 2 +- gprMax/input_cmd_funcs.py | 2 +- gprMax/input_cmds_file.py | 2 +- gprMax/input_cmds_geometry.py | 2 +- gprMax/input_cmds_multiuse.py | 2 +- gprMax/input_cmds_singleuse.py | 2 +- gprMax/materials.py | 4 +- gprMax/model_build_run.py | 2 +- gprMax/optimisation_taguchi.py | 2 +- gprMax/pml.py | 2 +- .../pml_updates_electric_HORIPML_ext.pyx | 2 +- .../pml_updates_electric_HORIPML_gpu.py | 2 +- .../pml_updates_electric_MRIPML_ext.pyx | 2 +- .../pml_updates_electric_MRIPML_gpu.py | 2 +- .../pml_updates_magnetic_HORIPML_ext.pyx | 2 +- .../pml_updates_magnetic_HORIPML_gpu.py | 2 +- .../pml_updates_magnetic_MRIPML_ext.pyx | 2 +- .../pml_updates_magnetic_MRIPML_gpu.py | 2 +- gprMax/receivers.py | 2 +- gprMax/snapshots.py | 2 +- gprMax/snapshots_ext.pyx | 2 +- gprMax/snapshots_gpu.py | 2 +- gprMax/source_updates_gpu.py | 2 +- gprMax/sources.py | 2 +- gprMax/utilities.py | 4 +- gprMax/waveforms.py | 2 +- gprMax/yee_cell_build_ext.pyx | 2 +- gprMax/yee_cell_setget_rigid_ext.pxd | 2 +- gprMax/yee_cell_setget_rigid_ext.pyx | 2 +- setup.py | 2 +- tests/benchmarking/plot_benchmark.py | 2 +- tests/test_experimental.py | 2 +- tests/test_models.py | 2 +- tools/Paraview macros/gprMax_info.py | 2 +- tools/convert_png2h5.py | 2 +- tools/inputfile_old2new.py | 2 +- tools/outputfiles_merge.py | 2 +- tools/plot_Ascan.py | 2 +- tools/plot_Bscan.py | 2 +- tools/plot_antenna_params.py | 2 +- tools/plot_source_wave.py | 2 +- user_libs/antennas/GSSI.py | 2 +- user_libs/antennas/MALA.py | 2 +- .../optimisation_taguchi/fitness_functions.py | 2 +- .../optimisation_taguchi/plot_results.py | 2 +- 58 files changed, 1108 insertions(+), 59 deletions(-) create mode 100644 gprMax/cython/fields_updates_dispersive.pyx diff --git a/CREDITS b/CREDITS index 832fab6e..591b29c2 100644 --- a/CREDITS +++ b/CREDITS @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020: The University of Edinburgh +# Copyright (C) 2015-2021: The University of Edinburgh # Authors: Craig Warren and Antonis Giannopoulos # # This is the official list of entities and people who have contributed to gprMax. diff --git a/gprMax/constants.pxd b/gprMax/constants.pxd index f105ebdb..73214d05 100644 --- a/gprMax/constants.pxd +++ b/gprMax/constants.pxd @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020: The University of Edinburgh +# Copyright (C) 2015-2021: The University of Edinburgh # Authors: Craig Warren and Antonis Giannopoulos # # This file is part of gprMax. diff --git a/gprMax/constants.py b/gprMax/constants.py index ddbb5dca..9a9789a4 100644 --- a/gprMax/constants.py +++ b/gprMax/constants.py @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020: The University of Edinburgh +# Copyright (C) 2015-2021: The University of Edinburgh # Authors: Craig Warren and Antonis Giannopoulos # # This file is part of gprMax. diff --git a/gprMax/cython/fields_updates_dispersive.pyx b/gprMax/cython/fields_updates_dispersive.pyx new file mode 100644 index 00000000..1624041a --- /dev/null +++ b/gprMax/cython/fields_updates_dispersive.pyx @@ -0,0 +1,1049 @@ +# Copyright (C) 2015-2021: The University of Edinburgh +# Authors: Craig Warren, Antonis Giannopoulos, and John Hartley +# +# This file is part of gprMax. +# +# gprMax is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# gprMax is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with gprMax. If not, see . + +import numpy as np +cimport numpy as np + +from cython.parallel import prange + +cdef extern from "complex.h" nogil: + double creal(double complex z) + float crealf(float complex z) + + +############################################################### +# Electric field updates - dispersive materials - multipole A # +############################################################### + + +cpdef void update_electric_dispersive_multipole_A_double_real( + int nx, + int ny, + int nz, + int nthreads, + int maxpoles, + double[:, ::1] updatecoeffsE, + double[:, ::1] updatecoeffsdispersive, + np.uint32_t[:, :, :, ::1] ID, + double[:, :, :, ::1] Tx, + double[:, :, :, ::1] Ty, + double[:, :, :, ::1] Tz, + double[:, :, ::1] Ex, + double[:, :, ::1] Ey, + double[:, :, ::1] Ez, + double[:, :, ::1] Hx, + double[:, :, ::1] Hy, + double[:, :, ::1] Hz + ): + """This function updates the electric field components when dispersive materials (with multiple poles) are present. + + Args: + nx, ny, nz (int): Grid size in cells + nthreads (int): Number of threads to use + maxpoles (int): Maximum number of poles + updatecoeffs, T, ID, E, H (memoryviews): Access to update coeffients, temporary, ID and field component arrays + """ + + cdef Py_ssize_t i, j, k, pole + cdef int material + cdef float phi = 0 + + # Ex component + if ny != 1 or nz != 1: + for i in prange(0, nx, nogil=True, schedule='static', num_threads=nthreads): + for j in range(1, ny): + for k in range(1, nz): + material = ID[0, i, j, k] + phi = 0 + for pole in range(maxpoles): + + phi = phi + updatecoeffsdispersive[material, pole * 3] * Tx[pole, i, j, k] + + Tx[pole, i, j, k] = updatecoeffsdispersive[material, 1 + (pole * 3)] * Tx[pole, i, j, k] + updatecoeffsdispersive[material, 2 + (pole * 3)] * Ex[i, j, k] + Ex[i, j, k] = updatecoeffsE[material, 0] * Ex[i, j, k] + updatecoeffsE[material, 2] * (Hz[i, j, k] - Hz[i, j - 1, k]) - updatecoeffsE[material, 3] * (Hy[i, j, k] - Hy[i, j, k - 1]) - updatecoeffsE[material, 4] * phi + + # Ey component + if nx != 1 or nz != 1: + for i in prange(1, nx, nogil=True, schedule='static', num_threads=nthreads): + for j in range(0, ny): + for k in range(1, nz): + material = ID[1, i, j, k] + phi = 0 + for pole in range(maxpoles): + + phi = phi + updatecoeffsdispersive[material, pole * 3] * Ty[pole, i, j, k] + + Ty[pole, i, j, k] = updatecoeffsdispersive[material, 1 + (pole * 3)] * Ty[pole, i, j, k] + updatecoeffsdispersive[material, 2 + (pole * 3)] * Ey[i, j, k] + Ey[i, j, k] = updatecoeffsE[material, 0] * Ey[i, j, k] + updatecoeffsE[material, 3] * (Hx[i, j, k] - Hx[i, j, k - 1]) - updatecoeffsE[material, 1] * (Hz[i, j, k] - Hz[i - 1, j, k]) - updatecoeffsE[material, 4] * phi + + # Ez component + if nx != 1 or ny != 1: + for i in prange(1, nx, nogil=True, schedule='static', num_threads=nthreads): + for j in range(1, ny): + for k in range(0, nz): + material = ID[2, i, j, k] + phi = 0 + for pole in range(maxpoles): + + phi = phi + updatecoeffsdispersive[material, pole * 3] * Tz[pole, i, j, k] + + Tz[pole, i, j, k] = updatecoeffsdispersive[material, 1 + (pole * 3)] * Tz[pole, i, j, k] + updatecoeffsdispersive[material, 2 + (pole * 3)] * Ez[i, j, k] + Ez[i, j, k] = updatecoeffsE[material, 0] * Ez[i, j, k] + updatecoeffsE[material, 1] * (Hy[i, j, k] - Hy[i - 1, j, k]) - updatecoeffsE[material, 2] * (Hx[i, j, k] - Hx[i, j - 1, k]) - updatecoeffsE[material, 4] * phi + +cpdef void update_electric_dispersive_multipole_A_float_real( + int nx, + int ny, + int nz, + int nthreads, + int maxpoles, + float[:, ::1] updatecoeffsE, + float[:, ::1] updatecoeffsdispersive, + np.uint32_t[:, :, :, ::1] ID, + float[:, :, :, ::1] Tx, + float[:, :, :, ::1] Ty, + float[:, :, :, ::1] Tz, + float[:, :, ::1] Ex, + float[:, :, ::1] Ey, + float[:, :, ::1] Ez, + float[:, :, ::1] Hx, + float[:, :, ::1] Hy, + float[:, :, ::1] Hz + ): + """This function updates the electric field components when dispersive materials (with multiple poles) are present. + + Args: + nx, ny, nz (int): Grid size in cells + nthreads (int): Number of threads to use + maxpoles (int): Maximum number of poles + updatecoeffs, T, ID, E, H (memoryviews): Access to update coeffients, temporary, ID and field component arrays + """ + + cdef Py_ssize_t i, j, k, pole + cdef int material + cdef float phi = 0 + + # Ex component + if ny != 1 or nz != 1: + for i in prange(0, nx, nogil=True, schedule='static', num_threads=nthreads): + for j in range(1, ny): + for k in range(1, nz): + material = ID[0, i, j, k] + phi = 0 + for pole in range(maxpoles): + + phi = phi + updatecoeffsdispersive[material, pole * 3] * Tx[pole, i, j, k] + + Tx[pole, i, j, k] = updatecoeffsdispersive[material, 1 + (pole * 3)] * Tx[pole, i, j, k] + updatecoeffsdispersive[material, 2 + (pole * 3)] * Ex[i, j, k] + Ex[i, j, k] = updatecoeffsE[material, 0] * Ex[i, j, k] + updatecoeffsE[material, 2] * (Hz[i, j, k] - Hz[i, j - 1, k]) - updatecoeffsE[material, 3] * (Hy[i, j, k] - Hy[i, j, k - 1]) - updatecoeffsE[material, 4] * phi + + # Ey component + if nx != 1 or nz != 1: + for i in prange(1, nx, nogil=True, schedule='static', num_threads=nthreads): + for j in range(0, ny): + for k in range(1, nz): + material = ID[1, i, j, k] + phi = 0 + for pole in range(maxpoles): + + phi = phi + updatecoeffsdispersive[material, pole * 3] * Ty[pole, i, j, k] + + Ty[pole, i, j, k] = updatecoeffsdispersive[material, 1 + (pole * 3)] * Ty[pole, i, j, k] + updatecoeffsdispersive[material, 2 + (pole * 3)] * Ey[i, j, k] + Ey[i, j, k] = updatecoeffsE[material, 0] * Ey[i, j, k] + updatecoeffsE[material, 3] * (Hx[i, j, k] - Hx[i, j, k - 1]) - updatecoeffsE[material, 1] * (Hz[i, j, k] - Hz[i - 1, j, k]) - updatecoeffsE[material, 4] * phi + + # Ez component + if nx != 1 or ny != 1: + for i in prange(1, nx, nogil=True, schedule='static', num_threads=nthreads): + for j in range(1, ny): + for k in range(0, nz): + material = ID[2, i, j, k] + phi = 0 + for pole in range(maxpoles): + + phi = phi + updatecoeffsdispersive[material, pole * 3] * Tz[pole, i, j, k] + + Tz[pole, i, j, k] = updatecoeffsdispersive[material, 1 + (pole * 3)] * Tz[pole, i, j, k] + updatecoeffsdispersive[material, 2 + (pole * 3)] * Ez[i, j, k] + Ez[i, j, k] = updatecoeffsE[material, 0] * Ez[i, j, k] + updatecoeffsE[material, 1] * (Hy[i, j, k] - Hy[i - 1, j, k]) - updatecoeffsE[material, 2] * (Hx[i, j, k] - Hx[i, j - 1, k]) - updatecoeffsE[material, 4] * phi + +cpdef void update_electric_dispersive_multipole_A_double_complex( + int nx, + int ny, + int nz, + int nthreads, + int maxpoles, + double[:, ::1] updatecoeffsE, + double complex[:, ::1] updatecoeffsdispersive, + np.uint32_t[:, :, :, ::1] ID, + double complex[:, :, :, ::1] Tx, + double complex[:, :, :, ::1] Ty, + double complex[:, :, :, ::1] Tz, + double[:, :, ::1] Ex, + double[:, :, ::1] Ey, + double[:, :, ::1] Ez, + double[:, :, ::1] Hx, + double[:, :, ::1] Hy, + double[:, :, ::1] Hz + ): + """This function updates the electric field components when dispersive materials (with multiple poles) are present. + + Args: + nx, ny, nz (int): Grid size in cells + nthreads (int): Number of threads to use + maxpoles (int): Maximum number of poles + updatecoeffs, T, ID, E, H (memoryviews): Access to update coeffients, temporary, ID and field component arrays + """ + + cdef Py_ssize_t i, j, k, pole + cdef int material + cdef float phi = 0 + + # Ex component + if ny != 1 or nz != 1: + for i in prange(0, nx, nogil=True, schedule='static', num_threads=nthreads): + for j in range(1, ny): + for k in range(1, nz): + material = ID[0, i, j, k] + phi = 0 + for pole in range(maxpoles): + + phi = phi + creal(updatecoeffsdispersive[material, pole * 3]) * creal(Tx[pole, i, j, k]) + + Tx[pole, i, j, k] = updatecoeffsdispersive[material, 1 + (pole * 3)] * Tx[pole, i, j, k] + updatecoeffsdispersive[material, 2 + (pole * 3)] * Ex[i, j, k] + Ex[i, j, k] = updatecoeffsE[material, 0] * Ex[i, j, k] + updatecoeffsE[material, 2] * (Hz[i, j, k] - Hz[i, j - 1, k]) - updatecoeffsE[material, 3] * (Hy[i, j, k] - Hy[i, j, k - 1]) - updatecoeffsE[material, 4] * phi + + # Ey component + if nx != 1 or nz != 1: + for i in prange(1, nx, nogil=True, schedule='static', num_threads=nthreads): + for j in range(0, ny): + for k in range(1, nz): + material = ID[1, i, j, k] + phi = 0 + for pole in range(maxpoles): + + phi = phi + creal(updatecoeffsdispersive[material, pole * 3]) * creal(Ty[pole, i, j, k]) + + Ty[pole, i, j, k] = updatecoeffsdispersive[material, 1 + (pole * 3)] * Ty[pole, i, j, k] + updatecoeffsdispersive[material, 2 + (pole * 3)] * Ey[i, j, k] + Ey[i, j, k] = updatecoeffsE[material, 0] * Ey[i, j, k] + updatecoeffsE[material, 3] * (Hx[i, j, k] - Hx[i, j, k - 1]) - updatecoeffsE[material, 1] * (Hz[i, j, k] - Hz[i - 1, j, k]) - updatecoeffsE[material, 4] * phi + + # Ez component + if nx != 1 or ny != 1: + for i in prange(1, nx, nogil=True, schedule='static', num_threads=nthreads): + for j in range(1, ny): + for k in range(0, nz): + material = ID[2, i, j, k] + phi = 0 + for pole in range(maxpoles): + + phi = phi + creal(updatecoeffsdispersive[material, pole * 3]) * creal(Tz[pole, i, j, k]) + + Tz[pole, i, j, k] = updatecoeffsdispersive[material, 1 + (pole * 3)] * Tz[pole, i, j, k] + updatecoeffsdispersive[material, 2 + (pole * 3)] * Ez[i, j, k] + Ez[i, j, k] = updatecoeffsE[material, 0] * Ez[i, j, k] + updatecoeffsE[material, 1] * (Hy[i, j, k] - Hy[i - 1, j, k]) - updatecoeffsE[material, 2] * (Hx[i, j, k] - Hx[i, j - 1, k]) - updatecoeffsE[material, 4] * phi + +cpdef void update_electric_dispersive_multipole_A_float_complex( + int nx, + int ny, + int nz, + int nthreads, + int maxpoles, + float[:, ::1] updatecoeffsE, + float complex[:, ::1] updatecoeffsdispersive, + np.uint32_t[:, :, :, ::1] ID, + float complex[:, :, :, ::1] Tx, + float complex[:, :, :, ::1] Ty, + float complex[:, :, :, ::1] Tz, + float[:, :, ::1] Ex, + float[:, :, ::1] Ey, + float[:, :, ::1] Ez, + float[:, :, ::1] Hx, + float[:, :, ::1] Hy, + float[:, :, ::1] Hz + ): + """This function updates the electric field components when dispersive materials (with multiple poles) are present. + + Args: + nx, ny, nz (int): Grid size in cells + nthreads (int): Number of threads to use + maxpoles (int): Maximum number of poles + updatecoeffs, T, ID, E, H (memoryviews): Access to update coeffients, temporary, ID and field component arrays + """ + + cdef Py_ssize_t i, j, k, pole + cdef int material + cdef float phi = 0 + + # Ex component + if ny != 1 or nz != 1: + for i in prange(0, nx, nogil=True, schedule='static', num_threads=nthreads): + for j in range(1, ny): + for k in range(1, nz): + material = ID[0, i, j, k] + phi = 0 + for pole in range(maxpoles): + + phi = phi + crealf(updatecoeffsdispersive[material, pole * 3]) * crealf(Tx[pole, i, j, k]) + + Tx[pole, i, j, k] = updatecoeffsdispersive[material, 1 + (pole * 3)] * Tx[pole, i, j, k] + updatecoeffsdispersive[material, 2 + (pole * 3)] * Ex[i, j, k] + Ex[i, j, k] = updatecoeffsE[material, 0] * Ex[i, j, k] + updatecoeffsE[material, 2] * (Hz[i, j, k] - Hz[i, j - 1, k]) - updatecoeffsE[material, 3] * (Hy[i, j, k] - Hy[i, j, k - 1]) - updatecoeffsE[material, 4] * phi + + # Ey component + if nx != 1 or nz != 1: + for i in prange(1, nx, nogil=True, schedule='static', num_threads=nthreads): + for j in range(0, ny): + for k in range(1, nz): + material = ID[1, i, j, k] + phi = 0 + for pole in range(maxpoles): + + phi = phi + crealf(updatecoeffsdispersive[material, pole * 3]) * crealf(Ty[pole, i, j, k]) + + Ty[pole, i, j, k] = updatecoeffsdispersive[material, 1 + (pole * 3)] * Ty[pole, i, j, k] + updatecoeffsdispersive[material, 2 + (pole * 3)] * Ey[i, j, k] + Ey[i, j, k] = updatecoeffsE[material, 0] * Ey[i, j, k] + updatecoeffsE[material, 3] * (Hx[i, j, k] - Hx[i, j, k - 1]) - updatecoeffsE[material, 1] * (Hz[i, j, k] - Hz[i - 1, j, k]) - updatecoeffsE[material, 4] * phi + + # Ez component + if nx != 1 or ny != 1: + for i in prange(1, nx, nogil=True, schedule='static', num_threads=nthreads): + for j in range(1, ny): + for k in range(0, nz): + material = ID[2, i, j, k] + phi = 0 + for pole in range(maxpoles): + + phi = phi + crealf(updatecoeffsdispersive[material, pole * 3]) * crealf(Tz[pole, i, j, k]) + + Tz[pole, i, j, k] = updatecoeffsdispersive[material, 1 + (pole * 3)] * Tz[pole, i, j, k] + updatecoeffsdispersive[material, 2 + (pole * 3)] * Ez[i, j, k] + Ez[i, j, k] = updatecoeffsE[material, 0] * Ez[i, j, k] + updatecoeffsE[material, 1] * (Hy[i, j, k] - Hy[i - 1, j, k]) - updatecoeffsE[material, 2] * (Hx[i, j, k] - Hx[i, j - 1, k]) - updatecoeffsE[material, 4] * phi + + + +############################################################### +# Electric field updates - dispersive materials - multipole B # +############################################################### + + +cpdef void update_electric_dispersive_multipole_B_double_real( + int nx, + int ny, + int nz, + int nthreads, + int maxpoles, + double[:, ::1] updatecoeffsdispersive, + np.uint32_t[:, :, :, ::1] ID, + double[:, :, :, ::1] Tx, + double[:, :, :, ::1] Ty, + double[:, :, :, ::1] Tz, + double[:, :, ::1] Ex, + double[:, :, ::1] Ey, + double[:, :, ::1] Ez + ): + """This function updates a temporary dispersive material array when disperisive materials (with multiple poles) are present. + + Args: + nx, ny, nz (int): Grid size in cells + nthreads (int): Number of threads to use + maxpoles (int): Maximum number of poles + updatecoeffs, T, ID, E (memoryviews): Access to update coeffients, temporary, ID and field component arrays + """ + + cdef Py_ssize_t i, j, k, pole + cdef int material + + # Ex component + if ny != 1 or nz != 1: + for i in prange(0, nx, nogil=True, schedule='static', num_threads=nthreads): + for j in range(1, ny): + for k in range(1, nz): + material = ID[0, i, j, k] + for pole in range(maxpoles): + Tx[pole, i, j, k] = Tx[pole, i, j, k] - updatecoeffsdispersive[material, 2 + (pole * 3)] * Ex[i, j, k] + + # Ey component + if nx != 1 or nz != 1: + for i in prange(1, nx, nogil=True, schedule='static', num_threads=nthreads): + for j in range(0, ny): + for k in range(1, nz): + material = ID[1, i, j, k] + for pole in range(maxpoles): + Ty[pole, i, j, k] = Ty[pole, i, j, k] - updatecoeffsdispersive[material, 2 + (pole * 3)] * Ey[i, j, k] + + # Ez component + if nx != 1 or ny != 1: + for i in prange(1, nx, nogil=True, schedule='static', num_threads=nthreads): + for j in range(1, ny): + for k in range(0, nz): + material = ID[2, i, j, k] + for pole in range(maxpoles): + Tz[pole, i, j, k] = Tz[pole, i, j, k] - updatecoeffsdispersive[material, 2 + (pole * 3)] * Ez[i, j, k] + + +cpdef void update_electric_dispersive_multipole_B_float_real( + int nx, + int ny, + int nz, + int nthreads, + int maxpoles, + float[:, ::1] updatecoeffsdispersive, + np.uint32_t[:, :, :, ::1] ID, + float[:, :, :, ::1] Tx, + float[:, :, :, ::1] Ty, + float[:, :, :, ::1] Tz, + float[:, :, ::1] Ex, + float[:, :, ::1] Ey, + float[:, :, ::1] Ez + ): + """This function updates a temporary dispersive material array when disperisive materials (with multiple poles) are present. + + Args: + nx, ny, nz (int): Grid size in cells + nthreads (int): Number of threads to use + maxpoles (int): Maximum number of poles + updatecoeffs, T, ID, E (memoryviews): Access to update coeffients, temporary, ID and field component arrays + """ + + cdef Py_ssize_t i, j, k, pole + cdef int material + + # Ex component + if ny != 1 or nz != 1: + for i in prange(0, nx, nogil=True, schedule='static', num_threads=nthreads): + for j in range(1, ny): + for k in range(1, nz): + material = ID[0, i, j, k] + for pole in range(maxpoles): + Tx[pole, i, j, k] = Tx[pole, i, j, k] - updatecoeffsdispersive[material, 2 + (pole * 3)] * Ex[i, j, k] + + # Ey component + if nx != 1 or nz != 1: + for i in prange(1, nx, nogil=True, schedule='static', num_threads=nthreads): + for j in range(0, ny): + for k in range(1, nz): + material = ID[1, i, j, k] + for pole in range(maxpoles): + Ty[pole, i, j, k] = Ty[pole, i, j, k] - updatecoeffsdispersive[material, 2 + (pole * 3)] * Ey[i, j, k] + + # Ez component + if nx != 1 or ny != 1: + for i in prange(1, nx, nogil=True, schedule='static', num_threads=nthreads): + for j in range(1, ny): + for k in range(0, nz): + material = ID[2, i, j, k] + for pole in range(maxpoles): + Tz[pole, i, j, k] = Tz[pole, i, j, k] - updatecoeffsdispersive[material, 2 + (pole * 3)] * Ez[i, j, k] + + +cpdef void update_electric_dispersive_multipole_B_double_complex( + int nx, + int ny, + int nz, + int nthreads, + int maxpoles, + double complex[:, ::1] updatecoeffsdispersive, + np.uint32_t[:, :, :, ::1] ID, + double complex[:, :, :, ::1] Tx, + double complex[:, :, :, ::1] Ty, + double complex[:, :, :, ::1] Tz, + double[:, :, ::1] Ex, + double[:, :, ::1] Ey, + double[:, :, ::1] Ez + ): + """This function updates a temporary dispersive material array when disperisive materials (with multiple poles) are present. + + Args: + nx, ny, nz (int): Grid size in cells + nthreads (int): Number of threads to use + maxpoles (int): Maximum number of poles + updatecoeffs, T, ID, E (memoryviews): Access to update coeffients, temporary, ID and field component arrays + """ + + cdef Py_ssize_t i, j, k, pole + cdef int material + + # Ex component + if ny != 1 or nz != 1: + for i in prange(0, nx, nogil=True, schedule='static', num_threads=nthreads): + for j in range(1, ny): + for k in range(1, nz): + material = ID[0, i, j, k] + for pole in range(maxpoles): + Tx[pole, i, j, k] = Tx[pole, i, j, k] - updatecoeffsdispersive[material, 2 + (pole * 3)] * Ex[i, j, k] + + # Ey component + if nx != 1 or nz != 1: + for i in prange(1, nx, nogil=True, schedule='static', num_threads=nthreads): + for j in range(0, ny): + for k in range(1, nz): + material = ID[1, i, j, k] + for pole in range(maxpoles): + Ty[pole, i, j, k] = Ty[pole, i, j, k] - updatecoeffsdispersive[material, 2 + (pole * 3)] * Ey[i, j, k] + + # Ez component + if nx != 1 or ny != 1: + for i in prange(1, nx, nogil=True, schedule='static', num_threads=nthreads): + for j in range(1, ny): + for k in range(0, nz): + material = ID[2, i, j, k] + for pole in range(maxpoles): + Tz[pole, i, j, k] = Tz[pole, i, j, k] - updatecoeffsdispersive[material, 2 + (pole * 3)] * Ez[i, j, k] + + +cpdef void update_electric_dispersive_multipole_B_float_complex( + int nx, + int ny, + int nz, + int nthreads, + int maxpoles, + float complex[:, ::1] updatecoeffsdispersive, + np.uint32_t[:, :, :, ::1] ID, + float complex[:, :, :, ::1] Tx, + float complex[:, :, :, ::1] Ty, + float complex[:, :, :, ::1] Tz, + float[:, :, ::1] Ex, + float[:, :, ::1] Ey, + float[:, :, ::1] Ez + ): + """This function updates a temporary dispersive material array when disperisive materials (with multiple poles) are present. + + Args: + nx, ny, nz (int): Grid size in cells + nthreads (int): Number of threads to use + maxpoles (int): Maximum number of poles + updatecoeffs, T, ID, E (memoryviews): Access to update coeffients, temporary, ID and field component arrays + """ + + cdef Py_ssize_t i, j, k, pole + cdef int material + + # Ex component + if ny != 1 or nz != 1: + for i in prange(0, nx, nogil=True, schedule='static', num_threads=nthreads): + for j in range(1, ny): + for k in range(1, nz): + material = ID[0, i, j, k] + for pole in range(maxpoles): + Tx[pole, i, j, k] = Tx[pole, i, j, k] - updatecoeffsdispersive[material, 2 + (pole * 3)] * Ex[i, j, k] + + # Ey component + if nx != 1 or nz != 1: + for i in prange(1, nx, nogil=True, schedule='static', num_threads=nthreads): + for j in range(0, ny): + for k in range(1, nz): + material = ID[1, i, j, k] + for pole in range(maxpoles): + Ty[pole, i, j, k] = Ty[pole, i, j, k] - updatecoeffsdispersive[material, 2 + (pole * 3)] * Ey[i, j, k] + + # Ez component + if nx != 1 or ny != 1: + for i in prange(1, nx, nogil=True, schedule='static', num_threads=nthreads): + for j in range(1, ny): + for k in range(0, nz): + material = ID[2, i, j, k] + for pole in range(maxpoles): + Tz[pole, i, j, k] = Tz[pole, i, j, k] - updatecoeffsdispersive[material, 2 + (pole * 3)] * Ez[i, j, k] + + + + +################################################################# +# Electric field updates - dispersive materials - single pole A # +################################################################# + + +cpdef void update_electric_dispersive_1pole_A_double_real( + int nx, + int ny, + int nz, + int nthreads, + int maxpoles, + double[:, ::1] updatecoeffsE, + double[:, ::1] updatecoeffsdispersive, + np.uint32_t[:, :, :, ::1] ID, + double[:, :, :, ::1] Tx, + double[:, :, :, ::1] Ty, + double[:, :, :, ::1] Tz, + double[:, :, ::1] Ex, + double[:, :, ::1] Ey, + double[:, :, ::1] Ez, + double[:, :, ::1] Hx, + double[:, :, ::1] Hy, + double[:, :, ::1] Hz + ): + """This function updates the electric field components when dispersive materials (with 1 pole) are present. + + Args: + nx, ny, nz (int): Grid size in cells + nthreads (int): Number of threads to use + maxpoles (int): Maximum number of poles + updatecoeffs, T, ID, E, H (memoryviews): Access to update coeffients, temporary, ID and field component arrays + """ + + cdef Py_ssize_t i, j, k + cdef int material + cdef float phi = 0 + + # Ex component + if ny != 1 or nz != 1: + for i in prange(0, nx, nogil=True, schedule='static', num_threads=nthreads): + for j in range(1, ny): + for k in range(1, nz): + material = ID[0, i, j, k] + + phi = updatecoeffsdispersive[material, 0] * Tx[0, i, j, k] + + Tx[0, i, j, k] = updatecoeffsdispersive[material, 1] * Tx[0, i, j, k] + updatecoeffsdispersive[material, 2] * Ex[i, j, k] + Ex[i, j, k] = updatecoeffsE[material, 0] * Ex[i, j, k] + updatecoeffsE[material, 2] * (Hz[i, j, k] - Hz[i, j - 1, k]) - updatecoeffsE[material, 3] * (Hy[i, j, k] - Hy[i, j, k - 1]) - updatecoeffsE[material, 4] * phi + + # Ey component + if nx != 1 or nz != 1: + for i in prange(1, nx, nogil=True, schedule='static', num_threads=nthreads): + for j in range(0, ny): + for k in range(1, nz): + material = ID[1, i, j, k] + + phi = updatecoeffsdispersive[material, 0] * Ty[0, i, j, k] + + Ty[0, i, j, k] = updatecoeffsdispersive[material, 1] * Ty[0, i, j, k] + updatecoeffsdispersive[material, 2] * Ey[i, j, k] + Ey[i, j, k] = updatecoeffsE[material, 0] * Ey[i, j, k] + updatecoeffsE[material, 3] * (Hx[i, j, k] - Hx[i, j, k - 1]) - updatecoeffsE[material, 1] * (Hz[i, j, k] - Hz[i - 1, j, k]) - updatecoeffsE[material, 4] * phi + + # Ez component + if nx != 1 or ny != 1: + for i in prange(1, nx, nogil=True, schedule='static', num_threads=nthreads): + for j in range(1, ny): + for k in range(0, nz): + material = ID[2, i, j, k] + + phi = updatecoeffsdispersive[material, 0] * Tz[0, i, j, k] + + Tz[0, i, j, k] = updatecoeffsdispersive[material, 1] * Tz[0, i, j, k] + updatecoeffsdispersive[material, 2] * Ez[i, j, k] + Ez[i, j, k] = updatecoeffsE[material, 0] * Ez[i, j, k] + updatecoeffsE[material, 1] * (Hy[i, j, k] - Hy[i - 1, j, k]) - updatecoeffsE[material, 2] * (Hx[i, j, k] - Hx[i, j - 1, k]) - updatecoeffsE[material, 4] * phi + + +cpdef void update_electric_dispersive_1pole_A_float_real( + int nx, + int ny, + int nz, + int nthreads, + int maxpoles, + float[:, ::1] updatecoeffsE, + float[:, ::1] updatecoeffsdispersive, + np.uint32_t[:, :, :, ::1] ID, + float[:, :, :, ::1] Tx, + float[:, :, :, ::1] Ty, + float[:, :, :, ::1] Tz, + float[:, :, ::1] Ex, + float[:, :, ::1] Ey, + float[:, :, ::1] Ez, + float[:, :, ::1] Hx, + float[:, :, ::1] Hy, + float[:, :, ::1] Hz + ): + """This function updates the electric field components when dispersive materials (with 1 pole) are present. + + Args: + nx, ny, nz (int): Grid size in cells + nthreads (int): Number of threads to use + maxpoles (int): Maximum number of poles + updatecoeffs, T, ID, E, H (memoryviews): Access to update coeffients, temporary, ID and field component arrays + """ + + cdef Py_ssize_t i, j, k + cdef int material + cdef float phi = 0 + + # Ex component + if ny != 1 or nz != 1: + for i in prange(0, nx, nogil=True, schedule='static', num_threads=nthreads): + for j in range(1, ny): + for k in range(1, nz): + material = ID[0, i, j, k] + + phi = updatecoeffsdispersive[material, 0] * Tx[0, i, j, k] + + Tx[0, i, j, k] = updatecoeffsdispersive[material, 1] * Tx[0, i, j, k] + updatecoeffsdispersive[material, 2] * Ex[i, j, k] + Ex[i, j, k] = updatecoeffsE[material, 0] * Ex[i, j, k] + updatecoeffsE[material, 2] * (Hz[i, j, k] - Hz[i, j - 1, k]) - updatecoeffsE[material, 3] * (Hy[i, j, k] - Hy[i, j, k - 1]) - updatecoeffsE[material, 4] * phi + + # Ey component + if nx != 1 or nz != 1: + for i in prange(1, nx, nogil=True, schedule='static', num_threads=nthreads): + for j in range(0, ny): + for k in range(1, nz): + material = ID[1, i, j, k] + + phi = updatecoeffsdispersive[material, 0] * Ty[0, i, j, k] + + Ty[0, i, j, k] = updatecoeffsdispersive[material, 1] * Ty[0, i, j, k] + updatecoeffsdispersive[material, 2] * Ey[i, j, k] + Ey[i, j, k] = updatecoeffsE[material, 0] * Ey[i, j, k] + updatecoeffsE[material, 3] * (Hx[i, j, k] - Hx[i, j, k - 1]) - updatecoeffsE[material, 1] * (Hz[i, j, k] - Hz[i - 1, j, k]) - updatecoeffsE[material, 4] * phi + + # Ez component + if nx != 1 or ny != 1: + for i in prange(1, nx, nogil=True, schedule='static', num_threads=nthreads): + for j in range(1, ny): + for k in range(0, nz): + material = ID[2, i, j, k] + + phi = updatecoeffsdispersive[material, 0] * Tz[0, i, j, k] + + Tz[0, i, j, k] = updatecoeffsdispersive[material, 1] * Tz[0, i, j, k] + updatecoeffsdispersive[material, 2] * Ez[i, j, k] + Ez[i, j, k] = updatecoeffsE[material, 0] * Ez[i, j, k] + updatecoeffsE[material, 1] * (Hy[i, j, k] - Hy[i - 1, j, k]) - updatecoeffsE[material, 2] * (Hx[i, j, k] - Hx[i, j - 1, k]) - updatecoeffsE[material, 4] * phi + + +cpdef void update_electric_dispersive_1pole_A_double_complex( + int nx, + int ny, + int nz, + int nthreads, + int maxpoles, + double[:, ::1] updatecoeffsE, + double complex[:, ::1] updatecoeffsdispersive, + np.uint32_t[:, :, :, ::1] ID, + double complex[:, :, :, ::1] Tx, + double complex[:, :, :, ::1] Ty, + double complex[:, :, :, ::1] Tz, + double[:, :, ::1] Ex, + double[:, :, ::1] Ey, + double[:, :, ::1] Ez, + double[:, :, ::1] Hx, + double[:, :, ::1] Hy, + double[:, :, ::1] Hz + ): + """This function updates the electric field components when dispersive materials (with 1 pole) are present. + + Args: + nx, ny, nz (int): Grid size in cells + nthreads (int): Number of threads to use + maxpoles (int): Maximum number of poles + updatecoeffs, T, ID, E, H (memoryviews): Access to update coeffients, temporary, ID and field component arrays + """ + + cdef Py_ssize_t i, j, k + cdef int material + cdef float phi = 0 + + # Ex component + if ny != 1 or nz != 1: + for i in prange(0, nx, nogil=True, schedule='static', num_threads=nthreads): + for j in range(1, ny): + for k in range(1, nz): + material = ID[0, i, j, k] + + phi = creal(updatecoeffsdispersive[material, 0]) * creal(Tx[0, i, j, k]) + + Tx[0, i, j, k] = updatecoeffsdispersive[material, 1] * Tx[0, i, j, k] + updatecoeffsdispersive[material, 2] * Ex[i, j, k] + Ex[i, j, k] = updatecoeffsE[material, 0] * Ex[i, j, k] + updatecoeffsE[material, 2] * (Hz[i, j, k] - Hz[i, j - 1, k]) - updatecoeffsE[material, 3] * (Hy[i, j, k] - Hy[i, j, k - 1]) - updatecoeffsE[material, 4] * phi + + # Ey component + if nx != 1 or nz != 1: + for i in prange(1, nx, nogil=True, schedule='static', num_threads=nthreads): + for j in range(0, ny): + for k in range(1, nz): + material = ID[1, i, j, k] + + phi = creal(updatecoeffsdispersive[material, 0]) * creal(Ty[0, i, j, k]) + + Ty[0, i, j, k] = updatecoeffsdispersive[material, 1] * Ty[0, i, j, k] + updatecoeffsdispersive[material, 2] * Ey[i, j, k] + Ey[i, j, k] = updatecoeffsE[material, 0] * Ey[i, j, k] + updatecoeffsE[material, 3] * (Hx[i, j, k] - Hx[i, j, k - 1]) - updatecoeffsE[material, 1] * (Hz[i, j, k] - Hz[i - 1, j, k]) - updatecoeffsE[material, 4] * phi + + # Ez component + if nx != 1 or ny != 1: + for i in prange(1, nx, nogil=True, schedule='static', num_threads=nthreads): + for j in range(1, ny): + for k in range(0, nz): + material = ID[2, i, j, k] + + phi = creal(updatecoeffsdispersive[material, 0]) * creal(Tz[0, i, j, k]) + + Tz[0, i, j, k] = updatecoeffsdispersive[material, 1] * Tz[0, i, j, k] + updatecoeffsdispersive[material, 2] * Ez[i, j, k] + Ez[i, j, k] = updatecoeffsE[material, 0] * Ez[i, j, k] + updatecoeffsE[material, 1] * (Hy[i, j, k] - Hy[i - 1, j, k]) - updatecoeffsE[material, 2] * (Hx[i, j, k] - Hx[i, j - 1, k]) - updatecoeffsE[material, 4] * phi + + +cpdef void update_electric_dispersive_1pole_A_float_complex( + int nx, + int ny, + int nz, + int nthreads, + int maxpoles, + float[:, ::1] updatecoeffsE, + float complex[:, ::1] updatecoeffsdispersive, + np.uint32_t[:, :, :, ::1] ID, + float complex[:, :, :, ::1] Tx, + float complex[:, :, :, ::1] Ty, + float complex[:, :, :, ::1] Tz, + float[:, :, ::1] Ex, + float[:, :, ::1] Ey, + float[:, :, ::1] Ez, + float[:, :, ::1] Hx, + float[:, :, ::1] Hy, + float[:, :, ::1] Hz + ): + """This function updates the electric field components when dispersive materials (with 1 pole) are present. + + Args: + nx, ny, nz (int): Grid size in cells + nthreads (int): Number of threads to use + maxpoles (int): Maximum number of poles + updatecoeffs, T, ID, E, H (memoryviews): Access to update coeffients, temporary, ID and field component arrays + """ + + cdef Py_ssize_t i, j, k + cdef int material + cdef float phi = 0 + + # Ex component + if ny != 1 or nz != 1: + for i in prange(0, nx, nogil=True, schedule='static', num_threads=nthreads): + for j in range(1, ny): + for k in range(1, nz): + material = ID[0, i, j, k] + + phi = crealf(updatecoeffsdispersive[material, 0]) * crealf(Tx[0, i, j, k]) + + Tx[0, i, j, k] = updatecoeffsdispersive[material, 1] * Tx[0, i, j, k] + updatecoeffsdispersive[material, 2] * Ex[i, j, k] + Ex[i, j, k] = updatecoeffsE[material, 0] * Ex[i, j, k] + updatecoeffsE[material, 2] * (Hz[i, j, k] - Hz[i, j - 1, k]) - updatecoeffsE[material, 3] * (Hy[i, j, k] - Hy[i, j, k - 1]) - updatecoeffsE[material, 4] * phi + + # Ey component + if nx != 1 or nz != 1: + for i in prange(1, nx, nogil=True, schedule='static', num_threads=nthreads): + for j in range(0, ny): + for k in range(1, nz): + material = ID[1, i, j, k] + + phi = crealf(updatecoeffsdispersive[material, 0]) * crealf(Ty[0, i, j, k]) + + Ty[0, i, j, k] = updatecoeffsdispersive[material, 1] * Ty[0, i, j, k] + updatecoeffsdispersive[material, 2] * Ey[i, j, k] + Ey[i, j, k] = updatecoeffsE[material, 0] * Ey[i, j, k] + updatecoeffsE[material, 3] * (Hx[i, j, k] - Hx[i, j, k - 1]) - updatecoeffsE[material, 1] * (Hz[i, j, k] - Hz[i - 1, j, k]) - updatecoeffsE[material, 4] * phi + + # Ez component + if nx != 1 or ny != 1: + for i in prange(1, nx, nogil=True, schedule='static', num_threads=nthreads): + for j in range(1, ny): + for k in range(0, nz): + material = ID[2, i, j, k] + + phi = crealf(updatecoeffsdispersive[material, 0]) * crealf(Tz[0, i, j, k]) + + Tz[0, i, j, k] = updatecoeffsdispersive[material, 1] * Tz[0, i, j, k] + updatecoeffsdispersive[material, 2] * Ez[i, j, k] + Ez[i, j, k] = updatecoeffsE[material, 0] * Ez[i, j, k] + updatecoeffsE[material, 1] * (Hy[i, j, k] - Hy[i - 1, j, k]) - updatecoeffsE[material, 2] * (Hx[i, j, k] - Hx[i, j - 1, k]) - updatecoeffsE[material, 4] * phi + + + + +################################################################# +# Electric field updates - dispersive materials - single pole B # +################################################################# + + +cpdef void update_electric_dispersive_1pole_B_double_real( + int nx, + int ny, + int nz, + int nthreads, + int maxpoles, + double[:, ::1] updatecoeffsdispersive, + np.uint32_t[:, :, :, ::1] ID, + double[:, :, :, ::1] Tx, + double[:, :, :, ::1] Ty, + double[:, :, :, ::1] Tz, + double[:, :, ::1] Ex, + double[:, :, ::1] Ey, + double[:, :, ::1] Ez + ): + """This function updates a temporary dispersive material array when disperisive materials (with 1 pole) are present. + + Args: + nx, ny, nz (int): Grid size in cells + nthreads (int): Number of threads to use + maxpoles (int): Maximum number of poles + updatecoeffs, T, ID, E (memoryviews): Access to update coeffients, temporary, ID and field component arrays + """ + + cdef Py_ssize_t i, j, k + cdef int material + + # Ex component + if ny != 1 or nz != 1: + for i in prange(0, nx, nogil=True, schedule='static', num_threads=nthreads): + for j in range(1, ny): + for k in range(1, nz): + material = ID[0, i, j, k] + Tx[0, i, j, k] = Tx[0, i, j, k] - updatecoeffsdispersive[material, 2] * Ex[i, j, k] + + # Ey component + if nx != 1 or nz != 1: + for i in prange(1, nx, nogil=True, schedule='static', num_threads=nthreads): + for j in range(0, ny): + for k in range(1, nz): + material = ID[1, i, j, k] + Ty[0, i, j, k] = Ty[0, i, j, k] - updatecoeffsdispersive[material, 2] * Ey[i, j, k] + + # Ez component + if nx != 1 or ny != 1: + for i in prange(1, nx, nogil=True, schedule='static', num_threads=nthreads): + for j in range(1, ny): + for k in range(0, nz): + material = ID[2, i, j, k] + Tz[0, i, j, k] = Tz[0, i, j, k] - updatecoeffsdispersive[material, 2] * Ez[i, j, k] + +cpdef void update_electric_dispersive_1pole_B_float_real( + int nx, + int ny, + int nz, + int nthreads, + int maxpoles, + float[:, ::1] updatecoeffsdispersive, + np.uint32_t[:, :, :, ::1] ID, + float[:, :, :, ::1] Tx, + float[:, :, :, ::1] Ty, + float[:, :, :, ::1] Tz, + float[:, :, ::1] Ex, + float[:, :, ::1] Ey, + float[:, :, ::1] Ez + ): + """This function updates a temporary dispersive material array when disperisive materials (with 1 pole) are present. + + Args: + nx, ny, nz (int): Grid size in cells + nthreads (int): Number of threads to use + maxpoles (int): Maximum number of poles + updatecoeffs, T, ID, E (memoryviews): Access to update coeffients, temporary, ID and field component arrays + """ + + cdef Py_ssize_t i, j, k + cdef int material + + # Ex component + if ny != 1 or nz != 1: + for i in prange(0, nx, nogil=True, schedule='static', num_threads=nthreads): + for j in range(1, ny): + for k in range(1, nz): + material = ID[0, i, j, k] + Tx[0, i, j, k] = Tx[0, i, j, k] - updatecoeffsdispersive[material, 2] * Ex[i, j, k] + + # Ey component + if nx != 1 or nz != 1: + for i in prange(1, nx, nogil=True, schedule='static', num_threads=nthreads): + for j in range(0, ny): + for k in range(1, nz): + material = ID[1, i, j, k] + Ty[0, i, j, k] = Ty[0, i, j, k] - updatecoeffsdispersive[material, 2] * Ey[i, j, k] + + # Ez component + if nx != 1 or ny != 1: + for i in prange(1, nx, nogil=True, schedule='static', num_threads=nthreads): + for j in range(1, ny): + for k in range(0, nz): + material = ID[2, i, j, k] + Tz[0, i, j, k] = Tz[0, i, j, k] - updatecoeffsdispersive[material, 2] * Ez[i, j, k] + +cpdef void update_electric_dispersive_1pole_B_double_complex( + int nx, + int ny, + int nz, + int nthreads, + int maxpoles, + double complex[:, ::1] updatecoeffsdispersive, + np.uint32_t[:, :, :, ::1] ID, + double complex[:, :, :, ::1] Tx, + double complex[:, :, :, ::1] Ty, + double complex[:, :, :, ::1] Tz, + double[:, :, ::1] Ex, + double[:, :, ::1] Ey, + double[:, :, ::1] Ez + ): + """This function updates a temporary dispersive material array when disperisive materials (with 1 pole) are present. + + Args: + nx, ny, nz (int): Grid size in cells + nthreads (int): Number of threads to use + maxpoles (int): Maximum number of poles + updatecoeffs, T, ID, E (memoryviews): Access to update coeffients, temporary, ID and field component arrays + """ + + cdef Py_ssize_t i, j, k + cdef int material + + # Ex component + if ny != 1 or nz != 1: + for i in prange(0, nx, nogil=True, schedule='static', num_threads=nthreads): + for j in range(1, ny): + for k in range(1, nz): + material = ID[0, i, j, k] + Tx[0, i, j, k] = Tx[0, i, j, k] - updatecoeffsdispersive[material, 2] * Ex[i, j, k] + + # Ey component + if nx != 1 or nz != 1: + for i in prange(1, nx, nogil=True, schedule='static', num_threads=nthreads): + for j in range(0, ny): + for k in range(1, nz): + material = ID[1, i, j, k] + Ty[0, i, j, k] = Ty[0, i, j, k] - updatecoeffsdispersive[material, 2] * Ey[i, j, k] + + # Ez component + if nx != 1 or ny != 1: + for i in prange(1, nx, nogil=True, schedule='static', num_threads=nthreads): + for j in range(1, ny): + for k in range(0, nz): + material = ID[2, i, j, k] + Tz[0, i, j, k] = Tz[0, i, j, k] - updatecoeffsdispersive[material, 2] * Ez[i, j, k] + +cpdef void update_electric_dispersive_1pole_B_float_complex( + int nx, + int ny, + int nz, + int nthreads, + int maxpoles, + float complex[:, ::1] updatecoeffsdispersive, + np.uint32_t[:, :, :, ::1] ID, + float complex[:, :, :, ::1] Tx, + float complex[:, :, :, ::1] Ty, + float complex[:, :, :, ::1] Tz, + float[:, :, ::1] Ex, + float[:, :, ::1] Ey, + float[:, :, ::1] Ez + ): + """This function updates a temporary dispersive material array when disperisive materials (with 1 pole) are present. + + Args: + nx, ny, nz (int): Grid size in cells + nthreads (int): Number of threads to use + maxpoles (int): Maximum number of poles + updatecoeffs, T, ID, E (memoryviews): Access to update coeffients, temporary, ID and field component arrays + """ + + cdef Py_ssize_t i, j, k + cdef int material + + # Ex component + if ny != 1 or nz != 1: + for i in prange(0, nx, nogil=True, schedule='static', num_threads=nthreads): + for j in range(1, ny): + for k in range(1, nz): + material = ID[0, i, j, k] + Tx[0, i, j, k] = Tx[0, i, j, k] - updatecoeffsdispersive[material, 2] * Ex[i, j, k] + + # Ey component + if nx != 1 or nz != 1: + for i in prange(1, nx, nogil=True, schedule='static', num_threads=nthreads): + for j in range(0, ny): + for k in range(1, nz): + material = ID[1, i, j, k] + Ty[0, i, j, k] = Ty[0, i, j, k] - updatecoeffsdispersive[material, 2] * Ey[i, j, k] + + # Ez component + if nx != 1 or ny != 1: + for i in prange(1, nx, nogil=True, schedule='static', num_threads=nthreads): + for j in range(1, ny): + for k in range(0, nz): + material = ID[2, i, j, k] + Tz[0, i, j, k] = Tz[0, i, j, k] - updatecoeffsdispersive[material, 2] * Ez[i, j, k] diff --git a/gprMax/fields_outputs.py b/gprMax/fields_outputs.py index b2c61ea7..a11d917c 100644 --- a/gprMax/fields_outputs.py +++ b/gprMax/fields_outputs.py @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020: The University of Edinburgh +# Copyright (C) 2015-2021: The University of Edinburgh # Authors: Craig Warren and Antonis Giannopoulos # # This file is part of gprMax. diff --git a/gprMax/fields_updates_ext.pyx b/gprMax/fields_updates_ext.pyx index 326cda84..09a32709 100644 --- a/gprMax/fields_updates_ext.pyx +++ b/gprMax/fields_updates_ext.pyx @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020: The University of Edinburgh +# Copyright (C) 2015-2021: The University of Edinburgh # Authors: Craig Warren and Antonis Giannopoulos # # This file is part of gprMax. diff --git a/gprMax/fields_updates_gpu.py b/gprMax/fields_updates_gpu.py index 2e68991e..b5f0630e 100644 --- a/gprMax/fields_updates_gpu.py +++ b/gprMax/fields_updates_gpu.py @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020: The University of Edinburgh +# Copyright (C) 2015-2021: The University of Edinburgh # Authors: Craig Warren and Antonis Giannopoulos # # This file is part of gprMax. diff --git a/gprMax/fractals.py b/gprMax/fractals.py index 016c361e..2e6b6042 100644 --- a/gprMax/fractals.py +++ b/gprMax/fractals.py @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020: The University of Edinburgh +# Copyright (C) 2015-2021: The University of Edinburgh # Authors: Craig Warren and Antonis Giannopoulos # # This file is part of gprMax. diff --git a/gprMax/fractals_generate_ext.pyx b/gprMax/fractals_generate_ext.pyx index 47297123..3cd1ff14 100644 --- a/gprMax/fractals_generate_ext.pyx +++ b/gprMax/fractals_generate_ext.pyx @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020: The University of Edinburgh +# Copyright (C) 2015-2021: The University of Edinburgh # Authors: Craig Warren and Antonis Giannopoulos # # This file is part of gprMax. diff --git a/gprMax/geometry_outputs.py b/gprMax/geometry_outputs.py index 2da25a9f..c12026f2 100644 --- a/gprMax/geometry_outputs.py +++ b/gprMax/geometry_outputs.py @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020: The University of Edinburgh +# Copyright (C) 2015-2021: The University of Edinburgh # Authors: Craig Warren and Antonis Giannopoulos # # This file is part of gprMax. diff --git a/gprMax/geometry_outputs_ext.pyx b/gprMax/geometry_outputs_ext.pyx index be1564a3..65108165 100644 --- a/gprMax/geometry_outputs_ext.pyx +++ b/gprMax/geometry_outputs_ext.pyx @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020: The University of Edinburgh +# Copyright (C) 2015-2021: The University of Edinburgh # Authors: Craig Warren and Antonis Giannopoulos # # This file is part of gprMax. diff --git a/gprMax/geometry_primitives_ext.pyx b/gprMax/geometry_primitives_ext.pyx index 3fc249da..a315f177 100644 --- a/gprMax/geometry_primitives_ext.pyx +++ b/gprMax/geometry_primitives_ext.pyx @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020: The University of Edinburgh +# Copyright (C) 2015-2021: The University of Edinburgh # Authors: Craig Warren and Antonis Giannopoulos # # This file is part of gprMax. diff --git a/gprMax/gprMax.py b/gprMax/gprMax.py index a79a57bc..d32e6bc1 100644 --- a/gprMax/gprMax.py +++ b/gprMax/gprMax.py @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020: The University of Edinburgh +# Copyright (C) 2015-2021: The University of Edinburgh # Authors: Craig Warren and Antonis Giannopoulos # # This file is part of gprMax. diff --git a/gprMax/grid.py b/gprMax/grid.py index 4d3f885f..dfe78c8c 100644 --- a/gprMax/grid.py +++ b/gprMax/grid.py @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020: The University of Edinburgh +# Copyright (C) 2015-2021: The University of Edinburgh # Authors: Craig Warren and Antonis Giannopoulos # # This file is part of gprMax. diff --git a/gprMax/input_cmd_funcs.py b/gprMax/input_cmd_funcs.py index a3bd3f38..6d02a59a 100644 --- a/gprMax/input_cmd_funcs.py +++ b/gprMax/input_cmd_funcs.py @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020: The University of Edinburgh +# Copyright (C) 2015-2021: The University of Edinburgh # Authors: Craig Warren and Antonis Giannopoulos # # This file is part of gprMax. diff --git a/gprMax/input_cmds_file.py b/gprMax/input_cmds_file.py index 73c2ea9c..622f23ca 100644 --- a/gprMax/input_cmds_file.py +++ b/gprMax/input_cmds_file.py @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020: The University of Edinburgh +# Copyright (C) 2015-2021: The University of Edinburgh # Authors: Craig Warren and Antonis Giannopoulos # # This file is part of gprMax. diff --git a/gprMax/input_cmds_geometry.py b/gprMax/input_cmds_geometry.py index cf2085b4..86fd4514 100644 --- a/gprMax/input_cmds_geometry.py +++ b/gprMax/input_cmds_geometry.py @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020: The University of Edinburgh +# Copyright (C) 2015-2021: The University of Edinburgh # Authors: Craig Warren and Antonis Giannopoulos # # This file is part of gprMax. diff --git a/gprMax/input_cmds_multiuse.py b/gprMax/input_cmds_multiuse.py index b060d156..f1f0a8a6 100644 --- a/gprMax/input_cmds_multiuse.py +++ b/gprMax/input_cmds_multiuse.py @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020: The University of Edinburgh +# Copyright (C) 2015-2021: The University of Edinburgh # Authors: Craig Warren and Antonis Giannopoulos # # This file is part of gprMax. diff --git a/gprMax/input_cmds_singleuse.py b/gprMax/input_cmds_singleuse.py index cddbadf6..f1ba2503 100644 --- a/gprMax/input_cmds_singleuse.py +++ b/gprMax/input_cmds_singleuse.py @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020: The University of Edinburgh +# Copyright (C) 2015-2021: The University of Edinburgh # Authors: Craig Warren and Antonis Giannopoulos # # This file is part of gprMax. diff --git a/gprMax/materials.py b/gprMax/materials.py index 8fbff923..ba0be158 100644 --- a/gprMax/materials.py +++ b/gprMax/materials.py @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020: The University of Edinburgh +# Copyright (C) 2015-2021: The University of Edinburgh # Authors: Craig Warren and Antonis Giannopoulos # # This file is part of gprMax. @@ -158,7 +158,7 @@ class Material(object): if self.poles > 0: w = 2 * np.pi * freq - er += self.se / (w * e0) + er += self.se / (1j * w * e0) if 'debye' in self.type: for pole in range(self.poles): er += self.deltaer[pole] / (1 + 1j * w * self.tau[pole]) diff --git a/gprMax/model_build_run.py b/gprMax/model_build_run.py index 42cda538..575770f6 100644 --- a/gprMax/model_build_run.py +++ b/gprMax/model_build_run.py @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020: The University of Edinburgh +# Copyright (C) 2015-2021: The University of Edinburgh # Authors: Craig Warren and Antonis Giannopoulos # # This file is part of gprMax. diff --git a/gprMax/optimisation_taguchi.py b/gprMax/optimisation_taguchi.py index 82a8acc9..3128fc66 100644 --- a/gprMax/optimisation_taguchi.py +++ b/gprMax/optimisation_taguchi.py @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020: The University of Edinburgh +# Copyright (C) 2015-2021: The University of Edinburgh # Authors: Craig Warren and Antonis Giannopoulos # # This file is part of gprMax. diff --git a/gprMax/pml.py b/gprMax/pml.py index 3cbebcda..d5fbf568 100644 --- a/gprMax/pml.py +++ b/gprMax/pml.py @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020: The University of Edinburgh +# Copyright (C) 2015-2021: The University of Edinburgh # Authors: Craig Warren and Antonis Giannopoulos # # This file is part of gprMax. diff --git a/gprMax/pml_updates/pml_updates_electric_HORIPML_ext.pyx b/gprMax/pml_updates/pml_updates_electric_HORIPML_ext.pyx index 7fc5f9a1..f3855064 100644 --- a/gprMax/pml_updates/pml_updates_electric_HORIPML_ext.pyx +++ b/gprMax/pml_updates/pml_updates_electric_HORIPML_ext.pyx @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020: The University of Edinburgh +# Copyright (C) 2015-2021: The University of Edinburgh # Authors: Craig Warren and Antonis Giannopoulos # # This file is part of gprMax. diff --git a/gprMax/pml_updates/pml_updates_electric_HORIPML_gpu.py b/gprMax/pml_updates/pml_updates_electric_HORIPML_gpu.py index e8ce2188..b3005357 100644 --- a/gprMax/pml_updates/pml_updates_electric_HORIPML_gpu.py +++ b/gprMax/pml_updates/pml_updates_electric_HORIPML_gpu.py @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020: The University of Edinburgh +# Copyright (C) 2015-2021: The University of Edinburgh # Authors: Craig Warren and Antonis Giannopoulos # # This file is part of gprMax. diff --git a/gprMax/pml_updates/pml_updates_electric_MRIPML_ext.pyx b/gprMax/pml_updates/pml_updates_electric_MRIPML_ext.pyx index ee92071c..04eb0664 100644 --- a/gprMax/pml_updates/pml_updates_electric_MRIPML_ext.pyx +++ b/gprMax/pml_updates/pml_updates_electric_MRIPML_ext.pyx @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020: The University of Edinburgh +# Copyright (C) 2015-2021: The University of Edinburgh # Authors: Craig Warren and Antonis Giannopoulos # # This file is part of gprMax. diff --git a/gprMax/pml_updates/pml_updates_electric_MRIPML_gpu.py b/gprMax/pml_updates/pml_updates_electric_MRIPML_gpu.py index d906644e..e3a4c34b 100644 --- a/gprMax/pml_updates/pml_updates_electric_MRIPML_gpu.py +++ b/gprMax/pml_updates/pml_updates_electric_MRIPML_gpu.py @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020: The University of Edinburgh +# Copyright (C) 2015-2021: The University of Edinburgh # Authors: Craig Warren and Antonis Giannopoulos # # This file is part of gprMax. diff --git a/gprMax/pml_updates/pml_updates_magnetic_HORIPML_ext.pyx b/gprMax/pml_updates/pml_updates_magnetic_HORIPML_ext.pyx index 3264fa25..93166fee 100644 --- a/gprMax/pml_updates/pml_updates_magnetic_HORIPML_ext.pyx +++ b/gprMax/pml_updates/pml_updates_magnetic_HORIPML_ext.pyx @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020: The University of Edinburgh +# Copyright (C) 2015-2021: The University of Edinburgh # Authors: Craig Warren and Antonis Giannopoulos # # This file is part of gprMax. diff --git a/gprMax/pml_updates/pml_updates_magnetic_HORIPML_gpu.py b/gprMax/pml_updates/pml_updates_magnetic_HORIPML_gpu.py index 89104312..d7e862e8 100644 --- a/gprMax/pml_updates/pml_updates_magnetic_HORIPML_gpu.py +++ b/gprMax/pml_updates/pml_updates_magnetic_HORIPML_gpu.py @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020: The University of Edinburgh +# Copyright (C) 2015-2021: The University of Edinburgh # Authors: Craig Warren and Antonis Giannopoulos # # This file is part of gprMax. diff --git a/gprMax/pml_updates/pml_updates_magnetic_MRIPML_ext.pyx b/gprMax/pml_updates/pml_updates_magnetic_MRIPML_ext.pyx index f5ac2ded..fe70d374 100644 --- a/gprMax/pml_updates/pml_updates_magnetic_MRIPML_ext.pyx +++ b/gprMax/pml_updates/pml_updates_magnetic_MRIPML_ext.pyx @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020: The University of Edinburgh +# Copyright (C) 2015-2021: The University of Edinburgh # Authors: Craig Warren and Antonis Giannopoulos # # This file is part of gprMax. diff --git a/gprMax/pml_updates/pml_updates_magnetic_MRIPML_gpu.py b/gprMax/pml_updates/pml_updates_magnetic_MRIPML_gpu.py index 7ba8e32a..2db1630c 100644 --- a/gprMax/pml_updates/pml_updates_magnetic_MRIPML_gpu.py +++ b/gprMax/pml_updates/pml_updates_magnetic_MRIPML_gpu.py @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020: The University of Edinburgh +# Copyright (C) 2015-2021: The University of Edinburgh # Authors: Craig Warren and Antonis Giannopoulos # # This file is part of gprMax. diff --git a/gprMax/receivers.py b/gprMax/receivers.py index f78a6ccf..e3fa6c6e 100644 --- a/gprMax/receivers.py +++ b/gprMax/receivers.py @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020: The University of Edinburgh +# Copyright (C) 2015-2021: The University of Edinburgh # Authors: Craig Warren and Antonis Giannopoulos # # This file is part of gprMax. diff --git a/gprMax/snapshots.py b/gprMax/snapshots.py index 09906157..f8ea8e7c 100644 --- a/gprMax/snapshots.py +++ b/gprMax/snapshots.py @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020: The University of Edinburgh +# Copyright (C) 2015-2021: The University of Edinburgh # Authors: Craig Warren and Antonis Giannopoulos # # This file is part of gprMax. diff --git a/gprMax/snapshots_ext.pyx b/gprMax/snapshots_ext.pyx index e53e7f89..03f4c639 100644 --- a/gprMax/snapshots_ext.pyx +++ b/gprMax/snapshots_ext.pyx @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020: The University of Edinburgh +# Copyright (C) 2015-2021: The University of Edinburgh # Authors: Craig Warren and Antonis Giannopoulos # # This file is part of gprMax. diff --git a/gprMax/snapshots_gpu.py b/gprMax/snapshots_gpu.py index 6139911a..9fb3f33b 100644 --- a/gprMax/snapshots_gpu.py +++ b/gprMax/snapshots_gpu.py @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020: The University of Edinburgh +# Copyright (C) 2015-2021: The University of Edinburgh # Authors: Craig Warren and Antonis Giannopoulos # # This file is part of gprMax. diff --git a/gprMax/source_updates_gpu.py b/gprMax/source_updates_gpu.py index ebb5e31c..38a0465a 100644 --- a/gprMax/source_updates_gpu.py +++ b/gprMax/source_updates_gpu.py @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020: The University of Edinburgh +# Copyright (C) 2015-2021: The University of Edinburgh # Authors: Craig Warren and Antonis Giannopoulos # # This file is part of gprMax. diff --git a/gprMax/sources.py b/gprMax/sources.py index f282986a..22973943 100644 --- a/gprMax/sources.py +++ b/gprMax/sources.py @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020: The University of Edinburgh +# Copyright (C) 2015-2021: The University of Edinburgh # Authors: Craig Warren and Antonis Giannopoulos # # This file is part of gprMax. diff --git a/gprMax/utilities.py b/gprMax/utilities.py index 0166ac31..c608ac90 100644 --- a/gprMax/utilities.py +++ b/gprMax/utilities.py @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020: The University of Edinburgh +# Copyright (C) 2015-2021: The University of Edinburgh # Authors: Craig Warren and Antonis Giannopoulos # # This file is part of gprMax. @@ -63,7 +63,7 @@ def logo(version): """ description = '\n=== Electromagnetic modelling software based on the Finite-Difference Time-Domain (FDTD) method' - copyright = 'Copyright (C) 2015-2020: The University of Edinburgh' + copyright = 'Copyright (C) 2015-2021: The University of Edinburgh' authors = 'Authors: Craig Warren and Antonis Giannopoulos' licenseinfo1 = 'gprMax is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.\n' licenseinfo2 = 'gprMax is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.' diff --git a/gprMax/waveforms.py b/gprMax/waveforms.py index da736017..7aa10a01 100644 --- a/gprMax/waveforms.py +++ b/gprMax/waveforms.py @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020: The University of Edinburgh +# Copyright (C) 2015-2021: The University of Edinburgh # Authors: Craig Warren and Antonis Giannopoulos # # This file is part of gprMax. diff --git a/gprMax/yee_cell_build_ext.pyx b/gprMax/yee_cell_build_ext.pyx index 04bdb46f..2aca208b 100644 --- a/gprMax/yee_cell_build_ext.pyx +++ b/gprMax/yee_cell_build_ext.pyx @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020: The University of Edinburgh +# Copyright (C) 2015-2021: The University of Edinburgh # Authors: Craig Warren and Antonis Giannopoulos # # This file is part of gprMax. diff --git a/gprMax/yee_cell_setget_rigid_ext.pxd b/gprMax/yee_cell_setget_rigid_ext.pxd index 77ad6445..1afa6702 100644 --- a/gprMax/yee_cell_setget_rigid_ext.pxd +++ b/gprMax/yee_cell_setget_rigid_ext.pxd @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020: The University of Edinburgh +# Copyright (C) 2015-2021: The University of Edinburgh # Authors: Craig Warren and Antonis Giannopoulos # # This file is part of gprMax. diff --git a/gprMax/yee_cell_setget_rigid_ext.pyx b/gprMax/yee_cell_setget_rigid_ext.pyx index e614c4b3..f11b5a78 100644 --- a/gprMax/yee_cell_setget_rigid_ext.pyx +++ b/gprMax/yee_cell_setget_rigid_ext.pyx @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020: The University of Edinburgh +# Copyright (C) 2015-2021: The University of Edinburgh # Authors: Craig Warren and Antonis Giannopoulos # # This file is part of gprMax. diff --git a/setup.py b/setup.py index b0c917d0..9a849496 100644 --- a/setup.py +++ b/setup.py @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020: The University of Edinburgh +# Copyright (C) 2015-2021: The University of Edinburgh # Authors: Craig Warren and Antonis Giannopoulos # # This file is part of gprMax. diff --git a/tests/benchmarking/plot_benchmark.py b/tests/benchmarking/plot_benchmark.py index 197111ef..7025e0f2 100644 --- a/tests/benchmarking/plot_benchmark.py +++ b/tests/benchmarking/plot_benchmark.py @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020: The University of Edinburgh +# Copyright (C) 2015-2021: The University of Edinburgh # Authors: Craig Warren and Antonis Giannopoulos # # This file is part of gprMax. diff --git a/tests/test_experimental.py b/tests/test_experimental.py index 17e1fec8..4efe4246 100644 --- a/tests/test_experimental.py +++ b/tests/test_experimental.py @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020: The University of Edinburgh +# Copyright (C) 2015-2021: The University of Edinburgh # Authors: Craig Warren and Antonis Giannopoulos # # This file is part of gprMax. diff --git a/tests/test_models.py b/tests/test_models.py index cee69a63..c37d3b42 100644 --- a/tests/test_models.py +++ b/tests/test_models.py @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020: The University of Edinburgh +# Copyright (C) 2015-2021: The University of Edinburgh # Authors: Craig Warren and Antonis Giannopoulos # # This file is part of gprMax. diff --git a/tools/Paraview macros/gprMax_info.py b/tools/Paraview macros/gprMax_info.py index 14ef6e79..e7f120cb 100644 --- a/tools/Paraview macros/gprMax_info.py +++ b/tools/Paraview macros/gprMax_info.py @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020: The University of Edinburgh +# Copyright (C) 2015-2021: The University of Edinburgh # Authors: Craig Warren and Antonis Giannopoulos # # This file is part of gprMax. diff --git a/tools/convert_png2h5.py b/tools/convert_png2h5.py index ac62691c..08da2dbb 100644 --- a/tools/convert_png2h5.py +++ b/tools/convert_png2h5.py @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020: The University of Edinburgh +# Copyright (C) 2015-2021: The University of Edinburgh # Authors: Craig Warren and Antonis Giannopoulos # # This file is part of gprMax. diff --git a/tools/inputfile_old2new.py b/tools/inputfile_old2new.py index 0fca1f32..de18d938 100644 --- a/tools/inputfile_old2new.py +++ b/tools/inputfile_old2new.py @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020: The University of Edinburgh +# Copyright (C) 2015-2021: The University of Edinburgh # Authors: Craig Warren and Antonis Giannopoulos # # This file is part of gprMax. diff --git a/tools/outputfiles_merge.py b/tools/outputfiles_merge.py index f88954f2..8a469231 100644 --- a/tools/outputfiles_merge.py +++ b/tools/outputfiles_merge.py @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020: The University of Edinburgh +# Copyright (C) 2015-2021: The University of Edinburgh # Authors: Craig Warren and Antonis Giannopoulos # # This file is part of gprMax. diff --git a/tools/plot_Ascan.py b/tools/plot_Ascan.py index 7fb9221e..f6000fd4 100644 --- a/tools/plot_Ascan.py +++ b/tools/plot_Ascan.py @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020: The University of Edinburgh +# Copyright (C) 2015-2021: The University of Edinburgh # Authors: Craig Warren and Antonis Giannopoulos # # This file is part of gprMax. diff --git a/tools/plot_Bscan.py b/tools/plot_Bscan.py index 677fba7c..5b649ba4 100644 --- a/tools/plot_Bscan.py +++ b/tools/plot_Bscan.py @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020: The University of Edinburgh +# Copyright (C) 2015-2021: The University of Edinburgh # Authors: Craig Warren and Antonis Giannopoulos # # This file is part of gprMax. diff --git a/tools/plot_antenna_params.py b/tools/plot_antenna_params.py index 2f4ad993..a1d3f3ad 100644 --- a/tools/plot_antenna_params.py +++ b/tools/plot_antenna_params.py @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020: The University of Edinburgh +# Copyright (C) 2015-2021: The University of Edinburgh # Authors: Craig Warren and Antonis Giannopoulos # # This file is part of gprMax. diff --git a/tools/plot_source_wave.py b/tools/plot_source_wave.py index d981fcde..a424a238 100644 --- a/tools/plot_source_wave.py +++ b/tools/plot_source_wave.py @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020: The University of Edinburgh +# Copyright (C) 2015-2021: The University of Edinburgh # Authors: Craig Warren and Antonis Giannopoulos # # This file is part of gprMax. diff --git a/user_libs/antennas/GSSI.py b/user_libs/antennas/GSSI.py index fa65b290..0582ad39 100644 --- a/user_libs/antennas/GSSI.py +++ b/user_libs/antennas/GSSI.py @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020, Craig Warren +# Copyright (C) 2015-2021, Craig Warren # # This module is licensed under the Creative Commons Attribution-ShareAlike 4.0 International License. # To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/4.0/. diff --git a/user_libs/antennas/MALA.py b/user_libs/antennas/MALA.py index 12d7771d..c5cce4fb 100644 --- a/user_libs/antennas/MALA.py +++ b/user_libs/antennas/MALA.py @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020, Craig Warren +# Copyright (C) 2015-2021, Craig Warren # # This module is licensed under the Creative Commons Attribution-ShareAlike 4.0 International License. # To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/4.0/. diff --git a/user_libs/optimisation_taguchi/fitness_functions.py b/user_libs/optimisation_taguchi/fitness_functions.py index a0737a0d..209bfec0 100755 --- a/user_libs/optimisation_taguchi/fitness_functions.py +++ b/user_libs/optimisation_taguchi/fitness_functions.py @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020, Craig Warren +# Copyright (C) 2015-2021, Craig Warren # # This module is licensed under the Creative Commons Attribution-ShareAlike 4.0 International License. # To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/4.0/. diff --git a/user_libs/optimisation_taguchi/plot_results.py b/user_libs/optimisation_taguchi/plot_results.py index 1975b77d..bda3e355 100644 --- a/user_libs/optimisation_taguchi/plot_results.py +++ b/user_libs/optimisation_taguchi/plot_results.py @@ -1,4 +1,4 @@ -# Copyright (C) 2015-2020, Craig Warren +# Copyright (C) 2015-2021, Craig Warren # # This module is licensed under the Creative Commons Attribution-ShareAlike 4.0 International License. # To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/4.0/.