RPA-C Scripting Utility is available as a part of RPA-C and implements object-oriented binding from JavaScript (ECMAScript) to many internal objects and functions of RPA-C.
For more information see also
Scripting Utility is an integral part of RPA-C and available since v.1.0.
analysis.js |
/*************************************************** RPA-C - tool for the thermodynamic analysis. This script loads existing configuration file, solves the configured problem and prints out the results. ****************************************************/ // Load configuration file c = new ConfigFile("examples/HMX.cfg"); c.read(); // Create and run combustion analysis ca = new CombustionAnalysis(); ca.run(c); if (ca.getCombustorsListSize()>0) { printf("Initial mixture:\n"); ca.getMixture().print(); tUnit = "K"; printf("T = %10.5f %s\n", ca.getCombustor(0).getEquilibrium().getT(tUnit), tUnit); hexUnit = "kJ/kg"; printf("HEX = %10.5f %s\n", ca.getHEX(hexUnit), hexUnit); } else { printf("Could not solve!\n"); }
combustor.js |
/*************************************************** RPA-C - tool for the thermodynamic analysis. This script demonstrates how to prepare the mixture of ingredients and run the combustion problem using object Combustor. ****************************************************/ // Prepare the mixture of ingredients mix = new Mixture(); mix.addSpecies("NH4CLO4(cr)", 0.7); mix.addSpecies("AL(cr)", 0.2); mix.addSpecies("HTPB+Curative", 0.9, "g/cm^3", 0.1); printf("Initial mixture:"); mix.print(); // Solve problem (p,H)=const using object Combustor printf("Solve problem (p,H)=const"); c1 = new Combustor(mix, true, true); c1.setP(20.7, "MPa"); c1.solve(true, false); c1.getEquilibrium().print("SI"); c1.getDerivatives().print("SI"); // Solve problem (p,T)=const using object Combustor p = 20.7; T = 1400; printf("Solve problem (p,T)=const at p=%4.1f MPa T=%8.3f K", p, T); c2 = new Combustor(mix, true, true); c2.setPT(p, "MPa", T, "K"); c2.solve(true, false); c2.getEquilibrium().print("SI"); c2.getDerivatives().print("SI"); // Solve problem (p,H)=const using object Combustor printf("Solve problem (p,H)=const at p=%4.1f MPa", p); c3 = new Combustor(mix, true, true); c3.setP(p, "MPa"); c3.solve(true, false); c3.getEquilibrium().print("SI"); c3.getDerivatives().print("SI");
combustor_nested_analysis.js |
/*************************************************** RPA-C - tool for the thermodynamic analysis. This script demonstrates how to prepare the mixture of ingredients and run nested combustion problems using object Combustor. ****************************************************/ // Prepare the mixture of ingredients mix = new Mixture(); mix.addSpecies("NH4CLO4(cr)", 0.7); mix.addSpecies("AL(cr)", 0.2); mix.addSpecies("HTPB+Curative", 0.9, "g/cm^3", 0.1); printf("Initial mixture:\n"); mix.print(); // Nested analysis // Array of pressure values in MPa p = [10, 15, 20]; // Array of temperature values in K // "-1" means the temperature won't be assigned // (see the code below) T = [-1, 1000, 1400, 1800]; for (var i=0; i<p.length; i++) { printf("Pressure p=%10.5f MPa\n", p[i]); for (var j=0; j<T.length; j++) { c = new Combustor(mix, true, true); if (T[j]>0) { printf("Temperature T=%10.5f K\n", T[j]); c.setPT(p[i], "MPa", T[j], "K"); } else { c.setP(p[i], "MPa"); } c.solve(true, false); c.getEquilibrium().print("SI"); c.getDerivatives().print("SI"); printf("\n*************************************************************\n"); } }
custom_log.js |
/*************************************************** RPA-C - tool for the thermodynamic analysis. This script demonstrates how to write results in required format into the file "log.txt". ****************************************************/ // Open the file "log.txt" in the mode "w" ("write") var f = new File("log.txt", "w"); // Define variable with the name of configuration file configName = "examples/HMX.cfg"; // Open configuration file c = new ConfigFile(configName); c.read(); f.printf("# Configuration file: %s\n\n", configName); // Prepare and run combustion analysis ca = new CombustionAnalysis(); ca.run(c); if (ca.getCombustorsListSize()>0) { combustor = ca.getCombustor(0); r = combustor.getEquilibrium(); products = r.getResultingMixture(); unit = "MPa"; f.printf("p = %10.5f %s\n", combustor.getEquilibrium().getP(unit), unit); unit = "K"; f.printf("T = %10.5f %s\n", combustor.getEquilibrium().getT(unit), unit); unit = "kJ/kg"; f.printf("HEX = %10.5f %s\n", ca.getHEX(unit), unit); f.printf("\n# %13s %9s %9s %4s\n", "Name", "Mass Frac", "Mole Frac", "Cond"); sum1 = 0; sum2 = 0; for (i=0; i<products.size(); ++i) { // Reaction product s = products.getSpecies(i); massFraction = products.getFraction(i, "mass"); moleFraction = products.getFraction(i, "mole");; sum1 += massFraction; sum2 += moleFraction; // We are printing out mass fraction in format "%9.7f", // so skip all products with massFraction<1e-7 if (massFraction<1e-7) { continue; } f.printf("%15s %9.7f %9.7f %4d\n", s.getName(), massFraction, moleFraction, s.getCondensed() ); } f.printf("%15s %9.7f %9.7f\n", "Summ:", sum1, sum2 ); } // Close the file f.close();
More examples can be found in RPA-C distribution package.
Scilab Plugin is available as a part of RPA-C v.2 that enables users to use many features of RPA-C from custom Scilab scripts.
For more information see also
Scilab Plugin is an integral part of RPA-C and available since v.2.0.
example1.sce |
exec loader.sce RPAInit() // clear console clc // clear memory clear // close all plots xdel(winsid()) tic() //************************************* // Load configuration from the file cfg = ConstructConfigFile(); ConfigFile_read(cfg, "scilab-examples/ScilabTest.cfg") // Create separate copy of mixture with ingredients to get some // propertiesof the mixture: density and equivalence ratio // We coud get it from CombustionAnalysis, but only after the analysis run, // which is in the loop in this example. So, to improve the performance, // we create another copy of mixtue outside of the loop mix = ConstructMixture(); ingredients = ConfigFile_getIngredients(cfg); for i=0:Ingredients_getSize(ingredients)-1 ing = Ingredients_getComponent(ingredients, i); s = Mixture_add(mix, Component_getName(ing), Component_getMf(ing)); end // Get the density of the mixture in kg/m3 rho = Mixture_getRho(mix, "kg/m^3"); // Equivalence ratio er = Mixture_getEquivalenceRatio(mix, Ingredients_getOmitAtomsER(ingredients)); //************************************* // Run amalysis p=logspace(-1,2,30) for i=1:size(p,'*') cc = ConfigFile_getCombustionConditions(cfg); CombustionConditions_setP(cc, p(i), "MPa"); // Update main combustion conditions ca = ConstructCombustionAnalysis(); CombustionAnalysis_setPrintResults(ca, %F); CombustionAnalysis_run(ca, cfg); if CombustionAnalysis_getCombustorsListSize(ca)>0 then e = CombustionAnalysis_getEquilibrium(ca, 0); // Pressure _p = Equilibrium_getP(e, "MPa"); // Flame Temperature in K T = Equilibrium_getT(e, "K"); // Gas Yield (mol/kg) products = Equilibrium_getResultingMixture(e); v = 1000 / Mixture_getM(products); // Mole number in 100 gm of whole mixture v_c = 0; // Mole number in 100 gm of condenced mixture for j=0:Mixture_size(products)-1 s = Mixture_getSpecies(products, j); if Species_isCondensed(s) then v_c = v_c + (Mixture_getFraction(products, j, "mole") * v); end end g = v - v_c; // Condensed fraction vc = 0; d = CombustionAnalysis_getDerivatives(ca, 0); vc = Derivatives_getZ(d); mprintf("%2d: p=%f T=%f rho=%f er=%f g=%f vc=%f ", i, _p, T, rho, er, g, vc); data(:,i) = [T, rho, er, g, vc]; end DeleteCombustionAnalysis(ca); end d=toc() disp(d) //************************************* // Plot diagrams xdel() f=figure("background",-2,"figure_position", [0 0],"figure_size",[1800 1000]); drawlater() subplot(1,3,1) plot(p,data(1,:),'bo-','thickness',2) xgrid(33,1,8) title('Flame Temperature',"font_style",8,"fontsize",3) xlabel("Pressure (MPa)","font_style",8,"fontsize",2) ylabel("Flame Temperature (K)","font_style",8,"fontsize",2) a=gca();a.log_flags="lnn" subplot(1,3,2) plot(p,data(5,:),'bo-','thickness',2) xgrid(33,1,8) title('Gas Yield',"font_style",8,"fontsize",3) xlabel("Pressure (MPa)","font_style",8,"fontsize",2) ylabel("Gas yield (mol/kg)","font_style",8,"fontsize",2) a=gca();a.log_flags="lnn" subplot(1,3,3) plot(p,data(5,:).*data(1,:)/1000,'bo-','thickness',2) xgrid(33,1,8) title('Massic Sifx',"font_style",8,"fontsize",3) xlabel("Pressure (MPa)","font_style",8,"fontsize",2) ylabel("Massic Sifx (mol.K/g)","font_style",8,"fontsize",2) a=gca();a.log_flags="lnn" drawnow()
example4.sce |
exec loader.sce RPAInit() // clear console clc // clear memory clear // close all plots xdel(winsid()) tic() //************************************* // Create configuration in memory cfg = ConstructConfigFile(); ConfigFile_setName(cfg, "Test") // We will change mass fractions for these two ingredients in the loop // so assign them to separate variables to access later easier c_al = ConstructComponent("AL(cr)", 0.20); c_htpb = ConstructComponent("HTPB+Curative", 0.12); c_total_mf = Component_getMf(c_al) + Component_getMf(c_htpb); ingredients = ConfigFile_getIngredients(cfg); Ingredients_addComponent(ingredients, ConstructComponent("NH4CLO4(cr)", 0.68)); Ingredients_addComponent(ingredients, c_al); Ingredients_addComponent(ingredients, c_htpb); gopt = ConfigFile_getGeneralOptions(cfg); GeneralOptions_setMultiphase(gopt, %T); GeneralOptions_setIons(gopt, %T); cc = ConfigFile_getCombustionConditions(cfg); CombustionConditions_setP(cc, 20.7, "MPa"); // Will be changed in the loop below hexc = ConfigFile_getHexConditions(cfg); HEXConditions_setType(hexc, "none"); //************************************* // Run analysis y1=.4 y2=.6 x1=1 x2=30 for i=x1:x2 txg(i)=((y1-y2)/(x1-x2))*i+(-(x2*y1-x1*y2)/(x1-x2)) txb(i)=c_total_mf-txg(i) // Re-assign the mass fractions Component_setMf(c_al, txg(i)); Component_setMf(c_htpb, txb(i)); ca = ConstructCombustionAnalysis(); CombustionAnalysis_setPrintResults(ca, %F); CombustionAnalysis_run(ca, cfg); if CombustionAnalysis_getCombustorsListSize(ca)>0 then // Get current initial mixture (ingredients) mix = CombustionAnalysis_getMixture(ca); // Get the density of the mixture in kg/m3 rho = Mixture_getRho(mix, "kg/m^3"); // Equivalence ratio er = Mixture_getEquivalenceRatio(mix, Ingredients_getOmitAtomsER(ingredients)); e = CombustionAnalysis_getEquilibrium(ca, 0); // Pressure p = Equilibrium_getP(e, "MPa"); // Flame Temperature in K T = Equilibrium_getT(e, "K"); // Gas Yield (mol/kg) products = Equilibrium_getResultingMixture(e); v = 1000 / Mixture_getM(products); // Mole number in 100 gm of whole mixture v_c = 0; // Mole number in 100 gm of condenced mixture for j=0:Mixture_size(products)-1 s = Mixture_getSpecies(products, j); if Species_isCondensed(s) then v_c = v_c + (Mixture_getFraction(products, j, "mole") * v); end end g = v - v_c; // Condensed fraction vc = 0; d = CombustionAnalysis_getDerivatives(ca, 0); vc = Derivatives_getZ(d); mprintf("%2d: Mf=%f+%f=%f p=%f T=%f rho=%f er=%f g=%f vc=%f ", i, txg(i), txb(i), c_total_mf, p, T, rho, er, g, vc); data(:,i) = [T, rho, er, g, vc]; end DeleteCombustionAnalysis(ca); end d=toc() disp(d) //************************************* // Plot diagrams xdel() f=figure("background",-2,"figure_position", [0 0],"figure_size",[1800 1000]); drawlater() subplot(2,3,1) plot(txg',data(1,:),'bo-','thickness',2) xgrid(33,1,8) title('Flame Temperature',"font_style",8,"fontsize",3) xlabel("Guni rate","font_style",8,"fontsize",2) ylabel("Flame Temperature (K)","font_style",8,"fontsize",2) subplot(2,3,2) plot(txg',data(4,:),'bo-','thickness',2) xgrid(33,1,8) title('Gas Yield',"font_style",8,"fontsize",3) xlabel("Guni rate","font_style",8,"fontsize",2) ylabel("Gas yield (mol/kg)","font_style",8,"fontsize",2) subplot(2,3,3) plot(txg',data(4,:).*data(1,:)/1000,'bo-','thickness',2) xgrid(33,1,8) title('Massic Sifx',"font_style",8,"fontsize",3) xlabel("Guni rate","font_style",8,"fontsize",2) ylabel("Massic Sifx (mol.K/g)","font_style",8,"fontsize",2) subplot(2,3,4) plot(txg',data(2,:),'bo-','thickness',2) xgrid(33,1,8) title('Density',"font_style",8,"fontsize",3) xlabel("Guni rate","font_style",8,"fontsize",2) ylabel("Density (g/m3)","font_style",8,"fontsize",2) subplot(2,3,5) plot(txg',data(3,:),'bo-','thickness',2) xgrid(33,1,8) title('Equivalent Ratio',"font_style",8,"fontsize",3) xlabel("Guni rate","font_style",8,"fontsize",2) ylabel("Equivalent ratio","font_style",8,"fontsize",2) subplot(2,3,6) plot(txg',data(5,:),'bo-','thickness',2) xgrid(33,1,8) title('Condensed phase',"font_style",8,"fontsize",3) xlabel("Guni rate","font_style",8,"fontsize",2) ylabel("Condensed Phase (%)","font_style",8,"fontsize",2) drawnow()
More examples can be found in RPA-C distribution package.