void Foam::GeometricField<Type, PatchField, GeoMesh>::Boundary:: readField ( const DimensionedField<Type, GeoMesh>& field, const dictionary& dict ) { // Clear the boundary field if already initialised this->clear(); this->setSize(bmesh_.size()); if (debug) { InfoInFunction << endl; } label nUnset = this->size(); // 1. Handle explicit patch names. Note that there can be only one explicit // patch name since is key of dictionary. forAllConstIter(dictionary, dict, iter) { if (iter().isDict() && !iter().keyword().isPattern()) { label patchi = bmesh_.findPatchID(iter().keyword()); if (patchi != -1) { this->set ( patchi, PatchField<Type>::New ( bmesh_[patchi], field, iter().dict() ) ); nUnset--; } } } if (nUnset == 0) { return; } // 2. Patch-groups. (using non-wild card entries of dictionaries) // (patchnames already matched above) // Note: in reverse order of entries in the dictionary (last // patchGroups wins). This is so is consistent with dictionary wildcard // behaviour if (dict.size()) { for ( IDLList<entry>::const_reverse_iterator iter = dict.rbegin(); iter != dict.rend(); ++iter ) { const entry& e = iter(); if (e.isDict() && !e.keyword().isPattern()) { const labelList patchIDs = bmesh_.findIndices ( e.keyword(), true // use patchGroups ); forAll(patchIDs, i) { label patchi = patchIDs[i]; if (!this->set(patchi)) { this->set ( patchi, PatchField<Type>::New ( bmesh_[patchi], field, e.dict() ) ); } } } } }