@@ -78,6 +78,74 @@ FEPostModel* GetActivePostModel()
7878}
7979#endif
8080
81+ double PostIntegrateElements (FEPostModel& model, FSElemSet& set, ModelDataField& field, int component, int state)
82+ {
83+ FEState* ps = model.GetState (state);
84+ if (ps == nullptr )
85+ {
86+ throw pyGenericExcept (" Invalid state index." );
87+ }
88+
89+ FSMesh* mesh = set.GetMesh ();
90+ if (mesh == nullptr ) return 0.0 ;
91+ std::vector<int > elemList = set.CopyItems ();
92+
93+ // update the model's state
94+ Post::FEDataManager* DM = model.GetDataManager ();
95+ if (DM)
96+ {
97+ int dispField = DM->GetFieldCode (" displacement" );
98+ if (dispField >= 0 )
99+ {
100+ if (!model.EvaluateNodalPosition (dispField, state))
101+ {
102+ return 0.0 ;
103+ }
104+ }
105+ }
106+
107+ if (!model.Evaluate (field.GetFieldID () | component, state))
108+ {
109+ return 0.0 ;
110+ }
111+
112+ return Post::IntegrateElems (*mesh, elemList, ps);
113+ }
114+
115+ double PostIntegrateFaces (FEPostModel& model, FSSurface& surf, ModelDataField& field, int component, int state)
116+ {
117+ FEState* ps = model.GetState (state);
118+ if (ps == nullptr )
119+ {
120+ throw pyGenericExcept (" Invalid state index." );
121+ }
122+
123+ FSMesh* mesh = surf.GetMesh ();
124+ if (mesh == nullptr ) return 0.0 ;
125+ std::vector<int > elemList = surf.CopyItems ();
126+
127+ // update the model's state
128+ Post::FEDataManager* DM = model.GetDataManager ();
129+ if (DM)
130+ {
131+ int dispField = DM->GetFieldCode (" displacement" );
132+ if (dispField >= 0 )
133+ {
134+ if (!model.EvaluateNodalPosition (dispField, state))
135+ {
136+ return 0.0 ;
137+ }
138+ }
139+ }
140+
141+ if (!model.Evaluate (field.GetFieldID () | component, state, true ))
142+ {
143+ return 0.0 ;
144+ }
145+
146+ return Post::IntegrateFaces (*mesh, elemList, ps);
147+ }
148+
81149void init_FBSPost (py::module & m)
82150{
83151 py::module post = m.def_submodule (" post" , " Module used to interact with plot files" );
@@ -87,6 +155,9 @@ void init_FBSPost(py::module& m)
87155 post .def (" GetActiveModel" , &GetActivePostModel, " Returns the active FEPostModel instance." , py::return_value_policy::reference);
88156#endif
89157
158+ post .def (" IntegrateElements" , &PostIntegrateElements, " Integrates a data field over an element set." );
159+ post .def (" IntegrateFaces" , &PostIntegrateFaces , " Integrates a data field over a surface." );
160+
90161 InitStandardDataFields ();
91162 post .def (" AddStandardDataField" , pybind11::overload_cast<FEPostModel&, const std::string&>(&AddStandardDataField),
92163 " Adds a standard data field to the model." , py::arg (" model" ), py::arg (" dataField" ));
0 commit comments