Skip to content

Commit 2830dea

Browse files
committed
Source_Residual shared reading optimizations.
1 parent 7586e7c commit 2830dea

5 files changed

Lines changed: 59 additions & 0 deletions

File tree

SU2_CFD/src/solvers/CEulerSolver.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2291,6 +2291,8 @@ void CEulerSolver::Source_Residual(CGeometry *geometry, CSolver **solver_contain
22912291
unsigned short iVar;
22922292
unsigned long iPoint;
22932293

2294+
AD::StartNoSharedReading();
2295+
22942296
if (body_force) {
22952297

22962298
/*--- Loop over all points ---*/
@@ -2345,13 +2347,17 @@ void CEulerSolver::Source_Residual(CGeometry *geometry, CSolver **solver_contain
23452347
END_SU2_OMP_FOR
23462348
}
23472349

2350+
AD::EndNoSharedReading();
2351+
23482352
if (axisymmetric) {
23492353

23502354
/*--- For viscous problems, we need an additional gradient. ---*/
23512355
if (viscous) {
23522356
ComputeAxisymmetricAuxGradients(geometry, config);
23532357
}
23542358

2359+
AD::StartNoSharedReading();
2360+
23552361
/*--- loop over points ---*/
23562362
SU2_OMP_FOR_DYN(omp_chunk_size)
23572363
for (iPoint = 0; iPoint < nPointDomain; iPoint++) {
@@ -2397,8 +2403,12 @@ void CEulerSolver::Source_Residual(CGeometry *geometry, CSolver **solver_contain
23972403
Jacobian.AddBlock2Diag(iPoint, residual.jacobian_i);
23982404
}
23992405
END_SU2_OMP_FOR
2406+
2407+
AD::EndNoSharedReading();
24002408
}
24012409

2410+
AD::StartNoSharedReading();
2411+
24022412
if (gravity) {
24032413

24042414
/*--- loop over points ---*/
@@ -2470,6 +2480,8 @@ void CEulerSolver::Source_Residual(CGeometry *geometry, CSolver **solver_contain
24702480
END_SU2_OMP_FOR
24712481
}
24722482

2483+
AD::EndNoSharedReading();
2484+
24732485
/*--- Check if a verification solution is to be computed. ---*/
24742486

24752487
if ( VerificationSolution ) {
@@ -2479,6 +2491,8 @@ void CEulerSolver::Source_Residual(CGeometry *geometry, CSolver **solver_contain
24792491
su2double time = 0.0;
24802492
if (config->GetTime_Marching() != TIME_MARCHING::STEADY) time = config->GetPhysicalTime();
24812493

2494+
AD::StartNoSharedReading();
2495+
24822496
/*--- Loop over points ---*/
24832497
SU2_OMP_FOR_DYN(omp_chunk_size)
24842498
for (iPoint = 0; iPoint < nPointDomain; iPoint++) {
@@ -2499,6 +2513,8 @@ void CEulerSolver::Source_Residual(CGeometry *geometry, CSolver **solver_contain
24992513
}
25002514
}
25012515
END_SU2_OMP_FOR
2516+
2517+
AD::EndNoSharedReading();
25022518
}
25032519
}
25042520

SU2_CFD/src/solvers/CIncEulerSolver.cpp

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1318,6 +1318,8 @@ void CIncEulerSolver::Source_Residual(CGeometry *geometry, CSolver **solver_cont
13181318
const bool streamwise_periodic = (config->GetKind_Streamwise_Periodic() != ENUM_STREAMWISE_PERIODIC::NONE);
13191319
const bool streamwise_periodic_temperature = config->GetStreamwise_Periodic_Temperature();
13201320

1321+
AD::StartNoSharedReading();
1322+
13211323
if (body_force) {
13221324

13231325
/*--- Loop over all points ---*/
@@ -1419,12 +1421,16 @@ void CIncEulerSolver::Source_Residual(CGeometry *geometry, CSolver **solver_cont
14191421
END_SU2_OMP_FOR
14201422
}
14211423

1424+
AD::EndNoSharedReading();
1425+
14221426
if (axisymmetric) {
14231427

14241428
/*--- For viscous problems, we need an additional gradient. ---*/
14251429

14261430
if (viscous) {
14271431

1432+
AD::StartNoSharedReading();
1433+
14281434
SU2_OMP_FOR_STAT(omp_chunk_size)
14291435
for (iPoint = 0; iPoint < nPoint; iPoint++) {
14301436

@@ -1443,6 +1449,8 @@ void CIncEulerSolver::Source_Residual(CGeometry *geometry, CSolver **solver_cont
14431449
}
14441450
END_SU2_OMP_FOR
14451451

1452+
AD::EndNoSharedReading();
1453+
14461454
/*--- Compute the auxiliary variable gradient with GG or WLS. ---*/
14471455

14481456
if (config->GetKind_Gradient_Method() == GREEN_GAUSS) {
@@ -1456,6 +1464,8 @@ void CIncEulerSolver::Source_Residual(CGeometry *geometry, CSolver **solver_cont
14561464

14571465
/*--- loop over points ---*/
14581466

1467+
AD::StartNoSharedReading();
1468+
14591469
SU2_OMP_FOR_STAT(omp_chunk_size)
14601470
for (iPoint = 0; iPoint < nPointDomain; iPoint++) {
14611471

@@ -1506,10 +1516,14 @@ void CIncEulerSolver::Source_Residual(CGeometry *geometry, CSolver **solver_cont
15061516

15071517
}
15081518
END_SU2_OMP_FOR
1519+
1520+
AD::EndNoSharedReading();
15091521
}
15101522

15111523
if (radiation) {
15121524

1525+
AD::StartNoSharedReading();
1526+
15131527
CNumerics* second_numerics = numerics_container[SOURCE_SECOND_TERM + omp_get_thread_num()*MAX_TERMS];
15141528

15151529
SU2_OMP_FOR_STAT(omp_chunk_size)
@@ -1550,20 +1564,25 @@ void CIncEulerSolver::Source_Residual(CGeometry *geometry, CSolver **solver_cont
15501564
}
15511565
END_SU2_OMP_FOR
15521566

1567+
AD::EndNoSharedReading();
15531568
}
15541569

15551570
if (streamwise_periodic) {
15561571

15571572
/*--- For turbulent streamwise periodic problems w/ energy eq, we need an additional gradient of Eddy viscosity. ---*/
15581573
if (streamwise_periodic_temperature && turbulent) {
15591574

1575+
AD::StartNoSharedReading();
1576+
15601577
SU2_OMP_FOR_STAT(omp_chunk_size)
15611578
for (iPoint = 0; iPoint < nPoint; iPoint++) {
15621579
/*--- Set the auxiliary variable, Eddy viscosity mu_t, for this node. ---*/
15631580
nodes->SetAuxVar(iPoint, 0, nodes->GetEddyViscosity(iPoint));
15641581
}
15651582
END_SU2_OMP_FOR
15661583

1584+
AD::EndNoSharedReading();
1585+
15671586
/*--- Compute the auxiliary variable gradient with GG or WLS. ---*/
15681587
if (config->GetKind_Gradient_Method() == GREEN_GAUSS) {
15691588
SetAuxVar_Gradient_GG(geometry, config);
@@ -1577,6 +1596,8 @@ void CIncEulerSolver::Source_Residual(CGeometry *geometry, CSolver **solver_cont
15771596
/*--- Set delta_p, m_dot, inlet_T, integrated_heat ---*/
15781597
numerics->SetStreamwisePeriodicValues(SPvals);
15791598

1599+
AD::StartNoSharedReading();
1600+
15801601
/*--- Loop over all points ---*/
15811602
SU2_OMP_FOR_STAT(omp_chunk_size)
15821603
for (iPoint = 0; iPoint < nPointDomain; iPoint++) {
@@ -1604,13 +1625,17 @@ void CIncEulerSolver::Source_Residual(CGeometry *geometry, CSolver **solver_cont
16041625
} // for iPoint
16051626
END_SU2_OMP_FOR
16061627

1628+
AD::EndNoSharedReading();
1629+
16071630
if(!streamwise_periodic_temperature && energy) {
16081631

16091632
CNumerics* second_numerics = numerics_container[SOURCE_SECOND_TERM + omp_get_thread_num()*MAX_TERMS];
16101633

16111634
/*--- Set delta_p, m_dot, inlet_T, integrated_heat ---*/
16121635
second_numerics->SetStreamwisePeriodicValues(SPvals);
16131636

1637+
AD::StartNoSharedReading();
1638+
16141639
/*--- This bit acts as a boundary condition rather than a source term. But logically it fits better here. ---*/
16151640
for (auto iMarker = 0ul; iMarker < config->GetnMarker_All(); iMarker++) {
16161641

@@ -1646,6 +1671,8 @@ void CIncEulerSolver::Source_Residual(CGeometry *geometry, CSolver **solver_cont
16461671
}// if periodic inlet boundary
16471672
}// for iMarker
16481673

1674+
AD::EndNoSharedReading();
1675+
16491676
}// if !streamwise_periodic_temperature
16501677
}// if streamwise_periodic
16511678

@@ -1658,6 +1685,8 @@ void CIncEulerSolver::Source_Residual(CGeometry *geometry, CSolver **solver_cont
16581685
su2double time = 0.0;
16591686
if (config->GetTime_Marching() != TIME_MARCHING::STEADY) time = config->GetPhysicalTime();
16601687

1688+
AD::StartNoSharedReading();
1689+
16611690
/*--- Loop over points ---*/
16621691
SU2_OMP_FOR_STAT(omp_chunk_size)
16631692
for (iPoint = 0; iPoint < nPointDomain; iPoint++) {
@@ -1679,6 +1708,8 @@ void CIncEulerSolver::Source_Residual(CGeometry *geometry, CSolver **solver_cont
16791708

16801709
}
16811710
END_SU2_OMP_FOR
1711+
1712+
AD::EndNoSharedReading();
16821713
}
16831714
}
16841715

SU2_CFD/src/solvers/CNEMOEulerSolver.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -840,6 +840,8 @@ void CNEMOEulerSolver::Source_Residual(CGeometry *geometry, CSolver **solver_con
840840
ComputeAxisymmetricAuxGradients(geometry,config);
841841
}
842842

843+
AD::StartNoSharedReading();
844+
843845
/*--- loop over interior points ---*/
844846
SU2_OMP_FOR_DYN(omp_chunk_size)
845847
for (iPoint = 0; iPoint < nPointDomain; iPoint++) {
@@ -965,6 +967,8 @@ void CNEMOEulerSolver::Source_Residual(CGeometry *geometry, CSolver **solver_con
965967
}
966968
END_SU2_OMP_FOR
967969

970+
AD::EndNoSharedReading();
971+
968972
/*--- Checking for NaN ---*/
969973
unsigned long eAxi_global = eAxi_local;
970974
unsigned long eChm_global = eChm_local;

SU2_CFD/src/solvers/CTurbSASolver.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -301,6 +301,8 @@ void CTurbSASolver::Source_Residual(CGeometry *geometry, CSolver **solver_contai
301301
/*--- Pick one numerics object per thread. ---*/
302302
CNumerics* numerics = numerics_container[SOURCE_FIRST_TERM + omp_get_thread_num()*MAX_TERMS];
303303

304+
AD::StartNoSharedReading();
305+
304306
/*--- Loop over all points. ---*/
305307

306308
SU2_OMP_FOR_DYN(omp_chunk_size)
@@ -400,6 +402,8 @@ void CTurbSASolver::Source_Residual(CGeometry *geometry, CSolver **solver_contai
400402
END_SU2_OMP_FOR
401403
}
402404

405+
AD::EndNoSharedReading();
406+
403407
}
404408

405409
void CTurbSASolver::Source_Template(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics,

SU2_CFD/src/solvers/CTurbSSTSolver.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,8 @@ void CTurbSSTSolver::Source_Residual(CGeometry *geometry, CSolver **solver_conta
291291

292292
/*--- Loop over all points. ---*/
293293

294+
AD::StartNoSharedReading();
295+
294296
SU2_OMP_FOR_DYN(omp_chunk_size)
295297
for (unsigned long iPoint = 0; iPoint < nPointDomain; iPoint++) {
296298

@@ -350,6 +352,8 @@ void CTurbSSTSolver::Source_Residual(CGeometry *geometry, CSolver **solver_conta
350352
}
351353
END_SU2_OMP_FOR
352354

355+
AD::EndNoSharedReading();
356+
353357
}
354358

355359
void CTurbSSTSolver::Source_Template(CGeometry *geometry, CSolver **solver_container, CNumerics *numerics,

0 commit comments

Comments
 (0)