Untitled

 avatar
unknown
plain_text
5 months ago
4.1 kB
3
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