QString DrNumWriter::boundaryCode(vtkIdType id_cell, int i) { EG_VTKDCC(vtkIntArray, cell_code, m_Grid, "cell_code"); QString bcode = "0"; vtkIdType id_neigh = m_Part.c2cGG(id_cell, i); if (id_neigh != -1) { if (m_CellToCartPatch[id_neigh] == -1) { if (isSurface(id_neigh, m_Grid)) { BoundaryCondition bc = GuiMainWindow::pointer()->getBC(cell_code->GetValue(id_neigh)); if (bc.getName() != "unknown") { bcode = bc.getType(); } } } } return bcode; }
void SolutionbasedShapeFunction :: setBoundaryConditionOnDof(Dof *d, double value) { int bcID = d->giveBcId(); if ( bcID == 0 ) { DynamicInputRecord ir; ir.setRecordKeywordField("boundarycondition", 1); ir.setField(1, _IFT_GeneralBoundaryCondition_timeFunct); ir.setField(value, _IFT_BoundaryCondition_PrescribedValue); bcID = d->giveDofManager()->giveDomain()->giveNumberOfBoundaryConditions() + 1; GeneralBoundaryCondition *myBC; myBC = classFactory.createBoundaryCondition( "boundarycondition", bcID, d->giveDofManager()->giveDomain() ); myBC->initializeFrom(& ir); d->giveDofManager()->giveDomain()->setBoundaryCondition(bcID, myBC); d->setBcId(bcID); } else { BoundaryCondition *bc = static_cast< BoundaryCondition * >( d->giveDofManager()->giveDomain()->giveBc(bcID) ); bc->setPrescribedValue(value); } }
void writeSpatialSBML() { /* // SBMLNamespaces of SBML Level 3 Version 1 with Spatial Version 1 SBMLNamespaces sbmlns(3,1,"spatial",1); // SpatialPkgNamespaces spatialns(3,1,1); // add Required Elements package namespace sbmlns.addPkgNamespace("req", 1); */ // SBMLNamespaces of SBML Level 3 Version 1 with 'req' Version 1 // then add 'spatial' package namespace. RequiredElementsPkgNamespaces sbmlns(3,1,1); sbmlns.addPkgNamespace("spatial",1); // create the L3V1 document with spatial package SBMLDocument document(&sbmlns); // set 'required' attribute on document for 'spatial' and 'req' packages to 'T'?? SBMLDocumentPlugin* dplugin; dplugin = static_cast<SBMLDocumentPlugin*>(document.getPlugin("spatial")); dplugin->setRequired(true); dplugin = static_cast<SBMLDocumentPlugin*>(document.getPlugin("req")); dplugin->setRequired(true); // create the Model Model *model = document.createModel(); model-> setId("trial_spatial"); model-> setName("trial_spatial"); // create the Compartments Compartment* compartment = model->createCompartment(); compartment->setId("cytosol"); compartment->setConstant(true); // create the Species Species* species1 = model->createSpecies(); species1->setId("ATPc"); species1->setCompartment("cytosol"); species1->setInitialConcentration(1.0); species1->setHasOnlySubstanceUnits(false); species1->setBoundaryCondition(false); species1->setConstant(false); // spatial package extension to species. // required elements package extention to parameter RequiredElementsSBasePlugin* reqplugin; reqplugin = static_cast<RequiredElementsSBasePlugin*>(species1->getPlugin("req")); reqplugin->setMathOverridden("spatial"); reqplugin->setCoreHasAlternateMath(true); SpatialSpeciesRxnPlugin* srplugin; srplugin = static_cast<SpatialSpeciesRxnPlugin*>(species1->getPlugin("spatial")); srplugin->setIsSpatial(true); // add parameter for diff coeff of species1 Parameter* paramSp = model->createParameter(); paramSp->setId(species1->getId()+"_dc"); paramSp->setValue(1.0); // required elements package extention to parameter reqplugin = static_cast<RequiredElementsSBasePlugin*>(paramSp->getPlugin("req")); reqplugin->setMathOverridden("spatial"); reqplugin->setCoreHasAlternateMath(true); // spatial package extension to parameter. SpatialParameterPlugin* pplugin; pplugin = static_cast<SpatialParameterPlugin*>(paramSp->getPlugin("spatial")); DiffusionCoefficient* diffCoeff = pplugin->getDiffusionCoefficient(); diffCoeff->setVariable(species1->getId()); diffCoeff->setCoordinateIndex(0); // add parameter for adv coeff of species1 paramSp = model->createParameter(); paramSp->setId(species1->getId()+"_ac"); paramSp->setValue(1.5); // required elements package extention to parameter reqplugin = static_cast<RequiredElementsSBasePlugin*>(paramSp->getPlugin("req")); reqplugin->setMathOverridden("spatial"); reqplugin->setCoreHasAlternateMath(true); // spatial package extension to parameter. pplugin = static_cast<SpatialParameterPlugin*>(paramSp->getPlugin("spatial")); AdvectionCoefficient* advCoeff = pplugin->getAdvectionCoefficient(); advCoeff->setVariable(species1->getId()); advCoeff->setCoordinateIndex(0); // add parameter for boundary condition of species1 paramSp = model->createParameter(); paramSp->setId(species1->getId()+"_bc"); paramSp->setValue(2.0); // required elements package extention to parameter reqplugin = static_cast<RequiredElementsSBasePlugin*>(paramSp->getPlugin("req")); reqplugin->setMathOverridden("spatial"); reqplugin->setCoreHasAlternateMath(true); // spatial package extension to parameter. pplugin = static_cast<SpatialParameterPlugin*>(paramSp->getPlugin("spatial")); BoundaryCondition* boundCon = pplugin->getBoundaryCondition(); boundCon->setVariable(species1->getId()); boundCon->setType("value"); boundCon->setCoordinateBoundary("Xmin"); Species* species2 = model->createSpecies(); species2->setId("ADPc"); species2->setCompartment("cytosol"); species2->setInitialConcentration(1); species2->setHasOnlySubstanceUnits(false); species2->setBoundaryCondition(false); species2->setConstant(false); srplugin = static_cast<SpatialSpeciesRxnPlugin*>(species2->getPlugin("spatial")); srplugin->setIsSpatial(true); /* // create a parameter Parameter* param = model->createParameter(); param->setId("k_1"); param->setValue(0.24); param->setConstant(true); // create an assignment rule AssignmentRule* assignRule = model->createAssignmentRule(); assignRule->setVariable(species1->getId()); assignRule->setFormula("species2+k_1"); */ /* reqplugin = static_cast<RequiredElementsSBasePlugin*>(assignRule->getPlugin("req")); reqplugin->setMathOverridden("spatial"); reqplugin->setCoreHasAlternateMath(false); */ Reaction* reaction = model->createReaction(); reaction->setId("rxn1"); reaction->setReversible(false); reaction->setFast(false); reaction->setCompartment("cytosol"); srplugin = static_cast<SpatialSpeciesRxnPlugin*>(reaction->getPlugin("spatial")); srplugin->setIsLocal(true); // // Get a SpatialModelPlugin object plugged in the model object. // // The type of the returned value of SBase::getPlugin() function is // SBasePlugin*, and thus the value needs to be casted for the // corresponding derived class. // SpatialModelPlugin* mplugin; mplugin = static_cast<SpatialModelPlugin*>(model->getPlugin("spatial")); // // Creates a geometry object via SpatialModelPlugin object. // Geometry* geometry = mplugin->getGeometry(); geometry->setCoordinateSystem("XYZ"); CoordinateComponent* coordX = geometry->createCoordinateComponent(); coordX->setSpatialId("coordComp1"); coordX->setComponentType("cartesian"); coordX->setSbmlUnit("umeter"); coordX->setIndex(1); BoundaryMin* minX = coordX->createBoundaryMin(); minX->setSpatialId("Xmin"); minX->setValue(0.0); BoundaryMax* maxX = coordX->createBoundaryMax(); maxX->setSpatialId("Xmax"); maxX->setValue(10.0); Parameter* paramX = model->createParameter(); paramX->setId("x"); paramX->setValue(8.0); // required elements package extention to parameter // RequiredElementsSBasePlugin* reqplugin; reqplugin = static_cast<RequiredElementsSBasePlugin*>(paramX->getPlugin("req")); reqplugin->setMathOverridden("spatial"); reqplugin->setCoreHasAlternateMath(true); // spatial package extension to parameter. // SpatialParameterPlugin* pplugin; pplugin = static_cast<SpatialParameterPlugin*>(paramX->getPlugin("spatial")); SpatialSymbolReference* spSymRef = pplugin->getSpatialSymbolReference(); spSymRef->setSpatialId(coordX->getSpatialId()); spSymRef->setType(coordX->getElementName()); DomainType* domainType = geometry->createDomainType(); domainType->setSpatialId("dtype1"); domainType->setSpatialDimensions(3); // Spatial package extension to compartment (mapping compartment with domainType) // required elements package extention to compartment reqplugin = static_cast<RequiredElementsSBasePlugin*>(compartment->getPlugin("req")); reqplugin->setMathOverridden("spatial"); reqplugin->setCoreHasAlternateMath(true); SpatialCompartmentPlugin* cplugin; cplugin = static_cast<SpatialCompartmentPlugin*>(compartment->getPlugin("spatial")); CompartmentMapping* compMapping = cplugin->getCompartmentMapping(); compMapping->setSpatialId("compMap1"); compMapping->setCompartment(compartment->getId()); compMapping->setDomainType(domainType->getSpatialId()); compMapping->setUnitSize(1.0); Domain* domain = geometry->createDomain(); domain->setSpatialId("domain1"); domain->setDomainType("dtype1"); domain->setImplicit(false); domain->setShapeId("circle"); InteriorPoint* internalPt1 = domain->createInteriorPoint(); internalPt1->setCoord1(1.0); domain = geometry->createDomain(); domain->setSpatialId("domain2"); domain->setDomainType("dtype1"); domain->setImplicit(false); domain->setShapeId("square"); InteriorPoint* internalPt2 = domain->createInteriorPoint(); internalPt2->setCoord1(5.0); AdjacentDomains* adjDomain = geometry->createAdjacentDomains(); adjDomain->setSpatialId("adjDomain1"); adjDomain->setDomain1("domain1"); adjDomain->setDomain2("domain2"); AnalyticGeometry* analyticGeom = geometry->createAnalyticGeometry(); analyticGeom->setSpatialId("analyticGeom1"); AnalyticVolume* analyticVol = analyticGeom->createAnalyticVolume(); analyticVol->setSpatialId("analyticVol1"); analyticVol->setDomainType(domainType->getSpatialId()); analyticVol->setFunctionType("squareFn"); analyticVol->setOrdinal(1); const char* mathMLStr = "<math xmlns=\"http://www.w3.org/1998/Math/MathML\"><apply xmlns=\"\"><plus /><apply><times /><ci>x</ci><ci>x</ci></apply><apply><minus /><cn>1.0</cn></apply></apply></math>"; ASTNode* mathNode = readMathMLFromString(mathMLStr); analyticVol->setMath(mathNode); SampledFieldGeometry* sfg = geometry->createSampledFieldGeometry(); sfg->setSpatialId("sampledFieldGeom1"); SampledField* sampledField = sfg->createSampledField(); sampledField->setSpatialId("sampledField1"); sampledField->setNumSamples1(4); sampledField->setNumSamples2(4); sampledField->setNumSamples3(2); sampledField->setDataType("double"); sampledField->setInterpolationType("linear"); sampledField->setEncoding("encoding1"); //int samples[5] = {1, 2, 3, 4, 5}; int samples[32] = { // z=0 0,0,0,0, 0,1,1,0, 0,1,1,0, 0,0,0,0, // z=1 0,0,0,0, 0,1,1,0, 0,1,1,0, 0,0,0,0 }; ImageData* id = sampledField->createImageData(); id->setDataType("compressed"); id->setSamples(samples, 32); SampledVolume* sampledVol = sfg->createSampledVolume(); sampledVol->setSpatialId("sv_1"); sampledVol->setDomainType(domainType->getSpatialId()); sampledVol->setSampledValue(128.0); sampledVol->setMinValue(0.0); sampledVol->setMaxValue(255.0); ParametricGeometry* pg = geometry->createParametricGeometry(); pg->setSpatialId("parametricGeom1"); ParametricObject* paramObj = pg->createParametricObject(); paramObj->setSpatialId("po_1"); paramObj->setDomain(domain->getSpatialId()); paramObj->setPolygonType("hexagon"); int ptIndices[5] = {1, 2, 3, 4, 5}; PolygonObject* po = paramObj->createPolygonObject(); po->setPointIndices(ptIndices, 5); SpatialPoint* spPt = pg->createSpatialPoint(); spPt->setSpatialId("sp_1"); spPt->setDomain(domain->getSpatialId()); spPt->setCoord1(1); spPt->setCoord2(2); spPt->setCoord3(3); CSGeometry* csg = geometry->createCSGeometry(); csg->setSpatialId("csGeom1"); CSGObject* csgObj = csg->createCSGObject(); csgObj->setSpatialId("csg_csgo_1"); csgObj->setDomainType(domainType->getSpatialId()); csgObj->setOrdinal(1); CSGScale* scale = csgObj->createCSGScale(); scale->setScaleX(2.0); scale->setScaleY(3.0); scale->setScaleZ(4.0); CSGPrimitive* prim1 = scale->createCSGPrimitive(); prim1->setPrimitiveType("SOLID_SPHERE"); csgObj = csg->createCSGObject(); csgObj->setSpatialId("csg_csgo_2"); csgObj->setDomainType(domainType->getSpatialId()); CSGSetOperator* setUnion = csgObj->createCSGSetOperator(); setUnion->setOperationType("UNION"); /* CSGPrimitive* prim = setUnion->createCSGPrimitive(); prim->setPrimitiveType("SOLID_SPHERE"); CSGPrimitive* prim2 = setUnion->createCSGPrimitive(); prim2->setPrimitiveType("SOLID_CONE"); */ CSGPrimitive* prim2 = new CSGPrimitive(3,1,1); prim2->setSpatialId("cone0"); prim2->setPrimitiveType("SOLID_CONE"); CSGTranslation* translatedCone = new CSGTranslation(3,1,1); translatedCone->setSpatialId("translation0"); translatedCone->setTranslateX(2.0); translatedCone->setTranslateY(2.0); translatedCone->setTranslateZ(2.0); translatedCone->setChild(prim2); int n = setUnion->addCSGNodeChild(translatedCone); CSGPrimitive* prim3 = new CSGPrimitive(3,1,1); prim3->setSpatialId("sphere0"); prim3->setPrimitiveType("SOLID_SPHERE"); n = setUnion->addCSGNodeChild(prim3); writeSBML(&document, "spatial_example0.xml"); }
///////////////////////////////////////////////// // Help functions void GnuplotExportModule::outputReactionForces(TimeStep *tStep) { // Add sum of reaction forces to arrays // Compute sum of reaction forces for each BC number Domain *domain = emodel->giveDomain(1); StructuralEngngModel *seMod = dynamic_cast<StructuralEngngModel* >(emodel); if(seMod == NULL) { OOFEM_ERROR("failed to cast to StructuralEngngModel."); } IntArray ielemDofMask; FloatArray reactions; IntArray dofManMap, dofidMap, eqnMap; // test if solution step output is active if ( !testTimeStepOutput(tStep) ) { return; } // map contains corresponding dofmanager and dofs numbers corresponding to prescribed equations // sorted according to dofmanger number and as a minor crit. according to dof number // this is necessary for extractor, since the sorted output is expected seMod->buildReactionTable(dofManMap, dofidMap, eqnMap, tStep, 1); // compute reaction forces seMod->computeReaction(reactions, tStep, 1); // Find highest index of prescribed dofs int maxIndPresDof = 0; for ( int i = 1; i <= dofManMap.giveSize(); i++ ) { maxIndPresDof = std::max(maxIndPresDof, dofidMap.at(i)); } int numBC = domain->giveNumberOfBoundaryConditions(); while ( mReactionForceHistory.size() < size_t(numBC) ) { std::vector<FloatArray> emptyArray; mReactionForceHistory.push_back( emptyArray ); } maxIndPresDof = domain->giveNumberOfSpatialDimensions(); while ( mDispHist.size() < size_t(numBC) ) { std::vector<double> emptyArray; mDispHist.push_back( emptyArray ); } for(int bcInd = 0; bcInd < numBC; bcInd++) { FloatArray fR(maxIndPresDof), disp(numBC); fR.zero(); for ( int i = 1; i <= dofManMap.giveSize(); i++ ) { DofManager *dMan = domain->giveDofManager( dofManMap.at(i) ); Dof *dof = dMan->giveDofWithID( dofidMap.at(i) ); if ( dof->giveBcId() == bcInd+1 ) { fR.at( dofidMap.at(i) ) += reactions.at( eqnMap.at(i) ); // Slightly dirty BoundaryCondition *bc = dynamic_cast<BoundaryCondition*> (domain->giveBc(bcInd+1)); if ( bc != NULL ) { disp.at(bcInd+1) = bc->give(dof, VM_Total, tStep->giveTargetTime()); } ///@todo This function should be using the primaryfield instead of asking BCs directly. / Mikael } } mDispHist[bcInd].push_back(disp.at(bcInd+1)); mReactionForceHistory[bcInd].push_back(fR); // X FILE * pFileX; char fileNameX[100]; sprintf(fileNameX, "ReactionForceGnuplotBC%dX.dat", bcInd+1); pFileX = fopen ( fileNameX , "wb" ); fprintf(pFileX, "#u Fx\n"); for ( size_t j = 0; j < mDispHist[bcInd].size(); j++ ) { fprintf(pFileX, "%e %e\n", mDispHist[bcInd][j], mReactionForceHistory[bcInd][j].at(1) ); } fclose(pFileX); // Y FILE * pFileY; char fileNameY[100]; sprintf(fileNameY, "ReactionForceGnuplotBC%dY.dat", bcInd+1); pFileY = fopen ( fileNameY , "wb" ); fprintf(pFileY, "#u Fx\n"); for ( size_t j = 0; j < mDispHist[bcInd].size(); j++ ) { if( mReactionForceHistory[bcInd][j].giveSize() >= 2 ) { fprintf(pFileY, "%e %e\n", mDispHist[bcInd][j], mReactionForceHistory[bcInd][j].at(2) ); } } fclose(pFileY); } }
void writeSpatialSBML() { // SBMLNamespaces of SBML Level 3 Version 1 with 'req' Version 1 // then add 'spatial' package namespace. SpatialPkgNamespaces sbmlns(3,1,1); // create the L3V1 document with spatial package SBMLDocument document(&sbmlns); // set 'required' attribute on document for 'spatial' and 'req' packages to 'T'?? SBMLDocumentPlugin* dplugin; dplugin = static_cast<SBMLDocumentPlugin*>(document.getPlugin("spatial")); dplugin->setRequired(true); // create the Model Model *model = document.createModel(); model-> setId("trial_spatial"); model-> setName("trial_spatial"); // create the Compartments Compartment* compartment = model->createCompartment(); compartment->setId("cytosol"); compartment->setConstant(true); // create the Species Species* species1 = model->createSpecies(); species1->setId("ATPc"); species1->setCompartment("cytosol"); species1->setInitialConcentration(1.0); species1->setHasOnlySubstanceUnits(false); species1->setBoundaryCondition(false); species1->setConstant(false); // spatial package extension to species. SpatialSpeciesPlugin* srplugin; srplugin = static_cast<SpatialSpeciesPlugin*>(species1->getPlugin("spatial")); srplugin->setIsSpatial(true); // add parameter for diff coeff of species1 Parameter* paramSp = model->createParameter(); paramSp->setId(species1->getId()+"_dc"); paramSp->setValue(1.0); // spatial package extension to parameter. SpatialParameterPlugin* pplugin; pplugin = static_cast<SpatialParameterPlugin*>(paramSp->getPlugin("spatial")); DiffusionCoefficient* diffCoeff = pplugin->createDiffusionCoefficient(); diffCoeff->setVariable(species1->getId()); diffCoeff->setType(SPATIAL_DIFFUSIONKIND_ANISOTROPIC); CoordinateReference* coordRef = diffCoeff->createCoordinateReference(); coordRef->setCoordinate(SPATIAL_COORDINATEKIND_CARTESIAN_X); // add parameter for adv coeff of species1 paramSp = model->createParameter(); paramSp->setId(species1->getId()+"_ac"); paramSp->setValue(1.5); // spatial package extension to parameter. pplugin = static_cast<SpatialParameterPlugin*>(paramSp->getPlugin("spatial")); AdvectionCoefficient* advCoeff = pplugin->createAdvectionCoefficient(); advCoeff->setVariable(species1->getId()); advCoeff->setCoordinate(SPATIAL_COORDINATEKIND_CARTESIAN_X); // add parameter for boundary condition of species1 paramSp = model->createParameter(); paramSp->setId(species1->getId()+"_bc"); paramSp->setValue(2.0); // spatial package extension to parameter. pplugin = static_cast<SpatialParameterPlugin*>(paramSp->getPlugin("spatial")); BoundaryCondition* boundCon = pplugin->createBoundaryCondition(); boundCon->setVariable(species1->getId()); boundCon->setType(SPATIAL_BOUNDARYKIND_DIRICHLET); boundCon->setCoordinateBoundary("Xmin"); Species* species2 = model->createSpecies(); species2->setId("ADPc"); species2->setCompartment("cytosol"); species2->setInitialConcentration(1); species2->setHasOnlySubstanceUnits(false); species2->setBoundaryCondition(false); species2->setConstant(false); srplugin = static_cast<SpatialSpeciesPlugin*>(species2->getPlugin("spatial")); srplugin->setIsSpatial(true); Reaction* reaction = model->createReaction(); reaction->setId("rxn1"); reaction->setReversible(false); reaction->setFast(false); reaction->setCompartment("cytosol"); SpatialReactionPlugin* rplugin = static_cast<SpatialReactionPlugin*>(reaction->getPlugin("spatial")); rplugin->setIsLocal(true); // // Get a SpatialModelPlugin object plugged in the model object. // // The type of the returned value of SBase::getPlugin() function is // SBasePlugin*, and thus the value needs to be casted for the // corresponding derived class. // SpatialModelPlugin* mplugin; mplugin = static_cast<SpatialModelPlugin*>(model->getPlugin("spatial")); // // Creates a geometry object via SpatialModelPlugin object. // Geometry* geometry = mplugin->createGeometry(); geometry->setCoordinateSystem(SPATIAL_GEOMETRYKIND_CARTESIAN); CoordinateComponent* coordX = geometry->createCoordinateComponent(); coordX->setId("coordComp1"); coordX->setType(SPATIAL_COORDINATEKIND_CARTESIAN_X); coordX->setUnit("umeter"); Boundary* minX = coordX->createBoundaryMin(); minX->setId("Xmin"); minX->setValue(0.0); Boundary* maxX = coordX->createBoundaryMax(); maxX->setId("Xmax"); maxX->setValue(10.0); Parameter* paramX = model->createParameter(); paramX->setId("x"); paramX->setValue(8.0); // spatial package extension to parameter. // SpatialParameterPlugin* pplugin; pplugin = static_cast<SpatialParameterPlugin*>(paramX->getPlugin("spatial")); SpatialSymbolReference* spSymRef = pplugin->createSpatialSymbolReference(); spSymRef->setSpatialRef(coordX->getId()); DomainType* domainType = geometry->createDomainType(); domainType->setId("dtype1"); domainType->setSpatialDimension(3); // Spatial package extension to compartment (mapping compartment with domainType) SpatialCompartmentPlugin* cplugin; cplugin = static_cast<SpatialCompartmentPlugin*>(compartment->getPlugin("spatial")); CompartmentMapping* compMapping = cplugin->createCompartmentMapping(); compMapping->setId("compMap1"); compMapping->setDomainType(domainType->getId()); compMapping->setUnitSize(1.0); Domain* domain = geometry->createDomain(); domain->setId("domain1"); domain->setDomainType("dtype1"); InteriorPoint* internalPt1 = domain->createInteriorPoint(); internalPt1->setCoord1(1.0); domain = geometry->createDomain(); domain->setId("domain2"); domain->setDomainType("dtype1"); InteriorPoint* internalPt2 = domain->createInteriorPoint(); internalPt2->setCoord1(5.0); AdjacentDomains* adjDomain = geometry->createAdjacentDomains(); adjDomain->setId("adjDomain1"); adjDomain->setDomain1("domain1"); adjDomain->setDomain2("domain2"); AnalyticGeometry* analyticGeom = geometry->createAnalyticGeometry(); analyticGeom->setId("analyticGeom1"); AnalyticVolume* analyticVol = analyticGeom->createAnalyticVolume(); analyticVol->setId("analyticVol1"); analyticVol->setDomainType(domainType->getId()); analyticVol->setFunctionType(SPATIAL_FUNCTIONKIND_LAYERED); analyticVol->setOrdinal(1); const char* mathMLStr = "<math xmlns=\"http://www.w3.org/1998/Math/MathML\"><apply xmlns=\"\"><plus /><apply><times /><ci>x</ci><ci>x</ci></apply><apply><minus /><cn>1.0</cn></apply></apply></math>"; ASTNode* mathNode = readMathMLFromString(mathMLStr); analyticVol->setMath(mathNode); SampledFieldGeometry* sfg = geometry->createSampledFieldGeometry(); sfg->setId("sampledFieldGeom1"); SampledField* sampledField = sfg->createSampledField(); sampledField->setId("sampledField1"); sampledField->setNumSamples1(4); sampledField->setNumSamples2(4); sampledField->setNumSamples3(2); sampledField->setDataType("double"); sampledField->setInterpolationType("linear"); sampledField->setEncoding("encoding1"); //int samples[5] = {1, 2, 3, 4, 5}; int samples[32] = { // z=0 0,0,0,0, 0,1,1,0, 0,1,1,0, 0,0,0,0, // z=1 0,0,0,0, 0,1,1,0, 0,1,1,0, 0,0,0,0 }; ImageData* id = sampledField->createImageData(); id->setDataType("uint8"); id->setSamples(samples, 32); SampledVolume* sampledVol = sfg->createSampledVolume(); sampledVol->setId("sv_1"); sampledVol->setDomainType(domainType->getId()); sampledVol->setSampledValue(128.0); sampledVol->setMinValue(0.0); sampledVol->setMaxValue(255.0); writeSBML(&document, "spatial_example2.xml"); }
END_TEST START_TEST (test_SpatialExtension_read_L3V1V1_defaultNS) { string file = TestDataDirectory; file += "/read_L3V1V1_defaultNS.xml"; SBMLDocument *document = readSBMLFromFile(file.c_str()); string sbmlDoc = writeSBMLToStdString(document); Model *model = document->getModel(); //document->printErrors(); fail_unless(model != NULL); //fail_unless(document->getNumErrors() == 0); // model : compartment fail_unless(model->getNumCompartments() == 1); Compartment *comp = model->getCompartment(0); // compartment : compartmentMapping SpatialCompartmentPlugin* cplugin = static_cast<SpatialCompartmentPlugin*>(comp->getPlugin("spatial")); fail_unless(cplugin != NULL); CompartmentMapping *cMapping = cplugin->getCompartmentMapping(); if (cMapping->isSetId()) { fail_unless(cMapping->getId() == "compMap1"); fail_unless(cMapping->getDomainType() == "dtype1"); fail_unless(cMapping->getUnitSize() == 1); } // model : species 1 fail_unless(model->getNumSpecies() == 2); Species *sp = model->getSpecies(0); SpatialSpeciesPlugin* srplugin = static_cast<SpatialSpeciesPlugin*>(sp->getPlugin("spatial")); fail_unless(srplugin != NULL); fail_unless(srplugin->getIsSpatial() == true); // model : species 2 sp = model->getSpecies(1); srplugin = static_cast<SpatialSpeciesPlugin*>(sp->getPlugin("spatial")); fail_unless(srplugin != NULL); fail_unless(srplugin->getIsSpatial() == true); // model : parameters (species diffusion, advection coeffs, species boundary conditions, coordinate components from Geometry fail_unless(model->getNumParameters() == 5); // parameter 0 : diffusionCoefficient Parameter *param = model->getParameter(0); SpatialParameterPlugin* pplugin = static_cast<SpatialParameterPlugin*>(param->getPlugin("spatial")); fail_unless(pplugin != NULL); fail_unless(pplugin->isSpatialParameter() == true); fail_unless(pplugin->getType() == SBML_SPATIAL_DIFFUSIONCOEFFICIENT); DiffusionCoefficient *diffCoeff = pplugin->getDiffusionCoefficient(); fail_unless(diffCoeff->getVariable() == "ATPc"); fail_unless(diffCoeff->isSetCoordinateReference1()); fail_unless(diffCoeff->getCoordinateReference1() == SPATIAL_COORDINATEKIND_CARTESIAN_X); // parameter 1 : advectionCoefficient param = model->getParameter(1); pplugin = static_cast<SpatialParameterPlugin*>(param->getPlugin("spatial")); fail_unless(pplugin != NULL); fail_unless(pplugin->isSpatialParameter() == true); fail_unless(pplugin->getType() == SBML_SPATIAL_ADVECTIONCOEFFICIENT); AdvectionCoefficient *advCoeff = pplugin->getAdvectionCoefficient(); fail_unless(advCoeff->getVariable() == "ATPc"); fail_unless(advCoeff->getCoordinate() == SPATIAL_COORDINATEKIND_CARTESIAN_X); // parameter 2 : boundaryCondition X param = model->getParameter(2); pplugin = static_cast<SpatialParameterPlugin*>(param->getPlugin("spatial")); fail_unless(pplugin != NULL); fail_unless(pplugin->isSpatialParameter() == true); fail_unless(pplugin->getType() == SBML_SPATIAL_BOUNDARYCONDITION); BoundaryCondition *bc = pplugin->getBoundaryCondition(); fail_unless(bc->getVariable() == "ATPc"); fail_unless(bc->getCoordinateBoundary() == "Xmin"); fail_unless(bc->getType() == SPATIAL_BOUNDARYKIND_DIRICHLET); // parameter 3 : SpatialSymbolReference (coordinateComponent from geometry) param = model->getParameter(3); pplugin = static_cast<SpatialParameterPlugin*>(param->getPlugin("spatial")); fail_unless(pplugin != NULL); SpatialSymbolReference *spSymRef = pplugin->getSpatialSymbolReference(); fail_unless(spSymRef->getSpatialRef() == "coordComp1"); // model : reaction fail_unless(model->getNumReactions() == 1); Reaction *rxn = model->getReaction(0); SpatialReactionPlugin* rplugin = static_cast<SpatialReactionPlugin*>(rxn->getPlugin("spatial")); fail_unless(rplugin != NULL); fail_unless(rplugin->getIsLocal() == true); // get the Geometry SpatialModelPlugin* mplugin = static_cast<SpatialModelPlugin*>(model->getPlugin("spatial")); fail_unless(mplugin != NULL); Geometry *geometry = mplugin->getGeometry(); fail_unless(geometry != NULL); fail_unless(geometry->getPackageName() == "spatial"); fail_unless(geometry->getCoordinateSystem() == SPATIAL_GEOMETRYKIND_CARTESIAN); // geometry coordinateComponent fail_unless(geometry->getNumCoordinateComponents() == 1); fail_unless(geometry->getListOfCoordinateComponents()->getPackageName() == "spatial"); CoordinateComponent* coordComp = geometry->getCoordinateComponent(0); fail_unless(coordComp->getId() == "coordComp1"); fail_unless(coordComp->getType() == SPATIAL_COORDINATEKIND_CARTESIAN_X); fail_unless(coordComp->getUnit() == "umeter"); fail_unless(coordComp->getPackageName() == "spatial"); // boundaryMin and boundayMax within coordinateComponent Boundary *minX = coordComp->getBoundaryMin(); fail_unless(minX->getId() == "Xmin"); fail_unless(minX->getValue() == 0); fail_unless(minX->getPackageName() == "spatial"); Boundary *maxX = coordComp->getBoundaryMax(); fail_unless(maxX->getId() == "Xmax"); fail_unless(maxX->getValue() == 10); fail_unless(maxX->getPackageName() == "spatial"); // geometry domainType fail_unless(geometry->getNumDomainTypes() == 1); fail_unless(geometry->getListOfDomainTypes()->getPackageName() == "spatial"); DomainType *domainType = geometry->getDomainType(0); fail_unless(domainType->getId() == "dtype1"); fail_unless(domainType->getSpatialDimensions() == 3); fail_unless(domainType->getPackageName() == "spatial"); // geometry domains fail_unless(geometry->getNumDomains() == 2); fail_unless(geometry->getListOfDomains()->getPackageName() == "spatial"); Domain* domain = geometry->getDomain(0); fail_unless(domain->getId() == "domain1"); fail_unless(domain->getDomainType() == "dtype1"); //fail_unless(domain->getImplicit() == false); //fail_unless(domain->getShapeId() == "circle"); fail_unless(domain->getPackageName() == "spatial"); // interiorPoints in Domain fail_unless(domain->getNumInteriorPoints() == 1); fail_unless(domain->getListOfInteriorPoints()->getPackageName() == "spatial"); InteriorPoint* interiorPt = domain->getInteriorPoint(0); fail_unless(interiorPt->getCoord1() == 1); fail_unless(interiorPt->getPackageName() == "spatial"); // second domain in geometry domain = geometry->getDomain(1); fail_unless(domain->getId() == "domain2"); fail_unless(domain->getDomainType() == "dtype1"); //fail_unless(domain->getImplicit() == false); //fail_unless(domain->getShapeId() == "square"); fail_unless(domain->getPackageName() == "spatial"); // Domain : interiorPoints fail_unless(domain->getNumInteriorPoints() == 1); fail_unless(domain->getListOfInteriorPoints()->getPackageName() == "spatial"); interiorPt = domain->getInteriorPoint(0); fail_unless(interiorPt->getCoord1() == 5); fail_unless(interiorPt->getPackageName() == "spatial"); // geometry adjacentDomains fail_unless(geometry->getNumAdjacentDomains() == 1); fail_unless(geometry->getListOfAdjacentDomains()->getPackageName() == "spatial"); AdjacentDomains* adjDomain = geometry->getAdjacentDomains(0); fail_unless(adjDomain->getId() == "adjDomain1"); fail_unless(adjDomain->getDomain1() == "domain1"); fail_unless(adjDomain->getDomain2() == "domain2"); fail_unless(adjDomain->getPackageName() == "spatial"); // geometry : geometryDefinitions fail_unless(geometry->getNumGeometryDefinitions() == 2); fail_unless(geometry->getListOfGeometryDefinitions()->getPackageName() == "spatial"); GeometryDefinition *gd = geometry->getGeometryDefinition(0); AnalyticGeometry *analyticGeom = static_cast<AnalyticGeometry*>(gd); fail_unless(analyticGeom->getId() == "analyticGeom1"); fail_unless(analyticGeom->getPackageName() == "spatial"); // AnalyticGeometry : analyticVolumes fail_unless(analyticGeom->getNumAnalyticVolumes() == 1); fail_unless(analyticGeom->getListOfAnalyticVolumes()->getPackageName() == "spatial"); AnalyticVolume* av = analyticGeom->getAnalyticVolume(0); fail_unless(av->getId() == "analyticVol1"); fail_unless(av->getDomainType() == "dtype1"); fail_unless(av->getFunctionType() == SPATIAL_FUNCTIONKIND_LAYERED); fail_unless(av->getOrdinal() == 1); fail_unless(av->getPackageName() == "spatial"); // ??????Math???? // geometry : sampledFieldGeometry gd = geometry->getGeometryDefinition(1); SampledFieldGeometry* sfGeom = static_cast<SampledFieldGeometry*>(gd); fail_unless(sfGeom->getId() == "sampledFieldGeom1"); fail_unless(sfGeom->getPackageName() == "spatial"); // sampledFieldGeometry : SampledVolumes fail_unless(sfGeom->getNumSampledVolumes() == 1); fail_unless(sfGeom->getListOfSampledVolumes()->getPackageName() == "spatial"); SampledVolume* sv = sfGeom->getSampledVolume(0); fail_unless(sv->getId() == "sv_1"); fail_unless(sv->getDomainType() == "dtype1"); fail_unless(sv->getSampledValue() == 128); fail_unless(sv->getMinValue() == 0); fail_unless(sv->getMaxValue() == 255); fail_unless(sv->getPackageName() == "spatial"); // sampledFieldGeometry : SampledField SampledField* sf = geometry->getSampledField( sfGeom->getSampledField() ); fail_unless(sf->getId() == "sampledField1"); fail_unless(sf->getDataType() == SPATIAL_DATAKIND_UINT8); fail_unless(sf->getInterpolationType() == SPATIAL_INTERPOLATIONKIND_LINEAR); fail_unless(sf->getCompression() == SPATIAL_COMPRESSIONKIND_UNCOMPRESSED); fail_unless(sf->getNumSamples1() == 4); fail_unless(sf->getNumSamples2() == 4); fail_unless(sf->getNumSamples3() == 2); fail_unless(sf->getPackageName() == "spatial"); // sampledField : ImageData fail_unless(sf->getSamplesLength() == 32); int* samples = new int[sf->getSamplesLength()]; sf->getSamples(samples); fail_unless(samples[0] == 0); string s2 = writeSBMLToStdString(document); fail_unless(sbmlDoc==s2); delete document; delete[] samples; }