#!/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())