@@ -39,9 +39,9 @@ void SbmFluidConditionDirichlet::CalculateAll(
3939 KRATOS_TRY
4040
4141 const auto & r_geometry = GetGeometry ();
42- const SizeType number_of_nodes = r_geometry.size ();
42+ const std:: size_t number_of_nodes = r_geometry.size ();
4343
44- const SizeType mat_size = number_of_nodes * (mDim +1 );
44+ const std:: size_t mat_size = number_of_nodes * (mDim +1 );
4545 // resizing as needed the LHS
4646 if (rLeftHandSideMatrix.size1 () != mat_size)
4747 rLeftHandSideMatrix.resize (mat_size,mat_size,false );
@@ -113,16 +113,25 @@ void SbmFluidConditionDirichlet::CalculateAll(
113113 stress_old (1 , 0 ) = r_stress_vector[2 ]; stress_old (1 , 1 ) = r_stress_vector[1 ];
114114 Vector traction_old_iteration = prod (stress_old, n_tensor); // This results in a 2x1 vector.
115115
116+ Matrix DB_contribution_w = ZeroMatrix (2 , 2 );
117+ Matrix DB_contribution = ZeroMatrix (2 , 2 );
118+
116119 for (IndexType i = 0 ; i < number_of_nodes; i++) {
117- for (IndexType j = 0 ; j < number_of_nodes; j++) {
118- for (IndexType idim = 0 ; idim < 2 ; idim++) {
120+ for (IndexType idim = 0 ; idim < 2 ; idim++) {
121+ DB_contribution_w (0 , 0 ) = DB_voigt (0 , 2 *i+idim);
122+ DB_contribution_w (0 , 1 ) = DB_voigt (2 , 2 *i+idim);
123+ DB_contribution_w (1 , 0 ) = DB_voigt (2 , 2 *i+idim);
124+ DB_contribution_w (1 , 1 ) = DB_voigt (1 , 2 *i+idim);
125+
126+ for (IndexType j = 0 ; j < number_of_nodes; j++) {
127+ // Compute the traction vector: sigma * n.
128+ Vector traction_nitsche_w = prod (DB_contribution_w, n_tensor);
119129
120130 // Penalty term
121131 rLeftHandSideMatrix (3 *i+idim, 3 *j+idim) += mHsum (0 ,i)*mHsum (0 ,j)* penalty_integration;
122132
123133 for (IndexType jdim = 0 ; jdim < 2 ; jdim++) {
124134 // Extract the 2x2 block for the control point i from the sigma matrix.
125- Matrix DB_contribution = ZeroMatrix (2 , 2 );
126135 DB_contribution (0 , 0 ) = DB_voigt (0 , 2 *j+jdim);
127136 DB_contribution (0 , 1 ) = DB_voigt (2 , 2 *j+jdim);
128137 DB_contribution (1 , 0 ) = DB_voigt (2 , 2 *j+jdim);
@@ -134,12 +143,16 @@ void SbmFluidConditionDirichlet::CalculateAll(
134143 rLeftHandSideMatrix (3 *i+idim, 3 *j+jdim) -= H (0 , i) * traction (idim) * integration_weight;
135144
136145 // skew-symmetric Nitsche term
137- rLeftHandSideMatrix (3 *j+jdim , 3 *i+idim ) += mHsum (0 , i ) * traction (idim ) * integration_weight;
146+ rLeftHandSideMatrix (3 *i+idim , 3 *j+jdim ) += mHsum (0 , j ) * traction_nitsche_w (jdim ) * integration_weight;
138147 }
139148
140149 // integration by parts PRESSURE
141150 rLeftHandSideMatrix (3 *i+idim, 3 *j+2 ) += H (0 ,j)* ( H (0 ,i) * mNormalParameterSpace [idim] )
142151 * integration_weight;
152+
153+ // Nitsche term --> q term
154+ rLeftHandSideMatrix (3 *j+mDim , 3 *i+idim) -= H (0 ,j)* ( mHsum (0 ,i) * mNormalParameterSpace [idim] )
155+ * integration_weight;
143156 }
144157 }
145158
@@ -153,14 +166,18 @@ void SbmFluidConditionDirichlet::CalculateAll(
153166 rRightHandSideVector (3 *i+idim) -= pressure_old_iteration * ( H (0 ,i) * mNormalParameterSpace [idim] ) * integration_weight;
154167
155168 // skew-symmetric Nitsche term
156- Matrix DB_contribution = ZeroMatrix (2 , 2 ); // Extract the 2x2 block for the control point i from the DB_voigt.
157169 DB_contribution (0 , 0 ) = DB_voigt (0 , 2 *i+idim);
158170 DB_contribution (0 , 1 ) = DB_voigt (2 , 2 *i+idim);
159171 DB_contribution (1 , 0 ) = DB_voigt (2 , 2 *i+idim);
160172 DB_contribution (1 , 1 ) = DB_voigt (1 , 2 *i+idim);
161173 // Compute the traction vector: sigma * n.
162174 Vector traction = prod (DB_contribution, n_tensor);
163- rRightHandSideVector (3 *i+idim) -= velocity_old_iteration[idim] * traction (idim) * integration_weight;
175+ for (IndexType jdim = 0 ; jdim < mDim ; jdim++) {
176+ rRightHandSideVector (3 *i+idim) -= velocity_old_iteration[jdim] * traction (jdim) * integration_weight;
177+ }
178+ // Nitsche term --> q term
179+ rRightHandSideVector (3 *i+mDim ) += velocity_old_iteration[idim] * ( H (0 ,i) * mNormalParameterSpace [idim] )
180+ * integration_weight;
164181 }
165182 }
166183
@@ -184,7 +201,11 @@ void SbmFluidConditionDirichlet::CalculateAll(
184201 // Compute the traction vector: sigma * n.
185202 Vector traction = prod (sigma_block, n_tensor);
186203 // skew-symmetric Nitsche term
187- rRightHandSideVector[3 *i+idim] += u_D[idim] * traction (idim) * integration_weight;
204+ for (IndexType jdim = 0 ; jdim < mDim ; jdim++) {
205+ rRightHandSideVector[3 *i+idim] += u_D[jdim] * traction (jdim) * integration_weight;
206+ }
207+ // Nitsche term --> q term
208+ rRightHandSideVector[3 *i+mDim ] -= u_D[idim] * H (0 ,i)*mNormalParameterSpace [idim] * integration_weight;
188209
189210 }
190211 }
@@ -230,7 +251,7 @@ void SbmFluidConditionDirichlet::InitializeMemberVariables()
230251void SbmFluidConditionDirichlet::InitializeSbmMemberVariables ()
231252{
232253 const auto & r_geometry = this ->GetGeometry ();
233- const SizeType number_of_nodes = r_geometry.size ();
254+ const std:: size_t number_of_nodes = r_geometry.size ();
234255
235256 // Retrieve projection
236257 Condition candidate_closest_skin_segment_1 = this ->GetValue (NEIGHBOUR_CONDITIONS)[0 ] ;
@@ -285,8 +306,8 @@ void SbmFluidConditionDirichlet::CalculateB(
285306 Matrix& rB,
286307 const ShapeDerivativesType& r_DN_DX) const
287308{
288- const SizeType number_of_control_points = GetGeometry ().size ();
289- const SizeType mat_size = number_of_control_points * 2 ; // Only 2 DOFs per node in 2D
309+ const std:: size_t number_of_control_points = GetGeometry ().size ();
310+ const std:: size_t mat_size = number_of_control_points * 2 ; // Only 2 DOFs per node in 2D
290311
291312 // Resize B matrix to 3 rows (strain vector size) and appropriate number of columns
292313 if (rB.size1 () != 3 || rB.size2 () != mat_size)
@@ -311,7 +332,7 @@ void SbmFluidConditionDirichlet::ApplyConstitutiveLaw(
311332 ConstitutiveLaw::Parameters& rValues,
312333 ConstitutiveVariables& rConstitutiveVariables) const
313334{
314- const SizeType number_of_nodes = GetGeometry ().size ();
335+ const std:: size_t number_of_nodes = GetGeometry ().size ();
315336
316337 // Set constitutive law flags:
317338 Flags& ConstitutiveLawOptions=rValues.GetOptions ();
@@ -355,7 +376,7 @@ int SbmFluidConditionDirichlet::Check(const ProcessInfo& rCurrentProcessInfo) co
355376void SbmFluidConditionDirichlet::EquationIdVector (EquationIdVectorType &rResult, const ProcessInfo &rCurrentProcessInfo) const
356377{
357378 const GeometryType& rGeom = this ->GetGeometry ();
358- const SizeType number_of_control_points = GetGeometry ().size ();
379+ const std:: size_t number_of_control_points = GetGeometry ().size ();
359380 const unsigned int LocalSize = (mDim + 1 ) * number_of_control_points;
360381
361382 if (rResult.size () != LocalSize)
@@ -379,7 +400,7 @@ void SbmFluidConditionDirichlet::GetDofList(
379400{
380401 KRATOS_TRY;
381402
382- const SizeType number_of_control_points = GetGeometry ().size ();
403+ const std:: size_t number_of_control_points = GetGeometry ().size ();
383404
384405 rElementalDofList.resize (0 );
385406 rElementalDofList.reserve ((mDim + 1 ) * number_of_control_points);
@@ -397,8 +418,8 @@ void SbmFluidConditionDirichlet::GetDofList(
397418void SbmFluidConditionDirichlet::GetSolutionCoefficientVector (
398419 Vector& rValues) const
399420{
400- const SizeType number_of_control_points = GetGeometry ().size ();
401- const SizeType mat_size = number_of_control_points * mDim ;
421+ const std:: size_t number_of_control_points = GetGeometry ().size ();
422+ const std:: size_t mat_size = number_of_control_points * mDim ;
402423
403424 if (rValues.size () != mat_size)
404425 rValues.resize (mat_size, false );
0 commit comments