diff --git a/CMakeLists.txt b/CMakeLists.txt index e1afd8c4..81d53bd6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -459,6 +459,7 @@ target_link_libraries( add_library( frechet_derivatives src/frechet_derivatives/impl/element_kernel/elastic_isotropic.cpp + src/frechet_derivatives/impl/element_kernel/elastic_anisotropic.cpp src/frechet_derivatives/impl/element_kernel/acoustic_isotropic.cpp src/frechet_derivatives/impl/frechet_element.cpp src/frechet_derivatives/frechet_derivatives.cpp diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index 4f36f6b2..9574ffa7 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -1,5 +1,6 @@ cmake_minimum_required(VERSION 3.17.5) +add_subdirectory(anisotropic-crystal) add_subdirectory(homogeneous-medium-flat-topography) add_subdirectory(fluid-solid-interface) add_subdirectory(Tromp_2005) diff --git a/examples/Tromp_2005/CMakeFiles/Snakefile.in b/examples/Tromp_2005/CMakeFiles/Snakefile.in index cac6a00d..d50f46bb 100644 --- a/examples/Tromp_2005/CMakeFiles/Snakefile.in +++ b/examples/Tromp_2005/CMakeFiles/Snakefile.in @@ -49,7 +49,7 @@ rule forward_configuration: } } } - } + } with open(input.config, "r") as f: config = yaml.safe_load(f) @@ -57,6 +57,8 @@ rule forward_configuration: ## Add forward node to the simulation setup config["parameters"]["simulation-setup"].update(forward) config["parameters"]["databases"]["source-file"] = "@CMAKE_SOURCE_DIR@/examples/Tromp_2005/forward_source.yaml" + config["parameters"]["receivers"]["stations-file"] = "@CMAKE_SOURCE_DIR@/examples/Tromp_2005/OUTPUT_FILES/STATIONS" + config["parameters"]["databases"]["mesh-database"] = "@CMAKE_SOURCE_DIR@/examples/Tromp_2005/OUTPUT_FILES/database.bin" with open(output.config, "w") as f: yaml.safe_dump(config, f) @@ -90,8 +92,8 @@ rule forward_simulation: runtime=10, shell: """ - module purge - module load boost/1.73.0 + # module purge + # module load boost/1.73.0 mkdir -p OUTPUT_FILES/results echo "Hostname: $(hostname)" > output.log {SPECFEM_BIN} -p {input.config} >> output.log @@ -157,6 +159,7 @@ rule adjoint_configuration: ## Add adjoint node to the simulation setup config["parameters"]["simulation-setup"].update(adjoint) config["parameters"]["databases"]["source-file"] = "@CMAKE_SOURCE_DIR@/examples/Tromp_2005/adjoint_source.yaml" + config["parameters"]["databases"]["mesh-database"] = "@CMAKE_SOURCE_DIR@/examples/Tromp_2005/OUTPUT_FILES/database.bin" with open(output.config, "w") as f: yaml.safe_dump(config, f) @@ -212,8 +215,8 @@ rule adjoint_simulation: runtime=10, shell: """ - module purge - module load boost/1.73.0 + # module purge + # module load boost/1.73.0 mkdir -p OUTPUT_FILES/results echo "Hostname: $(hostname)" > output.log {SPECFEM_BIN} -p {input.config} >> output.log @@ -228,7 +231,8 @@ rule plot_kernels: plot="OUTPUT_FILES/Kernels.png", run: from plot import plot_kernels - + import matplotlib + matplotlib.use('agg') plot_kernels(input.kernels, output.plot) diff --git a/examples/Tromp_2005/templates/specfem_config.yaml b/examples/Tromp_2005/templates/specfem_config.yaml index ffa6ddbc..4409815e 100644 --- a/examples/Tromp_2005/templates/specfem_config.yaml +++ b/examples/Tromp_2005/templates/specfem_config.yaml @@ -25,7 +25,7 @@ parameters: t0: 8.0 receivers: - stations-file: "/scratch/gpfs/rk9481/specfem2d_kokkos/examples/Tromp_2005/OUTPUT_FILES/STATIONS" + stations-file: placeholder/for/path/to/STATIONS angle: 0.0 seismogram-type: - displacement @@ -36,5 +36,5 @@ parameters: number-of-runs: 1 databases: - mesh-database: "/scratch/gpfs/rk9481/specfem2d_kokkos/examples/Tromp_2005/OUTPUT_FILES/database.bin" - source-file: "/scratch/gpfs/rk9481/specfem2d_kokkos/examples/Tromp_2005/source.yaml" + mesh-database: placeholder/for/path/to/database.bin + source-file: placeholder/for/path/to/source.yaml diff --git a/examples/anisotropic-crystal/.gitignore b/examples/anisotropic-crystal/.gitignore new file mode 100644 index 00000000..a25fd242 --- /dev/null +++ b/examples/anisotropic-crystal/.gitignore @@ -0,0 +1,2 @@ +Snakefile +specfem_config.yaml diff --git a/examples/anisotropic-crystal/CMakeFiles/Par_File.in b/examples/anisotropic-crystal/CMakeFiles/Par_File.in new file mode 100644 index 00000000..5d7f925f --- /dev/null +++ b/examples/anisotropic-crystal/CMakeFiles/Par_File.in @@ -0,0 +1,135 @@ +#----------------------------------------------------------- +# +# Simulation input parameters +# +#----------------------------------------------------------- + +# title of job +title = Anisotropic Crystal +# parameters concerning partitioning +NPROC = 1 # number of processes + +# Output folder to store mesh related files +OUTPUT_FILES = @CMAKE_SOURCE_DIR@/examples/anisotropic-crystal/OUTPUT_FILES + +#----------------------------------------------------------- +# +# Mesh +# +#----------------------------------------------------------- + +# Partitioning algorithm for decompose_mesh +PARTITIONING_TYPE = 3 # SCOTCH = 3, ascending order (very bad idea) = 1 + +# number of control nodes per element (4 or 9) +NGNOD = 9 + +# location to store the mesh +database_filename = @CMAKE_SOURCE_DIR@/examples/anisotropic-crystal/OUTPUT_FILES/database.bin + +#----------------------------------------------------------- +# +# Receivers +# +#----------------------------------------------------------- + + + +# use an existing STATION file found in ./DATA or create a new one from the receiver positions below in this Par_file +use_existing_STATIONS = .false. + +# number of receiver sets (i.e. number of receiver lines to create below) +nreceiversets = 1 + +# orientation +anglerec = 0.d0 # angle to rotate components at receivers +rec_normal_to_surface = .false. # base anglerec normal to surface (external mesh and curve file needed) + +# first receiver set (repeat these 6 lines and adjust nreceiversets accordingly) +nrec = 50 # number of receivers +xdeb = 0.05 # first receiver x in meters +zdeb = 0.2640 # first receiver z in meters +xfin = 0.28 # last receiver x in meters (ignored if only one receiver) +zfin = 0.2640 # last receiver z in meters (ignored if only one receiver) +record_at_surface_same_vertical = .false. # receivers inside the medium or at the surface + +# filename to store stations file +stations_filename = @CMAKE_SOURCE_DIR@/examples/anisotropic-crystal/OUTPUT_FILES/STATIONS + +#----------------------------------------------------------- +# +# Velocity and density models +# +#----------------------------------------------------------- + +# number of model materials +nbmodels = 1 +# available material types (see user manual for more information) +# acoustic: model_number 1 rho Vp 0 0 0 QKappa Qmu 0 0 0 0 0 0 +# elastic: model_number 1 rho Vp Vs 0 0 QKappa Qmu 0 0 0 0 0 0 +# anistoropic: model_number 2 rho c11 c13 c15 c33 c35 c55 c12 c23 c25 0 0 0 +# poroelastic: model_number 3 rhos rhof phi c kxx kxz kzz Ks Kf Kfr etaf mufr Qmu +# tomo: model_number -1 0 9999 9999 A 0 0 9999 9999 0 0 0 0 0 +1 2 7100. 16.5d10 5.d10 0 6.2d10 0 3.96d10 0 0 0 0 0 0 + +# external tomography file +TOMOGRAPHY_FILE = ./DATA/tomo_file.xyz + +# use an external mesh created by an external meshing tool or use the internal mesher +read_external_mesh = .false. + +#----------------------------------------------------------- +# +# PARAMETERS FOR EXTERNAL MESHING +# +#----------------------------------------------------------- + +# data concerning mesh, when generated using third-party app (more info in README) +# (see also absorbing_conditions above) +mesh_file = ./DATA/Mesh_canyon/canyon_mesh_file # file containing the mesh +nodes_coords_file = ./DATA/Mesh_canyon/canyon_nodes_coords_file # file containing the nodes coordinates +materials_file = ./DATA/Mesh_canyon/canyon_materials_file # file containing the material number for each element +free_surface_file = ./DATA/Mesh_canyon/canyon_free_surface_file # file containing the free surface +axial_elements_file = ./DATA/axial_elements_file # file containing the axial elements if AXISYM is true +absorbing_surface_file = ./DATA/Mesh_canyon/canyon_absorbing_surface_file # file containing the absorbing surface +acoustic_forcing_surface_file = ./DATA/MSH/Surf_acforcing_Bottom_enforcing_mesh # file containing the acoustic forcing surface +absorbing_cpml_file = ./DATA/absorbing_cpml_file # file containing the CPML element numbers +tangential_detection_curve_file = ./DATA/courbe_eros_nodes # file containing the curve delimiting the velocity model + +#----------------------------------------------------------- +# +# PARAMETERS FOR INTERNAL MESHING +# +#----------------------------------------------------------- + +# file containing interfaces for internal mesh +interfacesfile = @CMAKE_SOURCE_DIR@/examples/anisotropic-crystal/topoaniso.dat + +# geometry of the model (origin lower-left corner = 0,0) and mesh description +xmin = 0.d0 # abscissa of left side of the model +xmax = 0.33 # abscissa of right side of the model +nx = 60 # number of elements along X + +# Stacey ABC +STACEY_ABSORBING_CONDITIONS = .false. + +# absorbing boundary parameters (see absorbing_conditions above) +absorbbottom = .false. +absorbright = .false. +absorbtop = .false. +absorbleft = .false. + +# define the different regions of the model in the (nx,nz) spectral-element mesh +nbregions = 1 # then set below the different regions and model number for each region +# format of each line: nxmin nxmax nzmin nzmax material_number +1 60 1 60 1 + +#----------------------------------------------------------- +# +# Display parameters +# +#----------------------------------------------------------- + +# meshing output +output_grid_Gnuplot = .false. # generate a GNUPLOT file containing the grid, and a script to plot it +output_grid_ASCII = .false. # dump the grid in an ASCII text file consisting of a set of X,Y,Z points or not diff --git a/examples/anisotropic-crystal/CMakeFiles/Snakefile.in b/examples/anisotropic-crystal/CMakeFiles/Snakefile.in new file mode 100644 index 00000000..53e156be --- /dev/null +++ b/examples/anisotropic-crystal/CMakeFiles/Snakefile.in @@ -0,0 +1,204 @@ +SPECFEM_BIN = "specfem2d" +MESHFEM_BIN = "xmeshfem2D" + + +rule all: + input: + plot="@CMAKE_SOURCE_DIR@/examples/anisotropic-crystal/OUTPUT_FILES/results/plot.png", + localrule: True + + +rule generate_mesh: + input: + "Par_File", + output: + database="@CMAKE_SOURCE_DIR@/examples/anisotropic-crystal/OUTPUT_FILES/database.bin", + stations="@CMAKE_SOURCE_DIR@/examples/anisotropic-crystal/OUTPUT_FILES/STATIONS", + localrule: True + shell: + """ + mkdir -p OUTPUT_FILES + {MESHFEM_BIN} -p {input} + """ + + +rule run_solver: + input: + database="@CMAKE_SOURCE_DIR@/examples/anisotropic-crystal/OUTPUT_FILES/database.bin", + stations="@CMAKE_SOURCE_DIR@/examples/anisotropic-crystal/OUTPUT_FILES/STATIONS", + source="sources.yaml", + config="specfem_config.yaml", + output: + seismograms=expand( + "OUTPUT_FILES/results/{station_name}{network_name}{component}.semd", + station_name=[ + "S0001", + "S0002", + "S0003", + "S0004", + "S0005", + "S0006", + "S0007", + "S0008", + "S0009", + "S0010", + "S0011", + "S0012", + "S0013", + "S0014", + "S0015", + "S0016", + "S0017", + "S0018", + "S0019", + "S0020", + "S0021", + "S0022", + "S0023", + "S0024", + "S0025", + "S0026", + "S0027", + "S0028", + "S0029", + "S0030", + "S0031", + "S0032", + "S0033", + "S0034", + "S0035", + "S0036", + "S0037", + "S0038", + "S0039", + "S0040", + "S0041", + "S0042", + "S0043", + "S0044", + "S0045", + "S0046", + "S0047", + "S0048", + "S0049", + "S0050", + ], + network_name=["AA"], + component=["BXX", "BXZ"], + ), + resources: + nodes=1, + tasks=1, + cpus_per_task=1, + runtime=10, + shell: + """ + # module purge + # module load boost/1.73.0 + mkdir -p OUTPUT_FILES/results + echo "Hostname: $(hostname)" > output.log + {SPECFEM_BIN} -p {input.config} >> output.log + """ + + +rule plot_seismogram: + input: + trace_files=expand( + "OUTPUT_FILES/results/{station_name}{network_name}{component}.semd", + station_name=[ + "S0001", + "S0002", + "S0003", + "S0004", + "S0005", + "S0006", + "S0007", + "S0008", + "S0009", + "S0010", + "S0011", + "S0012", + "S0013", + "S0014", + "S0015", + "S0016", + "S0017", + "S0018", + "S0019", + "S0020", + "S0021", + "S0022", + "S0023", + "S0024", + "S0025", + "S0026", + "S0027", + "S0028", + "S0029", + "S0030", + "S0031", + "S0032", + "S0033", + "S0034", + "S0035", + "S0036", + "S0037", + "S0038", + "S0039", + "S0040", + "S0041", + "S0042", + "S0043", + "S0044", + "S0045", + "S0046", + "S0047", + "S0048", + "S0049", + "S0050", + ], + network_name=["AA"], + component=["BXX", "BXZ"], + ), + output: + traces="OUTPUT_FILES/results/plot.png", + localrule: True + run: + import glob + import os + import numpy as np + import obspy + import matplotlib + matplotlib.use("agg") + + def get_traces(directory): + traces = [] + files = glob.glob(directory + "/*.sem*") + ## iterate over all seismograms + for filename in files: + station_name = os.path.splitext(filename)[0] + station_name = station_name.split("/")[-1] + trace = np.loadtxt(filename, delimiter=" ") + starttime = trace[0, 0] + dt = trace[1, 0] - trace[0, 0] + traces.append( + obspy.Trace( + trace[:, 1], + {"network": station_name, "starttime": starttime, "delta": dt}, + ) + ) + + stream = obspy.Stream(traces) + + return stream + + + stream = get_traces("OUTPUT_FILES/results") + stream.plot(size=(800, 1000)).savefig(output.traces) + + +rule clean: + shell: + """ + rm -rf OUTPUT_FILES + """ diff --git a/examples/anisotropic-crystal/CMakeFiles/specfem_config.yaml.in b/examples/anisotropic-crystal/CMakeFiles/specfem_config.yaml.in new file mode 100644 index 00000000..ddeba250 --- /dev/null +++ b/examples/anisotropic-crystal/CMakeFiles/specfem_config.yaml.in @@ -0,0 +1,54 @@ +## Coupling interfaces have code flow that is dependent on orientation of the interface. +## This test is to check the code flow for horizontal acoustic-elastic interface with acoustic domain on top. + +parameters: + + header: + ## Header information is used for logging. It is good practice to give your simulations explicit names + title: Heterogeneous acoustic-elastic medium with 1 acoustic-elastic interface (orientation horizontal) # name for your simulation + # A detailed description for your simulation + description: | + Material systems : Elastic domain (1), Acoustic domain (1) + Interfaces : Acoustic-elastic interface (1) (orientation horizontal with acoustic domain on top) + Sources : Force source (1) + Boundary conditions : Neumann BCs on all edges + Debugging comments: This tests checks coupling acoustic-elastic interface implementation. + The orientation of the interface is horizontal with acoustic domain on top. + + simulation-setup: + ## quadrature setup + quadrature: + quadrature-type: GLL4 + + ## Solver setup + solver: + time-marching: + type-of-simulation: forward + time-scheme: + type: Newmark + dt: 0.85e-3 + nstep: 600 + + simulation-mode: + forward: + writer: + seismogram: + format: ascii + directory: "@CMAKE_SOURCE_DIR@/examples/anisotropic-crystal/OUTPUT_FILES/results" + + receivers: + stations-file: "@CMAKE_SOURCE_DIR@/examples/anisotropic-crystal/OUTPUT_FILES/STATIONS" + angle: 0.0 + seismogram-type: + - displacement + nstep_between_samples: 1 + + ## Runtime setup + run-setup: + number-of-processors: 1 + number-of-runs: 1 + + ## databases + databases: + mesh-database: "@CMAKE_SOURCE_DIR@/examples/anisotropic-crystal/OUTPUT_FILES/database.bin" + source-file: "@CMAKE_SOURCE_DIR@/examples/anisotropic-crystal/sources.yaml" diff --git a/examples/anisotropic-crystal/CMakeLists.txt b/examples/anisotropic-crystal/CMakeLists.txt new file mode 100644 index 00000000..d5d1c0a2 --- /dev/null +++ b/examples/anisotropic-crystal/CMakeLists.txt @@ -0,0 +1,6 @@ + +CMAKE_MINIMUM_REQUIRED(VERSION 3.17.5) + +configure_file(CMakeFiles/Par_File.in ${CMAKE_SOURCE_DIR}/examples/anisotropic-crystal/Par_File) +configure_file(CMakeFiles/Snakefile.in ${CMAKE_SOURCE_DIR}/examples/anisotropic-crystal/Snakefile) +configure_file(CMakeFiles/specfem_config.yaml.in ${CMAKE_SOURCE_DIR}/examples/anisotropic-crystal/specfem_config.yaml) diff --git a/examples/anisotropic-crystal/sources.yaml b/examples/anisotropic-crystal/sources.yaml new file mode 100644 index 00000000..2f3c7785 --- /dev/null +++ b/examples/anisotropic-crystal/sources.yaml @@ -0,0 +1,13 @@ +number-of-sources: 1 +sources: + - force: + x : 0.165 + z : 0.165 + source_surf: false + angle : 0.0 + vx : 0.0 + vz : 0.0 + Ricker: + factor: 1e10 + tshift: 0.0 + f0: 170000.0 diff --git a/examples/anisotropic-crystal/topoaniso.dat b/examples/anisotropic-crystal/topoaniso.dat new file mode 100644 index 00000000..048de0d7 --- /dev/null +++ b/examples/anisotropic-crystal/topoaniso.dat @@ -0,0 +1,26 @@ +# +# number of interfaces +# + 2 +# +# for each interface below, we give the number of points and then x,z for each point +# +# +# interface number 1 (bottom of the mesh) +# + 2 + 0 0 + 0.33 0 +# +# interface number 2 (topography, top of the mesh) +# + 2 + 0 0.33 + 0.33 0.33 +# +# for each layer, we give the number of spectral elements in the vertical direction +# +# +# layer number 1 (bottom layer) +# + 60 diff --git a/examples/fluid-solid-interface/Snakefile b/examples/fluid-solid-interface/Snakefile index 0c447a60..a54b79ae 100644 --- a/examples/fluid-solid-interface/Snakefile +++ b/examples/fluid-solid-interface/Snakefile @@ -54,8 +54,8 @@ rule run_solver: runtime=10, shell: """ - module purge - module load boost/1.73.0 + # module purge + # module load boost/1.73.0 mkdir -p OUTPUT_FILES/results echo "Hostname: $(hostname)" > output.log {SPECFEM_BIN} -p {input.config} >> output.log @@ -90,7 +90,8 @@ rule plot_seismogram: import os import numpy as np import obspy - + import matplotlib + matplotlib.use("agg") def get_traces(directory): traces = [] diff --git a/examples/homogeneous-medium-flat-topography/Snakefile b/examples/homogeneous-medium-flat-topography/Snakefile index 527ea66e..8013ed42 100644 --- a/examples/homogeneous-medium-flat-topography/Snakefile +++ b/examples/homogeneous-medium-flat-topography/Snakefile @@ -42,8 +42,8 @@ rule run_solver: runtime=10, shell: """ - module purge - module load boost/1.73.0 + # module purge + # module load boost/1.73.0 mkdir -p OUTPUT_FILES/results echo "Hostname: $(hostname)" > output.log {SPECFEM_BIN} -p {input.config} >> output.log @@ -66,7 +66,8 @@ rule plot_seismogram: import os import numpy as np import obspy - + import matplotlib + matplotlib.use("Agg") def get_traces(directory): traces = [] diff --git a/examples/poetry.lock b/examples/poetry.lock index a21c1545..7c14a3a6 100644 --- a/examples/poetry.lock +++ b/examples/poetry.lock @@ -24,32 +24,32 @@ files = [ [[package]] name = "attrs" -version = "24.2.0" +version = "24.3.0" description = "Classes Without Boilerplate" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "attrs-24.2.0-py3-none-any.whl", hash = "sha256:81921eb96de3191c8258c199618104dd27ac608d9366f5e35d011eae1867ede2"}, - {file = "attrs-24.2.0.tar.gz", hash = "sha256:5cfb1b9148b5b086569baec03f20d7b6bf3bcacc9a42bebf87ffaaca362f6346"}, + {file = "attrs-24.3.0-py3-none-any.whl", hash = "sha256:ac96cd038792094f438ad1f6ff80837353805ac950cd2aa0e0625ef19850c308"}, + {file = "attrs-24.3.0.tar.gz", hash = "sha256:8f5c07333d543103541ba7be0e2ce16eeee8130cb0b3f9238ab904ce1e85baff"}, ] [package.extras] benchmark = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-codspeed", "pytest-mypy-plugins", "pytest-xdist[psutil]"] cov = ["cloudpickle", "coverage[toml] (>=5.3)", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] -dev = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pre-commit", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] +dev = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pre-commit-uv", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] docs = ["cogapp", "furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier (<24.7)"] tests = ["cloudpickle", "hypothesis", "mypy (>=1.11.1)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-xdist[psutil]"] tests-mypy = ["mypy (>=1.11.1)", "pytest-mypy-plugins"] [[package]] name = "certifi" -version = "2024.8.30" +version = "2024.12.14" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2024.8.30-py3-none-any.whl", hash = "sha256:922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8"}, - {file = "certifi-2024.8.30.tar.gz", hash = "sha256:bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9"}, + {file = "certifi-2024.12.14-py3-none-any.whl", hash = "sha256:1275f7a45be9464efc1173084eaa30f866fe2e47d389406136d332ed4967ec56"}, + {file = "certifi-2024.12.14.tar.gz", hash = "sha256:b650d30f370c2b724812bee08008be0c4163b163ddaec3f2546c1caf65f191db"}, ] [[package]] @@ -376,61 +376,61 @@ devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benc [[package]] name = "fonttools" -version = "4.55.2" +version = "4.55.3" description = "Tools to manipulate font files" optional = false python-versions = ">=3.8" files = [ - {file = "fonttools-4.55.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:bef0f8603834643b1a6419d57902f18e7d950ec1a998fb70410635c598dc1a1e"}, - {file = "fonttools-4.55.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:944228b86d472612d3b48bcc83b31c25c2271e63fdc74539adfcfa7a96d487fb"}, - {file = "fonttools-4.55.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f0e55f5da594b85f269cfbecd2f6bd3e07d0abba68870bc3f34854de4fa4678"}, - {file = "fonttools-4.55.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5b1a6e576db0c83c1b91925bf1363478c4bb968dbe8433147332fb5782ce6190"}, - {file = "fonttools-4.55.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:616368b15716781bc84df5c2191dc0540137aaef56c2771eb4b89b90933f347a"}, - {file = "fonttools-4.55.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7bbae4f3915225c2c37670da68e2bf18a21206060ad31dfb95fec91ef641caa7"}, - {file = "fonttools-4.55.2-cp310-cp310-win32.whl", hash = "sha256:8b02b10648d69d67a7eb055f4d3eedf4a85deb22fb7a19fbd9acbae7c7538199"}, - {file = "fonttools-4.55.2-cp310-cp310-win_amd64.whl", hash = "sha256:bbea0ab841113ac8e8edde067e099b7288ffc6ac2dded538b131c2c0595d5f77"}, - {file = "fonttools-4.55.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d34525e8141286fa976e14806639d32294bfb38d28bbdb5f6be9f46a1cd695a6"}, - {file = "fonttools-4.55.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0ecd1c2b1c2ec46bb73685bc5473c72e16ed0930ef79bc2919ccadc43a99fb16"}, - {file = "fonttools-4.55.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9008438ad59e5a8e403a62fbefef2b2ff377eb3857d90a3f2a5f4d674ff441b2"}, - {file = "fonttools-4.55.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:131591ac8d7a47043aaf29581aba755ae151d46e49d2bf49608601efd71e8b4d"}, - {file = "fonttools-4.55.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:4c83381c3e3e3d9caa25527c4300543578341f21aae89e4fbbb4debdda8d82a2"}, - {file = "fonttools-4.55.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:42aca564b575252fd9954ed0d91d97a24de24289a16ce8ff74ed0bdf5ecebf11"}, - {file = "fonttools-4.55.2-cp311-cp311-win32.whl", hash = "sha256:c6457f650ebe15baa17fc06e256227f0a47f46f80f27ec5a0b00160de8dc2c13"}, - {file = "fonttools-4.55.2-cp311-cp311-win_amd64.whl", hash = "sha256:5cfa67414d7414442a5635ff634384101c54f53bb7b0e04aa6a61b013fcce194"}, - {file = "fonttools-4.55.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:18f082445b8fe5e91c53e6184f4c1c73f3f965c8bcc614c6cd6effd573ce6c1a"}, - {file = "fonttools-4.55.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:27c0f91adbbd706e8acd1db73e3e510118e62d0ffb651864567dccc5b2339f90"}, - {file = "fonttools-4.55.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d8ccce035320d63dba0c35f52499322f5531dbe85bba1514c7cea26297e4c54"}, - {file = "fonttools-4.55.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96e126df9615df214ec7f04bebcf60076297fbc10b75c777ce58b702d7708ffb"}, - {file = "fonttools-4.55.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:508ebb42956a7a931c4092dfa2d9b4ffd4f94cea09b8211199090d2bd082506b"}, - {file = "fonttools-4.55.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c1b9de46ef7b683d50400abf9f1578eaceee271ff51c36bf4b7366f2be29f498"}, - {file = "fonttools-4.55.2-cp312-cp312-win32.whl", hash = "sha256:2df61d9fc15199cc86dad29f64dd686874a3a52dda0c2d8597d21f509f95c332"}, - {file = "fonttools-4.55.2-cp312-cp312-win_amd64.whl", hash = "sha256:d337ec087da8216a828574aa0525d869df0a2ac217a2efc1890974ddd1fbc5b9"}, - {file = "fonttools-4.55.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:10aff204e2edee1d312fa595c06f201adf8d528a3b659cfb34cd47eceaaa6a26"}, - {file = "fonttools-4.55.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:09fe922a3eff181fd07dd724cdb441fb6b9fc355fd1c0f1aa79aca60faf1fbdd"}, - {file = "fonttools-4.55.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:487e1e8b524143a799bda0169c48b44a23a6027c1bb1957d5a172a7d3a1dd704"}, - {file = "fonttools-4.55.2-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9b1726872e09268bbedb14dc02e58b7ea31ecdd1204c6073eda4911746b44797"}, - {file = "fonttools-4.55.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6fc88cfb58b0cd7b48718c3e61dd0d0a3ee8e2c86b973342967ce09fbf1db6d4"}, - {file = "fonttools-4.55.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e857fe1859901ad8c5cab32e0eebc920adb09f413d2d73b74b677cf47b28590c"}, - {file = "fonttools-4.55.2-cp313-cp313-win32.whl", hash = "sha256:81ccd2b3a420b8050c7d9db3be0555d71662973b3ef2a1d921a2880b58957db8"}, - {file = "fonttools-4.55.2-cp313-cp313-win_amd64.whl", hash = "sha256:d559eb1744c7dcfa90ae60cb1a4b3595e898e48f4198738c321468c01180cd83"}, - {file = "fonttools-4.55.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6b5917ef79cac8300b88fd6113003fd01bbbbea2ea060a27b95d8f77cb4c65c2"}, - {file = "fonttools-4.55.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:663eba5615d6abaaf616432354eb7ce951d518e43404371bcc2b0694ef21e8d6"}, - {file = "fonttools-4.55.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:803d5cef5fc47f44f5084d154aa3d6f069bb1b60e32390c225f897fa19b0f939"}, - {file = "fonttools-4.55.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8bc5f100de0173cc39102c0399bd6c3bd544bbdf224957933f10ee442d43cddd"}, - {file = "fonttools-4.55.2-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:3d9bbc1e380fdaf04ad9eabd8e3e6a4301eaf3487940893e9fd98537ea2e283b"}, - {file = "fonttools-4.55.2-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:42a9afedff07b6f75aa0f39b5e49922ac764580ef3efce035ca30284b2ee65c8"}, - {file = "fonttools-4.55.2-cp38-cp38-win32.whl", hash = "sha256:f1c76f423f1a241df08f87614364dff6e0b7ce23c962c1b74bd995ec7c0dad13"}, - {file = "fonttools-4.55.2-cp38-cp38-win_amd64.whl", hash = "sha256:25062b6ca03464dd5179fc2040fb19e03391b7cc49b9cc4f879312e638605c5c"}, - {file = "fonttools-4.55.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d1100d8e665fe386a79cab59446992de881ea74d0d6c191bb988642692aa2421"}, - {file = "fonttools-4.55.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:dbdc251c5e472e5ae6bc816f9b82718b8e93ff7992e7331d6cf3562b96aa268e"}, - {file = "fonttools-4.55.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0bf24d2b02dbc9376d795a63062632ff73e3e9e60c0229373f500aed7e86dd7"}, - {file = "fonttools-4.55.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d4ff250ed4ff05015dfd9cf2adf7570c7a383ca80f4d9732ac484a5ed0d8453c"}, - {file = "fonttools-4.55.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:44cf2a98aa661dbdeb8c03f5e405b074e2935196780bb729888639f5276067d9"}, - {file = "fonttools-4.55.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:22ef222740eb89d189bf0612eb98fbae592c61d7efeac51bfbc2a1592d469557"}, - {file = "fonttools-4.55.2-cp39-cp39-win32.whl", hash = "sha256:93f439ca27e55f585e7aaa04a74990acd983b5f2245e41d6b79f0a8b44e684d8"}, - {file = "fonttools-4.55.2-cp39-cp39-win_amd64.whl", hash = "sha256:627cf10d6f5af5bec6324c18a2670f134c29e1b7dce3fb62e8ef88baa6cba7a9"}, - {file = "fonttools-4.55.2-py3-none-any.whl", hash = "sha256:8e2d89fbe9b08d96e22c7a81ec04a4e8d8439c31223e2dc6f2f9fc8ff14bdf9f"}, - {file = "fonttools-4.55.2.tar.gz", hash = "sha256:45947e7b3f9673f91df125d375eb57b9a23f2a603f438a1aebf3171bffa7a205"}, + {file = "fonttools-4.55.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1dcc07934a2165ccdc3a5a608db56fb3c24b609658a5b340aee4ecf3ba679dc0"}, + {file = "fonttools-4.55.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f7d66c15ba875432a2d2fb419523f5d3d347f91f48f57b8b08a2dfc3c39b8a3f"}, + {file = "fonttools-4.55.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:27e4ae3592e62eba83cd2c4ccd9462dcfa603ff78e09110680a5444c6925d841"}, + {file = "fonttools-4.55.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:62d65a3022c35e404d19ca14f291c89cc5890032ff04f6c17af0bd1927299674"}, + {file = "fonttools-4.55.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d342e88764fb201286d185093781bf6628bbe380a913c24adf772d901baa8276"}, + {file = "fonttools-4.55.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:dd68c87a2bfe37c5b33bcda0fba39b65a353876d3b9006fde3adae31f97b3ef5"}, + {file = "fonttools-4.55.3-cp310-cp310-win32.whl", hash = "sha256:1bc7ad24ff98846282eef1cbeac05d013c2154f977a79886bb943015d2b1b261"}, + {file = "fonttools-4.55.3-cp310-cp310-win_amd64.whl", hash = "sha256:b54baf65c52952db65df39fcd4820668d0ef4766c0ccdf32879b77f7c804d5c5"}, + {file = "fonttools-4.55.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8c4491699bad88efe95772543cd49870cf756b019ad56294f6498982408ab03e"}, + {file = "fonttools-4.55.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5323a22eabddf4b24f66d26894f1229261021dacd9d29e89f7872dd8c63f0b8b"}, + {file = "fonttools-4.55.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5480673f599ad410695ca2ddef2dfefe9df779a9a5cda89503881e503c9c7d90"}, + {file = "fonttools-4.55.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da9da6d65cd7aa6b0f806556f4985bcbf603bf0c5c590e61b43aa3e5a0f822d0"}, + {file = "fonttools-4.55.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e894b5bd60d9f473bed7a8f506515549cc194de08064d829464088d23097331b"}, + {file = "fonttools-4.55.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:aee3b57643827e237ff6ec6d28d9ff9766bd8b21e08cd13bff479e13d4b14765"}, + {file = "fonttools-4.55.3-cp311-cp311-win32.whl", hash = "sha256:eb6ca911c4c17eb51853143624d8dc87cdcdf12a711fc38bf5bd21521e79715f"}, + {file = "fonttools-4.55.3-cp311-cp311-win_amd64.whl", hash = "sha256:6314bf82c54c53c71805318fcf6786d986461622dd926d92a465199ff54b1b72"}, + {file = "fonttools-4.55.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:f9e736f60f4911061235603a6119e72053073a12c6d7904011df2d8fad2c0e35"}, + {file = "fonttools-4.55.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7a8aa2c5e5b8b3bcb2e4538d929f6589a5c6bdb84fd16e2ed92649fb5454f11c"}, + {file = "fonttools-4.55.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:07f8288aacf0a38d174445fc78377a97fb0b83cfe352a90c9d9c1400571963c7"}, + {file = "fonttools-4.55.3-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8d5e8916c0970fbc0f6f1bece0063363bb5857a7f170121a4493e31c3db3314"}, + {file = "fonttools-4.55.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ae3b6600565b2d80b7c05acb8e24d2b26ac407b27a3f2e078229721ba5698427"}, + {file = "fonttools-4.55.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:54153c49913f45065c8d9e6d0c101396725c5621c8aee744719300f79771d75a"}, + {file = "fonttools-4.55.3-cp312-cp312-win32.whl", hash = "sha256:827e95fdbbd3e51f8b459af5ea10ecb4e30af50221ca103bea68218e9615de07"}, + {file = "fonttools-4.55.3-cp312-cp312-win_amd64.whl", hash = "sha256:e6e8766eeeb2de759e862004aa11a9ea3d6f6d5ec710551a88b476192b64fd54"}, + {file = "fonttools-4.55.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a430178ad3e650e695167cb53242dae3477b35c95bef6525b074d87493c4bf29"}, + {file = "fonttools-4.55.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:529cef2ce91dc44f8e407cc567fae6e49a1786f2fefefa73a294704c415322a4"}, + {file = "fonttools-4.55.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e75f12c82127486fac2d8bfbf5bf058202f54bf4f158d367e41647b972342ca"}, + {file = "fonttools-4.55.3-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:859c358ebf41db18fb72342d3080bce67c02b39e86b9fbcf1610cca14984841b"}, + {file = "fonttools-4.55.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:546565028e244a701f73df6d8dd6be489d01617863ec0c6a42fa25bf45d43048"}, + {file = "fonttools-4.55.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:aca318b77f23523309eec4475d1fbbb00a6b133eb766a8bdc401faba91261abe"}, + {file = "fonttools-4.55.3-cp313-cp313-win32.whl", hash = "sha256:8c5ec45428edaa7022f1c949a632a6f298edc7b481312fc7dc258921e9399628"}, + {file = "fonttools-4.55.3-cp313-cp313-win_amd64.whl", hash = "sha256:11e5de1ee0d95af4ae23c1a138b184b7f06e0b6abacabf1d0db41c90b03d834b"}, + {file = "fonttools-4.55.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:caf8230f3e10f8f5d7593eb6d252a37caf58c480b19a17e250a63dad63834cf3"}, + {file = "fonttools-4.55.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b586ab5b15b6097f2fb71cafa3c98edfd0dba1ad8027229e7b1e204a58b0e09d"}, + {file = "fonttools-4.55.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a8c2794ded89399cc2169c4d0bf7941247b8d5932b2659e09834adfbb01589aa"}, + {file = "fonttools-4.55.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf4fe7c124aa3f4e4c1940880156e13f2f4d98170d35c749e6b4f119a872551e"}, + {file = "fonttools-4.55.3-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:86721fbc389ef5cc1e2f477019e5069e8e4421e8d9576e9c26f840dbb04678de"}, + {file = "fonttools-4.55.3-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:89bdc5d88bdeec1b15af790810e267e8332d92561dce4f0748c2b95c9bdf3926"}, + {file = "fonttools-4.55.3-cp38-cp38-win32.whl", hash = "sha256:bc5dbb4685e51235ef487e4bd501ddfc49be5aede5e40f4cefcccabc6e60fb4b"}, + {file = "fonttools-4.55.3-cp38-cp38-win_amd64.whl", hash = "sha256:cd70de1a52a8ee2d1877b6293af8a2484ac82514f10b1c67c1c5762d38073e56"}, + {file = "fonttools-4.55.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:bdcc9f04b36c6c20978d3f060e5323a43f6222accc4e7fcbef3f428e216d96af"}, + {file = "fonttools-4.55.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c3ca99e0d460eff46e033cd3992a969658c3169ffcd533e0a39c63a38beb6831"}, + {file = "fonttools-4.55.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22f38464daa6cdb7b6aebd14ab06609328fe1e9705bb0fcc7d1e69de7109ee02"}, + {file = "fonttools-4.55.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ed63959d00b61959b035c7d47f9313c2c1ece090ff63afea702fe86de00dbed4"}, + {file = "fonttools-4.55.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5e8d657cd7326eeaba27de2740e847c6b39dde2f8d7cd7cc56f6aad404ddf0bd"}, + {file = "fonttools-4.55.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:fb594b5a99943042c702c550d5494bdd7577f6ef19b0bc73877c948a63184a32"}, + {file = "fonttools-4.55.3-cp39-cp39-win32.whl", hash = "sha256:dc5294a3d5c84226e3dbba1b6f61d7ad813a8c0238fceea4e09aa04848c3d851"}, + {file = "fonttools-4.55.3-cp39-cp39-win_amd64.whl", hash = "sha256:aedbeb1db64496d098e6be92b2e63b5fac4e53b1b92032dfc6988e1ea9134a4d"}, + {file = "fonttools-4.55.3-py3-none-any.whl", hash = "sha256:f412604ccbeee81b091b420272841e5ec5ef68967a9790e80bffd0e30b8e2977"}, + {file = "fonttools-4.55.3.tar.gz", hash = "sha256:3983313c2a04d6cc1fe9251f8fc647754cf49a61dac6cb1e7249ae67afaafc45"}, ] [package.extras] @@ -593,6 +593,39 @@ files = [ [package.extras] all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] +[[package]] +name = "imageio" +version = "2.36.1" +description = "Library for reading and writing a wide range of image, video, scientific, and volumetric data formats." +optional = false +python-versions = ">=3.9" +files = [ + {file = "imageio-2.36.1-py3-none-any.whl", hash = "sha256:20abd2cae58e55ca1af8a8dcf43293336a59adf0391f1917bf8518633cfc2cdf"}, + {file = "imageio-2.36.1.tar.gz", hash = "sha256:e4e1d231f47f9a9e16100b0f7ce1a86e8856fb4d1c0fa2c4365a316f1746be62"}, +] + +[package.dependencies] +numpy = "*" +pillow = ">=8.3.2" + +[package.extras] +all-plugins = ["astropy", "av", "imageio-ffmpeg", "numpy (>2)", "pillow-heif", "psutil", "rawpy", "tifffile"] +all-plugins-pypy = ["av", "imageio-ffmpeg", "pillow-heif", "psutil", "tifffile"] +build = ["wheel"] +dev = ["black", "flake8", "fsspec[github]", "pytest", "pytest-cov"] +docs = ["numpydoc", "pydata-sphinx-theme", "sphinx (<6)"] +ffmpeg = ["imageio-ffmpeg", "psutil"] +fits = ["astropy"] +full = ["astropy", "av", "black", "flake8", "fsspec[github]", "gdal", "imageio-ffmpeg", "itk", "numpy (>2)", "numpydoc", "pillow-heif", "psutil", "pydata-sphinx-theme", "pytest", "pytest-cov", "rawpy", "sphinx (<6)", "tifffile", "wheel"] +gdal = ["gdal"] +itk = ["itk"] +linting = ["black", "flake8"] +pillow-heif = ["pillow-heif"] +pyav = ["av"] +rawpy = ["numpy (>2)", "rawpy"] +test = ["fsspec[github]", "pytest", "pytest-cov"] +tifffile = ["tifffile"] + [[package]] name = "immutables" version = "0.21" @@ -1075,52 +1108,45 @@ files = [ [[package]] name = "matplotlib" -version = "3.9.3" +version = "3.10.0" description = "Python plotting package" optional = false -python-versions = ">=3.9" +python-versions = ">=3.10" files = [ - {file = "matplotlib-3.9.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:41b016e3be4e740b66c79a031a0a6e145728dbc248142e751e8dab4f3188ca1d"}, - {file = "matplotlib-3.9.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e0143975fc2a6d7136c97e19c637321288371e8f09cff2564ecd73e865ea0b9"}, - {file = "matplotlib-3.9.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f459c8ee2c086455744723628264e43c884be0c7d7b45d84b8cd981310b4815"}, - {file = "matplotlib-3.9.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:687df7ceff57b8f070d02b4db66f75566370e7ae182a0782b6d3d21b0d6917dc"}, - {file = "matplotlib-3.9.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:edd14cf733fdc4f6e6fe3f705af97676a7e52859bf0044aa2c84e55be739241c"}, - {file = "matplotlib-3.9.3-cp310-cp310-win_amd64.whl", hash = "sha256:1c40c244221a1adbb1256692b1133c6fb89418df27bf759a31a333e7912a4010"}, - {file = "matplotlib-3.9.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:cf2a60daf6cecff6828bc608df00dbc794380e7234d2411c0ec612811f01969d"}, - {file = "matplotlib-3.9.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:213d6dc25ce686516208d8a3e91120c6a4fdae4a3e06b8505ced5b716b50cc04"}, - {file = "matplotlib-3.9.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c52f48eb75fcc119a4fdb68ba83eb5f71656999420375df7c94cc68e0e14686e"}, - {file = "matplotlib-3.9.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3c93796b44fa111049b88a24105e947f03c01966b5c0cc782e2ee3887b790a3"}, - {file = "matplotlib-3.9.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:cd1077b9a09b16d8c3c7075a8add5ffbfe6a69156a57e290c800ed4d435bef1d"}, - {file = "matplotlib-3.9.3-cp311-cp311-win_amd64.whl", hash = "sha256:c96eeeb8c68b662c7747f91a385688d4b449687d29b691eff7068a4602fe6dc4"}, - {file = "matplotlib-3.9.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:0a361bd5583bf0bcc08841df3c10269617ee2a36b99ac39d455a767da908bbbc"}, - {file = "matplotlib-3.9.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e14485bb1b83eeb3d55b6878f9560240981e7bbc7a8d4e1e8c38b9bd6ec8d2de"}, - {file = "matplotlib-3.9.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4a8d279f78844aad213c4935c18f8292a9432d51af2d88bca99072c903948045"}, - {file = "matplotlib-3.9.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6c12514329ac0d03128cf1dcceb335f4fbf7c11da98bca68dca8dcb983153a9"}, - {file = "matplotlib-3.9.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:6e9de2b390d253a508dd497e9b5579f3a851f208763ed67fdca5dc0c3ea6849c"}, - {file = "matplotlib-3.9.3-cp312-cp312-win_amd64.whl", hash = "sha256:d796272408f8567ff7eaa00eb2856b3a00524490e47ad505b0b4ca6bb8a7411f"}, - {file = "matplotlib-3.9.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:203d18df84f5288973b2d56de63d4678cc748250026ca9e1ad8f8a0fd8a75d83"}, - {file = "matplotlib-3.9.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:b651b0d3642991259109dc0351fc33ad44c624801367bb8307be9bfc35e427ad"}, - {file = "matplotlib-3.9.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:66d7b171fecf96940ce069923a08ba3df33ef542de82c2ff4fe8caa8346fa95a"}, - {file = "matplotlib-3.9.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6be0ba61f6ff2e6b68e4270fb63b6813c9e7dec3d15fc3a93f47480444fd72f0"}, - {file = "matplotlib-3.9.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9d6b2e8856dec3a6db1ae51aec85c82223e834b228c1d3228aede87eee2b34f9"}, - {file = "matplotlib-3.9.3-cp313-cp313-win_amd64.whl", hash = "sha256:90a85a004fefed9e583597478420bf904bb1a065b0b0ee5b9d8d31b04b0f3f70"}, - {file = "matplotlib-3.9.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:3119b2f16de7f7b9212ba76d8fe6a0e9f90b27a1e04683cd89833a991682f639"}, - {file = "matplotlib-3.9.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:87ad73763d93add1b6c1f9fcd33af662fd62ed70e620c52fcb79f3ac427cf3a6"}, - {file = "matplotlib-3.9.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:026bdf3137ab6022c866efa4813b6bbeddc2ed4c9e7e02f0e323a7bca380dfa0"}, - {file = "matplotlib-3.9.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:760a5e89ebbb172989e8273024a1024b0f084510b9105261b3b00c15e9c9f006"}, - {file = "matplotlib-3.9.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a42b9dc42de2cfe357efa27d9c50c7833fc5ab9b2eb7252ccd5d5f836a84e1e4"}, - {file = "matplotlib-3.9.3-cp313-cp313t-win_amd64.whl", hash = "sha256:e0fcb7da73fbf67b5f4bdaa57d85bb585a4e913d4a10f3e15b32baea56a67f0a"}, - {file = "matplotlib-3.9.3-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:031b7f5b8e595cc07def77ec5b58464e9bb67dc5760be5d6f26d9da24892481d"}, - {file = "matplotlib-3.9.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9fa6e193c14d6944e0685cdb527cb6b38b0e4a518043e7212f214113af7391da"}, - {file = "matplotlib-3.9.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e6eefae6effa0c35bbbc18c25ee6e0b1da44d2359c3cd526eb0c9e703cf055d"}, - {file = "matplotlib-3.9.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10d3e5c7a99bd28afb957e1ae661323b0800d75b419f24d041ed1cc5d844a764"}, - {file = "matplotlib-3.9.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:816a966d5d376bf24c92af8f379e78e67278833e4c7cbc9fa41872eec629a060"}, - {file = "matplotlib-3.9.3-cp39-cp39-win_amd64.whl", hash = "sha256:3fb0b37c896172899a4a93d9442ffdc6f870165f59e05ce2e07c6fded1c15749"}, - {file = "matplotlib-3.9.3-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:5f2a4ea08e6876206d511365b0bc234edc813d90b930be72c3011bbd7898796f"}, - {file = "matplotlib-3.9.3-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:9b081dac96ab19c54fd8558fac17c9d2c9cb5cc4656e7ed3261ddc927ba3e2c5"}, - {file = "matplotlib-3.9.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0a0a63cb8404d1d1f94968ef35738900038137dab8af836b6c21bb6f03d75465"}, - {file = "matplotlib-3.9.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:896774766fd6be4571a43bc2fcbcb1dcca0807e53cab4a5bf88c4aa861a08e12"}, - {file = "matplotlib-3.9.3.tar.gz", hash = "sha256:cd5dbbc8e25cad5f706845c4d100e2c8b34691b412b93717ce38d8ae803bcfa5"}, + {file = "matplotlib-3.10.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2c5829a5a1dd5a71f0e31e6e8bb449bc0ee9dbfb05ad28fc0c6b55101b3a4be6"}, + {file = "matplotlib-3.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a2a43cbefe22d653ab34bb55d42384ed30f611bcbdea1f8d7f431011a2e1c62e"}, + {file = "matplotlib-3.10.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:607b16c8a73943df110f99ee2e940b8a1cbf9714b65307c040d422558397dac5"}, + {file = "matplotlib-3.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:01d2b19f13aeec2e759414d3bfe19ddfb16b13a1250add08d46d5ff6f9be83c6"}, + {file = "matplotlib-3.10.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5e6c6461e1fc63df30bf6f80f0b93f5b6784299f721bc28530477acd51bfc3d1"}, + {file = "matplotlib-3.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:994c07b9d9fe8d25951e3202a68c17900679274dadfc1248738dcfa1bd40d7f3"}, + {file = "matplotlib-3.10.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:fd44fc75522f58612ec4a33958a7e5552562b7705b42ef1b4f8c0818e304a363"}, + {file = "matplotlib-3.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c58a9622d5dbeb668f407f35f4e6bfac34bb9ecdcc81680c04d0258169747997"}, + {file = "matplotlib-3.10.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:845d96568ec873be63f25fa80e9e7fae4be854a66a7e2f0c8ccc99e94a8bd4ef"}, + {file = "matplotlib-3.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5439f4c5a3e2e8eab18e2f8c3ef929772fd5641876db71f08127eed95ab64683"}, + {file = "matplotlib-3.10.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4673ff67a36152c48ddeaf1135e74ce0d4bce1bbf836ae40ed39c29edf7e2765"}, + {file = "matplotlib-3.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:7e8632baebb058555ac0cde75db885c61f1212e47723d63921879806b40bec6a"}, + {file = "matplotlib-3.10.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4659665bc7c9b58f8c00317c3c2a299f7f258eeae5a5d56b4c64226fca2f7c59"}, + {file = "matplotlib-3.10.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d44cb942af1693cced2604c33a9abcef6205601c445f6d0dc531d813af8a2f5a"}, + {file = "matplotlib-3.10.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a994f29e968ca002b50982b27168addfd65f0105610b6be7fa515ca4b5307c95"}, + {file = "matplotlib-3.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9b0558bae37f154fffda54d779a592bc97ca8b4701f1c710055b609a3bac44c8"}, + {file = "matplotlib-3.10.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:503feb23bd8c8acc75541548a1d709c059b7184cde26314896e10a9f14df5f12"}, + {file = "matplotlib-3.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:c40ba2eb08b3f5de88152c2333c58cee7edcead0a2a0d60fcafa116b17117adc"}, + {file = "matplotlib-3.10.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:96f2886f5c1e466f21cc41b70c5a0cd47bfa0015eb2d5793c88ebce658600e25"}, + {file = "matplotlib-3.10.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:12eaf48463b472c3c0f8dbacdbf906e573013df81a0ab82f0616ea4b11281908"}, + {file = "matplotlib-3.10.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2fbbabc82fde51391c4da5006f965e36d86d95f6ee83fb594b279564a4c5d0d2"}, + {file = "matplotlib-3.10.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad2e15300530c1a94c63cfa546e3b7864bd18ea2901317bae8bbf06a5ade6dcf"}, + {file = "matplotlib-3.10.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:3547d153d70233a8496859097ef0312212e2689cdf8d7ed764441c77604095ae"}, + {file = "matplotlib-3.10.0-cp313-cp313-win_amd64.whl", hash = "sha256:c55b20591ced744aa04e8c3e4b7543ea4d650b6c3c4b208c08a05b4010e8b442"}, + {file = "matplotlib-3.10.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:9ade1003376731a971e398cc4ef38bb83ee8caf0aee46ac6daa4b0506db1fd06"}, + {file = "matplotlib-3.10.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:95b710fea129c76d30be72c3b38f330269363fbc6e570a5dd43580487380b5ff"}, + {file = "matplotlib-3.10.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5cdbaf909887373c3e094b0318d7ff230b2ad9dcb64da7ade654182872ab2593"}, + {file = "matplotlib-3.10.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d907fddb39f923d011875452ff1eca29a9e7f21722b873e90db32e5d8ddff12e"}, + {file = "matplotlib-3.10.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:3b427392354d10975c1d0f4ee18aa5844640b512d5311ef32efd4dd7db106ede"}, + {file = "matplotlib-3.10.0-cp313-cp313t-win_amd64.whl", hash = "sha256:5fd41b0ec7ee45cd960a8e71aea7c946a28a0b8a4dcee47d2856b2af051f334c"}, + {file = "matplotlib-3.10.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:81713dd0d103b379de4516b861d964b1d789a144103277769238c732229d7f03"}, + {file = "matplotlib-3.10.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:359f87baedb1f836ce307f0e850d12bb5f1936f70d035561f90d41d305fdacea"}, + {file = "matplotlib-3.10.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ae80dc3a4add4665cf2faa90138384a7ffe2a4e37c58d83e115b54287c4f06ef"}, + {file = "matplotlib-3.10.0.tar.gz", hash = "sha256:b886d02a581b96704c9d1ffe55709e49b4d2d52709ccebc4be42db856e511278"}, ] [package.dependencies] @@ -1135,7 +1161,7 @@ pyparsing = ">=2.3.1" python-dateutil = ">=2.7" [package.extras] -dev = ["meson-python (>=0.13.1)", "numpy (>=1.25)", "pybind11 (>=2.6,!=2.13.3)", "setuptools (>=64)", "setuptools_scm (>=7)"] +dev = ["meson-python (>=0.13.1,<0.17.0)", "pybind11 (>=2.13.2,!=2.13.3)", "setuptools (>=64)", "setuptools_scm (>=7)"] [[package]] name = "nbformat" @@ -1160,66 +1186,66 @@ test = ["pep440", "pre-commit", "pytest", "testpath"] [[package]] name = "numpy" -version = "2.1.3" +version = "2.2.0" description = "Fundamental package for array computing in Python" optional = false python-versions = ">=3.10" files = [ - {file = "numpy-2.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c894b4305373b9c5576d7a12b473702afdf48ce5369c074ba304cc5ad8730dff"}, - {file = "numpy-2.1.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b47fbb433d3260adcd51eb54f92a2ffbc90a4595f8970ee00e064c644ac788f5"}, - {file = "numpy-2.1.3-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:825656d0743699c529c5943554d223c021ff0494ff1442152ce887ef4f7561a1"}, - {file = "numpy-2.1.3-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:6a4825252fcc430a182ac4dee5a505053d262c807f8a924603d411f6718b88fd"}, - {file = "numpy-2.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e711e02f49e176a01d0349d82cb5f05ba4db7d5e7e0defd026328e5cfb3226d3"}, - {file = "numpy-2.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78574ac2d1a4a02421f25da9559850d59457bac82f2b8d7a44fe83a64f770098"}, - {file = "numpy-2.1.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c7662f0e3673fe4e832fe07b65c50342ea27d989f92c80355658c7f888fcc83c"}, - {file = "numpy-2.1.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:fa2d1337dc61c8dc417fbccf20f6d1e139896a30721b7f1e832b2bb6ef4eb6c4"}, - {file = "numpy-2.1.3-cp310-cp310-win32.whl", hash = "sha256:72dcc4a35a8515d83e76b58fdf8113a5c969ccd505c8a946759b24e3182d1f23"}, - {file = "numpy-2.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:ecc76a9ba2911d8d37ac01de72834d8849e55473457558e12995f4cd53e778e0"}, - {file = "numpy-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4d1167c53b93f1f5d8a139a742b3c6f4d429b54e74e6b57d0eff40045187b15d"}, - {file = "numpy-2.1.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c80e4a09b3d95b4e1cac08643f1152fa71a0a821a2d4277334c88d54b2219a41"}, - {file = "numpy-2.1.3-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:576a1c1d25e9e02ed7fa5477f30a127fe56debd53b8d2c89d5578f9857d03ca9"}, - {file = "numpy-2.1.3-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:973faafebaae4c0aaa1a1ca1ce02434554d67e628b8d805e61f874b84e136b09"}, - {file = "numpy-2.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:762479be47a4863e261a840e8e01608d124ee1361e48b96916f38b119cfda04a"}, - {file = "numpy-2.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc6f24b3d1ecc1eebfbf5d6051faa49af40b03be1aaa781ebdadcbc090b4539b"}, - {file = "numpy-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:17ee83a1f4fef3c94d16dc1802b998668b5419362c8a4f4e8a491de1b41cc3ee"}, - {file = "numpy-2.1.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:15cb89f39fa6d0bdfb600ea24b250e5f1a3df23f901f51c8debaa6a5d122b2f0"}, - {file = "numpy-2.1.3-cp311-cp311-win32.whl", hash = "sha256:d9beb777a78c331580705326d2367488d5bc473b49a9bc3036c154832520aca9"}, - {file = "numpy-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:d89dd2b6da69c4fff5e39c28a382199ddedc3a5be5390115608345dec660b9e2"}, - {file = "numpy-2.1.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f55ba01150f52b1027829b50d70ef1dafd9821ea82905b63936668403c3b471e"}, - {file = "numpy-2.1.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:13138eadd4f4da03074851a698ffa7e405f41a0845a6b1ad135b81596e4e9958"}, - {file = "numpy-2.1.3-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:a6b46587b14b888e95e4a24d7b13ae91fa22386c199ee7b418f449032b2fa3b8"}, - {file = "numpy-2.1.3-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:0fa14563cc46422e99daef53d725d0c326e99e468a9320a240affffe87852564"}, - {file = "numpy-2.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8637dcd2caa676e475503d1f8fdb327bc495554e10838019651b76d17b98e512"}, - {file = "numpy-2.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2312b2aa89e1f43ecea6da6ea9a810d06aae08321609d8dc0d0eda6d946a541b"}, - {file = "numpy-2.1.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a38c19106902bb19351b83802531fea19dee18e5b37b36454f27f11ff956f7fc"}, - {file = "numpy-2.1.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:02135ade8b8a84011cbb67dc44e07c58f28575cf9ecf8ab304e51c05528c19f0"}, - {file = "numpy-2.1.3-cp312-cp312-win32.whl", hash = "sha256:e6988e90fcf617da2b5c78902fe8e668361b43b4fe26dbf2d7b0f8034d4cafb9"}, - {file = "numpy-2.1.3-cp312-cp312-win_amd64.whl", hash = "sha256:0d30c543f02e84e92c4b1f415b7c6b5326cbe45ee7882b6b77db7195fb971e3a"}, - {file = "numpy-2.1.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:96fe52fcdb9345b7cd82ecd34547fca4321f7656d500eca497eb7ea5a926692f"}, - {file = "numpy-2.1.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f653490b33e9c3a4c1c01d41bc2aef08f9475af51146e4a7710c450cf9761598"}, - {file = "numpy-2.1.3-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:dc258a761a16daa791081d026f0ed4399b582712e6fc887a95af09df10c5ca57"}, - {file = "numpy-2.1.3-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:016d0f6f5e77b0f0d45d77387ffa4bb89816b57c835580c3ce8e099ef830befe"}, - {file = "numpy-2.1.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c181ba05ce8299c7aa3125c27b9c2167bca4a4445b7ce73d5febc411ca692e43"}, - {file = "numpy-2.1.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5641516794ca9e5f8a4d17bb45446998c6554704d888f86df9b200e66bdcce56"}, - {file = "numpy-2.1.3-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ea4dedd6e394a9c180b33c2c872b92f7ce0f8e7ad93e9585312b0c5a04777a4a"}, - {file = "numpy-2.1.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b0df3635b9c8ef48bd3be5f862cf71b0a4716fa0e702155c45067c6b711ddcef"}, - {file = "numpy-2.1.3-cp313-cp313-win32.whl", hash = "sha256:50ca6aba6e163363f132b5c101ba078b8cbd3fa92c7865fd7d4d62d9779ac29f"}, - {file = "numpy-2.1.3-cp313-cp313-win_amd64.whl", hash = "sha256:747641635d3d44bcb380d950679462fae44f54b131be347d5ec2bce47d3df9ed"}, - {file = "numpy-2.1.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:996bb9399059c5b82f76b53ff8bb686069c05acc94656bb259b1d63d04a9506f"}, - {file = "numpy-2.1.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:45966d859916ad02b779706bb43b954281db43e185015df6eb3323120188f9e4"}, - {file = "numpy-2.1.3-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:baed7e8d7481bfe0874b566850cb0b85243e982388b7b23348c6db2ee2b2ae8e"}, - {file = "numpy-2.1.3-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:a9f7f672a3388133335589cfca93ed468509cb7b93ba3105fce780d04a6576a0"}, - {file = "numpy-2.1.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7aac50327da5d208db2eec22eb11e491e3fe13d22653dce51b0f4109101b408"}, - {file = "numpy-2.1.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4394bc0dbd074b7f9b52024832d16e019decebf86caf909d94f6b3f77a8ee3b6"}, - {file = "numpy-2.1.3-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:50d18c4358a0a8a53f12a8ba9d772ab2d460321e6a93d6064fc22443d189853f"}, - {file = "numpy-2.1.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:14e253bd43fc6b37af4921b10f6add6925878a42a0c5fe83daee390bca80bc17"}, - {file = "numpy-2.1.3-cp313-cp313t-win32.whl", hash = "sha256:08788d27a5fd867a663f6fc753fd7c3ad7e92747efc73c53bca2f19f8bc06f48"}, - {file = "numpy-2.1.3-cp313-cp313t-win_amd64.whl", hash = "sha256:2564fbdf2b99b3f815f2107c1bbc93e2de8ee655a69c261363a1172a79a257d4"}, - {file = "numpy-2.1.3-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:4f2015dfe437dfebbfce7c85c7b53d81ba49e71ba7eadbf1df40c915af75979f"}, - {file = "numpy-2.1.3-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:3522b0dfe983a575e6a9ab3a4a4dfe156c3e428468ff08ce582b9bb6bd1d71d4"}, - {file = "numpy-2.1.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c006b607a865b07cd981ccb218a04fc86b600411d83d6fc261357f1c0966755d"}, - {file = "numpy-2.1.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:e14e26956e6f1696070788252dcdff11b4aca4c3e8bd166e0df1bb8f315a67cb"}, - {file = "numpy-2.1.3.tar.gz", hash = "sha256:aa08e04e08aaf974d4458def539dece0d28146d866a39da5639596f4921fd761"}, + {file = "numpy-2.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1e25507d85da11ff5066269d0bd25d06e0a0f2e908415534f3e603d2a78e4ffa"}, + {file = "numpy-2.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a62eb442011776e4036af5c8b1a00b706c5bc02dc15eb5344b0c750428c94219"}, + {file = "numpy-2.2.0-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:b606b1aaf802e6468c2608c65ff7ece53eae1a6874b3765f69b8ceb20c5fa78e"}, + {file = "numpy-2.2.0-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:36b2b43146f646642b425dd2027730f99bac962618ec2052932157e213a040e9"}, + {file = "numpy-2.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7fe8f3583e0607ad4e43a954e35c1748b553bfe9fdac8635c02058023277d1b3"}, + {file = "numpy-2.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:122fd2fcfafdefc889c64ad99c228d5a1f9692c3a83f56c292618a59aa60ae83"}, + {file = "numpy-2.2.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3f2f5cddeaa4424a0a118924b988746db6ffa8565e5829b1841a8a3bd73eb59a"}, + {file = "numpy-2.2.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7fe4bb0695fe986a9e4deec3b6857003b4cfe5c5e4aac0b95f6a658c14635e31"}, + {file = "numpy-2.2.0-cp310-cp310-win32.whl", hash = "sha256:b30042fe92dbd79f1ba7f6898fada10bdaad1847c44f2dff9a16147e00a93661"}, + {file = "numpy-2.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:54dc1d6d66f8d37843ed281773c7174f03bf7ad826523f73435deb88ba60d2d4"}, + {file = "numpy-2.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9874bc2ff574c40ab7a5cbb7464bf9b045d617e36754a7bc93f933d52bd9ffc6"}, + {file = "numpy-2.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0da8495970f6b101ddd0c38ace92edea30e7e12b9a926b57f5fabb1ecc25bb90"}, + {file = "numpy-2.2.0-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:0557eebc699c1c34cccdd8c3778c9294e8196df27d713706895edc6f57d29608"}, + {file = "numpy-2.2.0-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:3579eaeb5e07f3ded59298ce22b65f877a86ba8e9fe701f5576c99bb17c283da"}, + {file = "numpy-2.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40deb10198bbaa531509aad0cd2f9fadb26c8b94070831e2208e7df543562b74"}, + {file = "numpy-2.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c2aed8fcf8abc3020d6a9ccb31dbc9e7d7819c56a348cc88fd44be269b37427e"}, + {file = "numpy-2.2.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a222d764352c773aa5ebde02dd84dba3279c81c6db2e482d62a3fa54e5ece69b"}, + {file = "numpy-2.2.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4e58666988605e251d42c2818c7d3d8991555381be26399303053b58a5bbf30d"}, + {file = "numpy-2.2.0-cp311-cp311-win32.whl", hash = "sha256:4723a50e1523e1de4fccd1b9a6dcea750c2102461e9a02b2ac55ffeae09a4410"}, + {file = "numpy-2.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:16757cf28621e43e252c560d25b15f18a2f11da94fea344bf26c599b9cf54b73"}, + {file = "numpy-2.2.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:cff210198bb4cae3f3c100444c5eaa573a823f05c253e7188e1362a5555235b3"}, + {file = "numpy-2.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:58b92a5828bd4d9aa0952492b7de803135038de47343b2aa3cc23f3b71a3dc4e"}, + {file = "numpy-2.2.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:ebe5e59545401fbb1b24da76f006ab19734ae71e703cdb4a8b347e84a0cece67"}, + {file = "numpy-2.2.0-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:e2b8cd48a9942ed3f85b95ca4105c45758438c7ed28fff1e4ce3e57c3b589d8e"}, + {file = "numpy-2.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:57fcc997ffc0bef234b8875a54d4058afa92b0b0c4223fc1f62f24b3b5e86038"}, + {file = "numpy-2.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85ad7d11b309bd132d74397fcf2920933c9d1dc865487128f5c03d580f2c3d03"}, + {file = "numpy-2.2.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:cb24cca1968b21355cc6f3da1a20cd1cebd8a023e3c5b09b432444617949085a"}, + {file = "numpy-2.2.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0798b138c291d792f8ea40fe3768610f3c7dd2574389e37c3f26573757c8f7ef"}, + {file = "numpy-2.2.0-cp312-cp312-win32.whl", hash = "sha256:afe8fb968743d40435c3827632fd36c5fbde633b0423da7692e426529b1759b1"}, + {file = "numpy-2.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:3a4199f519e57d517ebd48cb76b36c82da0360781c6a0353e64c0cac30ecaad3"}, + {file = "numpy-2.2.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f8c8b141ef9699ae777c6278b52c706b653bf15d135d302754f6b2e90eb30367"}, + {file = "numpy-2.2.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0f0986e917aca18f7a567b812ef7ca9391288e2acb7a4308aa9d265bd724bdae"}, + {file = "numpy-2.2.0-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:1c92113619f7b272838b8d6702a7f8ebe5edea0df48166c47929611d0b4dea69"}, + {file = "numpy-2.2.0-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:5a145e956b374e72ad1dff82779177d4a3c62bc8248f41b80cb5122e68f22d13"}, + {file = "numpy-2.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18142b497d70a34b01642b9feabb70156311b326fdddd875a9981f34a369b671"}, + {file = "numpy-2.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a7d41d1612c1a82b64697e894b75db6758d4f21c3ec069d841e60ebe54b5b571"}, + {file = "numpy-2.2.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a98f6f20465e7618c83252c02041517bd2f7ea29be5378f09667a8f654a5918d"}, + {file = "numpy-2.2.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e09d40edfdb4e260cb1567d8ae770ccf3b8b7e9f0d9b5c2a9992696b30ce2742"}, + {file = "numpy-2.2.0-cp313-cp313-win32.whl", hash = "sha256:3905a5fffcc23e597ee4d9fb3fcd209bd658c352657548db7316e810ca80458e"}, + {file = "numpy-2.2.0-cp313-cp313-win_amd64.whl", hash = "sha256:a184288538e6ad699cbe6b24859206e38ce5fba28f3bcfa51c90d0502c1582b2"}, + {file = "numpy-2.2.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:7832f9e8eb00be32f15fdfb9a981d6955ea9adc8574c521d48710171b6c55e95"}, + {file = "numpy-2.2.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:f0dd071b95bbca244f4cb7f70b77d2ff3aaaba7fa16dc41f58d14854a6204e6c"}, + {file = "numpy-2.2.0-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:b0b227dcff8cdc3efbce66d4e50891f04d0a387cce282fe1e66199146a6a8fca"}, + {file = "numpy-2.2.0-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:6ab153263a7c5ccaf6dfe7e53447b74f77789f28ecb278c3b5d49db7ece10d6d"}, + {file = "numpy-2.2.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e500aba968a48e9019e42c0c199b7ec0696a97fa69037bea163b55398e390529"}, + {file = "numpy-2.2.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:440cfb3db4c5029775803794f8638fbdbf71ec702caf32735f53b008e1eaece3"}, + {file = "numpy-2.2.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a55dc7a7f0b6198b07ec0cd445fbb98b05234e8b00c5ac4874a63372ba98d4ab"}, + {file = "numpy-2.2.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4bddbaa30d78c86329b26bd6aaaea06b1e47444da99eddac7bf1e2fab717bd72"}, + {file = "numpy-2.2.0-cp313-cp313t-win32.whl", hash = "sha256:30bf971c12e4365153afb31fc73f441d4da157153f3400b82db32d04de1e4066"}, + {file = "numpy-2.2.0-cp313-cp313t-win_amd64.whl", hash = "sha256:d35717333b39d1b6bb8433fa758a55f1081543de527171543a2b710551d40881"}, + {file = "numpy-2.2.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:e12c6c1ce84628c52d6367863773f7c8c8241be554e8b79686e91a43f1733773"}, + {file = "numpy-2.2.0-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:b6207dc8fb3c8cb5668e885cef9ec7f70189bec4e276f0ff70d5aa078d32c88e"}, + {file = "numpy-2.2.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a50aeff71d0f97b6450d33940c7181b08be1441c6c193e678211bff11aa725e7"}, + {file = "numpy-2.2.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:df12a1f99b99f569a7c2ae59aa2d31724e8d835fc7f33e14f4792e3071d11221"}, + {file = "numpy-2.2.0.tar.gz", hash = "sha256:140dd80ff8981a583a60980be1a655068f8adebf7a45a06a6858c873fcdcd4a0"}, ] [[package]] @@ -2195,13 +2221,13 @@ files = [ [[package]] name = "yte" -version = "1.5.4" +version = "1.5.5" description = "A YAML template engine with Python expressions" optional = false python-versions = ">=3.7" files = [ - {file = "yte-1.5.4-py3-none-any.whl", hash = "sha256:14ccfcb57d60b7652041b606129851423805140b22f52f5152f7c2692cd7b905"}, - {file = "yte-1.5.4.tar.gz", hash = "sha256:d2d77e53eafca74f58234fcd3fea28cc0a719e4f3784911511e35e86594bc880"}, + {file = "yte-1.5.5-py3-none-any.whl", hash = "sha256:e4de66359566cc671ecd134637964b816c4681f4d03673de0d91608abfb0e079"}, + {file = "yte-1.5.5.tar.gz", hash = "sha256:2c49831859f3216f313a17688900690872e05f8fbe77cb5d151bdb896357d57e"}, ] [package.dependencies] @@ -2212,4 +2238,4 @@ pyyaml = ">=6.0,<7.0" [metadata] lock-version = "2.0" python-versions = "^3.12" -content-hash = "9ed459c90fb1717f42bd4364d1158292a7418f38256530a53f3d77423fcfacf1" +content-hash = "75ad0c2f7b14d491f5410f8ca53bfc6926093bc4fcf74f0c80536ebc980a14d7" diff --git a/examples/pyproject.toml b/examples/pyproject.toml index 42918f14..47ca2163 100644 --- a/examples/pyproject.toml +++ b/examples/pyproject.toml @@ -9,6 +9,7 @@ python = "^3.12" snakemake = "^8.14.0" obspy = "^1.4.0" snakemake-executor-plugin-slurm = "^0.10.0" +imageio = "^2.36.1" [tool.poetry.dev-dependencies] diff --git a/include/domain/impl/elements/kernel.tpp b/include/domain/impl/elements/kernel.tpp index e7f58d16..4f6e8485 100644 --- a/include/domain/impl/elements/kernel.tpp +++ b/include/domain/impl/elements/kernel.tpp @@ -58,6 +58,7 @@ specfem::domain::impl::kernels::element_kernel_base< return; } + template isotropic_elements; ///< Frechet derivatives kernels for isotropic ///< elements + + specfem::frechet_derivatives::impl::frechet_elements< + DimensionType, MediumTag, specfem::element::property_tag::isotropic, NGLL> + anisotropic_elements; ///< Frechet derivatives kernels for isotropic + ///< elements }; } // namespace frechet_derivatives } // namespace specfem diff --git a/include/frechet_derivatives/impl/element_kernel/acoustic_isotropic.tpp b/include/frechet_derivatives/impl/element_kernel/acoustic_isotropic.tpp index 9b5ae6c6..111f86d7 100644 --- a/include/frechet_derivatives/impl/element_kernel/acoustic_isotropic.tpp +++ b/include/frechet_derivatives/impl/element_kernel/acoustic_isotropic.tpp @@ -1,6 +1,4 @@ -#ifndef SPECFEM_FRECHET_DERIVATIVES_IMPL_ELEMENT_KERNEL_ACOUSTIC_ISOTROPIC_TPP -#define SPECFEM_FRECHET_DERIVATIVES_IMPL_ELEMENT_KERNEL_ACOUSTIC_ISOTROPIC_TPP - +#pragma once #include "acoustic_isotropic.hpp" #include "algorithms/dot.hpp" #include "specfem_setup.hpp" @@ -42,5 +40,3 @@ specfem::frechet_derivatives::impl::impl_compute_element_kernel( return { rho_kl, kappa_kl }; } - -#endif /* _FRECHET_DERIVATIVES_IMPL_ELEMENT_KERNEL_ACOUSTIC_ISOTROPIC_TPP */ diff --git a/include/frechet_derivatives/impl/element_kernel/elastic_anisotropic.hpp b/include/frechet_derivatives/impl/element_kernel/elastic_anisotropic.hpp new file mode 100644 index 00000000..b30f7497 --- /dev/null +++ b/include/frechet_derivatives/impl/element_kernel/elastic_anisotropic.hpp @@ -0,0 +1,38 @@ +#pragma once + +#include "enumerations/dimension.hpp" +#include "enumerations/medium.hpp" +#include "point/field.hpp" +#include "point/field_derivatives.hpp" +#include "point/kernels.hpp" +#include "point/properties.hpp" + +namespace specfem { +namespace frechet_derivatives { +namespace impl { + +template +KOKKOS_FUNCTION specfem::point::kernels< + specfem::dimension::type::dim2, specfem::element::medium_tag::elastic, + specfem::element::property_tag::anisotropic, UseSIMD> +impl_compute_element_kernel( + const specfem::point::properties< + specfem::dimension::type::dim2, specfem::element::medium_tag::elastic, + specfem::element::property_tag::anisotropic, UseSIMD> &properties, + const specfem::point::field &adjoint_field, + const specfem::point::field &backward_field, + const specfem::point::field_derivatives< + specfem::dimension::type::dim2, specfem::element::medium_tag::elastic, + UseSIMD> &adjoint_derivatives, + const specfem::point::field_derivatives< + specfem::dimension::type::dim2, specfem::element::medium_tag::elastic, + UseSIMD> &backward_derivatives, + const type_real &dt); + +} // namespace impl +} // namespace frechet_derivatives +} // namespace specfem diff --git a/include/frechet_derivatives/impl/element_kernel/elastic_anisotropic.tpp b/include/frechet_derivatives/impl/element_kernel/elastic_anisotropic.tpp new file mode 100644 index 00000000..f608ba6c --- /dev/null +++ b/include/frechet_derivatives/impl/element_kernel/elastic_anisotropic.tpp @@ -0,0 +1,151 @@ +#pragma once + +#include "algorithms/dot.hpp" +#include "elastic_anisotropic.hpp" +#include "globals.h" +#include "specfem_setup.hpp" + +template +KOKKOS_FUNCTION specfem::point::kernels +specfem::frechet_derivatives::impl::impl_compute_element_kernel( + const specfem::point::properties< + specfem::dimension::type::dim2, specfem::element::medium_tag::elastic, + specfem::element::property_tag::anisotropic, UseSIMD> &properties, + const specfem::point::field &adjoint_field, + const specfem::point::field &backward_field, + const specfem::point::field_derivatives< + specfem::dimension::type::dim2, specfem::element::medium_tag::elastic, + UseSIMD> &adjoint_derivatives, + const specfem::point::field_derivatives< + specfem::dimension::type::dim2, specfem::element::medium_tag::elastic, + UseSIMD> &backward_derivatives, + const type_real &dt) { + + using datatype = + typename specfem::datatype::simd::datatype; + + static_assert(specfem::globals::simulation_wave == specfem::wave::p_sv || + specfem::globals::simulation_wave == specfem::wave::sh, + "Only P-SV and SH waves are supported."); + + if (specfem::globals::simulation_wave == specfem::wave::p_sv) { + + /* + Note: Using # as adjoint modifier for the comments, so that `s` is the + "standard" strainfield and `s#` is the adjoint strainfield. We use `ad_` as + prefix for the adjoint wavefield and its derivatives, and `b_` as prefix + for the "standard" backward wavefield and its derivatives. + */ + + // ad_dsxx = 0.5 * (ds#x/dx + ds#x/dx) + const datatype ad_dsxx = adjoint_derivatives.du(0, 0); + + // ad_dsxz = 0.5 * (ds#x/dz + ds#z/dx) + const datatype ad_dsxz = + static_cast(0.5) * + (adjoint_derivatives.du(0, 1) + adjoint_derivatives.du(1, 0)); + + // ad_dszz = 0.5 * (ds#z/dz + ds#z/dz) + const datatype ad_dszz = adjoint_derivatives.du(1, 1); + + // b_dsxx = 0.5 * (dsx/dx + dsx/dx) = dsx/dx + const datatype b_dsxx = backward_derivatives.du(0, 0); + + // b_dsxz = 0.5 * (dsx/dz + dsz/dx) + const datatype b_dsxz = + static_cast(0.5) * + (backward_derivatives.du(0, 1) + backward_derivatives.du(1, 0)); + + // b_dszz = 0.5 * (dsz/dz + dsz/dz) = dsz/dz + const datatype b_dszz = backward_derivatives.du(1, 1); + + // inner part of rho kernel equation 14 + // rho_kl = s#''_i * s_j + datatype rho_kl = specfem::algorithms::dot(adjoint_field.acceleration, + backward_field.displacement); + + // Inner part of the 2-D version of Equation 15 in Tromp et al. 2005 + // That is \eps_{jk} \eps_{lm} + datatype c11_kl = ad_dsxx * b_dsxx; + datatype c13_kl = ad_dsxx * b_dszz + ad_dszz * b_dsxx; + datatype c15_kl = 2 * ad_dsxx * b_dsxz + ad_dsxz * b_dsxx; + datatype c33_kl = ad_dszz * b_dszz; + datatype c35_kl = 2 * b_dsxz * ad_dszz + ad_dsxz * b_dszz; + datatype c55_kl = 4 * ad_dsxz * b_dsxz; + + // Computing the rest of the integral. + // rho from equation 14 + rho_kl = static_cast(-1.0) * properties.rho * dt * rho_kl; + c11_kl = static_cast(-1.0) * c11_kl * properties.c11 * dt; + c13_kl = static_cast(-1.0) * c13_kl * properties.c13 * dt; + c15_kl = static_cast(-1.0) * c15_kl * properties.c15 * dt; + c33_kl = static_cast(-1.0) * c33_kl * properties.c33 * dt; + c35_kl = static_cast(-1.0) * c35_kl * properties.c35 * dt; + c55_kl = static_cast(-1.0) * c55_kl * properties.c55 * dt; + + return { rho_kl, c11_kl, c13_kl, c15_kl, c33_kl, c35_kl, c55_kl }; + + } else if (specfem::globals::simulation_wave == specfem::wave::sh) { + /* + SH (membrane) waves + ------------------- + + + + Note: Using # as adjoint modifier for the comments, so that `s` is the + "standard" strainfield and `s#` is the adjoint strainfield. We use `ad_` as + prefix for the adjoint wavefield and its derivatives, and `b_` as prefix for + the "standard" backward wavefield and its derivatives. + */ + + // // ad_dsyx = 0.5 * (ds#y/dx + ds#x/dy) = 0.5 * (ds#y/dx) + // const datatype ad_dsyx = static_cast(0.5) * adjoint_derivatives.du(0, 0); + + // // ad_dsyz = 0.5 * (ds#y/dz + ds#z/dy) = 0.5 * (ds#y/dz) + // const datatype ad_dszz = static_cast(0.5) * adjoint_derivatives.du(1, 0); + + // // b_dsyx = 0.5 * (dsy/dx + dsx/dy) = 0.5 * dsy/dx + // const datatype b_dsyx = static_cast(0.5) * backward_derivatives.du(0, 0); + + // // b_dsyz = 0.5 * (dsy/dz + dsz/dy) = 0.5 * dsz/dx + // const datatype b_dsyz = static_cast(0.5) * backward_derivatives.du(1, 0)); + + // // Inner part of the 2-D version of Equation 15 in Tromp et al. 2005 + // // That is \eps_{jk} \eps_{lm} + // datatype c11_kl = 0; // ad_dsxx * b_dsxx + // datatype c13_kl = ad_dsxx * b_dszz + ad_dszz * b_dsxx; + // datatype c15_kl = 2 * ad_dsxx * b_dsxz + ad_dsxz * b_dsxx; + // datatype c33_kl = ad_dszz * b_dszz; + // datatype c35_kl = 2 * b_dsxz * ad_dszz + ad_dsxz * b_dszz; + // datatype c55_kl = 4 * ad_dsxz * b_dsxz; + + // // Computing the rest of the integral. + // // rho from equation 14 + // rho_kl = static_cast(-1.0) * properties.rho * dt * rho_kl; + // c11_kl = static_cast(-1.0) * c11_kl * properties.c11 * dt; + // c13_kl = static_cast(-1.0) * c13_kl * properties.c13 * dt; + // c15_kl = static_cast(-1.0) * c15_kl * properties.c15 * dt; + // c33_kl = static_cast(-1.0) * c33_kl * properties.c33 * dt; + // c35_kl = static_cast(-1.0) * c35_kl * properties.c35 * dt; + // c55_kl = static_cast(-1.0) * c55_kl * properties.c55 * dt; + + /* + I realized that we need the rest of the stiffness matrix for the SH wave, + which is probably why anisotropic sh kernels aren't really supported in the + speccfem2d fortran code. That would require a larger update to the + anisotropic properties. I will leave this as a placeholder for now. + Specifically, we need the following additional properties: + - c44 + - c45/c54 (symmetric) + */ + + return { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; + + } +} diff --git a/include/frechet_derivatives/impl/element_kernel/elastic_isotropic.tpp b/include/frechet_derivatives/impl/element_kernel/elastic_isotropic.tpp index 768e1ff7..73d1c9b5 100644 --- a/include/frechet_derivatives/impl/element_kernel/elastic_isotropic.tpp +++ b/include/frechet_derivatives/impl/element_kernel/elastic_isotropic.tpp @@ -1,5 +1,4 @@ -#ifndef _FRECHET_DERIVATIVES_IMPL_ELEMENT_KERNEL_ELASTIC_ISOTROPIC_TPP -#define _FRECHET_DERIVATIVES_IMPL_ELEMENT_KERNEL_ELASTIC_ISOTROPIC_TPP +#pragma once #include "algorithms/dot.hpp" #include "elastic_isotropic.hpp" @@ -31,21 +30,60 @@ specfem::frechet_derivatives::impl::impl_compute_element_kernel( using datatype = typename specfem::datatype::simd::datatype; + static_assert(specfem::globals::simulation_wave == specfem::wave::p_sv || + specfem::globals::simulation_wave == specfem::wave::sh, + "Only P-SV and SH waves are supported."); + const datatype kappa = properties.lambdaplus2mu - properties.mu; if (specfem::globals::simulation_wave == specfem::wave::p_sv) { + + /* + In the following the explanation for the SH wave kernels is given. + + Computing the deviatoric strain tensor for SH waves: + + strain epsilon + D = [ dux_dx 1/2(dux_dy+duy_dx) 1/2(dux_dz+duz_dx), + 1/2(duy_dx+dux_dy) duy_dy 1/2(duy_dz+duz_dy), + 1/2(duz_dx+dux_dz) 1/2(duz_dy+duy_dz) duz_dz ] + + trace of strain diagonalized + [ 1/3 (dux_dx + duy_dy + duz_dz) 0 0, + - 0 1/3 (dux_dx + duy_dy + duz_dz) 0, + 0 0 1/3 (dux_dx + duy_dy + duz_dx) ] + + We use `s` as the "standard" wavefield and `s#` as the adjoint wavefield. + We use `ad_` as prefix for the adjoint strainfield, and `b_` as prefix for + the "standard" strainfield. + */ + + // Compute the gradient of the adjoint field + // ad_dsxx = 0.5 * (ds#x/dx + ds#x/dx) = ds#x/dx const datatype ad_dsxx = adjoint_derivatives.du(0, 0); + + // ad_dsxz = 0.5 * (ds#x/dz + ds#z/dx) const datatype ad_dsxz = static_cast(0.5) * (adjoint_derivatives.du(0, 1) + adjoint_derivatives.du(1, 0)); + + // ad_dszz = 0.5 * (ds#z/dz + ds#z/dz) = ds#z/dz const datatype ad_dszz = adjoint_derivatives.du(1, 1); + // Compute the gradient of the backward field + // b_dsxx = 0.5 * (dsx/dx + dsx/dx) = dsx/dx const datatype b_dsxx = backward_derivatives.du(0, 0); + + // b_dsxz = 0.5 * (dsx/dz + dsz/dx) const datatype b_dsxz = static_cast(0.5) * (backward_derivatives.du(0, 1) + backward_derivatives.du(1, 0)); + + // b_dszz = 0.5 * (dsz/dz + dsz/dz) = dsz/dz const datatype b_dszz = backward_derivatives.du(1, 1); + // what's this? + // -------------------------------------- // const type_real kappa_kl = // -1.0 * kappa * dt * ((ad_dsxx + ad_dszz) * (b_dsxx + b_dszz)); // const type_real mu_kl = -2.0 * properties.mu * dt * @@ -55,24 +93,47 @@ specfem::frechet_derivatives::impl::impl_compute_element_kernel( // -1.0 * properties.rho * dt * // (specfem::algorithms::dot(adjoint_field.acceleration, // backward_field.displacement)); + // -------------------------------------- + + // In the papers we use dagger for the notation of the adjoint wavefield + // here I'm using # + // Part of Tromp et al. 2005, Eq 18 + // div(s#) * div(s) datatype kappa_kl = (ad_dsxx + ad_dszz) * (b_dsxx + b_dszz); + + // Part of Tromp et al. 2005, Eq 17 + // [eps+ : eps] - 1/3 [div (s#) * div(s)] + // I am not clear on how we get to the following form but from the + // GPU cuda code from the fortran code I assume that there is an + // assumption being made that eps#_i * eps_j = eps#_j * eps_i in the + // isotropic case due to the symmetry of the voigt notation stiffness + // matrix. Since x datatype mu_kl = (ad_dsxx * b_dsxx + ad_dszz * b_dszz + static_cast(2.0) * ad_dsxz * b_dsxz - static_cast(1.0 / 3.0) * kappa_kl); + + // This notation/naming is confusing with respect to the physics. + // Should be forward.acceleration dotted with adjoint displacement + // See Tromp et al. 2005, Equation 14. datatype rho_kl = specfem::algorithms::dot(adjoint_field.acceleration, backward_field.displacement); + // Finishing the kernels kappa_kl = static_cast(-1.0) * kappa * dt * kappa_kl; mu_kl = static_cast(-2.0) * properties.mu * dt * mu_kl; rho_kl = static_cast(-1.0) * properties.rho * dt * rho_kl; + // rho' kernel, first term in Equation 20 const datatype rhop_kl = rho_kl + kappa_kl + mu_kl; + // beta (shear wave) kernel, second term in Equation 20 const datatype beta_kl = static_cast(2.0) * (mu_kl - static_cast(4.0 / 3.0) * properties.mu / kappa * kappa_kl); + // alpha (compressional wave) kernel, third and last term in Eq. 20 + // of Tromp et al 2005. const datatype alpha_kl = static_cast(2.0) * (static_cast(1.0) + @@ -81,11 +142,34 @@ specfem::frechet_derivatives::impl::impl_compute_element_kernel( return { rho_kl, mu_kl, kappa_kl, rhop_kl, alpha_kl, beta_kl }; } else if (specfem::globals::simulation_wave == specfem::wave::sh) { + + /* + SH (membrane) waves + ------------------- + + The deviatroic strain tensor for SH waves in and isotropic elastic medium + is given by: + + SH-waves: plane strain assumption ux==uz==0 and d/dy==0 + D = [ 0 1/2 duy_dx 0, [0 0 0, + 1/2 duy_dx 0 1/2 duy_dz, - 0 0 0, + 0 1/2 duy_dz 0 ] 0 0 0] + + Resulting in the following kernels D# : D + D# : D = sum_i sum_j D#_ij * D_ij + = 1/2du#y_dx * 1/2duy_dx + 1/2du#y_dx * 1/2duy_dx + + 1/2du#y_dz * 1/2duy_dz + 1/2du#y_dz * 1/2duy_dz + = 1/2 ( du#y_dx * duy_dx) + 1/2 (du#y_dz * duy_dz) + = 1/2 ( du#y_dx * duy_dx + du#y_dz * duy_dz ) + + */ const datatype kappa_kl = 0.0; const datatype mu_kl = static_cast(-2.0) * properties.mu * dt * static_cast(0.5) * + // du#y_dx * duy_dx + (adjoint_derivatives.du(0, 0) * backward_derivatives.du(0, 0) + + // du#y_dz * duy_dz adjoint_derivatives.du(1, 0) * backward_derivatives.du(1, 0)); const datatype rho_kl = static_cast(-1.0) * properties.rho * dt * @@ -97,10 +181,5 @@ specfem::frechet_derivatives::impl::impl_compute_element_kernel( const datatype beta_kl = static_cast(2.0) * mu_kl; return { rho_kl, mu_kl, kappa_kl, rhop_kl, alpha_kl, beta_kl }; - } else { - static_assert("Simulation wave not supported"); - return { 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }; } } - -#endif /* _FRECHET_DERIVATIVES_IMPL_ELEMENT_KERNEL_ELASTIC_ISOTROPIC_TPP */ diff --git a/include/frechet_derivatives/impl/element_kernel/element_kernel.hpp b/include/frechet_derivatives/impl/element_kernel/element_kernel.hpp index 1616eff4..759a3947 100644 --- a/include/frechet_derivatives/impl/element_kernel/element_kernel.hpp +++ b/include/frechet_derivatives/impl/element_kernel/element_kernel.hpp @@ -1,7 +1,6 @@ -#ifndef _FRECHET_DERIVATIVES_IMPL_ELEMENT_KERNEL_ELEMENT_KERNEL_HPP -#define _FRECHET_DERIVATIVES_IMPL_ELEMENT_KERNEL_ELEMENT_KERNEL_HPP - +#pragma once #include "acoustic_isotropic.hpp" +#include "elastic_anisotropic.hpp" #include "elastic_isotropic.hpp" #include "enumerations/dimension.hpp" #include "enumerations/medium.hpp" @@ -40,5 +39,3 @@ KOKKOS_FUNCTION } // namespace impl } // namespace frechet_derivatives } // namespace specfem - -#endif /* _FRECHET_DERIVATIVES_IMPL_ELEMENT_KERNEL_ELEMENT_KERNEL_HPP */ diff --git a/include/frechet_derivatives/impl/frechet_element.hpp b/include/frechet_derivatives/impl/frechet_element.hpp index e9472dcf..7bd7a29e 100644 --- a/include/frechet_derivatives/impl/frechet_element.hpp +++ b/include/frechet_derivatives/impl/frechet_element.hpp @@ -1,6 +1,4 @@ -#ifndef _FRECHET_DERIVATIVES_IMPL_FRECHLET_ELEMENT_HPP -#define _FRECHET_DERIVATIVES_IMPL_FRECHLET_ELEMENT_HPP - +#pragma once #include "chunk_element/field.hpp" #include "compute/assembly/assembly.hpp" #include "parallel_configuration/chunk_config.hpp" @@ -122,5 +120,3 @@ class frechet_elements { } // namespace impl } // namespace frechet_derivatives } // namespace specfem - -#endif /* _FRECHET_DERIVATIVES_IMPL_FRECHLET_ELEMENT_HPP */ diff --git a/include/frechet_derivatives/impl/frechet_element.tpp b/include/frechet_derivatives/impl/frechet_element.tpp index aad4ec51..74ebcf4d 100644 --- a/include/frechet_derivatives/impl/frechet_element.tpp +++ b/include/frechet_derivatives/impl/frechet_element.tpp @@ -1,5 +1,4 @@ -#ifndef _FRECHET_DERIVATIVES_IMPL_FRECHLET_ELEMENT_TPP -#define _FRECHET_DERIVATIVES_IMPL_FRECHLET_ELEMENT_TPP +#pragma once #include "algorithms/gradient.hpp" #include "element_kernel/element_kernel.hpp" @@ -262,5 +261,3 @@ void specfem::frechet_derivatives::impl::frechet_elements< return; } - -#endif /* _FRECHET_DERIVATIVES_IMPL_FRECHLET_ELEMENT_TPP */ diff --git a/include/point/kernels.hpp b/include/point/kernels.hpp index 87f01c62..43b0fdcb 100644 --- a/include/point/kernels.hpp +++ b/include/point/kernels.hpp @@ -133,6 +133,122 @@ struct kernels +struct kernels { +public: + /** + * @name Typedefs + * + */ + ///@{ + using simd = + typename specfem::datatype::simd; ///< SIMD type + using value_type = + typename simd::datatype; ///< Underlying data type to store the kernels + ///@} + +public: + /** + * @name Compile time constants + * + */ + ///@{ + constexpr static auto medium_tag = specfem::element::medium_tag::elastic; + constexpr static auto property_tag = + specfem::element::property_tag::anisotropic; + constexpr static auto dimension = specfem::dimension::type::dim2; + ///@} + + /** + * @name Misfit Kernels + * + */ + ///@{ + value_type rho; ///< \f$ K_{\rho} \f$ + value_type c11; ///< \f$ K_{c_{11}} \f$ + value_type c13; ///< \f$ K_{c_{13}} \f$ + value_type c15; ///< \f$ K_{c_{15}} \f$ + value_type c33; ///< \f$ K_{c_{33}} \f$ + value_type c35; ///< \f$ K_{c_{35}} \f$ + value_type c55; ///< \f$ K_{c_{55}} \f$ + ///@} + + /** + * @name Constructors + * + */ + ///@{ + /** + * @brief Default constructor + * + */ + KOKKOS_FUNCTION + kernels() = default; + + /** + * @brief single value constructor + * + */ + KOKKOS_FUNCTION + kernels(const value_type value) + : rho(value), c11(value), c13(value), c15(value), c33(value), c35(value), + c55(value) {} + + /** + * @brief Constructor + * + * @param rho \f$ K_{\rho} \f$ + * @param c11 \f$ K_{c_{11}} \f$ + * @param c13 \f$ K_{c_{13}} \f$ + * @param c15 \f$ K_{c_{15}} \f$ + * @param c33 \f$ K_{c_{33}} \f$ + * @param c35 \f$ K_{c_{35}} \f$ + * @param c55 \f$ K_{c_{55}} \f$ + */ + KOKKOS_FUNCTION + kernels(const value_type rho, const value_type c11, const value_type c13, + const value_type c15, const value_type c33, const value_type c35, + const value_type c55) + : rho(rho), c11(c11), c13(c13), c15(c15), c33(c33), c35(c35), c55(c55) {} + ///@} + + /** + * @brief Equality operator + * + */ + KOKKOS_FUNCTION + bool operator==(const kernels &rhs) const { + return rho == rhs.rho && c11 == rhs.c11 && c13 == rhs.c13 && + c15 == rhs.c15 && c33 == rhs.c33 && c35 == rhs.c35 && c55 == rhs.c55; + } + + /** + * @brief Inequality operator + * + */ + KOKKOS_FUNCTION + bool operator!=(const kernels &rhs) const { return !(*this == rhs); } + + KOKKOS_FUNCTION + bool operator==(const value_type value) { + return rho == value && c11 == value && c13 == value && c15 == value && + c33 == value && c35 == value && c55 == value; + } + + KOKKOS_FUNCTION + bool operator!=(const value_type value) { return !(*this == value); } +}; +// end elastic anisotropic /** * @brief Template specialization for the kernels struct for 2D acoustic diff --git a/src/compute/compute_kernels.cpp b/src/compute/compute_kernels.cpp index 8586c5ef..44fa927b 100644 --- a/src/compute/compute_kernels.cpp +++ b/src/compute/compute_kernels.cpp @@ -34,6 +34,9 @@ void compute_number_of_elements_per_medium( h_element_property(ispec) = specfem::element::property_tag::isotropic; } else { + std::cout << "Unknown property tag: " + << "File: " << __FILE__ << " Line: " << __LINE__ + << std::endl; throw std::runtime_error("Unknown property tag"); } } else if (tags.tags_container(ispec_mesh).medium_tag == @@ -45,6 +48,9 @@ void compute_number_of_elements_per_medium( h_element_property(ispec) = specfem::element::property_tag::isotropic; } else { + std::cout << "Unknown property tag: " + << "File: " << __FILE__ << " Line: " << __LINE__ + << std::endl; throw std::runtime_error("Unknown property tag"); } } diff --git a/src/compute/compute_properties.cpp b/src/compute/compute_properties.cpp index d7a06eb9..324aa930 100644 --- a/src/compute/compute_properties.cpp +++ b/src/compute/compute_properties.cpp @@ -36,6 +36,9 @@ void compute_number_of_elements_per_medium( h_element_property(ispec) = specfem::element::property_tag::anisotropic; } else { + std::cout << "Unknown property tag: " + << "File: " << __FILE__ << " Line: " << __LINE__ + << std::endl; throw std::runtime_error("Unknown property tag"); } } else if (tags.tags_container(ispec_mesh).medium_tag == @@ -47,6 +50,9 @@ void compute_number_of_elements_per_medium( h_element_property(ispec) = specfem::element::property_tag::isotropic; } else { + std::cout << "Unknown property tag: " + << "File: " << __FILE__ << " Line: " << __LINE__ + << std::endl; throw std::runtime_error("Unknown property tag"); } } diff --git a/src/frechet_derivatives/impl/element_kernel/elastic_anisotropic.cpp b/src/frechet_derivatives/impl/element_kernel/elastic_anisotropic.cpp new file mode 100644 index 00000000..d4ee5ead --- /dev/null +++ b/src/frechet_derivatives/impl/element_kernel/elastic_anisotropic.cpp @@ -0,0 +1,50 @@ +#include "frechet_derivatives/impl/element_kernel/elastic_anisotropic.hpp" +#include "frechet_derivatives/impl/element_kernel/elastic_anisotropic.tpp" + +// Explicit template instantiation + +// Specification for this template is: +// - UseSIMD = false +template KOKKOS_FUNCTION specfem::point::kernels< + specfem::dimension::type::dim2, specfem::element::medium_tag::elastic, + specfem::element::property_tag::anisotropic, false> +specfem::frechet_derivatives::impl::impl_compute_element_kernel( + const specfem::point::properties< + specfem::dimension::type::dim2, specfem::element::medium_tag::elastic, + specfem::element::property_tag::anisotropic, false> &properties, + const specfem::point::field &adjoint_field, + const specfem::point::field &backward_field, + const specfem::point::field_derivatives< + specfem::dimension::type::dim2, specfem::element::medium_tag::elastic, + false> &adjoint_derivatives, + const specfem::point::field_derivatives< + specfem::dimension::type::dim2, specfem::element::medium_tag::elastic, + false> &backward_derivatives, + const type_real &dt); + +// Specification for this template is: +// - UseSIMD = false +template KOKKOS_FUNCTION specfem::point::kernels< + specfem::dimension::type::dim2, specfem::element::medium_tag::elastic, + specfem::element::property_tag::anisotropic, true> +specfem::frechet_derivatives::impl::impl_compute_element_kernel( + const specfem::point::properties< + specfem::dimension::type::dim2, specfem::element::medium_tag::elastic, + specfem::element::property_tag::anisotropic, true> &properties, + const specfem::point::field &adjoint_field, + const specfem::point::field &backward_field, + const specfem::point::field_derivatives< + specfem::dimension::type::dim2, specfem::element::medium_tag::elastic, + true> &adjoint_derivatives, + const specfem::point::field_derivatives< + specfem::dimension::type::dim2, specfem::element::medium_tag::elastic, + true> &backward_derivatives, + const type_real &dt); diff --git a/src/frechet_derivatives/impl/frechet_element.cpp b/src/frechet_derivatives/impl/frechet_element.cpp index 6214b7dd..11937efa 100644 --- a/src/frechet_derivatives/impl/frechet_element.cpp +++ b/src/frechet_derivatives/impl/frechet_element.cpp @@ -2,18 +2,33 @@ #include "frechet_derivatives/impl/frechet_element.tpp" // Explicit template instantiation + +// Elastic isotropic, ngll 5 template class specfem::frechet_derivatives::impl::frechet_elements< specfem::dimension::type::dim2, specfem::element::medium_tag::elastic, specfem::element::property_tag::isotropic, 5>; +// Elastic anisotropic, ngll 5 +template class specfem::frechet_derivatives::impl::frechet_elements< + specfem::dimension::type::dim2, specfem::element::medium_tag::elastic, + specfem::element::property_tag::anisotropic, 5>; + +// Acoustic isotropic, ngll 5 template class specfem::frechet_derivatives::impl::frechet_elements< specfem::dimension::type::dim2, specfem::element::medium_tag::acoustic, specfem::element::property_tag::isotropic, 5>; +// Elastic isotropic, ngll 8 template class specfem::frechet_derivatives::impl::frechet_elements< specfem::dimension::type::dim2, specfem::element::medium_tag::elastic, specfem::element::property_tag::isotropic, 8>; +// Elastic anisotropic, ngll 8 +template class specfem::frechet_derivatives::impl::frechet_elements< + specfem::dimension::type::dim2, specfem::element::medium_tag::elastic, + specfem::element::property_tag::anisotropic, 8>; + +// Acoustic isotropic, ngll 8 template class specfem::frechet_derivatives::impl::frechet_elements< specfem::dimension::type::dim2, specfem::element::medium_tag::acoustic, specfem::element::property_tag::isotropic, 8>;