Samir Khan

1849 Reputation

19 Badges

15 years, 245 days

My role is to help customers better exploit our tools. I’ve worked in selling, supporting and marketing maths and simulation software for all my professional career.

I’m fascinated by the full breadth and range of application of Maple. From financial mathematics and engineering to probability and calculus, I’m always impressed by what our users do with our tools.

However much I strenuously deny it, I’m a geek at heart. My first encounter with Maple was as an undergraduate when I used it to symbolically solve the differential equations that described the heat transfer in a series of stirred tanks. My colleagues brute-forced the problem with a numerical solution in Fortran (but they got the marks because that was the point of the course). I’ve since dramatized the process in a worksheet, and never fail to bore people with the story behind it.

I was born, raised and spent my formative years in England’s second city, Birmingham. I graduated with a degree in Chemical Engineering from The University of Nottingham, and after completing a PhD in Fluid Dynamics at Herriot-Watt University in Edinburgh, I started working for Adept Scientific – Maplesoft’s partner in the UK.

MaplePrimes Activity


These are answers submitted by Samir Khan

The ThermophysicalData:-Property subpackage is built on top of an open source library called CoolProp. CoolProp natively use SI units, and returns temperatures in K.

For this call…

ThermophysicalData:-Property(T, "IF97::Water", Q = 0.100, P = 1*Unit(psi))

…Maple receives an absolute temperature of 311.9 K from CoolProp.

If the unit system is set to FPS via Units:-UseSystem(FPS), this is converted to 561.1 F (= 311.1 * 9/5), assuming that 311.9K is a temperature difference.

This assumption is incorrect in context, but this context is not known to Units:-UseSystem(). The correct temperature conversion would be (311.9K − 273.15) × 9/5 + 32 = 101.7F

Rather than changing the default unit system to FPS, you could consider

  • Keeping the default unit system to SI

  • Changing the units of individual results manually to FPS

    • via the Context Panel

    • except for absolute temperatures, in which use use convert(temperature_in_kelvin,temperature,degF) instead

Maple Flow doesn't yet support

  • for loops in the canvas (you can, however, enter procedures with for loops in the coding window)
  • print statements in the canvas

Try something like this instead:

Section 6.3 of the User Manual (Help > User Manual) states:

To create a multi-line header or footer, use a newline character.
• On Windows, use \n
• On Mac, use \r

 

The manual also offers an example:

Here's a couple of methods you could try:

The conversion that's closest in spirit to the Mathcad worksheet is this:

But this isn't necessarily the best way to implement this type of calculation in Maple Flow. Here's another approach that you might consider a better use of Maple Flow's functionality:

When resizing an image with the mouse, hold down the Shift key to maintain the aspect ratio.

This is on the roadmap, but not in the product just yet

You can use the Context Panel to rescale Ω to kΩ.

 

 

 

In "Enter Units", write `Omega` for ohms, or `kOmega` for kilo ohms.

You can generate compressibility factor charts with the ThermophysicalData package

with(ThermophysicalData):
fluid := "CH4":
Zc := (p, t) -> Property(Z, fluid, temperature = t, pressure = p):
temps := [200*Unit(K), 300*Unit(K), 600*Unit(K)]:
plots:-display(
    seq(plot(Zc(p, temps[i]), p = 0 * Unit(bar)..600 * Unit(bar)),i = 1..3)
   ,seq(plots:-textplot([640, Zc(600*Unit(bar), temps[i]), temps[i]] ), i = 1..3)
   ,labels = ["Pressure (bar)", "Compressibility Factor"]
   ,labeldirections = [horizontal, vertical]
              )

You can certainly rescale kg/(m^2*s^2) to N/m^3 using the Context Panel. You need to use the "Enter Unit" field to specify your custom unit:

You can convert to torque units (e.g. N*m, lbf*ft etc) with the Context Panel.

  • Click on the result you want to rescale to torque (this probably has units of energy e.g. J) and open the Context Panel

  • Locate the "Enter Unit" box in the Context Panel, and enter your desired units of torque (e.g. N*m)

  • Press Enter

You should now find that your result is rescaled to units of torque

The Optimization package understands units, so you could do something like this:

restart:

XU:=Vector([1*Unit(s), 2*Unit(s), 3*Unit(s), 4*Unit(s), 5*Unit(s), 6*Unit(s)]):
YU:=Vector( [2*Unit(m), 3*Unit(m), 4*Unit(m), 3.5*Unit(m), 5.8*Unit(m), 7*Unit(m)]):

sse:=(a,b,c)->add( (a+b*XU[i]+c*XU[i]^2 - YU[i])^2, i = 1..6):

Optimization:-Minimize(sse(a,b,c),initialpoint = {a=1*Unit(m),b=1*Unit(m/s), c=1*Unit(m/s^2)})

Warning, (in sse) `i` is implicitly declared local

 

[1.287714285714*Units:-Unit(m^2), [a = HFloat(1.9599999999999476)*Units:-Unit(m), b = HFloat(0.16500000000003545)*Units:-Unit(m/s), c = HFloat(0.11071428571428099)*Units:-Unit(m/s^2)]]

(1)

 

Download Optimization_with_units.mw

Add this option to the plot command: useunits=[deg,lbf]

Subscripts in Flow can only contain alphanumeric characters, with any other characters escaping to the baseline.

The content menu is not available in Flow.

1 2 3 4 Page 1 of 4