SBML_ODESOLVER_API int IntegratorInstance_updateModel(integratorInstance_t *engine) { int i; Species_t *s; Compartment_t *c; Parameter_t *p; odeModel_t *om = engine->om; cvodeData_t *data = engine->data; cvodeResults_t *results = engine->results; int nout = results->nout; int nvalues = data->nvalues; Model_t *m = om->m; for ( i=0; i<nvalues; i++ ) { if ( (s = Model_getSpeciesById(m, om->names[i])) != NULL ) { Species_setInitialConcentration(s, results->value[i][nout]); } else if ( (c = Model_getCompartmentById(m, om->names[i])) != NULL ) { Compartment_setSize(c, results->value[i][nout]); } else if ( (p = Model_getParameterById(m, om->names[i])) != NULL ) { Parameter_setValue(p, results->value[i][nout]); } else return 0; } return 1; }
END_TEST START_TEST (test_Species_setInitialConcentration1) { int i = Species_setInitialConcentration(C, 2.0); fail_unless( i == LIBSBML_UNEXPECTED_ATTRIBUTE ); fail_unless( !Species_isSetInitialConcentration(C) ); }
END_TEST START_TEST (test_Species_setInitialConcentration) { fail_unless( !Species_isSetInitialAmount (S) ); fail_unless( !Species_isSetInitialConcentration(S) ); Species_setInitialConcentration(S, 3.4); fail_unless( !Species_isSetInitialAmount (S) ); fail_unless( Species_isSetInitialConcentration(S) ); fail_unless( Species_getInitialConcentration(S) == 3.4 ); }
END_TEST START_TEST (test_SBMLConvert_convertToL1_Species_Concentration) { SBMLDocument_t *d = SBMLDocument_createWithLevelAndVersion(2, 1); Model_t *m = SBMLDocument_createModel(d); const char *sid = "C"; Compartment_t *c = Compartment_create(2, 1); Species_t *s = Species_create(2, 1); Compartment_setId ( c, sid ); Compartment_setSize ( c, 1.2 ); Model_addCompartment( m, c ); Species_setId ( s, "s" ); Species_setCompartment ( s, sid ); Species_setInitialConcentration( s, 2.34 ); Model_addSpecies ( m, s ); fail_unless( SBMLDocument_setLevelAndVersion(d, 1, 2) == 1, NULL); /** * These tests will fail under Cygwin because of a minimal * setlocale() implementation (see setlocale manpage). */ #ifndef CYGWIN fail_unless( Species_getInitialAmount(Model_getSpecies(m, 0)) == 2.808, NULL ); #endif Species_t * s1 = Model_getSpecies(m, 0); fail_unless (s1 != NULL); fail_unless (!strcmp(Species_getCompartment(s1), "C")); fail_unless(Compartment_getSize(Model_getCompartmentById(m, "C")) == 1.2); fail_unless(Species_getInitialConcentration(s1) == 2.34); fail_unless(Species_isSetInitialConcentration(s1) == 1); SBMLDocument_free(d); }
END_TEST START_TEST (test_L3_Species_initialConcentration) { double initialConcentration = 0.2; fail_unless( !Species_isSetInitialConcentration(S)); fail_unless( util_isNaN(Species_getInitialConcentration(S))); Species_setInitialConcentration(S, initialConcentration); fail_unless( Species_getInitialConcentration(S) == initialConcentration ); fail_unless( Species_isSetInitialConcentration(S) ); Species_unsetInitialConcentration(S); fail_unless( !Species_isSetInitialConcentration(S) ); fail_unless( util_isNaN(Species_getInitialConcentration(S))); }
END_TEST START_TEST (test_Species_setInitialConcentration2) { Species_t *c = Species_create(2, 2); int i = Species_setInitialConcentration(c, 4); fail_unless( i == LIBSBML_OPERATION_SUCCESS ); fail_unless( Species_getInitialConcentration(c) == 4 ); fail_unless( Species_isSetInitialConcentration(c)); i = Species_unsetInitialConcentration(c); fail_unless( i == LIBSBML_OPERATION_SUCCESS ); fail_unless( !Species_isSetInitialConcentration(c)); Species_free(c); }
/* setValues: the user can enter a species name and change its initial condition (amount or concentration) */ static void setValues(Model_t *m) { char *species; char *newIA; char *newIC; Species_t *s; printf("Please enter the id of the species to change: "); species = get_line(stdin); species = util_trim(species); if ( (s = Model_getSpeciesById(m,species) ) ) { printf("\n"); printf("Id: %s\n", Species_getId(s)); if ( Species_isSetName(s) ) { printf("Name: %s\n", Species_getName(s)); } if ( Species_isSetInitialAmount(s) ) { printf("Initial Amount: %g", Species_getInitialAmount(s)); } else if (Species_isSetInitialConcentration(s) ) { printf("Initial Concentration: %g", Species_getInitialConcentration(s)); } if ( Species_getHasOnlySubstanceUnits(s) ) { if ( Species_isSetSubstanceUnits(s) ) { printf("%s ", Species_getSubstanceUnits(s)); } } else { if ( Species_isSetSubstanceUnits(s) ) { printf("%s ", Species_getSubstanceUnits(s)); } if ( Species_isSetSpatialSizeUnits(s) ) { printf("%s%s", "/", Species_getSpatialSizeUnits(s)); } } if ( Species_getHasOnlySubstanceUnits(s) ) { printf(" (has only substance units)"); } printf("\n"); if ( Species_isSetCharge(s) ) { printf("Charge: %-10d", Species_getCharge(s)); } printf("\n"); printf("%s ", Species_getBoundaryCondition(s) ? "Species is a Boundary\n" : "\n"); printf("%s ", Species_getConstant(s) ? "Species is set constant" : "\n"); printf("\n"); if ( Species_isSetInitialAmount(s) ) { printf("Please enter new initial Amount: "); newIA = get_line(stdin); newIA = util_trim(newIA); Species_setInitialAmount(s, (float) atof(newIA)); } else if ( Species_isSetInitialConcentration(s) ) { printf("Please enter new initial Concentration: "); newIC = get_line(stdin); newIC = util_trim(newIC); Species_setInitialConcentration(s, (float) atof(newIC)); } } else { printf("%s not found.\n", species); } }