Untitled
unknown
plain_text
a year ago
4.1 kB
4
Indexable
import com.comsol.model.*;
import com.comsol.model.util.*;
public class BioreactorModel {
public static void main(String[] args) {
Model model = ModelUtil.create("Model");
// Set up parameters
double diameter = 10; // cm
double wallThickness = 0.5; // cm
double heightInner = 16.55; // cm
double headplateThickness = 1; // cm
double bottomPlateThickness = 0.8; // cm
double impellerDiameter = 5; // cm
double impellerBladeLength = 1; // cm
double impellerBladeThickness = 0.3; // cm
double lowerImpellerHeight = 10.5; // cm
double upperImpellerHeight = 16.5; // cm
double shaftDiameter = 0.8; // cm
double baffleWidth = 1; // cm
double baffleThickness = 0.3; // cm
double baffleHeight = 9; // cm;
// Create geometry
Geometry geom = model.geom().create("geom1", 3);
// Bioreactor vessel
geom.feature().create("vessel", "Cylinder");
geom.feature("vessel").set("r", diameter / 2 + wallThickness);
geom.feature("vessel").set("h", heightInner);
// Inner hollow cylinder
geom.feature().create("inner", "Cylinder");
geom.feature("inner").set("r", diameter / 2);
geom.feature("inner").set("h", heightInner);
// Subtract inner from outer to create walls
geom.feature().create("walls", "Difference");
geom.feature("walls").selection("input").set("vessel");
geom.feature("walls").selection("input2").set("inner");
// Headplate
geom.feature().create("headplate", "Cylinder");
geom.feature("headplate").set("r", diameter / 2 + wallThickness);
geom.feature("headplate").set("h", headplateThickness);
geom.feature("headplate").set("pos", new double[]{0, 0, heightInner});
// Bottom plate
geom.feature().create("bottomplate", "Cylinder");
geom.feature("bottomplate").set("r", diameter / 2 + wallThickness);
geom.feature("bottomplate").set("h", bottomPlateThickness);
// Impellers
createImpeller(geom, lowerImpellerHeight, impellerDiameter, impellerBladeLength, impellerBladeThickness, shaftDiameter);
createImpeller(geom, upperImpellerHeight, impellerDiameter, impellerBladeLength, impellerBladeThickness, shaftDiameter);
// Baffles
createBaffles(geom, diameter, baffleWidth, baffleThickness, baffleHeight);
// Build the geometry
geom.run();
}
private static void createImpeller(Geometry geom, double position, double impellerDiameter, double bladeLength, double bladeThickness, double shaftDiameter) {
geom.feature().create("impeller_shaft", "Cylinder");
geom.feature("impeller_shaft").set("r", shaftDiameter / 2);
geom.feature("impeller_shaft").set("h", bladeThickness);
geom.feature("impeller_shaft").set("pos", new double[]{0, 0, position});
for (int i = 0; i < 6; i++) { // 6 blades
double angle = i * 60; // Blades equally spaced
geom.feature().create("blade" + i, "Block");
geom.feature("blade" + i).set("size", new double[]{bladeLength, bladeThickness, bladeLength});
geom.feature("blade" + i).set("rot", new double[]{0, 0, angle});
geom.feature("blade" + i).set("pos", new double[]{impellerDiameter / 2, 0, position});
}
}
private static void createBaffles(Geometry geom, double diameter, double baffleWidth, double baffleThickness, double baffleHeight) {
for (int i = 0; i < 4; i++) { // 4 baffles
double angle = i * 90; // Baffles equally spaced
geom.feature().create("baffle" + i, "Block");
geom.feature("baffle" + i).set("size", new double[]{baffleWidth, baffleThickness, baffleHeight});
geom.feature("baffle" + i).set("rot", new double[]{0, 0, angle});
geom.feature("baffle" + i).set("pos", new double[]{diameter / 2 - baffleWidth / 2, 0, 0});
}
}
}
Editor is loading...
Leave a Comment