Research Article

Parallelization of an Unsteady ALE Solver with Deforming Mesh Using OpenACC

Listing 2

OpenACC implementation of the unsteady solver.
Allocates memory on CPU and initialization
() alloc_mem_init(data_pointer1,data_pointer2, …);
() #pragma acc data create()
() #pragma acc data copyin()
()
()
() Set_Time_Step(nNds,nEgs,lambda_inv,lambda_visc, …);
() Compute_Grident_Limiter(nNds,nEgs,edgeLn,edgeRn,den,denU,denV,denW,denE, …);
() Upwind_Residual(⋯);Viscous_Residual(⋯); Time_Advance(⋯);
()
() #pragma acc data update(cgvar_arr_1,cgvar_arr_2, …)
example of one function
void Set_Time_Step(nNds,nEgs,lambda_inv,lambda_visc, …)
() #pragma acc parallel loop present,
()    for ()
()     iPoint=edgeLn[iEdge];
()     jPoint=edgeRn[iEdge];
()     ⋯
()     #pragma acc atomic
()     lambda_inv[iPoint]+=lambda;
()     #pargma acc atomic
()     lambda_inv[jPoint]+=lambda;
()      ⋯
()