public void test_RunSteadyStateCalculation_Newton() { HashMap<String, Object> problemParameters = new HashMap<String, Object>(); problemParameters.put("JacobianRequested", new Boolean(true)); problemParameters.put("StabilityAnalysisRequested", new Boolean(true)); // iteration limit // tolerance HashMap<String, Object> methodParameters = new HashMap<String, Object>(); methodParameters.put("Resolution", new Double(1e-9)); methodParameters.put("Derivation Factor", new Double(1e-3)); methodParameters.put("Use Newton", new Boolean(true)); methodParameters.put("Use Integration", new Boolean(false)); methodParameters.put("Use Back Integration", new Boolean(false)); methodParameters.put("Accept Negative Concentrations", new Boolean(false)); methodParameters.put("Iteration Limit", new Integer(50)); // objective function CSteadyStateTask steadyStateTask = runSteadyStateCalculation(mDataModel, problemParameters, methodParameters); assertFalse(steadyStateTask == null); assertTrue(steadyStateTask.getResult() == CSteadyStateMethod.foundEquilibrium); CEigen eigenvalues = steadyStateTask.getEigenValues(); assertFalse(eigenvalues == null); assertTrue(eigenvalues.getMaxrealpart() <= 0.0); assertTrue(eigenvalues.getNnegreal() + eigenvalues.getNreal() == eigenvalues.getR().size()); }
public static CSteadyStateTask runSteadyStateCalculation( CCopasiDataModel dataModel, HashMap<String, Object> problemParameters, HashMap<String, Object> methodParameters) { CSteadyStateTask steadyStateTask = (CSteadyStateTask) dataModel.addTask(CCopasiTask.steadyState); if (steadyStateTask == null) return null; CSteadyStateProblem steadyStateProblem = (CSteadyStateProblem) steadyStateTask.getProblem(); if (steadyStateProblem == null) return null; Set<String> keySet = problemParameters.keySet(); for (Iterator<String> it = keySet.iterator(); it.hasNext(); ) { String key = (String) it.next(); CCopasiParameter param = steadyStateProblem.getParameter(key); if (param == null) { return null; } Object o = problemParameters.get(key); if (o instanceof Double) { param.setDblValue(((Double) o).doubleValue()); } else if (o instanceof Integer) { param.setIntValue(((Integer) o).intValue()); } else if (o instanceof Boolean) { param.setBoolValue(((Boolean) o).booleanValue()); } else if (o instanceof String) { param.setStringValue(((String) o)); } else { System.err.println("Error. Unknown parameter type."); } } CNewtonMethod newtonMethod = (CNewtonMethod) steadyStateTask.getMethod(); if (newtonMethod == null) { return null; } keySet = methodParameters.keySet(); for (Iterator<String> it = keySet.iterator(); it.hasNext(); ) { String key = (String) it.next(); CCopasiParameter param = newtonMethod.getParameter(key); if (param == null) { return null; } Object o = methodParameters.get(key); if (o instanceof Double) { param.setDblValue(((Double) o).doubleValue()); } else if (o instanceof Integer) { param.setIntValue(((Integer) o).intValue()); } else if (o instanceof Boolean) { param.setBoolValue(((Boolean) o).booleanValue()); } else if (o instanceof String) { param.setStringValue(((String) o)); } else { System.err.println("Error. Unknown parameter type."); } } boolean result = false; try { result = steadyStateTask.process(true); } catch (Exception e) { System.err.println("ERROR: " + e.getMessage()); } if (!result) { return null; } return steadyStateTask; }