@@ -67,6 +67,7 @@ Description
6767#include "pisoControl.H"
6868#include "Foam2Eigen.H"
6969
70+
7071// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
7172
7273int main (int argc , char * argv [])
@@ -107,42 +108,132 @@ Foam::fvMesh& mesh = meshPtr();
107108
108109 #include "createFields.H"
109110
110- Info << p << endl ;
111-
112- Eigen ::MatrixXd p_eigen ;
111+ ////////// SCALAR FIELD TEST //////////
112+
113+ Eigen ::VectorXd p_eigen ;
113114 p_eigen = Foam2Eigen ::field2Eigen (p );
114- std ::cerr << p_eigen << std ::endl ;
115- p .ref ()[0 ] = 1 ;
116- Info << p << endl ;
117- Foam2Eigen ::Eigen2field (p , p_eigen );
115+
116+ Info << "\nOriginal p:\n" << endl ;
118117 Info << p << endl ;
119- Info << U << endl ;
120- Eigen ::VectorXd U_eigen = Foam2Eigen ::field2Eigen (U );
121- std ::cerr << U_eigen << std ::endl ;
122- U .ref ()[0 ] = vector ::zero ;
123- Info << U << endl ;
124- U = Foam2Eigen ::Eigen2field (U , U_eigen ,0 );
125- Info << U << endl ;
126- // Info << R << endl;
127118
119+ Info << "\nFirst two elements of p, by reference:\n" << endl ;
120+ std ::cerr << * (& p .ref ()[0 ]) << std ::endl ;
121+ std ::cerr << * (& p .ref ()[0 ]+ 1 ) << std ::endl ;
122+
123+ Info << "\nFirst two elements of p_eigen:\n" << endl ;
124+ std ::cerr << p_eigen (0 ) << std ::endl ;
125+ std ::cerr << p_eigen (1 ) << std ::endl ;
126+
127+ // Change p_eigen
128+ p_eigen (0 ) = 0.0 ;
129+ p = Foam2Eigen ::Eigen2field (p , p_eigen , false);
130+
131+ Info << "\nConverting back to field, after setting R_eigen(9) = 0.0 (First row, first column, second element):\n" << endl ;
132+ Info << * (& p .ref ()) << endl ;
128133
129- // Info << *(&U.ref()[0][0]) << endl;
130- // Info << *(&U.ref()[0][0]+1) << endl;
131- // Info << *(&U.ref()[0][0]+2) << endl;
132- // exit(0);
133-
134+ // uncomment lines below to test error handling for wrong size
135+ // Info << "\nConverting back to field with a resized p (3×3). Eigen2Field should throw an error:\n" << endl;
136+ // Eigen::MatrixXd p_eigen_r = Eigen::Map<Eigen::MatrixXd>((p_eigen.data()),3,3);
137+ // Foam2Eigen::Eigen2field(pp, p_eigen_r, false);
134138
135-
136- // Info << R[0] << endl;
139+ // Testing for BCs
140+ List < Eigen ::VectorXd > p_bc = Foam2Eigen ::field2EigenBC (p );
141+ Info << "\np_bc (Eigen Map):\n" << endl ;
142+ Info << p_bc << endl ;
143+ // exit(0);
137144
138-
145+ ////////// VECTOR FIELD TEST //////////
139146
140- // Info << U << endl;
141- // Info << *(&U.ref()[0][0]) << endl;
142- // Info << *(&U.ref()[0][0]+1) << endl;
143- // Info << *(&U.ref()[0][0]+2) << endl;
147+ Info << "\nOriginal U:\n" << endl ;
148+ Info << U << endl ;
149+ Eigen ::VectorXd U_eigen ;
150+ U_eigen = Foam2Eigen ::field2Eigen (U );
151+
152+ std ::cerr << "\nFirst 4 elements of U, by reference:\n" << std ::endl ;
153+ Info << * (& U .ref ()[0 ][0 ]) << endl ;
154+ Info << * (& U .ref ()[0 ][0 ]+ 1 ) << endl ;
155+ Info << * (& U .ref ()[0 ][0 ]+ 2 ) << endl ;
156+ Info << * (& U .ref ()[0 ][0 ]+ 3 ) << endl ;
157+
158+ std ::cerr << "\nFirst 4 elements of U_eigen:\n" << std ::endl ;
159+ std ::cerr << U_eigen (0 ) << std ::endl ;
160+ std ::cerr << U_eigen (1 ) << std ::endl ;
161+ std ::cerr << U_eigen (2 ) << std ::endl ;
162+ std ::cerr << U_eigen (3 ) << std ::endl ;
163+
164+ // Change U_eigen
165+ U_eigen (3 ) = 0.0 ;
166+ U = Foam2Eigen ::Eigen2field (U , U_eigen , false);
167+ std ::cerr << "\nConverting back to field:, after setting U_eigen(3) = 0.0 (second row, first column)\n" << std ::endl ;
168+ Info << U << endl ;
144169
145- Info << "End\n" << endl ;
170+ // uncomment lines below to test error handling for wrong size
171+ // Info << "\nConverting back to field with a resized U (9×3). Eigen2Field should throw an error:\n" << endl;
172+ // Eigen::MatrixXd U_eigen_r = Eigen::Map<Eigen::MatrixXd>((U_eigen.data()),3 ,9);
173+ // U_eigen_r.transposeInPlace();
174+ // std::cerr << U_eigen_r << std::endl;
175+ // volVectorField UU(U);
176+ // Foam2Eigen::Eigen2field(UU, U_eigen_r, false);
177+
178+ // Testing for BCs
179+ List < Eigen ::VectorXd > U_bc ;
180+ U_bc = Foam2Eigen ::field2EigenBC (U );
181+ Info << "\nU_bc (Eigen Map):\n" << endl ;
182+ Info << U_bc << endl ;
183+ // exit(0);
184+
185+ ////////// TENSOR FIELD TEST //////////
186+
187+ Eigen ::VectorXd R_eigen ;
188+ R_eigen = Foam2Eigen ::field2Eigen (R );
189+
190+ Info << "\nOriginal R\n" << endl ;
191+ Info << * (& R .ref ()) << endl ;
192+ Info << * (R .ref ().data ()) << endl ;
193+
194+ Info << "\nFirst row of first element:\n" << endl ;
195+ Info << * (& R .ref ()[0 ][0 ]) << endl ;
196+ Info << * (& R .ref ()[0 ][0 ]+ 1 ) << endl ;
197+ Info << * (& R .ref ()[0 ][0 ]+ 2 ) << endl ;
198+
199+ Info << "\nSecond row of first element:\n" << endl ;
200+ Info << * (& R .ref ()[0 ][0 ]+ 3 ) << endl ;
201+ Info << "\nFirst row of second element:\n" << endl ;
202+ Info << * (& R .ref ()[0 ][0 ]+ 9 ) << endl ;
203+
204+ Info << "\nR_eigen\n" << endl ;
205+ Info << "\nFirst three elements:\n" << endl ;
206+ Info << R_eigen (0 ) << endl ;
207+ Info << R_eigen (1 ) << endl ;
208+ Info << R_eigen (2 ) << endl ;
209+ Info << "\n4th element:\n" << endl ;
210+ Info << R_eigen (3 ) << endl ;
211+ Info << "\n9th element:\n" << endl ;
212+ Info << R_eigen (9 ) << endl ;
213+
214+ // Change R_eigen
215+ R_eigen (9 ) = 0.0 ;
216+ std ::cerr << "\nConverting back to field, after setting R_eigen(9) = 0.0 (First row, first column, second element):\n" << std ::endl ;
217+ R = Foam2Eigen ::Eigen2field (R , R_eigen , false);
218+ Info << R << endl ;
219+ // exit(0);
220+
221+ // uncomment lines below to test error handling for wrong size
222+ // Eigen::MatrixXd R_eigen_r = Eigen::Map<Eigen::MatrixXd>((R_eigen.data()),9 ,9);
223+ // R_eigen_r.transposeInPlace();
224+ // Info << "\nResized R_eigen:\n" << endl;
225+ // std::cerr << R_eigen_r << std::endl;
226+ // volTensorField RR(R);
227+ // Info << "\nConverting back to field with a resized U (9×9). Eigen2Field should throw an error:\n" << endl;
228+ // Foam2Eigen::Eigen2field(RR, R_eigen_r, false);
229+
230+ // Testing for BCs
231+ List < Eigen ::VectorXd > R_bc ;
232+ R_bc = Foam2Eigen ::field2EigenBC (R );
233+ Info << "\nR_bc (Eigen Map):\n" << endl ;
234+ Info << R_bc << endl ;
235+
236+ Info << "End\n" << endl ;
146237
147238 return 0 ;
148239}
0 commit comments