(* ASCEND modelling environment Copyright (C) 1998, 2007 Carnegie Mellon University This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . *) REQUIRE "atoms.a4l"; REQUIRE "plot.a4l"; (* by Arthur W. Westerberg If using the Tcl/Tk GUI, see the accompanying vesselPlot.a4s file. *) (* a PARAMETERISED version of the vessel model developed earlier... *) MODEL vessel( vessel_vol WILL_BE volume; wall_thickness WILL_BE distance; metal_density WILL_BE mass_density; H_to_D_ratio WILL_BE factor; metal_mass WILL_BE mass; ); NOTES 'purpose' SELF { This model relates the mass of metal in the walls to the diameter and height of a thin-walled storage vessel. The vessel is cylindrical with two flat ends. Extensive documentation exists for this model to teach a new user of ascend how to write, debug, and run ASCEND models. } END NOTES; (* variables *) side_area, end_area IS_A area; wall_vol IS_A volume; H, D IS_A distance; (* equations *) FlatEnds: end_area = 1{PI} * D^2 / 4; Sides: side_area = 1{PI} * D * H; Cylinder: vessel_vol = end_area * H; Metal_volume: (side_area + 2 * end_area) * wall_thickness = wall_vol; HD_definition: D * H_to_D_ratio = H; VesselMass: metal_mass = metal_density * wall_vol; METHODS METHOD default_self; D := 1 {m}; H := 1 {m}; END default_self; METHOD specify; FIX vessel_vol; FIX H_to_D_ratio; FIX wall_thickness; FIX metal_density; END specify; METHOD values; H_to_D_ratio := 2; vessel_vol := 250 {ft^3}; wall_thickness := 5 {mm}; metal_density := 5000 {kg/m^3}; END values; END vessel; (* This model tabulates a set of parametric 'vessel' objects and loads the results into a data structure ('plt_curve') that ASCEND understands and can plot graphically. *) MODEL vesselPlot; vessel_volume IS_A volume; wall_thickness IS_A distance; metal_density IS_A mass_density; n_entries IS_A integer_constant; n_entries :== 20; H_to_D_ratio[1..n_entries] IS_A factor; metal_mass[1..n_entries] IS_A mass; FOR i IN [1..n_entries] CREATE v[i] IS_A vessel(vessel_volume, wall_thickness, metal_density, H_to_D_ratio[i], metal_mass[i]); END FOR; CurveSet IS_A set OF symbol_constant; CurveSet :== ['5 mm']; Curves['5 mm'] IS_A plt_curve([1..n_entries], metal_mass, H_to_D_ratio); massVSratio IS_A plt_plot_symbol(CurveSet, Curves); METHODS METHOD default_self; (* set the title for the plot and the labels for the ordinate and abscissa *) massVSratio.title := 'Metal mass of the walls vs H to D ratio for a thin-walled cylindrical vessel'; massVSratio.XLabel := 'H to D ratio'; massVSratio.YLabel := 'metal mass IN kg/m^3'; END default_self; METHOD specify; RUN v[1..n_entries].specify; END specify; METHOD values; vessel_volume := 250 {ft^3}; wall_thickness := 5 {mm}; metal_density := 5000 {kg/m^3}; FOR i IN [1..n_entries] DO H_to_D_ratio[i] := i/10.0; END FOR; END values; METHOD on_load; RUN default_self; RUN reset; RUN values; END on_load; END vesselPlot;