From b39878d6250d9734df2c6ebf505d8f01db83c52c Mon Sep 17 00:00:00 2001 From: Daniel Weschke Date: Fri, 8 Feb 2019 10:22:48 +0100 Subject: [PATCH] initial commit --- plate.py | 124 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ tube.py | 87 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 211 insertions(+) create mode 100755 plate.py create mode 100755 tube.py diff --git a/plate.py b/plate.py new file mode 100755 index 0000000..66936c3 --- /dev/null +++ b/plate.py @@ -0,0 +1,124 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +"""\ +Circular plate +""" +from __future__ import absolute_import, division, print_function, unicode_literals +from math import sqrt + +__author__ = "Daniel Weschke" +__copyright__ = "Copyright 2019 Daniel Weschke" +__credits__ = ["Daniel Weschke"] +__license__ = "MIT" +__version__ = "2019.01.17" +__maintainer__ = "Daniel Weschke" +__email__ = "daniel.weschke@directbox.de" +__status__ = "Production" # "Prototype", "Development", "Production" + +VERSION = """\ +%(prog)s version {version} {copyright} + +For Unicode characters check the file encoding that the console is using. +Windows user may execute the command "chcp 65001".""".format( + version=__version__, copyright=__copyright__) + +EPILOG = """\ +""" + +def deflection_pinned(p, r, nu, E, t): + """\ + Central deflection of a pinned supported circular plate. + + p pressure + r radius + nu Poisson's ratio + E Young's modulus + t thickness + """ + return p*r**4*(5+nu)/(64*(1+nu))*(12*(1-nu**2))/(E*t**3) + +def deflection_clamped(p, r, nu, E, t): + """\ + Central deflection of a clamped supported circular plate. + + p pressure + r radius + nu Poisson's ratio + E Young's modulus + t thickness + """ + return p*r**4*(1)/(64)*(12*(1-nu**2))/(E*t**3) + +def thickness_min(p, d, Rp02, S): + """\ + Minimum thickness of a circular plate. + + p pressure + d diameter + Rp02 mechanical strength + S safety factor + """ + return 0.554*d*sqrt(p*S/Rp02) + +def allowable_stress(sigma, S): + """\ + Allowable stress. + + sigma stress + S safety factor + """ + return sigma/S + +def main(): + """\ + Main function + """ + import argparse + + parser = argparse.ArgumentParser( + description=__doc__, prefix_chars='-', epilog=EPILOG, + #usage="%(prog)s [OPTION]... NAME", + formatter_class=argparse.RawTextHelpFormatter, + ) + parser.add_argument('-v', '--verbose', action="store_true", help="Verbose output") + parser.add_argument('-V', '--version', action='version', version=VERSION) + parser.add_argument('-D', '--debug', dest='debug', action='store_true', help=argparse.SUPPRESS) + subparsers = parser.add_subparsers(help='', dest='case') + parser_a = subparsers.add_parser( + 'deflection', help="central deflection", prefix_chars='-', + description="Central deflection of a circular plate.") + parser_a.add_argument('P', nargs='?', type=float, default=0.1, help='pressure [default: 0.1 (MPa = 1 bar)]') + parser_a.add_argument('NU', type=float, help='Poisson\'s ratio (CVD diamond 0.1)') + parser_a.add_argument('R', type=float, help='radius') + parser_a.add_argument('E', type=float, help='Young\'s modulus (CVD diamond 1.05e6)') + parser_a.add_argument('T', type=float, help='thickness') + parser_a.add_argument('-p', '--pinned', action="store_true", help='pinned support') + parser_a.add_argument('-c', '--clamped', action="store_true", help='clamped support') + parser_b = subparsers.add_parser( + 'thickness', help="minimum thickness", prefix_chars='-', + description="Minimum thickness of a circular plate.") + parser_b.add_argument('P', nargs='?', type=float, default=0.1, help='pressure [default: 0.1 (MPa = 1 bar)]') + parser_b.add_argument('D', type=float, help='diameter') + parser_b.add_argument('SIG', type=float, help='mechanical strength (CVD diamond 2000..400)') + parser_b.add_argument('S', nargs='?', type=float, default=4., help='safety factor [default: 4]') + args = parser.parse_args() + + if args.debug: + print(args) + + if args.case == 'deflection': + if args.pinned: + print(deflection_pinned(args.P, args.R, args.NU, args.E, args.T)) + elif args.clamped: + print(deflection_clamped(args.P, args.R, args.NU, args.E, args.T)) + else: + print('error: define a support type.') + return 2 + elif args.case == 'thickness': + print(thickness_min(args.P, args.D, args.SIG, args.S)) + + return 0 + +if __name__ == "__main__": + import sys + sys.exit(main()) diff --git a/tube.py b/tube.py new file mode 100755 index 0000000..8fe20a1 --- /dev/null +++ b/tube.py @@ -0,0 +1,87 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +"""\ +Tube +""" +from __future__ import absolute_import, division, print_function, unicode_literals +from math import sqrt + +__author__ = "Daniel Weschke" +__copyright__ = "Copyright 2019 Daniel Weschke" +__credits__ = ["Daniel Weschke"] +__license__ = "MIT" +__version__ = "2019.02.07" +__maintainer__ = "Daniel Weschke" +__email__ = "daniel.weschke@directbox.de" +__status__ = "Production" # "Prototype", "Development", "Production" + +VERSION = """\ +%(prog)s version {version} {copyright} + +For Unicode characters check the file encoding that the console is using. +Windows user may execute the command "chcp 65001".""".format( + version=__version__, copyright=__copyright__) + +EPILOG = """\ +""" + +def critical_buckling_stress(r, nu, E, t): + """\ + Critical buckling stress of a thin tube loaded with external pressure p. + + r mean radius (r_a + r_i)/2 + nu Poisson's ratio + E Young's modulus + t thickness + """ + return (E/(4*(1-nu**2))*(t/r)**3) + +def allowable_stress(sigma, S): + """\ + Allowable stress. + + sigma stress + S safety factor, elastic buckling stress state S = 3 + """ + return sigma/S + +def main(): + """\ + Main function + """ + import argparse + + parser = argparse.ArgumentParser( + description=__doc__, prefix_chars='-', epilog=EPILOG, + #usage="%(prog)s [OPTION]... NAME", + formatter_class=argparse.RawTextHelpFormatter, + ) + parser.add_argument('-v', '--verbose', action="store_true", help="Verbose output") + parser.add_argument('-V', '--version', action='version', version=VERSION) + parser.add_argument('-D', '--debug', dest='debug', action='store_true', help=argparse.SUPPRESS) + subparsers = parser.add_subparsers(help='', dest='case') + + parser_a = subparsers.add_parser( + 'buckling', help="critical buckling stress", prefix_chars='-', + description="Critical buckling stress of a thin tube loaded with external pressure p.") + parser_a.add_argument('NU', type=float, help='Poisson\'s ratio') + parser_a.add_argument('R', type=float, help='mean radius') + parser_a.add_argument('E', type=float, help='Young\'s modulus') + parser_a.add_argument('T', type=float, help='thickness') + parser_a.add_argument('S', nargs='?', type=float, default=3., help='safety factor [default for elastic stress state: 3]') + + args = parser.parse_args() + + if args.debug: + print(args) + + if args.case == 'buckling': + p_crit = critical_buckling_stress(args.R, args.NU, args.E, args.T) + print("p_crit =", p_crit) + print("p_allow =", allowable_stress(p_crit, args.S)) + + return 0 + +if __name__ == "__main__": + import sys + sys.exit(main())