use of cbit.vcell.math.VariableType in project vcell by virtualcell.
the class DataSetControllerImpl method getVtuVarInfos.
public VtuVarInfo[] getVtuVarInfos(MovingBoundarySimFiles movingBoundaryFiles, OutputContext outputContext, VCDataIdentifier vcdataID) throws DataAccessException {
try {
DataIdentifier[] dataIdentifiers = getDataIdentifiers(outputContext, vcdataID);
if (dataIdentifiers == null) {
return null;
}
ArrayList<VtuVarInfo> vtuVarInfos = new ArrayList<VtuVarInfo>();
for (DataIdentifier di : dataIdentifiers) {
String name = di.getName();
String displayName = di.getDisplayName();
if (di.getDomain() != null) {
System.err.println("DataSetControllerImpl.getVtuVarInfos(movingboundary): need to support proper domain names now");
}
String domainName = MovingBoundaryReader.getFakeInsideDomainName();
VariableDomain variableDomain = null;
VariableType variableType = di.getVariableType();
if (variableType.equals(VariableType.VOLUME) || variableType.equals(VariableType.VOLUME_REGION)) {
variableDomain = VariableDomain.VARIABLEDOMAIN_VOLUME;
} else if (variableType.equals(VariableType.MEMBRANE) || variableType.equals(VariableType.MEMBRANE_REGION)) {
variableDomain = VariableDomain.VARIABLEDOMAIN_MEMBRANE;
} else if (variableType.equals(VariableType.POINT_VARIABLE)) {
variableDomain = VariableDomain.VARIABLEDOMAIN_POINT;
} else if (variableType.equals(VariableType.CONTOUR) || variableType.equals(VariableType.CONTOUR_REGION)) {
variableDomain = VariableDomain.VARIABLEDOMAIN_CONTOUR;
} else if (variableType.equals(VariableType.NONSPATIAL)) {
variableDomain = VariableDomain.VARIABLEDOMAIN_UNKNOWN;
} else if (variableType.equals(VariableType.POSTPROCESSING)) {
variableDomain = VariableDomain.VARIABLEDOMAIN_POSTPROCESSING;
} else {
System.err.print("skipping var " + di + ", unsupported data type");
}
String functionExpression = null;
boolean bMeshVariable = false;
if (name.toUpperCase().contains("SIZE")) {
System.err.println("Skipping Moving Boundary variable '" + name + "' because it is a size ... change later");
continue;
}
vtuVarInfos.add(new VtuVarInfo(name, displayName, domainName, variableDomain, functionExpression, DataType.CellData, bMeshVariable));
}
return vtuVarInfos.toArray(new VtuVarInfo[0]);
} catch (Exception e) {
lg.error(e.getMessage(), e);
throw new DataAccessException("failed to retrieve VTK variable list: " + e.getMessage(), e);
}
}
use of cbit.vcell.math.VariableType in project vcell by virtualcell.
the class DataSetControllerImpl method writeFieldFunctionData.
/**
* Insert the method's description here.
* Creation date: (9/21/2006 1:28:12 PM)
* @throws FileNotFoundException
* @throws DataAccessException
*/
public void writeFieldFunctionData(OutputContext outputContext, FieldDataIdentifierSpec[] argFieldDataIDSpecs, boolean[] bResampleFlags, CartesianMesh newMesh, SimResampleInfoProvider simResampleInfoProvider, int simResampleMembraneDataLength, int handleExistingResampleMode) throws FileNotFoundException, DataAccessException, IOException {
if (handleExistingResampleMode != FVSolverStandalone.HESM_KEEP_AND_CONTINUE && handleExistingResampleMode != FVSolverStandalone.HESM_OVERWRITE_AND_CONTINUE && handleExistingResampleMode != FVSolverStandalone.HESM_THROW_EXCEPTION) {
throw new IllegalArgumentException("Unknown mode " + handleExistingResampleMode);
}
if (argFieldDataIDSpecs == null || argFieldDataIDSpecs.length == 0) {
return;
}
HashMap<FieldDataIdentifierSpec, File> uniqueFieldDataIDSpecAndFileH = new HashMap<FieldDataIdentifierSpec, File>();
HashMap<FieldDataIdentifierSpec, Boolean> bFieldDataResample = new HashMap<FieldDataIdentifierSpec, Boolean>();
for (int i = 0; i < argFieldDataIDSpecs.length; i++) {
if (!uniqueFieldDataIDSpecAndFileH.containsKey(argFieldDataIDSpecs[i])) {
File newResampledFieldDataFile = null;
try {
newResampledFieldDataFile = ((SimulationData) getVCData(simResampleInfoProvider)).getFieldDataFile(simResampleInfoProvider, argFieldDataIDSpecs[i].getFieldFuncArgs());
} catch (FileNotFoundException e) {
e.printStackTrace();
// use the original way
newResampledFieldDataFile = new File(getPrimaryUserDir(simResampleInfoProvider.getOwner(), true), SimulationData.createCanonicalResampleFileName(simResampleInfoProvider, argFieldDataIDSpecs[i].getFieldFuncArgs()));
}
if (handleExistingResampleMode == FVSolverStandalone.HESM_THROW_EXCEPTION && newResampledFieldDataFile.exists()) {
throw new RuntimeException("Resample Error: mode not allow overwrite or ignore of " + "existing file\n" + newResampledFieldDataFile.getAbsolutePath());
}
uniqueFieldDataIDSpecAndFileH.put(argFieldDataIDSpecs[i], newResampledFieldDataFile);
bFieldDataResample.put(argFieldDataIDSpecs[i], bResampleFlags[i]);
}
}
try {
Set<Entry<FieldDataIdentifierSpec, File>> resampleSet = uniqueFieldDataIDSpecAndFileH.entrySet();
Iterator<Entry<FieldDataIdentifierSpec, File>> resampleSetIter = resampleSet.iterator();
while (resampleSetIter.hasNext()) {
Entry<FieldDataIdentifierSpec, File> resampleEntry = resampleSetIter.next();
if (handleExistingResampleMode == FVSolverStandalone.HESM_KEEP_AND_CONTINUE && resampleEntry.getValue().exists()) {
continue;
}
FieldDataIdentifierSpec fieldDataIdSpec = resampleEntry.getKey();
boolean bResample = bFieldDataResample.get(fieldDataIdSpec);
CartesianMesh origMesh = getMesh(fieldDataIdSpec.getExternalDataIdentifier());
SimDataBlock simDataBlock = getSimDataBlock(outputContext, fieldDataIdSpec.getExternalDataIdentifier(), fieldDataIdSpec.getFieldFuncArgs().getVariableName(), fieldDataIdSpec.getFieldFuncArgs().getTime().evaluateConstant());
VariableType varType = fieldDataIdSpec.getFieldFuncArgs().getVariableType();
VariableType dataVarType = simDataBlock.getVariableType();
if (!varType.equals(VariableType.UNKNOWN) && !varType.equals(dataVarType)) {
throw new IllegalArgumentException("field function variable type (" + varType.getTypeName() + ") doesn't match real variable type (" + dataVarType.getTypeName() + ")");
}
double[] origData = simDataBlock.getData();
double[] newData = null;
CartesianMesh resampleMesh = newMesh;
if (!bResample) {
if (resampleMesh.getGeometryDimension() != origMesh.getGeometryDimension()) {
throw new DataAccessException("Field data " + fieldDataIdSpec.getFieldFuncArgs().getFieldName() + " (" + origMesh.getGeometryDimension() + "D) should have same dimension as simulation mesh (" + resampleMesh.getGeometryDimension() + "D) because it is not resampled to simulation mesh (e.g. Point Spread Function)");
}
newData = origData;
resampleMesh = origMesh;
} else {
if (CartesianMesh.isSpatialDomainSame(origMesh, resampleMesh)) {
newData = origData;
if (simDataBlock.getVariableType().equals(VariableType.MEMBRANE)) {
if (origData.length != simResampleMembraneDataLength) {
throw new Exception("FieldData variable \"" + fieldDataIdSpec.getFieldFuncArgs().getVariableName() + "\" (" + simDataBlock.getVariableType().getTypeName() + ") " + "resampling failed: Membrane Data lengths must be equal");
}
} else if (!simDataBlock.getVariableType().equals(VariableType.VOLUME)) {
throw new Exception("FieldData variable \"" + fieldDataIdSpec.getFieldFuncArgs().getVariableName() + "\" (" + simDataBlock.getVariableType().getTypeName() + ") " + "resampling failed: Only Volume and Membrane variable types are supported");
}
} else {
if (!simDataBlock.getVariableType().compareEqual(VariableType.VOLUME)) {
throw new Exception("FieldData variable \"" + fieldDataIdSpec.getFieldFuncArgs().getVariableName() + "\" (" + simDataBlock.getVariableType().getTypeName() + ") " + "resampling failed: Only VOLUME FieldData variable type allowed when\n" + "FieldData spatial domain does not match Simulation spatial domain.\n" + "Check dimension, xsize, ysize, zsize, origin and extent are equal.");
}
if (origMesh.getSizeY() == 1 && origMesh.getSizeZ() == 1) {
newData = MathTestingUtilities.resample1DSpatialSimple(origData, origMesh, resampleMesh);
} else if (origMesh.getSizeZ() == 1) {
newData = MathTestingUtilities.resample2DSpatialSimple(origData, origMesh, resampleMesh);
} else {
newData = MathTestingUtilities.resample3DSpatialSimple(origData, origMesh, resampleMesh);
}
}
}
DataSet.writeNew(resampleEntry.getValue(), new String[] { fieldDataIdSpec.getFieldFuncArgs().getVariableName() }, new VariableType[] { simDataBlock.getVariableType() }, new ISize(resampleMesh.getSizeX(), resampleMesh.getSizeY(), resampleMesh.getSizeZ()), new double[][] { newData });
}
} catch (Exception ex) {
ex.printStackTrace(System.out);
throw new DataAccessException(ex.getMessage());
}
}
use of cbit.vcell.math.VariableType in project vcell by virtualcell.
the class DataSetControllerImpl method getDataIdentifiers.
/**
* This method was created by a SmartGuide.
* @return java.lang.String[]
*/
public DataIdentifier[] getDataIdentifiers(OutputContext outputContext, VCDataIdentifier vcdID) throws DataAccessException, IOException, FileNotFoundException {
if (lg.isTraceEnabled())
lg.trace("DataSetControllerImpl.getDataIdentifiers(" + vcdID.getID() + ")");
VCData simData = getVCData(vcdID);
// filter names with _INSIDE and _OUTSIDE
DataIdentifier[] dataIdentifiersIncludingOutsideAndInside = simData.getVarAndFunctionDataIdentifiers(outputContext);
Vector<DataIdentifier> v = new Vector<DataIdentifier>();
for (int i = 0; i < dataIdentifiersIncludingOutsideAndInside.length; i++) {
DataIdentifier di = dataIdentifiersIncludingOutsideAndInside[i];
if (!di.getName().endsWith(InsideVariable.INSIDE_VARIABLE_SUFFIX) && !di.getName().endsWith(OutsideVariable.OUTSIDE_VARIABLE_SUFFIX)) {
if (di.getVariableType() == null || di.getVariableType().equals(VariableType.UNKNOWN)) {
if (di.isFunction()) {
AnnotatedFunction f = getFunction(outputContext, vcdID, di.getName());
VariableType varType = getVariableTypeForFieldFunction(outputContext, vcdID, f);
di = new DataIdentifier(di.getName(), varType, di.getDomain(), di.isFunction(), f.getDisplayName());
}
}
v.addElement(di);
}
}
DataIdentifier[] ids = new DataIdentifier[v.size()];
v.copyInto(ids);
return ids;
}
use of cbit.vcell.math.VariableType in project vcell by virtualcell.
the class DataSetControllerImpl method evaluateFunction.
/**
* Insert the method's description here.
* Creation date: (10/13/00 9:13:52 AM)
* @return cbit.vcell.simdata.SimDataBlock
* @param user cbit.vcell.server.User
* @param simResults cbit.vcell.simdata.SimResults
* @param function cbit.vcell.math.Function
* @param time double
*/
private SimDataBlock evaluateFunction(OutputContext outputContext, final VCDataIdentifier vcdID, VCData simData, AnnotatedFunction function, double time) throws ExpressionException, DataAccessException, IOException, MathException {
Expression exp = new Expression(function.getExpression());
exp = SolverUtilities.substituteSizeAndNormalFunctions(exp, function.getFunctionType().getVariableDomain());
exp.bindExpression(simData);
exp = fieldFunctionSubstitution(outputContext, vcdID, exp);
//
// get Dependent datasets
//
// variables are indexed by a number, t=0, x=1, y=2, z=3, a(i) = 4+i where a's are other variables
// these variables
//
CartesianMesh mesh = null;
if (function.getFunctionType().equals(VariableType.POSTPROCESSING)) {
mesh = ((SimulationData) simData).getPostProcessingMesh(function.getName(), outputContext);
}
if (mesh == null) {
mesh = getMesh(vcdID);
}
String[] dependentIDs = exp.getSymbols();
Vector<SimDataHolder> dataSetList = new Vector<SimDataHolder>();
Vector<DataSetIdentifier> dependencyList = new Vector<DataSetIdentifier>();
int varIndex = TXYZ_OFFSET;
int dataLength = 0;
long lastModified = 0;
VariableType variableType = function.getFunctionType();
if (variableType.equals(VariableType.VOLUME) || variableType.equals(VariableType.POSTPROCESSING)) {
dataLength = mesh.getNumVolumeElements();
} else if (variableType.equals(VariableType.MEMBRANE)) {
dataLength = mesh.getNumMembraneElements();
} else if (variableType.equals(VariableType.VOLUME_REGION)) {
dataLength = mesh.getNumVolumeRegions();
} else if (variableType.equals(VariableType.MEMBRANE_REGION)) {
dataLength = mesh.getNumMembraneRegions();
}
VariableType computedVariableType = null;
int computedDataLength = 0;
for (int i = 0; dependentIDs != null && i < dependentIDs.length; i++) {
SymbolTableEntry ste = exp.getSymbolBinding(dependentIDs[i]);
if (ste instanceof DataSetIdentifier) {
DataSetIdentifier dsi = (DataSetIdentifier) ste;
dependencyList.addElement(dsi);
dsi.setIndex(varIndex++);
if (dsi.getName().endsWith(OutsideVariable.OUTSIDE_VARIABLE_SUFFIX) || dsi.getName().endsWith(InsideVariable.INSIDE_VARIABLE_SUFFIX)) {
String volVarName = dsi.getName().substring(0, dsi.getName().lastIndexOf("_"));
SimDataBlock simDataBlock = getSimDataBlock(outputContext, vcdID, volVarName, time);
lastModified = simDataBlock.getPDEDataInfo().getTimeStamp();
//
if (simDataBlock.getVariableType().equals(VariableType.VOLUME)) {
computedVariableType = VariableType.MEMBRANE;
computedDataLength = mesh.getMembraneElements().length;
//
// if inside/outside volume element dependent, then can only be a membrane type
//
} else if (simDataBlock.getVariableType().equals(VariableType.VOLUME_REGION) && variableType == null) {
computedVariableType = VariableType.MEMBRANE_REGION;
computedDataLength = mesh.getNumMembraneRegions();
}
dataSetList.addElement(simDataBlock);
} else {
SimDataBlock simDataBlock = getSimDataBlock(outputContext, vcdID, dsi.getName(), time);
if (variableType == null || simDataBlock.getVariableType().isExpansionOf(variableType)) {
lastModified = simDataBlock.getPDEDataInfo().getTimeStamp();
computedDataLength = simDataBlock.getData().length;
computedVariableType = simDataBlock.getVariableType();
}
dataSetList.addElement(simDataBlock);
}
} else if (ste instanceof ReservedVariable) {
ReservedVariable rv = (ReservedVariable) ste;
if (rv.isTIME()) {
rv.setIndex(0);
} else if (rv.isX()) {
rv.setIndex(1);
} else if (rv.isY()) {
rv.setIndex(2);
} else if (rv.isZ()) {
rv.setIndex(3);
}
} else if (ste instanceof FieldDataParameterVariable) {
// Field Data
((FieldDataParameterVariable) ste).setIndex(varIndex++);
final double[] steResampledFieldData = ((FieldDataParameterVariable) ste).getResampledFieldData();
final VariableType newVariableType = (steResampledFieldData.length == mesh.getNumVolumeElements() ? VariableType.VOLUME : (steResampledFieldData.length == mesh.getNumMembraneElements() ? VariableType.MEMBRANE : null));
if (newVariableType == null) {
throw new DataAccessException("Couldn't determine VariableType for FieldData");
}
if (variableType != null && !variableType.equals(newVariableType)) {
throw new DataAccessException("Incompatible VariableType for FieldData");
}
SimDataHolder newSimDataHolder = new SimDataHolder() {
public double[] getData() {
return steResampledFieldData;
}
public VariableType getVariableType() {
return newVariableType;
}
};
dataSetList.addElement(newSimDataHolder);
dependencyList.add(new DataSetIdentifier(ste.getName(), newVariableType, ((FieldDataParameterVariable) ste).getDomain()));
if (variableType == null) {
computedVariableType = newVariableType;
computedDataLength = newSimDataHolder.getData().length;
}
}
}
if (computedDataLength <= 0) {
if (lg.isWarnEnabled())
lg.warn("dependencies for function '" + function + "' not found, assuming datalength of volume");
computedDataLength = mesh.getDataLength(VariableType.VOLUME);
computedVariableType = VariableType.VOLUME;
// try {
// computedDataLength = mesh.getDataLength(VariableType.VOLUME);
// computedVariableType = VariableType.VOLUME;
// }catch (MathException e){
// lg.error(e.getMessage(), e);
// throw new RuntimeException("MathException, cannot determine domain for function '"+function+"'");
// }catch (FileNotFoundException e){
// lg.error(e.getMessage(), e);
// throw new RuntimeException("Mesh not found, cannot determine domain for function '"+function+"'");
// }
}
if (!variableType.equals(computedVariableType)) {
System.err.println("function [" + function.getName() + "] variable type [" + variableType.getTypeName() + "] is not equal to computed variable type [" + computedVariableType.getTypeName() + "].");
}
if (dataLength == 0) {
dataLength = computedDataLength;
variableType = computedVariableType;
}
//
// Gradient Info for special processing
//
boolean isGrad = hasGradient(exp);
if (isGrad && !variableType.equals(VariableType.VOLUME)) {
throw new DataAccessException("Gradient function is not implemented for datatype " + variableType.getTypeName());
}
double[] args = new double[varIndex + (isGrad ? 12 * varIndex : 0)];
double[] data = new double[dataLength];
// time
args[0] = time;
// x
args[1] = 0.0;
// y
args[2] = 0.0;
// z
args[3] = 0.0;
String dividedByZeroMsg = "";
for (int i = 0; i < dataLength; i++) {
//
if (variableType.equals(VariableType.VOLUME) || variableType.equals(VariableType.POSTPROCESSING)) {
Coordinate coord = mesh.getCoordinateFromVolumeIndex(i);
args[1] = coord.getX();
args[2] = coord.getY();
args[3] = coord.getZ();
for (int j = 0; j < varIndex - TXYZ_OFFSET; j++) {
SimDataHolder simDataHolder = dataSetList.elementAt(j);
if (simDataHolder.getVariableType().equals(VariableType.VOLUME) || simDataHolder.getVariableType().equals(VariableType.POSTPROCESSING)) {
args[TXYZ_OFFSET + j] = simDataHolder.getData()[i];
} else if (simDataHolder.getVariableType().equals(VariableType.VOLUME_REGION)) {
int volumeIndex = mesh.getVolumeRegionIndex(i);
args[TXYZ_OFFSET + j] = simDataHolder.getData()[volumeIndex];
} else if (simDataHolder.getVariableType().equals(VariableType.POINT_VARIABLE)) {
args[TXYZ_OFFSET + j] = simDataHolder.getData()[0];
}
}
if (isGrad) {
getSpatialNeighborData(mesh, i, varIndex, time, dataSetList, args);
}
} else if (variableType.equals(VariableType.VOLUME_REGION)) {
for (int j = 0; j < varIndex - TXYZ_OFFSET; j++) {
SimDataHolder simDataHolder = dataSetList.elementAt(j);
if (simDataHolder.getVariableType().equals(VariableType.VOLUME_REGION)) {
args[TXYZ_OFFSET + j] = simDataHolder.getData()[i];
} else if (simDataHolder.getVariableType().equals(VariableType.POINT_VARIABLE)) {
args[TXYZ_OFFSET + j] = simDataHolder.getData()[0];
}
}
} else if (variableType.equals(VariableType.MEMBRANE)) {
Coordinate coord = mesh.getCoordinateFromMembraneIndex(i);
args[1] = coord.getX();
args[2] = coord.getY();
args[3] = coord.getZ();
for (int j = 0; j < varIndex - TXYZ_OFFSET; j++) {
DataSetIdentifier dsi = (DataSetIdentifier) dependencyList.elementAt(j);
SimDataHolder simDataHolder = dataSetList.elementAt(j);
if (simDataHolder.getVariableType().equals(VariableType.VOLUME)) {
if (mesh.isChomboMesh()) {
String varName = dsi.getName();
if (dsi.getName().endsWith(InsideVariable.INSIDE_VARIABLE_SUFFIX)) {
varName = varName.substring(0, varName.lastIndexOf(InsideVariable.INSIDE_VARIABLE_SUFFIX));
} else if (dsi.getName().endsWith(OutsideVariable.OUTSIDE_VARIABLE_SUFFIX)) {
varName = varName.substring(0, varName.lastIndexOf(OutsideVariable.OUTSIDE_VARIABLE_SUFFIX));
}
args[TXYZ_OFFSET + j] = getChomboExtrapolatedValues(vcdID, varName, time).getData()[i];
} else {
if (dsi.getName().endsWith(InsideVariable.INSIDE_VARIABLE_SUFFIX)) {
args[TXYZ_OFFSET + j] = interpolateVolDataValToMemb(mesh, i, simDataHolder, true, false);
} else if (dsi.getName().endsWith(OutsideVariable.OUTSIDE_VARIABLE_SUFFIX)) {
args[TXYZ_OFFSET + j] = interpolateVolDataValToMemb(mesh, i, simDataHolder, false, false);
} else {
args[TXYZ_OFFSET + j] = interpolateVolDataValToMemb(mesh, dsi.getDomain(), i, simDataHolder, false);
}
}
} else if (simDataHolder.getVariableType().equals(VariableType.VOLUME_REGION)) {
if (dsi.getName().endsWith(InsideVariable.INSIDE_VARIABLE_SUFFIX)) {
args[TXYZ_OFFSET + j] = interpolateVolDataValToMemb(mesh, i, simDataHolder, true, true);
} else if (dsi.getName().endsWith(OutsideVariable.OUTSIDE_VARIABLE_SUFFIX)) {
args[TXYZ_OFFSET + j] = interpolateVolDataValToMemb(mesh, i, simDataHolder, false, true);
} else {
args[TXYZ_OFFSET + j] = interpolateVolDataValToMemb(mesh, dsi.getDomain(), i, simDataHolder, true);
}
} else if (simDataHolder.getVariableType().equals(VariableType.MEMBRANE)) {
args[TXYZ_OFFSET + j] = simDataHolder.getData()[i];
} else if (simDataHolder.getVariableType().equals(VariableType.MEMBRANE_REGION)) {
int memRegionIndex = mesh.getMembraneRegionIndex(i);
args[TXYZ_OFFSET + j] = simDataHolder.getData()[memRegionIndex];
} else if (simDataHolder.getVariableType().equals(VariableType.POINT_VARIABLE)) {
args[TXYZ_OFFSET + j] = simDataHolder.getData()[0];
}
}
} else if (variableType.equals(VariableType.MEMBRANE_REGION)) {
for (int j = 0; j < varIndex - TXYZ_OFFSET; j++) {
DataSetIdentifier dsi = (DataSetIdentifier) dependencyList.elementAt(j);
SimDataHolder simDataHolder = dataSetList.elementAt(j);
if (simDataHolder.getVariableType().equals(VariableType.VOLUME_REGION) && dsi.getName().endsWith(InsideVariable.INSIDE_VARIABLE_SUFFIX)) {
//
for (int k = 0; k < mesh.getMembraneElements().length; k++) {
if (mesh.getMembraneRegionIndex(k) == i) {
args[TXYZ_OFFSET + j] = interpolateVolDataValToMemb(mesh, i, simDataHolder, true, true);
break;
}
}
} else if (simDataHolder.getVariableType().equals(VariableType.VOLUME_REGION) && dsi.getName().endsWith(OutsideVariable.OUTSIDE_VARIABLE_SUFFIX)) {
//
for (int k = 0; k < mesh.getMembraneElements().length; k++) {
if (mesh.getMembraneRegionIndex(k) == i) {
args[TXYZ_OFFSET + j] = interpolateVolDataValToMemb(mesh, i, simDataHolder, false, true);
break;
}
}
} else if (simDataHolder.getVariableType().equals(VariableType.MEMBRANE)) {
args[TXYZ_OFFSET + j] = simDataHolder.getData()[i];
} else if (simDataHolder.getVariableType().equals(VariableType.MEMBRANE_REGION)) {
int memRegionIndex = i;
args[TXYZ_OFFSET + j] = simDataHolder.getData()[memRegionIndex];
} else if (simDataHolder.getVariableType().equals(VariableType.POINT_VARIABLE)) {
args[TXYZ_OFFSET + j] = simDataHolder.getData()[0];
}
}
}
try {
data[i] = exp.evaluateVector(args);
// if(time ==0){
// System.out.print("non-multi evalFunction ");
// for (int m = 0; m < args.length; m++) {
// System.out.print(args[m]);
// }
// System.out.println(" "+(args[args.length-2]/args[args.length-1]));
// }
} catch (DivideByZeroException e) {
dividedByZeroMsg = e.getMessage();
data[i] = Double.POSITIVE_INFINITY;
}
}
if (dividedByZeroMsg.length() != 0) {
System.out.println("DataSetControllerImpl.evaluateFunction(): DivideByZero " + dividedByZeroMsg);
}
PDEDataInfo pdeDataInfo = new PDEDataInfo(vcdID.getOwner(), vcdID.getID(), function.getName(), time, lastModified);
return new SimDataBlock(pdeDataInfo, data, variableType);
}
use of cbit.vcell.math.VariableType in project vcell by virtualcell.
the class SimulationData method getChomboExtrapolatedValues.
public synchronized SimDataBlock getChomboExtrapolatedValues(String varName, double time) throws DataAccessException, IOException {
refreshLogFile();
File pdeFile = getPDEDataFile(time);
if (pdeFile == null) {
return null;
}
DataSet dataSet = new DataSet();
File zipFile = null;
try {
zipFile = getPDEDataZipFile(time);
} catch (DataAccessException ex) {
zipFile = null;
}
try {
dataSet.read(pdeFile, zipFile);
} catch (IOException ex) {
ex.printStackTrace();
throw new DataAccessException("data at time=" + time + " read error", ex);
}
long lastModified = getLastModified(pdeFile, zipFile);
DataSetIdentifier dsi = getDataSetIdentifier(varName);
if (dsi == null) {
throw new DataAccessException("data not found for variable " + varName);
}
final String varNameInDataSet = dsi.getQualifiedName();
double[] data = DataSet.readChomboExtrapolatedValues(varNameInDataSet, pdeFile, zipFile);
VariableType variableType = VariableType.MEMBRANE;
PDEDataInfo pdeDataInfo = new PDEDataInfo(vcDataId.getOwner(), vcDataId.getID(), varName, time, lastModified);
return data == null ? null : new SimDataBlock(pdeDataInfo, data, variableType);
}
Aggregations