Ich habe Code für die Simulation der Fluiddynamik einer Wasserschicht geschrieben. Es hat eine Funktion von solid_liquid_layer_angular_velocity_change:
def solid_liquid_layer_angular_velocity_change(
viscosity,
radius,
thickness,
solid_inertia,
solid_angular_velocity,
liquid_layer_angular_velocity,
second_liquid_layer_angular_velocity,
):
"""
Calculate the angular velocity change rates for both solid and liquid layers due to viscous interaction.
Formula:
t = 8/3 * mu * r^4 * (omega_solid - omega_liquid) / thickness
dOmega_solid/dt = -t / I_effective
Args:
viscosity: The dynamic viscosity of the liquid
radius: The radius of the top layer of the fluid
thickness: The thickness of one liquid layer
solid_inertia: The principal moments of inertia of the solid object [I1, I2, I3]
solid_angular_velocity: The current angular velocity of the solid object [ωx, ωy, ωz]
liquid_layer_angular_velocity: The angular velocity of the top liquid layer
second_liquid_layer_angular_velocity: The angular velocity of the second liquid layer
Returns:
tuple: (solid_angular_velocity_change, liquid_angular_velocity_change)
"""
# Small value to avoid division by zero
EPSILON = 1e-10
# Calculate torque on solid due to liquid with numerical stability
delta_omega = solid_angular_velocity - liquid_layer_angular_velocity
torque_magnitude = (8/3) * np.pi * viscosity * (radius**4) / max(thickness, EPSILON)
torque_solid = torque_magnitude * delta_omega
# Calculate liquid layer's angular velocity change with numerical stability
current_radius = max(radius - thickness, EPSILON)
total_layers = max(radius / max(thickness, EPSILON), 1.0)
# Initialize with zeros
liquid_angular_velocity_change = np.zeros_like(liquid_layer_angular_velocity)
# Only calculate if we have enough layers
if total_layers > 1:
liquid_angular_velocity_change = layer_angular_velocity_change(
kinetic_viscosity=water_kinetic_viscosity,
radius=current_radius,
layer=current_radius/thickness,
total_layers=total_layers,
upper_angular_velocity=solid_angular_velocity,
angular_velocity=liquid_layer_angular_velocity,
lower_angular_velocity=second_liquid_layer_angular_velocity
)
# Calculate effective inertia with numerical stability
effective_inertia = inertia_of_solid_object_at_nonmain_axis_rotation(
solid_inertia,
solid_angular_velocity
)
# Calculate solid's angular velocity change due to liquid with numerical stability
solid_angular_velocity_change_due_to_liquid = np.zeros_like(torque_solid)
if effective_inertia > EPSILON:
solid_angular_velocity_change_due_to_liquid = -torque_solid / effective_inertia
# Ensure we don't return NaN or inf
solid_angular_velocity_change_due_to_liquid = np.nan_to_num(
solid_angular_velocity_change_due_to_liquid,
nan=0.0,
posinf=0.0,
neginf=0.0
)
return solid_angular_velocity_change_due_to_liquid, liquid_angular_velocity_change
und dann habe ich es in einem anderen Code zum Aufrufen verwendet:
Dann habe ich eine Fehlermeldung erhalten, die von numba verursacht wurde und behauptet, dass die aufgerufenen Parameter nicht mit der definierten Funktion übereinstimmen, was dazu führt, dass der Index außerhalb des gültigen Bereichs liegt:
/usr/local/bin/python3.13 /Users/niuyingkai/PycharmProjects/PT-formula/2026 prob 7 liquid solid interaction.py
Traceback (most recent call last):
File "/Users/niuyingkai/PycharmProjects/PT-formula/2026 prob 7 liquid solid interaction.py", line 174, in
upper_layer_viscous_increment_term, solid_angular_velocity_viscous_increment_term = solid_liquid_layer_angular_velocity_change(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
viscosity=water_viscosity,
^^^^^^^^^^^^^^^^^^^^^^^^^^
......
second_liquid_layer_angular_velocity=water_angular_velocity_current[water_layer_num-2],
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/dispatcher.py", line 443, in _compile_for_args
raise e
File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/dispatcher.py", line 376, in _compile_for_args
return_val = self.compile(tuple(argtypes))
File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/dispatcher.py", line 908, in compile
cres = self._compiler.compile(args, return_type)
File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/dispatcher.py", line 80, in compile
status, retval = self._compile_cached(args, return_type)
~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^
File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/dispatcher.py", line 94, in _compile_cached
retval = self._compile_core(args, return_type)
File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/dispatcher.py", line 107, in _compile_core
cres = compiler.compile_extra(self.targetdescr.typing_context,
self.targetdescr.target_context,
......
flags=flags, locals=self.locals,
pipeline_class=self.pipeline_class)
File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/compiler.py", line 739, in compile_extra
return pipeline.compile_extra(func)
~~~~~~~~~~~~~~~~~~~~~~^^^^^^
File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/compiler.py", line 439, in compile_extra
return self._compile_bytecode()
~~~~~~~~~~~~~~~~~~~~~~^^
File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/compiler.py", line 505, in _compile_bytecode
return self._compile_core()
~~~~~~~~~~~~~~~~~~^^
File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/compiler.py", line 481, in _compile_core
raise e
File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/compiler.py", line 473, in _compile_core
pm.run(self.state)
~~~~~~^^^^^^^^^^^^
File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/compiler_machinery.py", line 363, in run
raise e
File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/compiler_machinery.py", line 356, in run
self._runPass(idx, pass_inst, state)
~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^
File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/compiler_lock.py", line 35, in _acquire_compile_lock
return func(*args, **kwargs)
File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/compiler_machinery.py", line 311, in _runPass
mutated |= check(pss.run_pass, internal_state)
~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/compiler_machinery.py", line 272, in check
mangled = func(compiler_state)
File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/typed_passes.py", line 114, in run_pass
typemap, return_type, calltypes, errs = type_inference_stage(
~~~~~~~~~~~~~~~~~~~~^
state.typingctx,
^^^^^^^^^^^^^^^^
......
state.locals,
^^^^^^^^^^^^^
raise_errors=self._raise_errors)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/typed_passes.py", line 95, in type_inference_stage
errs = infer.propagate(raise_errors=raise_errors)
File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/typeinfer.py", line 1075, in propagate
errors = self.constraints.propagate(self)
File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/typeinfer.py", line 160, in propagate
constraint(typeinfer)
~~~~~~~~~~^^^^^^^^^^^
File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/typeinfer.py", line 572, in __call__
self.resolve(typeinfer, typevars, fnty)
~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/typeinfer.py", line 595, in resolve
sig = typeinfer.resolve_call(fnty, pos_args, kw_args)
File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/typeinfer.py", line 1569, in resolve_call
return self.context.resolve_function_type(fnty, pos_args, kw_args)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/typing/context.py", line 279, in resolve_function_type
res = self._resolve_user_function_type(func, args, kws)
File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/typing/context.py", line 335, in _resolve_user_function_type
return func.get_call_type(self, args, kws)
~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/types/functions.py", line 541, in get_call_type
self.dispatcher.get_call_template(args, kws)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/dispatcher.py", line 315, in get_call_template
pysig, args = self._compiler.fold_argument_types(args, kws)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^
File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/dispatcher.py", line 73, in fold_argument_types
args = fold_arguments(self.pysig, args, kws,
normal_handler,
default_handler,
stararg_handler)
File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-fpackages/numba/core/typing/templates.py", line 217, in fold_arguments
bind_kws[n] = args[len(kwonly) + idx]
~~~~^^^^^^^^^^^^^^^^^^^
IndexError: tuple index out of range
Process finished with exit code 1
Aber ich habe den Anruf überprüft und es gab überhaupt kein Problem.
Was ist das Problem? Wie kann man es lösen?
Ich habe Code für die Simulation der Fluiddynamik einer Wasserschicht geschrieben. Es hat eine Funktion von solid_liquid_layer_angular_velocity_change: [code]def solid_liquid_layer_angular_velocity_change( viscosity, radius, thickness, solid_inertia, solid_angular_velocity, liquid_layer_angular_velocity, second_liquid_layer_angular_velocity, ): """ Calculate the angular velocity change rates for both solid and liquid layers due to viscous interaction.
Formula: t = 8/3 * mu * r^4 * (omega_solid - omega_liquid) / thickness dOmega_solid/dt = -t / I_effective
Args: viscosity: The dynamic viscosity of the liquid radius: The radius of the top layer of the fluid thickness: The thickness of one liquid layer solid_inertia: The principal moments of inertia of the solid object [I1, I2, I3] solid_angular_velocity: The current angular velocity of the solid object [ωx, ωy, ωz] liquid_layer_angular_velocity: The angular velocity of the top liquid layer second_liquid_layer_angular_velocity: The angular velocity of the second liquid layer
Returns: tuple: (solid_angular_velocity_change, liquid_angular_velocity_change) """ # Small value to avoid division by zero EPSILON = 1e-10
# Calculate torque on solid due to liquid with numerical stability delta_omega = solid_angular_velocity - liquid_layer_angular_velocity torque_magnitude = (8/3) * np.pi * viscosity * (radius**4) / max(thickness, EPSILON) torque_solid = torque_magnitude * delta_omega
# Initialize with zeros liquid_angular_velocity_change = np.zeros_like(liquid_layer_angular_velocity)
# Only calculate if we have enough layers if total_layers > 1: liquid_angular_velocity_change = layer_angular_velocity_change( kinetic_viscosity=water_kinetic_viscosity, radius=current_radius, layer=current_radius/thickness, total_layers=total_layers, upper_angular_velocity=solid_angular_velocity, angular_velocity=liquid_layer_angular_velocity, lower_angular_velocity=second_liquid_layer_angular_velocity )
# Calculate solid's angular velocity change due to liquid with numerical stability solid_angular_velocity_change_due_to_liquid = np.zeros_like(torque_solid) if effective_inertia > EPSILON: solid_angular_velocity_change_due_to_liquid = -torque_solid / effective_inertia
# Ensure we don't return NaN or inf solid_angular_velocity_change_due_to_liquid = np.nan_to_num( solid_angular_velocity_change_due_to_liquid, nan=0.0, posinf=0.0, neginf=0.0 )
return solid_angular_velocity_change_due_to_liquid, liquid_angular_velocity_change [/code] und dann habe ich es in einem anderen Code zum Aufrufen verwendet: [code]upper_layer_viscous_increment_term, solid_angular_velocity_viscous_increment_term = solid_liquid_layer_angular_velocity_change( viscosity=water_viscosity, radius=water_radius, thickness=layer_thickness, solid_inertia=inertia_tensor, solid_angular_velocity=solid_angular_velocity_current, liquid_layer_angular_velocity=water_angular_velocity_current[water_layer_num-1], second_liquid_layer_angular_velocity=water_angular_velocity_current[water_layer_num-2], ) [/code] Dann habe ich eine Fehlermeldung erhalten, die von numba verursacht wurde und behauptet, dass die aufgerufenen Parameter nicht mit der definierten Funktion übereinstimmen, was dazu führt, dass der Index außerhalb des gültigen Bereichs liegt: [code]/usr/local/bin/python3.13 /Users/niuyingkai/PycharmProjects/PT-formula/2026 prob 7 liquid solid interaction.py Traceback (most recent call last): File "/Users/niuyingkai/PycharmProjects/PT-formula/2026 prob 7 liquid solid interaction.py", line 174, in upper_layer_viscous_increment_term, solid_angular_velocity_viscous_increment_term = solid_liquid_layer_angular_velocity_change( ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^ viscosity=water_viscosity, ^^^^^^^^^^^^^^^^^^^^^^^^^^ ...... second_liquid_layer_angular_velocity=water_angular_velocity_current[water_layer_num-2], ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ) ^ File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/dispatcher.py", line 443, in _compile_for_args raise e File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/dispatcher.py", line 376, in _compile_for_args return_val = self.compile(tuple(argtypes)) File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/dispatcher.py", line 908, in compile cres = self._compiler.compile(args, return_type) File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/dispatcher.py", line 80, in compile status, retval = self._compile_cached(args, return_type) ~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^ File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/dispatcher.py", line 94, in _compile_cached retval = self._compile_core(args, return_type) File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/dispatcher.py", line 107, in _compile_core cres = compiler.compile_extra(self.targetdescr.typing_context, self.targetdescr.target_context, ...... flags=flags, locals=self.locals, pipeline_class=self.pipeline_class) File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/compiler.py", line 739, in compile_extra return pipeline.compile_extra(func) ~~~~~~~~~~~~~~~~~~~~~~^^^^^^ File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/compiler.py", line 439, in compile_extra return self._compile_bytecode() ~~~~~~~~~~~~~~~~~~~~~~^^ File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/compiler.py", line 505, in _compile_bytecode return self._compile_core() ~~~~~~~~~~~~~~~~~~^^ File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/compiler.py", line 481, in _compile_core raise e File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/compiler.py", line 473, in _compile_core pm.run(self.state) ~~~~~~^^^^^^^^^^^^ File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/compiler_machinery.py", line 363, in run raise e File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/compiler_machinery.py", line 356, in run self._runPass(idx, pass_inst, state) ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^ File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/compiler_lock.py", line 35, in _acquire_compile_lock return func(*args, **kwargs) File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/compiler_machinery.py", line 311, in _runPass mutated |= check(pss.run_pass, internal_state) ~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/compiler_machinery.py", line 272, in check mangled = func(compiler_state) File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/typed_passes.py", line 114, in run_pass typemap, return_type, calltypes, errs = type_inference_stage( ~~~~~~~~~~~~~~~~~~~~^ state.typingctx, ^^^^^^^^^^^^^^^^ ...... state.locals, ^^^^^^^^^^^^^ raise_errors=self._raise_errors) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/typed_passes.py", line 95, in type_inference_stage errs = infer.propagate(raise_errors=raise_errors) File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/typeinfer.py", line 1075, in propagate errors = self.constraints.propagate(self) File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/typeinfer.py", line 160, in propagate constraint(typeinfer) ~~~~~~~~~~^^^^^^^^^^^ File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/typeinfer.py", line 572, in __call__ self.resolve(typeinfer, typevars, fnty) ~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/typeinfer.py", line 595, in resolve sig = typeinfer.resolve_call(fnty, pos_args, kw_args) File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/typeinfer.py", line 1569, in resolve_call return self.context.resolve_function_type(fnty, pos_args, kw_args) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/typing/context.py", line 279, in resolve_function_type res = self._resolve_user_function_type(func, args, kws) File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/typing/context.py", line 335, in _resolve_user_function_type return func.get_call_type(self, args, kws) ~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^ File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/types/functions.py", line 541, in get_call_type self.dispatcher.get_call_template(args, kws) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^ File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/dispatcher.py", line 315, in get_call_template pysig, args = self._compiler.fold_argument_types(args, kws) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^ File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/numba/core/dispatcher.py", line 73, in fold_argument_types args = fold_arguments(self.pysig, args, kws, normal_handler, default_handler, stararg_handler) File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-fpackages/numba/core/typing/templates.py", line 217, in fold_arguments bind_kws[n] = args[len(kwonly) + idx] ~~~~^^^^^^^^^^^^^^^^^^^ IndexError: tuple index out of range
Process finished with exit code 1 [/code] Aber ich habe den Anruf überprüft und es gab überhaupt kein Problem. Was ist das Problem? Wie kann man es lösen?
Ich habe Code für die Simulation der Fluiddynamik einer Wasserschicht geschrieben. Es hat eine Funktion von solid_liquid_layer_angular_velocity_change:
def...
Ich habe Code für die Simulation der Fluiddynamik einer Wasserschicht geschrieben:
import numpy as np
# IYPT prob 7
cup_dt = 1e-4 # Time step size for simulation (s) - Reduced for stability...
Ich habe den folgenden Code in Python3 und vergleiche die Numba Jit Compiler -Leistung mit einem regulären Code.import warnings
warnings.filterwarnings( ignore ) #
import timeit
import numpy as np...
Ich habe eine sehr grundlegende Gruppe nach Funktion, die ich in einem Cython -Objekt verwenden möchte, aber es ist etwas wie 400 -mal langsamer als eine ähnliche Funktion in Python, die von Numba...
Ich entwickle ein Multilayer -Perzeptron, und ich habe die folgende Methode in der Klasse Multilayerperceptron, und ich möchte diese Methode so konfigurieren, dass sie auf einer GPU ausgeführt...