/*! The constructor */ ACoreDistObj::ACoreDistObj(Conf const & theConf, B const NeedHint) : Function(theConf.SysHdl(), NeedHint) { WatchError //Alert(Energy::e().ModelId() != EnergyCls<HpEnergy>::ModelId, eEnergyMismatch); Dim tDimen = Space::Dimen(); Hdl tSysHdl = theConf.SysHdl(); Dim tSpan = Protein::p().Span(); Dim tLength = Protein::p().Length(); block1<Prm,nmm> tResult(tSpan * tLength / 2); block1<Prm,nmm> hCore(tDimen); for(Cmp tCmp = 0; tCmp < tDimen; ++tCmp) { block1<Prm,xmm> corePrms; for(Pos tPos = 0; tPos < tSpan; ++tPos) { Typ tTyp = Protein::p().Type(tPos); if (toHp[tTyp]==0) continue; corePrms.insertMem(Prm(TermVar,tPos * tDimen + tCmp)); } // now sum all the points Prm SumComp = Prm(TermFunc,SumXiFeVi::def(Xv, tSysHdl, corePrms.items(), corePrms.itemCount())); Prm CompVal = Prm(TermFunc,UdivXiFeVi::def(Xv,tSysHdl, SumComp,UdivXiFeVi::bind(corePrms.itemCount()))); hCore.insert(CompVal); } for(Pos tPos = 0; tPos < tSpan; ++tPos) { Typ tTyp = Protein::p().Type(tPos); if (toHp[tTyp]==0) continue; Prm tDiff[tDimen], tSqrd[tDimen]; for(Cmp tCmp = 0; tCmp < tDimen; ++tCmp) { Prm tVar1 = Prm(TermVar,tPos * tDimen + tCmp); Prm tVar2 = Prm(hCore[tCmp]); tDiff[tCmp] = Prm(TermFunc,BsubXiFeVi::def(Xv, tSysHdl, tVar1, tVar2)); tSqrd[tCmp] = Prm(TermFunc,UsqrXiFeVi::def(Xv, tSysHdl, tDiff[tCmp])); } tResult.insert(Prm(TermFunc,SumXiFeVi::def(Xv, tSysHdl, tSqrd, tDimen),ValueAsEvalMin)); } //mFuncHdl = SumXiFcMi::def(Xv, tSysHdl, tResult.items(), tResult.size()); //mMetricRec = &SumXiFcMi::ref(tSysHdl, mFuncHdl).MetricRec(); if (NeedHint) { mFuncHdl = SumXiEFcMiHn::def(Xv | EvalMin, tSysHdl, tResult.items(), tResult.itemCount()); mMetricRec = &SumXiEFcMiHn::refc(tSysHdl, mFuncHdl).MetricRec(); } else { mFuncHdl = SumXiFcMi::def(Xv, tSysHdl, tResult.items(), tResult.itemCount()); mMetricRec = &SumXiFcMi::refc(tSysHdl, mFuncHdl).MetricRec(); } CatchError }
openPlatypusSpace /*! The constructor */ PlusDistObj::PlusDistObj(Conf const & theConf, B const NeedHint) : Function(theConf.SysHdl(), NeedHint) { WatchError Warn(!(Energy::e().ModelId() != EnergyCls<MjEnergy>::ModelId || Energy::e().ModelId() != EnergyCls<BarerraEnergy>::ModelId), eEnergyMismatch); Z modelCutoff=(Energy::e().ModelId() == EnergyCls<MjEnergy>::ModelId)?0:-1000; Dim tDimen = Space::Dimen(); Hdl tSysHdl = theConf.SysHdl(); Dim tSpan = Protein::p().Span(); Dim tLength = Protein::p().Length(); block1<Prm,nmm> tResult(tSpan * tLength / 2); for(Pos tPos1 = 0; tPos1 < tSpan; ++tPos1) { Typ tTyp1 = Protein::p().Type(tPos1); //if (tTyp1 != Energy::e().Type(2, 'H')) continue; for(Pos tPos2 = tPos1 + 2; tPos2 < tLength; ++tPos2) { Typ tTyp2 = Protein::p().Type(tPos2); //if (tTyp2 != Energy::e().Type(2, 'H')) continue; if(Energy::e().Level(tTyp1,tTyp2)<=modelCutoff) continue; Prm tDiff[tDimen], tSqrd[tDimen]; for(Cmp tCmp = 0; tCmp < tDimen; ++tCmp) { Prm tVar1 = Prm(TermVar,tPos1 * tDimen + tCmp); Prm tVar2 = Prm(TermVar,tPos2 * tDimen + tCmp); tDiff[tCmp] = Prm(TermFunc,BsubXiFeVi::def(Xv, tSysHdl, tVar1, tVar2)); tSqrd[tCmp] = Prm(TermFunc,UsqrXiFeVi::def(Xv, tSysHdl, tDiff[tCmp])); } tResult.insert(Prm(TermFunc,SumXiFeVi::def(Xv, tSysHdl, tSqrd, tDimen),ValueAsEvalMin)); } } //mFuncHdl = SumXiFcMi::def(Xv, tSysHdl, tResult.items(), tResult.size()); //mMetricRec = &SumXiFcMi::ref(tSysHdl, mFuncHdl).MetricRec(); if (NeedHint) { mFuncHdl = SumXiEFcMiHn::def(Xv | EvalMin, tSysHdl, tResult.items(), tResult.itemCount()); mMetricRec = &SumXiEFcMiHn::refc(tSysHdl, mFuncHdl).MetricRec(); } else { mFuncHdl = SumXiFcMi::def(Xv, tSysHdl, tResult.items(), tResult.itemCount()); mMetricRec = &SumXiFcMi::refc(tSysHdl, mFuncHdl).MetricRec(); } CatchError }
openPlatypusSpace /*! The constructor */ SideChainCns::SideChainCns(Conf const & theConf, B const NeedHint) : Function(theConf.SysHdl(), NeedHint) { WatchError Dim tDimen = Space::Dimen(); Hdl tSysHdl = theConf.SysHdl(); Dim tSpan = Protein::p().Span(); Dim tLength = Protein::p().Length(); block1<Prm,nmm> tResult(tSpan * tLength / 2); Int tSqrNeighDist = Lattice::l().SqrNeighDist(); for(Pos tPos1 = 0; tPos1 < tLength; ++tPos1) { Pos tPos2; if(tPos1<tLength/2) tPos2 = tPos1 + 1; else tPos2 = tPos1 - tLength/2; Prm tDiff[tDimen], tSqrd[tDimen]; for(Cmp tCmp = 0; tCmp < tDimen; ++tCmp) { Prm tVar1 = Prm(TermVar,tPos1 * tDimen + tCmp); Prm tVar2 = Prm(TermVar,tPos2 * tDimen + tCmp); tDiff[tCmp] = Prm(TermFunc,BsubXiFeVi::def(Xv, tSysHdl, tVar1, tVar2)); tSqrd[tCmp] = Prm(TermFunc,UsqrXiFeVi::def(Xv, tSysHdl, tDiff[tCmp])); } Prm tDist = Prm(TermFunc,SumXiFeVi::def(Xv, tSysHdl, tSqrd, tDimen)); tResult.insert(Prm(TermFunc,UequXiFcMi::def(Xv, tSysHdl, tDist, UequXiFcMi::bind(tSqrNeighDist)), MetricAsEvalMin)); } cout << tResult.itemCount() <<endl; if (NeedHint) { mFuncHdl = SumXiEFcMiHn::def(Xm | EvalMin, tSysHdl, tResult.items(), tResult.itemCount()); mMetricRec = &SumXiEFcMiHn::refc(tSysHdl, mFuncHdl).MetricRec(); } else { mFuncHdl = SumXiFcMi::def(Xm, tSysHdl, tResult.items(), tResult.itemCount()); mMetricRec = &SumXiFcMi::refc(tSysHdl, mFuncHdl).MetricRec(); } CatchError }
Foam::tmp<Foam::scalarField> Foam::waveSuperposition::scale ( const vector2DField& xy ) const { tmp<scalarField> tResult(new scalarField(xy.size(), 1)); scalarField& result = tResult.ref(); if (scale_.valid()) { const scalarField x(xy.component(0)); forAll(result, i) { result[i] *= scale_->value(x[i]); } }
Foam::tmp<Foam::DimensionedField<Type, Foam::volMesh>> Foam::levelSetAverage ( const fvMesh& mesh, const scalarField& levelC, const scalarField& levelP, const DimensionedField<Type, volMesh>& positiveC, const DimensionedField<Type, pointMesh>& positiveP, const DimensionedField<Type, volMesh>& negativeC, const DimensionedField<Type, pointMesh>& negativeP ) { tmp<DimensionedField<Type, volMesh>> tResult ( new DimensionedField<Type, volMesh> ( IOobject ( positiveC.name() + ":levelSetAverage", mesh.time().timeName(), mesh ), mesh, dimensioned<Type>("0", positiveC.dimensions(), Zero) ) ); DimensionedField<Type, volMesh>& result = tResult.ref(); forAll(result, cI) { const List<tetIndices> cellTetIs = polyMeshTetDecomposition::cellTetIndices(mesh, cI); scalar v = 0; Type r = Zero; forAll(cellTetIs, cellTetI) { const triFace triIs = cellTetIs[cellTetI].faceTriIs(mesh); const FixedList<point, 4> tet = { mesh.cellCentres()[cI], mesh.points()[triIs[0]], mesh.points()[triIs[1]], mesh.points()[triIs[2]] }; const FixedList<scalar, 4> level = { levelC[cI], levelP[triIs[0]], levelP[triIs[1]], levelP[triIs[2]] }; const cut::volumeIntegrateOp<Type> positive = FixedList<Type, 4> ({ positiveC[cI], positiveP[triIs[0]], positiveP[triIs[1]], positiveP[triIs[2]] }); const cut::volumeIntegrateOp<Type> negative = FixedList<Type, 4> ({ negativeC[cI], negativeP[triIs[0]], negativeP[triIs[1]], negativeP[triIs[2]] }); v += cut::volumeOp()(tet); r += tetCut(tet, level, positive, negative); } result[cI] = r/v; } return tResult; }
Foam::tmp<Foam::Field<Type>> Foam::levelSetAverage ( const fvPatch& patch, const scalarField& levelF, const scalarField& levelP, const Field<Type>& positiveF, const Field<Type>& positiveP, const Field<Type>& negativeF, const Field<Type>& negativeP ) { typedef typename outerProduct<Type, vector>::type sumType; tmp<Field<Type>> tResult(new Field<Type>(patch.size(), Zero)); Field<Type>& result = tResult.ref(); forAll(result, fI) { const face& f = patch.patch().localFaces()[fI]; vector a = vector::zero; sumType r = Zero; for(label eI = 0; eI < f.size(); ++ eI) { const edge e = f.faceEdge(eI); const FixedList<point, 3> tri = { patch.patch().faceCentres()[fI], patch.patch().localPoints()[e[0]], patch.patch().localPoints()[e[1]] }; const FixedList<scalar, 3> level = { levelF[fI], levelP[e[0]], levelP[e[1]] }; const cut::areaIntegrateOp<Type> positive = FixedList<Type, 3> ({ positiveF[fI], positiveP[e[0]], positiveP[e[1]] }); const cut::areaIntegrateOp<Type> negative = FixedList<Type, 3> ({ negativeF[fI], negativeP[e[0]], negativeP[e[1]] }); a += cut::areaOp()(tri); r += triCut(tri, level, positive, negative); } result[fI] = a/magSqr(a) & r; } return tResult; }
openPlatypusSpace /*! The constructor */ ContactOrderObj::ContactOrderObj(Conf const & theConf, B const NeedHint) : Function(theConf.SysHdl(), NeedHint) { WatchError Warn(!(Energy::e().ModelId() != EnergyCls<HpEnergy>::ModelId || Energy::e().ModelId() != EnergyCls<MjEnergy>::ModelId || Energy::e().ModelId() != EnergyCls<BarerraEnergy>::ModelId), eEnergyMismatch); Dim tDimen = Space::Dimen(); Hdl tSysHdl = theConf.SysHdl(); Dim tSpan = Protein::p().Span(); Dim tLength = Protein::p().Length(); block1<Prm,nmm> tResult(tSpan * tLength / 2); Int tSqrNeighDist = Lattice::l().SqrNeighDist(); for(Pos tPos1 = 0; tPos1 < tSpan; ++tPos1) { //Typ tTyp1 = Protein::p().Type(tPos1); for(Pos tPos2 = tPos1 + 2; tPos2 < tLength; ++tPos2) { //Typ tTyp2 = Protein::p().Type(tPos2); //Eng tEng = Energy::e().Level(tTyp1, tTyp2); Pos tEng=tPos2-tPos1; //if(!tEng) continue; Prm tDiff[tDimen], tSqrd[tDimen]; for(Cmp tCmp = 0; tCmp < tDimen; ++tCmp) { Prm tVar1 = Prm(TermVar,tPos1 * tDimen + tCmp); Prm tVar2 = Prm(TermVar,tPos2 * tDimen + tCmp); tDiff[tCmp] = Prm(TermFunc,BsubXiFeVi::def(Xv, tSysHdl, tVar1, tVar2)); tSqrd[tCmp] = Prm(TermFunc,UsqrXiFeVi::def(Xv, tSysHdl, tDiff[tCmp])); } Prm tDist = Prm(TermFunc,SumXiFeVi::def(Xv, tSysHdl, tSqrd, tDimen)); Prm tEqu = Prm(TermFunc,UequXiFcMi::def(Xv, tSysHdl, tDist, UequXiFcMi::bind(tSqrNeighDist))); tResult.insert(Prm(TermFunc,UifXiKiFcMi::def(Xm, tSysHdl, tEqu, UifXiKiFcMi::bind(castInt(0), tEng)),MetricAsEvalMin)); } } if(NeedHint) { mFuncHdl = SumXiEFcMiHn::def(Xm | EvalMin, tSysHdl, tResult.items(), tResult.itemCount()); mMetricRec = &SumXiEFcMiHn::refc(tSysHdl, mFuncHdl).MetricRec(); } else { mFuncHdl = SumXiFcMi::def(Xm, tSysHdl, tResult.items(), tResult.itemCount()); mMetricRec = &SumXiFcMi::refc(tSysHdl, mFuncHdl).MetricRec(); } CatchError }