ibell / pdsim

Steady-State simulation code for positive displacement machines
MIT License
38 stars 23 forks source link

Problem with starting simulations #82

Closed tomam28 closed 11 months ago

tomam28 commented 1 year ago

Hello pdsim community,

I installed all required packages (with the required versions, because newer cpython version have problems with declaring variables with cpdef instead of cdef) and run setup.py sucessfully. The GUI works also fine, but when I want to solve a simulation, then this error appears:

Traceback (most recent call last): File "C:\...\pdsim\examples\simple_example.py", line 204, in <module> Compressor(solver_method = 'Euler') File "C:\...\pdsim\examples\simple_example.py", line 186, in Compressor recip.solve(key_inlet='inlet.1', File "C:\...\pdsim\PDSim\core\core.py", line 1479, in solve self.OBJECTIVE_CYCLE(x0, self.x_state, File "C:\...\pdsim\PDSim\core\core.py", line 1137, in OBJECTIVE_CYCLE self.one_cycle(X, File "C:\...\pdsim\PDSim\core\core.py", line 1030, in one_cycle aborted = integrator.do_integration(N, tmin, tmax) File "C:\...\pdsim\PDSim\core\integrators.py", line 80, in do_integration self.xnew = self.xold + self.h*self.f1 TypeError: unsupported operand type(s) for *: 'float' and 'PDSim.misc.datatypes.arraym'

Thanks for any help! :)

grafik

ibell commented 1 year ago

Can you post the generated script if it doesn't include anything top secret?

tomam28 commented 1 year ago

Thanks for the fast reply!

The generated script is:


# This file was automatically generated by PDSimGUI on Mo, 28 Aug 2023 07:45:45
# Versions used:
# PDSim: 2.14
# CoolProp: 6.5.0 git revision: bafdea1f39ee873a6bb9833e3a21fe41f90b85e8
# 
# To run this file, in a console, type
#
#     python this_file_name.py
#
# where this_file_name.py is the name of this file
#
# In python 2.7 make a/b always give the double division even 
# if both a and b are integers - thus 2/3 now yields 0.666666666... 
# rather than 0
from __future__ import division

# NO PLUGIN (post_import) 

# General python imports
import time, sys, os, timeit

# Plotting and numeric things
from math import pi
import numpy as np
from matplotlib import pyplot as plt

# Imports from PDSim that are needed for all families of machines
from PDSim.flow.flow import FlowPath
from PDSim.flow.flow_models import IsentropicNozzleWrapper
from PDSim.core.containers import ControlVolume, Tube
from PDSim.core.motor import Motor
from PDSim.plot.plots import debug_plots

# Imports from CoolProp
from CoolProp import State
from CoolProp import CoolProp as CP

# Add the paths for any additional plugin folders (hard-coded absolute paths)
sys.path.extend([])
# NO PLUGIN (post_import) 

def build():
    # NO PLUGIN (pre_build) 

    from PDSim.scroll.core import Scroll

    # NO PLUGIN (pre_build_instantiation) 

    sim = Scroll()

    sim.run_index = 6
    sim.description = ""
    # NO PLUGIN (post_build_instantiation) 

    #############
    # From GeometryPanel
    ############

    #  Parameters from the GUI
    Vdisp = 0.0001048 #[m^3/rev]
    Vratio = 2.2 #[-] 
    t = 0.004 #[m]
    ro = 0.005 #[m]
    phi_i0 = 0.0 #[rad]
    phi_is = 3.141 #[rad]
    phi_os = 0.3 #[rad]

    #  Set the scroll wrap geometry
    sim.set_scroll_geo(Vdisp, # Vdisp [m^3/rev]
                   Vratio, # Vratio [-]
                   t, # Thickness [m]
                   ro, # Orbiting radius [m]
                   phi_i0 = phi_i0, # [rad]
                   phi_os = phi_os, # [rad]
                   phi_is = phi_is) # [rad]
    sim.set_disc_geo("2Arc", r2 = 0)
    sim.d_discharge = 0.01

    sim.geo.delta_flank = 15e-6 # [m]
    sim.geo.delta_radial = 15e-6 # [m]

    sim.geo.phi_ie_offset = 0

    #############
    # From StatePanel
    ############

    inletState = State.State("R410A", {'T': 283.15, 'P' : 181.12561991395648 }, phase="gas")

    outlet_temperature_guess = -1 # [K]
    if outlet_temperature_guess > 0:
        # Use the specified guess for outlet temperature
        T2s = outlet_temperature_guess 
    else:
        T2s = sim.guess_outlet_temp(inletState,362.25123982791297)
    outletState = State.State("R410A", {'T':T2s,'P':362.25123982791297 }, phase="gas")

    # The rotational speed (over-written if motor map provided)
    sim.omega = 377.0

    #############
    # From MassFlowPanel
    ############

    # Add all the control volumes
    sim.auto_add_CVs(inletState, outletState)

    # Get the guess for the mass flow rate
    mdot_guess = inletState.rho*sim.Vdisp*sim.omega/(2*pi)

    # Add both the inlet and outlet tubes
    sim.add_tube(Tube(key1 = 'inlet.1',
                      key2 = 'inlet.2',
                      L = 0.3,
                      ID = 0.02,
                      mdot = mdot_guess, 
                      State1 = inletState.copy(),
                      fixed = 1,
                      TubeFcn = sim.TubeCode))
    sim.add_tube(Tube(key1 = 'outlet.1',
                      key2 = 'outlet.2',
                      L = 0.3,
                      ID = 0.02,
                      mdot = mdot_guess, 
                      State2 = outletState.copy(),
                      fixed = 2,
                      TubeFcn = sim.TubeCode))

    # Add all the leakage flows
    sim.auto_add_leakage(flankFunc = sim.FlankLeakage, 
                         radialFunc = sim.RadialLeakage)

    # Add the inlet-to-shell flow with a fixed area
    FP = FlowPath(key1='inlet.2',
          key2='sa', 
          MdotFcn=IsentropicNozzleWrapper(),
          )
    FP.A = pi*0.02**2/4*0.8
    sim.add_flow(FP)

    # Add the suction-area to suction chambers flows
    sim.add_flow(FlowPath(key1='sa', 
                          key2='s1',
                          MdotFcn=sim.SA_S1,
                          MdotFcn_kwargs = dict(X_d = 0.8)
                          )
                )
    sim.add_flow(FlowPath(key1 = 'sa',
                          key2 = 's2',
                          MdotFcn = sim.SA_S2,
                          MdotFcn_kwargs = dict(X_d = 0.8)
                          )
                )

    sim.add_flow(FlowPath(key1 = 'outlet.1',
                         key2 = 'dd',
                         MdotFcn = sim.DISC_DD,
                         MdotFcn_kwargs = dict(X_d = 0.7)
                         )
                )

    sim.add_flow(FlowPath(key1 = 'outlet.1',
                         key2 = 'ddd',
                         MdotFcn = sim.DISC_DD,
                         MdotFcn_kwargs = dict(X_d = 0.7)
                       )
                )
    sim.add_flow(FlowPath(key1 = 'outlet.1',
                         key2 = 'd1',
                         MdotFcn = sim.DISC_D1,
                         MdotFcn_kwargs = dict(X_d = 0.7)
                         )
                )
    sim.add_flow(FlowPath(key1 = 'outlet.1',
                         key2 = 'ddd',
                         MdotFcn = sim.DISC_D1,
                         MdotFcn_kwargs = dict(X_d = 0.7)
                         )
                )

    sim.add_flow(FlowPath(key1='d1',
                          key2='dd',
                          MdotFcn=sim.D_to_DD,
                          MdotFcn_kwargs = dict(X_d = 0.8)
                          )
                      )
    sim.add_flow(FlowPath(key1='d2',
                          key2='dd',
                          MdotFcn=sim.D_to_DD,
                          MdotFcn_kwargs = dict(X_d = 0.8)
                          )
                )

    #############
    # From MechanicalLossesPanel
    ############

    sim.motor = Motor()
    sim.motor.set_eta(0.95)
    sim.motor.suction_fraction = 1

    from PDSim.core.core import struct
    sim.mech = struct()
    sim.h_shell = 0.01
    sim.A_shell = 0.040536
    sim.Tamb = 298.0
    sim.HTC = 0.0
    sim.mech.scroll_plate_thickness = 0.002
    sim.mech.scroll_plate_diameter = 0.014
    sim.mech.scroll_added_mass = 0.0
    sim.mech.scroll_density = 2700
    sim.mech.mu_oil = 0.0086
    sim.mech.detailed_analysis = True
    sim.mech.journal_tune_factor = 1.0
    sim.mech.D_upper_bearing = 0.025
    sim.mech.L_upper_bearing = 0.025
    sim.mech.c_upper_bearing = 2e-05
    sim.mech.D_crank_bearing = 0.025
    sim.mech.L_crank_bearing = 0.025
    sim.mech.c_crank_bearing = 2e-05
    sim.mech.D_lower_bearing = 0.025
    sim.mech.L_lower_bearing = 0.025
    sim.mech.c_lower_bearing = 2e-05
    sim.mech.thrust_friction_coefficient = 0.03
    sim.mech.thrust_ID = 0.08
    sim.mech.thrust_OD = 0.3
    sim.mech.L_ratio_bearings = 3.0
    sim.mech.oldham_key_friction_coefficient = 0.01
    sim.mech.oldham_ring_radius = 0.06
    sim.mech.oldham_key_width = 0.006
    sim.mech.oldham_mass = 0.1
    sim.mech.oldham_thickness = 0.008
    sim.mech.oldham_key_height = 0.006
    sim.mech.oldham_rotation_beta = 0
    sim.mech.pin1_ybeta_offset = 0.0
    sim.mech.pin2_ybeta_offset = 0.0
    sim.mech.pin3_xbeta_offset = 0.0
    sim.mech.pin4_xbeta_offset = 0.0
    m, zcm = sim.calculate_scroll_mass()
    sim.mech.orbiting_scroll_mass = m
    sim.mech.scroll_zcm__thrust_surface = zcm

    #############
    # From VirtualSensorsPanel
    ############

    # NO PLUGIN (post_build) 

    return sim

def run(sim, pipe_abort = None):
    # NO PLUGIN (pre_run) 

    #############
    # From SolverInputsPanel
    ############

    t1=timeit.default_timer()
    sim.connect_callbacks(step_callback = sim.step_callback, 
                          endcycle_callback = sim.endcycle_callback,
                          heat_transfer_callback = sim.heat_transfer_callback,
                          lumps_energy_balance_callback = sim.lump_energy_balance_callback
                          )
    sim.precond_solve(key_inlet = 'inlet.1',
                      key_outlet = 'outlet.2',
                      pipe_abort = pipe_abort,
                      solver_method = "RK45",
                      OneCycle = False,
                      plot_every_cycle = False,
                      hmin = 1e-8, # hard-coded,
                      timeout = 3600,
                      eps_energy_balance = 0.05,
                      eps_cycle = 0.002,
                      max_number_of_steps = 40000
                      )
    print('time taken',timeit.default_timer()-t1)

    #############
    # From ParametricPanel
    ############

    # NO PLUGIN (post_run) 

if __name__ == '__main__':
    sim = build()
    run(sim)

And the error log is:

Main Log
---------
Want to run 1 simulations in batch mode; 1 cores available for computation
Adding thread;1 threads active; 0 queued 
Didn't get any simulation data
Thread finished; now 0 threads active; 0 queued 

Log from thread #1
-------------------
About to run the script file C:\Users\tomam\.pdsim-temp\script_54f950af39ac.py
C:\Users\tomam\PycharmProjects\pythonProject1\pdsim\PDSim\scroll\core.py:382: UserWarning: xport and yport not provided, defaulting back to circular discharge port; should be stored in self.geo.xvec_disc_port and self.geo.yvec_disc_port
  warnings.warn('xport and yport not provided, defaulting back to circular discharge port; should be stored in self.geo.xvec_disc_port and self.geo.yvec_disc_port')
caching discharge port blockage, please wait... done
Process Run1-1:
Traceback (most recent call last):
  File "C:\Users\tomam\AppData\Local\Programs\Python\Python39\lib\multiprocessing\process.py", line 315, in _bootstrap
    self.run()
  File "C:\Users\tomam\PycharmProjects\pythonProject1\pdsim\GUI\processes.py", line 77, in run
    script_module.run(self.sim, pipe_abort = self.pipe_abort)
  File "C:\Users\tomam\.pdsim-temp\script_54f950af39ac.py", line 273, in run
    sim.precond_solve(key_inlet = 'inlet.1',
  File "C:\Users\tomam\PycharmProjects\pythonProject1\pdsim\PDSim\core\core.py", line 861, in precond_solve
    self.solve(**kwargs)
  File "C:\Users\tomam\PycharmProjects\pythonProject1\pdsim\PDSim\core\core.py", line 1479, in solve
    self.OBJECTIVE_CYCLE(x0, self.x_state,
  File "C:\Users\tomam\PycharmProjects\pythonProject1\pdsim\PDSim\core\core.py", line 1137, in OBJECTIVE_CYCLE
    self.one_cycle(X,
  File "C:\Users\tomam\PycharmProjects\pythonProject1\pdsim\PDSim\core\core.py", line 1040, in one_cycle
    aborted = integrator.do_integration(tmin, tmax, eps_allowed=eps_allowed)
  File "C:\Users\tomam\PycharmProjects\pythonProject1\pdsim\PDSim\core\integrators.py", line 282, in do_integration
    self.xnew1 = self.xold+self.h*(1.0/5.0)*self.f1
TypeError: unsupported operand type(s) for *: 'float' and 'PDSim.misc.datatypes.arraym'
Thread-2: Process is done

Log from thread #2
-------------------

Log from thread #3
-------------------

Log from thread #4
-------------------

Log from thread #5
-------------------

Log from thread #6
-------------------

Log from thread #7
-------------------

Thanks for the help!

ibell commented 1 year ago

I ran that script on the development version of PDSim, no errors, ran fine.

tomam28 commented 11 months ago

Its all solved now, there was a problem with my conda version! 👍