void BCManager::applyBC(ParameterList const& p) { // validate parameters RCP<ParameterList> vp = getValidBCParameters(); p.validateParameters(*vp,0); // get the input parameters std::string val = p.get<std::string>("Value"); std::string set = p.get<std::string>("Node Set"); std::string dof = p.get<std::string>("DOF"); // does this node set actually exist? assert(ns.count(set) == 1); // does this dof actually exist? int offset = problem->getOffset(dof); if (!isAdjoint) modifyPrimalSystem(val, offset, set); else modifyAdjointSystem(offset, set); }
static void validate_params(ParameterList const& p, SolInfo* s) { auto disc = s->get_disc(); auto ss_name = p.get<std::string>("side set"); disc->get_sides(ss_name); p.validateParameters(get_valid_params(), 0); }
/** * Test all the validator dependencies. */ TEUCHOS_UNIT_TEST(Teuchos_Dependencies, testValiDeps){ RCP<ParameterList> My_deplist = rcp(new ParameterList); RCP<DependencySheet> depSheet1 = rcp(new DependencySheet); /* * Testing StringValidatorDependency */ RCP<StringToIntegralParameterEntryValidator<int> > stringFoodTypeValidator = rcp( new StringToIntegralParameterEntryValidator<int>( tuple<std::string>( "Cheese", "Soda", "Chips" ) ,"Food Type" ) ); RCP<StringToIntegralParameterEntryValidator<int> > cheeseValidator = rcp( new StringToIntegralParameterEntryValidator<int>( tuple<std::string>( "Swiss", "American", "Super Awesome Cheese" ) ,"Food Selector" ) ); RCP<StringToIntegralParameterEntryValidator<int> > sodaValidator = rcp( new StringToIntegralParameterEntryValidator<int>( tuple<std::string>( "Pepsi", "Coke", "Kurtis Cola", "Bad Cola" ) ,"Food Selector" ) ); RCP<StringToIntegralParameterEntryValidator<int> > chipsValidator = rcp( new StringToIntegralParameterEntryValidator<int>( tuple<std::string>( "Lays", "Doritos", "Kurtis Super Awesome Brand" ) ,"Food Selector" ) ); StringValidatorDependency::ValueToValidatorMap testValidatorMap1; testValidatorMap1["Cheese"] = cheeseValidator; testValidatorMap1["Soda"] = sodaValidator; testValidatorMap1["Chips"] = chipsValidator; ParameterList stringValiDepList = My_deplist->sublist( "String Validator Dependency", false, "String Validator Dependency testing list."); stringValiDepList.set( "Food Selector", "Swiss", "select the food you want", cheeseValidator); stringValiDepList.set( "Food Type", "Cheese", "String Validator Dependency Tester", stringFoodTypeValidator); RCP<StringValidatorDependency> stringValiDep = rcp( new StringValidatorDependency( stringValiDepList.getEntryRCP("Food Type"), stringValiDepList.getEntryRCP("Food Selector"), testValidatorMap1, cheeseValidator ) ); depSheet1->addDependency(stringValiDep); TEST_NOTHROW(stringValiDepList.validateParameters(stringValiDepList)); TEST_ASSERT(depSheet1->hasDependents( stringValiDepList.getEntryRCP("Food Type"))); RCP<const DependencySheet::DepSet> stringValiDepSet = depSheet1->getDependenciesForParameter( stringValiDepList.getEntryRCP("Food Type")); TEST_ASSERT(stringValiDepSet->size() == 1); stringValiDepList.set("Food Type","Soda"); stringValiDep->evaluate(); TEST_ASSERT(stringValiDepList.getEntry("Food Selector").validator() == sodaValidator); TEST_THROW(stringValiDepList.validateParameters(stringValiDepList), Exceptions::InvalidParameterValue); stringValiDepList.set("Food Selector", "Pepsi"); TEST_NOTHROW(stringValiDepList.validateParameters(stringValiDepList)); /* * Tesing some different aspects of the StringValidatorDependency */ ParameterList stringValiDepList2 = My_deplist->sublist( "String Validator Dependency (other validators)", false, "String validator testing" ); RCP<StringToIntegralParameterEntryValidator<int> > stringRangeValidator = rcp( new StringToIntegralParameterEntryValidator<int>( tuple<std::string>( "1-10", "10-33", "50-60" ), "Range selector" ) ); RCP<EnhancedNumberValidator<int> > range110Vali = rcp(new EnhancedNumberValidator<int>(1,10)); RCP<EnhancedNumberValidator<int> > range1033Vali = rcp(new EnhancedNumberValidator<int>(10,33)); RCP<EnhancedNumberValidator<int> > range5060Vali = rcp(new EnhancedNumberValidator<int>(50,60)); stringValiDepList2.set("Range selector", "1-10", "selects the range to validate", stringRangeValidator); StringValidatorDependency::ValueToValidatorMap rangeValidatorMap1; rangeValidatorMap1["1-10"] = range110Vali; rangeValidatorMap1["10-33"] = range1033Vali; rangeValidatorMap1["50-60"] = range5060Vali; stringValiDepList2.set( "RangeValue", 3, "the value of the range", range110Vali); RCP<StringValidatorDependency> stringValiDep2 = RCP<StringValidatorDependency>( new StringValidatorDependency( stringValiDepList2.getEntryRCP("Range selector"), stringValiDepList2.getEntryRCP("RangeValue"), rangeValidatorMap1, range110Vali ) ); depSheet1->addDependency(stringValiDep2); TEST_NOTHROW(stringValiDepList2.validateParameters(stringValiDepList2)); TEST_ASSERT(depSheet1->hasDependents( stringValiDepList2.getEntryRCP("Range selector"))); RCP<const DependencySheet::DepSet> stringValiDepSet2 = depSheet1->getDependenciesForParameter( stringValiDepList2.getEntryRCP("Range selector")); TEST_ASSERT(stringValiDepSet2->size() == 1); stringValiDepList2.set("Range selector","50-60"); stringValiDep2->evaluate(); TEST_ASSERT(stringValiDepList2.getEntry("RangeValue").validator() == range5060Vali); TEST_THROW(stringValiDepList2.validateParameters(stringValiDepList2), Exceptions::InvalidParameterValue); stringValiDepList2.set("RangeValue", 55); TEST_NOTHROW(stringValiDepList2.validateParameters(stringValiDepList2)); /* * Testing the BoolValidatorDependency. */ ParameterList boolValidatorDepList = My_deplist->sublist( "Bool Validator Dependency List", false, "Bool Validator Dependency testing list." ); boolValidatorDepList.set("Use Validator?", true, "truns the validator on and off"); RCP<EnhancedNumberValidator<int> > basicVali = rcp(new EnhancedNumberValidator<int>(1,10)); RCP<EnhancedNumberValidator<int> > basicVali2 = rcp(new EnhancedNumberValidator<int>()); boolValidatorDepList.set("do I have a validator?", 4, "does it have a validator?", basicVali); RCP<BoolValidatorDependency> boolValiDep = RCP<BoolValidatorDependency>( new BoolValidatorDependency( boolValidatorDepList.getEntryRCP("Use Validator?"), boolValidatorDepList.getEntryRCP("do I have a validator?"), basicVali, basicVali2 ) ); depSheet1->addDependency(boolValiDep); TEST_ASSERT(depSheet1->hasDependents( boolValidatorDepList.getEntryRCP("Use Validator?"))); TEST_ASSERT( boolValidatorDepList.getEntry("do I have a validator?").validator() == basicVali); TEST_NOTHROW( boolValidatorDepList.validateParameters(boolValidatorDepList)); RCP<const DependencySheet::DepSet> boolValiDepSet = depSheet1->getDependenciesForParameter(boolValidatorDepList.getEntryRCP( "Use Validator?")); TEST_ASSERT(boolValiDepSet->size() == 1); boolValidatorDepList.set("Use Validator?",false); boolValiDep->evaluate(); TEST_ASSERT( boolValidatorDepList.getEntry("do I have a validator?").validator() == basicVali2); /* * Testing the RangeValidatorDependency */ RCP<StringToIntegralParameterEntryValidator<int> > lowTempCheeseValidator = rcp( new StringToIntegralParameterEntryValidator<int>( tuple<std::string>( "PepperJack", "Swiss", "American" ), "Cheese to Fondue" ) ); RCP<StringToIntegralParameterEntryValidator<int> > highTempCheeseValidator = rcp( new StringToIntegralParameterEntryValidator<int>( tuple<std::string>( "Munster", "Provalone", "Kurtis Super Awesome Cheese"), "Cheese to Fondue" ) ); RCP<StringToIntegralParameterEntryValidator<int> > defaultCheeseValidator = rcp( new StringToIntegralParameterEntryValidator<int>( tuple<std::string>( "Other cheese", "other cheese 1", "other cheese 3"), "Cheese to Fondue" ) ); ParameterList& rangeValidatorDepList = My_deplist->sublist( "Range Validator Dependency List", false, "Range Validator Dependency testing list.\nWorking June 27th 2009" ); rangeValidatorDepList.set( "Temperature",101.0, "The temperature of the fondue"); rangeValidatorDepList.set( "Cheese to Fondue", "Swiss", "The cheese we'll be using in our fondue pot.", lowTempCheeseValidator); RangeValidatorDependency<double>::RangeToValidatorMap tempranges; tempranges[std::pair<double,double>(100,200)] = lowTempCheeseValidator; tempranges[std::pair<double,double>(200,300)] = highTempCheeseValidator; RCP<RangeValidatorDependency<double> > cheeseTempDep = RCP<RangeValidatorDependency<double> >( new RangeValidatorDependency<double>( rangeValidatorDepList.getEntryRCP("Temperature"), rangeValidatorDepList.getEntryRCP("Cheese to Fondue"), tempranges, defaultCheeseValidator ) ); depSheet1->addDependency(cheeseTempDep); TEST_ASSERT(depSheet1->hasDependents( rangeValidatorDepList.getEntryRCP("Temperature"))); RCP<const DependencySheet::DepSet> rangeValiDepSet = depSheet1->getDependenciesForParameter( rangeValidatorDepList.getEntryRCP("Temperature")); TEST_ASSERT(rangeValiDepSet->size() == 1); rangeValidatorDepList.set("Temperature",250.0); cheeseTempDep->evaluate(); TEST_ASSERT( rangeValidatorDepList.getEntry("Cheese to Fondue").validator() == highTempCheeseValidator); TEST_THROW( rangeValidatorDepList.validateParameters(rangeValidatorDepList), Exceptions::InvalidParameterValue); rangeValidatorDepList.set("Cheese to Fondue", "Provalone"); TEST_NOTHROW( rangeValidatorDepList.validateParameters(rangeValidatorDepList)); rangeValidatorDepList.set("Temperature", 50.0); cheeseTempDep->evaluate(); TEST_ASSERT( rangeValidatorDepList.getEntry("Cheese to Fondue").validator() == defaultCheeseValidator ); }