Search in sources :

Example 1 with ChomboMeshSpec

use of org.vcell.chombo.ChomboMeshValidator.ChomboMeshSpec in project vcell by virtualcell.

the class ChomboMeshSpecificationPanel method updateDisplay.

private void updateDisplay(boolean bSolverChanged) throws ChomboGeometryException, ChomboInvalidGeometryException {
    if (!simulation.getSolverTaskDescription().getSolverDescription().isChomboSolver()) {
        setVisible(false);
        return;
    }
    Geometry geometry = simulation.getMathDescription().getGeometry();
    Extent extent = geometry.getExtent();
    int dimension = geometry.getDimension();
    switch(dimension) {
        case 0:
            setVisible(false);
            break;
        case 1:
            getGeometrySizeTextField().setText("" + extent.getX());
            NyLabel.setVisible(false);
            NyComboBox.setVisible(false);
            NzLabel.setVisible(false);
            NzComboBox.setVisible(false);
            break;
        case 2:
            getGeometrySizeTextField().setText("(" + extent.getX() + ", " + extent.getY() + ")");
            NzLabel.setVisible(false);
            NzComboBox.setVisible(false);
            break;
        case 3:
            getGeometrySizeTextField().setText("(" + extent.getX() + ", " + extent.getY() + ", " + extent.getZ() + ")");
            break;
    }
    String error;
    ChomboMeshRecommendation meshRecommendation = new ChomboMeshValidator(geometry.getDimension(), geometry.getExtent(), simulation.getSolverTaskDescription().getChomboSolverSpec().getBlockFactor()).computeMeshSpecs();
    if (meshRecommendation.validate()) {
        // remove ActionListener, here we only want to set values
        removeComboBoxListener();
        HComboBox.removeAll();
        NxComboBox.removeAll();
        NyComboBox.removeAll();
        NzComboBox.removeAll();
        for (ChomboMeshSpec meshSpec : meshRecommendation.validMeshSpecList) {
            HComboBox.addItem((float) meshSpec.H);
            NxComboBox.addItem(meshSpec.Nx[0]);
            if (geometry.getDimension() > 1) {
                NyComboBox.addItem(meshSpec.Nx[1]);
                if (geometry.getDimension() == 3) {
                    NzComboBox.addItem(meshSpec.Nx[2]);
                }
            }
        }
        addComboBoxListener();
        if (bSolverChanged) {
            NxComboBox.setSelectedIndex(0);
        } else {
            ISize samplingSize = simulation.getMeshSpecification().getSamplingSize();
            NxComboBox.setSelectedItem(samplingSize.getX());
            // double check if existing mesh size is an option in drop down
            Integer selectedNx = (Integer) NxComboBox.getSelectedItem();
            Integer selectedNy = geometry.getDimension() > 1 ? (Integer) NyComboBox.getSelectedItem() : 1;
            Integer selectedNz = geometry.getDimension() > 2 ? (Integer) NzComboBox.getSelectedItem() : 1;
            boolean bMatchFound = selectedNx == samplingSize.getX() && (dimension < 2 || selectedNy == samplingSize.getY()) && (dimension < 3 || selectedNz == samplingSize.getZ());
            if (!bMatchFound) {
                NxComboBox.setSelectedIndex(0);
                throw new ChomboGeometryException(ChomboMeshValidator.ERROR_MESSAGE_INCOMPATIBLE_MESH_SIZE);
            }
        }
    } else {
        throw new ChomboInvalidGeometryException(meshRecommendation);
    }
}
Also used : Geometry(cbit.vcell.geometry.Geometry) ChomboMeshRecommendation(org.vcell.chombo.ChomboMeshValidator.ChomboMeshRecommendation) ChomboMeshValidator(org.vcell.chombo.ChomboMeshValidator) ChomboGeometryException(cbit.vcell.geometry.ChomboGeometryException) Extent(org.vcell.util.Extent) ISize(org.vcell.util.ISize) ChomboMeshSpec(org.vcell.chombo.ChomboMeshValidator.ChomboMeshSpec) ChomboInvalidGeometryException(cbit.vcell.geometry.ChomboInvalidGeometryException)

Aggregations

ChomboGeometryException (cbit.vcell.geometry.ChomboGeometryException)1 ChomboInvalidGeometryException (cbit.vcell.geometry.ChomboInvalidGeometryException)1 Geometry (cbit.vcell.geometry.Geometry)1 ChomboMeshValidator (org.vcell.chombo.ChomboMeshValidator)1 ChomboMeshRecommendation (org.vcell.chombo.ChomboMeshValidator.ChomboMeshRecommendation)1 ChomboMeshSpec (org.vcell.chombo.ChomboMeshValidator.ChomboMeshSpec)1 Extent (org.vcell.util.Extent)1 ISize (org.vcell.util.ISize)1