ADDED mttroot/mtt/lib/cr/perl/Density.pm Index: mttroot/mtt/lib/cr/perl/Density.pm ================================================================== --- /dev/null +++ mttroot/mtt/lib/cr/perl/Density.pm @@ -0,0 +1,156 @@ +#------------------------------------------------------------------------------- +# Model Transformation Tools +#------------------------------------------------------------------------------- + + +package Density; + +#------------------------------------------------------------------------------- +# linear constitutive relationship with cosine modulation +#------------------------------------------------------------------------------- + +use strict; +use warnings; + +#------------------------------------------------------------------------------- +# standard module header (see perlmod for explanation) +#------------------------------------------------------------------------------- +BEGIN { + use Exporter (); + our ($VERSION, @ISA, @EXPORT, @EXPORT_OK, %EXPORT_TAGS); + + $VERSION = 1.00; + + @ISA = qw(Exporter); + @EXPORT = qw(&Density); # CR name + %EXPORT_TAGS = ( ); +} + +#------------------------------------------------------------------------------- +# declaration of specific component implementations +#------------------------------------------------------------------------------- +sub Density_r(@); # R + +#------------------------------------------------------------------------------- +# main function: selects which subfunction to call +#------------------------------------------------------------------------------- +sub Density (@) { + + my $retval; + + $_ = $_[0]; + + s/\((.*)\)/$1/; # strip brackets + my @args = split (/,/); # split arguments + + $_ = $args[0]; # get component type + + # select rule to use + if (/^R|r$/) { $retval = Density_r (@args); } + + # if a substitution has been made ($retval) + if ($retval) + { + return $retval; # return substituted expression + } + else # return nothing + { + return; + } +} + +#------------------------------------------------------------------------------- +# R +#------------------------------------------------------------------------------- +sub Density_r (@) { + + my @args = @_; + my $retval = ''; + + if ($#args == 15-1) + { + if ($args[2] eq 'ideal_gas') + { + my ($component, + $required_output, + $law, + $R, + $out_causality, + $out_port, + $Pressure, + $P_causality, + $P_port, + $Temperature, + $T_causality, + $T_port, + $Nothing, + $N_causality, + $N_port) = @args; + + if (($P_causality eq 'effort') and + ($P_port == 1) and + ($T_causality eq 'effort') and + ($T_port == 2) and + ($N_causality eq 'flow') and + ($N_port == 3)) + { + if ($required_output eq 'density') + { + return "(($Pressure)/(($R)*($Temperature)))"; + } + elsif ($required_output eq 'specific_volume') + { + return "(($R)*($Temperature)/($Pressure))"; + } + } + } + elsif ($args[2] eq 'incompressible') + { + my ($component, + $required_output, + $law, + $rho, + $out_causality, + $out_port, + $Pressure, + $P_causality, + $P_port, + $Temperature, + $T_causality, + $T_port, + $Nothing, + $N_causality, + $N_port) = @args; + + if (($P_causality eq 'effort') and + ($P_port == 1) and + ($T_causality eq 'effort') and + ($T_port == 2) and + ($N_causality eq 'flow') and + ($N_port == 3)) + { + if ($required_output eq 'density') + { + return "($rho)"; + } + elsif ($required_output eq 'specific_volume') + { + return "(1/($rho))"; + } + } + } + } + + if ($retval) + { + return $retval; + } + else + { + return; + } +} + +#------------------------------------------------------------------------------- +1; # return true +